@onekeyfe/hd-core 1.2.0-alpha.81 → 1.2.0-alpha.84

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__/check-all-firmware-release-protocol-v2.test.ts +266 -0
  2. package/__tests__/check-firmware-release-protocol-v2.test.ts +36 -0
  3. package/__tests__/protocol-v2.test.ts +181 -2
  4. package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
  5. package/dist/api/CheckBLEFirmwareRelease.d.ts +1 -1
  6. package/dist/api/CheckBLEFirmwareRelease.d.ts.map +1 -1
  7. package/dist/api/CheckBootloaderRelease.d.ts +1 -1
  8. package/dist/api/CheckBootloaderRelease.d.ts.map +1 -1
  9. package/dist/api/CheckFirmwareRelease.d.ts +1 -1
  10. package/dist/api/CheckFirmwareRelease.d.ts.map +1 -1
  11. package/dist/api/FirmwareUpdateV4.d.ts +1 -0
  12. package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
  13. package/dist/api/firmware/FirmwareUpdatePlan.d.ts +33 -0
  14. package/dist/api/firmware/FirmwareUpdatePlan.d.ts.map +1 -1
  15. package/dist/api/firmware/protocolV2Release.d.ts.map +1 -1
  16. package/dist/index.d.ts +4 -3
  17. package/dist/index.js +202 -66
  18. package/dist/types/api/checkAllFirmwareRelease.d.ts +1 -0
  19. package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
  20. package/dist/types/api/checkBLEFirmwareRelease.d.ts +1 -1
  21. package/dist/types/api/checkBLEFirmwareRelease.d.ts.map +1 -1
  22. package/dist/types/api/checkBootloaderRelease.d.ts +1 -1
  23. package/dist/types/api/checkBootloaderRelease.d.ts.map +1 -1
  24. package/dist/types/api/checkFirmwareRelease.d.ts +1 -1
  25. package/dist/types/api/checkFirmwareRelease.d.ts.map +1 -1
  26. package/package.json +4 -4
  27. package/src/api/CheckAllFirmwareRelease.ts +76 -5
  28. package/src/api/CheckBLEFirmwareRelease.ts +4 -10
  29. package/src/api/CheckBootloaderRelease.ts +1 -8
  30. package/src/api/CheckFirmwareRelease.ts +6 -12
  31. package/src/api/FirmwareUpdateV4.ts +61 -21
  32. package/src/api/firmware/FirmwareUpdatePlan.ts +154 -37
  33. package/src/api/firmware/protocolV2Release.ts +2 -0
  34. package/src/types/api/checkAllFirmwareRelease.ts +1 -0
  35. package/src/types/api/checkBLEFirmwareRelease.ts +1 -1
  36. package/src/types/api/checkBootloaderRelease.ts +1 -1
  37. package/src/types/api/checkFirmwareRelease.ts +1 -1
  38. package/src/utils/deviceFeaturesUtils.ts +2 -2
@@ -1,7 +1,30 @@
1
1
  import { EFirmwareType } from '@onekeyfe/hd-shared';
2
+ import type { FirmwareUpdateV4Target } from '../../types/api/firmwareUpdate';
2
3
  import type { FirmwareUpdatePlan, FirmwareUpdatePlanForceTarget, FirmwareUpdatePlanTarget } from '../../types/api/firmwareUpdatePlan';
3
4
  import type { Features } from '../../types';
4
5
  type FirmwareUpdatePlatform = 'native' | 'desktop' | 'ext' | 'web' | 'web-embed';
6
+ type ReleaseRecord = {
7
+ url?: unknown;
8
+ webUpdate?: unknown;
9
+ resource?: unknown;
10
+ fullResource?: unknown;
11
+ fullResourceRange?: unknown;
12
+ bootloaderResource?: unknown;
13
+ version?: unknown;
14
+ components?: unknown;
15
+ installOrder?: unknown;
16
+ resourceBundles?: unknown;
17
+ fingerprint?: unknown;
18
+ fingerprintWeb?: unknown;
19
+ expectedSize?: unknown;
20
+ resourceFingerprint?: unknown;
21
+ resourceExpectedSize?: unknown;
22
+ fullResourceFingerprint?: unknown;
23
+ fullResourceExpectedSize?: unknown;
24
+ bootloaderFingerprint?: unknown;
25
+ bootloaderExpectedSize?: unknown;
26
+ bootloaderVersion?: unknown;
27
+ };
5
28
  type ReleaseSelection = {
6
29
  shouldUpdate?: boolean;
7
30
  status?: unknown;
@@ -9,9 +32,19 @@ type ReleaseSelection = {
9
32
  };
10
33
  export declare const digestFirmwareUpdateContract: (value: unknown) => string;
11
34
  export declare const validateFirmwareUpdatePlanForceTargets: (value: unknown) => FirmwareUpdatePlanForceTarget[];
35
+ export declare const validateProtocolV2FirmwareUpdateTargets: (value: unknown) => FirmwareUpdateV4Target[];
12
36
  export declare const FIRMWARE_UPDATE_PLAN_TARGETS: Set<FirmwareUpdatePlanTarget>;
13
37
  export declare const FIRMWARE_UPDATE_PLAN_ROLES: Set<string>;
14
38
  export declare const assertFirmwareUpdatePlan: (value: unknown) => FirmwareUpdatePlan;
39
+ export declare const buildProtocolV2FirmwareUpdatePlan: ({ features, firmwareType, platform, release, targetsToUpdate, forceUpdateTargets, resourceArchiveAvailable, }: {
40
+ features: Features;
41
+ firmwareType: EFirmwareType;
42
+ platform: FirmwareUpdatePlatform;
43
+ release: ReleaseRecord | undefined;
44
+ targetsToUpdate: readonly FirmwareUpdateV4Target[];
45
+ forceUpdateTargets?: FirmwareUpdatePlanForceTarget[] | undefined;
46
+ resourceArchiveAvailable: boolean;
47
+ }) => FirmwareUpdatePlan;
15
48
  export declare const buildFirmwareUpdatePlan: ({ features, firmwareType, platform, firmware, ble, bootloader, forceUpdateTargets, }: {
16
49
  features: Features;
17
50
  firmwareType: EFirmwareType;
@@ -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,EACV,kBAAkB,EAElB,6BAA6B,EAC7B,wBAAwB,EACzB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,KAAK,sBAAsB,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,WAAW,CAAC;AAyBjF,KAAK,gBAAgB,GAAG;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AA0GF,eAAO,MAAM,4BAA4B,UAAW,OAAO,KAAG,MAG3D,CAAC;AAkBJ,eAAO,MAAM,sCAAsC,UAC1C,OAAO,KACb,6BAA6B,EAa/B,CAAC;AAuBF,eAAO,MAAM,4BAA4B,+BAavC,CAAC;AAEH,eAAO,MAAM,0BAA0B,aAOrC,CAAC;AAYH,eAAO,MAAM,wBAAwB,UAAW,OAAO,KAAG,kBAyHzD,CAAC;AA4NF,eAAO,MAAM,uBAAuB;cASxB,QAAQ;kBACJ,aAAa;cACjB,sBAAsB;cACtB,gBAAgB;SACrB,gBAAgB;;;MAGnB,kBAsKH,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,MAAM,aAAa,CAAC;AAE5C,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,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,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,kBAyHzD,CAAC;AA0RF,eAAO,MAAM,iCAAiC;cASlC,QAAQ;kBACJ,aAAa;cACjB,sBAAsB;aACvB,aAAa,GAAG,SAAS;qBACjB,SAAS,sBAAsB,EAAE;;8BAExB,OAAO;MAC/B,kBA2CH,CAAC;AAEF,eAAO,MAAM,uBAAuB;cASxB,QAAQ;kBACJ,aAAa;cACjB,sBAAsB;cACtB,gBAAgB;SACrB,gBAAgB;;;MAGnB,kBAyIH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"protocolV2Release.d.ts","sourceRoot":"","sources":["../../../src/api/firmware/protocolV2Release.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA6B,MAAM,qBAAqB,CAAC;AAI/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,oBAAoB,EACpB,kCAAkC,EACnC,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,0BAA0B,EAC1B,8BAA8B,EAE/B,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAEhF,eAAO,MAAM,iCAAiC,EAAE,SAAS,kCAAkC,EAO1F,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,SAAS,kCAAkC,EAEhF,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,SAAS,kCAAkC,EAEvF,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG;QACrC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,GAAG;YACtD,UAAU,EAAE,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC;SAChD,CAAC;KACH,CAAC;IACF,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,aAAa,CAAC;IAC5B,OAAO,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC3C,CAAC;AAEF,wBAAsB,oCAAoC,CAAC,EACzD,MAAM,EACN,YAAY,EAAE,iBAAiB,EAC/B,iBAAyB,EACzB,UAAU,GACX,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,gCAAgC,CAAC,CA4B5C;AAED,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,6BAA6B,EACnC,gBAAgB,EAAE,SAAS,kCAAkC,EAAE,GAC9D,6BAA6B,CAiC/B;AAED,wBAAgB,+BAA+B,CAAC,EAC9C,IAAI,EACJ,KAAK,EACL,OAAO,GACR,EAAE;IACD,IAAI,EAAE,6BAA6B,CAAC;IACpC,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,0BAA0B,CAAC,SAAS,CAAC,CAAC;CAChD,GAAG,0BAA0B,CAQ7B;AAED,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,6BAA6B,EACnC,eAAe,EAAE,kCAAkC,GAClD,8BAA8B,GAAG,SAAS,CAmB5C"}
1
+ {"version":3,"file":"protocolV2Release.d.ts","sourceRoot":"","sources":["../../../src/api/firmware/protocolV2Release.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA6B,MAAM,qBAAqB,CAAC;AAI/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,oBAAoB,EACpB,kCAAkC,EACnC,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,0BAA0B,EAC1B,8BAA8B,EAE/B,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAEhF,eAAO,MAAM,iCAAiC,EAAE,SAAS,kCAAkC,EAO1F,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,SAAS,kCAAkC,EAEhF,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,SAAS,kCAAkC,EAEvF,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG;QACrC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,GAAG;YACtD,UAAU,EAAE,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC;SAChD,CAAC;KACH,CAAC;IACF,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,aAAa,CAAC;IAC5B,OAAO,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC3C,CAAC;AAEF,wBAAsB,oCAAoC,CAAC,EACzD,MAAM,EACN,YAAY,EAAE,iBAAiB,EAC/B,iBAAyB,EACzB,UAAU,GACX,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,gCAAgC,CAAC,CA4B5C;AAED,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,6BAA6B,EACnC,gBAAgB,EAAE,SAAS,kCAAkC,EAAE,GAC9D,6BAA6B,CAiC/B;AAED,wBAAgB,+BAA+B,CAAC,EAC9C,IAAI,EACJ,KAAK,EACL,OAAO,GACR,EAAE;IACD,IAAI,EAAE,6BAA6B,CAAC;IACpC,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,0BAA0B,CAAC,SAAS,CAAC,CAAC;CAChD,GAAG,0BAA0B,CAU7B;AAED,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,6BAA6B,EACnC,eAAe,EAAE,kCAAkC,GAClD,8BAA8B,GAAG,SAAS,CAmB5C"}
package/dist/index.d.ts CHANGED
@@ -1542,10 +1542,11 @@ type CheckAllFirmwareReleaseParams = {
1542
1542
  firmwareType?: EFirmwareType;
1543
1543
  platform?: 'native' | 'desktop' | 'ext' | 'web' | 'web-embed';
1544
1544
  forceUpdateTargets?: FirmwareUpdatePlanForceTarget[];
1545
+ protocolV2ForceUpdateTargets?: FirmwareUpdateV4Target[];
1545
1546
  };
1546
1547
  declare function checkAllFirmwareRelease(connectId?: string, params?: CommonParams & CheckAllFirmwareReleaseParams): Response<AllFirmwareRelease>;
1547
1548
 
1548
- type CheckBootloaderReleaseResponse = FirmwareReleaseCheckResult;
1549
+ type CheckBootloaderReleaseResponse = FirmwareReleaseCheckResult | null;
1549
1550
  type CheckBootloaderReleaseParams = {
1550
1551
  willUpdateFirmwareVersion?: string;
1551
1552
  firmwareType?: EFirmwareType;
@@ -1622,9 +1623,9 @@ declare function openWalletSession(connectId: string, params: CommonParams & Ope
1622
1623
  type CheckFirmwareReleaseParams = {
1623
1624
  firmwareType?: EFirmwareType;
1624
1625
  };
1625
- declare function checkFirmwareRelease(connectId?: string, params?: CheckFirmwareReleaseParams): Response<FirmwareReleaseCheckResult>;
1626
+ declare function checkFirmwareRelease(connectId?: string, params?: CheckFirmwareReleaseParams): Response<FirmwareReleaseCheckResult | null>;
1626
1627
 
1627
- declare function checkBLEFirmwareRelease(connectId?: string): Response<FirmwareReleaseCheckResult>;
1628
+ declare function checkBLEFirmwareRelease(connectId?: string): Response<FirmwareReleaseCheckResult | null>;
1628
1629
 
1629
1630
  interface FirmwareUpdateCapabilities {
1630
1631
  planSchemaVersion: 2;
package/dist/index.js CHANGED
@@ -522,6 +522,10 @@ const PROTOCOL_V2_TARGETS = {
522
522
  SE03: 'se03',
523
523
  SE04: 'se04',
524
524
  };
525
+ const PROTOCOL_V2_FIRMWARE_UPDATE_TARGETS = new Set([
526
+ ...Object.values(PROTOCOL_V2_TARGETS),
527
+ 'resource',
528
+ ]);
525
529
  const asRecord = (value) => value && typeof value === 'object' && !Array.isArray(value)
526
530
  ? value
527
531
  : undefined;
@@ -609,6 +613,18 @@ const validateFirmwareUpdatePlanForceTargets = (value) => {
609
613
  }
610
614
  return [...value];
611
615
  };
616
+ const validateProtocolV2FirmwareUpdateTargets = (value) => {
617
+ if (value === undefined) {
618
+ return [];
619
+ }
620
+ if (!Array.isArray(value) ||
621
+ value.length > PROTOCOL_V2_FIRMWARE_UPDATE_TARGETS.size ||
622
+ value.some(target => !PROTOCOL_V2_FIRMWARE_UPDATE_TARGETS.has(target)) ||
623
+ new Set(value).size !== value.length) {
624
+ return planError('Protocol V2 firmware update targets are invalid');
625
+ }
626
+ return [...value];
627
+ };
612
628
  const assertExactKeys = (value, required, optional = []) => {
613
629
  const allowed = new Set([...required, ...optional]);
614
630
  if (required.some(key => !Object.prototype.hasOwnProperty.call(value, key)) ||
@@ -773,7 +789,7 @@ const selectResourceUrl = ({ release, features, platform, }) => {
773
789
  };
774
790
  const getExecutor = (features) => {
775
791
  const deviceType = getDeviceType(features);
776
- if (deviceType === hdShared.EDeviceType.Pro2) {
792
+ if (deviceType === hdShared.EDeviceType.Pro2 || deviceType === hdShared.EDeviceType.Neo) {
777
793
  return 'v4';
778
794
  }
779
795
  if (deviceType === hdShared.EDeviceType.Pro &&
@@ -782,7 +798,7 @@ const getExecutor = (features) => {
782
798
  }
783
799
  return 'v2';
784
800
  };
785
- const buildProtocolV2Artifacts = (release, { includeComponents = true, includeResources = true, } = {}) => {
801
+ const buildProtocolV2Artifacts = (release, { includeComponents = true, includeResources = true, componentTargets: selectedComponentTargets, } = {}) => {
786
802
  var _a;
787
803
  const components = asRecord(release.components);
788
804
  if (includeComponents && !components) {
@@ -794,23 +810,32 @@ const buildProtocolV2Artifacts = (release, { includeComponents = true, includeRe
794
810
  const componentKeys = includeComponents && components
795
811
  ? [...installOrder, ...Object.keys(components).filter(key => !installOrder.includes(key))]
796
812
  : [];
813
+ const selectedComponentKeys = selectedComponentTargets
814
+ ? componentKeys.filter(key => {
815
+ var _a;
816
+ const component = asRecord(components === null || components === void 0 ? void 0 : components[key]);
817
+ const targetName = (_a = asString(component === null || component === void 0 ? void 0 : component.target)) === null || _a === void 0 ? void 0 : _a.toUpperCase();
818
+ const target = targetName ? PROTOCOL_V2_TARGETS[targetName] : undefined;
819
+ return !!target && selectedComponentTargets.has(target);
820
+ })
821
+ : componentKeys;
797
822
  const artifacts = [];
798
823
  const targets = [];
799
- const componentTargets = new Set();
800
- for (const key of componentKeys) {
824
+ const componentTargetSet = new Set();
825
+ for (const key of selectedComponentKeys) {
801
826
  const component = asRecord(components === null || components === void 0 ? void 0 : components[key]);
802
827
  const targetName = (_a = asString(component === null || component === void 0 ? void 0 : component.target)) === null || _a === void 0 ? void 0 : _a.toUpperCase();
828
+ const target = targetName ? PROTOCOL_V2_TARGETS[targetName] : undefined;
803
829
  if (targetName === 'ROMLOADER') {
804
830
  throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, 'Protocol V2 ROMLOADER requires its dedicated loader flow', { firmwareUpdateCode: 'FirmwarePlanInvalid' });
805
831
  }
806
- const target = targetName ? PROTOCOL_V2_TARGETS[targetName] : undefined;
807
832
  if (!component || !target) {
808
833
  throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, `Protocol V2 component ${key} has an unsupported target`, { firmwareUpdateCode: 'FirmwarePlanInvalid' });
809
834
  }
810
- if (componentTargets.has(target)) {
835
+ if (componentTargetSet.has(target)) {
811
836
  throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, `Protocol V2 component ${key} duplicates target ${target}`, { firmwareUpdateCode: 'FirmwarePlanInvalid' });
812
837
  }
813
- componentTargets.add(target);
838
+ componentTargetSet.add(target);
814
839
  artifacts.push(Object.assign(Object.assign({ artifactId: `component:${target}`, role: 'component', target, url: assertArtifactUrl(component.url, `Protocol V2 component ${key}`), container: 'raw', logicalName: key }, asIntegrity({
815
840
  size: component.expectedSize,
816
841
  sha256: component.fingerprint,
@@ -865,6 +890,63 @@ const assertForcedTargetsRepresented = ({ executor, forcedTargets, artifacts, ta
865
890
  }
866
891
  }
867
892
  };
893
+ const finalizeFirmwareUpdatePlan = ({ features, firmwareType, platform, artifacts, targetsToUpdate, }) => {
894
+ const executor = getExecutor(features);
895
+ const bootloaderMode = resolveDeviceBootloaderMode(features);
896
+ const reportedIdentity = getDeviceUUID(features);
897
+ const deviceIdentity = reportedIdentity === 'unavailable' ? '' : reportedIdentity;
898
+ if (artifacts.length > 0 &&
899
+ (platform === 'native' || platform === 'desktop') &&
900
+ !deviceIdentity &&
901
+ !(bootloaderMode && executor === 'v2')) {
902
+ throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, 'Prepared firmware update requires a stable device identity', { firmwareUpdateCode: 'FirmwarePlanInvalid' });
903
+ }
904
+ const planWithoutDigest = {
905
+ schemaVersion: 2,
906
+ executor,
907
+ deviceIdentity: deviceIdentity || 'unavailable',
908
+ deviceModel: String(getDeviceType(features)),
909
+ firmwareType,
910
+ platform,
911
+ artifacts,
912
+ targetsToUpdate,
913
+ };
914
+ return assertFirmwareUpdatePlan(Object.assign(Object.assign({}, planWithoutDigest), { planDigest: digestFirmwareUpdatePlan(planWithoutDigest) }));
915
+ };
916
+ const buildProtocolV2FirmwareUpdatePlan = ({ features, firmwareType, platform, release, targetsToUpdate, forceUpdateTargets, resourceArchiveAvailable, }) => {
917
+ const validatedForceTargets = validateFirmwareUpdatePlanForceTargets(forceUpdateTargets);
918
+ if (validatedForceTargets.some(target => target === 'ble' || target === 'bootloader')) {
919
+ planError('Protocol V2 does not support forced BLE or legacy bootloader targets');
920
+ }
921
+ const requestedComponentTargets = new Set(targetsToUpdate.filter(target => target !== 'resource'));
922
+ if (getDeviceType(features) === hdShared.EDeviceType.Neo &&
923
+ (requestedComponentTargets.has('se03') || requestedComponentTargets.has('se04'))) {
924
+ planError('Neo does not support Protocol V2 targets se03 or se04');
925
+ }
926
+ const protocolV2 = buildProtocolV2Artifacts(release !== null && release !== void 0 ? release : {}, {
927
+ includeComponents: requestedComponentTargets.size > 0,
928
+ includeResources: false,
929
+ componentTargets: requestedComponentTargets,
930
+ });
931
+ const representedTargets = new Set(protocolV2.targets);
932
+ const missingTarget = Array.from(requestedComponentTargets).find(target => !representedTargets.has(target));
933
+ if (missingTarget) {
934
+ planError(`Protocol V2 release does not contain requested target ${missingTarget}`);
935
+ }
936
+ if (validatedForceTargets.includes('firmware') && protocolV2.targets.length === 0) {
937
+ planError('Forced firmware update target firmware is not represented by the plan');
938
+ }
939
+ if (validatedForceTargets.includes('resource') && !resourceArchiveAvailable) {
940
+ planError('Forced firmware update target resource has no Protocol V2 resource archive');
941
+ }
942
+ return finalizeFirmwareUpdatePlan({
943
+ features,
944
+ firmwareType,
945
+ platform,
946
+ artifacts: protocolV2.artifacts,
947
+ targetsToUpdate: protocolV2.targets,
948
+ });
949
+ };
868
950
  const buildFirmwareUpdatePlan = ({ features, firmwareType, platform, firmware, ble, bootloader, forceUpdateTargets, }) => {
869
951
  var _a, _b, _c, _d, _e, _f, _g;
870
952
  const executor = getExecutor(features);
@@ -951,25 +1033,13 @@ const buildFirmwareUpdatePlan = ({ features, firmwareType, platform, firmware, b
951
1033
  artifacts,
952
1034
  targetsToUpdate,
953
1035
  });
954
- const reportedIdentity = getDeviceUUID(features);
955
- const deviceIdentity = reportedIdentity === 'unavailable' ? '' : reportedIdentity;
956
- if (artifacts.length > 0 &&
957
- (platform === 'native' || platform === 'desktop') &&
958
- !deviceIdentity &&
959
- !(bootloaderMode && executor === 'v2')) {
960
- throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, 'Prepared firmware update requires a stable device identity', { firmwareUpdateCode: 'FirmwarePlanInvalid' });
961
- }
962
- const planWithoutDigest = {
963
- schemaVersion: 2,
964
- executor,
965
- deviceIdentity: deviceIdentity || 'unavailable',
966
- deviceModel: String(getDeviceType(features)),
1036
+ return finalizeFirmwareUpdatePlan({
1037
+ features,
967
1038
  firmwareType,
968
1039
  platform,
969
1040
  artifacts,
970
1041
  targetsToUpdate,
971
- };
972
- return assertFirmwareUpdatePlan(Object.assign(Object.assign({}, planWithoutDigest), { planDigest: digestFirmwareUpdatePlan(planWithoutDigest) }));
1042
+ });
973
1043
  };
974
1044
 
975
1045
  const preparedPlanError = (message) => {
@@ -41925,7 +41995,7 @@ const getFirmwareUpdateField = ({ features, updateType, targetVersion, firmwareT
41925
41995
  if (deviceType === hdShared.EDeviceType.Pro) {
41926
41996
  return latestFirmwareField;
41927
41997
  }
41928
- if (deviceType === hdShared.EDeviceType.Pro2) {
41998
+ if (deviceType === hdShared.EDeviceType.Pro2 || deviceType === hdShared.EDeviceType.Neo) {
41929
41999
  return 'firmware-v1';
41930
42000
  }
41931
42001
  return 'firmware';
@@ -41957,7 +42027,7 @@ const getFirmwareUpdateFieldArray = (features, updateType) => {
41957
42027
  if (deviceType === 'pro') {
41958
42028
  return ['firmware-v8'];
41959
42029
  }
41960
- if (deviceType === 'pro2') {
42030
+ if (deviceType === 'pro2' || deviceType === 'neo') {
41961
42031
  return ['firmware-v1'];
41962
42032
  }
41963
42033
  return ['firmware'];
@@ -47688,9 +47758,11 @@ class CheckAllFirmwareRelease extends BaseMethod {
47688
47758
  });
47689
47759
  }
47690
47760
  runProtocolV2() {
47761
+ var _a;
47691
47762
  return __awaiter(this, void 0, void 0, function* () {
47692
- const { checkFirmwareHash = false, firmwareType: firmwareTypeParam } = this
47693
- .payload;
47763
+ const { checkFirmwareHash = false, firmwareType: firmwareTypeParam, platform, forceUpdateTargets, protocolV2ForceUpdateTargets, } = this.payload;
47764
+ const validatedForceUpdateTargets = validateFirmwareUpdatePlanForceTargets(forceUpdateTargets);
47765
+ const validatedProtocolV2ForceUpdateTargets = validateProtocolV2FirmwareUpdateTargets(protocolV2ForceUpdateTargets);
47694
47766
  const { state, features, firmwareType, release } = yield loadProtocolV2FirmwareReleaseContext({
47695
47767
  device: this.device,
47696
47768
  firmwareType: firmwareTypeParam,
@@ -47709,10 +47781,57 @@ class CheckAllFirmwareRelease extends BaseMethod {
47709
47781
  const resourceSource = DataManager.getProtocolV2ResourceSource(resourceDeviceType);
47710
47782
  const resourceStatus = 'unknown';
47711
47783
  const resourcePreparationRequired = !!resourceSource;
47784
+ const detectedComponentTargets = validatedForceUpdateTargets.includes('firmware')
47785
+ ? plan.components.flatMap(component => component.updateTarget ? [component.updateTarget] : [])
47786
+ : plan.targetsToUpdate;
47787
+ const componentTargetsToUpdate = Array.from(new Set([
47788
+ ...detectedComponentTargets,
47789
+ ...validatedProtocolV2ForceUpdateTargets.filter(target => target !== 'resource'),
47790
+ ]));
47791
+ const forceResourceUpdate = validatedForceUpdateTargets.includes('resource') ||
47792
+ validatedProtocolV2ForceUpdateTargets.includes('resource');
47712
47793
  const targetsToUpdate = Array.from(new Set([
47713
- ...plan.targetsToUpdate,
47714
- ...(resourcePreparationRequired ? ['resource'] : []),
47794
+ ...componentTargetsToUpdate,
47795
+ ...(resourcePreparationRequired || forceResourceUpdate ? ['resource'] : []),
47715
47796
  ]));
47797
+ let firmwareUpdatePlan;
47798
+ try {
47799
+ const shouldBuildFirmwareUpdatePlan = componentTargetsToUpdate.length > 0 ||
47800
+ validatedForceUpdateTargets.some(target => target !== 'resource') ||
47801
+ validatedProtocolV2ForceUpdateTargets.some(target => target !== 'resource') ||
47802
+ (forceResourceUpdate && !resourcePreparationRequired);
47803
+ const requestedPlatform = platform !== null && platform !== void 0 ? platform : 'web';
47804
+ const requiresDeviceIdentity = requestedPlatform === 'native' || requestedPlatform === 'desktop';
47805
+ const canBindPreparedPlan = !requiresDeviceIdentity || !!getDeviceSerialNo(features);
47806
+ if (shouldBuildFirmwareUpdatePlan) {
47807
+ const validatedPlan = buildProtocolV2FirmwareUpdatePlan({
47808
+ features,
47809
+ firmwareType,
47810
+ platform: canBindPreparedPlan ? requestedPlatform : 'web',
47811
+ release,
47812
+ targetsToUpdate,
47813
+ forceUpdateTargets: validatedForceUpdateTargets,
47814
+ resourceArchiveAvailable: resourcePreparationRequired,
47815
+ });
47816
+ firmwareUpdatePlan = canBindPreparedPlan ? validatedPlan : undefined;
47817
+ if (!canBindPreparedPlan) {
47818
+ Log$c.warn('[CheckAllFirmwareRelease] Protocol V2 device identity is unavailable; using the release result without a prepared Plan');
47819
+ }
47820
+ }
47821
+ else {
47822
+ firmwareUpdatePlan = undefined;
47823
+ }
47824
+ }
47825
+ catch (error) {
47826
+ if (validatedForceUpdateTargets.length > 0 ||
47827
+ validatedProtocolV2ForceUpdateTargets.length > 0 ||
47828
+ !(error instanceof hdShared.HardwareError) ||
47829
+ ((_a = error.params) === null || _a === void 0 ? void 0 : _a.firmwareUpdateCode) !== 'FirmwarePlanInvalid') {
47830
+ throw error;
47831
+ }
47832
+ Log$c.warn('[CheckAllFirmwareRelease] Optional Protocol V2 firmware Plan is unavailable; using the release result');
47833
+ firmwareUpdatePlan = undefined;
47834
+ }
47716
47835
  const firmwarePlan = summarizeProtocolV2FirmwareRelease(plan, PROTOCOL_V2_MAIN_FIRMWARE_TARGETS);
47717
47836
  const blePlan = summarizeProtocolV2FirmwareRelease(plan, PROTOCOL_V2_BLE_TARGETS);
47718
47837
  const bootloaderPlan = summarizeProtocolV2FirmwareRelease(plan, PROTOCOL_V2_BOOTLOADER_TARGETS);
@@ -47728,7 +47847,8 @@ class CheckAllFirmwareRelease extends BaseMethod {
47728
47847
  state,
47729
47848
  release: getProtocolV2ComponentReleaseInfo(plan, 'BOOTLOADER'),
47730
47849
  }), features, protocol: 'V2', deviceType: state.identity.deviceType }, plan), { status,
47731
- resourceStatus, resourceArchive: resourceSource, resourcePreparationRequired, hasUpgrade: plan.hasUpgrade || resourcePreparationRequired, targetsToUpdate });
47850
+ resourceStatus, resourceArchive: resourceSource, resourcePreparationRequired, hasUpgrade: targetsToUpdate.length > 0, targetsToUpdate,
47851
+ firmwareUpdatePlan });
47732
47852
  });
47733
47853
  }
47734
47854
  }
@@ -47750,6 +47870,8 @@ class CheckFirmwareRelease extends BaseMethod {
47750
47870
  var _a;
47751
47871
  return __awaiter(this, void 0, void 0, function* () {
47752
47872
  const payload = this.payload;
47873
+ if (!this.device.features)
47874
+ return null;
47753
47875
  if (this.device.isProtocolV2()) {
47754
47876
  const { state, firmwareType, release } = yield loadProtocolV2FirmwareReleaseContext({
47755
47877
  device: this.device,
@@ -47764,13 +47886,10 @@ class CheckFirmwareRelease extends BaseMethod {
47764
47886
  }), PROTOCOL_V2_MAIN_FIRMWARE_TARGETS);
47765
47887
  return toProtocolV2FirmwareReleaseInfo({ plan, state, release });
47766
47888
  }
47767
- if (this.device.features) {
47768
- const deviceFirmwareType = this.device.getCurrentFirmwareType();
47769
- const firmwareType = (_a = payload.firmwareType) !== null && _a !== void 0 ? _a : deviceFirmwareType;
47770
- const releaseInfo = getFirmwareReleaseInfo(this.device.features, firmwareType);
47771
- return releaseInfo;
47772
- }
47773
- throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, 'checkFirmwareRelease requires initialized device features');
47889
+ const deviceFirmwareType = this.device.getCurrentFirmwareType();
47890
+ const firmwareType = (_a = payload.firmwareType) !== null && _a !== void 0 ? _a : deviceFirmwareType;
47891
+ const releaseInfo = getFirmwareReleaseInfo(this.device.features, firmwareType);
47892
+ return releaseInfo;
47774
47893
  });
47775
47894
  }
47776
47895
  }
@@ -47790,6 +47909,8 @@ class CheckBLEFirmwareRelease extends BaseMethod {
47790
47909
  }
47791
47910
  run() {
47792
47911
  return __awaiter(this, void 0, void 0, function* () {
47912
+ if (!this.device.features)
47913
+ return null;
47793
47914
  if (this.device.isProtocolV2()) {
47794
47915
  const { state, firmwareType, release } = yield loadProtocolV2FirmwareReleaseContext({
47795
47916
  device: this.device,
@@ -47807,11 +47928,8 @@ class CheckBLEFirmwareRelease extends BaseMethod {
47807
47928
  release: getProtocolV2ComponentReleaseInfo(plan, 'COPROCESSOR'),
47808
47929
  });
47809
47930
  }
47810
- if (this.device.features) {
47811
- const releaseInfo = getBleFirmwareReleaseInfo(this.device.features);
47812
- return releaseInfo;
47813
- }
47814
- throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, 'checkBLEFirmwareRelease requires initialized device features');
47931
+ const releaseInfo = getBleFirmwareReleaseInfo(this.device.features);
47932
+ return releaseInfo;
47815
47933
  });
47816
47934
  }
47817
47935
  }
@@ -47882,9 +48000,8 @@ class CheckBootloaderRelease extends BaseMethod {
47882
48000
  run() {
47883
48001
  var _a;
47884
48002
  return __awaiter(this, void 0, void 0, function* () {
47885
- if (!this.device.features) {
47886
- throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, 'checkBootloaderRelease requires initialized device features');
47887
- }
48003
+ if (!this.device.features)
48004
+ return null;
47888
48005
  const { features } = this.device;
47889
48006
  const payload = this.payload;
47890
48007
  if (this.device.isProtocolV2()) {
@@ -51536,7 +51653,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
51536
51653
  });
51537
51654
  }
51538
51655
  runProtocolV2() {
51539
- var _a, _b, _c, _d, _e;
51656
+ var _a, _b, _c, _d, _e, _f;
51540
51657
  return __awaiter(this, void 0, void 0, function* () {
51541
51658
  yield this.captureProtocolV2PhysicalIdentity();
51542
51659
  const deviceFeatures = yield this.getProtocolV2DeviceFeatures();
@@ -51564,7 +51681,14 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
51564
51681
  resourceBundles = this.prepareExplicitProtocolV2ResourceFiles();
51565
51682
  fwBinaryMap = this.collectExplicitTargetBinaries();
51566
51683
  bootloaderBinary = this.prepareBootloaderBinary();
51567
- const needsRemoteFirmware = !this.hasExplicitProtocolV2Payload(fwBinaryMap);
51684
+ const explicitInstallItems = this.buildProtocolV2InstallItems({
51685
+ bootloaderBinary,
51686
+ fwBinaryMap,
51687
+ });
51688
+ const missingFirmwareTargets = this.getMissingProtocolV2FirmwareTargets(explicitInstallItems);
51689
+ const needsRemoteFirmware = ((_e = this.params.targetsToUpdate) === null || _e === void 0 ? void 0 : _e.length)
51690
+ ? missingFirmwareTargets.length > 0
51691
+ : !this.hasExplicitProtocolV2Payload(explicitInstallItems);
51568
51692
  if (needsPreparedResources) {
51569
51693
  throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, 'Protocol V2 resource manifest must be prepared by the external firmware host', {
51570
51694
  firmwareUpdateCode: 'FirmwareArtifactsNotPrepared',
@@ -51581,7 +51705,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
51581
51705
  yield DataManager.forceReloadData();
51582
51706
  }
51583
51707
  if (needsRemoteFirmware) {
51584
- const remoteBinaries = yield this.prepareRemoteProtocolV2Binaries(firmwareType, deviceFeatures);
51708
+ const remoteBinaries = yield this.prepareRemoteProtocolV2Binaries(firmwareType, deviceFeatures, explicitInstallItems);
51585
51709
  bootloaderBinary = remoteBinaries.bootloaderBinary;
51586
51710
  fwBinaryMap = remoteBinaries.fwBinaryMap;
51587
51711
  installItems = remoteBinaries.installItems;
@@ -51592,7 +51716,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
51592
51716
  if (typeof err === 'object' &&
51593
51717
  err !== null &&
51594
51718
  'params' in err &&
51595
- ((_e = err.params) === null || _e === void 0 ? void 0 : _e.firmwareUpdateCode) === 'FirmwareArtifactsNotPrepared') {
51719
+ ((_f = err.params) === null || _f === void 0 ? void 0 : _f.firmwareUpdateCode) === 'FirmwareArtifactsNotPrepared') {
51596
51720
  throw err;
51597
51721
  }
51598
51722
  if (err instanceof hdShared.HardwareError && err.errorCode === hdShared.HardwareErrorCode.NetworkError) {
@@ -51907,11 +52031,17 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
51907
52031
  var _a;
51908
52032
  return (_a = this.params.bootloaderBinary) !== null && _a !== void 0 ? _a : null;
51909
52033
  }
51910
- hasExplicitProtocolV2Payload(fwBinaryMap) {
52034
+ hasExplicitProtocolV2Payload(installItems) {
52035
+ var _a;
52036
+ return !!((_a = this.params.resourceFiles) === null || _a === void 0 ? void 0 : _a.length) || installItems.length > 0;
52037
+ }
52038
+ getMissingProtocolV2FirmwareTargets(installItems) {
51911
52039
  var _a;
51912
- return (!!((_a = this.params.resourceFiles) === null || _a === void 0 ? void 0 : _a.length) ||
51913
- !!this.params.bootloaderBinary ||
51914
- fwBinaryMap.length > 0);
52040
+ const preparedTargets = new Set(installItems.flatMap(item => {
52041
+ const target = PROTOCOL_V2_UPDATE_TARGET_BY_TARGET_ID.get(item.targetId);
52042
+ return target ? [target] : [];
52043
+ }));
52044
+ return ((_a = this.params.targetsToUpdate) !== null && _a !== void 0 ? _a : []).filter(target => target !== 'resource' && !preparedTargets.has(target));
51915
52045
  }
51916
52046
  buildProtocolV2InstallItems({ bootloaderBinary, fwBinaryMap, }) {
51917
52047
  const installItems = [];
@@ -51974,7 +52104,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
51974
52104
  return Object.assign(Object.assign({}, target), { binary });
51975
52105
  });
51976
52106
  }
51977
- prepareRemoteProtocolV2Binaries(firmwareType, features) {
52107
+ prepareRemoteProtocolV2Binaries(firmwareType, features, explicitInstallItems = []) {
51978
52108
  var _a, _b;
51979
52109
  return __awaiter(this, void 0, void 0, function* () {
51980
52110
  const release = DataManager.getFirmwareLatestRelease(features, firmwareType);
@@ -51982,6 +52112,10 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
51982
52112
  const fwBinaryMap = [];
51983
52113
  const installItems = [];
51984
52114
  if (!release) {
52115
+ const missingFirmwareTargets = this.getMissingProtocolV2FirmwareTargets(explicitInstallItems);
52116
+ if (missingFirmwareTargets.length > 0) {
52117
+ throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, `Protocol V2 firmware release is unavailable for requested targets: ${missingFirmwareTargets.join(', ')}`);
52118
+ }
51985
52119
  return {
51986
52120
  bootloaderBinary,
51987
52121
  fwBinaryMap,
@@ -51990,6 +52124,8 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
51990
52124
  }
51991
52125
  const entries = this.getRemoteComponentEntries(release);
51992
52126
  const targetsToUpdate = new Set((_a = this.params.targetsToUpdate) !== null && _a !== void 0 ? _a : []);
52127
+ const explicitInstallItemByTargetId = new Map(explicitInstallItems.map(item => [item.targetId, item]));
52128
+ const preparedTargets = new Set();
51993
52129
  for (const [key, component] of entries) {
51994
52130
  const targetName = (_b = component.target) === null || _b === void 0 ? void 0 : _b.toUpperCase();
51995
52131
  const target = PROTOCOL_V2_REMOTE_COMPONENT_TARGETS[targetName];
@@ -51997,27 +52133,27 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
51997
52133
  ? PROTOCOL_V2_UPDATE_TARGET_BY_TARGET_ID.get(target.targetId)
51998
52134
  : undefined;
51999
52135
  if (updateTarget && targetsToUpdate.has(updateTarget)) {
52000
- const remoteBinary = yield this.downloadRemoteProtocolV2Component(key, component);
52001
- if (remoteBinary.kind === 'bootloader') {
52002
- bootloaderBinary = remoteBinary.binary;
52003
- installItems.push({
52004
- fileName: remoteBinary.fileName,
52005
- binary: remoteBinary.binary,
52006
- targetId: remoteBinary.targetId,
52007
- kind: remoteBinary.kind,
52008
- });
52136
+ const explicitInstallItem = explicitInstallItemByTargetId.get(target.targetId);
52137
+ const installItem = explicitInstallItem !== null && explicitInstallItem !== void 0 ? explicitInstallItem : (yield this.downloadRemoteProtocolV2Component(key, component));
52138
+ if (installItem.kind === 'bootloader') {
52139
+ bootloaderBinary = installItem.binary;
52009
52140
  }
52010
52141
  else {
52011
52142
  const binaryEntry = {
52012
- fileName: remoteBinary.fileName,
52013
- binary: remoteBinary.binary,
52014
- targetId: remoteBinary.targetId,
52143
+ fileName: installItem.fileName,
52144
+ binary: installItem.binary,
52145
+ targetId: installItem.targetId,
52015
52146
  };
52016
52147
  fwBinaryMap.push(binaryEntry);
52017
- installItems.push(Object.assign(Object.assign({}, binaryEntry), { kind: remoteBinary.kind }));
52018
52148
  }
52149
+ installItems.push(Object.assign({}, installItem));
52150
+ preparedTargets.add(updateTarget);
52019
52151
  }
52020
52152
  }
52153
+ const missingTarget = Array.from(targetsToUpdate).find(target => target !== 'resource' && !preparedTargets.has(target));
52154
+ if (missingTarget) {
52155
+ throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.RuntimeError, `Protocol V2 release does not contain requested target ${missingTarget}`);
52156
+ }
52021
52157
  return {
52022
52158
  bootloaderBinary,
52023
52159
  fwBinaryMap,
@@ -62,6 +62,7 @@ export type CheckAllFirmwareReleaseParams = {
62
62
  firmwareType?: EFirmwareType;
63
63
  platform?: 'native' | 'desktop' | 'ext' | 'web' | 'web-embed';
64
64
  forceUpdateTargets?: FirmwareUpdatePlanForceTarget[];
65
+ protocolV2ForceUpdateTargets?: FirmwareUpdateV4Target[];
65
66
  };
66
67
  export declare function checkAllFirmwareRelease(connectId?: string, params?: CommonParams & CheckAllFirmwareReleaseParams): Response<AllFirmwareRelease>;
67
68
  //# sourceMappingURL=checkAllFirmwareRelease.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkAllFirmwareRelease.d.ts","sourceRoot":"","sources":["../../../src/types/api/checkAllFirmwareRelease.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checkAllFirmwareRelease.d.ts","sourceRoot":"","sources":["../../../src/types/api/checkAllFirmwareRelease.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import type { Response } from '../params';
2
2
  import type { FirmwareReleaseCheckResult } from './checkAllFirmwareRelease';
3
- export declare function checkBLEFirmwareRelease(connectId?: string): Response<FirmwareReleaseCheckResult>;
3
+ export declare function checkBLEFirmwareRelease(connectId?: string): Response<FirmwareReleaseCheckResult | null>;
4
4
  //# sourceMappingURL=checkBLEFirmwareRelease.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkBLEFirmwareRelease.d.ts","sourceRoot":"","sources":["../../../src/types/api/checkBLEFirmwareRelease.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,SAAS,CAAC,EAAE,MAAM,GACjB,QAAQ,CAAC,0BAA0B,CAAC,CAAC"}
1
+ {"version":3,"file":"checkBLEFirmwareRelease.d.ts","sourceRoot":"","sources":["../../../src/types/api/checkBLEFirmwareRelease.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,SAAS,CAAC,EAAE,MAAM,GACjB,QAAQ,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { EFirmwareType } from '@onekeyfe/hd-shared';
2
2
  import type { CommonParams, Response } from '../params';
3
3
  import type { FirmwareReleaseCheckResult } from './checkAllFirmwareRelease';
4
- export type CheckBootloaderReleaseResponse = FirmwareReleaseCheckResult;
4
+ export type CheckBootloaderReleaseResponse = FirmwareReleaseCheckResult | null;
5
5
  export type CheckBootloaderReleaseParams = {
6
6
  willUpdateFirmwareVersion?: string;
7
7
  firmwareType?: EFirmwareType;
@@ -1 +1 @@
1
- {"version":3,"file":"checkBootloaderRelease.d.ts","sourceRoot":"","sources":["../../../src/types/api/checkBootloaderRelease.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,MAAM,8BAA8B,GAAG,0BAA0B,CAAC;AAExE,MAAM,MAAM,4BAA4B,GAAG;IACzC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAC5C,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,YAAY,GAAG,4BAA4B,GACnD,QAAQ,CAAC,8BAA8B,CAAC,CAAC"}
1
+ {"version":3,"file":"checkBootloaderRelease.d.ts","sourceRoot":"","sources":["../../../src/types/api/checkBootloaderRelease.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,MAAM,8BAA8B,GAAG,0BAA0B,GAAG,IAAI,CAAC;AAE/E,MAAM,MAAM,4BAA4B,GAAG;IACzC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAC5C,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,YAAY,GAAG,4BAA4B,GACnD,QAAQ,CAAC,8BAA8B,CAAC,CAAC"}
@@ -4,5 +4,5 @@ import type { FirmwareReleaseCheckResult } from './checkAllFirmwareRelease';
4
4
  export type CheckFirmwareReleaseParams = {
5
5
  firmwareType?: EFirmwareType;
6
6
  };
7
- export declare function checkFirmwareRelease(connectId?: string, params?: CheckFirmwareReleaseParams): Response<FirmwareReleaseCheckResult>;
7
+ export declare function checkFirmwareRelease(connectId?: string, params?: CheckFirmwareReleaseParams): Response<FirmwareReleaseCheckResult | null>;
8
8
  //# sourceMappingURL=checkFirmwareRelease.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkFirmwareRelease.d.ts","sourceRoot":"","sources":["../../../src/types/api/checkFirmwareRelease.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,MAAM,0BAA0B,GAAG;IACvC,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAC1C,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,0BAA0B,GAClC,QAAQ,CAAC,0BAA0B,CAAC,CAAC"}
1
+ {"version":3,"file":"checkFirmwareRelease.d.ts","sourceRoot":"","sources":["../../../src/types/api/checkFirmwareRelease.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,MAAM,0BAA0B,GAAG;IACvC,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAC1C,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,0BAA0B,GAClC,QAAQ,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAAC"}