@subwallet/extension-base 1.1.68-2 → 1.2.1

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.
Files changed (168) hide show
  1. package/background/KoniTypes.d.ts +3 -1
  2. package/background/handlers/State.d.ts +1 -78
  3. package/background/handlers/State.js +1 -428
  4. package/background/types.d.ts +1 -0
  5. package/cjs/background/handlers/State.js +1 -456
  6. package/cjs/constants/storage.js +3 -1
  7. package/cjs/koni/api/dotsama/crowdloan.js +1 -2
  8. package/cjs/koni/api/nft/acala_nft/index.js +1 -3
  9. package/cjs/koni/api/nft/assethub_nft/index.js +1 -3
  10. package/cjs/koni/api/nft/assethub_unique/index.js +1 -3
  11. package/cjs/koni/api/nft/bit.country/index.js +4 -6
  12. package/cjs/koni/api/nft/config.js +1 -8
  13. package/cjs/koni/api/nft/evm_nft/index.js +1 -3
  14. package/cjs/koni/api/nft/karura_nft/index.js +1 -3
  15. package/cjs/koni/api/nft/ordinal_nft/index.js +4 -3
  16. package/cjs/koni/api/nft/rmrk_nft/index.js +4 -6
  17. package/cjs/koni/api/nft/unique_network_nft/index.js +1 -3
  18. package/cjs/koni/api/nft/unique_nft/uniqueNftV2.js +1 -3
  19. package/cjs/koni/api/nft/vara_nft/index.js +1 -3
  20. package/cjs/koni/api/nft/wasm_nft/index.js +10 -17
  21. package/cjs/koni/api/staking/bonding/astar.js +2 -4
  22. package/cjs/koni/api/staking/subsquidStaking.js +9 -12
  23. package/cjs/koni/api/subquery/subquery.js +1 -3
  24. package/cjs/koni/background/handlers/Extension.js +39 -15
  25. package/cjs/koni/background/handlers/Mobile.js +7 -4
  26. package/cjs/koni/background/handlers/State.js +68 -12
  27. package/cjs/koni/background/handlers/Tabs.js +4 -1
  28. package/cjs/koni/background/handlers/index.js +71 -71
  29. package/cjs/koni/background/subscription.js +7 -6
  30. package/cjs/packageInfo.js +1 -1
  31. package/cjs/services/campaign-service/helpers.js +3 -1
  32. package/cjs/services/chain-service/index.js +36 -27
  33. package/cjs/services/chain-service/utils/patch.js +1 -3
  34. package/cjs/services/earning-service/handlers/liquid-staking/acala.js +1 -2
  35. package/cjs/services/earning-service/handlers/liquid-staking/bifrost-manta.js +2 -3
  36. package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +2 -3
  37. package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +1 -2
  38. package/cjs/services/earning-service/handlers/native-staking/astar.js +3 -4
  39. package/cjs/services/event-service/index.js +0 -1
  40. package/cjs/services/history-service/subsquid-multi-chain-history.js +1 -3
  41. package/cjs/services/keyring-service/index.js +22 -0
  42. package/cjs/services/migration-service/scripts/MigrateRemoveGenesisHash.js +28 -0
  43. package/cjs/services/migration-service/scripts/index.js +3 -1
  44. package/cjs/services/mint-campaign-service/campaigns/UnlockDotCampaign.js +16 -21
  45. package/cjs/services/notification-service/NotificationService.js +3 -1
  46. package/cjs/services/price-service/coingecko.js +6 -7
  47. package/cjs/services/price-service/index.js +7 -3
  48. package/cjs/services/request-service/handler/PopupHandler.js +14 -15
  49. package/cjs/services/setting-service/SettingService.js +4 -1
  50. package/cjs/services/setting-service/constants.js +1 -1
  51. package/cjs/services/setting-service/i18n/i18n.js +2 -4
  52. package/cjs/services/storage-service/DatabaseService.js +1 -1
  53. package/cjs/services/storage-service/databases/index.js +14 -1
  54. package/cjs/services/storage-service/db-stores/KeyValue.js +13 -0
  55. package/cjs/services/subscan-service/index.js +11 -3
  56. package/cjs/services/transaction-service/index.js +3 -3
  57. package/cjs/services/wallet-connect-service/constants.js +2 -2
  58. package/cjs/services/wallet-connect-service/helpers.js +1 -4
  59. package/cjs/services/wallet-connect-service/index.js +50 -33
  60. package/cjs/storage/index.js +120 -23
  61. package/cjs/types/common/index.js +16 -0
  62. package/cjs/types/common/storage.js +1 -0
  63. package/cjs/types/index.js +11 -0
  64. package/cjs/utils/environment.js +1 -1
  65. package/cjs/utils/eth/parseTransaction/index.js +8 -10
  66. package/cjs/utils/fetch.js +55 -0
  67. package/cjs/utils/fetchStaticCache.js +2 -4
  68. package/cjs/utils/fetchStaticData.js +7 -4
  69. package/cjs/utils/index.js +24 -0
  70. package/cjs/utils/reportError.js +1 -3
  71. package/constants/storage.d.ts +1 -0
  72. package/constants/storage.js +1 -0
  73. package/koni/api/dotsama/crowdloan.js +2 -3
  74. package/koni/api/nft/acala_nft/index.js +0 -1
  75. package/koni/api/nft/assethub_nft/index.js +0 -1
  76. package/koni/api/nft/assethub_unique/index.js +0 -1
  77. package/koni/api/nft/bit.country/index.js +0 -1
  78. package/koni/api/nft/config.js +1 -7
  79. package/koni/api/nft/evm_nft/index.js +0 -1
  80. package/koni/api/nft/karura_nft/index.js +0 -1
  81. package/koni/api/nft/ordinal_nft/index.d.ts +2 -0
  82. package/koni/api/nft/ordinal_nft/index.js +4 -3
  83. package/koni/api/nft/rmrk_nft/index.js +0 -1
  84. package/koni/api/nft/unique_network_nft/index.js +0 -1
  85. package/koni/api/nft/unique_nft/uniqueNftV2.js +0 -1
  86. package/koni/api/nft/vara_nft/index.js +0 -1
  87. package/koni/api/nft/wasm_nft/index.js +4 -10
  88. package/koni/api/staking/bonding/astar.js +0 -1
  89. package/koni/api/staking/subsquidStaking.js +10 -12
  90. package/koni/api/subquery/subquery.js +0 -1
  91. package/koni/background/handlers/Extension.d.ts +4 -0
  92. package/koni/background/handlers/Extension.js +29 -8
  93. package/koni/background/handlers/Mobile.js +9 -6
  94. package/koni/background/handlers/State.d.ts +6 -1
  95. package/koni/background/handlers/State.js +68 -12
  96. package/koni/background/handlers/Tabs.js +4 -1
  97. package/koni/background/handlers/index.d.ts +13 -7
  98. package/koni/background/handlers/index.js +67 -62
  99. package/koni/background/subscription.js +2 -1
  100. package/package.json +35 -28
  101. package/packageInfo.js +1 -1
  102. package/services/campaign-service/helpers.js +3 -1
  103. package/services/chain-service/index.js +36 -28
  104. package/services/chain-service/utils/patch.js +0 -1
  105. package/services/earning-service/handlers/liquid-staking/acala.js +0 -1
  106. package/services/earning-service/handlers/liquid-staking/bifrost-manta.js +0 -1
  107. package/services/earning-service/handlers/liquid-staking/bifrost.js +0 -1
  108. package/services/earning-service/handlers/liquid-staking/stella-swap.js +0 -1
  109. package/services/earning-service/handlers/native-staking/astar.js +0 -1
  110. package/services/event-service/index.js +0 -1
  111. package/services/history-service/subsquid-multi-chain-history.js +0 -1
  112. package/services/keyring-service/index.d.ts +1 -0
  113. package/services/keyring-service/index.js +19 -0
  114. package/services/migration-service/scripts/MigrateRemoveGenesisHash.d.ts +4 -0
  115. package/services/migration-service/scripts/MigrateRemoveGenesisHash.js +20 -0
  116. package/services/migration-service/scripts/index.js +3 -1
  117. package/services/mint-campaign-service/campaigns/UnlockDotCampaign.js +17 -21
  118. package/services/notification-service/NotificationService.js +3 -1
  119. package/services/price-service/coingecko.js +6 -6
  120. package/services/price-service/index.js +7 -3
  121. package/services/request-service/handler/PopupHandler.d.ts +1 -1
  122. package/services/request-service/handler/PopupHandler.js +14 -15
  123. package/services/setting-service/SettingService.d.ts +1 -0
  124. package/services/setting-service/SettingService.js +4 -1
  125. package/services/setting-service/constants.js +2 -2
  126. package/services/setting-service/i18n/i18n.js +2 -4
  127. package/services/storage-service/DatabaseService.js +1 -1
  128. package/services/storage-service/databases/index.d.ts +8 -0
  129. package/services/storage-service/databases/index.js +13 -1
  130. package/services/storage-service/db-stores/KeyValue.d.ts +4 -0
  131. package/services/storage-service/db-stores/KeyValue.js +5 -0
  132. package/services/subscan-service/index.d.ts +2 -0
  133. package/services/subscan-service/index.js +10 -1
  134. package/services/transaction-service/index.js +4 -4
  135. package/services/wallet-connect-service/constants.js +3 -3
  136. package/services/wallet-connect-service/helpers.js +1 -4
  137. package/services/wallet-connect-service/index.d.ts +2 -0
  138. package/services/wallet-connect-service/index.js +42 -31
  139. package/storage/index.d.ts +19 -9
  140. package/storage/index.js +115 -23
  141. package/types/common/index.d.ts +1 -0
  142. package/types/common/index.js +4 -0
  143. package/types/common/storage.d.ts +4 -0
  144. package/types/common/storage.js +1 -0
  145. package/types/index.d.ts +1 -0
  146. package/types/index.js +1 -0
  147. package/utils/environment.js +1 -1
  148. package/utils/eth/parseTransaction/index.js +8 -10
  149. package/utils/fetch.d.ts +8 -0
  150. package/utils/fetch.js +44 -0
  151. package/utils/fetchStaticCache.js +2 -3
  152. package/utils/fetchStaticData.d.ts +1 -1
  153. package/utils/fetchStaticData.js +7 -4
  154. package/utils/index.d.ts +2 -0
  155. package/utils/index.js +2 -0
  156. package/utils/reportError.js +0 -1
  157. package/background/handlers/Extension.d.ts +0 -55
  158. package/background/handlers/Extension.js +0 -601
  159. package/background/handlers/Tabs.d.ts +0 -24
  160. package/background/handlers/Tabs.js +0 -194
  161. package/background/handlers/index.d.ts +0 -3
  162. package/background/handlers/index.js +0 -45
  163. package/cjs/background/handlers/Extension.js +0 -642
  164. package/cjs/background/handlers/Tabs.js +0 -222
  165. package/cjs/background/handlers/index.js +0 -54
  166. package/cjs/koni/background/events.js +0 -14
  167. package/koni/background/events.d.ts +0 -1
  168. package/koni/background/events.js +0 -7
@@ -1,601 +0,0 @@
1
- // Copyright 2019-2022 @polkadot/extension authors & contributors
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
- import { ALLOWED_PATH, PASSWORD_EXPIRY_MS } from '@subwallet/extension-base/defaults';
5
- import keyring from '@subwallet/ui-keyring';
6
- import { accounts as accountsObservable } from '@subwallet/ui-keyring/observable/accounts';
7
- import { TypeRegistry } from '@polkadot/types';
8
- import { assert, isHex } from '@polkadot/util';
9
- import { keyExtractSuri, mnemonicGenerate, mnemonicValidate } from '@polkadot/util-crypto';
10
- import { withErrorLog } from "./helpers.js";
11
- import { createSubscription, unsubscribe } from "./subscriptions.js";
12
- export const SEED_DEFAULT_LENGTH = 12;
13
- export const SEED_LENGTHS = [12, 15, 18, 21, 24];
14
- export const ETH_DERIVE_DEFAULT = '/m/44\'/60\'/0\'/0/0';
15
-
16
- // a global registry to use internally
17
- const registry = new TypeRegistry();
18
- export function getSuri(seed, type) {
19
- return type === 'ethereum' ? `${seed}${ETH_DERIVE_DEFAULT}` : seed;
20
- }
21
- function transformAccounts(accounts) {
22
- return Object.values(accounts).map(({
23
- json: {
24
- address,
25
- meta
26
- },
27
- type
28
- }) => ({
29
- address,
30
- ...meta,
31
- type
32
- }));
33
- }
34
- export function isJsonPayload(value) {
35
- return value.genesisHash !== undefined;
36
- }
37
- export default class Extension {
38
- #state;
39
- constructor(state) {
40
- this.cachedUnlocks = {};
41
- this.#state = state;
42
- }
43
- accountsCreateExternal({
44
- address,
45
- genesisHash,
46
- name
47
- }) {
48
- keyring.addExternal(address, {
49
- genesisHash,
50
- name
51
- });
52
- return true;
53
- }
54
- accountsCreateHardware({
55
- accountIndex,
56
- address,
57
- addressOffset,
58
- genesisHash,
59
- hardwareType,
60
- name
61
- }) {
62
- keyring.addHardware(address, hardwareType, {
63
- accountIndex,
64
- addressOffset,
65
- genesisHash,
66
- name
67
- });
68
- return true;
69
- }
70
- accountsCreateSuri({
71
- genesisHash,
72
- name,
73
- suri,
74
- type
75
- }) {
76
- keyring.addUri(getSuri(suri, type), {
77
- genesisHash,
78
- name
79
- }, type);
80
- return true;
81
- }
82
- accountsChangePassword({
83
- address,
84
- newPass,
85
- oldPass
86
- }) {
87
- const pair = keyring.getPair(address);
88
- assert(pair, 'Unable to find account');
89
- try {
90
- if (!pair.isLocked) {
91
- pair.lock();
92
- }
93
- pair.decodePkcs8(oldPass);
94
- } catch (error) {
95
- throw new Error('Wrong password');
96
- }
97
- keyring.encryptAccount(pair, newPass);
98
- return true;
99
- }
100
- accountsEdit({
101
- address,
102
- name
103
- }) {
104
- const pair = keyring.getPair(address);
105
- assert(pair, 'Unable to find account');
106
- keyring.saveAccountMeta(pair, {
107
- ...pair.meta,
108
- name
109
- });
110
- return true;
111
- }
112
- accountsExport({
113
- address,
114
- password
115
- }) {
116
- return {
117
- exportedJson: keyring.backupAccount(keyring.getPair(address), password)
118
- };
119
- }
120
-
121
- // private async accountsBatchExport ({ addresses, password }: RequestAccountBatchExport): Promise<ResponseAccountsExport> {
122
- // return {
123
- // exportedJson: await keyring.backupAccounts(addresses, password)
124
- // };
125
- // }
126
-
127
- accountsForget({
128
- address
129
- }) {
130
- keyring.forgetAccount(address);
131
- return true;
132
- }
133
- refreshAccountPasswordCache(pair) {
134
- const {
135
- address
136
- } = pair;
137
- const savedExpiry = this.cachedUnlocks[address] || 0;
138
- const remainingTime = savedExpiry - Date.now();
139
- if (remainingTime < 0) {
140
- this.cachedUnlocks[address] = 0;
141
- pair.lock();
142
- return 0;
143
- }
144
- return remainingTime;
145
- }
146
- accountsShow({
147
- address,
148
- isShowing
149
- }) {
150
- const pair = keyring.getPair(address);
151
- assert(pair, 'Unable to find account');
152
- keyring.saveAccountMeta(pair, {
153
- ...pair.meta,
154
- isHidden: !isShowing
155
- });
156
- return true;
157
- }
158
- accountsTie({
159
- address,
160
- genesisHash
161
- }) {
162
- const pair = keyring.getPair(address);
163
- assert(pair, 'Unable to find account');
164
- keyring.saveAccountMeta(pair, {
165
- ...pair.meta,
166
- genesisHash
167
- });
168
- return true;
169
- }
170
- accountsValidate({
171
- address,
172
- password
173
- }) {
174
- try {
175
- keyring.backupAccount(keyring.getPair(address), password);
176
- return true;
177
- } catch (e) {
178
- return false;
179
- }
180
- }
181
-
182
- // FIXME This looks very much like what we have in Tabs
183
- accountsSubscribe(id, port) {
184
- const cb = createSubscription(id, port);
185
- const subscription = accountsObservable.subject.subscribe(accounts => cb(transformAccounts(accounts)));
186
- port.onDisconnect.addListener(() => {
187
- unsubscribe(id);
188
- subscription.unsubscribe();
189
- });
190
- return transformAccounts(accountsObservable.subject.getValue());
191
- }
192
- authorizeApprove({
193
- id
194
- }) {
195
- const queued = this.#state.getAuthRequest(id);
196
- assert(queued, 'Unable to proceed. Please try again');
197
- const {
198
- resolve
199
- } = queued;
200
- resolve(true);
201
- return true;
202
- }
203
- getAuthList() {
204
- return {
205
- list: this.#state.authUrls
206
- };
207
- }
208
- authorizeReject({
209
- id
210
- }) {
211
- const queued = this.#state.getAuthRequest(id);
212
- assert(queued, 'Unable to proceed. Please try again');
213
- const {
214
- reject
215
- } = queued;
216
- reject(new Error('Rejected'));
217
- return true;
218
- }
219
-
220
- // FIXME This looks very much like what we have in accounts
221
- authorizeSubscribe(id, port) {
222
- const cb = createSubscription(id, port);
223
- const subscription = this.#state.authSubject.subscribe(requests => cb(requests));
224
- port.onDisconnect.addListener(() => {
225
- unsubscribe(id);
226
- subscription.unsubscribe();
227
- });
228
- return true;
229
- }
230
- metadataApprove({
231
- id
232
- }) {
233
- const queued = this.#state.getMetaRequest(id);
234
- assert(queued, 'Unable to proceed. Please try again');
235
- const {
236
- request,
237
- resolve
238
- } = queued;
239
- this.#state.saveMetadata(request);
240
- resolve(true);
241
- return true;
242
- }
243
- metadataGet(genesisHash) {
244
- return this.#state.knownMetadata.find(result => result.genesisHash === genesisHash) || null;
245
- }
246
- metadataList() {
247
- return this.#state.knownMetadata;
248
- }
249
- metadataReject({
250
- id
251
- }) {
252
- const queued = this.#state.getMetaRequest(id);
253
- assert(queued, 'Unable to proceed. Please try again');
254
- const {
255
- reject
256
- } = queued;
257
- reject(new Error('Rejected'));
258
- return true;
259
- }
260
- metadataSubscribe(id, port) {
261
- const cb = createSubscription(id, port);
262
- const subscription = this.#state.metaSubject.subscribe(requests => cb(requests));
263
- port.onDisconnect.addListener(() => {
264
- unsubscribe(id);
265
- subscription.unsubscribe();
266
- });
267
- return this.#state.metaSubject.value;
268
- }
269
- jsonRestore({
270
- file,
271
- password
272
- }) {
273
- try {
274
- keyring.restoreAccount(file, password, true);
275
- } catch (error) {
276
- throw new Error(error.message);
277
- }
278
- }
279
- batchRestore({
280
- file,
281
- password
282
- }) {
283
- try {
284
- keyring.restoreAccounts(file, password);
285
- } catch (error) {
286
- throw new Error(error.message);
287
- }
288
- }
289
- jsonGetAccountInfo(json) {
290
- try {
291
- const {
292
- address,
293
- meta: {
294
- genesisHash,
295
- name
296
- },
297
- type
298
- } = keyring.createFromJson(json);
299
- return {
300
- address,
301
- genesisHash,
302
- name,
303
- type
304
- };
305
- } catch (e) {
306
- console.error(e);
307
- throw new Error(e.message);
308
- }
309
- }
310
- seedCreate({
311
- length = SEED_DEFAULT_LENGTH,
312
- seed: _seed,
313
- type
314
- }) {
315
- const seed = _seed || mnemonicGenerate(length);
316
- return {
317
- address: keyring.createFromUri(getSuri(seed, type), {}, type).address,
318
- seed
319
- };
320
- }
321
- seedValidate({
322
- suri,
323
- type
324
- }) {
325
- const {
326
- phrase
327
- } = keyExtractSuri(suri);
328
- if (isHex(phrase)) {
329
- assert(isHex(phrase, 256), 'Invalid seed phrase. Please try again.');
330
- } else {
331
- // sadly isHex detects as string, so we need a cast here
332
- assert(SEED_LENGTHS.includes(phrase.split(' ').length), `Mnemonic needs to contain ${SEED_LENGTHS.join(', ')} words`);
333
- assert(mnemonicValidate(phrase), 'Invalid seed phrase. Please try again.');
334
- }
335
- return {
336
- address: keyring.createFromUri(getSuri(suri, type), {}, type).address,
337
- suri
338
- };
339
- }
340
- signingApprovePassword({
341
- id,
342
- password,
343
- savePass
344
- }) {
345
- const queued = this.#state.getSignRequest(id);
346
- assert(queued, 'Unable to proceed. Please try again');
347
- const {
348
- reject,
349
- request,
350
- resolve
351
- } = queued;
352
- const pair = keyring.getPair(queued.account.address);
353
-
354
- // unlike queued.account.address the following
355
- // address is encoded with the default prefix
356
- // which what is used for password caching mapping
357
- const {
358
- address
359
- } = pair;
360
- if (!pair) {
361
- reject(new Error('Unable to find account'));
362
- return false;
363
- }
364
- this.refreshAccountPasswordCache(pair);
365
-
366
- // if the keyring pair is locked, the password is needed
367
- if (pair.isLocked && !password) {
368
- reject(new Error('Password needed to unlock the account'));
369
- }
370
- if (pair.isLocked) {
371
- pair.decodePkcs8(password);
372
- }
373
- const {
374
- payload
375
- } = request;
376
- if (isJsonPayload(payload)) {
377
- // Get the metadata for the genesisHash
378
- const currentMetadata = this.#state.knownMetadata.find(meta => meta.genesisHash === payload.genesisHash);
379
-
380
- // set the registry before calling the sign function
381
- registry.setSignedExtensions(payload.signedExtensions, currentMetadata === null || currentMetadata === void 0 ? void 0 : currentMetadata.userExtensions);
382
- if (currentMetadata) {
383
- registry.register(currentMetadata === null || currentMetadata === void 0 ? void 0 : currentMetadata.types);
384
- }
385
- }
386
- const result = request.sign(registry, pair);
387
- if (savePass) {
388
- this.cachedUnlocks[address] = Date.now() + PASSWORD_EXPIRY_MS;
389
- } else {
390
- pair.lock();
391
- }
392
- resolve({
393
- id,
394
- ...result
395
- });
396
- return true;
397
- }
398
- signingApproveSignature({
399
- id,
400
- signature
401
- }) {
402
- const queued = this.#state.getSignRequest(id);
403
- assert(queued, 'Unable to proceed. Please try again');
404
- const {
405
- resolve
406
- } = queued;
407
- resolve({
408
- id,
409
- signature
410
- });
411
- return true;
412
- }
413
- signingCancel({
414
- id
415
- }) {
416
- const queued = this.#state.getSignRequest(id);
417
- assert(queued, 'Unable to proceed. Please try again');
418
- const {
419
- reject
420
- } = queued;
421
- reject(new Error('Cancelled'));
422
- return true;
423
- }
424
- signingIsLocked({
425
- id
426
- }) {
427
- const queued = this.#state.getSignRequest(id);
428
- assert(queued, 'Unable to proceed. Please try again');
429
- const address = queued.request.payload.address;
430
- const pair = keyring.getPair(address);
431
- assert(pair, 'Unable to find account');
432
- const remainingTime = this.refreshAccountPasswordCache(pair);
433
- return {
434
- isLocked: pair.isLocked,
435
- remainingTime
436
- };
437
- }
438
-
439
- // FIXME This looks very much like what we have in authorization
440
- signingSubscribe(id, port) {
441
- const cb = createSubscription(id, port);
442
- const subscription = this.#state.signSubject.subscribe(requests => cb(requests));
443
- port.onDisconnect.addListener(() => {
444
- unsubscribe(id);
445
- subscription.unsubscribe();
446
- });
447
- return this.#state.signSubject.value;
448
- }
449
- windowOpen({
450
- allowedPath: path,
451
- params,
452
- subPath
453
- }) {
454
- let paramString = '';
455
- if (params) {
456
- paramString += '?';
457
- for (let i = 0; i < Object.keys(params).length; i++) {
458
- const [key, value] = Object.entries(params)[i];
459
- paramString += `${key}=${value}`;
460
- if (i !== Object.keys(params).length - 1) {
461
- paramString += '&';
462
- }
463
- }
464
- }
465
- const url = `${chrome.extension.getURL('index.html')}#${path}${subPath || ''}${paramString}`;
466
- if (!ALLOWED_PATH.includes(path)) {
467
- console.error('Not allowed to open the url:', url);
468
- return false;
469
- }
470
- withErrorLog(() => chrome.tabs.create({
471
- url
472
- }));
473
- return true;
474
- }
475
- derive(parentAddress, suri, password, metadata) {
476
- const parentPair = keyring.getPair(parentAddress);
477
- try {
478
- parentPair.decodePkcs8(password);
479
- } catch (e) {
480
- throw new Error('Wrong password');
481
- }
482
- try {
483
- return parentPair.derive(suri, metadata);
484
- } catch (err) {
485
- throw new Error(`"${suri}" is not a valid derivation path`);
486
- }
487
- }
488
- derivationValidate({
489
- parentAddress,
490
- parentPassword,
491
- suri
492
- }) {
493
- const childPair = this.derive(parentAddress, suri, parentPassword, {});
494
- return {
495
- address: childPair.address,
496
- suri
497
- };
498
- }
499
- derivationCreate({
500
- genesisHash,
501
- name,
502
- parentAddress,
503
- parentPassword,
504
- suri
505
- }) {
506
- const childPair = this.derive(parentAddress, suri, parentPassword, {
507
- genesisHash,
508
- name,
509
- parentAddress,
510
- suri
511
- });
512
- keyring.addPair(childPair, true);
513
- return true;
514
- }
515
- toggleAuthorization(url) {
516
- return {
517
- list: this.#state.toggleAuthorization(url)
518
- };
519
- }
520
-
521
- // Weird thought, the eslint override is not needed in Tabs
522
- // eslint-disable-next-line @typescript-eslint/require-await
523
- async handle(id, type, request, port) {
524
- switch (type) {
525
- case 'pri(authorize.approve)':
526
- return this.authorizeApprove(request);
527
- case 'pri(authorize.list)':
528
- return this.getAuthList();
529
- case 'pri(authorize.reject)':
530
- return this.authorizeReject(request);
531
- case 'pri(authorize.toggle)':
532
- return this.toggleAuthorization(request);
533
- case 'pri(authorize.requests)':
534
- return this.authorizeSubscribe(id, port);
535
- case 'pri(accounts.create.external)':
536
- return this.accountsCreateExternal(request);
537
- case 'pri(accounts.create.hardware)':
538
- return this.accountsCreateHardware(request);
539
- case 'pri(accounts.create.suri)':
540
- return this.accountsCreateSuri(request);
541
- case 'pri(accounts.changePassword)':
542
- return this.accountsChangePassword(request);
543
- case 'pri(accounts.edit)':
544
- return this.accountsEdit(request);
545
- case 'pri(accounts.export)':
546
- return this.accountsExport(request);
547
- case 'pri(accounts.batchExport)':
548
- // return this.accountsBatchExport(request as RequestAccountBatchExport);
549
- // Disable export all util use master password
550
- return null;
551
- case 'pri(accounts.forget)':
552
- return this.accountsForget(request);
553
- case 'pri(accounts.show)':
554
- return this.accountsShow(request);
555
- case 'pri(accounts.subscribe)':
556
- return this.accountsSubscribe(id, port);
557
- case 'pri(accounts.tie)':
558
- return this.accountsTie(request);
559
- case 'pri(accounts.validate)':
560
- return this.accountsValidate(request);
561
- case 'pri(metadata.approve)':
562
- return this.metadataApprove(request);
563
- case 'pri(metadata.get)':
564
- return this.metadataGet(request);
565
- case 'pri(metadata.list)':
566
- return this.metadataList();
567
- case 'pri(metadata.reject)':
568
- return this.metadataReject(request);
569
- case 'pri(metadata.requests)':
570
- return this.metadataSubscribe(id, port);
571
- case 'pri(derivation.create)':
572
- return this.derivationCreate(request);
573
- case 'pri(derivation.validate)':
574
- return this.derivationValidate(request);
575
- case 'pri(json.restore)':
576
- return this.jsonRestore(request);
577
- case 'pri(json.batchRestore)':
578
- return this.batchRestore(request);
579
- case 'pri(json.account.info)':
580
- return this.jsonGetAccountInfo(request);
581
- case 'pri(seed.create)':
582
- return this.seedCreate(request);
583
- case 'pri(seed.validate)':
584
- return this.seedValidate(request);
585
- case 'pri(signing.approve.password)':
586
- return this.signingApprovePassword(request);
587
- case 'pri(signing.approve.signature)':
588
- return this.signingApproveSignature(request);
589
- case 'pri(signing.cancel)':
590
- return this.signingCancel(request);
591
- case 'pri(signing.isLocked)':
592
- return this.signingIsLocked(request);
593
- case 'pri(signing.requests)':
594
- return this.signingSubscribe(id, port);
595
- case 'pri(window.open)':
596
- return this.windowOpen(request);
597
- default:
598
- throw new Error(`Unable to handle message of type ${type}`);
599
- }
600
- }
601
- }
@@ -1,24 +0,0 @@
1
- /// <reference types="chrome" />
2
- import type { MessageTypes, RequestTypes, ResponseTypes } from '../types';
3
- import State from './State';
4
- export default class Tabs {
5
- #private;
6
- constructor(state: State);
7
- private authorize;
8
- private accountsList;
9
- private accountsSubscribe;
10
- private getSigningPair;
11
- private bytesSign;
12
- private extrinsicSign;
13
- private metadataProvide;
14
- private metadataList;
15
- private rpcListProviders;
16
- private rpcSend;
17
- private rpcStartProvider;
18
- private rpcSubscribe;
19
- private rpcSubscribeConnected;
20
- private rpcUnsubscribe;
21
- private redirectPhishingLanding;
22
- protected redirectIfPhishing(url: string): Promise<boolean>;
23
- handle<TMessageType extends MessageTypes>(id: string, type: TMessageType, request: RequestTypes[TMessageType], url: string, port: chrome.runtime.Port): Promise<ResponseTypes[keyof ResponseTypes]>;
24
- }