@onekeyfe/hd-core 1.2.0-alpha.100 → 1.2.0-alpha.101
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__tests__/firmware-update/firmware-update-plan.test.ts +59 -55
- package/dist/api/firmware/FirmwareUpdatePlan.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +20 -11
- package/dist/types/api/firmwareUpdatePlan.d.ts +2 -2
- package/dist/types/api/firmwareUpdatePlan.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/api/firmware/FirmwareUpdatePlan.ts +37 -36
- package/src/types/api/firmwareUpdatePlan.ts +2 -2
|
@@ -376,62 +376,66 @@ describe('buildFirmwareUpdatePlan', () => {
|
|
|
376
376
|
}
|
|
377
377
|
);
|
|
378
378
|
|
|
379
|
-
test(
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
379
|
+
test.each([
|
|
380
|
+
{
|
|
381
|
+
executor: 'v2',
|
|
382
|
+
deviceType: EDeviceType.Classic1s,
|
|
383
|
+
bootloaderVersion: '2.1.2',
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
executor: 'v3',
|
|
387
|
+
deviceType: EDeviceType.Pro,
|
|
388
|
+
bootloaderVersion: '2.8.4',
|
|
389
|
+
},
|
|
390
|
+
])(
|
|
391
|
+
'allows $executor config releases without optional integrity metadata',
|
|
392
|
+
({ executor, deviceType, bootloaderVersion }) => {
|
|
393
|
+
const plan = buildFirmwareUpdatePlan({
|
|
394
|
+
features: createFeatures({
|
|
395
|
+
deviceType,
|
|
396
|
+
firmwareVersion: '4.21.0',
|
|
397
|
+
bootloaderVersion,
|
|
398
|
+
}),
|
|
399
|
+
firmwareType: EFirmwareType.Universal,
|
|
400
|
+
platform: 'desktop',
|
|
401
|
+
firmware: {
|
|
402
|
+
status: 'valid',
|
|
403
|
+
release: {
|
|
404
|
+
url: 'https://firmware.onekey.so/legacy/firmware.bin',
|
|
405
|
+
version: [4, 21, 0],
|
|
406
|
+
fingerprint: '',
|
|
407
|
+
resource: 'https://firmware.onekey.so/legacy/resource.zip',
|
|
408
|
+
resourceFingerprint: '',
|
|
409
|
+
},
|
|
410
|
+
},
|
|
411
|
+
ble: {
|
|
412
|
+
status: 'valid',
|
|
413
|
+
release: {
|
|
414
|
+
webUpdate: 'https://firmware.onekey.so/legacy/ble.bin',
|
|
415
|
+
version: [2, 3, 7],
|
|
416
|
+
fingerprintWeb: '',
|
|
417
|
+
},
|
|
418
|
+
},
|
|
419
|
+
bootloader: {
|
|
420
|
+
status: 'valid',
|
|
421
|
+
release: {
|
|
422
|
+
bootloaderResource: 'https://firmware.onekey.so/legacy/bootloader.bin',
|
|
423
|
+
bootloaderVersion: [2, 8, 4],
|
|
424
|
+
bootloaderFingerprint: '',
|
|
425
|
+
},
|
|
426
|
+
},
|
|
427
|
+
forceUpdateTargets: ['firmware', 'resource', 'ble', 'bootloader'],
|
|
428
|
+
});
|
|
392
429
|
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
firmware:
|
|
403
|
-
target === 'firmware'
|
|
404
|
-
? {
|
|
405
|
-
status: 'outdated',
|
|
406
|
-
release: {
|
|
407
|
-
url: 'https://firmware.onekey.so/classic/firmware.bin',
|
|
408
|
-
expectedSize: 1024,
|
|
409
|
-
},
|
|
410
|
-
}
|
|
411
|
-
: noUpdate,
|
|
412
|
-
ble:
|
|
413
|
-
target === 'ble'
|
|
414
|
-
? {
|
|
415
|
-
status: 'outdated',
|
|
416
|
-
release: {
|
|
417
|
-
webUpdate: 'https://firmware.onekey.so/classic/ble.bin',
|
|
418
|
-
expectedSize: 512,
|
|
419
|
-
},
|
|
420
|
-
}
|
|
421
|
-
: noUpdate,
|
|
422
|
-
bootloader:
|
|
423
|
-
target === 'bootloader'
|
|
424
|
-
? {
|
|
425
|
-
status: 'outdated',
|
|
426
|
-
release: {
|
|
427
|
-
bootloaderResource: 'https://firmware.onekey.so/classic/bootloader.bin',
|
|
428
|
-
bootloaderExpectedSize: 768,
|
|
429
|
-
},
|
|
430
|
-
}
|
|
431
|
-
: noUpdate,
|
|
432
|
-
}),
|
|
433
|
-
'integrity metadata is invalid'
|
|
434
|
-
);
|
|
430
|
+
expect(plan.executor).toBe(executor);
|
|
431
|
+
expect(plan.artifacts.map(artifact => artifact.artifactId)).toEqual([
|
|
432
|
+
'bootloader',
|
|
433
|
+
'firmware',
|
|
434
|
+
'resource',
|
|
435
|
+
'ble',
|
|
436
|
+
]);
|
|
437
|
+
expect(plan.artifacts.every(artifact => artifact.expectedSize === undefined)).toBe(true);
|
|
438
|
+
expect(plan.artifacts.every(artifact => artifact.expectedSha256 === undefined)).toBe(true);
|
|
435
439
|
}
|
|
436
440
|
);
|
|
437
441
|
|
|
@@ -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;AAgCJ,eAAO,MAAM,sCAAsC,UAC1C,OAAO,KACb,6BAA6B,EAa/B,CAAC;AAEF,eAAO,MAAM,uCAAuC,UAC3C,OAAO,KACb,sBAAsB,EAkBxB,CAAC;AAuBF,eAAO,MAAM,4BAA4B,+BAavC,CAAC;AAEH,eAAO,MAAM,0BAA0B,aAOrC,CAAC;AAYH,eAAO,MAAM,wBAAwB,UAAW,OAAO,KAAG,
|
|
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,EAkBxB,CAAC;AAuBF,eAAO,MAAM,4BAA4B,+BAavC,CAAC;AAEH,eAAO,MAAM,0BAA0B,aAOrC,CAAC;AAYH,eAAO,MAAM,wBAAwB,UAAW,OAAO,KAAG,kBA6HzD,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,kBAyJH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1255,8 +1255,8 @@ interface FirmwareUpdatePlanArtifact {
|
|
|
1255
1255
|
url: string;
|
|
1256
1256
|
container: 'raw' | 'zip';
|
|
1257
1257
|
logicalName?: string;
|
|
1258
|
-
expectedSize
|
|
1259
|
-
expectedSha256
|
|
1258
|
+
expectedSize?: number;
|
|
1259
|
+
expectedSha256?: string;
|
|
1260
1260
|
targetVersion?: string;
|
|
1261
1261
|
}
|
|
1262
1262
|
interface FirmwareUpdatePlan {
|
package/dist/index.js
CHANGED
|
@@ -734,7 +734,7 @@ const assertFirmwareUpdatePlan = (value) => {
|
|
|
734
734
|
if (!artifact) {
|
|
735
735
|
return planError('Firmware update plan artifact is invalid');
|
|
736
736
|
}
|
|
737
|
-
assertExactKeys(artifact, ['artifactId', 'role', 'target', 'url', 'container', '
|
|
737
|
+
assertExactKeys(artifact, ['artifactId', 'role', 'target', 'url', 'container'], ['logicalName', 'expectedSize', 'expectedSha256', 'targetVersion']);
|
|
738
738
|
const artifactId = assertBoundedString(artifact.artifactId, 'artifact id', 160);
|
|
739
739
|
if (artifactIds.has(artifactId)) {
|
|
740
740
|
return planError('Firmware update plan contains duplicate artifact ids');
|
|
@@ -750,13 +750,19 @@ const assertFirmwareUpdatePlan = (value) => {
|
|
|
750
750
|
if (artifact.logicalName !== undefined) {
|
|
751
751
|
assertBoundedString(artifact.logicalName, 'logical name', 256);
|
|
752
752
|
}
|
|
753
|
-
if (
|
|
753
|
+
if (artifact.expectedSize !== undefined &&
|
|
754
|
+
(!Number.isSafeInteger(artifact.expectedSize) || artifact.expectedSize <= 0)) {
|
|
754
755
|
return planError('Firmware update plan artifact size is invalid');
|
|
755
756
|
}
|
|
756
|
-
if (
|
|
757
|
-
|
|
757
|
+
if (artifact.expectedSha256 !== undefined &&
|
|
758
|
+
(typeof artifact.expectedSha256 !== 'string' ||
|
|
759
|
+
!/^[a-f0-9]{64}$/u.test(artifact.expectedSha256))) {
|
|
758
760
|
return planError('Firmware update plan artifact digest is invalid');
|
|
759
761
|
}
|
|
762
|
+
if (plan.executor === 'v4' &&
|
|
763
|
+
(artifact.expectedSize === undefined || artifact.expectedSha256 === undefined)) {
|
|
764
|
+
return planError('Protocol V2 firmware artifact integrity metadata is invalid');
|
|
765
|
+
}
|
|
760
766
|
if (artifact.targetVersion !== undefined) {
|
|
761
767
|
assertBoundedString(artifact.targetVersion, 'target version', 64);
|
|
762
768
|
}
|
|
@@ -1007,10 +1013,10 @@ const buildFirmwareUpdatePlan = ({ features, firmwareType, platform, firmware, b
|
|
|
1007
1013
|
else {
|
|
1008
1014
|
if (isUpgrade(bootloader) || forcedTargets.has('bootloader')) {
|
|
1009
1015
|
const bootloaderRelease = asRelease(bootloader);
|
|
1010
|
-
const integrity =
|
|
1016
|
+
const integrity = asIntegrity({
|
|
1011
1017
|
size: bootloaderRelease === null || bootloaderRelease === void 0 ? void 0 : bootloaderRelease.bootloaderExpectedSize,
|
|
1012
1018
|
sha256: bootloaderRelease === null || bootloaderRelease === void 0 ? void 0 : bootloaderRelease.bootloaderFingerprint,
|
|
1013
|
-
}
|
|
1019
|
+
});
|
|
1014
1020
|
artifacts.push(Object.assign(Object.assign({ artifactId: 'bootloader', role: 'bootloader', target: 'bootloader', url: assertArtifactUrl(bootloaderRelease === null || bootloaderRelease === void 0 ? void 0 : bootloaderRelease.bootloaderResource, 'Bootloader release'), container: 'raw' }, integrity), (asVersion(bootloaderRelease === null || bootloaderRelease === void 0 ? void 0 : bootloaderRelease.bootloaderVersion)
|
|
1015
1021
|
? {
|
|
1016
1022
|
targetVersion: asVersion(bootloaderRelease === null || bootloaderRelease === void 0 ? void 0 : bootloaderRelease.bootloaderVersion),
|
|
@@ -1024,7 +1030,10 @@ const buildFirmwareUpdatePlan = ({ features, firmwareType, platform, firmware, b
|
|
|
1024
1030
|
});
|
|
1025
1031
|
}
|
|
1026
1032
|
if (shouldUpdateFirmware) {
|
|
1027
|
-
const integrity =
|
|
1033
|
+
const integrity = asIntegrity({
|
|
1034
|
+
size: firmwareRelease.expectedSize,
|
|
1035
|
+
sha256: firmwareRelease.fingerprint,
|
|
1036
|
+
});
|
|
1028
1037
|
artifacts.push(Object.assign(Object.assign({ artifactId: 'firmware', role: 'firmware', target: 'firmware', url: assertArtifactUrl(firmwareRelease.url, 'Firmware release'), container: 'raw' }, integrity), (asVersion(firmwareRelease.version)
|
|
1029
1038
|
? { targetVersion: asVersion(firmwareRelease.version) }
|
|
1030
1039
|
: {})));
|
|
@@ -1036,24 +1045,24 @@ const buildFirmwareUpdatePlan = ({ features, firmwareType, platform, firmware, b
|
|
|
1036
1045
|
platform,
|
|
1037
1046
|
});
|
|
1038
1047
|
if (resourceUrl) {
|
|
1039
|
-
const integrity =
|
|
1048
|
+
const integrity = asIntegrity({
|
|
1040
1049
|
size: resourceUrl === asString(firmwareRelease.fullResource)
|
|
1041
1050
|
? firmwareRelease.fullResourceExpectedSize
|
|
1042
1051
|
: firmwareRelease.resourceExpectedSize,
|
|
1043
1052
|
sha256: resourceUrl === asString(firmwareRelease.fullResource)
|
|
1044
1053
|
? firmwareRelease.fullResourceFingerprint
|
|
1045
1054
|
: firmwareRelease.resourceFingerprint,
|
|
1046
|
-
}
|
|
1055
|
+
});
|
|
1047
1056
|
artifacts.push(Object.assign({ artifactId: 'resource', role: 'resource', target: 'resource', url: assertArtifactUrl(resourceUrl, 'Firmware resource release'), container: 'zip' }, integrity));
|
|
1048
1057
|
}
|
|
1049
1058
|
}
|
|
1050
1059
|
}
|
|
1051
1060
|
if (isUpgrade(ble) || isRecoveryInstall(ble) || forcedTargets.has('ble')) {
|
|
1052
1061
|
const bleRelease = asRelease(ble);
|
|
1053
|
-
const integrity =
|
|
1062
|
+
const integrity = asIntegrity({
|
|
1054
1063
|
size: bleRelease === null || bleRelease === void 0 ? void 0 : bleRelease.expectedSize,
|
|
1055
1064
|
sha256: (_a = bleRelease === null || bleRelease === void 0 ? void 0 : bleRelease.fingerprintWeb) !== null && _a !== void 0 ? _a : bleRelease === null || bleRelease === void 0 ? void 0 : bleRelease.fingerprint,
|
|
1056
|
-
}
|
|
1065
|
+
});
|
|
1057
1066
|
artifacts.push(Object.assign(Object.assign({ artifactId: 'ble', role: 'ble', target: 'ble', url: assertArtifactUrl((_b = bleRelease === null || bleRelease === void 0 ? void 0 : bleRelease.webUpdate) !== null && _b !== void 0 ? _b : bleRelease === null || bleRelease === void 0 ? void 0 : bleRelease.url, 'BLE release'), container: 'raw' }, integrity), (asVersion(bleRelease === null || bleRelease === void 0 ? void 0 : bleRelease.version)
|
|
1058
1067
|
? { targetVersion: asVersion(bleRelease === null || bleRelease === void 0 ? void 0 : bleRelease.version) }
|
|
1059
1068
|
: {})));
|
|
@@ -10,8 +10,8 @@ export interface FirmwareUpdatePlanArtifact {
|
|
|
10
10
|
url: string;
|
|
11
11
|
container: 'raw' | 'zip';
|
|
12
12
|
logicalName?: string;
|
|
13
|
-
expectedSize
|
|
14
|
-
expectedSha256
|
|
13
|
+
expectedSize?: number;
|
|
14
|
+
expectedSha256?: string;
|
|
15
15
|
targetVersion?: string;
|
|
16
16
|
}
|
|
17
17
|
export interface FirmwareUpdatePlan {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firmwareUpdatePlan.d.ts","sourceRoot":"","sources":["../../../src/types/api/firmwareUpdatePlan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,MAAM,8BAA8B,GACtC,UAAU,GACV,KAAK,GACL,YAAY,GACZ,UAAU,GACV,WAAW,GACX,gBAAgB,CAAC;AAErB,MAAM,MAAM,wBAAwB,GAAG,UAAU,GAAG,KAAK,GAAG,YAAY,GAAG,sBAAsB,CAAC;AAElG,MAAM,MAAM,6BAA6B,GAAG,UAAU,GAAG,KAAK,GAAG,YAAY,GAAG,UAAU,CAAC;AAE3F,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,8BAA8B,CAAC;IACrC,MAAM,EAAE,wBAAwB,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,KAAK,GAAG,KAAK,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"firmwareUpdatePlan.d.ts","sourceRoot":"","sources":["../../../src/types/api/firmwareUpdatePlan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,MAAM,8BAA8B,GACtC,UAAU,GACV,KAAK,GACL,YAAY,GACZ,UAAU,GACV,WAAW,GACX,gBAAgB,CAAC;AAErB,MAAM,MAAM,wBAAwB,GAAG,UAAU,GAAG,KAAK,GAAG,YAAY,GAAG,sBAAsB,CAAC;AAElG,MAAM,MAAM,6BAA6B,GAAG,UAAU,GAAG,KAAK,GAAG,YAAY,GAAG,UAAU,CAAC;AAE3F,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,8BAA8B,CAAC;IACrC,MAAM,EAAE,wBAAwB,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,KAAK,GAAG,KAAK,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,CAAC,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,aAAa,CAAC;IAC5B,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,WAAW,CAAC;IAC7D,SAAS,EAAE,0BAA0B,EAAE,CAAC;IACxC,eAAe,EAAE,wBAAwB,EAAE,CAAC;CAC7C"}
|
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.101",
|
|
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.101",
|
|
29
|
+
"@onekeyfe/hd-transport": "1.2.0-alpha.101",
|
|
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": "f24ac3a93c71dc3814e62c5e6bcf6a4c757e0d44"
|
|
48
48
|
}
|
|
@@ -328,8 +328,8 @@ export const assertFirmwareUpdatePlan = (value: unknown): FirmwareUpdatePlan =>
|
|
|
328
328
|
}
|
|
329
329
|
assertExactKeys(
|
|
330
330
|
artifact,
|
|
331
|
-
['artifactId', 'role', 'target', 'url', 'container'
|
|
332
|
-
['logicalName', 'targetVersion']
|
|
331
|
+
['artifactId', 'role', 'target', 'url', 'container'],
|
|
332
|
+
['logicalName', 'expectedSize', 'expectedSha256', 'targetVersion']
|
|
333
333
|
);
|
|
334
334
|
const artifactId = assertBoundedString(artifact.artifactId, 'artifact id', 160);
|
|
335
335
|
if (artifactIds.has(artifactId)) {
|
|
@@ -348,15 +348,25 @@ export const assertFirmwareUpdatePlan = (value: unknown): FirmwareUpdatePlan =>
|
|
|
348
348
|
if (artifact.logicalName !== undefined) {
|
|
349
349
|
assertBoundedString(artifact.logicalName, 'logical name', 256);
|
|
350
350
|
}
|
|
351
|
-
if (
|
|
351
|
+
if (
|
|
352
|
+
artifact.expectedSize !== undefined &&
|
|
353
|
+
(!Number.isSafeInteger(artifact.expectedSize) || (artifact.expectedSize as number) <= 0)
|
|
354
|
+
) {
|
|
352
355
|
return planError('Firmware update plan artifact size is invalid');
|
|
353
356
|
}
|
|
354
357
|
if (
|
|
355
|
-
|
|
356
|
-
|
|
358
|
+
artifact.expectedSha256 !== undefined &&
|
|
359
|
+
(typeof artifact.expectedSha256 !== 'string' ||
|
|
360
|
+
!/^[a-f0-9]{64}$/u.test(artifact.expectedSha256))
|
|
357
361
|
) {
|
|
358
362
|
return planError('Firmware update plan artifact digest is invalid');
|
|
359
363
|
}
|
|
364
|
+
if (
|
|
365
|
+
plan.executor === 'v4' &&
|
|
366
|
+
(artifact.expectedSize === undefined || artifact.expectedSha256 === undefined)
|
|
367
|
+
) {
|
|
368
|
+
return planError('Protocol V2 firmware artifact integrity metadata is invalid');
|
|
369
|
+
}
|
|
360
370
|
if (artifact.targetVersion !== undefined) {
|
|
361
371
|
assertBoundedString(artifact.targetVersion, 'target version', 64);
|
|
362
372
|
}
|
|
@@ -822,13 +832,10 @@ export const buildFirmwareUpdatePlan = ({
|
|
|
822
832
|
} else {
|
|
823
833
|
if (isUpgrade(bootloader) || forcedTargets.has('bootloader')) {
|
|
824
834
|
const bootloaderRelease = asRelease(bootloader);
|
|
825
|
-
const integrity =
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
},
|
|
830
|
-
'Bootloader release'
|
|
831
|
-
);
|
|
835
|
+
const integrity = asIntegrity({
|
|
836
|
+
size: bootloaderRelease?.bootloaderExpectedSize,
|
|
837
|
+
sha256: bootloaderRelease?.bootloaderFingerprint,
|
|
838
|
+
});
|
|
832
839
|
artifacts.push({
|
|
833
840
|
artifactId: 'bootloader',
|
|
834
841
|
role: 'bootloader',
|
|
@@ -850,10 +857,10 @@ export const buildFirmwareUpdatePlan = ({
|
|
|
850
857
|
});
|
|
851
858
|
}
|
|
852
859
|
if (shouldUpdateFirmware) {
|
|
853
|
-
const integrity =
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
);
|
|
860
|
+
const integrity = asIntegrity({
|
|
861
|
+
size: firmwareRelease.expectedSize,
|
|
862
|
+
sha256: firmwareRelease.fingerprint,
|
|
863
|
+
});
|
|
857
864
|
artifacts.push({
|
|
858
865
|
artifactId: 'firmware',
|
|
859
866
|
role: 'firmware',
|
|
@@ -873,19 +880,16 @@ export const buildFirmwareUpdatePlan = ({
|
|
|
873
880
|
platform,
|
|
874
881
|
});
|
|
875
882
|
if (resourceUrl) {
|
|
876
|
-
const integrity =
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
},
|
|
887
|
-
'Legacy resource archive'
|
|
888
|
-
);
|
|
883
|
+
const integrity = asIntegrity({
|
|
884
|
+
size:
|
|
885
|
+
resourceUrl === asString(firmwareRelease.fullResource)
|
|
886
|
+
? firmwareRelease.fullResourceExpectedSize
|
|
887
|
+
: firmwareRelease.resourceExpectedSize,
|
|
888
|
+
sha256:
|
|
889
|
+
resourceUrl === asString(firmwareRelease.fullResource)
|
|
890
|
+
? firmwareRelease.fullResourceFingerprint
|
|
891
|
+
: firmwareRelease.resourceFingerprint,
|
|
892
|
+
});
|
|
889
893
|
artifacts.push({
|
|
890
894
|
artifactId: 'resource',
|
|
891
895
|
role: 'resource',
|
|
@@ -899,13 +903,10 @@ export const buildFirmwareUpdatePlan = ({
|
|
|
899
903
|
}
|
|
900
904
|
if (isUpgrade(ble) || isRecoveryInstall(ble) || forcedTargets.has('ble')) {
|
|
901
905
|
const bleRelease = asRelease(ble);
|
|
902
|
-
const integrity =
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
},
|
|
907
|
-
'BLE release'
|
|
908
|
-
);
|
|
906
|
+
const integrity = asIntegrity({
|
|
907
|
+
size: bleRelease?.expectedSize,
|
|
908
|
+
sha256: bleRelease?.fingerprintWeb ?? bleRelease?.fingerprint,
|
|
909
|
+
});
|
|
909
910
|
artifacts.push({
|
|
910
911
|
artifactId: 'ble',
|
|
911
912
|
role: 'ble',
|
|
@@ -20,8 +20,8 @@ export interface FirmwareUpdatePlanArtifact {
|
|
|
20
20
|
url: string;
|
|
21
21
|
container: 'raw' | 'zip';
|
|
22
22
|
logicalName?: string;
|
|
23
|
-
expectedSize
|
|
24
|
-
expectedSha256
|
|
23
|
+
expectedSize?: number;
|
|
24
|
+
expectedSha256?: string;
|
|
25
25
|
targetVersion?: string;
|
|
26
26
|
}
|
|
27
27
|
|