@onekeyfe/hwk-ledger-adapter 1.1.27 → 1.2.0-alpha.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/dist/index.js CHANGED
@@ -53,7 +53,7 @@ __export(index_exports, {
53
53
  module.exports = __toCommonJS(index_exports);
54
54
 
55
55
  // src/adapter/LedgerAdapter.ts
56
- var import_hwk_adapter_core3 = require("@onekeyfe/hwk-adapter-core");
56
+ var import_hwk_adapter_core2 = require("@onekeyfe/hwk-adapter-core");
57
57
 
58
58
  // src/errors.ts
59
59
  var import_hwk_adapter_core = require("@onekeyfe/hwk-adapter-core");
@@ -75,37 +75,30 @@ var USER_REJECTED_CODES = /* @__PURE__ */ new Set(["6985", "27013"]);
75
75
  var WRONG_APP_CODES = /* @__PURE__ */ new Set(["6e00", "28160", "6d00", "27904", "6a83", "27267"]);
76
76
  var APP_NOT_INSTALLED_CODES = /* @__PURE__ */ new Set(["6807", "26631"]);
77
77
  var STEP_BLIND_SIGN_TRANSACTION_FALLBACK = "signer.eth.steps.blindSignTransactionFallback";
78
- var STEP_DETECT_BLIND_SIGNING = "signer.eth.steps.detectBlindSigning";
79
- var BLIND_SIGNING_STEPS = /* @__PURE__ */ new Set([
80
- STEP_BLIND_SIGN_TRANSACTION_FALLBACK,
81
- STEP_DETECT_BLIND_SIGNING
82
- ]);
83
- function normalizeApduHex(value) {
84
- if (typeof value === "number" && Number.isInteger(value) && value >= 0 && value <= 65535) {
85
- return value.toString(16).padStart(4, "0");
86
- }
87
- if (typeof value !== "string") return null;
88
- const raw = value.toLowerCase().replace(/^0x/, "");
89
- return /^[0-9a-f]{1,4}$/i.test(raw) ? raw.padStart(4, "0") : null;
90
- }
91
78
  function getEthAppErrorCode(err) {
92
79
  if (!err || typeof err !== "object") return null;
93
80
  const e = err;
94
- if (e._tag === ERROR_TAG.EthAppCommand) {
95
- const code = normalizeApduHex(e.errorCode) ?? normalizeApduHex(e.statusCode) ?? normalizeApduHex(e.code);
96
- if (code) return code;
81
+ if (e._tag === ERROR_TAG.EthAppCommand && typeof e.errorCode === "string") {
82
+ return e.errorCode.toLowerCase();
97
83
  }
98
84
  const orig = e.originalError;
99
- if (orig?._tag === ERROR_TAG.EthAppCommand) {
100
- return normalizeApduHex(orig.errorCode) ?? normalizeApduHex(orig.statusCode) ?? normalizeApduHex(orig.code);
85
+ if (orig?._tag === ERROR_TAG.EthAppCommand && typeof orig.errorCode === "string") {
86
+ return orig.errorCode.toLowerCase();
101
87
  }
102
88
  return null;
103
89
  }
104
90
  function extractApduHex(err) {
105
91
  if (!err || typeof err !== "object") return null;
106
92
  const e = err;
107
- const direct = normalizeApduHex(e.errorCode) ?? normalizeApduHex(e.statusCode);
108
- if (direct) return direct;
93
+ if (typeof e.errorCode === "string" && /^[0-9a-f]+$/i.test(e.errorCode)) {
94
+ return e.errorCode.toLowerCase();
95
+ }
96
+ if (typeof e.statusCode === "number" && Number.isFinite(e.statusCode)) {
97
+ return e.statusCode.toString(16).padStart(4, "0");
98
+ }
99
+ if (typeof e.statusCode === "string" && /^[0-9a-f]+$/i.test(e.statusCode)) {
100
+ return e.statusCode.toLowerCase();
101
+ }
109
102
  if (e.originalError != null) {
110
103
  const nested = extractApduHex(e.originalError);
111
104
  if (nested) return nested;
@@ -164,15 +157,10 @@ function classifyEthAppError(err) {
164
157
  const ethCode = getEthAppErrorCode(err);
165
158
  if (!ethCode) return null;
166
159
  if (ethCode === "6a80") {
167
- return hasBlindSigningStep(err) ? import_hwk_adapter_core.HardwareErrorCode.EvmBlindSigningRequired : null;
160
+ return hasBlindSignFallbackStep(err) ? import_hwk_adapter_core.HardwareErrorCode.EvmBlindSigningRequired : null;
168
161
  }
169
162
  return mapEthAppErrorCode(ethCode);
170
163
  }
171
- function classifyBlindSigningDetectionError(err) {
172
- if (!hasBlindSigningStep(err)) return null;
173
- if (hasInvalidArgumentCode(err)) return import_hwk_adapter_core.HardwareErrorCode.EvmBlindSigningRequired;
174
- return null;
175
- }
176
164
  var ERROR_TAG = {
177
165
  // SDK-mint
178
166
  DeviceNotAdvertising: "DeviceNotAdvertisingError",
@@ -188,10 +176,6 @@ var ERROR_TAG = {
188
176
  // chain app wedged (APDU 0x6901)
189
177
  DeviceTransportStuck: "DeviceTransportStuck",
190
178
  // DMK transport queue wedged
191
- // installApp resolved success but the app is still missing on device —
192
- // DMK quirk. Surfaced as a distinct tag so callers can tell it apart from
193
- // the original DMK-thrown AppNotInstalled.
194
- AppInstallVerifyFailed: "AppInstallVerifyFailedError",
195
179
  // DMK-reuse (DMK throws same string; we synthesize too)
196
180
  DeviceLocked: "DeviceLockedError",
197
181
  DeviceNotRecognized: "DeviceNotRecognizedError",
@@ -217,11 +201,7 @@ var ERROR_TAG = {
217
201
  // ble-plx surfaces this when GATT notification setup fails — typical
218
202
  // outcome when the user doesn't confirm pairing on the device, or the
219
203
  // existing bond is invalid. Observed in production after ~30s.
220
- PairingRefused: "PairingRefusedError",
221
- // DMK remote-network failures (manager-api HTTP / secure-channel WS).
222
- WebSocketConnection: "WebSocketConnectionError",
223
- HttpFetch: "FetchError",
224
- InvalidFirmwareMetadataResponse: "InvalidGetFirmwareMetadataResponseError"
204
+ PairingRefused: "PairingRefusedError"
225
205
  };
226
206
  function isDeviceLockedError(err) {
227
207
  if (!err || typeof err !== "object") return false;
@@ -309,30 +289,15 @@ function hasStatusCode(err, codeSet) {
309
289
  if (e.error != null && e._tag && hasStatusCode(e.error, codeSet)) return true;
310
290
  return false;
311
291
  }
312
- function hasDeviceActionStep(err, step) {
292
+ function hasBlindSignFallbackStep(err) {
313
293
  if (!err || typeof err !== "object") return false;
314
294
  const e = err;
315
- if (e._lastStep === step) return true;
316
- if (Array.isArray(e._deviceActionSteps) && e._deviceActionSteps.includes(step)) {
295
+ if (e._lastStep === STEP_BLIND_SIGN_TRANSACTION_FALLBACK) return true;
296
+ if (Array.isArray(e._deviceActionSteps) && e._deviceActionSteps.includes(STEP_BLIND_SIGN_TRANSACTION_FALLBACK)) {
317
297
  return true;
318
298
  }
319
- if (e.originalError != null && hasDeviceActionStep(e.originalError, step)) return true;
320
- if (e.error != null && e._tag && hasDeviceActionStep(e.error, step)) return true;
321
- return false;
322
- }
323
- function hasBlindSigningStep(err) {
324
- for (const step of BLIND_SIGNING_STEPS) {
325
- if (hasDeviceActionStep(err, step)) return true;
326
- }
327
- return false;
328
- }
329
- function hasInvalidArgumentCode(err) {
330
- if (!err || typeof err !== "object") return false;
331
- const e = err;
332
- if (e.code === "INVALID_ARGUMENT") return true;
333
- if (typeof e.message === "string" && e.message.includes("code=INVALID_ARGUMENT")) return true;
334
- if (e.originalError != null && hasInvalidArgumentCode(e.originalError)) return true;
335
- if (e.error != null && e._tag && hasInvalidArgumentCode(e.error)) return true;
299
+ if (e.originalError != null && hasBlindSignFallbackStep(e.originalError)) return true;
300
+ if (e.error != null && e._tag && hasBlindSignFallbackStep(e.error)) return true;
336
301
  return false;
337
302
  }
338
303
  function isDeviceNotFoundError(err) {
@@ -361,11 +326,6 @@ function isUserRejectedError(err) {
361
326
  if (hasStatusCode(err, USER_REJECTED_CODES)) return true;
362
327
  return false;
363
328
  }
364
- function isUserAbortedError(err) {
365
- if (!err || typeof err !== "object") return false;
366
- const e = err;
367
- return e._tag === ERROR_TAG.UserAborted;
368
- }
369
329
  function isWrongAppError(err) {
370
330
  if (!err || typeof err !== "object") return false;
371
331
  const e = err;
@@ -392,20 +352,6 @@ function isOutOfMemoryError(err) {
392
352
  const e = err;
393
353
  return e._tag === "OutOfMemoryDAError";
394
354
  }
395
- var NETWORK_ERROR_TAGS = /* @__PURE__ */ new Set([
396
- ERROR_TAG.WebSocketConnection,
397
- ERROR_TAG.HttpFetch,
398
- ERROR_TAG.InvalidFirmwareMetadataResponse
399
- ]);
400
- function isNetworkError(err) {
401
- if (!err || typeof err !== "object") return false;
402
- const e = err;
403
- const tag = e._tag;
404
- if (typeof tag === "string" && NETWORK_ERROR_TAGS.has(tag)) return true;
405
- if (e.originalError != null && isNetworkError(e.originalError)) return true;
406
- if (e.error != null && isNetworkError(e.error)) return true;
407
- return false;
408
- }
409
355
  function isDeviceDisconnectedError(err) {
410
356
  if (!err || typeof err !== "object") return false;
411
357
  const e = err;
@@ -462,8 +408,6 @@ function mapLedgerError(err, opts) {
462
408
  code = import_hwk_adapter_core.HardwareErrorCode.DeviceBusy;
463
409
  } else if (isBlePairingFailureError(err)) {
464
410
  code = import_hwk_adapter_core.HardwareErrorCode.BlePairingTimeout;
465
- } else if (isUserAbortedError(err)) {
466
- code = import_hwk_adapter_core.HardwareErrorCode.UserAborted;
467
411
  } else if (isUserRejectedError(err)) {
468
412
  code = import_hwk_adapter_core.HardwareErrorCode.UserRejected;
469
413
  } else if (isWrongAppError(err)) {
@@ -472,14 +416,12 @@ function mapLedgerError(err, opts) {
472
416
  code = import_hwk_adapter_core.HardwareErrorCode.AppNotInstalled;
473
417
  } else if (isOutOfMemoryError(err)) {
474
418
  code = import_hwk_adapter_core.HardwareErrorCode.DeviceOutOfMemory;
475
- } else if (isNetworkError(err)) {
476
- code = import_hwk_adapter_core.HardwareErrorCode.NetworkError;
477
419
  } else if (isDeviceDisconnectedError(err)) {
478
420
  code = import_hwk_adapter_core.HardwareErrorCode.DeviceDisconnected;
479
421
  } else if (isTimeoutError(err)) {
480
422
  code = import_hwk_adapter_core.HardwareErrorCode.OperationTimeout;
481
423
  } else {
482
- const ethMapped = classifyEthAppError(err) ?? classifyBlindSigningDetectionError(err);
424
+ const ethMapped = classifyEthAppError(err);
483
425
  const apduHex = ethMapped ? null : extractApduHex(err);
484
426
  const chainMapped = apduHex ? mapSolanaAppError(apduHex) ?? mapTronAppError(apduHex) ?? mapBtcAppError(apduHex) : null;
485
427
  code = ethMapped ?? chainMapped ?? import_hwk_adapter_core.HardwareErrorCode.UnknownError;
@@ -489,8 +431,17 @@ function mapLedgerError(err, opts) {
489
431
  return { code, message: (0, import_hwk_adapter_core.enrichErrorMessage)(code, originalMessage), appName };
490
432
  }
491
433
 
492
- // src/adapter/methods/allNetworkGetAddress.ts
493
- var import_hwk_adapter_core2 = require("@onekeyfe/hwk-adapter-core");
434
+ // src/utils/ledgerDmkTransport.ts
435
+ function isLedgerDmkBleTransport(transport) {
436
+ const normalized = transport?.toUpperCase();
437
+ return normalized === "BLE" || normalized?.endsWith("_BLE") === true;
438
+ }
439
+ function isLedgerBleConnectionType(connectionType) {
440
+ return connectionType === "ble";
441
+ }
442
+ function isLedgerBleDescriptor(connectionType, descriptor) {
443
+ return isLedgerBleConnectionType(connectionType) || isLedgerDmkBleTransport(descriptor.transport);
444
+ }
494
445
 
495
446
  // src/utils/sdkEventBus.ts
496
447
  var listeners = /* @__PURE__ */ new Set();
@@ -537,252 +488,6 @@ function debugError(...args) {
537
488
  emitLog("error", ...args);
538
489
  }
539
490
 
540
- // src/adapter/methods/allNetworkGetAddress.ts
541
- var LEDGER_BTC_NETWORK_COIN_MAP = {
542
- tbtc: "Testnet",
543
- bch: "Bcash",
544
- doge: "Dogecoin",
545
- ltc: "Litecoin",
546
- neurai: "Neurai"
547
- };
548
- function createAllNetworkGetAddress({
549
- callChain,
550
- getChainFingerprint
551
- }) {
552
- return async function allNetworkGetAddress(connectId, _deviceId, params) {
553
- debugLog("[LedgerAdapter][REQ]", { method: "allNetworkGetAddress", connectId, params });
554
- const installContext = {};
555
- const commonParams = {
556
- autoInstallApp: params.autoInstallApp
557
- };
558
- const responses = [];
559
- const chainFingerprints = /* @__PURE__ */ new Map();
560
- for (const item of params.bundle) {
561
- const method = getAllNetworkMethod(item);
562
- if (!method) {
563
- responses.push(buildUnsupportedMethodResponse(item));
564
- } else {
565
- const chain = getFingerprintChain(method);
566
- const itemDeviceId = getItemDeviceId(item) ?? chainFingerprints.get(chain) ?? "";
567
- const normalizedItem = normalizeLedgerAllNetworkItem(method, item);
568
- const response = await callAllNetworkItem(
569
- callChain,
570
- getChainFingerprint,
571
- connectId,
572
- itemDeviceId,
573
- chain,
574
- method,
575
- normalizedItem,
576
- commonParams,
577
- installContext,
578
- chainFingerprints
579
- );
580
- if (isTopLevelAllNetworkFailure(response)) {
581
- const code = response.payload?.code ?? import_hwk_adapter_core2.HardwareErrorCode.DeviceMismatch;
582
- const result2 = (0, import_hwk_adapter_core2.failure)(
583
- code,
584
- response.payload?.error ?? "All-network get-address aborted",
585
- response.payload?.params
586
- );
587
- debugLog("[LedgerAdapter][RES]", {
588
- method: "allNetworkGetAddress",
589
- success: false,
590
- payload: result2
591
- });
592
- return result2;
593
- }
594
- responses.push(response);
595
- }
596
- }
597
- const result = (0, import_hwk_adapter_core2.success)(responses);
598
- debugLog("[LedgerAdapter][RES]", {
599
- method: "allNetworkGetAddress",
600
- success: true,
601
- payload: result
602
- });
603
- return result;
604
- };
605
- }
606
- function isTopLevelAllNetworkFailure(response) {
607
- if (response.success) {
608
- return false;
609
- }
610
- const code = response.payload?.code;
611
- return code === import_hwk_adapter_core2.HardwareErrorCode.DeviceMismatch || code === import_hwk_adapter_core2.HardwareErrorCode.UserAborted || code === import_hwk_adapter_core2.HardwareErrorCode.UserRejected;
612
- }
613
- function getItemDeviceId(item) {
614
- const { deviceId } = item;
615
- return typeof deviceId === "string" && deviceId.length > 0 ? deviceId : void 0;
616
- }
617
- function getAllNetworkMethod(item) {
618
- switch (item.methodName) {
619
- case "evmGetAddress":
620
- case "btcGetAddress":
621
- case "btcGetPublicKey":
622
- case "solGetAddress":
623
- case "tronGetAddress":
624
- return item.methodName;
625
- default:
626
- return void 0;
627
- }
628
- }
629
- function buildUnsupportedMethodResponse(item) {
630
- return {
631
- ...item,
632
- success: false,
633
- payload: {
634
- code: import_hwk_adapter_core2.HardwareErrorCode.InvalidParams,
635
- error: `Unsupported allNetwork method: ${String(item.methodName)}`
636
- }
637
- };
638
- }
639
- function normalizeLedgerAllNetworkItem(method, item) {
640
- if (method !== "btcGetAddress" && method !== "btcGetPublicKey") {
641
- return item;
642
- }
643
- const itemWithCoin = item;
644
- if (itemWithCoin.coin) {
645
- return item;
646
- }
647
- const coin = LEDGER_BTC_NETWORK_COIN_MAP[item.network];
648
- return coin ? { ...item, coin } : item;
649
- }
650
- async function callAllNetworkItem(callChain, getChainFingerprint, connectId, deviceId, chain, method, item, commonParams, installContext, chainFingerprints) {
651
- const response = await callAllNetworkMethod(
652
- callChain,
653
- connectId,
654
- deviceId,
655
- method,
656
- item,
657
- commonParams,
658
- installContext
659
- );
660
- if (!response.success) {
661
- return { ...item, success: false, payload: response.payload };
662
- }
663
- const payload = response.payload;
664
- const fingerprint = deviceId || chainFingerprints.get(chain) || await bootstrapChainFingerprint(getChainFingerprint, connectId, chain);
665
- if (!fingerprint) {
666
- return buildFingerprintBootstrapFailure(item, chain);
667
- }
668
- chainFingerprints.set(chain, fingerprint);
669
- return {
670
- ...item,
671
- success: true,
672
- payload: {
673
- ...payload,
674
- chainFingerprint: fingerprint,
675
- chainFingerprintChain: chain
676
- }
677
- };
678
- }
679
- async function bootstrapChainFingerprint(getChainFingerprint, connectId, chain) {
680
- const response = await getChainFingerprint(connectId, chain);
681
- return response.success ? response.payload : "";
682
- }
683
- function buildFingerprintBootstrapFailure(item, chain) {
684
- return {
685
- ...item,
686
- success: false,
687
- payload: {
688
- code: import_hwk_adapter_core2.HardwareErrorCode.DeviceMismatch,
689
- error: `Could not establish chain fingerprint for ${chain} after device call; refusing to return unverifiable result. Please retry.`
690
- }
691
- };
692
- }
693
- function getFingerprintChain(method) {
694
- switch (method) {
695
- case "evmGetAddress":
696
- return "evm";
697
- case "btcGetAddress":
698
- case "btcGetPublicKey":
699
- return "btc";
700
- case "solGetAddress":
701
- return "sol";
702
- case "tronGetAddress":
703
- return "tron";
704
- default:
705
- throw Object.assign(new Error(`Unsupported allNetwork method: ${method}`), {
706
- code: import_hwk_adapter_core2.HardwareErrorCode.InvalidParams
707
- });
708
- }
709
- }
710
- async function callAllNetworkMethod(callChain, connectId, deviceId, method, item, commonParams, installContext) {
711
- switch (method) {
712
- case "evmGetAddress":
713
- return callChain(
714
- connectId,
715
- deviceId,
716
- "evm",
717
- "evmGetAddress",
718
- item,
719
- commonParams,
720
- false,
721
- installContext
722
- );
723
- case "btcGetAddress":
724
- return callChain(
725
- connectId,
726
- deviceId,
727
- "btc",
728
- "btcGetAddress",
729
- item,
730
- commonParams,
731
- false,
732
- installContext
733
- );
734
- case "btcGetPublicKey":
735
- return callChain(
736
- connectId,
737
- deviceId,
738
- "btc",
739
- "btcGetPublicKey",
740
- item,
741
- commonParams,
742
- false,
743
- installContext
744
- );
745
- case "solGetAddress":
746
- return callChain(
747
- connectId,
748
- deviceId,
749
- "sol",
750
- "solGetAddress",
751
- item,
752
- commonParams,
753
- false,
754
- installContext
755
- );
756
- case "tronGetAddress":
757
- return callChain(
758
- connectId,
759
- deviceId,
760
- "tron",
761
- "tronGetAddress",
762
- item,
763
- commonParams,
764
- false,
765
- installContext
766
- );
767
- default:
768
- throw Object.assign(new Error(`Unsupported allNetwork method: ${method}`), {
769
- code: import_hwk_adapter_core2.HardwareErrorCode.InvalidParams
770
- });
771
- }
772
- }
773
-
774
- // src/utils/ledgerDmkTransport.ts
775
- function isLedgerDmkBleTransport(transport) {
776
- const normalized = transport?.toUpperCase();
777
- return normalized === "BLE" || normalized?.endsWith("_BLE") === true;
778
- }
779
- function isLedgerBleConnectionType(connectionType) {
780
- return connectionType === "ble";
781
- }
782
- function isLedgerBleDescriptor(connectionType, descriptor) {
783
- return isLedgerBleConnectionType(connectionType) || isLedgerDmkBleTransport(descriptor.transport);
784
- }
785
-
786
491
  // src/adapter/LedgerAdapter.ts
787
492
  function formatDeviceMismatchError(expected, actual) {
788
493
  return `Wrong device: expected ${expected}, got ${actual}`;
@@ -798,10 +503,10 @@ function btcAccountIndexFromPath(path) {
798
503
  var _LedgerAdapter = class _LedgerAdapter {
799
504
  constructor(connector, options) {
800
505
  this.vendor = "ledger";
801
- this.emitter = new import_hwk_adapter_core3.TypedEventEmitter();
506
+ this.emitter = new import_hwk_adapter_core2.TypedEventEmitter();
802
507
  this._discoveredDevices = /* @__PURE__ */ new Map();
803
508
  this._sessions = /* @__PURE__ */ new Map();
804
- this._uiRegistry = new import_hwk_adapter_core3.UiRequestRegistry();
509
+ this._uiRegistry = new import_hwk_adapter_core2.UiRequestRegistry();
805
510
  // BTC App rejects account index >= 100 unless display=true. Cached per
806
511
  // adapter instance: first 100+ path asks the user once via UI request,
807
512
  // subsequent 100+ paths in the same session auto-promote silently.
@@ -810,11 +515,6 @@ var _LedgerAdapter = class _LedgerAdapter {
810
515
  this._btcHighIndexConfirmedThisSession = false;
811
516
  // Shared across concurrent callers — only `cancel()` aborts.
812
517
  this._doConnectAbortController = null;
813
- this._installProgressLastEmittedValue = -Infinity;
814
- this.allNetworkGetAddress = createAllNetworkGetAddress({
815
- callChain: this.callChain.bind(this),
816
- getChainFingerprint: (connectId, chain) => this.getChainFingerprint(connectId, "", chain)
817
- });
818
518
  // ---------------------------------------------------------------------------
819
519
  // Private helpers
820
520
  // ---------------------------------------------------------------------------
@@ -834,16 +534,16 @@ var _LedgerAdapter = class _LedgerAdapter {
834
534
  const deviceInfo = this.connectorDeviceToDeviceInfo(data.device);
835
535
  this._discoveredDevices.set(deviceInfo.connectId, deviceInfo);
836
536
  this._sessions.delete(deviceInfo.connectId);
837
- this.emitter.emit(import_hwk_adapter_core3.DEVICE.CONNECT, {
838
- type: import_hwk_adapter_core3.DEVICE.CONNECT,
537
+ this.emitter.emit(import_hwk_adapter_core2.DEVICE.CONNECT, {
538
+ type: import_hwk_adapter_core2.DEVICE.CONNECT,
839
539
  payload: deviceInfo
840
540
  });
841
541
  };
842
542
  this.deviceDisconnectHandler = (data) => {
843
543
  this._discoveredDevices.delete(data.connectId);
844
544
  this._sessions.delete(data.connectId);
845
- this.emitter.emit(import_hwk_adapter_core3.DEVICE.DISCONNECT, {
846
- type: import_hwk_adapter_core3.DEVICE.DISCONNECT,
545
+ this.emitter.emit(import_hwk_adapter_core2.DEVICE.DISCONNECT, {
546
+ type: import_hwk_adapter_core2.DEVICE.DISCONNECT,
847
547
  payload: { connectId: data.connectId }
848
548
  });
849
549
  };
@@ -853,7 +553,7 @@ var _LedgerAdapter = class _LedgerAdapter {
853
553
  // exists (race during teardown) we drop. All other variants pass through
854
554
  // unchanged.
855
555
  this.uiEventForwarder = (event) => {
856
- if (event.type === import_hwk_adapter_core3.EConnectorInteraction.AppInstallProgress) {
556
+ if (event.type === import_hwk_adapter_core2.EConnectorInteraction.AppInstallProgress) {
857
557
  let connectId;
858
558
  for (const [cid, sid] of this._sessions) {
859
559
  if (sid === event.payload.sessionId) {
@@ -868,23 +568,12 @@ var _LedgerAdapter = class _LedgerAdapter {
868
568
  );
869
569
  return;
870
570
  }
871
- const { appName, progress } = event.payload;
872
- const key = `${connectId}:${appName}`;
873
- if (this._installProgressLastKey !== key || this._installProgressLastEmittedValue >= 1) {
874
- this._installProgressLastEmittedValue = -Infinity;
875
- this._installProgressLastKey = key;
876
- }
877
- const delta = progress - this._installProgressLastEmittedValue;
878
- if (delta < _LedgerAdapter.APP_INSTALL_PROGRESS_MIN_DELTA && progress < 1) {
879
- return;
880
- }
881
- this._installProgressLastEmittedValue = progress;
882
571
  this.emitter.emit("ui-event", {
883
- type: import_hwk_adapter_core3.EConnectorInteraction.AppInstallProgress,
572
+ type: import_hwk_adapter_core2.EConnectorInteraction.AppInstallProgress,
884
573
  payload: {
885
574
  connectId,
886
- appName,
887
- progress
575
+ appName: event.payload.appName,
576
+ progress: event.payload.progress
888
577
  }
889
578
  });
890
579
  return;
@@ -893,7 +582,7 @@ var _LedgerAdapter = class _LedgerAdapter {
893
582
  };
894
583
  this.connector = connector;
895
584
  this._defaultAutoInstallApp = options?.autoInstallApp ?? false;
896
- this._jobQueue = new import_hwk_adapter_core3.DeviceJobQueue();
585
+ this._jobQueue = new import_hwk_adapter_core2.DeviceJobQueue();
897
586
  this.registerEventListeners();
898
587
  }
899
588
  // Transport
@@ -941,42 +630,30 @@ var _LedgerAdapter = class _LedgerAdapter {
941
630
  // Device management
942
631
  // ---------------------------------------------------------------------------
943
632
  async searchDevices(options) {
944
- debugLog("[LedgerAdapter][REQ]", { method: "searchDevices", params: options });
945
- try {
946
- if (options?.resetSession) {
947
- this._doConnectAbortController?.abort();
948
- this._sessions.clear();
949
- this._connectingPromise = null;
950
- this._doConnectAbortController = null;
951
- this._btcHighIndexConfirmedThisSession = false;
633
+ if (options?.resetSession) {
634
+ this._doConnectAbortController?.abort();
635
+ this._sessions.clear();
636
+ this._connectingPromise = null;
637
+ this._doConnectAbortController = null;
638
+ this._btcHighIndexConfirmedThisSession = false;
639
+ }
640
+ await this._ensureDevicePermission();
641
+ const devices = await this.connector.searchDevices();
642
+ this._discoveredDevices.clear();
643
+ for (const d of devices) {
644
+ if (d.connectId) {
645
+ this._discoveredDevices.set(d.connectId, this.connectorDeviceToDeviceInfo(d));
952
646
  }
647
+ }
648
+ if (this._discoveredDevices.size === 0) {
953
649
  await this._ensureDevicePermission();
954
- const devices = await this.connector.searchDevices();
955
- this._discoveredDevices.clear();
956
- for (const d of devices) {
957
- if (d.connectId) {
958
- this._discoveredDevices.set(d.connectId, this.connectorDeviceToDeviceInfo(d));
959
- }
960
- }
961
- if (this._discoveredDevices.size === 0) {
962
- await this._ensureDevicePermission();
963
- }
964
- const result = Array.from(this._discoveredDevices.values());
965
- debugLog("[LedgerAdapter][RES]", {
966
- method: "searchDevices",
967
- success: true,
968
- payload: result
969
- });
970
- return result;
971
- } catch (err) {
972
- const e = err;
973
- debugLog("[LedgerAdapter][RES]", {
974
- method: "searchDevices",
975
- success: false,
976
- error: { message: e?.message, _tag: e?._tag, code: e?.code ?? e?.errorCode }
977
- });
978
- throw err;
979
650
  }
651
+ debugLog(
652
+ `[LedgerAdapter] searchDevices() return count=${this._discoveredDevices.size} ids=[${[
653
+ ...this._discoveredDevices.keys()
654
+ ].join(",")}]`
655
+ );
656
+ return Array.from(this._discoveredDevices.values());
980
657
  }
981
658
  // USB single-session invariant: evict all sessions, best-effort (see connectDevice).
982
659
  async _evictAllSessions() {
@@ -992,15 +669,14 @@ var _LedgerAdapter = class _LedgerAdapter {
992
669
  }
993
670
  static _createDeviceBusyError(method) {
994
671
  return Object.assign(new Error(`Ledger device is busy while calling ${method}`), {
995
- code: import_hwk_adapter_core3.HardwareErrorCode.DeviceBusy
672
+ code: import_hwk_adapter_core2.HardwareErrorCode.DeviceBusy
996
673
  });
997
674
  }
998
675
  async connectDevice(connectId) {
999
- debugLog("[LedgerAdapter][REQ]", { method: "connectDevice", connectId, params: { connectId } });
1000
676
  try {
1001
677
  if (isLedgerBleConnectionType(this.connector.connectionType) && !connectId) {
1002
678
  throw Object.assign(new Error("Ledger BLE connectId is required."), {
1003
- code: import_hwk_adapter_core3.HardwareErrorCode.DeviceNotFound
679
+ code: import_hwk_adapter_core2.HardwareErrorCode.DeviceNotFound
1004
680
  });
1005
681
  }
1006
682
  if (!isLedgerBleConnectionType(this.connector.connectionType)) {
@@ -1012,79 +688,28 @@ var _LedgerAdapter = class _LedgerAdapter {
1012
688
  if (session.deviceInfo) {
1013
689
  this._discoveredDevices.set(connectId, session.deviceInfo);
1014
690
  }
1015
- const result = (0, import_hwk_adapter_core3.success)(connectId);
1016
- debugLog("[LedgerAdapter][RES]", { method: "connectDevice", success: true, payload: result });
1017
- return result;
691
+ return (0, import_hwk_adapter_core2.success)(connectId);
1018
692
  } catch (err) {
1019
- const failureResult = this.errorToFailure(err);
1020
- debugLog("[LedgerAdapter][RES]", {
1021
- method: "connectDevice",
1022
- success: false,
1023
- payload: failureResult
1024
- });
1025
- return failureResult;
693
+ return this.errorToFailure(err);
1026
694
  }
1027
695
  }
1028
696
  async disconnectDevice(connectId) {
1029
- debugLog("[LedgerAdapter][REQ]", {
1030
- method: "disconnectDevice",
1031
- connectId,
1032
- params: { connectId }
1033
- });
1034
- try {
1035
- const sessionId = this._sessions.get(connectId);
1036
- if (sessionId) {
1037
- await this.connector.disconnect(sessionId);
1038
- this._sessions.delete(connectId);
1039
- }
1040
- debugLog("[LedgerAdapter][RES]", { method: "disconnectDevice", success: true });
1041
- } catch (err) {
1042
- const e = err;
1043
- debugLog("[LedgerAdapter][RES]", {
1044
- method: "disconnectDevice",
1045
- success: false,
1046
- error: { message: e?.message, _tag: e?._tag, code: e?.code ?? e?.errorCode }
1047
- });
1048
- throw err;
697
+ const sessionId = this._sessions.get(connectId);
698
+ if (sessionId) {
699
+ await this.connector.disconnect(sessionId);
700
+ this._sessions.delete(connectId);
1049
701
  }
1050
702
  }
1051
703
  async getDeviceInfo(connectId, deviceId) {
1052
- debugLog("[LedgerAdapter][REQ]", {
1053
- method: "getDeviceInfo",
1054
- connectId,
1055
- params: { connectId, deviceId }
1056
- });
1057
- try {
1058
- await this._ensureDevicePermission(connectId, deviceId);
1059
- const cached = this._discoveredDevices.get(connectId) ?? Array.from(this._discoveredDevices.values()).find((d) => d.deviceId === deviceId);
1060
- if (cached) {
1061
- const result = (0, import_hwk_adapter_core3.success)(cached);
1062
- debugLog("[LedgerAdapter][RES]", {
1063
- method: "getDeviceInfo",
1064
- success: true,
1065
- payload: result
1066
- });
1067
- return result;
1068
- }
1069
- const notFound = (0, import_hwk_adapter_core3.failure)(
1070
- import_hwk_adapter_core3.HardwareErrorCode.DeviceNotFound,
1071
- "Device not found in cache. Call searchDevices() or wait for a device-connected event first."
1072
- );
1073
- debugLog("[LedgerAdapter][RES]", {
1074
- method: "getDeviceInfo",
1075
- success: false,
1076
- payload: notFound
1077
- });
1078
- return notFound;
1079
- } catch (err) {
1080
- const e = err;
1081
- debugLog("[LedgerAdapter][RES]", {
1082
- method: "getDeviceInfo",
1083
- success: false,
1084
- error: { message: e?.message, _tag: e?._tag, code: e?.code ?? e?.errorCode }
1085
- });
1086
- throw err;
704
+ await this._ensureDevicePermission(connectId, deviceId);
705
+ const cached = this._discoveredDevices.get(connectId) ?? Array.from(this._discoveredDevices.values()).find((d) => d.deviceId === deviceId);
706
+ if (cached) {
707
+ return (0, import_hwk_adapter_core2.success)(cached);
1087
708
  }
709
+ return (0, import_hwk_adapter_core2.failure)(
710
+ import_hwk_adapter_core2.HardwareErrorCode.DeviceNotFound,
711
+ "Device not found in cache. Call searchDevices() or wait for a device-connected event first."
712
+ );
1088
713
  }
1089
714
  getSupportedChains() {
1090
715
  return ["evm", "btc", "sol", "tron"];
@@ -1092,7 +717,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1092
717
  // ---------------------------------------------------------------------------
1093
718
  // Chain call helper
1094
719
  // ---------------------------------------------------------------------------
1095
- async callChain(connectId, deviceId, chain, method, params, commonParams, skipFingerprint = false, installContext) {
720
+ async callChain(connectId, deviceId, chain, method, params, commonParams, skipFingerprint = false) {
1096
721
  try {
1097
722
  const result = await this.connectorCall(
1098
723
  connectId,
@@ -1104,10 +729,9 @@ var _LedgerAdapter = class _LedgerAdapter {
1104
729
  skipFingerprint
1105
730
  },
1106
731
  void 0,
1107
- commonParams,
1108
- installContext
732
+ commonParams
1109
733
  );
1110
- return (0, import_hwk_adapter_core3.success)(result);
734
+ return (0, import_hwk_adapter_core2.success)(result);
1111
735
  } catch (err) {
1112
736
  return this.errorToFailure(err);
1113
737
  }
@@ -1292,7 +916,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1292
916
  async installApp(connectId, appName) {
1293
917
  try {
1294
918
  await this.connectorCall(connectId, "installApp", { appName });
1295
- return (0, import_hwk_adapter_core3.success)(void 0);
919
+ return (0, import_hwk_adapter_core2.success)(void 0);
1296
920
  } catch (err) {
1297
921
  return this.errorToFailure(err);
1298
922
  }
@@ -1300,16 +924,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1300
924
  async listInstalledApps(connectId) {
1301
925
  try {
1302
926
  const result = await this.connectorCall(connectId, "listInstalledApps", {});
1303
- return (0, import_hwk_adapter_core3.success)(result);
1304
- } catch (err) {
1305
- return this.errorToFailure(err);
1306
- }
1307
- }
1308
- // Offline app-presence + unlock probe. No manager-api catalog (unlike listInstalledApps).
1309
- async listInstalledNames(connectId) {
1310
- try {
1311
- const result = await this.connectorCall(connectId, "listInstalledNames", {});
1312
- return (0, import_hwk_adapter_core3.success)(result);
927
+ return (0, import_hwk_adapter_core2.success)(result);
1313
928
  } catch (err) {
1314
929
  return this.errorToFailure(err);
1315
930
  }
@@ -1317,7 +932,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1317
932
  async listAvailableApps(connectId) {
1318
933
  try {
1319
934
  const result = await this.connectorCall(connectId, "listAvailableApps", {});
1320
- return (0, import_hwk_adapter_core3.success)(result);
935
+ return (0, import_hwk_adapter_core2.success)(result);
1321
936
  } catch (err) {
1322
937
  return this.errorToFailure(err);
1323
938
  }
@@ -1325,7 +940,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1325
940
  async getLedgerFirmwareVersion(connectId) {
1326
941
  try {
1327
942
  const result = await this.connectorCall(connectId, "getFirmwareVersion", {});
1328
- return (0, import_hwk_adapter_core3.success)(result);
943
+ return (0, import_hwk_adapter_core2.success)(result);
1329
944
  } catch (err) {
1330
945
  return this.errorToFailure(err);
1331
946
  }
@@ -1333,7 +948,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1333
948
  async getLedgerDeviceInfo(connectId) {
1334
949
  try {
1335
950
  const result = await this.connectorCall(connectId, "getDeviceInfo", {});
1336
- return (0, import_hwk_adapter_core3.success)(result);
951
+ return (0, import_hwk_adapter_core2.success)(result);
1337
952
  } catch (err) {
1338
953
  return this.errorToFailure(err);
1339
954
  }
@@ -1346,7 +961,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1346
961
  }
1347
962
  cancel(connectId) {
1348
963
  const userAbortReason = Object.assign(new Error("User aborted operation"), {
1349
- code: import_hwk_adapter_core3.HardwareErrorCode.UserAborted,
964
+ code: import_hwk_adapter_core2.HardwareErrorCode.UserAborted,
1350
965
  _tag: ERROR_TAG.UserAborted
1351
966
  });
1352
967
  this._lastCancelReason = userAbortReason;
@@ -1380,7 +995,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1380
995
  chain,
1381
996
  (method, params) => this.connectorCall(connectId, method, params, void 0, deviceId)
1382
997
  );
1383
- return (0, import_hwk_adapter_core3.success)(fingerprint);
998
+ return (0, import_hwk_adapter_core2.success)(fingerprint);
1384
999
  } catch (err) {
1385
1000
  debugError("[LedgerAdapter] getChainFingerprint error:", chain, err);
1386
1001
  return this.errorToFailure(err);
@@ -1403,7 +1018,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1403
1018
  return { success: false, expected: deviceId, actual: fingerprint };
1404
1019
  } catch (err) {
1405
1020
  const mapped = mapLedgerError(err);
1406
- if (mapped.code === import_hwk_adapter_core3.HardwareErrorCode.WrongApp || mapped.code === import_hwk_adapter_core3.HardwareErrorCode.DeviceLocked) {
1021
+ if (mapped.code === import_hwk_adapter_core2.HardwareErrorCode.WrongApp || mapped.code === import_hwk_adapter_core2.HardwareErrorCode.DeviceLocked) {
1407
1022
  return { success: true };
1408
1023
  }
1409
1024
  throw err;
@@ -1428,7 +1043,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1428
1043
  const result = await callMethod("btcGetMasterFingerprint", {});
1429
1044
  return result.masterFingerprint;
1430
1045
  }
1431
- const path = import_hwk_adapter_core3.CHAIN_FINGERPRINT_PATHS[chain];
1046
+ const path = import_hwk_adapter_core2.CHAIN_FINGERPRINT_PATHS[chain];
1432
1047
  let address;
1433
1048
  if (chain === "evm") {
1434
1049
  address = (await callMethod("evmGetAddress", { path, showOnDevice: false })).address.toLowerCase();
@@ -1439,7 +1054,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1439
1054
  } else {
1440
1055
  throw new Error(`Unsupported chain for fingerprint: ${chain}`);
1441
1056
  }
1442
- return (0, import_hwk_adapter_core3.deriveDeviceFingerprint)(address);
1057
+ return (0, import_hwk_adapter_core2.deriveDeviceFingerprint)(address);
1443
1058
  }
1444
1059
  // Ledger WebUSB won't expose a locked device, so we can't auto-detect unlock.
1445
1060
  // The user must press Confirm after unlocking, which triggers a search retry.
@@ -1451,10 +1066,10 @@ var _LedgerAdapter = class _LedgerAdapter {
1451
1066
  _LedgerAdapter._throwIfAborted(signal);
1452
1067
  }
1453
1068
  const waitPromise = this._uiRegistry.wait(
1454
- import_hwk_adapter_core3.UI_REQUEST.REQUEST_DEVICE_CONNECT
1069
+ import_hwk_adapter_core2.UI_REQUEST.REQUEST_DEVICE_CONNECT
1455
1070
  );
1456
- this.emitter.emit(import_hwk_adapter_core3.UI_REQUEST.REQUEST_DEVICE_CONNECT, {
1457
- type: import_hwk_adapter_core3.UI_REQUEST.REQUEST_DEVICE_CONNECT,
1071
+ this.emitter.emit(import_hwk_adapter_core2.UI_REQUEST.REQUEST_DEVICE_CONNECT, {
1072
+ type: import_hwk_adapter_core2.UI_REQUEST.REQUEST_DEVICE_CONNECT,
1458
1073
  payload: {
1459
1074
  vendor: "ledger",
1460
1075
  reason: "device-not-found",
@@ -1465,7 +1080,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1465
1080
  try {
1466
1081
  if (signal) {
1467
1082
  const onAbort = () => {
1468
- this._uiRegistry.cancel(import_hwk_adapter_core3.UI_REQUEST.REQUEST_DEVICE_CONNECT);
1083
+ this._uiRegistry.cancel(import_hwk_adapter_core2.UI_REQUEST.REQUEST_DEVICE_CONNECT);
1469
1084
  };
1470
1085
  signal.addEventListener("abort", onAbort, { once: true });
1471
1086
  try {
@@ -1477,20 +1092,20 @@ var _LedgerAdapter = class _LedgerAdapter {
1477
1092
  payload = await waitPromise;
1478
1093
  }
1479
1094
  } catch (err) {
1480
- this.emitter.emit(import_hwk_adapter_core3.UI_REQUEST.CLOSE_UI_WINDOW, {
1481
- type: import_hwk_adapter_core3.UI_REQUEST.CLOSE_UI_WINDOW,
1095
+ this.emitter.emit(import_hwk_adapter_core2.UI_REQUEST.CLOSE_UI_WINDOW, {
1096
+ type: import_hwk_adapter_core2.UI_REQUEST.CLOSE_UI_WINDOW,
1482
1097
  payload: {}
1483
1098
  });
1484
1099
  throw Object.assign(new Error("User cancelled Ledger connection"), {
1485
1100
  _tag: ERROR_TAG.UserAborted,
1486
- code: import_hwk_adapter_core3.HardwareErrorCode.UserAborted,
1101
+ code: import_hwk_adapter_core2.HardwareErrorCode.UserAborted,
1487
1102
  cause: err
1488
1103
  });
1489
1104
  }
1490
1105
  if (!payload?.confirmed) {
1491
1106
  throw Object.assign(new Error("User cancelled Ledger connection"), {
1492
1107
  _tag: ERROR_TAG.UserAborted,
1493
- code: import_hwk_adapter_core3.HardwareErrorCode.UserAborted
1108
+ code: import_hwk_adapter_core2.HardwareErrorCode.UserAborted
1494
1109
  });
1495
1110
  }
1496
1111
  await new Promise((resolve) => {
@@ -1520,10 +1135,10 @@ var _LedgerAdapter = class _LedgerAdapter {
1520
1135
  }
1521
1136
  async _waitForBtcHighIndexConfirm(path, accountIndex) {
1522
1137
  const waitPromise = this._uiRegistry.wait(
1523
- import_hwk_adapter_core3.UI_REQUEST.REQUEST_BTC_HIGH_INDEX_CONFIRM
1138
+ import_hwk_adapter_core2.UI_REQUEST.REQUEST_BTC_HIGH_INDEX_CONFIRM
1524
1139
  );
1525
- this.emitter.emit(import_hwk_adapter_core3.UI_REQUEST.REQUEST_BTC_HIGH_INDEX_CONFIRM, {
1526
- type: import_hwk_adapter_core3.UI_REQUEST.REQUEST_BTC_HIGH_INDEX_CONFIRM,
1140
+ this.emitter.emit(import_hwk_adapter_core2.UI_REQUEST.REQUEST_BTC_HIGH_INDEX_CONFIRM, {
1141
+ type: import_hwk_adapter_core2.UI_REQUEST.REQUEST_BTC_HIGH_INDEX_CONFIRM,
1527
1142
  payload: {
1528
1143
  vendor: "ledger",
1529
1144
  path,
@@ -1534,8 +1149,8 @@ var _LedgerAdapter = class _LedgerAdapter {
1534
1149
  const payload = await waitPromise;
1535
1150
  return !!payload?.confirmed;
1536
1151
  } catch (err) {
1537
- this.emitter.emit(import_hwk_adapter_core3.UI_REQUEST.CLOSE_UI_WINDOW, {
1538
- type: import_hwk_adapter_core3.UI_REQUEST.CLOSE_UI_WINDOW,
1152
+ this.emitter.emit(import_hwk_adapter_core2.UI_REQUEST.CLOSE_UI_WINDOW, {
1153
+ type: import_hwk_adapter_core2.UI_REQUEST.CLOSE_UI_WINDOW,
1539
1154
  payload: {}
1540
1155
  });
1541
1156
  return false;
@@ -1545,18 +1160,18 @@ var _LedgerAdapter = class _LedgerAdapter {
1545
1160
  // Same register-then-emit ordering as the BTC high-index gate.
1546
1161
  async _waitForInstallAppConfirm(appName) {
1547
1162
  const waitPromise = this._uiRegistry.wait(
1548
- import_hwk_adapter_core3.UI_REQUEST.REQUEST_INSTALL_APP
1163
+ import_hwk_adapter_core2.UI_REQUEST.REQUEST_INSTALL_APP
1549
1164
  );
1550
- this.emitter.emit(import_hwk_adapter_core3.UI_REQUEST.REQUEST_INSTALL_APP, {
1551
- type: import_hwk_adapter_core3.UI_REQUEST.REQUEST_INSTALL_APP,
1165
+ this.emitter.emit(import_hwk_adapter_core2.UI_REQUEST.REQUEST_INSTALL_APP, {
1166
+ type: import_hwk_adapter_core2.UI_REQUEST.REQUEST_INSTALL_APP,
1552
1167
  payload: { vendor: "ledger", appName }
1553
1168
  });
1554
1169
  try {
1555
1170
  const payload = await waitPromise;
1556
1171
  return !!payload?.confirmed;
1557
1172
  } catch (err) {
1558
- this.emitter.emit(import_hwk_adapter_core3.UI_REQUEST.CLOSE_UI_WINDOW, {
1559
- type: import_hwk_adapter_core3.UI_REQUEST.CLOSE_UI_WINDOW,
1173
+ this.emitter.emit(import_hwk_adapter_core2.UI_REQUEST.CLOSE_UI_WINDOW, {
1174
+ type: import_hwk_adapter_core2.UI_REQUEST.CLOSE_UI_WINDOW,
1560
1175
  payload: {}
1561
1176
  });
1562
1177
  return false;
@@ -1569,7 +1184,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1569
1184
  if (signal.aborted) _LedgerAdapter._throwIfAborted(signal);
1570
1185
  if (isLedgerBleConnectionType(this.connector.connectionType) && !connectId) {
1571
1186
  throw Object.assign(new Error("Ledger BLE connectId is required."), {
1572
- code: import_hwk_adapter_core3.HardwareErrorCode.DeviceNotFound
1187
+ code: import_hwk_adapter_core2.HardwareErrorCode.DeviceNotFound
1573
1188
  });
1574
1189
  }
1575
1190
  if (connectId && this._sessions.has(connectId)) return connectId;
@@ -1579,7 +1194,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1579
1194
  new Error(
1580
1195
  "Ledger USB session invariant violated: more than one session is active. Please reconnect the device."
1581
1196
  ),
1582
- { code: import_hwk_adapter_core3.HardwareErrorCode.DeviceOneDeviceOnly }
1197
+ { code: import_hwk_adapter_core2.HardwareErrorCode.DeviceOneDeviceOnly }
1583
1198
  );
1584
1199
  }
1585
1200
  return this._sessions.keys().next().value;
@@ -1621,7 +1236,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1621
1236
  let confirms = 0;
1622
1237
  while (!internalSignal.aborted) {
1623
1238
  this.emitter.emit("ui-event", {
1624
- type: import_hwk_adapter_core3.EConnectorInteraction.Searching,
1239
+ type: import_hwk_adapter_core2.EConnectorInteraction.Searching,
1625
1240
  payload: { sessionId: "" }
1626
1241
  });
1627
1242
  let devices = await this.searchDevices();
@@ -1659,7 +1274,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1659
1274
  new Error(
1660
1275
  "Device not connected after multiple attempts. Please ensure your Ledger is awake, unlocked, and in range, then try again."
1661
1276
  ),
1662
- { code: import_hwk_adapter_core3.HardwareErrorCode.DeviceNotFound }
1277
+ { code: import_hwk_adapter_core2.HardwareErrorCode.DeviceNotFound }
1663
1278
  );
1664
1279
  }
1665
1280
  await this._waitForDeviceConnect(internalSignal);
@@ -1683,7 +1298,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1683
1298
  return this._connectDeviceOrThrow(devices[0].connectId);
1684
1299
  }
1685
1300
  const err = Object.assign(new Error(`Target Ledger unavailable: ${targetConnectId}`), {
1686
- code: import_hwk_adapter_core3.HardwareErrorCode.DeviceNotFound
1301
+ code: import_hwk_adapter_core2.HardwareErrorCode.DeviceNotFound
1687
1302
  });
1688
1303
  if (isLedgerBleConnectionType(this.connector.connectionType)) {
1689
1304
  err._tag = ERROR_TAG.DeviceNotAdvertising;
@@ -1692,7 +1307,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1692
1307
  }
1693
1308
  if (isLedgerBleConnectionType(this.connector.connectionType)) {
1694
1309
  throw Object.assign(new Error("Ledger BLE connectId is required."), {
1695
- code: import_hwk_adapter_core3.HardwareErrorCode.DeviceNotFound
1310
+ code: import_hwk_adapter_core2.HardwareErrorCode.DeviceNotFound
1696
1311
  });
1697
1312
  }
1698
1313
  if (devices.length > 1) {
@@ -1700,7 +1315,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1700
1315
  }
1701
1316
  if (devices.length !== 1) {
1702
1317
  throw Object.assign(new Error("Ledger device not found."), {
1703
- code: import_hwk_adapter_core3.HardwareErrorCode.DeviceNotFound
1318
+ code: import_hwk_adapter_core2.HardwareErrorCode.DeviceNotFound
1704
1319
  });
1705
1320
  }
1706
1321
  return this._connectDeviceOrThrow(devices[0].connectId);
@@ -1738,7 +1353,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1738
1353
  */
1739
1354
  _unwrapConnectorResult(result) {
1740
1355
  if (result.success) return result.payload;
1741
- throw (0, import_hwk_adapter_core3.rehydrateConnectorError)(result.error);
1356
+ throw (0, import_hwk_adapter_core2.rehydrateConnectorError)(result.error);
1742
1357
  }
1743
1358
  /**
1744
1359
  * `connector.call` + result unwrap, optionally raced against an abort
@@ -1751,43 +1366,26 @@ var _LedgerAdapter = class _LedgerAdapter {
1751
1366
  const result = signal ? await this._abortable(signal, promise) : await promise;
1752
1367
  return this._unwrapConnectorResult(result);
1753
1368
  }
1754
- async connectorCall(connectId, method, params, fingerprint, permissionDeviceId, commonParams, installContext) {
1755
- debugLog("[LedgerAdapter][REQ]", { method, connectId: connectId || "(empty)", params });
1369
+ async connectorCall(connectId, method, params, fingerprint, permissionDeviceId, commonParams) {
1370
+ debugLog("[LedgerAdapter] connectorCall:", method, "connectId:", connectId || "(empty)");
1756
1371
  const queueKey = connectId || "__ledger_default__";
1757
- try {
1758
- const result = await this._jobQueue.enqueue(
1759
- queueKey,
1760
- async (signal) => this._runConnectorCall(
1761
- connectId,
1762
- method,
1763
- params,
1764
- signal,
1765
- fingerprint,
1766
- permissionDeviceId,
1767
- commonParams,
1768
- installContext
1769
- ),
1770
- {
1771
- label: method,
1772
- rejectIfBusy: true,
1773
- busyError: _LedgerAdapter._createDeviceBusyError(method)
1774
- }
1775
- );
1776
- debugLog("[LedgerAdapter][RES]", { method, success: true, payload: result });
1777
- return result;
1778
- } catch (err) {
1779
- const e = err;
1780
- debugLog("[LedgerAdapter][RES]", {
1372
+ return this._jobQueue.enqueue(
1373
+ queueKey,
1374
+ async (signal) => this._runConnectorCall(
1375
+ connectId,
1781
1376
  method,
1782
- success: false,
1783
- error: {
1784
- message: e?.message,
1785
- _tag: e?._tag,
1786
- code: e?.code ?? e?.errorCode
1787
- }
1788
- });
1789
- throw err;
1790
- }
1377
+ params,
1378
+ signal,
1379
+ fingerprint,
1380
+ permissionDeviceId,
1381
+ commonParams
1382
+ ),
1383
+ {
1384
+ label: method,
1385
+ rejectIfBusy: true,
1386
+ busyError: _LedgerAdapter._createDeviceBusyError(method)
1387
+ }
1388
+ );
1791
1389
  }
1792
1390
  /**
1793
1391
  * Race a promise against an abort signal. On abort, rejects with
@@ -1822,7 +1420,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1822
1420
  }
1823
1421
  }
1824
1422
  /** Actual work done under the job queue — connection, fingerprint, call, and recovery. */
1825
- async _runConnectorCall(connectId, method, params, signal, fingerprint, permissionDeviceId, commonParams, installContext) {
1423
+ async _runConnectorCall(connectId, method, params, signal, fingerprint, permissionDeviceId, commonParams) {
1826
1424
  _LedgerAdapter._throwIfAborted(signal);
1827
1425
  await this._ensureDevicePermission(
1828
1426
  connectId,
@@ -1836,7 +1434,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1836
1434
  if (gatedParams === null) {
1837
1435
  throw Object.assign(new Error("User cancelled BTC high-index confirmation"), {
1838
1436
  _tag: ERROR_TAG.UserAborted,
1839
- code: import_hwk_adapter_core3.HardwareErrorCode.UserAborted
1437
+ code: import_hwk_adapter_core2.HardwareErrorCode.UserAborted
1840
1438
  });
1841
1439
  }
1842
1440
  effectiveParams = gatedParams;
@@ -1865,7 +1463,7 @@ var _LedgerAdapter = class _LedgerAdapter {
1865
1463
  );
1866
1464
  if (!fp.success) {
1867
1465
  throw Object.assign(new Error(formatDeviceMismatchError(fp.expected, fp.actual)), {
1868
- code: import_hwk_adapter_core3.HardwareErrorCode.DeviceMismatch
1466
+ code: import_hwk_adapter_core2.HardwareErrorCode.DeviceMismatch
1869
1467
  });
1870
1468
  }
1871
1469
  }
@@ -1884,62 +1482,22 @@ var _LedgerAdapter = class _LedgerAdapter {
1884
1482
  isStuckApp: isStuckAppStateError(err)
1885
1483
  });
1886
1484
  const autoInstallApp = commonParams?.autoInstallApp ?? this._defaultAutoInstallApp;
1887
- const isAppMissing = isAppNotInstalledError(err) || err?.code === import_hwk_adapter_core3.HardwareErrorCode.AppNotInstalled;
1485
+ const isAppMissing = isAppNotInstalledError(err) || err?.code === import_hwk_adapter_core2.HardwareErrorCode.AppNotInstalled;
1888
1486
  if (autoInstallApp && isAppMissing) {
1889
- if (installContext?.deviceOutOfMemoryError) {
1890
- throw installContext.deviceOutOfMemoryError;
1891
- }
1892
1487
  const appName = err?.appName ?? mapLedgerError(err).appName;
1893
1488
  if (appName) {
1894
- if (installContext?.installAttemptedAppNames?.has(appName)) {
1895
- throw (0, import_hwk_adapter_core3.createHwkError)({
1896
- code: import_hwk_adapter_core3.HardwareErrorCode.AppNotInstalled,
1897
- message: `${appName} install reported success but the app is still missing on device`,
1898
- _tag: ERROR_TAG.AppInstallVerifyFailed,
1899
- appName
1900
- });
1901
- }
1902
1489
  const confirmed = await this._waitForInstallAppConfirm(appName);
1903
- if (!confirmed) {
1904
- throw (0, import_hwk_adapter_core3.createHwkError)({
1905
- code: import_hwk_adapter_core3.HardwareErrorCode.UserAborted,
1906
- message: `User declined to install ${appName}`,
1907
- _tag: ERROR_TAG.UserAborted,
1908
- appName
1909
- });
1910
- }
1490
+ if (!confirmed) throw err;
1911
1491
  this.emitter.emit("ui-event", {
1912
- type: import_hwk_adapter_core3.EConnectorInteraction.AppInstallProgress,
1492
+ type: import_hwk_adapter_core2.EConnectorInteraction.AppInstallProgress,
1913
1493
  payload: { connectId: resolvedConnectId, appName, progress: 0 }
1914
1494
  });
1915
- try {
1916
- await this._callConnector(sessionId, "installApp", { appName }, signal);
1917
- } catch (installErr) {
1918
- if (mapLedgerError(installErr).code === import_hwk_adapter_core3.HardwareErrorCode.DeviceOutOfMemory) {
1919
- if (installContext) {
1920
- installContext.deviceOutOfMemoryError = installErr;
1921
- }
1922
- }
1923
- throw installErr;
1924
- }
1925
- if (installContext) {
1926
- installContext.installAttemptedAppNames = installContext.installAttemptedAppNames ?? /* @__PURE__ */ new Set();
1927
- installContext.installAttemptedAppNames.add(appName);
1928
- }
1929
- this.emitter.emit(import_hwk_adapter_core3.UI_REQUEST.CLOSE_UI_WINDOW, {
1930
- type: import_hwk_adapter_core3.UI_REQUEST.CLOSE_UI_WINDOW,
1495
+ await this._callConnector(sessionId, "installApp", { appName }, signal);
1496
+ this.emitter.emit(import_hwk_adapter_core2.UI_REQUEST.CLOSE_UI_WINDOW, {
1497
+ type: import_hwk_adapter_core2.UI_REQUEST.CLOSE_UI_WINDOW,
1931
1498
  payload: {}
1932
1499
  });
1933
- return await this._runConnectorCall(
1934
- resolvedConnectId,
1935
- method,
1936
- effectiveParams,
1937
- signal,
1938
- fingerprint,
1939
- permissionDeviceId,
1940
- commonParams,
1941
- installContext
1942
- );
1500
+ return await this._callConnector(sessionId, method, effectiveParams, signal);
1943
1501
  }
1944
1502
  }
1945
1503
  if (isStuckAppStateError(err)) {
@@ -2014,7 +1572,7 @@ var _LedgerAdapter = class _LedgerAdapter {
2014
1572
  );
2015
1573
  if (!fp.success) {
2016
1574
  throw Object.assign(new Error(formatDeviceMismatchError(fp.expected, fp.actual)), {
2017
- code: import_hwk_adapter_core3.HardwareErrorCode.DeviceMismatch
1575
+ code: import_hwk_adapter_core2.HardwareErrorCode.DeviceMismatch
2018
1576
  });
2019
1577
  }
2020
1578
  }
@@ -2049,7 +1607,7 @@ var _LedgerAdapter = class _LedgerAdapter {
2049
1607
  this.connector.reset();
2050
1608
  const codeNum = err?.code;
2051
1609
  throw Object.assign(err, {
2052
- code: codeNum ?? import_hwk_adapter_core3.HardwareErrorCode.DeviceDisconnected
1610
+ code: codeNum ?? import_hwk_adapter_core2.HardwareErrorCode.DeviceDisconnected
2053
1611
  });
2054
1612
  }
2055
1613
  throw err;
@@ -2083,7 +1641,7 @@ var _LedgerAdapter = class _LedgerAdapter {
2083
1641
  );
2084
1642
  if (!fp.success) {
2085
1643
  throw Object.assign(new Error(formatDeviceMismatchError(fp.expected, fp.actual)), {
2086
- code: import_hwk_adapter_core3.HardwareErrorCode.DeviceMismatch
1644
+ code: import_hwk_adapter_core2.HardwareErrorCode.DeviceMismatch
2087
1645
  });
2088
1646
  }
2089
1647
  }
@@ -2140,7 +1698,7 @@ var _LedgerAdapter = class _LedgerAdapter {
2140
1698
  );
2141
1699
  if (!fp.success) {
2142
1700
  throw Object.assign(new Error(formatDeviceMismatchError(fp.expected, fp.actual)), {
2143
- code: import_hwk_adapter_core3.HardwareErrorCode.DeviceMismatch
1701
+ code: import_hwk_adapter_core2.HardwareErrorCode.DeviceMismatch
2144
1702
  });
2145
1703
  }
2146
1704
  }
@@ -2181,7 +1739,7 @@ var _LedgerAdapter = class _LedgerAdapter {
2181
1739
  );
2182
1740
  if (!fp.success) {
2183
1741
  throw Object.assign(new Error(formatDeviceMismatchError(fp.expected, fp.actual)), {
2184
- code: import_hwk_adapter_core3.HardwareErrorCode.DeviceMismatch
1742
+ code: import_hwk_adapter_core2.HardwareErrorCode.DeviceMismatch
2185
1743
  });
2186
1744
  }
2187
1745
  }
@@ -2206,16 +1764,16 @@ var _LedgerAdapter = class _LedgerAdapter {
2206
1764
  }
2207
1765
  const transportType = this.activeTransport ?? "hid";
2208
1766
  const waitPromise = this._uiRegistry.wait(
2209
- import_hwk_adapter_core3.UI_REQUEST.REQUEST_DEVICE_PERMISSION,
1767
+ import_hwk_adapter_core2.UI_REQUEST.REQUEST_DEVICE_PERMISSION,
2210
1768
  { timeoutMs: 6e4 }
2211
1769
  );
2212
- this.emitter.emit(import_hwk_adapter_core3.UI_REQUEST.REQUEST_DEVICE_PERMISSION, {
2213
- type: import_hwk_adapter_core3.UI_REQUEST.REQUEST_DEVICE_PERMISSION,
1770
+ this.emitter.emit(import_hwk_adapter_core2.UI_REQUEST.REQUEST_DEVICE_PERMISSION, {
1771
+ type: import_hwk_adapter_core2.UI_REQUEST.REQUEST_DEVICE_PERMISSION,
2214
1772
  payload: { transportType, connectId, deviceId }
2215
1773
  });
2216
1774
  let response;
2217
1775
  const onAbort = () => {
2218
- this._uiRegistry.cancel(import_hwk_adapter_core3.UI_REQUEST.REQUEST_DEVICE_PERMISSION);
1776
+ this._uiRegistry.cancel(import_hwk_adapter_core2.UI_REQUEST.REQUEST_DEVICE_PERMISSION);
2219
1777
  };
2220
1778
  try {
2221
1779
  signal?.addEventListener("abort", onAbort, { once: true });
@@ -2224,14 +1782,14 @@ var _LedgerAdapter = class _LedgerAdapter {
2224
1782
  if (signal?.aborted) {
2225
1783
  _LedgerAdapter._throwIfAborted(signal);
2226
1784
  }
2227
- if (err?._tag === import_hwk_adapter_core3.UI_REQUEST_PREEMPTED_TAG) {
2228
- this.emitter.emit(import_hwk_adapter_core3.UI_REQUEST.CLOSE_UI_WINDOW, {
2229
- type: import_hwk_adapter_core3.UI_REQUEST.CLOSE_UI_WINDOW,
1785
+ if (err?._tag === import_hwk_adapter_core2.UI_REQUEST_PREEMPTED_TAG) {
1786
+ this.emitter.emit(import_hwk_adapter_core2.UI_REQUEST.CLOSE_UI_WINDOW, {
1787
+ type: import_hwk_adapter_core2.UI_REQUEST.CLOSE_UI_WINDOW,
2230
1788
  payload: {}
2231
1789
  });
2232
1790
  throw Object.assign(new Error("Device permission request superseded"), {
2233
1791
  _tag: ERROR_TAG.UserAborted,
2234
- code: import_hwk_adapter_core3.HardwareErrorCode.UserAborted,
1792
+ code: import_hwk_adapter_core2.HardwareErrorCode.UserAborted,
2235
1793
  cause: err
2236
1794
  });
2237
1795
  }
@@ -2242,7 +1800,7 @@ var _LedgerAdapter = class _LedgerAdapter {
2242
1800
  const { granted, reason, message } = response;
2243
1801
  if (!granted) {
2244
1802
  throw Object.assign(new Error(message ?? "Device permission denied"), {
2245
- code: import_hwk_adapter_core3.HardwareErrorCode.DevicePermissionDenied,
1803
+ code: import_hwk_adapter_core2.HardwareErrorCode.DevicePermissionDenied,
2246
1804
  reason
2247
1805
  });
2248
1806
  }
@@ -2256,7 +1814,7 @@ var _LedgerAdapter = class _LedgerAdapter {
2256
1814
  const tag = err && typeof err === "object" ? err._tag : void 0;
2257
1815
  if (err && typeof err === "object" && "code" in err && typeof err.code === "number") {
2258
1816
  const e = err;
2259
- const params = e.code === import_hwk_adapter_core3.HardwareErrorCode.DevicePermissionDenied && e.reason ? { permissionDeniedReason: e.reason } : e.params;
1817
+ const params = e.code === import_hwk_adapter_core2.HardwareErrorCode.DevicePermissionDenied && e.reason ? { permissionDeniedReason: e.reason } : e.params;
2260
1818
  return ledgerFailure(e.code, e.message ?? "Unknown error", e.appName, tag, params);
2261
1819
  }
2262
1820
  const mapped = mapLedgerError(err);
@@ -2303,13 +1861,10 @@ _LedgerAdapter.STUCK_APP_RETRY_DELAY_MS = 500;
2303
1861
  // Confirm but device never shows up / never unlocks), throw DeviceNotFound
2304
1862
  // instead of looping forever.
2305
1863
  _LedgerAdapter.MAX_DOCONNECT_CONFIRMS = 3;
2306
- // Throttle AppInstallProgress by progress delta — DMK streams much faster
2307
- // than UIs need. Final frame (progress >= 1) always passes.
2308
- _LedgerAdapter.APP_INSTALL_PROGRESS_MIN_DELTA = 0.05;
2309
1864
  var LedgerAdapter = _LedgerAdapter;
2310
1865
 
2311
1866
  // src/connector/LedgerConnectorBase.ts
2312
- var import_hwk_adapter_core13 = require("@onekeyfe/hwk-adapter-core");
1867
+ var import_hwk_adapter_core12 = require("@onekeyfe/hwk-adapter-core");
2313
1868
 
2314
1869
  // src/device/LedgerDeviceManager.ts
2315
1870
  var LedgerDeviceManager = class {
@@ -2582,7 +2137,7 @@ var import_device_signer_kit_ethereum = require("@ledgerhq/device-signer-kit-eth
2582
2137
  var import_context_module = require("@ledgerhq/context-module");
2583
2138
 
2584
2139
  // src/signer/SignerEth.ts
2585
- var import_hwk_adapter_core4 = require("@onekeyfe/hwk-adapter-core");
2140
+ var import_hwk_adapter_core3 = require("@onekeyfe/hwk-adapter-core");
2586
2141
 
2587
2142
  // src/signer/deviceActionToPromise.ts
2588
2143
  var import_device_management_kit = require("@ledgerhq/device-management-kit");
@@ -2795,7 +2350,7 @@ var SignerEth = class {
2795
2350
  );
2796
2351
  }
2797
2352
  async signTransaction(derivationPath, serializedTxHex) {
2798
- const action = this._sdk.signTransaction(derivationPath, (0, import_hwk_adapter_core4.hexToBytes)(serializedTxHex));
2353
+ const action = this._sdk.signTransaction(derivationPath, (0, import_hwk_adapter_core3.hexToBytes)(serializedTxHex));
2799
2354
  return deviceActionToPromise(
2800
2355
  action,
2801
2356
  this.onInteraction,
@@ -2804,7 +2359,7 @@ var SignerEth = class {
2804
2359
  );
2805
2360
  }
2806
2361
  async signMessage(derivationPath, message) {
2807
- const action = this._sdk.signMessage(derivationPath, (0, import_hwk_adapter_core4.hexToBytes)(message));
2362
+ const action = this._sdk.signMessage(derivationPath, (0, import_hwk_adapter_core3.hexToBytes)(message));
2808
2363
  return deviceActionToPromise(
2809
2364
  action,
2810
2365
  this.onInteraction,
@@ -2864,23 +2419,23 @@ var SignerManager = class _SignerManager {
2864
2419
  };
2865
2420
 
2866
2421
  // src/connector/chains/evm.ts
2867
- var import_hwk_adapter_core6 = require("@onekeyfe/hwk-adapter-core");
2422
+ var import_hwk_adapter_core5 = require("@onekeyfe/hwk-adapter-core");
2868
2423
 
2869
2424
  // src/connector/chains/utils.ts
2870
- var import_hwk_adapter_core5 = require("@onekeyfe/hwk-adapter-core");
2425
+ var import_hwk_adapter_core4 = require("@onekeyfe/hwk-adapter-core");
2871
2426
  function normalizePath(path) {
2872
2427
  return path.startsWith("m/") ? path.slice(2) : path;
2873
2428
  }
2874
2429
  function collapseSignerInteraction(interaction) {
2875
2430
  switch (interaction) {
2876
2431
  case "confirm-open-app":
2877
- return import_hwk_adapter_core5.EConnectorInteraction.ConfirmOpenApp;
2432
+ return import_hwk_adapter_core4.EConnectorInteraction.ConfirmOpenApp;
2878
2433
  case "unlock-device":
2879
- return import_hwk_adapter_core5.EConnectorInteraction.UnlockDevice;
2434
+ return import_hwk_adapter_core4.EConnectorInteraction.UnlockDevice;
2880
2435
  case "interaction-complete":
2881
- return import_hwk_adapter_core5.EConnectorInteraction.InteractionComplete;
2436
+ return import_hwk_adapter_core4.EConnectorInteraction.InteractionComplete;
2882
2437
  default:
2883
- return import_hwk_adapter_core5.EConnectorInteraction.ConfirmOnDevice;
2438
+ return import_hwk_adapter_core4.EConnectorInteraction.ConfirmOnDevice;
2884
2439
  }
2885
2440
  }
2886
2441
 
@@ -2906,7 +2461,7 @@ async function evmSignTransaction(ctx, sessionId, params) {
2906
2461
  new Error(
2907
2462
  "Ledger requires a pre-serialized transaction (serializedTx). Provide an RLP-encoded hex string."
2908
2463
  ),
2909
- { code: import_hwk_adapter_core6.HardwareErrorCode.InvalidParams }
2464
+ { code: import_hwk_adapter_core5.HardwareErrorCode.InvalidParams }
2910
2465
  );
2911
2466
  }
2912
2467
  const signer = await _getEthSigner(ctx, sessionId);
@@ -2915,8 +2470,8 @@ async function evmSignTransaction(ctx, sessionId, params) {
2915
2470
  const result = await signer.signTransaction(path, params.serializedTx);
2916
2471
  return {
2917
2472
  v: `0x${result.v.toString(16)}`,
2918
- r: (0, import_hwk_adapter_core6.padHex64)(result.r),
2919
- s: (0, import_hwk_adapter_core6.padHex64)(result.s)
2473
+ r: (0, import_hwk_adapter_core5.padHex64)(result.r),
2474
+ s: (0, import_hwk_adapter_core5.padHex64)(result.s)
2920
2475
  };
2921
2476
  } catch (err) {
2922
2477
  ctx.invalidateSession(sessionId);
@@ -2930,8 +2485,8 @@ async function evmSignMessage(ctx, sessionId, params) {
2930
2485
  const path = normalizePath(params.path);
2931
2486
  try {
2932
2487
  const result = await signer.signMessage(path, params.message);
2933
- const rHex = (0, import_hwk_adapter_core6.stripHex)(result.r).padStart(64, "0");
2934
- const sHex = (0, import_hwk_adapter_core6.stripHex)(result.s).padStart(64, "0");
2488
+ const rHex = (0, import_hwk_adapter_core5.stripHex)(result.r).padStart(64, "0");
2489
+ const sHex = (0, import_hwk_adapter_core5.stripHex)(result.s).padStart(64, "0");
2935
2490
  const vHex = result.v.toString(16).padStart(2, "0");
2936
2491
  return { signature: `0x${rHex}${sHex}${vHex}` };
2937
2492
  } catch (err) {
@@ -2947,15 +2502,15 @@ async function evmSignTypedData(ctx, sessionId, params) {
2947
2502
  new Error(
2948
2503
  'Ledger does not support hash-only EIP-712 signing. Use mode "full" with the complete typed data structure.'
2949
2504
  ),
2950
- { code: import_hwk_adapter_core6.HardwareErrorCode.MethodNotSupported }
2505
+ { code: import_hwk_adapter_core5.HardwareErrorCode.MethodNotSupported }
2951
2506
  );
2952
2507
  }
2953
2508
  const signer = await _getEthSigner(ctx, sessionId);
2954
2509
  const path = normalizePath(params.path);
2955
2510
  try {
2956
2511
  const result = await signer.signTypedData(path, params.data);
2957
- const rHex = (0, import_hwk_adapter_core6.stripHex)(result.r).padStart(64, "0");
2958
- const sHex = (0, import_hwk_adapter_core6.stripHex)(result.s).padStart(64, "0");
2512
+ const rHex = (0, import_hwk_adapter_core5.stripHex)(result.r).padStart(64, "0");
2513
+ const sHex = (0, import_hwk_adapter_core5.stripHex)(result.s).padStart(64, "0");
2959
2514
  const vHex = result.v.toString(16).padStart(2, "0");
2960
2515
  return { signature: `0x${rHex}${sHex}${vHex}` };
2961
2516
  } catch (err) {
@@ -2982,13 +2537,13 @@ async function _getEthSigner(ctx, sessionId) {
2982
2537
  }
2983
2538
 
2984
2539
  // src/connector/chains/btc.ts
2985
- var import_hwk_adapter_core8 = require("@onekeyfe/hwk-adapter-core");
2540
+ var import_hwk_adapter_core7 = require("@onekeyfe/hwk-adapter-core");
2986
2541
  var import_bitcoinjs_lib = require("bitcoinjs-lib");
2987
2542
 
2988
2543
  // src/signer/SignerBtc.ts
2989
- var import_hwk_adapter_core7 = require("@onekeyfe/hwk-adapter-core");
2544
+ var import_hwk_adapter_core6 = require("@onekeyfe/hwk-adapter-core");
2990
2545
  function hexToUtf8(hex) {
2991
- return new TextDecoder().decode((0, import_hwk_adapter_core7.hexToBytes)(hex));
2546
+ return new TextDecoder().decode((0, import_hwk_adapter_core6.hexToBytes)(hex));
2992
2547
  }
2993
2548
  var INTERACTIVE_TIMEOUT_MS2 = 5 * 6e4;
2994
2549
  var SignerBtc = class {
@@ -3103,7 +2658,7 @@ function _purposeToTemplate(purpose, DDT) {
3103
2658
  return DDT.TAPROOT;
3104
2659
  default:
3105
2660
  throw Object.assign(new Error(`Unsupported BTC purpose: m/${purpose ?? "<undefined>"}'`), {
3106
- code: import_hwk_adapter_core8.HardwareErrorCode.InvalidParams
2661
+ code: import_hwk_adapter_core7.HardwareErrorCode.InvalidParams
3107
2662
  });
3108
2663
  }
3109
2664
  }
@@ -3159,7 +2714,7 @@ async function btcSignTransaction(ctx, sessionId, params) {
3159
2714
  if (!params.psbt) {
3160
2715
  throw Object.assign(
3161
2716
  new Error("Ledger requires PSBT format for BTC transaction signing. Provide params.psbt."),
3162
- { code: import_hwk_adapter_core8.HardwareErrorCode.InvalidParams }
2717
+ { code: import_hwk_adapter_core7.HardwareErrorCode.InvalidParams }
3163
2718
  );
3164
2719
  }
3165
2720
  const btcSigner = await _createBtcSigner(ctx, sessionId);
@@ -3173,7 +2728,7 @@ async function btcSignTransaction(ctx, sessionId, params) {
3173
2728
  debugLog("[LedgerConnector] btcSignTransaction wallet:", { path, purpose, template });
3174
2729
  const wallet = new DefaultWallet(path, template);
3175
2730
  const signedTxHex = await btcSigner.signTransaction(wallet, params.psbt);
3176
- return { serializedTx: (0, import_hwk_adapter_core8.stripHex)(signedTxHex) };
2731
+ return { serializedTx: (0, import_hwk_adapter_core7.stripHex)(signedTxHex) };
3177
2732
  } catch (err) {
3178
2733
  ctx.invalidateSession(sessionId);
3179
2734
  throw ctx.wrapError(err);
@@ -3184,7 +2739,7 @@ async function btcSignTransaction(ctx, sessionId, params) {
3184
2739
  async function btcSignPsbt(ctx, sessionId, params) {
3185
2740
  if (!params.psbt) {
3186
2741
  throw Object.assign(new Error("btcSignPsbt requires params.psbt"), {
3187
- code: import_hwk_adapter_core8.HardwareErrorCode.InvalidParams
2742
+ code: import_hwk_adapter_core7.HardwareErrorCode.InvalidParams
3188
2743
  });
3189
2744
  }
3190
2745
  const btcSigner = await _createBtcSigner(ctx, sessionId);
@@ -3214,8 +2769,8 @@ async function btcSignMessage(ctx, sessionId, params) {
3214
2769
  try {
3215
2770
  const result = await btcSigner.signMessage(path, params.message);
3216
2771
  const vHex = result.v.toString(16).padStart(2, "0");
3217
- const rHex = (0, import_hwk_adapter_core8.stripHex)(result.r).padStart(64, "0");
3218
- const sHex = (0, import_hwk_adapter_core8.stripHex)(result.s).padStart(64, "0");
2772
+ const rHex = (0, import_hwk_adapter_core7.stripHex)(result.r).padStart(64, "0");
2773
+ const sHex = (0, import_hwk_adapter_core7.stripHex)(result.s).padStart(64, "0");
3219
2774
  return { signature: `${vHex}${rHex}${sHex}` };
3220
2775
  } catch (err) {
3221
2776
  ctx.invalidateSession(sessionId);
@@ -3315,7 +2870,7 @@ function _applySignaturesToPsbt(psbtHex, signatures) {
3315
2870
  }
3316
2871
 
3317
2872
  // src/connector/chains/sol.ts
3318
- var import_hwk_adapter_core9 = require("@onekeyfe/hwk-adapter-core");
2873
+ var import_hwk_adapter_core8 = require("@onekeyfe/hwk-adapter-core");
3319
2874
 
3320
2875
  // src/signer/SignerSol.ts
3321
2876
  var SignerSol = class {
@@ -3383,10 +2938,10 @@ async function solGetAddress(ctx, sessionId, params) {
3383
2938
  async function solSignTransaction(ctx, sessionId, params) {
3384
2939
  const solSigner = await _createSolSigner(ctx, sessionId);
3385
2940
  const path = normalizePath(params.path);
3386
- const txBytes = (0, import_hwk_adapter_core9.hexToBytes)(params.serializedTx);
2941
+ const txBytes = (0, import_hwk_adapter_core8.hexToBytes)(params.serializedTx);
3387
2942
  try {
3388
2943
  const result = await solSigner.signTransaction(path, txBytes);
3389
- return { signature: (0, import_hwk_adapter_core9.bytesToHex)(result) };
2944
+ return { signature: (0, import_hwk_adapter_core8.bytesToHex)(result) };
3390
2945
  } catch (err) {
3391
2946
  ctx.invalidateSession(sessionId);
3392
2947
  throw ctx.wrapError(err);
@@ -3397,7 +2952,7 @@ async function solSignTransaction(ctx, sessionId, params) {
3397
2952
  async function solSignMessage(ctx, sessionId, params) {
3398
2953
  const solSigner = await _createSolSigner(ctx, sessionId);
3399
2954
  const path = normalizePath(params.path);
3400
- const messageBytes = (0, import_hwk_adapter_core9.hexToBytes)(params.message);
2955
+ const messageBytes = (0, import_hwk_adapter_core8.hexToBytes)(params.message);
3401
2956
  try {
3402
2957
  const result = await solSigner.signMessage(path, messageBytes);
3403
2958
  return { signature: result.signature };
@@ -3429,15 +2984,15 @@ async function _createSolSigner(ctx, sessionId) {
3429
2984
  }
3430
2985
 
3431
2986
  // src/connector/chains/tron.ts
3432
- var import_hwk_adapter_core12 = require("@onekeyfe/hwk-adapter-core");
2987
+ var import_hwk_adapter_core11 = require("@onekeyfe/hwk-adapter-core");
3433
2988
  var import_hw_app_trx = __toESM(require("@ledgerhq/hw-app-trx"));
3434
2989
 
3435
2990
  // src/connector/chains/legacyChainCall.ts
3436
- var import_hwk_adapter_core11 = require("@onekeyfe/hwk-adapter-core");
2991
+ var import_hwk_adapter_core10 = require("@onekeyfe/hwk-adapter-core");
3437
2992
 
3438
2993
  // src/app/AppManager.ts
3439
2994
  var import_device_management_kit2 = require("@ledgerhq/device-management-kit");
3440
- var import_hwk_adapter_core10 = require("@onekeyfe/hwk-adapter-core");
2995
+ var import_hwk_adapter_core9 = require("@onekeyfe/hwk-adapter-core");
3441
2996
  var APP_NAME_MAP = {
3442
2997
  ETH: "Ethereum",
3443
2998
  BTC: "Bitcoin",
@@ -3546,7 +3101,7 @@ var AppManager = class {
3546
3101
  debugLog("[AppManager] openApp failed:", appName, "statusCode:", statusCode);
3547
3102
  throw Object.assign(new Error(`Failed to open "${appName}"`), {
3548
3103
  _tag: ERROR_TAG.OpenAppCommand,
3549
- code: hasStatusCode2 ? void 0 : import_hwk_adapter_core10.HardwareErrorCode.AppNotInstalled,
3104
+ code: hasStatusCode2 ? void 0 : import_hwk_adapter_core9.HardwareErrorCode.AppNotInstalled,
3550
3105
  errorCode: String(statusCode ?? ""),
3551
3106
  statusCode,
3552
3107
  appName
@@ -3602,14 +3157,14 @@ async function withLegacyChainCall(ctx, sessionId, options, action) {
3602
3157
  const onAppOpenPrompt = () => {
3603
3158
  openAppPromptShown = true;
3604
3159
  ctx.emit("ui-event", {
3605
- type: import_hwk_adapter_core11.EConnectorInteraction.ConfirmOpenApp,
3160
+ type: import_hwk_adapter_core10.EConnectorInteraction.ConfirmOpenApp,
3606
3161
  payload: { sessionId }
3607
3162
  });
3608
3163
  };
3609
3164
  const closeOpenAppUiIfShown = () => {
3610
3165
  if (openAppPromptShown) {
3611
3166
  ctx.emit("ui-event", {
3612
- type: import_hwk_adapter_core11.EConnectorInteraction.InteractionComplete,
3167
+ type: import_hwk_adapter_core10.EConnectorInteraction.InteractionComplete,
3613
3168
  payload: { sessionId }
3614
3169
  });
3615
3170
  openAppPromptShown = false;
@@ -3630,7 +3185,7 @@ async function withLegacyChainCall(ctx, sessionId, options, action) {
3630
3185
  let confirmEmitted = false;
3631
3186
  if (needsConfirmation) {
3632
3187
  ctx.emit("ui-event", {
3633
- type: import_hwk_adapter_core11.EConnectorInteraction.ConfirmOnDevice,
3188
+ type: import_hwk_adapter_core10.EConnectorInteraction.ConfirmOnDevice,
3634
3189
  payload: { sessionId }
3635
3190
  });
3636
3191
  confirmEmitted = true;
@@ -3640,7 +3195,7 @@ async function withLegacyChainCall(ctx, sessionId, options, action) {
3640
3195
  } finally {
3641
3196
  if (confirmEmitted || openAppPromptShown) {
3642
3197
  ctx.emit("ui-event", {
3643
- type: import_hwk_adapter_core11.EConnectorInteraction.InteractionComplete,
3198
+ type: import_hwk_adapter_core10.EConnectorInteraction.InteractionComplete,
3644
3199
  payload: { sessionId }
3645
3200
  });
3646
3201
  openAppPromptShown = false;
@@ -3728,7 +3283,7 @@ async function tronSignTransaction(ctx, sessionId, params) {
3728
3283
  if (!params.rawTxHex) {
3729
3284
  throw Object.assign(
3730
3285
  new Error("TRON signing requires a protobuf-encoded raw transaction hex (rawTxHex)."),
3731
- { code: import_hwk_adapter_core12.HardwareErrorCode.InvalidParams }
3286
+ { code: import_hwk_adapter_core11.HardwareErrorCode.InvalidParams }
3732
3287
  );
3733
3288
  }
3734
3289
  const path = normalizePath(params.path);
@@ -3889,22 +3444,6 @@ var DeviceApps = class {
3889
3444
  );
3890
3445
  return result.filter((a) => a !== null).map(applicationToMetadata);
3891
3446
  }
3892
- /** Installed app names via ListApps APDU. Offline (no manager-api), but still requires unlock + dashboard. */
3893
- async listInstalledNames(options) {
3894
- const action = this._dmk.executeDeviceAction({
3895
- sessionId: this._sessionId,
3896
- deviceAction: new this._ledgerKit.ListAppsDeviceAction({
3897
- input: { unlockTimeout: options?.unlockTimeout }
3898
- })
3899
- });
3900
- const result = await deviceActionToPromise(
3901
- action,
3902
- this.onInteraction,
3903
- void 0,
3904
- this.onRegisterCanceller
3905
- );
3906
- return result.map((entry) => entry?.appName).filter((name) => typeof name === "string" && name.length > 0);
3907
- }
3908
3447
  // Catalog lookup via custom device action — DMK has no typed wrapper for this.
3909
3448
  async listAvailable() {
3910
3449
  const customAction = new ListAvailableAppsDeviceAction({
@@ -4045,7 +3584,7 @@ var METHOD_PREFIX_TO_APP_NAME = {
4045
3584
  tron: "Tron"
4046
3585
  };
4047
3586
  var HARDWARE_ERROR_CODE_VALUES = new Set(
4048
- Object.values(import_hwk_adapter_core13.HardwareErrorCode).filter((value) => typeof value === "number")
3587
+ Object.values(import_hwk_adapter_core12.HardwareErrorCode).filter((value) => typeof value === "number")
4049
3588
  );
4050
3589
  var BLE_CONNECT_SCAN_TIMEOUT_MS = 1500;
4051
3590
  async function defaultLedgerKitImporter(pkg) {
@@ -4216,7 +3755,7 @@ var LedgerConnectorBase = class {
4216
3755
  `Ledger BLE connect did not return within ${HANG_CEILING_MS / 6e4}min \u2014 DMK hang fallback.`
4217
3756
  );
4218
3757
  err._tag = ERROR_TAG.BlePairingTimeout;
4219
- err.code = import_hwk_adapter_core13.HardwareErrorCode.BlePairingTimeout;
3758
+ err.code = import_hwk_adapter_core12.HardwareErrorCode.BlePairingTimeout;
4220
3759
  reject(err);
4221
3760
  }, HANG_CEILING_MS);
4222
3761
  });
@@ -4249,7 +3788,7 @@ var LedgerConnectorBase = class {
4249
3788
  "Ledger device is not currently advertising. Wake up and unlock the device, keep it nearby, then try again."
4250
3789
  );
4251
3790
  err._tag = ERROR_TAG.DeviceNotAdvertising;
4252
- err.code = import_hwk_adapter_core13.HardwareErrorCode.DeviceNotFound;
3791
+ err.code = import_hwk_adapter_core12.HardwareErrorCode.DeviceNotFound;
4253
3792
  throw err;
4254
3793
  };
4255
3794
  const doConnect = async (path) => {
@@ -4313,7 +3852,7 @@ var LedgerConnectorBase = class {
4313
3852
  "Ledger Bluetooth pairing failed. Make sure the device is unlocked and nearby, then try again."
4314
3853
  );
4315
3854
  wrapped._tag = ERROR_TAG.BleGattBondingFailed;
4316
- wrapped.code = import_hwk_adapter_core13.HardwareErrorCode.BlePairingTimeout;
3855
+ wrapped.code = import_hwk_adapter_core12.HardwareErrorCode.BlePairingTimeout;
4317
3856
  wrapped.originalError = err;
4318
3857
  throw wrapped;
4319
3858
  }
@@ -4391,7 +3930,7 @@ var LedgerConnectorBase = class {
4391
3930
  this._unwatchSessionState(sessionId);
4392
3931
  this._signerManager?.invalidate(sessionId);
4393
3932
  this._cancellers.get(sessionId)?.({
4394
- code: import_hwk_adapter_core13.HardwareErrorCode.DeviceDisconnected,
3933
+ code: import_hwk_adapter_core12.HardwareErrorCode.DeviceDisconnected,
4395
3934
  tag: "DeviceDisconnected",
4396
3935
  message: "Device disconnected"
4397
3936
  });
@@ -4415,9 +3954,9 @@ var LedgerConnectorBase = class {
4415
3954
  if (isAppStuckByApdu(err)) {
4416
3955
  return {
4417
3956
  success: false,
4418
- error: (0, import_hwk_adapter_core13.serializeConnectorError)(
3957
+ error: (0, import_hwk_adapter_core12.serializeConnectorError)(
4419
3958
  Object.assign(new Error("Ledger app is unresponsive"), {
4420
- code: import_hwk_adapter_core13.HardwareErrorCode.DeviceAppStuck,
3959
+ code: import_hwk_adapter_core12.HardwareErrorCode.DeviceAppStuck,
4421
3960
  _tag: ERROR_TAG.DeviceAppStuck,
4422
3961
  originalError: err
4423
3962
  })
@@ -4427,16 +3966,16 @@ var LedgerConnectorBase = class {
4427
3966
  if (isTransportStuck(err)) {
4428
3967
  return {
4429
3968
  success: false,
4430
- error: (0, import_hwk_adapter_core13.serializeConnectorError)(
3969
+ error: (0, import_hwk_adapter_core12.serializeConnectorError)(
4431
3970
  Object.assign(new Error("Device communication interrupted, please retry"), {
4432
- code: import_hwk_adapter_core13.HardwareErrorCode.TransportError,
3971
+ code: import_hwk_adapter_core12.HardwareErrorCode.TransportError,
4433
3972
  _tag: ERROR_TAG.DeviceTransportStuck,
4434
3973
  originalError: err
4435
3974
  })
4436
3975
  )
4437
3976
  };
4438
3977
  }
4439
- return { success: false, error: (0, import_hwk_adapter_core13.serializeConnectorError)(err) };
3978
+ return { success: false, error: (0, import_hwk_adapter_core12.serializeConnectorError)(err) };
4440
3979
  }
4441
3980
  }
4442
3981
  async _dispatch(sessionId, method, params) {
@@ -4499,7 +4038,7 @@ var LedgerConnectorBase = class {
4499
4038
  try {
4500
4039
  return await apps.install(p.appName, ({ progress }) => {
4501
4040
  ctx.emit("ui-event", {
4502
- type: import_hwk_adapter_core13.EConnectorInteraction.AppInstallProgress,
4041
+ type: import_hwk_adapter_core12.EConnectorInteraction.AppInstallProgress,
4503
4042
  payload: {
4504
4043
  sessionId,
4505
4044
  appName: p.appName,
@@ -4525,17 +4064,6 @@ var LedgerConnectorBase = class {
4525
4064
  ctx.clearCanceller(sessionId);
4526
4065
  }
4527
4066
  }
4528
- case "listInstalledNames": {
4529
- const apps = await _getDeviceApps(ctx, sessionId);
4530
- try {
4531
- return await apps.listInstalledNames(params);
4532
- } catch (err) {
4533
- ctx.invalidateSession(sessionId);
4534
- throw ctx.wrapError(err);
4535
- } finally {
4536
- ctx.clearCanceller(sessionId);
4537
- }
4538
- }
4539
4067
  case "listAvailableApps": {
4540
4068
  const apps = await _getDeviceApps(ctx, sessionId);
4541
4069
  try {