@onekeyfe/hd-core 1.2.0-alpha.75 → 1.2.0-alpha.76

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 (111) hide show
  1. package/__tests__/connectSettings.test.ts +45 -5
  2. package/__tests__/device-initialize-timeout.test.ts +56 -0
  3. package/__tests__/firmware-update/check-all-firmware-release.test.ts +175 -0
  4. package/__tests__/firmware-update/device-update-bootloader.test.ts +87 -0
  5. package/__tests__/firmware-update/firmware-artifact-source.test.ts +119 -0
  6. package/__tests__/firmware-update/firmware-host-binding.test.ts +70 -0
  7. package/__tests__/firmware-update/firmware-preparation-error.test.ts +27 -0
  8. package/__tests__/firmware-update/firmware-update-bootloader-poll.test.ts +200 -0
  9. package/__tests__/firmware-update/firmware-update-capabilities.test.ts +13 -0
  10. package/__tests__/firmware-update/firmware-update-plan-bootloader-identity.test.ts +394 -0
  11. package/__tests__/firmware-update/firmware-update-plan.test.ts +593 -0
  12. package/__tests__/firmware-update/firmware-update-prepared-plan.test.ts +231 -0
  13. package/__tests__/firmware-update/firmware-update-v2-download-before-boot.test.ts +59 -31
  14. package/__tests__/firmware-update/firmware-update-v3-reconnect.test.ts +64 -0
  15. package/__tests__/firmware-update/firmware-upload-source.test.ts +70 -0
  16. package/__tests__/protocol-v2.test.ts +405 -100
  17. package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
  18. package/dist/api/FirmwareUpdate.d.ts.map +1 -1
  19. package/dist/api/FirmwareUpdateV2.d.ts +10 -0
  20. package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
  21. package/dist/api/FirmwareUpdateV3.d.ts +7 -3
  22. package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
  23. package/dist/api/FirmwareUpdateV4.d.ts +25 -5
  24. package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
  25. package/dist/api/device/DeviceUpdateBootloader.d.ts +5 -1
  26. package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
  27. package/dist/api/firmware/FirmwareArtifactSource.d.ts +25 -0
  28. package/dist/api/firmware/FirmwareArtifactSource.d.ts.map +1 -0
  29. package/dist/api/firmware/FirmwareHostBinding.d.ts +6 -0
  30. package/dist/api/firmware/FirmwareHostBinding.d.ts.map +1 -0
  31. package/dist/api/firmware/FirmwarePreparationError.d.ts +3 -0
  32. package/dist/api/firmware/FirmwarePreparationError.d.ts.map +1 -0
  33. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +8 -0
  34. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
  35. package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts +3 -0
  36. package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts.map +1 -0
  37. package/dist/api/firmware/FirmwareUpdatePlan.d.ts +25 -0
  38. package/dist/api/firmware/FirmwareUpdatePlan.d.ts.map +1 -0
  39. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts +32 -0
  40. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts.map +1 -0
  41. package/dist/api/firmware/getBinary.d.ts +7 -0
  42. package/dist/api/firmware/getBinary.d.ts.map +1 -1
  43. package/dist/api/firmware/updateBootloader.d.ts +2 -0
  44. package/dist/api/firmware/updateBootloader.d.ts.map +1 -1
  45. package/dist/api/firmware/uploadFirmware.d.ts +9 -1
  46. package/dist/api/firmware/uploadFirmware.d.ts.map +1 -1
  47. package/dist/api/stellar/StellarSignTransaction.d.ts +1 -1
  48. package/dist/data-manager/DataManager.d.ts +1 -0
  49. package/dist/data-manager/DataManager.d.ts.map +1 -1
  50. package/dist/data-manager/connectSettings.d.ts.map +1 -1
  51. package/dist/device/Device.d.ts +1 -0
  52. package/dist/device/Device.d.ts.map +1 -1
  53. package/dist/index.d.ts +179 -1
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +3079 -1062
  56. package/dist/inject.d.ts.map +1 -1
  57. package/dist/lowLevelInject.d.ts.map +1 -1
  58. package/dist/topLevelInject.d.ts.map +1 -1
  59. package/dist/types/api/checkAllFirmwareRelease.d.ts +4 -0
  60. package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
  61. package/dist/types/api/deviceUpdateBootloader.d.ts +6 -0
  62. package/dist/types/api/deviceUpdateBootloader.d.ts.map +1 -1
  63. package/dist/types/api/export.d.ts +4 -1
  64. package/dist/types/api/export.d.ts.map +1 -1
  65. package/dist/types/api/firmwareUpdate.d.ts +68 -0
  66. package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
  67. package/dist/types/api/firmwareUpdateCapabilities.d.ts +9 -0
  68. package/dist/types/api/firmwareUpdateCapabilities.d.ts.map +1 -0
  69. package/dist/types/api/firmwareUpdatePlan.d.ts +28 -0
  70. package/dist/types/api/firmwareUpdatePlan.d.ts.map +1 -0
  71. package/dist/types/api/firmwareUpdatePreparedPlan.d.ts +42 -0
  72. package/dist/types/api/firmwareUpdatePreparedPlan.d.ts.map +1 -0
  73. package/dist/types/api/index.d.ts +9 -1
  74. package/dist/types/api/index.d.ts.map +1 -1
  75. package/dist/types/settings.d.ts +13 -0
  76. package/dist/types/settings.d.ts.map +1 -1
  77. package/dist/utils/deviceFeaturesCompat.d.ts +1 -0
  78. package/dist/utils/deviceFeaturesCompat.d.ts.map +1 -1
  79. package/package.json +4 -4
  80. package/src/api/CheckAllFirmwareRelease.ts +57 -6
  81. package/src/api/FirmwareUpdate.ts +13 -1
  82. package/src/api/FirmwareUpdateV2.ts +296 -121
  83. package/src/api/FirmwareUpdateV3.ts +263 -57
  84. package/src/api/FirmwareUpdateV4.ts +881 -349
  85. package/src/api/device/DeviceUpdateBootloader.ts +125 -6
  86. package/src/api/firmware/FirmwareArtifactSource.ts +278 -0
  87. package/src/api/firmware/FirmwareHostBinding.ts +100 -0
  88. package/src/api/firmware/FirmwarePreparationError.ts +12 -0
  89. package/src/api/firmware/FirmwareUpdateBaseMethod.ts +72 -1
  90. package/src/api/firmware/FirmwareUpdateCapabilities.ts +9 -0
  91. package/src/api/firmware/FirmwareUpdatePlan.ts +772 -0
  92. package/src/api/firmware/FirmwareUpdatePreparedPlan.ts +449 -0
  93. package/src/api/firmware/updateBootloader.ts +19 -4
  94. package/src/api/firmware/uploadFirmware.ts +140 -22
  95. package/src/data-manager/DataManager.ts +62 -54
  96. package/src/data-manager/connectSettings.ts +11 -0
  97. package/src/device/Device.ts +6 -1
  98. package/src/index.ts +5 -0
  99. package/src/inject.ts +22 -2
  100. package/src/lowLevelInject.ts +5 -1
  101. package/src/topLevelInject.ts +5 -1
  102. package/src/types/api/checkAllFirmwareRelease.ts +4 -0
  103. package/src/types/api/deviceUpdateBootloader.ts +6 -0
  104. package/src/types/api/export.ts +18 -0
  105. package/src/types/api/firmwareUpdate.ts +75 -0
  106. package/src/types/api/firmwareUpdateCapabilities.ts +9 -0
  107. package/src/types/api/firmwareUpdatePlan.ts +38 -0
  108. package/src/types/api/firmwareUpdatePreparedPlan.ts +53 -0
  109. package/src/types/api/index.ts +14 -0
  110. package/src/types/settings.ts +13 -0
  111. package/src/utils/deviceFeaturesCompat.ts +6 -0
@@ -1,14 +1,52 @@
1
1
  import type { EFirmwareType } from '@onekeyfe/hd-shared';
2
2
  import type { PROTO } from '../../constants';
3
3
  import type { Params, Response } from '../params';
4
+ import type { FirmwareUpdatePreparedPlan } from './firmwareUpdatePreparedPlan';
4
5
 
5
6
  type IUpdateType = 'firmware' | 'ble';
6
7
 
8
+ export interface FirmwareArtifactReference {
9
+ artifactRef: string;
10
+ size: number;
11
+ sha256: string;
12
+ }
13
+
14
+ export interface FirmwareArtifactReader {
15
+ open(input: { artifactRef: string }): Promise<{
16
+ readerId: string;
17
+ size: number;
18
+ }>;
19
+ read(input: { readerId: string; offset: number; length: number }): Promise<{
20
+ data: ArrayBuffer;
21
+ bytesRead: number;
22
+ eof: boolean;
23
+ }>;
24
+ close(input: { readerId: string }): Promise<void>;
25
+ }
26
+
27
+ export interface FirmwareUpdateHostBinding {
28
+ artifactReader: FirmwareArtifactReader;
29
+ }
30
+
7
31
  export interface FirmwareUpdateBinaryParams {
8
32
  binary: ArrayBuffer;
9
33
  updateType: IUpdateType;
10
34
  }
11
35
 
36
+ export interface FirmwareUpdateArtifactParams {
37
+ preparedPlan: FirmwareUpdatePreparedPlan;
38
+ hostBindingGeneration: number;
39
+ artifact: FirmwareArtifactReference;
40
+ resourceEntries?: Array<{
41
+ entryName: string;
42
+ artifact: FirmwareArtifactReference;
43
+ }>;
44
+ updateType: IUpdateType;
45
+ forcedUpdateRes?: boolean;
46
+ isUpdateBootloader?: boolean;
47
+ firmwareType?: EFirmwareType;
48
+ }
49
+
12
50
  export interface FirmwareUpdateParams {
13
51
  version?: number[];
14
52
  updateType: IUpdateType;
@@ -37,8 +75,14 @@ export declare function firmwareUpdateV2(
37
75
  connectId: string | undefined,
38
76
  params: Params<FirmwareUpdateBinaryParams & Platform>
39
77
  ): Response<PROTO.Success>;
78
+ export declare function firmwareUpdateV2(
79
+ connectId: string | undefined,
80
+ params: Params<FirmwareUpdateArtifactParams & Platform>
81
+ ): Response<PROTO.Success>;
40
82
 
41
83
  export interface FirmwareUpdateV3Params {
84
+ preparedPlan?: FirmwareUpdatePreparedPlan;
85
+ hostBindingGeneration?: number;
42
86
  bleVersion?: number[];
43
87
  bleBinary?: ArrayBuffer;
44
88
  chunkSize?: number;
@@ -55,6 +99,17 @@ export interface FirmwareUpdateV3Params {
55
99
  firmwareType?: EFirmwareType;
56
100
 
57
101
  platform: IPlatform;
102
+
103
+ artifactReader?: FirmwareArtifactReader;
104
+ artifacts?: {
105
+ ble?: FirmwareArtifactReference;
106
+ firmware?: FirmwareArtifactReference;
107
+ bootloader?: FirmwareArtifactReference;
108
+ resourceEntries?: Array<{
109
+ entryName: string;
110
+ artifact: FirmwareArtifactReference;
111
+ }>;
112
+ };
58
113
  }
59
114
 
60
115
  /**
@@ -74,10 +129,14 @@ export type FirmwareUpdateV4Target =
74
129
  | 'se04';
75
130
 
76
131
  export interface FirmwareUpdateV4Params {
132
+ preparedPlan?: FirmwareUpdatePreparedPlan;
133
+ hostBindingGeneration?: number;
77
134
  platform: IPlatform;
135
+ expectedDeviceId?: string;
78
136
  chunkSize?: number;
79
137
  firmwareType?: EFirmwareType;
80
138
  targetsToUpdate?: FirmwareUpdateV4Target[];
139
+ expectedTargetVersions?: Partial<Record<FirmwareUpdateV4Target, string>>;
81
140
 
82
141
  /** FW_MGMT_TARGET_ROMLOADER = 2; Pro2 cannot install it through firmwareUpdateV4. */
83
142
  romloaderBinary?: ArrayBuffer;
@@ -106,8 +165,24 @@ export interface FirmwareUpdateV4Params {
106
165
  size?: number;
107
166
  fileHash?: string;
108
167
  }>;
168
+ artifactReader?: FirmwareArtifactReader;
169
+ componentArtifacts?: Partial<
170
+ Record<Exclude<FirmwareUpdateV4Target, 'resource'>, FirmwareArtifactReference>
171
+ >;
172
+ resourceBundleArtifacts?: Array<{
173
+ name: string;
174
+ artifact: FirmwareArtifactReference;
175
+ }>;
109
176
  }
110
177
 
178
+ export declare function registerFirmwareUpdateHostBinding(
179
+ binding: FirmwareUpdateHostBinding
180
+ ): number;
181
+
182
+ export declare function unregisterFirmwareUpdateHostBinding(generation?: number): boolean;
183
+
184
+ export declare function getFirmwareUpdateHostBindingGeneration(): number;
185
+
111
186
  export declare function firmwareUpdateV3(
112
187
  connectId: string | undefined,
113
188
  params: Params<FirmwareUpdateV3Params>
@@ -0,0 +1,9 @@
1
+ export interface FirmwareUpdateCapabilities {
2
+ planSchemaVersion: 2;
3
+ preparedPlanSchemaVersion: 2;
4
+ hostBindingProtocolVersion: 2;
5
+ manifestModes: Array<'external-only' | 'sdk-managed'>;
6
+ supportsArtifactReader: true;
7
+ }
8
+
9
+ export declare function getFirmwareUpdateCapabilities(): FirmwareUpdateCapabilities;
@@ -0,0 +1,38 @@
1
+ import type { FirmwareUpdateV4Target } from './firmwareUpdate';
2
+ import type { EFirmwareType } from '@onekeyfe/hd-shared';
3
+
4
+ export type FirmwareUpdatePlanArtifactRole =
5
+ | 'firmware'
6
+ | 'ble'
7
+ | 'bootloader'
8
+ | 'resource'
9
+ | 'component'
10
+ | 'resourceBundle';
11
+
12
+ export type FirmwareUpdatePlanTarget = 'firmware' | 'ble' | 'bootloader' | FirmwareUpdateV4Target;
13
+
14
+ export type FirmwareUpdatePlanForceTarget = 'firmware' | 'ble' | 'bootloader' | 'resource';
15
+
16
+ export interface FirmwareUpdatePlanArtifact {
17
+ artifactId: string;
18
+ role: FirmwareUpdatePlanArtifactRole;
19
+ target: FirmwareUpdatePlanTarget;
20
+ url: string;
21
+ container: 'raw' | 'zip';
22
+ logicalName?: string;
23
+ expectedSize?: number;
24
+ expectedSha256?: string;
25
+ targetVersion?: string;
26
+ }
27
+
28
+ export interface FirmwareUpdatePlan {
29
+ schemaVersion: 2;
30
+ planDigest: string;
31
+ executor: 'v2' | 'v3' | 'v4';
32
+ deviceIdentity: string;
33
+ deviceModel: string;
34
+ firmwareType: EFirmwareType;
35
+ platform: 'native' | 'desktop' | 'ext' | 'web' | 'web-embed';
36
+ artifacts: FirmwareUpdatePlanArtifact[];
37
+ targetsToUpdate: FirmwareUpdatePlanTarget[];
38
+ }
@@ -0,0 +1,53 @@
1
+ import type { FirmwareArtifactReference } from './firmwareUpdate';
2
+ import type {
3
+ FirmwareUpdatePlan,
4
+ FirmwareUpdatePlanArtifactRole,
5
+ FirmwareUpdatePlanTarget,
6
+ } from './firmwareUpdatePlan';
7
+
8
+ export interface FirmwareUpdatePreparedEntry {
9
+ entryName: string;
10
+ artifact: FirmwareArtifactReference;
11
+ }
12
+
13
+ export interface FirmwareUpdatePreparedArtifactInput {
14
+ artifactId: string;
15
+ artifact: FirmwareArtifactReference;
16
+ materializedEntries?: FirmwareUpdatePreparedEntry[];
17
+ }
18
+
19
+ export interface FirmwareUpdatePreparedArtifact {
20
+ artifactId: string;
21
+ role: FirmwareUpdatePlanArtifactRole;
22
+ target: FirmwareUpdatePlanTarget;
23
+ container: 'raw' | 'zip';
24
+ logicalName?: string;
25
+ targetVersion?: string;
26
+ artifact: FirmwareArtifactReference;
27
+ materializedEntries?: FirmwareUpdatePreparedEntry[];
28
+ }
29
+
30
+ export interface FirmwareUpdatePreparedPlan {
31
+ schemaVersion: 2;
32
+ preparedPlanDigest: string;
33
+ planDigest: string;
34
+ networkPolicy: 'forbid';
35
+ executor: FirmwareUpdatePlan['executor'];
36
+ deviceIdentity: string;
37
+ deviceModel: string;
38
+ firmwareType: FirmwareUpdatePlan['firmwareType'];
39
+ platform: FirmwareUpdatePlan['platform'];
40
+ leaseRef: string;
41
+ artifacts: FirmwareUpdatePreparedArtifact[];
42
+ targetsToUpdate: FirmwareUpdatePlanTarget[];
43
+ }
44
+
45
+ export declare function prepareFirmwareUpdatePlan(input: {
46
+ plan: FirmwareUpdatePlan;
47
+ leaseRef: string;
48
+ artifacts: FirmwareUpdatePreparedArtifactInput[];
49
+ }): FirmwareUpdatePreparedPlan;
50
+
51
+ export declare function validateFirmwareUpdatePreparedPlan(
52
+ value: unknown
53
+ ): FirmwareUpdatePreparedPlan;
@@ -32,7 +32,15 @@ import type {
32
32
  firmwareUpdateV2,
33
33
  firmwareUpdateV3,
34
34
  firmwareUpdateV4,
35
+ getFirmwareUpdateHostBindingGeneration,
36
+ registerFirmwareUpdateHostBinding,
37
+ unregisterFirmwareUpdateHostBinding,
35
38
  } from './firmwareUpdate';
39
+ import type { getFirmwareUpdateCapabilities } from './firmwareUpdateCapabilities';
40
+ import type {
41
+ prepareFirmwareUpdatePlan,
42
+ validateFirmwareUpdatePreparedPlan,
43
+ } from './firmwareUpdatePreparedPlan';
36
44
  import type { promptWebDeviceAccess } from './promptWebDeviceAccess';
37
45
  import type { deviceReset } from './deviceReset';
38
46
  import type { deviceRecovery } from './deviceRecovery';
@@ -239,6 +247,12 @@ export type CoreApi = {
239
247
  firmwareUpdateV2: typeof firmwareUpdateV2;
240
248
  firmwareUpdateV3: typeof firmwareUpdateV3;
241
249
  firmwareUpdateV4: typeof firmwareUpdateV4;
250
+ registerFirmwareUpdateHostBinding: typeof registerFirmwareUpdateHostBinding;
251
+ unregisterFirmwareUpdateHostBinding: typeof unregisterFirmwareUpdateHostBinding;
252
+ getFirmwareUpdateHostBindingGeneration: typeof getFirmwareUpdateHostBindingGeneration;
253
+ getFirmwareUpdateCapabilities: typeof getFirmwareUpdateCapabilities;
254
+ prepareFirmwareUpdatePlan: typeof prepareFirmwareUpdatePlan;
255
+ validateFirmwareUpdatePreparedPlan: typeof validateFirmwareUpdatePreparedPlan;
242
256
  cipherKeyValue: typeof cipherKeyValue;
243
257
 
244
258
  /**
@@ -31,6 +31,8 @@ export type ConnectSettings = {
31
31
  timestamp: number;
32
32
  isFrame?: boolean;
33
33
  preRelease?: boolean;
34
+ firmwareManifestMode?: 'sdk-managed' | 'external-only';
35
+ preloadedConfig?: RemoteConfigResponse;
34
36
  fetchConfig?: boolean;
35
37
  extension?: string;
36
38
  configFetcher?: (url: string) => Promise<RemoteConfigResponse | null>;
@@ -58,6 +60,7 @@ export type IProtocolV2FirmwareComponent = {
58
60
  fingerprint?: string;
59
61
  /** OKPP payload hash, used to detect same-version package changes. */
60
62
  payloadHash?: string;
63
+ expectedSize?: number;
61
64
  version?: IVersionArray;
62
65
  };
63
66
 
@@ -111,6 +114,8 @@ export type IProtocolV2ResourceBundle = {
111
114
  name: string;
112
115
  /** Download URL. */
113
116
  url: string;
117
+ fingerprint?: string;
118
+ expectedSize?: number;
114
119
  /** Device target path, such as vol0:/bundles/images/images.okpkg. */
115
120
  devicePath: string;
116
121
  /** okpkg payload_version used to skip matching content after FileRead. */
@@ -132,10 +137,16 @@ export type IFirmwareReleaseInfo = {
132
137
  firmwareType?: EFirmwareType;
133
138
  /** Firmware UI resource */
134
139
  resource?: string;
140
+ resourceFingerprint?: string;
141
+ resourceExpectedSize?: number;
135
142
  /** Firmware full UI resource */
136
143
  fullResource?: string;
144
+ fullResourceFingerprint?: string;
145
+ fullResourceExpectedSize?: number;
137
146
  fullResourceRange?: string[];
138
147
  bootloaderResource?: string;
148
+ bootloaderFingerprint?: string;
149
+ bootloaderExpectedSize?: number;
139
150
  bootloaderVersion?: IVersionArray;
140
151
  displayBootloaderVersion?: IVersionArray;
141
152
  bootloaderRelatedFirmwareVersion?: IVersionArray;
@@ -148,6 +159,7 @@ export type IFirmwareReleaseInfo = {
148
159
  [k in ILocale]: string;
149
160
  };
150
161
  fingerprint: string;
162
+ expectedSize?: number;
151
163
  version: IVersionArray;
152
164
  changelog: {
153
165
  [k in ILocale]: string;
@@ -163,6 +175,7 @@ export type IBLEFirmwareReleaseInfo = {
163
175
  webUpdate: string;
164
176
  fingerprint: string;
165
177
  fingerprintWeb: string;
178
+ expectedSize?: number;
166
179
  version: IVersionArray;
167
180
  changelog: {
168
181
  [k in ILocale]: string;
@@ -37,6 +37,12 @@ export const resolveDeviceSerialNo = (features?: DeviceFeaturesInput): string =>
37
37
  );
38
38
  };
39
39
 
40
+ export const resolveDeviceBootloaderMode = (features?: DeviceFeaturesInput): boolean => {
41
+ if (!features) return false;
42
+ const compatible = asCompatibleFeatures(features);
43
+ return (compatible.bootloaderMode ?? compatible.bootloader_mode) === true;
44
+ };
45
+
40
46
  export const resolveDeviceType = (features?: DeviceFeaturesInput): IDeviceType => {
41
47
  if (!features || typeof features !== 'object') {
42
48
  return EDeviceType.Unknown;