@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.
Files changed (67) hide show
  1. package/background/KoniTypes.d.ts +64 -53
  2. package/background/KoniTypes.js +13 -23
  3. package/background/RequestBytesSign.js +1 -2
  4. package/background/RequestExtrinsicSign.js +1 -2
  5. package/background/handlers/Extension.js +28 -122
  6. package/background/handlers/State.js +28 -71
  7. package/background/handlers/Tabs.js +9 -45
  8. package/background/handlers/helpers.js +1 -1
  9. package/background/handlers/index.js +4 -2
  10. package/background/handlers/subscriptions.js +5 -2
  11. package/bundle.js +1 -0
  12. package/cjs/background/KoniTypes.js +15 -24
  13. package/cjs/background/RequestBytesSign.js +1 -6
  14. package/cjs/background/RequestExtrinsicSign.js +1 -4
  15. package/cjs/background/handlers/Extension.js +27 -174
  16. package/cjs/background/handlers/State.js +28 -82
  17. package/cjs/background/handlers/Tabs.js +9 -60
  18. package/cjs/background/handlers/helpers.js +1 -2
  19. package/cjs/background/handlers/index.js +4 -10
  20. package/cjs/background/handlers/subscriptions.js +5 -4
  21. package/cjs/bundle.js +0 -1
  22. package/cjs/defaults.js +2 -3
  23. package/cjs/detectOther.js +0 -4
  24. package/cjs/detectPackage.js +2 -4
  25. package/cjs/errors/SubWalletProviderError.js +1 -3
  26. package/cjs/index.js +0 -2
  27. package/cjs/packageInfo.js +3 -1
  28. package/cjs/page/Accounts.js +3 -6
  29. package/cjs/page/Injected.js +1 -8
  30. package/cjs/page/Metadata.js +1 -5
  31. package/cjs/page/PostMessageProvider.js +22 -38
  32. package/cjs/page/Signer.js +11 -11
  33. package/cjs/page/index.js +6 -13
  34. package/cjs/signers/substrates/LedgerSigner.js +1 -7
  35. package/cjs/signers/substrates/QrSigner.js +1 -10
  36. package/cjs/signers/web3/QrSigner.js +1 -12
  37. package/cjs/stores/Accounts.js +1 -8
  38. package/cjs/stores/Base.js +1 -15
  39. package/cjs/stores/Metadata.js +1 -6
  40. package/cjs/stores/index.js +0 -3
  41. package/cjs/utils/canDerive.js +1 -1
  42. package/cjs/utils/getId.js +1 -3
  43. package/cjs/utils/index.js +0 -1
  44. package/defaults.d.ts +1 -2
  45. package/defaults.js +2 -2
  46. package/detectOther.js +1 -0
  47. package/detectPackage.js +2 -0
  48. package/errors/SubWalletProviderError.js +1 -1
  49. package/index.js +2 -0
  50. package/package.json +5 -5
  51. package/packageInfo.js +3 -1
  52. package/page/Accounts.js +3 -4
  53. package/page/Injected.js +1 -1
  54. package/page/Metadata.js +1 -3
  55. package/page/PostMessageProvider.js +22 -33
  56. package/page/Signer.js +11 -9
  57. package/page/index.js +8 -6
  58. package/signers/substrates/LedgerSigner.js +1 -3
  59. package/signers/substrates/QrSigner.js +1 -5
  60. package/signers/web3/QrSigner.js +1 -5
  61. package/stores/Accounts.js +1 -3
  62. package/stores/Base.js +1 -13
  63. package/stores/Metadata.js +1 -1
  64. package/stores/index.js +1 -0
  65. package/utils/canDerive.js +1 -0
  66. package/utils/getId.js +1 -0
  67. 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'; // a global registry to use internally
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, { ...pair.meta,
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
- } // private async accountsBatchExport ({ addresses, password }: RequestAccountBatchExport): Promise<ResponseAccountsExport> {
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, { ...pair.meta,
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, { ...pair.meta,
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
- } // FIXME This looks very much like what we have in Tabs
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
- } // FIXME This looks very much like what we have in accounts
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); // unlike queued.account.address the following
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
- this.refreshAccountPasswordCache(pair); // if the keyring pair is locked, the password is needed
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); // set the registry before calling the sign function
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
- } // FIXME This looks very much like what we have in authorization
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
- } // Weird thought, the eslint override is not needed in Tabs
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
  }