@onekeyfe/hd-core 1.2.2-alpha.1 → 1.2.2-alpha.10
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/__tests__/AllNetworkGetAddressBase.tracing.test.ts +2 -2
- package/__tests__/device-lifecycle-events.test.ts +67 -0
- package/__tests__/open-wallet-session.test.ts +613 -80
- package/__tests__/pro2HostAssetPackage.test.ts +108 -1
- package/__tests__/protocol-v2.test.ts +194 -49
- package/__tests__/protocolV2FileWrite.test.ts +40 -0
- package/dist/api/FirmwareUpdateV4.d.ts +1 -0
- package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
- package/dist/api/OpenWalletSession.d.ts.map +1 -1
- package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -1
- package/dist/api/helpers/protocolV2FileWrite.d.ts +1 -0
- package/dist/api/helpers/protocolV2FileWrite.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceUploadWallpaper.d.ts.map +1 -1
- package/dist/core/RequestQueue.d.ts +2 -0
- package/dist/core/RequestQueue.d.ts.map +1 -1
- package/dist/core/index.d.ts +2 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1411 -1117
- package/dist/protocols/protocol-v2/walletSession.d.ts.map +1 -1
- package/dist/utils/patch.d.ts +1 -1
- package/dist/utils/patch.d.ts.map +1 -1
- package/dist/utils/pro2HostAssetPackage.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/api/FirmwareUpdateV4.ts +42 -10
- package/src/api/OpenWalletSession.ts +0 -3
- package/src/api/allnetwork/AllNetworkGetAddressBase.ts +3 -1
- package/src/api/helpers/protocolV2FileWrite.ts +11 -5
- package/src/api/protocol-v2/DeviceUploadWallpaper.ts +8 -2
- package/src/core/RequestQueue.ts +16 -1
- package/src/core/index.ts +48 -21
- package/src/data/messages/messages-protocol-v2.json +1471 -1367
- package/src/protocols/protocol-v2/walletSession.ts +157 -38
- package/src/utils/pro2HostAssetPackage.ts +73 -27
|
@@ -95,7 +95,7 @@ describe('AllNetworkGetAddressBase tracing', () => {
|
|
|
95
95
|
'hidden-state',
|
|
96
96
|
false,
|
|
97
97
|
undefined,
|
|
98
|
-
|
|
98
|
+
undefined,
|
|
99
99
|
undefined
|
|
100
100
|
);
|
|
101
101
|
expect(calls).toEqual(['resume-hidden-session', 'run-chain-method']);
|
|
@@ -264,7 +264,7 @@ describe('AllNetworkGetAddressBase tracing', () => {
|
|
|
264
264
|
undefined,
|
|
265
265
|
true,
|
|
266
266
|
undefined,
|
|
267
|
-
|
|
267
|
+
undefined,
|
|
268
268
|
true
|
|
269
269
|
);
|
|
270
270
|
expect(calls).toEqual(['resume-standard-session', 'run-chain-method']);
|
|
@@ -2,12 +2,14 @@ import { EDeviceType, ERRORS, HardwareErrorCode, createDeferred } from '@onekeyf
|
|
|
2
2
|
import { DeviceType, TRANSPORT_EVENT } from '@onekeyfe/hd-transport';
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
|
+
cancel,
|
|
5
6
|
initConnector,
|
|
6
7
|
initCore,
|
|
7
8
|
isMissingDetectedProtocolV2Error,
|
|
8
9
|
isProtocolV2PeerRemovedPairingError,
|
|
9
10
|
isRetryableBleConnectionError,
|
|
10
11
|
isRetryableBleProtocolV2ProbeError,
|
|
12
|
+
resolveBleConnectProtocol,
|
|
11
13
|
} from '../src/core';
|
|
12
14
|
import { DataManager } from '../src/data-manager';
|
|
13
15
|
import TransportManager from '../src/data-manager/TransportManager';
|
|
@@ -71,6 +73,19 @@ describe('public device lifecycle events', () => {
|
|
|
71
73
|
jest.restoreAllMocks();
|
|
72
74
|
});
|
|
73
75
|
|
|
76
|
+
test('prefers Protocol V2 only when the method contract is explicitly V2-only', () => {
|
|
77
|
+
const createMethod = (protocols: readonly ('V1' | 'V2')[], connectProtocol?: 'V1' | 'V2') =>
|
|
78
|
+
({
|
|
79
|
+
payload: { connectProtocol },
|
|
80
|
+
getSupportedProtocols: () => protocols,
|
|
81
|
+
} as never);
|
|
82
|
+
|
|
83
|
+
expect(resolveBleConnectProtocol(createMethod(['V2']))).toBe('V2');
|
|
84
|
+
expect(resolveBleConnectProtocol(createMethod(['V1']))).toBeUndefined();
|
|
85
|
+
expect(resolveBleConnectProtocol(createMethod(['V1', 'V2']))).toBeUndefined();
|
|
86
|
+
expect(resolveBleConnectProtocol(createMethod(['V2'], 'V1'))).toBe('V1');
|
|
87
|
+
});
|
|
88
|
+
|
|
74
89
|
test('registers the shared device lifecycle listeners exactly once', async () => {
|
|
75
90
|
jest.spyOn(DataManager, 'getSettings').mockReturnValue('react-native' as never);
|
|
76
91
|
core = initCore();
|
|
@@ -106,6 +121,58 @@ describe('public device lifecycle events', () => {
|
|
|
106
121
|
expect(context.getPrePendingCallPromise('device-a')).toBe(replacementCleanup.promise);
|
|
107
122
|
});
|
|
108
123
|
|
|
124
|
+
test('cancels only requests associated with the requested connect id', () => {
|
|
125
|
+
core = initCore();
|
|
126
|
+
const context = (core as any).getCoreContext();
|
|
127
|
+
const deviceA = {
|
|
128
|
+
mainId: 'transport-session-a',
|
|
129
|
+
getConnectId: jest.fn(() => 'serial-a'),
|
|
130
|
+
interruptionFromUser: jest.fn().mockResolvedValue(undefined),
|
|
131
|
+
};
|
|
132
|
+
const deviceB = {
|
|
133
|
+
mainId: 'device-b',
|
|
134
|
+
getConnectId: jest.fn(() => 'serial-b'),
|
|
135
|
+
interruptionFromUser: jest.fn().mockResolvedValue(undefined),
|
|
136
|
+
};
|
|
137
|
+
const taskA = context.requestQueue.createTask({
|
|
138
|
+
responseID: 101,
|
|
139
|
+
connectId: '',
|
|
140
|
+
device: deviceA,
|
|
141
|
+
} as never);
|
|
142
|
+
const taskB = context.requestQueue.createTask({
|
|
143
|
+
responseID: 102,
|
|
144
|
+
connectId: 'device-b',
|
|
145
|
+
device: deviceB,
|
|
146
|
+
} as never);
|
|
147
|
+
const signalA = taskA.abortController?.signal;
|
|
148
|
+
const signalB = taskB.abortController?.signal;
|
|
149
|
+
|
|
150
|
+
cancel(context, 'serial-a');
|
|
151
|
+
|
|
152
|
+
expect(signalA?.aborted).toBe(true);
|
|
153
|
+
expect(context.requestQueue.getTask(taskA.id)).toBeUndefined();
|
|
154
|
+
expect(signalB?.aborted).toBe(false);
|
|
155
|
+
expect(context.requestQueue.getTask(taskB.id)).toBe(taskB);
|
|
156
|
+
expect(deviceA.interruptionFromUser).toHaveBeenCalledTimes(1);
|
|
157
|
+
expect(deviceB.interruptionFromUser).not.toHaveBeenCalled();
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
test('aborts every request before cancel-all rejects WebUSB tasks', () => {
|
|
161
|
+
jest.spyOn(DataManager, 'getSettings').mockReturnValue('webusb' as never);
|
|
162
|
+
core = initCore();
|
|
163
|
+
const context = (core as any).getCoreContext();
|
|
164
|
+
const task = context.requestQueue.createTask({
|
|
165
|
+
responseID: 103,
|
|
166
|
+
connectId: 'webusb-device',
|
|
167
|
+
} as never);
|
|
168
|
+
const signal = task.abortController?.signal;
|
|
169
|
+
|
|
170
|
+
cancel(context);
|
|
171
|
+
|
|
172
|
+
expect(signal?.aborted).toBe(true);
|
|
173
|
+
expect(context.requestQueue.getTask(task.id)).toBeUndefined();
|
|
174
|
+
});
|
|
175
|
+
|
|
109
176
|
test('keeps shared device lifecycle listeners across a device cache reset', () => {
|
|
110
177
|
jest.spyOn(DataManager, 'getSettings').mockReturnValue('react-native' as never);
|
|
111
178
|
core = initCore();
|