@subwallet/extension-base 0.5.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.
- package/background/KoniTypes.d.ts +288 -24
- package/background/KoniTypes.js +38 -1
- package/background/handlers/Extension.d.ts +2 -0
- package/background/handlers/Extension.js +54 -1
- package/background/types.d.ts +53 -1
- package/cjs/background/KoniTypes.js +42 -2
- package/cjs/background/handlers/Extension.js +63 -4
- package/cjs/defaults.js +1 -1
- package/cjs/errors/SubWalletProviderError.js +19 -0
- package/cjs/packageInfo.js +1 -1
- package/cjs/page/index.js +3 -1
- package/cjs/signers/substrates/LedgerSigner.js +50 -0
- package/cjs/signers/substrates/QrSigner.js +72 -0
- package/cjs/signers/types.js +1 -0
- package/cjs/signers/web3/QrSigner.js +68 -0
- package/defaults.d.ts +1 -1
- package/defaults.js +1 -1
- package/errors/SubWalletProviderError.d.ts +6 -0
- package/errors/SubWalletProviderError.js +10 -0
- package/package.json +30 -4
- package/packageInfo.js +1 -1
- package/page/index.js +2 -1
- package/signers/substrates/LedgerSigner.d.ts +13 -0
- package/signers/substrates/LedgerSigner.js +39 -0
- package/signers/substrates/QrSigner.d.ts +20 -0
- package/signers/substrates/QrSigner.js +59 -0
- package/signers/types.d.ts +26 -0
- package/signers/types.js +1 -0
- package/signers/web3/QrSigner.d.ts +18 -0
- package/signers/web3/QrSigner.js +52 -0
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"./cjs/detectPackage.js"
|
|
18
18
|
],
|
|
19
19
|
"type": "module",
|
|
20
|
-
"version": "0.5.
|
|
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.
|
|
203
|
-
"@subwallet/extension-dapp": "^0.5.
|
|
204
|
-
"@subwallet/extension-inject": "^0.5.
|
|
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.
|
|
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
|
|
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 {};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Copyright 2017-2022 @polkadot/react-signer 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
|
+
import { blake2AsU8a } from '@polkadot/util-crypto';
|
|
6
|
+
export default class QrSigner {
|
|
7
|
+
#callback;
|
|
8
|
+
#id;
|
|
9
|
+
#registry;
|
|
10
|
+
#resolver;
|
|
11
|
+
#setState;
|
|
12
|
+
|
|
13
|
+
constructor({
|
|
14
|
+
callback,
|
|
15
|
+
id,
|
|
16
|
+
registry,
|
|
17
|
+
resolver,
|
|
18
|
+
setState
|
|
19
|
+
}) {
|
|
20
|
+
this.#callback = callback;
|
|
21
|
+
this.#id = id;
|
|
22
|
+
this.#registry = registry;
|
|
23
|
+
this.#resolver = resolver;
|
|
24
|
+
this.#setState = setState;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async signPayload(payload) {
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
// limit size of the transaction
|
|
30
|
+
const isQrHashed = payload.method.length > 5000;
|
|
31
|
+
const wrapper = this.#registry.createType('ExtrinsicPayload', payload, {
|
|
32
|
+
version: payload.version
|
|
33
|
+
});
|
|
34
|
+
const qrPayload = isQrHashed ? blake2AsU8a(wrapper.toU8a(true)) : wrapper.toU8a();
|
|
35
|
+
|
|
36
|
+
const resolver = result => {
|
|
37
|
+
this.#resolver();
|
|
38
|
+
resolve(result);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
this.#setState({
|
|
42
|
+
reject: reject,
|
|
43
|
+
resolve: resolver,
|
|
44
|
+
status: ExternalRequestPromiseStatus.PENDING,
|
|
45
|
+
createdAt: new Date().getTime()
|
|
46
|
+
});
|
|
47
|
+
this.#callback({
|
|
48
|
+
qrState: {
|
|
49
|
+
isQrHashed,
|
|
50
|
+
qrAddress: payload.address,
|
|
51
|
+
qrPayload: u8aToHex(qrPayload),
|
|
52
|
+
qrId: this.#id,
|
|
53
|
+
isEthereum: false
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface QrState {
|
|
2
|
+
isQrHashed: boolean;
|
|
3
|
+
qrAddress: string;
|
|
4
|
+
qrPayload: `0x${string}`;
|
|
5
|
+
qrId: string;
|
|
6
|
+
isEthereum: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface Web3TransactionBase {
|
|
9
|
+
to: string;
|
|
10
|
+
gasPrice: number;
|
|
11
|
+
gasLimit: number;
|
|
12
|
+
nonce: number;
|
|
13
|
+
chainId: number;
|
|
14
|
+
data: string;
|
|
15
|
+
value: number;
|
|
16
|
+
}
|
|
17
|
+
export interface Web3Transaction extends Web3TransactionBase {
|
|
18
|
+
from: string;
|
|
19
|
+
}
|
|
20
|
+
export interface LedgerState {
|
|
21
|
+
ledgerPayload: `0x${string}`;
|
|
22
|
+
ledgerId: string;
|
|
23
|
+
}
|
|
24
|
+
export interface ExternalState {
|
|
25
|
+
externalId: string;
|
|
26
|
+
}
|
package/signers/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ExternalRequestPromise } from '@subwallet/extension-base/background/KoniTypes';
|
|
2
|
+
import { QrState, Web3Transaction } from '@subwallet/extension-base/signers/types';
|
|
3
|
+
import { SignerResult } from '@polkadot/api/types';
|
|
4
|
+
interface CallbackProps {
|
|
5
|
+
qrState: QrState;
|
|
6
|
+
}
|
|
7
|
+
interface QrSignerProps {
|
|
8
|
+
callback: (state: CallbackProps) => void;
|
|
9
|
+
id: string;
|
|
10
|
+
setState: (promise: ExternalRequestPromise) => void;
|
|
11
|
+
resolver: () => void;
|
|
12
|
+
}
|
|
13
|
+
export default class QrSigner {
|
|
14
|
+
#private;
|
|
15
|
+
constructor({ callback, id, resolver, setState }: QrSignerProps);
|
|
16
|
+
signTransaction(tx: Web3Transaction): Promise<SignerResult>;
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,52 @@
|
|
|
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 RLP from 'rlp';
|
|
5
|
+
import { u8aToHex } from '@polkadot/util';
|
|
6
|
+
export default class QrSigner {
|
|
7
|
+
#callback;
|
|
8
|
+
#id;
|
|
9
|
+
#resolver;
|
|
10
|
+
#setState;
|
|
11
|
+
|
|
12
|
+
constructor({
|
|
13
|
+
callback,
|
|
14
|
+
id,
|
|
15
|
+
resolver,
|
|
16
|
+
setState
|
|
17
|
+
}) {
|
|
18
|
+
this.#callback = callback;
|
|
19
|
+
this.#id = id;
|
|
20
|
+
this.#resolver = resolver;
|
|
21
|
+
this.#setState = setState;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
async signTransaction(tx) {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
const data = [tx.nonce, tx.gasPrice, tx.gasLimit, tx.to, tx.value, tx.data, tx.chainId, new Uint8Array([0x00]), new Uint8Array([0x00])];
|
|
27
|
+
const qrPayload = RLP.encode(data);
|
|
28
|
+
|
|
29
|
+
const resolver = result => {
|
|
30
|
+
this.#resolver();
|
|
31
|
+
resolve(result);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
this.#setState({
|
|
35
|
+
reject: reject,
|
|
36
|
+
resolve: resolver,
|
|
37
|
+
status: ExternalRequestPromiseStatus.PENDING,
|
|
38
|
+
createdAt: new Date().getTime()
|
|
39
|
+
});
|
|
40
|
+
this.#callback({
|
|
41
|
+
qrState: {
|
|
42
|
+
isQrHashed: false,
|
|
43
|
+
qrAddress: tx.from,
|
|
44
|
+
qrPayload: u8aToHex(qrPayload),
|
|
45
|
+
qrId: this.#id,
|
|
46
|
+
isEthereum: true
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
}
|