@onekeyfe/hd-core 1.2.0-alpha.65 → 1.2.0-alpha.67

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.
@@ -0,0 +1,87 @@
1
+ import { EDeviceType, EFirmwareType, ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared';
2
+
3
+ import DeviceUpdateBootloader from '../../src/api/device/DeviceUpdateBootloader';
4
+ import {
5
+ registerFirmwareUpdateHostBinding,
6
+ unregisterFirmwareUpdateHostBinding,
7
+ } from '../../src/api/firmware/FirmwareHostBinding';
8
+
9
+ jest.mock('../../src/api/firmware/FirmwareUpdatePreparedPlan', () => ({
10
+ assertFirmwareUpdatePreparedPlanBinding: jest.fn(),
11
+ assertFirmwareUpdatePreparedPlanDeviceIdentity: jest.fn(),
12
+ }));
13
+
14
+ jest.mock('../../src/data-manager', () => ({
15
+ DataManager: {
16
+ getSettings: jest.fn(),
17
+ isBleConnect: jest.fn(),
18
+ },
19
+ }));
20
+
21
+ jest.mock('../../src/device/DevicePool', () => ({
22
+ DevicePool: {},
23
+ }));
24
+
25
+ const artifact = {
26
+ artifactRef: `fw:${'a'.repeat(64)}`,
27
+ size: 4,
28
+ sha256: 'a'.repeat(64),
29
+ };
30
+
31
+ const createMethod = () => {
32
+ const closeError = new Error('artifact reader close failed');
33
+ const close = jest.fn().mockRejectedValue(closeError);
34
+ const artifactReader = {
35
+ open: jest.fn().mockResolvedValue({ readerId: 'reader-1', size: artifact.size }),
36
+ read: jest.fn(),
37
+ close,
38
+ };
39
+ const hostBindingGeneration = registerFirmwareUpdateHostBinding({ artifactReader });
40
+ const method = new DeviceUpdateBootloader({
41
+ id: 1,
42
+ payload: {
43
+ method: 'deviceUpdateBootloader',
44
+ artifact,
45
+ hostBindingGeneration,
46
+ preparedPlan: {},
47
+ },
48
+ });
49
+ (method as any).device = {
50
+ features: {
51
+ deviceType: EDeviceType.Touch,
52
+ serialNo: 'touch-device-id',
53
+ },
54
+ getCurrentDeviceType: () => EDeviceType.Touch,
55
+ getCurrentFirmwareType: () => EFirmwareType.Universal,
56
+ };
57
+ return { close, closeError, method };
58
+ };
59
+
60
+ describe('DeviceUpdateBootloader artifact source cleanup', () => {
61
+ afterEach(() => {
62
+ unregisterFirmwareUpdateHostBinding();
63
+ jest.restoreAllMocks();
64
+ });
65
+
66
+ test('does not replace a successful update result when source close fails', async () => {
67
+ const { close, method } = createMethod();
68
+ jest.spyOn(method, 'updateTouchBootloader').mockResolvedValue(true);
69
+
70
+ await expect(method.run()).resolves.toBe(true);
71
+
72
+ expect(close).toHaveBeenCalledWith({ readerId: 'reader-1' });
73
+ });
74
+
75
+ test('does not replace the original hardware error when source close fails', async () => {
76
+ const { close, method } = createMethod();
77
+ const hardwareError = ERRORS.TypedError(
78
+ HardwareErrorCode.FirmwareError,
79
+ 'original bootloader hardware error'
80
+ );
81
+ jest.spyOn(method, 'updateTouchBootloader').mockRejectedValue(hardwareError);
82
+
83
+ await expect(method.run()).rejects.toBe(hardwareError);
84
+
85
+ expect(close).toHaveBeenCalledWith({ readerId: 'reader-1' });
86
+ });
87
+ });
@@ -108,6 +108,24 @@ describe('FirmwareUpdatePreparedPlan', () => {
108
108
  ],
109
109
  })
110
110
  ).toEqual(prepared);
111
+ expect(() =>
112
+ assertFirmwareUpdatePreparedPlanBinding({
113
+ preparedPlan: prepared,
114
+ executor: 'v2',
115
+ platform: 'native',
116
+ scopeTargets: ['firmware', 'resource'],
117
+ bindings: [
118
+ {
119
+ target: 'firmware',
120
+ artifact: artifact('a'.repeat(64), 4),
121
+ },
122
+ {
123
+ target: 'resource',
124
+ artifact: artifact('b'.repeat(64), 8),
125
+ },
126
+ ],
127
+ })
128
+ ).toThrow('artifact binding is invalid');
111
129
  expect(() =>
112
130
  assertFirmwareUpdatePreparedPlanBinding({
113
131
  preparedPlan: prepared,
@@ -4340,6 +4340,110 @@ describe('Protocol V2 firmware update targets', () => {
4340
4340
  ).toThrow('expected 131072');
4341
4341
  });
4342
4342
 
4343
+ test('fails install polling immediately with the original firmware verification error', async () => {
4344
+ const method = new FirmwareUpdateV4({
4345
+ id: 1,
4346
+ payload: {
4347
+ method: 'firmwareUpdateV4',
4348
+ platform: 'desktop',
4349
+ expectedTargetVersions: {
4350
+ app_v1: '2.0.0',
4351
+ },
4352
+ },
4353
+ });
4354
+ method.init();
4355
+ const typedCall = jest.fn().mockResolvedValue({
4356
+ type: 'DeviceFirmwareUpdateStatus',
4357
+ message: {
4358
+ records: [{ target_id: 4, status: 2, payload_version: 0x010000 }],
4359
+ },
4360
+ });
4361
+ const dateNowSpy = jest
4362
+ .spyOn(Date, 'now')
4363
+ .mockReturnValueOnce(0)
4364
+ .mockReturnValueOnce(0)
4365
+ .mockReturnValue(300_001);
4366
+ const setTimeoutSpy = jest.spyOn(global, 'setTimeout').mockImplementation(((
4367
+ callback: () => void
4368
+ ) => {
4369
+ callback();
4370
+ return 0 as any;
4371
+ }) as typeof setTimeout);
4372
+
4373
+ (method as any).device = stubDevice({
4374
+ getCommands: () => ({ typedCall }),
4375
+ });
4376
+ (method as any).reconnectProtocolV2Device = jest.fn().mockResolvedValue(undefined);
4377
+ (method as any).verifyProtocolV2ReconnectIdentity = jest.fn().mockResolvedValue(undefined);
4378
+
4379
+ try {
4380
+ await expect(
4381
+ (method as any).waitForProtocolV2FirmwareUpdateComplete([
4382
+ { target_id: 4, path: 'vol0:/application_p1.bin' },
4383
+ ])
4384
+ ).rejects.toMatchObject({
4385
+ errorCode: HardwareErrorCode.FirmwareVerificationFailed,
4386
+ message: expect.stringContaining('reached payload version 65536, expected 131072'),
4387
+ });
4388
+ } finally {
4389
+ dateNowSpy.mockRestore();
4390
+ setTimeoutSpy.mockRestore();
4391
+ }
4392
+
4393
+ expect(typedCall).toHaveBeenCalledTimes(1);
4394
+ });
4395
+
4396
+ test('fails install polling immediately with the original status conflict error', async () => {
4397
+ const method = new FirmwareUpdateV4({
4398
+ id: 1,
4399
+ payload: {
4400
+ method: 'firmwareUpdateV4',
4401
+ },
4402
+ });
4403
+ const typedCall = jest.fn().mockResolvedValue({
4404
+ type: 'DeviceFirmwareUpdateStatus',
4405
+ message: {
4406
+ records: [{ target_id: 4, status: 2, path: 'vol0:/unexpected.bin' }],
4407
+ },
4408
+ });
4409
+ const dateNowSpy = jest
4410
+ .spyOn(Date, 'now')
4411
+ .mockReturnValueOnce(0)
4412
+ .mockReturnValueOnce(0)
4413
+ .mockReturnValue(300_001);
4414
+ const setTimeoutSpy = jest.spyOn(global, 'setTimeout').mockImplementation(((
4415
+ callback: () => void
4416
+ ) => {
4417
+ callback();
4418
+ return 0 as any;
4419
+ }) as typeof setTimeout);
4420
+
4421
+ (method as any).device = stubDevice({
4422
+ getCommands: () => ({ typedCall }),
4423
+ });
4424
+ (method as any).reconnectProtocolV2Device = jest.fn().mockResolvedValue(undefined);
4425
+ (method as any).verifyProtocolV2ReconnectIdentity = jest.fn().mockResolvedValue(undefined);
4426
+
4427
+ try {
4428
+ await expect(
4429
+ (method as any).waitForProtocolV2FirmwareUpdateComplete([
4430
+ { target_id: 4, path: 'vol0:/application_p1.bin' },
4431
+ ])
4432
+ ).rejects.toMatchObject({
4433
+ errorCode: HardwareErrorCode.RuntimeError,
4434
+ message: 'Protocol V2 install status conflicts with target 4',
4435
+ params: {
4436
+ firmwareUpdateCode: 'FirmwareInstallStatusConflict',
4437
+ },
4438
+ });
4439
+ } finally {
4440
+ dateNowSpy.mockRestore();
4441
+ setTimeoutSpy.mockRestore();
4442
+ }
4443
+
4444
+ expect(typedCall).toHaveBeenCalledTimes(1);
4445
+ });
4446
+
4343
4447
  test('does not fail a completed multi-app install when final app versions are unobservable', () => {
4344
4448
  const method = new FirmwareUpdateV4({
4345
4449
  id: 1,
@@ -6,7 +6,6 @@ import type { FirmwareUpdatePreparedPlan } from '../types/api/firmwareUpdatePrep
6
6
  type Params = {
7
7
  binary?: ArrayBuffer;
8
8
  artifact?: FirmwareArtifactReference;
9
- resourceArtifact?: FirmwareArtifactReference;
10
9
  resourceEntries?: Array<{
11
10
  entryName: string;
12
11
  artifact: FirmwareArtifactReference;
@@ -1 +1 @@
1
- {"version":3,"file":"FirmwareUpdateV2.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV2.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EAEb,KAAK,aAAa,EAKnB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAyB1C,OAAO,KAAK,EAAE,QAAQ,EAAe,MAAM,UAAU,CAAC;AAEtD,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAE1F,KAAK,MAAM,GAAG;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IACrC,gBAAgB,CAAC,EAAE,yBAAyB,CAAC;IAC7C,eAAe,CAAC,EAAE,KAAK,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,yBAAyB,CAAC;KACrC,CAAC,CAAC;IACH,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,YAAY,CAAC,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,CAAC,EAAE,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B,CAAC;AAkFF,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,UAAU,CAAC,MAAM,CAAC;IAC9D,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IAE1C,IAAI;IA6EJ,cAAc,YAAa,MAAM,UAS/B;YAEY,qCAAqC;IAkBnD,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;YA6FvC,4BAA4B;IAuB1C,qBAAqB;IAUrB,uBAAuB,CAAC,UAAU,EAAE,MAAM;IAc1C,gCAAgC,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAAE,YAAY,EAAE,aAAa;IAwBtF,GAAG;CA2QV"}
1
+ {"version":3,"file":"FirmwareUpdateV2.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV2.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EAEb,KAAK,aAAa,EAKnB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAyB1C,OAAO,KAAK,EAAE,QAAQ,EAAe,MAAM,UAAU,CAAC;AAEtD,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAE1F,KAAK,MAAM,GAAG;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IACrC,eAAe,CAAC,EAAE,KAAK,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,yBAAyB,CAAC;KACrC,CAAC,CAAC;IACH,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,YAAY,CAAC,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,CAAC,EAAE,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B,CAAC;AAkFF,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,UAAU,CAAC,MAAM,CAAC;IAC9D,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IAE1C,IAAI;IAuEJ,cAAc,YAAa,MAAM,UAS/B;YAEY,qCAAqC;IAkBnD,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;YA6FvC,4BAA4B;IAuB1C,qBAAqB;IAUrB,uBAAuB,CAAC,UAAU,EAAE,MAAM;IAc1C,gCAAgC,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAAE,YAAY,EAAE,aAAa;IAwBtF,GAAG;CAgQV"}
@@ -1 +1 @@
1
- {"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAkB/E,OAAO,KAAK,EAEV,sBAAsB,EAEvB,MAAM,6BAA6B,CAAC;AA4VrC,eAAO,MAAM,oCAAoC,WACvC,WAAW,GAAG,UAAU,eACnB,MAAM,GAAG,SAAS,YAKhC,CAAC;AAEF,eAAO,MAAM,iCAAiC,0BACrB,MAAM,uBACR,MAAM,SAc5B,CAAC;AAUF,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,wBAAwB,CAAC,sBAAsB,CAAC;IAC5F,OAAO,CAAC,8BAA8B,CAAC,CAAS;IAEhD,qBAAqB;IAIrB,OAAO,CAAC,yBAAyB,CAA4B;IAE7D,OAAO,CAAC,2BAA2B,CAAS;IAE5C,OAAO,CAAC,iCAAiC,CAA6B;IAEtE,OAAO,CAAC,6BAA6B,CAAC,CAAW;IAEjD,OAAO,CAAC,6BAA6B,CAAS;IAE9C,IAAI;IAoHJ,OAAO,CAAC,8BAA8B;IAoBhC,GAAG;;;;;YAKK,aAAa;YAsEb,4BAA4B;YAkB5B,0BAA0B;YAY1B,8BAA8B;YAK9B,+BAA+B;YAqD/B,gCAAgC;YAmDhC,8BAA8B;IAsB5C,OAAO,CAAC,8BAA8B;IA0BtC,OAAO,CAAC,kCAAkC;IAc1C,OAAO,CAAC,gCAAgC;IAsDxC,OAAO,CAAC,6BAA6B;YAsBvB,2BAA2B;IAWzC,OAAO,CAAC,yBAAyB;IAKjC,OAAO,CAAC,kCAAkC;YAO5B,iCAAiC;YAOjC,iCAAiC;YAgBjC,iCAAiC;IAM/C,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,4BAA4B;IAQpC,OAAO,CAAC,2BAA2B;IAsBnC,OAAO,CAAC,yBAAyB;IAiBjC,OAAO,CAAC,wBAAwB;IAkBhC,OAAO,CAAC,6BAA6B;YAMvB,8BAA8B;YA6C9B,iCAAiC;YAmCjC,+BAA+B;IAiE7C,OAAO,CAAC,gCAAgC;YAyC1B,oCAAoC;YA6DpC,kCAAkC;IAgChD,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,yBAAyB;IAU3B,6BAA6B;YA+BrB,+BAA+B;IA6C7C,OAAO,CAAC,6BAA6B;IAkCrC,OAAO,CAAC,8BAA8B;YA8CxB,uBAAuB;YAiCvB,6BAA6B;YAa7B,uBAAuB;YA6CvB,8BAA8B;YA2D9B,6BAA6B;IA0D3C,OAAO,CAAC,mCAAmC;YAI7B,0BAA0B;IAaxC,OAAO,CAAC,4BAA4B;YAsGtB,uCAAuC;YAyFvC,gCAAgC;YAShC,yBAAyB;YAQzB,8BAA8B;YAsB9B,mCAAmC;YAWnC,qCAAqC;YA2CrC,yBAAyB;YAiDzB,8BAA8B;IAU5C,OAAO,CAAC,kCAAkC;YAI5B,cAAc;YA+Bd,6BAA6B;YAW7B,0BAA0B;YAS1B,6BAA6B;YAmB7B,gBAAgB;IAiB9B,OAAO,CAAC,qBAAqB;CAM9B"}
1
+ {"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAkB/E,OAAO,KAAK,EAEV,sBAAsB,EAEvB,MAAM,6BAA6B,CAAC;AAmWrC,eAAO,MAAM,oCAAoC,WACvC,WAAW,GAAG,UAAU,eACnB,MAAM,GAAG,SAAS,YAKhC,CAAC;AAEF,eAAO,MAAM,iCAAiC,0BACrB,MAAM,uBACR,MAAM,SAc5B,CAAC;AAUF,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,wBAAwB,CAAC,sBAAsB,CAAC;IAC5F,OAAO,CAAC,8BAA8B,CAAC,CAAS;IAEhD,qBAAqB;IAIrB,OAAO,CAAC,yBAAyB,CAA4B;IAE7D,OAAO,CAAC,2BAA2B,CAAS;IAE5C,OAAO,CAAC,iCAAiC,CAA6B;IAEtE,OAAO,CAAC,6BAA6B,CAAC,CAAW;IAEjD,OAAO,CAAC,6BAA6B,CAAS;IAE9C,IAAI;IAoHJ,OAAO,CAAC,8BAA8B;IAoBhC,GAAG;;;;;YAKK,aAAa;YAsEb,4BAA4B;YAkB5B,0BAA0B;YAY1B,8BAA8B;YAK9B,+BAA+B;YAqD/B,gCAAgC;YAmDhC,8BAA8B;IAsB5C,OAAO,CAAC,8BAA8B;IA0BtC,OAAO,CAAC,kCAAkC;IAc1C,OAAO,CAAC,gCAAgC;IAsDxC,OAAO,CAAC,6BAA6B;YAsBvB,2BAA2B;IAWzC,OAAO,CAAC,yBAAyB;IAKjC,OAAO,CAAC,kCAAkC;YAO5B,iCAAiC;YAOjC,iCAAiC;YAgBjC,iCAAiC;IAM/C,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,4BAA4B;IAQpC,OAAO,CAAC,2BAA2B;IAsBnC,OAAO,CAAC,yBAAyB;IAiBjC,OAAO,CAAC,wBAAwB;IAkBhC,OAAO,CAAC,6BAA6B;YAMvB,8BAA8B;YA6C9B,iCAAiC;YAmCjC,+BAA+B;IAiE7C,OAAO,CAAC,gCAAgC;YAyC1B,oCAAoC;YA6DpC,kCAAkC;IAgChD,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,yBAAyB;IAU3B,6BAA6B;YA+BrB,+BAA+B;IA6C7C,OAAO,CAAC,6BAA6B;IAkCrC,OAAO,CAAC,8BAA8B;YA8CxB,uBAAuB;YAiCvB,6BAA6B;YAa7B,uBAAuB;YA6CvB,8BAA8B;YA2D9B,6BAA6B;IA0D3C,OAAO,CAAC,mCAAmC;YAI7B,0BAA0B;IAaxC,OAAO,CAAC,4BAA4B;YAyGtB,uCAAuC;YAsFvC,gCAAgC;YAShC,yBAAyB;YAQzB,8BAA8B;YAsB9B,mCAAmC;YAWnC,qCAAqC;YA2CrC,yBAAyB;YAiDzB,8BAA8B;IAU5C,OAAO,CAAC,kCAAkC;YAI5B,cAAc;YA+Bd,6BAA6B;YAW7B,0BAA0B;YAS1B,6BAA6B;YAmB7B,gBAAgB;IAiB9B,OAAO,CAAC,qBAAqB;CAM9B"}
package/dist/index.d.ts CHANGED
@@ -1264,7 +1264,6 @@ interface FirmwareUpdateArtifactParams {
1264
1264
  preparedPlan: FirmwareUpdatePreparedPlan;
1265
1265
  hostBindingGeneration: number;
1266
1266
  artifact: FirmwareArtifactReference;
1267
- resourceArtifact?: FirmwareArtifactReference;
1268
1267
  resourceEntries?: Array<{
1269
1268
  entryName: string;
1270
1269
  artifact: FirmwareArtifactReference;
package/dist/index.js CHANGED
@@ -48699,7 +48699,7 @@ class DeviceUpdateBootloader extends FirmwareUpdateBaseMethod {
48699
48699
  return true;
48700
48700
  }
48701
48701
  finally {
48702
- yield source.close();
48702
+ yield source.close().catch(() => undefined);
48703
48703
  }
48704
48704
  }
48705
48705
  const { binary } = payload;
@@ -49064,16 +49064,11 @@ class FirmwareUpdateV2 extends BaseMethod {
49064
49064
  if ('artifact' in payload) {
49065
49065
  const hostBinding = resolveFirmwareUpdateHostBinding(payload.hostBindingGeneration);
49066
49066
  const target = payload.isUpdateBootloader ? 'bootloader' : payload.updateType;
49067
- const resourceBindings = [
49068
- ...(payload.resourceArtifact
49069
- ? [{ target: 'resource', artifact: payload.resourceArtifact }]
49070
- : []),
49071
- ...((_a = payload.resourceEntries) !== null && _a !== void 0 ? _a : []).map((entry) => ({
49072
- target: 'resource',
49073
- entryName: entry.entryName,
49074
- artifact: entry.artifact,
49075
- })),
49076
- ];
49067
+ const resourceBindings = ((_a = payload.resourceEntries) !== null && _a !== void 0 ? _a : []).map((entry) => ({
49068
+ target: 'resource',
49069
+ entryName: entry.entryName,
49070
+ artifact: entry.artifact,
49071
+ }));
49077
49072
  assertFirmwareUpdatePreparedPlanBinding({
49078
49073
  preparedPlan: payload.preparedPlan,
49079
49074
  executor: 'v2',
@@ -49081,7 +49076,7 @@ class FirmwareUpdateV2 extends BaseMethod {
49081
49076
  scopeTargets: [target, ...(target === 'firmware' ? ['resource'] : [])],
49082
49077
  bindings: [{ target, artifact: payload.artifact }, ...resourceBindings],
49083
49078
  });
49084
- this.params = Object.assign(Object.assign({}, this.params), { preparedPlan: payload.preparedPlan, artifact: payload.artifact, resourceArtifact: payload.resourceArtifact, resourceEntries: payload.resourceEntries, artifactReader: hostBinding.artifactReader });
49079
+ this.params = Object.assign(Object.assign({}, this.params), { preparedPlan: payload.preparedPlan, artifact: payload.artifact, resourceEntries: payload.resourceEntries, artifactReader: hostBinding.artifactReader });
49085
49080
  }
49086
49081
  }
49087
49082
  _promptDeviceInBootloaderForWebDevice() {
@@ -49357,23 +49352,15 @@ class FirmwareUpdateV2 extends BaseMethod {
49357
49352
  this.postTipMessage('DownloadLatestUiResourceSuccess');
49358
49353
  }
49359
49354
  else {
49360
- let resourceBinary;
49361
- if (params.resourceArtifact) {
49362
- throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, 'Firmware resource archive must be materialized into prepared entries', {
49355
+ if (params.artifactReader ||
49356
+ DataManager.getSettings('firmwareManifestMode') === 'external-only') {
49357
+ throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, 'Firmware resource must be prepared by the external firmware host', {
49363
49358
  firmwareUpdateCode: 'FirmwareArtifactsNotPrepared',
49364
49359
  artifactName: 'resource',
49365
49360
  });
49366
49361
  }
49367
- else {
49368
- if (params.artifactReader ||
49369
- DataManager.getSettings('firmwareManifestMode') === 'external-only') {
49370
- throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, 'Firmware resource must be prepared by the external firmware host', {
49371
- firmwareUpdateCode: 'FirmwareArtifactsNotPrepared',
49372
- artifactName: 'resource',
49373
- });
49374
- }
49375
- resourceBinary = (yield getSysResourceBinary(resourceUrl)).binary;
49376
- }
49362
+ const resourceBinary = (yield getSysResourceBinary(resourceUrl))
49363
+ .binary;
49377
49364
  this.postTipMessage('DownloadLatestUiResourceSuccess');
49378
49365
  yield updateResources(this.device.getCommands().typedCall.bind(this.device.getCommands()), this.postMessage, device, resourceBinary);
49379
49366
  }
@@ -50135,6 +50122,7 @@ const PROTOCOL_V2_CONNECT_POLL_INTERVAL = 500;
50135
50122
  const PROTOCOL_V2_CONNECT_SINGLE_TIMEOUT = 75 * 1000;
50136
50123
  const PROTOCOL_V2_DEVICE_INFO_READY_TIMEOUT = 60 * 1000;
50137
50124
  const PROTOCOL_V2_FILE_TRANSFER_RETRY_COUNT = 3;
50125
+ const PROTOCOL_V2_INSTALL_STATUS_CONFLICT_CODE = 'FirmwareInstallStatusConflict';
50138
50126
  const PROTOCOL_V2_OKPP_HEADER_SIZE = 0x52a0;
50139
50127
  const PROTOCOL_V2_OKPP_PAYLOAD_HASH_OFFSET = 0x200;
50140
50128
  const PROTOCOL_V2_OKPP_HEADER_HASH_OFFSET = 0x240;
@@ -50229,6 +50217,13 @@ const isProtocolV2FirmwareStatusEndpointUnavailable = (error) => {
50229
50217
  message.includes('message handler not found') ||
50230
50218
  message.includes('unsupported message'));
50231
50219
  };
50220
+ const isProtocolV2TerminalInstallStatusError = (error) => {
50221
+ var _a;
50222
+ return error instanceof hdShared.HardwareError &&
50223
+ (error.errorCode === hdShared.HardwareErrorCode.FirmwareError ||
50224
+ error.errorCode === hdShared.HardwareErrorCode.FirmwareVerificationFailed ||
50225
+ ((_a = error.params) === null || _a === void 0 ? void 0 : _a.firmwareUpdateCode) === PROTOCOL_V2_INSTALL_STATUS_CONFLICT_CODE);
50226
+ };
50232
50227
  const isProtocolV2TargetStatusFinished = (status) => normalizeProtocolV2TargetStatus(status) === PROTOCOL_V2_TARGET_STATUS_FINISHED;
50233
50228
  const isProtocolV2TargetStatusInProgress = (status) => normalizeProtocolV2TargetStatus(status) === PROTOCOL_V2_TARGET_STATUS_PENDING ||
50234
50229
  normalizeProtocolV2TargetStatus(status) === PROTOCOL_V2_TARGET_STATUS_IN_PROGRESS;
@@ -51410,7 +51405,9 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
51410
51405
  if (targetId === undefined ||
51411
51406
  seenTargetIds.has(targetId) ||
51412
51407
  (target.path && expectedPaths.get(targetId) && target.path !== expectedPaths.get(targetId))) {
51413
- throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, `Protocol V2 install status conflicts with target ${target.target_id}`);
51408
+ throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, `Protocol V2 install status conflicts with target ${target.target_id}`, {
51409
+ firmwareUpdateCode: PROTOCOL_V2_INSTALL_STATUS_CONFLICT_CODE,
51410
+ });
51414
51411
  }
51415
51412
  seenTargetIds.add(targetId);
51416
51413
  }
@@ -51477,8 +51474,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
51477
51474
  lastError = new Error('Protocol V2 firmware targets are still installing');
51478
51475
  }
51479
51476
  catch (error) {
51480
- if (error instanceof hdShared.HardwareError &&
51481
- error.errorCode === hdShared.HardwareErrorCode.FirmwareError) {
51477
+ if (isProtocolV2TerminalInstallStatusError(error)) {
51482
51478
  throw error;
51483
51479
  }
51484
51480
  if (isProtocolV2FirmwareStatusEndpointUnavailable(error)) {
@@ -51499,7 +51495,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
51499
51495
  if (this.isProtocolV2ReconnectIdentityError(error)) {
51500
51496
  throw error;
51501
51497
  }
51502
- if (error instanceof hdShared.HardwareError && error.errorCode === hdShared.HardwareErrorCode.FirmwareError) {
51498
+ if (isProtocolV2TerminalInstallStatusError(error)) {
51503
51499
  throw error;
51504
51500
  }
51505
51501
  if (error instanceof hdShared.HardwareError &&
@@ -39,7 +39,6 @@ export interface FirmwareUpdateArtifactParams {
39
39
  preparedPlan: FirmwareUpdatePreparedPlan;
40
40
  hostBindingGeneration: number;
41
41
  artifact: FirmwareArtifactReference;
42
- resourceArtifact?: FirmwareArtifactReference;
43
42
  resourceEntries?: Array<{
44
43
  entryName: string;
45
44
  artifact: FirmwareArtifactReference;
@@ -1 +1 @@
1
- {"version":3,"file":"firmwareUpdate.d.ts","sourceRoot":"","sources":["../../../src/types/api/firmwareUpdate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"firmwareUpdate.d.ts","sourceRoot":"","sources":["../../../src/types/api/firmwareUpdate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onekeyfe/hd-core",
3
- "version": "1.2.0-alpha.65",
3
+ "version": "1.2.0-alpha.67",
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.0-alpha.65",
29
- "@onekeyfe/hd-transport": "1.2.0-alpha.65",
28
+ "@onekeyfe/hd-shared": "1.2.0-alpha.67",
29
+ "@onekeyfe/hd-transport": "1.2.0-alpha.67",
30
30
  "axios": "1.15.2",
31
31
  "bignumber.js": "^9.0.2",
32
32
  "bytebuffer": "^5.0.1",
@@ -44,5 +44,5 @@
44
44
  "@types/w3c-web-usb": "^1.0.10",
45
45
  "@types/web-bluetooth": "^0.0.21"
46
46
  },
47
- "gitHead": "2850b5b34935d4e97a1fe8a6459eb5a96a5cf0f6"
47
+ "gitHead": "5fea66e8c65a1fab2ccc099b2811c8749b2487e0"
48
48
  }
@@ -46,7 +46,6 @@ import type { FirmwareUpdatePreparedPlan } from '../types/api/firmwareUpdatePrep
46
46
  type Params = {
47
47
  binary?: ArrayBuffer;
48
48
  artifact?: FirmwareArtifactReference;
49
- resourceArtifact?: FirmwareArtifactReference;
50
49
  resourceEntries?: Array<{
51
50
  entryName: string;
52
51
  artifact: FirmwareArtifactReference;
@@ -191,18 +190,13 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
191
190
  if ('artifact' in payload) {
192
191
  const hostBinding = resolveFirmwareUpdateHostBinding(payload.hostBindingGeneration);
193
192
  const target = payload.isUpdateBootloader ? 'bootloader' : payload.updateType;
194
- const resourceBindings = [
195
- ...(payload.resourceArtifact
196
- ? [{ target: 'resource' as const, artifact: payload.resourceArtifact }]
197
- : []),
198
- ...(payload.resourceEntries ?? []).map(
199
- (entry: { entryName: string; artifact: FirmwareArtifactReference }) => ({
200
- target: 'resource' as const,
201
- entryName: entry.entryName,
202
- artifact: entry.artifact,
203
- })
204
- ),
205
- ];
193
+ const resourceBindings = (payload.resourceEntries ?? []).map(
194
+ (entry: { entryName: string; artifact: FirmwareArtifactReference }) => ({
195
+ target: 'resource' as const,
196
+ entryName: entry.entryName,
197
+ artifact: entry.artifact,
198
+ })
199
+ );
206
200
  assertFirmwareUpdatePreparedPlanBinding({
207
201
  preparedPlan: payload.preparedPlan,
208
202
  executor: 'v2',
@@ -214,7 +208,6 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
214
208
  ...this.params,
215
209
  preparedPlan: payload.preparedPlan,
216
210
  artifact: payload.artifact,
217
- resourceArtifact: payload.resourceArtifact,
218
211
  resourceEntries: payload.resourceEntries,
219
212
  artifactReader: hostBinding.artifactReader,
220
213
  };
@@ -576,32 +569,21 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
576
569
  }
577
570
  this.postTipMessage('DownloadLatestUiResourceSuccess');
578
571
  } else {
579
- let resourceBinary: ArrayBuffer | Buffer;
580
- if (params.resourceArtifact) {
572
+ if (
573
+ params.artifactReader ||
574
+ DataManager.getSettings('firmwareManifestMode') === 'external-only'
575
+ ) {
581
576
  throw ERRORS.TypedError(
582
577
  HardwareErrorCode.RuntimeError,
583
- 'Firmware resource archive must be materialized into prepared entries',
578
+ 'Firmware resource must be prepared by the external firmware host',
584
579
  {
585
580
  firmwareUpdateCode: 'FirmwareArtifactsNotPrepared',
586
581
  artifactName: 'resource',
587
582
  }
588
583
  );
589
- } else {
590
- if (
591
- params.artifactReader ||
592
- DataManager.getSettings('firmwareManifestMode') === 'external-only'
593
- ) {
594
- throw ERRORS.TypedError(
595
- HardwareErrorCode.RuntimeError,
596
- 'Firmware resource must be prepared by the external firmware host',
597
- {
598
- firmwareUpdateCode: 'FirmwareArtifactsNotPrepared',
599
- artifactName: 'resource',
600
- }
601
- );
602
- }
603
- resourceBinary = (await getSysResourceBinary(resourceUrl)).binary;
604
584
  }
585
+ const resourceBinary: ArrayBuffer | Buffer = (await getSysResourceBinary(resourceUrl))
586
+ .binary;
605
587
  this.postTipMessage('DownloadLatestUiResourceSuccess');
606
588
  await updateResources(
607
589
  this.device.getCommands().typedCall.bind(this.device.getCommands()),
@@ -75,6 +75,7 @@ const PROTOCOL_V2_CONNECT_POLL_INTERVAL = 500;
75
75
  const PROTOCOL_V2_CONNECT_SINGLE_TIMEOUT = 75 * 1000;
76
76
  const PROTOCOL_V2_DEVICE_INFO_READY_TIMEOUT = 60 * 1000;
77
77
  const PROTOCOL_V2_FILE_TRANSFER_RETRY_COUNT = 3;
78
+ const PROTOCOL_V2_INSTALL_STATUS_CONFLICT_CODE = 'FirmwareInstallStatusConflict';
78
79
  const PROTOCOL_V2_OKPP_HEADER_SIZE = 0x52a0;
79
80
  const PROTOCOL_V2_OKPP_PAYLOAD_HASH_OFFSET = 0x200;
80
81
  const PROTOCOL_V2_OKPP_HEADER_HASH_OFFSET = 0x240;
@@ -263,6 +264,12 @@ const isProtocolV2FirmwareStatusEndpointUnavailable = (error: unknown) => {
263
264
  );
264
265
  };
265
266
 
267
+ const isProtocolV2TerminalInstallStatusError = (error: unknown) =>
268
+ error instanceof HardwareError &&
269
+ (error.errorCode === HardwareErrorCode.FirmwareError ||
270
+ error.errorCode === HardwareErrorCode.FirmwareVerificationFailed ||
271
+ error.params?.firmwareUpdateCode === PROTOCOL_V2_INSTALL_STATUS_CONFLICT_CODE);
272
+
266
273
  const isProtocolV2TargetStatusFinished = (status: ProtocolV2FirmwareUpdateStatusTarget['status']) =>
267
274
  normalizeProtocolV2TargetStatus(status) === PROTOCOL_V2_TARGET_STATUS_FINISHED;
268
275
 
@@ -1782,7 +1789,10 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
1782
1789
  ) {
1783
1790
  throw ERRORS.TypedError(
1784
1791
  HardwareErrorCode.RuntimeError,
1785
- `Protocol V2 install status conflicts with target ${target.target_id}`
1792
+ `Protocol V2 install status conflicts with target ${target.target_id}`,
1793
+ {
1794
+ firmwareUpdateCode: PROTOCOL_V2_INSTALL_STATUS_CONFLICT_CODE,
1795
+ }
1786
1796
  );
1787
1797
  }
1788
1798
  seenTargetIds.add(targetId);
@@ -1878,10 +1888,7 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
1878
1888
  }
1879
1889
  lastError = new Error('Protocol V2 firmware targets are still installing');
1880
1890
  } catch (error) {
1881
- if (
1882
- error instanceof HardwareError &&
1883
- error.errorCode === HardwareErrorCode.FirmwareError
1884
- ) {
1891
+ if (isProtocolV2TerminalInstallStatusError(error)) {
1885
1892
  throw error;
1886
1893
  }
1887
1894
  // App firmware does not register DeviceFirmwareUpdateStatusGet. Treat the
@@ -1909,7 +1916,7 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
1909
1916
  if (this.isProtocolV2ReconnectIdentityError(error)) {
1910
1917
  throw error;
1911
1918
  }
1912
- if (error instanceof HardwareError && error.errorCode === HardwareErrorCode.FirmwareError) {
1919
+ if (isProtocolV2TerminalInstallStatusError(error)) {
1913
1920
  throw error;
1914
1921
  }
1915
1922
  if (
@@ -206,7 +206,7 @@ export default class DeviceUpdateBootloader extends FirmwareUpdateBaseMethod<any
206
206
  }
207
207
  return true;
208
208
  } finally {
209
- await source.close();
209
+ await source.close().catch(() => undefined);
210
210
  }
211
211
  }
212
212
 
@@ -37,7 +37,6 @@ export interface FirmwareUpdateArtifactParams {
37
37
  preparedPlan: FirmwareUpdatePreparedPlan;
38
38
  hostBindingGeneration: number;
39
39
  artifact: FirmwareArtifactReference;
40
- resourceArtifact?: FirmwareArtifactReference;
41
40
  resourceEntries?: Array<{
42
41
  entryName: string;
43
42
  artifact: FirmwareArtifactReference;