@onekeyfe/hd-core 1.2.0-alpha.96 → 1.2.0-alpha.98

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.
Files changed (38) hide show
  1. package/__tests__/firmware-update/device-update-bootloader.test.ts +8 -1
  2. package/__tests__/firmware-update/firmware-prepared-host-digest.test.ts +106 -2
  3. package/__tests__/firmware-update/firmware-prepared-resource-archive.test.ts +150 -0
  4. package/__tests__/firmware-update/firmware-update-bootloader-poll.test.ts +112 -0
  5. package/__tests__/firmware-update/firmware-update-plan.test.ts +101 -0
  6. package/__tests__/firmware-update/firmware-update-prepared-resource-executors.test.ts +326 -0
  7. package/__tests__/firmware-update/firmware-update-v2-download-before-boot.test.ts +2 -2
  8. package/__tests__/protocol-v2.test.ts +131 -0
  9. package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
  10. package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
  11. package/dist/api/FirmwareUpdateV4.d.ts +2 -0
  12. package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
  13. package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
  14. package/dist/api/firmware/FirmwarePreparedResourceArchive.d.ts +11 -0
  15. package/dist/api/firmware/FirmwarePreparedResourceArchive.d.ts.map +1 -0
  16. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
  17. package/dist/api/firmware/FirmwareUpdatePlan.d.ts.map +1 -1
  18. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts +6 -1
  19. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts.map +1 -1
  20. package/dist/index.d.ts +5 -3
  21. package/dist/index.js +359 -157
  22. package/dist/types/api/deviceUpdateBootloader.d.ts.map +1 -1
  23. package/dist/types/api/firmwareUpdate.d.ts +1 -1
  24. package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
  25. package/dist/types/api/firmwareUpdatePlan.d.ts +2 -2
  26. package/dist/types/api/firmwareUpdatePlan.d.ts.map +1 -1
  27. package/package.json +4 -4
  28. package/src/api/FirmwareUpdateV2.ts +95 -72
  29. package/src/api/FirmwareUpdateV3.ts +74 -51
  30. package/src/api/FirmwareUpdateV4.ts +72 -7
  31. package/src/api/device/DeviceUpdateBootloader.ts +17 -12
  32. package/src/api/firmware/FirmwarePreparedResourceArchive.ts +207 -0
  33. package/src/api/firmware/FirmwareUpdateBaseMethod.ts +2 -0
  34. package/src/api/firmware/FirmwareUpdatePlan.ts +70 -48
  35. package/src/api/firmware/FirmwareUpdatePreparedPlan.ts +17 -0
  36. package/src/types/api/deviceUpdateBootloader.ts +1 -0
  37. package/src/types/api/firmwareUpdate.ts +2 -1
  38. package/src/types/api/firmwareUpdatePlan.ts +2 -2
@@ -0,0 +1,326 @@
1
+ import { sha256 } from '@noble/hashes/sha256';
2
+ import { bytesToHex } from '@noble/hashes/utils';
3
+ import { EDeviceType, EFirmwareType } from '@onekeyfe/hd-shared';
4
+ import JSZip from 'jszip';
5
+
6
+ import FirmwareUpdateV2 from '../../src/api/FirmwareUpdateV2';
7
+ import FirmwareUpdateV3 from '../../src/api/FirmwareUpdateV3';
8
+ import { DataManager } from '../../src/data-manager';
9
+ import {
10
+ registerFirmwareUpdateHostBinding,
11
+ unregisterFirmwareUpdateHostBinding,
12
+ } from '../../src/api/firmware/FirmwareHostBinding';
13
+ import { prepareFirmwareUpdatePlan } from '../../src/api/firmware/FirmwareUpdatePreparedPlan';
14
+ import { digestFirmwareUpdateContract } from '../../src/api/firmware/FirmwareUpdatePlan';
15
+ import {
16
+ updateResourcesFromSources,
17
+ uploadFirmwareFromSource,
18
+ } from '../../src/api/firmware/uploadFirmware';
19
+ import * as utils from '../../src/utils';
20
+
21
+ import type {
22
+ FirmwareArtifactReader,
23
+ FirmwareArtifactReference,
24
+ } from '../../src/types/api/firmwareUpdate';
25
+ import type { FirmwareUpdatePlan } from '../../src/types/api/firmwareUpdatePlan';
26
+
27
+ jest.mock('../../src/data/config', () => ({
28
+ getSDKVersion: jest.fn(() => '1.0.0'),
29
+ DEFAULT_DOMAIN: 'https://jssdk.onekey.so/1.0.0/',
30
+ }));
31
+
32
+ jest.mock('../../src/api/firmware/getBinary', () => ({
33
+ getBinary: jest.fn(),
34
+ getInfo: jest.fn(),
35
+ getSysResourceBinary: jest.fn(),
36
+ }));
37
+
38
+ jest.mock('../../src/api/firmware/uploadFirmware', () => ({
39
+ updateResources: jest.fn(),
40
+ updateResourcesFromSources: jest.fn(),
41
+ uploadFirmwareFromSource: jest.fn(),
42
+ }));
43
+
44
+ jest.mock('../../src/device/DevicePool', () => ({
45
+ DevicePool: {
46
+ clearDeviceCache: jest.fn(),
47
+ devicesCache: {},
48
+ },
49
+ }));
50
+
51
+ const mockUpdateResourcesFromSources = updateResourcesFromSources as jest.MockedFunction<
52
+ typeof updateResourcesFromSources
53
+ >;
54
+ const mockUploadFirmwareFromSource = uploadFirmwareFromSource as jest.MockedFunction<
55
+ typeof uploadFirmwareFromSource
56
+ >;
57
+
58
+ const createReference = (artifactRef: string, binary: ArrayBuffer): FirmwareArtifactReference => ({
59
+ artifactRef,
60
+ size: binary.byteLength,
61
+ sha256: bytesToHex(sha256(new Uint8Array(binary))),
62
+ });
63
+
64
+ const createReader = (artifacts: Map<string, ArrayBuffer>): FirmwareArtifactReader => {
65
+ const opened = new Map<string, ArrayBuffer>();
66
+ let sequence = 0;
67
+ return {
68
+ open({ artifactRef }) {
69
+ const binary = artifacts.get(artifactRef);
70
+ if (!binary) throw new Error(`missing artifact: ${artifactRef}`);
71
+ sequence += 1;
72
+ const readerId = `reader-${sequence}`;
73
+ opened.set(readerId, binary);
74
+ return Promise.resolve({ readerId, size: binary.byteLength });
75
+ },
76
+ read({ readerId, offset, length }) {
77
+ const binary = opened.get(readerId);
78
+ if (!binary) throw new Error(`missing reader: ${readerId}`);
79
+ const data = binary.slice(offset, offset + length);
80
+ return Promise.resolve({
81
+ data,
82
+ bytesRead: data.byteLength,
83
+ eof: offset + length === binary.byteLength,
84
+ });
85
+ },
86
+ close({ readerId }) {
87
+ opened.delete(readerId);
88
+ return Promise.resolve();
89
+ },
90
+ };
91
+ };
92
+
93
+ const createPreparedPlan = async (
94
+ executor: 'v2' | 'v3',
95
+ componentTarget: 'firmware' | 'ble' = 'firmware'
96
+ ) => {
97
+ const firmwareBinary = Uint8Array.from([5, 6, 7, 8]).buffer;
98
+ const resourceBinary = Uint8Array.from([1, 2, 3, 4]).buffer;
99
+ const zip = new JSZip();
100
+ zip.file('images/logo.bin', resourceBinary);
101
+ const archiveBinary = await zip.generateAsync({ type: 'arraybuffer' });
102
+ const firmwareArtifact = createReference('firmware-artifact', firmwareBinary);
103
+ const archiveArtifact = createReference('resource-archive', archiveBinary);
104
+ const resourceArtifact = createReference('resource-entry', resourceBinary);
105
+ const planWithoutDigest: Omit<FirmwareUpdatePlan, 'planDigest'> = {
106
+ schemaVersion: 2,
107
+ executor,
108
+ deviceIdentity: executor === 'v2' ? 'touch-device' : 'pro-device',
109
+ deviceModel: String(executor === 'v2' ? EDeviceType.Touch : EDeviceType.Pro),
110
+ firmwareType: EFirmwareType.Universal,
111
+ platform: 'desktop',
112
+ artifacts: [
113
+ {
114
+ artifactId: componentTarget,
115
+ role: componentTarget,
116
+ target: componentTarget,
117
+ url: `https://firmware.onekey.so/${componentTarget}.bin`,
118
+ container: 'raw',
119
+ expectedSize: firmwareArtifact.size,
120
+ expectedSha256: firmwareArtifact.sha256,
121
+ },
122
+ {
123
+ artifactId: 'resource',
124
+ role: 'resource',
125
+ target: 'resource',
126
+ url: 'https://firmware.onekey.so/resource.zip',
127
+ container: 'zip',
128
+ expectedSize: archiveArtifact.size,
129
+ expectedSha256: archiveArtifact.sha256,
130
+ },
131
+ ],
132
+ targetsToUpdate: [componentTarget, 'resource'],
133
+ };
134
+ const plan: FirmwareUpdatePlan = {
135
+ ...planWithoutDigest,
136
+ planDigest: digestFirmwareUpdateContract(planWithoutDigest),
137
+ };
138
+ const preparedPlan = prepareFirmwareUpdatePlan({
139
+ plan,
140
+ leaseRef: `${executor}-resource-executor`,
141
+ artifacts: [
142
+ { artifactId: componentTarget, artifact: firmwareArtifact },
143
+ {
144
+ artifactId: 'resource',
145
+ artifact: archiveArtifact,
146
+ materializedEntries: [{ entryName: 'images/logo.bin', artifact: resourceArtifact }],
147
+ },
148
+ ],
149
+ });
150
+ return {
151
+ firmwareArtifact,
152
+ firmwareBinary,
153
+ archiveArtifact,
154
+ archiveBinary,
155
+ resourceBinary,
156
+ preparedPlan,
157
+ };
158
+ };
159
+
160
+ describe('prepared resource executors', () => {
161
+ afterEach(() => {
162
+ unregisterFirmwareUpdateHostBinding();
163
+ jest.restoreAllMocks();
164
+ jest.clearAllMocks();
165
+ });
166
+
167
+ test('FirmwareUpdateV3 derives resource bytes from the approved ZIP without duplicate entries', async () => {
168
+ const prepared = await createPreparedPlan('v3');
169
+ const artifactReader = createReader(
170
+ new Map([
171
+ [prepared.firmwareArtifact.artifactRef, prepared.firmwareBinary],
172
+ [prepared.archiveArtifact.artifactRef, prepared.archiveBinary],
173
+ ])
174
+ );
175
+ const hostBindingGeneration = registerFirmwareUpdateHostBinding({
176
+ preparedPlanDigest: prepared.preparedPlan.preparedPlanDigest,
177
+ artifactReader,
178
+ });
179
+ const method = new FirmwareUpdateV3({
180
+ id: 1,
181
+ payload: {
182
+ method: 'firmwareUpdateV3',
183
+ platform: 'desktop',
184
+ preparedPlan: prepared.preparedPlan,
185
+ hostBindingGeneration,
186
+ artifacts: { firmware: prepared.firmwareArtifact },
187
+ },
188
+ });
189
+ method.init();
190
+
191
+ const result = await (method as any).prepareResourceInput(EFirmwareType.Universal);
192
+ expect(result.resourceEntries).toHaveLength(1);
193
+ expect(result.resourceEntries[0].entryName).toBe('logo.bin');
194
+ await expect(result.resourceEntries[0].source.readAt(0, 4)).resolves.toEqual(
195
+ prepared.resourceBinary
196
+ );
197
+ await (method as any).closeArtifactSources();
198
+ });
199
+
200
+ test('FirmwareUpdateV2 executes prepared resources without a live release record', async () => {
201
+ const prepared = await createPreparedPlan('v2');
202
+ const artifactReader = createReader(
203
+ new Map([
204
+ [prepared.firmwareArtifact.artifactRef, prepared.firmwareBinary],
205
+ [prepared.archiveArtifact.artifactRef, prepared.archiveBinary],
206
+ ])
207
+ );
208
+ const hostBindingGeneration = registerFirmwareUpdateHostBinding({
209
+ preparedPlanDigest: prepared.preparedPlan.preparedPlanDigest,
210
+ artifactReader,
211
+ });
212
+ const method = new FirmwareUpdateV2({
213
+ id: 1,
214
+ payload: {
215
+ method: 'firmwareUpdateV2',
216
+ connectId: 'touch-connect-id',
217
+ platform: 'desktop',
218
+ updateType: 'firmware',
219
+ artifact: prepared.firmwareArtifact,
220
+ preparedPlan: prepared.preparedPlan,
221
+ hostBindingGeneration,
222
+ },
223
+ });
224
+ method.init();
225
+
226
+ const typedCall = jest.fn().mockResolvedValue({ type: 'Success' });
227
+ const commands = { typedCall, checkDisposed: jest.fn(), disposed: false };
228
+ method.device = {
229
+ features: {
230
+ deviceType: EDeviceType.Touch,
231
+ serialNo: 'touch-device',
232
+ firmwareVersion: '3.2.0',
233
+ bootloaderVersion: '2.8.0',
234
+ },
235
+ commands,
236
+ getCommands: () => commands,
237
+ getCurrentDeviceType: () => EDeviceType.Touch,
238
+ getCurrentFirmwareType: () => EFirmwareType.Universal,
239
+ getCurrentFirmwareVersionString: () => '3.2.0',
240
+ getCurrentBootloaderVersionString: () => '2.8.0',
241
+ getCurrentSerialNo: () => 'touch-device',
242
+ isBootloader: () => false,
243
+ isProtocolV2: () => false,
244
+ acquire: jest.fn().mockResolvedValue(undefined),
245
+ toMessageObject: jest.fn(() => ({})),
246
+ } as any;
247
+ method.postMessage = jest.fn();
248
+ jest.spyOn(method, 'checkDeviceToBootloader').mockImplementation(() => {
249
+ method.checkPromise = { promise: Promise.resolve(true) } as any;
250
+ });
251
+ jest.spyOn(utils, 'wait').mockResolvedValue(undefined);
252
+ const liveReleaseSpy = jest
253
+ .spyOn(DataManager, 'getSysResourcesLatestRelease')
254
+ .mockReturnValue(undefined);
255
+ mockUpdateResourcesFromSources.mockImplementation(async (_call, _post, _device, entries) => {
256
+ expect(entries).toHaveLength(1);
257
+ expect(entries[0].entryName).toBe('logo.bin');
258
+ await expect(entries[0].source.readAt(0, 4)).resolves.toEqual(prepared.resourceBinary);
259
+ return true;
260
+ });
261
+ mockUploadFirmwareFromSource.mockResolvedValue({ success: true } as any);
262
+
263
+ await expect(method.run()).resolves.toEqual({ success: true });
264
+ expect(liveReleaseSpy).not.toHaveBeenCalled();
265
+ expect(mockUpdateResourcesFromSources).toHaveBeenCalledTimes(1);
266
+ });
267
+
268
+ test('FirmwareUpdateV2 does not replay a plan resource during its BLE component phase', async () => {
269
+ const prepared = await createPreparedPlan('v2', 'ble');
270
+ const artifactReader = createReader(
271
+ new Map([
272
+ [prepared.firmwareArtifact.artifactRef, prepared.firmwareBinary],
273
+ [prepared.archiveArtifact.artifactRef, prepared.archiveBinary],
274
+ ])
275
+ );
276
+ const hostBindingGeneration = registerFirmwareUpdateHostBinding({
277
+ preparedPlanDigest: prepared.preparedPlan.preparedPlanDigest,
278
+ artifactReader,
279
+ });
280
+ const method = new FirmwareUpdateV2({
281
+ id: 1,
282
+ payload: {
283
+ method: 'firmwareUpdateV2',
284
+ connectId: 'touch-connect-id',
285
+ platform: 'desktop',
286
+ updateType: 'ble',
287
+ preparedPlan: prepared.preparedPlan,
288
+ hostBindingGeneration,
289
+ },
290
+ });
291
+ method.init();
292
+
293
+ const typedCall = jest.fn().mockResolvedValue({ type: 'Success' });
294
+ const commands = { typedCall, checkDisposed: jest.fn(), disposed: false };
295
+ method.device = {
296
+ features: {
297
+ deviceType: EDeviceType.Touch,
298
+ serialNo: 'touch-device',
299
+ firmwareVersion: '3.2.0',
300
+ bootloaderVersion: '2.8.0',
301
+ },
302
+ commands,
303
+ getCommands: () => commands,
304
+ getCurrentDeviceType: () => EDeviceType.Touch,
305
+ getCurrentFirmwareType: () => EFirmwareType.Universal,
306
+ getCurrentFirmwareVersionString: () => '3.2.0',
307
+ getCurrentBootloaderVersionString: () => '2.8.0',
308
+ getCurrentSerialNo: () => 'touch-device',
309
+ isBootloader: () => false,
310
+ isProtocolV2: () => false,
311
+ acquire: jest.fn().mockResolvedValue(undefined),
312
+ toMessageObject: jest.fn(() => ({})),
313
+ } as any;
314
+ method.postMessage = jest.fn();
315
+ jest.spyOn(method, 'checkDeviceToBootloader').mockImplementation(() => {
316
+ method.checkPromise = { promise: Promise.resolve(true) } as any;
317
+ });
318
+ jest.spyOn(utils, 'wait').mockResolvedValue(undefined);
319
+ const liveReleaseSpy = jest.spyOn(DataManager, 'getSysResourcesLatestRelease');
320
+ mockUploadFirmwareFromSource.mockResolvedValue({ success: true } as any);
321
+
322
+ await expect(method.run()).resolves.toEqual({ success: true });
323
+ expect(liveReleaseSpy).not.toHaveBeenCalled();
324
+ expect(mockUpdateResourcesFromSources).not.toHaveBeenCalled();
325
+ });
326
+ });
@@ -151,7 +151,7 @@ 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', () => {
154
+ it('rejects a prepared plan combined with legacy inputs during initialization', () => {
155
155
  const method = new FirmwareUpdateV2({
156
156
  id: 1,
157
157
  payload: {
@@ -173,7 +173,7 @@ describe('FirmwareUpdateV2 download-before-reboot safety', () => {
173
173
  expect(() => method.init()).toThrow(
174
174
  expect.objectContaining({
175
175
  errorCode: HardwareErrorCode.CallMethodInvalidParameter,
176
- message: 'Firmware update binary and artifact are mutually exclusive',
176
+ message: 'Prepared firmware plans cannot be combined with legacy firmware inputs',
177
177
  })
178
178
  );
179
179
  });
@@ -5506,6 +5506,9 @@ describe('Protocol V2 firmware update targets', () => {
5506
5506
  return Number(params.processedSize ?? 0) + Number(params.source.size);
5507
5507
  });
5508
5508
  (method as any).enterProtocolV2BootloaderMode = jest.fn().mockResolvedValue(undefined);
5509
+ (method as any).ensureProtocolV2BootResourceStagingIsEmpty = jest
5510
+ .fn()
5511
+ .mockResolvedValue(undefined);
5509
5512
  (method as any).exitProtocolV2BootloaderToNormal = jest.fn().mockResolvedValue(undefined);
5510
5513
  (method as any).waitForProtocolV2FinalFeatures = jest.fn().mockResolvedValue({});
5511
5514
  (method as any).completeProtocolV2FinalVerification = jest.fn().mockResolvedValue({});
@@ -5579,6 +5582,9 @@ describe('Protocol V2 firmware update targets', () => {
5579
5582
  Promise.resolve(Number(params.processedSize ?? 0) + Number(params.source.size))
5580
5583
  );
5581
5584
  (method as any).enterProtocolV2BootloaderMode = jest.fn().mockResolvedValue(undefined);
5585
+ (method as any).ensureProtocolV2BootResourceStagingIsEmpty = jest
5586
+ .fn()
5587
+ .mockResolvedValue(undefined);
5582
5588
  (method as any).exitProtocolV2BootloaderToNormal = jest.fn().mockResolvedValue(undefined);
5583
5589
  (method as any).completeProtocolV2FinalVerification = jest.fn().mockResolvedValue({});
5584
5590
  (method as any).verifyProtocolV2StagedFile = jest.fn().mockResolvedValue(undefined);
@@ -5657,6 +5663,74 @@ describe('Protocol V2 firmware update targets', () => {
5657
5663
  ]);
5658
5664
  });
5659
5665
 
5666
+ test('stages the mounted boot resource before any firmware install phase', () => {
5667
+ const method = new FirmwareUpdateV4({
5668
+ id: 1,
5669
+ payload: { method: 'firmwareUpdateV4' },
5670
+ });
5671
+ const bootResource = {
5672
+ devicePath: 'vol0:/loaders/bootloader/boot_resource.okpkg',
5673
+ };
5674
+ const phases = (method as any).buildProtocolV2ExecutionPhases({
5675
+ installSources: [{ kind: 'bootloader' }, { kind: 'component' }],
5676
+ resourceSources: [bootResource, { devicePath: 'vol0:/resource/images/images.okpkg' }],
5677
+ });
5678
+
5679
+ expect(phases.map((phase: { kind: string }) => phase.kind)).toEqual([
5680
+ 'resource-sync',
5681
+ 'bootloader-install',
5682
+ 'bootloader-verify',
5683
+ 'resource-sync',
5684
+ 'component-install',
5685
+ 'final-verify',
5686
+ ]);
5687
+ expect(phases[0].resourceSources).toEqual([bootResource]);
5688
+ });
5689
+
5690
+ test('removes stale boot resource staging before a component-only reboot', async () => {
5691
+ const method = new FirmwareUpdateV4({
5692
+ id: 1,
5693
+ payload: { method: 'firmwareUpdateV4' },
5694
+ });
5695
+ const events: string[] = [];
5696
+ let stagingExists = true;
5697
+ const typedCall = jest.fn((requestType: string) => {
5698
+ if (requestType === 'FilesystemPathInfoQuery') {
5699
+ return Promise.resolve({
5700
+ type: 'FilesystemPathInfo',
5701
+ message: { exist: stagingExists, directory: false, size: stagingExists ? 3 : 0 },
5702
+ });
5703
+ }
5704
+ if (requestType === 'FilesystemFileDelete') {
5705
+ events.push('delete-stale-staging');
5706
+ stagingExists = false;
5707
+ return Promise.resolve({ type: 'Success', message: {} });
5708
+ }
5709
+ throw new Error(`Unexpected request: ${requestType}`);
5710
+ });
5711
+ (method as any).device = stubDevice({ getCommands: () => ({ typedCall }) });
5712
+ (method as any).enterProtocolV2BootloaderMode = jest.fn().mockResolvedValue(undefined);
5713
+ (method as any).executeProtocolV2TransferPhase = jest.fn().mockImplementation(() => {
5714
+ events.push('transfer-component');
5715
+ return Promise.resolve();
5716
+ });
5717
+ (method as any).exitProtocolV2BootloaderToNormal = jest.fn().mockImplementation(() => {
5718
+ events.push('reboot-normal');
5719
+ return Promise.resolve();
5720
+ });
5721
+ (method as any).completeProtocolV2FinalVerification = jest.fn().mockResolvedValue({});
5722
+
5723
+ await (method as any).executeProtocolV2SourceUpdate({
5724
+ installSources: [{ kind: 'firmware' }],
5725
+ resourceSources: [],
5726
+ });
5727
+
5728
+ expect(events).toEqual(['delete-stale-staging', 'transfer-component', 'reboot-normal']);
5729
+ expect(typedCall).toHaveBeenNthCalledWith(2, 'FilesystemFileDelete', 'Success', {
5730
+ path: 'vol0:/loaders/bootloader/boot_resource.okpkg.staging',
5731
+ });
5732
+ });
5733
+
5660
5734
  test('does not request installation when the staged file size does not match', async () => {
5661
5735
  const method = new FirmwareUpdateV4({
5662
5736
  id: 1,
@@ -5669,6 +5743,9 @@ describe('Protocol V2 firmware update targets', () => {
5669
5743
  method.postProgressMessage = jest.fn();
5670
5744
  (method as any).protocolV2SourceUpdateProcess = jest.fn().mockResolvedValue(3);
5671
5745
  (method as any).enterProtocolV2BootloaderMode = jest.fn().mockResolvedValue(undefined);
5746
+ (method as any).ensureProtocolV2BootResourceStagingIsEmpty = jest
5747
+ .fn()
5748
+ .mockResolvedValue(undefined);
5672
5749
  (method as any).device = stubDevice({
5673
5750
  getCommands: () => ({
5674
5751
  typedCall: jest.fn().mockResolvedValue({
@@ -5720,6 +5797,9 @@ describe('Protocol V2 firmware update targets', () => {
5720
5797
  Promise.resolve(Number(params.processedSize ?? 0) + Number(params.source.size))
5721
5798
  );
5722
5799
  (method as any).enterProtocolV2BootloaderMode = jest.fn().mockResolvedValue(undefined);
5800
+ (method as any).ensureProtocolV2BootResourceStagingIsEmpty = jest
5801
+ .fn()
5802
+ .mockResolvedValue(undefined);
5723
5803
  (method as any).exitProtocolV2BootloaderToNormal = jest.fn().mockResolvedValue(undefined);
5724
5804
  (method as any).completeProtocolV2FinalVerification = jest.fn().mockResolvedValue({});
5725
5805
  (method as any).verifyProtocolV2StagedFile = jest.fn().mockResolvedValue(undefined);
@@ -6295,6 +6375,8 @@ describe('Protocol V2 firmware update targets', () => {
6295
6375
  url: 'https://example.com/resource.zip',
6296
6376
  container: 'zip' as const,
6297
6377
  logicalName: 'protocol-v2-resource-archive',
6378
+ expectedSize: 3,
6379
+ expectedSha256: 'a'.repeat(64),
6298
6380
  },
6299
6381
  ],
6300
6382
  };
@@ -6399,6 +6481,8 @@ describe('Protocol V2 firmware update targets', () => {
6399
6481
  url: 'https://example.com/bootloader.bin',
6400
6482
  container: 'raw' as const,
6401
6483
  logicalName: 'bootloader',
6484
+ expectedSize: componentArtifact.size,
6485
+ expectedSha256: componentArtifact.sha256,
6402
6486
  targetVersion: '1.2.3',
6403
6487
  },
6404
6488
  ],
@@ -6494,6 +6578,8 @@ describe('Protocol V2 firmware update targets', () => {
6494
6578
  url: 'https://example.com/resource.zip',
6495
6579
  container: 'zip' as const,
6496
6580
  logicalName: 'protocol-v2-resource-archive',
6581
+ expectedSize: 3,
6582
+ expectedSha256: 'a'.repeat(64),
6497
6583
  },
6498
6584
  ],
6499
6585
  };
@@ -6908,6 +6994,9 @@ describe('Protocol V2 firmware update targets', () => {
6908
6994
  method.postProgressMessage = jest.fn();
6909
6995
  (method as any).protocolV2SourceUpdateProcess = jest.fn().mockResolvedValue(3);
6910
6996
  (method as any).enterProtocolV2BootloaderMode = jest.fn().mockResolvedValue(undefined);
6997
+ (method as any).ensureProtocolV2BootResourceStagingIsEmpty = jest
6998
+ .fn()
6999
+ .mockResolvedValue(undefined);
6911
7000
  (method as any).completeProtocolV2FinalVerification = jest.fn().mockResolvedValue({});
6912
7001
  (method as any).verifyProtocolV2StagedFile = jest.fn().mockResolvedValue(undefined);
6913
7002
  (method as any).protocolV2StartFirmwareUpdate = jest.fn();
@@ -6977,6 +7066,46 @@ describe('Protocol V2 firmware update targets', () => {
6977
7066
  expect((method as any).verifyProtocolV2StagedFile).toHaveBeenCalledWith(stagingPath, 3);
6978
7067
  });
6979
7068
 
7069
+ test('rewrites the mounted boot resource staging file even when the final file is current', async () => {
7070
+ const method = new FirmwareUpdateV4({
7071
+ id: 1,
7072
+ payload: {
7073
+ method: 'firmwareUpdateV4',
7074
+ },
7075
+ });
7076
+
7077
+ method.postTipMessage = jest.fn();
7078
+ method.postProgressMessage = jest.fn();
7079
+ (method as any).isProtocolV2ResourceBundleUpToDate = jest.fn().mockResolvedValue(true);
7080
+ (method as any).protocolV2SourceUpdateProcess = jest.fn().mockResolvedValue(3);
7081
+ (method as any).verifyProtocolV2StagedFile = jest.fn().mockResolvedValue(undefined);
7082
+
7083
+ const resource = {
7084
+ name: 'boot_resource.okpkg',
7085
+ source: {
7086
+ size: 3,
7087
+ readAt: jest.fn(),
7088
+ close: jest.fn(),
7089
+ },
7090
+ devicePath: 'vol0:/loaders/bootloader/boot_resource.okpkg',
7091
+ version: [1, 0, 0],
7092
+ payloadHash: '11'.repeat(64),
7093
+ headerHash: '22'.repeat(64),
7094
+ };
7095
+
7096
+ await (method as any).executeProtocolV2TransferPhase({
7097
+ installSources: [],
7098
+ resourceSources: [resource],
7099
+ });
7100
+
7101
+ const stagingPath = 'vol0:/loaders/bootloader/boot_resource.okpkg.staging';
7102
+ expect((method as any).isProtocolV2ResourceBundleUpToDate).not.toHaveBeenCalled();
7103
+ expect((method as any).protocolV2SourceUpdateProcess).toHaveBeenCalledWith(
7104
+ expect.objectContaining({ source: resource.source, filePath: stagingPath, totalSize: 3 })
7105
+ );
7106
+ expect((method as any).verifyProtocolV2StagedFile).toHaveBeenCalledWith(stagingPath, 3);
7107
+ });
7108
+
6980
7109
  test('uses absolute processed_byte offsets and disables append for firmware file writes', async () => {
6981
7110
  const method = new FirmwareUpdateV4({
6982
7111
  id: 1,
@@ -7783,6 +7912,8 @@ describe('Protocol V2 firmware reconnect identity', () => {
7783
7912
  url: 'https://example.com/bootloader.bin',
7784
7913
  container: 'raw' as const,
7785
7914
  logicalName: 'bootloader',
7915
+ expectedSize: 1,
7916
+ expectedSha256: 'a'.repeat(64),
7786
7917
  },
7787
7918
  ],
7788
7919
  };
@@ -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,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
+ {"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;AA2B1C,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;IAiGJ,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;CAkRV"}
@@ -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;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
+ {"version":3,"file":"FirmwareUpdateV3.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV3.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAc/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;IA8HE,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"}
@@ -10,6 +10,7 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
10
10
  getSupportedProtocols(): readonly ["V2"];
11
11
  private protocolV2PreparedSources;
12
12
  private protocolV2ExecutionInLoader;
13
+ private protocolV2BootResourceStagingSafe;
13
14
  private protocolV2CompletedTargetVersions;
14
15
  private protocolV2LatestFinalFeatures?;
15
16
  private protocolV2FinalStatusVerified;
@@ -60,6 +61,7 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
60
61
  private collectExplicitTargetBinaries;
61
62
  private buildProtocolV2ExecutionPhases;
62
63
  private executeProtocolV2Phases;
64
+ private ensureProtocolV2BootResourceStagingIsEmpty;
63
65
  private executeProtocolV2SourceUpdate;
64
66
  private executeProtocolV2Update;
65
67
  private executeProtocolV2TransferPhase;
@@ -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;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
+ {"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;AAmWD,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,CAAS;IAElD,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;YA6DxB,uBAAuB;YA0CvB,0CAA0C;YA6B1C,6BAA6B;YAa7B,uBAAuB;YAiCvB,8BAA8B;YAqE9B,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;CA8FV"}
1
+ {"version":3,"file":"DeviceUpdateBootloader.d.ts","sourceRoot":"","sources":["../../../src/api/device/DeviceUpdateBootloader.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAkBhF,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;CAkGV"}
@@ -0,0 +1,11 @@
1
+ import type { FirmwareArtifactReader } from '../../types/api/firmwareUpdate';
2
+ import type { FirmwareUpdatePreparedPlan } from '../../types/api/firmwareUpdatePreparedPlan';
3
+ export type VerifiedPreparedResourceEntry = {
4
+ entryName: string;
5
+ binary: ArrayBuffer;
6
+ };
7
+ export declare const readVerifiedPreparedResourceArchive: ({ preparedPlan, reader, }: {
8
+ preparedPlan: FirmwareUpdatePreparedPlan;
9
+ reader: FirmwareArtifactReader | undefined;
10
+ }) => Promise<VerifiedPreparedResourceEntry[]>;
11
+ //# sourceMappingURL=FirmwarePreparedResourceArchive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FirmwarePreparedResourceArchive.d.ts","sourceRoot":"","sources":["../../../src/api/firmware/FirmwarePreparedResourceArchive.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AAY7F,MAAM,MAAM,6BAA6B,GAAG;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;CACrB,CAAC;AAgCF,eAAO,MAAM,mCAAmC;kBAIhC,0BAA0B;YAChC,sBAAsB,GAAG,SAAS;MACxC,QAAQ,6BAA6B,EAAE,CAgJ1C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"FirmwareUpdateBaseMethod.d.ts","sourceRoot":"","sources":["../../../src/api/firmware/FirmwareUpdateBaseMethod.ts"],"names":[],"mappings":";AAaA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI3C,OAAO,KAAK,EACV,gBAAgB,EAChB,2BAA2B,EAC3B,yBAAyB,EAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAcnE,eAAO,MAAM,qCAAqC,OAAO,CAAC;AAE1D,KAAK,uBAAuB,GAAG,IAAI,CACjC,gBAAgB,CAAC,SAAS,CAAC,EAC3B,kBAAkB,GAAG,YAAY,GAAG,oBAAoB,GAAG,WAAW,CACvE,CAAC;AAWF,qBAAa,wBAAwB,CAAC,MAAM,CAAE,SAAQ,UAAU,CAAC,MAAM,CAAC;IACtE,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IAE1C,IAAI,IAAI,IAAI;IAEZ,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IAInB,cAAc,IAAI,OAAO;IASzB,cAAc,YAAa,yBAAyB,UASlD;IAMF,qBAAqB,SAAU,UAAU,GAAG,KAAK,GAAG,YAAY,GAAG,UAAU,UAM3E;IAMF,mBAAmB,aACP,MAAM,gBACF,2BAA2B,YAC/B,uBAAuB,UAUjC;cAEc,qCAAqC;cAkBrC,uCAAuC;IAkBvD,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;YAsGvC,4BAA4B;IAyBpC,mBAAmB;IA8CnB,uBAAuB,CAAC,EAAE,IAAI,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;IA6BlD,8BAA8B,CAAC,IAAI,EAAE,MAAM;IAW3C,uBAAuB,CAAC,EAC5B,OAAO,EACP,QAAQ,EACR,aAAa,EACb,SAAS,GACV,EAAE,KAAK,CAAC,cAAc,GAAG;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB;IA4CK,iCAAiC,CAAC,EACtC,MAAM,EACN,QAAQ,EACR,aAAa,EACb,SAAS,GACV,EAAE;QACD,MAAM,EAAE,kBAAkB,CAAC;QAC3B,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB;IAsCK,sBAAsB,CAC1B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,WAAW,GAAG,MAAM,EAC3B,SAAS,EAAE,OAAO,EAClB,QAAQ,EAAE,MAAM,GAAG,IAAI;IAgFnB,MAAM,CAAC,UAAU,EAAE,UAAU;CAsBpC"}
1
+ {"version":3,"file":"FirmwareUpdateBaseMethod.d.ts","sourceRoot":"","sources":["../../../src/api/firmware/FirmwareUpdateBaseMethod.ts"],"names":[],"mappings":";AAaA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI3C,OAAO,KAAK,EACV,gBAAgB,EAChB,2BAA2B,EAC3B,yBAAyB,EAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAcnE,eAAO,MAAM,qCAAqC,OAAO,CAAC;AAE1D,KAAK,uBAAuB,GAAG,IAAI,CACjC,gBAAgB,CAAC,SAAS,CAAC,EAC3B,kBAAkB,GAAG,YAAY,GAAG,oBAAoB,GAAG,WAAW,CACvE,CAAC;AAWF,qBAAa,wBAAwB,CAAC,MAAM,CAAE,SAAQ,UAAU,CAAC,MAAM,CAAC;IACtE,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IAE1C,IAAI,IAAI,IAAI;IAEZ,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IAInB,cAAc,IAAI,OAAO;IASzB,cAAc,YAAa,yBAAyB,UASlD;IAMF,qBAAqB,SAAU,UAAU,GAAG,KAAK,GAAG,YAAY,GAAG,UAAU,UAM3E;IAMF,mBAAmB,aACP,MAAM,gBACF,2BAA2B,YAC/B,uBAAuB,UAUjC;cAEc,qCAAqC;cAkBrC,uCAAuC;IAkBvD,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;YAwGvC,4BAA4B;IAyBpC,mBAAmB;IA8CnB,uBAAuB,CAAC,EAAE,IAAI,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;IA6BlD,8BAA8B,CAAC,IAAI,EAAE,MAAM;IAW3C,uBAAuB,CAAC,EAC5B,OAAO,EACP,QAAQ,EACR,aAAa,EACb,SAAS,GACV,EAAE,KAAK,CAAC,cAAc,GAAG;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB;IA4CK,iCAAiC,CAAC,EACtC,MAAM,EACN,QAAQ,EACR,aAAa,EACb,SAAS,GACV,EAAE;QACD,MAAM,EAAE,kBAAkB,CAAC;QAC3B,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB;IAsCK,sBAAsB,CAC1B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,WAAW,GAAG,MAAM,EAC3B,SAAS,EAAE,OAAO,EAClB,QAAQ,EAAE,MAAM,GAAG,IAAI;IAgFnB,MAAM,CAAC,UAAU,EAAE,UAAU;CAsBpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"FirmwareUpdatePlan.d.ts","sourceRoot":"","sources":["../../../src/api/firmware/FirmwareUpdatePlan.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,aAAa,EAA6B,MAAM,qBAAqB,CAAC;AAU5F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,KAAK,EACV,kBAAkB,EAElB,6BAA6B,EAC7B,wBAAwB,EACzB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAEvE,KAAK,sBAAsB,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,WAAW,CAAC;AAEjF,KAAK,aAAa,GAAG;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AA+GF,eAAO,MAAM,4BAA4B,UAAW,OAAO,KAAG,MAG3D,CAAC;AAkBJ,eAAO,MAAM,sCAAsC,UAC1C,OAAO,KACb,6BAA6B,EAa/B,CAAC;AAEF,eAAO,MAAM,uCAAuC,UAC3C,OAAO,KACb,sBAAsB,EAaxB,CAAC;AAuBF,eAAO,MAAM,4BAA4B,+BAavC,CAAC;AAEH,eAAO,MAAM,0BAA0B,aAOrC,CAAC;AAYH,eAAO,MAAM,wBAAwB,UAAW,OAAO,KAAG,kBAuHzD,CAAC;AAqPF,MAAM,MAAM,yCAAyC,GAAG;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC,sBAAsB,EAAE,gBAAgB,CAAC,CAAC;IAC1D,SAAS,EAAE,KAAK,GAAG,KAAK,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,sCAAsC;cAMvC,QAAQ;kBACJ,aAAa;cACjB,sBAAsB;eACrB,yCAAyC,EAAE;MACpD,kBAmBH,CAAC;AAEF,eAAO,MAAM,iCAAiC;cASlC,QAAQ;kBACJ,aAAa;cACjB,sBAAsB;aACvB,aAAa,GAAG,SAAS;qBACjB,SAAS,sBAAsB,EAAE;;qBAEjC,yBAAyB,GAAG,SAAS;MACpD,kBAgEH,CAAC;AAEF,eAAO,MAAM,uBAAuB;cASxB,QAAQ;kBACJ,aAAa;cACjB,sBAAsB;cACtB,gBAAgB;SACrB,gBAAgB;;;MAGnB,kBAwIH,CAAC"}
1
+ {"version":3,"file":"FirmwareUpdatePlan.d.ts","sourceRoot":"","sources":["../../../src/api/firmware/FirmwareUpdatePlan.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,aAAa,EAA6B,MAAM,qBAAqB,CAAC;AAU5F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,KAAK,EACV,kBAAkB,EAElB,6BAA6B,EAC7B,wBAAwB,EACzB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAEvE,KAAK,sBAAsB,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,WAAW,CAAC;AAEjF,KAAK,aAAa,GAAG;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AA+GF,eAAO,MAAM,4BAA4B,UAAW,OAAO,KAAG,MAG3D,CAAC;AAgCJ,eAAO,MAAM,sCAAsC,UAC1C,OAAO,KACb,6BAA6B,EAa/B,CAAC;AAEF,eAAO,MAAM,uCAAuC,UAC3C,OAAO,KACb,sBAAsB,EAaxB,CAAC;AAuBF,eAAO,MAAM,4BAA4B,+BAavC,CAAC;AAEH,eAAO,MAAM,0BAA0B,aAOrC,CAAC;AAYH,eAAO,MAAM,wBAAwB,UAAW,OAAO,KAAG,kBAmHzD,CAAC;AAkPF,MAAM,MAAM,yCAAyC,GAAG;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC,sBAAsB,EAAE,gBAAgB,CAAC,CAAC;IAC1D,SAAS,EAAE,KAAK,GAAG,KAAK,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,sCAAsC;cAMvC,QAAQ;kBACJ,aAAa;cACjB,sBAAsB;eACrB,yCAAyC,EAAE;MACpD,kBAmBH,CAAC;AAEF,eAAO,MAAM,iCAAiC;cASlC,QAAQ;kBACJ,aAAa;cACjB,sBAAsB;aACvB,aAAa,GAAG,SAAS;qBACjB,SAAS,sBAAsB,EAAE;;qBAEjC,yBAAyB,GAAG,SAAS;MACpD,kBA6DH,CAAC;AAEF,eAAO,MAAM,uBAAuB;cASxB,QAAQ;kBACJ,aAAa;cACjB,sBAAsB;cACtB,gBAAgB;SACrB,gBAAgB;;;MAGnB,kBA0JH,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { FirmwareUpdatePreparedArtifactInput, FirmwareUpdatePreparedPlan } from '../../types/api/firmwareUpdatePreparedPlan';
1
+ import type { FirmwareUpdatePreparedArtifact, FirmwareUpdatePreparedArtifactInput, FirmwareUpdatePreparedPlan } from '../../types/api/firmwareUpdatePreparedPlan';
2
2
  import type { FirmwareArtifactReference } from '../../types/api/firmwareUpdate';
3
3
  import type { FirmwareUpdatePlan } from '../../types/api/firmwareUpdatePlan';
4
4
  export declare const getFirmwareUpdateResourceName: (value: unknown) => string;
@@ -8,6 +8,11 @@ export declare const prepareFirmwareUpdatePlan: ({ plan: value, leaseRef, artifa
8
8
  artifacts: FirmwareUpdatePreparedArtifactInput[];
9
9
  }) => FirmwareUpdatePreparedPlan;
10
10
  export declare const validateFirmwareUpdatePreparedPlan: (value: unknown) => FirmwareUpdatePreparedPlan;
11
+ export declare const getFirmwareUpdatePreparedRawArtifact: ({ preparedPlan: value, target, role, }: {
12
+ preparedPlan: unknown;
13
+ target: FirmwareUpdatePreparedArtifact['target'];
14
+ role: FirmwareUpdatePreparedArtifact['role'];
15
+ }) => FirmwareUpdatePreparedArtifact;
11
16
  export declare const assertFirmwareUpdatePreparedPlanDeviceIdentity: ({ preparedPlan: value, deviceIdentity: reportedIdentity, bootloaderMode, deviceModel, }: {
12
17
  preparedPlan: unknown;
13
18
  deviceIdentity: string | undefined;