@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.
@@ -561,17 +561,22 @@ describe('DeviceCommands failure mapping', () => {
561
561
  });
562
562
 
563
563
  describe('DeviceCommands Protocol V2 interactive response compatibility', () => {
564
- it('still auto-acks ButtonRequest when no hardware UI listener is registered', async () => {
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: jest.fn(),
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 without cached profile', () => {
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 typedCall = jest
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: () => ({ typedCall }),
5131
+ getCommands: () => activeCommands,
5114
5132
  });
5115
5133
  (method as any).protocolV2LegacyDirectUpdate = true;
5116
- (method as any).rebootProtocolV2ToBootloader = jest.fn().mockResolvedValue(true);
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(typedCall).toHaveBeenCalledTimes(2);
5126
- expect(typedCall).toHaveBeenNthCalledWith(
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(typedCall).toHaveBeenNthCalledWith(
5134
- 2,
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;YAyC7B,gBAAgB;IAiB9B,OAAO,CAAC,qBAAqB;CAM9B"}
1
+ {"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"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"}
@@ -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":";AAAA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAmB,MAAM,wBAAwB,CAAC;AACjG,OAAO,EAEL,aAAa,EAQd,MAAM,qBAAqB,CAAC;AAU7B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAalD,OAAO,EACL,KAAK,mBAAmB,EAExB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAE5B,KAAK,MAAM,IAAI,WAAW,EAC1B,iBAAiB,EACjB,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC7B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,MAAM,EAAc,MAAM,WAAW,CAAC;AAI/C,OAAO,EAKL,KAAK,qBAAqB,EAO3B,MAAM,mCAAmC,CAAC;AAI3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,KAAK,EACV,0BAA0B,EAC1B,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,KAAK,EACV,gBAAgB,IAAI,gBAAgB,EACpC,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACpB,OAAO,EACR,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,eAAe,MAAM,mBAAmB,CAAC;AAErD,MAAM,MAAM,WAAW,GAAG;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,uBAAuB,CAAC;IAC1C,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IAEvC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAK5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,WAAW,CAAC;AA6BhB,MAAM,WAAW,YAAY;IAC3B,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,oBAAoB,GAAG,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC;IAChG,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,yBAAyB,CAAC,CAAC,CAAC;IACnF,CAAC,MAAM,CAAC,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IACrE,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC;IACnE,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC;IACnE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IACtD,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACnD,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC3C,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;QACnB,MAAM;QACN,wBAAwB;QACxB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI;KAC5D,CAAC;IACF,CAAC,MAAM,CAAC,0CAA0C,CAAC,EAAE;QACnD,MAAM;QACN,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI;KACrC,CAAC;IACF,CAAC,MAAM,CAAC,4CAA4C,CAAC,EAAE;QACrD,MAAM;QACN,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI;KACrC,CAAC;CACH;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAE/F,GAAG,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAEhG,IAAI,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;CAChF;AAeD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,GAChB,IAAI,CAEN;AAED,qBAAa,MAAO,SAAQ,YAAY;IAItC,kBAAkB,EAAE,gBAAgB,CAAC;IAErC,aAAa,CAAC,EAAE,MAAM,CAAC;IAKvB,UAAU,EAAE,MAAM,CAAC;IAEnB,SAAS,EAAE,MAAM,CAAC;IAOlB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAKvB,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAQ;IAMhD,QAAQ,EAAE,cAAc,CAAC;IAKzB,OAAO,CAAC,gBAAgB,CAAC,CAAoC;IAK7D,OAAO,CAAC,cAAc,CAAS;IAG/B,OAAO,CAAC,UAAU,CAA0B;IAG5C,OAAO,CAAC,0BAA0B,CAAS;IAG3C,OAAO,CAAC,wBAAwB,CAAC,CAAe;IAGhD,OAAO,CAAC,+BAA+B,CAAC,CAAwB;IAGhE,OAAO,CAAC,oCAAoC,CAAC,CAAS;IAEtD,OAAO,CAAC,uBAAuB,CAAC,CAK9B;IAEF,OAAO,CAAC,8BAA8B,CAAK;IAE3C,IAAI,KAAK;;mBAER;IAED,IAAI,QAAQ,IAAI,QAAQ,GAAG,SAAS,CAGnC;IAED,IAAI,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAY1C;IAED,UAAU,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEnC,aAAa,EAAE,MAAM,EAAE,CAAM;IAE7B,uBAAuB,EAAE,uBAAuB,CAAM;IAEtD,QAAQ,SAAK;IAEb,aAAa,EAAE,MAAM,EAAE,CAAM;IAE7B,gBAAgB,UAAS;IAKzB,WAAW,UAAS;IAEpB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAa;IAEhD,sBAAsB,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAGxC,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAGlC,OAAO,CAAC,iBAAiB,CAAC,CAExB;IAGF,OAAO,CAAC,wBAAwB,CAAC,CAAS;gBAE9B,UAAU,EAAE,gBAAgB,EAAE,aAAa,CAAC,EAAE,MAAM;IAahE,MAAM,CAAC,cAAc,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,aAAa,CAAC,EAAE,MAAM;IAMlF,eAAe,IAAI,WAAW,GAAG,IAAI;IAmDrC,OAAO,CACL,eAAe,CAAC,EAAE,uBAAuB,EACzC,OAAO,CAAC,EAAE;QAAE,sBAAsB,CAAC,EAAE,OAAO,CAAA;KAAE;IAoC1C,OAAO,CACX,gBAAgB,CAAC,EAAE,uBAAuB,EAC1C,OAAO,CAAC,EAAE;QAAE,sBAAsB,CAAC,EAAE,OAAO,CAAC;QAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;KAAE;IA2F5E,OAAO;IA4CP,aAAa,CAAC,WAAW,CAAC,EAAE,WAAW;IAU7C,kBAAkB,CAAC,IAAI,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE;IAStD,mBAAmB;IAKnB,wBAAwB,CAAC,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE;IAM/D,qBAAqB,CAAC,KAAK,EAAE,MAAM;IAKnC,yBAAyB,CAAC,UAAU,EAAE,MAAM;IAI5C,yBAAyB;IAIzB,WAAW;IAWX,WAAW,IAAI,IAAI,GAAG,IAAI;IAI1B,YAAY;IAIZ,oBAAoB;IAIpB,kBAAkB;IAIlB,kBAAkB;IAIlB,YAAY;IASZ,iBAAiB;IAIjB,eAAe;IAIf,qBAAqB;IAiBrB,8BAA8B;IAI9B,sBAAsB;IAItB,+BAA+B;IAI/B,kCAAkC;IAKlC,iCAAiC;IAKjC,sBAAsB;IAItB,4BAA4B,CAC1B,eAAe,EAAE,CAAC,WAAW,EAAE,WAAW,GAAG,YAAY,KAAK,aAAa,GAAG,SAAS;IAwBzF,oBAAoB,IAAI,kBAAkB;IAkB1C,yBAAyB,IAAI,kBAAkB;IAkB/C,uBAAuB,IAAI,kBAAkB;IAkB7C,OAAO,CAAC,wBAAwB;IAShC,OAAO,CAAC,mCAAmC;IAQ3C,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM;IAqBnC,wBAAwB,CAAC,SAAS,CAAC,EAAE,MAAM;;;;IAO3C,mBAAmB,CACjB,gBAAgB,EAAE,OAAO,EACzB,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,SAAS,GAAE,MAAM,GAAG,IAAW,EAC/B,iBAAiB,GAAE,MAAM,GAAG,IAAW,EACvC,UAAU,GAAE,UAAU,GAAG,QAAmB;IA+B9C,OAAO,CAAC,gBAAgB;IAqBxB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM;IAYrC,0BAA0B,CAAC,SAAS,CAAC,EAAE,MAAM;IAMvC,UAAU,CAAC,OAAO,CAAC,EAAE,WAAW;YAyExB,qBAAqB;IA6B7B,WAAW;IAaX,cAAc,CAAC,MAAM,GAAE,sBAA2B;IAsFxD,eAAe,CAAC,aAAa,EAAE,KAAK,CAAC,QAAQ,GAAG,QAAQ,EAAE,WAAW,CAAC,EAAE,OAAO;IAkB/E,WAAW,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,uBAAuB;;;IAsBpE,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,uBAAuB;IAYvE,8BAA8B,CAClC,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,iCAAiC,CAAC,EAAE,OAAO,CAAC;KAC7C,GACA,OAAO,CAAC,YAAY,CAAC;IA2DlB,2BAA2B,CAC/B,UAAU,CAAC,EAAE,oBAAoB,EACjC,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QACR,0BAA0B,CAAC,EAAE,OAAO,CAAC;QACrC,iCAAiC,CAAC,EAAE,OAAO,CAAC;KAC7C;IAuDH,wBAAwB,CACtB,UAAU,CAAC,EAAE,oBAAoB,EACjC,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,EAClC,WAAW,CAAC,EAAE,qBAAqB,EACnC,YAAY,CAAC,EAAE,YAAY;IAiB7B,sBAAsB,CAAC,MAAM,EAAE,YAAY;IAS3C,yBAAyB;IAUzB,mBAAmB;IAqBnB,oBAAoB,CAAC,UAAU,EAAE,gBAAgB;IAqDjD,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,EAAE,WAAW,UAAQ;IAqBlE,eAAe,CAAC,MAAM,EAAE,MAAM;IASxB,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,UAAU;IAmBlD,SAAS,CAAC,CAAC,EACf,EAAE,EAAE,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,EAClC,OAAO,EAAE,UAAU,EACnB,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC;IA8FtB,uBAAuB;IASvB,oBAAoB;IAe1B,mBAAmB,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC;IAW/D,qBAAqB;IAIrB,OAAO;IAkBP,SAAS;IAMT,kBAAkB;IAKlB,qBAAqB;IAKrB,MAAM;IAIN,gBAAgB;IAQhB,UAAU;IAQV,eAAe,IAAI,OAAO;IAI1B,YAAY;IAKZ,WAAW;IAUX,aAAa;IAKb,UAAU;IAKV,YAAY,IAAI,OAAO;IAIvB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;IAsBpD,gBAAgB;IAchB,aAAa,CAAC,QAAQ,EAAE,MAAM;IAIxB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAMpC,4BAA4B;IAU5B,+BAA+B,CAC7B,KAAK,EAAE,yBAAyB,CAAC,OAAO,CAAC,EACzC,UAAU,EAAE,yBAAyB,CAAC,YAAY,CAAC,EACnD,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC;KAChD,GACA,yBAAyB,GAAG,SAAS;IAsBxC,yBAAyB,CACvB,KAAK,EAAE,yBAAyB,EAChC,OAAO,GAAE,yBAAyB,CAAC,SAAS,CAAe;IAQ7D,6BAA6B,CAC3B,OAAO,CAAC,EAAE,yBAAyB,CAAC,SAAS,CAAC,EAC9C,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE;IAwBxC,8BAA8B;IAI9B,yBAAyB,IAAI,mBAAmB;IAS1C,YAAY,CAChB,OAAO,CAAC,EAAE,oBAAoB,EAC9B,OAAO,CAAC,EAAE,yBAAyB,GAAG;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE;IAmG3D,0BAA0B,CAC9B,eAAe,CAAC,EAAE,MAAM,EACxB,kBAAkB,CAAC,EAAE,OAAO,EAC5B,mBAAmB,CAAC,EAAE,OAAO,EAC7B,aAAa,CAAC,EAAE,OAAO;CAyD1B;AAED,eAAe,MAAM,CAAC"}
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
- markTransportDisconnected() {
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.protocolV2StateNeedsReload = true;
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.protocolV2StateNeedsReload = true;
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 commands = this.device.getCommands();
53823
- const startUpdate = () => commands.typedCall('DeviceFirmwareUpdateRequest', 'Success', { targets }, { timeoutMs: PROTOCOL_V2_START_UPDATE_TIMEOUT });
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.103",
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.103",
29
- "@onekeyfe/hd-transport": "1.2.0-alpha.103",
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": "ba7c3866269200b25a514202b8286d0c9e9105d3"
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
- commands.typedCall(
3074
- 'DeviceFirmwareUpdateRequest',
3075
- 'Success',
3076
- { targets },
3077
- { timeoutMs: PROTOCOL_V2_START_UPDATE_TIMEOUT }
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();
@@ -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
- markTransportDisconnected() {
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.protocolV2StateNeedsReload = true;
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.protocolV2StateNeedsReload = true;
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