@onekeyfe/hd-core 1.2.6-alpha.1 → 1.2.6-alpha.3

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.
@@ -414,27 +414,6 @@ describe('DeviceCommands failure mapping', () => {
414
414
  ).rejects.toMatchObject({ errorCode: HardwareErrorCode.DeviceBusy });
415
415
  });
416
416
 
417
- it('maps commands rejected during a Protocol V2 firmware update to DeviceBusy', async () => {
418
- const commands = createCommands();
419
- const message = 'Requested command not allowed while a firmware update is in progress';
420
-
421
- await expect(
422
- commands._filterCommonTypes(
423
- {
424
- type: 'Failure',
425
- message: { code: 'Failure_ProcessError', message },
426
- } as any,
427
- 'ProtocolInfoRequest'
428
- )
429
- ).rejects.toMatchObject({
430
- errorCode: HardwareErrorCode.DeviceBusy,
431
- params: {
432
- failureCode: 'Failure_ProcessError',
433
- firmwareMessage: message,
434
- },
435
- });
436
- });
437
-
438
417
  it('maps the current AskPin passphrase-disabled response without relying on a subcode', async () => {
439
418
  const commands = createCommands();
440
419
 
@@ -572,51 +551,6 @@ describe('DeviceCommands failure mapping', () => {
572
551
  }
573
552
  );
574
553
 
575
- it('maps the Protocol V2 seed-session busy response to DeviceBusy', async () => {
576
- const commands = createCommands();
577
-
578
- await expect(
579
- commands._filterCommonTypes(
580
- {
581
- type: 'Failure',
582
- message: {
583
- code: 'Failure_ProcessError',
584
- subcode: DeviceSessionErrorCode.DeviceSessionError_UserCancelled,
585
- message: 'PIN cancelled',
586
- },
587
- } as any,
588
- 'SignTx'
589
- )
590
- ).rejects.toMatchObject({
591
- errorCode: HardwareErrorCode.DeviceBusy,
592
- params: {
593
- failureCode: 'Failure_ProcessError',
594
- subcode: DeviceSessionErrorCode.DeviceSessionError_UserCancelled,
595
- firmwareMessage: 'PIN cancelled',
596
- },
597
- });
598
- });
599
-
600
- it('keeps the same Protocol V2 response as ActionCancelled for DeviceSession calls', async () => {
601
- const commands = createCommands();
602
-
603
- await expect(
604
- commands._filterCommonTypes(
605
- {
606
- type: 'Failure',
607
- message: {
608
- code: 'Failure_ProcessError',
609
- subcode: DeviceSessionErrorCode.DeviceSessionError_UserCancelled,
610
- message: 'PIN cancelled',
611
- },
612
- } as any,
613
- 'DeviceSessionAskPin'
614
- )
615
- ).rejects.toMatchObject({
616
- errorCode: HardwareErrorCode.ActionCancelled,
617
- });
618
- });
619
-
620
554
  it('does not use the legacy cancellation-message fallback for Protocol V1', async () => {
621
555
  const commands = createCommands();
622
556
  (commands.device.isProtocolV2 as jest.Mock).mockReturnValue(false);
@@ -6,6 +6,8 @@ import TransportManager from '../src/data-manager/TransportManager';
6
6
  import { IFRAME } from '../src/events';
7
7
  import SearchDevices from '../src/api/SearchDevices';
8
8
  import { DeviceList } from '../src/device/DeviceList';
9
+ import { Device } from '../src/device/Device';
10
+ import { DevicePool } from '../src/device/DevicePool';
9
11
 
10
12
  jest.mock('../src/data/config', () => ({
11
13
  getSDKVersion: jest.fn(() => '1.0.0-test'),
@@ -205,3 +207,112 @@ describe('Core 错误输出边界', () => {
205
207
  await core.dispose();
206
208
  });
207
209
  });
210
+
211
+ describe('Portfolio firmware compatibility through Core', () => {
212
+ afterEach(() => {
213
+ jest.restoreAllMocks();
214
+ });
215
+
216
+ test.each(
217
+ (['pro2', 'neo'] as const).flatMap(deviceType =>
218
+ (['silent', 'progress'] as const).map(uiMode => ({ deviceType, uiMode }))
219
+ )
220
+ )(
221
+ 'checks the current $deviceType firmware before a $uiMode upload',
222
+ async ({ deviceType, uiMode }) => {
223
+ DevicePool.resetState();
224
+ jest.spyOn(DataManager, 'getSettings').mockReturnValue('react-native' as never);
225
+ const device = Device.fromDescriptor({
226
+ id: 'portfolio-device',
227
+ path: 'portfolio-device',
228
+ commType: 'ble',
229
+ protocolType: 'V2',
230
+ } as never);
231
+ jest.spyOn(Device, 'fromDescriptor').mockReturnValue(device);
232
+ jest.spyOn(device, 'acquire').mockResolvedValue(undefined);
233
+ jest.spyOn(device, 'initialize').mockResolvedValue(undefined);
234
+ jest.spyOn(device, 'release').mockResolvedValue(undefined);
235
+ jest.spyOn(device, 'ensureProtocolV2RuntimeContext').mockResolvedValue({
236
+ version: 2,
237
+ supported_messages: [60805, 61400],
238
+ });
239
+ const typedCall = jest.fn();
240
+ device.commands = {
241
+ typedCall,
242
+ disposed: false,
243
+ dispose: jest.fn(),
244
+ checkDisposed: jest.fn(),
245
+ } as never;
246
+ const core = initCore();
247
+ let id = 0;
248
+ const upload = () =>
249
+ core.handleMessage({
250
+ id: ++id,
251
+ type: IFRAME.CALL,
252
+ payload: {
253
+ method: 'uploadPortfolio',
254
+ connectId: 'portfolio-device',
255
+ connectProtocol: 'V2',
256
+ packageBase64: 'AQID',
257
+ uiMode,
258
+ },
259
+ } as never);
260
+
261
+ try {
262
+ // Reuse one device across version changes to cover a retry after upgrading.
263
+ for (const firmwareVersion of ['1.0.1', '1.0.2', '1.0.3', '1.0.10']) {
264
+ device.features = {
265
+ protocol: 'V2',
266
+ deviceType,
267
+ firmwareType: 'universal',
268
+ firmwareVersion,
269
+ mode: 'normal',
270
+ initialized: true,
271
+ bootloaderMode: false,
272
+ capabilities: [],
273
+ } as never;
274
+ typedCall.mockReset();
275
+ typedCall
276
+ .mockResolvedValueOnce({ message: { processed_byte: 3 } })
277
+ .mockResolvedValueOnce({ message: { message: 'Portfolio updated' } });
278
+
279
+ const response = await upload();
280
+ if (firmwareVersion === '1.0.1' || firmwareVersion === '1.0.2') {
281
+ expect(response).toMatchObject({
282
+ success: false,
283
+ payload: {
284
+ code: HardwareErrorCode.CallMethodNeedUpgradeFirmware,
285
+ params: { current: firmwareVersion, require: '1.0.3', method: 'uploadPortfolio' },
286
+ },
287
+ });
288
+ expect(typedCall).not.toHaveBeenCalled();
289
+ } else {
290
+ expect(response).toMatchObject({ success: true, payload: { portfolioUpdated: true } });
291
+ expect(typedCall).toHaveBeenCalledTimes(2);
292
+ expect(typedCall).toHaveBeenLastCalledWith('PortfolioUpdate', 'Success', {});
293
+ }
294
+ }
295
+
296
+ typedCall.mockReset();
297
+ typedCall
298
+ .mockResolvedValueOnce({ message: { processed_byte: 3 } })
299
+ .mockRejectedValueOnce(
300
+ ERRORS.TypedError(
301
+ HardwareErrorCode.RuntimeError,
302
+ 'Failure_DataError,Invalid portfolio package'
303
+ )
304
+ );
305
+ await expect(upload()).resolves.toMatchObject({
306
+ success: false,
307
+ payload: {
308
+ code: HardwareErrorCode.RuntimeError,
309
+ error: 'Failure_DataError,Invalid portfolio package',
310
+ },
311
+ });
312
+ } finally {
313
+ await core.dispose();
314
+ DevicePool.resetState();
315
+ }
316
+ }
317
+ );
318
+ });
@@ -1,5 +1,3 @@
1
- import { EDeviceType } from '@onekeyfe/hd-shared';
2
-
3
1
  import { Device } from '../src/device/Device';
4
2
  import { UI_REQUEST } from '../src/events/ui-request';
5
3
 
@@ -25,39 +23,12 @@ const createBootloaderDevice = (protocolType: 'V1' | 'V2') => {
25
23
  };
26
24
 
27
25
  describe('Pro2 bootloader mode', () => {
28
- test('blocks Protocol V2 methods that are not allowed in bootloader mode', () => {
29
- const device = createBootloaderDevice('V2');
30
-
31
- expect(device.hasUnexpectedMode([], [])).toBe(UI_REQUEST.BOOTLOADER);
32
- });
33
-
34
- test('allows Protocol V2 methods that explicitly support bootloader mode', () => {
26
+ test('does not block Protocol V2 methods in bootloader mode', () => {
35
27
  const device = createBootloaderDevice('V2');
36
28
 
37
- expect(device.hasUnexpectedMode([UI_REQUEST.BOOTLOADER], [])).toBeNull();
29
+ expect(device.hasUnexpectedMode([], [])).toBeNull();
38
30
  });
39
31
 
40
- test.each([EDeviceType.Pro2, EDeviceType.Neo])(
41
- 'blocks unsupported Protocol V2 methods in %s romloader mode',
42
- deviceType => {
43
- const device = createBootloaderDevice('V2');
44
- device.updateState(
45
- {
46
- protocol: 'V2',
47
- identity: { deviceType },
48
- status: { mode: 'romloader', initialized: null },
49
- },
50
- 'initialize'
51
- );
52
-
53
- expect(device.hasUnexpectedMode([], [])).toBe(UI_REQUEST.BOOTLOADER);
54
- expect(device.hasUnexpectedMode([UI_REQUEST.NOT_INITIALIZE], [])).toBe(UI_REQUEST.BOOTLOADER);
55
- expect(
56
- device.hasUnexpectedMode([UI_REQUEST.BOOTLOADER, UI_REQUEST.NOT_INITIALIZE], [])
57
- ).toBeNull();
58
- }
59
- );
60
-
61
32
  test('keeps the Protocol V1 bootloader restriction', () => {
62
33
  const device = createBootloaderDevice('V1');
63
34
 
@@ -6385,10 +6385,7 @@ describe('Protocol V2 firmware update targets', () => {
6385
6385
  const typedCall = jest
6386
6386
  .fn()
6387
6387
  .mockRejectedValue(new Error('Failure: Handler not registered for this message'));
6388
- const deviceInfo = {
6389
- hw: { serial_no: 'PRO2-PHYSICAL-1' },
6390
- main_mcu: { application_data: { version: '2.0.0' } },
6391
- };
6388
+ const deviceInfo = { hw: { serial_no: 'PRO2-PHYSICAL-1' } };
6392
6389
  const probeProtocolV2RuntimeState = jest.fn().mockResolvedValue({
6393
6390
  mode: 'normal',
6394
6391
  bootloaderMode: false,
@@ -6426,7 +6423,6 @@ describe('Protocol V2 firmware update targets', () => {
6426
6423
  (method as any).protocolV2LatestFinalDeviceInfo = {
6427
6424
  main_mcu: {
6428
6425
  application: { version: '2.0.0' },
6429
- application_data: { version: '2.0.0' },
6430
6426
  },
6431
6427
  };
6432
6428
  expect(() => (method as any).assertExpectedProtocolV2Versions()).not.toThrow();
@@ -6839,27 +6835,6 @@ describe('Protocol V2 firmware update targets', () => {
6839
6835
  );
6840
6836
  });
6841
6837
 
6842
- test('rejects stale P2 DeviceInfo even when install status reports the expected version', () => {
6843
- const method = new FirmwareUpdateV4({
6844
- id: 1,
6845
- payload: {
6846
- method: 'firmwareUpdateV4',
6847
- platform: 'desktop',
6848
- targetsToUpdate: ['app_v2'],
6849
- expectedTargetVersions: { app_v2: '2.0.0' },
6850
- },
6851
- });
6852
- method.init();
6853
- (method as any).protocolV2LatestFinalDeviceInfo = {
6854
- main_mcu: { application_data: { version: '1.0.1' } },
6855
- };
6856
- (method as any).protocolV2CompletedTargetVersions = new Map([[5, 0x20000]]);
6857
-
6858
- expect(() => (method as any).assertExpectedProtocolV2Versions()).toThrow(
6859
- 'target app_v2 reached 1.0.1, expected 2.0.0'
6860
- );
6861
- });
6862
-
6863
6838
  test('rejects an unobservable P2 version without P2 completion evidence', () => {
6864
6839
  const method = new FirmwareUpdateV4({
6865
6840
  id: 1,
@@ -73,26 +73,24 @@ describe('live device state reads', () => {
73
73
  }
74
74
  );
75
75
 
76
- test.each(['bootloader', 'romloader'] as const)(
77
- 'reports %s mode for settings scope after minimal mode detection',
78
- async mode => {
79
- const getDeviceState = jest.fn().mockResolvedValue({ status: { mode } });
80
- const method = new GetDeviceState({
81
- id: 1,
82
- payload: { method: 'getDeviceState', scope: 'settings' },
83
- });
84
- method.init();
85
- (method as any).device = {
86
- isProtocolV2: () => true,
87
- getDeviceState,
88
- };
76
+ test('rejects settings scope in loader mode after minimal mode detection', async () => {
77
+ const getDeviceState = jest.fn().mockResolvedValue({ status: { mode: 'bootloader' } });
78
+ const method = new GetDeviceState({
79
+ id: 1,
80
+ payload: { method: 'getDeviceState', scope: 'settings' },
81
+ });
82
+ method.init();
83
+ (method as any).device = {
84
+ isProtocolV2: () => true,
85
+ getCurrentFirmwareType: () => 'universal',
86
+ getDeviceState,
87
+ };
89
88
 
90
- await expect(method.run()).rejects.toMatchObject({
91
- errorCode: HardwareErrorCode.NotAllowInBootloaderMode,
92
- });
93
- expect(getDeviceState).toHaveBeenCalledWith({ refreshSections: ['status', 'settings'] });
94
- }
95
- );
89
+ await expect(method.run()).rejects.toMatchObject({
90
+ errorCode: HardwareErrorCode.DeviceNotSupportMethod,
91
+ });
92
+ expect(getDeviceState).toHaveBeenCalledWith({ refreshSections: ['status', 'settings'] });
93
+ });
96
94
 
97
95
  test('rejects an unknown scope', () => {
98
96
  const method = new GetDeviceState({
@@ -1 +1 @@
1
- {"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"GetDeviceState.d.ts","sourceRoot":"","sources":["../../src/api/GetDeviceState.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,KAAK,EAAoB,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAU1F,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,UAAU,CACpD,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAC9C;IACC,qBAAqB;IAIrB,IAAI;IAmBE,GAAG;CAaV"}
1
+ {"version":3,"file":"GetDeviceState.d.ts","sourceRoot":"","sources":["../../src/api/GetDeviceState.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,KAAK,EAAoB,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAU1F,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,UAAU,CACpD,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAC9C;IACC,qBAAqB;IAIrB,IAAI;IAmBE,GAAG;CAgBV"}
@@ -5,6 +5,11 @@ export type UploadPortfolioParams = {
5
5
  uiMode?: 'silent' | 'progress';
6
6
  };
7
7
  export default class UploadPortfolio extends FileWrite {
8
+ getVersionRange(): {
9
+ model_pro2: {
10
+ min: string;
11
+ };
12
+ };
8
13
  init(): void;
9
14
  run(): Promise<{
10
15
  portfolioUpdated: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"UploadPortfolio.d.ts","sourceRoot":"","sources":["../../src/api/UploadPortfolio.ts"],"names":[],"mappings":"AAIA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,MAAM,MAAM,qBAAqB,GAAG;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE5B,MAAM,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;CAChC,CAAC;AAQF,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,SAAS;IACpD,IAAI;IAuBE,GAAG;;;;;;;;CAsBV"}
1
+ {"version":3,"file":"UploadPortfolio.d.ts","sourceRoot":"","sources":["../../src/api/UploadPortfolio.ts"],"names":[],"mappings":"AAIA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,MAAM,MAAM,qBAAqB,GAAG;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE5B,MAAM,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;CAChC,CAAC;AAQF,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,SAAS;IACpD,eAAe;;;;;IAKf,IAAI;IAuBE,GAAG;;;;;;;;CAsBV"}
@@ -31,7 +31,7 @@ export declare const cancelDeviceInPrompt: (device: Device, expectResponse?: boo
31
31
  };
32
32
  } | {
33
33
  success: boolean;
34
- error: 0 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 200 | 300 | 301 | 302 | 303 | 304 | 305 | 400 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 500 | 600 | 601 | 602 | 603 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 830 | 831 | 832 | 900 | 901 | 902 | 903;
34
+ error: 0 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 200 | 300 | 301 | 302 | 303 | 304 | 305 | 400 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 500 | 600 | 601 | 602 | 603 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 830 | 831 | 832 | 900 | 901 | 902;
35
35
  payload: {
36
36
  message: string;
37
37
  };
@@ -50,7 +50,7 @@ export declare const cancelDeviceWithInitialize: (device: Device) => Promise<{
50
50
  };
51
51
  } | {
52
52
  success: boolean;
53
- error: 0 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 200 | 300 | 301 | 302 | 303 | 304 | 305 | 400 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 500 | 600 | 601 | 602 | 603 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 830 | 831 | 832 | 900 | 901 | 902 | 903;
53
+ error: 0 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 200 | 300 | 301 | 302 | 303 | 304 | 305 | 400 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 500 | 600 | 601 | 602 | 603 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 830 | 831 | 832 | 900 | 901 | 902;
54
54
  payload: {
55
55
  message: string;
56
56
  };
@@ -81,7 +81,7 @@ export declare class DeviceCommands {
81
81
  };
82
82
  } | {
83
83
  success: boolean;
84
- error: 0 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 200 | 300 | 301 | 302 | 303 | 304 | 305 | 400 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 500 | 600 | 601 | 602 | 603 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 830 | 831 | 832 | 900 | 901 | 902 | 903;
84
+ error: 0 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 200 | 300 | 301 | 302 | 303 | 304 | 305 | 400 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 500 | 600 | 601 | 602 | 603 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 830 | 831 | 832 | 900 | 901 | 902;
85
85
  payload: {
86
86
  message: string;
87
87
  };
@@ -100,7 +100,7 @@ export declare class DeviceCommands {
100
100
  };
101
101
  } | {
102
102
  success: boolean;
103
- error: 0 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 200 | 300 | 301 | 302 | 303 | 304 | 305 | 400 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 500 | 600 | 601 | 602 | 603 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 830 | 831 | 832 | 900 | 901 | 902 | 903;
103
+ error: 0 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 200 | 300 | 301 | 302 | 303 | 304 | 305 | 400 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 500 | 600 | 601 | 602 | 603 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 830 | 831 | 832 | 900 | 901 | 902;
104
104
  payload: {
105
105
  message: string;
106
106
  };
@@ -1 +1 @@
1
- {"version":3,"file":"DeviceCommands.d.ts","sourceRoot":"","sources":["../../src/device/DeviceCommands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DeviceCommands.d.ts","sourceRoot":"","sources":["../../src/device/DeviceCommands.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -144,7 +144,7 @@ declare class DeviceCommands {
144
144
  };
145
145
  } | {
146
146
  success: boolean;
147
- error: 0 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 200 | 300 | 301 | 302 | 303 | 304 | 305 | 400 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 500 | 600 | 601 | 602 | 603 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 830 | 831 | 832 | 900 | 901 | 902 | 903;
147
+ error: 0 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 200 | 300 | 301 | 302 | 303 | 304 | 305 | 400 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 500 | 600 | 601 | 602 | 603 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 830 | 831 | 832 | 900 | 901 | 902;
148
148
  payload: {
149
149
  message: string;
150
150
  };
@@ -163,7 +163,7 @@ declare class DeviceCommands {
163
163
  };
164
164
  } | {
165
165
  success: boolean;
166
- error: 0 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 200 | 300 | 301 | 302 | 303 | 304 | 305 | 400 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 500 | 600 | 601 | 602 | 603 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 830 | 831 | 832 | 900 | 901 | 902 | 903;
166
+ error: 0 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 200 | 300 | 301 | 302 | 303 | 304 | 305 | 400 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 500 | 600 | 601 | 602 | 603 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 830 | 831 | 832 | 900 | 901 | 902;
167
167
  payload: {
168
168
  message: string;
169
169
  };
package/dist/index.js CHANGED
@@ -44209,12 +44209,6 @@ class DeviceCommands {
44209
44209
  const isProtocolV2DeviceBusyFailure = this.device.isProtocolV2() &&
44210
44210
  DEVICE_CONTROL_CALLS.has(callType) &&
44211
44211
  subcode === hdTransport.DeviceErrorCode.DeviceError_Busy;
44212
- const isProtocolV2PinCancelledBusyFailure = this.device.isProtocolV2() &&
44213
- !DEVICE_SESSION_CALLS.has(callType) &&
44214
- subcode === hdTransport.DeviceSessionErrorCode.DeviceSessionError_UserCancelled &&
44215
- /^pin cancelled$/i.test(normalizedMessage);
44216
- const isProtocolV2FirmwareUpdateBusyFailure = this.device.isProtocolV2() &&
44217
- /^requested command not allowed while a firmware update is in progress$/i.test(normalizedMessage);
44218
44212
  const isLegacyProtocolV2LockedFailure = this.device.isProtocolV2() && /^device (?:is )?locked$/i.test(normalizedMessage);
44219
44213
  if (DEVICE_SESSION_CALLS.has(callType) &&
44220
44214
  subcode === hdTransport.DeviceSessionErrorCode.DeviceSessionError_InvalidSession) {
@@ -44265,9 +44259,7 @@ class DeviceCommands {
44265
44259
  firmwareMessage: message,
44266
44260
  });
44267
44261
  }
44268
- else if (isProtocolV2DeviceBusyFailure ||
44269
- isProtocolV2PinCancelledBusyFailure ||
44270
- isProtocolV2FirmwareUpdateBusyFailure) {
44262
+ else if (isProtocolV2DeviceBusyFailure) {
44271
44263
  error = hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.DeviceBusy, message, {
44272
44264
  failureCode: code,
44273
44265
  subcode,
@@ -46663,7 +46655,7 @@ class Device extends events.exports {
46663
46655
  }
46664
46656
  hasUnexpectedMode(allow, require) {
46665
46657
  if (!this.isUnacquired()) {
46666
- if ((this.isBootloader() || this.isRomloader()) && !allow.includes(UI_REQUEST.BOOTLOADER)) {
46658
+ if (this.isBootloader() && !this.isProtocolV2() && !allow.includes(UI_REQUEST.BOOTLOADER)) {
46667
46659
  return UI_REQUEST.BOOTLOADER;
46668
46660
  }
46669
46661
  if (!this.isInitialized() && !allow.includes(UI_REQUEST.NOT_INITIALIZE)) {
@@ -47474,7 +47466,7 @@ class GetDeviceState extends BaseMethod {
47474
47466
  if (this.params.scope === 'settings' &&
47475
47467
  this.device.isProtocolV2() &&
47476
47468
  isLoaderMode(state.status.mode)) {
47477
- throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.NotAllowInBootloaderMode);
47469
+ throw hdShared.createDeviceNotSupportMethodError(`${this.name}:${this.params.scope}`, this.device.getCurrentFirmwareType());
47478
47470
  }
47479
47471
  return state;
47480
47472
  });
@@ -53318,12 +53310,9 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
53318
53310
  for (const [target, expectedVersion] of expectedEntries) {
53319
53311
  const targetId = (_k = Array.from(PROTOCOL_V2_UPDATE_TARGET_BY_TARGET_ID.entries()).find(([, mappedTarget]) => mappedTarget === target)) === null || _k === void 0 ? void 0 : _k[0];
53320
53312
  const statusVersion = targetId === undefined ? undefined : this.protocolV2CompletedTargetVersions.get(targetId);
53321
- const statusVersionString = statusVersion === undefined
53322
- ? undefined
53313
+ const observedVersion = statusVersion === undefined
53314
+ ? visibleVersions[target]
53323
53315
  : `${Math.floor(statusVersion / 0x10000) % 0x100}.${Math.floor(statusVersion / 0x100) % 0x100}.${statusVersion % 0x100}`;
53324
- const observedVersion = target === 'app_v2' && visibleVersions.app_v2
53325
- ? visibleVersions.app_v2
53326
- : statusVersionString !== null && statusVersionString !== void 0 ? statusVersionString : visibleVersions[target];
53327
53316
  if (!observedVersion) {
53328
53317
  const hasCompleteTargetEvidence = targetId !== undefined && this.protocolV2CompletedTargetIds.has(targetId);
53329
53318
  if (hasCompleteTargetEvidence) {
@@ -54262,7 +54251,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
54262
54251
  finishedStatusSnapshotKey = undefined;
54263
54252
  finishedStatusSnapshotPolls = 0;
54264
54253
  };
54265
- while (true) {
54254
+ for (;;) {
54266
54255
  this.throwIfAborted();
54267
54256
  const isFinalStatusCheck = Date.now() - startTime >= PROTOCOL_V2_INSTALL_TIMEOUT;
54268
54257
  try {
@@ -55558,6 +55547,9 @@ const PORTFOLIO_PACKAGE_MAX_BYTES = 128 * 1024;
55558
55547
  const FILESYSTEM_FILE_WRITE_MESSAGE_TYPE = 60805;
55559
55548
  const PORTFOLIO_UPDATE_MESSAGE_TYPE = 61400;
55560
55549
  class UploadPortfolio extends FileWrite {
55550
+ getVersionRange() {
55551
+ return { model_pro2: { min: '1.0.3' } };
55552
+ }
55561
55553
  init() {
55562
55554
  const { packageBase64, timeoutMs, uiMode = 'silent' } = this.payload;
55563
55555
  const packageBytes = decodeCanonicalBase64({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onekeyfe/hd-core",
3
- "version": "1.2.6-alpha.1",
3
+ "version": "1.2.6-alpha.3",
4
4
  "description": "Core processes and APIs for communicating with OneKey hardware devices.",
5
5
  "author": "OneKey",
6
6
  "homepage": "https://github.com/OneKeyHQ/hardware-js-sdk#readme",
@@ -25,8 +25,8 @@
25
25
  "url": "https://github.com/OneKeyHQ/hardware-js-sdk/issues"
26
26
  },
27
27
  "dependencies": {
28
- "@onekeyfe/hd-shared": "1.2.6-alpha.1",
29
- "@onekeyfe/hd-transport": "1.2.6-alpha.1",
28
+ "@onekeyfe/hd-shared": "1.2.6-alpha.3",
29
+ "@onekeyfe/hd-transport": "1.2.6-alpha.3",
30
30
  "axios": "1.15.2",
31
31
  "bignumber.js": "^9.0.2",
32
32
  "buffer": "^6.0.3",
@@ -46,5 +46,5 @@
46
46
  "@types/w3c-web-usb": "^1.0.10",
47
47
  "@types/web-bluetooth": "^0.0.21"
48
48
  },
49
- "gitHead": "32f41a09724c316ccefe39daae56c22f539d76bd"
49
+ "gitHead": "4ca9104edb5113a625070484628fe4b2a56478e5"
50
50
  }
@@ -1408,16 +1408,12 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
1408
1408
  )?.[0];
1409
1409
  const statusVersion =
1410
1410
  targetId === undefined ? undefined : this.protocolV2CompletedTargetVersions.get(targetId);
1411
- const statusVersionString =
1411
+ const observedVersion =
1412
1412
  statusVersion === undefined
1413
- ? undefined
1413
+ ? visibleVersions[target]
1414
1414
  : `${Math.floor(statusVersion / 0x10000) % 0x100}.${
1415
1415
  Math.floor(statusVersion / 0x100) % 0x100
1416
1416
  }.${statusVersion % 0x100}`;
1417
- const observedVersion =
1418
- target === 'app_v2' && visibleVersions.app_v2
1419
- ? visibleVersions.app_v2
1420
- : statusVersionString ?? visibleVersions[target];
1421
1417
  if (!observedVersion) {
1422
1418
  const hasCompleteTargetEvidence =
1423
1419
  targetId !== undefined && this.protocolV2CompletedTargetIds.has(targetId);
@@ -2640,7 +2636,7 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
2640
2636
  finishedStatusSnapshotPolls = 0;
2641
2637
  };
2642
2638
 
2643
- while (true) {
2639
+ for (;;) {
2644
2640
  // A transport release caused by an explicit workflow cancellation must not
2645
2641
  // be mistaken for the expected device reboot during installation.
2646
2642
  this.throwIfAborted();
@@ -1,4 +1,4 @@
1
- import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared';
1
+ import { ERRORS, HardwareErrorCode, createDeviceNotSupportMethodError } from '@onekeyfe/hd-shared';
2
2
 
3
3
  import { UI_REQUEST } from '../constants/ui-request';
4
4
  import { BaseMethod } from './BaseMethod';
@@ -49,7 +49,10 @@ export default class GetDeviceState extends BaseMethod<
49
49
  this.device.isProtocolV2() &&
50
50
  isLoaderMode(state.status.mode)
51
51
  ) {
52
- throw ERRORS.TypedError(HardwareErrorCode.NotAllowInBootloaderMode);
52
+ throw createDeviceNotSupportMethodError(
53
+ `${this.name}:${this.params.scope}`,
54
+ this.device.getCurrentFirmwareType()
55
+ );
53
56
  }
54
57
  return state;
55
58
  }
@@ -18,6 +18,11 @@ const FILESYSTEM_FILE_WRITE_MESSAGE_TYPE = 60805;
18
18
  const PORTFOLIO_UPDATE_MESSAGE_TYPE = 61400;
19
19
 
20
20
  export default class UploadPortfolio extends FileWrite {
21
+ getVersionRange() {
22
+ // Pro2 and Neo rotated the Portfolio verification key in firmware 1.0.3.
23
+ return { model_pro2: { min: '1.0.3' } };
24
+ }
25
+
21
26
  init() {
22
27
  const { packageBase64, timeoutMs, uiMode = 'silent' } = this.payload as UploadPortfolioParams;
23
28
  const packageBytes = decodeCanonicalBase64({
@@ -1801,7 +1801,7 @@ export class Device extends EventEmitter {
1801
1801
  // both allow and require cases might generate single unexpected mode
1802
1802
  if (!this.isUnacquired()) {
1803
1803
  // allow cases
1804
- if ((this.isBootloader() || this.isRomloader()) && !allow.includes(UI_REQUEST.BOOTLOADER)) {
1804
+ if (this.isBootloader() && !this.isProtocolV2() && !allow.includes(UI_REQUEST.BOOTLOADER)) {
1805
1805
  return UI_REQUEST.BOOTLOADER;
1806
1806
  }
1807
1807
  if (!this.isInitialized() && !allow.includes(UI_REQUEST.NOT_INITIALIZE)) {
@@ -549,16 +549,6 @@ export class DeviceCommands {
549
549
  this.device.isProtocolV2() &&
550
550
  DEVICE_CONTROL_CALLS.has(callType) &&
551
551
  subcode === DeviceErrorCode.DeviceError_Busy;
552
- const isProtocolV2PinCancelledBusyFailure =
553
- this.device.isProtocolV2() &&
554
- !DEVICE_SESSION_CALLS.has(callType) &&
555
- subcode === DeviceSessionErrorCode.DeviceSessionError_UserCancelled &&
556
- /^pin cancelled$/i.test(normalizedMessage);
557
- const isProtocolV2FirmwareUpdateBusyFailure =
558
- this.device.isProtocolV2() &&
559
- /^requested command not allowed while a firmware update is in progress$/i.test(
560
- normalizedMessage
561
- );
562
552
  const isLegacyProtocolV2LockedFailure =
563
553
  this.device.isProtocolV2() && /^device (?:is )?locked$/i.test(normalizedMessage);
564
554
  if (
@@ -616,11 +606,7 @@ export class DeviceCommands {
616
606
  subcode,
617
607
  firmwareMessage: message,
618
608
  });
619
- } else if (
620
- isProtocolV2DeviceBusyFailure ||
621
- isProtocolV2PinCancelledBusyFailure ||
622
- isProtocolV2FirmwareUpdateBusyFailure
623
- ) {
609
+ } else if (isProtocolV2DeviceBusyFailure) {
624
610
  error = ERRORS.TypedError(HardwareErrorCode.DeviceBusy, message, {
625
611
  failureCode: code,
626
612
  subcode,