diff --git a/packages/ui-keyring/package.json b/packages/ui-keyring/package.json index 9fec0301..e6b808e3 100644 --- a/packages/ui-keyring/package.json +++ b/packages/ui-keyring/package.json @@ -20,7 +20,7 @@ }, "devDependencies": { "@polkadot/keyring": "^1.4.1", - "@polkadot/types": "^0.93.0-beta.2", + "@polkadot/types": "^0.93.0-beta.3", "@polkadot/util": "^1.4.1" }, "peerDependencies": { diff --git a/packages/ui-keyring/src/observable/genericSubject.ts b/packages/ui-keyring/src/observable/genericSubject.ts index 1ed2d694..2c92f54c 100644 --- a/packages/ui-keyring/src/observable/genericSubject.ts +++ b/packages/ui-keyring/src/observable/genericSubject.ts @@ -41,7 +41,8 @@ export default function genericSubject (keyCreator: (address: string) => string, option: createOptionItem(address, json.meta.name) }; - if (!json.meta.isInjected && (!json.meta.isTesting || development.isDevelopment())) { + // we do not store dev accounts, injected or hardware (the latter two are external/transient) + if (!json.meta.isInjected && !json.meta.isHardware && (!json.meta.isTesting || development.isDevelopment())) { store.set(keyCreator(address), json); } diff --git a/packages/ui-keyring/src/types.ts b/packages/ui-keyring/src/types.ts index 9c62ab4d..9718c532 100644 --- a/packages/ui-keyring/src/types.ts +++ b/packages/ui-keyring/src/types.ts @@ -30,6 +30,8 @@ export interface KeyringOptions extends KeyringOptionsBase { export interface KeyringJson$Meta { contract?: ContractMeta; genesisHash?: string | null; + hardwareType?: 'ledger'; + isHardware?: boolean; isInjected?: boolean; isRecent?: boolean; isTesting?: boolean; diff --git a/packages/ui-settings/src/Settings.ts b/packages/ui-settings/src/Settings.ts index ec70ce00..0ec5301c 100644 --- a/packages/ui-settings/src/Settings.ts +++ b/packages/ui-settings/src/Settings.ts @@ -5,7 +5,7 @@ import store from 'store'; import { isUndefined } from '@polkadot/util'; -import { CRYPTOS, ENDPOINT_DEFAULT, ENDPOINTS, ICON_DEFAULT, ICONS, LANGUAGE_DEFAULT, LANGUAGES, LOCKING_DEFAULT, LOCKING, PREFIX_DEFAULT, PREFIXES, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './defaults'; +import { CRYPTOS, ENDPOINT_DEFAULT, ENDPOINTS, ICON_DEFAULT, ICONS, LANGUAGE_DEFAULT, LANGUAGES, LEDGER_CONN, LEDGER_CONN_DEFAULT, LOCKING_DEFAULT, LOCKING, PREFIX_DEFAULT, PREFIXES, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './defaults'; import { Option, SettingsStruct } from './types'; export class Settings implements SettingsStruct { @@ -15,6 +15,8 @@ export class Settings implements SettingsStruct { private _icon: string; + private _ledgerConn: string; + private _locking: string; private _prefix: number; @@ -27,6 +29,7 @@ export class Settings implements SettingsStruct { const settings = store.get('settings') || {}; this._apiUrl = settings.apiUrl || process.env.WS_URL || ENDPOINT_DEFAULT; + this._ledgerConn = settings.ledgerConn || LEDGER_CONN_DEFAULT; this._i18nLang = settings.i18nLang || LANGUAGE_DEFAULT; this._icon = settings.icon || ICON_DEFAULT; this._locking = settings.locking || LOCKING_DEFAULT; @@ -47,6 +50,10 @@ export class Settings implements SettingsStruct { return this._icon; } + public get ledgerConn (): string { + return this._ledgerConn; + } + public get locking (): string { return this._locking; } @@ -75,6 +82,10 @@ export class Settings implements SettingsStruct { return LANGUAGES; } + public get availableLedgerConn (): Option[] { + return LEDGER_CONN; + } + public get availableLocking (): Option[] { return LOCKING; } @@ -100,6 +111,7 @@ export class Settings implements SettingsStruct { apiUrl: this._apiUrl, i18nLang: this._i18nLang, icon: this._icon, + ledgerConn: this._ledgerConn, locking: this._locking, prefix: this._prefix, uiMode: this._uiMode, @@ -109,6 +121,7 @@ export class Settings implements SettingsStruct { public set (settings: Partial): void { this._apiUrl = settings.apiUrl || this._apiUrl; + this._ledgerConn = settings.ledgerConn || this._ledgerConn; this._i18nLang = settings.i18nLang || this._i18nLang; this._icon = settings.icon || this._icon; this._locking = settings.locking || this._locking; diff --git a/packages/ui-settings/src/defaults/index.ts b/packages/ui-settings/src/defaults/index.ts index b33a6b65..e90e54f5 100644 --- a/packages/ui-settings/src/defaults/index.ts +++ b/packages/ui-settings/src/defaults/index.ts @@ -6,6 +6,7 @@ import { Option } from '../types'; import { CRYPTOS } from './crypto'; import { ENDPOINTS, ENDPOINT_DEFAULT } from './endpoints'; +import { LEDGER_CONN, LEDGER_CONN_DEFAULT } from './ledger'; import { PREFIXES, PREFIX_DEFAULT } from './ss58'; import { ICON_DEFAULT, ICON_DEFAULT_HOST, ICONS, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './ui'; @@ -43,6 +44,8 @@ export { ICONS, LANGUAGE_DEFAULT, LANGUAGES, + LEDGER_CONN_DEFAULT, + LEDGER_CONN, LOCKING_DEFAULT, LOCKING, PREFIX_DEFAULT, diff --git a/packages/ui-settings/src/defaults/ledger.ts b/packages/ui-settings/src/defaults/ledger.ts new file mode 100644 index 00000000..39109484 --- /dev/null +++ b/packages/ui-settings/src/defaults/ledger.ts @@ -0,0 +1,25 @@ +// Copyright 2017-2019 @polkadot/ui-settings authors & contributors +// This software may be modified and distributed under the terms +// of the Apache-2.0 license. See the LICENSE file for details. + +import { Option } from '../types'; + +export const LEDGER_CONN_DEFAULT = 'none'; + +export const LEDGER_CONN: Option[] = [ + { + info: 'none', + text: 'Do not attach Ledger devices', + value: 'none' + }, + { + info: 'u2f', + text: 'Attach Ledger via U2F', + value: 'u2f' + }, + { + info: 'webusb', + text: 'Attach Ledger via WebUSB', + value: 'webusb' + } +]; diff --git a/packages/ui-settings/src/types.ts b/packages/ui-settings/src/types.ts index 2dfa19ba..ab0c7154 100644 --- a/packages/ui-settings/src/types.ts +++ b/packages/ui-settings/src/types.ts @@ -13,6 +13,7 @@ export interface SettingsStruct { apiUrl: string; i18nLang: string; icon: string; + ledgerConn: string; locking: string; prefix: number; uiMode: string; diff --git a/yarn.lock b/yarn.lock index 1a10a30c..73bcba75 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2099,10 +2099,10 @@ dependencies: "@types/chrome" "^0.0.88" -"@polkadot/types@^0.93.0-beta.2": - version "0.93.0-beta.2" - resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-0.93.0-beta.2.tgz#107c803fe349854f6af6de48961d8461d3230204" - integrity sha512-05dWMROnjlFI3BG6PBc0YAOZQyTURQGtgAgGZYjOMrT/9CiuG64migc1GEUBkt/vWPUZ9Rgx6rt92HtANL4pwQ== +"@polkadot/types@^0.93.0-beta.3": + version "0.93.0-beta.3" + resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-0.93.0-beta.3.tgz#2a5843c35b3fb3369390e66236ff20968099b9fe" + integrity sha512-RlwhdtnQXq9yHgNwQJ2Rnl0RtklGucPFJE2in6gCNrvAE9V+KbJqXrwGtCqbt/CmGySTZclaL9yJ9Qzg1JgS1w== dependencies: "@babel/runtime" "^7.6.0" "@polkadot/util" "^1.4.1"