@onekeyfe/hd-core 1.2.0-alpha.58 → 1.2.0-alpha.59
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 +5 -15
- package/__tests__/device-pool-state.test.ts +22 -0
- package/__tests__/device-state-mapper.test.ts +12 -0
- package/__tests__/device-utils.test.ts +48 -1
- package/__tests__/deviceSettings.test.ts +10 -0
- package/__tests__/deviceUploadNft.test.ts +4 -28
- package/__tests__/kaspa-use-tweak-pro2.test.ts +2 -2
- package/__tests__/protocol-v2-resources.test.ts +28 -13
- package/__tests__/protocol-v2-unlock-policy.test.ts +34 -0
- package/__tests__/protocol-v2.test.ts +159 -137
- package/__tests__/tron-sign-message-init.test.ts +2 -2
- package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV4.d.ts +4 -3
- package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
- package/dist/api/OpenWalletSession.d.ts.map +1 -1
- package/dist/api/kaspa/KaspaGetAddress.d.ts +1 -1
- package/dist/api/kaspa/KaspaSignTransaction.d.ts +1 -1
- package/dist/api/polkadot/PolkadotGetAddress.d.ts +1 -1
- package/dist/api/polkadot/networks.d.ts +1 -1
- package/dist/api/protocol-v2/DeviceUploadNft.d.ts.map +1 -1
- package/dist/api/protocol-v2/helpers.d.ts.map +1 -1
- package/dist/api/solana/SolSignMessage.d.ts +1 -1
- package/dist/api/solana/SolSignOffchainMessage.d.ts +1 -1
- package/dist/api/solana/SolSignTransaction.d.ts +2 -2
- package/dist/api/sui/SuiGetAddress.d.ts +1 -1
- package/dist/api/sui/SuiGetPublicKey.d.ts +1 -1
- package/dist/api/sui/SuiSignMessage.d.ts +1 -1
- package/dist/api/sui/SuiSignTransaction.d.ts +1 -1
- package/dist/api/ton/TonGetAddress.d.ts +1 -1
- package/dist/api/ton/TonSignMessage.d.ts +1 -1
- package/dist/api/ton/TonSignProof.d.ts +1 -1
- package/dist/api/tron/TronSignMessage.d.ts +2 -2
- package/dist/api/tron/TronSignTransaction.d.ts +1 -1
- package/dist/data-manager/DataManager.d.ts +7 -5
- package/dist/data-manager/DataManager.d.ts.map +1 -1
- package/dist/device/Device.d.ts.map +1 -1
- package/dist/device/DeviceCommands.d.ts.map +1 -1
- package/dist/device/DevicePool.d.ts.map +1 -1
- package/dist/deviceProfile/protocolV2DeviceIdentity.d.ts.map +1 -1
- package/dist/index.d.ts +44 -34
- package/dist/index.js +231 -168
- package/dist/protocols/protocol-v2/resources.d.ts +2 -2
- package/dist/protocols/protocol-v2/resources.d.ts.map +1 -1
- package/dist/types/api/checkAllFirmwareRelease.d.ts +1 -1
- package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdate.d.ts +3 -2
- package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
- package/dist/types/device.d.ts +2 -2
- package/dist/types/device.d.ts.map +1 -1
- package/dist/types/settings.d.ts +22 -14
- package/dist/types/settings.d.ts.map +1 -1
- package/dist/utils/deviceFeaturesCompat.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/deviceSettings.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/api/CheckAllFirmwareRelease.ts +7 -5
- package/src/api/FirmwareUpdateV4.ts +115 -102
- package/src/api/OpenWalletSession.ts +1 -0
- package/src/api/kaspa/KaspaGetAddress.ts +1 -1
- package/src/api/kaspa/KaspaSignTransaction.ts +1 -1
- package/src/api/polkadot/networks.ts +3 -3
- package/src/api/protocol-v2/DeviceUploadNft.ts +7 -12
- package/src/api/protocol-v2/helpers.ts +0 -1
- package/src/api/solana/SolSignMessage.ts +1 -1
- package/src/api/solana/SolSignOffchainMessage.ts +1 -1
- package/src/api/solana/SolSignTransaction.ts +2 -2
- package/src/api/sui/SuiGetAddress.ts +1 -1
- package/src/api/sui/SuiGetPublicKey.ts +1 -1
- package/src/api/sui/SuiSignMessage.ts +1 -1
- package/src/api/sui/SuiSignTransaction.ts +1 -1
- package/src/api/ton/TonGetAddress.ts +1 -1
- package/src/api/ton/TonSignMessage.ts +1 -1
- package/src/api/ton/TonSignProof.ts +1 -1
- package/src/api/tron/TronSignMessage.ts +2 -2
- package/src/api/tron/TronSignTransaction.ts +1 -1
- package/src/data-manager/DataManager.ts +28 -9
- package/src/device/Device.ts +15 -6
- package/src/device/DeviceCommands.ts +13 -10
- package/src/device/DevicePool.ts +17 -8
- package/src/deviceProfile/buildDeviceFeatures.ts +2 -2
- package/src/deviceProfile/protocolV2DeviceIdentity.ts +3 -0
- package/src/protocols/protocol-v2/resources.ts +44 -13
- package/src/types/api/checkAllFirmwareRelease.ts +1 -1
- package/src/types/api/firmwareUpdate.ts +5 -5
- package/src/types/device.ts +12 -3
- package/src/types/settings.ts +30 -21
- package/src/utils/deviceFeaturesCompat.ts +5 -0
- package/src/utils/deviceFeaturesUtils.ts +6 -3
- package/src/utils/deviceInfoUtils.ts +2 -0
- package/src/utils/deviceSettings.ts +3 -0
|
@@ -589,7 +589,7 @@ describe('Protocol V2 feature adapter', () => {
|
|
|
589
589
|
} as any);
|
|
590
590
|
const protocolV2 = buildProtocolV2FeaturesPayload({
|
|
591
591
|
deviceInfo: {
|
|
592
|
-
hw: { serial_no: 'P2-001' },
|
|
592
|
+
hw: { Device_type: DeviceType.PRO2, serial_no: 'P2-001' },
|
|
593
593
|
coprocessor: { bt_adv_name: 'Pro 2 BLE' },
|
|
594
594
|
},
|
|
595
595
|
deviceStatus: {
|
|
@@ -2696,8 +2696,10 @@ describe('Protocol V2 feature adapter', () => {
|
|
|
2696
2696
|
).rejects.toThrow('DeviceInfo not supported');
|
|
2697
2697
|
});
|
|
2698
2698
|
|
|
2699
|
-
test('does not inherit Pro or
|
|
2700
|
-
const features = normalizeProtocolV2Features({ ...descriptor, protocolType: 'V2' } as any
|
|
2699
|
+
test('does not inherit Pro or model_touch ranges for Protocol V2 devices', () => {
|
|
2700
|
+
const features = normalizeProtocolV2Features({ ...descriptor, protocolType: 'V2' } as any, {
|
|
2701
|
+
hw: { Device_type: DeviceType.PRO2 },
|
|
2702
|
+
});
|
|
2701
2703
|
const checkedTypes: string[] = [];
|
|
2702
2704
|
|
|
2703
2705
|
const versionRange = getMethodVersionRange(features, type => {
|
|
@@ -2709,11 +2711,13 @@ describe('Protocol V2 feature adapter', () => {
|
|
|
2709
2711
|
});
|
|
2710
2712
|
|
|
2711
2713
|
expect(versionRange).toBeUndefined();
|
|
2712
|
-
expect(checkedTypes).toEqual(['pro2']);
|
|
2714
|
+
expect(checkedTypes).toEqual(['pro2', 'model_pro2']);
|
|
2713
2715
|
});
|
|
2714
2716
|
|
|
2715
2717
|
test('uses firmware-v1 as the Pro2 remote firmware config field', () => {
|
|
2716
|
-
const features = normalizeProtocolV2Features({ ...descriptor, protocolType: 'V2' } as any
|
|
2718
|
+
const features = normalizeProtocolV2Features({ ...descriptor, protocolType: 'V2' } as any, {
|
|
2719
|
+
hw: { Device_type: DeviceType.PRO2 },
|
|
2720
|
+
});
|
|
2717
2721
|
|
|
2718
2722
|
expect(
|
|
2719
2723
|
getFirmwareUpdateField({
|
|
@@ -3623,71 +3627,77 @@ describe('API compatibility handling', () => {
|
|
|
3623
3627
|
});
|
|
3624
3628
|
});
|
|
3625
3629
|
|
|
3626
|
-
test('
|
|
3627
|
-
|
|
3628
|
-
|
|
3629
|
-
|
|
3630
|
+
test.each(['pro2', 'neo'] as const)(
|
|
3631
|
+
'allows %s Solana signing methods through Protocol V2 version checks',
|
|
3632
|
+
deviceType => {
|
|
3633
|
+
const features = {
|
|
3634
|
+
deviceType,
|
|
3635
|
+
} as Features;
|
|
3630
3636
|
|
|
3631
|
-
|
|
3632
|
-
|
|
3633
|
-
|
|
3634
|
-
|
|
3635
|
-
|
|
3636
|
-
|
|
3637
|
-
|
|
3638
|
-
|
|
3639
|
-
|
|
3640
|
-
|
|
3641
|
-
|
|
3642
|
-
|
|
3643
|
-
|
|
3644
|
-
|
|
3645
|
-
|
|
3646
|
-
|
|
3647
|
-
|
|
3648
|
-
|
|
3649
|
-
|
|
3650
|
-
|
|
3651
|
-
|
|
3652
|
-
|
|
3653
|
-
|
|
3654
|
-
|
|
3655
|
-
|
|
3656
|
-
|
|
3657
|
-
|
|
3658
|
-
|
|
3659
|
-
|
|
3660
|
-
|
|
3661
|
-
|
|
3662
|
-
|
|
3637
|
+
const solSignMessageMethod = new SolSignMessage({
|
|
3638
|
+
id: 1,
|
|
3639
|
+
payload: {
|
|
3640
|
+
method: 'solSignMessage',
|
|
3641
|
+
path: "m/44'/501'/0'/0'",
|
|
3642
|
+
messageHex: '48656c6c6f',
|
|
3643
|
+
},
|
|
3644
|
+
});
|
|
3645
|
+
const solSignOffchainMessageMethod = new SolSignOffchainMessage({
|
|
3646
|
+
id: 2,
|
|
3647
|
+
payload: {
|
|
3648
|
+
method: 'solSignOffchainMessage',
|
|
3649
|
+
path: "m/44'/501'/0'/0'",
|
|
3650
|
+
messageHex: '48656c6c6f',
|
|
3651
|
+
},
|
|
3652
|
+
});
|
|
3653
|
+
const solSignTransactionMethod = new SolSignTransaction({
|
|
3654
|
+
id: 3,
|
|
3655
|
+
payload: {
|
|
3656
|
+
method: 'solSignTransaction',
|
|
3657
|
+
path: "m/44'/501'/0'/0'",
|
|
3658
|
+
rawTx: '00',
|
|
3659
|
+
},
|
|
3660
|
+
});
|
|
3661
|
+
const solSignVersionedTransactionMethod = new SolSignTransaction({
|
|
3662
|
+
id: 4,
|
|
3663
|
+
payload: {
|
|
3664
|
+
method: 'solSignTransaction',
|
|
3665
|
+
path: "m/44'/501'/0'/0'",
|
|
3666
|
+
rawTx: '80',
|
|
3667
|
+
},
|
|
3668
|
+
});
|
|
3663
3669
|
|
|
3664
|
-
|
|
3665
|
-
|
|
3670
|
+
solSignTransactionMethod.init();
|
|
3671
|
+
solSignVersionedTransactionMethod.init();
|
|
3666
3672
|
|
|
3667
|
-
|
|
3668
|
-
|
|
3669
|
-
|
|
3670
|
-
|
|
3671
|
-
|
|
3672
|
-
|
|
3673
|
-
|
|
3674
|
-
|
|
3675
|
-
|
|
3676
|
-
|
|
3677
|
-
|
|
3678
|
-
|
|
3679
|
-
|
|
3680
|
-
|
|
3681
|
-
|
|
3682
|
-
|
|
3683
|
-
|
|
3684
|
-
|
|
3685
|
-
|
|
3686
|
-
|
|
3687
|
-
|
|
3688
|
-
|
|
3689
|
-
|
|
3690
|
-
|
|
3673
|
+
expect(
|
|
3674
|
+
getMethodVersionRange(features, type => solSignMessageMethod.getVersionRange()[type])
|
|
3675
|
+
).toEqual({
|
|
3676
|
+
min: '0.0.0',
|
|
3677
|
+
});
|
|
3678
|
+
expect(
|
|
3679
|
+
getMethodVersionRange(
|
|
3680
|
+
features,
|
|
3681
|
+
type => solSignOffchainMessageMethod.getVersionRange()[type]
|
|
3682
|
+
)
|
|
3683
|
+
).toEqual({
|
|
3684
|
+
min: '0.0.0',
|
|
3685
|
+
});
|
|
3686
|
+
expect(
|
|
3687
|
+
getMethodVersionRange(features, type => solSignTransactionMethod.getVersionRange()[type])
|
|
3688
|
+
).toEqual({
|
|
3689
|
+
min: '0.0.0',
|
|
3690
|
+
});
|
|
3691
|
+
expect(
|
|
3692
|
+
getMethodVersionRange(
|
|
3693
|
+
features,
|
|
3694
|
+
type => solSignVersionedTransactionMethod.getVersionRange()[type]
|
|
3695
|
+
)
|
|
3696
|
+
).toEqual({
|
|
3697
|
+
min: '0.0.0',
|
|
3698
|
+
});
|
|
3699
|
+
}
|
|
3700
|
+
);
|
|
3691
3701
|
|
|
3692
3702
|
test('uses chunk transfer for large Sui transactions on Protocol V2', async () => {
|
|
3693
3703
|
const rawTx = '0x'.concat('ab'.repeat(5000));
|
|
@@ -3783,7 +3793,7 @@ describe('API compatibility handling', () => {
|
|
|
3783
3793
|
|
|
3784
3794
|
describe('Protocol V2 firmware update targets', () => {
|
|
3785
3795
|
const OKPP_HEADER_SIZE = 0x52a0;
|
|
3786
|
-
let forceReloadDataSpy: jest.SpyInstance
|
|
3796
|
+
let forceReloadDataSpy: jest.SpyInstance;
|
|
3787
3797
|
|
|
3788
3798
|
beforeEach(() => {
|
|
3789
3799
|
forceReloadDataSpy = jest.spyOn(DataManager, 'forceReloadData').mockResolvedValue(undefined);
|
|
@@ -4054,6 +4064,10 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
4054
4064
|
originalDescriptor: { id: 'usb-id', path: 'usb-path', protocolType: 'V2' },
|
|
4055
4065
|
features: { bootloader_mode: false, capabilities: [] },
|
|
4056
4066
|
isBootloader: () => false,
|
|
4067
|
+
probeProtocolV2RuntimeState: jest.fn().mockResolvedValue({
|
|
4068
|
+
mode: 'bootloader',
|
|
4069
|
+
bootloaderMode: true,
|
|
4070
|
+
}),
|
|
4057
4071
|
});
|
|
4058
4072
|
(method as any).protocolV2Reboot = jest.fn().mockResolvedValue({
|
|
4059
4073
|
message: 'Device rebooted successfully',
|
|
@@ -4081,6 +4095,7 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
4081
4095
|
(method as any).reconnectProtocolV2Device = reconnectProtocolV2Device;
|
|
4082
4096
|
(method as any).device.getCommands = () => ({ typedCall });
|
|
4083
4097
|
(method as any).protocolV2ExpectedSerialNumber = 'PR9999999999';
|
|
4098
|
+
(method as any).protocolV2ExpectedPath = 'usb-path';
|
|
4084
4099
|
method.postTipMessage = jest.fn();
|
|
4085
4100
|
|
|
4086
4101
|
await (method as any).enterProtocolV2BootloaderMode();
|
|
@@ -4239,6 +4254,10 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
4239
4254
|
originalDescriptor: { id: 'usb-id', path: 'app-path', protocolType: 'V2' },
|
|
4240
4255
|
features: { bootloader_mode: false, capabilities: [] },
|
|
4241
4256
|
isBootloader: () => false,
|
|
4257
|
+
probeProtocolV2RuntimeState: jest.fn().mockResolvedValue({
|
|
4258
|
+
mode: 'bootloader',
|
|
4259
|
+
bootloaderMode: true,
|
|
4260
|
+
}),
|
|
4242
4261
|
});
|
|
4243
4262
|
const typedCall = jest.fn().mockImplementation((requestType: string) => {
|
|
4244
4263
|
if (requestType === 'DeviceInfoGet') {
|
|
@@ -4266,15 +4285,13 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
4266
4285
|
(method as any).reconnectProtocolV2Device = reconnectProtocolV2Device;
|
|
4267
4286
|
(method as any).device.getCommands = () => ({ typedCall });
|
|
4268
4287
|
(method as any).protocolV2ExpectedSerialNumber = 'PR9999999999';
|
|
4288
|
+
(method as any).protocolV2ExpectedPath = 'app-path';
|
|
4269
4289
|
|
|
4270
4290
|
await (method as any).waitForProtocolV2BootloaderMode(60 * 1000, 0);
|
|
4271
4291
|
|
|
4272
4292
|
expect(reconnectProtocolV2Device).toHaveBeenCalledTimes(3);
|
|
4273
|
-
expect(typedCall).toHaveBeenCalledTimes(
|
|
4274
|
-
expect(typedCall.mock.calls.map(call => call[0])).toEqual([
|
|
4275
|
-
'DeviceInfoGet',
|
|
4276
|
-
'ProtocolInfoRequest',
|
|
4277
|
-
]);
|
|
4293
|
+
expect(typedCall).toHaveBeenCalledTimes(1);
|
|
4294
|
+
expect(typedCall.mock.calls.map(call => call[0])).toEqual(['DeviceInfoGet']);
|
|
4278
4295
|
});
|
|
4279
4296
|
|
|
4280
4297
|
test('does not run generic initialize during Protocol V2 USB firmware reconnect', async () => {
|
|
@@ -4311,6 +4328,7 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
4311
4328
|
deviceList: [cachedDevice],
|
|
4312
4329
|
} as any);
|
|
4313
4330
|
(method as any).device = device;
|
|
4331
|
+
(method as any).protocolV2ExpectedPath = 'usb-path';
|
|
4314
4332
|
|
|
4315
4333
|
try {
|
|
4316
4334
|
await (method as any).reconnectProtocolV2Device();
|
|
@@ -4361,6 +4379,7 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
4361
4379
|
deviceList: [otherDevice, expectedDevice],
|
|
4362
4380
|
} as any);
|
|
4363
4381
|
(method as any).device = device;
|
|
4382
|
+
(method as any).protocolV2ExpectedPath = 'usb-path';
|
|
4364
4383
|
(method as any).protocolV2ExpectedSerialNumber = 'PRO2-PHYSICAL-B';
|
|
4365
4384
|
|
|
4366
4385
|
try {
|
|
@@ -4417,7 +4436,7 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
4417
4436
|
expect(updateFromCache).not.toHaveBeenCalled();
|
|
4418
4437
|
});
|
|
4419
4438
|
|
|
4420
|
-
test('allows a
|
|
4439
|
+
test('allows a Protocol V2 USB reconnect candidate without a serial only when its path matches', async () => {
|
|
4421
4440
|
const method = new FirmwareUpdateV4({
|
|
4422
4441
|
id: 1,
|
|
4423
4442
|
payload: {
|
|
@@ -4427,7 +4446,7 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
4427
4446
|
const commands = { disposed: true, mainId: '' };
|
|
4428
4447
|
const updateFromCache = jest.fn();
|
|
4429
4448
|
const device = stubDevice({
|
|
4430
|
-
originalDescriptor: { id: '
|
|
4449
|
+
originalDescriptor: { id: 'usb-a', path: 'usb-a', protocolType: 'V2' },
|
|
4431
4450
|
deviceConnector: {
|
|
4432
4451
|
enumerate: jest.fn().mockResolvedValue({
|
|
4433
4452
|
descriptors: [{ id: 'usb-a', path: 'usb-a', protocolType: 'V2' }],
|
|
@@ -4450,6 +4469,7 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
4450
4469
|
} as any);
|
|
4451
4470
|
(method as any).device = device;
|
|
4452
4471
|
(method as any).protocolV2ExpectedSerialNumber = 'PRO2-PHYSICAL-A';
|
|
4472
|
+
(method as any).protocolV2ExpectedPath = 'usb-a';
|
|
4453
4473
|
|
|
4454
4474
|
try {
|
|
4455
4475
|
await (method as any).reconnectProtocolV2Device();
|
|
@@ -4539,6 +4559,7 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
4539
4559
|
deviceList: [{ getConnectId: () => 'usb-path' }],
|
|
4540
4560
|
} as any);
|
|
4541
4561
|
(method as any).device = device;
|
|
4562
|
+
(method as any).protocolV2ExpectedPath = 'usb-path';
|
|
4542
4563
|
|
|
4543
4564
|
try {
|
|
4544
4565
|
await (method as any).reconnectProtocolV2Device();
|
|
@@ -4569,6 +4590,7 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
4569
4590
|
(method as any).protocolV2ExpectedSerialNumber = 'expected-serial';
|
|
4570
4591
|
(method as any).reconnectProtocolV2Device = reconnectProtocolV2Device;
|
|
4571
4592
|
(method as any).device = stubDevice({
|
|
4593
|
+
originalDescriptor: { id: 'usb-id', path: 'usb-path', protocolType: 'V2' },
|
|
4572
4594
|
getCommands: () => ({ typedCall }),
|
|
4573
4595
|
probeProtocolV2RuntimeState: jest.fn().mockResolvedValue({
|
|
4574
4596
|
deviceId: 'changed-device',
|
|
@@ -5813,14 +5835,14 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
5813
5835
|
});
|
|
5814
5836
|
});
|
|
5815
5837
|
|
|
5816
|
-
test('treats manual resource
|
|
5838
|
+
test('treats manual resource files as explicit payload without remote firmware auto-fill', async () => {
|
|
5817
5839
|
const resourceBundle = new Uint8Array([1, 2, 3]).buffer;
|
|
5818
5840
|
const method = new FirmwareUpdateV4({
|
|
5819
5841
|
id: 1,
|
|
5820
5842
|
payload: {
|
|
5821
5843
|
method: 'firmwareUpdateV4',
|
|
5822
5844
|
platform: 'web',
|
|
5823
|
-
|
|
5845
|
+
resourceFiles: [
|
|
5824
5846
|
{
|
|
5825
5847
|
binary: resourceBundle,
|
|
5826
5848
|
devicePath: ' VOL0:/resource/images/images.okpkg ',
|
|
@@ -5868,7 +5890,7 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
5868
5890
|
payload: {
|
|
5869
5891
|
method: 'firmwareUpdateV4',
|
|
5870
5892
|
platform: 'web',
|
|
5871
|
-
|
|
5893
|
+
resourceFiles: [
|
|
5872
5894
|
{
|
|
5873
5895
|
binary: new Uint8Array([1, 2, 3]).buffer,
|
|
5874
5896
|
devicePath: 'vol2:/resource/images/images.okpkg',
|
|
@@ -5887,7 +5909,7 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
5887
5909
|
(method as any).enterProtocolV2BootloaderMode = jest.fn();
|
|
5888
5910
|
method.postTipMessage = jest.fn();
|
|
5889
5911
|
|
|
5890
|
-
await expect(method.run()).rejects.toThrow('
|
|
5912
|
+
await expect(method.run()).rejects.toThrow('resourceFiles[0].devicePath');
|
|
5891
5913
|
expect((method as any).prepareRemoteProtocolV2Binaries).not.toHaveBeenCalled();
|
|
5892
5914
|
expect((method as any).enterProtocolV2BootloaderMode).not.toHaveBeenCalled();
|
|
5893
5915
|
});
|
|
@@ -5946,6 +5968,7 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
5946
5968
|
|
|
5947
5969
|
(method as any).device = stubDevice({
|
|
5948
5970
|
getCommands: () => ({ typedCall }),
|
|
5971
|
+
getCurrentDeviceType: () => 'pro2',
|
|
5949
5972
|
toMessageObject: () => ({ connectId: 'firmware-device' }),
|
|
5950
5973
|
});
|
|
5951
5974
|
method.postMessage = jest.fn();
|
|
@@ -6287,7 +6310,7 @@ describe('Protocol V2 firmware update method', () => {
|
|
|
6287
6310
|
expect(typedCall).not.toHaveBeenCalled();
|
|
6288
6311
|
});
|
|
6289
6312
|
|
|
6290
|
-
test.each([0, 2])(
|
|
6313
|
+
test.each([0, 1, 2])(
|
|
6291
6314
|
'rejects firmware target %s because the Pro2 bootloader cannot install it',
|
|
6292
6315
|
async targetId => {
|
|
6293
6316
|
const typedCall = jest.fn();
|
|
@@ -6320,8 +6343,8 @@ describe('Protocol V2 firmware update method', () => {
|
|
|
6320
6343
|
targets: [
|
|
6321
6344
|
{
|
|
6322
6345
|
target_id: undefined,
|
|
6323
|
-
targetId:
|
|
6324
|
-
path: 'vol0:
|
|
6346
|
+
targetId: 3,
|
|
6347
|
+
path: 'vol0:bootloader.okpkg',
|
|
6325
6348
|
},
|
|
6326
6349
|
],
|
|
6327
6350
|
} as any,
|
|
@@ -6333,7 +6356,7 @@ describe('Protocol V2 firmware update method', () => {
|
|
|
6333
6356
|
|
|
6334
6357
|
await method.run();
|
|
6335
6358
|
expect(typedCall.mock.calls[0][2]).toEqual({
|
|
6336
|
-
targets: [{ target_id:
|
|
6359
|
+
targets: [{ target_id: 3, path: 'vol0:bootloader.okpkg' }],
|
|
6337
6360
|
});
|
|
6338
6361
|
});
|
|
6339
6362
|
|
|
@@ -6465,10 +6488,16 @@ describe('Protocol V2 firmware reconnect identity', () => {
|
|
|
6465
6488
|
).not.toThrow();
|
|
6466
6489
|
});
|
|
6467
6490
|
|
|
6468
|
-
test('
|
|
6469
|
-
expect(() =>
|
|
6470
|
-
|
|
6471
|
-
|
|
6491
|
+
test('requires the same descriptor path when either physical serial is unavailable', () => {
|
|
6492
|
+
expect(() =>
|
|
6493
|
+
assertProtocolV2ReconnectIdentity('expected-serial', undefined, 'usb-path', 'usb-path')
|
|
6494
|
+
).not.toThrow();
|
|
6495
|
+
expect(() =>
|
|
6496
|
+
assertProtocolV2ReconnectIdentity(undefined, 'actual-serial', 'usb-path', 'other-path')
|
|
6497
|
+
).toThrow('identity unavailable');
|
|
6498
|
+
expect(() => assertProtocolV2ReconnectIdentity(undefined, undefined)).toThrow(
|
|
6499
|
+
'identity unavailable'
|
|
6500
|
+
);
|
|
6472
6501
|
});
|
|
6473
6502
|
|
|
6474
6503
|
test('captures physical identity from active DeviceInfo instead of wallet deviceId', async () => {
|
|
@@ -6486,6 +6515,7 @@ describe('Protocol V2 firmware reconnect identity', () => {
|
|
|
6486
6515
|
},
|
|
6487
6516
|
});
|
|
6488
6517
|
(method as any).device = stubDevice({
|
|
6518
|
+
originalDescriptor: { id: 'usb-id', path: 'usb-path', protocolType: 'V2' },
|
|
6489
6519
|
features: { deviceId: 'wallet-derived-id' },
|
|
6490
6520
|
getCommands: () => ({ typedCall }),
|
|
6491
6521
|
});
|
|
@@ -6511,11 +6541,13 @@ describe('Protocol V2 firmware reconnect identity', () => {
|
|
|
6511
6541
|
message: { protocol_version: 1, hw: {} },
|
|
6512
6542
|
});
|
|
6513
6543
|
(method as any).device = stubDevice({
|
|
6544
|
+
originalDescriptor: { id: 'usb-id', path: 'usb-path', protocolType: 'V2' },
|
|
6514
6545
|
getCommands: () => ({ typedCall }),
|
|
6515
6546
|
});
|
|
6516
6547
|
|
|
6517
6548
|
await expect((method as any).captureProtocolV2PhysicalIdentity()).resolves.toBeUndefined();
|
|
6518
6549
|
expect((method as any).protocolV2ExpectedSerialNumber).toBeUndefined();
|
|
6550
|
+
expect((method as any).protocolV2ExpectedPath).toBeDefined();
|
|
6519
6551
|
});
|
|
6520
6552
|
|
|
6521
6553
|
test('uses filesystem reads instead of ResourceInventoryGet for resource comparison', async () => {
|
|
@@ -6540,6 +6572,7 @@ describe('Protocol V2 firmware reconnect identity', () => {
|
|
|
6540
6572
|
const typedCall = createResourceFilesystemTypedCall(stable);
|
|
6541
6573
|
(method as any).device = stubDevice({
|
|
6542
6574
|
getCommands: () => ({ typedCall }),
|
|
6575
|
+
getCurrentDeviceType: () => 'pro2',
|
|
6543
6576
|
});
|
|
6544
6577
|
const resourcesSpy = jest
|
|
6545
6578
|
.spyOn(DataManager, 'getProtocolV2Resources')
|
|
@@ -6569,7 +6602,10 @@ describe('Protocol V2 firmware reconnect identity', () => {
|
|
|
6569
6602
|
})
|
|
6570
6603
|
);
|
|
6571
6604
|
const typedCall = createResourceFilesystemTypedCall(stable, ['images']);
|
|
6572
|
-
(method as any).device = stubDevice({
|
|
6605
|
+
(method as any).device = stubDevice({
|
|
6606
|
+
getCommands: () => ({ typedCall }),
|
|
6607
|
+
getCurrentDeviceType: () => 'pro2',
|
|
6608
|
+
});
|
|
6573
6609
|
const resourcesSpy = jest
|
|
6574
6610
|
.spyOn(DataManager, 'getProtocolV2Resources')
|
|
6575
6611
|
.mockReturnValue(stable as any);
|
|
@@ -6604,7 +6640,10 @@ describe('Protocol V2 firmware reconnect identity', () => {
|
|
|
6604
6640
|
})
|
|
6605
6641
|
);
|
|
6606
6642
|
const typedCall = createResourceFilesystemTypedCall(stable, ['images']);
|
|
6607
|
-
(method as any).device = stubDevice({
|
|
6643
|
+
(method as any).device = stubDevice({
|
|
6644
|
+
getCommands: () => ({ typedCall }),
|
|
6645
|
+
getCurrentDeviceType: () => 'pro2',
|
|
6646
|
+
});
|
|
6608
6647
|
const resourcesSpy = jest
|
|
6609
6648
|
.spyOn(DataManager, 'getProtocolV2Resources')
|
|
6610
6649
|
.mockReturnValue(stable as any);
|
|
@@ -6625,34 +6664,6 @@ describe('Protocol V2 firmware reconnect identity', () => {
|
|
|
6625
6664
|
resourcesSpy.mockRestore();
|
|
6626
6665
|
});
|
|
6627
6666
|
|
|
6628
|
-
const buildBootResourcesHeader = ({
|
|
6629
|
-
type = 'CRAT',
|
|
6630
|
-
payloadHash = 'ab'.repeat(64),
|
|
6631
|
-
headerHash = 'cd'.repeat(64),
|
|
6632
|
-
}: {
|
|
6633
|
-
type?: string;
|
|
6634
|
-
payloadHash?: string;
|
|
6635
|
-
headerHash?: string;
|
|
6636
|
-
} = {}) => {
|
|
6637
|
-
const header = new Uint8Array(0x52a0);
|
|
6638
|
-
const view = new DataView(header.buffer);
|
|
6639
|
-
'OKPP'.split('').forEach((char, index) => {
|
|
6640
|
-
header[index] = char.charCodeAt(0);
|
|
6641
|
-
});
|
|
6642
|
-
type.split('').forEach((char, index) => {
|
|
6643
|
-
header[0x08 + index] = char.charCodeAt(0);
|
|
6644
|
-
});
|
|
6645
|
-
view.setUint32(0x0c, header.byteLength, true);
|
|
6646
|
-
const writeHex = (offset: number, hex: string) => {
|
|
6647
|
-
for (let index = 0; index < hex.length / 2; index++) {
|
|
6648
|
-
header[offset + index] = Number.parseInt(hex.slice(index * 2, index * 2 + 2), 16);
|
|
6649
|
-
}
|
|
6650
|
-
};
|
|
6651
|
-
writeHex(0x200, payloadHash);
|
|
6652
|
-
writeHex(0x240, headerHash);
|
|
6653
|
-
return header;
|
|
6654
|
-
};
|
|
6655
|
-
|
|
6656
6667
|
test('does not resolve boot resources unless the optional target is selected', async () => {
|
|
6657
6668
|
const method = new FirmwareUpdateV4({
|
|
6658
6669
|
id: 1,
|
|
@@ -6668,20 +6679,22 @@ describe('Protocol V2 firmware reconnect identity', () => {
|
|
|
6668
6679
|
expect(downloadSpy).not.toHaveBeenCalled();
|
|
6669
6680
|
});
|
|
6670
6681
|
|
|
6671
|
-
test('downloads and maps
|
|
6672
|
-
const
|
|
6673
|
-
const headerHash = 'cd'.repeat(64);
|
|
6674
|
-
const bytes = buildBootResourcesHeader({ payloadHash, headerHash });
|
|
6682
|
+
test('downloads and maps selected boot resources as direct RES files', async () => {
|
|
6683
|
+
const bytes = new Uint8Array([1, 2, 3, 4]);
|
|
6675
6684
|
const binary = bytes.buffer as ArrayBuffer;
|
|
6676
6685
|
const fileHash = Array.from(sha256(bytes), byte => byte.toString(16).padStart(2, '0')).join('');
|
|
6677
6686
|
const resource = {
|
|
6678
6687
|
required: false as const,
|
|
6679
|
-
target: '
|
|
6680
|
-
|
|
6681
|
-
|
|
6682
|
-
|
|
6683
|
-
|
|
6684
|
-
|
|
6688
|
+
target: 'RES' as const,
|
|
6689
|
+
files: [
|
|
6690
|
+
{
|
|
6691
|
+
name: 'bootloader_crest.bin',
|
|
6692
|
+
url: 'https://example.com/bootloader_crest.bin',
|
|
6693
|
+
devicePath: 'vol0:/assets/loaders/boot.staging/graphics/bootloader_crest.bin',
|
|
6694
|
+
size: bytes.byteLength,
|
|
6695
|
+
fileHash,
|
|
6696
|
+
},
|
|
6697
|
+
],
|
|
6685
6698
|
};
|
|
6686
6699
|
const method = new FirmwareUpdateV4({
|
|
6687
6700
|
id: 1,
|
|
@@ -6692,30 +6705,39 @@ describe('Protocol V2 firmware reconnect identity', () => {
|
|
|
6692
6705
|
},
|
|
6693
6706
|
});
|
|
6694
6707
|
method.init();
|
|
6708
|
+
(method as any).device = stubDevice({ getCurrentDeviceType: () => 'pro2' });
|
|
6695
6709
|
jest.spyOn(DataManager, 'getProtocolV2BootResources').mockReturnValue(resource);
|
|
6696
6710
|
jest.spyOn(firmwareBinaryApi, 'getSysResourceBinary').mockResolvedValue({ binary });
|
|
6697
6711
|
|
|
6698
|
-
await expect((method as any).prepareProtocolV2BootResources()).resolves.toEqual(
|
|
6699
|
-
|
|
6700
|
-
|
|
6701
|
-
|
|
6702
|
-
|
|
6703
|
-
|
|
6712
|
+
await expect((method as any).prepareProtocolV2BootResources()).resolves.toEqual([
|
|
6713
|
+
{
|
|
6714
|
+
name: 'bootloader_crest.bin',
|
|
6715
|
+
binary,
|
|
6716
|
+
devicePath: 'vol0:/assets/loaders/boot.staging/graphics/bootloader_crest.bin',
|
|
6717
|
+
},
|
|
6718
|
+
]);
|
|
6704
6719
|
});
|
|
6705
6720
|
|
|
6706
|
-
test('rejects a
|
|
6721
|
+
test('rejects a manually supplied resource file when its manifest hash does not match', () => {
|
|
6707
6722
|
const method = new FirmwareUpdateV4({
|
|
6708
6723
|
id: 1,
|
|
6709
6724
|
payload: {
|
|
6710
6725
|
method: 'firmwareUpdateV4',
|
|
6711
6726
|
platform: 'web',
|
|
6712
|
-
|
|
6727
|
+
resourceFiles: [
|
|
6728
|
+
{
|
|
6729
|
+
binary: new Uint8Array([1, 2, 3]).buffer,
|
|
6730
|
+
devicePath: 'vol0:/assets/loaders/boot.staging/graphics/bootloader_crest.bin',
|
|
6731
|
+
size: 3,
|
|
6732
|
+
fileHash: '00'.repeat(32),
|
|
6733
|
+
},
|
|
6734
|
+
],
|
|
6713
6735
|
},
|
|
6714
6736
|
});
|
|
6715
6737
|
method.init();
|
|
6716
6738
|
|
|
6717
|
-
|
|
6718
|
-
'
|
|
6739
|
+
expect(() => (method as any).prepareExplicitProtocolV2ResourceFiles()).toThrow(
|
|
6740
|
+
'SHA-256 mismatch'
|
|
6719
6741
|
);
|
|
6720
6742
|
});
|
|
6721
6743
|
});
|
|
@@ -44,7 +44,7 @@ describe('TronSignMessage legacy message validation', () => {
|
|
|
44
44
|
}
|
|
45
45
|
);
|
|
46
46
|
|
|
47
|
-
test('allows Protocol V2 message signing on Pro2', async () => {
|
|
47
|
+
test('allows Protocol V2 message signing on the Pro2 product family', async () => {
|
|
48
48
|
const method = new TronSignMessage({
|
|
49
49
|
id: 1,
|
|
50
50
|
payload: {
|
|
@@ -60,7 +60,7 @@ describe('TronSignMessage legacy message validation', () => {
|
|
|
60
60
|
method.device = {
|
|
61
61
|
commands: { typedCall },
|
|
62
62
|
getCurrentFirmwareVersionString: jest.fn(() => '0.0.0'),
|
|
63
|
-
getCurrentMethodVersionRange: jest.fn(selector => selector('
|
|
63
|
+
getCurrentMethodVersionRange: jest.fn(selector => selector('model_pro2')),
|
|
64
64
|
getCurrentFirmwareType: jest.fn(() => EFirmwareType.Universal),
|
|
65
65
|
} as unknown as Device;
|
|
66
66
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckAllFirmwareRelease.d.ts","sourceRoot":"","sources":["../../src/api/CheckAllFirmwareRelease.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"CheckAllFirmwareRelease.d.ts","sourceRoot":"","sources":["../../src/api/CheckAllFirmwareRelease.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,aAAa,EAA6B,MAAM,qBAAqB,CAAC;AAY5F,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAM1C,OAAO,KAAK,EACV,kBAAkB,EAElB,kCAAkC,EAClC,+BAA+B,EAChC,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EAGrB,MAAM,UAAU,CAAC;AA+HlB,KAAK,6BAA6B,GAAG;IACnC,YAAY,EAAE,aAAa,CAAC;IAC5B,MAAM,EAAE,+BAA+B,CAAC;IACxC,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,mBAAmB,CAAC;IACrC,UAAU,EAAE,kCAAkC,EAAE,CAAC;IACjD,eAAe,EAAE,sBAAsB,EAAE,CAAC;IAC1C,OAAO,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC3C,CAAC;AAEF,wBAAgB,8BAA8B,CAAC,EAC7C,eAAe,EACf,mBAAwB,EACxB,iBAAyB,EACzB,mBAAwB,EACxB,YAAY,EACZ,OAAO,GACR,EAAE;IACD,eAAe,EAAE,mBAAmB,CAAC;IACrC,mBAAmB,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACpD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IAC9D,YAAY,EAAE,aAAa,CAAC;IAC5B,OAAO,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC3C,GAAG,6BAA6B,CAqEhC;AAED,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,UAAU;IAC7D,qBAAqB;IAIrB,IAAI;IAME,GAAG;YAuDK,aAAa;CA2F5B"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { FirmwareUpdateBaseMethod } from './firmware/FirmwareUpdateBaseMethod';
|
|
2
2
|
import type { FirmwareUpdateV4Params } from '../types/api/firmwareUpdate';
|
|
3
3
|
export declare const isProtocolV2FirmwareFingerprintValid: (binary: ArrayBuffer | Uint8Array, fingerprint: string | undefined) => boolean;
|
|
4
|
-
export declare const assertProtocolV2ReconnectIdentity: (expectedSerialNumber?: string, actualSerialNumber?: string) => void;
|
|
4
|
+
export declare const assertProtocolV2ReconnectIdentity: (expectedSerialNumber?: string, actualSerialNumber?: string, expectedPath?: string, actualPath?: string) => void;
|
|
5
5
|
export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareUpdateV4Params> {
|
|
6
6
|
private protocolV2ExpectedSerialNumber?;
|
|
7
|
+
private protocolV2ExpectedPath?;
|
|
7
8
|
getSupportedProtocols(): readonly ["V2"];
|
|
8
9
|
init(): void;
|
|
9
10
|
private getProtocolV2FirmwareChunkSize;
|
|
@@ -27,9 +28,9 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
27
28
|
private getRemoteComponentTarget;
|
|
28
29
|
private downloadRemoteProtocolV2Component;
|
|
29
30
|
private prepareRemoteProtocolV2Binaries;
|
|
30
|
-
private
|
|
31
|
+
private getProtocolV2DeviceType;
|
|
31
32
|
private prepareProtocolV2BootResources;
|
|
32
|
-
private
|
|
33
|
+
private prepareExplicitProtocolV2ResourceFiles;
|
|
33
34
|
private prepareProtocolV2ResourceBundles;
|
|
34
35
|
private downloadProtocolV2Resource;
|
|
35
36
|
private syncProtocolV2ResourceBundles;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAkB/E,OAAO,KAAK,EAAE,sBAAsB,EAA0B,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAkB/E,OAAO,KAAK,EAAE,sBAAsB,EAA0B,MAAM,6BAA6B,CAAC;AAiUlG,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,qBAAqB;IAIrB,IAAI;IA2DJ,OAAO,CAAC,8BAA8B;IAiBhC,GAAG;;;;;YAKK,aAAa;YAoGb,2BAA2B;IAWzC,OAAO,CAAC,yBAAyB;IAKjC,OAAO,CAAC,kCAAkC;IAS1C,OAAO,CAAC,8BAA8B;YAMxB,iCAAiC;YAOjC,iCAAiC;YASjC,iCAAiC;IAM/C,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,4BAA4B;IAQpC,OAAO,CAAC,2BAA2B;IAsBnC,OAAO,CAAC,yBAAyB;IAiBjC,OAAO,CAAC,wBAAwB;YAkBlB,iCAAiC;YAmCjC,+BAA+B;IAqD7C,OAAO,CAAC,uBAAuB;YAMjB,8BAA8B;IAuB5C,OAAO,CAAC,sCAAsC;YAmChC,gCAAgC;YAqChC,0BAA0B;YAe1B,6BAA6B;IAkC3C,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,yBAAyB;IAc3B,6BAA6B;YA6BrB,+BAA+B;IAkD7C,OAAO,CAAC,6BAA6B;YAkCvB,uBAAuB;IA4GrC,OAAO,CAAC,mCAAmC;YAI7B,0BAA0B;IAaxC,OAAO,CAAC,4BAA4B;IAgEpC,OAAO,CAAC,6BAA6B;YAcvB,uCAAuC;YAoJvC,gCAAgC;YAchC,yBAAyB;YAQzB,8BAA8B;IAQ5C,OAAO,CAAC,0BAA0B;YAiBpB,qCAAqC;YAgDrC,yBAAyB;YA8DzB,8BAA8B;IAU5C,OAAO,CAAC,kCAAkC;YAI5B,6BAA6B;YAwB7B,wBAAwB;IAyDtC,OAAO,CAAC,sCAAsC;YAchC,6BAA6B;YAW7B,0BAA0B;YAS1B,6BAA6B;YAmB7B,gBAAgB;IAiB9B,OAAO,CAAC,qBAAqB;CAM9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenWalletSession.d.ts","sourceRoot":"","sources":["../../src/api/OpenWalletSession.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,gCAAgC,CAAC;AAkExC,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,UAAU,CAAC,uBAAuB,CAAC;IAChF,qBAAqB;IAIrB,IAAI;
|
|
1
|
+
{"version":3,"file":"OpenWalletSession.d.ts","sourceRoot":"","sources":["../../src/api/OpenWalletSession.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,gCAAgC,CAAC;AAkExC,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,UAAU,CAAC,uBAAuB,CAAC;IAChF,qBAAqB;IAIrB,IAAI;IAQE,GAAG,IAAI,OAAO,CAAC,wBAAwB,CAAC;CA+K/C"}
|