@onekeyfe/hwk-ledger-adapter 1.2.8-alpha.1 → 1.2.8-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 +39 -86
- package/dist/index.d.ts +39 -86
- package/dist/index.js +847 -1794
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +835 -1803
- package/dist/index.mjs.map +1 -1
- package/package.json +11 -14
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,
|
|
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,37 +118,23 @@ 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(
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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
|
-
/** A bundle's BLE pick that no item got past the wallet check is not kept. */
|
|
170
|
-
private _dropUncheckedBundlePick;
|
|
171
138
|
private callChain;
|
|
172
139
|
private static normalizeCallArgs;
|
|
173
140
|
private static splitCommonParams;
|
|
@@ -190,8 +157,6 @@ declare class LedgerAdapter implements IHardwareWallet {
|
|
|
190
157
|
tronGetAddress(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronGetAddressParams>): Promise<Response<TronAddress>>;
|
|
191
158
|
tronSignTransaction(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronSignTxParams>): Promise<Response<TronSignedTx>>;
|
|
192
159
|
tronSignMessage(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronSignMsgParams>): Promise<Response<TronSignature>>;
|
|
193
|
-
zcashGetFullViewingKey(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<ZcashGetFullViewingKeyParams>): Promise<Response<ZcashFullViewingKey>>;
|
|
194
|
-
zcashGetShieldedAddress(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<ZcashGetShieldedAddressParams>): Promise<Response<ZcashShieldedAddress>>;
|
|
195
160
|
installApp(connectId: string, appName: string): Promise<Response<void>>;
|
|
196
161
|
listInstalledApps(connectId: string): Promise<Response<AppMetadata[]>>;
|
|
197
162
|
listInstalledNames(connectId: string): Promise<Response<string[]>>;
|
|
@@ -216,12 +181,11 @@ declare class LedgerAdapter implements IHardwareWallet {
|
|
|
216
181
|
off<K extends keyof HardwareEventMap>(event: K, listener: (event: HardwareEventMap[K]) => void): void;
|
|
217
182
|
off(event: string, listener: DeviceEventListener): void;
|
|
218
183
|
cancel(connectId?: string): void;
|
|
219
|
-
/** A non-empty deviceId is an expected chain fingerprint, not a transport identifier. */
|
|
220
184
|
getChainFingerprint(connectId: string, deviceId: string, chain: ChainForFingerprint): Promise<Response<string>>;
|
|
221
|
-
/**
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
185
|
+
/**
|
|
186
|
+
* Verify fingerprint using an existing sessionId directly.
|
|
187
|
+
* Safe to call inside connectorCall without causing queue deadlock.
|
|
188
|
+
*/
|
|
225
189
|
private _verifyDeviceFingerprintWithSession;
|
|
226
190
|
/**
|
|
227
191
|
* Compute the chain fingerprint via a caller-supplied call strategy.
|
|
@@ -243,14 +207,9 @@ declare class LedgerAdapter implements IHardwareWallet {
|
|
|
243
207
|
*
|
|
244
208
|
* - If a session already exists for the given connectId, reuse it.
|
|
245
209
|
* - If ANY session exists (Ledger IDs are ephemeral), reuse it.
|
|
246
|
-
* - Otherwise: search →
|
|
210
|
+
* - Otherwise: search → exactly 1 USB device auto-connects; multiple or none throws.
|
|
247
211
|
*/
|
|
248
212
|
private _connectingPromise;
|
|
249
|
-
/**
|
|
250
|
-
* Operation owning the running job, so a mid-call UI request can name it.
|
|
251
|
-
* Undefined at cold start when no operation owns the job.
|
|
252
|
-
*/
|
|
253
|
-
private _activeOperationId;
|
|
254
213
|
private _waitForDeviceConnect;
|
|
255
214
|
/**
|
|
256
215
|
* Decide whether a BTC pubkey call needs `showOnDevice=true` because of
|
|
@@ -291,13 +250,7 @@ declare class LedgerAdapter implements IHardwareWallet {
|
|
|
291
250
|
* lives in one place.
|
|
292
251
|
*/
|
|
293
252
|
private _callConnector;
|
|
294
|
-
private _assertConnectorReady;
|
|
295
|
-
private _runConnectorTeardown;
|
|
296
|
-
private _waitForConnectorOperationsToDrain;
|
|
297
|
-
private _retainConnectorOperation;
|
|
298
253
|
private connectorCall;
|
|
299
|
-
/** Hermes/RN polyfills don't always populate signal.reason; fall back. */
|
|
300
|
-
private _abortReason;
|
|
301
254
|
/**
|
|
302
255
|
* Race a promise against an abort signal. On abort, rejects with
|
|
303
256
|
* signal.reason → instance _lastCancelReason → generic Error('Aborted').
|
|
@@ -307,10 +260,35 @@ declare class LedgerAdapter implements IHardwareWallet {
|
|
|
307
260
|
private static _throwIfAborted;
|
|
308
261
|
/** Actual work done under the job queue — connection, fingerprint, call, and recovery. */
|
|
309
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;
|
|
310
272
|
private _sleepAbortable;
|
|
311
273
|
/**
|
|
312
|
-
*
|
|
313
|
-
*
|
|
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
|
|
314
292
|
*/
|
|
315
293
|
private _ensureDevicePermission;
|
|
316
294
|
/**
|
|
@@ -520,11 +498,6 @@ declare class LedgerConnectorBase implements IConnector {
|
|
|
520
498
|
private _getSignerManager;
|
|
521
499
|
private _getDeviceAppsManager;
|
|
522
500
|
private _invalidateSession;
|
|
523
|
-
/**
|
|
524
|
-
* Fire the canceller so DMK closes the secure-channel WebSocket. The DMK device
|
|
525
|
-
* session is kept: unlock/retry recovery reuses it.
|
|
526
|
-
*/
|
|
527
|
-
private _teardownSecureChannelSession;
|
|
528
501
|
/**
|
|
529
502
|
* Replace an old session with a new one after app switch.
|
|
530
503
|
* Emits device-connect so the adapter updates its _sessions Map.
|
|
@@ -681,25 +654,6 @@ declare class SignerSol {
|
|
|
681
654
|
}>;
|
|
682
655
|
}
|
|
683
656
|
|
|
684
|
-
/**
|
|
685
|
-
* Wraps Ledger's Zcash SDK signer (Observable-based DeviceActions) into a
|
|
686
|
-
* simple async interface. Only the viewing-key and shielded-address reads are
|
|
687
|
-
* exposed; PCZT signing goes through a different host-side pipeline.
|
|
688
|
-
*/
|
|
689
|
-
declare class SignerZcash {
|
|
690
|
-
private readonly _sdk;
|
|
691
|
-
onInteraction?: (interaction: string) => void;
|
|
692
|
-
onRegisterCanceller?: (cancel: (reason?: CancelReason) => void) => void;
|
|
693
|
-
constructor(_sdk: SignerZcash$1);
|
|
694
|
-
/** GET_VK: UFVK string (default) or raw 96-byte Orchard FVK. */
|
|
695
|
-
getFullViewingKey(derivationPath: string, options?: FullViewingKeyOptions): Promise<GetFullViewingKeyDAOutput>;
|
|
696
|
-
/** GET_SHIELDED_ADDRESS: single-Orchard-receiver UA for a 5-level transparent path. */
|
|
697
|
-
getShieldedAddress(derivationPath: string, options?: {
|
|
698
|
-
checkOnDevice?: boolean;
|
|
699
|
-
skipOpenApp?: boolean;
|
|
700
|
-
}): Promise<GetShieldedAddressDAOutput>;
|
|
701
|
-
}
|
|
702
|
-
|
|
703
657
|
/**
|
|
704
658
|
* Transport adapter that bridges Ledger's legacy hw-app-* SDKs to DMK's sendApdu.
|
|
705
659
|
*
|
|
@@ -783,7 +737,7 @@ interface WrapErrorOptions {
|
|
|
783
737
|
/** Fallback when err has no `appName` (DMK signer errors don't carry it). */
|
|
784
738
|
defaultAppName?: string;
|
|
785
739
|
}
|
|
786
|
-
declare function ledgerFailure(code: HardwareErrorCode, error: string, appName?: string, tag?: string, params?: Record<string, unknown
|
|
740
|
+
declare function ledgerFailure(code: HardwareErrorCode, error: string, appName?: string, tag?: string, params?: Record<string, unknown>): LedgerFailure;
|
|
787
741
|
declare function isDeviceLockedError(err: unknown): boolean;
|
|
788
742
|
/**
|
|
789
743
|
* Map a Ledger DMK error to a HardwareErrorCode and human-readable message.
|
|
@@ -793,7 +747,6 @@ declare function isDeviceLockedError(err: unknown): boolean;
|
|
|
793
747
|
declare function mapLedgerError(err: unknown, opts?: WrapErrorOptions): {
|
|
794
748
|
code: HardwareErrorCode;
|
|
795
749
|
message: string;
|
|
796
|
-
origin?: HwkErrorOrigin;
|
|
797
750
|
appName?: string;
|
|
798
751
|
};
|
|
799
752
|
|
|
@@ -829,4 +782,4 @@ declare function isLedgerDmkBleTransport(transport?: string): boolean;
|
|
|
829
782
|
declare function isLedgerBleConnectionType(connectionType?: ConnectionType): boolean;
|
|
830
783
|
declare function isLedgerBleDescriptor(connectionType: ConnectionType, descriptor: DeviceDescriptor): boolean;
|
|
831
784
|
|
|
832
|
-
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,
|
|
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,
|
|
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,37 +118,23 @@ 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(
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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
|
-
/** A bundle's BLE pick that no item got past the wallet check is not kept. */
|
|
170
|
-
private _dropUncheckedBundlePick;
|
|
171
138
|
private callChain;
|
|
172
139
|
private static normalizeCallArgs;
|
|
173
140
|
private static splitCommonParams;
|
|
@@ -190,8 +157,6 @@ declare class LedgerAdapter implements IHardwareWallet {
|
|
|
190
157
|
tronGetAddress(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronGetAddressParams>): Promise<Response<TronAddress>>;
|
|
191
158
|
tronSignTransaction(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronSignTxParams>): Promise<Response<TronSignedTx>>;
|
|
192
159
|
tronSignMessage(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<TronSignMsgParams>): Promise<Response<TronSignature>>;
|
|
193
|
-
zcashGetFullViewingKey(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<ZcashGetFullViewingKeyParams>): Promise<Response<ZcashFullViewingKey>>;
|
|
194
|
-
zcashGetShieldedAddress(connectId?: string | null, deviceId?: string | null, params?: LedgerCallParams<ZcashGetShieldedAddressParams>): Promise<Response<ZcashShieldedAddress>>;
|
|
195
160
|
installApp(connectId: string, appName: string): Promise<Response<void>>;
|
|
196
161
|
listInstalledApps(connectId: string): Promise<Response<AppMetadata[]>>;
|
|
197
162
|
listInstalledNames(connectId: string): Promise<Response<string[]>>;
|
|
@@ -216,12 +181,11 @@ declare class LedgerAdapter implements IHardwareWallet {
|
|
|
216
181
|
off<K extends keyof HardwareEventMap>(event: K, listener: (event: HardwareEventMap[K]) => void): void;
|
|
217
182
|
off(event: string, listener: DeviceEventListener): void;
|
|
218
183
|
cancel(connectId?: string): void;
|
|
219
|
-
/** A non-empty deviceId is an expected chain fingerprint, not a transport identifier. */
|
|
220
184
|
getChainFingerprint(connectId: string, deviceId: string, chain: ChainForFingerprint): Promise<Response<string>>;
|
|
221
|
-
/**
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
185
|
+
/**
|
|
186
|
+
* Verify fingerprint using an existing sessionId directly.
|
|
187
|
+
* Safe to call inside connectorCall without causing queue deadlock.
|
|
188
|
+
*/
|
|
225
189
|
private _verifyDeviceFingerprintWithSession;
|
|
226
190
|
/**
|
|
227
191
|
* Compute the chain fingerprint via a caller-supplied call strategy.
|
|
@@ -243,14 +207,9 @@ declare class LedgerAdapter implements IHardwareWallet {
|
|
|
243
207
|
*
|
|
244
208
|
* - If a session already exists for the given connectId, reuse it.
|
|
245
209
|
* - If ANY session exists (Ledger IDs are ephemeral), reuse it.
|
|
246
|
-
* - Otherwise: search →
|
|
210
|
+
* - Otherwise: search → exactly 1 USB device auto-connects; multiple or none throws.
|
|
247
211
|
*/
|
|
248
212
|
private _connectingPromise;
|
|
249
|
-
/**
|
|
250
|
-
* Operation owning the running job, so a mid-call UI request can name it.
|
|
251
|
-
* Undefined at cold start when no operation owns the job.
|
|
252
|
-
*/
|
|
253
|
-
private _activeOperationId;
|
|
254
213
|
private _waitForDeviceConnect;
|
|
255
214
|
/**
|
|
256
215
|
* Decide whether a BTC pubkey call needs `showOnDevice=true` because of
|
|
@@ -291,13 +250,7 @@ declare class LedgerAdapter implements IHardwareWallet {
|
|
|
291
250
|
* lives in one place.
|
|
292
251
|
*/
|
|
293
252
|
private _callConnector;
|
|
294
|
-
private _assertConnectorReady;
|
|
295
|
-
private _runConnectorTeardown;
|
|
296
|
-
private _waitForConnectorOperationsToDrain;
|
|
297
|
-
private _retainConnectorOperation;
|
|
298
253
|
private connectorCall;
|
|
299
|
-
/** Hermes/RN polyfills don't always populate signal.reason; fall back. */
|
|
300
|
-
private _abortReason;
|
|
301
254
|
/**
|
|
302
255
|
* Race a promise against an abort signal. On abort, rejects with
|
|
303
256
|
* signal.reason → instance _lastCancelReason → generic Error('Aborted').
|
|
@@ -307,10 +260,35 @@ declare class LedgerAdapter implements IHardwareWallet {
|
|
|
307
260
|
private static _throwIfAborted;
|
|
308
261
|
/** Actual work done under the job queue — connection, fingerprint, call, and recovery. */
|
|
309
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;
|
|
310
272
|
private _sleepAbortable;
|
|
311
273
|
/**
|
|
312
|
-
*
|
|
313
|
-
*
|
|
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
|
|
314
292
|
*/
|
|
315
293
|
private _ensureDevicePermission;
|
|
316
294
|
/**
|
|
@@ -520,11 +498,6 @@ declare class LedgerConnectorBase implements IConnector {
|
|
|
520
498
|
private _getSignerManager;
|
|
521
499
|
private _getDeviceAppsManager;
|
|
522
500
|
private _invalidateSession;
|
|
523
|
-
/**
|
|
524
|
-
* Fire the canceller so DMK closes the secure-channel WebSocket. The DMK device
|
|
525
|
-
* session is kept: unlock/retry recovery reuses it.
|
|
526
|
-
*/
|
|
527
|
-
private _teardownSecureChannelSession;
|
|
528
501
|
/**
|
|
529
502
|
* Replace an old session with a new one after app switch.
|
|
530
503
|
* Emits device-connect so the adapter updates its _sessions Map.
|
|
@@ -681,25 +654,6 @@ declare class SignerSol {
|
|
|
681
654
|
}>;
|
|
682
655
|
}
|
|
683
656
|
|
|
684
|
-
/**
|
|
685
|
-
* Wraps Ledger's Zcash SDK signer (Observable-based DeviceActions) into a
|
|
686
|
-
* simple async interface. Only the viewing-key and shielded-address reads are
|
|
687
|
-
* exposed; PCZT signing goes through a different host-side pipeline.
|
|
688
|
-
*/
|
|
689
|
-
declare class SignerZcash {
|
|
690
|
-
private readonly _sdk;
|
|
691
|
-
onInteraction?: (interaction: string) => void;
|
|
692
|
-
onRegisterCanceller?: (cancel: (reason?: CancelReason) => void) => void;
|
|
693
|
-
constructor(_sdk: SignerZcash$1);
|
|
694
|
-
/** GET_VK: UFVK string (default) or raw 96-byte Orchard FVK. */
|
|
695
|
-
getFullViewingKey(derivationPath: string, options?: FullViewingKeyOptions): Promise<GetFullViewingKeyDAOutput>;
|
|
696
|
-
/** GET_SHIELDED_ADDRESS: single-Orchard-receiver UA for a 5-level transparent path. */
|
|
697
|
-
getShieldedAddress(derivationPath: string, options?: {
|
|
698
|
-
checkOnDevice?: boolean;
|
|
699
|
-
skipOpenApp?: boolean;
|
|
700
|
-
}): Promise<GetShieldedAddressDAOutput>;
|
|
701
|
-
}
|
|
702
|
-
|
|
703
657
|
/**
|
|
704
658
|
* Transport adapter that bridges Ledger's legacy hw-app-* SDKs to DMK's sendApdu.
|
|
705
659
|
*
|
|
@@ -783,7 +737,7 @@ interface WrapErrorOptions {
|
|
|
783
737
|
/** Fallback when err has no `appName` (DMK signer errors don't carry it). */
|
|
784
738
|
defaultAppName?: string;
|
|
785
739
|
}
|
|
786
|
-
declare function ledgerFailure(code: HardwareErrorCode, error: string, appName?: string, tag?: string, params?: Record<string, unknown
|
|
740
|
+
declare function ledgerFailure(code: HardwareErrorCode, error: string, appName?: string, tag?: string, params?: Record<string, unknown>): LedgerFailure;
|
|
787
741
|
declare function isDeviceLockedError(err: unknown): boolean;
|
|
788
742
|
/**
|
|
789
743
|
* Map a Ledger DMK error to a HardwareErrorCode and human-readable message.
|
|
@@ -793,7 +747,6 @@ declare function isDeviceLockedError(err: unknown): boolean;
|
|
|
793
747
|
declare function mapLedgerError(err: unknown, opts?: WrapErrorOptions): {
|
|
794
748
|
code: HardwareErrorCode;
|
|
795
749
|
message: string;
|
|
796
|
-
origin?: HwkErrorOrigin;
|
|
797
750
|
appName?: string;
|
|
798
751
|
};
|
|
799
752
|
|
|
@@ -829,4 +782,4 @@ declare function isLedgerDmkBleTransport(transport?: string): boolean;
|
|
|
829
782
|
declare function isLedgerBleConnectionType(connectionType?: ConnectionType): boolean;
|
|
830
783
|
declare function isLedgerBleDescriptor(connectionType: ConnectionType, descriptor: DeviceDescriptor): boolean;
|
|
831
784
|
|
|
832
|
-
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,
|
|
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 };
|