@sidhujag/sysweb3-keyring 2.1.6 → 2.1.8
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 +12 -0
- package/cjs/hardware-transaction-authority.js +15 -11
- package/cjs/hardware-transaction-authority.js.map +1 -1
- package/cjs/hardware-wallet-manager.js +74 -119
- package/cjs/hardware-wallet-manager.js.map +1 -1
- package/cjs/hardware-wallet-types.js +16 -0
- package/cjs/hardware-wallet-types.js.map +1 -0
- package/cjs/host-keyring.js +32 -0
- package/cjs/host-keyring.js.map +1 -0
- package/cjs/index.js +1 -0
- package/cjs/index.js.map +1 -1
- package/cjs/keyring-core.js +96 -61
- package/cjs/keyring-core.js.map +1 -1
- package/cjs/keyring-manager.js +15 -16
- package/cjs/keyring-manager.js.map +1 -1
- package/cjs/ledger/host-types.js.map +1 -1
- package/cjs/ledger/index.js +24 -4
- package/cjs/ledger/index.js.map +1 -1
- package/cjs/ledger-hardware.js +15 -0
- package/cjs/ledger-hardware.js.map +1 -0
- package/cjs/software.js +6 -25
- package/cjs/software.js.map +1 -1
- package/cjs/transactions/ethereum.js +321 -269
- package/cjs/transactions/ethereum.js.map +1 -1
- package/cjs/transactions/evm-envelope.js +186 -0
- package/cjs/transactions/evm-envelope.js.map +1 -0
- package/cjs/transactions/evm-submission.js +32 -4
- package/cjs/transactions/evm-submission.js.map +1 -1
- package/cjs/transactions/ledger-signing.js +44 -0
- package/cjs/transactions/ledger-signing.js.map +1 -0
- package/cjs/transactions/prepared-evm.js +44 -124
- package/cjs/transactions/prepared-evm.js.map +1 -1
- package/cjs/trezor/connect.js +238 -243
- package/cjs/trezor/connect.js.map +1 -1
- package/cjs/trezor/host-types.js +19 -0
- package/cjs/trezor/host-types.js.map +1 -0
- package/cjs/trezor/index.js +75 -23
- package/cjs/trezor/index.js.map +1 -1
- package/cjs/trezor/webextension-host.js +118 -0
- package/cjs/trezor/webextension-host.js.map +1 -0
- package/cjs/trezor-hardware.js +16 -0
- package/cjs/trezor-hardware.js.map +1 -0
- package/cjs/types.js.map +1 -1
- package/esm/hardware-transaction-authority.js +14 -11
- package/esm/hardware-transaction-authority.js.map +1 -1
- package/esm/hardware-wallet-manager.js +20 -32
- package/esm/hardware-wallet-manager.js.map +1 -1
- package/esm/hardware-wallet-types.js +13 -0
- package/esm/hardware-wallet-types.js.map +1 -0
- package/esm/keyring-core.js +98 -63
- package/esm/keyring-core.js.map +1 -1
- package/esm/ledger/dmk-host.js +2 -0
- package/esm/ledger/dmk-host.js.map +1 -1
- package/esm/ledger/dmk-session.js +73 -8
- package/esm/ledger/dmk-session.js.map +1 -1
- package/esm/ledger/host-types.js.map +1 -1
- package/esm/ledger/index.js +22 -2
- package/esm/ledger/index.js.map +1 -1
- package/esm/transactions/ethereum.js +322 -270
- package/esm/transactions/ethereum.js.map +1 -1
- package/esm/transactions/evm-envelope.js +179 -0
- package/esm/transactions/evm-envelope.js.map +1 -0
- package/esm/transactions/evm-submission.js +32 -4
- package/esm/transactions/evm-submission.js.map +1 -1
- package/esm/transactions/ledger-signing.js +41 -0
- package/esm/transactions/ledger-signing.js.map +1 -0
- package/esm/transactions/prepared-evm.js +43 -124
- package/esm/transactions/prepared-evm.js.map +1 -1
- package/esm/trezor/connect.js +236 -209
- package/esm/trezor/connect.js.map +1 -1
- package/esm/trezor/host-types.js +16 -0
- package/esm/trezor/host-types.js.map +1 -0
- package/esm/trezor/index.js +74 -22
- package/esm/trezor/index.js.map +1 -1
- package/esm/types.js.map +1 -1
- package/package.json +61 -1
- package/types/hardware-transaction-authority.d.ts +1 -0
- package/types/hardware-wallet-manager.d.ts +6 -22
- package/types/hardware-wallet-types.d.ts +21 -0
- package/types/host-keyring.d.ts +16 -0
- package/types/index.d.ts +1 -0
- package/types/keyring-core.d.ts +12 -4
- package/types/keyring-manager.d.ts +5 -3
- package/types/ledger/dmk-host.d.ts +2 -0
- package/types/ledger/dmk-session.d.ts +9 -0
- package/types/ledger/host-types.d.ts +2 -0
- package/types/ledger/index.d.ts +3 -1
- package/types/ledger-hardware.d.ts +5 -0
- package/types/software.d.ts +4 -17
- package/types/transactions/ethereum.d.ts +11 -1
- package/types/transactions/evm-envelope.d.ts +64 -0
- package/types/transactions/evm-submission.d.ts +7 -2
- package/types/transactions/ledger-signing.d.ts +13 -0
- package/types/transactions/prepared-evm.d.ts +14 -23
- package/types/trezor/connect.d.ts +11 -9
- package/types/trezor/host-types.d.ts +25 -0
- package/types/trezor/index.d.ts +7 -7
- package/types/trezor/webextension-host.d.ts +7 -0
- package/types/trezor-hardware.d.ts +6 -0
- package/types/types.d.ts +17 -5
package/cjs/trezor/connect.js
CHANGED
|
@@ -1,260 +1,255 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.trezorResponseError =
|
|
3
|
+
exports.trezorResponseError = void 0;
|
|
4
|
+
exports.createTrezorConnection = createTrezorConnection;
|
|
37
5
|
const hardware_transaction_authority_1 = require("../hardware-transaction-authority");
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
let
|
|
54
|
-
let
|
|
55
|
-
let
|
|
56
|
-
let
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
6
|
+
const host_types_1 = require("./host-types");
|
|
7
|
+
const methods = host_types_1.TREZOR_METHODS.filter((method) => method !== 'ethereumSignTransaction' && method !== 'signTransaction');
|
|
8
|
+
const hostOwners = new WeakMap();
|
|
9
|
+
function createTrezorConnection(host) {
|
|
10
|
+
if (!host ||
|
|
11
|
+
typeof host.init !== 'function' ||
|
|
12
|
+
typeof host.dispose !== 'function' ||
|
|
13
|
+
host_types_1.TREZOR_METHODS.some((method) => typeof host[method] !== 'function'))
|
|
14
|
+
throw new TypeError('Trezor requires explicit host capabilities');
|
|
15
|
+
const owner = {};
|
|
16
|
+
const releaseHost = () => {
|
|
17
|
+
if (hostOwners.get(host) === owner)
|
|
18
|
+
hostOwners.delete(host);
|
|
19
|
+
};
|
|
20
|
+
const listeners = new Set();
|
|
21
|
+
let clientPromise;
|
|
22
|
+
let generation = 0;
|
|
23
|
+
let initialized = false;
|
|
24
|
+
let initializing = false;
|
|
25
|
+
let cleanupPromise = Promise.resolve();
|
|
26
|
+
let cleanupPending = false;
|
|
27
|
+
const inFlight = new Set();
|
|
28
|
+
const pending = new Set();
|
|
29
|
+
const interrupted = () => Object.assign(new Error('Trezor operation cancelled'), {
|
|
30
|
+
code: 'Method_Interrupted',
|
|
31
|
+
});
|
|
32
|
+
const invalidate = () => {
|
|
33
|
+
const invalidated = ++generation;
|
|
34
|
+
initialized = false;
|
|
35
|
+
const error = interrupted();
|
|
36
|
+
for (const reject of pending)
|
|
37
|
+
reject(error);
|
|
38
|
+
pending.clear();
|
|
39
|
+
emit({ type: 'disconnected' });
|
|
40
|
+
return invalidated;
|
|
41
|
+
};
|
|
42
|
+
const subscribeTrezorEvents = (listener) => {
|
|
43
|
+
listeners.add(listener);
|
|
44
|
+
return () => listeners.delete(listener);
|
|
45
|
+
};
|
|
46
|
+
const emit = (event) => {
|
|
47
|
+
for (const listener of listeners) {
|
|
48
|
+
try {
|
|
49
|
+
listener(event);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Status observers must not turn a completed device call into a retry.
|
|
53
|
+
}
|
|
83
54
|
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
return clientPromise;
|
|
110
|
-
};
|
|
111
|
-
/** Keep the SDK's established failure payload while preserving Connect 10 codes. */
|
|
112
|
-
const normalize = (response, method) => {
|
|
113
|
-
if (response?.success === false) {
|
|
114
|
-
const error = response.error;
|
|
115
|
-
const code = typeof error?.code === 'string' ? error.code : undefined;
|
|
116
|
-
if (code === 'Device_Disconnected' ||
|
|
117
|
-
code === 'Device_NotFound' ||
|
|
118
|
-
code === 'Desktop_ConnectionMissing' ||
|
|
119
|
-
code === 'Transport_Missing') {
|
|
120
|
-
invalidate();
|
|
55
|
+
};
|
|
56
|
+
const getClient = () => {
|
|
57
|
+
clientPromise ?? (clientPromise = Promise.resolve(host));
|
|
58
|
+
return clientPromise;
|
|
59
|
+
};
|
|
60
|
+
/** Keep the SDK's established failure payload while preserving Connect 10 codes. */
|
|
61
|
+
const normalize = (response, method) => {
|
|
62
|
+
if (response?.success === false) {
|
|
63
|
+
const error = response.error;
|
|
64
|
+
const code = typeof error?.code === 'string' ? error.code : undefined;
|
|
65
|
+
if (code === 'Device_Disconnected' ||
|
|
66
|
+
code === 'Device_NotFound' ||
|
|
67
|
+
code === 'Desktop_ConnectionMissing' ||
|
|
68
|
+
code === 'Transport_Missing') {
|
|
69
|
+
invalidate();
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
...response,
|
|
73
|
+
payload: {
|
|
74
|
+
error: typeof error?.message === 'string'
|
|
75
|
+
? error.message
|
|
76
|
+
: 'Trezor request failed',
|
|
77
|
+
code,
|
|
78
|
+
},
|
|
79
|
+
};
|
|
121
80
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
? error.message
|
|
127
|
-
: 'Trezor request failed',
|
|
128
|
-
code,
|
|
129
|
-
},
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
const model = response?.device?.features?.model ??
|
|
133
|
-
(method === 'getFeatures' ? response?.payload?.model : undefined);
|
|
134
|
-
if (response?.success === true && typeof model === 'string') {
|
|
135
|
-
emit({ type: 'model', model });
|
|
136
|
-
}
|
|
137
|
-
return response;
|
|
138
|
-
};
|
|
139
|
-
const withClient = async (operation, requireInitialized = true) => {
|
|
140
|
-
const captured = generation;
|
|
141
|
-
const assertCurrent = () => {
|
|
142
|
-
if (captured !== generation)
|
|
143
|
-
throw interrupted();
|
|
144
|
-
if (requireInitialized && !initialized) {
|
|
145
|
-
throw Object.assign(new Error('TrezorConnect not initialized'), {
|
|
146
|
-
code: 'Init_NotInitialized',
|
|
147
|
-
});
|
|
81
|
+
const model = response?.device?.features?.model ??
|
|
82
|
+
(method === 'getFeatures' ? response?.payload?.model : undefined);
|
|
83
|
+
if (response?.success === true && typeof model === 'string') {
|
|
84
|
+
emit({ type: 'model', model });
|
|
148
85
|
}
|
|
86
|
+
return response;
|
|
149
87
|
};
|
|
150
|
-
|
|
151
|
-
let rejectPending;
|
|
152
|
-
const cancelled = new Promise((_resolve, reject) => {
|
|
153
|
-
rejectPending = reject;
|
|
154
|
-
});
|
|
155
|
-
pending.add(rejectPending);
|
|
156
|
-
try {
|
|
157
|
-
const result = await Promise.race([
|
|
158
|
-
(async () => {
|
|
159
|
-
await cleanupPromise;
|
|
160
|
-
assertCurrent();
|
|
161
|
-
const client = await getClient();
|
|
162
|
-
assertCurrent();
|
|
163
|
-
const request = Promise.resolve(operation(client));
|
|
164
|
-
inFlight.add(request);
|
|
165
|
-
try {
|
|
166
|
-
return await request;
|
|
167
|
-
}
|
|
168
|
-
finally {
|
|
169
|
-
inFlight.delete(request);
|
|
170
|
-
}
|
|
171
|
-
})(),
|
|
172
|
-
cancelled,
|
|
173
|
-
]);
|
|
174
|
-
// A late response must not restore a model/status or return a signature.
|
|
175
|
-
assertCurrent();
|
|
176
|
-
return result;
|
|
177
|
-
}
|
|
178
|
-
finally {
|
|
179
|
-
pending.delete(rejectPending);
|
|
180
|
-
}
|
|
181
|
-
};
|
|
182
|
-
const calls = Object.fromEntries(methods.map((method) => [
|
|
183
|
-
method,
|
|
184
|
-
async (...args) => {
|
|
88
|
+
const withClient = async (operation, requireInitialized = true) => {
|
|
185
89
|
const captured = generation;
|
|
186
|
-
const
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
90
|
+
const assertCurrent = () => {
|
|
91
|
+
if (captured !== generation)
|
|
92
|
+
throw interrupted();
|
|
93
|
+
if (requireInitialized && !initialized) {
|
|
94
|
+
throw Object.assign(new Error('TrezorConnect not initialized'), {
|
|
95
|
+
code: 'Init_NotInitialized',
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
if (hostOwners.get(host) !== owner)
|
|
99
|
+
throw interrupted();
|
|
100
|
+
};
|
|
196
101
|
assertCurrent();
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
102
|
+
let rejectPending;
|
|
103
|
+
const cancelled = new Promise((_resolve, reject) => {
|
|
104
|
+
rejectPending = reject;
|
|
105
|
+
});
|
|
106
|
+
pending.add(rejectPending);
|
|
107
|
+
try {
|
|
108
|
+
const result = await Promise.race([
|
|
109
|
+
(async () => {
|
|
110
|
+
await cleanupPromise;
|
|
111
|
+
assertCurrent();
|
|
112
|
+
const client = await getClient();
|
|
113
|
+
assertCurrent();
|
|
114
|
+
const request = Promise.resolve(operation(client, assertCurrent));
|
|
115
|
+
inFlight.add(request);
|
|
116
|
+
try {
|
|
117
|
+
return await request;
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
inFlight.delete(request);
|
|
121
|
+
}
|
|
122
|
+
})(),
|
|
123
|
+
cancelled,
|
|
124
|
+
]);
|
|
125
|
+
// A late response must not restore a model/status or return a signature.
|
|
126
|
+
assertCurrent();
|
|
127
|
+
return result;
|
|
217
128
|
}
|
|
218
|
-
|
|
129
|
+
finally {
|
|
130
|
+
pending.delete(rejectPending);
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
const calls = Object.fromEntries(methods.map((method) => [
|
|
134
|
+
method,
|
|
135
|
+
async (...args) => {
|
|
136
|
+
const captured = generation;
|
|
137
|
+
const response = await withClient((client, assertCurrent) => client[method](assertCurrent, ...args));
|
|
138
|
+
if (captured !== generation)
|
|
139
|
+
throw interrupted();
|
|
140
|
+
const normalized = normalize(response, method);
|
|
141
|
+
if (normalized?.success === true && captured !== generation)
|
|
142
|
+
throw interrupted();
|
|
143
|
+
return normalized;
|
|
144
|
+
},
|
|
145
|
+
]));
|
|
146
|
+
async function signOwned(method, authority, call) {
|
|
147
|
+
const { assertCurrent } = (0, hardware_transaction_authority_1.captureHardwareTransactionAuthority)(authority);
|
|
219
148
|
const captured = generation;
|
|
220
|
-
await withClient((client) =>
|
|
149
|
+
const response = await withClient((client, assertConnectionCurrent) => {
|
|
150
|
+
assertCurrent();
|
|
151
|
+
return call(client, () => {
|
|
152
|
+
assertConnectionCurrent();
|
|
153
|
+
assertCurrent();
|
|
154
|
+
assertConnectionCurrent();
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
assertCurrent();
|
|
221
158
|
if (captured !== generation)
|
|
222
159
|
throw interrupted();
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
invalidate();
|
|
229
|
-
if (cleanupPending) {
|
|
230
|
-
return inFlight.size ? Promise.resolve() : cleanupPromise;
|
|
160
|
+
const normalized = normalize(response, method);
|
|
161
|
+
if (normalized?.success === true) {
|
|
162
|
+
assertCurrent();
|
|
163
|
+
if (captured !== generation)
|
|
164
|
+
throw interrupted();
|
|
231
165
|
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
.
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
166
|
+
return normalized;
|
|
167
|
+
}
|
|
168
|
+
const TrezorConnect = {
|
|
169
|
+
...calls,
|
|
170
|
+
ethereumSignTransactionOwned(request, authority) {
|
|
171
|
+
return signOwned('ethereumSignTransaction', authority, (client, assertCurrent) => client.ethereumSignTransaction(assertCurrent, request));
|
|
172
|
+
},
|
|
173
|
+
signTransactionOwned(request, authority) {
|
|
174
|
+
return signOwned('signTransaction', authority, (client, assertCurrent) => client.signTransaction(assertCurrent, request));
|
|
175
|
+
},
|
|
176
|
+
async init() {
|
|
177
|
+
if (cleanupPending || initializing) {
|
|
178
|
+
throw Object.assign(new Error('Previous Trezor request is still pending'), {
|
|
179
|
+
code: 'HARDWARE_SIGNER_BUSY',
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
const activeOwner = hostOwners.get(host);
|
|
183
|
+
if (activeOwner && activeOwner !== owner)
|
|
184
|
+
throw Object.assign(new Error('Trezor host is owned by another connection'), {
|
|
185
|
+
code: 'HARDWARE_SIGNER_BUSY',
|
|
186
|
+
});
|
|
187
|
+
hostOwners.set(host, owner);
|
|
188
|
+
initializing = true;
|
|
189
|
+
const captured = invalidate();
|
|
190
|
+
try {
|
|
191
|
+
if (captured !== generation)
|
|
192
|
+
throw interrupted();
|
|
193
|
+
await withClient((client, assertCurrent) => client.init(assertCurrent), false);
|
|
194
|
+
if (captured !== generation)
|
|
195
|
+
throw interrupted();
|
|
196
|
+
initialized = true;
|
|
197
|
+
}
|
|
198
|
+
finally {
|
|
199
|
+
initializing = false;
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
dispose() {
|
|
203
|
+
if (cleanupPending) {
|
|
204
|
+
return inFlight.size ? Promise.resolve() : cleanupPromise;
|
|
205
|
+
}
|
|
206
|
+
const loaded = clientPromise;
|
|
207
|
+
// Reserve cleanup before notifying observers, which may reenter init.
|
|
208
|
+
cleanupPending = true;
|
|
209
|
+
if (!loaded) {
|
|
210
|
+
releaseHost();
|
|
211
|
+
invalidate();
|
|
212
|
+
cleanupPending = false;
|
|
213
|
+
return Promise.resolve();
|
|
214
|
+
}
|
|
215
|
+
const outstanding = [...inFlight];
|
|
216
|
+
cleanupPromise = cleanupPromise
|
|
217
|
+
.catch(() => undefined)
|
|
218
|
+
.then(async () => {
|
|
219
|
+
const client = await loaded;
|
|
220
|
+
if (hostOwners.get(host) !== owner)
|
|
221
|
+
return;
|
|
222
|
+
await client.dispose(outstanding);
|
|
223
|
+
releaseHost();
|
|
224
|
+
})
|
|
225
|
+
.finally(() => {
|
|
226
|
+
cleanupPending = false;
|
|
227
|
+
});
|
|
228
|
+
// Deferred cleanup may outlive the caller; preserve its failure for future
|
|
229
|
+
// init while preventing an unhandled rejection when the host is locking.
|
|
230
|
+
void cleanupPromise.catch(() => undefined);
|
|
231
|
+
// Suite Web's upstream dispose is a no-op; local invalidation is required.
|
|
232
|
+
invalidate();
|
|
233
|
+
return outstanding.length ? Promise.resolve() : cleanupPromise;
|
|
234
|
+
},
|
|
235
|
+
async retire() {
|
|
236
|
+
const disposal = TrezorConnect.dispose();
|
|
237
|
+
const captured = generation;
|
|
238
|
+
await (cleanupPending ? cleanupPromise : disposal);
|
|
239
|
+
const assertRetired = () => {
|
|
240
|
+
if (captured !== generation ||
|
|
241
|
+
initialized ||
|
|
242
|
+
initializing ||
|
|
243
|
+
cleanupPending ||
|
|
244
|
+
hostOwners.has(host))
|
|
245
|
+
throw interrupted();
|
|
246
|
+
};
|
|
247
|
+
assertRetired();
|
|
248
|
+
return assertRetired;
|
|
249
|
+
},
|
|
250
|
+
};
|
|
251
|
+
return { ...TrezorConnect, subscribe: subscribeTrezorEvents };
|
|
252
|
+
}
|
|
257
253
|
const trezorResponseError = (response, prefix = '') => Object.assign(new Error(prefix + (response.payload?.error || 'Trezor request failed')), { code: response.payload?.code });
|
|
258
254
|
exports.trezorResponseError = trezorResponseError;
|
|
259
|
-
exports.default = TrezorConnect;
|
|
260
255
|
//# sourceMappingURL=connect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/trezor/connect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/trezor/connect.ts"],"names":[],"mappings":";;;AAgDA,wDAoRC;AApUD,sFAAwF;AACxF,6CAA8C;AAQ9C,MAAM,OAAO,GAAG,2BAAc,CAAC,MAAM,CACnC,CAAC,MAAM,EAA6B,EAAE,CACpC,MAAM,KAAK,yBAAyB,IAAI,MAAM,KAAK,iBAAiB,CACvE,CAAC;AAkCF,MAAM,UAAU,GAAG,IAAI,OAAO,EAAsB,CAAC;AAErD,SAAgB,sBAAsB,CAAC,IAAgB;IACrD,IACE,CAAC,IAAI;QACL,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU;QAC/B,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU;QAClC,2BAAc,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC;QAEnE,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK;YAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoC,CAAC;IAC9D,IAAI,aAA8C,CAAC;IACnD,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,cAAc,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IACvC,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;IAClD,MAAM,WAAW,GAAG,GAAG,EAAE,CACvB,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,EAAE;QACrD,IAAI,EAAE,oBAAoB;KAC3B,CAAC,CAAC;IACL,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,MAAM,WAAW,GAAG,EAAE,UAAU,CAAC;QACjC,WAAW,GAAG,KAAK,CAAC;QACpB,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;QAC5B,KAAK,MAAM,MAAM,IAAI,OAAO;YAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC/B,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,qBAAqB,GAAG,CAC5B,QAA0C,EAC5B,EAAE;QAChB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,KAAsB,EAAE,EAAE;QACtC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;YAAC,MAAM,CAAC;gBACP,uEAAuE;YACzE,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,GAAwB,EAAE;QAC1C,aAAa,KAAb,aAAa,GAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAC;QACxC,OAAO,aAAa,CAAC;IACvB,CAAC,CAAC;IAEF,oFAAoF;IACpF,MAAM,SAAS,GAAG,CAAC,QAAa,EAAE,MAAc,EAAO,EAAE;QACvD,IAAI,QAAQ,EAAE,OAAO,KAAK,KAAK,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC7B,MAAM,IAAI,GAAG,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YACtE,IACE,IAAI,KAAK,qBAAqB;gBAC9B,IAAI,KAAK,iBAAiB;gBAC1B,IAAI,KAAK,2BAA2B;gBACpC,IAAI,KAAK,mBAAmB,EAC5B,CAAC;gBACD,UAAU,EAAE,CAAC;YACf,CAAC;YACD,OAAO;gBACL,GAAG,QAAQ;gBACX,OAAO,EAAE;oBACP,KAAK,EACH,OAAO,KAAK,EAAE,OAAO,KAAK,QAAQ;wBAChC,CAAC,CAAC,KAAK,CAAC,OAAO;wBACf,CAAC,CAAC,uBAAuB;oBAC7B,IAAI;iBACL;aACF,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GACT,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK;YACjC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACpE,IAAI,QAAQ,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5D,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,KAAK,EACtB,SAGoB,EACpB,kBAAkB,GAAG,IAAI,EACR,EAAE;QACnB,MAAM,QAAQ,GAAG,UAAU,CAAC;QAC5B,MAAM,aAAa,GAAG,GAAG,EAAE;YACzB,IAAI,QAAQ,KAAK,UAAU;gBAAE,MAAM,WAAW,EAAE,CAAC;YACjD,IAAI,kBAAkB,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,EAAE;oBAC9D,IAAI,EAAE,qBAAqB;iBAC5B,CAAC,CAAC;YACL,CAAC;YACD,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK;gBAAE,MAAM,WAAW,EAAE,CAAC;QAC1D,CAAC,CAAC;QACF,aAAa,EAAE,CAAC;QAChB,IAAI,aAAsC,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;YACxD,aAAa,GAAG,MAAM,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBAChC,CAAC,KAAK,IAAI,EAAE;oBACV,MAAM,cAAc,CAAC;oBACrB,aAAa,EAAE,CAAC;oBAChB,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;oBACjC,aAAa,EAAE,CAAC;oBAChB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;oBAClE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBACtB,IAAI,CAAC;wBACH,OAAO,MAAM,OAAO,CAAC;oBACvB,CAAC;4BAAS,CAAC;wBACT,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAC3B,CAAC;gBACH,CAAC,CAAC,EAAE;gBACJ,SAAS;aACV,CAAC,CAAC;YACH,yEAAyE;YACzE,aAAa,EAAE,CAAC;YAChB,OAAO,MAAM,CAAC;QAChB,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAC9B,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACtB,MAAM;QACN,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE;YACvB,MAAM,QAAQ,GAAG,UAAU,CAAC;YAC5B,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CACzD,MAAM,CAAC,MAAM,CAAS,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,CAChD,CAAC;YACF,IAAI,QAAQ,KAAK,UAAU;gBAAE,MAAM,WAAW,EAAE,CAAC;YACjD,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC/C,IAAI,UAAU,EAAE,OAAO,KAAK,IAAI,IAAI,QAAQ,KAAK,UAAU;gBACzD,MAAM,WAAW,EAAE,CAAC;YACtB,OAAO,UAAU,CAAC;QACpB,CAAC;KACF,CAAC,CACM,CAAC;IAEX,KAAK,UAAU,SAAS,CACtB,MAAyB,EACzB,SAAuC,EACvC,IAAwE;QAExE,MAAM,EAAE,aAAa,EAAE,GAAG,IAAA,oEAAmC,EAAC,SAAS,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,UAAU,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,CAAC,MAAM,EAAE,uBAAuB,EAAE,EAAE;YACpE,aAAa,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;gBACvB,uBAAuB,EAAE,CAAC;gBAC1B,aAAa,EAAE,CAAC;gBAChB,uBAAuB,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,aAAa,EAAE,CAAC;QAChB,IAAI,QAAQ,KAAK,UAAU;YAAE,MAAM,WAAW,EAAE,CAAC;QACjD,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,UAAU,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;YACjC,aAAa,EAAE,CAAC;YAChB,IAAI,QAAQ,KAAK,UAAU;gBAAE,MAAM,WAAW,EAAE,CAAC;QACnD,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,aAAa,GAAwC;QACzD,GAAG,KAAK;QACR,4BAA4B,CAAC,OAAO,EAAE,SAAS;YAC7C,OAAO,SAAS,CACd,yBAAyB,EACzB,SAAS,EACT,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CACxB,MAAM,CAAC,uBAAuB,CAAC,aAAa,EAAE,OAAO,CAAC,CACzD,CAAC;QACJ,CAAC;QACD,oBAAoB,CAAC,OAAO,EAAE,SAAS;YACrC,OAAO,SAAS,CAAC,iBAAiB,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CACvE,MAAM,CAAC,eAAe,CAAC,aAAa,EAAE,OAAO,CAAC,CAC/C,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI;YACR,IAAI,cAAc,IAAI,YAAY,EAAE,CAAC;gBACnC,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,0CAA0C,CAAC,EACrD;oBACE,IAAI,EAAE,sBAAsB;iBAC7B,CACF,CAAC;YACJ,CAAC;YACD,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,WAAW,IAAI,WAAW,KAAK,KAAK;gBACtC,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,4CAA4C,CAAC,EACvD;oBACE,IAAI,EAAE,sBAAsB;iBAC7B,CACF,CAAC;YACJ,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC5B,YAAY,GAAG,IAAI,CAAC;YACpB,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,IAAI,QAAQ,KAAK,UAAU;oBAAE,MAAM,WAAW,EAAE,CAAC;gBACjD,MAAM,UAAU,CACd,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EACrD,KAAK,CACN,CAAC;gBACF,IAAI,QAAQ,KAAK,UAAU;oBAAE,MAAM,WAAW,EAAE,CAAC;gBACjD,WAAW,GAAG,IAAI,CAAC;YACrB,CAAC;oBAAS,CAAC;gBACT,YAAY,GAAG,KAAK,CAAC;YACvB,CAAC;QACH,CAAC;QACD,OAAO;YACL,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;YAC5D,CAAC;YACD,MAAM,MAAM,GAAG,aAAa,CAAC;YAC7B,sEAAsE;YACtE,cAAc,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,WAAW,EAAE,CAAC;gBACd,UAAU,EAAE,CAAC;gBACb,cAAc,GAAG,KAAK,CAAC;gBACvB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;YAC3B,CAAC;YACD,MAAM,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;YAClC,cAAc,GAAG,cAAc;iBAC5B,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;iBACtB,IAAI,CAAC,KAAK,IAAI,EAAE;gBACf,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;gBAC5B,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK;oBAAE,OAAO;gBAC3C,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBAClC,WAAW,EAAE,CAAC;YAChB,CAAC,CAAC;iBACD,OAAO,CAAC,GAAG,EAAE;gBACZ,cAAc,GAAG,KAAK,CAAC;YACzB,CAAC,CAAC,CAAC;YACL,2EAA2E;YAC3E,yEAAyE;YACzE,KAAK,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC3C,2EAA2E;YAC3E,UAAU,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;QACjE,CAAC;QACD,KAAK,CAAC,MAAM;YACV,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC;YACzC,MAAM,QAAQ,GAAG,UAAU,CAAC;YAC5B,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,aAAa,GAAG,GAAG,EAAE;gBACzB,IACE,QAAQ,KAAK,UAAU;oBACvB,WAAW;oBACX,YAAY;oBACZ,cAAc;oBACd,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;oBAEpB,MAAM,WAAW,EAAE,CAAC;YACxB,CAAC,CAAC;YACF,aAAa,EAAE,CAAC;YAChB,OAAO,aAAa,CAAC;QACvB,CAAC;KACF,CAAC;IAEF,OAAO,EAAE,GAAG,aAAa,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;AAChE,CAAC;AAEM,MAAM,mBAAmB,GAAG,CACjC,QAAyD,EACzD,MAAM,GAAG,EAAE,EACJ,EAAE,CACT,MAAM,CAAC,MAAM,CACX,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,IAAI,uBAAuB,CAAC,CAAC,EACxE,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,CACjC,CAAC;AAPS,QAAA,mBAAmB,uBAO5B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TREZOR_METHODS = void 0;
|
|
4
|
+
exports.TREZOR_METHODS = [
|
|
5
|
+
'getFeatures',
|
|
6
|
+
'getAccountInfo',
|
|
7
|
+
'ethereumGetAddress',
|
|
8
|
+
'ethereumGetPublicKey',
|
|
9
|
+
'getPublicKey',
|
|
10
|
+
'getAddress',
|
|
11
|
+
'signMessage',
|
|
12
|
+
'ethereumSignMessage',
|
|
13
|
+
'ethereumSignTypedData',
|
|
14
|
+
'verifyMessage',
|
|
15
|
+
'ethereumVerifyMessage',
|
|
16
|
+
'ethereumSignTransaction',
|
|
17
|
+
'signTransaction',
|
|
18
|
+
];
|
|
19
|
+
//# sourceMappingURL=host-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-types.js","sourceRoot":"","sources":["../../../src/trezor/host-types.ts"],"names":[],"mappings":";;;AAKa,QAAA,cAAc,GAAG;IAC5B,aAAa;IACb,gBAAgB;IAChB,oBAAoB;IACpB,sBAAsB;IACtB,cAAc;IACd,YAAY;IACZ,aAAa;IACb,qBAAqB;IACrB,uBAAuB;IACvB,eAAe;IACf,uBAAuB;IACvB,yBAAyB;IACzB,iBAAiB;CACT,CAAC"}
|