@onekeyfe/hd-core 1.2.0-alpha.103 → 1.2.0-alpha.105
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 +10 -2
- package/__tests__/device-lifecycle-events.test.ts +113 -2
- package/__tests__/get-device-state.test.ts +0 -50
- package/__tests__/protocol-v2.test.ts +31 -11
- package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
- package/dist/device/Device.d.ts +1 -0
- package/dist/device/Device.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +12 -14
- package/package.json +4 -4
- package/src/api/FirmwareUpdateV4.ts +8 -7
- package/src/device/Device.ts +16 -15
|
@@ -561,17 +561,22 @@ describe('DeviceCommands failure mapping', () => {
|
|
|
561
561
|
});
|
|
562
562
|
|
|
563
563
|
describe('DeviceCommands Protocol V2 interactive response compatibility', () => {
|
|
564
|
-
it('
|
|
564
|
+
it('auto-acks Pro2 ButtonRequest and registers Cancel instead of Initialize', async () => {
|
|
565
565
|
const commands = createCommands();
|
|
566
566
|
const emit = jest.fn();
|
|
567
|
+
const cancelDevice = jest.spyOn(commands, 'cancelDevice').mockResolvedValue(undefined);
|
|
568
|
+
const cancelDeviceOnOneKeyDevice = jest
|
|
569
|
+
.spyOn(commands, 'cancelDeviceOnOneKeyDevice')
|
|
570
|
+
.mockResolvedValue(undefined);
|
|
567
571
|
const commonCall = jest.fn().mockResolvedValue({
|
|
568
572
|
type: 'Success',
|
|
569
573
|
message: {},
|
|
570
574
|
});
|
|
575
|
+
const setCancelableAction = jest.fn();
|
|
571
576
|
commands.device = {
|
|
572
577
|
...commands.device,
|
|
573
578
|
getCurrentDeviceType: jest.fn(() => 'pro2'),
|
|
574
|
-
setCancelableAction
|
|
579
|
+
setCancelableAction,
|
|
575
580
|
emit,
|
|
576
581
|
listenerCount: jest.fn(() => 0),
|
|
577
582
|
} as any;
|
|
@@ -593,6 +598,9 @@ describe('DeviceCommands Protocol V2 interactive response compatibility', () =>
|
|
|
593
598
|
expect.objectContaining({ code: 'ButtonRequest_PinEntry' })
|
|
594
599
|
);
|
|
595
600
|
expect(commonCall).toHaveBeenCalledWith('ButtonAck', {}, undefined);
|
|
601
|
+
await setCancelableAction.mock.calls[0][0]();
|
|
602
|
+
expect(cancelDevice).toHaveBeenCalledTimes(1);
|
|
603
|
+
expect(cancelDeviceOnOneKeyDevice).not.toHaveBeenCalled();
|
|
596
604
|
});
|
|
597
605
|
|
|
598
606
|
it('rejects PassphraseRequest when the Pro2 UI listener is not registered', async () => {
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import { HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
2
|
-
import { TRANSPORT_EVENT } from '@onekeyfe/hd-transport';
|
|
1
|
+
import { EDeviceType, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
2
|
+
import { DeviceType, TRANSPORT_EVENT } from '@onekeyfe/hd-transport';
|
|
3
3
|
|
|
4
4
|
import { initConnector, initCore } from '../src/core';
|
|
5
5
|
import { DataManager } from '../src/data-manager';
|
|
6
6
|
import TransportManager from '../src/data-manager/TransportManager';
|
|
7
7
|
import { Device } from '../src/device/Device';
|
|
8
|
+
import { cancelDeviceInPrompt, cancelDeviceWithInitialize } from '../src/device/DeviceCommands';
|
|
8
9
|
import { DevicePool } from '../src/device/DevicePool';
|
|
9
10
|
import { CORE_EVENT, DEVICE, IFRAME } from '../src/events';
|
|
11
|
+
import { PROTOCOL_V2_DEVICE_STATUS_GET_MESSAGE_TYPE } from '../src/protocols/protocol-v2';
|
|
10
12
|
|
|
11
13
|
import type Core from '../src/core';
|
|
12
14
|
import type { CoreMessage } from '../src/events';
|
|
@@ -271,6 +273,115 @@ describe('public device lifecycle events', () => {
|
|
|
271
273
|
expect(device.isUsedHere()).toBe(false);
|
|
272
274
|
});
|
|
273
275
|
|
|
276
|
+
test.each([
|
|
277
|
+
['V2', 'Cancel', 'webusb'],
|
|
278
|
+
['V2', 'Cancel', 'desktop-web-ble'],
|
|
279
|
+
['V2', 'Cancel', 'react-native'],
|
|
280
|
+
['V1', 'Initialize', 'webusb'],
|
|
281
|
+
['V1', 'Cancel', 'desktop-web-ble'],
|
|
282
|
+
] as const)(
|
|
283
|
+
'sends Protocol %s %s without treating the acquired %s session as disconnected',
|
|
284
|
+
async (protocol, messageType, env) => {
|
|
285
|
+
jest.spyOn(DataManager, 'getSettings').mockReturnValue(env as never);
|
|
286
|
+
const device = createInitializedDevice(protocol);
|
|
287
|
+
const post = jest.fn().mockResolvedValue(undefined);
|
|
288
|
+
const call = jest.fn().mockResolvedValue(undefined);
|
|
289
|
+
const cancel = jest.fn().mockResolvedValue(undefined);
|
|
290
|
+
device.originalDescriptor.session = device.mainId;
|
|
291
|
+
(device as unknown as { deviceAcquired: boolean }).deviceAcquired = true;
|
|
292
|
+
(device as any).commands = { transport: { post, call }, cancel };
|
|
293
|
+
device.setCancelableAction(() =>
|
|
294
|
+
messageType === 'Cancel'
|
|
295
|
+
? cancelDeviceInPrompt(device, false)
|
|
296
|
+
: cancelDeviceWithInitialize(device)
|
|
297
|
+
);
|
|
298
|
+
|
|
299
|
+
await device.interruptionFromUser();
|
|
300
|
+
|
|
301
|
+
if (messageType === 'Cancel') {
|
|
302
|
+
expect(post).toHaveBeenCalledWith(device.mainId, 'Cancel', {});
|
|
303
|
+
expect(call).not.toHaveBeenCalled();
|
|
304
|
+
} else {
|
|
305
|
+
expect(call).toHaveBeenCalledWith(device.mainId, 'Initialize', {});
|
|
306
|
+
expect(post).not.toHaveBeenCalled();
|
|
307
|
+
}
|
|
308
|
+
expect(cancel).toHaveBeenCalledTimes(1);
|
|
309
|
+
expect(device.hasDeviceAcquire()).toBe(true);
|
|
310
|
+
}
|
|
311
|
+
);
|
|
312
|
+
|
|
313
|
+
test.each([
|
|
314
|
+
[EDeviceType.Pro2, 'webusb', false, DeviceType.PRO2],
|
|
315
|
+
[EDeviceType.Neo, 'webusb', false, DeviceType.NEO],
|
|
316
|
+
[EDeviceType.Pro2, 'desktop-web-ble', true, DeviceType.PRO2],
|
|
317
|
+
[EDeviceType.Neo, 'desktop-web-ble', true, DeviceType.NEO],
|
|
318
|
+
[EDeviceType.Pro2, 'react-native', true, DeviceType.PRO2],
|
|
319
|
+
[EDeviceType.Neo, 'react-native', true, DeviceType.NEO],
|
|
320
|
+
[EDeviceType.Pro2, 'lowlevel', false, DeviceType.PRO2],
|
|
321
|
+
] as const)(
|
|
322
|
+
'refreshes %s runtime state after acquiring a fresh %s session',
|
|
323
|
+
async (deviceType, env, isBle, protocolV2DeviceType) => {
|
|
324
|
+
jest.spyOn(DataManager, 'getSettings').mockReturnValue(env as never);
|
|
325
|
+
const device = createInitializedDevice('V2');
|
|
326
|
+
const staleProtocolInfo = {
|
|
327
|
+
version: 1,
|
|
328
|
+
build_fingerprint: 'bootloader__1.0.0__abcdef0__PROD__RELEASE',
|
|
329
|
+
supported_messages: [],
|
|
330
|
+
};
|
|
331
|
+
const freshProtocolInfo = {
|
|
332
|
+
version: 1,
|
|
333
|
+
build_fingerprint: 'application__5.0.0__abcdef0__PROD__RELEASE',
|
|
334
|
+
supported_messages: [PROTOCOL_V2_DEVICE_STATUS_GET_MESSAGE_TYPE],
|
|
335
|
+
};
|
|
336
|
+
device.updateState(
|
|
337
|
+
{
|
|
338
|
+
identity: { deviceType },
|
|
339
|
+
status: { mode: 'bootloader' },
|
|
340
|
+
raw: { protocolV2ProtocolInfo: staleProtocolInfo },
|
|
341
|
+
},
|
|
342
|
+
'initialize'
|
|
343
|
+
);
|
|
344
|
+
const acquire = jest
|
|
345
|
+
.fn()
|
|
346
|
+
.mockResolvedValue(isBle ? { uuid: 'fresh-session', protocolType: 'V2' } : 'fresh-session');
|
|
347
|
+
device.deviceConnector = { acquire } as never;
|
|
348
|
+
|
|
349
|
+
await device.acquire('V2', { throwOnRunPromiseError: true });
|
|
350
|
+
const typedCall = jest.fn().mockImplementation((requestType: string) => {
|
|
351
|
+
if (requestType === 'DeviceInfoGet') {
|
|
352
|
+
return {
|
|
353
|
+
message: {
|
|
354
|
+
protocol_version: 2,
|
|
355
|
+
hw: { Device_type: protocolV2DeviceType, serial_no: 'SERIAL-001' },
|
|
356
|
+
fw: { application: { version: '5.0.0' } },
|
|
357
|
+
},
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
if (requestType === 'ProtocolInfoRequest') {
|
|
361
|
+
return { message: freshProtocolInfo };
|
|
362
|
+
}
|
|
363
|
+
if (requestType === 'DeviceStatusGet') {
|
|
364
|
+
return {
|
|
365
|
+
message: { init_states: true, unlocked: true, device_id: 'wallet-device-id' },
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
throw new Error(`Unexpected request: ${requestType}`);
|
|
369
|
+
});
|
|
370
|
+
device.commands.typedCall = typedCall as never;
|
|
371
|
+
|
|
372
|
+
await device.initialize();
|
|
373
|
+
|
|
374
|
+
expect(typedCall.mock.calls.map(callArgs => callArgs[0])).toEqual([
|
|
375
|
+
'DeviceInfoGet',
|
|
376
|
+
'ProtocolInfoRequest',
|
|
377
|
+
'DeviceStatusGet',
|
|
378
|
+
]);
|
|
379
|
+
expect(device.state?.status.mode).toBe('normal');
|
|
380
|
+
expect(device.state?.identity.deviceType).toBe(deviceType);
|
|
381
|
+
expect(device.hasDeviceAcquire()).toBe(true);
|
|
382
|
+
}
|
|
383
|
+
);
|
|
384
|
+
|
|
274
385
|
test('exposes the current transport usage state in public device snapshots', () => {
|
|
275
386
|
const getSettings = jest
|
|
276
387
|
.spyOn(DataManager, 'getSettings')
|
|
@@ -252,56 +252,6 @@ describe('getDeviceState', () => {
|
|
|
252
252
|
}
|
|
253
253
|
);
|
|
254
254
|
|
|
255
|
-
test.each([
|
|
256
|
-
[EDeviceType.Pro2, DeviceType.PRO2],
|
|
257
|
-
[EDeviceType.Neo, DeviceType.NEO],
|
|
258
|
-
] as const)('invalidates cached loader state when %s is cancelled', async (deviceType, type) => {
|
|
259
|
-
const typedCall = jest.fn().mockImplementation((requestType: string) => {
|
|
260
|
-
if (requestType === 'DeviceInfoGet') {
|
|
261
|
-
return {
|
|
262
|
-
message: {
|
|
263
|
-
protocol_version: 2,
|
|
264
|
-
hw: { Device_type: type, serial_no: 'SERIAL-1' },
|
|
265
|
-
fw: { application: { version: '5.0.0' } },
|
|
266
|
-
},
|
|
267
|
-
};
|
|
268
|
-
}
|
|
269
|
-
if (requestType === 'ProtocolInfoRequest') {
|
|
270
|
-
return { message: protocolV2ApplicationInfo };
|
|
271
|
-
}
|
|
272
|
-
if (requestType === 'DeviceStatusGet') {
|
|
273
|
-
return {
|
|
274
|
-
message: { init_states: true, unlocked: true, device_id: 'wallet-1' },
|
|
275
|
-
};
|
|
276
|
-
}
|
|
277
|
-
throw new Error(`Unexpected request: ${requestType}`);
|
|
278
|
-
});
|
|
279
|
-
const cancel = jest.fn().mockResolvedValue(undefined);
|
|
280
|
-
const device = createV2Device(typedCall);
|
|
281
|
-
(device as any).commands = { cancel, typedCall };
|
|
282
|
-
device.updateState(
|
|
283
|
-
{
|
|
284
|
-
protocol: 'V2',
|
|
285
|
-
identity: { deviceType },
|
|
286
|
-
status: { mode: 'bootloader' },
|
|
287
|
-
raw: { protocolV2ProtocolInfo: getProtocolV2LoaderInfo('bootloader') },
|
|
288
|
-
},
|
|
289
|
-
'initialize'
|
|
290
|
-
);
|
|
291
|
-
|
|
292
|
-
await device.interruptionFromUser();
|
|
293
|
-
await device.initialize();
|
|
294
|
-
|
|
295
|
-
expect(cancel).toHaveBeenCalledTimes(1);
|
|
296
|
-
expect(device.state?.status.mode).toBe('normal');
|
|
297
|
-
expect(device.state?.identity.deviceId).toBe('wallet-1');
|
|
298
|
-
expect(typedCall.mock.calls.map(call => call[0])).toEqual([
|
|
299
|
-
'DeviceInfoGet',
|
|
300
|
-
'ProtocolInfoRequest',
|
|
301
|
-
'DeviceStatusGet',
|
|
302
|
-
]);
|
|
303
|
-
});
|
|
304
|
-
|
|
305
255
|
test.each(['bootloader', 'romloader'] as const)(
|
|
306
256
|
'keeps live %s mode after refreshing cached loader state',
|
|
307
257
|
async mode => {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Buffer } from 'buffer';
|
|
2
|
-
|
|
3
2
|
import { EFirmwareType, ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
4
3
|
import { sha256 } from '@noble/hashes/sha256';
|
|
5
4
|
import { bytesToHex } from '@noble/hashes/utils';
|
|
@@ -2756,19 +2755,35 @@ describe('Protocol V2 feature adapter', () => {
|
|
|
2756
2755
|
});
|
|
2757
2756
|
});
|
|
2758
2757
|
|
|
2759
|
-
test('syncs Protocol V2 cached features
|
|
2758
|
+
test('syncs Protocol V2 cached features and renegotiates the adopted command channel', async () => {
|
|
2759
|
+
const typedCall = jest.fn().mockResolvedValue({ message: protocolV2ApplicationInfo });
|
|
2760
2760
|
const cached = Device.fromDescriptor({ ...descriptor, protocolType: 'V2' } as any);
|
|
2761
2761
|
(cached as any).features = {
|
|
2762
2762
|
...normalizeProtocolV2Features({ ...descriptor, protocolType: 'V2' } as any),
|
|
2763
2763
|
deviceId: null,
|
|
2764
2764
|
serialNo: 'CACHED-SERIAL',
|
|
2765
2765
|
};
|
|
2766
|
+
(cached as any).commands = { typedCall };
|
|
2766
2767
|
|
|
2767
2768
|
const current = Device.fromDescriptor({ ...descriptor, protocolType: 'V2' } as any);
|
|
2769
|
+
current.updateState(
|
|
2770
|
+
{
|
|
2771
|
+
raw: { protocolV2ProtocolInfo: protocolV2BootloaderInfo },
|
|
2772
|
+
status: { mode: 'bootloader' },
|
|
2773
|
+
},
|
|
2774
|
+
'initialize'
|
|
2775
|
+
);
|
|
2768
2776
|
current.updateFromCache(cached);
|
|
2769
2777
|
|
|
2778
|
+
await expect(current.ensureProtocolV2RuntimeContext()).resolves.toEqual(
|
|
2779
|
+
protocolV2ApplicationInfo
|
|
2780
|
+
);
|
|
2781
|
+
|
|
2770
2782
|
expect(current.getCurrentDeviceId()).toBeUndefined();
|
|
2771
2783
|
expect(current.getCurrentSerialNo()).toBe('CACHED-SERIAL');
|
|
2784
|
+
expect(typedCall).toHaveBeenCalledWith('ProtocolInfoRequest', 'ProtocolInfo', {
|
|
2785
|
+
eventless_wallet_session: true,
|
|
2786
|
+
});
|
|
2772
2787
|
expect(current.toMessageObject()).toMatchObject({
|
|
2773
2788
|
serialNo: 'CACHED-SERIAL',
|
|
2774
2789
|
uuid: 'CACHED-SERIAL',
|
|
@@ -5104,16 +5119,22 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
5104
5119
|
},
|
|
5105
5120
|
});
|
|
5106
5121
|
const targets = [{ target_id: 4, path: 'vol0:/application_p1.bin' }];
|
|
5107
|
-
const
|
|
5122
|
+
const appTypedCall = jest
|
|
5123
|
+
.fn()
|
|
5124
|
+
.mockRejectedValueOnce(new Error('Failure_InvalidMessage,Handler not registered'));
|
|
5125
|
+
const bootloaderTypedCall = jest
|
|
5108
5126
|
.fn()
|
|
5109
|
-
.mockRejectedValueOnce(new Error('Failure_InvalidMessage,Handler not registered'))
|
|
5110
5127
|
.mockResolvedValueOnce({ type: 'Success', message: { message: '' } });
|
|
5128
|
+
let activeCommands = { typedCall: appTypedCall };
|
|
5111
5129
|
|
|
5112
5130
|
(method as any).device = stubDevice({
|
|
5113
|
-
getCommands: () =>
|
|
5131
|
+
getCommands: () => activeCommands,
|
|
5114
5132
|
});
|
|
5115
5133
|
(method as any).protocolV2LegacyDirectUpdate = true;
|
|
5116
|
-
(method as any).rebootProtocolV2ToBootloader = jest.fn().
|
|
5134
|
+
(method as any).rebootProtocolV2ToBootloader = jest.fn().mockImplementation(() => {
|
|
5135
|
+
activeCommands = { typedCall: bootloaderTypedCall };
|
|
5136
|
+
return Promise.resolve(true);
|
|
5137
|
+
});
|
|
5117
5138
|
method.postTipMessage = jest.fn();
|
|
5118
5139
|
method.postProgressMessage = jest.fn();
|
|
5119
5140
|
|
|
@@ -5122,16 +5143,15 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
5122
5143
|
message: { message: '' },
|
|
5123
5144
|
});
|
|
5124
5145
|
|
|
5125
|
-
expect(
|
|
5126
|
-
expect(
|
|
5127
|
-
1,
|
|
5146
|
+
expect(appTypedCall).toHaveBeenCalledTimes(1);
|
|
5147
|
+
expect(appTypedCall).toHaveBeenCalledWith(
|
|
5128
5148
|
'DeviceFirmwareUpdateRequest',
|
|
5129
5149
|
'Success',
|
|
5130
5150
|
{ targets },
|
|
5131
5151
|
{ timeoutMs: 180000 }
|
|
5132
5152
|
);
|
|
5133
|
-
expect(
|
|
5134
|
-
|
|
5153
|
+
expect(bootloaderTypedCall).toHaveBeenCalledTimes(1);
|
|
5154
|
+
expect(bootloaderTypedCall).toHaveBeenCalledWith(
|
|
5135
5155
|
'DeviceFirmwareUpdateRequest',
|
|
5136
5156
|
'Success',
|
|
5137
5157
|
{ targets },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAkD,MAAM,qBAAqB,CAAC;AAyBlG,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAmC/E,OAAO,KAAK,EAEV,sBAAsB,EAEvB,MAAM,6BAA6B,CAAC;AA2ErC,wBAAgB,wCAAwC,CACtD,UAAU,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,EAC5C,MAAM,EAAE,sBAAsB,EAC9B,0BAA0B,UAAQ,QAiCnC;AA0WD,eAAO,MAAM,oCAAoC,WACvC,WAAW,GAAG,UAAU,eACnB,MAAM,GAAG,SAAS,YAKhC,CAAC;AAEF,eAAO,MAAM,iCAAiC,0BACrB,MAAM,uBACR,MAAM,iBACZ,MAAM,eACR,MAAM,SAsBpB,CAAC;AAUF,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,wBAAwB,CAAC,sBAAsB,CAAC;IAC5F,OAAO,CAAC,8BAA8B,CAAC,CAAS;IAEhD,OAAO,CAAC,sBAAsB,CAAC,CAAS;IAExC,OAAO,CAAC,oCAAoC,CAAS;IAErD,qBAAqB;IAIrB,OAAO,CAAC,yBAAyB,CAA4B;IAE7D,OAAO,CAAC,2BAA2B,CAAS;IAE5C,OAAO,CAAC,4BAA4B,CAAS;IAE7C,OAAO,CAAC,iCAAiC,CAAS;IAElD,OAAO,CAAC,iCAAiC,CAA6B;IAEtE,OAAO,CAAC,6BAA6B,CAAC,CAAW;IAEjD,OAAO,CAAC,6BAA6B,CAAS;IAE9C,IAAI;IA0LJ,OAAO,CAAC,8BAA8B;IAwBhC,GAAG;;;;;YAKK,aAAa;YAqIb,4BAA4B;YAkB5B,0BAA0B;YAY1B,8BAA8B;YAK9B,+BAA+B;YAqG/B,gCAAgC;YAgIhC,qCAAqC;YAmJrC,gCAAgC;YAgBhC,uCAAuC;YAmJvC,8BAA8B;IAsB5C,OAAO,CAAC,8BAA8B;IA0BtC,OAAO,CAAC,kCAAkC;IAc1C,OAAO,CAAC,gCAAgC;IAsDxC,OAAO,CAAC,6BAA6B;YAsBvB,2BAA2B;IAWzC,OAAO,CAAC,yBAAyB;IAKjC,OAAO,CAAC,oCAAoC;IAY5C,OAAO,CAAC,4BAA4B;IAUpC,OAAO,CAAC,kCAAkC;IAS1C,OAAO,CAAC,8BAA8B;YAMxB,iCAAiC;YAOjC,iCAAiC;YAmBjC,iCAAiC;IAM/C,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,mCAAmC;IAe3C,OAAO,CAAC,iCAAiC;IAWzC,OAAO,CAAC,2BAA2B;IAsBnC,OAAO,CAAC,yBAAyB;IAiBjC,OAAO,CAAC,wBAAwB;YAkBlB,iCAAiC;YAuDjC,+BAA+B;IA6E7C,OAAO,CAAC,6BAA6B;YAMvB,8BAA8B;YA+C9B,kCAAkC;IA+BhD,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,yBAAyB;IAcjC,OAAO,CAAC,yBAAyB;YAKnB,4BAA4B;IAkBpC,6BAA6B;YAqBrB,+BAA+B;IAmD7C,OAAO,CAAC,6BAA6B;IAkCrC,OAAO,CAAC,8BAA8B;YA6DxB,uBAAuB;YA0CvB,0CAA0C;YA6B1C,6BAA6B;YAa7B,uBAAuB;YAiCvB,8BAA8B;YAqE9B,6BAA6B;IAuE3C,OAAO,CAAC,mCAAmC;YAI7B,0BAA0B;IAaxC,OAAO,CAAC,4BAA4B;IAyGpC,OAAO,CAAC,6BAA6B;YAcvB,uCAAuC;YA0JvC,gCAAgC;YAehC,yBAAyB;YASzB,8BAA8B;IAQ5C,OAAO,CAAC,0BAA0B;YAkBpB,mCAAmC;YAWnC,qCAAqC;YAiDrC,yBAAyB;YA8DzB,8BAA8B;IAU5C,OAAO,CAAC,kCAAkC;YAQ5B,cAAc;YAuCd,6BAA6B;YAW7B,0BAA0B;YAS1B,6BAA6B;
|
|
1
|
+
{"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"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"}
|
package/dist/device/Device.d.ts
CHANGED
|
@@ -164,6 +164,7 @@ export declare class Device extends EventEmitter {
|
|
|
164
164
|
}): Promise<Features>;
|
|
165
165
|
updateProtocolV2Features(deviceInfo?: ProtocolV2DeviceInfo, deviceStatus?: DeviceStatus | null, runtimeMode?: ProtocolV2RuntimeMode, protocolInfo?: ProtocolInfo): Features;
|
|
166
166
|
updateProtocolV2Status(status: DeviceStatus): Features;
|
|
167
|
+
private invalidateProtocolV2RuntimeState;
|
|
167
168
|
markTransportDisconnected(): void;
|
|
168
169
|
invalidateAfterWipe(): void;
|
|
169
170
|
markProtocolV2Reboot(rebootType: DeviceRebootType): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Device.d.ts","sourceRoot":"","sources":["../../src/device/Device.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Device.d.ts","sourceRoot":"","sources":["../../src/device/Device.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -960,6 +960,7 @@ declare class Device extends EventEmitter {
|
|
|
960
960
|
}): Promise<Features>;
|
|
961
961
|
updateProtocolV2Features(deviceInfo?: ProtocolV2DeviceInfo, deviceStatus?: DeviceStatus$1 | null, runtimeMode?: ProtocolV2RuntimeMode, protocolInfo?: ProtocolInfo): Features;
|
|
962
962
|
updateProtocolV2Status(status: DeviceStatus$1): Features;
|
|
963
|
+
private invalidateProtocolV2RuntimeState;
|
|
963
964
|
markTransportDisconnected(): void;
|
|
964
965
|
invalidateAfterWipe(): void;
|
|
965
966
|
markProtocolV2Reboot(rebootType: DeviceRebootType): void;
|
package/dist/index.js
CHANGED
|
@@ -45245,6 +45245,7 @@ class Device extends events.exports {
|
|
|
45245
45245
|
yield this.commands.dispose(false);
|
|
45246
45246
|
}
|
|
45247
45247
|
this.commands = new DeviceCommands(this, (_g = this.mainId) !== null && _g !== void 0 ? _g : '');
|
|
45248
|
+
this.invalidateProtocolV2RuntimeState();
|
|
45248
45249
|
}
|
|
45249
45250
|
catch (error) {
|
|
45250
45251
|
if (options === null || options === void 0 ? void 0 : options.forceProtocolDetection) {
|
|
@@ -45898,8 +45899,7 @@ class Device extends events.exports {
|
|
|
45898
45899
|
const previousStatus = (_d = (_c = this.state) === null || _c === void 0 ? void 0 : _c.raw) === null || _d === void 0 ? void 0 : _d.protocolV2DeviceStatus;
|
|
45899
45900
|
return this.updateProtocolV2Features(previousDeviceInfo, Object.assign(Object.assign({}, previousStatus), status));
|
|
45900
45901
|
}
|
|
45901
|
-
|
|
45902
|
-
this.deviceAcquired = false;
|
|
45902
|
+
invalidateProtocolV2RuntimeState() {
|
|
45903
45903
|
if (!this.isProtocolV2())
|
|
45904
45904
|
return;
|
|
45905
45905
|
this.protocolV2StateNeedsReload = true;
|
|
@@ -45908,6 +45908,10 @@ class Device extends events.exports {
|
|
|
45908
45908
|
this.protocolV2RuntimeContextRequestToken = undefined;
|
|
45909
45909
|
this.clearPreInitialized();
|
|
45910
45910
|
}
|
|
45911
|
+
markTransportDisconnected() {
|
|
45912
|
+
this.deviceAcquired = false;
|
|
45913
|
+
this.invalidateProtocolV2RuntimeState();
|
|
45914
|
+
}
|
|
45911
45915
|
invalidateAfterWipe() {
|
|
45912
45916
|
const deviceId = this.getCurrentDeviceId();
|
|
45913
45917
|
if (deviceId) {
|
|
@@ -45917,10 +45921,7 @@ class Device extends events.exports {
|
|
|
45917
45921
|
if (this.originalDescriptor.path !== deviceId) {
|
|
45918
45922
|
deviceWalletSessionStore.deleteDevice(this.originalDescriptor.path);
|
|
45919
45923
|
}
|
|
45920
|
-
this.
|
|
45921
|
-
this.protocolV2RuntimeContext = undefined;
|
|
45922
|
-
this.protocolV2RuntimeContextPromise = undefined;
|
|
45923
|
-
this.protocolV2RuntimeContextRequestToken = undefined;
|
|
45924
|
+
this.invalidateProtocolV2RuntimeState();
|
|
45924
45925
|
}
|
|
45925
45926
|
this.passphraseState = undefined;
|
|
45926
45927
|
this.stateStore = new DeviceStateStore();
|
|
@@ -45930,11 +45931,7 @@ class Device extends events.exports {
|
|
|
45930
45931
|
markProtocolV2Reboot(rebootType) {
|
|
45931
45932
|
if (!this.isProtocolV2())
|
|
45932
45933
|
return;
|
|
45933
|
-
this.
|
|
45934
|
-
this.protocolV2RuntimeContext = undefined;
|
|
45935
|
-
this.protocolV2RuntimeContextPromise = undefined;
|
|
45936
|
-
this.protocolV2RuntimeContextRequestToken = undefined;
|
|
45937
|
-
this.clearPreInitialized();
|
|
45934
|
+
this.invalidateProtocolV2RuntimeState();
|
|
45938
45935
|
let loaderMode;
|
|
45939
45936
|
if (rebootType === hdTransport.DeviceRebootType.Bootloader) {
|
|
45940
45937
|
loaderMode = 'bootloader';
|
|
@@ -45990,6 +45987,7 @@ class Device extends events.exports {
|
|
|
45990
45987
|
if (device.features) {
|
|
45991
45988
|
this._updateFeatures(device.features);
|
|
45992
45989
|
}
|
|
45990
|
+
this.invalidateProtocolV2RuntimeState();
|
|
45993
45991
|
}
|
|
45994
45992
|
run(fn, options) {
|
|
45995
45993
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -46102,7 +46100,6 @@ class Device extends events.exports {
|
|
|
46102
46100
|
var _a, _b;
|
|
46103
46101
|
return __awaiter(this, void 0, void 0, function* () {
|
|
46104
46102
|
const error = hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.DeviceInterruptedFromUser);
|
|
46105
|
-
this.markTransportDisconnected();
|
|
46106
46103
|
yield ((_a = this.cancelableAction) === null || _a === void 0 ? void 0 : _a.call(this, error));
|
|
46107
46104
|
yield ((_b = this.commands) === null || _b === void 0 ? void 0 : _b.cancel());
|
|
46108
46105
|
if (this.runPromise) {
|
|
@@ -53819,8 +53816,9 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
53819
53816
|
}
|
|
53820
53817
|
protocolV2StartFirmwareUpdate({ targets, }) {
|
|
53821
53818
|
return __awaiter(this, void 0, void 0, function* () {
|
|
53822
|
-
const
|
|
53823
|
-
|
|
53819
|
+
const startUpdate = () => this.device
|
|
53820
|
+
.getCommands()
|
|
53821
|
+
.typedCall('DeviceFirmwareUpdateRequest', 'Success', { targets }, { timeoutMs: PROTOCOL_V2_START_UPDATE_TIMEOUT });
|
|
53824
53822
|
let response;
|
|
53825
53823
|
try {
|
|
53826
53824
|
response = yield startUpdate();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onekeyfe/hd-core",
|
|
3
|
-
"version": "1.2.0-alpha.
|
|
3
|
+
"version": "1.2.0-alpha.105",
|
|
4
4
|
"description": "Core processes and APIs for communicating with OneKey hardware devices.",
|
|
5
5
|
"author": "OneKey",
|
|
6
6
|
"homepage": "https://github.com/OneKeyHQ/hardware-js-sdk#readme",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"url": "https://github.com/OneKeyHQ/hardware-js-sdk/issues"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@onekeyfe/hd-shared": "1.2.0-alpha.
|
|
29
|
-
"@onekeyfe/hd-transport": "1.2.0-alpha.
|
|
28
|
+
"@onekeyfe/hd-shared": "1.2.0-alpha.105",
|
|
29
|
+
"@onekeyfe/hd-transport": "1.2.0-alpha.105",
|
|
30
30
|
"axios": "1.15.2",
|
|
31
31
|
"bignumber.js": "^9.0.2",
|
|
32
32
|
"buffer": "^6.0.3",
|
|
@@ -46,5 +46,5 @@
|
|
|
46
46
|
"@types/w3c-web-usb": "^1.0.10",
|
|
47
47
|
"@types/web-bluetooth": "^0.0.21"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "06431636d7bf40ab8ae28fd44a01893c0f220a74"
|
|
50
50
|
}
|
|
@@ -3068,14 +3068,15 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
3068
3068
|
}: {
|
|
3069
3069
|
targets: Array<{ target_id: number; path: string }>;
|
|
3070
3070
|
}) {
|
|
3071
|
-
const commands = this.device.getCommands();
|
|
3072
3071
|
const startUpdate = () =>
|
|
3073
|
-
|
|
3074
|
-
|
|
3075
|
-
|
|
3076
|
-
|
|
3077
|
-
|
|
3078
|
-
|
|
3072
|
+
this.device
|
|
3073
|
+
.getCommands()
|
|
3074
|
+
.typedCall(
|
|
3075
|
+
'DeviceFirmwareUpdateRequest',
|
|
3076
|
+
'Success',
|
|
3077
|
+
{ targets },
|
|
3078
|
+
{ timeoutMs: PROTOCOL_V2_START_UPDATE_TIMEOUT }
|
|
3079
|
+
);
|
|
3079
3080
|
let response: ProtocolV2FirmwareUpdateStartResponse;
|
|
3080
3081
|
try {
|
|
3081
3082
|
response = await startUpdate();
|
package/src/device/Device.ts
CHANGED
|
@@ -488,6 +488,10 @@ export class Device extends EventEmitter {
|
|
|
488
488
|
}
|
|
489
489
|
|
|
490
490
|
this.commands = new DeviceCommands(this, this.mainId ?? '');
|
|
491
|
+
// Protocol V2 runtime metadata belongs to one active transport link. A
|
|
492
|
+
// successful acquire creates a fresh link/session, so never carry cached
|
|
493
|
+
// ProtocolInfo or pre-initialize state across that boundary.
|
|
494
|
+
this.invalidateProtocolV2RuntimeState();
|
|
491
495
|
} catch (error) {
|
|
492
496
|
if (options?.forceProtocolDetection) {
|
|
493
497
|
this.originalDescriptor.protocolType = previousProtocol;
|
|
@@ -1304,8 +1308,7 @@ export class Device extends EventEmitter {
|
|
|
1304
1308
|
});
|
|
1305
1309
|
}
|
|
1306
1310
|
|
|
1307
|
-
|
|
1308
|
-
this.deviceAcquired = false;
|
|
1311
|
+
private invalidateProtocolV2RuntimeState() {
|
|
1309
1312
|
if (!this.isProtocolV2()) return;
|
|
1310
1313
|
this.protocolV2StateNeedsReload = true;
|
|
1311
1314
|
this.protocolV2RuntimeContext = undefined;
|
|
@@ -1314,6 +1317,11 @@ export class Device extends EventEmitter {
|
|
|
1314
1317
|
this.clearPreInitialized();
|
|
1315
1318
|
}
|
|
1316
1319
|
|
|
1320
|
+
markTransportDisconnected() {
|
|
1321
|
+
this.deviceAcquired = false;
|
|
1322
|
+
this.invalidateProtocolV2RuntimeState();
|
|
1323
|
+
}
|
|
1324
|
+
|
|
1317
1325
|
invalidateAfterWipe() {
|
|
1318
1326
|
const deviceId = this.getCurrentDeviceId();
|
|
1319
1327
|
if (deviceId) {
|
|
@@ -1323,10 +1331,7 @@ export class Device extends EventEmitter {
|
|
|
1323
1331
|
if (this.originalDescriptor.path !== deviceId) {
|
|
1324
1332
|
deviceWalletSessionStore.deleteDevice(this.originalDescriptor.path);
|
|
1325
1333
|
}
|
|
1326
|
-
this.
|
|
1327
|
-
this.protocolV2RuntimeContext = undefined;
|
|
1328
|
-
this.protocolV2RuntimeContextPromise = undefined;
|
|
1329
|
-
this.protocolV2RuntimeContextRequestToken = undefined;
|
|
1334
|
+
this.invalidateProtocolV2RuntimeState();
|
|
1330
1335
|
}
|
|
1331
1336
|
|
|
1332
1337
|
this.passphraseState = undefined;
|
|
@@ -1338,11 +1343,7 @@ export class Device extends EventEmitter {
|
|
|
1338
1343
|
markProtocolV2Reboot(rebootType: DeviceRebootType) {
|
|
1339
1344
|
if (!this.isProtocolV2()) return;
|
|
1340
1345
|
|
|
1341
|
-
this.
|
|
1342
|
-
this.protocolV2RuntimeContext = undefined;
|
|
1343
|
-
this.protocolV2RuntimeContextPromise = undefined;
|
|
1344
|
-
this.protocolV2RuntimeContextRequestToken = undefined;
|
|
1345
|
-
this.clearPreInitialized();
|
|
1346
|
+
this.invalidateProtocolV2RuntimeState();
|
|
1346
1347
|
let loaderMode: 'bootloader' | 'romloader' | undefined;
|
|
1347
1348
|
if (rebootType === DeviceRebootType.Bootloader) {
|
|
1348
1349
|
loaderMode = 'bootloader';
|
|
@@ -1416,6 +1417,10 @@ export class Device extends EventEmitter {
|
|
|
1416
1417
|
if (device.features) {
|
|
1417
1418
|
this._updateFeatures(device.features);
|
|
1418
1419
|
}
|
|
1420
|
+
// Adopting another Device instance's command channel also crosses an active
|
|
1421
|
+
// link boundary. Renegotiate runtime metadata on that channel instead of
|
|
1422
|
+
// retaining ProtocolInfo from the previous instance/session.
|
|
1423
|
+
this.invalidateProtocolV2RuntimeState();
|
|
1419
1424
|
}
|
|
1420
1425
|
|
|
1421
1426
|
async run(fn?: () => Promise<void>, options?: RunOptions) {
|
|
@@ -1545,10 +1550,6 @@ export class Device extends EventEmitter {
|
|
|
1545
1550
|
|
|
1546
1551
|
async interruptionFromUser() {
|
|
1547
1552
|
const error = ERRORS.TypedError(HardwareErrorCode.DeviceInterruptedFromUser);
|
|
1548
|
-
// Cancellation often ends the transport session, especially during firmware
|
|
1549
|
-
// update reboot or exit. Invalidate V2 state before awaiting asynchronous
|
|
1550
|
-
// cancellation callbacks so the next request cannot reuse a stale runtime mode.
|
|
1551
|
-
this.markTransportDisconnected();
|
|
1552
1553
|
await this.cancelableAction?.(error);
|
|
1553
1554
|
await this.commands?.cancel();
|
|
1554
1555
|
|