@subwallet/extension-base 0.6.7-1wr → 0.6.7-2
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/background/KoniTypes.d.ts +64 -53
- package/background/KoniTypes.js +13 -23
- package/background/RequestBytesSign.js +1 -2
- package/background/RequestExtrinsicSign.js +1 -2
- package/background/handlers/Extension.js +28 -122
- package/background/handlers/State.js +28 -71
- package/background/handlers/Tabs.js +9 -45
- package/background/handlers/helpers.js +1 -1
- package/background/handlers/index.js +4 -2
- package/background/handlers/subscriptions.js +5 -2
- package/bundle.js +1 -0
- package/cjs/background/KoniTypes.js +15 -24
- package/cjs/background/RequestBytesSign.js +1 -6
- package/cjs/background/RequestExtrinsicSign.js +1 -4
- package/cjs/background/handlers/Extension.js +27 -174
- package/cjs/background/handlers/State.js +28 -82
- package/cjs/background/handlers/Tabs.js +9 -60
- package/cjs/background/handlers/helpers.js +1 -2
- package/cjs/background/handlers/index.js +4 -10
- package/cjs/background/handlers/subscriptions.js +5 -4
- package/cjs/bundle.js +0 -1
- package/cjs/defaults.js +2 -3
- package/cjs/detectOther.js +0 -4
- package/cjs/detectPackage.js +2 -4
- package/cjs/errors/SubWalletProviderError.js +1 -3
- package/cjs/index.js +0 -2
- package/cjs/packageInfo.js +3 -1
- package/cjs/page/Accounts.js +3 -6
- package/cjs/page/Injected.js +1 -8
- package/cjs/page/Metadata.js +1 -5
- package/cjs/page/PostMessageProvider.js +22 -38
- package/cjs/page/Signer.js +11 -11
- package/cjs/page/index.js +6 -13
- package/cjs/signers/substrates/LedgerSigner.js +1 -7
- package/cjs/signers/substrates/QrSigner.js +1 -10
- package/cjs/signers/web3/QrSigner.js +1 -12
- package/cjs/stores/Accounts.js +1 -8
- package/cjs/stores/Base.js +1 -15
- package/cjs/stores/Metadata.js +1 -6
- package/cjs/stores/index.js +0 -3
- package/cjs/utils/canDerive.js +1 -1
- package/cjs/utils/getId.js +1 -3
- package/cjs/utils/index.js +0 -1
- package/defaults.d.ts +1 -2
- package/defaults.js +2 -2
- package/detectOther.js +1 -0
- package/detectPackage.js +2 -0
- package/errors/SubWalletProviderError.js +1 -1
- package/index.js +2 -0
- package/package.json +5 -5
- package/packageInfo.js +3 -1
- package/page/Accounts.js +3 -4
- package/page/Injected.js +1 -1
- package/page/Metadata.js +1 -3
- package/page/PostMessageProvider.js +22 -33
- package/page/Signer.js +11 -9
- package/page/index.js +8 -6
- package/signers/substrates/LedgerSigner.js +1 -3
- package/signers/substrates/QrSigner.js +1 -5
- package/signers/web3/QrSigner.js +1 -5
- package/stores/Accounts.js +1 -3
- package/stores/Base.js +1 -13
- package/stores/Metadata.js +1 -1
- package/stores/index.js +1 -0
- package/utils/canDerive.js +1 -0
- package/utils/getId.js +1 -0
- package/utils/index.js +1 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// Copyright 2019-2022 @polkadot/extension authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
3
4
|
import { ALLOWED_PATH, PASSWORD_EXPIRY_MS } from '@subwallet/extension-base/defaults';
|
|
4
5
|
import { TypeRegistry } from '@polkadot/types';
|
|
5
6
|
import keyring from '@polkadot/ui-keyring';
|
|
@@ -10,13 +11,13 @@ import { withErrorLog } from "./helpers.js";
|
|
|
10
11
|
import { createSubscription, unsubscribe } from "./subscriptions.js";
|
|
11
12
|
export const SEED_DEFAULT_LENGTH = 12;
|
|
12
13
|
export const SEED_LENGTHS = [12, 15, 18, 21, 24];
|
|
13
|
-
export const ETH_DERIVE_DEFAULT = '/m/44\'/60\'/0\'/0/0';
|
|
14
|
+
export const ETH_DERIVE_DEFAULT = '/m/44\'/60\'/0\'/0/0';
|
|
14
15
|
|
|
16
|
+
// a global registry to use internally
|
|
15
17
|
const registry = new TypeRegistry();
|
|
16
18
|
export function getSuri(seed, type) {
|
|
17
19
|
return type === 'ethereum' ? `${seed}${ETH_DERIVE_DEFAULT}` : seed;
|
|
18
20
|
}
|
|
19
|
-
|
|
20
21
|
function transformAccounts(accounts) {
|
|
21
22
|
return Object.values(accounts).map(({
|
|
22
23
|
json: {
|
|
@@ -30,20 +31,16 @@ function transformAccounts(accounts) {
|
|
|
30
31
|
type
|
|
31
32
|
}));
|
|
32
33
|
}
|
|
33
|
-
|
|
34
34
|
function isJsonPayload(value) {
|
|
35
35
|
return value.genesisHash !== undefined;
|
|
36
36
|
}
|
|
37
|
-
|
|
38
37
|
export default class Extension {
|
|
39
38
|
#cachedUnlocks;
|
|
40
39
|
#state;
|
|
41
|
-
|
|
42
40
|
constructor(state) {
|
|
43
41
|
this.#cachedUnlocks = {};
|
|
44
42
|
this.#state = state;
|
|
45
43
|
}
|
|
46
|
-
|
|
47
44
|
accountsCreateExternal({
|
|
48
45
|
address,
|
|
49
46
|
genesisHash,
|
|
@@ -55,7 +52,6 @@ export default class Extension {
|
|
|
55
52
|
});
|
|
56
53
|
return true;
|
|
57
54
|
}
|
|
58
|
-
|
|
59
55
|
accountsCreateHardware({
|
|
60
56
|
accountIndex,
|
|
61
57
|
address,
|
|
@@ -72,7 +68,6 @@ export default class Extension {
|
|
|
72
68
|
});
|
|
73
69
|
return true;
|
|
74
70
|
}
|
|
75
|
-
|
|
76
71
|
accountsCreateSuri({
|
|
77
72
|
genesisHash,
|
|
78
73
|
name,
|
|
@@ -86,7 +81,6 @@ export default class Extension {
|
|
|
86
81
|
}, type);
|
|
87
82
|
return true;
|
|
88
83
|
}
|
|
89
|
-
|
|
90
84
|
accountsChangePassword({
|
|
91
85
|
address,
|
|
92
86
|
newPass,
|
|
@@ -94,33 +88,29 @@ export default class Extension {
|
|
|
94
88
|
}) {
|
|
95
89
|
const pair = keyring.getPair(address);
|
|
96
90
|
assert(pair, 'Unable to find pair');
|
|
97
|
-
|
|
98
91
|
try {
|
|
99
92
|
if (!pair.isLocked) {
|
|
100
93
|
pair.lock();
|
|
101
94
|
}
|
|
102
|
-
|
|
103
95
|
pair.decodePkcs8(oldPass);
|
|
104
96
|
} catch (error) {
|
|
105
97
|
throw new Error('oldPass is invalid');
|
|
106
98
|
}
|
|
107
|
-
|
|
108
99
|
keyring.encryptAccount(pair, newPass);
|
|
109
100
|
return true;
|
|
110
101
|
}
|
|
111
|
-
|
|
112
102
|
accountsEdit({
|
|
113
103
|
address,
|
|
114
104
|
name
|
|
115
105
|
}) {
|
|
116
106
|
const pair = keyring.getPair(address);
|
|
117
107
|
assert(pair, 'Unable to find pair');
|
|
118
|
-
keyring.saveAccountMeta(pair, {
|
|
108
|
+
keyring.saveAccountMeta(pair, {
|
|
109
|
+
...pair.meta,
|
|
119
110
|
name
|
|
120
111
|
});
|
|
121
112
|
return true;
|
|
122
113
|
}
|
|
123
|
-
|
|
124
114
|
accountsExport({
|
|
125
115
|
address,
|
|
126
116
|
password
|
|
@@ -128,60 +118,57 @@ export default class Extension {
|
|
|
128
118
|
return {
|
|
129
119
|
exportedJson: keyring.backupAccount(keyring.getPair(address), password)
|
|
130
120
|
};
|
|
131
|
-
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// private async accountsBatchExport ({ addresses, password }: RequestAccountBatchExport): Promise<ResponseAccountsExport> {
|
|
132
124
|
// return {
|
|
133
125
|
// exportedJson: await keyring.backupAccounts(addresses, password)
|
|
134
126
|
// };
|
|
135
127
|
// }
|
|
136
128
|
|
|
137
|
-
|
|
138
129
|
accountsForget({
|
|
139
130
|
address
|
|
140
131
|
}) {
|
|
141
132
|
keyring.forgetAccount(address);
|
|
142
133
|
return true;
|
|
143
134
|
}
|
|
144
|
-
|
|
145
135
|
refreshAccountPasswordCache(pair) {
|
|
146
136
|
const {
|
|
147
137
|
address
|
|
148
138
|
} = pair;
|
|
149
139
|
const savedExpiry = this.#cachedUnlocks[address] || 0;
|
|
150
140
|
const remainingTime = savedExpiry - Date.now();
|
|
151
|
-
|
|
152
141
|
if (remainingTime < 0) {
|
|
153
142
|
this.#cachedUnlocks[address] = 0;
|
|
154
143
|
pair.lock();
|
|
155
144
|
return 0;
|
|
156
145
|
}
|
|
157
|
-
|
|
158
146
|
return remainingTime;
|
|
159
147
|
}
|
|
160
|
-
|
|
161
148
|
accountsShow({
|
|
162
149
|
address,
|
|
163
150
|
isShowing
|
|
164
151
|
}) {
|
|
165
152
|
const pair = keyring.getPair(address);
|
|
166
153
|
assert(pair, 'Unable to find pair');
|
|
167
|
-
keyring.saveAccountMeta(pair, {
|
|
154
|
+
keyring.saveAccountMeta(pair, {
|
|
155
|
+
...pair.meta,
|
|
168
156
|
isHidden: !isShowing
|
|
169
157
|
});
|
|
170
158
|
return true;
|
|
171
159
|
}
|
|
172
|
-
|
|
173
160
|
accountsTie({
|
|
174
161
|
address,
|
|
175
162
|
genesisHash
|
|
176
163
|
}) {
|
|
177
164
|
const pair = keyring.getPair(address);
|
|
178
165
|
assert(pair, 'Unable to find pair');
|
|
179
|
-
keyring.saveAccountMeta(pair, {
|
|
166
|
+
keyring.saveAccountMeta(pair, {
|
|
167
|
+
...pair.meta,
|
|
180
168
|
genesisHash
|
|
181
169
|
});
|
|
182
170
|
return true;
|
|
183
171
|
}
|
|
184
|
-
|
|
185
172
|
accountsValidate({
|
|
186
173
|
address,
|
|
187
174
|
password
|
|
@@ -192,9 +179,9 @@ export default class Extension {
|
|
|
192
179
|
} catch (e) {
|
|
193
180
|
return false;
|
|
194
181
|
}
|
|
195
|
-
}
|
|
196
|
-
|
|
182
|
+
}
|
|
197
183
|
|
|
184
|
+
// FIXME This looks very much like what we have in Tabs
|
|
198
185
|
accountsSubscribe(id, port) {
|
|
199
186
|
const cb = createSubscription(id, port);
|
|
200
187
|
const subscription = accountsObservable.subject.subscribe(accounts => cb(transformAccounts(accounts)));
|
|
@@ -204,7 +191,6 @@ export default class Extension {
|
|
|
204
191
|
});
|
|
205
192
|
return true;
|
|
206
193
|
}
|
|
207
|
-
|
|
208
194
|
authorizeApprove({
|
|
209
195
|
id
|
|
210
196
|
}) {
|
|
@@ -216,13 +202,11 @@ export default class Extension {
|
|
|
216
202
|
resolve(true);
|
|
217
203
|
return true;
|
|
218
204
|
}
|
|
219
|
-
|
|
220
205
|
getAuthList() {
|
|
221
206
|
return {
|
|
222
207
|
list: this.#state.authUrls
|
|
223
208
|
};
|
|
224
209
|
}
|
|
225
|
-
|
|
226
210
|
authorizeReject({
|
|
227
211
|
id
|
|
228
212
|
}) {
|
|
@@ -233,9 +217,9 @@ export default class Extension {
|
|
|
233
217
|
} = queued;
|
|
234
218
|
reject(new Error('Rejected'));
|
|
235
219
|
return true;
|
|
236
|
-
}
|
|
237
|
-
|
|
220
|
+
}
|
|
238
221
|
|
|
222
|
+
// FIXME This looks very much like what we have in accounts
|
|
239
223
|
authorizeSubscribe(id, port) {
|
|
240
224
|
const cb = createSubscription(id, port);
|
|
241
225
|
const subscription = this.#state.authSubject.subscribe(requests => cb(requests));
|
|
@@ -245,7 +229,6 @@ export default class Extension {
|
|
|
245
229
|
});
|
|
246
230
|
return true;
|
|
247
231
|
}
|
|
248
|
-
|
|
249
232
|
metadataApprove({
|
|
250
233
|
id
|
|
251
234
|
}) {
|
|
@@ -259,15 +242,12 @@ export default class Extension {
|
|
|
259
242
|
resolve(true);
|
|
260
243
|
return true;
|
|
261
244
|
}
|
|
262
|
-
|
|
263
245
|
metadataGet(genesisHash) {
|
|
264
246
|
return this.#state.knownMetadata.find(result => result.genesisHash === genesisHash) || null;
|
|
265
247
|
}
|
|
266
|
-
|
|
267
248
|
metadataList() {
|
|
268
249
|
return this.#state.knownMetadata;
|
|
269
250
|
}
|
|
270
|
-
|
|
271
251
|
metadataReject({
|
|
272
252
|
id
|
|
273
253
|
}) {
|
|
@@ -279,7 +259,6 @@ export default class Extension {
|
|
|
279
259
|
reject(new Error('Rejected'));
|
|
280
260
|
return true;
|
|
281
261
|
}
|
|
282
|
-
|
|
283
262
|
metadataSubscribe(id, port) {
|
|
284
263
|
const cb = createSubscription(id, port);
|
|
285
264
|
const subscription = this.#state.metaSubject.subscribe(requests => cb(requests));
|
|
@@ -289,7 +268,6 @@ export default class Extension {
|
|
|
289
268
|
});
|
|
290
269
|
return true;
|
|
291
270
|
}
|
|
292
|
-
|
|
293
271
|
jsonRestore({
|
|
294
272
|
file,
|
|
295
273
|
password
|
|
@@ -300,7 +278,6 @@ export default class Extension {
|
|
|
300
278
|
throw new Error(error.message);
|
|
301
279
|
}
|
|
302
280
|
}
|
|
303
|
-
|
|
304
281
|
batchRestore({
|
|
305
282
|
file,
|
|
306
283
|
password
|
|
@@ -311,7 +288,6 @@ export default class Extension {
|
|
|
311
288
|
throw new Error(error.message);
|
|
312
289
|
}
|
|
313
290
|
}
|
|
314
|
-
|
|
315
291
|
jsonGetAccountInfo(json) {
|
|
316
292
|
try {
|
|
317
293
|
const {
|
|
@@ -333,20 +309,17 @@ export default class Extension {
|
|
|
333
309
|
throw new Error(e.message);
|
|
334
310
|
}
|
|
335
311
|
}
|
|
336
|
-
|
|
337
312
|
seedCreate({
|
|
338
313
|
length = SEED_DEFAULT_LENGTH,
|
|
339
314
|
seed: _seed,
|
|
340
315
|
type
|
|
341
316
|
}) {
|
|
342
317
|
const seed = _seed || mnemonicGenerate(length);
|
|
343
|
-
|
|
344
318
|
return {
|
|
345
319
|
address: keyring.createFromUri(getSuri(seed, type), {}, type).address,
|
|
346
320
|
seed
|
|
347
321
|
};
|
|
348
322
|
}
|
|
349
|
-
|
|
350
323
|
seedValidate({
|
|
351
324
|
suri,
|
|
352
325
|
type
|
|
@@ -354,7 +327,6 @@ export default class Extension {
|
|
|
354
327
|
const {
|
|
355
328
|
phrase
|
|
356
329
|
} = keyExtractSuri(suri);
|
|
357
|
-
|
|
358
330
|
if (isHex(phrase)) {
|
|
359
331
|
assert(isHex(phrase, 256), 'Hex seed needs to be 256-bits');
|
|
360
332
|
} else {
|
|
@@ -362,13 +334,11 @@ export default class Extension {
|
|
|
362
334
|
assert(SEED_LENGTHS.includes(phrase.split(' ').length), `Mnemonic needs to contain ${SEED_LENGTHS.join(', ')} words`);
|
|
363
335
|
assert(mnemonicValidate(phrase), 'Not a valid mnemonic seed');
|
|
364
336
|
}
|
|
365
|
-
|
|
366
337
|
return {
|
|
367
338
|
address: keyring.createFromUri(getSuri(suri, type), {}, type).address,
|
|
368
339
|
suri
|
|
369
340
|
};
|
|
370
341
|
}
|
|
371
|
-
|
|
372
342
|
signingApprovePassword({
|
|
373
343
|
id,
|
|
374
344
|
password,
|
|
@@ -381,59 +351,52 @@ export default class Extension {
|
|
|
381
351
|
request,
|
|
382
352
|
resolve
|
|
383
353
|
} = queued;
|
|
384
|
-
const pair = keyring.getPair(queued.account.address);
|
|
354
|
+
const pair = keyring.getPair(queued.account.address);
|
|
355
|
+
|
|
356
|
+
// unlike queued.account.address the following
|
|
385
357
|
// address is encoded with the default prefix
|
|
386
358
|
// which what is used for password caching mapping
|
|
387
|
-
|
|
388
359
|
const {
|
|
389
360
|
address
|
|
390
361
|
} = pair;
|
|
391
|
-
|
|
392
362
|
if (!pair) {
|
|
393
363
|
reject(new Error('Unable to find pair'));
|
|
394
364
|
return false;
|
|
395
365
|
}
|
|
366
|
+
this.refreshAccountPasswordCache(pair);
|
|
396
367
|
|
|
397
|
-
|
|
398
|
-
|
|
368
|
+
// if the keyring pair is locked, the password is needed
|
|
399
369
|
if (pair.isLocked && !password) {
|
|
400
370
|
reject(new Error('Password needed to unlock the account'));
|
|
401
371
|
}
|
|
402
|
-
|
|
403
372
|
if (pair.isLocked) {
|
|
404
373
|
pair.decodePkcs8(password);
|
|
405
374
|
}
|
|
406
|
-
|
|
407
375
|
const {
|
|
408
376
|
payload
|
|
409
377
|
} = request;
|
|
410
|
-
|
|
411
378
|
if (isJsonPayload(payload)) {
|
|
412
379
|
// Get the metadata for the genesisHash
|
|
413
|
-
const currentMetadata = this.#state.knownMetadata.find(meta => meta.genesisHash === payload.genesisHash);
|
|
380
|
+
const currentMetadata = this.#state.knownMetadata.find(meta => meta.genesisHash === payload.genesisHash);
|
|
414
381
|
|
|
382
|
+
// set the registry before calling the sign function
|
|
415
383
|
registry.setSignedExtensions(payload.signedExtensions, currentMetadata === null || currentMetadata === void 0 ? void 0 : currentMetadata.userExtensions);
|
|
416
|
-
|
|
417
384
|
if (currentMetadata) {
|
|
418
385
|
registry.register(currentMetadata === null || currentMetadata === void 0 ? void 0 : currentMetadata.types);
|
|
419
386
|
}
|
|
420
387
|
}
|
|
421
|
-
|
|
422
388
|
const result = request.sign(registry, pair);
|
|
423
|
-
|
|
424
389
|
if (savePass) {
|
|
425
390
|
this.#cachedUnlocks[address] = Date.now() + PASSWORD_EXPIRY_MS;
|
|
426
391
|
} else {
|
|
427
392
|
pair.lock();
|
|
428
393
|
}
|
|
429
|
-
|
|
430
394
|
resolve({
|
|
431
395
|
id,
|
|
432
396
|
...result
|
|
433
397
|
});
|
|
434
398
|
return true;
|
|
435
399
|
}
|
|
436
|
-
|
|
437
400
|
signingApproveSignature({
|
|
438
401
|
id,
|
|
439
402
|
signature
|
|
@@ -449,7 +412,6 @@ export default class Extension {
|
|
|
449
412
|
});
|
|
450
413
|
return true;
|
|
451
414
|
}
|
|
452
|
-
|
|
453
415
|
signingCancel({
|
|
454
416
|
id
|
|
455
417
|
}) {
|
|
@@ -461,7 +423,6 @@ export default class Extension {
|
|
|
461
423
|
reject(new Error('Cancelled'));
|
|
462
424
|
return true;
|
|
463
425
|
}
|
|
464
|
-
|
|
465
426
|
signingIsLocked({
|
|
466
427
|
id
|
|
467
428
|
}) {
|
|
@@ -476,7 +437,6 @@ export default class Extension {
|
|
|
476
437
|
remainingTime
|
|
477
438
|
};
|
|
478
439
|
}
|
|
479
|
-
|
|
480
440
|
qrIsLocked({
|
|
481
441
|
address
|
|
482
442
|
}) {
|
|
@@ -488,7 +448,6 @@ export default class Extension {
|
|
|
488
448
|
remainingTime
|
|
489
449
|
};
|
|
490
450
|
}
|
|
491
|
-
|
|
492
451
|
qrSignSubstrate({
|
|
493
452
|
address,
|
|
494
453
|
message,
|
|
@@ -497,11 +456,9 @@ export default class Extension {
|
|
|
497
456
|
}) {
|
|
498
457
|
const pair = keyring.getPair(address);
|
|
499
458
|
assert(pair, 'Unable to find pair');
|
|
500
|
-
|
|
501
459
|
if (pair.isLocked && !password) {
|
|
502
460
|
throw new Error('Password needed to unlock the account');
|
|
503
461
|
}
|
|
504
|
-
|
|
505
462
|
if (pair.isLocked) {
|
|
506
463
|
try {
|
|
507
464
|
pair.decodePkcs8(password);
|
|
@@ -509,22 +466,19 @@ export default class Extension {
|
|
|
509
466
|
throw new Error('invalid password');
|
|
510
467
|
}
|
|
511
468
|
}
|
|
512
|
-
|
|
513
469
|
const signed = u8aToHex(pair.sign(message));
|
|
514
470
|
const _address = pair.address;
|
|
515
|
-
|
|
516
471
|
if (savePass) {
|
|
517
472
|
this.#cachedUnlocks[_address] = Date.now() + PASSWORD_EXPIRY_MS;
|
|
518
473
|
} else {
|
|
519
474
|
pair.lock();
|
|
520
475
|
}
|
|
521
|
-
|
|
522
476
|
return {
|
|
523
477
|
signature: signed
|
|
524
478
|
};
|
|
525
|
-
}
|
|
526
|
-
|
|
479
|
+
}
|
|
527
480
|
|
|
481
|
+
// FIXME This looks very much like what we have in authorization
|
|
528
482
|
signingSubscribe(id, port) {
|
|
529
483
|
const cb = createSubscription(id, port);
|
|
530
484
|
const subscription = this.#state.signSubject.subscribe(requests => cb(requests));
|
|
@@ -534,37 +488,30 @@ export default class Extension {
|
|
|
534
488
|
});
|
|
535
489
|
return true;
|
|
536
490
|
}
|
|
537
|
-
|
|
538
491
|
windowOpen(path) {
|
|
539
492
|
const url = `${chrome.extension.getURL('index.html')}#${path}`;
|
|
540
|
-
|
|
541
493
|
if (!ALLOWED_PATH.includes(path)) {
|
|
542
494
|
console.error('Not allowed to open the url:', url);
|
|
543
495
|
return false;
|
|
544
496
|
}
|
|
545
|
-
|
|
546
497
|
withErrorLog(() => chrome.tabs.create({
|
|
547
498
|
url
|
|
548
499
|
}));
|
|
549
500
|
return true;
|
|
550
501
|
}
|
|
551
|
-
|
|
552
502
|
derive(parentAddress, suri, password, metadata) {
|
|
553
503
|
const parentPair = keyring.getPair(parentAddress);
|
|
554
|
-
|
|
555
504
|
try {
|
|
556
505
|
parentPair.decodePkcs8(password);
|
|
557
506
|
} catch (e) {
|
|
558
507
|
throw new Error('invalid password');
|
|
559
508
|
}
|
|
560
|
-
|
|
561
509
|
try {
|
|
562
510
|
return parentPair.derive(suri, metadata);
|
|
563
511
|
} catch (err) {
|
|
564
512
|
throw new Error(`"${suri}" is not a valid derivation path`);
|
|
565
513
|
}
|
|
566
514
|
}
|
|
567
|
-
|
|
568
515
|
derivationValidate({
|
|
569
516
|
parentAddress,
|
|
570
517
|
parentPassword,
|
|
@@ -576,7 +523,6 @@ export default class Extension {
|
|
|
576
523
|
suri
|
|
577
524
|
};
|
|
578
525
|
}
|
|
579
|
-
|
|
580
526
|
derivationCreate({
|
|
581
527
|
genesisHash,
|
|
582
528
|
name,
|
|
@@ -594,136 +540,96 @@ export default class Extension {
|
|
|
594
540
|
keyring.addPair(childPair, password);
|
|
595
541
|
return true;
|
|
596
542
|
}
|
|
597
|
-
|
|
598
543
|
toggleAuthorization(url) {
|
|
599
544
|
return {
|
|
600
545
|
list: this.#state.toggleAuthorization(url)
|
|
601
546
|
};
|
|
602
|
-
}
|
|
603
|
-
// eslint-disable-next-line @typescript-eslint/require-await
|
|
604
|
-
|
|
547
|
+
}
|
|
605
548
|
|
|
549
|
+
// Weird thought, the eslint override is not needed in Tabs
|
|
550
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
606
551
|
async handle(id, type, request, port) {
|
|
607
552
|
switch (type) {
|
|
608
553
|
case 'pri(authorize.approve)':
|
|
609
554
|
return this.authorizeApprove(request);
|
|
610
|
-
|
|
611
555
|
case 'pri(authorize.list)':
|
|
612
556
|
return this.getAuthList();
|
|
613
|
-
|
|
614
557
|
case 'pri(authorize.reject)':
|
|
615
558
|
return this.authorizeReject(request);
|
|
616
|
-
|
|
617
559
|
case 'pri(authorize.toggle)':
|
|
618
560
|
return this.toggleAuthorization(request);
|
|
619
|
-
|
|
620
561
|
case 'pri(authorize.requests)':
|
|
621
562
|
return this.authorizeSubscribe(id, port);
|
|
622
|
-
|
|
623
563
|
case 'pri(accounts.create.external)':
|
|
624
564
|
return this.accountsCreateExternal(request);
|
|
625
|
-
|
|
626
565
|
case 'pri(accounts.create.hardware)':
|
|
627
566
|
return this.accountsCreateHardware(request);
|
|
628
|
-
|
|
629
567
|
case 'pri(accounts.create.suri)':
|
|
630
568
|
return this.accountsCreateSuri(request);
|
|
631
|
-
|
|
632
569
|
case 'pri(accounts.changePassword)':
|
|
633
570
|
return this.accountsChangePassword(request);
|
|
634
|
-
|
|
635
571
|
case 'pri(accounts.edit)':
|
|
636
572
|
return this.accountsEdit(request);
|
|
637
|
-
|
|
638
573
|
case 'pri(accounts.export)':
|
|
639
574
|
return this.accountsExport(request);
|
|
640
|
-
|
|
641
575
|
case 'pri(accounts.batchExport)':
|
|
642
576
|
// return this.accountsBatchExport(request as RequestAccountBatchExport);
|
|
643
577
|
// Disable export all util use master password
|
|
644
578
|
return null;
|
|
645
|
-
|
|
646
579
|
case 'pri(accounts.forget)':
|
|
647
580
|
return this.accountsForget(request);
|
|
648
|
-
|
|
649
581
|
case 'pri(accounts.show)':
|
|
650
582
|
return this.accountsShow(request);
|
|
651
|
-
|
|
652
583
|
case 'pri(accounts.subscribe)':
|
|
653
584
|
return this.accountsSubscribe(id, port);
|
|
654
|
-
|
|
655
585
|
case 'pri(accounts.tie)':
|
|
656
586
|
return this.accountsTie(request);
|
|
657
|
-
|
|
658
587
|
case 'pri(accounts.validate)':
|
|
659
588
|
return this.accountsValidate(request);
|
|
660
|
-
|
|
661
589
|
case 'pri(metadata.approve)':
|
|
662
590
|
return this.metadataApprove(request);
|
|
663
|
-
|
|
664
591
|
case 'pri(metadata.get)':
|
|
665
592
|
return this.metadataGet(request);
|
|
666
|
-
|
|
667
593
|
case 'pri(metadata.list)':
|
|
668
594
|
return this.metadataList();
|
|
669
|
-
|
|
670
595
|
case 'pri(metadata.reject)':
|
|
671
596
|
return this.metadataReject(request);
|
|
672
|
-
|
|
673
597
|
case 'pri(metadata.requests)':
|
|
674
598
|
return this.metadataSubscribe(id, port);
|
|
675
|
-
|
|
676
599
|
case 'pri(derivation.create)':
|
|
677
600
|
return this.derivationCreate(request);
|
|
678
|
-
|
|
679
601
|
case 'pri(derivation.validate)':
|
|
680
602
|
return this.derivationValidate(request);
|
|
681
|
-
|
|
682
603
|
case 'pri(json.restore)':
|
|
683
604
|
return this.jsonRestore(request);
|
|
684
|
-
|
|
685
605
|
case 'pri(json.batchRestore)':
|
|
686
606
|
return this.batchRestore(request);
|
|
687
|
-
|
|
688
607
|
case 'pri(json.account.info)':
|
|
689
608
|
return this.jsonGetAccountInfo(request);
|
|
690
|
-
|
|
691
609
|
case 'pri(seed.create)':
|
|
692
610
|
return this.seedCreate(request);
|
|
693
|
-
|
|
694
611
|
case 'pri(seed.validate)':
|
|
695
612
|
return this.seedValidate(request);
|
|
696
|
-
|
|
697
613
|
case 'pri(settings.notification)':
|
|
698
614
|
return this.#state.setNotification(request);
|
|
699
|
-
|
|
700
615
|
case 'pri(signing.approve.password)':
|
|
701
616
|
return this.signingApprovePassword(request);
|
|
702
|
-
|
|
703
617
|
case 'pri(signing.approve.signature)':
|
|
704
618
|
return this.signingApproveSignature(request);
|
|
705
|
-
|
|
706
619
|
case 'pri(signing.cancel)':
|
|
707
620
|
return this.signingCancel(request);
|
|
708
|
-
|
|
709
621
|
case 'pri(signing.isLocked)':
|
|
710
622
|
return this.signingIsLocked(request);
|
|
711
|
-
|
|
712
623
|
case 'pri(qr.isLocked)':
|
|
713
624
|
return this.qrIsLocked(request);
|
|
714
|
-
|
|
715
625
|
case 'pri(qr.sign.substrate)':
|
|
716
626
|
return this.qrSignSubstrate(request);
|
|
717
|
-
|
|
718
627
|
case 'pri(signing.requests)':
|
|
719
628
|
return this.signingSubscribe(id, port);
|
|
720
|
-
|
|
721
629
|
case 'pri(window.open)':
|
|
722
630
|
return this.windowOpen(request);
|
|
723
|
-
|
|
724
631
|
default:
|
|
725
632
|
throw new Error(`Unable to handle message of type ${type}`);
|
|
726
633
|
}
|
|
727
634
|
}
|
|
728
|
-
|
|
729
635
|
}
|