@pezkuwi/ui-settings 3.16.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -0
- package/build/LICENSE +201 -0
- package/build/README.md +40 -0
- package/build/Settings.d.ts +40 -0
- package/build/Settings.js +172 -0
- package/build/bundle-pezkuwi-ui-settings.js +1364 -0
- package/build/bundle.d.ts +5 -0
- package/build/bundle.js +5 -0
- package/build/cjs/Settings.d.ts +40 -0
- package/build/cjs/Settings.js +177 -0
- package/build/cjs/bundle.d.ts +5 -0
- package/build/cjs/bundle.js +19 -0
- package/build/cjs/defaults/chains.d.ts +3 -0
- package/build/cjs/defaults/chains.js +8 -0
- package/build/cjs/defaults/crypto.d.ts +4 -0
- package/build/cjs/defaults/crypto.js +35 -0
- package/build/cjs/defaults/endpoints.d.ts +3 -0
- package/build/cjs/defaults/endpoints.js +11 -0
- package/build/cjs/defaults/index.d.ts +15 -0
- package/build/cjs/defaults/index.js +80 -0
- package/build/cjs/defaults/ledger.d.ts +5 -0
- package/build/cjs/defaults/ledger.js +45 -0
- package/build/cjs/defaults/ss58.d.ts +3 -0
- package/build/cjs/defaults/ss58.js +16 -0
- package/build/cjs/defaults/type.d.ts +1 -0
- package/build/cjs/defaults/type.js +4 -0
- package/build/cjs/defaults/ui.d.ts +10 -0
- package/build/cjs/defaults/ui.js +62 -0
- package/build/cjs/index.d.ts +3 -0
- package/build/cjs/index.js +6 -0
- package/build/cjs/package.json +3 -0
- package/build/cjs/packageDetect.d.ts +1 -0
- package/build/cjs/packageDetect.js +5 -0
- package/build/cjs/packageInfo.d.ts +6 -0
- package/build/cjs/packageInfo.js +4 -0
- package/build/cjs/types.d.ts +35 -0
- package/build/cjs/types.js +2 -0
- package/build/defaults/chains.d.ts +3 -0
- package/build/defaults/chains.js +5 -0
- package/build/defaults/crypto.d.ts +4 -0
- package/build/defaults/crypto.js +32 -0
- package/build/defaults/endpoints.d.ts +3 -0
- package/build/defaults/endpoints.js +8 -0
- package/build/defaults/index.d.ts +15 -0
- package/build/defaults/index.js +58 -0
- package/build/defaults/ledger.d.ts +5 -0
- package/build/defaults/ledger.js +42 -0
- package/build/defaults/ss58.d.ts +3 -0
- package/build/defaults/ss58.js +13 -0
- package/build/defaults/type.d.ts +1 -0
- package/build/defaults/type.js +1 -0
- package/build/defaults/ui.d.ts +10 -0
- package/build/defaults/ui.js +59 -0
- package/build/index.d.ts +3 -0
- package/build/index.js +3 -0
- package/build/package.json +254 -0
- package/build/packageDetect.d.ts +1 -0
- package/build/packageDetect.js +3 -0
- package/build/packageInfo.d.ts +6 -0
- package/build/packageInfo.js +1 -0
- package/build/types.d.ts +35 -0
- package/build/types.js +1 -0
- package/build-tsc/Settings.d.ts +40 -0
- package/build-tsc/bundle.d.ts +5 -0
- package/build-tsc/defaults/chains.d.ts +3 -0
- package/build-tsc/defaults/crypto.d.ts +4 -0
- package/build-tsc/defaults/endpoints.d.ts +3 -0
- package/build-tsc/defaults/index.d.ts +15 -0
- package/build-tsc/defaults/ledger.d.ts +5 -0
- package/build-tsc/defaults/ss58.d.ts +3 -0
- package/build-tsc/defaults/type.d.ts +1 -0
- package/build-tsc/defaults/ui.d.ts +10 -0
- package/build-tsc/index.d.ts +3 -0
- package/build-tsc/packageDetect.d.ts +1 -0
- package/build-tsc/packageInfo.d.ts +6 -0
- package/build-tsc/types.d.ts +35 -0
- package/build-tsc-cjs/Settings.js +177 -0
- package/build-tsc-cjs/bundle.js +19 -0
- package/build-tsc-cjs/defaults/chains.js +8 -0
- package/build-tsc-cjs/defaults/crypto.js +35 -0
- package/build-tsc-cjs/defaults/endpoints.js +11 -0
- package/build-tsc-cjs/defaults/index.js +80 -0
- package/build-tsc-cjs/defaults/ledger.js +45 -0
- package/build-tsc-cjs/defaults/ss58.js +16 -0
- package/build-tsc-cjs/defaults/type.js +4 -0
- package/build-tsc-cjs/defaults/ui.js +62 -0
- package/build-tsc-cjs/index.js +6 -0
- package/build-tsc-cjs/packageDetect.js +5 -0
- package/build-tsc-cjs/packageInfo.js +4 -0
- package/build-tsc-cjs/types.js +2 -0
- package/build-tsc-esm/Settings.js +172 -0
- package/build-tsc-esm/bundle.js +5 -0
- package/build-tsc-esm/defaults/chains.js +5 -0
- package/build-tsc-esm/defaults/crypto.js +32 -0
- package/build-tsc-esm/defaults/endpoints.js +8 -0
- package/build-tsc-esm/defaults/index.js +58 -0
- package/build-tsc-esm/defaults/ledger.js +42 -0
- package/build-tsc-esm/defaults/ss58.js +13 -0
- package/build-tsc-esm/defaults/type.js +1 -0
- package/build-tsc-esm/defaults/ui.js +59 -0
- package/build-tsc-esm/index.js +3 -0
- package/build-tsc-esm/packageDetect.js +3 -0
- package/build-tsc-esm/packageInfo.js +1 -0
- package/build-tsc-esm/types.js +1 -0
- package/package.json +37 -0
- package/src/Settings.ts +236 -0
- package/src/bundle.ts +10 -0
- package/src/defaults/chains.ts +11 -0
- package/src/defaults/crypto.ts +39 -0
- package/src/defaults/endpoints.ts +14 -0
- package/src/defaults/index.ts +72 -0
- package/src/defaults/ledger.ts +50 -0
- package/src/defaults/ss58.ts +22 -0
- package/src/defaults/type.ts +5 -0
- package/src/defaults/ui.ts +73 -0
- package/src/index.ts +8 -0
- package/src/packageDetect.ts +11 -0
- package/src/packageInfo.ts +6 -0
- package/src/types.ts +42 -0
- package/tsconfig.build.json +9 -0
- package/tsconfig.build.tsbuildinfo +1 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { EventEmitter } from 'eventemitter3';
|
|
2
|
+
import store from 'store';
|
|
3
|
+
import { hasProcess, isUndefined } from '@pezkuwi/util';
|
|
4
|
+
import { CAMERA, CAMERA_DEFAULT, CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER, ENDPOINT_DEFAULT, ENDPOINTS, ICON_DEFAULT, ICONS, LANGUAGE_DEFAULT, LEDGER_APP, LEDGER_APP_DEFAULT, LEDGER_CONN, LEDGER_CONN_DEFAULT, LOCKING, LOCKING_DEFAULT, METADATA_UP, METADATA_UP_DEFAULT, NOTIFICATION_DEFAULT, PREFIX_DEFAULT, PREFIXES, STORAGE, STORAGE_DEFAULT, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './defaults/index.js';
|
|
5
|
+
function withDefault(options, option, fallback) {
|
|
6
|
+
const _option = option || fallback;
|
|
7
|
+
return options.some(({ value }) => value === _option)
|
|
8
|
+
? _option
|
|
9
|
+
: fallback;
|
|
10
|
+
}
|
|
11
|
+
export class Settings {
|
|
12
|
+
#emitter;
|
|
13
|
+
#apiType;
|
|
14
|
+
// will become deprecated for supporting substrate connect light clients. apiType structure should be used instead
|
|
15
|
+
#apiUrl;
|
|
16
|
+
#camera;
|
|
17
|
+
#i18nLang;
|
|
18
|
+
#icon;
|
|
19
|
+
#ledgerApp;
|
|
20
|
+
#ledgerConn;
|
|
21
|
+
#locking;
|
|
22
|
+
#metadataUp;
|
|
23
|
+
#prefix;
|
|
24
|
+
#storage;
|
|
25
|
+
#uiMode;
|
|
26
|
+
#uiTheme;
|
|
27
|
+
#notification;
|
|
28
|
+
constructor() {
|
|
29
|
+
const settings = store.get('settings') || {};
|
|
30
|
+
this.#emitter = new EventEmitter();
|
|
31
|
+
// will become deprecated for supporting substrate connect light clients. apiType structure should be used instead
|
|
32
|
+
this.#apiUrl = (typeof settings.apiUrl === 'string' && settings.apiUrl) || (hasProcess && process.env?.['WS_URL']) || ENDPOINT_DEFAULT.value;
|
|
33
|
+
this.#apiType = { param: this.#apiUrl, type: 'json-rpc' };
|
|
34
|
+
this.#camera = withDefault(CAMERA, settings.camera, CAMERA_DEFAULT);
|
|
35
|
+
this.#ledgerApp = withDefault(LEDGER_APP, settings.ledgerApp, LEDGER_APP_DEFAULT);
|
|
36
|
+
this.#ledgerConn = withDefault(LEDGER_CONN, settings.ledgerConn, LEDGER_CONN_DEFAULT);
|
|
37
|
+
this.#i18nLang = settings.i18nLang || LANGUAGE_DEFAULT;
|
|
38
|
+
this.#icon = settings.icon || ICON_DEFAULT;
|
|
39
|
+
this.#locking = settings.locking || LOCKING_DEFAULT;
|
|
40
|
+
this.#metadataUp = withDefault(METADATA_UP, settings.storage, METADATA_UP_DEFAULT);
|
|
41
|
+
this.#notification = settings.notification || NOTIFICATION_DEFAULT;
|
|
42
|
+
this.#prefix = isUndefined(settings.prefix) ? PREFIX_DEFAULT : settings.prefix;
|
|
43
|
+
this.#storage = withDefault(STORAGE, settings.storage, STORAGE_DEFAULT);
|
|
44
|
+
this.#uiMode = settings.uiMode || UIMODE_DEFAULT;
|
|
45
|
+
this.#uiTheme = settings.uiTheme || UITHEME_DEFAULT;
|
|
46
|
+
}
|
|
47
|
+
get camera() {
|
|
48
|
+
return this.#camera;
|
|
49
|
+
}
|
|
50
|
+
get apiType() {
|
|
51
|
+
return this.#apiType;
|
|
52
|
+
}
|
|
53
|
+
get apiUrl() {
|
|
54
|
+
return this.#apiUrl;
|
|
55
|
+
}
|
|
56
|
+
get i18nLang() {
|
|
57
|
+
return this.#i18nLang;
|
|
58
|
+
}
|
|
59
|
+
get icon() {
|
|
60
|
+
return this.#icon;
|
|
61
|
+
}
|
|
62
|
+
get notification() {
|
|
63
|
+
return this.#notification;
|
|
64
|
+
}
|
|
65
|
+
get ledgerApp() {
|
|
66
|
+
return this.#ledgerApp;
|
|
67
|
+
}
|
|
68
|
+
get ledgerConn() {
|
|
69
|
+
return this.#ledgerConn;
|
|
70
|
+
}
|
|
71
|
+
get locking() {
|
|
72
|
+
return this.#locking;
|
|
73
|
+
}
|
|
74
|
+
get metadataUp() {
|
|
75
|
+
return this.#metadataUp;
|
|
76
|
+
}
|
|
77
|
+
get prefix() {
|
|
78
|
+
return this.#prefix;
|
|
79
|
+
}
|
|
80
|
+
get storage() {
|
|
81
|
+
return this.#storage;
|
|
82
|
+
}
|
|
83
|
+
get uiMode() {
|
|
84
|
+
return this.#uiMode;
|
|
85
|
+
}
|
|
86
|
+
get uiTheme() {
|
|
87
|
+
return this.#uiTheme;
|
|
88
|
+
}
|
|
89
|
+
get availableCamera() {
|
|
90
|
+
return CAMERA;
|
|
91
|
+
}
|
|
92
|
+
get availableCryptos() {
|
|
93
|
+
return CRYPTOS;
|
|
94
|
+
}
|
|
95
|
+
get availableCryptosEth() {
|
|
96
|
+
return CRYPTOS_ETH;
|
|
97
|
+
}
|
|
98
|
+
get availableCryptosLedger() {
|
|
99
|
+
return CRYPTOS_LEDGER;
|
|
100
|
+
}
|
|
101
|
+
get availableIcons() {
|
|
102
|
+
return ICONS;
|
|
103
|
+
}
|
|
104
|
+
get availableLedgerApp() {
|
|
105
|
+
return LEDGER_APP;
|
|
106
|
+
}
|
|
107
|
+
get availableLedgerConn() {
|
|
108
|
+
return LEDGER_CONN;
|
|
109
|
+
}
|
|
110
|
+
get availableLocking() {
|
|
111
|
+
return LOCKING;
|
|
112
|
+
}
|
|
113
|
+
get availableMetadataUp() {
|
|
114
|
+
return METADATA_UP;
|
|
115
|
+
}
|
|
116
|
+
get availableNodes() {
|
|
117
|
+
return ENDPOINTS;
|
|
118
|
+
}
|
|
119
|
+
get availablePrefixes() {
|
|
120
|
+
return PREFIXES;
|
|
121
|
+
}
|
|
122
|
+
get availableStorage() {
|
|
123
|
+
return STORAGE;
|
|
124
|
+
}
|
|
125
|
+
get availableUIModes() {
|
|
126
|
+
return UIMODES;
|
|
127
|
+
}
|
|
128
|
+
get availableUIThemes() {
|
|
129
|
+
return UITHEMES;
|
|
130
|
+
}
|
|
131
|
+
get() {
|
|
132
|
+
return {
|
|
133
|
+
apiType: this.#apiType,
|
|
134
|
+
apiUrl: this.#apiUrl,
|
|
135
|
+
camera: this.#camera,
|
|
136
|
+
i18nLang: this.#i18nLang,
|
|
137
|
+
icon: this.#icon,
|
|
138
|
+
ledgerApp: this.#ledgerApp,
|
|
139
|
+
ledgerConn: this.#ledgerConn,
|
|
140
|
+
locking: this.#locking,
|
|
141
|
+
metadataUp: this.#metadataUp,
|
|
142
|
+
notification: this.#notification,
|
|
143
|
+
prefix: this.#prefix,
|
|
144
|
+
storage: this.#storage,
|
|
145
|
+
uiMode: this.#uiMode,
|
|
146
|
+
uiTheme: this.#uiTheme
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
set(settings) {
|
|
150
|
+
this.#apiType = settings.apiType || this.#apiType;
|
|
151
|
+
this.#apiUrl = settings.apiUrl || this.#apiUrl;
|
|
152
|
+
this.#camera = settings.camera || this.#camera;
|
|
153
|
+
this.#ledgerConn = settings.ledgerConn || this.#ledgerConn;
|
|
154
|
+
this.#ledgerApp = settings.ledgerApp || this.#ledgerApp;
|
|
155
|
+
this.#i18nLang = settings.i18nLang || this.#i18nLang;
|
|
156
|
+
this.#icon = settings.icon || this.#icon;
|
|
157
|
+
this.#locking = settings.locking || this.#locking;
|
|
158
|
+
this.#metadataUp = settings.metadataUp || this.#metadataUp;
|
|
159
|
+
this.#notification = settings.notification || this.#notification;
|
|
160
|
+
this.#prefix = isUndefined(settings.prefix) ? this.#prefix : settings.prefix;
|
|
161
|
+
this.#storage = settings.storage || this.#storage;
|
|
162
|
+
this.#uiMode = settings.uiMode || this.#uiMode;
|
|
163
|
+
this.#uiTheme = settings.uiTheme || this.#uiTheme;
|
|
164
|
+
const newValues = this.get();
|
|
165
|
+
store.set('settings', newValues);
|
|
166
|
+
this.#emitter.emit('change', newValues);
|
|
167
|
+
}
|
|
168
|
+
on(type, cb) {
|
|
169
|
+
this.#emitter.on(type, cb);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
export const settings = new Settings();
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Settings, settings } from './Settings.js';
|
|
2
|
+
export { chains } from './defaults/chains.js';
|
|
3
|
+
export { ENDPOINT_DEFAULT, ICON_DEFAULT, ICON_DEFAULT_HOST, LANGUAGE_DEFAULT, LOCKING_DEFAULT, PREFIX_DEFAULT, UIMODE_DEFAULT, UITHEME_DEFAULT } from './defaults/index.js';
|
|
4
|
+
export { packageInfo } from './packageInfo.js';
|
|
5
|
+
export { Settings, settings };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { selectableNetworks } from '@pezkuwi/networks';
|
|
2
|
+
import { objectSpread } from '@pezkuwi/util';
|
|
3
|
+
export const chains = /*#__PURE__*/ selectableNetworks
|
|
4
|
+
.filter((n) => n.genesisHash.length)
|
|
5
|
+
.reduce((chains, { genesisHash, network }) => objectSpread(chains, { [network]: genesisHash }), {});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export const CRYPTOS = [
|
|
2
|
+
{
|
|
3
|
+
info: 'sr25519',
|
|
4
|
+
text: 'Schnorrkel (sr25519, recommended)',
|
|
5
|
+
value: 'sr25519'
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
info: 'ed25519',
|
|
9
|
+
text: 'Edwards (ed25519, alternative)',
|
|
10
|
+
value: 'ed25519'
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
info: 'ecdsa',
|
|
14
|
+
text: 'ECDSA (Non BTC/ETH compatible)',
|
|
15
|
+
value: 'ecdsa'
|
|
16
|
+
}
|
|
17
|
+
];
|
|
18
|
+
export const CRYPTOS_ETH = [
|
|
19
|
+
{
|
|
20
|
+
info: 'ethereum',
|
|
21
|
+
text: 'ECDSA (ETH compatible)',
|
|
22
|
+
value: 'ethereum'
|
|
23
|
+
}
|
|
24
|
+
];
|
|
25
|
+
export const CRYPTOS_LEDGER = [
|
|
26
|
+
...CRYPTOS,
|
|
27
|
+
{
|
|
28
|
+
info: 'ed25519-ledger',
|
|
29
|
+
text: 'Ledger (ed25519, BIP32 derivation)',
|
|
30
|
+
value: 'ed25519-ledger'
|
|
31
|
+
}
|
|
32
|
+
];
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export { CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER } from './crypto.js';
|
|
2
|
+
export { ENDPOINT_DEFAULT, ENDPOINTS } from './endpoints.js';
|
|
3
|
+
export { LEDGER_APP, LEDGER_APP_DEFAULT, LEDGER_CONN, LEDGER_CONN_DEFAULT } from './ledger.js';
|
|
4
|
+
export { PREFIX_DEFAULT, PREFIXES } from './ss58.js';
|
|
5
|
+
export { ICON_DEFAULT, ICON_DEFAULT_HOST, ICONS, NOTIFICATION_DEFAULT, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './ui.js';
|
|
6
|
+
export const CAMERA_DEFAULT = 'off';
|
|
7
|
+
export const CAMERA = [
|
|
8
|
+
{
|
|
9
|
+
info: 'on',
|
|
10
|
+
text: 'Allow camera access',
|
|
11
|
+
value: 'on'
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
info: 'off',
|
|
15
|
+
text: 'Do not allow camera access',
|
|
16
|
+
value: 'off'
|
|
17
|
+
}
|
|
18
|
+
];
|
|
19
|
+
export const LANGUAGE_DEFAULT = 'default';
|
|
20
|
+
export const LOCKING_DEFAULT = 'session';
|
|
21
|
+
export const LOCKING = [
|
|
22
|
+
{
|
|
23
|
+
info: 'session',
|
|
24
|
+
text: 'Once per session',
|
|
25
|
+
value: 'session'
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
info: 'tx',
|
|
29
|
+
text: 'On each transaction',
|
|
30
|
+
value: 'tx'
|
|
31
|
+
}
|
|
32
|
+
];
|
|
33
|
+
export const METADATA_UP_DEFAULT = 'off';
|
|
34
|
+
export const METADATA_UP = [
|
|
35
|
+
{
|
|
36
|
+
info: 'off',
|
|
37
|
+
text: 'Do not auto-update extension metadata',
|
|
38
|
+
value: 'off'
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
info: 'on',
|
|
42
|
+
text: 'Auto-update extension metadata',
|
|
43
|
+
value: 'on'
|
|
44
|
+
}
|
|
45
|
+
];
|
|
46
|
+
export const STORAGE_DEFAULT = 'off';
|
|
47
|
+
export const STORAGE = [
|
|
48
|
+
{
|
|
49
|
+
info: 'on',
|
|
50
|
+
text: 'Allow local in-browser account storage',
|
|
51
|
+
value: 'on'
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
info: 'off',
|
|
55
|
+
text: 'Do not allow local in-browser account storage',
|
|
56
|
+
value: 'off'
|
|
57
|
+
}
|
|
58
|
+
];
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export const LEDGER_CONN_DEFAULT = 'none';
|
|
2
|
+
export const LEDGER_CONN = [
|
|
3
|
+
{
|
|
4
|
+
info: 'none',
|
|
5
|
+
text: 'Do not attach Ledger devices',
|
|
6
|
+
value: 'none'
|
|
7
|
+
},
|
|
8
|
+
// Deprecated
|
|
9
|
+
// {
|
|
10
|
+
// info: 'u2f',
|
|
11
|
+
// text: 'Attach Ledger via U2F',
|
|
12
|
+
// value: 'u2f'
|
|
13
|
+
// },
|
|
14
|
+
{
|
|
15
|
+
info: 'webusb',
|
|
16
|
+
text: 'Attach Ledger via WebUSB (Chrome, recommended)',
|
|
17
|
+
value: 'webusb'
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
info: 'hid',
|
|
21
|
+
text: 'Attach Ledger via WebHID (Chrome, experimental)',
|
|
22
|
+
value: 'hid'
|
|
23
|
+
}
|
|
24
|
+
];
|
|
25
|
+
export const LEDGER_APP_DEFAULT = 'generic';
|
|
26
|
+
export const LEDGER_APP = [
|
|
27
|
+
{
|
|
28
|
+
info: 'generic',
|
|
29
|
+
text: 'Use the Ledger Polkadot Generic App',
|
|
30
|
+
value: 'generic'
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
info: 'migration',
|
|
34
|
+
text: 'Use the Ledger Migration App',
|
|
35
|
+
value: 'migration'
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
info: 'chainSpecific',
|
|
39
|
+
text: 'Use the Chain Specific Ledger App',
|
|
40
|
+
value: 'chainSpecific'
|
|
41
|
+
}
|
|
42
|
+
];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { availableNetworks } from '@pezkuwi/networks';
|
|
2
|
+
export const PREFIX_DEFAULT = -1;
|
|
3
|
+
const defaultNetwork = {
|
|
4
|
+
info: 'default',
|
|
5
|
+
text: 'Default for the connected node',
|
|
6
|
+
value: -1
|
|
7
|
+
};
|
|
8
|
+
const networks = availableNetworks.map(({ displayName, network, prefix }) => ({
|
|
9
|
+
info: network,
|
|
10
|
+
text: displayName,
|
|
11
|
+
value: prefix
|
|
12
|
+
}));
|
|
13
|
+
export const PREFIXES = [defaultNetwork, ...networks];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const isPolkadot = typeof window !== 'undefined' && window.location.host.includes('polkadot');
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { isPolkadot } from './type.js';
|
|
2
|
+
export const LANGUAGE_DEFAULT = 'default';
|
|
3
|
+
export const UIMODE_DEFAULT = !isPolkadot && typeof window !== 'undefined' && window.location.host.includes('ui-light')
|
|
4
|
+
? 'light'
|
|
5
|
+
: 'full';
|
|
6
|
+
export const UIMODES = [
|
|
7
|
+
{
|
|
8
|
+
info: 'full',
|
|
9
|
+
text: 'Fully featured',
|
|
10
|
+
value: 'full'
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
info: 'light',
|
|
14
|
+
text: 'Basic features only',
|
|
15
|
+
value: 'light'
|
|
16
|
+
}
|
|
17
|
+
];
|
|
18
|
+
export const UITHEME_DEFAULT = isPolkadot
|
|
19
|
+
? 'polkadot'
|
|
20
|
+
: 'substrate';
|
|
21
|
+
export const UITHEMES = [
|
|
22
|
+
{
|
|
23
|
+
info: 'polkadot',
|
|
24
|
+
text: 'Polkadot',
|
|
25
|
+
value: 'polkadot'
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
info: 'substrate',
|
|
29
|
+
text: 'Substrate',
|
|
30
|
+
value: 'substrate'
|
|
31
|
+
}
|
|
32
|
+
];
|
|
33
|
+
export const ICON_DEFAULT = 'default';
|
|
34
|
+
export const ICON_DEFAULT_HOST = isPolkadot
|
|
35
|
+
? 'polkadot'
|
|
36
|
+
: 'substrate';
|
|
37
|
+
export const ICONS = [
|
|
38
|
+
{
|
|
39
|
+
info: 'default',
|
|
40
|
+
text: 'Default for the connected node',
|
|
41
|
+
value: 'default'
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
info: 'polkadot',
|
|
45
|
+
text: 'Polkadot',
|
|
46
|
+
value: 'polkadot'
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
info: 'substrate',
|
|
50
|
+
text: 'Substrate',
|
|
51
|
+
value: 'substrate'
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
info: 'beachball',
|
|
55
|
+
text: 'Beachball',
|
|
56
|
+
value: 'beachball'
|
|
57
|
+
}
|
|
58
|
+
];
|
|
59
|
+
export const NOTIFICATION_DEFAULT = 'popup';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const packageInfo = { name: '@pezkuwi/ui-settings', path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto', type: 'esm', version: '3.16.6' };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"author": "Jaco Greeff <jacogr@gmail.com>",
|
|
3
|
+
"bugs": "https://github.com/pezkuwichain/ui/issues",
|
|
4
|
+
"description": "Manages app settings",
|
|
5
|
+
"engines": {
|
|
6
|
+
"node": ">=18"
|
|
7
|
+
},
|
|
8
|
+
"homepage": "https://github.com/pezkuwichain/ui/tree/master/packages/ui-settings#readme",
|
|
9
|
+
"license": "Apache-2.0",
|
|
10
|
+
"name": "@pezkuwi/ui-settings",
|
|
11
|
+
"repository": {
|
|
12
|
+
"directory": "packages/ui-settings",
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "https://github.com/pezkuwichain/ui.git"
|
|
15
|
+
},
|
|
16
|
+
"sideEffects": [
|
|
17
|
+
"./packageDetect.js",
|
|
18
|
+
"./packageDetect.cjs"
|
|
19
|
+
],
|
|
20
|
+
"type": "module",
|
|
21
|
+
"version": "3.16.6",
|
|
22
|
+
"main": "index.js",
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@pezkuwi/networks": "^14.0.5",
|
|
25
|
+
"@pezkuwi/util": "^14.0.5",
|
|
26
|
+
"eventemitter3": "^5.0.1",
|
|
27
|
+
"store": "^2.0.12",
|
|
28
|
+
"tslib": "^2.8.1"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@types/store": "^2.0.5"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"@pezkuwi/networks": "*",
|
|
35
|
+
"@pezkuwi/util": "*"
|
|
36
|
+
}
|
|
37
|
+
}
|
package/src/Settings.ts
ADDED
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
// Copyright 2017-2025 @pezkuwi/ui-settings authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import type { Endpoint, EndpointType, Option, SettingsStruct } from './types.js';
|
|
5
|
+
|
|
6
|
+
import { EventEmitter } from 'eventemitter3';
|
|
7
|
+
import store from 'store';
|
|
8
|
+
|
|
9
|
+
import { hasProcess, isUndefined } from '@pezkuwi/util';
|
|
10
|
+
|
|
11
|
+
import { CAMERA, CAMERA_DEFAULT, CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER, ENDPOINT_DEFAULT, ENDPOINTS, ICON_DEFAULT, ICONS, LANGUAGE_DEFAULT, LEDGER_APP, LEDGER_APP_DEFAULT, LEDGER_CONN, LEDGER_CONN_DEFAULT, LOCKING, LOCKING_DEFAULT, METADATA_UP, METADATA_UP_DEFAULT, NOTIFICATION_DEFAULT, PREFIX_DEFAULT, PREFIXES, STORAGE, STORAGE_DEFAULT, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './defaults/index.js';
|
|
12
|
+
|
|
13
|
+
type ChangeCallback = (settings: SettingsStruct) => void;
|
|
14
|
+
type OnTypes = 'change';
|
|
15
|
+
|
|
16
|
+
function withDefault (options: Option[], option: string | undefined, fallback: string): string {
|
|
17
|
+
const _option = option || fallback;
|
|
18
|
+
|
|
19
|
+
return options.some(({ value }) => value === _option)
|
|
20
|
+
? _option
|
|
21
|
+
: fallback;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export class Settings implements SettingsStruct {
|
|
25
|
+
readonly #emitter: EventEmitter;
|
|
26
|
+
|
|
27
|
+
#apiType: Endpoint;
|
|
28
|
+
|
|
29
|
+
// will become deprecated for supporting substrate connect light clients. apiType structure should be used instead
|
|
30
|
+
#apiUrl: string;
|
|
31
|
+
|
|
32
|
+
#camera: string;
|
|
33
|
+
|
|
34
|
+
#i18nLang: string;
|
|
35
|
+
|
|
36
|
+
#icon: string;
|
|
37
|
+
|
|
38
|
+
#ledgerApp: string;
|
|
39
|
+
|
|
40
|
+
#ledgerConn: string;
|
|
41
|
+
|
|
42
|
+
#locking: string;
|
|
43
|
+
|
|
44
|
+
#metadataUp: string;
|
|
45
|
+
|
|
46
|
+
#prefix: number;
|
|
47
|
+
|
|
48
|
+
#storage: string;
|
|
49
|
+
|
|
50
|
+
#uiMode: string;
|
|
51
|
+
|
|
52
|
+
#uiTheme: string;
|
|
53
|
+
|
|
54
|
+
#notification: string;
|
|
55
|
+
|
|
56
|
+
constructor () {
|
|
57
|
+
const settings = (store.get('settings') as SettingsStruct) || {};
|
|
58
|
+
|
|
59
|
+
this.#emitter = new EventEmitter();
|
|
60
|
+
|
|
61
|
+
// will become deprecated for supporting substrate connect light clients. apiType structure should be used instead
|
|
62
|
+
this.#apiUrl = (typeof settings.apiUrl === 'string' && settings.apiUrl) || (hasProcess && process.env?.['WS_URL']) || (ENDPOINT_DEFAULT.value as string);
|
|
63
|
+
this.#apiType = { param: this.#apiUrl, type: 'json-rpc' as EndpointType };
|
|
64
|
+
this.#camera = withDefault(CAMERA, settings.camera, CAMERA_DEFAULT);
|
|
65
|
+
this.#ledgerApp = withDefault(LEDGER_APP, settings.ledgerApp, LEDGER_APP_DEFAULT);
|
|
66
|
+
this.#ledgerConn = withDefault(LEDGER_CONN, settings.ledgerConn, LEDGER_CONN_DEFAULT);
|
|
67
|
+
this.#i18nLang = settings.i18nLang || LANGUAGE_DEFAULT;
|
|
68
|
+
this.#icon = settings.icon || ICON_DEFAULT;
|
|
69
|
+
this.#locking = settings.locking || LOCKING_DEFAULT;
|
|
70
|
+
this.#metadataUp = withDefault(METADATA_UP, settings.storage, METADATA_UP_DEFAULT);
|
|
71
|
+
this.#notification = settings.notification || NOTIFICATION_DEFAULT;
|
|
72
|
+
this.#prefix = isUndefined(settings.prefix) ? PREFIX_DEFAULT : settings.prefix;
|
|
73
|
+
this.#storage = withDefault(STORAGE, settings.storage, STORAGE_DEFAULT);
|
|
74
|
+
this.#uiMode = settings.uiMode || UIMODE_DEFAULT;
|
|
75
|
+
this.#uiTheme = settings.uiTheme || UITHEME_DEFAULT;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
public get camera (): string {
|
|
79
|
+
return this.#camera;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
public get apiType (): Endpoint {
|
|
83
|
+
return this.#apiType;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
public get apiUrl (): string {
|
|
87
|
+
return this.#apiUrl;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
public get i18nLang (): string {
|
|
91
|
+
return this.#i18nLang;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
public get icon (): string {
|
|
95
|
+
return this.#icon;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
public get notification (): string {
|
|
99
|
+
return this.#notification;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
public get ledgerApp (): string {
|
|
103
|
+
return this.#ledgerApp;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
public get ledgerConn (): string {
|
|
107
|
+
return this.#ledgerConn;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
public get locking (): string {
|
|
111
|
+
return this.#locking;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
public get metadataUp (): string {
|
|
115
|
+
return this.#metadataUp;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
public get prefix (): number {
|
|
119
|
+
return this.#prefix;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
public get storage (): string {
|
|
123
|
+
return this.#storage;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
public get uiMode (): string {
|
|
127
|
+
return this.#uiMode;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
public get uiTheme (): string {
|
|
131
|
+
return this.#uiTheme;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
public get availableCamera (): Option[] {
|
|
135
|
+
return CAMERA;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
public get availableCryptos (): Option[] {
|
|
139
|
+
return CRYPTOS;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
public get availableCryptosEth (): Option[] {
|
|
143
|
+
return CRYPTOS_ETH;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
public get availableCryptosLedger (): Option[] {
|
|
147
|
+
return CRYPTOS_LEDGER;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
public get availableIcons (): Option[] {
|
|
151
|
+
return ICONS;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
public get availableLedgerApp (): Option[] {
|
|
155
|
+
return LEDGER_APP;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
public get availableLedgerConn (): Option[] {
|
|
159
|
+
return LEDGER_CONN;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
public get availableLocking (): Option[] {
|
|
163
|
+
return LOCKING;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
public get availableMetadataUp (): Option[] {
|
|
167
|
+
return METADATA_UP;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
public get availableNodes (): Option[] {
|
|
171
|
+
return ENDPOINTS;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
public get availablePrefixes (): Option[] {
|
|
175
|
+
return PREFIXES;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
public get availableStorage (): Option[] {
|
|
179
|
+
return STORAGE;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
public get availableUIModes (): Option[] {
|
|
183
|
+
return UIMODES;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
public get availableUIThemes (): Option[] {
|
|
187
|
+
return UITHEMES;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
public get (): SettingsStruct {
|
|
191
|
+
return {
|
|
192
|
+
apiType: this.#apiType,
|
|
193
|
+
apiUrl: this.#apiUrl,
|
|
194
|
+
camera: this.#camera,
|
|
195
|
+
i18nLang: this.#i18nLang,
|
|
196
|
+
icon: this.#icon,
|
|
197
|
+
ledgerApp: this.#ledgerApp,
|
|
198
|
+
ledgerConn: this.#ledgerConn,
|
|
199
|
+
locking: this.#locking,
|
|
200
|
+
metadataUp: this.#metadataUp,
|
|
201
|
+
notification: this.#notification,
|
|
202
|
+
prefix: this.#prefix,
|
|
203
|
+
storage: this.#storage,
|
|
204
|
+
uiMode: this.#uiMode,
|
|
205
|
+
uiTheme: this.#uiTheme
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
public set (settings: Partial<SettingsStruct>): void {
|
|
210
|
+
this.#apiType = settings.apiType || this.#apiType;
|
|
211
|
+
this.#apiUrl = settings.apiUrl || this.#apiUrl;
|
|
212
|
+
this.#camera = settings.camera || this.#camera;
|
|
213
|
+
this.#ledgerConn = settings.ledgerConn || this.#ledgerConn;
|
|
214
|
+
this.#ledgerApp = settings.ledgerApp || this.#ledgerApp;
|
|
215
|
+
this.#i18nLang = settings.i18nLang || this.#i18nLang;
|
|
216
|
+
this.#icon = settings.icon || this.#icon;
|
|
217
|
+
this.#locking = settings.locking || this.#locking;
|
|
218
|
+
this.#metadataUp = settings.metadataUp || this.#metadataUp;
|
|
219
|
+
this.#notification = settings.notification || this.#notification;
|
|
220
|
+
this.#prefix = isUndefined(settings.prefix) ? this.#prefix : settings.prefix;
|
|
221
|
+
this.#storage = settings.storage || this.#storage;
|
|
222
|
+
this.#uiMode = settings.uiMode || this.#uiMode;
|
|
223
|
+
this.#uiTheme = settings.uiTheme || this.#uiTheme;
|
|
224
|
+
|
|
225
|
+
const newValues = this.get();
|
|
226
|
+
|
|
227
|
+
store.set('settings', newValues);
|
|
228
|
+
this.#emitter.emit('change', newValues);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
public on (type: OnTypes, cb: ChangeCallback): void {
|
|
232
|
+
this.#emitter.on(type, cb);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export const settings = new Settings();
|