From 7b1f70e2777455b93deb73ef8400ae361ae9e3c8 Mon Sep 17 00:00:00 2001 From: wirednkod Date: Tue, 1 Jun 2021 14:11:06 +0300 Subject: [PATCH 1/9] 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 --- packages/ui-settings/src/Settings.ts | 13 ++++++++++++- packages/ui-settings/src/types.ts | 17 +++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/ui-settings/src/Settings.ts b/packages/ui-settings/src/Settings.ts index f33c72f3f1..51aee3bd3d 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 { Option, SettingsStruct, Endpoint, EndpointType } 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; + #apiTypeUrl: Endpoint; + + // will become deprecated for supporting substrate connect light clients. apiTypeUrl structure should be used instead #apiUrl: string; #camera: string; @@ -47,6 +50,8 @@ export class Settings implements SettingsStruct { this.#emitter = new EventEmitter(); + this.#apiTypeUrl = { type: EndpointType.jrpc, url: this.#apiUrl }; + // will become deprecated for supporting substrate connect light clients. apiTypeUrl structure should be used instead this.#apiUrl = (typeof settings.apiUrl === 'string' && settings.apiUrl) || process.env.WS_URL || (ENDPOINT_DEFAULT.value as string); this.#camera = withDefault(CAMERA, settings.camera, CAMERA_DEFAULT); this.#ledgerConn = withDefault(LEDGER_CONN, settings.ledgerConn, LEDGER_CONN_DEFAULT); @@ -62,6 +67,10 @@ export class Settings implements SettingsStruct { return this.#camera; } + public get apiTypeUrl (): Endpoint { + return this.#apiTypeUrl; + } + public get apiUrl (): string { return this.#apiUrl; } @@ -140,6 +149,7 @@ export class Settings implements SettingsStruct { public get (): SettingsStruct { return { + apiTypeUrl: this.#apiTypeUrl, apiUrl: this.#apiUrl, camera: this.#camera, i18nLang: this.#i18nLang, @@ -153,6 +163,7 @@ export class Settings implements SettingsStruct { } public set (settings: Partial): void { + this.#apiTypeUrl = settings.apiTypeUrl || this.#apiTypeUrl; 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 a11124b07b..5eb1d2dfc7 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 { + apiTypeUrl: Endpoint; apiUrl: string; camera: string; i18nLang: string; @@ -28,3 +29,19 @@ export interface NetworkSpecsStruct { title: string; unit: string; } + +export type Endpoint = JsonRpcEndpoint | SubstrateConnectEndpoint; +export interface JsonRpcEndpoint { + type: EndpointType.jrpc; + url: string; +} + +export interface SubstrateConnectEndpoint { + type: EndpointType.substrateconnect; + chain: string; +} + +export enum EndpointType { + jrpc = 'json-rpc', + substrateconnect = 'substrate-connect' +} From aa48a547844a85a61dbb32ea7be9b29574b5cabf Mon Sep 17 00:00:00 2001 From: wirednkod Date: Tue, 1 Jun 2021 15:03:29 +0300 Subject: [PATCH 2/9] Alter name from apiTypeUrl to apiType --- packages/ui-settings/src/Settings.ts | 16 ++++++++-------- packages/ui-settings/src/types.ts | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/ui-settings/src/Settings.ts b/packages/ui-settings/src/Settings.ts index 51aee3bd3d..aa3fcd4876 100644 --- a/packages/ui-settings/src/Settings.ts +++ b/packages/ui-settings/src/Settings.ts @@ -24,9 +24,9 @@ function withDefault (options: Option[], option: string | undefined, fallback: s export class Settings implements SettingsStruct { readonly #emitter: EventEmitter; - #apiTypeUrl: Endpoint; + #apiType: Endpoint; - // will become deprecated for supporting substrate connect light clients. apiTypeUrl structure should be used instead + // will become deprecated for supporting substrate connect light clients. apiType structure should be used instead #apiUrl: string; #camera: string; @@ -50,8 +50,8 @@ export class Settings implements SettingsStruct { this.#emitter = new EventEmitter(); - this.#apiTypeUrl = { type: EndpointType.jrpc, url: this.#apiUrl }; - // will become deprecated for supporting substrate connect light clients. apiTypeUrl structure should be used instead + this.#apiType = { type: EndpointType.jrpc, url: this.#apiUrl }; + // 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.#camera = withDefault(CAMERA, settings.camera, CAMERA_DEFAULT); this.#ledgerConn = withDefault(LEDGER_CONN, settings.ledgerConn, LEDGER_CONN_DEFAULT); @@ -67,8 +67,8 @@ export class Settings implements SettingsStruct { return this.#camera; } - public get apiTypeUrl (): Endpoint { - return this.#apiTypeUrl; + public get apiType (): Endpoint { + return this.#apiType; } public get apiUrl (): string { @@ -149,7 +149,7 @@ export class Settings implements SettingsStruct { public get (): SettingsStruct { return { - apiTypeUrl: this.#apiTypeUrl, + apiType: this.#apiType, apiUrl: this.#apiUrl, camera: this.#camera, i18nLang: this.#i18nLang, @@ -163,7 +163,7 @@ export class Settings implements SettingsStruct { } public set (settings: Partial): void { - this.#apiTypeUrl = settings.apiTypeUrl || this.#apiTypeUrl; + 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 5eb1d2dfc7..6b718957e0 100644 --- a/packages/ui-settings/src/types.ts +++ b/packages/ui-settings/src/types.ts @@ -9,7 +9,7 @@ export type Option = { } export interface SettingsStruct { - apiTypeUrl: Endpoint; + apiType: Endpoint; apiUrl: string; camera: string; i18nLang: string; From 0404d5dadd6900c62fdc2bd917e076e79901508e Mon Sep 17 00:00:00 2001 From: wirednkod Date: Tue, 1 Jun 2021 15:20:42 +0300 Subject: [PATCH 3/9] export types of possible endpoints --- packages/ui-settings/src/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/ui-settings/src/index.ts b/packages/ui-settings/src/index.ts index 28d3d5eee4..82510488e2 100644 --- a/packages/ui-settings/src/index.ts +++ b/packages/ui-settings/src/index.ts @@ -2,10 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 import { Settings, settings } from './Settings'; +import { Endpoint, JsonRpcEndpoint, SubstrateConnectEndpoint, EndpointType } from './types'; export { ENDPOINT_DEFAULT, ICON_DEFAULT, ICON_DEFAULT_HOST, LANGUAGE_DEFAULT, LOCKING_DEFAULT, PREFIX_DEFAULT, UIMODE_DEFAULT, UITHEME_DEFAULT } from './defaults'; export { packageInfo } from './packageInfo'; -export { settings, Settings }; +export { settings, Settings, Endpoint, JsonRpcEndpoint, SubstrateConnectEndpoint, EndpointType }; export default settings; From 1f1d6100b39fa71a1eb5957a71ce300c2bbd0d72 Mon Sep 17 00:00:00 2001 From: wirednkod Date: Tue, 1 Jun 2021 15:51:19 +0300 Subject: [PATCH 4/9] minor fix on sequence of vars --- packages/ui-settings/src/Settings.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui-settings/src/Settings.ts b/packages/ui-settings/src/Settings.ts index aa3fcd4876..2ecbf46ed6 100644 --- a/packages/ui-settings/src/Settings.ts +++ b/packages/ui-settings/src/Settings.ts @@ -50,9 +50,9 @@ export class Settings implements SettingsStruct { this.#emitter = new EventEmitter(); - this.#apiType = { type: EndpointType.jrpc, url: this.#apiUrl }; // 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 = { type: EndpointType.jrpc, url: this.#apiUrl }; this.#camera = withDefault(CAMERA, settings.camera, CAMERA_DEFAULT); this.#ledgerConn = withDefault(LEDGER_CONN, settings.ledgerConn, LEDGER_CONN_DEFAULT); this.#i18nLang = settings.i18nLang || LANGUAGE_DEFAULT; From 631d33e0a8f04fb8268a7317a490710ad124c9f7 Mon Sep 17 00:00:00 2001 From: wirednkod Date: Thu, 3 Jun 2021 09:04:54 +0300 Subject: [PATCH 5/9] Fix lint error concerning imports --- packages/ui-settings/src/Settings.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/ui-settings/src/Settings.ts b/packages/ui-settings/src/Settings.ts index 2ecbf46ed6..5346e95db0 100644 --- a/packages/ui-settings/src/Settings.ts +++ b/packages/ui-settings/src/Settings.ts @@ -1,14 +1,13 @@ // Copyright 2017-2021 @polkadot/ui-settings authors & contributors // SPDX-License-Identifier: Apache-2.0 -import { Option, SettingsStruct, Endpoint, EndpointType } from './types'; - import EventEmitter from 'eventemitter3'; import store from 'store'; import { isUndefined } from '@polkadot/util'; import { CAMERA, CAMERA_DEFAULT, CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER, ENDPOINT_DEFAULT, ENDPOINTS, ICON_DEFAULT, ICONS, LANGUAGE_DEFAULT, LEDGER_CONN, LEDGER_CONN_DEFAULT, LOCKING, LOCKING_DEFAULT, PREFIX_DEFAULT, PREFIXES, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './defaults'; +import { Endpoint, EndpointType, Option, SettingsStruct } from './types'; type ChangeCallback = (settings: SettingsStruct) => void; type OnTypes = 'change'; From c6497d65762272ab4e87a89c09b2b9f250e3a67a Mon Sep 17 00:00:00 2001 From: wirednkod Date: Thu, 3 Jun 2021 09:31:07 +0300 Subject: [PATCH 6/9] Fix lint error concerning imports --- packages/ui-settings/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui-settings/src/index.ts b/packages/ui-settings/src/index.ts index 82510488e2..5a7e031768 100644 --- a/packages/ui-settings/src/index.ts +++ b/packages/ui-settings/src/index.ts @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import { Settings, settings } from './Settings'; -import { Endpoint, JsonRpcEndpoint, SubstrateConnectEndpoint, EndpointType } from './types'; +import { Endpoint, EndpointType, JsonRpcEndpoint, SubstrateConnectEndpoint } from './types'; export { ENDPOINT_DEFAULT, ICON_DEFAULT, ICON_DEFAULT_HOST, LANGUAGE_DEFAULT, LOCKING_DEFAULT, PREFIX_DEFAULT, UIMODE_DEFAULT, UITHEME_DEFAULT } from './defaults'; export { packageInfo } from './packageInfo'; From 50ad848210c7d13efd78fc11fdba55c01a00c2ee Mon Sep 17 00:00:00 2001 From: wirednkod Date: Tue, 15 Jun 2021 12:56:29 +0300 Subject: [PATCH 7/9] Fix PR comments: import types instead of import; seperate types from settings --- packages/ui-settings/src/Settings.ts | 5 +++-- packages/ui-settings/src/index.ts | 3 +-- packages/ui-settings/src/types.ts | 17 ++++------------- 3 files changed, 8 insertions(+), 17 deletions(-) diff --git a/packages/ui-settings/src/Settings.ts b/packages/ui-settings/src/Settings.ts index 5346e95db0..bf3bee7f74 100644 --- a/packages/ui-settings/src/Settings.ts +++ b/packages/ui-settings/src/Settings.ts @@ -1,13 +1,14 @@ // Copyright 2017-2021 @polkadot/ui-settings authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { Endpoint, EndpointType, Option, SettingsStruct } from './types'; + import EventEmitter from 'eventemitter3'; import store from 'store'; import { isUndefined } from '@polkadot/util'; import { CAMERA, CAMERA_DEFAULT, CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER, ENDPOINT_DEFAULT, ENDPOINTS, ICON_DEFAULT, ICONS, LANGUAGE_DEFAULT, LEDGER_CONN, LEDGER_CONN_DEFAULT, LOCKING, LOCKING_DEFAULT, PREFIX_DEFAULT, PREFIXES, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './defaults'; -import { Endpoint, EndpointType, Option, SettingsStruct } from './types'; type ChangeCallback = (settings: SettingsStruct) => void; type OnTypes = 'change'; @@ -51,7 +52,7 @@ export class Settings implements SettingsStruct { // 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 = { type: EndpointType.jrpc, url: this.#apiUrl }; + this.#apiType = { type: 'json-rpc' as EndpointType, url: this.#apiUrl }; this.#camera = withDefault(CAMERA, settings.camera, CAMERA_DEFAULT); this.#ledgerConn = withDefault(LEDGER_CONN, settings.ledgerConn, LEDGER_CONN_DEFAULT); this.#i18nLang = settings.i18nLang || LANGUAGE_DEFAULT; diff --git a/packages/ui-settings/src/index.ts b/packages/ui-settings/src/index.ts index 5a7e031768..28d3d5eee4 100644 --- a/packages/ui-settings/src/index.ts +++ b/packages/ui-settings/src/index.ts @@ -2,11 +2,10 @@ // SPDX-License-Identifier: Apache-2.0 import { Settings, settings } from './Settings'; -import { Endpoint, EndpointType, JsonRpcEndpoint, SubstrateConnectEndpoint } from './types'; export { ENDPOINT_DEFAULT, ICON_DEFAULT, ICON_DEFAULT_HOST, LANGUAGE_DEFAULT, LOCKING_DEFAULT, PREFIX_DEFAULT, UIMODE_DEFAULT, UITHEME_DEFAULT } from './defaults'; export { packageInfo } from './packageInfo'; -export { settings, Settings, Endpoint, JsonRpcEndpoint, SubstrateConnectEndpoint, EndpointType }; +export { settings, Settings }; export default settings; diff --git a/packages/ui-settings/src/types.ts b/packages/ui-settings/src/types.ts index 6b718957e0..f1c4957836 100644 --- a/packages/ui-settings/src/types.ts +++ b/packages/ui-settings/src/types.ts @@ -30,18 +30,9 @@ export interface NetworkSpecsStruct { unit: string; } -export type Endpoint = JsonRpcEndpoint | SubstrateConnectEndpoint; -export interface JsonRpcEndpoint { - type: EndpointType.jrpc; - url: string; +export type Endpoint = { + type: EndpointType; + param: string; } -export interface SubstrateConnectEndpoint { - type: EndpointType.substrateconnect; - chain: string; -} - -export enum EndpointType { - jrpc = 'json-rpc', - substrateconnect = 'substrate-connect' -} +export type EndpointType = 'json-rpc' | 'substrate-connect'; From e55346bf3676c6474f620b4fd30dd4faed481645 Mon Sep 17 00:00:00 2001 From: wirednkod Date: Tue, 15 Jun 2021 13:01:25 +0300 Subject: [PATCH 8/9] fix lint error --- packages/ui-settings/src/Settings.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui-settings/src/Settings.ts b/packages/ui-settings/src/Settings.ts index bf3bee7f74..40b8449af2 100644 --- a/packages/ui-settings/src/Settings.ts +++ b/packages/ui-settings/src/Settings.ts @@ -52,7 +52,7 @@ export class Settings implements SettingsStruct { // 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 = { type: 'json-rpc' as EndpointType, url: this.#apiUrl }; + 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; From 02e2977d65ee1e9f6042e9a991029171b9ed7248 Mon Sep 17 00:00:00 2001 From: Nikos Kontakis Date: Tue, 15 Jun 2021 13:03:39 +0300 Subject: [PATCH 9/9] Update packages/ui-settings/src/types.ts Co-authored-by: Jaco --- packages/ui-settings/src/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui-settings/src/types.ts b/packages/ui-settings/src/types.ts index f1c4957836..1c3d57d1bc 100644 --- a/packages/ui-settings/src/types.ts +++ b/packages/ui-settings/src/types.ts @@ -30,7 +30,7 @@ export interface NetworkSpecsStruct { unit: string; } -export type Endpoint = { +export interface Endpoint { type: EndpointType; param: string; }