@onekeyfe/hd-core 1.2.0-alpha.68 → 1.2.0-alpha.69

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 (121) hide show
  1. package/__tests__/check-all-firmware-release-protocol-v2.test.ts +28 -0
  2. package/__tests__/connectSettings.test.ts +5 -47
  3. package/__tests__/firmware-update/firmware-update-v2-download-before-boot.test.ts +31 -59
  4. package/__tests__/protocol-v2-firmware-targets.test.ts +33 -1
  5. package/__tests__/protocol-v2-resources.test.ts +9 -6
  6. package/__tests__/protocol-v2.test.ts +174 -383
  7. package/__tests__/protocolV2FileWrite.test.ts +48 -7
  8. package/dist/api/CheckAllFirmwareRelease.d.ts +2 -1
  9. package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
  10. package/dist/api/FirmwareUpdate.d.ts.map +1 -1
  11. package/dist/api/FirmwareUpdateV2.d.ts +0 -10
  12. package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
  13. package/dist/api/FirmwareUpdateV3.d.ts +3 -7
  14. package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
  15. package/dist/api/FirmwareUpdateV4.d.ts +6 -25
  16. package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
  17. package/dist/api/device/DeviceUpdateBootloader.d.ts +1 -5
  18. package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
  19. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +0 -8
  20. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
  21. package/dist/api/firmware/getBinary.d.ts +0 -7
  22. package/dist/api/firmware/getBinary.d.ts.map +1 -1
  23. package/dist/api/firmware/updateBootloader.d.ts +0 -2
  24. package/dist/api/firmware/updateBootloader.d.ts.map +1 -1
  25. package/dist/api/firmware/uploadFirmware.d.ts +1 -9
  26. package/dist/api/firmware/uploadFirmware.d.ts.map +1 -1
  27. package/dist/api/helpers/protocolV2FileWrite.d.ts.map +1 -1
  28. package/dist/api/stellar/StellarSignTransaction.d.ts +1 -1
  29. package/dist/data-manager/DataManager.d.ts +0 -1
  30. package/dist/data-manager/DataManager.d.ts.map +1 -1
  31. package/dist/data-manager/connectSettings.d.ts.map +1 -1
  32. package/dist/device/Device.d.ts +0 -1
  33. package/dist/device/Device.d.ts.map +1 -1
  34. package/dist/index.d.ts +2 -180
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +1041 -3037
  37. package/dist/inject.d.ts.map +1 -1
  38. package/dist/lowLevelInject.d.ts.map +1 -1
  39. package/dist/protocols/protocol-v2/resources.d.ts +1 -1
  40. package/dist/protocols/protocol-v2/resources.d.ts.map +1 -1
  41. package/dist/topLevelInject.d.ts.map +1 -1
  42. package/dist/types/api/checkAllFirmwareRelease.d.ts +0 -4
  43. package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
  44. package/dist/types/api/deviceUpdateBootloader.d.ts +0 -6
  45. package/dist/types/api/deviceUpdateBootloader.d.ts.map +1 -1
  46. package/dist/types/api/export.d.ts +1 -4
  47. package/dist/types/api/export.d.ts.map +1 -1
  48. package/dist/types/api/firmwareUpdate.d.ts +0 -68
  49. package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
  50. package/dist/types/api/index.d.ts +1 -9
  51. package/dist/types/api/index.d.ts.map +1 -1
  52. package/dist/types/settings.d.ts +1 -14
  53. package/dist/types/settings.d.ts.map +1 -1
  54. package/dist/utils/deviceFeaturesCompat.d.ts +0 -1
  55. package/dist/utils/deviceFeaturesCompat.d.ts.map +1 -1
  56. package/package.json +4 -4
  57. package/src/api/CheckAllFirmwareRelease.ts +25 -61
  58. package/src/api/FirmwareUpdate.ts +1 -13
  59. package/src/api/FirmwareUpdateV2.ts +121 -296
  60. package/src/api/FirmwareUpdateV3.ts +57 -263
  61. package/src/api/FirmwareUpdateV4.ts +287 -865
  62. package/src/api/device/DeviceUpdateBootloader.ts +6 -125
  63. package/src/api/firmware/FirmwareUpdateBaseMethod.ts +1 -72
  64. package/src/api/firmware/updateBootloader.ts +4 -19
  65. package/src/api/firmware/uploadFirmware.ts +22 -140
  66. package/src/api/helpers/protocolV2FileWrite.ts +54 -4
  67. package/src/data-manager/DataManager.ts +54 -59
  68. package/src/data-manager/connectSettings.ts +0 -11
  69. package/src/device/Device.ts +1 -6
  70. package/src/index.ts +0 -5
  71. package/src/inject.ts +2 -22
  72. package/src/lowLevelInject.ts +1 -5
  73. package/src/protocols/protocol-v2/resources.ts +5 -1
  74. package/src/topLevelInject.ts +1 -5
  75. package/src/types/api/checkAllFirmwareRelease.ts +0 -4
  76. package/src/types/api/deviceUpdateBootloader.ts +0 -6
  77. package/src/types/api/export.ts +0 -18
  78. package/src/types/api/firmwareUpdate.ts +0 -75
  79. package/src/types/api/index.ts +0 -14
  80. package/src/types/settings.ts +2 -14
  81. package/src/utils/deviceFeaturesCompat.ts +0 -6
  82. package/__tests__/device-initialize-timeout.test.ts +0 -56
  83. package/__tests__/firmware-update/check-all-firmware-release.test.ts +0 -175
  84. package/__tests__/firmware-update/device-update-bootloader.test.ts +0 -87
  85. package/__tests__/firmware-update/firmware-artifact-source.test.ts +0 -119
  86. package/__tests__/firmware-update/firmware-host-binding.test.ts +0 -70
  87. package/__tests__/firmware-update/firmware-preparation-error.test.ts +0 -27
  88. package/__tests__/firmware-update/firmware-update-bootloader-poll.test.ts +0 -200
  89. package/__tests__/firmware-update/firmware-update-capabilities.test.ts +0 -13
  90. package/__tests__/firmware-update/firmware-update-plan-bootloader-identity.test.ts +0 -394
  91. package/__tests__/firmware-update/firmware-update-plan.test.ts +0 -593
  92. package/__tests__/firmware-update/firmware-update-prepared-plan.test.ts +0 -231
  93. package/__tests__/firmware-update/firmware-update-v3-reconnect.test.ts +0 -63
  94. package/__tests__/firmware-update/firmware-upload-source.test.ts +0 -70
  95. package/dist/api/firmware/FirmwareArtifactSource.d.ts +0 -25
  96. package/dist/api/firmware/FirmwareArtifactSource.d.ts.map +0 -1
  97. package/dist/api/firmware/FirmwareHostBinding.d.ts +0 -6
  98. package/dist/api/firmware/FirmwareHostBinding.d.ts.map +0 -1
  99. package/dist/api/firmware/FirmwarePreparationError.d.ts +0 -3
  100. package/dist/api/firmware/FirmwarePreparationError.d.ts.map +0 -1
  101. package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts +0 -3
  102. package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts.map +0 -1
  103. package/dist/api/firmware/FirmwareUpdatePlan.d.ts +0 -25
  104. package/dist/api/firmware/FirmwareUpdatePlan.d.ts.map +0 -1
  105. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts +0 -32
  106. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts.map +0 -1
  107. package/dist/types/api/firmwareUpdateCapabilities.d.ts +0 -9
  108. package/dist/types/api/firmwareUpdateCapabilities.d.ts.map +0 -1
  109. package/dist/types/api/firmwareUpdatePlan.d.ts +0 -28
  110. package/dist/types/api/firmwareUpdatePlan.d.ts.map +0 -1
  111. package/dist/types/api/firmwareUpdatePreparedPlan.d.ts +0 -42
  112. package/dist/types/api/firmwareUpdatePreparedPlan.d.ts.map +0 -1
  113. package/src/api/firmware/FirmwareArtifactSource.ts +0 -278
  114. package/src/api/firmware/FirmwareHostBinding.ts +0 -100
  115. package/src/api/firmware/FirmwarePreparationError.ts +0 -12
  116. package/src/api/firmware/FirmwareUpdateCapabilities.ts +0 -9
  117. package/src/api/firmware/FirmwareUpdatePlan.ts +0 -772
  118. package/src/api/firmware/FirmwareUpdatePreparedPlan.ts +0 -449
  119. package/src/types/api/firmwareUpdateCapabilities.ts +0 -9
  120. package/src/types/api/firmwareUpdatePlan.ts +0 -38
  121. package/src/types/api/firmwareUpdatePreparedPlan.ts +0 -53
@@ -1,13 +1,6 @@
1
- import {
2
- EDeviceType,
3
- EFirmwareType,
4
- ERRORS,
5
- HardwareError,
6
- HardwareErrorCode,
7
- } from '@onekeyfe/hd-shared';
1
+ import { EDeviceType, EFirmwareType, ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared';
8
2
  import semver from 'semver';
9
3
 
10
- import { BaseMethod } from './BaseMethod';
11
4
  import { UI_REQUEST } from '../constants/ui-request';
12
5
  import { DataManager } from '../data-manager';
13
6
  import {
@@ -15,22 +8,13 @@ import {
15
8
  getBootloaderReleaseInfo,
16
9
  getFirmwareReleaseInfo,
17
10
  } from './firmware/releaseHelper';
18
- import {
19
- buildFirmwareUpdatePlan,
20
- validateFirmwareUpdatePlanForceTargets,
21
- } from './firmware/FirmwareUpdatePlan';
22
11
  import { getBridgeReleaseInfo } from '../utils/bridgeUpdate';
12
+ import { getDeviceFirmwareVersion, getDeviceType, getFirmwareType } from '../utils';
13
+ import { BaseMethod } from './BaseMethod';
23
14
  import {
24
15
  buildProtocolV2ResourceUpdatePlan,
25
16
  readProtocolV2ResourceInventory,
26
17
  } from '../protocols/protocol-v2/resources';
27
- import {
28
- LoggerNames,
29
- getDeviceFirmwareVersion,
30
- getDeviceType,
31
- getFirmwareType,
32
- getLogger,
33
- } from '../utils';
34
18
 
35
19
  import type {
36
20
  AllFirmwareRelease,
@@ -46,7 +30,6 @@ import type {
46
30
  IProtocolV2FirmwareComponent,
47
31
  IProtocolV2FirmwareComponentTarget,
48
32
  } from '../types';
49
- import type { FirmwareUpdatePlan } from '../types/api/firmwareUpdatePlan';
50
33
 
51
34
  const UPDATE_TARGET_BY_COMPONENT_TARGET: Readonly<
52
35
  Partial<Record<IProtocolV2FirmwareComponentTarget, FirmwareUpdateV4Target>>
@@ -191,6 +174,7 @@ export function buildProtocolV2FirmwareRelease({
191
174
  remotePayloadHashes = {},
192
175
  firmwareType,
193
176
  release,
177
+ deviceType,
194
178
  }: {
195
179
  currentVersions: DeviceStateVersions;
196
180
  currentVerification?: Partial<DeviceFeaturesVerify>;
@@ -198,6 +182,7 @@ export function buildProtocolV2FirmwareRelease({
198
182
  remotePayloadHashes?: Readonly<Record<string, string | null>>;
199
183
  firmwareType: EFirmwareType;
200
184
  release: IFirmwareReleaseInfo | undefined;
185
+ deviceType?: 'pro2' | 'neo';
201
186
  }): ProtocolV2FirmwareReleasePlan {
202
187
  if (!release) {
203
188
  return {
@@ -212,8 +197,8 @@ export function buildProtocolV2FirmwareRelease({
212
197
  };
213
198
  }
214
199
 
215
- let components = getOrderedComponentEntries(release).map(([configKey, component]) =>
216
- buildComponentRelease({
200
+ let components = getOrderedComponentEntries(release).map(([configKey, component]) => {
201
+ const result = buildComponentRelease({
217
202
  configKey,
218
203
  component,
219
204
  currentVersions,
@@ -223,8 +208,20 @@ export function buildProtocolV2FirmwareRelease({
223
208
  ? remotePayloadHashes[configKey]
224
209
  : normalizeHex(component.payloadHash),
225
210
  releaseRequired: release.required,
226
- })
227
- );
211
+ });
212
+ if (
213
+ deviceType === 'neo' &&
214
+ (result.componentTarget === 'SE03' || result.componentTarget === 'SE04')
215
+ ) {
216
+ return {
217
+ ...result,
218
+ updateTarget: null,
219
+ status: 'unsupported' as const,
220
+ required: false,
221
+ };
222
+ }
223
+ return result;
224
+ });
228
225
  if (!currentVersions.applicationP2) {
229
226
  const applicationP1 = components.find(
230
227
  component => component.componentTarget === 'APPLICATION_P1'
@@ -269,8 +266,6 @@ export function buildProtocolV2FirmwareRelease({
269
266
  };
270
267
  }
271
268
 
272
- const Log = getLogger(LoggerNames.Method);
273
-
274
269
  export default class CheckAllFirmwareRelease extends BaseMethod {
275
270
  getSupportedProtocols() {
276
271
  return ['V1', 'V2'] as const;
@@ -288,13 +283,8 @@ export default class CheckAllFirmwareRelease extends BaseMethod {
288
283
  }
289
284
 
290
285
  const { features } = this.device;
291
- const {
292
- checkBridgeRelease,
293
- firmwareType: firmwareTypeParams,
294
- platform,
295
- forceUpdateTargets,
296
- } = this.payload as CheckAllFirmwareReleaseParams;
297
- const validatedForceUpdateTargets = validateFirmwareUpdatePlanForceTargets(forceUpdateTargets);
286
+ const { checkBridgeRelease, firmwareType: firmwareTypeParams } = this
287
+ .payload as CheckAllFirmwareReleaseParams;
298
288
 
299
289
  if (!features) {
300
290
  return Promise.resolve(null);
@@ -325,32 +315,6 @@ export default class CheckAllFirmwareRelease extends BaseMethod {
325
315
  firmwareType,
326
316
  });
327
317
  const bleFirmwareReleaseInfo = getBleFirmwareReleaseInfo(features);
328
- let firmwareUpdatePlan: FirmwareUpdatePlan | undefined;
329
- try {
330
- firmwareUpdatePlan = buildFirmwareUpdatePlan({
331
- features,
332
- firmwareType,
333
- platform: platform ?? 'web',
334
- firmware: firmwareRelease,
335
- ble: bleFirmwareReleaseInfo,
336
- bootloader: bootloaderRelease,
337
- forceUpdateTargets: validatedForceUpdateTargets,
338
- });
339
- } catch (error) {
340
- if (
341
- validatedForceUpdateTargets.length > 0 ||
342
- !(error instanceof HardwareError) ||
343
- error.params?.firmwareUpdateCode !== 'FirmwarePlanInvalid'
344
- ) {
345
- throw error;
346
- }
347
- // A Plan is an optional external-host capability. Release checks remain
348
- // available for legacy and recovery flows when a Plan cannot be built.
349
- Log.warn(
350
- '[CheckAllFirmwareRelease] Optional firmware Plan is unavailable; using the legacy release result'
351
- );
352
- firmwareUpdatePlan = undefined;
353
- }
354
318
 
355
319
  return {
356
320
  firmware: firmwareRelease,
@@ -365,8 +329,7 @@ export default class CheckAllFirmwareRelease extends BaseMethod {
365
329
  }
366
330
  : undefined,
367
331
  features,
368
- firmwareUpdatePlan,
369
- } as unknown as AllFirmwareRelease;
332
+ } as AllFirmwareRelease;
370
333
  }
371
334
 
372
335
  private async runProtocolV2(): Promise<AllFirmwareRelease> {
@@ -401,6 +364,7 @@ export default class CheckAllFirmwareRelease extends BaseMethod {
401
364
  checkFirmwareHash,
402
365
  firmwareType,
403
366
  release,
367
+ deviceType: state.identity.deviceType,
404
368
  });
405
369
  const resourceDeviceType =
406
370
  state.identity.deviceType === 'neo' ? EDeviceType.Neo : EDeviceType.Pro2;
@@ -10,7 +10,6 @@ import { UI_REQUEST } from '../constants/ui-request';
10
10
  import { BaseMethod } from './BaseMethod';
11
11
  import { validateParams } from './helpers/paramsValidator';
12
12
  import { getBinary } from './firmware/getBinary';
13
- import { BOOTLOADER_POLL_INITIALIZE_TIMEOUT_MS } from './firmware/FirmwareUpdateBaseMethod';
14
13
  import { uploadFirmware } from './firmware/uploadFirmware';
15
14
  import { createUiMessage } from '../events';
16
15
  import { DeviceModelToTypes, type KnownDevice } from '../types';
@@ -79,10 +78,6 @@ export default class FirmwareUpdate extends BaseMethod<Params> {
79
78
  this.checkPromise = createDeferred();
80
79
  const env = DataManager.getSettings('env');
81
80
  const isBleReconnect = connectId && DataManager.isBleConnect(env);
82
- // Tracks the in-flight BLE probe so interval ticks never overlap: a superseded
83
- // Initialize left pending on the V1 transport is exactly what later times out
84
- // and used to tear down the connection mid-firmware-upload.
85
- let bleProbeInFlight = false;
86
81
 
87
82
  Log.log('FirmwareUpdate [checkDeviceToBootloader] isBleReconnect: ', isBleReconnect);
88
83
 
@@ -90,8 +85,6 @@ export default class FirmwareUpdate extends BaseMethod<Params> {
90
85
  const intervalTimer: ReturnType<typeof setInterval> | undefined = setInterval(
91
86
  async () => {
92
87
  if (isBleReconnect) {
93
- if (bleProbeInFlight) return;
94
- bleProbeInFlight = true;
95
88
  try {
96
89
  await this.device.deviceConnector?.acquire(
97
90
  this.device.originalDescriptor.id,
@@ -99,10 +92,7 @@ export default class FirmwareUpdate extends BaseMethod<Params> {
99
92
  true,
100
93
  this.payload.connectProtocol ?? this.device.originalDescriptor.protocolType
101
94
  );
102
- // Bound each probe so a request the rebooting device never received
103
- // frees the slot for the next tick instead of hanging into the
104
- // 30s reboot budget.
105
- await this.device.initialize({ timeoutMs: BOOTLOADER_POLL_INITIALIZE_TIMEOUT_MS });
95
+ await this.device.initialize();
106
96
  if (this.device.isBootloader()) {
107
97
  clearInterval(intervalTimer);
108
98
  this.checkPromise?.resolve(true);
@@ -110,8 +100,6 @@ export default class FirmwareUpdate extends BaseMethod<Params> {
110
100
  } catch (e) {
111
101
  // ignore error because of device is not connected
112
102
  Log.log('catch Bluetooth error when device is restarting: ', e);
113
- } finally {
114
- bleProbeInFlight = false;
115
103
  }
116
104
  } else {
117
105
  const deviceDiff = await this.device.deviceConnector?.enumerate();