@onekeyfe/hd-core 1.2.0-alpha.76 → 1.2.0-alpha.77

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.
@@ -151,6 +151,33 @@ describe('FirmwareUpdateV2 download-before-reboot safety', () => {
151
151
  jest.restoreAllMocks();
152
152
  });
153
153
 
154
+ it('rejects mixed binary and prepared artifact inputs during initialization', () => {
155
+ const method = new FirmwareUpdateV2({
156
+ id: 1,
157
+ payload: {
158
+ method: 'firmwareUpdateV2',
159
+ connectId: 'connect-id',
160
+ platform: 'desktop',
161
+ updateType: 'firmware',
162
+ binary: new ArrayBuffer(4),
163
+ artifact: {
164
+ artifactRef: `fw:${'a'.repeat(64)}`,
165
+ size: 4,
166
+ sha256: 'a'.repeat(64),
167
+ },
168
+ preparedPlan: {},
169
+ hostBindingGeneration: 1,
170
+ },
171
+ });
172
+
173
+ expect(() => method.init()).toThrow(
174
+ expect.objectContaining({
175
+ errorCode: HardwareErrorCode.CallMethodInvalidParameter,
176
+ message: 'Firmware update binary and artifact are mutually exclusive',
177
+ })
178
+ );
179
+ });
180
+
154
181
  it.each([
155
182
  {
156
183
  context: 'Classic 1S normal mode',
@@ -1,3 +1,5 @@
1
+ import * as hdShared from '@onekeyfe/hd-shared';
2
+
1
3
  import FirmwareUpdateV3 from '../../src/api/FirmwareUpdateV3';
2
4
  import { DevicePool } from '../../src/device/DevicePool';
3
5
 
@@ -61,4 +63,59 @@ describe('FirmwareUpdateV3 reconnect', () => {
61
63
  expect(commands.disposed).toBe(false);
62
64
  expect(commands.mainId).toBe('usb-session');
63
65
  });
66
+
67
+ it('uses the BLE reconnect budget for a prepared BLE artifact', async () => {
68
+ jest.useFakeTimers({ doNotFake: ['performance'] });
69
+ jest.spyOn(hdShared, 'wait').mockResolvedValue(undefined);
70
+ const method = new FirmwareUpdateV3({
71
+ id: 1,
72
+ payload: {
73
+ method: 'firmwareUpdateV3',
74
+ connectId: 'ble-device',
75
+ },
76
+ });
77
+ const reconnectError = new Error('stop after reconnect budget assertion');
78
+ const waitForDeviceReconnect = jest
79
+ .spyOn(method, 'waitForDeviceReconnect')
80
+ .mockRejectedValue(reconnectError);
81
+ method.isBleReconnect = jest.fn(() => true);
82
+ method.params = {
83
+ platform: 'native',
84
+ artifacts: {
85
+ ble: {
86
+ artifactRef: `fw:${'a'.repeat(64)}`,
87
+ size: 4,
88
+ sha256: 'a'.repeat(64),
89
+ },
90
+ },
91
+ } as any;
92
+ const commands = {
93
+ typedCall: jest.fn().mockRejectedValue(new Error('device rebooting')),
94
+ };
95
+ method.device = {
96
+ features: {},
97
+ getCommands: () => commands,
98
+ } as unknown as Device;
99
+ (method as any).createUpdatesFolderIfNotExists = jest.fn().mockResolvedValue(undefined);
100
+ (method as any).startEmmcFirmwareUpdate = jest.fn().mockResolvedValue(undefined);
101
+ method.postTipMessage = jest.fn();
102
+ method.postProcessingMessage = jest.fn();
103
+ method.postProgressMessage = jest.fn();
104
+
105
+ try {
106
+ await expect(
107
+ (method as any).executeUpdate({
108
+ resourceBinary: null,
109
+ resourceEntries: [],
110
+ fwSources: [],
111
+ bootloaderSource: null,
112
+ })
113
+ ).rejects.toBe(reconnectError);
114
+
115
+ expect(waitForDeviceReconnect).toHaveBeenCalledWith(3 * 60 * 1000);
116
+ } finally {
117
+ jest.clearAllTimers();
118
+ jest.useRealTimers();
119
+ }
120
+ });
64
121
  });
@@ -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,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;YA8FvC,4BAA4B;IAyB1C,qBAAqB;IAUrB,uBAAuB,CAAC,UAAU,EAAE,MAAM;IAc1C,gCAAgC,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAAE,YAAY,EAAE,aAAa;IAwBtF,GAAG;CAgQV"}
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;IAmFJ,cAAc,YAAa,MAAM,UAS/B;YAEY,qCAAqC;IAkBnD,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;YA8FvC,4BAA4B;IAyB1C,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":"FirmwareUpdateV3.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV3.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAY/E,OAAO,KAAK,EAEV,sBAAsB,EACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,qBAAqB,CAAC;AAMnE,eAAO,MAAM,gCAAgC,UAAU,CAAC;AAaxD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,wBAAwB,CAAC,sBAAsB,CAAC;IAC5F,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IAE1C,OAAO,CAAC,gBAAgB,CAAS;IAEjC,OAAO,CAAC,eAAe,CAA4B;IAEnD,IAAI;IAmFE,GAAG;;;;;YAQK,aAAa;IA6D3B,OAAO,CAAC,wBAAwB;YAiBlB,kBAAkB;YAelB,oBAAoB;IAKlC,OAAO,CAAC,wBAAwB;YAgBlB,oBAAoB;YA2DpB,uBAAuB;YAuBvB,4BAA4B;YA+E5B,aAAa;IAwN3B,OAAO,CAAC,yBAAyB;IAajC,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,qBAAqB;IAmB7B,OAAO,CAAC,sCAAsC;IAexC,sBAAsB,CAAC,OAAO,EAAE,MAAM;CA+E7C"}
1
+ {"version":3,"file":"FirmwareUpdateV3.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV3.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAY/E,OAAO,KAAK,EAEV,sBAAsB,EACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,qBAAqB,CAAC;AAMnE,eAAO,MAAM,gCAAgC,UAAU,CAAC;AAaxD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,wBAAwB,CAAC,sBAAsB,CAAC;IAC5F,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IAE1C,OAAO,CAAC,gBAAgB,CAAS;IAEjC,OAAO,CAAC,eAAe,CAA4B;IAEnD,IAAI;IAmFE,GAAG;;;;;YAQK,aAAa;IA6D3B,OAAO,CAAC,wBAAwB;YAiBlB,kBAAkB;YAelB,oBAAoB;IAKlC,OAAO,CAAC,wBAAwB;YAgBlB,oBAAoB;YA2DpB,uBAAuB;YAuBvB,4BAA4B;YA+E5B,aAAa;IAyN3B,OAAO,CAAC,yBAAyB;IAajC,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,qBAAqB;IAmB7B,OAAO,CAAC,sCAAsC;IAexC,sBAAsB,CAAC,OAAO,EAAE,MAAM;CA+E7C"}
package/dist/index.js CHANGED
@@ -49870,6 +49870,12 @@ class FirmwareUpdateV2 extends BaseMethod {
49870
49870
  { name: 'platform', type: 'string', required: true },
49871
49871
  { name: 'firmwareType', type: 'string' },
49872
49872
  ]);
49873
+ if ('binary' in payload &&
49874
+ payload.binary !== undefined &&
49875
+ 'artifact' in payload &&
49876
+ payload.artifact !== undefined) {
49877
+ throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.CallMethodInvalidParameter, 'Firmware update binary and artifact are mutually exclusive');
49878
+ }
49873
49879
  if (!payload.updateType) {
49874
49880
  throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.CallMethodInvalidParameter, 'updateType is required');
49875
49881
  }
@@ -50563,6 +50569,7 @@ class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod {
50563
50569
  });
50564
50570
  }
50565
50571
  executeUpdate({ resourceBinary, resourceEntries, fwSources, bootloaderSource, }) {
50572
+ var _a;
50566
50573
  return __awaiter(this, void 0, void 0, function* () {
50567
50574
  let totalSize = 0;
50568
50575
  let processedSize = 0;
@@ -50709,7 +50716,8 @@ class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod {
50709
50716
  }
50710
50717
  if (shouldReconnect) {
50711
50718
  yield hdShared.wait(1000);
50712
- const reconnectTimeout = this.isBleReconnect() && (this.params.bleBinary || this.params.bleVersion)
50719
+ const reconnectTimeout = this.isBleReconnect() &&
50720
+ (this.params.bleBinary || this.params.bleVersion || ((_a = this.params.artifacts) === null || _a === void 0 ? void 0 : _a.ble))
50713
50721
  ? 3 * 60 * 1000
50714
50722
  : 60 * 1000;
50715
50723
  getFeaturesTimeoutCount = 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onekeyfe/hd-core",
3
- "version": "1.2.0-alpha.76",
3
+ "version": "1.2.0-alpha.77",
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.76",
29
- "@onekeyfe/hd-transport": "1.2.0-alpha.76",
28
+ "@onekeyfe/hd-shared": "1.2.0-alpha.77",
29
+ "@onekeyfe/hd-transport": "1.2.0-alpha.77",
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": "9c85b3757bef3483d84ead72974af4718ca019d0"
47
+ "gitHead": "2d53efc91d9269120d9741e827859f045cd50e72"
48
48
  }
@@ -159,6 +159,18 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
159
159
  { name: 'firmwareType', type: 'string' },
160
160
  ]);
161
161
 
162
+ if (
163
+ 'binary' in payload &&
164
+ payload.binary !== undefined &&
165
+ 'artifact' in payload &&
166
+ payload.artifact !== undefined
167
+ ) {
168
+ throw ERRORS.TypedError(
169
+ HardwareErrorCode.CallMethodInvalidParameter,
170
+ 'Firmware update binary and artifact are mutually exclusive'
171
+ );
172
+ }
173
+
162
174
  if (!payload.updateType) {
163
175
  throw ERRORS.TypedError(
164
176
  HardwareErrorCode.CallMethodInvalidParameter,
@@ -625,7 +625,8 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod<FirmwareU
625
625
  * 2. While including bootloader upgrade
626
626
  */
627
627
  const reconnectTimeout =
628
- this.isBleReconnect() && (this.params.bleBinary || this.params.bleVersion)
628
+ this.isBleReconnect() &&
629
+ (this.params.bleBinary || this.params.bleVersion || this.params.artifacts?.ble)
629
630
  ? 3 * 60 * 1000 // 3 minutes for BLE reconnect
630
631
  : 60 * 1000; // 1 minute for normal reconnect
631
632