From 851c4527829d57a47c07e468d57be3a6ffda531a Mon Sep 17 00:00:00 2001 From: Nikos Kontakis Date: Tue, 15 Jun 2021 13:25:57 +0300 Subject: [PATCH] =?UTF-8?q?add=20new=20type=20in=20api=20-=20settings=20in?= =?UTF-8?q?=20order=20to=20support=20different=20types=20of=E2=80=A6=20(#4?= =?UTF-8?q?76)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add new type in api - settings in order to support different types of 'urls' - json-rpc and substrate-connect; This makes the previous used apiURL deprecated * Alter name from apiTypeUrl to apiType * export types of possible endpoints * minor fix on sequence of vars * Fix lint error concerning imports * Fix lint error concerning imports * Fix PR comments: import types instead of import; seperate types from settings * fix lint error * Update packages/ui-settings/src/types.ts Co-authored-by: Jaco Co-authored-by: Jaco --- packages/ui-settings/src/Settings.ts | 13 ++++++++++++- packages/ui-settings/src/types.ts | 8 ++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/packages/ui-settings/src/Settings.ts b/packages/ui-settings/src/Settings.ts index f33c72f3..40b8449a 100644 --- a/packages/ui-settings/src/Settings.ts +++ b/packages/ui-settings/src/Settings.ts @@ -1,7 +1,7 @@ // Copyright 2017-2021 @polkadot/ui-settings authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { Option, SettingsStruct } from './types'; +import type { Endpoint, EndpointType, Option, SettingsStruct } from './types'; import EventEmitter from 'eventemitter3'; import store from 'store'; @@ -24,6 +24,9 @@ function withDefault (options: Option[], option: string | undefined, fallback: s export class Settings implements SettingsStruct { readonly #emitter: EventEmitter; + #apiType: Endpoint; + + // will become deprecated for supporting substrate connect light clients. apiType structure should be used instead #apiUrl: string; #camera: string; @@ -47,7 +50,9 @@ export class Settings implements SettingsStruct { this.#emitter = new EventEmitter(); + // will become deprecated for supporting substrate connect light clients. apiType structure should be used instead this.#apiUrl = (typeof settings.apiUrl === 'string' && settings.apiUrl) || process.env.WS_URL || (ENDPOINT_DEFAULT.value as string); + this.#apiType = { param: this.#apiUrl, type: 'json-rpc' as EndpointType }; this.#camera = withDefault(CAMERA, settings.camera, CAMERA_DEFAULT); this.#ledgerConn = withDefault(LEDGER_CONN, settings.ledgerConn, LEDGER_CONN_DEFAULT); this.#i18nLang = settings.i18nLang || LANGUAGE_DEFAULT; @@ -62,6 +67,10 @@ export class Settings implements SettingsStruct { return this.#camera; } + public get apiType (): Endpoint { + return this.#apiType; + } + public get apiUrl (): string { return this.#apiUrl; } @@ -140,6 +149,7 @@ export class Settings implements SettingsStruct { public get (): SettingsStruct { return { + apiType: this.#apiType, apiUrl: this.#apiUrl, camera: this.#camera, i18nLang: this.#i18nLang, @@ -153,6 +163,7 @@ export class Settings implements SettingsStruct { } public set (settings: Partial): void { + this.#apiType = settings.apiType || this.#apiType; this.#apiUrl = settings.apiUrl || this.#apiUrl; this.#camera = settings.camera || this.#camera; this.#ledgerConn = settings.ledgerConn || this.#ledgerConn; diff --git a/packages/ui-settings/src/types.ts b/packages/ui-settings/src/types.ts index a11124b0..1c3d57d1 100644 --- a/packages/ui-settings/src/types.ts +++ b/packages/ui-settings/src/types.ts @@ -9,6 +9,7 @@ export type Option = { } export interface SettingsStruct { + apiType: Endpoint; apiUrl: string; camera: string; i18nLang: string; @@ -28,3 +29,10 @@ export interface NetworkSpecsStruct { title: string; unit: string; } + +export interface Endpoint { + type: EndpointType; + param: string; +} + +export type EndpointType = 'json-rpc' | 'substrate-connect';