@sidhujag/sysweb3-keyring 1.0.628 → 2.1.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 +30 -0
- package/README.md +174 -0
- package/cjs/bip84-native.js +8 -0
- package/cjs/bip84-native.js.map +1 -0
- package/cjs/hardware-wallet-manager.js +302 -128
- package/cjs/hardware-wallet-manager.js.map +1 -1
- package/cjs/keyring-core.js +319 -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/public-bip84.js +157 -0
- package/cjs/public-bip84.js.map +1 -0
- package/cjs/software-hd-account.js +23 -0
- package/cjs/software-hd-account.js.map +1 -0
- package/cjs/software-utxo-account.js +12 -0
- package/cjs/software-utxo-account.js.map +1 -0
- package/cjs/software.js +24 -0
- package/cjs/software.js.map +1 -1
- package/cjs/transactions/bip84-native-plan.js +481 -0
- package/cjs/transactions/bip84-native-plan.js.map +1 -0
- 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-bip84.js +214 -0
- package/cjs/transactions/prepared-bip84.js.map +1 -0
- package/cjs/transactions/prepared-evm.js +197 -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 +34 -9
- package/types/bip84-native.d.ts +3 -0
- package/types/hardware-wallet-manager.d.ts +12 -19
- package/types/keyring-core.d.ts +14 -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/public-bip84.d.ts +39 -0
- package/types/software-hd-account.d.ts +16 -0
- package/types/software-utxo-account.d.ts +13 -0
- package/types/software.d.ts +26 -0
- package/types/transactions/bip84-native-plan.d.ts +83 -0
- package/types/transactions/ethereum.d.ts +1 -1
- package/types/transactions/prepared-bip84.d.ts +27 -0
- 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,206 @@
|
|
|
1
|
+
const methods = [
|
|
2
|
+
'getFeatures',
|
|
3
|
+
'getAccountInfo',
|
|
4
|
+
'ethereumGetAddress',
|
|
5
|
+
'ethereumGetPublicKey',
|
|
6
|
+
'getPublicKey',
|
|
7
|
+
'getAddress',
|
|
8
|
+
'signTransaction',
|
|
9
|
+
'ethereumSignTransaction',
|
|
10
|
+
'signMessage',
|
|
11
|
+
'ethereumSignMessage',
|
|
12
|
+
'ethereumSignTypedData',
|
|
13
|
+
'verifyMessage',
|
|
14
|
+
'ethereumVerifyMessage',
|
|
15
|
+
];
|
|
16
|
+
const listeners = new Set();
|
|
17
|
+
let clientPromise;
|
|
18
|
+
let generation = 0;
|
|
19
|
+
let initialized = false;
|
|
20
|
+
let cleanupPromise = Promise.resolve();
|
|
21
|
+
let cleanupPending = false;
|
|
22
|
+
const inFlight = new Set();
|
|
23
|
+
const pending = new Set();
|
|
24
|
+
const interrupted = () => Object.assign(new Error('Trezor operation cancelled'), {
|
|
25
|
+
code: 'Method_Interrupted',
|
|
26
|
+
});
|
|
27
|
+
const invalidate = () => {
|
|
28
|
+
generation++;
|
|
29
|
+
initialized = false;
|
|
30
|
+
const error = interrupted();
|
|
31
|
+
for (const reject of pending)
|
|
32
|
+
reject(error);
|
|
33
|
+
pending.clear();
|
|
34
|
+
emit({ type: 'disconnected' });
|
|
35
|
+
};
|
|
36
|
+
export const subscribeTrezorEvents = (listener) => {
|
|
37
|
+
listeners.add(listener);
|
|
38
|
+
return () => listeners.delete(listener);
|
|
39
|
+
};
|
|
40
|
+
const emit = (event) => {
|
|
41
|
+
for (const listener of listeners) {
|
|
42
|
+
try {
|
|
43
|
+
listener(event);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Status observers must not turn a completed device call into a retry.
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
/** Connect 10's webextension module registers Chrome listeners on import. */
|
|
51
|
+
const requireExtensionHost = () => {
|
|
52
|
+
const chrome = globalThis.chrome;
|
|
53
|
+
if (!chrome?.runtime?.id ||
|
|
54
|
+
chrome.runtime.getManifest?.()?.manifest_version !== 3 ||
|
|
55
|
+
typeof chrome.runtime.onConnect?.addListener !== 'function' ||
|
|
56
|
+
typeof chrome.runtime.onMessageExternal?.addListener !== 'function' ||
|
|
57
|
+
typeof chrome.tabs?.get !== 'function' ||
|
|
58
|
+
typeof chrome.tabs?.create !== 'function' ||
|
|
59
|
+
typeof chrome.tabs?.update !== 'function' ||
|
|
60
|
+
typeof chrome.windows?.getCurrent !== 'function') {
|
|
61
|
+
throw Object.assign(new Error('Trezor requires a supported MV3 extension host'), { code: 'HARDWARE_SIGNER_UNAVAILABLE' });
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const getClient = () => {
|
|
65
|
+
requireExtensionHost();
|
|
66
|
+
if (!clientPromise) {
|
|
67
|
+
clientPromise = import('@trezor/connect-webextension')
|
|
68
|
+
.then((module) => module.default)
|
|
69
|
+
.catch((error) => {
|
|
70
|
+
clientPromise = undefined;
|
|
71
|
+
throw error;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return clientPromise;
|
|
75
|
+
};
|
|
76
|
+
/** Keep the SDK's established failure payload while preserving Connect 10 codes. */
|
|
77
|
+
const normalize = (response, method) => {
|
|
78
|
+
if (response?.success === false) {
|
|
79
|
+
const error = response.error;
|
|
80
|
+
const code = typeof error?.code === 'string' ? error.code : undefined;
|
|
81
|
+
if (code === 'Device_Disconnected' ||
|
|
82
|
+
code === 'Device_NotFound' ||
|
|
83
|
+
code === 'Desktop_ConnectionMissing' ||
|
|
84
|
+
code === 'Transport_Missing') {
|
|
85
|
+
invalidate();
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
...response,
|
|
89
|
+
payload: {
|
|
90
|
+
error: typeof error?.message === 'string'
|
|
91
|
+
? error.message
|
|
92
|
+
: 'Trezor request failed',
|
|
93
|
+
code,
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
const model = response?.device?.features?.model ??
|
|
98
|
+
(method === 'getFeatures' ? response?.payload?.model : undefined);
|
|
99
|
+
if (response?.success === true && typeof model === 'string') {
|
|
100
|
+
emit({ type: 'model', model });
|
|
101
|
+
}
|
|
102
|
+
return response;
|
|
103
|
+
};
|
|
104
|
+
const withClient = async (operation, requireInitialized = true) => {
|
|
105
|
+
const captured = generation;
|
|
106
|
+
const assertCurrent = () => {
|
|
107
|
+
if (captured !== generation)
|
|
108
|
+
throw interrupted();
|
|
109
|
+
if (requireInitialized && !initialized) {
|
|
110
|
+
throw Object.assign(new Error('TrezorConnect not initialized'), {
|
|
111
|
+
code: 'Init_NotInitialized',
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
assertCurrent();
|
|
116
|
+
let rejectPending;
|
|
117
|
+
const cancelled = new Promise((_resolve, reject) => {
|
|
118
|
+
rejectPending = reject;
|
|
119
|
+
});
|
|
120
|
+
pending.add(rejectPending);
|
|
121
|
+
try {
|
|
122
|
+
const result = await Promise.race([
|
|
123
|
+
(async () => {
|
|
124
|
+
await cleanupPromise;
|
|
125
|
+
assertCurrent();
|
|
126
|
+
const client = await getClient();
|
|
127
|
+
assertCurrent();
|
|
128
|
+
const request = Promise.resolve(operation(client));
|
|
129
|
+
inFlight.add(request);
|
|
130
|
+
try {
|
|
131
|
+
return await request;
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
inFlight.delete(request);
|
|
135
|
+
}
|
|
136
|
+
})(),
|
|
137
|
+
cancelled,
|
|
138
|
+
]);
|
|
139
|
+
// A late response must not restore a model/status or return a signature.
|
|
140
|
+
assertCurrent();
|
|
141
|
+
return result;
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
pending.delete(rejectPending);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
const calls = Object.fromEntries(methods.map((method) => [
|
|
148
|
+
method,
|
|
149
|
+
async (...args) => {
|
|
150
|
+
const captured = generation;
|
|
151
|
+
const response = await withClient((client) => client[method](...args));
|
|
152
|
+
if (captured !== generation)
|
|
153
|
+
throw interrupted();
|
|
154
|
+
return normalize(response, method);
|
|
155
|
+
},
|
|
156
|
+
]));
|
|
157
|
+
const TrezorConnect = {
|
|
158
|
+
...calls,
|
|
159
|
+
async init(settings) {
|
|
160
|
+
if (cleanupPending) {
|
|
161
|
+
throw Object.assign(new Error('Previous Trezor request is still pending'), {
|
|
162
|
+
code: 'HARDWARE_SIGNER_BUSY',
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
invalidate();
|
|
166
|
+
const captured = generation;
|
|
167
|
+
await withClient((client) => client.init({ ...settings, env: 'webextension' }), false);
|
|
168
|
+
if (captured !== generation)
|
|
169
|
+
throw interrupted();
|
|
170
|
+
initialized = true;
|
|
171
|
+
},
|
|
172
|
+
dispose() {
|
|
173
|
+
// Invalidate synchronously, before waiting for import or remote cleanup.
|
|
174
|
+
// Suite Web's upstream dispose is a no-op; local invalidation is required.
|
|
175
|
+
invalidate();
|
|
176
|
+
if (cleanupPending) {
|
|
177
|
+
return inFlight.size ? Promise.resolve() : cleanupPromise;
|
|
178
|
+
}
|
|
179
|
+
const loaded = clientPromise;
|
|
180
|
+
if (!loaded)
|
|
181
|
+
return Promise.resolve();
|
|
182
|
+
const outstanding = [...inFlight];
|
|
183
|
+
cleanupPending = true;
|
|
184
|
+
cleanupPromise = cleanupPromise
|
|
185
|
+
.catch(() => undefined)
|
|
186
|
+
.then(async () => {
|
|
187
|
+
// Closing Desktop's socket during a raw call makes Connect auto-open
|
|
188
|
+
// Suite Web. Let that raw call settle while its result stays fenced.
|
|
189
|
+
await Promise.allSettled(outstanding);
|
|
190
|
+
const client = await loaded;
|
|
191
|
+
// Desktop cancel() discards an internal Promise in Connect 10.0.1;
|
|
192
|
+
// do not invoke it or claim that Suite Web's no-op dispose closes UI.
|
|
193
|
+
await client.dispose();
|
|
194
|
+
})
|
|
195
|
+
.finally(() => {
|
|
196
|
+
cleanupPending = false;
|
|
197
|
+
});
|
|
198
|
+
// Deferred cleanup may outlive the caller; preserve its failure for future
|
|
199
|
+
// init while preventing an unhandled rejection when the host is locking.
|
|
200
|
+
void cleanupPromise.catch(() => undefined);
|
|
201
|
+
return outstanding.length ? Promise.resolve() : cleanupPromise;
|
|
202
|
+
},
|
|
203
|
+
};
|
|
204
|
+
export const trezorResponseError = (response, prefix = '') => Object.assign(new Error(prefix + (response.payload?.error || 'Trezor request failed')), { code: response.payload?.code });
|
|
205
|
+
export default TrezorConnect;
|
|
206
|
+
//# 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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"}
|