@sidhujag/sysweb3-keyring 1.0.628 → 2.0.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/CHANGELOG.md +22 -0
- package/README.md +66 -0
- package/cjs/hardware-wallet-manager.js +302 -128
- package/cjs/hardware-wallet-manager.js.map +1 -1
- package/cjs/keyring-core.js +93 -0
- package/cjs/keyring-core.js.map +1 -1
- package/cjs/keyring-manager.js +9 -3
- package/cjs/keyring-manager.js.map +1 -1
- package/cjs/ledger/bitcoin_client/lib/appClient.js.map +1 -1
- package/cjs/ledger/host-types.js +10 -0
- package/cjs/ledger/host-types.js.map +1 -0
- package/cjs/ledger/index.js +243 -447
- package/cjs/ledger/index.js.map +1 -1
- package/cjs/ledger/prepare-psbt.js +177 -0
- package/cjs/ledger/prepare-psbt.js.map +1 -0
- package/cjs/software-hd-account.js +23 -0
- package/cjs/software-hd-account.js.map +1 -0
- package/cjs/software.js +16 -0
- package/cjs/software.js.map +1 -1
- package/cjs/transactions/ethereum.js +55 -10
- package/cjs/transactions/ethereum.js.map +1 -1
- package/cjs/transactions/hardware-psbt.js +36 -44
- package/cjs/transactions/hardware-psbt.js.map +1 -1
- package/cjs/transactions/prepared-evm.js +196 -0
- package/cjs/transactions/prepared-evm.js.map +1 -0
- package/cjs/trezor/connect.js +243 -0
- package/cjs/trezor/connect.js.map +1 -0
- package/cjs/trezor/index.js +96 -58
- package/cjs/trezor/index.js.map +1 -1
- package/cjs/trezor/witness.js +25 -0
- package/cjs/trezor/witness.js.map +1 -0
- package/cjs/utils/psbt-account-scope.js +5 -3
- package/cjs/utils/psbt-account-scope.js.map +1 -1
- package/esm/errorUtils.js +72 -0
- package/esm/errorUtils.js.map +1 -0
- package/esm/ethers-v6.js +207 -0
- package/esm/ethers-v6.js.map +1 -0
- package/esm/hardware-wallet-manager.js +643 -0
- package/esm/hardware-wallet-manager.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/appClient.js +279 -0
- package/esm/ledger/bitcoin_client/lib/appClient.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/bip32.js +49 -0
- package/esm/ledger/bitcoin_client/lib/bip32.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/buffertools.js +119 -0
- package/esm/ledger/bitcoin_client/lib/buffertools.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/clientCommands.js +269 -0
- package/esm/ledger/bitcoin_client/lib/clientCommands.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/merkelizedPsbt.js +50 -0
- package/esm/ledger/bitcoin_client/lib/merkelizedPsbt.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/merkle.js +111 -0
- package/esm/ledger/bitcoin_client/lib/merkle.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/merkleMap.js +42 -0
- package/esm/ledger/bitcoin_client/lib/merkleMap.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/policy.js +68 -0
- package/esm/ledger/bitcoin_client/lib/policy.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/psbtv2.js +645 -0
- package/esm/ledger/bitcoin_client/lib/psbtv2.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/varint.js +108 -0
- package/esm/ledger/bitcoin_client/lib/varint.js.map +1 -0
- package/esm/ledger/consts.js +4 -0
- package/esm/ledger/consts.js.map +1 -0
- package/esm/ledger/dmk-evm.js +258 -0
- package/esm/ledger/dmk-evm.js.map +1 -0
- package/esm/ledger/dmk-session.js +264 -0
- package/esm/ledger/dmk-session.js.map +1 -0
- package/esm/ledger/dmk-utxo.js +279 -0
- package/esm/ledger/dmk-utxo.js.map +1 -0
- package/esm/ledger/host-types.js +5 -0
- package/esm/ledger/host-types.js.map +1 -0
- package/esm/ledger/index.js +268 -0
- package/esm/ledger/index.js.map +1 -0
- package/esm/ledger/prepare-psbt.js +141 -0
- package/esm/ledger/prepare-psbt.js.map +1 -0
- package/esm/ledger/types.js +2 -0
- package/esm/ledger/types.js.map +1 -0
- package/esm/ledger-host.js +36 -0
- package/esm/ledger-host.js.map +1 -0
- package/esm/private-records.js +153 -0
- package/esm/private-records.js.map +1 -0
- package/esm/providers.js +588 -0
- package/esm/providers.js.map +1 -0
- package/esm/signers.js +28 -0
- package/esm/signers.js.map +1 -0
- package/esm/trezor/connect.js +206 -0
- package/esm/trezor/connect.js.map +1 -0
- package/esm/trezor/index.js +876 -0
- package/esm/trezor/index.js.map +1 -0
- package/esm/trezor/witness.js +21 -0
- package/esm/trezor/witness.js.map +1 -0
- package/esm/types.js +17 -0
- package/esm/types.js.map +1 -0
- package/esm/utils/derivation-paths.js +109 -0
- package/esm/utils/derivation-paths.js.map +1 -0
- package/esm/utils/psbt-account-scope.js +310 -0
- package/esm/utils/psbt-account-scope.js.map +1 -0
- package/package.json +21 -8
- package/types/hardware-wallet-manager.d.ts +12 -19
- package/types/keyring-core.d.ts +6 -0
- package/types/keyring-manager.d.ts +2 -1
- package/types/ledger/bitcoin_client/lib/appClient.d.ts +6 -3
- package/types/ledger/dmk-evm.d.ts +8 -0
- package/types/ledger/dmk-session.d.ts +60 -0
- package/types/ledger/dmk-utxo.d.ts +26 -0
- package/types/ledger/host-types.d.ts +131 -0
- package/types/ledger/index.d.ts +21 -58
- package/types/ledger/prepare-psbt.d.ts +3 -0
- package/types/ledger/types.d.ts +3 -0
- package/types/ledger-host.d.ts +7 -0
- package/types/software-hd-account.d.ts +16 -0
- package/types/software.d.ts +16 -0
- package/types/transactions/ethereum.d.ts +1 -1
- package/types/transactions/prepared-evm.d.ts +53 -0
- package/types/trezor/connect.d.ts +42 -0
- package/types/trezor/index.d.ts +22 -4
- package/types/trezor/witness.d.ts +3 -0
- package/types/utils/psbt-account-scope.d.ts +1 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.snapshotPreparedEvmRequest = snapshotPreparedEvmRequest;
|
|
4
|
+
exports.preparedEvmGuard = preparedEvmGuard;
|
|
5
|
+
exports.signPreparedEvmEnvelope = signPreparedEvmEnvelope;
|
|
6
|
+
const address_1 = require("ethers/address");
|
|
7
|
+
const crypto_1 = require("ethers/crypto");
|
|
8
|
+
const transaction_1 = require("ethers/transaction");
|
|
9
|
+
const evm_local_signer_1 = require("./evm-local-signer");
|
|
10
|
+
const UINT256 = (1n << 256n) - 1n;
|
|
11
|
+
const UINT64 = (1n << 64n) - 1n;
|
|
12
|
+
const MAX_DATA_BYTES = 16 * 1024;
|
|
13
|
+
const invalid = () => new TypeError('Invalid prepared EVM signing request');
|
|
14
|
+
/** Snapshot values without invoking accessors or accepting hidden fields. */
|
|
15
|
+
function record(value, keys) {
|
|
16
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
17
|
+
throw invalid();
|
|
18
|
+
const prototype = Object.getPrototypeOf(value);
|
|
19
|
+
if (prototype !== Object.prototype && prototype !== null)
|
|
20
|
+
throw invalid();
|
|
21
|
+
const names = Reflect.ownKeys(value);
|
|
22
|
+
if (names.length !== keys.length ||
|
|
23
|
+
names.some((key) => typeof key !== 'string' || !keys.includes(key)))
|
|
24
|
+
throw invalid();
|
|
25
|
+
const result = Object.create(null);
|
|
26
|
+
for (const key of keys) {
|
|
27
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
28
|
+
if (!descriptor ||
|
|
29
|
+
!descriptor.enumerable ||
|
|
30
|
+
!Object.prototype.hasOwnProperty.call(descriptor, 'value'))
|
|
31
|
+
throw invalid();
|
|
32
|
+
result[key] = descriptor.value;
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
function quantity(value, maximum = UINT256, positive = false) {
|
|
37
|
+
if (typeof value !== 'string' || !/^(0|[1-9][0-9]{0,77})$/.test(value))
|
|
38
|
+
throw invalid();
|
|
39
|
+
const parsed = BigInt(value);
|
|
40
|
+
if (parsed > maximum || (positive && parsed === 0n))
|
|
41
|
+
throw invalid();
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
function address(value) {
|
|
45
|
+
if (typeof value !== 'string' || !/^0x[0-9a-fA-F]{40}$/.test(value))
|
|
46
|
+
throw invalid();
|
|
47
|
+
let canonical;
|
|
48
|
+
try {
|
|
49
|
+
canonical = (0, address_1.getAddress)(value);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
throw invalid();
|
|
53
|
+
}
|
|
54
|
+
if (/^0x0{40}$/i.test(canonical))
|
|
55
|
+
throw invalid();
|
|
56
|
+
return canonical;
|
|
57
|
+
}
|
|
58
|
+
function snapshotPreparedEvmRequest(input) {
|
|
59
|
+
const root = record(input, ['account', 'network', 'transaction']);
|
|
60
|
+
const account = record(root.account, ['id', 'type', 'expectedAddress']);
|
|
61
|
+
if (!Number.isSafeInteger(account.id) ||
|
|
62
|
+
account.id < 0 ||
|
|
63
|
+
account.id > 0x7fffffff ||
|
|
64
|
+
(account.type !== 'HDAccount' && account.type !== 'Imported'))
|
|
65
|
+
throw invalid();
|
|
66
|
+
const network = record(root.network, ['kind', 'chainId', 'slip44', 'url']);
|
|
67
|
+
if (network.kind !== 'ethereum' ||
|
|
68
|
+
network.slip44 !== 60 ||
|
|
69
|
+
typeof network.url !== 'string' ||
|
|
70
|
+
!network.url ||
|
|
71
|
+
network.url.length > 4096 ||
|
|
72
|
+
network.url.trim() !== network.url ||
|
|
73
|
+
/[\uD800-\uDFFF\u0000-\u001f\u007f]/u.test(network.url))
|
|
74
|
+
throw invalid();
|
|
75
|
+
const chainId = quantity(network.chainId, UINT256, true);
|
|
76
|
+
// Read the discriminator from a data property before choosing the exact schema.
|
|
77
|
+
if (!root.transaction || typeof root.transaction !== 'object')
|
|
78
|
+
throw invalid();
|
|
79
|
+
const typeDescriptor = Object.getOwnPropertyDescriptor(root.transaction, 'type');
|
|
80
|
+
if (!typeDescriptor ||
|
|
81
|
+
!Object.prototype.hasOwnProperty.call(typeDescriptor, 'value'))
|
|
82
|
+
throw invalid();
|
|
83
|
+
const type = typeDescriptor.value;
|
|
84
|
+
if (type !== 0 && type !== 2)
|
|
85
|
+
throw invalid();
|
|
86
|
+
const fields = [
|
|
87
|
+
'type',
|
|
88
|
+
'from',
|
|
89
|
+
'to',
|
|
90
|
+
'chainId',
|
|
91
|
+
'nonce',
|
|
92
|
+
'value',
|
|
93
|
+
'gasLimit',
|
|
94
|
+
'data',
|
|
95
|
+
];
|
|
96
|
+
const transaction = record(root.transaction, type === 0
|
|
97
|
+
? [...fields, 'gasPrice']
|
|
98
|
+
: [...fields, 'maxFeePerGas', 'maxPriorityFeePerGas']);
|
|
99
|
+
const from = address(transaction.from);
|
|
100
|
+
const expectedAddress = address(account.expectedAddress);
|
|
101
|
+
if (from !== expectedAddress ||
|
|
102
|
+
quantity(transaction.chainId, UINT256, true) !== chainId)
|
|
103
|
+
throw invalid();
|
|
104
|
+
if (typeof transaction.data !== 'string' ||
|
|
105
|
+
transaction.data.length > 2 + 2 * MAX_DATA_BYTES ||
|
|
106
|
+
!/^0x(?:[0-9a-fA-F]{2})*$/.test(transaction.data))
|
|
107
|
+
throw invalid();
|
|
108
|
+
const common = {
|
|
109
|
+
from,
|
|
110
|
+
to: address(transaction.to),
|
|
111
|
+
chainId,
|
|
112
|
+
nonce: quantity(transaction.nonce, BigInt(Number.MAX_SAFE_INTEGER)),
|
|
113
|
+
value: quantity(transaction.value),
|
|
114
|
+
gasLimit: quantity(transaction.gasLimit, UINT64, true),
|
|
115
|
+
data: transaction.data.toLowerCase(),
|
|
116
|
+
};
|
|
117
|
+
const fees = type === 0
|
|
118
|
+
? { type: 0, gasPrice: quantity(transaction.gasPrice) }
|
|
119
|
+
: {
|
|
120
|
+
type: 2,
|
|
121
|
+
maxFeePerGas: quantity(transaction.maxFeePerGas),
|
|
122
|
+
maxPriorityFeePerGas: quantity(transaction.maxPriorityFeePerGas),
|
|
123
|
+
};
|
|
124
|
+
if (fees.type === 2 &&
|
|
125
|
+
BigInt(fees.maxPriorityFeePerGas) > BigInt(fees.maxFeePerGas))
|
|
126
|
+
throw invalid();
|
|
127
|
+
const maximumFee = BigInt(common.gasLimit) *
|
|
128
|
+
BigInt(fees.type === 0 ? fees.gasPrice : fees.maxFeePerGas);
|
|
129
|
+
if (maximumFee + BigInt(common.value) > UINT256)
|
|
130
|
+
throw invalid();
|
|
131
|
+
return Object.freeze({
|
|
132
|
+
account: Object.freeze({
|
|
133
|
+
id: account.id,
|
|
134
|
+
type: account.type,
|
|
135
|
+
expectedAddress,
|
|
136
|
+
}),
|
|
137
|
+
network: Object.freeze({
|
|
138
|
+
kind: 'ethereum',
|
|
139
|
+
chainId,
|
|
140
|
+
slip44: 60,
|
|
141
|
+
url: network.url,
|
|
142
|
+
}),
|
|
143
|
+
transaction: Object.freeze({ ...common, ...fees }),
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
function preparedEvmGuard(input) {
|
|
147
|
+
const options = record(input, ['assertCurrent']);
|
|
148
|
+
if (typeof options.assertCurrent !== 'function')
|
|
149
|
+
throw invalid();
|
|
150
|
+
const guard = options.assertCurrent;
|
|
151
|
+
return () => {
|
|
152
|
+
const result = guard();
|
|
153
|
+
if (result !== undefined) {
|
|
154
|
+
// Consume a rejected async guard without allowing it to authorize signing.
|
|
155
|
+
if (result !== null &&
|
|
156
|
+
(typeof result === 'object' || typeof result === 'function'))
|
|
157
|
+
void Promise.resolve(result).catch(() => undefined);
|
|
158
|
+
throw new TypeError('Prepared EVM signing guard must return undefined synchronously');
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
/** Internal, network-free signing. The key never becomes part of the result. */
|
|
163
|
+
function signPreparedEvmEnvelope(transaction, privateKey) {
|
|
164
|
+
const unsigned = {
|
|
165
|
+
type: transaction.type,
|
|
166
|
+
to: transaction.to,
|
|
167
|
+
chainId: BigInt(transaction.chainId),
|
|
168
|
+
nonce: Number(transaction.nonce),
|
|
169
|
+
value: BigInt(transaction.value),
|
|
170
|
+
gasLimit: BigInt(transaction.gasLimit),
|
|
171
|
+
data: transaction.data,
|
|
172
|
+
...(transaction.type === 0
|
|
173
|
+
? { gasPrice: BigInt(transaction.gasPrice) }
|
|
174
|
+
: {
|
|
175
|
+
maxFeePerGas: BigInt(transaction.maxFeePerGas),
|
|
176
|
+
maxPriorityFeePerGas: BigInt(transaction.maxPriorityFeePerGas),
|
|
177
|
+
}),
|
|
178
|
+
};
|
|
179
|
+
const expected = transaction_1.Transaction.from(unsigned);
|
|
180
|
+
const rawTransaction = (0, evm_local_signer_1.signTransaction)(unsigned, privateKey);
|
|
181
|
+
const signed = transaction_1.Transaction.from(rawTransaction);
|
|
182
|
+
if (!signed.isSigned() ||
|
|
183
|
+
signed.from !== transaction.from ||
|
|
184
|
+
signed.unsignedSerialized !== expected.unsignedSerialized ||
|
|
185
|
+
signed.unsignedHash !== expected.unsignedHash ||
|
|
186
|
+
signed.hash !== (0, crypto_1.keccak256)(rawTransaction))
|
|
187
|
+
throw new Error('Prepared EVM signature does not match requested transaction');
|
|
188
|
+
return Object.freeze({
|
|
189
|
+
rawTransaction,
|
|
190
|
+
hash: signed.hash,
|
|
191
|
+
unsignedHash: signed.unsignedHash,
|
|
192
|
+
from: signed.from,
|
|
193
|
+
transaction,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=prepared-evm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepared-evm.js","sourceRoot":"","sources":["../../../src/transactions/prepared-evm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.trezorResponseError = exports.subscribeTrezorEvents = void 0;
|
|
37
|
+
const methods = [
|
|
38
|
+
'getFeatures',
|
|
39
|
+
'getAccountInfo',
|
|
40
|
+
'ethereumGetAddress',
|
|
41
|
+
'ethereumGetPublicKey',
|
|
42
|
+
'getPublicKey',
|
|
43
|
+
'getAddress',
|
|
44
|
+
'signTransaction',
|
|
45
|
+
'ethereumSignTransaction',
|
|
46
|
+
'signMessage',
|
|
47
|
+
'ethereumSignMessage',
|
|
48
|
+
'ethereumSignTypedData',
|
|
49
|
+
'verifyMessage',
|
|
50
|
+
'ethereumVerifyMessage',
|
|
51
|
+
];
|
|
52
|
+
const listeners = new Set();
|
|
53
|
+
let clientPromise;
|
|
54
|
+
let generation = 0;
|
|
55
|
+
let initialized = false;
|
|
56
|
+
let cleanupPromise = Promise.resolve();
|
|
57
|
+
let cleanupPending = false;
|
|
58
|
+
const inFlight = new Set();
|
|
59
|
+
const pending = new Set();
|
|
60
|
+
const interrupted = () => Object.assign(new Error('Trezor operation cancelled'), {
|
|
61
|
+
code: 'Method_Interrupted',
|
|
62
|
+
});
|
|
63
|
+
const invalidate = () => {
|
|
64
|
+
generation++;
|
|
65
|
+
initialized = false;
|
|
66
|
+
const error = interrupted();
|
|
67
|
+
for (const reject of pending)
|
|
68
|
+
reject(error);
|
|
69
|
+
pending.clear();
|
|
70
|
+
emit({ type: 'disconnected' });
|
|
71
|
+
};
|
|
72
|
+
const subscribeTrezorEvents = (listener) => {
|
|
73
|
+
listeners.add(listener);
|
|
74
|
+
return () => listeners.delete(listener);
|
|
75
|
+
};
|
|
76
|
+
exports.subscribeTrezorEvents = subscribeTrezorEvents;
|
|
77
|
+
const emit = (event) => {
|
|
78
|
+
for (const listener of listeners) {
|
|
79
|
+
try {
|
|
80
|
+
listener(event);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// Status observers must not turn a completed device call into a retry.
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
/** Connect 10's webextension module registers Chrome listeners on import. */
|
|
88
|
+
const requireExtensionHost = () => {
|
|
89
|
+
const chrome = globalThis.chrome;
|
|
90
|
+
if (!chrome?.runtime?.id ||
|
|
91
|
+
chrome.runtime.getManifest?.()?.manifest_version !== 3 ||
|
|
92
|
+
typeof chrome.runtime.onConnect?.addListener !== 'function' ||
|
|
93
|
+
typeof chrome.runtime.onMessageExternal?.addListener !== 'function' ||
|
|
94
|
+
typeof chrome.tabs?.get !== 'function' ||
|
|
95
|
+
typeof chrome.tabs?.create !== 'function' ||
|
|
96
|
+
typeof chrome.tabs?.update !== 'function' ||
|
|
97
|
+
typeof chrome.windows?.getCurrent !== 'function') {
|
|
98
|
+
throw Object.assign(new Error('Trezor requires a supported MV3 extension host'), { code: 'HARDWARE_SIGNER_UNAVAILABLE' });
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
const getClient = () => {
|
|
102
|
+
requireExtensionHost();
|
|
103
|
+
if (!clientPromise) {
|
|
104
|
+
clientPromise = Promise.resolve().then(() => __importStar(require('@trezor/connect-webextension'))).then((module) => module.default)
|
|
105
|
+
.catch((error) => {
|
|
106
|
+
clientPromise = undefined;
|
|
107
|
+
throw error;
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return clientPromise;
|
|
111
|
+
};
|
|
112
|
+
/** Keep the SDK's established failure payload while preserving Connect 10 codes. */
|
|
113
|
+
const normalize = (response, method) => {
|
|
114
|
+
if (response?.success === false) {
|
|
115
|
+
const error = response.error;
|
|
116
|
+
const code = typeof error?.code === 'string' ? error.code : undefined;
|
|
117
|
+
if (code === 'Device_Disconnected' ||
|
|
118
|
+
code === 'Device_NotFound' ||
|
|
119
|
+
code === 'Desktop_ConnectionMissing' ||
|
|
120
|
+
code === 'Transport_Missing') {
|
|
121
|
+
invalidate();
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
...response,
|
|
125
|
+
payload: {
|
|
126
|
+
error: typeof error?.message === 'string'
|
|
127
|
+
? error.message
|
|
128
|
+
: 'Trezor request failed',
|
|
129
|
+
code,
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
const model = response?.device?.features?.model ??
|
|
134
|
+
(method === 'getFeatures' ? response?.payload?.model : undefined);
|
|
135
|
+
if (response?.success === true && typeof model === 'string') {
|
|
136
|
+
emit({ type: 'model', model });
|
|
137
|
+
}
|
|
138
|
+
return response;
|
|
139
|
+
};
|
|
140
|
+
const withClient = async (operation, requireInitialized = true) => {
|
|
141
|
+
const captured = generation;
|
|
142
|
+
const assertCurrent = () => {
|
|
143
|
+
if (captured !== generation)
|
|
144
|
+
throw interrupted();
|
|
145
|
+
if (requireInitialized && !initialized) {
|
|
146
|
+
throw Object.assign(new Error('TrezorConnect not initialized'), {
|
|
147
|
+
code: 'Init_NotInitialized',
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
assertCurrent();
|
|
152
|
+
let rejectPending;
|
|
153
|
+
const cancelled = new Promise((_resolve, reject) => {
|
|
154
|
+
rejectPending = reject;
|
|
155
|
+
});
|
|
156
|
+
pending.add(rejectPending);
|
|
157
|
+
try {
|
|
158
|
+
const result = await Promise.race([
|
|
159
|
+
(async () => {
|
|
160
|
+
await cleanupPromise;
|
|
161
|
+
assertCurrent();
|
|
162
|
+
const client = await getClient();
|
|
163
|
+
assertCurrent();
|
|
164
|
+
const request = Promise.resolve(operation(client));
|
|
165
|
+
inFlight.add(request);
|
|
166
|
+
try {
|
|
167
|
+
return await request;
|
|
168
|
+
}
|
|
169
|
+
finally {
|
|
170
|
+
inFlight.delete(request);
|
|
171
|
+
}
|
|
172
|
+
})(),
|
|
173
|
+
cancelled,
|
|
174
|
+
]);
|
|
175
|
+
// A late response must not restore a model/status or return a signature.
|
|
176
|
+
assertCurrent();
|
|
177
|
+
return result;
|
|
178
|
+
}
|
|
179
|
+
finally {
|
|
180
|
+
pending.delete(rejectPending);
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
const calls = Object.fromEntries(methods.map((method) => [
|
|
184
|
+
method,
|
|
185
|
+
async (...args) => {
|
|
186
|
+
const captured = generation;
|
|
187
|
+
const response = await withClient((client) => client[method](...args));
|
|
188
|
+
if (captured !== generation)
|
|
189
|
+
throw interrupted();
|
|
190
|
+
return normalize(response, method);
|
|
191
|
+
},
|
|
192
|
+
]));
|
|
193
|
+
const TrezorConnect = {
|
|
194
|
+
...calls,
|
|
195
|
+
async init(settings) {
|
|
196
|
+
if (cleanupPending) {
|
|
197
|
+
throw Object.assign(new Error('Previous Trezor request is still pending'), {
|
|
198
|
+
code: 'HARDWARE_SIGNER_BUSY',
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
invalidate();
|
|
202
|
+
const captured = generation;
|
|
203
|
+
await withClient((client) => client.init({ ...settings, env: 'webextension' }), false);
|
|
204
|
+
if (captured !== generation)
|
|
205
|
+
throw interrupted();
|
|
206
|
+
initialized = true;
|
|
207
|
+
},
|
|
208
|
+
dispose() {
|
|
209
|
+
// Invalidate synchronously, before waiting for import or remote cleanup.
|
|
210
|
+
// Suite Web's upstream dispose is a no-op; local invalidation is required.
|
|
211
|
+
invalidate();
|
|
212
|
+
if (cleanupPending) {
|
|
213
|
+
return inFlight.size ? Promise.resolve() : cleanupPromise;
|
|
214
|
+
}
|
|
215
|
+
const loaded = clientPromise;
|
|
216
|
+
if (!loaded)
|
|
217
|
+
return Promise.resolve();
|
|
218
|
+
const outstanding = [...inFlight];
|
|
219
|
+
cleanupPending = true;
|
|
220
|
+
cleanupPromise = cleanupPromise
|
|
221
|
+
.catch(() => undefined)
|
|
222
|
+
.then(async () => {
|
|
223
|
+
// Closing Desktop's socket during a raw call makes Connect auto-open
|
|
224
|
+
// Suite Web. Let that raw call settle while its result stays fenced.
|
|
225
|
+
await Promise.allSettled(outstanding);
|
|
226
|
+
const client = await loaded;
|
|
227
|
+
// Desktop cancel() discards an internal Promise in Connect 10.0.1;
|
|
228
|
+
// do not invoke it or claim that Suite Web's no-op dispose closes UI.
|
|
229
|
+
await client.dispose();
|
|
230
|
+
})
|
|
231
|
+
.finally(() => {
|
|
232
|
+
cleanupPending = false;
|
|
233
|
+
});
|
|
234
|
+
// Deferred cleanup may outlive the caller; preserve its failure for future
|
|
235
|
+
// init while preventing an unhandled rejection when the host is locking.
|
|
236
|
+
void cleanupPromise.catch(() => undefined);
|
|
237
|
+
return outstanding.length ? Promise.resolve() : cleanupPromise;
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
const trezorResponseError = (response, prefix = '') => Object.assign(new Error(prefix + (response.payload?.error || 'Trezor request failed')), { code: response.payload?.code });
|
|
241
|
+
exports.trezorResponseError = trezorResponseError;
|
|
242
|
+
exports.default = TrezorConnect;
|
|
243
|
+
//# sourceMappingURL=connect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/trezor/connect.ts"],"names":[],"mappings":"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"}
|