@onekeyfe/hd-core 1.2.0-alpha.94 → 1.2.0-alpha.96
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-prepared-host-digest.test.ts +260 -0
- package/dist/api/FirmwareUpdateV2.d.ts +1 -0
- package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
- package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +46 -19
- package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/api/FirmwareUpdateV2.ts +7 -0
- package/src/api/FirmwareUpdateV3.ts +21 -6
- package/src/api/FirmwareUpdateV4.ts +12 -8
- package/src/api/device/DeviceUpdateBootloader.ts +19 -5
- package/src/types/api/firmwareUpdate.ts +1 -0
|
@@ -2,6 +2,7 @@ import { EDeviceType, EFirmwareType } from '@onekeyfe/hd-shared';
|
|
|
2
2
|
|
|
3
3
|
import FirmwareUpdateV2 from '../../src/api/FirmwareUpdateV2';
|
|
4
4
|
import FirmwareUpdateV3 from '../../src/api/FirmwareUpdateV3';
|
|
5
|
+
import FirmwareUpdateV4 from '../../src/api/FirmwareUpdateV4';
|
|
5
6
|
import DeviceUpdateBootloader from '../../src/api/device/DeviceUpdateBootloader';
|
|
6
7
|
import {
|
|
7
8
|
registerFirmwareUpdateHostBinding,
|
|
@@ -95,6 +96,47 @@ const registerMismatchedHost = () => {
|
|
|
95
96
|
return { artifactReader, hostBindingGeneration };
|
|
96
97
|
};
|
|
97
98
|
|
|
99
|
+
const createPreparedV4Plan = () => {
|
|
100
|
+
const sha256 = 'c'.repeat(64);
|
|
101
|
+
const artifact: FirmwareArtifactReference = {
|
|
102
|
+
artifactRef: `fw:${sha256}`,
|
|
103
|
+
size: 4,
|
|
104
|
+
sha256,
|
|
105
|
+
};
|
|
106
|
+
const plan = buildFirmwareUpdatePlan({
|
|
107
|
+
features: {
|
|
108
|
+
deviceType: EDeviceType.Pro2,
|
|
109
|
+
serialNo: 'pro2-device-id',
|
|
110
|
+
firmwareVersion: '1.0.0',
|
|
111
|
+
bootloaderVersion: '1.0.0',
|
|
112
|
+
} as Features,
|
|
113
|
+
firmwareType: EFirmwareType.Universal,
|
|
114
|
+
platform: 'desktop',
|
|
115
|
+
firmware: {
|
|
116
|
+
status: 'outdated',
|
|
117
|
+
release: {
|
|
118
|
+
components: {
|
|
119
|
+
applicationP1: {
|
|
120
|
+
target: 'APPLICATION_P1',
|
|
121
|
+
url: 'https://firmware.onekey.so/pro2/application-p1.bin',
|
|
122
|
+
expectedSize: artifact.size,
|
|
123
|
+
fingerprint: artifact.sha256,
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
ble: noUpdate,
|
|
129
|
+
bootloader: noUpdate,
|
|
130
|
+
});
|
|
131
|
+
expect(plan.executor).toBe('v4');
|
|
132
|
+
const preparedPlan = prepareFirmwareUpdatePlan({
|
|
133
|
+
plan,
|
|
134
|
+
leaseRef: 'fwlease:v4:app_v1',
|
|
135
|
+
artifacts: [{ artifactId: 'component:app_v1', artifact }],
|
|
136
|
+
});
|
|
137
|
+
return { artifact, preparedPlan };
|
|
138
|
+
};
|
|
139
|
+
|
|
98
140
|
describe('prepared firmware host digest binding', () => {
|
|
99
141
|
afterEach(() => {
|
|
100
142
|
unregisterFirmwareUpdateHostBinding();
|
|
@@ -123,6 +165,51 @@ describe('prepared firmware host digest binding', () => {
|
|
|
123
165
|
expect(artifactReader.open).not.toHaveBeenCalled();
|
|
124
166
|
});
|
|
125
167
|
|
|
168
|
+
test('FirmwareUpdateV2 rejects a direct reader when the prepared host generation is missing', () => {
|
|
169
|
+
const { artifact, preparedPlan } = createPreparedPlan({
|
|
170
|
+
executor: 'v2',
|
|
171
|
+
target: 'firmware',
|
|
172
|
+
});
|
|
173
|
+
const directArtifactReader = {
|
|
174
|
+
open: jest.fn(),
|
|
175
|
+
read: jest.fn(),
|
|
176
|
+
close: jest.fn(),
|
|
177
|
+
};
|
|
178
|
+
const method = new FirmwareUpdateV2({
|
|
179
|
+
id: 1,
|
|
180
|
+
payload: {
|
|
181
|
+
method: 'firmwareUpdateV2',
|
|
182
|
+
platform: 'desktop',
|
|
183
|
+
updateType: 'firmware',
|
|
184
|
+
artifact,
|
|
185
|
+
preparedPlan,
|
|
186
|
+
artifactReader: directArtifactReader,
|
|
187
|
+
},
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
expect(() => method.init()).toThrow('host binding generation NaN is stale');
|
|
191
|
+
expect(directArtifactReader.open).not.toHaveBeenCalled();
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
test('FirmwareUpdateV2 does not treat a binary call carrying a prepared plan as legacy', () => {
|
|
195
|
+
const { preparedPlan } = createPreparedPlan({
|
|
196
|
+
executor: 'v2',
|
|
197
|
+
target: 'firmware',
|
|
198
|
+
});
|
|
199
|
+
const method = new FirmwareUpdateV2({
|
|
200
|
+
id: 1,
|
|
201
|
+
payload: {
|
|
202
|
+
method: 'firmwareUpdateV2',
|
|
203
|
+
platform: 'desktop',
|
|
204
|
+
updateType: 'firmware',
|
|
205
|
+
binary: new ArrayBuffer(4),
|
|
206
|
+
preparedPlan,
|
|
207
|
+
},
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
expect(() => method.init()).toThrow('Prepared firmware plans require a prepared artifact');
|
|
211
|
+
});
|
|
212
|
+
|
|
126
213
|
test('FirmwareUpdateV3 rejects a host registered for another prepared plan', () => {
|
|
127
214
|
const { artifact, preparedPlan } = createPreparedPlan({
|
|
128
215
|
executor: 'v3',
|
|
@@ -144,6 +231,52 @@ describe('prepared firmware host digest binding', () => {
|
|
|
144
231
|
expect(artifactReader.open).not.toHaveBeenCalled();
|
|
145
232
|
});
|
|
146
233
|
|
|
234
|
+
test('FirmwareUpdateV3 rejects a direct reader when the prepared host generation is missing', () => {
|
|
235
|
+
const { artifact, preparedPlan } = createPreparedPlan({
|
|
236
|
+
executor: 'v3',
|
|
237
|
+
target: 'firmware',
|
|
238
|
+
});
|
|
239
|
+
const directArtifactReader = {
|
|
240
|
+
open: jest.fn(),
|
|
241
|
+
read: jest.fn(),
|
|
242
|
+
close: jest.fn(),
|
|
243
|
+
};
|
|
244
|
+
const method = new FirmwareUpdateV3({
|
|
245
|
+
id: 1,
|
|
246
|
+
payload: {
|
|
247
|
+
method: 'firmwareUpdateV3',
|
|
248
|
+
platform: 'desktop',
|
|
249
|
+
artifacts: { firmware: artifact },
|
|
250
|
+
preparedPlan,
|
|
251
|
+
artifactReader: directArtifactReader,
|
|
252
|
+
},
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
expect(() => method.init()).toThrow('host binding generation NaN is stale');
|
|
256
|
+
expect(directArtifactReader.open).not.toHaveBeenCalled();
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
test('FirmwareUpdateV3 does not execute legacy inputs outside the prepared plan', () => {
|
|
260
|
+
const { artifact, preparedPlan } = createPreparedPlan({
|
|
261
|
+
executor: 'v3',
|
|
262
|
+
target: 'firmware',
|
|
263
|
+
});
|
|
264
|
+
const method = new FirmwareUpdateV3({
|
|
265
|
+
id: 1,
|
|
266
|
+
payload: {
|
|
267
|
+
method: 'firmwareUpdateV3',
|
|
268
|
+
platform: 'desktop',
|
|
269
|
+
artifacts: { firmware: artifact },
|
|
270
|
+
preparedPlan,
|
|
271
|
+
bleBinary: new ArrayBuffer(4),
|
|
272
|
+
},
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
expect(() => method.init()).toThrow(
|
|
276
|
+
'Prepared firmware plans cannot be combined with legacy firmware inputs'
|
|
277
|
+
);
|
|
278
|
+
});
|
|
279
|
+
|
|
147
280
|
test('DeviceUpdateBootloader rejects a host registered for another prepared plan', async () => {
|
|
148
281
|
const { artifact, preparedPlan } = createPreparedPlan({
|
|
149
282
|
executor: 'v2',
|
|
@@ -170,6 +303,133 @@ describe('prepared firmware host digest binding', () => {
|
|
|
170
303
|
expect(artifactReader.open).not.toHaveBeenCalled();
|
|
171
304
|
});
|
|
172
305
|
|
|
306
|
+
test('DeviceUpdateBootloader rejects a direct reader when the prepared host generation is missing', async () => {
|
|
307
|
+
const { artifact, preparedPlan } = createPreparedPlan({
|
|
308
|
+
executor: 'v2',
|
|
309
|
+
target: 'bootloader',
|
|
310
|
+
});
|
|
311
|
+
const directArtifactReader = {
|
|
312
|
+
open: jest.fn(),
|
|
313
|
+
read: jest.fn(),
|
|
314
|
+
close: jest.fn(),
|
|
315
|
+
};
|
|
316
|
+
const method = new DeviceUpdateBootloader({
|
|
317
|
+
id: 1,
|
|
318
|
+
payload: {
|
|
319
|
+
method: 'deviceUpdateBootloader',
|
|
320
|
+
artifact,
|
|
321
|
+
preparedPlan,
|
|
322
|
+
artifactReader: directArtifactReader,
|
|
323
|
+
},
|
|
324
|
+
});
|
|
325
|
+
method.device = {
|
|
326
|
+
features: {
|
|
327
|
+
deviceType: EDeviceType.Classic1s,
|
|
328
|
+
serialNo: 'classic-device-id',
|
|
329
|
+
},
|
|
330
|
+
} as any;
|
|
331
|
+
|
|
332
|
+
await expect(method.run()).rejects.toThrow('host binding generation NaN is stale');
|
|
333
|
+
expect(directArtifactReader.open).not.toHaveBeenCalled();
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
test('DeviceUpdateBootloader does not treat a binary call carrying a prepared plan as legacy', async () => {
|
|
337
|
+
const { preparedPlan } = createPreparedPlan({
|
|
338
|
+
executor: 'v2',
|
|
339
|
+
target: 'bootloader',
|
|
340
|
+
});
|
|
341
|
+
const method = new DeviceUpdateBootloader({
|
|
342
|
+
id: 1,
|
|
343
|
+
payload: {
|
|
344
|
+
method: 'deviceUpdateBootloader',
|
|
345
|
+
binary: new ArrayBuffer(4),
|
|
346
|
+
preparedPlan,
|
|
347
|
+
},
|
|
348
|
+
});
|
|
349
|
+
method.device = { features: undefined } as any;
|
|
350
|
+
|
|
351
|
+
await expect(method.run()).rejects.toThrow(
|
|
352
|
+
'Prepared bootloader plans require exactly one prepared artifact'
|
|
353
|
+
);
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
test('FirmwareUpdateV4 rejects a prepared plan without a host binding generation', () => {
|
|
357
|
+
const { preparedPlan } = createPreparedV4Plan();
|
|
358
|
+
const directArtifactReader = {
|
|
359
|
+
open: jest.fn(),
|
|
360
|
+
read: jest.fn(),
|
|
361
|
+
close: jest.fn(),
|
|
362
|
+
};
|
|
363
|
+
const method = new FirmwareUpdateV4({
|
|
364
|
+
id: 1,
|
|
365
|
+
payload: {
|
|
366
|
+
method: 'firmwareUpdateV4',
|
|
367
|
+
platform: 'desktop',
|
|
368
|
+
preparedPlan,
|
|
369
|
+
artifactReader: directArtifactReader,
|
|
370
|
+
},
|
|
371
|
+
});
|
|
372
|
+
|
|
373
|
+
expect(() => method.init()).toThrow('host binding generation NaN is stale');
|
|
374
|
+
expect(directArtifactReader.open).not.toHaveBeenCalled();
|
|
375
|
+
});
|
|
376
|
+
|
|
377
|
+
test('FirmwareUpdateV4 rejects a host registered for another prepared plan', () => {
|
|
378
|
+
const { preparedPlan } = createPreparedV4Plan();
|
|
379
|
+
const { artifactReader, hostBindingGeneration } = registerMismatchedHost();
|
|
380
|
+
const method = new FirmwareUpdateV4({
|
|
381
|
+
id: 1,
|
|
382
|
+
payload: {
|
|
383
|
+
method: 'firmwareUpdateV4',
|
|
384
|
+
platform: 'desktop',
|
|
385
|
+
preparedPlan,
|
|
386
|
+
hostBindingGeneration,
|
|
387
|
+
},
|
|
388
|
+
});
|
|
389
|
+
|
|
390
|
+
expect(() => method.init()).toThrow('does not match the prepared plan');
|
|
391
|
+
expect(artifactReader.open).not.toHaveBeenCalled();
|
|
392
|
+
});
|
|
393
|
+
|
|
394
|
+
test('FirmwareUpdateV4 obtains the prepared reader only from the digest-bound host', async () => {
|
|
395
|
+
const { artifact, preparedPlan } = createPreparedV4Plan();
|
|
396
|
+
const directArtifactReader = {
|
|
397
|
+
open: jest.fn(),
|
|
398
|
+
read: jest.fn(),
|
|
399
|
+
close: jest.fn(),
|
|
400
|
+
};
|
|
401
|
+
const boundArtifactReader = {
|
|
402
|
+
open: jest.fn().mockResolvedValue({ readerId: 'bound-reader', size: artifact.size }),
|
|
403
|
+
read: jest.fn(),
|
|
404
|
+
close: jest.fn(),
|
|
405
|
+
};
|
|
406
|
+
const hostBindingGeneration = registerFirmwareUpdateHostBinding({
|
|
407
|
+
preparedPlanDigest: preparedPlan.preparedPlanDigest,
|
|
408
|
+
artifactReader: boundArtifactReader,
|
|
409
|
+
});
|
|
410
|
+
const method = new FirmwareUpdateV4({
|
|
411
|
+
id: 1,
|
|
412
|
+
payload: {
|
|
413
|
+
method: 'firmwareUpdateV4',
|
|
414
|
+
platform: 'desktop',
|
|
415
|
+
preparedPlan,
|
|
416
|
+
hostBindingGeneration,
|
|
417
|
+
artifactReader: directArtifactReader,
|
|
418
|
+
},
|
|
419
|
+
});
|
|
420
|
+
|
|
421
|
+
method.init();
|
|
422
|
+
const executionReader = (
|
|
423
|
+
method as unknown as {
|
|
424
|
+
params: { artifactReader: typeof boundArtifactReader };
|
|
425
|
+
}
|
|
426
|
+
).params.artifactReader;
|
|
427
|
+
await executionReader.open({ artifactRef: artifact.artifactRef });
|
|
428
|
+
|
|
429
|
+
expect(boundArtifactReader.open).toHaveBeenCalledWith({ artifactRef: artifact.artifactRef });
|
|
430
|
+
expect(directArtifactReader.open).not.toHaveBeenCalled();
|
|
431
|
+
});
|
|
432
|
+
|
|
173
433
|
test('keeps non-prepared direct binary calls on the legacy paths', async () => {
|
|
174
434
|
const v2 = new FirmwareUpdateV2({
|
|
175
435
|
id: 1,
|
|
@@ -6,6 +6,7 @@ import type { FirmwareUpdatePreparedPlan } from '../types/api/firmwareUpdatePrep
|
|
|
6
6
|
type Params = {
|
|
7
7
|
binary?: ArrayBuffer;
|
|
8
8
|
artifact?: FirmwareArtifactReference;
|
|
9
|
+
hostBindingGeneration?: number;
|
|
9
10
|
resourceEntries?: Array<{
|
|
10
11
|
entryName: string;
|
|
11
12
|
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;AA0B1C,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;AA0B1C,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,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,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;IA6FJ,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;AAa/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;
|
|
1
|
+
{"version":3,"file":"FirmwareUpdateV3.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV3.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAa/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;IAwGE,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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAkD,MAAM,qBAAqB,CAAC;AAyBlG,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAkC/E,OAAO,KAAK,EAEV,sBAAsB,EAEvB,MAAM,6BAA6B,CAAC;AA2ErC,wBAAgB,wCAAwC,CACtD,UAAU,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,EAC5C,MAAM,EAAE,sBAAsB,QAgB/B;AAgWD,eAAO,MAAM,oCAAoC,WACvC,WAAW,GAAG,UAAU,eACnB,MAAM,GAAG,SAAS,YAKhC,CAAC;AAEF,eAAO,MAAM,iCAAiC,0BACrB,MAAM,uBACR,MAAM,iBACZ,MAAM,eACR,MAAM,SAsBpB,CAAC;AAUF,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,wBAAwB,CAAC,sBAAsB,CAAC;IAC5F,OAAO,CAAC,8BAA8B,CAAC,CAAS;IAEhD,OAAO,CAAC,sBAAsB,CAAC,CAAS;IAExC,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;
|
|
1
|
+
{"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAkD,MAAM,qBAAqB,CAAC;AAyBlG,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAkC/E,OAAO,KAAK,EAEV,sBAAsB,EAEvB,MAAM,6BAA6B,CAAC;AA2ErC,wBAAgB,wCAAwC,CACtD,UAAU,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,EAC5C,MAAM,EAAE,sBAAsB,QAgB/B;AAgWD,eAAO,MAAM,oCAAoC,WACvC,WAAW,GAAG,UAAU,eACnB,MAAM,GAAG,SAAS,YAKhC,CAAC;AAEF,eAAO,MAAM,iCAAiC,0BACrB,MAAM,uBACR,MAAM,iBACZ,MAAM,eACR,MAAM,SAsBpB,CAAC;AAUF,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,wBAAwB,CAAC,sBAAsB,CAAC;IAC5F,OAAO,CAAC,8BAA8B,CAAC,CAAS;IAEhD,OAAO,CAAC,sBAAsB,CAAC,CAAS;IAExC,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;IA0KJ,OAAO,CAAC,8BAA8B;IAwBhC,GAAG;;;;;YAKK,aAAa;YAsHb,4BAA4B;YAkB5B,0BAA0B;YAY1B,8BAA8B;YAK9B,+BAA+B;YAqG/B,gCAAgC;YA+HhC,qCAAqC;YA0IrC,gCAAgC;YAgBhC,uCAAuC;YAmJvC,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,oCAAoC;IAY5C,OAAO,CAAC,4BAA4B;IAUpC,OAAO,CAAC,kCAAkC;IAS1C,OAAO,CAAC,8BAA8B;YAMxB,iCAAiC;YAOjC,iCAAiC;YAmBjC,iCAAiC;IAM/C,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,mCAAmC;IAe3C,OAAO,CAAC,2BAA2B;IAsBnC,OAAO,CAAC,yBAAyB;IAiBjC,OAAO,CAAC,wBAAwB;YAkBlB,iCAAiC;YAuDjC,+BAA+B;IA6E7C,OAAO,CAAC,6BAA6B;YAMvB,8BAA8B;YA+C9B,kCAAkC;IA+BhD,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,yBAAyB;IAc3B,6BAA6B;YAgCrB,+BAA+B;IAkD7C,OAAO,CAAC,6BAA6B;IAkCrC,OAAO,CAAC,8BAA8B;YA8CxB,uBAAuB;YAiCvB,6BAA6B;YAa7B,uBAAuB;YAiCvB,8BAA8B;YA8D9B,6BAA6B;IAuE3C,OAAO,CAAC,mCAAmC;YAI7B,0BAA0B;IAaxC,OAAO,CAAC,4BAA4B;IAyGpC,OAAO,CAAC,6BAA6B;YAcvB,uCAAuC;YA0JvC,gCAAgC;YAehC,yBAAyB;YAQzB,8BAA8B;IAQ5C,OAAO,CAAC,0BAA0B;YAkBpB,mCAAmC;YAWnC,qCAAqC;YAgDrC,yBAAyB;YA8DzB,8BAA8B;IAU5C,OAAO,CAAC,kCAAkC;YAQ5B,cAAc;YAuCd,6BAA6B;YAW7B,0BAA0B;YAS1B,6BAA6B;YAmB7B,gBAAgB;IAiB9B,OAAO,CAAC,qBAAqB;CAM9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeviceUpdateBootloader.d.ts","sourceRoot":"","sources":["../../../src/api/device/DeviceUpdateBootloader.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAiBhF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,wBAAwB,CAAC,GAAG,CAAC;IAC/E,IAAI;IAOE,iCAAiC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;IAoBtE,2CAA2C,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB;IAcvF,qBAAqB,CAAC,EAC1B,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,cAAc,GACvB,EAAE;QACD,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,YAAY,EAAE,aAAa,CAAC;QAC5B,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,MAAM,CAAC,EAAE,kBAAkB,CAAC;KAC7B;IA0EK,GAAG;
|
|
1
|
+
{"version":3,"file":"DeviceUpdateBootloader.d.ts","sourceRoot":"","sources":["../../../src/api/device/DeviceUpdateBootloader.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAiBhF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,wBAAwB,CAAC,GAAG,CAAC;IAC/E,IAAI;IAOE,iCAAiC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;IAoBtE,2CAA2C,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB;IAcvF,qBAAqB,CAAC,EAC1B,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,cAAc,GACvB,EAAE;QACD,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,YAAY,EAAE,aAAa,CAAC;QAC5B,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,MAAM,CAAC,EAAE,kBAAkB,CAAC;KAC7B;IA0EK,GAAG;CA8FV"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1413,6 +1413,7 @@ type FirmwareUpdateV4Target = 'boot'
|
|
|
1413
1413
|
| 'boot_resources' | 'app_v1' | 'app_v2' | 'coprocessor' | 'resource' | 'se01' | 'se02' | 'se03' | 'se04';
|
|
1414
1414
|
interface FirmwareUpdateV4Params {
|
|
1415
1415
|
preparedPlan?: FirmwareUpdatePreparedPlan;
|
|
1416
|
+
/** Required whenever preparedPlan is present; Core resolves the reader from this digest-bound host. */
|
|
1416
1417
|
hostBindingGeneration?: number;
|
|
1417
1418
|
platform: IPlatform;
|
|
1418
1419
|
expectedDeviceId?: string;
|
package/dist/index.js
CHANGED
|
@@ -49777,18 +49777,26 @@ class DeviceUpdateBootloader extends FirmwareUpdateBaseMethod {
|
|
|
49777
49777
|
});
|
|
49778
49778
|
}
|
|
49779
49779
|
run() {
|
|
49780
|
-
var _a, _b
|
|
49780
|
+
var _a, _b;
|
|
49781
49781
|
return __awaiter(this, void 0, void 0, function* () {
|
|
49782
49782
|
const { device } = this;
|
|
49783
49783
|
const { features } = device;
|
|
49784
49784
|
const payload = this.payload;
|
|
49785
|
-
const
|
|
49785
|
+
const hasPreparedPlan = payload.preparedPlan !== undefined;
|
|
49786
|
+
const hasPreparedArtifact = payload.artifact !== undefined;
|
|
49787
|
+
if (hasPreparedPlan !== hasPreparedArtifact) {
|
|
49788
|
+
throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.CallMethodInvalidParameter, 'Prepared bootloader plans require exactly one prepared artifact');
|
|
49789
|
+
}
|
|
49790
|
+
if (payload.binary !== undefined && hasPreparedArtifact) {
|
|
49791
|
+
throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.CallMethodInvalidParameter, 'Bootloader binary and prepared artifact are mutually exclusive');
|
|
49792
|
+
}
|
|
49793
|
+
const preparedPlan = hasPreparedArtifact
|
|
49786
49794
|
? validateFirmwareUpdatePreparedPlan(payload.preparedPlan)
|
|
49787
49795
|
: undefined;
|
|
49788
|
-
const
|
|
49789
|
-
? resolveFirmwareUpdateHostBinding(payload.hostBindingGeneration, preparedPlan.preparedPlanDigest)
|
|
49790
|
-
:
|
|
49791
|
-
const executionParams = Object.assign(Object.assign({}, payload), { artifactReader
|
|
49796
|
+
const artifactReader = preparedPlan
|
|
49797
|
+
? resolveFirmwareUpdateHostBinding(payload.hostBindingGeneration, preparedPlan.preparedPlanDigest).artifactReader
|
|
49798
|
+
: payload.artifactReader;
|
|
49799
|
+
const executionParams = Object.assign(Object.assign({}, payload), { artifactReader });
|
|
49792
49800
|
if (payload.artifact) {
|
|
49793
49801
|
assertFirmwareUpdatePreparedPlanDeviceIdentity({
|
|
49794
49802
|
preparedPlan,
|
|
@@ -49817,7 +49825,7 @@ class DeviceUpdateBootloader extends FirmwareUpdateBaseMethod {
|
|
|
49817
49825
|
try {
|
|
49818
49826
|
const deviceType = device.getCurrentDeviceType();
|
|
49819
49827
|
const deviceFirmwareType = device.getCurrentFirmwareType();
|
|
49820
|
-
const firmwareType = (
|
|
49828
|
+
const firmwareType = (_a = payload.firmwareType) !== null && _a !== void 0 ? _a : deviceFirmwareType;
|
|
49821
49829
|
if (DeviceModelToTypes.model_touch.includes(deviceType)) {
|
|
49822
49830
|
return yield this.updateTouchBootloader({
|
|
49823
49831
|
device,
|
|
@@ -49835,7 +49843,7 @@ class DeviceUpdateBootloader extends FirmwareUpdateBaseMethod {
|
|
|
49835
49843
|
const { binary } = payload;
|
|
49836
49844
|
const deviceType = device.getCurrentDeviceType();
|
|
49837
49845
|
const deviceFirmwareType = device.getCurrentFirmwareType();
|
|
49838
|
-
const firmwareType = (
|
|
49846
|
+
const firmwareType = (_b = payload.firmwareType) !== null && _b !== void 0 ? _b : deviceFirmwareType;
|
|
49839
49847
|
if (DeviceModelToTypes.model_touch.includes(deviceType)) {
|
|
49840
49848
|
return this.updateTouchBootloader({
|
|
49841
49849
|
device,
|
|
@@ -50189,6 +50197,9 @@ class FirmwareUpdateV2 extends BaseMethod {
|
|
|
50189
50197
|
payload.artifact !== undefined) {
|
|
50190
50198
|
throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.CallMethodInvalidParameter, 'Firmware update binary and artifact are mutually exclusive');
|
|
50191
50199
|
}
|
|
50200
|
+
if (payload.preparedPlan !== undefined && payload.artifact === undefined) {
|
|
50201
|
+
throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.CallMethodInvalidParameter, 'Prepared firmware plans require a prepared artifact');
|
|
50202
|
+
}
|
|
50192
50203
|
if (!payload.updateType) {
|
|
50193
50204
|
throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.CallMethodInvalidParameter, 'updateType is required');
|
|
50194
50205
|
}
|
|
@@ -50585,10 +50596,22 @@ class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod {
|
|
|
50585
50596
|
const preparedPlan = payload.artifacts || payload.preparedPlan
|
|
50586
50597
|
? validateFirmwareUpdatePreparedPlan(payload.preparedPlan)
|
|
50587
50598
|
: undefined;
|
|
50588
|
-
const
|
|
50589
|
-
|
|
50590
|
-
|
|
50591
|
-
|
|
50599
|
+
const hasLegacyInputs = [
|
|
50600
|
+
payload.bleVersion,
|
|
50601
|
+
payload.bleBinary,
|
|
50602
|
+
payload.firmwareVersion,
|
|
50603
|
+
payload.firmwareBinary,
|
|
50604
|
+
payload.resourceBinary,
|
|
50605
|
+
payload.bootloaderVersion,
|
|
50606
|
+
payload.bootloaderBinary,
|
|
50607
|
+
].some(input => input !== undefined);
|
|
50608
|
+
if (preparedPlan && hasLegacyInputs) {
|
|
50609
|
+
throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.CallMethodInvalidParameter, 'Prepared firmware plans cannot be combined with legacy firmware inputs');
|
|
50610
|
+
}
|
|
50611
|
+
const artifactReader = preparedPlan
|
|
50612
|
+
? resolveFirmwareUpdateHostBinding(payload.hostBindingGeneration, preparedPlan.preparedPlanDigest).artifactReader
|
|
50613
|
+
: payload.artifactReader;
|
|
50614
|
+
if (preparedPlan) {
|
|
50592
50615
|
assertFirmwareUpdatePreparedPlanBinding({
|
|
50593
50616
|
preparedPlan,
|
|
50594
50617
|
executor: 'v3',
|
|
@@ -50637,9 +50660,9 @@ class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod {
|
|
|
50637
50660
|
bootloaderBinary: payload.bootloaderBinary,
|
|
50638
50661
|
firmwareVersion: payload.firmwareVersion,
|
|
50639
50662
|
resourceBinary: payload.resourceBinary,
|
|
50640
|
-
firmwareType: payload.firmwareType,
|
|
50663
|
+
firmwareType: (_f = preparedPlan === null || preparedPlan === void 0 ? void 0 : preparedPlan.firmwareType) !== null && _f !== void 0 ? _f : payload.firmwareType,
|
|
50641
50664
|
platform: payload.platform,
|
|
50642
|
-
artifactReader
|
|
50665
|
+
artifactReader,
|
|
50643
50666
|
artifacts: payload.artifacts,
|
|
50644
50667
|
};
|
|
50645
50668
|
}
|
|
@@ -51637,7 +51660,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
51637
51660
|
return ['V2'];
|
|
51638
51661
|
}
|
|
51639
51662
|
init() {
|
|
51640
|
-
var _a, _b
|
|
51663
|
+
var _a, _b;
|
|
51641
51664
|
this.allowDeviceMode = [UI_REQUEST.BOOTLOADER, UI_REQUEST.NOT_INITIALIZE];
|
|
51642
51665
|
this.requireDeviceMode = [];
|
|
51643
51666
|
this.unlockPolicy = 'unlock-before-run';
|
|
@@ -51696,9 +51719,13 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
51696
51719
|
if (preparedPlan && hasLocalArtifacts) {
|
|
51697
51720
|
throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.CallMethodInvalidParameter, 'Prepared firmware plans cannot be combined with legacy or local firmware inputs');
|
|
51698
51721
|
}
|
|
51699
|
-
|
|
51700
|
-
|
|
51701
|
-
|
|
51722
|
+
let { artifactReader } = payload;
|
|
51723
|
+
if (preparedPlan) {
|
|
51724
|
+
artifactReader = resolveFirmwareUpdateHostBinding(payload.hostBindingGeneration, preparedPlan.preparedPlanDigest).artifactReader;
|
|
51725
|
+
}
|
|
51726
|
+
else if (payload.hostBindingGeneration !== undefined) {
|
|
51727
|
+
artifactReader = resolveFirmwareUpdateHostBinding(payload.hostBindingGeneration).artifactReader;
|
|
51728
|
+
}
|
|
51702
51729
|
if (preparedPlan) {
|
|
51703
51730
|
assertFirmwareUpdatePreparedPlanBinding({
|
|
51704
51731
|
preparedPlan,
|
|
@@ -51764,7 +51791,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
51764
51791
|
: payload.expectedTargetVersions,
|
|
51765
51792
|
platform: payload.platform,
|
|
51766
51793
|
expectedDeviceId: payload.expectedDeviceId,
|
|
51767
|
-
artifactReader
|
|
51794
|
+
artifactReader,
|
|
51768
51795
|
componentArtifacts: preparedPlan ? undefined : payload.componentArtifacts,
|
|
51769
51796
|
};
|
|
51770
51797
|
}
|
|
@@ -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":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE/E,KAAK,WAAW,GAAG,UAAU,GAAG,KAAK,CAAC;AAEtC,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAC5C,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,IAAI,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QACzE,IAAI,EAAE,WAAW,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,OAAO,CAAC;KACd,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,sBAAsB,CAAC;IAEvC,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,WAAW,CAAC;CACzB;AAED,MAAM,WAAW,4BAA4B;IAC3C,YAAY,EAAE,0BAA0B,CAAC;IACzC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,yBAAyB,CAAC;IACpC,eAAe,CAAC,EAAE,KAAK,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,yBAAyB,CAAC;KACrC,CAAC,CAAC;IACH,UAAU,EAAE,WAAW,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,WAAW,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B;AAED,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,EAAE,MAAM,CAAC,oBAAoB,CAAC,GAAG;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,GACnE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC3B,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,EAAE,MAAM,CAAC,0BAA0B,CAAC,GAAG;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,GACzE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAE3B,KAAK,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,WAAW,CAAC;AACpE,KAAK,QAAQ,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,CAAC;AAExC,MAAM,CAAC,OAAO,UAAU,gBAAgB,CACtC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,EAAE,MAAM,CAAC,oBAAoB,GAAG,QAAQ,CAAC,GAC9C,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC3B,MAAM,CAAC,OAAO,UAAU,gBAAgB,CACtC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,EAAE,MAAM,CAAC,0BAA0B,GAAG,QAAQ,CAAC,GACpD,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC3B,MAAM,CAAC,OAAO,UAAU,gBAAgB,CACtC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,EAAE,MAAM,CAAC,4BAA4B,GAAG,QAAQ,CAAC,GACtD,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAE3B,MAAM,WAAW,sBAAsB;IACrC,YAAY,CAAC,EAAE,0BAA0B,CAAC;IAC1C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,WAAW,CAAC;IAE7B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAE/B,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,YAAY,CAAC,EAAE,aAAa,CAAC;IAE7B,QAAQ,EAAE,SAAS,CAAC;IAEpB,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,SAAS,CAAC,EAAE;QACV,GAAG,CAAC,EAAE,yBAAyB,CAAC;QAChC,QAAQ,CAAC,EAAE,yBAAyB,CAAC;QACrC,UAAU,CAAC,EAAE,yBAAyB,CAAC;QACvC,eAAe,CAAC,EAAE,KAAK,CAAC;YACtB,SAAS,EAAE,MAAM,CAAC;YAClB,QAAQ,EAAE,yBAAyB,CAAC;SACrC,CAAC,CAAC;KACJ,CAAC;CACH;AAMD,MAAM,MAAM,sBAAsB,GAC9B,MAAM,GAEN,gBAAgB,GAChB,QAAQ,GACR,QAAQ,GACR,aAAa,GACb,UAAU,GACV,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,CAAC;AAEX,MAAM,WAAW,sBAAsB;IACrC,YAAY,CAAC,EAAE,0BAA0B,CAAC;IAE1C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,eAAe,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAC3C,sBAAsB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC,CAAC;IAGzE,eAAe,CAAC,EAAE,WAAW,CAAC;IAE9B,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAE/B,mBAAmB,CAAC,EAAE,WAAW,CAAC;IAElC,mBAAmB,CAAC,EAAE,WAAW,CAAC;IAElC,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAEhC,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,UAAU,CAAC,EAAE,WAAW,CAAC;IAEzB,qBAAqB,CAAC,EAAE,WAAW,CAAC;IACpC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,kBAAkB,CAAC,EAAE,OAAO,CAC1B,MAAM,CACJ,OAAO,CAAC,sBAAsB,EAAE,UAAU,GAAG,gBAAgB,CAAC,EAC9D,yBAAyB,CAC1B,CACF,CAAC;CACH;AAED,MAAM,CAAC,OAAO,UAAU,iCAAiC,CACvD,OAAO,EAAE,yBAAyB,GACjC,MAAM,CAAC;AAEV,MAAM,CAAC,OAAO,UAAU,mCAAmC,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;AAE1F,MAAM,CAAC,OAAO,UAAU,sCAAsC,IAAI,MAAM,CAAC;AAEzE,MAAM,CAAC,OAAO,UAAU,gBAAgB,CACtC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,EAAE,MAAM,CAAC,sBAAsB,CAAC,GACrC,QAAQ,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CACtC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,EAAE,MAAM,CAAC,sBAAsB,CAAC,GACrC,QAAQ,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC,CAAC"}
|
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.96",
|
|
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.96",
|
|
29
|
+
"@onekeyfe/hd-transport": "1.2.0-alpha.96",
|
|
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": "cd8982b684556ce3a154d16d5691e21c656f410a"
|
|
48
48
|
}
|
|
@@ -47,6 +47,7 @@ import type { FirmwareUpdatePreparedPlan } from '../types/api/firmwareUpdatePrep
|
|
|
47
47
|
type Params = {
|
|
48
48
|
binary?: ArrayBuffer;
|
|
49
49
|
artifact?: FirmwareArtifactReference;
|
|
50
|
+
hostBindingGeneration?: number;
|
|
50
51
|
resourceEntries?: Array<{
|
|
51
52
|
entryName: string;
|
|
52
53
|
artifact: FirmwareArtifactReference;
|
|
@@ -171,6 +172,12 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
|
|
|
171
172
|
'Firmware update binary and artifact are mutually exclusive'
|
|
172
173
|
);
|
|
173
174
|
}
|
|
175
|
+
if (payload.preparedPlan !== undefined && payload.artifact === undefined) {
|
|
176
|
+
throw ERRORS.TypedError(
|
|
177
|
+
HardwareErrorCode.CallMethodInvalidParameter,
|
|
178
|
+
'Prepared firmware plans require a prepared artifact'
|
|
179
|
+
);
|
|
180
|
+
}
|
|
174
181
|
|
|
175
182
|
if (!payload.updateType) {
|
|
176
183
|
throw ERRORS.TypedError(
|
|
@@ -82,13 +82,28 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
82
82
|
payload.artifacts || payload.preparedPlan
|
|
83
83
|
? validateFirmwareUpdatePreparedPlan(payload.preparedPlan)
|
|
84
84
|
: undefined;
|
|
85
|
-
const
|
|
85
|
+
const hasLegacyInputs = [
|
|
86
|
+
payload.bleVersion,
|
|
87
|
+
payload.bleBinary,
|
|
88
|
+
payload.firmwareVersion,
|
|
89
|
+
payload.firmwareBinary,
|
|
90
|
+
payload.resourceBinary,
|
|
91
|
+
payload.bootloaderVersion,
|
|
92
|
+
payload.bootloaderBinary,
|
|
93
|
+
].some(input => input !== undefined);
|
|
94
|
+
if (preparedPlan && hasLegacyInputs) {
|
|
95
|
+
throw ERRORS.TypedError(
|
|
96
|
+
HardwareErrorCode.CallMethodInvalidParameter,
|
|
97
|
+
'Prepared firmware plans cannot be combined with legacy firmware inputs'
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
const artifactReader = preparedPlan
|
|
86
101
|
? resolveFirmwareUpdateHostBinding(
|
|
87
102
|
payload.hostBindingGeneration,
|
|
88
103
|
preparedPlan.preparedPlanDigest
|
|
89
|
-
)
|
|
90
|
-
:
|
|
91
|
-
if (
|
|
104
|
+
).artifactReader
|
|
105
|
+
: payload.artifactReader;
|
|
106
|
+
if (preparedPlan) {
|
|
92
107
|
assertFirmwareUpdatePreparedPlanBinding({
|
|
93
108
|
preparedPlan,
|
|
94
109
|
executor: 'v3',
|
|
@@ -140,9 +155,9 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
140
155
|
bootloaderBinary: payload.bootloaderBinary,
|
|
141
156
|
firmwareVersion: payload.firmwareVersion,
|
|
142
157
|
resourceBinary: payload.resourceBinary,
|
|
143
|
-
firmwareType: payload.firmwareType,
|
|
158
|
+
firmwareType: preparedPlan?.firmwareType ?? payload.firmwareType,
|
|
144
159
|
platform: payload.platform,
|
|
145
|
-
artifactReader
|
|
160
|
+
artifactReader,
|
|
146
161
|
artifacts: payload.artifacts,
|
|
147
162
|
};
|
|
148
163
|
}
|
|
@@ -640,13 +640,17 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
640
640
|
'Prepared firmware plans cannot be combined with legacy or local firmware inputs'
|
|
641
641
|
);
|
|
642
642
|
}
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
643
|
+
let { artifactReader } = payload;
|
|
644
|
+
if (preparedPlan) {
|
|
645
|
+
artifactReader = resolveFirmwareUpdateHostBinding(
|
|
646
|
+
payload.hostBindingGeneration,
|
|
647
|
+
preparedPlan.preparedPlanDigest
|
|
648
|
+
).artifactReader;
|
|
649
|
+
} else if (payload.hostBindingGeneration !== undefined) {
|
|
650
|
+
artifactReader = resolveFirmwareUpdateHostBinding(
|
|
651
|
+
payload.hostBindingGeneration
|
|
652
|
+
).artifactReader;
|
|
653
|
+
}
|
|
650
654
|
if (preparedPlan) {
|
|
651
655
|
assertFirmwareUpdatePreparedPlanBinding({
|
|
652
656
|
preparedPlan,
|
|
@@ -731,7 +735,7 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
731
735
|
: payload.expectedTargetVersions,
|
|
732
736
|
platform: payload.platform,
|
|
733
737
|
expectedDeviceId: payload.expectedDeviceId,
|
|
734
|
-
artifactReader
|
|
738
|
+
artifactReader,
|
|
735
739
|
componentArtifacts: preparedPlan ? undefined : payload.componentArtifacts,
|
|
736
740
|
};
|
|
737
741
|
}
|
|
@@ -158,18 +158,32 @@ export default class DeviceUpdateBootloader extends FirmwareUpdateBaseMethod<any
|
|
|
158
158
|
const { features } = device;
|
|
159
159
|
|
|
160
160
|
const payload = this.payload as DeviceUpdateBootloaderParams;
|
|
161
|
-
const
|
|
161
|
+
const hasPreparedPlan = payload.preparedPlan !== undefined;
|
|
162
|
+
const hasPreparedArtifact = payload.artifact !== undefined;
|
|
163
|
+
if (hasPreparedPlan !== hasPreparedArtifact) {
|
|
164
|
+
throw ERRORS.TypedError(
|
|
165
|
+
HardwareErrorCode.CallMethodInvalidParameter,
|
|
166
|
+
'Prepared bootloader plans require exactly one prepared artifact'
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
if (payload.binary !== undefined && hasPreparedArtifact) {
|
|
170
|
+
throw ERRORS.TypedError(
|
|
171
|
+
HardwareErrorCode.CallMethodInvalidParameter,
|
|
172
|
+
'Bootloader binary and prepared artifact are mutually exclusive'
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
const preparedPlan = hasPreparedArtifact
|
|
162
176
|
? validateFirmwareUpdatePreparedPlan(payload.preparedPlan)
|
|
163
177
|
: undefined;
|
|
164
|
-
const
|
|
178
|
+
const artifactReader = preparedPlan
|
|
165
179
|
? resolveFirmwareUpdateHostBinding(
|
|
166
180
|
payload.hostBindingGeneration,
|
|
167
181
|
preparedPlan.preparedPlanDigest
|
|
168
|
-
)
|
|
169
|
-
:
|
|
182
|
+
).artifactReader
|
|
183
|
+
: payload.artifactReader;
|
|
170
184
|
const executionParams = {
|
|
171
185
|
...payload,
|
|
172
|
-
artifactReader
|
|
186
|
+
artifactReader,
|
|
173
187
|
};
|
|
174
188
|
if (payload.artifact) {
|
|
175
189
|
assertFirmwareUpdatePreparedPlanDeviceIdentity({
|
|
@@ -133,6 +133,7 @@ export type FirmwareUpdateV4Target =
|
|
|
133
133
|
|
|
134
134
|
export interface FirmwareUpdateV4Params {
|
|
135
135
|
preparedPlan?: FirmwareUpdatePreparedPlan;
|
|
136
|
+
/** Required whenever preparedPlan is present; Core resolves the reader from this digest-bound host. */
|
|
136
137
|
hostBindingGeneration?: number;
|
|
137
138
|
platform: IPlatform;
|
|
138
139
|
expectedDeviceId?: string;
|