@onekeyfe/hd-core 1.2.0-alpha.94 → 1.2.0-alpha.95
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 +239 -0
- package/dist/api/FirmwareUpdateV2.d.ts +1 -0
- package/dist/api/FirmwareUpdateV2.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 +34 -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 +5 -5
- 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,31 @@ 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
|
+
|
|
147
259
|
test('DeviceUpdateBootloader rejects a host registered for another prepared plan', async () => {
|
|
148
260
|
const { artifact, preparedPlan } = createPreparedPlan({
|
|
149
261
|
executor: 'v2',
|
|
@@ -170,6 +282,133 @@ describe('prepared firmware host digest binding', () => {
|
|
|
170
282
|
expect(artifactReader.open).not.toHaveBeenCalled();
|
|
171
283
|
});
|
|
172
284
|
|
|
285
|
+
test('DeviceUpdateBootloader rejects a direct reader when the prepared host generation is missing', async () => {
|
|
286
|
+
const { artifact, preparedPlan } = createPreparedPlan({
|
|
287
|
+
executor: 'v2',
|
|
288
|
+
target: 'bootloader',
|
|
289
|
+
});
|
|
290
|
+
const directArtifactReader = {
|
|
291
|
+
open: jest.fn(),
|
|
292
|
+
read: jest.fn(),
|
|
293
|
+
close: jest.fn(),
|
|
294
|
+
};
|
|
295
|
+
const method = new DeviceUpdateBootloader({
|
|
296
|
+
id: 1,
|
|
297
|
+
payload: {
|
|
298
|
+
method: 'deviceUpdateBootloader',
|
|
299
|
+
artifact,
|
|
300
|
+
preparedPlan,
|
|
301
|
+
artifactReader: directArtifactReader,
|
|
302
|
+
},
|
|
303
|
+
});
|
|
304
|
+
method.device = {
|
|
305
|
+
features: {
|
|
306
|
+
deviceType: EDeviceType.Classic1s,
|
|
307
|
+
serialNo: 'classic-device-id',
|
|
308
|
+
},
|
|
309
|
+
} as any;
|
|
310
|
+
|
|
311
|
+
await expect(method.run()).rejects.toThrow('host binding generation NaN is stale');
|
|
312
|
+
expect(directArtifactReader.open).not.toHaveBeenCalled();
|
|
313
|
+
});
|
|
314
|
+
|
|
315
|
+
test('DeviceUpdateBootloader does not treat a binary call carrying a prepared plan as legacy', async () => {
|
|
316
|
+
const { preparedPlan } = createPreparedPlan({
|
|
317
|
+
executor: 'v2',
|
|
318
|
+
target: 'bootloader',
|
|
319
|
+
});
|
|
320
|
+
const method = new DeviceUpdateBootloader({
|
|
321
|
+
id: 1,
|
|
322
|
+
payload: {
|
|
323
|
+
method: 'deviceUpdateBootloader',
|
|
324
|
+
binary: new ArrayBuffer(4),
|
|
325
|
+
preparedPlan,
|
|
326
|
+
},
|
|
327
|
+
});
|
|
328
|
+
method.device = { features: undefined } as any;
|
|
329
|
+
|
|
330
|
+
await expect(method.run()).rejects.toThrow(
|
|
331
|
+
'Prepared bootloader plans require exactly one prepared artifact'
|
|
332
|
+
);
|
|
333
|
+
});
|
|
334
|
+
|
|
335
|
+
test('FirmwareUpdateV4 rejects a prepared plan without a host binding generation', () => {
|
|
336
|
+
const { preparedPlan } = createPreparedV4Plan();
|
|
337
|
+
const directArtifactReader = {
|
|
338
|
+
open: jest.fn(),
|
|
339
|
+
read: jest.fn(),
|
|
340
|
+
close: jest.fn(),
|
|
341
|
+
};
|
|
342
|
+
const method = new FirmwareUpdateV4({
|
|
343
|
+
id: 1,
|
|
344
|
+
payload: {
|
|
345
|
+
method: 'firmwareUpdateV4',
|
|
346
|
+
platform: 'desktop',
|
|
347
|
+
preparedPlan,
|
|
348
|
+
artifactReader: directArtifactReader,
|
|
349
|
+
},
|
|
350
|
+
});
|
|
351
|
+
|
|
352
|
+
expect(() => method.init()).toThrow('host binding generation NaN is stale');
|
|
353
|
+
expect(directArtifactReader.open).not.toHaveBeenCalled();
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
test('FirmwareUpdateV4 rejects a host registered for another prepared plan', () => {
|
|
357
|
+
const { preparedPlan } = createPreparedV4Plan();
|
|
358
|
+
const { artifactReader, hostBindingGeneration } = registerMismatchedHost();
|
|
359
|
+
const method = new FirmwareUpdateV4({
|
|
360
|
+
id: 1,
|
|
361
|
+
payload: {
|
|
362
|
+
method: 'firmwareUpdateV4',
|
|
363
|
+
platform: 'desktop',
|
|
364
|
+
preparedPlan,
|
|
365
|
+
hostBindingGeneration,
|
|
366
|
+
},
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
expect(() => method.init()).toThrow('does not match the prepared plan');
|
|
370
|
+
expect(artifactReader.open).not.toHaveBeenCalled();
|
|
371
|
+
});
|
|
372
|
+
|
|
373
|
+
test('FirmwareUpdateV4 obtains the prepared reader only from the digest-bound host', async () => {
|
|
374
|
+
const { artifact, preparedPlan } = createPreparedV4Plan();
|
|
375
|
+
const directArtifactReader = {
|
|
376
|
+
open: jest.fn(),
|
|
377
|
+
read: jest.fn(),
|
|
378
|
+
close: jest.fn(),
|
|
379
|
+
};
|
|
380
|
+
const boundArtifactReader = {
|
|
381
|
+
open: jest.fn().mockResolvedValue({ readerId: 'bound-reader', size: artifact.size }),
|
|
382
|
+
read: jest.fn(),
|
|
383
|
+
close: jest.fn(),
|
|
384
|
+
};
|
|
385
|
+
const hostBindingGeneration = registerFirmwareUpdateHostBinding({
|
|
386
|
+
preparedPlanDigest: preparedPlan.preparedPlanDigest,
|
|
387
|
+
artifactReader: boundArtifactReader,
|
|
388
|
+
});
|
|
389
|
+
const method = new FirmwareUpdateV4({
|
|
390
|
+
id: 1,
|
|
391
|
+
payload: {
|
|
392
|
+
method: 'firmwareUpdateV4',
|
|
393
|
+
platform: 'desktop',
|
|
394
|
+
preparedPlan,
|
|
395
|
+
hostBindingGeneration,
|
|
396
|
+
artifactReader: directArtifactReader,
|
|
397
|
+
},
|
|
398
|
+
});
|
|
399
|
+
|
|
400
|
+
method.init();
|
|
401
|
+
const executionReader = (
|
|
402
|
+
method as unknown as {
|
|
403
|
+
params: { artifactReader: typeof boundArtifactReader };
|
|
404
|
+
}
|
|
405
|
+
).params.artifactReader;
|
|
406
|
+
await executionReader.open({ artifactRef: artifact.artifactRef });
|
|
407
|
+
|
|
408
|
+
expect(boundArtifactReader.open).toHaveBeenCalledWith({ artifactRef: artifact.artifactRef });
|
|
409
|
+
expect(directArtifactReader.open).not.toHaveBeenCalled();
|
|
410
|
+
});
|
|
411
|
+
|
|
173
412
|
test('keeps non-prepared direct binary calls on the legacy paths', async () => {
|
|
174
413
|
const v2 = new FirmwareUpdateV2({
|
|
175
414
|
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":"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
|
}
|
|
@@ -50564,7 +50575,7 @@ class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod {
|
|
|
50564
50575
|
this.artifactSources = [];
|
|
50565
50576
|
}
|
|
50566
50577
|
init() {
|
|
50567
|
-
var _a, _b, _c, _d, _e
|
|
50578
|
+
var _a, _b, _c, _d, _e;
|
|
50568
50579
|
this.allowDeviceMode = [UI_REQUEST.BOOTLOADER, UI_REQUEST.NOT_INITIALIZE];
|
|
50569
50580
|
this.requireDeviceMode = [];
|
|
50570
50581
|
this.useDevicePassphraseState = false;
|
|
@@ -50585,10 +50596,10 @@ class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod {
|
|
|
50585
50596
|
const preparedPlan = payload.artifacts || payload.preparedPlan
|
|
50586
50597
|
? validateFirmwareUpdatePreparedPlan(payload.preparedPlan)
|
|
50587
50598
|
: undefined;
|
|
50588
|
-
const
|
|
50589
|
-
? resolveFirmwareUpdateHostBinding(payload.hostBindingGeneration, preparedPlan.preparedPlanDigest)
|
|
50590
|
-
:
|
|
50591
|
-
if (
|
|
50599
|
+
const artifactReader = preparedPlan
|
|
50600
|
+
? resolveFirmwareUpdateHostBinding(payload.hostBindingGeneration, preparedPlan.preparedPlanDigest).artifactReader
|
|
50601
|
+
: payload.artifactReader;
|
|
50602
|
+
if (preparedPlan) {
|
|
50592
50603
|
assertFirmwareUpdatePreparedPlanBinding({
|
|
50593
50604
|
preparedPlan,
|
|
50594
50605
|
executor: 'v3',
|
|
@@ -50639,7 +50650,7 @@ class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod {
|
|
|
50639
50650
|
resourceBinary: payload.resourceBinary,
|
|
50640
50651
|
firmwareType: payload.firmwareType,
|
|
50641
50652
|
platform: payload.platform,
|
|
50642
|
-
artifactReader
|
|
50653
|
+
artifactReader,
|
|
50643
50654
|
artifacts: payload.artifacts,
|
|
50644
50655
|
};
|
|
50645
50656
|
}
|
|
@@ -51637,7 +51648,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
51637
51648
|
return ['V2'];
|
|
51638
51649
|
}
|
|
51639
51650
|
init() {
|
|
51640
|
-
var _a, _b
|
|
51651
|
+
var _a, _b;
|
|
51641
51652
|
this.allowDeviceMode = [UI_REQUEST.BOOTLOADER, UI_REQUEST.NOT_INITIALIZE];
|
|
51642
51653
|
this.requireDeviceMode = [];
|
|
51643
51654
|
this.unlockPolicy = 'unlock-before-run';
|
|
@@ -51696,9 +51707,13 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
51696
51707
|
if (preparedPlan && hasLocalArtifacts) {
|
|
51697
51708
|
throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.CallMethodInvalidParameter, 'Prepared firmware plans cannot be combined with legacy or local firmware inputs');
|
|
51698
51709
|
}
|
|
51699
|
-
|
|
51700
|
-
|
|
51701
|
-
|
|
51710
|
+
let { artifactReader } = payload;
|
|
51711
|
+
if (preparedPlan) {
|
|
51712
|
+
artifactReader = resolveFirmwareUpdateHostBinding(payload.hostBindingGeneration, preparedPlan.preparedPlanDigest).artifactReader;
|
|
51713
|
+
}
|
|
51714
|
+
else if (payload.hostBindingGeneration !== undefined) {
|
|
51715
|
+
artifactReader = resolveFirmwareUpdateHostBinding(payload.hostBindingGeneration).artifactReader;
|
|
51716
|
+
}
|
|
51702
51717
|
if (preparedPlan) {
|
|
51703
51718
|
assertFirmwareUpdatePreparedPlanBinding({
|
|
51704
51719
|
preparedPlan,
|
|
@@ -51764,7 +51779,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
51764
51779
|
: payload.expectedTargetVersions,
|
|
51765
51780
|
platform: payload.platform,
|
|
51766
51781
|
expectedDeviceId: payload.expectedDeviceId,
|
|
51767
|
-
artifactReader
|
|
51782
|
+
artifactReader,
|
|
51768
51783
|
componentArtifacts: preparedPlan ? undefined : payload.componentArtifacts,
|
|
51769
51784
|
};
|
|
51770
51785
|
}
|
|
@@ -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.
|
|
3
|
+
"version": "1.2.0-alpha.95",
|
|
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.95",
|
|
29
|
+
"@onekeyfe/hd-transport": "1.2.0-alpha.95",
|
|
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": "efd79360b765d83a31d12f2403da4e79ed2ccffc"
|
|
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,13 @@ 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 artifactReader = preparedPlan
|
|
86
86
|
? resolveFirmwareUpdateHostBinding(
|
|
87
87
|
payload.hostBindingGeneration,
|
|
88
88
|
preparedPlan.preparedPlanDigest
|
|
89
|
-
)
|
|
90
|
-
:
|
|
91
|
-
if (
|
|
89
|
+
).artifactReader
|
|
90
|
+
: payload.artifactReader;
|
|
91
|
+
if (preparedPlan) {
|
|
92
92
|
assertFirmwareUpdatePreparedPlanBinding({
|
|
93
93
|
preparedPlan,
|
|
94
94
|
executor: 'v3',
|
|
@@ -142,7 +142,7 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
142
142
|
resourceBinary: payload.resourceBinary,
|
|
143
143
|
firmwareType: payload.firmwareType,
|
|
144
144
|
platform: payload.platform,
|
|
145
|
-
artifactReader
|
|
145
|
+
artifactReader,
|
|
146
146
|
artifacts: payload.artifacts,
|
|
147
147
|
};
|
|
148
148
|
}
|
|
@@ -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;
|