@onekeyfe/hwk-ledger-adapter 1.2.6-alpha.0 → 1.2.6-alpha.2

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, BindBleDeviceParams, IHardwareConnectionContext, 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
  /**
@@ -96,34 +95,16 @@ type LedgerCallParams<T> = NullableCallArg<IHardwareCallParams<T>>;
96
95
  type LedgerCommonParams = NullableCallArg<IHardwareCommonCallParams>;
97
96
  declare class LedgerAdapter implements IHardwareWallet {
98
97
  readonly vendor: "ledger";
99
- readonly cancelCapability: "stops-waiting";
100
98
  private readonly connector;
101
99
  private readonly emitter;
102
- private readonly _operations;
103
100
  private _discoveredDevices;
104
101
  private _sessions;
105
- private readonly _pendingOperationBindings;
106
- private readonly _pendingPickBindings;
107
- private readonly _sessionTransports;
108
- private readonly _selectedBleReconnectTargets;
109
102
  private readonly _uiRegistry;
110
103
  private _btcHighIndexConfirmedThisSession;
111
104
  private readonly _jobQueue;
112
105
  private _deviceAuthenticityQueueTail;
113
106
  private _doConnectAbortController;
114
- private _connectingConnectId;
115
107
  private readonly _defaultAutoInstallApp;
116
- private readonly _unsettledConnectorOperations;
117
- private readonly _connectorIdleWaiters;
118
- private _resetPromise;
119
- private _stateGeneration;
120
- private _connectorTeardownTail;
121
- private _pendingConnectorTeardowns;
122
- private _activeConnectionType;
123
- private _bindingSelectionRequestId;
124
- private _discardPendingBinding;
125
- private _finishBleBinding;
126
- private _isBleConnection;
127
108
  constructor(connector: IConnector, options?: {
128
109
  autoInstallApp?: boolean;
129
110
  });
@@ -137,34 +118,22 @@ declare class LedgerAdapter implements IHardwareWallet {
137
118
  * The next operation will re-discover and re-connect automatically.
138
119
  */
139
120
  resetState(): void;
140
- private _resetStateAndDisconnectSessions;
141
121
  dispose(): Promise<void>;
142
122
  uiResponse(response: UiResponseEvent): void;
143
123
  searchDevices(options?: SearchDevicesOptions): Promise<DeviceInfo[]>;
144
- private _searchDevices;
145
- searchDeviceTargets(options?: SearchDevicesOptions): Promise<DeviceSearchTarget[]>;
146
- listConnectionTargets(options?: SearchDevicesOptions): Promise<ConnectionTarget[]>;
147
124
  private _evictAllSessions;
148
125
  private static readonly MAX_BUSINESS_RETRY_BUDGET;
149
126
  private static readonly STUCK_APP_RETRY_DELAY_MS;
150
127
  private static readonly MAX_DOCONNECT_CONFIRMS;
151
128
  private _lastCancelReason;
152
- private readonly _activeOperationJobs;
153
- private readonly _pendingOperationDisconnects;
154
129
  private static readonly APP_INSTALL_PROGRESS_MIN_DELTA;
155
130
  private _installProgressLastEmittedValue;
156
131
  private _installProgressLastKey;
157
132
  private static _createDeviceBusyError;
158
- connectDevice(searchTargetId: string): Promise<Response<string>>;
159
- /** Binds the picked BLE device; with a recorded wallet identity it must match first. */
160
- bindBleDevice(params: BindBleDeviceParams): Promise<Response<string>>;
161
- acquireOperation(connectId: string, context: IHardwareConnectionContext): Promise<Response<string>>;
162
- private _createOperation;
163
- private _connectTarget;
164
- releaseOperation(operationId: string): Promise<void>;
165
- private _releaseOperationConnection;
166
- private _releaseLostOperationConnection;
167
- getDeviceInfo(connectIdOrOperationId: 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>>;
136
+ getSupportedChains(): ChainCapability[];
168
137
  allNetworkGetAddress: (connectId: string, _deviceId: string, params: _onekeyfe_hwk_adapter_core.AllNetworkGetAddressParams) => Promise<Response<_onekeyfe_hwk_adapter_core.AllNetworkAddressResponse[]>>;
169
138
  private callChain;
170
139
  private static normalizeCallArgs;
@@ -188,8 +157,6 @@ declare class LedgerAdapter implements IHardwareWallet {
188
157
  tronGetAddress(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronGetAddressParams>): Promise<Response<TronAddress>>;
189
158
  tronSignTransaction(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronSignTxParams>): Promise<Response<TronSignedTx>>;
190
159
  tronSignMessage(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronSignMsgParams>): Promise<Response<TronSignature>>;
191
- zcashGetFullViewingKey(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<ZcashGetFullViewingKeyParams>): Promise<Response<ZcashFullViewingKey>>;
192
- zcashGetShieldedAddress(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<ZcashGetShieldedAddressParams>): Promise<Response<ZcashShieldedAddress>>;
193
160
  installApp(connectId: string, appName: string): Promise<Response<void>>;
194
161
  listInstalledApps(connectId: string): Promise<Response<AppMetadata[]>>;
195
162
  listInstalledNames(connectId: string): Promise<Response<string[]>>;
@@ -214,12 +181,11 @@ declare class LedgerAdapter implements IHardwareWallet {
214
181
  off<K extends keyof HardwareEventMap>(event: K, listener: (event: HardwareEventMap[K]) => void): void;
215
182
  off(event: string, listener: DeviceEventListener): void;
216
183
  cancel(connectId?: string): void;
217
- /** A non-empty deviceId is an expected chain fingerprint, not a transport identifier. */
218
184
  getChainFingerprint(connectId: string, deviceId: string, chain: ChainForFingerprint): Promise<Response<string>>;
219
- /** Saves a picked BLE endpoint; `identity` is set when its wallet was just checked. */
220
- private _saveSelectedBleBinding;
221
- private _dropSession;
222
- /** 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
+ */
223
189
  private _verifyDeviceFingerprintWithSession;
224
190
  /**
225
191
  * Compute the chain fingerprint via a caller-supplied call strategy.
@@ -241,14 +207,9 @@ declare class LedgerAdapter implements IHardwareWallet {
241
207
  *
242
208
  * - If a session already exists for the given connectId, reuse it.
243
209
  * - If ANY session exists (Ledger IDs are ephemeral), reuse it.
244
- * - 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.
245
211
  */
246
212
  private _connectingPromise;
247
- /**
248
- * Operation owning the running job, so a mid-call UI request can name it.
249
- * Undefined at cold start when no operation owns the job.
250
- */
251
- private _activeOperationId;
252
213
  private _waitForDeviceConnect;
253
214
  /**
254
215
  * Decide whether a BTC pubkey call needs `showOnDevice=true` because of
@@ -289,13 +250,7 @@ declare class LedgerAdapter implements IHardwareWallet {
289
250
  * lives in one place.
290
251
  */
291
252
  private _callConnector;
292
- private _assertConnectorReady;
293
- private _runConnectorTeardown;
294
- private _waitForConnectorOperationsToDrain;
295
- private _retainConnectorOperation;
296
253
  private connectorCall;
297
- /** Hermes/RN polyfills don't always populate signal.reason; fall back. */
298
- private _abortReason;
299
254
  /**
300
255
  * Race a promise against an abort signal. On abort, rejects with
301
256
  * signal.reason → instance _lastCancelReason → generic Error('Aborted').
@@ -305,10 +260,35 @@ declare class LedgerAdapter implements IHardwareWallet {
305
260
  private static _throwIfAborted;
306
261
  /** Actual work done under the job queue — connection, fingerprint, call, and recovery. */
307
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;
308
272
  private _sleepAbortable;
309
273
  /**
310
- * Ensure OS-level Bluetooth/USB permission; times out after 60s if the host never
311
- * replies. Without connectId the request is environment-level, else device-level.
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;
281
+ /**
282
+ * Ensure OS-level device permission (Bluetooth / USB) before proceeding.
283
+ *
284
+ * Emits `REQUEST_DEVICE_PERMISSION` and awaits the consumer's
285
+ * `RECEIVE_DEVICE_PERMISSION` reply (60s budget covers "probe → system
286
+ * prompt → user tap" plus a generous margin). If the consumer never wires
287
+ * a handler or never replies, the wait times out and the operation fails
288
+ * fast so scanners/callers don't hang silently.
289
+ *
290
+ * - No connectId (searchDevices): environment-level permission
291
+ * - With connectId (business methods): device-level permission
312
292
  */
313
293
  private _ensureDevicePermission;
314
294
  /**
@@ -518,11 +498,6 @@ declare class LedgerConnectorBase implements IConnector {
518
498
  private _getSignerManager;
519
499
  private _getDeviceAppsManager;
520
500
  private _invalidateSession;
521
- /**
522
- * Fire the canceller so DMK closes the secure-channel WebSocket. The DMK device
523
- * session is kept: unlock/retry recovery reuses it.
524
- */
525
- private _teardownSecureChannelSession;
526
501
  /**
527
502
  * Replace an old session with a new one after app switch.
528
503
  * Emits device-connect so the adapter updates its _sessions Map.
@@ -679,25 +654,6 @@ declare class SignerSol {
679
654
  }>;
680
655
  }
681
656
 
682
- /**
683
- * Wraps Ledger's Zcash SDK signer (Observable-based DeviceActions) into a
684
- * simple async interface. Only the viewing-key and shielded-address reads are
685
- * exposed; PCZT signing goes through a different host-side pipeline.
686
- */
687
- declare class SignerZcash {
688
- private readonly _sdk;
689
- onInteraction?: (interaction: string) => void;
690
- onRegisterCanceller?: (cancel: (reason?: CancelReason) => void) => void;
691
- constructor(_sdk: SignerZcash$1);
692
- /** GET_VK: UFVK string (default) or raw 96-byte Orchard FVK. */
693
- getFullViewingKey(derivationPath: string, options?: FullViewingKeyOptions): Promise<GetFullViewingKeyDAOutput>;
694
- /** GET_SHIELDED_ADDRESS: single-Orchard-receiver UA for a 5-level transparent path. */
695
- getShieldedAddress(derivationPath: string, options?: {
696
- checkOnDevice?: boolean;
697
- skipOpenApp?: boolean;
698
- }): Promise<GetShieldedAddressDAOutput>;
699
- }
700
-
701
657
  /**
702
658
  * Transport adapter that bridges Ledger's legacy hw-app-* SDKs to DMK's sendApdu.
703
659
  *
@@ -781,7 +737,7 @@ interface WrapErrorOptions {
781
737
  /** Fallback when err has no `appName` (DMK signer errors don't carry it). */
782
738
  defaultAppName?: string;
783
739
  }
784
- 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;
785
741
  declare function isDeviceLockedError(err: unknown): boolean;
786
742
  /**
787
743
  * Map a Ledger DMK error to a HardwareErrorCode and human-readable message.
@@ -791,7 +747,6 @@ declare function isDeviceLockedError(err: unknown): boolean;
791
747
  declare function mapLedgerError(err: unknown, opts?: WrapErrorOptions): {
792
748
  code: HardwareErrorCode;
793
749
  message: string;
794
- origin?: HwkErrorOrigin;
795
750
  appName?: string;
796
751
  };
797
752
 
@@ -827,4 +782,4 @@ declare function isLedgerDmkBleTransport(transport?: string): boolean;
827
782
  declare function isLedgerBleConnectionType(connectionType?: ConnectionType): boolean;
828
783
  declare function isLedgerBleDescriptor(connectionType: ConnectionType, descriptor: DeviceDescriptor): boolean;
829
784
 
830
- 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, BindBleDeviceParams, IHardwareConnectionContext, 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
  /**
@@ -96,34 +95,16 @@ type LedgerCallParams<T> = NullableCallArg<IHardwareCallParams<T>>;
96
95
  type LedgerCommonParams = NullableCallArg<IHardwareCommonCallParams>;
97
96
  declare class LedgerAdapter implements IHardwareWallet {
98
97
  readonly vendor: "ledger";
99
- readonly cancelCapability: "stops-waiting";
100
98
  private readonly connector;
101
99
  private readonly emitter;
102
- private readonly _operations;
103
100
  private _discoveredDevices;
104
101
  private _sessions;
105
- private readonly _pendingOperationBindings;
106
- private readonly _pendingPickBindings;
107
- private readonly _sessionTransports;
108
- private readonly _selectedBleReconnectTargets;
109
102
  private readonly _uiRegistry;
110
103
  private _btcHighIndexConfirmedThisSession;
111
104
  private readonly _jobQueue;
112
105
  private _deviceAuthenticityQueueTail;
113
106
  private _doConnectAbortController;
114
- private _connectingConnectId;
115
107
  private readonly _defaultAutoInstallApp;
116
- private readonly _unsettledConnectorOperations;
117
- private readonly _connectorIdleWaiters;
118
- private _resetPromise;
119
- private _stateGeneration;
120
- private _connectorTeardownTail;
121
- private _pendingConnectorTeardowns;
122
- private _activeConnectionType;
123
- private _bindingSelectionRequestId;
124
- private _discardPendingBinding;
125
- private _finishBleBinding;
126
- private _isBleConnection;
127
108
  constructor(connector: IConnector, options?: {
128
109
  autoInstallApp?: boolean;
129
110
  });
@@ -137,34 +118,22 @@ declare class LedgerAdapter implements IHardwareWallet {
137
118
  * The next operation will re-discover and re-connect automatically.
138
119
  */
139
120
  resetState(): void;
140
- private _resetStateAndDisconnectSessions;
141
121
  dispose(): Promise<void>;
142
122
  uiResponse(response: UiResponseEvent): void;
143
123
  searchDevices(options?: SearchDevicesOptions): Promise<DeviceInfo[]>;
144
- private _searchDevices;
145
- searchDeviceTargets(options?: SearchDevicesOptions): Promise<DeviceSearchTarget[]>;
146
- listConnectionTargets(options?: SearchDevicesOptions): Promise<ConnectionTarget[]>;
147
124
  private _evictAllSessions;
148
125
  private static readonly MAX_BUSINESS_RETRY_BUDGET;
149
126
  private static readonly STUCK_APP_RETRY_DELAY_MS;
150
127
  private static readonly MAX_DOCONNECT_CONFIRMS;
151
128
  private _lastCancelReason;
152
- private readonly _activeOperationJobs;
153
- private readonly _pendingOperationDisconnects;
154
129
  private static readonly APP_INSTALL_PROGRESS_MIN_DELTA;
155
130
  private _installProgressLastEmittedValue;
156
131
  private _installProgressLastKey;
157
132
  private static _createDeviceBusyError;
158
- connectDevice(searchTargetId: string): Promise<Response<string>>;
159
- /** Binds the picked BLE device; with a recorded wallet identity it must match first. */
160
- bindBleDevice(params: BindBleDeviceParams): Promise<Response<string>>;
161
- acquireOperation(connectId: string, context: IHardwareConnectionContext): Promise<Response<string>>;
162
- private _createOperation;
163
- private _connectTarget;
164
- releaseOperation(operationId: string): Promise<void>;
165
- private _releaseOperationConnection;
166
- private _releaseLostOperationConnection;
167
- getDeviceInfo(connectIdOrOperationId: 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>>;
136
+ getSupportedChains(): ChainCapability[];
168
137
  allNetworkGetAddress: (connectId: string, _deviceId: string, params: _onekeyfe_hwk_adapter_core.AllNetworkGetAddressParams) => Promise<Response<_onekeyfe_hwk_adapter_core.AllNetworkAddressResponse[]>>;
169
138
  private callChain;
170
139
  private static normalizeCallArgs;
@@ -188,8 +157,6 @@ declare class LedgerAdapter implements IHardwareWallet {
188
157
  tronGetAddress(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronGetAddressParams>): Promise<Response<TronAddress>>;
189
158
  tronSignTransaction(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronSignTxParams>): Promise<Response<TronSignedTx>>;
190
159
  tronSignMessage(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronSignMsgParams>): Promise<Response<TronSignature>>;
191
- zcashGetFullViewingKey(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<ZcashGetFullViewingKeyParams>): Promise<Response<ZcashFullViewingKey>>;
192
- zcashGetShieldedAddress(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<ZcashGetShieldedAddressParams>): Promise<Response<ZcashShieldedAddress>>;
193
160
  installApp(connectId: string, appName: string): Promise<Response<void>>;
194
161
  listInstalledApps(connectId: string): Promise<Response<AppMetadata[]>>;
195
162
  listInstalledNames(connectId: string): Promise<Response<string[]>>;
@@ -214,12 +181,11 @@ declare class LedgerAdapter implements IHardwareWallet {
214
181
  off<K extends keyof HardwareEventMap>(event: K, listener: (event: HardwareEventMap[K]) => void): void;
215
182
  off(event: string, listener: DeviceEventListener): void;
216
183
  cancel(connectId?: string): void;
217
- /** A non-empty deviceId is an expected chain fingerprint, not a transport identifier. */
218
184
  getChainFingerprint(connectId: string, deviceId: string, chain: ChainForFingerprint): Promise<Response<string>>;
219
- /** Saves a picked BLE endpoint; `identity` is set when its wallet was just checked. */
220
- private _saveSelectedBleBinding;
221
- private _dropSession;
222
- /** 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
+ */
223
189
  private _verifyDeviceFingerprintWithSession;
224
190
  /**
225
191
  * Compute the chain fingerprint via a caller-supplied call strategy.
@@ -241,14 +207,9 @@ declare class LedgerAdapter implements IHardwareWallet {
241
207
  *
242
208
  * - If a session already exists for the given connectId, reuse it.
243
209
  * - If ANY session exists (Ledger IDs are ephemeral), reuse it.
244
- * - 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.
245
211
  */
246
212
  private _connectingPromise;
247
- /**
248
- * Operation owning the running job, so a mid-call UI request can name it.
249
- * Undefined at cold start when no operation owns the job.
250
- */
251
- private _activeOperationId;
252
213
  private _waitForDeviceConnect;
253
214
  /**
254
215
  * Decide whether a BTC pubkey call needs `showOnDevice=true` because of
@@ -289,13 +250,7 @@ declare class LedgerAdapter implements IHardwareWallet {
289
250
  * lives in one place.
290
251
  */
291
252
  private _callConnector;
292
- private _assertConnectorReady;
293
- private _runConnectorTeardown;
294
- private _waitForConnectorOperationsToDrain;
295
- private _retainConnectorOperation;
296
253
  private connectorCall;
297
- /** Hermes/RN polyfills don't always populate signal.reason; fall back. */
298
- private _abortReason;
299
254
  /**
300
255
  * Race a promise against an abort signal. On abort, rejects with
301
256
  * signal.reason → instance _lastCancelReason → generic Error('Aborted').
@@ -305,10 +260,35 @@ declare class LedgerAdapter implements IHardwareWallet {
305
260
  private static _throwIfAborted;
306
261
  /** Actual work done under the job queue — connection, fingerprint, call, and recovery. */
307
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;
308
272
  private _sleepAbortable;
309
273
  /**
310
- * Ensure OS-level Bluetooth/USB permission; times out after 60s if the host never
311
- * replies. Without connectId the request is environment-level, else device-level.
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;
281
+ /**
282
+ * Ensure OS-level device permission (Bluetooth / USB) before proceeding.
283
+ *
284
+ * Emits `REQUEST_DEVICE_PERMISSION` and awaits the consumer's
285
+ * `RECEIVE_DEVICE_PERMISSION` reply (60s budget covers "probe → system
286
+ * prompt → user tap" plus a generous margin). If the consumer never wires
287
+ * a handler or never replies, the wait times out and the operation fails
288
+ * fast so scanners/callers don't hang silently.
289
+ *
290
+ * - No connectId (searchDevices): environment-level permission
291
+ * - With connectId (business methods): device-level permission
312
292
  */
313
293
  private _ensureDevicePermission;
314
294
  /**
@@ -518,11 +498,6 @@ declare class LedgerConnectorBase implements IConnector {
518
498
  private _getSignerManager;
519
499
  private _getDeviceAppsManager;
520
500
  private _invalidateSession;
521
- /**
522
- * Fire the canceller so DMK closes the secure-channel WebSocket. The DMK device
523
- * session is kept: unlock/retry recovery reuses it.
524
- */
525
- private _teardownSecureChannelSession;
526
501
  /**
527
502
  * Replace an old session with a new one after app switch.
528
503
  * Emits device-connect so the adapter updates its _sessions Map.
@@ -679,25 +654,6 @@ declare class SignerSol {
679
654
  }>;
680
655
  }
681
656
 
682
- /**
683
- * Wraps Ledger's Zcash SDK signer (Observable-based DeviceActions) into a
684
- * simple async interface. Only the viewing-key and shielded-address reads are
685
- * exposed; PCZT signing goes through a different host-side pipeline.
686
- */
687
- declare class SignerZcash {
688
- private readonly _sdk;
689
- onInteraction?: (interaction: string) => void;
690
- onRegisterCanceller?: (cancel: (reason?: CancelReason) => void) => void;
691
- constructor(_sdk: SignerZcash$1);
692
- /** GET_VK: UFVK string (default) or raw 96-byte Orchard FVK. */
693
- getFullViewingKey(derivationPath: string, options?: FullViewingKeyOptions): Promise<GetFullViewingKeyDAOutput>;
694
- /** GET_SHIELDED_ADDRESS: single-Orchard-receiver UA for a 5-level transparent path. */
695
- getShieldedAddress(derivationPath: string, options?: {
696
- checkOnDevice?: boolean;
697
- skipOpenApp?: boolean;
698
- }): Promise<GetShieldedAddressDAOutput>;
699
- }
700
-
701
657
  /**
702
658
  * Transport adapter that bridges Ledger's legacy hw-app-* SDKs to DMK's sendApdu.
703
659
  *
@@ -781,7 +737,7 @@ interface WrapErrorOptions {
781
737
  /** Fallback when err has no `appName` (DMK signer errors don't carry it). */
782
738
  defaultAppName?: string;
783
739
  }
784
- 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;
785
741
  declare function isDeviceLockedError(err: unknown): boolean;
786
742
  /**
787
743
  * Map a Ledger DMK error to a HardwareErrorCode and human-readable message.
@@ -791,7 +747,6 @@ declare function isDeviceLockedError(err: unknown): boolean;
791
747
  declare function mapLedgerError(err: unknown, opts?: WrapErrorOptions): {
792
748
  code: HardwareErrorCode;
793
749
  message: string;
794
- origin?: HwkErrorOrigin;
795
750
  appName?: string;
796
751
  };
797
752
 
@@ -827,4 +782,4 @@ declare function isLedgerDmkBleTransport(transport?: string): boolean;
827
782
  declare function isLedgerBleConnectionType(connectionType?: ConnectionType): boolean;
828
783
  declare function isLedgerBleDescriptor(connectionType: ConnectionType, descriptor: DeviceDescriptor): boolean;
829
784
 
830
- 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 };