@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.
- package/__tests__/check-all-firmware-release-protocol-v2.test.ts +28 -0
- package/__tests__/connectSettings.test.ts +5 -47
- package/__tests__/firmware-update/firmware-update-v2-download-before-boot.test.ts +31 -59
- package/__tests__/protocol-v2-firmware-targets.test.ts +33 -1
- package/__tests__/protocol-v2-resources.test.ts +9 -6
- package/__tests__/protocol-v2.test.ts +174 -383
- package/__tests__/protocolV2FileWrite.test.ts +48 -7
- package/dist/api/CheckAllFirmwareRelease.d.ts +2 -1
- package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
- package/dist/api/FirmwareUpdate.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV2.d.ts +0 -10
- package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV3.d.ts +3 -7
- package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV4.d.ts +6 -25
- package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
- package/dist/api/device/DeviceUpdateBootloader.d.ts +1 -5
- package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
- package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +0 -8
- package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
- package/dist/api/firmware/getBinary.d.ts +0 -7
- package/dist/api/firmware/getBinary.d.ts.map +1 -1
- package/dist/api/firmware/updateBootloader.d.ts +0 -2
- package/dist/api/firmware/updateBootloader.d.ts.map +1 -1
- package/dist/api/firmware/uploadFirmware.d.ts +1 -9
- package/dist/api/firmware/uploadFirmware.d.ts.map +1 -1
- package/dist/api/helpers/protocolV2FileWrite.d.ts.map +1 -1
- package/dist/api/stellar/StellarSignTransaction.d.ts +1 -1
- package/dist/data-manager/DataManager.d.ts +0 -1
- package/dist/data-manager/DataManager.d.ts.map +1 -1
- package/dist/data-manager/connectSettings.d.ts.map +1 -1
- package/dist/device/Device.d.ts +0 -1
- package/dist/device/Device.d.ts.map +1 -1
- package/dist/index.d.ts +2 -180
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1041 -3037
- package/dist/inject.d.ts.map +1 -1
- package/dist/lowLevelInject.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/resources.d.ts +1 -1
- package/dist/protocols/protocol-v2/resources.d.ts.map +1 -1
- package/dist/topLevelInject.d.ts.map +1 -1
- package/dist/types/api/checkAllFirmwareRelease.d.ts +0 -4
- package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
- package/dist/types/api/deviceUpdateBootloader.d.ts +0 -6
- package/dist/types/api/deviceUpdateBootloader.d.ts.map +1 -1
- package/dist/types/api/export.d.ts +1 -4
- package/dist/types/api/export.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdate.d.ts +0 -68
- package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
- package/dist/types/api/index.d.ts +1 -9
- package/dist/types/api/index.d.ts.map +1 -1
- package/dist/types/settings.d.ts +1 -14
- package/dist/types/settings.d.ts.map +1 -1
- package/dist/utils/deviceFeaturesCompat.d.ts +0 -1
- package/dist/utils/deviceFeaturesCompat.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/api/CheckAllFirmwareRelease.ts +25 -61
- package/src/api/FirmwareUpdate.ts +1 -13
- package/src/api/FirmwareUpdateV2.ts +121 -296
- package/src/api/FirmwareUpdateV3.ts +57 -263
- package/src/api/FirmwareUpdateV4.ts +287 -865
- package/src/api/device/DeviceUpdateBootloader.ts +6 -125
- package/src/api/firmware/FirmwareUpdateBaseMethod.ts +1 -72
- package/src/api/firmware/updateBootloader.ts +4 -19
- package/src/api/firmware/uploadFirmware.ts +22 -140
- package/src/api/helpers/protocolV2FileWrite.ts +54 -4
- package/src/data-manager/DataManager.ts +54 -59
- package/src/data-manager/connectSettings.ts +0 -11
- package/src/device/Device.ts +1 -6
- package/src/index.ts +0 -5
- package/src/inject.ts +2 -22
- package/src/lowLevelInject.ts +1 -5
- package/src/protocols/protocol-v2/resources.ts +5 -1
- package/src/topLevelInject.ts +1 -5
- package/src/types/api/checkAllFirmwareRelease.ts +0 -4
- package/src/types/api/deviceUpdateBootloader.ts +0 -6
- package/src/types/api/export.ts +0 -18
- package/src/types/api/firmwareUpdate.ts +0 -75
- package/src/types/api/index.ts +0 -14
- package/src/types/settings.ts +2 -14
- package/src/utils/deviceFeaturesCompat.ts +0 -6
- package/__tests__/device-initialize-timeout.test.ts +0 -56
- package/__tests__/firmware-update/check-all-firmware-release.test.ts +0 -175
- package/__tests__/firmware-update/device-update-bootloader.test.ts +0 -87
- package/__tests__/firmware-update/firmware-artifact-source.test.ts +0 -119
- package/__tests__/firmware-update/firmware-host-binding.test.ts +0 -70
- package/__tests__/firmware-update/firmware-preparation-error.test.ts +0 -27
- package/__tests__/firmware-update/firmware-update-bootloader-poll.test.ts +0 -200
- package/__tests__/firmware-update/firmware-update-capabilities.test.ts +0 -13
- package/__tests__/firmware-update/firmware-update-plan-bootloader-identity.test.ts +0 -394
- package/__tests__/firmware-update/firmware-update-plan.test.ts +0 -593
- package/__tests__/firmware-update/firmware-update-prepared-plan.test.ts +0 -231
- package/__tests__/firmware-update/firmware-update-v3-reconnect.test.ts +0 -63
- package/__tests__/firmware-update/firmware-upload-source.test.ts +0 -70
- package/dist/api/firmware/FirmwareArtifactSource.d.ts +0 -25
- package/dist/api/firmware/FirmwareArtifactSource.d.ts.map +0 -1
- package/dist/api/firmware/FirmwareHostBinding.d.ts +0 -6
- package/dist/api/firmware/FirmwareHostBinding.d.ts.map +0 -1
- package/dist/api/firmware/FirmwarePreparationError.d.ts +0 -3
- package/dist/api/firmware/FirmwarePreparationError.d.ts.map +0 -1
- package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts +0 -3
- package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts.map +0 -1
- package/dist/api/firmware/FirmwareUpdatePlan.d.ts +0 -25
- package/dist/api/firmware/FirmwareUpdatePlan.d.ts.map +0 -1
- package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts +0 -32
- package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts.map +0 -1
- package/dist/types/api/firmwareUpdateCapabilities.d.ts +0 -9
- package/dist/types/api/firmwareUpdateCapabilities.d.ts.map +0 -1
- package/dist/types/api/firmwareUpdatePlan.d.ts +0 -28
- package/dist/types/api/firmwareUpdatePlan.d.ts.map +0 -1
- package/dist/types/api/firmwareUpdatePreparedPlan.d.ts +0 -42
- package/dist/types/api/firmwareUpdatePreparedPlan.d.ts.map +0 -1
- package/src/api/firmware/FirmwareArtifactSource.ts +0 -278
- package/src/api/firmware/FirmwareHostBinding.ts +0 -100
- package/src/api/firmware/FirmwarePreparationError.ts +0 -12
- package/src/api/firmware/FirmwareUpdateCapabilities.ts +0 -9
- package/src/api/firmware/FirmwareUpdatePlan.ts +0 -772
- package/src/api/firmware/FirmwareUpdatePreparedPlan.ts +0 -449
- package/src/types/api/firmwareUpdateCapabilities.ts +0 -9
- package/src/types/api/firmwareUpdatePlan.ts +0 -38
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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();
|