@onekeyfe/hd-core 1.2.0-alpha.133-ok59992 → 1.2.0-alpha.134
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__/device-wallet-session-store.test.ts +79 -21
- package/dist/device/Device.d.ts.map +1 -1
- package/dist/index.js +17 -10
- package/package.json +4 -4
- package/src/device/Device.ts +40 -12
|
@@ -352,7 +352,7 @@ describe('Protocol V1 wallet identity initialization', () => {
|
|
|
352
352
|
jest.restoreAllMocks();
|
|
353
353
|
});
|
|
354
354
|
|
|
355
|
-
test('
|
|
355
|
+
test('purges cached sessions and rejects when the live device identity changes', async () => {
|
|
356
356
|
const device = Device.fromDescriptor({ id: 'connect-b', path: 'connect-b' } as never);
|
|
357
357
|
device.features = {
|
|
358
358
|
protocol: 'V1',
|
|
@@ -363,7 +363,7 @@ describe('Protocol V1 wallet identity initialization', () => {
|
|
|
363
363
|
deviceWalletSessionStore.set('cached-device-a', 'hidden-a', 'session-a');
|
|
364
364
|
const typedCall = jest.fn().mockResolvedValue({
|
|
365
365
|
type: 'Features',
|
|
366
|
-
message: { device_id: 'live-device-b' },
|
|
366
|
+
message: { device_id: 'live-device-b', session_id: 'wrong-device-session' },
|
|
367
367
|
});
|
|
368
368
|
device.commands = { typedCall } as never;
|
|
369
369
|
jest.spyOn(TransportManager, 'reconfigure').mockResolvedValue(undefined);
|
|
@@ -371,11 +371,76 @@ describe('Protocol V1 wallet identity initialization', () => {
|
|
|
371
371
|
await expect(
|
|
372
372
|
device.initialize({ deviceId: 'cached-device-a', passphraseState: 'hidden-a' })
|
|
373
373
|
).rejects.toMatchObject({ errorCode: HardwareErrorCode.DeviceCheckDeviceIdError });
|
|
374
|
+
// Identity is validated from the single Initialize round trip; no separate
|
|
375
|
+
// GetFeatures preflight.
|
|
374
376
|
expect(typedCall).toHaveBeenCalledTimes(1);
|
|
375
|
-
expect(typedCall).toHaveBeenCalledWith(
|
|
377
|
+
expect(typedCall).toHaveBeenCalledWith(
|
|
378
|
+
'Initialize',
|
|
379
|
+
'Features',
|
|
380
|
+
expect.objectContaining({ passphrase_state: 'hidden-a' }),
|
|
381
|
+
expect.any(Object)
|
|
382
|
+
);
|
|
383
|
+
// Identity change purges the previous device's cached sessions (pre-existing
|
|
384
|
+
// reconcileDeviceIdentity behavior — never carry sessions across devices)…
|
|
385
|
+
expect(deviceWalletSessionStore.get('cached-device-a', 'hidden-a')).toBeUndefined();
|
|
386
|
+
// …and the session the mismatched Initialize cached under the wrong
|
|
387
|
+
// device's identity is dropped as well.
|
|
388
|
+
expect(deviceWalletSessionStore.get('live-device-b', 'hidden-a')).toBeUndefined();
|
|
376
389
|
});
|
|
377
390
|
|
|
378
|
-
test('
|
|
391
|
+
test('drops the wrong-device session even when reconfigure fails after Initialize', async () => {
|
|
392
|
+
const device = Device.fromDescriptor({ id: 'connect-b', path: 'connect-b' } as never);
|
|
393
|
+
device.features = {
|
|
394
|
+
protocol: 'V1',
|
|
395
|
+
deviceId: 'cached-device-a',
|
|
396
|
+
unlocked: true,
|
|
397
|
+
passphraseProtection: true,
|
|
398
|
+
} as never;
|
|
399
|
+
deviceWalletSessionStore.set('cached-device-a', 'hidden-a', 'session-a');
|
|
400
|
+
const typedCall = jest.fn().mockResolvedValue({
|
|
401
|
+
type: 'Features',
|
|
402
|
+
message: { device_id: 'live-device-b', session_id: 'wrong-device-session' },
|
|
403
|
+
});
|
|
404
|
+
device.commands = { typedCall } as never;
|
|
405
|
+
// Pre-encode resync succeeds; the post-response reconfigure inside
|
|
406
|
+
// callInitialize rejects — the session write has already happened by then.
|
|
407
|
+
jest
|
|
408
|
+
.spyOn(TransportManager, 'reconfigure')
|
|
409
|
+
.mockResolvedValueOnce(undefined)
|
|
410
|
+
.mockRejectedValueOnce(new Error('configure failed'));
|
|
411
|
+
|
|
412
|
+
await expect(
|
|
413
|
+
device.initialize({ deviceId: 'cached-device-a', passphraseState: 'hidden-a' })
|
|
414
|
+
).rejects.toMatchObject({ errorCode: HardwareErrorCode.DeviceCheckDeviceIdError });
|
|
415
|
+
// The wrong-device session must not survive the error path either.
|
|
416
|
+
expect(deviceWalletSessionStore.get('live-device-b', 'hidden-a')).toBeUndefined();
|
|
417
|
+
});
|
|
418
|
+
|
|
419
|
+
test('re-syncs the V1 message schema for this device before encoding Initialize', async () => {
|
|
420
|
+
const device = Device.fromDescriptor({ id: 'connect-a', path: 'connect-a' } as never);
|
|
421
|
+
device.features = {
|
|
422
|
+
protocol: 'V1',
|
|
423
|
+
deviceId: 'device-a',
|
|
424
|
+
unlocked: true,
|
|
425
|
+
passphraseProtection: true,
|
|
426
|
+
} as never;
|
|
427
|
+
const typedCall = jest.fn().mockResolvedValue({
|
|
428
|
+
type: 'Features',
|
|
429
|
+
message: { device_id: 'device-a' },
|
|
430
|
+
});
|
|
431
|
+
device.commands = { typedCall } as never;
|
|
432
|
+
const reconfigure = jest.spyOn(TransportManager, 'reconfigure').mockResolvedValue(undefined);
|
|
433
|
+
|
|
434
|
+
await device.initialize({ deviceId: 'device-a', passphraseState: 'hidden-a' });
|
|
435
|
+
|
|
436
|
+
// A stale process-global schema (from another device) would silently strip
|
|
437
|
+
// passphrase_state from the wire message, so the resync must come first.
|
|
438
|
+
expect(reconfigure.mock.invocationCallOrder[0]).toBeLessThan(
|
|
439
|
+
typedCall.mock.invocationCallOrder[0]
|
|
440
|
+
);
|
|
441
|
+
});
|
|
442
|
+
|
|
443
|
+
test('resumes a cached V1 wallet with a single identity-validated Initialize', async () => {
|
|
379
444
|
const device = Device.fromDescriptor({ id: 'connect-a', path: 'connect-a' } as never);
|
|
380
445
|
device.features = {
|
|
381
446
|
protocol: 'V1',
|
|
@@ -384,22 +449,17 @@ describe('Protocol V1 wallet identity initialization', () => {
|
|
|
384
449
|
passphraseProtection: true,
|
|
385
450
|
} as never;
|
|
386
451
|
deviceWalletSessionStore.set('device-a', 'hidden-a', 'session-a');
|
|
387
|
-
const typedCall = jest
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
type: 'Features',
|
|
392
|
-
message: { device_id: 'device-a', session_id: 'session-a' },
|
|
393
|
-
});
|
|
452
|
+
const typedCall = jest.fn().mockResolvedValueOnce({
|
|
453
|
+
type: 'Features',
|
|
454
|
+
message: { device_id: 'device-a', session_id: 'session-a' },
|
|
455
|
+
});
|
|
394
456
|
device.commands = { typedCall } as never;
|
|
395
457
|
jest.spyOn(TransportManager, 'reconfigure').mockResolvedValue(undefined);
|
|
396
458
|
|
|
397
459
|
await device.initialize({ deviceId: 'device-a', passphraseState: 'hidden-a' });
|
|
398
460
|
|
|
399
|
-
expect(typedCall).toHaveBeenCalledTimes(
|
|
400
|
-
expect(typedCall).
|
|
401
|
-
expect(typedCall).toHaveBeenNthCalledWith(
|
|
402
|
-
2,
|
|
461
|
+
expect(typedCall).toHaveBeenCalledTimes(1);
|
|
462
|
+
expect(typedCall).toHaveBeenCalledWith(
|
|
403
463
|
'Initialize',
|
|
404
464
|
'Features',
|
|
405
465
|
expect.objectContaining({
|
|
@@ -408,9 +468,10 @@ describe('Protocol V1 wallet identity initialization', () => {
|
|
|
408
468
|
}),
|
|
409
469
|
expect.any(Object)
|
|
410
470
|
);
|
|
471
|
+
expect(deviceWalletSessionStore.get('device-a', 'hidden-a')).toBe('session-a');
|
|
411
472
|
});
|
|
412
473
|
|
|
413
|
-
test('selects the standard V1 wallet
|
|
474
|
+
test('selects the standard V1 wallet with a single identity-validated Initialize', async () => {
|
|
414
475
|
const device = Device.fromDescriptor({ id: 'connect-a', path: 'connect-a' } as never);
|
|
415
476
|
device.features = {
|
|
416
477
|
protocol: 'V1',
|
|
@@ -420,17 +481,14 @@ describe('Protocol V1 wallet identity initialization', () => {
|
|
|
420
481
|
} as never;
|
|
421
482
|
const typedCall = jest
|
|
422
483
|
.fn()
|
|
423
|
-
.mockResolvedValueOnce({ type: 'Features', message: { device_id: 'device-a' } })
|
|
424
484
|
.mockResolvedValueOnce({ type: 'Features', message: { device_id: 'device-a' } });
|
|
425
485
|
device.commands = { typedCall } as never;
|
|
426
486
|
jest.spyOn(TransportManager, 'reconfigure').mockResolvedValue(undefined);
|
|
427
487
|
|
|
428
488
|
await device.initialize({ deviceId: 'device-a' });
|
|
429
489
|
|
|
430
|
-
expect(typedCall).toHaveBeenCalledTimes(
|
|
431
|
-
expect(typedCall).
|
|
432
|
-
expect(typedCall).toHaveBeenNthCalledWith(
|
|
433
|
-
2,
|
|
490
|
+
expect(typedCall).toHaveBeenCalledTimes(1);
|
|
491
|
+
expect(typedCall).toHaveBeenCalledWith(
|
|
434
492
|
'Initialize',
|
|
435
493
|
'Features',
|
|
436
494
|
{
|
|
@@ -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":";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;IAK9B,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;IA+F5E,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;YAqGxB,qBAAqB;IAmB7B,WAAW;IAaX,cAAc,CAAC,MAAM,GAAE,sBAA2B;IA6ExD,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;;;IAuBpE,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,uBAAuB;IAYvE,8BAA8B,CAClC,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GACnC,OAAO,CAAC,YAAY,CAAC;IA+ClB,2BAA2B,CAC/B,UAAU,CAAC,EAAE,oBAAoB,EACjC,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QACR,0BAA0B,CAAC,EAAE,OAAO,CAAC;KACtC;IAsDH,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,OAAO,CAAC,gCAAgC;IASxC,yBAAyB;IAKzB,mBAAmB;IAkBnB,oBAAoB,CAAC,UAAU,EAAE,gBAAgB;IAiDjD,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,EAAE,WAAW,UAAQ;IAqBlE,eAAe,CAAC,MAAM,EAAE,MAAM;IAaxB,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;IAW1B,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"}
|
package/dist/index.js
CHANGED
|
@@ -45606,15 +45606,6 @@ class Device extends events.exports {
|
|
|
45606
45606
|
yield TransportManager.reconfigure(this.features);
|
|
45607
45607
|
});
|
|
45608
45608
|
const expectedDeviceId = options === null || options === void 0 ? void 0 : options.deviceId;
|
|
45609
|
-
if (expectedDeviceId) {
|
|
45610
|
-
this.passphraseState = undefined;
|
|
45611
|
-
const { message } = yield this.commands.typedCall('GetFeatures', 'Features', {});
|
|
45612
|
-
this._updateFeatures(message);
|
|
45613
|
-
yield TransportManager.reconfigure(this.features);
|
|
45614
|
-
if (!this.checkDeviceId(expectedDeviceId)) {
|
|
45615
|
-
throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.DeviceCheckDeviceIdError);
|
|
45616
|
-
}
|
|
45617
|
-
}
|
|
45618
45609
|
this.passphraseState = options === null || options === void 0 ? void 0 : options.passphraseState;
|
|
45619
45610
|
if (options === null || options === void 0 ? void 0 : options.initSession) {
|
|
45620
45611
|
this.clearInternalState(options === null || options === void 0 ? void 0 : options.deviceId);
|
|
@@ -45630,7 +45621,23 @@ class Device extends events.exports {
|
|
|
45630
45621
|
if (options === null || options === void 0 ? void 0 : options.deriveCardano) {
|
|
45631
45622
|
payload.derive_cardano = true;
|
|
45632
45623
|
}
|
|
45633
|
-
|
|
45624
|
+
if (this.features) {
|
|
45625
|
+
yield TransportManager.reconfigure(this.features);
|
|
45626
|
+
}
|
|
45627
|
+
const assertExpectedDeviceIdentity = () => {
|
|
45628
|
+
if (expectedDeviceId && !this.checkDeviceId(expectedDeviceId)) {
|
|
45629
|
+
this.clearInternalState();
|
|
45630
|
+
throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.DeviceCheckDeviceIdError);
|
|
45631
|
+
}
|
|
45632
|
+
};
|
|
45633
|
+
try {
|
|
45634
|
+
yield callInitialize(payload, options === null || options === void 0 ? void 0 : options.initSession);
|
|
45635
|
+
}
|
|
45636
|
+
catch (error) {
|
|
45637
|
+
assertExpectedDeviceIdentity();
|
|
45638
|
+
throw error;
|
|
45639
|
+
}
|
|
45640
|
+
assertExpectedDeviceIdentity();
|
|
45634
45641
|
}
|
|
45635
45642
|
catch (error) {
|
|
45636
45643
|
Log$g.error('Initialization failed:', error);
|
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.134",
|
|
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.134",
|
|
29
|
+
"@onekeyfe/hd-transport": "1.2.0-alpha.134",
|
|
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": "47de2b0244584f6a541a84b0f94e4676bf63221a"
|
|
50
50
|
}
|
package/src/device/Device.ts
CHANGED
|
@@ -927,17 +927,6 @@ export class Device extends EventEmitter {
|
|
|
927
927
|
};
|
|
928
928
|
|
|
929
929
|
const expectedDeviceId = options?.deviceId;
|
|
930
|
-
if (expectedDeviceId) {
|
|
931
|
-
// 先只读校验物理设备身份;钱包上下文仍由下方携带完整参数的
|
|
932
|
-
// Initialize 选择,避免标准钱包请求复用此前的隐藏钱包上下文。
|
|
933
|
-
this.passphraseState = undefined;
|
|
934
|
-
const { message } = await this.commands.typedCall('GetFeatures', 'Features', {});
|
|
935
|
-
this._updateFeatures(message);
|
|
936
|
-
await TransportManager.reconfigure(this.features);
|
|
937
|
-
if (!this.checkDeviceId(expectedDeviceId)) {
|
|
938
|
-
throw ERRORS.TypedError(HardwareErrorCode.DeviceCheckDeviceIdError);
|
|
939
|
-
}
|
|
940
|
-
}
|
|
941
930
|
|
|
942
931
|
this.passphraseState = options?.passphraseState;
|
|
943
932
|
|
|
@@ -957,7 +946,46 @@ export class Device extends EventEmitter {
|
|
|
957
946
|
payload.derive_cardano = true;
|
|
958
947
|
}
|
|
959
948
|
|
|
960
|
-
|
|
949
|
+
if (this.features) {
|
|
950
|
+
// Re-sync the V1 message schema for THIS device before encoding
|
|
951
|
+
// Initialize: the process-global schema may still reflect another
|
|
952
|
+
// device (e.g. legacy-firmware Touch/Mini) on multi-device setups, and
|
|
953
|
+
// a stale legacy schema would silently strip passphrase_state /
|
|
954
|
+
// is_contains_attach from the wire message. Local operation, no wire
|
|
955
|
+
// I/O; a no-op when the schema is unchanged.
|
|
956
|
+
await TransportManager.reconfigure(this.features);
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
// Initialize's own Features response carries device_id, so the physical
|
|
960
|
+
// device identity is validated on the same round trip instead of via a
|
|
961
|
+
// separate read-only GetFeatures preflight (which doubled the wire cost
|
|
962
|
+
// of every deviceId-carrying call). The method fn has not run yet, so a
|
|
963
|
+
// mismatch still fails before any wallet data can be derived, with the
|
|
964
|
+
// same DeviceCheckDeviceIdError. Wallet-context selection is unchanged:
|
|
965
|
+
// it is decided by the Initialize payload above either way.
|
|
966
|
+
const assertExpectedDeviceIdentity = () => {
|
|
967
|
+
if (expectedDeviceId && !this.checkDeviceId(expectedDeviceId)) {
|
|
968
|
+
// The mismatched Initialize may have cached a session under the wrong
|
|
969
|
+
// device's identity; drop it so no wallet context survives from it.
|
|
970
|
+
// (This also evicts any session the wrong device legitimately cached
|
|
971
|
+
// under the same passphraseState — a deliberate conservative purge
|
|
972
|
+
// after a physical-swap event, consistent with
|
|
973
|
+
// reconcileDeviceIdentity purging the previous device's sessions.)
|
|
974
|
+
this.clearInternalState();
|
|
975
|
+
throw ERRORS.TypedError(HardwareErrorCode.DeviceCheckDeviceIdError);
|
|
976
|
+
}
|
|
977
|
+
};
|
|
978
|
+
|
|
979
|
+
try {
|
|
980
|
+
await callInitialize(payload, options?.initSession);
|
|
981
|
+
} catch (error) {
|
|
982
|
+
// callInitialize can fail AFTER the wire call cached the session (e.g.
|
|
983
|
+
// TransportManager.reconfigure rejecting); the identity check must
|
|
984
|
+
// still run so a wrong-device session never survives the error path.
|
|
985
|
+
assertExpectedDeviceIdentity();
|
|
986
|
+
throw error;
|
|
987
|
+
}
|
|
988
|
+
assertExpectedDeviceIdentity();
|
|
961
989
|
} catch (error) {
|
|
962
990
|
Log.error('Initialization failed:', error);
|
|
963
991
|
throw error;
|