@subwallet/extension-base 0.5.3-1 → 0.5.4-0

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.
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.TransferStep = exports.TransferErrorCode = exports.RMRK_VER = exports.NETWORK_STATUS = exports.NETWORK_ERROR = exports.CrowdloanParaState = exports.ApiInitStatus = exports.APIItemState = void 0;
6
+ exports.TransferStep = exports.TransferErrorCode = exports.RMRK_VER = exports.NETWORK_STATUS = exports.NETWORK_ERROR = exports.ExternalRequestPromiseStatus = exports.CrowdloanParaState = exports.BasicTxErrorCode = exports.ApiInitStatus = exports.AccountExternalErrorCode = exports.APIItemState = void 0;
7
7
  // Copyright 2019-2022 @polkadot/extension-koni authors & contributors
8
8
  // SPDX-License-Identifier: Apache-2.0
9
9
  let ApiInitStatus;
@@ -77,19 +77,59 @@ exports.TransferErrorCode = TransferErrorCode;
77
77
  TransferErrorCode["NOT_ENOUGH_VALUE"] = "notEnoughValue";
78
78
  TransferErrorCode["INVALID_VALUE"] = "invalidValue";
79
79
  TransferErrorCode["INVALID_TOKEN"] = "invalidToken";
80
+ TransferErrorCode["INVALID_PARAM"] = "invalidParam";
80
81
  TransferErrorCode["KEYRING_ERROR"] = "keyringError";
81
82
  TransferErrorCode["TRANSFER_ERROR"] = "transferError";
82
83
  TransferErrorCode["TIMEOUT"] = "timeout";
83
84
  TransferErrorCode["UNSUPPORTED"] = "unsupported";
84
85
  })(TransferErrorCode || (exports.TransferErrorCode = TransferErrorCode = {}));
85
86
 
87
+ let BasicTxErrorCode;
88
+ exports.BasicTxErrorCode = BasicTxErrorCode;
89
+
90
+ (function (BasicTxErrorCode) {
91
+ BasicTxErrorCode["INVALID_FROM_ADDRESS"] = "invalidFromAccount";
92
+ BasicTxErrorCode["INVALID_TO_ADDRESS"] = "invalidToAccount";
93
+ BasicTxErrorCode["NOT_ENOUGH_VALUE"] = "notEnoughValue";
94
+ BasicTxErrorCode["INVALID_VALUE"] = "invalidValue";
95
+ BasicTxErrorCode["INVALID_TOKEN"] = "invalidToken";
96
+ BasicTxErrorCode["INVALID_PARAM"] = "invalidParam";
97
+ BasicTxErrorCode["KEYRING_ERROR"] = "keyringError";
98
+ BasicTxErrorCode["TRANSFER_ERROR"] = "transferError";
99
+ BasicTxErrorCode["STAKING_ERROR"] = "stakingError";
100
+ BasicTxErrorCode["UN_STAKING_ERROR"] = "unStakingError";
101
+ BasicTxErrorCode["WITHDRAW_STAKING_ERROR"] = "withdrawStakingError";
102
+ BasicTxErrorCode["TIMEOUT"] = "timeout";
103
+ BasicTxErrorCode["UNSUPPORTED"] = "unsupported";
104
+ })(BasicTxErrorCode || (exports.BasicTxErrorCode = BasicTxErrorCode = {}));
105
+
86
106
  let TransferStep;
87
107
  exports.TransferStep = TransferStep;
88
108
 
89
109
  (function (TransferStep) {
90
110
  TransferStep["READY"] = "ready";
111
+ TransferStep["SIGNING"] = "signing";
91
112
  TransferStep["START"] = "start";
92
113
  TransferStep["PROCESSING"] = "processing";
93
114
  TransferStep["SUCCESS"] = "success";
94
115
  TransferStep["ERROR"] = "error";
95
- })(TransferStep || (exports.TransferStep = TransferStep = {}));
116
+ })(TransferStep || (exports.TransferStep = TransferStep = {}));
117
+
118
+ let ExternalRequestPromiseStatus;
119
+ exports.ExternalRequestPromiseStatus = ExternalRequestPromiseStatus;
120
+
121
+ (function (ExternalRequestPromiseStatus) {
122
+ ExternalRequestPromiseStatus[ExternalRequestPromiseStatus["PENDING"] = 0] = "PENDING";
123
+ ExternalRequestPromiseStatus[ExternalRequestPromiseStatus["REJECTED"] = 1] = "REJECTED";
124
+ ExternalRequestPromiseStatus[ExternalRequestPromiseStatus["FAILED"] = 2] = "FAILED";
125
+ ExternalRequestPromiseStatus[ExternalRequestPromiseStatus["COMPLETED"] = 3] = "COMPLETED";
126
+ })(ExternalRequestPromiseStatus || (exports.ExternalRequestPromiseStatus = ExternalRequestPromiseStatus = {}));
127
+
128
+ let AccountExternalErrorCode;
129
+ exports.AccountExternalErrorCode = AccountExternalErrorCode;
130
+
131
+ (function (AccountExternalErrorCode) {
132
+ AccountExternalErrorCode["INVALID_ADDRESS"] = "invalidToAccount";
133
+ AccountExternalErrorCode["KEYRING_ERROR"] = "keyringError";
134
+ AccountExternalErrorCode["UNKNOWN_ERROR"] = "unknownError";
135
+ })(AccountExternalErrorCode || (exports.AccountExternalErrorCode = AccountExternalErrorCode = {}));
@@ -557,6 +557,59 @@ class Extension {
557
557
  isLocked: pair.isLocked,
558
558
  remainingTime
559
559
  };
560
+ }
561
+
562
+ qrIsLocked(_ref24) {
563
+ let {
564
+ address
565
+ } = _ref24;
566
+
567
+ const pair = _uiKeyring.default.getPair(address);
568
+
569
+ (0, _util.assert)(pair, 'Unable to find pair');
570
+ const remainingTime = this.refreshAccountPasswordCache(pair);
571
+ return {
572
+ isLocked: pair.isLocked,
573
+ remainingTime
574
+ };
575
+ }
576
+
577
+ qrSignSubstrate(_ref25) {
578
+ let {
579
+ address,
580
+ message,
581
+ password,
582
+ savePass
583
+ } = _ref25;
584
+
585
+ const pair = _uiKeyring.default.getPair(address);
586
+
587
+ (0, _util.assert)(pair, 'Unable to find pair');
588
+
589
+ if (pair.isLocked && !password) {
590
+ throw new Error('Password needed to unlock the account');
591
+ }
592
+
593
+ if (pair.isLocked) {
594
+ try {
595
+ pair.decodePkcs8(password);
596
+ } catch (e) {
597
+ throw new Error('invalid password');
598
+ }
599
+ }
600
+
601
+ const signed = (0, _util.u8aToHex)(pair.sign(message));
602
+ const _address = pair.address;
603
+
604
+ if (savePass) {
605
+ this.#cachedUnlocks[_address] = Date.now() + _defaults.PASSWORD_EXPIRY_MS;
606
+ } else {
607
+ pair.lock();
608
+ }
609
+
610
+ return {
611
+ signature: signed
612
+ };
560
613
  } // FIXME This looks very much like what we have in authorization
561
614
 
562
615
 
@@ -600,12 +653,12 @@ class Extension {
600
653
  }
601
654
  }
602
655
 
603
- derivationValidate(_ref24) {
656
+ derivationValidate(_ref26) {
604
657
  let {
605
658
  parentAddress,
606
659
  parentPassword,
607
660
  suri
608
- } = _ref24;
661
+ } = _ref26;
609
662
  const childPair = this.derive(parentAddress, suri, parentPassword, {});
610
663
  return {
611
664
  address: childPair.address,
@@ -613,7 +666,7 @@ class Extension {
613
666
  };
614
667
  }
615
668
 
616
- derivationCreate(_ref25) {
669
+ derivationCreate(_ref27) {
617
670
  let {
618
671
  genesisHash,
619
672
  name,
@@ -621,7 +674,7 @@ class Extension {
621
674
  parentPassword,
622
675
  password,
623
676
  suri
624
- } = _ref25;
677
+ } = _ref27;
625
678
  const childPair = this.derive(parentAddress, suri, parentPassword, {
626
679
  genesisHash,
627
680
  name,
@@ -748,6 +801,12 @@ class Extension {
748
801
  case 'pri(signing.isLocked)':
749
802
  return this.signingIsLocked(request);
750
803
 
804
+ case 'pri(qr.isLocked)':
805
+ return this.qrIsLocked(request);
806
+
807
+ case 'pri(qr.sign.substrate)':
808
+ return this.qrSignSubstrate(request);
809
+
751
810
  case 'pri(signing.requests)':
752
811
  return this.signingSubscribe(id, port);
753
812
 
package/cjs/defaults.js CHANGED
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.PORT_EXTENSION = exports.PORT_CONTENT = exports.PHISHING_PAGE_REDIRECT = exports.PASSWORD_EXPIRY_MS = exports.PASSWORD_EXPIRY_MIN = exports.MESSAGE_ORIGIN_PAGE = exports.MESSAGE_ORIGIN_CONTENT = exports.EXTENSION_PREFIX = exports.ALLOWED_PATH = void 0;
7
7
  // Copyright 2019-2022 @polkadot/extension-base authors & contributors
8
8
  // SPDX-License-Identifier: Apache-2.0
9
- const ALLOWED_PATH = ['/', '/account/import-ledger', '/account/restore-json', '/account/create'];
9
+ const ALLOWED_PATH = ['/', '/account/import-ledger', '/account/restore-json', '/account/create', '/account/settings'];
10
10
  exports.ALLOWED_PATH = ALLOWED_PATH;
11
11
  const PHISHING_PAGE_REDIRECT = '/phishing-page-detected';
12
12
  exports.PHISHING_PAGE_REDIRECT = PHISHING_PAGE_REDIRECT;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SubWalletProviderError = void 0;
7
+
8
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
9
+ // SPDX-License-Identifier: Apache-2.0
10
+ class SubWalletProviderError extends Error {
11
+ constructor(message, code, data) {
12
+ super(message);
13
+ this.code = code;
14
+ this.data = data;
15
+ }
16
+
17
+ }
18
+
19
+ exports.SubWalletProviderError = SubWalletProviderError;
@@ -11,6 +11,6 @@ const packageInfo = {
11
11
  name: '@subwallet/extension-base',
12
12
  path: typeof __dirname === 'string' ? __dirname : 'auto',
13
13
  type: 'cjs',
14
- version: '0.5.3-1'
14
+ version: '0.5.4-0'
15
15
  };
16
16
  exports.packageInfo = packageInfo;
package/cjs/page/index.js CHANGED
@@ -9,6 +9,8 @@ exports.enable = enable;
9
9
  exports.handleResponse = handleResponse;
10
10
  exports.sendMessage = sendMessage;
11
11
 
12
+ var _SubWalletProviderError = require("@subwallet/extension-base/errors/SubWalletProviderError");
13
+
12
14
  var _defaults = require("../defaults");
13
15
 
14
16
  var _getId = require("../utils/getId");
@@ -62,7 +64,7 @@ function handleResponse(data) {
62
64
  // eslint-disable-next-line @typescript-eslint/ban-types
63
65
  handler.subscriber(data.subscription);
64
66
  } else if (data.error) {
65
- handler.reject(new Error(data.error));
67
+ handler.reject(new _SubWalletProviderError.SubWalletProviderError(data.error, data.errorCode, data.errorData));
66
68
  } else {
67
69
  handler.resolve(data.response);
68
70
  }
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
9
+
10
+ var _util = require("@polkadot/util");
11
+
12
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
13
+ // SPDX-License-Identifier: Apache-2.0
14
+ class LedgerSigner {
15
+ #registry;
16
+ #callback;
17
+ #setState;
18
+ #id;
19
+
20
+ constructor(registry, callback, id, setState) {
21
+ this.#registry = registry;
22
+ this.#callback = callback;
23
+ this.#id = id;
24
+ this.#setState = setState;
25
+ }
26
+
27
+ async signPayload(payload) {
28
+ return new Promise((resolve, reject) => {
29
+ const raw = this.#registry.createType('ExtrinsicPayload', payload, {
30
+ version: payload.version
31
+ });
32
+ const ledgerPayload = raw.toU8a(true);
33
+ this.#setState({
34
+ reject: reject,
35
+ resolve: resolve,
36
+ status: _KoniTypes.ExternalRequestPromiseStatus.PENDING,
37
+ createdAt: new Date().getTime()
38
+ });
39
+ this.#callback({
40
+ ledgerState: {
41
+ ledgerPayload: (0, _util.u8aToHex)(ledgerPayload),
42
+ ledgerId: this.#id
43
+ }
44
+ });
45
+ });
46
+ }
47
+
48
+ }
49
+
50
+ exports.default = LedgerSigner;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
9
+
10
+ var _util = require("@polkadot/util");
11
+
12
+ var _utilCrypto = require("@polkadot/util-crypto");
13
+
14
+ // Copyright 2017-2022 @polkadot/react-signer authors & contributors
15
+ // SPDX-License-Identifier: Apache-2.0
16
+ class QrSigner {
17
+ #callback;
18
+ #id;
19
+ #registry;
20
+ #resolver;
21
+ #setState;
22
+
23
+ constructor(_ref) {
24
+ let {
25
+ callback,
26
+ id,
27
+ registry,
28
+ resolver,
29
+ setState
30
+ } = _ref;
31
+ this.#callback = callback;
32
+ this.#id = id;
33
+ this.#registry = registry;
34
+ this.#resolver = resolver;
35
+ this.#setState = setState;
36
+ }
37
+
38
+ async signPayload(payload) {
39
+ return new Promise((resolve, reject) => {
40
+ // limit size of the transaction
41
+ const isQrHashed = payload.method.length > 5000;
42
+ const wrapper = this.#registry.createType('ExtrinsicPayload', payload, {
43
+ version: payload.version
44
+ });
45
+ const qrPayload = isQrHashed ? (0, _utilCrypto.blake2AsU8a)(wrapper.toU8a(true)) : wrapper.toU8a();
46
+
47
+ const resolver = result => {
48
+ this.#resolver();
49
+ resolve(result);
50
+ };
51
+
52
+ this.#setState({
53
+ reject: reject,
54
+ resolve: resolver,
55
+ status: _KoniTypes.ExternalRequestPromiseStatus.PENDING,
56
+ createdAt: new Date().getTime()
57
+ });
58
+ this.#callback({
59
+ qrState: {
60
+ isQrHashed,
61
+ qrAddress: payload.address,
62
+ qrPayload: (0, _util.u8aToHex)(qrPayload),
63
+ qrId: this.#id,
64
+ isEthereum: false
65
+ }
66
+ });
67
+ });
68
+ }
69
+
70
+ }
71
+
72
+ exports.default = QrSigner;
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
11
+
12
+ var _rlp = _interopRequireDefault(require("rlp"));
13
+
14
+ var _util = require("@polkadot/util");
15
+
16
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
17
+ // SPDX-License-Identifier: Apache-2.0
18
+ class QrSigner {
19
+ #callback;
20
+ #id;
21
+ #resolver;
22
+ #setState;
23
+
24
+ constructor(_ref) {
25
+ let {
26
+ callback,
27
+ id,
28
+ resolver,
29
+ setState
30
+ } = _ref;
31
+ this.#callback = callback;
32
+ this.#id = id;
33
+ this.#resolver = resolver;
34
+ this.#setState = setState;
35
+ }
36
+
37
+ async signTransaction(tx) {
38
+ return new Promise((resolve, reject) => {
39
+ const data = [tx.nonce, tx.gasPrice, tx.gasLimit, tx.to, tx.value, tx.data, tx.chainId, new Uint8Array([0x00]), new Uint8Array([0x00])];
40
+
41
+ const qrPayload = _rlp.default.encode(data);
42
+
43
+ const resolver = result => {
44
+ this.#resolver();
45
+ resolve(result);
46
+ };
47
+
48
+ this.#setState({
49
+ reject: reject,
50
+ resolve: resolver,
51
+ status: _KoniTypes.ExternalRequestPromiseStatus.PENDING,
52
+ createdAt: new Date().getTime()
53
+ });
54
+ this.#callback({
55
+ qrState: {
56
+ isQrHashed: false,
57
+ qrAddress: tx.from,
58
+ qrPayload: (0, _util.u8aToHex)(qrPayload),
59
+ qrId: this.#id,
60
+ isEthereum: true
61
+ }
62
+ });
63
+ });
64
+ }
65
+
66
+ }
67
+
68
+ exports.default = QrSigner;
package/defaults.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- declare const ALLOWED_PATH: readonly ["/", "/account/import-ledger", "/account/restore-json", "/account/create"];
1
+ declare const ALLOWED_PATH: readonly ["/", "/account/import-ledger", "/account/restore-json", "/account/create", "/account/settings"];
2
2
  declare const PHISHING_PAGE_REDIRECT = "/phishing-page-detected";
3
3
  declare const EXTENSION_PREFIX: string;
4
4
  declare const PORT_CONTENT: string;
package/defaults.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // Copyright 2019-2022 @polkadot/extension-base authors & contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- const ALLOWED_PATH = ['/', '/account/import-ledger', '/account/restore-json', '/account/create'];
3
+ const ALLOWED_PATH = ['/', '/account/import-ledger', '/account/restore-json', '/account/create', '/account/settings'];
4
4
  const PHISHING_PAGE_REDIRECT = '/phishing-page-detected';
5
5
  const EXTENSION_PREFIX = process.env.EXTENSION_PREFIX || '';
6
6
  const PORT_CONTENT = `${EXTENSION_PREFIX}koni-content`;
@@ -0,0 +1,6 @@
1
+ import { SubWalletProviderErrorInterface } from '@subwallet/extension-base/background/KoniTypes';
2
+ export declare class SubWalletProviderError extends Error implements SubWalletProviderErrorInterface {
3
+ code: number | undefined;
4
+ data: unknown | undefined;
5
+ constructor(message: string, code?: number, data?: unknown);
6
+ }
@@ -0,0 +1,10 @@
1
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ export class SubWalletProviderError extends Error {
4
+ constructor(message, code, data) {
5
+ super(message);
6
+ this.code = code;
7
+ this.data = data;
8
+ }
9
+
10
+ }
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "./cjs/detectPackage.js"
18
18
  ],
19
19
  "type": "module",
20
- "version": "0.5.3-1",
20
+ "version": "0.5.4-0",
21
21
  "main": "./cjs/index.js",
22
22
  "module": "./index.js",
23
23
  "types": "./index.d.ts",
@@ -99,6 +99,11 @@
99
99
  "require": "./cjs/detectPackage.js",
100
100
  "default": "./detectPackage.js"
101
101
  },
102
+ "./errors/SubWalletProviderError": {
103
+ "types": "./errors/SubWalletProviderError.d.ts",
104
+ "require": "./cjs/errors/SubWalletProviderError.js",
105
+ "default": "./errors/SubWalletProviderError.js"
106
+ },
102
107
  "./package.json": "./package.json",
103
108
  "./packageInfo.js": {
104
109
  "types": "./packageInfo.d.ts",
@@ -145,6 +150,26 @@
145
150
  "require": "./cjs/page/types.js",
146
151
  "default": "./page/types.js"
147
152
  },
153
+ "./signers/substrates/LedgerSigner": {
154
+ "types": "./signers/substrates/LedgerSigner.d.ts",
155
+ "require": "./cjs/signers/substrates/LedgerSigner.js",
156
+ "default": "./signers/substrates/LedgerSigner.js"
157
+ },
158
+ "./signers/substrates/QrSigner": {
159
+ "types": "./signers/substrates/QrSigner.d.ts",
160
+ "require": "./cjs/signers/substrates/QrSigner.js",
161
+ "default": "./signers/substrates/QrSigner.js"
162
+ },
163
+ "./signers/types": {
164
+ "types": "./signers/types.d.ts",
165
+ "require": "./cjs/signers/types.js",
166
+ "default": "./signers/types.js"
167
+ },
168
+ "./signers/web3/QrSigner": {
169
+ "types": "./signers/web3/QrSigner.d.ts",
170
+ "require": "./cjs/signers/web3/QrSigner.js",
171
+ "default": "./signers/web3/QrSigner.js"
172
+ },
148
173
  "./stores": {
149
174
  "types": "./stores/index.d.ts",
150
175
  "require": "./cjs/stores/index.js",
@@ -199,11 +224,12 @@
199
224
  "@polkadot/ui-settings": "^2.7.2",
200
225
  "@polkadot/util": "^9.7.2",
201
226
  "@polkadot/util-crypto": "^9.7.2",
202
- "@subwallet/extension-chains": "^0.5.3-1",
203
- "@subwallet/extension-dapp": "^0.5.3-1",
204
- "@subwallet/extension-inject": "^0.5.3-1",
227
+ "@subwallet/extension-chains": "^0.5.4-0",
228
+ "@subwallet/extension-dapp": "^0.5.4-0",
229
+ "@subwallet/extension-inject": "^0.5.4-0",
205
230
  "ethereumjs-tx": "^2.1.2",
206
231
  "eventemitter3": "^4.0.7",
232
+ "rlp": "^3.0.0",
207
233
  "rxjs": "^7.5.5",
208
234
  "web3": "^1.7.4",
209
235
  "web3-core": "^1.7.4",
package/packageInfo.js CHANGED
@@ -5,5 +5,5 @@ export const packageInfo = {
5
5
  name: '@subwallet/extension-base',
6
6
  path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto',
7
7
  type: 'esm',
8
- version: '0.5.3-1'
8
+ version: '0.5.4-0'
9
9
  };
package/page/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  // Copyright 2019-2022 @polkadot/extension authors & contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
+ import { SubWalletProviderError } from '@subwallet/extension-base/errors/SubWalletProviderError';
3
4
  import { MESSAGE_ORIGIN_PAGE } from "../defaults.js";
4
5
  import { getId } from "../utils/getId.js";
5
6
  import Injected from "./Injected.js"; // when sending a message from the injector to the extension, we
@@ -52,7 +53,7 @@ export function handleResponse(data) {
52
53
  // eslint-disable-next-line @typescript-eslint/ban-types
53
54
  handler.subscriber(data.subscription);
54
55
  } else if (data.error) {
55
- handler.reject(new Error(data.error));
56
+ handler.reject(new SubWalletProviderError(data.error, data.errorCode, data.errorData));
56
57
  } else {
57
58
  handler.resolve(data.response);
58
59
  }
@@ -0,0 +1,13 @@
1
+ import type { Signer, SignerResult } from '@polkadot/api/types';
2
+ import type { Registry, SignerPayloadJSON } from '@polkadot/types/types';
3
+ import { ExternalRequestPromise } from '@subwallet/extension-base/background/KoniTypes';
4
+ import { LedgerState } from '@subwallet/extension-base/signers/types';
5
+ interface CallbackProps {
6
+ ledgerState: LedgerState;
7
+ }
8
+ export default class LedgerSigner implements Signer {
9
+ #private;
10
+ constructor(registry: Registry, callback: (state: CallbackProps) => void, id: string, setState: (promise: ExternalRequestPromise) => void);
11
+ signPayload(payload: SignerPayloadJSON): Promise<SignerResult>;
12
+ }
13
+ export {};
@@ -0,0 +1,39 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { ExternalRequestPromiseStatus } from '@subwallet/extension-base/background/KoniTypes';
4
+ import { u8aToHex } from '@polkadot/util';
5
+ export default class LedgerSigner {
6
+ #registry;
7
+ #callback;
8
+ #setState;
9
+ #id;
10
+
11
+ constructor(registry, callback, id, setState) {
12
+ this.#registry = registry;
13
+ this.#callback = callback;
14
+ this.#id = id;
15
+ this.#setState = setState;
16
+ }
17
+
18
+ async signPayload(payload) {
19
+ return new Promise((resolve, reject) => {
20
+ const raw = this.#registry.createType('ExtrinsicPayload', payload, {
21
+ version: payload.version
22
+ });
23
+ const ledgerPayload = raw.toU8a(true);
24
+ this.#setState({
25
+ reject: reject,
26
+ resolve: resolve,
27
+ status: ExternalRequestPromiseStatus.PENDING,
28
+ createdAt: new Date().getTime()
29
+ });
30
+ this.#callback({
31
+ ledgerState: {
32
+ ledgerPayload: u8aToHex(ledgerPayload),
33
+ ledgerId: this.#id
34
+ }
35
+ });
36
+ });
37
+ }
38
+
39
+ }
@@ -0,0 +1,20 @@
1
+ import type { Signer, SignerResult } from '@polkadot/api/types';
2
+ import type { Registry, SignerPayloadJSON } from '@polkadot/types/types';
3
+ import { ExternalRequestPromise } from '@subwallet/extension-base/background/KoniTypes';
4
+ import { QrState } from '@subwallet/extension-base/signers/types';
5
+ interface CallbackProps {
6
+ qrState: QrState;
7
+ }
8
+ interface QrSignerProps {
9
+ registry: Registry;
10
+ callback: (state: CallbackProps) => void;
11
+ id: string;
12
+ setState: (promise: ExternalRequestPromise) => void;
13
+ resolver: () => void;
14
+ }
15
+ export default class QrSigner implements Signer {
16
+ #private;
17
+ constructor({ callback, id, registry, resolver, setState }: QrSignerProps);
18
+ signPayload(payload: SignerPayloadJSON): Promise<SignerResult>;
19
+ }
20
+ export {};