@onekeyfe/hd-core 1.2.0-alpha.21 → 1.2.0-alpha.23
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__/DeviceCommands.test.ts +85 -0
- package/__tests__/connectSettings.test.ts +47 -5
- package/__tests__/device-identity.test.ts +24 -2
- package/__tests__/device-settings.test.ts +2 -2
- package/__tests__/device-wallet-session-store.test.ts +152 -7
- package/__tests__/firmware-update/check-all-firmware-release.test.ts +86 -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-update-capabilities.test.ts +13 -0
- package/__tests__/firmware-update/firmware-update-plan.test.ts +326 -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 +39 -30
- package/__tests__/firmware-update/firmware-upload-source.test.ts +70 -0
- package/__tests__/logBlockEvent.test.ts +17 -0
- package/__tests__/open-wallet-session.test.ts +311 -12
- package/__tests__/pro2Wallpaper.test.ts +7 -18
- package/__tests__/protocol-v2-unlock-policy.test.ts +45 -0
- package/__tests__/protocol-v2.test.ts +685 -177
- package/__tests__/public-device-state-api.test.ts +69 -62
- package/__tests__/public-pro2-api-boundary.test.ts +8 -34
- package/dist/api/BaseMethod.d.ts +2 -1
- package/dist/api/BaseMethod.d.ts.map +1 -1
- package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
- package/dist/api/ClearSessionCache.d.ts.map +1 -1
- package/dist/api/FirmwareUpdate.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 +29 -10
- 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/conflux/ConfluxGetAddress.d.ts +1 -0
- package/dist/api/conflux/ConfluxGetAddress.d.ts.map +1 -1
- package/dist/api/conflux/ConfluxSignMessage.d.ts +1 -0
- package/dist/api/conflux/ConfluxSignMessage.d.ts.map +1 -1
- package/dist/api/conflux/ConfluxSignMessageCIP23.d.ts +1 -0
- package/dist/api/conflux/ConfluxSignMessageCIP23.d.ts.map +1 -1
- package/dist/api/conflux/ConfluxSignTransaction.d.ts +1 -0
- package/dist/api/conflux/ConfluxSignTransaction.d.ts.map +1 -1
- package/dist/api/device/DeviceUnlock.d.ts +1 -1
- package/dist/api/device/DeviceUnlock.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/device/DeviceWipe.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/FirmwareUpdateBaseMethod.d.ts +7 -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 +23 -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/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.map +1 -1
- package/dist/api/index.d.ts +0 -17
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/nexa/NexaSignTransaction.d.ts +1 -0
- package/dist/api/nexa/NexaSignTransaction.d.ts.map +1 -1
- package/dist/api/stellar/StellarSignTransaction.d.ts +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 +3 -2
- package/dist/device/Device.d.ts.map +1 -1
- package/dist/device/DeviceCommands.d.ts.map +1 -1
- package/dist/device/DeviceStateMapper.d.ts.map +1 -1
- package/dist/device/DeviceStateProjector.d.ts.map +1 -1
- package/dist/events/device.d.ts +1 -0
- 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 +1 -0
- package/dist/events/ui-request.d.ts.map +1 -1
- package/dist/index.d.ts +273 -230
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3060 -1676
- package/dist/inject.d.ts.map +1 -1
- package/dist/lowLevelInject.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/settingsUnlockPolicy.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/unlockPolicy.d.ts +4 -0
- package/dist/protocols/protocol-v2/unlockPolicy.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/unlockRetry.d.ts.map +1 -1
- 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 +3 -0
- package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
- package/dist/types/api/deviceUnlock.d.ts +2 -2
- package/dist/types/api/deviceUnlock.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 +27 -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/getPassphraseState.d.ts.map +1 -1
- package/dist/types/api/index.d.ts +10 -19
- package/dist/types/api/index.d.ts.map +1 -1
- package/dist/types/api/openWalletSession.d.ts +1 -0
- package/dist/types/api/openWalletSession.d.ts.map +1 -1
- package/dist/types/api/protocolV2.d.ts +3 -76
- package/dist/types/api/protocolV2.d.ts.map +1 -1
- package/dist/types/api/sessionCache.d.ts +4 -1
- package/dist/types/api/sessionCache.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.map +1 -1
- package/dist/utils/deviceInfoUtils.d.ts.map +1 -1
- package/dist/utils/patch.d.ts +1 -1
- package/dist/utils/patch.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/api/BaseMethod.ts +8 -3
- package/src/api/CheckAllFirmwareRelease.ts +23 -3
- package/src/api/ClearSessionCache.ts +4 -0
- package/src/api/FirmwareUpdate.ts +8 -1
- package/src/api/FirmwareUpdateV2.ts +292 -120
- package/src/api/FirmwareUpdateV3.ts +256 -55
- package/src/api/FirmwareUpdateV4.ts +821 -331
- package/src/api/GetPassphraseState.ts +11 -5
- package/src/api/OpenWalletSession.ts +74 -25
- package/src/api/UploadPortfolio.ts +1 -1
- package/src/api/conflux/ConfluxGetAddress.ts +2 -0
- package/src/api/conflux/ConfluxSignMessage.ts +2 -0
- package/src/api/conflux/ConfluxSignMessageCIP23.ts +2 -0
- package/src/api/conflux/ConfluxSignTransaction.ts +2 -0
- package/src/api/device/DeviceChangePin.ts +1 -1
- package/src/api/device/DeviceUnlock.ts +1 -2
- package/src/api/device/DeviceUpdateBootloader.ts +122 -6
- package/src/api/device/DeviceWipe.ts +3 -1
- package/src/api/firmware/FirmwareArtifactSource.ts +278 -0
- package/src/api/firmware/FirmwareHostBinding.ts +100 -0
- package/src/api/firmware/FirmwareUpdateBaseMethod.ts +50 -0
- package/src/api/firmware/FirmwareUpdateCapabilities.ts +9 -0
- package/src/api/firmware/FirmwareUpdatePlan.ts +621 -0
- package/src/api/firmware/FirmwareUpdatePreparedPlan.ts +392 -0
- package/src/api/firmware/updateBootloader.ts +19 -4
- package/src/api/firmware/uploadFirmware.ts +140 -22
- package/src/api/helpers/protocolV2FileWrite.ts +6 -0
- package/src/api/index.ts +0 -18
- package/src/api/nexa/NexaSignTransaction.ts +2 -0
- package/src/api/protocol-v2/DeviceUploadWallpaper.ts +1 -1
- package/src/core/index.ts +1 -0
- package/src/data/messages/messages-protocol-v2.json +35 -1
- package/src/data-manager/DataManager.ts +33 -33
- package/src/data-manager/connectSettings.ts +11 -0
- package/src/device/Device.ts +80 -67
- package/src/device/DeviceCommands.ts +76 -159
- package/src/device/DeviceStateMapper.ts +18 -1
- package/src/device/DeviceStateProjector.ts +7 -1
- package/src/events/device.ts +1 -0
- package/src/events/logBlockEvent.ts +1 -14
- package/src/events/ui-request.ts +1 -0
- package/src/index.ts +5 -0
- package/src/inject.ts +22 -25
- package/src/lowLevelInject.ts +5 -1
- package/src/protocols/protocol-v2/settingsUnlockPolicy.ts +2 -3
- package/src/protocols/protocol-v2/unlockPolicy.ts +105 -0
- package/src/protocols/protocol-v2/unlockRetry.ts +1 -3
- package/src/protocols/protocol-v2/walletSession.ts +86 -9
- package/src/topLevelInject.ts +5 -1
- package/src/types/api/checkAllFirmwareRelease.ts +3 -0
- package/src/types/api/deviceUnlock.ts +2 -5
- 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 +36 -0
- package/src/types/api/firmwareUpdatePreparedPlan.ts +53 -0
- package/src/types/api/getPassphraseState.ts +4 -3
- package/src/types/api/index.ts +14 -34
- package/src/types/api/openWalletSession.ts +2 -0
- package/src/types/api/protocolV2.ts +3 -156
- package/src/types/api/sessionCache.ts +9 -4
- package/src/types/settings.ts +13 -0
- package/src/utils/deviceFeaturesUtils.ts +5 -1
- package/src/utils/deviceInfoUtils.ts +3 -16
|
@@ -2,7 +2,7 @@ import { EDeviceType, EFirmwareType, HardwareErrorCode } from '@onekeyfe/hd-shar
|
|
|
2
2
|
|
|
3
3
|
import FirmwareUpdateV2 from '../../src/api/FirmwareUpdateV2';
|
|
4
4
|
import { getBinary } from '../../src/api/firmware/getBinary';
|
|
5
|
-
import {
|
|
5
|
+
import { uploadFirmwareFromSource } from '../../src/api/firmware/uploadFirmware';
|
|
6
6
|
import * as utils from '../../src/utils';
|
|
7
7
|
|
|
8
8
|
jest.mock('../../src/data/config', () => ({
|
|
@@ -18,7 +18,8 @@ jest.mock('../../src/api/firmware/getBinary', () => ({
|
|
|
18
18
|
|
|
19
19
|
jest.mock('../../src/api/firmware/uploadFirmware', () => ({
|
|
20
20
|
updateResources: jest.fn(),
|
|
21
|
-
|
|
21
|
+
updateResourcesFromSources: jest.fn(),
|
|
22
|
+
uploadFirmwareFromSource: jest.fn(),
|
|
22
23
|
}));
|
|
23
24
|
|
|
24
25
|
jest.mock('../../src/device/DevicePool', () => ({
|
|
@@ -29,7 +30,9 @@ jest.mock('../../src/device/DevicePool', () => ({
|
|
|
29
30
|
}));
|
|
30
31
|
|
|
31
32
|
const mockGetBinary = getBinary as jest.MockedFunction<typeof getBinary>;
|
|
32
|
-
const
|
|
33
|
+
const mockUploadFirmwareFromSource = uploadFirmwareFromSource as jest.MockedFunction<
|
|
34
|
+
typeof uploadFirmwareFromSource
|
|
35
|
+
>;
|
|
33
36
|
|
|
34
37
|
type DeviceType = 'CLASSIC1S' | 'PURE';
|
|
35
38
|
|
|
@@ -175,7 +178,7 @@ describe('FirmwareUpdateV2 download-before-reboot safety', () => {
|
|
|
175
178
|
expect(mockGetBinary).toHaveBeenCalledTimes(1);
|
|
176
179
|
expectNoFirmwareMutationCalls(typedCall);
|
|
177
180
|
expect(acquire).not.toHaveBeenCalled();
|
|
178
|
-
expect(
|
|
181
|
+
expect(mockUploadFirmwareFromSource).not.toHaveBeenCalled();
|
|
179
182
|
});
|
|
180
183
|
|
|
181
184
|
it.each([
|
|
@@ -216,9 +219,11 @@ describe('FirmwareUpdateV2 download-before-reboot safety', () => {
|
|
|
216
219
|
binary: firmwareBinary,
|
|
217
220
|
} as Awaited<ReturnType<typeof getBinary>>);
|
|
218
221
|
});
|
|
219
|
-
|
|
222
|
+
mockUploadFirmwareFromSource.mockImplementation(() => {
|
|
220
223
|
callOrder.push('upload');
|
|
221
|
-
return Promise.resolve(
|
|
224
|
+
return Promise.resolve(
|
|
225
|
+
expectedResponse as Awaited<ReturnType<typeof uploadFirmwareFromSource>>
|
|
226
|
+
);
|
|
222
227
|
});
|
|
223
228
|
const { method, typedCall } = createMethod({
|
|
224
229
|
updateType,
|
|
@@ -248,15 +253,15 @@ describe('FirmwareUpdateV2 download-before-reboot safety', () => {
|
|
|
248
253
|
},
|
|
249
254
|
})
|
|
250
255
|
);
|
|
251
|
-
expect(
|
|
256
|
+
expect(mockUploadFirmwareFromSource).toHaveBeenCalledWith(
|
|
252
257
|
updateType,
|
|
253
258
|
expect.any(Function),
|
|
254
259
|
expect.any(Function),
|
|
255
260
|
method.device,
|
|
256
|
-
{
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
261
|
+
expect.objectContaining({
|
|
262
|
+
size: firmwareBinary.byteLength,
|
|
263
|
+
}),
|
|
264
|
+
true,
|
|
260
265
|
isUpdateBootloader
|
|
261
266
|
);
|
|
262
267
|
}
|
|
@@ -271,11 +276,11 @@ describe('FirmwareUpdateV2 download-before-reboot safety', () => {
|
|
|
271
276
|
binary: firmwareBinary,
|
|
272
277
|
} as Awaited<ReturnType<typeof getBinary>>);
|
|
273
278
|
});
|
|
274
|
-
|
|
279
|
+
mockUploadFirmwareFromSource.mockImplementation(() => {
|
|
275
280
|
callOrder.push('upload');
|
|
276
281
|
return Promise.resolve({
|
|
277
282
|
success: true,
|
|
278
|
-
} as Awaited<ReturnType<typeof
|
|
283
|
+
} as Awaited<ReturnType<typeof uploadFirmwareFromSource>>);
|
|
279
284
|
});
|
|
280
285
|
const { method, typedCall, acquire } = createMethod({
|
|
281
286
|
bootloaderMode: true,
|
|
@@ -300,9 +305,9 @@ describe('FirmwareUpdateV2 download-before-reboot safety', () => {
|
|
|
300
305
|
resolveDownload = resolve;
|
|
301
306
|
})
|
|
302
307
|
);
|
|
303
|
-
|
|
308
|
+
mockUploadFirmwareFromSource.mockResolvedValue({
|
|
304
309
|
success: true,
|
|
305
|
-
} as Awaited<ReturnType<typeof
|
|
310
|
+
} as Awaited<ReturnType<typeof uploadFirmwareFromSource>>);
|
|
306
311
|
const { method, typedCall } = createMethod();
|
|
307
312
|
|
|
308
313
|
const runPromise = method.run();
|
|
@@ -333,7 +338,7 @@ describe('FirmwareUpdateV2 download-before-reboot safety', () => {
|
|
|
333
338
|
|
|
334
339
|
expectNoFirmwareMutationCalls(typedCall);
|
|
335
340
|
expect(acquire).not.toHaveBeenCalled();
|
|
336
|
-
expect(
|
|
341
|
+
expect(mockUploadFirmwareFromSource).not.toHaveBeenCalled();
|
|
337
342
|
});
|
|
338
343
|
|
|
339
344
|
it.each([
|
|
@@ -342,23 +347,23 @@ describe('FirmwareUpdateV2 download-before-reboot safety', () => {
|
|
|
342
347
|
])(
|
|
343
348
|
'keeps the non-empty %s binary overload and never downloads it again',
|
|
344
349
|
async (_kind, binary) => {
|
|
345
|
-
|
|
350
|
+
mockUploadFirmwareFromSource.mockResolvedValue({
|
|
346
351
|
success: true,
|
|
347
|
-
} as Awaited<ReturnType<typeof
|
|
352
|
+
} as Awaited<ReturnType<typeof uploadFirmwareFromSource>>);
|
|
348
353
|
const { method } = createMethod({ binary });
|
|
349
354
|
|
|
350
355
|
await method.run();
|
|
351
356
|
|
|
352
357
|
expect(mockGetBinary).not.toHaveBeenCalled();
|
|
353
|
-
expect(
|
|
358
|
+
expect(mockUploadFirmwareFromSource).toHaveBeenCalledWith(
|
|
354
359
|
'firmware',
|
|
355
360
|
expect.any(Function),
|
|
356
361
|
expect.any(Function),
|
|
357
362
|
method.device,
|
|
358
|
-
{
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
363
|
+
expect.objectContaining({
|
|
364
|
+
size: binary.byteLength,
|
|
365
|
+
}),
|
|
366
|
+
true,
|
|
362
367
|
undefined
|
|
363
368
|
);
|
|
364
369
|
}
|
|
@@ -369,17 +374,21 @@ describe('FirmwareUpdateV2 download-before-reboot safety', () => {
|
|
|
369
374
|
['DataView', new DataView(new Uint8Array([9, 3, 4, 9]).buffer, 1, 2), [3, 4]],
|
|
370
375
|
['custom Buffer', createCustomBuffer(4), [1, 2, 3, 4]],
|
|
371
376
|
])('normalizes a non-empty %s before rebooting', async (_kind, binary, expectedBytes) => {
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
377
|
+
let uploadedBytes: number[] = [];
|
|
378
|
+
mockUploadFirmwareFromSource.mockImplementation(
|
|
379
|
+
async (_updateType, _typedCall, _postMessage, _device, source) => {
|
|
380
|
+
uploadedBytes = Array.from(new Uint8Array(await source.readAt(0, source.size)));
|
|
381
|
+
return {
|
|
382
|
+
success: true,
|
|
383
|
+
} as Awaited<ReturnType<typeof uploadFirmwareFromSource>>;
|
|
384
|
+
}
|
|
385
|
+
);
|
|
375
386
|
const { method } = createMethod({ binary });
|
|
376
387
|
|
|
377
388
|
await method.run();
|
|
378
389
|
|
|
379
390
|
expect(mockGetBinary).not.toHaveBeenCalled();
|
|
380
|
-
|
|
381
|
-
expect(normalizedBinary).toBeInstanceOf(ArrayBuffer);
|
|
382
|
-
expect(Array.from(new Uint8Array(normalizedBinary))).toEqual(expectedBytes);
|
|
391
|
+
expect(uploadedBytes).toEqual(expectedBytes);
|
|
383
392
|
});
|
|
384
393
|
|
|
385
394
|
it.each([
|
|
@@ -397,6 +406,6 @@ describe('FirmwareUpdateV2 download-before-reboot safety', () => {
|
|
|
397
406
|
expect(mockGetBinary).not.toHaveBeenCalled();
|
|
398
407
|
expectNoFirmwareMutationCalls(typedCall);
|
|
399
408
|
expect(acquire).not.toHaveBeenCalled();
|
|
400
|
-
expect(
|
|
409
|
+
expect(mockUploadFirmwareFromSource).not.toHaveBeenCalled();
|
|
401
410
|
});
|
|
402
411
|
});
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { EDeviceType } from '@onekeyfe/hd-shared';
|
|
2
|
+
|
|
3
|
+
import { uploadFirmwareFromSource } from '../../src/api/firmware/uploadFirmware';
|
|
4
|
+
|
|
5
|
+
import type { Device } from '../../src/device/Device';
|
|
6
|
+
import type { FirmwareByteSource } from '../../src/api/firmware/FirmwareArtifactSource';
|
|
7
|
+
|
|
8
|
+
jest.mock('../../src/data/config', () => ({
|
|
9
|
+
getSDKVersion: jest.fn(() => '1.0.0'),
|
|
10
|
+
DEFAULT_DOMAIN: 'https://jssdk.onekey.so/1.0.0/',
|
|
11
|
+
}));
|
|
12
|
+
|
|
13
|
+
describe('uploadFirmwareFromSource', () => {
|
|
14
|
+
it('serves legacy Touch firmware requests without materializing the complete artifact', async () => {
|
|
15
|
+
const size = 700 * 1024;
|
|
16
|
+
const requestedRanges: Array<{ offset: number; length: number }> = [];
|
|
17
|
+
const source: FirmwareByteSource = {
|
|
18
|
+
size,
|
|
19
|
+
readAt: jest.fn((offset: number, length: number) => {
|
|
20
|
+
requestedRanges.push({ offset, length });
|
|
21
|
+
return Promise.resolve(new ArrayBuffer(length));
|
|
22
|
+
}),
|
|
23
|
+
close: jest.fn(() => Promise.resolve()),
|
|
24
|
+
};
|
|
25
|
+
let nextOffset = 0;
|
|
26
|
+
const requestedLength = 128 * 1024;
|
|
27
|
+
const typedCall = jest.fn((type: string) => {
|
|
28
|
+
if (type === 'FirmwareErase') {
|
|
29
|
+
return Promise.resolve({
|
|
30
|
+
type: 'FirmwareRequest',
|
|
31
|
+
message: {
|
|
32
|
+
offset: nextOffset,
|
|
33
|
+
length: Math.min(requestedLength, size - nextOffset),
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
if (type === 'FirmwareUpload') {
|
|
38
|
+
nextOffset += Math.min(requestedLength, size - nextOffset);
|
|
39
|
+
if (nextOffset < size) {
|
|
40
|
+
return Promise.resolve({
|
|
41
|
+
type: 'FirmwareRequest',
|
|
42
|
+
message: {
|
|
43
|
+
offset: nextOffset,
|
|
44
|
+
length: Math.min(requestedLength, size - nextOffset),
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return Promise.resolve({
|
|
49
|
+
type: 'Success',
|
|
50
|
+
message: { message: 'installed' },
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return Promise.reject(new Error(`Unexpected command: ${type}`));
|
|
54
|
+
});
|
|
55
|
+
const device = {
|
|
56
|
+
features: undefined,
|
|
57
|
+
emit: jest.fn(),
|
|
58
|
+
getCurrentDeviceType: () => EDeviceType.Touch,
|
|
59
|
+
toMessageObject: () => ({}),
|
|
60
|
+
} as unknown as Device;
|
|
61
|
+
|
|
62
|
+
await expect(
|
|
63
|
+
uploadFirmwareFromSource('firmware', typedCall as never, jest.fn(), device, source)
|
|
64
|
+
).resolves.toEqual({ message: 'installed' });
|
|
65
|
+
|
|
66
|
+
expect(requestedRanges).toHaveLength(Math.ceil(size / requestedLength));
|
|
67
|
+
expect(requestedRanges.every(({ length }) => length <= 256 * 1024)).toBe(true);
|
|
68
|
+
expect(requestedRanges.some(({ length }) => length === size)).toBe(false);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
@@ -60,4 +60,21 @@ describe('getLogBlockLabel', () => {
|
|
|
60
60
|
expect(getLogBlockLabel({ payload: { method, data: new Uint8Array(1024) } })).toBe(method);
|
|
61
61
|
}
|
|
62
62
|
);
|
|
63
|
+
|
|
64
|
+
it.each(['evmSignMessage', 'btcSignMessage', 'evmSignTransaction'])(
|
|
65
|
+
'blocks request and response payload logging for every API method including %s',
|
|
66
|
+
method => {
|
|
67
|
+
expect(getLogBlockLabel({ method, message: 'sensitive signing payload' })).toBe(method);
|
|
68
|
+
expect(
|
|
69
|
+
getLogBlockLabel({
|
|
70
|
+
event: 'iframe-call',
|
|
71
|
+
payload: { method, message: 'sensitive signing payload' },
|
|
72
|
+
})
|
|
73
|
+
).toBe(method);
|
|
74
|
+
}
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
it('does not classify events without an API method as method calls', () => {
|
|
78
|
+
expect(getLogBlockLabel({ event: 'DEVICE_EVENT', type: 'device-connect' })).toBeUndefined();
|
|
79
|
+
});
|
|
63
80
|
});
|