@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.
- package/__tests__/firmware-update/firmware-update-v2-download-before-boot.test.ts +27 -0
- package/__tests__/firmware-update/firmware-update-v3-reconnect.test.ts +57 -0
- package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/package.json +4 -4
- package/src/api/FirmwareUpdateV2.ts +12 -0
- package/src/api/FirmwareUpdateV3.ts +2 -1
|
@@ -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;
|
|
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;
|
|
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() &&
|
|
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.
|
|
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.
|
|
29
|
-
"@onekeyfe/hd-transport": "1.2.0-alpha.
|
|
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": "
|
|
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() &&
|
|
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
|
|