@onekeyfe/hwk-ledger-adapter 1.2.3-alpha.6 → 1.2.3-alpha.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +86 -29
- package/dist/index.d.ts +86 -29
- package/dist/index.js +1781 -826
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1789 -814
- package/dist/index.mjs.map +1 -1
- package/package.json +14 -11
package/dist/index.d.mts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import * as _onekeyfe_hwk_adapter_core from '@onekeyfe/hwk-adapter-core';
|
|
2
|
-
import { IHardwareWallet, IConnector, TransportType, UiResponseEvent, SearchDevicesOptions, DeviceInfo, Response,
|
|
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';
|
|
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';
|
|
8
9
|
import Transport from '@ledgerhq/hw-transport';
|
|
9
10
|
|
|
10
11
|
/**
|
|
@@ -95,16 +96,30 @@ type LedgerCallParams<T> = NullableCallArg<IHardwareCallParams<T>>;
|
|
|
95
96
|
type LedgerCommonParams = NullableCallArg<IHardwareCommonCallParams>;
|
|
96
97
|
declare class LedgerAdapter implements IHardwareWallet {
|
|
97
98
|
readonly vendor: "ledger";
|
|
99
|
+
readonly cancelCapability: "stops-waiting";
|
|
98
100
|
private readonly connector;
|
|
99
101
|
private readonly emitter;
|
|
102
|
+
private readonly _operations;
|
|
100
103
|
private _discoveredDevices;
|
|
101
104
|
private _sessions;
|
|
105
|
+
private readonly _pendingOperationBindings;
|
|
106
|
+
private readonly _verifiedBleReconnectTargets;
|
|
102
107
|
private readonly _uiRegistry;
|
|
103
108
|
private _btcHighIndexConfirmedThisSession;
|
|
104
109
|
private readonly _jobQueue;
|
|
105
110
|
private _deviceAuthenticityQueueTail;
|
|
106
111
|
private _doConnectAbortController;
|
|
107
112
|
private readonly _defaultAutoInstallApp;
|
|
113
|
+
private readonly _unsettledConnectorOperations;
|
|
114
|
+
private readonly _connectorIdleWaiters;
|
|
115
|
+
private _resetPromise;
|
|
116
|
+
private _stateGeneration;
|
|
117
|
+
private _connectorTeardownTail;
|
|
118
|
+
private _pendingConnectorTeardowns;
|
|
119
|
+
private _activeConnectionType;
|
|
120
|
+
private _bindingSelectionRequestId;
|
|
121
|
+
private _finishBleBinding;
|
|
122
|
+
private _isBleConnection;
|
|
108
123
|
constructor(connector: IConnector, options?: {
|
|
109
124
|
autoInstallApp?: boolean;
|
|
110
125
|
});
|
|
@@ -118,22 +133,33 @@ declare class LedgerAdapter implements IHardwareWallet {
|
|
|
118
133
|
* The next operation will re-discover and re-connect automatically.
|
|
119
134
|
*/
|
|
120
135
|
resetState(): void;
|
|
136
|
+
private _resetStateAndDisconnectSessions;
|
|
121
137
|
dispose(): Promise<void>;
|
|
122
138
|
uiResponse(response: UiResponseEvent): void;
|
|
123
139
|
searchDevices(options?: SearchDevicesOptions): Promise<DeviceInfo[]>;
|
|
140
|
+
private _searchDevices;
|
|
141
|
+
searchDeviceTargets(options?: SearchDevicesOptions): Promise<DeviceSearchTarget[]>;
|
|
142
|
+
listConnectionTargets(options?: SearchDevicesOptions): Promise<ConnectionTarget[]>;
|
|
124
143
|
private _evictAllSessions;
|
|
125
144
|
private static readonly MAX_BUSINESS_RETRY_BUDGET;
|
|
126
145
|
private static readonly STUCK_APP_RETRY_DELAY_MS;
|
|
127
146
|
private static readonly MAX_DOCONNECT_CONFIRMS;
|
|
128
147
|
private _lastCancelReason;
|
|
148
|
+
private readonly _activeOperationJobs;
|
|
149
|
+
private readonly _pendingOperationDisconnects;
|
|
129
150
|
private static readonly APP_INSTALL_PROGRESS_MIN_DELTA;
|
|
130
151
|
private _installProgressLastEmittedValue;
|
|
131
152
|
private _installProgressLastKey;
|
|
132
153
|
private static _createDeviceBusyError;
|
|
133
|
-
connectDevice(
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
154
|
+
connectDevice(searchTargetId: string): Promise<Response<string>>;
|
|
155
|
+
bindBleDevice(params: BindBleDeviceParams): Promise<Response<string>>;
|
|
156
|
+
acquireOperation(connectId: string, context: IHardwareConnectionContext): Promise<Response<string>>;
|
|
157
|
+
private _createOperation;
|
|
158
|
+
private _connectTarget;
|
|
159
|
+
releaseOperation(operationId: string): Promise<void>;
|
|
160
|
+
private _releaseOperationConnection;
|
|
161
|
+
private _releaseLostOperationConnection;
|
|
162
|
+
getDeviceInfo(connectIdOrOperationId: string, deviceId: string): Promise<Response<DeviceInfo>>;
|
|
137
163
|
allNetworkGetAddress: (connectId: string, _deviceId: string, params: _onekeyfe_hwk_adapter_core.AllNetworkGetAddressParams) => Promise<Response<_onekeyfe_hwk_adapter_core.AllNetworkAddressResponse[]>>;
|
|
138
164
|
private callChain;
|
|
139
165
|
private static normalizeCallArgs;
|
|
@@ -157,6 +183,8 @@ declare class LedgerAdapter implements IHardwareWallet {
|
|
|
157
183
|
tronGetAddress(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronGetAddressParams>): Promise<Response<TronAddress>>;
|
|
158
184
|
tronSignTransaction(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronSignTxParams>): Promise<Response<TronSignedTx>>;
|
|
159
185
|
tronSignMessage(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronSignMsgParams>): Promise<Response<TronSignature>>;
|
|
186
|
+
zcashGetFullViewingKey(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<ZcashGetFullViewingKeyParams>): Promise<Response<ZcashFullViewingKey>>;
|
|
187
|
+
zcashGetShieldedAddress(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<ZcashGetShieldedAddressParams>): Promise<Response<ZcashShieldedAddress>>;
|
|
160
188
|
installApp(connectId: string, appName: string): Promise<Response<void>>;
|
|
161
189
|
listInstalledApps(connectId: string): Promise<Response<AppMetadata[]>>;
|
|
162
190
|
listInstalledNames(connectId: string): Promise<Response<string[]>>;
|
|
@@ -181,11 +209,11 @@ declare class LedgerAdapter implements IHardwareWallet {
|
|
|
181
209
|
off<K extends keyof HardwareEventMap>(event: K, listener: (event: HardwareEventMap[K]) => void): void;
|
|
182
210
|
off(event: string, listener: DeviceEventListener): void;
|
|
183
211
|
cancel(connectId?: string): void;
|
|
212
|
+
/** A non-empty deviceId is an expected chain fingerprint, not a transport identifier. */
|
|
184
213
|
getChainFingerprint(connectId: string, deviceId: string, chain: ChainForFingerprint): Promise<Response<string>>;
|
|
185
|
-
/**
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
*/
|
|
214
|
+
/** Discovery may select a BLE target before a later call verifies its wallet. */
|
|
215
|
+
private _publishVerifiedBleBinding;
|
|
216
|
+
/** Verify on the acquired session without re-entering the job queue. */
|
|
189
217
|
private _verifyDeviceFingerprintWithSession;
|
|
190
218
|
/**
|
|
191
219
|
* Compute the chain fingerprint via a caller-supplied call strategy.
|
|
@@ -207,9 +235,17 @@ declare class LedgerAdapter implements IHardwareWallet {
|
|
|
207
235
|
*
|
|
208
236
|
* - If a session already exists for the given connectId, reuse it.
|
|
209
237
|
* - If ANY session exists (Ledger IDs are ephemeral), reuse it.
|
|
210
|
-
* - Otherwise: search →
|
|
238
|
+
* - Otherwise: search → one USB device auto-connects; multiple asks the host to choose.
|
|
211
239
|
*/
|
|
212
240
|
private _connectingPromise;
|
|
241
|
+
/**
|
|
242
|
+
* The operation the running device job belongs to, so a UI request raised
|
|
243
|
+
* mid-call can name it. A call pinned to an operation queues under its id
|
|
244
|
+
* (`ledgerQueueKey`); a call without one queues under the connectId, and the
|
|
245
|
+
* live operation on that connection is still the owner. Only work with no
|
|
246
|
+
* operation at all (cold start) comes back undefined.
|
|
247
|
+
*/
|
|
248
|
+
private _activeOperationId;
|
|
213
249
|
private _waitForDeviceConnect;
|
|
214
250
|
/**
|
|
215
251
|
* Decide whether a BTC pubkey call needs `showOnDevice=true` because of
|
|
@@ -250,34 +286,23 @@ declare class LedgerAdapter implements IHardwareWallet {
|
|
|
250
286
|
* lives in one place.
|
|
251
287
|
*/
|
|
252
288
|
private _callConnector;
|
|
289
|
+
private _assertConnectorReady;
|
|
290
|
+
private _runConnectorTeardown;
|
|
291
|
+
private _waitForConnectorOperationsToDrain;
|
|
292
|
+
private _retainConnectorOperation;
|
|
253
293
|
private connectorCall;
|
|
254
294
|
/**
|
|
255
295
|
* Race a promise against an abort signal. On abort, rejects with
|
|
256
296
|
* signal.reason → instance _lastCancelReason → generic Error('Aborted').
|
|
257
297
|
*/
|
|
298
|
+
/** Hermes/RN polyfills don't always populate signal.reason; fall back. */
|
|
299
|
+
private _abortReason;
|
|
258
300
|
private _abortable;
|
|
259
301
|
/** Throw an AbortError if signal is already aborted. */
|
|
260
302
|
private static _throwIfAborted;
|
|
261
303
|
/** Actual work done under the job queue — connection, fingerprint, call, and recovery. */
|
|
262
304
|
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;
|
|
272
305
|
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;
|
|
281
306
|
/**
|
|
282
307
|
* Ensure OS-level device permission (Bluetooth / USB) before proceeding.
|
|
283
308
|
*
|
|
@@ -498,6 +523,18 @@ declare class LedgerConnectorBase implements IConnector {
|
|
|
498
523
|
private _getSignerManager;
|
|
499
524
|
private _getDeviceAppsManager;
|
|
500
525
|
private _invalidateSession;
|
|
526
|
+
/**
|
|
527
|
+
* Teardown for the OS-level actions that open a manager-api secure channel
|
|
528
|
+
* (install, uninstall, genuine check). Cancelling the device action is what
|
|
529
|
+
* stops DMK's xstate actor, which unsubscribes the secure-channel observable
|
|
530
|
+
* and closes its WebSocket; dropping the canceller without firing it leaves
|
|
531
|
+
* that teardown to run only if the action settled on its own.
|
|
532
|
+
*
|
|
533
|
+
* The DMK device session is deliberately kept: the secure channel is a
|
|
534
|
+
* separate WebSocket per call, and disconnecting here would break the bounded
|
|
535
|
+
* unlock/retry recovery the adapter runs on the original session.
|
|
536
|
+
*/
|
|
537
|
+
private _teardownSecureChannelSession;
|
|
501
538
|
/**
|
|
502
539
|
* Replace an old session with a new one after app switch.
|
|
503
540
|
* Emits device-connect so the adapter updates its _sessions Map.
|
|
@@ -654,6 +691,25 @@ declare class SignerSol {
|
|
|
654
691
|
}>;
|
|
655
692
|
}
|
|
656
693
|
|
|
694
|
+
/**
|
|
695
|
+
* Wraps Ledger's Zcash SDK signer (Observable-based DeviceActions) into a
|
|
696
|
+
* simple async interface. Only the viewing-key and shielded-address reads are
|
|
697
|
+
* exposed; PCZT signing goes through a different host-side pipeline.
|
|
698
|
+
*/
|
|
699
|
+
declare class SignerZcash {
|
|
700
|
+
private readonly _sdk;
|
|
701
|
+
onInteraction?: (interaction: string) => void;
|
|
702
|
+
onRegisterCanceller?: (cancel: (reason?: CancelReason) => void) => void;
|
|
703
|
+
constructor(_sdk: SignerZcash$1);
|
|
704
|
+
/** GET_VK: UFVK string (default) or raw 96-byte Orchard FVK. */
|
|
705
|
+
getFullViewingKey(derivationPath: string, options?: FullViewingKeyOptions): Promise<GetFullViewingKeyDAOutput>;
|
|
706
|
+
/** GET_SHIELDED_ADDRESS: single-Orchard-receiver UA for a 5-level transparent path. */
|
|
707
|
+
getShieldedAddress(derivationPath: string, options?: {
|
|
708
|
+
checkOnDevice?: boolean;
|
|
709
|
+
skipOpenApp?: boolean;
|
|
710
|
+
}): Promise<GetShieldedAddressDAOutput>;
|
|
711
|
+
}
|
|
712
|
+
|
|
657
713
|
/**
|
|
658
714
|
* Transport adapter that bridges Ledger's legacy hw-app-* SDKs to DMK's sendApdu.
|
|
659
715
|
*
|
|
@@ -737,7 +793,7 @@ interface WrapErrorOptions {
|
|
|
737
793
|
/** Fallback when err has no `appName` (DMK signer errors don't carry it). */
|
|
738
794
|
defaultAppName?: string;
|
|
739
795
|
}
|
|
740
|
-
declare function ledgerFailure(code: HardwareErrorCode, error: string, appName?: string, tag?: string, params?: Record<string, unknown
|
|
796
|
+
declare function ledgerFailure(code: HardwareErrorCode, error: string, appName?: string, tag?: string, params?: Record<string, unknown>, origin?: HwkErrorOrigin, recovery?: HwkRecoveryHint): LedgerFailure;
|
|
741
797
|
declare function isDeviceLockedError(err: unknown): boolean;
|
|
742
798
|
/**
|
|
743
799
|
* Map a Ledger DMK error to a HardwareErrorCode and human-readable message.
|
|
@@ -747,6 +803,7 @@ declare function isDeviceLockedError(err: unknown): boolean;
|
|
|
747
803
|
declare function mapLedgerError(err: unknown, opts?: WrapErrorOptions): {
|
|
748
804
|
code: HardwareErrorCode;
|
|
749
805
|
message: string;
|
|
806
|
+
origin?: HwkErrorOrigin;
|
|
750
807
|
appName?: string;
|
|
751
808
|
};
|
|
752
809
|
|
|
@@ -782,4 +839,4 @@ declare function isLedgerDmkBleTransport(transport?: string): boolean;
|
|
|
782
839
|
declare function isLedgerBleConnectionType(connectionType?: ConnectionType): boolean;
|
|
783
840
|
declare function isLedgerBleDescriptor(connectionType: ConnectionType, descriptor: DeviceDescriptor): boolean;
|
|
784
841
|
|
|
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 };
|
|
842
|
+
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 };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import * as _onekeyfe_hwk_adapter_core from '@onekeyfe/hwk-adapter-core';
|
|
2
|
-
import { IHardwareWallet, IConnector, TransportType, UiResponseEvent, SearchDevicesOptions, DeviceInfo, Response,
|
|
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';
|
|
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';
|
|
8
9
|
import Transport from '@ledgerhq/hw-transport';
|
|
9
10
|
|
|
10
11
|
/**
|
|
@@ -95,16 +96,30 @@ type LedgerCallParams<T> = NullableCallArg<IHardwareCallParams<T>>;
|
|
|
95
96
|
type LedgerCommonParams = NullableCallArg<IHardwareCommonCallParams>;
|
|
96
97
|
declare class LedgerAdapter implements IHardwareWallet {
|
|
97
98
|
readonly vendor: "ledger";
|
|
99
|
+
readonly cancelCapability: "stops-waiting";
|
|
98
100
|
private readonly connector;
|
|
99
101
|
private readonly emitter;
|
|
102
|
+
private readonly _operations;
|
|
100
103
|
private _discoveredDevices;
|
|
101
104
|
private _sessions;
|
|
105
|
+
private readonly _pendingOperationBindings;
|
|
106
|
+
private readonly _verifiedBleReconnectTargets;
|
|
102
107
|
private readonly _uiRegistry;
|
|
103
108
|
private _btcHighIndexConfirmedThisSession;
|
|
104
109
|
private readonly _jobQueue;
|
|
105
110
|
private _deviceAuthenticityQueueTail;
|
|
106
111
|
private _doConnectAbortController;
|
|
107
112
|
private readonly _defaultAutoInstallApp;
|
|
113
|
+
private readonly _unsettledConnectorOperations;
|
|
114
|
+
private readonly _connectorIdleWaiters;
|
|
115
|
+
private _resetPromise;
|
|
116
|
+
private _stateGeneration;
|
|
117
|
+
private _connectorTeardownTail;
|
|
118
|
+
private _pendingConnectorTeardowns;
|
|
119
|
+
private _activeConnectionType;
|
|
120
|
+
private _bindingSelectionRequestId;
|
|
121
|
+
private _finishBleBinding;
|
|
122
|
+
private _isBleConnection;
|
|
108
123
|
constructor(connector: IConnector, options?: {
|
|
109
124
|
autoInstallApp?: boolean;
|
|
110
125
|
});
|
|
@@ -118,22 +133,33 @@ declare class LedgerAdapter implements IHardwareWallet {
|
|
|
118
133
|
* The next operation will re-discover and re-connect automatically.
|
|
119
134
|
*/
|
|
120
135
|
resetState(): void;
|
|
136
|
+
private _resetStateAndDisconnectSessions;
|
|
121
137
|
dispose(): Promise<void>;
|
|
122
138
|
uiResponse(response: UiResponseEvent): void;
|
|
123
139
|
searchDevices(options?: SearchDevicesOptions): Promise<DeviceInfo[]>;
|
|
140
|
+
private _searchDevices;
|
|
141
|
+
searchDeviceTargets(options?: SearchDevicesOptions): Promise<DeviceSearchTarget[]>;
|
|
142
|
+
listConnectionTargets(options?: SearchDevicesOptions): Promise<ConnectionTarget[]>;
|
|
124
143
|
private _evictAllSessions;
|
|
125
144
|
private static readonly MAX_BUSINESS_RETRY_BUDGET;
|
|
126
145
|
private static readonly STUCK_APP_RETRY_DELAY_MS;
|
|
127
146
|
private static readonly MAX_DOCONNECT_CONFIRMS;
|
|
128
147
|
private _lastCancelReason;
|
|
148
|
+
private readonly _activeOperationJobs;
|
|
149
|
+
private readonly _pendingOperationDisconnects;
|
|
129
150
|
private static readonly APP_INSTALL_PROGRESS_MIN_DELTA;
|
|
130
151
|
private _installProgressLastEmittedValue;
|
|
131
152
|
private _installProgressLastKey;
|
|
132
153
|
private static _createDeviceBusyError;
|
|
133
|
-
connectDevice(
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
154
|
+
connectDevice(searchTargetId: string): Promise<Response<string>>;
|
|
155
|
+
bindBleDevice(params: BindBleDeviceParams): Promise<Response<string>>;
|
|
156
|
+
acquireOperation(connectId: string, context: IHardwareConnectionContext): Promise<Response<string>>;
|
|
157
|
+
private _createOperation;
|
|
158
|
+
private _connectTarget;
|
|
159
|
+
releaseOperation(operationId: string): Promise<void>;
|
|
160
|
+
private _releaseOperationConnection;
|
|
161
|
+
private _releaseLostOperationConnection;
|
|
162
|
+
getDeviceInfo(connectIdOrOperationId: string, deviceId: string): Promise<Response<DeviceInfo>>;
|
|
137
163
|
allNetworkGetAddress: (connectId: string, _deviceId: string, params: _onekeyfe_hwk_adapter_core.AllNetworkGetAddressParams) => Promise<Response<_onekeyfe_hwk_adapter_core.AllNetworkAddressResponse[]>>;
|
|
138
164
|
private callChain;
|
|
139
165
|
private static normalizeCallArgs;
|
|
@@ -157,6 +183,8 @@ declare class LedgerAdapter implements IHardwareWallet {
|
|
|
157
183
|
tronGetAddress(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronGetAddressParams>): Promise<Response<TronAddress>>;
|
|
158
184
|
tronSignTransaction(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronSignTxParams>): Promise<Response<TronSignedTx>>;
|
|
159
185
|
tronSignMessage(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronSignMsgParams>): Promise<Response<TronSignature>>;
|
|
186
|
+
zcashGetFullViewingKey(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<ZcashGetFullViewingKeyParams>): Promise<Response<ZcashFullViewingKey>>;
|
|
187
|
+
zcashGetShieldedAddress(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<ZcashGetShieldedAddressParams>): Promise<Response<ZcashShieldedAddress>>;
|
|
160
188
|
installApp(connectId: string, appName: string): Promise<Response<void>>;
|
|
161
189
|
listInstalledApps(connectId: string): Promise<Response<AppMetadata[]>>;
|
|
162
190
|
listInstalledNames(connectId: string): Promise<Response<string[]>>;
|
|
@@ -181,11 +209,11 @@ declare class LedgerAdapter implements IHardwareWallet {
|
|
|
181
209
|
off<K extends keyof HardwareEventMap>(event: K, listener: (event: HardwareEventMap[K]) => void): void;
|
|
182
210
|
off(event: string, listener: DeviceEventListener): void;
|
|
183
211
|
cancel(connectId?: string): void;
|
|
212
|
+
/** A non-empty deviceId is an expected chain fingerprint, not a transport identifier. */
|
|
184
213
|
getChainFingerprint(connectId: string, deviceId: string, chain: ChainForFingerprint): Promise<Response<string>>;
|
|
185
|
-
/**
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
*/
|
|
214
|
+
/** Discovery may select a BLE target before a later call verifies its wallet. */
|
|
215
|
+
private _publishVerifiedBleBinding;
|
|
216
|
+
/** Verify on the acquired session without re-entering the job queue. */
|
|
189
217
|
private _verifyDeviceFingerprintWithSession;
|
|
190
218
|
/**
|
|
191
219
|
* Compute the chain fingerprint via a caller-supplied call strategy.
|
|
@@ -207,9 +235,17 @@ declare class LedgerAdapter implements IHardwareWallet {
|
|
|
207
235
|
*
|
|
208
236
|
* - If a session already exists for the given connectId, reuse it.
|
|
209
237
|
* - If ANY session exists (Ledger IDs are ephemeral), reuse it.
|
|
210
|
-
* - Otherwise: search →
|
|
238
|
+
* - Otherwise: search → one USB device auto-connects; multiple asks the host to choose.
|
|
211
239
|
*/
|
|
212
240
|
private _connectingPromise;
|
|
241
|
+
/**
|
|
242
|
+
* The operation the running device job belongs to, so a UI request raised
|
|
243
|
+
* mid-call can name it. A call pinned to an operation queues under its id
|
|
244
|
+
* (`ledgerQueueKey`); a call without one queues under the connectId, and the
|
|
245
|
+
* live operation on that connection is still the owner. Only work with no
|
|
246
|
+
* operation at all (cold start) comes back undefined.
|
|
247
|
+
*/
|
|
248
|
+
private _activeOperationId;
|
|
213
249
|
private _waitForDeviceConnect;
|
|
214
250
|
/**
|
|
215
251
|
* Decide whether a BTC pubkey call needs `showOnDevice=true` because of
|
|
@@ -250,34 +286,23 @@ declare class LedgerAdapter implements IHardwareWallet {
|
|
|
250
286
|
* lives in one place.
|
|
251
287
|
*/
|
|
252
288
|
private _callConnector;
|
|
289
|
+
private _assertConnectorReady;
|
|
290
|
+
private _runConnectorTeardown;
|
|
291
|
+
private _waitForConnectorOperationsToDrain;
|
|
292
|
+
private _retainConnectorOperation;
|
|
253
293
|
private connectorCall;
|
|
254
294
|
/**
|
|
255
295
|
* Race a promise against an abort signal. On abort, rejects with
|
|
256
296
|
* signal.reason → instance _lastCancelReason → generic Error('Aborted').
|
|
257
297
|
*/
|
|
298
|
+
/** Hermes/RN polyfills don't always populate signal.reason; fall back. */
|
|
299
|
+
private _abortReason;
|
|
258
300
|
private _abortable;
|
|
259
301
|
/** Throw an AbortError if signal is already aborted. */
|
|
260
302
|
private static _throwIfAborted;
|
|
261
303
|
/** Actual work done under the job queue — connection, fingerprint, call, and recovery. */
|
|
262
304
|
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;
|
|
272
305
|
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;
|
|
281
306
|
/**
|
|
282
307
|
* Ensure OS-level device permission (Bluetooth / USB) before proceeding.
|
|
283
308
|
*
|
|
@@ -498,6 +523,18 @@ declare class LedgerConnectorBase implements IConnector {
|
|
|
498
523
|
private _getSignerManager;
|
|
499
524
|
private _getDeviceAppsManager;
|
|
500
525
|
private _invalidateSession;
|
|
526
|
+
/**
|
|
527
|
+
* Teardown for the OS-level actions that open a manager-api secure channel
|
|
528
|
+
* (install, uninstall, genuine check). Cancelling the device action is what
|
|
529
|
+
* stops DMK's xstate actor, which unsubscribes the secure-channel observable
|
|
530
|
+
* and closes its WebSocket; dropping the canceller without firing it leaves
|
|
531
|
+
* that teardown to run only if the action settled on its own.
|
|
532
|
+
*
|
|
533
|
+
* The DMK device session is deliberately kept: the secure channel is a
|
|
534
|
+
* separate WebSocket per call, and disconnecting here would break the bounded
|
|
535
|
+
* unlock/retry recovery the adapter runs on the original session.
|
|
536
|
+
*/
|
|
537
|
+
private _teardownSecureChannelSession;
|
|
501
538
|
/**
|
|
502
539
|
* Replace an old session with a new one after app switch.
|
|
503
540
|
* Emits device-connect so the adapter updates its _sessions Map.
|
|
@@ -654,6 +691,25 @@ declare class SignerSol {
|
|
|
654
691
|
}>;
|
|
655
692
|
}
|
|
656
693
|
|
|
694
|
+
/**
|
|
695
|
+
* Wraps Ledger's Zcash SDK signer (Observable-based DeviceActions) into a
|
|
696
|
+
* simple async interface. Only the viewing-key and shielded-address reads are
|
|
697
|
+
* exposed; PCZT signing goes through a different host-side pipeline.
|
|
698
|
+
*/
|
|
699
|
+
declare class SignerZcash {
|
|
700
|
+
private readonly _sdk;
|
|
701
|
+
onInteraction?: (interaction: string) => void;
|
|
702
|
+
onRegisterCanceller?: (cancel: (reason?: CancelReason) => void) => void;
|
|
703
|
+
constructor(_sdk: SignerZcash$1);
|
|
704
|
+
/** GET_VK: UFVK string (default) or raw 96-byte Orchard FVK. */
|
|
705
|
+
getFullViewingKey(derivationPath: string, options?: FullViewingKeyOptions): Promise<GetFullViewingKeyDAOutput>;
|
|
706
|
+
/** GET_SHIELDED_ADDRESS: single-Orchard-receiver UA for a 5-level transparent path. */
|
|
707
|
+
getShieldedAddress(derivationPath: string, options?: {
|
|
708
|
+
checkOnDevice?: boolean;
|
|
709
|
+
skipOpenApp?: boolean;
|
|
710
|
+
}): Promise<GetShieldedAddressDAOutput>;
|
|
711
|
+
}
|
|
712
|
+
|
|
657
713
|
/**
|
|
658
714
|
* Transport adapter that bridges Ledger's legacy hw-app-* SDKs to DMK's sendApdu.
|
|
659
715
|
*
|
|
@@ -737,7 +793,7 @@ interface WrapErrorOptions {
|
|
|
737
793
|
/** Fallback when err has no `appName` (DMK signer errors don't carry it). */
|
|
738
794
|
defaultAppName?: string;
|
|
739
795
|
}
|
|
740
|
-
declare function ledgerFailure(code: HardwareErrorCode, error: string, appName?: string, tag?: string, params?: Record<string, unknown
|
|
796
|
+
declare function ledgerFailure(code: HardwareErrorCode, error: string, appName?: string, tag?: string, params?: Record<string, unknown>, origin?: HwkErrorOrigin, recovery?: HwkRecoveryHint): LedgerFailure;
|
|
741
797
|
declare function isDeviceLockedError(err: unknown): boolean;
|
|
742
798
|
/**
|
|
743
799
|
* Map a Ledger DMK error to a HardwareErrorCode and human-readable message.
|
|
@@ -747,6 +803,7 @@ declare function isDeviceLockedError(err: unknown): boolean;
|
|
|
747
803
|
declare function mapLedgerError(err: unknown, opts?: WrapErrorOptions): {
|
|
748
804
|
code: HardwareErrorCode;
|
|
749
805
|
message: string;
|
|
806
|
+
origin?: HwkErrorOrigin;
|
|
750
807
|
appName?: string;
|
|
751
808
|
};
|
|
752
809
|
|
|
@@ -782,4 +839,4 @@ declare function isLedgerDmkBleTransport(transport?: string): boolean;
|
|
|
782
839
|
declare function isLedgerBleConnectionType(connectionType?: ConnectionType): boolean;
|
|
783
840
|
declare function isLedgerBleDescriptor(connectionType: ConnectionType, descriptor: DeviceDescriptor): boolean;
|
|
784
841
|
|
|
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 };
|
|
842
|
+
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 };
|