@onekeyfe/hwk-ledger-adapter 1.2.3-alpha.1 → 1.2.3-alpha.11

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.d.mts CHANGED
@@ -1,11 +1,10 @@
1
1
  import * as _onekeyfe_hwk_adapter_core from '@onekeyfe/hwk-adapter-core';
2
- import { IHardwareWallet, IConnector, TransportType, UiResponseEvent, SearchDevicesOptions, DeviceInfo, DeviceSearchTarget, ConnectionTarget, Response, IHardwareConnectionContext, ChainCapability, NullableCallArg, IHardwareCallParams, EvmGetAddressParams, EvmAddress, EvmSignTxLedgerParams, EvmSignedTx, EvmSignMsgParams, EvmSignature, EvmSignTypedDataParams, BtcGetAddressParams, BtcAddress, BtcGetPublicKeyParams, BtcPublicKey, BtcSignTxParams, BtcSignedTx, BtcSignPsbtParams, BtcSignedPsbt, BtcSignMsgParams, BtcSignature, IHardwareCommonCallParams, SolGetAddressParams, SolAddress, SolSignTxParams, SolSignedTx, SolSignMsgParams, SolSignature, TronGetAddressParams, TronAddress, TronSignTxParams, TronSignedTx, TronSignMsgParams, TronSignature, ZcashGetFullViewingKeyParams, ZcashFullViewingKey, ZcashGetShieldedAddressParams, ZcashShieldedAddress, DeviceAuthenticityParams, DeviceAuthenticityResult, HardwareEventMap, DeviceEventListener, ChainForFingerprint, DeviceDescriptor, DeviceChangeEvent, ConnectionType, ConnectorDevice, ConnectorSession, ConnectorCallResult, ConnectorEventType, ConnectorEventMap, ConnectorConfig, Failure, HardwareErrorCode, HwkErrorOrigin, HwkRecoveryHint } from '@onekeyfe/hwk-adapter-core';
2
+ import { IHardwareWallet, IConnector, TransportType, UiResponseEvent, SearchDevicesOptions, DeviceInfo, Response, ChainCapability, NullableCallArg, IHardwareCallParams, EvmGetAddressParams, EvmAddress, EvmSignTxLedgerParams, EvmSignedTx, EvmSignMsgParams, EvmSignature, EvmSignTypedDataParams, BtcGetAddressParams, BtcAddress, BtcGetPublicKeyParams, BtcPublicKey, BtcSignTxParams, BtcSignedTx, BtcSignPsbtParams, BtcSignedPsbt, BtcSignMsgParams, BtcSignature, IHardwareCommonCallParams, SolGetAddressParams, SolAddress, SolSignTxParams, SolSignedTx, SolSignMsgParams, SolSignature, TronGetAddressParams, TronAddress, TronSignTxParams, TronSignedTx, TronSignMsgParams, TronSignature, DeviceAuthenticityParams, DeviceAuthenticityResult, HardwareEventMap, DeviceEventListener, ChainForFingerprint, DeviceDescriptor, DeviceChangeEvent, ConnectionType, ConnectorDevice, ConnectorSession, ConnectorCallResult, ConnectorEventType, ConnectorEventMap, ConnectorConfig, Failure, HardwareErrorCode } from '@onekeyfe/hwk-adapter-core';
3
3
  import { DeviceActionState as DeviceActionState$1, DiscoveredDevice, ExecuteDeviceActionReturnType, DeviceManagementKit } from '@ledgerhq/device-management-kit';
4
4
  import { Address, Signature, SignerEth as SignerEth$1, TypedData } from '@ledgerhq/device-signer-kit-ethereum';
5
5
  import { ContextModule } from '@ledgerhq/context-module';
6
6
  import { SignerBtc as SignerBtc$1 } from '@ledgerhq/device-signer-kit-bitcoin';
7
7
  import { SignerSolana } from '@ledgerhq/device-signer-kit-solana';
8
- import { SignerZcash as SignerZcash$1, FullViewingKeyOptions, GetFullViewingKeyDAOutput, GetShieldedAddressDAOutput } from '@ledgerhq/device-signer-kit-zcash';
9
8
  import Transport from '@ledgerhq/hw-transport';
10
9
 
11
10
  /**
@@ -98,27 +97,14 @@ declare class LedgerAdapter implements IHardwareWallet {
98
97
  readonly vendor: "ledger";
99
98
  private readonly connector;
100
99
  private readonly emitter;
101
- private readonly _interactions;
102
100
  private _discoveredDevices;
103
101
  private _sessions;
104
- private readonly _pendingInteractionBindings;
105
- private readonly _verifiedBleReconnectTargets;
106
102
  private readonly _uiRegistry;
107
103
  private _btcHighIndexConfirmedThisSession;
108
104
  private readonly _jobQueue;
109
105
  private _deviceAuthenticityQueueTail;
110
106
  private _doConnectAbortController;
111
107
  private readonly _defaultAutoInstallApp;
112
- private readonly _unsettledConnectorOperations;
113
- private readonly _connectorIdleWaiters;
114
- private _resetPromise;
115
- private _stateGeneration;
116
- private _connectorTeardownTail;
117
- private _pendingConnectorTeardowns;
118
- private _activeConnectionType;
119
- private _bindingSelectionRequestId;
120
- private _finishBleBinding;
121
- private _isBleConnection;
122
108
  constructor(connector: IConnector, options?: {
123
109
  autoInstallApp?: boolean;
124
110
  });
@@ -132,32 +118,21 @@ declare class LedgerAdapter implements IHardwareWallet {
132
118
  * The next operation will re-discover and re-connect automatically.
133
119
  */
134
120
  resetState(): void;
135
- private _resetStateAndDisconnectSessions;
136
121
  dispose(): Promise<void>;
137
122
  uiResponse(response: UiResponseEvent): void;
138
123
  searchDevices(options?: SearchDevicesOptions): Promise<DeviceInfo[]>;
139
- private _searchDevices;
140
- searchDeviceTargets(options?: SearchDevicesOptions): Promise<DeviceSearchTarget[]>;
141
- listConnectionTargets(options?: SearchDevicesOptions): Promise<ConnectionTarget[]>;
142
124
  private _evictAllSessions;
143
125
  private static readonly MAX_BUSINESS_RETRY_BUDGET;
144
126
  private static readonly STUCK_APP_RETRY_DELAY_MS;
145
127
  private static readonly MAX_DOCONNECT_CONFIRMS;
146
128
  private _lastCancelReason;
147
- private readonly _activeInteractionJobs;
148
- private readonly _pendingInteractionDisconnects;
149
129
  private static readonly APP_INSTALL_PROGRESS_MIN_DELTA;
150
130
  private _installProgressLastEmittedValue;
151
131
  private _installProgressLastKey;
152
132
  private static _createDeviceBusyError;
153
- connectDevice(searchTargetId: string): Promise<Response<string>>;
154
- acquireInteraction(connectId: string, context: IHardwareConnectionContext): Promise<Response<string>>;
155
- private _createInteraction;
156
- private _connectTarget;
157
- releaseInteraction(interactionId: string): Promise<void>;
158
- private _releaseInteractionConnection;
159
- private _releaseLostInteractionConnection;
160
- getDeviceInfo(connectIdOrInteractionId: string, deviceId: string): Promise<Response<DeviceInfo>>;
133
+ connectDevice(connectId: string): Promise<Response<string>>;
134
+ disconnectDevice(connectId: string): Promise<void>;
135
+ getDeviceInfo(connectId: string, deviceId: string): Promise<Response<DeviceInfo>>;
161
136
  getSupportedChains(): ChainCapability[];
162
137
  allNetworkGetAddress: (connectId: string, _deviceId: string, params: _onekeyfe_hwk_adapter_core.AllNetworkGetAddressParams) => Promise<Response<_onekeyfe_hwk_adapter_core.AllNetworkAddressResponse[]>>;
163
138
  private callChain;
@@ -182,8 +157,6 @@ declare class LedgerAdapter implements IHardwareWallet {
182
157
  tronGetAddress(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronGetAddressParams>): Promise<Response<TronAddress>>;
183
158
  tronSignTransaction(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronSignTxParams>): Promise<Response<TronSignedTx>>;
184
159
  tronSignMessage(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronSignMsgParams>): Promise<Response<TronSignature>>;
185
- zcashGetFullViewingKey(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<ZcashGetFullViewingKeyParams>): Promise<Response<ZcashFullViewingKey>>;
186
- zcashGetShieldedAddress(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<ZcashGetShieldedAddressParams>): Promise<Response<ZcashShieldedAddress>>;
187
160
  installApp(connectId: string, appName: string): Promise<Response<void>>;
188
161
  listInstalledApps(connectId: string): Promise<Response<AppMetadata[]>>;
189
162
  listInstalledNames(connectId: string): Promise<Response<string[]>>;
@@ -208,11 +181,11 @@ declare class LedgerAdapter implements IHardwareWallet {
208
181
  off<K extends keyof HardwareEventMap>(event: K, listener: (event: HardwareEventMap[K]) => void): void;
209
182
  off(event: string, listener: DeviceEventListener): void;
210
183
  cancel(connectId?: string): void;
211
- /** A non-empty deviceId is an expected chain fingerprint, not a transport identifier. */
212
184
  getChainFingerprint(connectId: string, deviceId: string, chain: ChainForFingerprint): Promise<Response<string>>;
213
- /** Discovery may select a BLE target before a later call verifies its wallet. */
214
- private _publishVerifiedBleBinding;
215
- /** Verify on the acquired session without re-entering the job queue. */
185
+ /**
186
+ * Verify fingerprint using an existing sessionId directly.
187
+ * Safe to call inside connectorCall without causing queue deadlock.
188
+ */
216
189
  private _verifyDeviceFingerprintWithSession;
217
190
  /**
218
191
  * Compute the chain fingerprint via a caller-supplied call strategy.
@@ -234,7 +207,7 @@ declare class LedgerAdapter implements IHardwareWallet {
234
207
  *
235
208
  * - If a session already exists for the given connectId, reuse it.
236
209
  * - If ANY session exists (Ledger IDs are ephemeral), reuse it.
237
- * - Otherwise: search → one USB device auto-connects; multiple asks the host to choose.
210
+ * - Otherwise: search → exactly 1 USB device auto-connects; multiple or none throws.
238
211
  */
239
212
  private _connectingPromise;
240
213
  private _waitForDeviceConnect;
@@ -277,10 +250,6 @@ declare class LedgerAdapter implements IHardwareWallet {
277
250
  * lives in one place.
278
251
  */
279
252
  private _callConnector;
280
- private _assertConnectorReady;
281
- private _runConnectorTeardown;
282
- private _waitForConnectorOperationsToDrain;
283
- private _retainConnectorOperation;
284
253
  private connectorCall;
285
254
  /**
286
255
  * Race a promise against an abort signal. On abort, rejects with
@@ -291,7 +260,24 @@ declare class LedgerAdapter implements IHardwareWallet {
291
260
  private static _throwIfAborted;
292
261
  /** Actual work done under the job queue — connection, fingerprint, call, and recovery. */
293
262
  private _runConnectorCall;
263
+ /**
264
+ * Stuck-app recovery: pause for the device's UI transition, then retry once.
265
+ *
266
+ * Caller has already cleared the session + reset connector. We wait so Stax
267
+ * finishes its post-CloseApp animation, then go through ensureConnected +
268
+ * fingerprint check + call exactly once. Caller decides what to do on a
269
+ * second stuck-app hit.
270
+ */
271
+ private _retryAfterStuckApp;
294
272
  private _sleepAbortable;
273
+ /**
274
+ * Clear stale session, reconnect, and retry the call.
275
+ *
276
+ * Timeout recovery starts with a full connector reset. After an APDU
277
+ * timeout, DMK/transport state may still emit malformed responses; retrying
278
+ * on the same DMK can poison the next chain switch.
279
+ */
280
+ private _retryWithFreshConnection;
295
281
  /**
296
282
  * Ensure OS-level device permission (Bluetooth / USB) before proceeding.
297
283
  *
@@ -668,25 +654,6 @@ declare class SignerSol {
668
654
  }>;
669
655
  }
670
656
 
671
- /**
672
- * Wraps Ledger's Zcash SDK signer (Observable-based DeviceActions) into a
673
- * simple async interface. Only the viewing-key and shielded-address reads are
674
- * exposed; PCZT signing goes through a different host-side pipeline.
675
- */
676
- declare class SignerZcash {
677
- private readonly _sdk;
678
- onInteraction?: (interaction: string) => void;
679
- onRegisterCanceller?: (cancel: (reason?: CancelReason) => void) => void;
680
- constructor(_sdk: SignerZcash$1);
681
- /** GET_VK: UFVK string (default) or raw 96-byte Orchard FVK. */
682
- getFullViewingKey(derivationPath: string, options?: FullViewingKeyOptions): Promise<GetFullViewingKeyDAOutput>;
683
- /** GET_SHIELDED_ADDRESS: single-Orchard-receiver UA for a 5-level transparent path. */
684
- getShieldedAddress(derivationPath: string, options?: {
685
- checkOnDevice?: boolean;
686
- skipOpenApp?: boolean;
687
- }): Promise<GetShieldedAddressDAOutput>;
688
- }
689
-
690
657
  /**
691
658
  * Transport adapter that bridges Ledger's legacy hw-app-* SDKs to DMK's sendApdu.
692
659
  *
@@ -770,7 +737,7 @@ interface WrapErrorOptions {
770
737
  /** Fallback when err has no `appName` (DMK signer errors don't carry it). */
771
738
  defaultAppName?: string;
772
739
  }
773
- declare function ledgerFailure(code: HardwareErrorCode, error: string, appName?: string, tag?: string, params?: Record<string, unknown>, origin?: HwkErrorOrigin, recovery?: HwkRecoveryHint): LedgerFailure;
740
+ declare function ledgerFailure(code: HardwareErrorCode, error: string, appName?: string, tag?: string, params?: Record<string, unknown>): LedgerFailure;
774
741
  declare function isDeviceLockedError(err: unknown): boolean;
775
742
  /**
776
743
  * Map a Ledger DMK error to a HardwareErrorCode and human-readable message.
@@ -780,7 +747,6 @@ declare function isDeviceLockedError(err: unknown): boolean;
780
747
  declare function mapLedgerError(err: unknown, opts?: WrapErrorOptions): {
781
748
  code: HardwareErrorCode;
782
749
  message: string;
783
- origin?: HwkErrorOrigin;
784
750
  appName?: string;
785
751
  };
786
752
 
@@ -816,4 +782,4 @@ declare function isLedgerDmkBleTransport(transport?: string): boolean;
816
782
  declare function isLedgerBleConnectionType(connectionType?: ConnectionType): boolean;
817
783
  declare function isLedgerBleDescriptor(connectionType: ConnectionType, descriptor: DeviceDescriptor): boolean;
818
784
 
819
- export { AppManager, type DeviceActionState, type DmkDiscoveredDevice, DmkTransport, LedgerAdapter, LedgerConnectorBase, type LedgerConnectorBaseOptions, LedgerDeviceManager, type LedgerFailure, type SdkEvent, type SdkEventListener, type SdkLogEvent, SignerBtc, type SignerBtcAddress, SignerEth, type SignerEvmAddress, type SignerEvmSignature, SignerManager, SignerSol, SignerZcash, type TransportFactory, debugLog, deviceActionToPromise, isDeviceLockedError, isLedgerBleConnectionType, isLedgerBleDescriptor, isLedgerDmkBleTransport, ledgerFailure, mapLedgerError, offSdkEvent, onSdkEvent };
785
+ export { AppManager, type DeviceActionState, type DmkDiscoveredDevice, DmkTransport, LedgerAdapter, LedgerConnectorBase, type LedgerConnectorBaseOptions, LedgerDeviceManager, type LedgerFailure, type SdkEvent, type SdkEventListener, type SdkLogEvent, SignerBtc, type SignerBtcAddress, SignerEth, type SignerEvmAddress, type SignerEvmSignature, SignerManager, SignerSol, type TransportFactory, debugLog, deviceActionToPromise, isDeviceLockedError, isLedgerBleConnectionType, isLedgerBleDescriptor, isLedgerDmkBleTransport, ledgerFailure, mapLedgerError, offSdkEvent, onSdkEvent };
package/dist/index.d.ts CHANGED
@@ -1,11 +1,10 @@
1
1
  import * as _onekeyfe_hwk_adapter_core from '@onekeyfe/hwk-adapter-core';
2
- import { IHardwareWallet, IConnector, TransportType, UiResponseEvent, SearchDevicesOptions, DeviceInfo, DeviceSearchTarget, ConnectionTarget, Response, IHardwareConnectionContext, ChainCapability, NullableCallArg, IHardwareCallParams, EvmGetAddressParams, EvmAddress, EvmSignTxLedgerParams, EvmSignedTx, EvmSignMsgParams, EvmSignature, EvmSignTypedDataParams, BtcGetAddressParams, BtcAddress, BtcGetPublicKeyParams, BtcPublicKey, BtcSignTxParams, BtcSignedTx, BtcSignPsbtParams, BtcSignedPsbt, BtcSignMsgParams, BtcSignature, IHardwareCommonCallParams, SolGetAddressParams, SolAddress, SolSignTxParams, SolSignedTx, SolSignMsgParams, SolSignature, TronGetAddressParams, TronAddress, TronSignTxParams, TronSignedTx, TronSignMsgParams, TronSignature, ZcashGetFullViewingKeyParams, ZcashFullViewingKey, ZcashGetShieldedAddressParams, ZcashShieldedAddress, DeviceAuthenticityParams, DeviceAuthenticityResult, HardwareEventMap, DeviceEventListener, ChainForFingerprint, DeviceDescriptor, DeviceChangeEvent, ConnectionType, ConnectorDevice, ConnectorSession, ConnectorCallResult, ConnectorEventType, ConnectorEventMap, ConnectorConfig, Failure, HardwareErrorCode, HwkErrorOrigin, HwkRecoveryHint } from '@onekeyfe/hwk-adapter-core';
2
+ import { IHardwareWallet, IConnector, TransportType, UiResponseEvent, SearchDevicesOptions, DeviceInfo, Response, ChainCapability, NullableCallArg, IHardwareCallParams, EvmGetAddressParams, EvmAddress, EvmSignTxLedgerParams, EvmSignedTx, EvmSignMsgParams, EvmSignature, EvmSignTypedDataParams, BtcGetAddressParams, BtcAddress, BtcGetPublicKeyParams, BtcPublicKey, BtcSignTxParams, BtcSignedTx, BtcSignPsbtParams, BtcSignedPsbt, BtcSignMsgParams, BtcSignature, IHardwareCommonCallParams, SolGetAddressParams, SolAddress, SolSignTxParams, SolSignedTx, SolSignMsgParams, SolSignature, TronGetAddressParams, TronAddress, TronSignTxParams, TronSignedTx, TronSignMsgParams, TronSignature, DeviceAuthenticityParams, DeviceAuthenticityResult, HardwareEventMap, DeviceEventListener, ChainForFingerprint, DeviceDescriptor, DeviceChangeEvent, ConnectionType, ConnectorDevice, ConnectorSession, ConnectorCallResult, ConnectorEventType, ConnectorEventMap, ConnectorConfig, Failure, HardwareErrorCode } from '@onekeyfe/hwk-adapter-core';
3
3
  import { DeviceActionState as DeviceActionState$1, DiscoveredDevice, ExecuteDeviceActionReturnType, DeviceManagementKit } from '@ledgerhq/device-management-kit';
4
4
  import { Address, Signature, SignerEth as SignerEth$1, TypedData } from '@ledgerhq/device-signer-kit-ethereum';
5
5
  import { ContextModule } from '@ledgerhq/context-module';
6
6
  import { SignerBtc as SignerBtc$1 } from '@ledgerhq/device-signer-kit-bitcoin';
7
7
  import { SignerSolana } from '@ledgerhq/device-signer-kit-solana';
8
- import { SignerZcash as SignerZcash$1, FullViewingKeyOptions, GetFullViewingKeyDAOutput, GetShieldedAddressDAOutput } from '@ledgerhq/device-signer-kit-zcash';
9
8
  import Transport from '@ledgerhq/hw-transport';
10
9
 
11
10
  /**
@@ -98,27 +97,14 @@ declare class LedgerAdapter implements IHardwareWallet {
98
97
  readonly vendor: "ledger";
99
98
  private readonly connector;
100
99
  private readonly emitter;
101
- private readonly _interactions;
102
100
  private _discoveredDevices;
103
101
  private _sessions;
104
- private readonly _pendingInteractionBindings;
105
- private readonly _verifiedBleReconnectTargets;
106
102
  private readonly _uiRegistry;
107
103
  private _btcHighIndexConfirmedThisSession;
108
104
  private readonly _jobQueue;
109
105
  private _deviceAuthenticityQueueTail;
110
106
  private _doConnectAbortController;
111
107
  private readonly _defaultAutoInstallApp;
112
- private readonly _unsettledConnectorOperations;
113
- private readonly _connectorIdleWaiters;
114
- private _resetPromise;
115
- private _stateGeneration;
116
- private _connectorTeardownTail;
117
- private _pendingConnectorTeardowns;
118
- private _activeConnectionType;
119
- private _bindingSelectionRequestId;
120
- private _finishBleBinding;
121
- private _isBleConnection;
122
108
  constructor(connector: IConnector, options?: {
123
109
  autoInstallApp?: boolean;
124
110
  });
@@ -132,32 +118,21 @@ declare class LedgerAdapter implements IHardwareWallet {
132
118
  * The next operation will re-discover and re-connect automatically.
133
119
  */
134
120
  resetState(): void;
135
- private _resetStateAndDisconnectSessions;
136
121
  dispose(): Promise<void>;
137
122
  uiResponse(response: UiResponseEvent): void;
138
123
  searchDevices(options?: SearchDevicesOptions): Promise<DeviceInfo[]>;
139
- private _searchDevices;
140
- searchDeviceTargets(options?: SearchDevicesOptions): Promise<DeviceSearchTarget[]>;
141
- listConnectionTargets(options?: SearchDevicesOptions): Promise<ConnectionTarget[]>;
142
124
  private _evictAllSessions;
143
125
  private static readonly MAX_BUSINESS_RETRY_BUDGET;
144
126
  private static readonly STUCK_APP_RETRY_DELAY_MS;
145
127
  private static readonly MAX_DOCONNECT_CONFIRMS;
146
128
  private _lastCancelReason;
147
- private readonly _activeInteractionJobs;
148
- private readonly _pendingInteractionDisconnects;
149
129
  private static readonly APP_INSTALL_PROGRESS_MIN_DELTA;
150
130
  private _installProgressLastEmittedValue;
151
131
  private _installProgressLastKey;
152
132
  private static _createDeviceBusyError;
153
- connectDevice(searchTargetId: string): Promise<Response<string>>;
154
- acquireInteraction(connectId: string, context: IHardwareConnectionContext): Promise<Response<string>>;
155
- private _createInteraction;
156
- private _connectTarget;
157
- releaseInteraction(interactionId: string): Promise<void>;
158
- private _releaseInteractionConnection;
159
- private _releaseLostInteractionConnection;
160
- getDeviceInfo(connectIdOrInteractionId: string, deviceId: string): Promise<Response<DeviceInfo>>;
133
+ connectDevice(connectId: string): Promise<Response<string>>;
134
+ disconnectDevice(connectId: string): Promise<void>;
135
+ getDeviceInfo(connectId: string, deviceId: string): Promise<Response<DeviceInfo>>;
161
136
  getSupportedChains(): ChainCapability[];
162
137
  allNetworkGetAddress: (connectId: string, _deviceId: string, params: _onekeyfe_hwk_adapter_core.AllNetworkGetAddressParams) => Promise<Response<_onekeyfe_hwk_adapter_core.AllNetworkAddressResponse[]>>;
163
138
  private callChain;
@@ -182,8 +157,6 @@ declare class LedgerAdapter implements IHardwareWallet {
182
157
  tronGetAddress(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronGetAddressParams>): Promise<Response<TronAddress>>;
183
158
  tronSignTransaction(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronSignTxParams>): Promise<Response<TronSignedTx>>;
184
159
  tronSignMessage(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronSignMsgParams>): Promise<Response<TronSignature>>;
185
- zcashGetFullViewingKey(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<ZcashGetFullViewingKeyParams>): Promise<Response<ZcashFullViewingKey>>;
186
- zcashGetShieldedAddress(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<ZcashGetShieldedAddressParams>): Promise<Response<ZcashShieldedAddress>>;
187
160
  installApp(connectId: string, appName: string): Promise<Response<void>>;
188
161
  listInstalledApps(connectId: string): Promise<Response<AppMetadata[]>>;
189
162
  listInstalledNames(connectId: string): Promise<Response<string[]>>;
@@ -208,11 +181,11 @@ declare class LedgerAdapter implements IHardwareWallet {
208
181
  off<K extends keyof HardwareEventMap>(event: K, listener: (event: HardwareEventMap[K]) => void): void;
209
182
  off(event: string, listener: DeviceEventListener): void;
210
183
  cancel(connectId?: string): void;
211
- /** A non-empty deviceId is an expected chain fingerprint, not a transport identifier. */
212
184
  getChainFingerprint(connectId: string, deviceId: string, chain: ChainForFingerprint): Promise<Response<string>>;
213
- /** Discovery may select a BLE target before a later call verifies its wallet. */
214
- private _publishVerifiedBleBinding;
215
- /** Verify on the acquired session without re-entering the job queue. */
185
+ /**
186
+ * Verify fingerprint using an existing sessionId directly.
187
+ * Safe to call inside connectorCall without causing queue deadlock.
188
+ */
216
189
  private _verifyDeviceFingerprintWithSession;
217
190
  /**
218
191
  * Compute the chain fingerprint via a caller-supplied call strategy.
@@ -234,7 +207,7 @@ declare class LedgerAdapter implements IHardwareWallet {
234
207
  *
235
208
  * - If a session already exists for the given connectId, reuse it.
236
209
  * - If ANY session exists (Ledger IDs are ephemeral), reuse it.
237
- * - Otherwise: search → one USB device auto-connects; multiple asks the host to choose.
210
+ * - Otherwise: search → exactly 1 USB device auto-connects; multiple or none throws.
238
211
  */
239
212
  private _connectingPromise;
240
213
  private _waitForDeviceConnect;
@@ -277,10 +250,6 @@ declare class LedgerAdapter implements IHardwareWallet {
277
250
  * lives in one place.
278
251
  */
279
252
  private _callConnector;
280
- private _assertConnectorReady;
281
- private _runConnectorTeardown;
282
- private _waitForConnectorOperationsToDrain;
283
- private _retainConnectorOperation;
284
253
  private connectorCall;
285
254
  /**
286
255
  * Race a promise against an abort signal. On abort, rejects with
@@ -291,7 +260,24 @@ declare class LedgerAdapter implements IHardwareWallet {
291
260
  private static _throwIfAborted;
292
261
  /** Actual work done under the job queue — connection, fingerprint, call, and recovery. */
293
262
  private _runConnectorCall;
263
+ /**
264
+ * Stuck-app recovery: pause for the device's UI transition, then retry once.
265
+ *
266
+ * Caller has already cleared the session + reset connector. We wait so Stax
267
+ * finishes its post-CloseApp animation, then go through ensureConnected +
268
+ * fingerprint check + call exactly once. Caller decides what to do on a
269
+ * second stuck-app hit.
270
+ */
271
+ private _retryAfterStuckApp;
294
272
  private _sleepAbortable;
273
+ /**
274
+ * Clear stale session, reconnect, and retry the call.
275
+ *
276
+ * Timeout recovery starts with a full connector reset. After an APDU
277
+ * timeout, DMK/transport state may still emit malformed responses; retrying
278
+ * on the same DMK can poison the next chain switch.
279
+ */
280
+ private _retryWithFreshConnection;
295
281
  /**
296
282
  * Ensure OS-level device permission (Bluetooth / USB) before proceeding.
297
283
  *
@@ -668,25 +654,6 @@ declare class SignerSol {
668
654
  }>;
669
655
  }
670
656
 
671
- /**
672
- * Wraps Ledger's Zcash SDK signer (Observable-based DeviceActions) into a
673
- * simple async interface. Only the viewing-key and shielded-address reads are
674
- * exposed; PCZT signing goes through a different host-side pipeline.
675
- */
676
- declare class SignerZcash {
677
- private readonly _sdk;
678
- onInteraction?: (interaction: string) => void;
679
- onRegisterCanceller?: (cancel: (reason?: CancelReason) => void) => void;
680
- constructor(_sdk: SignerZcash$1);
681
- /** GET_VK: UFVK string (default) or raw 96-byte Orchard FVK. */
682
- getFullViewingKey(derivationPath: string, options?: FullViewingKeyOptions): Promise<GetFullViewingKeyDAOutput>;
683
- /** GET_SHIELDED_ADDRESS: single-Orchard-receiver UA for a 5-level transparent path. */
684
- getShieldedAddress(derivationPath: string, options?: {
685
- checkOnDevice?: boolean;
686
- skipOpenApp?: boolean;
687
- }): Promise<GetShieldedAddressDAOutput>;
688
- }
689
-
690
657
  /**
691
658
  * Transport adapter that bridges Ledger's legacy hw-app-* SDKs to DMK's sendApdu.
692
659
  *
@@ -770,7 +737,7 @@ interface WrapErrorOptions {
770
737
  /** Fallback when err has no `appName` (DMK signer errors don't carry it). */
771
738
  defaultAppName?: string;
772
739
  }
773
- declare function ledgerFailure(code: HardwareErrorCode, error: string, appName?: string, tag?: string, params?: Record<string, unknown>, origin?: HwkErrorOrigin, recovery?: HwkRecoveryHint): LedgerFailure;
740
+ declare function ledgerFailure(code: HardwareErrorCode, error: string, appName?: string, tag?: string, params?: Record<string, unknown>): LedgerFailure;
774
741
  declare function isDeviceLockedError(err: unknown): boolean;
775
742
  /**
776
743
  * Map a Ledger DMK error to a HardwareErrorCode and human-readable message.
@@ -780,7 +747,6 @@ declare function isDeviceLockedError(err: unknown): boolean;
780
747
  declare function mapLedgerError(err: unknown, opts?: WrapErrorOptions): {
781
748
  code: HardwareErrorCode;
782
749
  message: string;
783
- origin?: HwkErrorOrigin;
784
750
  appName?: string;
785
751
  };
786
752
 
@@ -816,4 +782,4 @@ declare function isLedgerDmkBleTransport(transport?: string): boolean;
816
782
  declare function isLedgerBleConnectionType(connectionType?: ConnectionType): boolean;
817
783
  declare function isLedgerBleDescriptor(connectionType: ConnectionType, descriptor: DeviceDescriptor): boolean;
818
784
 
819
- export { AppManager, type DeviceActionState, type DmkDiscoveredDevice, DmkTransport, LedgerAdapter, LedgerConnectorBase, type LedgerConnectorBaseOptions, LedgerDeviceManager, type LedgerFailure, type SdkEvent, type SdkEventListener, type SdkLogEvent, SignerBtc, type SignerBtcAddress, SignerEth, type SignerEvmAddress, type SignerEvmSignature, SignerManager, SignerSol, SignerZcash, type TransportFactory, debugLog, deviceActionToPromise, isDeviceLockedError, isLedgerBleConnectionType, isLedgerBleDescriptor, isLedgerDmkBleTransport, ledgerFailure, mapLedgerError, offSdkEvent, onSdkEvent };
785
+ export { AppManager, type DeviceActionState, type DmkDiscoveredDevice, DmkTransport, LedgerAdapter, LedgerConnectorBase, type LedgerConnectorBaseOptions, LedgerDeviceManager, type LedgerFailure, type SdkEvent, type SdkEventListener, type SdkLogEvent, SignerBtc, type SignerBtcAddress, SignerEth, type SignerEvmAddress, type SignerEvmSignature, SignerManager, SignerSol, type TransportFactory, debugLog, deviceActionToPromise, isDeviceLockedError, isLedgerBleConnectionType, isLedgerBleDescriptor, isLedgerDmkBleTransport, ledgerFailure, mapLedgerError, offSdkEvent, onSdkEvent };