@onekeyfe/hwk-adapter-core 1.2.2-alpha.9 → 1.2.3-alpha.1

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.
Files changed (37) hide show
  1. package/dist/chunk-3M3GMF64.mjs +68 -0
  2. package/dist/chunk-3M3GMF64.mjs.map +1 -0
  3. package/dist/{chunk-67BP77GT.mjs → chunk-72KOSYTH.mjs} +145 -56
  4. package/dist/chunk-72KOSYTH.mjs.map +1 -0
  5. package/dist/chunk-7SFFS2NL.js +68 -0
  6. package/dist/chunk-7SFFS2NL.js.map +1 -0
  7. package/dist/{chunk-SK7ZF33J.js → chunk-IZEVYMJK.js} +145 -56
  8. package/dist/chunk-IZEVYMJK.js.map +1 -0
  9. package/dist/{chunk-U63HTLGJ.mjs → chunk-KCIK56B5.mjs} +31 -2
  10. package/dist/chunk-KCIK56B5.mjs.map +1 -0
  11. package/dist/{chunk-BAGEFFFY.js → chunk-RRCFH7X6.js} +32 -3
  12. package/dist/chunk-RRCFH7X6.js.map +1 -0
  13. package/dist/errors-ChA_YEZY.d.mts +296 -0
  14. package/dist/errors-ChA_YEZY.d.ts +296 -0
  15. package/dist/errors.d.mts +1 -205
  16. package/dist/errors.d.ts +1 -205
  17. package/dist/errors.js +8 -2
  18. package/dist/errors.js.map +1 -1
  19. package/dist/errors.mjs +9 -3
  20. package/dist/index.d.mts +530 -57
  21. package/dist/index.d.ts +530 -57
  22. package/dist/index.js +600 -58
  23. package/dist/index.js.map +1 -1
  24. package/dist/index.mjs +591 -49
  25. package/dist/index.mjs.map +1 -1
  26. package/dist/{ui-events-Cb7haAeE.d.ts → ui-events-BXI9BBpx.d.mts} +19 -3
  27. package/dist/{ui-events-Cb7haAeE.d.mts → ui-events-BXI9BBpx.d.ts} +19 -3
  28. package/dist/ui-events.d.mts +1 -1
  29. package/dist/ui-events.d.ts +1 -1
  30. package/dist/ui-events.js +3 -2
  31. package/dist/ui-events.js.map +1 -1
  32. package/dist/ui-events.mjs +2 -1
  33. package/package.json +2 -2
  34. package/dist/chunk-67BP77GT.mjs.map +0 -1
  35. package/dist/chunk-BAGEFFFY.js.map +0 -1
  36. package/dist/chunk-SK7ZF33J.js.map +0 -1
  37. package/dist/chunk-U63HTLGJ.mjs.map +0 -1
package/dist/index.js CHANGED
@@ -1,31 +1,49 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
+ var _chunk7SFFS2NLjs = require('./chunk-7SFFS2NL.js');
3
4
 
4
5
 
5
6
 
6
- var _chunkSK7ZF33Jjs = require('./chunk-SK7ZF33J.js');
7
7
 
8
8
 
9
9
 
10
10
 
11
11
 
12
12
 
13
+ var _chunkRRCFH7X6js = require('./chunk-RRCFH7X6.js');
13
14
 
14
15
 
15
16
 
16
- var _chunkBAGEFFFYjs = require('./chunk-BAGEFFFY.js');
17
+
18
+
19
+
20
+
21
+
22
+ var _chunkIZEVYMJKjs = require('./chunk-IZEVYMJK.js');
17
23
 
18
24
  // src/types/response.ts
19
25
  function success(payload) {
20
26
  return { success: true, payload };
21
27
  }
22
- function failure(code, error, params) {
28
+ function failure(code, error, params, origin, recovery) {
23
29
  return {
24
30
  success: false,
25
- payload: { error, code, ...params ? { params } : {} }
31
+ payload: {
32
+ error,
33
+ code,
34
+ ...origin !== void 0 ? { origin } : {},
35
+ recovery: _nullishCoalesce(recovery, () => ( _chunkIZEVYMJKjs.defaultRecoveryForCode.call(void 0, code))),
36
+ ...params ? { params } : {}
37
+ }
26
38
  };
27
39
  }
28
40
 
41
+ // src/types/device.ts
42
+ function resolveSearchTargetReusePolicy(device) {
43
+ if (_optionalChain([device, 'access', _ => _.capabilities, 'optionalAccess', _2 => _2.persistentDeviceIdentity])) return "reconnectable";
44
+ return "current-discovery";
45
+ }
46
+
29
47
  // src/types/fingerprint.ts
30
48
  var _sha256 = require('@noble/hashes/sha256');
31
49
  var _utils = require('@noble/hashes/utils');
@@ -35,11 +53,21 @@ var CHAIN_FINGERPRINT_PATHS = {
35
53
  // Cointype 1 (testnet) is rejected by some Ledger BTC App configurations.
36
54
  btc: "m/44'/0'/0'",
37
55
  sol: "m/44'/501'/0'",
38
- tron: "m/44'/195'/0'/0/0"
56
+ tron: "m/44'/195'/0'/0/0",
57
+ // Shielded UA (single Orchard receiver) derived from the transparent path.
58
+ zcash: "m/44'/133'/0'/0/0"
39
59
  };
60
+ function parseBip32MasterFingerprint(value) {
61
+ if (typeof value !== "string") return void 0;
62
+ const normalized = value.trim().toLowerCase();
63
+ return /^[0-9a-f]{8}$/.test(normalized) ? normalized : void 0;
64
+ }
40
65
  function deriveDeviceFingerprint(value) {
41
66
  return _utils.bytesToHex.call(void 0, _sha256.sha256.call(void 0, _utils.utf8ToBytes.call(void 0, value))).slice(0, 16);
42
67
  }
68
+ function deriveWalletId(canonicalPublicMaterial) {
69
+ return _utils.bytesToHex.call(void 0, _sha256.sha256.call(void 0, _utils.utf8ToBytes.call(void 0, `onekey-hwk-wallet-id:v1:${canonicalPublicMaterial}`)));
70
+ }
43
71
 
44
72
  // src/events/device.ts
45
73
  var DEVICE_EVENT = "DEVICE_EVENT";
@@ -48,6 +76,10 @@ var DEVICE = {
48
76
  DISCONNECT: "device-disconnect",
49
77
  CHANGED: "device-changed",
50
78
  FEATURES: "features",
79
+ /** Trezor transport binding, emitted only after matching the expected firmware device_id. */
80
+ TREZOR_CONNECTION_VERIFIED: "device-trezor-connection-verified",
81
+ /** Ledger BLE address repair, emitted only after matching the stored chain fingerprint. */
82
+ LEDGER_CONNECTION_VERIFIED: "device-ledger-connection-verified",
51
83
  /**
52
84
  * Trezor-only. Emitted after a successful THP handshake that minted or
53
85
  * refreshed pairing credentials. The host should persist `credentials`
@@ -66,7 +98,8 @@ var SDK = {
66
98
  DEVICE_STUCK: "device-stuck",
67
99
  DEVICE_UNRESPONSIVE: "device-unresponsive",
68
100
  DEVICE_RECOVERED: "device-recovered",
69
- DEVICE_INTERACTION: "device-interaction"
101
+ DEVICE_INTERACTION: "device-interaction",
102
+ INTERACTION_ENDED: "interaction-ended"
70
103
  };
71
104
 
72
105
  // src/utils/DeviceJobQueue.ts
@@ -175,6 +208,236 @@ var DeviceJobQueue = class {
175
208
  }
176
209
  };
177
210
 
211
+ // src/utils/hardwareRuntimeId.ts
212
+
213
+ var HARDWARE_RUNTIME_ID_PREFIX = "hwk:runtime:v1";
214
+ var RANDOM_ID_BYTES = 16;
215
+ var RANDOM_ID_PATTERN = /^[0-9a-f]{32}$/;
216
+ var VENDORS = /* @__PURE__ */ new Set(["trezor", "ledger", "keystone"]);
217
+ var CONNECTION_TYPES = /* @__PURE__ */ new Set(["usb", "ble", "qr"]);
218
+ function createNonce() {
219
+ return _utils.bytesToHex.call(void 0, _utils.randomBytes.call(void 0, RANDOM_ID_BYTES));
220
+ }
221
+ function createHardwareInteractionId(vendor) {
222
+ return `${HARDWARE_RUNTIME_ID_PREFIX}:interaction:${vendor}:${createNonce()}`;
223
+ }
224
+ function createHardwareSearchTargetId(params) {
225
+ return `${HARDWARE_RUNTIME_ID_PREFIX}:search-target:${params.vendor}:${params.connectionType}:${createNonce()}`;
226
+ }
227
+ function createHardwareConnectorSessionId(params) {
228
+ return `${HARDWARE_RUNTIME_ID_PREFIX}:connector-session:${params.vendor}:${params.connectionType}:${createNonce()}`;
229
+ }
230
+ function hasHardwareRuntimeIdPrefix(value) {
231
+ return typeof value === "string" && value.startsWith(`${HARDWARE_RUNTIME_ID_PREFIX}:`);
232
+ }
233
+ function parseHardwareRuntimeId(value) {
234
+ if (!hasHardwareRuntimeIdPrefix(value)) return void 0;
235
+ const parts = value.split(":");
236
+ const kind = parts[3];
237
+ const vendor = parts[4];
238
+ if (!VENDORS.has(vendor)) return void 0;
239
+ if (kind === "interaction" && parts.length === 6 && RANDOM_ID_PATTERN.test(parts[5])) {
240
+ return {
241
+ kind,
242
+ vendor,
243
+ nonce: parts[5]
244
+ };
245
+ }
246
+ const connectionType = parts[5];
247
+ if ((kind === "search-target" || kind === "connector-session") && parts.length === 7 && CONNECTION_TYPES.has(connectionType) && RANDOM_ID_PATTERN.test(parts[6])) {
248
+ return {
249
+ kind,
250
+ vendor,
251
+ connectionType,
252
+ nonce: parts[6]
253
+ };
254
+ }
255
+ return void 0;
256
+ }
257
+ function isHardwareInteractionId(value) {
258
+ return _optionalChain([parseHardwareRuntimeId, 'call', _3 => _3(value), 'optionalAccess', _4 => _4.kind]) === "interaction";
259
+ }
260
+ function isHardwareSearchTargetId(value) {
261
+ return _optionalChain([parseHardwareRuntimeId, 'call', _5 => _5(value), 'optionalAccess', _6 => _6.kind]) === "search-target";
262
+ }
263
+
264
+ // src/utils/InteractionRegistry.ts
265
+ var INTERACTION_DEFAULT_TTL_MS = 6e5;
266
+ var InteractionRegistry = class {
267
+ constructor(options) {
268
+ this._active = /* @__PURE__ */ new Map();
269
+ this._ended = /* @__PURE__ */ new Map();
270
+ this._vendor = options.vendor;
271
+ this._ttlMs = _nullishCoalesce(options.ttlMs, () => ( INTERACTION_DEFAULT_TTL_MS));
272
+ this._onEnded = options.onEnded;
273
+ }
274
+ create(params) {
275
+ const now = Date.now();
276
+ const interactionId = createHardwareInteractionId(this._vendor);
277
+ const interaction = {
278
+ interactionId,
279
+ searchTargetId: params.searchTargetId,
280
+ connectId: params.connectId,
281
+ device: params.device,
282
+ connectionKeys: Array.from(
283
+ new Set(
284
+ [params.searchTargetId, params.connectId, ..._nullishCoalesce(params.connectionKeys, () => ( []))].filter(
285
+ Boolean
286
+ )
287
+ )
288
+ ),
289
+ createdAt: now,
290
+ lastActiveAt: now
291
+ };
292
+ const timer = this._createTimer(interactionId);
293
+ this._active.set(interactionId, { ...interaction, timer, retainCount: 0 });
294
+ return interaction;
295
+ }
296
+ resolve(interactionId) {
297
+ const active = this._active.get(interactionId);
298
+ if (!active) {
299
+ const ended = this._ended.get(interactionId);
300
+ if (ended) {
301
+ throw _chunkIZEVYMJKjs.createHwkError.call(void 0, {
302
+ code: 10113 /* InteractionEnded */,
303
+ message: `Hardware interaction has ended (${ended.reason})`,
304
+ params: { interactionId, reason: ended.reason }
305
+ });
306
+ }
307
+ throw _chunkIZEVYMJKjs.createHwkError.call(void 0, {
308
+ code: 10112 /* InteractionNotFound */,
309
+ message: "Hardware interaction was not found",
310
+ params: { interactionId }
311
+ });
312
+ }
313
+ if (active.timer) clearTimeout(active.timer);
314
+ active.lastActiveAt = Date.now();
315
+ active.timer = active.retainCount === 0 ? this._createTimer(interactionId) : void 0;
316
+ return active;
317
+ }
318
+ /** Keep an interaction alive while one device job is actively using it. */
319
+ retain(interactionId) {
320
+ const active = this.resolve(interactionId);
321
+ if (active.timer) clearTimeout(active.timer);
322
+ active.timer = void 0;
323
+ active.retainCount += 1;
324
+ let released = false;
325
+ return () => {
326
+ if (released) return;
327
+ released = true;
328
+ const current = this._active.get(interactionId);
329
+ if (!current) return;
330
+ current.retainCount = Math.max(0, current.retainCount - 1);
331
+ current.lastActiveAt = Date.now();
332
+ if (current.retainCount === 0) {
333
+ current.timer = this._createTimer(interactionId);
334
+ }
335
+ };
336
+ }
337
+ /** Return active or tombstoned binding data without refreshing its TTL. */
338
+ find(interactionId) {
339
+ return _nullishCoalesce(this._active.get(interactionId), () => ( _optionalChain([this, 'access', _7 => _7._ended, 'access', _8 => _8.get, 'call', _9 => _9(interactionId), 'optionalAccess', _10 => _10.interaction])));
340
+ }
341
+ findActiveByConnectionKey(connectionKey) {
342
+ if (!connectionKey) return void 0;
343
+ return [...this._active.values()].find(
344
+ (interaction) => interaction.connectionKeys.includes(connectionKey)
345
+ );
346
+ }
347
+ /** Replace the live transport binding after the same target was reconnected. */
348
+ rebind(interactionId, params) {
349
+ const active = this._active.get(interactionId);
350
+ if (!active) {
351
+ this.resolve(interactionId);
352
+ throw new Error("Unreachable interaction rebind");
353
+ }
354
+ if (active.timer) clearTimeout(active.timer);
355
+ active.connectId = params.connectId;
356
+ active.device = params.device;
357
+ active.connectionKeys = Array.from(
358
+ new Set([params.connectId, ..._nullishCoalesce(params.connectionKeys, () => ( []))].filter(Boolean))
359
+ );
360
+ active.lastActiveAt = Date.now();
361
+ active.timer = active.retainCount === 0 ? this._createTimer(interactionId) : void 0;
362
+ return active;
363
+ }
364
+ end(interactionId, reason) {
365
+ const active = this._active.get(interactionId);
366
+ if (!active) return void 0;
367
+ if (active.timer) clearTimeout(active.timer);
368
+ this._active.delete(interactionId);
369
+ this._rememberEnded(active, reason);
370
+ _optionalChain([this, 'access', _11 => _11._onEnded, 'optionalCall', _12 => _12(active, reason)]);
371
+ return active;
372
+ }
373
+ endByConnectionKey(connectionKey, reason, exceptInteractionId) {
374
+ if (!connectionKey) return;
375
+ for (const interaction of [...this._active.values()]) {
376
+ if (interaction.interactionId === exceptInteractionId) continue;
377
+ if (interaction.connectionKeys.includes(connectionKey)) {
378
+ this.end(interaction.interactionId, reason);
379
+ }
380
+ }
381
+ }
382
+ endAll(reason, exceptInteractionId) {
383
+ for (const interactionId of [...this._active.keys()]) {
384
+ if (interactionId === exceptInteractionId) continue;
385
+ this.end(interactionId, reason);
386
+ }
387
+ }
388
+ _createTimer(interactionId) {
389
+ const timer = setTimeout(() => {
390
+ this.end(interactionId, "timeout");
391
+ }, this._ttlMs);
392
+ _optionalChain([timer, 'access', _13 => _13.unref, 'optionalCall', _14 => _14()]);
393
+ return timer;
394
+ }
395
+ _rememberEnded(interaction, reason) {
396
+ this._ended.set(interaction.interactionId, { reason, interaction });
397
+ if (this._ended.size <= 100) return;
398
+ const oldest = this._ended.keys().next().value;
399
+ if (oldest) this._ended.delete(oldest);
400
+ }
401
+ };
402
+
403
+ // src/utils/hardwareOperationTarget.ts
404
+ function resolveHardwareOperationTarget(positionalTargetId, commonInteractionId, expectedVendor) {
405
+ const normalizedPositionalTargetId = _nullishCoalesce(positionalTargetId, () => ( void 0));
406
+ const normalizedCommonInteractionId = commonInteractionId || void 0;
407
+ const positionalInteractionId = isHardwareInteractionId(normalizedPositionalTargetId) ? normalizedPositionalTargetId : void 0;
408
+ const parsedPositionalTarget = parseHardwareRuntimeId(normalizedPositionalTargetId);
409
+ const parsedCommonInteraction = parseHardwareRuntimeId(normalizedCommonInteractionId);
410
+ if (normalizedPositionalTargetId && hasHardwareRuntimeIdPrefix(normalizedPositionalTargetId) && !parsedPositionalTarget) {
411
+ return failure(10002 /* InvalidParams */, "Invalid hardware operation target id");
412
+ }
413
+ if (_optionalChain([parsedPositionalTarget, 'optionalAccess', _15 => _15.kind]) === "connector-session") {
414
+ return failure(
415
+ 10002 /* InvalidParams */,
416
+ "Hardware connector session id cannot be used as an operation target"
417
+ );
418
+ }
419
+ if (normalizedCommonInteractionId && _optionalChain([parsedCommonInteraction, 'optionalAccess', _16 => _16.kind]) !== "interaction") {
420
+ return failure(10002 /* InvalidParams */, "Invalid hardware interaction id");
421
+ }
422
+ if (expectedVendor && (parsedPositionalTarget && parsedPositionalTarget.vendor !== expectedVendor || parsedCommonInteraction && parsedCommonInteraction.vendor !== expectedVendor)) {
423
+ return failure(
424
+ 10002 /* InvalidParams */,
425
+ `Hardware interaction does not belong to ${expectedVendor}`
426
+ );
427
+ }
428
+ if (positionalInteractionId && normalizedCommonInteractionId && positionalInteractionId !== normalizedCommonInteractionId) {
429
+ return failure(10002 /* InvalidParams */, "Conflicting hardware interaction ids", {
430
+ positionalInteractionId,
431
+ commonInteractionId: normalizedCommonInteractionId
432
+ });
433
+ }
434
+ const interactionId = _nullishCoalesce(normalizedCommonInteractionId, () => ( positionalInteractionId));
435
+ return success({
436
+ interactionId,
437
+ targetId: _nullishCoalesce(interactionId, () => ( normalizedPositionalTargetId))
438
+ });
439
+ }
440
+
178
441
  // src/types/connector.ts
179
442
  var EConnectorInteraction = /* @__PURE__ */ ((EConnectorInteraction2) => {
180
443
  EConnectorInteraction2["Searching"] = "searching";
@@ -190,7 +453,7 @@ function createBridgedConnector(vendor, connectionType, bridge) {
190
453
  return {
191
454
  connectionType,
192
455
  searchDevices: (options) => bridge.searchDevices({ vendor, options }),
193
- connect: (deviceId) => bridge.connect({ vendor, deviceId }),
456
+ connect: (deviceId, options) => bridge.connect({ vendor, deviceId, ...options ? { options } : {} }),
194
457
  disconnect: (sessionId) => bridge.disconnect({ vendor, sessionId }),
195
458
  call: (sessionId, method, callParams) => bridge.call({ vendor, sessionId, method, callParams }),
196
459
  cancel: (sessionId) => bridge.cancel({ vendor, sessionId }),
@@ -211,14 +474,14 @@ function createBridgedConnector(vendor, connectionType, bridge) {
211
474
  },
212
475
  off: (event, handler) => {
213
476
  const inner = handlerMap.get(event);
214
- const bridgeHandler = _optionalChain([inner, 'optionalAccess', _ => _.get, 'call', _2 => _2(handler)]);
477
+ const bridgeHandler = _optionalChain([inner, 'optionalAccess', _17 => _17.get, 'call', _18 => _18(handler)]);
215
478
  if (!bridgeHandler || !inner) return;
216
479
  bridge.offEvent({ vendor }, bridgeHandler);
217
480
  inner.delete(handler);
218
481
  if (inner.size === 0) handlerMap.delete(event);
219
482
  },
220
483
  reset: () => bridge.reset({ vendor }),
221
- configure: bridge.configure ? (config) => _optionalChain([bridge, 'access', _3 => _3.configure, 'optionalCall', _4 => _4({ vendor, config })]) : void 0,
484
+ configure: bridge.configure ? (config) => _optionalChain([bridge, 'access', _19 => _19.configure, 'optionalCall', _20 => _20({ vendor, config })]) : void 0,
222
485
  setKnownCredentials: bridge.setKnownCredentials ? (credentials) => bridge.setKnownCredentials({ vendor, credentials }) : void 0
223
486
  };
224
487
  }
@@ -287,13 +550,13 @@ function isDeviceUnavailableError(error) {
287
550
  return false;
288
551
  }
289
552
  function combinedDeviceNotFoundError(message) {
290
- return _chunkSK7ZF33Jjs.createHwkError.call(void 0, {
553
+ return _chunkIZEVYMJKjs.createHwkError.call(void 0, {
291
554
  code: 10100 /* DeviceNotFound */,
292
555
  message
293
556
  });
294
557
  }
295
558
  function combinedSessionNotFoundError(message) {
296
- return _chunkSK7ZF33Jjs.createHwkError.call(void 0, {
559
+ return _chunkIZEVYMJKjs.createHwkError.call(void 0, {
297
560
  code: 10101 /* DeviceDisconnected */,
298
561
  message
299
562
  });
@@ -322,7 +585,7 @@ function createCombinedConnector(connectors) {
322
585
  };
323
586
  const broadcastCredentials = async () => {
324
587
  await Promise.all(
325
- connectors.map((child) => Promise.resolve(_optionalChain([child, 'access', _5 => _5.setKnownCredentials, 'optionalCall', _6 => _6(sharedCredentials)])))
588
+ connectors.map((child) => Promise.resolve(_optionalChain([child, 'access', _21 => _21.setKnownCredentials, 'optionalCall', _22 => _22(sharedCredentials)])))
326
589
  );
327
590
  };
328
591
  for (const child of connectors) {
@@ -331,10 +594,14 @@ function createCombinedConnector(connectors) {
331
594
  });
332
595
  }
333
596
  const searchDevices = async (options = {}) => {
597
+ const selectedConnectors = connectors.map((child, index) => ({ child, index })).filter(
598
+ ({ child }) => !options.transportType || child.connectionType === options.transportType
599
+ );
600
+ if (!selectedConnectors.length) return [];
334
601
  const perConnector = [];
335
- await new Promise((resolve) => {
602
+ await new Promise((resolve, reject) => {
336
603
  let finished = false;
337
- let remaining = connectors.length;
604
+ let remaining = selectedConnectors.length;
338
605
  let settleTimer;
339
606
  const finish = () => {
340
607
  if (finished) return;
@@ -342,19 +609,20 @@ function createCombinedConnector(connectors) {
342
609
  if (settleTimer) clearTimeout(settleTimer);
343
610
  resolve();
344
611
  };
345
- connectors.forEach((child, index) => {
346
- void child.searchDevices().then(
612
+ selectedConnectors.forEach(({ child, index }) => {
613
+ void child.searchDevices(options.purpose ? { purpose: options.purpose } : void 0).then(
347
614
  (devices) => devices.map((device) => ({
348
615
  ...device,
349
616
  connectionType: _nullishCoalesce(device.connectionType, () => ( child.connectionType))
350
617
  }))
351
- ).catch(
352
- () => (
353
- // A transport that can't scan (powered off, unauthorized, absent)
354
- // must not fail the whole fused search.
355
- []
356
- )
357
- ).then((devices) => {
618
+ ).catch((error) => {
619
+ if (options.transportType) {
620
+ finished = true;
621
+ if (settleTimer) clearTimeout(settleTimer);
622
+ reject(error);
623
+ }
624
+ return [];
625
+ }).then((devices) => {
358
626
  remaining -= 1;
359
627
  if (!finished) {
360
628
  perConnector.push({ index, devices });
@@ -371,7 +639,12 @@ function createCombinedConnector(connectors) {
371
639
  });
372
640
  });
373
641
  perConnector.sort((a, b) => a.index - b.index);
374
- deviceOwner.clear();
642
+ if (!options.transportType) deviceOwner.clear();
643
+ else {
644
+ for (const [id, owner] of deviceOwner) {
645
+ if (owner.connectionType === options.transportType) deviceOwner.delete(id);
646
+ }
647
+ }
375
648
  const merged = [];
376
649
  perConnector.forEach(({ index, devices }) => {
377
650
  for (const device of devices) {
@@ -381,11 +654,11 @@ function createCombinedConnector(connectors) {
381
654
  });
382
655
  return merged.sort((a, b) => rank(a) - rank(b));
383
656
  };
384
- const resolveOwner = async (deviceId) => {
385
- if (deviceId && deviceOwner.has(deviceId)) {
657
+ const resolveOwner = async (deviceId, transportType) => {
658
+ if (deviceId && deviceOwner.has(deviceId) && (!transportType || _optionalChain([deviceOwner, 'access', _23 => _23.get, 'call', _24 => _24(deviceId), 'optionalAccess', _25 => _25.connectionType]) === transportType)) {
386
659
  return { owner: deviceOwner.get(deviceId), deviceId };
387
660
  }
388
- const devices = await searchDevices({ waitForAll: Boolean(deviceId) });
661
+ const devices = await searchDevices({ waitForAll: Boolean(deviceId), transportType });
389
662
  if (deviceId) {
390
663
  const owner = deviceOwner.get(deviceId);
391
664
  if (!owner)
@@ -396,13 +669,14 @@ function createCombinedConnector(connectors) {
396
669
  if (!first) throw combinedDeviceNotFoundError("Combined connector: no devices found");
397
670
  return { owner: deviceOwner.get(first.connectId), deviceId: first.connectId };
398
671
  };
399
- const connectByExplicitId = async (deviceId) => {
672
+ const connectByExplicitId = async (deviceId, transportType) => {
400
673
  const cachedOwner = deviceOwner.get(deviceId);
401
- if (cachedOwner) {
674
+ if (cachedOwner && (!transportType || cachedOwner.connectionType === transportType)) {
402
675
  return { session: await cachedOwner.connect(deviceId), owner: cachedOwner };
403
676
  }
404
677
  let lastError;
405
678
  for (const child of connectors) {
679
+ if (transportType && child.connectionType !== transportType) continue;
406
680
  try {
407
681
  const session = await child.connect(deviceId);
408
682
  deviceOwner.set(deviceId, child);
@@ -415,7 +689,7 @@ function createCombinedConnector(connectors) {
415
689
  }
416
690
  }
417
691
  const message = lastError instanceof Error ? lastError.message : `Combined connector: device not found: ${deviceId}`;
418
- throw _chunkSK7ZF33Jjs.createHwkError.call(void 0, {
692
+ throw _chunkIZEVYMJKjs.createHwkError.call(void 0, {
419
693
  code: 10100 /* DeviceNotFound */,
420
694
  message
421
695
  });
@@ -424,14 +698,15 @@ function createCombinedConnector(connectors) {
424
698
  // Nominal value only — the per-device `connectionType` is authoritative
425
699
  // for a fused connector.
426
700
  connectionType: connectors[0].connectionType,
427
- searchDevices: (options) => searchDevices({ waitForAll: _optionalChain([options, 'optionalAccess', _7 => _7.waitForAll]) }),
428
- connect: async (deviceId) => {
701
+ availableTransports: [...new Set(connectors.map((child) => child.connectionType))],
702
+ searchDevices: (options) => searchDevices(options),
703
+ connect: async (deviceId, options) => {
429
704
  let owner;
430
705
  let session;
431
706
  if (deviceId) {
432
- ({ session, owner } = await connectByExplicitId(deviceId));
707
+ ({ session, owner } = await connectByExplicitId(deviceId, _optionalChain([options, 'optionalAccess', _26 => _26.transportType])));
433
708
  } else {
434
- const resolved = await resolveOwner();
709
+ const resolved = await resolveOwner(void 0, _optionalChain([options, 'optionalAccess', _27 => _27.transportType]));
435
710
  owner = resolved.owner;
436
711
  session = await owner.connect(resolved.deviceId);
437
712
  }
@@ -474,7 +749,7 @@ function createCombinedConnector(connectors) {
474
749
  },
475
750
  off: (event, handler) => {
476
751
  const inner = forwarders.get(event);
477
- const attached = _optionalChain([inner, 'optionalAccess', _8 => _8.get, 'call', _9 => _9(handler)]);
752
+ const attached = _optionalChain([inner, 'optionalAccess', _28 => _28.get, 'call', _29 => _29(handler)]);
478
753
  if (!attached || !inner) return;
479
754
  for (const { child, handler: forward } of attached) {
480
755
  child.off(event, forward);
@@ -489,7 +764,7 @@ function createCombinedConnector(connectors) {
489
764
  forwarders.clear();
490
765
  },
491
766
  configure: connectors.some((c) => c.configure) ? async (config) => {
492
- await Promise.all(connectors.map((child) => Promise.resolve(_optionalChain([child, 'access', _10 => _10.configure, 'optionalCall', _11 => _11(config)]))));
767
+ await Promise.all(connectors.map((child) => Promise.resolve(_optionalChain([child, 'access', _30 => _30.configure, 'optionalCall', _31 => _31(config)]))));
493
768
  deviceOwner.clear();
494
769
  sessionOwner.clear();
495
770
  } : void 0,
@@ -533,10 +808,134 @@ var TypedEventEmitter = class {
533
808
  }
534
809
  /** Number of listeners registered for `event`. 0 if none. */
535
810
  listenerCount(event) {
536
- return _nullishCoalesce(_optionalChain([this, 'access', _12 => _12._listeners, 'access', _13 => _13.get, 'call', _14 => _14(event), 'optionalAccess', _15 => _15.size]), () => ( 0));
811
+ return _nullishCoalesce(_optionalChain([this, 'access', _32 => _32._listeners, 'access', _33 => _33.get, 'call', _34 => _34(event), 'optionalAccess', _35 => _35.size]), () => ( 0));
537
812
  }
538
813
  };
539
814
 
815
+ // src/utils/requestSaveDeviceBinding.ts
816
+ async function requestSaveDeviceBinding(emitter, registry, binding, signal) {
817
+ const type = _chunkRRCFH7X6js.UI_REQUEST.REQUEST_SAVE_DEVICE_BINDING;
818
+ if (!emitter.listenerCount(type)) return false;
819
+ if (_optionalChain([signal, 'optionalAccess', _36 => _36.aborted])) throw signal.reason;
820
+ const requestId = registry.createRequestId();
821
+ const pending = registry.wait(type, { requestId });
822
+ void pending.catch(() => void 0);
823
+ const cancel = () => registry.cancel(type, requestId);
824
+ _optionalChain([signal, 'optionalAccess', _37 => _37.addEventListener, 'call', _38 => _38("abort", cancel, { once: true })]);
825
+ try {
826
+ emitter.emit(type, { type, payload: { ...binding, requestId } });
827
+ const response = await pending;
828
+ if (_optionalChain([signal, 'optionalAccess', _39 => _39.aborted])) throw signal.reason;
829
+ if (_optionalChain([response, 'optionalAccess', _40 => _40.saved]) !== true) {
830
+ throw _chunkIZEVYMJKjs.createHwkError.call(void 0, {
831
+ code: 1e4 /* UnknownError */,
832
+ message: "Verified device binding could not be saved"
833
+ });
834
+ }
835
+ emitter.emit(_chunkRRCFH7X6js.UI_REQUEST.DEVICE_BINDING_STATUS, {
836
+ type: _chunkRRCFH7X6js.UI_REQUEST.DEVICE_BINDING_STATUS,
837
+ payload: { selectionRequestId: binding.selectionRequestId, status: "saved" }
838
+ });
839
+ return true;
840
+ } catch (error) {
841
+ emitter.emit(_chunkRRCFH7X6js.UI_REQUEST.DEVICE_BINDING_STATUS, {
842
+ type: _chunkRRCFH7X6js.UI_REQUEST.DEVICE_BINDING_STATUS,
843
+ payload: {
844
+ selectionRequestId: binding.selectionRequestId,
845
+ status: _optionalChain([signal, 'optionalAccess', _41 => _41.aborted]) ? "cancelled" : "failed"
846
+ }
847
+ });
848
+ throw error;
849
+ } finally {
850
+ _optionalChain([signal, 'optionalAccess', _42 => _42.removeEventListener, 'call', _43 => _43("abort", cancel)]);
851
+ registry.cancel(type, requestId);
852
+ }
853
+ }
854
+
855
+ // src/utils/requestBleDeviceSelection.ts
856
+ async function requestBleDeviceSelection({
857
+ emitter,
858
+ registry,
859
+ request,
860
+ scan,
861
+ signal,
862
+ pollIntervalMs = 1500
863
+ }) {
864
+ const type = _chunkRRCFH7X6js.UI_REQUEST.REQUEST_SELECT_DEVICE;
865
+ if (signal.aborted) throw signal.reason;
866
+ if (!emitter.listenerCount(type)) {
867
+ throw _chunkIZEVYMJKjs.createHwkError.call(void 0, {
868
+ code: 10100 /* DeviceNotFound */,
869
+ message: "Select a Bluetooth device before continuing"
870
+ });
871
+ }
872
+ const requestId = registry.createRequestId();
873
+ let { devices } = request;
874
+ let stopped = false;
875
+ let timer;
876
+ let wake;
877
+ const stop = () => {
878
+ stopped = true;
879
+ if (timer !== void 0) clearTimeout(timer);
880
+ _optionalChain([wake, 'optionalCall', _44 => _44()]);
881
+ };
882
+ const waitForNextScan = () => new Promise((resolve) => {
883
+ wake = resolve;
884
+ timer = setTimeout(resolve, pollIntervalMs);
885
+ if (stopped) resolve();
886
+ });
887
+ const cancel = () => registry.cancel(type, requestId);
888
+ const reply = registry.wait(type, { requestId }).finally(stop);
889
+ void reply.catch(() => void 0);
890
+ const publish = () => emitter.emit(type, {
891
+ type,
892
+ payload: { ...request, devices, requestId, scanning: true }
893
+ });
894
+ signal.addEventListener("abort", cancel, { once: true });
895
+ let polling;
896
+ try {
897
+ publish();
898
+ polling = (async () => {
899
+ await Promise.resolve();
900
+ while (!stopped) {
901
+ const snapshot = await scan();
902
+ if (stopped || signal.aborted) return;
903
+ devices = snapshot;
904
+ publish();
905
+ if (stopped) return;
906
+ await waitForNextScan();
907
+ }
908
+ })();
909
+ const selected = await Promise.race([reply, polling.then(() => reply)]);
910
+ stop();
911
+ await polling;
912
+ if (signal.aborted) throw signal.reason;
913
+ const device = devices.find((candidate) => candidate.connectId === selected.sdkConnectId);
914
+ if (!device) {
915
+ throw _chunkIZEVYMJKjs.createHwkError.call(void 0, {
916
+ code: 10100 /* DeviceNotFound */,
917
+ message: "Selected Bluetooth device is no longer available"
918
+ });
919
+ }
920
+ emitter.emit(_chunkRRCFH7X6js.UI_REQUEST.DEVICE_BINDING_STATUS, {
921
+ type: _chunkRRCFH7X6js.UI_REQUEST.DEVICE_BINDING_STATUS,
922
+ payload: { selectionRequestId: requestId, status: "verifying" }
923
+ });
924
+ return { device, requestId };
925
+ } catch (error) {
926
+ emitter.emit(_chunkRRCFH7X6js.UI_REQUEST.DEVICE_BINDING_STATUS, {
927
+ type: _chunkRRCFH7X6js.UI_REQUEST.DEVICE_BINDING_STATUS,
928
+ payload: { selectionRequestId: requestId, status: signal.aborted ? "cancelled" : "failed" }
929
+ });
930
+ throw error;
931
+ } finally {
932
+ stop();
933
+ signal.removeEventListener("abort", cancel);
934
+ registry.cancel(type, requestId);
935
+ await _optionalChain([polling, 'optionalAccess', _45 => _45.catch, 'call', _46 => _46(() => void 0)]);
936
+ }
937
+ }
938
+
540
939
  // src/utils/semver.ts
541
940
  function compareSemver(a, b) {
542
941
  const pa = a.split(".").map(Number);
@@ -564,15 +963,97 @@ function padHex64(hex) {
564
963
  function hexToBytes(hex) {
565
964
  return _utils.hexToBytes.call(void 0, stripHex(hex));
566
965
  }
567
- function bytesToHex2(bytes) {
966
+ function bytesToHex3(bytes) {
568
967
  return _utils.bytesToHex.call(void 0, bytes);
569
968
  }
570
969
 
970
+ // src/utils/solanaOffchainMessage.ts
971
+ var SOLANA_OFFCHAIN_SIGNING_DOMAIN = Uint8Array.of(
972
+ 255,
973
+ ...Array.from("solana offchain", (character) => character.charCodeAt(0))
974
+ );
975
+ var SOLANA_PUBLIC_KEY_LENGTH = 32;
976
+ var MAX_SOLANA_OFFCHAIN_SIGNERS = 255;
977
+ function compareBytes(a, b) {
978
+ for (let index = 0; index < a.length; index += 1) {
979
+ const difference = (_nullishCoalesce(a[index], () => ( 0))) - (_nullishCoalesce(b[index], () => ( 0)));
980
+ if (difference !== 0) return difference;
981
+ }
982
+ return a.length - b.length;
983
+ }
984
+ function bytesEqual(a, b) {
985
+ return a.length === b.length && a.every((value, index) => value === b[index]);
986
+ }
987
+ function decodeUtf8Strict(bytes) {
988
+ let encoded = "";
989
+ for (const value of bytes) {
990
+ encoded += `%${value.toString(16).padStart(2, "0")}`;
991
+ }
992
+ return decodeURIComponent(encoded);
993
+ }
994
+ function prepareSolanaOffchainMessageV1({
995
+ message,
996
+ requiredSigners
997
+ }) {
998
+ if (message.length === 0) {
999
+ throw new Error("Solana off-chain message cannot be empty");
1000
+ }
1001
+ if (requiredSigners.length === 0 || requiredSigners.length > MAX_SOLANA_OFFCHAIN_SIGNERS) {
1002
+ throw new Error("Solana off-chain message requires between 1 and 255 signers");
1003
+ }
1004
+ let messageText;
1005
+ try {
1006
+ messageText = decodeUtf8Strict(message);
1007
+ } catch (e3) {
1008
+ throw new Error("Solana off-chain message must contain valid UTF-8");
1009
+ }
1010
+ const signerBytes = requiredSigners.map((signer, index) => {
1011
+ let bytes;
1012
+ try {
1013
+ bytes = hexToBytes(signer);
1014
+ } catch (e4) {
1015
+ throw new Error(`Solana off-chain signer ${index} must be a hex public key`);
1016
+ }
1017
+ if (bytes.length !== SOLANA_PUBLIC_KEY_LENGTH) {
1018
+ throw new Error(`Solana off-chain signer ${index} must be 32 bytes`);
1019
+ }
1020
+ return bytes;
1021
+ });
1022
+ signerBytes.sort(compareBytes);
1023
+ for (let index = 1; index < signerBytes.length; index += 1) {
1024
+ if (bytesEqual(signerBytes[index - 1], signerBytes[index])) {
1025
+ throw new Error("Solana off-chain signers must be unique");
1026
+ }
1027
+ }
1028
+ const serializedMessage = new Uint8Array(
1029
+ SOLANA_OFFCHAIN_SIGNING_DOMAIN.length + 2 + signerBytes.length * SOLANA_PUBLIC_KEY_LENGTH + message.length
1030
+ );
1031
+ let offset = 0;
1032
+ serializedMessage.set(SOLANA_OFFCHAIN_SIGNING_DOMAIN, offset);
1033
+ offset += SOLANA_OFFCHAIN_SIGNING_DOMAIN.length;
1034
+ serializedMessage[offset] = 1;
1035
+ offset += 1;
1036
+ serializedMessage[offset] = signerBytes.length;
1037
+ offset += 1;
1038
+ for (const signer of signerBytes) {
1039
+ serializedMessage.set(signer, offset);
1040
+ offset += SOLANA_PUBLIC_KEY_LENGTH;
1041
+ }
1042
+ serializedMessage.set(message, offset);
1043
+ return {
1044
+ messageText,
1045
+ requiredSigners: signerBytes.map(bytesToHex3),
1046
+ serializedMessage
1047
+ };
1048
+ }
1049
+
571
1050
  // src/utils/deviceIdentity.ts
572
1051
  var ONEKEY_BLE_SERVICE_UUID = "00000001-0000-1000-8000-00805f9b34fb";
573
1052
  var TREZOR_BLE_SERVICE_UUID = "8c000001-a59b-4d58-a9ad-073df69fa1b1";
574
1053
  var LEDGER_USB_VENDOR_ID = 11415;
575
- var lower = (value) => _nullishCoalesce(_optionalChain([value, 'optionalAccess', _16 => _16.trim, 'call', _17 => _17(), 'access', _18 => _18.toLowerCase, 'call', _19 => _19()]), () => ( ""));
1054
+ var KEYSTONE_USB_VENDOR_ID = 4617;
1055
+ var KEYSTONE_USB_PRODUCT_ID = 12289;
1056
+ var lower = (value) => _nullishCoalesce(_optionalChain([value, 'optionalAccess', _47 => _47.trim, 'call', _48 => _48(), 'access', _49 => _49.toLowerCase, 'call', _50 => _50()]), () => ( ""));
576
1057
  var hasServiceUuid = (input, uuid) => {
577
1058
  const expected = uuid.toLowerCase();
578
1059
  const values = [
@@ -594,6 +1075,11 @@ function detectHardwareVendorFromDescriptor(input) {
594
1075
  if (typeof input.vendor === "number" && input.vendor === LEDGER_USB_VENDOR_ID || input.vendorId === LEDGER_USB_VENDOR_ID || manufacturerName.includes("ledger")) {
595
1076
  return "ledger";
596
1077
  }
1078
+ const usbVendorId = typeof input.vendor === "number" ? input.vendor : input.vendorId;
1079
+ const usbProductId = typeof input.product === "number" ? input.product : input.productId;
1080
+ if (usbVendorId === KEYSTONE_USB_VENDOR_ID && usbProductId === KEYSTONE_USB_PRODUCT_ID || manufacturerName.includes("keystone")) {
1081
+ return "keystone";
1082
+ }
597
1083
  return void 0;
598
1084
  }
599
1085
  function isKnownNonTargetHardwareVendor(input, targetVendor) {
@@ -610,35 +1096,69 @@ async function batchCall(params, callFn, onProgress) {
610
1096
  return result;
611
1097
  }
612
1098
  results.push(result.payload);
613
- _optionalChain([onProgress, 'optionalCall', _20 => _20({ index: i, total: params.length })]);
1099
+ _optionalChain([onProgress, 'optionalCall', _51 => _51({ index: i, total: params.length })]);
614
1100
  }
615
1101
  return { success: true, payload: results };
616
1102
  }
617
1103
 
618
1104
  // src/utils/methodCatalog.ts
619
1105
  var HARDWARE_METHOD_CATALOG = {
620
- evmGetAddress: { chain: "evm", allNetwork: true },
621
- evmSignTransaction: { chain: "evm", allNetwork: false },
622
- evmSignMessage: { chain: "evm", allNetwork: false },
623
- evmSignTypedData: { chain: "evm", allNetwork: false },
624
- btcGetAddress: { chain: "btc", allNetwork: true },
625
- btcGetPublicKey: { chain: "btc", allNetwork: true },
626
- btcSignTransaction: { chain: "btc", allNetwork: false },
627
- btcSignPsbt: { chain: "btc", allNetwork: false },
628
- btcSignMessage: { chain: "btc", allNetwork: false },
629
- btcGetMasterFingerprint: { chain: "btc", allNetwork: false },
630
- solGetAddress: { chain: "sol", allNetwork: true },
631
- solSignTransaction: { chain: "sol", allNetwork: false },
632
- solSignMessage: { chain: "sol", allNetwork: false },
633
- tronGetAddress: { chain: "tron", allNetwork: true },
634
- tronSignTransaction: { chain: "tron", allNetwork: false },
635
- tronSignMessage: { chain: "tron", allNetwork: false }
1106
+ evmGetAddress: { chain: "evm", allNetwork: true, replayAfterTransportFailure: "safe" },
1107
+ evmSignTransaction: {
1108
+ chain: "evm",
1109
+ allNetwork: false,
1110
+ replayAfterTransportFailure: "unsafe"
1111
+ },
1112
+ evmSignMessage: { chain: "evm", allNetwork: false, replayAfterTransportFailure: "unsafe" },
1113
+ evmSignTypedData: { chain: "evm", allNetwork: false, replayAfterTransportFailure: "unsafe" },
1114
+ btcGetAddress: { chain: "btc", allNetwork: true, replayAfterTransportFailure: "safe" },
1115
+ btcGetPublicKey: { chain: "btc", allNetwork: true, replayAfterTransportFailure: "safe" },
1116
+ btcSignTransaction: {
1117
+ chain: "btc",
1118
+ allNetwork: false,
1119
+ replayAfterTransportFailure: "unsafe"
1120
+ },
1121
+ btcSignPsbt: { chain: "btc", allNetwork: false, replayAfterTransportFailure: "unsafe" },
1122
+ btcSignMessage: { chain: "btc", allNetwork: false, replayAfterTransportFailure: "unsafe" },
1123
+ btcGetMasterFingerprint: {
1124
+ chain: "btc",
1125
+ allNetwork: false,
1126
+ replayAfterTransportFailure: "safe"
1127
+ },
1128
+ solGetAddress: { chain: "sol", allNetwork: true, replayAfterTransportFailure: "safe" },
1129
+ solSignTransaction: {
1130
+ chain: "sol",
1131
+ allNetwork: false,
1132
+ replayAfterTransportFailure: "unsafe"
1133
+ },
1134
+ solSignMessage: { chain: "sol", allNetwork: false, replayAfterTransportFailure: "unsafe" },
1135
+ tronGetAddress: { chain: "tron", allNetwork: true, replayAfterTransportFailure: "safe" },
1136
+ tronSignTransaction: {
1137
+ chain: "tron",
1138
+ allNetwork: false,
1139
+ replayAfterTransportFailure: "unsafe"
1140
+ },
1141
+ tronSignMessage: { chain: "tron", allNetwork: false, replayAfterTransportFailure: "unsafe" },
1142
+ zcashGetFullViewingKey: {
1143
+ chain: "zcash",
1144
+ allNetwork: false,
1145
+ replayAfterTransportFailure: "safe"
1146
+ },
1147
+ zcashGetShieldedAddress: {
1148
+ chain: "zcash",
1149
+ allNetwork: false,
1150
+ replayAfterTransportFailure: "safe"
1151
+ }
636
1152
  };
637
1153
  var ALL_NETWORK_METHOD_NAMES = Object.entries(HARDWARE_METHOD_CATALOG).filter(([, metadata]) => metadata.allNetwork).map(([method]) => method);
638
1154
  var ALL_NETWORK_METHOD_SET = new Set(ALL_NETWORK_METHOD_NAMES);
639
1155
  function getHardwareMethodMetadata(method) {
640
1156
  return HARDWARE_METHOD_CATALOG[method];
641
1157
  }
1158
+ var SAFE_NON_CHAIN_METHODS = /* @__PURE__ */ new Set(["getFeatures", "authenticateDevice"]);
1159
+ function canReplayHardwareMethodAfterTransportFailure(method) {
1160
+ return _optionalChain([getHardwareMethodMetadata, 'call', _52 => _52(method), 'optionalAccess', _53 => _53.replayAfterTransportFailure]) === "safe" || SAFE_NON_CHAIN_METHODS.has(method);
1161
+ }
642
1162
  function isAllNetworkMethodName(method) {
643
1163
  return ALL_NETWORK_METHOD_SET.has(method);
644
1164
  }
@@ -666,7 +1186,7 @@ async function runAllNetworkGetAddress({
666
1186
  continue;
667
1187
  }
668
1188
  const method = item.methodName;
669
- const unsupportedNetwork = _optionalChain([buildUnsupportedNetworkResponse, 'optionalCall', _21 => _21(item, method)]);
1189
+ const unsupportedNetwork = _optionalChain([buildUnsupportedNetworkResponse, 'optionalCall', _54 => _54(item, method)]);
670
1190
  if (unsupportedNetwork) {
671
1191
  responses.push(unsupportedNetwork);
672
1192
  continue;
@@ -766,5 +1286,27 @@ var DEVICE_CONNECT_RETRY_DELAY_MS = 1e3;
766
1286
 
767
1287
 
768
1288
 
769
- exports.ALL_NETWORK_METHOD_NAMES = ALL_NETWORK_METHOD_NAMES; exports.CHAIN_FINGERPRINT_PATHS = CHAIN_FINGERPRINT_PATHS; exports.DEVICE = DEVICE; exports.DEVICE_CONNECT_RETRY_DELAY_MS = DEVICE_CONNECT_RETRY_DELAY_MS; exports.DEVICE_EVENT = DEVICE_EVENT; exports.DeviceJobQueue = DeviceJobQueue; exports.EConnectorInteraction = EConnectorInteraction; exports.HARDWARE_METHOD_CATALOG = HARDWARE_METHOD_CATALOG; exports.HardwareErrorCode = _chunkSK7ZF33Jjs.HardwareErrorCode; exports.ORPHAN_ELIGIBLE_ERROR_CODES = _chunkSK7ZF33Jjs.ORPHAN_ELIGIBLE_ERROR_CODES; exports.SDK = SDK; exports.TypedEventEmitter = TypedEventEmitter; exports.UI_EVENT = _chunkBAGEFFFYjs.UI_EVENT; exports.UI_REQUEST = _chunkBAGEFFFYjs.UI_REQUEST; exports.UI_REQUEST_CANCELLED_TAG = _chunkBAGEFFFYjs.UI_REQUEST_CANCELLED_TAG; exports.UI_REQUEST_DEFAULT_TIMEOUT_MS = _chunkBAGEFFFYjs.UI_REQUEST_DEFAULT_TIMEOUT_MS; exports.UI_REQUEST_PREEMPTED_TAG = _chunkBAGEFFFYjs.UI_REQUEST_PREEMPTED_TAG; exports.UI_REQUEST_TIMEOUT_TAG = _chunkBAGEFFFYjs.UI_REQUEST_TIMEOUT_TAG; exports.UI_RESPONSE = _chunkBAGEFFFYjs.UI_RESPONSE; exports.UiRequestRegistry = _chunkBAGEFFFYjs.UiRequestRegistry; exports.batchCall = batchCall; exports.buildUnsupportedMethodResponse = buildUnsupportedMethodResponse; exports.bytesToHex = bytesToHex2; exports.compareSemver = compareSemver; exports.createBridgedConnector = createBridgedConnector; exports.createCombinedConnector = createCombinedConnector; exports.createHwkError = _chunkSK7ZF33Jjs.createHwkError; exports.deriveDeviceFingerprint = deriveDeviceFingerprint; exports.detectHardwareVendorFromDescriptor = detectHardwareVendorFromDescriptor; exports.enrichErrorMessage = _chunkSK7ZF33Jjs.enrichErrorMessage; exports.ensure0x = ensure0x; exports.failure = failure; exports.getAllNetworkMethodChain = getAllNetworkMethodChain; exports.getHardwareMethodMetadata = getHardwareMethodMetadata; exports.hexToBytes = hexToBytes; exports.isAllNetworkMethodName = isAllNetworkMethodName; exports.isKnownNonTargetHardwareVendor = isKnownNonTargetHardwareVendor; exports.padHex64 = padHex64; exports.rehydrateConnectorError = rehydrateConnectorError; exports.runAllNetworkGetAddress = runAllNetworkGetAddress; exports.serializeConnectorError = serializeConnectorError; exports.stripHex = stripHex; exports.success = success;
1289
+
1290
+
1291
+
1292
+
1293
+
1294
+
1295
+
1296
+
1297
+
1298
+
1299
+
1300
+
1301
+
1302
+
1303
+
1304
+
1305
+
1306
+
1307
+
1308
+
1309
+
1310
+
1311
+ exports.ALL_NETWORK_METHOD_NAMES = ALL_NETWORK_METHOD_NAMES; exports.CHAIN_FINGERPRINT_PATHS = CHAIN_FINGERPRINT_PATHS; exports.DEVICE = DEVICE; exports.DEVICE_CONNECT_RETRY_DELAY_MS = DEVICE_CONNECT_RETRY_DELAY_MS; exports.DEVICE_EVENT = DEVICE_EVENT; exports.DeviceJobQueue = DeviceJobQueue; exports.EConnectorInteraction = EConnectorInteraction; exports.HARDWARE_METHOD_CATALOG = HARDWARE_METHOD_CATALOG; exports.HARDWARE_RUNTIME_ID_PREFIX = HARDWARE_RUNTIME_ID_PREFIX; exports.HardwareErrorCode = _chunkIZEVYMJKjs.HardwareErrorCode; exports.INTERACTION_DEFAULT_TTL_MS = INTERACTION_DEFAULT_TTL_MS; exports.InteractionRegistry = InteractionRegistry; exports.ORPHAN_ELIGIBLE_ERROR_CODES = _chunkIZEVYMJKjs.ORPHAN_ELIGIBLE_ERROR_CODES; exports.SDK = SDK; exports.TypedEventEmitter = TypedEventEmitter; exports.UI_EVENT = _chunkRRCFH7X6js.UI_EVENT; exports.UI_REQUEST = _chunkRRCFH7X6js.UI_REQUEST; exports.UI_REQUEST_CANCELLED_TAG = _chunkRRCFH7X6js.UI_REQUEST_CANCELLED_TAG; exports.UI_REQUEST_DEFAULT_TIMEOUT_MS = _chunkRRCFH7X6js.UI_REQUEST_DEFAULT_TIMEOUT_MS; exports.UI_REQUEST_PREEMPTED_TAG = _chunkRRCFH7X6js.UI_REQUEST_PREEMPTED_TAG; exports.UI_REQUEST_TIMEOUT_TAG = _chunkRRCFH7X6js.UI_REQUEST_TIMEOUT_TAG; exports.UI_RESPONSE = _chunkRRCFH7X6js.UI_RESPONSE; exports.UiRequestRegistry = _chunkRRCFH7X6js.UiRequestRegistry; exports.batchCall = batchCall; exports.buildUnsupportedMethodResponse = buildUnsupportedMethodResponse; exports.bytesToHex = bytesToHex3; exports.canReplayHardwareMethodAfterTransportFailure = canReplayHardwareMethodAfterTransportFailure; exports.compareSemver = compareSemver; exports.createBridgedConnector = createBridgedConnector; exports.createCombinedConnector = createCombinedConnector; exports.createHardwareConnectorSessionId = createHardwareConnectorSessionId; exports.createHardwareInteractionId = createHardwareInteractionId; exports.createHardwareSearchTargetId = createHardwareSearchTargetId; exports.createHwkError = _chunkIZEVYMJKjs.createHwkError; exports.defaultOriginForCode = _chunkIZEVYMJKjs.defaultOriginForCode; exports.defaultRecoveryForCode = _chunkIZEVYMJKjs.defaultRecoveryForCode; exports.deriveDeviceFingerprint = deriveDeviceFingerprint; exports.deriveWalletId = deriveWalletId; exports.detectHardwareVendorFromDescriptor = detectHardwareVendorFromDescriptor; exports.enrichErrorMessage = _chunk7SFFS2NLjs.enrichErrorMessage; exports.ensure0x = ensure0x; exports.failure = failure; exports.getAllNetworkMethodChain = getAllNetworkMethodChain; exports.getHardwareMethodMetadata = getHardwareMethodMetadata; exports.hasHardwareRuntimeIdPrefix = hasHardwareRuntimeIdPrefix; exports.hexToBytes = hexToBytes; exports.isAllNetworkMethodName = isAllNetworkMethodName; exports.isHardwareInteractionId = isHardwareInteractionId; exports.isHardwareSearchTargetId = isHardwareSearchTargetId; exports.isHwkRecoveryHint = _chunkIZEVYMJKjs.isHwkRecoveryHint; exports.isKnownNonTargetHardwareVendor = isKnownNonTargetHardwareVendor; exports.operationMayHaveCompletedParams = _chunkIZEVYMJKjs.operationMayHaveCompletedParams; exports.padHex64 = padHex64; exports.parseBip32MasterFingerprint = parseBip32MasterFingerprint; exports.parseHardwareRuntimeId = parseHardwareRuntimeId; exports.prepareSolanaOffchainMessageV1 = prepareSolanaOffchainMessageV1; exports.rehydrateConnectorError = rehydrateConnectorError; exports.requestBleDeviceSelection = requestBleDeviceSelection; exports.requestSaveDeviceBinding = requestSaveDeviceBinding; exports.resolveHardwareOperationTarget = resolveHardwareOperationTarget; exports.resolveSearchTargetReusePolicy = resolveSearchTargetReusePolicy; exports.runAllNetworkGetAddress = runAllNetworkGetAddress; exports.serializeConnectorError = serializeConnectorError; exports.stripHex = stripHex; exports.success = success;
770
1312
  //# sourceMappingURL=index.js.map