@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.
@@ -376,62 +376,66 @@ describe('buildFirmwareUpdatePlan', () => {
376
376
  }
377
377
  );
378
378
 
379
- test('rejects a legacy resource archive without complete integrity metadata', () => {
380
- expectFirmwarePlanInvalid(
381
- () =>
382
- buildFirmwareUpdatePlan(
383
- createLegacyForceInput(['resource'], {
384
- url: 'https://firmware.onekey.so/pro/firmware.bin',
385
- resource: 'https://firmware.onekey.so/pro/resource.zip',
386
- resourceExpectedSize: 4096,
387
- })
388
- ),
389
- 'integrity metadata is invalid'
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
- test.each(['firmware', 'ble', 'bootloader'] as const)(
394
- 'rejects a remote legacy %s artifact without complete integrity metadata',
395
- target => {
396
- expectFirmwarePlanInvalid(
397
- () =>
398
- buildFirmwareUpdatePlan({
399
- features: createFeatures({ deviceType: EDeviceType.Classic1s }),
400
- firmwareType: EFirmwareType.Universal,
401
- platform: 'desktop',
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,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,kBAkKH,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,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: number;
1259
- expectedSha256: string;
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', 'expectedSize', 'expectedSha256'], ['logicalName', 'targetVersion']);
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 (!Number.isSafeInteger(artifact.expectedSize) || artifact.expectedSize <= 0) {
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 (typeof artifact.expectedSha256 !== 'string' ||
757
- !/^[a-f0-9]{64}$/u.test(artifact.expectedSha256)) {
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 = requireArtifactIntegrity({
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
- }, 'Bootloader release');
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 = requireArtifactIntegrity({ size: firmwareRelease.expectedSize, sha256: firmwareRelease.fingerprint }, 'Firmware release');
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 = requireArtifactIntegrity({
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
- }, 'Legacy resource archive');
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 = requireArtifactIntegrity({
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
- }, 'BLE release');
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: number;
14
- expectedSha256: string;
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;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,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"}
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.100",
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.100",
29
- "@onekeyfe/hd-transport": "1.2.0-alpha.100",
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": "4e70f0a01da0c3c2dab687b8c4bf4f18cf4ad0c0"
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', 'expectedSize', 'expectedSha256'],
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 (!Number.isSafeInteger(artifact.expectedSize) || (artifact.expectedSize as number) <= 0) {
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
- typeof artifact.expectedSha256 !== 'string' ||
356
- !/^[a-f0-9]{64}$/u.test(artifact.expectedSha256)
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 = requireArtifactIntegrity(
826
- {
827
- size: bootloaderRelease?.bootloaderExpectedSize,
828
- sha256: bootloaderRelease?.bootloaderFingerprint,
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 = requireArtifactIntegrity(
854
- { size: firmwareRelease.expectedSize, sha256: firmwareRelease.fingerprint },
855
- 'Firmware release'
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 = requireArtifactIntegrity(
877
- {
878
- size:
879
- resourceUrl === asString(firmwareRelease.fullResource)
880
- ? firmwareRelease.fullResourceExpectedSize
881
- : firmwareRelease.resourceExpectedSize,
882
- sha256:
883
- resourceUrl === asString(firmwareRelease.fullResource)
884
- ? firmwareRelease.fullResourceFingerprint
885
- : firmwareRelease.resourceFingerprint,
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 = requireArtifactIntegrity(
903
- {
904
- size: bleRelease?.expectedSize,
905
- sha256: bleRelease?.fingerprintWeb ?? bleRelease?.fingerprint,
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: number;
24
- expectedSha256: string;
23
+ expectedSize?: number;
24
+ expectedSha256?: string;
25
25
  targetVersion?: string;
26
26
  }
27
27