@onekeyfe/hd-core 1.2.0-alpha.40 → 1.2.0-alpha.41
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__/AllNetworkGetAddressBase.tracing.test.ts +0 -78
- package/__tests__/DeviceEventRegistration.test.ts +0 -6
- package/__tests__/connectSettings.test.ts +47 -5
- package/__tests__/firmware-update/check-all-firmware-release.test.ts +175 -0
- package/__tests__/firmware-update/firmware-artifact-source.test.ts +119 -0
- package/__tests__/firmware-update/firmware-host-binding.test.ts +70 -0
- package/__tests__/firmware-update/firmware-preparation-error.test.ts +27 -0
- package/__tests__/firmware-update/firmware-update-capabilities.test.ts +13 -0
- package/__tests__/firmware-update/firmware-update-plan.test.ts +593 -0
- package/__tests__/firmware-update/firmware-update-prepared-plan.test.ts +213 -0
- package/__tests__/firmware-update/firmware-update-v2-download-before-boot.test.ts +59 -31
- package/__tests__/firmware-update/firmware-update-v3-reconnect.test.ts +58 -0
- package/__tests__/firmware-update/firmware-upload-source.test.ts +70 -0
- package/__tests__/get-device-state.test.ts +12 -132
- package/__tests__/homescreen.test.ts +1 -41
- package/__tests__/logBlockEvent.test.ts +1 -1
- package/__tests__/open-wallet-session.test.ts +18 -259
- package/__tests__/protocol-v2-unlock-policy.test.ts +35 -86
- package/__tests__/protocol-v2.test.ts +632 -333
- package/__tests__/public-pro2-api-boundary.test.ts +0 -1
- package/dist/api/BaseMethod.d.ts +1 -3
- package/dist/api/BaseMethod.d.ts.map +1 -1
- package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV2.d.ts +11 -0
- package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV3.d.ts +7 -3
- package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV4.d.ts +22 -5
- package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
- package/dist/api/GetPassphraseState.d.ts.map +1 -1
- package/dist/api/OpenWalletSession.d.ts.map +1 -1
- package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -1
- package/dist/api/device/DeviceUpdateBootloader.d.ts +5 -1
- package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
- package/dist/api/firmware/FirmwareArtifactSource.d.ts +25 -0
- package/dist/api/firmware/FirmwareArtifactSource.d.ts.map +1 -0
- package/dist/api/firmware/FirmwareHostBinding.d.ts +6 -0
- package/dist/api/firmware/FirmwareHostBinding.d.ts.map +1 -0
- package/dist/api/firmware/FirmwarePreparationError.d.ts +3 -0
- package/dist/api/firmware/FirmwarePreparationError.d.ts.map +1 -0
- package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +8 -0
- package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
- package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts +3 -0
- package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts.map +1 -0
- package/dist/api/firmware/FirmwareUpdatePlan.d.ts +25 -0
- package/dist/api/firmware/FirmwareUpdatePlan.d.ts.map +1 -0
- package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts +30 -0
- package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts.map +1 -0
- package/dist/api/firmware/getBinary.d.ts +7 -0
- package/dist/api/firmware/getBinary.d.ts.map +1 -1
- package/dist/api/firmware/progressThrottle.d.ts +3 -0
- package/dist/api/firmware/progressThrottle.d.ts.map +1 -0
- package/dist/api/firmware/updateBootloader.d.ts +2 -0
- package/dist/api/firmware/updateBootloader.d.ts.map +1 -1
- package/dist/api/firmware/uploadFirmware.d.ts +9 -1
- package/dist/api/firmware/uploadFirmware.d.ts.map +1 -1
- package/dist/api/helpers/protocolV2FileWrite.d.ts +0 -2
- package/dist/api/helpers/protocolV2FileWrite.d.ts.map +1 -1
- package/dist/api/index.d.ts +0 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts.map +1 -1
- package/dist/api/stellar/StellarSignTransaction.d.ts +1 -1
- package/dist/core/deviceEventRegistration.d.ts +0 -2
- package/dist/core/deviceEventRegistration.d.ts.map +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/data-manager/DataManager.d.ts +1 -0
- 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 +4 -22
- package/dist/device/Device.d.ts.map +1 -1
- package/dist/events/device.d.ts +0 -4
- package/dist/events/device.d.ts.map +1 -1
- package/dist/events/logBlockEvent.d.ts.map +1 -1
- package/dist/events/ui-request.d.ts +2 -27
- package/dist/events/ui-request.d.ts.map +1 -1
- package/dist/index.d.ts +181 -88
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3162 -1614
- package/dist/inject.d.ts.map +1 -1
- package/dist/lowLevelInject.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/features.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/lockedError.d.ts +2 -0
- package/dist/protocols/protocol-v2/lockedError.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/uiInteraction.d.ts +3 -3
- package/dist/protocols/protocol-v2/uiInteraction.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/unlockPolicy.d.ts +3 -1
- package/dist/protocols/protocol-v2/unlockPolicy.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/unlockRetry.d.ts +10 -0
- package/dist/protocols/protocol-v2/unlockRetry.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/walletSession.d.ts +1 -4
- package/dist/protocols/protocol-v2/walletSession.d.ts.map +1 -1
- package/dist/topLevelInject.d.ts.map +1 -1
- package/dist/types/api/checkAllFirmwareRelease.d.ts +4 -0
- package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
- package/dist/types/api/deviceUpdateBootloader.d.ts +6 -0
- package/dist/types/api/deviceUpdateBootloader.d.ts.map +1 -1
- package/dist/types/api/export.d.ts +4 -1
- package/dist/types/api/export.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdate.d.ts +69 -0
- package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdateCapabilities.d.ts +9 -0
- package/dist/types/api/firmwareUpdateCapabilities.d.ts.map +1 -0
- package/dist/types/api/firmwareUpdatePlan.d.ts +28 -0
- package/dist/types/api/firmwareUpdatePlan.d.ts.map +1 -0
- package/dist/types/api/firmwareUpdatePreparedPlan.d.ts +42 -0
- package/dist/types/api/firmwareUpdatePreparedPlan.d.ts.map +1 -0
- package/dist/types/api/index.d.ts +10 -3
- package/dist/types/api/index.d.ts.map +1 -1
- package/dist/types/api/protocolV2.d.ts +0 -3
- package/dist/types/api/protocolV2.d.ts.map +1 -1
- package/dist/types/settings.d.ts +13 -0
- package/dist/types/settings.d.ts.map +1 -1
- package/dist/utils/deviceFeaturesUtils.d.ts +0 -2
- package/dist/utils/deviceFeaturesUtils.d.ts.map +1 -1
- package/dist/utils/homescreen.d.ts +0 -4
- package/dist/utils/homescreen.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/patch.d.ts +1 -1
- package/dist/utils/patch.d.ts.map +1 -1
- package/dist/utils/pro2Wallpaper.d.ts +0 -10
- package/dist/utils/pro2Wallpaper.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/api/BaseMethod.ts +10 -8
- package/src/api/CheckAllFirmwareRelease.ts +51 -6
- package/src/api/FirmwareUpdateV2.ts +298 -120
- package/src/api/FirmwareUpdateV3.ts +263 -57
- package/src/api/FirmwareUpdateV4.ts +748 -281
- package/src/api/GetPassphraseState.ts +1 -7
- package/src/api/OpenWalletSession.ts +17 -54
- package/src/api/allnetwork/AllNetworkGetAddressBase.ts +11 -32
- package/src/api/device/DeviceUnlock.ts +1 -1
- package/src/api/device/DeviceUpdateBootloader.ts +122 -6
- package/src/api/firmware/FirmwareArtifactSource.ts +278 -0
- package/src/api/firmware/FirmwareHostBinding.ts +100 -0
- package/src/api/firmware/FirmwarePreparationError.ts +12 -0
- package/src/api/firmware/FirmwareUpdateBaseMethod.ts +57 -0
- package/src/api/firmware/FirmwareUpdateCapabilities.ts +9 -0
- package/src/api/firmware/FirmwareUpdatePlan.ts +745 -0
- package/src/api/firmware/FirmwareUpdatePreparedPlan.ts +392 -0
- package/src/api/firmware/progressThrottle.ts +44 -0
- package/src/api/firmware/updateBootloader.ts +19 -4
- package/src/api/firmware/uploadFirmware.ts +140 -22
- package/src/api/helpers/protocolV2FileWrite.ts +4 -11
- package/src/api/index.ts +0 -1
- package/src/api/protocol-v2/ProtocolInfoRequest.ts +1 -3
- package/src/core/deviceEventRegistration.ts +0 -4
- package/src/core/index.ts +75 -118
- package/src/data/messages/messages-protocol-v2.json +0 -10
- package/src/data-manager/DataManager.ts +33 -33
- package/src/data-manager/connectSettings.ts +11 -0
- package/src/device/Device.ts +21 -193
- package/src/events/device.ts +0 -4
- package/src/events/logBlockEvent.ts +0 -1
- package/src/events/ui-request.ts +2 -32
- package/src/index.ts +5 -0
- package/src/inject.ts +22 -3
- package/src/lowLevelInject.ts +5 -1
- package/src/protocols/protocol-v2/features.ts +2 -9
- package/src/protocols/protocol-v2/lockedError.ts +10 -0
- package/src/protocols/protocol-v2/uiInteraction.ts +5 -31
- package/src/protocols/protocol-v2/unlockPolicy.ts +105 -1
- package/src/protocols/protocol-v2/unlockRetry.ts +109 -0
- package/src/protocols/protocol-v2/walletSession.ts +18 -93
- package/src/topLevelInject.ts +5 -1
- package/src/types/api/checkAllFirmwareRelease.ts +4 -0
- package/src/types/api/deviceUpdateBootloader.ts +6 -0
- package/src/types/api/export.ts +18 -0
- package/src/types/api/firmwareUpdate.ts +76 -0
- package/src/types/api/firmwareUpdateCapabilities.ts +9 -0
- package/src/types/api/firmwareUpdatePlan.ts +38 -0
- package/src/types/api/firmwareUpdatePreparedPlan.ts +53 -0
- package/src/types/api/index.ts +14 -2
- package/src/types/api/protocolV2.ts +0 -13
- package/src/types/settings.ts +13 -0
- package/src/utils/deviceFeaturesUtils.ts +0 -4
- package/src/utils/homescreen.ts +6 -32
- package/src/utils/index.ts +1 -6
- package/src/utils/pro2Wallpaper.ts +8 -35
- package/__tests__/deviceUploadNft.test.ts +0 -187
- package/__tests__/pro2Nft.test.ts +0 -108
- package/__tests__/protocol-v2-ui-lifecycle.test.ts +0 -56
- package/__tests__/uiProgressThrottle.test.ts +0 -74
- package/dist/api/protocol-v2/DeviceUploadNft.d.ts +0 -30
- package/dist/api/protocol-v2/DeviceUploadNft.d.ts.map +0 -1
- package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts +0 -22
- package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts.map +0 -1
- package/dist/utils/pro2Nft.d.ts +0 -29
- package/dist/utils/pro2Nft.d.ts.map +0 -1
- package/dist/utils/uiProgressThrottle.d.ts +0 -3
- package/dist/utils/uiProgressThrottle.d.ts.map +0 -1
- package/src/api/protocol-v2/DeviceUploadNft.ts +0 -166
- package/src/protocols/protocol-v2/unlockPolicyRunner.ts +0 -117
- package/src/utils/pro2Nft.ts +0 -91
- package/src/utils/uiProgressThrottle.ts +0 -63
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
2
|
+
|
|
3
|
+
import type { FirmwareUpdateHostBinding } from '../../types/api/firmwareUpdate';
|
|
4
|
+
|
|
5
|
+
const bindingError = (message: string): never => {
|
|
6
|
+
throw ERRORS.TypedError(HardwareErrorCode.RuntimeError, message, {
|
|
7
|
+
firmwareUpdateCode: 'FirmwareArtifactReaderInvalid',
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
class FirmwareHostBindingRegistry {
|
|
12
|
+
private generation = 0;
|
|
13
|
+
|
|
14
|
+
private binding?: FirmwareUpdateHostBinding;
|
|
15
|
+
|
|
16
|
+
register(binding: FirmwareUpdateHostBinding): number {
|
|
17
|
+
if (
|
|
18
|
+
!binding ||
|
|
19
|
+
typeof binding.artifactReader?.open !== 'function' ||
|
|
20
|
+
typeof binding.artifactReader.read !== 'function' ||
|
|
21
|
+
typeof binding.artifactReader.close !== 'function'
|
|
22
|
+
) {
|
|
23
|
+
return bindingError('Firmware host binding is invalid');
|
|
24
|
+
}
|
|
25
|
+
this.generation += 1;
|
|
26
|
+
this.binding = binding;
|
|
27
|
+
return this.generation;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
unregister(generation?: number): boolean {
|
|
31
|
+
if (generation !== undefined && generation !== this.generation) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
this.generation += 1;
|
|
35
|
+
this.binding = undefined;
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
getGeneration(): number {
|
|
40
|
+
return this.generation;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
resolve(generation: number): FirmwareUpdateHostBinding {
|
|
44
|
+
if (
|
|
45
|
+
!Number.isSafeInteger(generation) ||
|
|
46
|
+
generation <= 0 ||
|
|
47
|
+
generation !== this.generation ||
|
|
48
|
+
!this.binding
|
|
49
|
+
) {
|
|
50
|
+
return bindingError(`Firmware host binding generation ${generation} is stale`);
|
|
51
|
+
}
|
|
52
|
+
const { binding } = this;
|
|
53
|
+
const assertCurrent = () => {
|
|
54
|
+
if (generation !== this.generation || binding !== this.binding) {
|
|
55
|
+
bindingError(`Firmware host binding generation ${generation} is stale`);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
return {
|
|
59
|
+
artifactReader: {
|
|
60
|
+
open: async input => {
|
|
61
|
+
assertCurrent();
|
|
62
|
+
const opened = await binding.artifactReader.open(input);
|
|
63
|
+
try {
|
|
64
|
+
assertCurrent();
|
|
65
|
+
} catch (error) {
|
|
66
|
+
if (opened?.readerId) {
|
|
67
|
+
await binding.artifactReader
|
|
68
|
+
.close({ readerId: opened.readerId })
|
|
69
|
+
.catch(() => undefined);
|
|
70
|
+
}
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
return opened;
|
|
74
|
+
},
|
|
75
|
+
read: async input => {
|
|
76
|
+
assertCurrent();
|
|
77
|
+
const result = await binding.artifactReader.read(input);
|
|
78
|
+
assertCurrent();
|
|
79
|
+
return result;
|
|
80
|
+
},
|
|
81
|
+
close: input => binding.artifactReader.close(input),
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const firmwareHostBindingRegistry = new FirmwareHostBindingRegistry();
|
|
88
|
+
|
|
89
|
+
export const registerFirmwareUpdateHostBinding = (binding: FirmwareUpdateHostBinding): number =>
|
|
90
|
+
firmwareHostBindingRegistry.register(binding);
|
|
91
|
+
|
|
92
|
+
export const unregisterFirmwareUpdateHostBinding = (generation?: number): boolean =>
|
|
93
|
+
firmwareHostBindingRegistry.unregister(generation);
|
|
94
|
+
|
|
95
|
+
export const getFirmwareUpdateHostBindingGeneration = (): number =>
|
|
96
|
+
firmwareHostBindingRegistry.getGeneration();
|
|
97
|
+
|
|
98
|
+
export const resolveFirmwareUpdateHostBinding = (
|
|
99
|
+
generation: number | undefined
|
|
100
|
+
): FirmwareUpdateHostBinding => firmwareHostBindingRegistry.resolve(generation ?? Number.NaN);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ERRORS, HardwareError, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
2
|
+
|
|
3
|
+
export const normalizeFirmwarePreparationError = (error: unknown) => {
|
|
4
|
+
if (error instanceof HardwareError && error.params?.firmwareUpdateCode) {
|
|
5
|
+
return error;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
return ERRORS.TypedError(
|
|
9
|
+
HardwareErrorCode.FirmwareUpdateDownloadFailed,
|
|
10
|
+
error instanceof Error ? error.message : String(error)
|
|
11
|
+
);
|
|
12
|
+
};
|
|
@@ -13,6 +13,8 @@ import { DeviceModelToTypes } from '../../types';
|
|
|
13
13
|
import { DataManager } from '../../data-manager';
|
|
14
14
|
import { BaseMethod } from '../BaseMethod';
|
|
15
15
|
import { DEVICE } from '../../events';
|
|
16
|
+
import { createFirmwareProgressThrottle } from './progressThrottle';
|
|
17
|
+
import { writeFirmwareByteSource } from './FirmwareArtifactSource';
|
|
16
18
|
|
|
17
19
|
import type {
|
|
18
20
|
IFirmwareUpdateProgressType,
|
|
@@ -23,6 +25,7 @@ import type { RebootType } from '@onekeyfe/hd-transport';
|
|
|
23
25
|
import type { Deferred } from '@onekeyfe/hd-shared';
|
|
24
26
|
import type { KnownDevice } from '../../types';
|
|
25
27
|
import type { TypedResponseMessage } from '../../device/DeviceCommands';
|
|
28
|
+
import type { FirmwareByteSource } from './FirmwareArtifactSource';
|
|
26
29
|
|
|
27
30
|
const Log = getLogger(LoggerNames.Method);
|
|
28
31
|
const SESSION_ERROR = 'session not found';
|
|
@@ -40,6 +43,8 @@ const isDeviceDisconnectedError = (error: unknown) => {
|
|
|
40
43
|
export class FirmwareUpdateBaseMethod<Params> extends BaseMethod<Params> {
|
|
41
44
|
checkPromise: Deferred<any> | null = null;
|
|
42
45
|
|
|
46
|
+
private shouldPostFirmwareProgress = createFirmwareProgressThrottle();
|
|
47
|
+
|
|
43
48
|
init(): void {}
|
|
44
49
|
|
|
45
50
|
run(): Promise<any> {
|
|
@@ -83,6 +88,10 @@ export class FirmwareUpdateBaseMethod<Params> extends BaseMethod<Params> {
|
|
|
83
88
|
* @param progress Post the percentage of the progress
|
|
84
89
|
*/
|
|
85
90
|
postProgressMessage = (progress: number, progressType: IFirmwareUpdateProgressType) => {
|
|
91
|
+
if (!this.shouldPostFirmwareProgress(progress, progressType)) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
86
95
|
this.postMessage(
|
|
87
96
|
createUiMessage(UI_REQUEST.FIRMWARE_PROGRESS, {
|
|
88
97
|
device: this.device.toMessageObject() as KnownDevice,
|
|
@@ -380,6 +389,54 @@ export class FirmwareUpdateBaseMethod<Params> extends BaseMethod<Params> {
|
|
|
380
389
|
return totalSize !== undefined ? (processedSize ?? 0) + payload.byteLength : 0;
|
|
381
390
|
}
|
|
382
391
|
|
|
392
|
+
async emmcCommonUpdateProcessFromSource({
|
|
393
|
+
source,
|
|
394
|
+
filePath,
|
|
395
|
+
processedSize,
|
|
396
|
+
totalSize,
|
|
397
|
+
}: {
|
|
398
|
+
source: FirmwareByteSource;
|
|
399
|
+
filePath: string;
|
|
400
|
+
processedSize?: number;
|
|
401
|
+
totalSize?: number;
|
|
402
|
+
}) {
|
|
403
|
+
if (!filePath.startsWith('0:')) {
|
|
404
|
+
throw new Error('filePath must start with 0:');
|
|
405
|
+
}
|
|
406
|
+
const env = DataManager.getSettings('env');
|
|
407
|
+
const chunkSize = 1024 * (DataManager.isBleConnect(env) ? 16 : 128);
|
|
408
|
+
|
|
409
|
+
await writeFirmwareByteSource({
|
|
410
|
+
source,
|
|
411
|
+
chunkSize,
|
|
412
|
+
write: async ({ data, sourceOffset, length, first }) => {
|
|
413
|
+
const progress =
|
|
414
|
+
totalSize !== undefined && processedSize !== undefined
|
|
415
|
+
? Math.min(Math.ceil(((processedSize + sourceOffset + length) / totalSize) * 100), 99)
|
|
416
|
+
: Math.min(Math.ceil(((sourceOffset + length) / source.size) * 100), 99);
|
|
417
|
+
const writeRes = await this.emmcFileWriteWithRetry(
|
|
418
|
+
filePath,
|
|
419
|
+
length,
|
|
420
|
+
sourceOffset,
|
|
421
|
+
data,
|
|
422
|
+
first,
|
|
423
|
+
progress
|
|
424
|
+
);
|
|
425
|
+
if (!writeRes) {
|
|
426
|
+
throw ERRORS.TypedError(
|
|
427
|
+
HardwareErrorCode.EmmcFileWriteFirmwareError,
|
|
428
|
+
'transfer data error'
|
|
429
|
+
);
|
|
430
|
+
}
|
|
431
|
+
const processedBytes = Number(writeRes.message.processed_byte);
|
|
432
|
+
this.postProgressMessage(progress, 'transferData');
|
|
433
|
+
return Number.isFinite(processedBytes) ? processedBytes : length;
|
|
434
|
+
},
|
|
435
|
+
});
|
|
436
|
+
|
|
437
|
+
return totalSize !== undefined ? (processedSize ?? 0) + source.size : 0;
|
|
438
|
+
}
|
|
439
|
+
|
|
383
440
|
async emmcFileWriteWithRetry(
|
|
384
441
|
filePath: string,
|
|
385
442
|
chunkLength: number,
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { FirmwareUpdateCapabilities } from '../../types/api/firmwareUpdateCapabilities';
|
|
2
|
+
|
|
3
|
+
export const getFirmwareUpdateCapabilities = (): FirmwareUpdateCapabilities => ({
|
|
4
|
+
planSchemaVersion: 2,
|
|
5
|
+
preparedPlanSchemaVersion: 2,
|
|
6
|
+
hostBindingProtocolVersion: 2,
|
|
7
|
+
manifestModes: ['external-only', 'sdk-managed'],
|
|
8
|
+
supportsArtifactReader: true,
|
|
9
|
+
});
|