@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.
Files changed (34) hide show
  1. package/__tests__/AllNetworkGetAddressBase.tracing.test.ts +2 -2
  2. package/__tests__/device-lifecycle-events.test.ts +67 -0
  3. package/__tests__/open-wallet-session.test.ts +613 -80
  4. package/__tests__/pro2HostAssetPackage.test.ts +108 -1
  5. package/__tests__/protocol-v2.test.ts +194 -49
  6. package/__tests__/protocolV2FileWrite.test.ts +40 -0
  7. package/dist/api/FirmwareUpdateV4.d.ts +1 -0
  8. package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
  9. package/dist/api/OpenWalletSession.d.ts.map +1 -1
  10. package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -1
  11. package/dist/api/helpers/protocolV2FileWrite.d.ts +1 -0
  12. package/dist/api/helpers/protocolV2FileWrite.d.ts.map +1 -1
  13. package/dist/api/protocol-v2/DeviceUploadWallpaper.d.ts.map +1 -1
  14. package/dist/core/RequestQueue.d.ts +2 -0
  15. package/dist/core/RequestQueue.d.ts.map +1 -1
  16. package/dist/core/index.d.ts +2 -1
  17. package/dist/core/index.d.ts.map +1 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.js +1411 -1117
  20. package/dist/protocols/protocol-v2/walletSession.d.ts.map +1 -1
  21. package/dist/utils/patch.d.ts +1 -1
  22. package/dist/utils/patch.d.ts.map +1 -1
  23. package/dist/utils/pro2HostAssetPackage.d.ts.map +1 -1
  24. package/package.json +4 -4
  25. package/src/api/FirmwareUpdateV4.ts +42 -10
  26. package/src/api/OpenWalletSession.ts +0 -3
  27. package/src/api/allnetwork/AllNetworkGetAddressBase.ts +3 -1
  28. package/src/api/helpers/protocolV2FileWrite.ts +11 -5
  29. package/src/api/protocol-v2/DeviceUploadWallpaper.ts +8 -2
  30. package/src/core/RequestQueue.ts +16 -1
  31. package/src/core/index.ts +48 -21
  32. package/src/data/messages/messages-protocol-v2.json +1471 -1367
  33. package/src/protocols/protocol-v2/walletSession.ts +157 -38
  34. 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
- false,
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
- false,
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();