@onekeyfe/hd-core 1.2.0-alpha.45 → 1.2.0-alpha.46
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__/deviceUploadNft.test.ts +21 -0
- package/__tests__/open-wallet-session.test.ts +33 -1
- package/__tests__/protocol-v2-resources.test.ts +3 -38
- package/__tests__/protocol-v2.test.ts +7 -109
- package/__tests__/uiPromiseRegistry.test.ts +86 -0
- package/dist/api/FirmwareUpdateV4.d.ts +0 -2
- package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/uiPromiseRegistry.d.ts +4 -0
- package/dist/core/uiPromiseRegistry.d.ts.map +1 -0
- package/dist/data-manager/DataManager.d.ts +0 -1
- package/dist/data-manager/DataManager.d.ts.map +1 -1
- package/dist/events/ui-promise.d.ts +4 -2
- package/dist/events/ui-promise.d.ts.map +1 -1
- package/dist/events/ui-request.d.ts +3 -0
- package/dist/events/ui-request.d.ts.map +1 -1
- package/dist/events/ui-response.d.ts +10 -2
- package/dist/events/ui-response.d.ts.map +1 -1
- package/dist/index.d.ts +52 -58
- package/dist/index.js +52 -109
- package/dist/protocols/protocol-v2/resources.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/walletSession.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdate.d.ts +1 -2
- package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
- package/dist/types/settings.d.ts +0 -10
- package/dist/types/settings.d.ts.map +1 -1
- package/dist/utils/pro2Nft.d.ts +2 -2
- package/dist/utils/pro2Nft.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/api/FirmwareUpdateV4.ts +6 -76
- package/src/core/index.ts +20 -4
- package/src/core/uiPromiseRegistry.ts +41 -0
- package/src/data-manager/DataManager.ts +0 -4
- package/src/events/ui-promise.ts +4 -2
- package/src/events/ui-request.ts +3 -0
- package/src/events/ui-response.ts +12 -2
- package/src/protocols/protocol-v2/resources.ts +1 -33
- package/src/protocols/protocol-v2/walletSession.ts +5 -1
- package/src/types/api/firmwareUpdate.ts +0 -3
- package/src/types/settings.ts +0 -16
- package/src/utils/pro2Nft.ts +2 -2
|
@@ -81,6 +81,27 @@ const nftFileList = (count: number, basenameAt?: number) =>
|
|
|
81
81
|
.join('\n');
|
|
82
82
|
|
|
83
83
|
describe('DeviceUploadNft', () => {
|
|
84
|
+
test('defaults to maximum-size chunks without artificial pacing', () => {
|
|
85
|
+
const method = new DeviceUploadNft({
|
|
86
|
+
id: 1,
|
|
87
|
+
payload: {
|
|
88
|
+
method: 'deviceUploadNft',
|
|
89
|
+
image: { width: 540, height: 540, rgba: createRgba(540, 540) },
|
|
90
|
+
thumbnail: { width: 263, height: 263, rgba: createRgba(263, 263) },
|
|
91
|
+
title: 'CryptoPunk #3100',
|
|
92
|
+
subtitle: 'CryptoPunks',
|
|
93
|
+
timestampMs: 1_760_000_000_000,
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
method.init();
|
|
98
|
+
|
|
99
|
+
expect((method as any).params).toMatchObject({
|
|
100
|
+
chunkSize: 2048,
|
|
101
|
+
paceMs: 0,
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
|
|
84
105
|
test('uploads the triplet in order without creating the firmware-owned directory', async () => {
|
|
85
106
|
const typedCall = jest.fn((request: string, _response: string, params: any) => {
|
|
86
107
|
if (request === 'FilesystemDirList') {
|
|
@@ -5,6 +5,7 @@ import GetPassphraseState from '../src/api/GetPassphraseState';
|
|
|
5
5
|
import OpenWalletSession from '../src/api/OpenWalletSession';
|
|
6
6
|
import { Device } from '../src/device/Device';
|
|
7
7
|
import { deviceWalletSessionStore } from '../src/device/DeviceWalletSessionStore';
|
|
8
|
+
import { DEVICE } from '../src/events';
|
|
8
9
|
import {
|
|
9
10
|
ensureProtocolV2WalletSessionUnlocked,
|
|
10
11
|
getProtocolV2WalletSession,
|
|
@@ -1130,7 +1131,28 @@ describe('openWalletSession', () => {
|
|
|
1130
1131
|
payload: { method: 'openWalletSession', connectId: 'connect-id', mode: 'select-hidden' },
|
|
1131
1132
|
});
|
|
1132
1133
|
method.init();
|
|
1133
|
-
|
|
1134
|
+
const device = createDevice({ typedCall, promptPassphrase });
|
|
1135
|
+
const passphraseInteraction = {
|
|
1136
|
+
interactionId: 'interaction-1',
|
|
1137
|
+
phaseId: 'interaction-1:phase-1',
|
|
1138
|
+
sequence: 1,
|
|
1139
|
+
phase: 'passphrase',
|
|
1140
|
+
transition: 'start',
|
|
1141
|
+
protocol: 'V2',
|
|
1142
|
+
} as const;
|
|
1143
|
+
const passphraseOnDeviceInteraction = {
|
|
1144
|
+
interactionId: 'interaction-1',
|
|
1145
|
+
phaseId: 'interaction-1:phase-2',
|
|
1146
|
+
sequence: 2,
|
|
1147
|
+
phase: 'passphrase-on-device',
|
|
1148
|
+
transition: 'start',
|
|
1149
|
+
protocol: 'V2',
|
|
1150
|
+
} as const;
|
|
1151
|
+
device.createProtocolV2UiPhaseMetadata = jest
|
|
1152
|
+
.fn()
|
|
1153
|
+
.mockReturnValueOnce(passphraseInteraction)
|
|
1154
|
+
.mockReturnValueOnce(passphraseOnDeviceInteraction);
|
|
1155
|
+
method.device = device as any;
|
|
1134
1156
|
|
|
1135
1157
|
await expect(method.run()).resolves.toMatchObject({
|
|
1136
1158
|
walletType: 'hidden',
|
|
@@ -1142,6 +1164,16 @@ describe('openWalletSession', () => {
|
|
|
1142
1164
|
expect(typedCall).toHaveBeenNthCalledWith(3, 'DeviceSessionGet', 'DeviceSession', {
|
|
1143
1165
|
seed_domains: [],
|
|
1144
1166
|
});
|
|
1167
|
+
expect(device.createProtocolV2UiPhaseMetadata).toHaveBeenNthCalledWith(
|
|
1168
|
+
2,
|
|
1169
|
+
'passphrase-on-device',
|
|
1170
|
+
'start'
|
|
1171
|
+
);
|
|
1172
|
+
expect(device.emit).toHaveBeenCalledWith(DEVICE.PASSPHRASE_ON_DEVICE, device, {
|
|
1173
|
+
source: 'wallet-session-coordinator',
|
|
1174
|
+
reason: 'open-wallet',
|
|
1175
|
+
interaction: passphraseOnDeviceInteraction,
|
|
1176
|
+
});
|
|
1145
1177
|
});
|
|
1146
1178
|
|
|
1147
1179
|
test('forwards a host passphrase to Pro2 firmware', async () => {
|
|
@@ -12,12 +12,7 @@ import {
|
|
|
12
12
|
requestProtocolV2ResourceInventory,
|
|
13
13
|
} from '../src/protocols/protocol-v2/resources';
|
|
14
14
|
|
|
15
|
-
import type {
|
|
16
|
-
ConnectSettings,
|
|
17
|
-
IProtocolV2BootResources,
|
|
18
|
-
IProtocolV2Resource,
|
|
19
|
-
RemoteConfigResponse,
|
|
20
|
-
} from '../src/types';
|
|
15
|
+
import type { ConnectSettings, IProtocolV2Resource, RemoteConfigResponse } from '../src/types';
|
|
21
16
|
|
|
22
17
|
jest.mock('axios');
|
|
23
18
|
jest.mock('../src/data/config', () => ({
|
|
@@ -36,16 +31,6 @@ const resources: IProtocolV2Resource[] = PROTOCOL_V2_RESOURCE_TYPES.map((type, i
|
|
|
36
31
|
headerHash: index.toString(16).padStart(128, '0'),
|
|
37
32
|
}));
|
|
38
33
|
|
|
39
|
-
const bootResources: IProtocolV2BootResources = {
|
|
40
|
-
required: false,
|
|
41
|
-
target: 'CRATE',
|
|
42
|
-
url: 'https://example.com/boot-resources.crate.okpkg',
|
|
43
|
-
size: 1234,
|
|
44
|
-
fileHash: 'ab'.repeat(32),
|
|
45
|
-
payloadHash: 'cd'.repeat(64),
|
|
46
|
-
headerHash: 'ef'.repeat(64),
|
|
47
|
-
};
|
|
48
|
-
|
|
49
34
|
const createSettings = (configFetcher: ConnectSettings['configFetcher']): ConnectSettings =>
|
|
50
35
|
({
|
|
51
36
|
env: 'node',
|
|
@@ -62,7 +47,7 @@ const createRemoteConfig = (): RemoteConfigResponse =>
|
|
|
62
47
|
mini: { firmware: [], ble: [] },
|
|
63
48
|
touch: { firmware: [], ble: [] },
|
|
64
49
|
pro: { firmware: [], ble: [] },
|
|
65
|
-
pro2: { firmware: [], ble: [], resources: { stable: resources
|
|
50
|
+
pro2: { firmware: [], ble: [], resources: { stable: resources } },
|
|
66
51
|
bridge: {},
|
|
67
52
|
} as unknown as RemoteConfigResponse);
|
|
68
53
|
|
|
@@ -73,13 +58,9 @@ describe('Pro2 resource configuration', () => {
|
|
|
73
58
|
});
|
|
74
59
|
|
|
75
60
|
test('accepts exactly six resources and normalizes their deterministic order', () => {
|
|
76
|
-
const parsed = parseProtocolV2Resources({
|
|
77
|
-
stable: [...resources].reverse(),
|
|
78
|
-
boot: bootResources,
|
|
79
|
-
});
|
|
61
|
+
const parsed = parseProtocolV2Resources({ stable: [...resources].reverse() });
|
|
80
62
|
|
|
81
63
|
expect(parsed?.stable.map(item => item.type)).toEqual(PROTOCOL_V2_RESOURCE_TYPES);
|
|
82
|
-
expect(parsed?.boot).toEqual(bootResources);
|
|
83
64
|
expect(PROTOCOL_V2_RESOURCE_DEVICE_PATHS.translations).toBe(
|
|
84
65
|
'vol0:/bundles/translations/translations.okpkg'
|
|
85
66
|
);
|
|
@@ -101,21 +82,6 @@ describe('Pro2 resource configuration', () => {
|
|
|
101
82
|
).toThrow('headerHash');
|
|
102
83
|
});
|
|
103
84
|
|
|
104
|
-
test('requires boot resources to remain optional and use a CRATE package', () => {
|
|
105
|
-
expect(() =>
|
|
106
|
-
parseProtocolV2Resources({
|
|
107
|
-
stable: resources,
|
|
108
|
-
boot: { ...bootResources, required: true },
|
|
109
|
-
})
|
|
110
|
-
).toThrow('required flag');
|
|
111
|
-
expect(() =>
|
|
112
|
-
parseProtocolV2Resources({
|
|
113
|
-
stable: resources,
|
|
114
|
-
boot: { ...bootResources, target: 'RESC' },
|
|
115
|
-
})
|
|
116
|
-
).toThrow('expected CRATE');
|
|
117
|
-
});
|
|
118
|
-
|
|
119
85
|
test('downloads nothing when all resource identities match', () => {
|
|
120
86
|
const inventory = resources.map(({ type, size, headerHash }) => ({ type, size, headerHash }));
|
|
121
87
|
|
|
@@ -220,7 +186,6 @@ describe('Pro2 resource configuration', () => {
|
|
|
220
186
|
expect.stringMatching(/^https:\/\/data\.onekey\.so\/pre-config\.json\?noCache=/)
|
|
221
187
|
);
|
|
222
188
|
expect(DataManager.getProtocolV2Resources()).toEqual(resources);
|
|
223
|
-
expect(DataManager.getProtocolV2BootResources()).toEqual(bootResources);
|
|
224
189
|
});
|
|
225
190
|
|
|
226
191
|
test('does not advance the cache timestamp when refresh fails', async () => {
|
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
DeviceSettingsPage,
|
|
6
6
|
DeviceType,
|
|
7
7
|
} from '@onekeyfe/hd-transport';
|
|
8
|
-
import { sha256 } from '@noble/hashes/sha256';
|
|
9
8
|
|
|
10
9
|
import * as firmwareBinaryApi from '../src/api/firmware/getBinary';
|
|
11
10
|
import DnxGetAddress from '../src/api/dynex/DnxGetAddress';
|
|
@@ -5798,16 +5797,10 @@ describe('Protocol V2 firmware reconnect identity', () => {
|
|
|
5798
5797
|
).not.toThrow();
|
|
5799
5798
|
});
|
|
5800
5799
|
|
|
5801
|
-
test('
|
|
5802
|
-
expect(() => assertProtocolV2ReconnectIdentity('expected-serial', undefined)).toThrow(
|
|
5803
|
-
|
|
5804
|
-
);
|
|
5805
|
-
expect(() => assertProtocolV2ReconnectIdentity(undefined, 'actual-serial')).toThrow(
|
|
5806
|
-
expect.objectContaining({ errorCode: HardwareErrorCode.DeviceNotFound })
|
|
5807
|
-
);
|
|
5808
|
-
expect(() => assertProtocolV2ReconnectIdentity(undefined, undefined)).toThrow(
|
|
5809
|
-
expect.objectContaining({ errorCode: HardwareErrorCode.DeviceNotFound })
|
|
5810
|
-
);
|
|
5800
|
+
test('allows reconnect when either physical serial is unavailable', () => {
|
|
5801
|
+
expect(() => assertProtocolV2ReconnectIdentity('expected-serial', undefined)).not.toThrow();
|
|
5802
|
+
expect(() => assertProtocolV2ReconnectIdentity(undefined, 'actual-serial')).not.toThrow();
|
|
5803
|
+
expect(() => assertProtocolV2ReconnectIdentity(undefined, undefined)).not.toThrow();
|
|
5811
5804
|
});
|
|
5812
5805
|
|
|
5813
5806
|
test('captures physical identity from active DeviceInfo instead of wallet deviceId', async () => {
|
|
@@ -5840,7 +5833,7 @@ describe('Protocol V2 firmware reconnect identity', () => {
|
|
|
5840
5833
|
);
|
|
5841
5834
|
});
|
|
5842
5835
|
|
|
5843
|
-
test('
|
|
5836
|
+
test('allows firmware update startup when DeviceInfo has no physical serial', async () => {
|
|
5844
5837
|
const method = new FirmwareUpdateV4({
|
|
5845
5838
|
id: 1,
|
|
5846
5839
|
payload: { method: 'firmwareUpdateV4' },
|
|
@@ -5853,9 +5846,8 @@ describe('Protocol V2 firmware reconnect identity', () => {
|
|
|
5853
5846
|
getCommands: () => ({ typedCall }),
|
|
5854
5847
|
});
|
|
5855
5848
|
|
|
5856
|
-
await expect((method as any).captureProtocolV2PhysicalIdentity()).
|
|
5857
|
-
|
|
5858
|
-
});
|
|
5849
|
+
await expect((method as any).captureProtocolV2PhysicalIdentity()).resolves.toBeUndefined();
|
|
5850
|
+
expect((method as any).protocolV2ExpectedSerialNumber).toBeUndefined();
|
|
5859
5851
|
});
|
|
5860
5852
|
|
|
5861
5853
|
test('uses ResourceInventory instead of host-side FileRead for resource comparison', async () => {
|
|
@@ -5984,100 +5976,6 @@ describe('Protocol V2 firmware reconnect identity', () => {
|
|
|
5984
5976
|
expect((method as any).downloadProtocolV2Resource).toHaveBeenCalledTimes(6);
|
|
5985
5977
|
resourcesSpy.mockRestore();
|
|
5986
5978
|
});
|
|
5987
|
-
|
|
5988
|
-
const buildBootResourcesHeader = ({
|
|
5989
|
-
type = 'CRAT',
|
|
5990
|
-
payloadHash = 'ab'.repeat(64),
|
|
5991
|
-
headerHash = 'cd'.repeat(64),
|
|
5992
|
-
}: {
|
|
5993
|
-
type?: string;
|
|
5994
|
-
payloadHash?: string;
|
|
5995
|
-
headerHash?: string;
|
|
5996
|
-
} = {}) => {
|
|
5997
|
-
const header = new Uint8Array(0x52a0);
|
|
5998
|
-
const view = new DataView(header.buffer);
|
|
5999
|
-
'OKPP'.split('').forEach((char, index) => {
|
|
6000
|
-
header[index] = char.charCodeAt(0);
|
|
6001
|
-
});
|
|
6002
|
-
type.split('').forEach((char, index) => {
|
|
6003
|
-
header[0x08 + index] = char.charCodeAt(0);
|
|
6004
|
-
});
|
|
6005
|
-
view.setUint32(0x0c, header.byteLength, true);
|
|
6006
|
-
const writeHex = (offset: number, hex: string) => {
|
|
6007
|
-
for (let index = 0; index < hex.length / 2; index++) {
|
|
6008
|
-
header[offset + index] = Number.parseInt(hex.slice(index * 2, index * 2 + 2), 16);
|
|
6009
|
-
}
|
|
6010
|
-
};
|
|
6011
|
-
writeHex(0x200, payloadHash);
|
|
6012
|
-
writeHex(0x240, headerHash);
|
|
6013
|
-
return header;
|
|
6014
|
-
};
|
|
6015
|
-
|
|
6016
|
-
test('does not resolve boot resources unless the optional target is selected', async () => {
|
|
6017
|
-
const method = new FirmwareUpdateV4({
|
|
6018
|
-
id: 1,
|
|
6019
|
-
payload: { method: 'firmwareUpdateV4', platform: 'web' },
|
|
6020
|
-
});
|
|
6021
|
-
method.init();
|
|
6022
|
-
const configSpy = jest.spyOn(DataManager, 'getProtocolV2BootResources');
|
|
6023
|
-
const downloadSpy = jest.spyOn(firmwareBinaryApi, 'getSysResourceBinary');
|
|
6024
|
-
|
|
6025
|
-
await expect((method as any).prepareProtocolV2BootResources()).resolves.toBeUndefined();
|
|
6026
|
-
|
|
6027
|
-
expect(configSpy).not.toHaveBeenCalled();
|
|
6028
|
-
expect(downloadSpy).not.toHaveBeenCalled();
|
|
6029
|
-
});
|
|
6030
|
-
|
|
6031
|
-
test('downloads and maps the selected boot resources CRATE target', async () => {
|
|
6032
|
-
const payloadHash = 'ab'.repeat(64);
|
|
6033
|
-
const headerHash = 'cd'.repeat(64);
|
|
6034
|
-
const bytes = buildBootResourcesHeader({ payloadHash, headerHash });
|
|
6035
|
-
const binary = bytes.buffer as ArrayBuffer;
|
|
6036
|
-
const fileHash = Array.from(sha256(bytes), byte => byte.toString(16).padStart(2, '0')).join('');
|
|
6037
|
-
const resource = {
|
|
6038
|
-
required: false as const,
|
|
6039
|
-
target: 'CRATE' as const,
|
|
6040
|
-
url: 'https://example.com/boot-resources.crate.okpkg',
|
|
6041
|
-
size: bytes.byteLength,
|
|
6042
|
-
fileHash,
|
|
6043
|
-
payloadHash,
|
|
6044
|
-
headerHash,
|
|
6045
|
-
};
|
|
6046
|
-
const method = new FirmwareUpdateV4({
|
|
6047
|
-
id: 1,
|
|
6048
|
-
payload: {
|
|
6049
|
-
method: 'firmwareUpdateV4',
|
|
6050
|
-
platform: 'web',
|
|
6051
|
-
targetsToUpdate: ['boot_resources'],
|
|
6052
|
-
},
|
|
6053
|
-
});
|
|
6054
|
-
method.init();
|
|
6055
|
-
jest.spyOn(DataManager, 'getProtocolV2BootResources').mockReturnValue(resource);
|
|
6056
|
-
jest.spyOn(firmwareBinaryApi, 'getSysResourceBinary').mockResolvedValue({ binary });
|
|
6057
|
-
|
|
6058
|
-
await expect((method as any).prepareProtocolV2BootResources()).resolves.toEqual({
|
|
6059
|
-
fileName: 'boot_resources.crate.okpkg',
|
|
6060
|
-
binary,
|
|
6061
|
-
targetId: 1,
|
|
6062
|
-
kind: 'boot_resources',
|
|
6063
|
-
});
|
|
6064
|
-
});
|
|
6065
|
-
|
|
6066
|
-
test('rejects a non-CRATE manual boot resources package', async () => {
|
|
6067
|
-
const method = new FirmwareUpdateV4({
|
|
6068
|
-
id: 1,
|
|
6069
|
-
payload: {
|
|
6070
|
-
method: 'firmwareUpdateV4',
|
|
6071
|
-
platform: 'web',
|
|
6072
|
-
bootResourcesBinary: buildBootResourcesHeader({ type: 'RESC' }).buffer,
|
|
6073
|
-
},
|
|
6074
|
-
});
|
|
6075
|
-
method.init();
|
|
6076
|
-
|
|
6077
|
-
await expect((method as any).prepareProtocolV2BootResources()).rejects.toThrow(
|
|
6078
|
-
'Invalid Pro2 boot resources CRATE header'
|
|
6079
|
-
);
|
|
6080
|
-
});
|
|
6081
5979
|
});
|
|
6082
5980
|
|
|
6083
5981
|
describe('Protocol V2 explicit USB device selection', () => {
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { createDeferred } from '@onekeyfe/hd-shared';
|
|
2
|
+
|
|
3
|
+
import { findUiPromiseForResponse } from '../src/core/uiPromiseRegistry';
|
|
4
|
+
import { UI_RESPONSE } from '../src/events';
|
|
5
|
+
|
|
6
|
+
import type { UiPromise, UiPromiseResponse } from '../src/events';
|
|
7
|
+
|
|
8
|
+
const createPinPromise = (interactionId: string, deviceId: string) => {
|
|
9
|
+
const promise = createDeferred(UI_RESPONSE.RECEIVE_PIN) as UiPromise<
|
|
10
|
+
typeof UI_RESPONSE.RECEIVE_PIN
|
|
11
|
+
>;
|
|
12
|
+
promise.responseCorrelation = { interactionId, deviceId };
|
|
13
|
+
return promise;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const asRegistry = (promises: UiPromise<typeof UI_RESPONSE.RECEIVE_PIN>[]) =>
|
|
17
|
+
promises as UiPromise<UiPromiseResponse['type']>[];
|
|
18
|
+
|
|
19
|
+
describe('UI response promise correlation', () => {
|
|
20
|
+
test('matches a sensitive response by type, interactionId and deviceId', () => {
|
|
21
|
+
const deviceA = createPinPromise('interaction-a', 'device-a');
|
|
22
|
+
const deviceB = createPinPromise('interaction-b', 'device-b');
|
|
23
|
+
|
|
24
|
+
expect(
|
|
25
|
+
findUiPromiseForResponse(asRegistry([deviceA, deviceB]), {
|
|
26
|
+
type: UI_RESPONSE.RECEIVE_PIN,
|
|
27
|
+
payload: '123',
|
|
28
|
+
interactionId: 'interaction-b',
|
|
29
|
+
deviceId: 'device-b',
|
|
30
|
+
})
|
|
31
|
+
).toBe(deviceB);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
test('does not match incomplete or incorrect correlation metadata', () => {
|
|
35
|
+
const pending = createPinPromise('interaction-a', 'device-a');
|
|
36
|
+
|
|
37
|
+
expect(
|
|
38
|
+
findUiPromiseForResponse(asRegistry([pending]), {
|
|
39
|
+
type: UI_RESPONSE.RECEIVE_PIN,
|
|
40
|
+
payload: '123',
|
|
41
|
+
interactionId: 'interaction-a',
|
|
42
|
+
})
|
|
43
|
+
).toBeUndefined();
|
|
44
|
+
expect(
|
|
45
|
+
findUiPromiseForResponse(asRegistry([pending]), {
|
|
46
|
+
type: UI_RESPONSE.RECEIVE_PIN,
|
|
47
|
+
payload: '123',
|
|
48
|
+
interactionId: 'interaction-a',
|
|
49
|
+
deviceId: 'device-b',
|
|
50
|
+
})
|
|
51
|
+
).toBeUndefined();
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test('keeps legacy responses only when the sensitive candidate is unique', () => {
|
|
55
|
+
const deviceA = createPinPromise('interaction-a', 'device-a');
|
|
56
|
+
const deviceB = createPinPromise('interaction-b', 'device-b');
|
|
57
|
+
const legacyResponse = {
|
|
58
|
+
type: UI_RESPONSE.RECEIVE_PIN,
|
|
59
|
+
payload: '123',
|
|
60
|
+
} as const;
|
|
61
|
+
|
|
62
|
+
expect(findUiPromiseForResponse(asRegistry([deviceA]), legacyResponse)).toBe(deviceA);
|
|
63
|
+
expect(
|
|
64
|
+
findUiPromiseForResponse(asRegistry([deviceA, deviceB]), legacyResponse)
|
|
65
|
+
).toBeUndefined();
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test('applies the same exact matching to passphrase responses', () => {
|
|
69
|
+
const promise = createDeferred(UI_RESPONSE.RECEIVE_PASSPHRASE) as UiPromise<
|
|
70
|
+
typeof UI_RESPONSE.RECEIVE_PASSPHRASE
|
|
71
|
+
>;
|
|
72
|
+
promise.responseCorrelation = {
|
|
73
|
+
interactionId: 'passphrase-interaction',
|
|
74
|
+
deviceId: 'device-a',
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
expect(
|
|
78
|
+
findUiPromiseForResponse([promise] as UiPromise<UiPromiseResponse['type']>[], {
|
|
79
|
+
type: UI_RESPONSE.RECEIVE_PASSPHRASE,
|
|
80
|
+
payload: { value: 'redacted' },
|
|
81
|
+
interactionId: 'passphrase-interaction',
|
|
82
|
+
deviceId: 'device-a',
|
|
83
|
+
})
|
|
84
|
+
).toBe(promise);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
@@ -26,8 +26,6 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
26
26
|
private getRemoteComponentTarget;
|
|
27
27
|
private downloadRemoteProtocolV2Component;
|
|
28
28
|
private prepareRemoteProtocolV2Binaries;
|
|
29
|
-
private validateProtocolV2BootResourcesBinary;
|
|
30
|
-
private prepareProtocolV2BootResources;
|
|
31
29
|
private prepareProtocolV2ResourceBundles;
|
|
32
30
|
private downloadProtocolV2Resource;
|
|
33
31
|
private syncProtocolV2ResourceBundles;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"AAqBA,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":"AAqBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAkB/E,OAAO,KAAK,EAAE,sBAAsB,EAA0B,MAAM,6BAA6B,CAAC;AA+TlG,eAAO,MAAM,oCAAoC,WACvC,WAAW,GAAG,UAAU,eACnB,MAAM,GAAG,SAAS,YAKhC,CAAC;AAEF,eAAO,MAAM,iCAAiC,0BACrB,MAAM,uBACR,MAAM,SAa5B,CAAC;AAUF,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,wBAAwB,CAAC,sBAAsB,CAAC;IAC5F,OAAO,CAAC,8BAA8B,CAAC,CAAS;IAEhD,qBAAqB;IAIrB,IAAI;IA2DJ,OAAO,CAAC,8BAA8B;IAiBhC,GAAG;;;;;YAKK,aAAa;YAqEb,2BAA2B;IAWzC,OAAO,CAAC,yBAAyB;IAKjC,OAAO,CAAC,kCAAkC;YAO5B,iCAAiC;YAOjC,iCAAiC;YAOjC,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;YAqD/B,gCAAgC;YAmDhC,0BAA0B;YAe1B,6BAA6B;IAkC3C,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,yBAAyB;IAU3B,6BAA6B;YA4BrB,+BAA+B;IA6C7C,OAAO,CAAC,6BAA6B;YAkCvB,uBAAuB;IA4GrC,OAAO,CAAC,mCAAmC;YAI7B,0BAA0B;IAaxC,OAAO,CAAC,4BAA4B;YAgEtB,uCAAuC;YA+EvC,gCAAgC;YAQhC,yBAAyB;YAQzB,8BAA8B;IAQ5C,OAAO,CAAC,0BAA0B;YAiBpB,qCAAqC;YA2CrC,yBAAyB;YAiDzB,8BAA8B;IAU5C,OAAO,CAAC,kCAAkC;YAI5B,6BAA6B;YAwB7B,wBAAwB;IAoDtC,OAAO,CAAC,sCAAsC;YAchC,cAAc;YA+Bd,6BAA6B;YAW7B,0BAA0B;YAS1B,6BAA6B;YAmB7B,gBAAgB;IAiB9B,OAAO,CAAC,qBAAqB;CAM9B"}
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";AACA,OAAO,YAAY,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";AACA,OAAO,YAAY,MAAM,QAAQ,CAAC;AA+BlC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAsB1C,OAAO,eAAe,MAAM,2BAA2B,CAAC;AAYxD,OAAO,KAAK,EAAE,eAAe,EAAyB,MAAM,UAAU,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAmD,MAAM,WAAW,CAAC;AAI9F,OAAO,KAAK,EACV,6BAA6B,EAG9B,MAAM,wBAAwB,CAAC;AAWhC,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AA+D7D,eAAO,MAAM,OAAO,YAAmB,WAAW,WAAW,WAAW,iBAoFvE,CAAC;AAg2BF,eAAO,MAAM,MAAM,YAAa,WAAW,cAAc,MAAM,SAkF9D,CAAC;AA8FF,eAAO,MAAM,qBAAqB,gFAejC,CAAC;AAwKF,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,YAAY;IAC5C,OAAO,CAAC,cAAc,CAAoB;IAE1C,SAAgB,aAAa,EAAE,MAAM,CAAC;IAEtC,OAAO,CAAC,YAAY,CAAsB;IAE1C,OAAO,CAAC,cAAc,CAAC,CAAgB;IAGvC,OAAO,CAAC,qBAAqB,CAA4B;IAEzD,OAAO,CAAC,iBAAiB,CAAoB;;IAS7C,OAAO,CAAC,cAAc;IAoBhB,aAAa,CAAC,OAAO,EAAE,WAAW;IAuExC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAOV,gBAAgB;CAiC/B;AAED,eAAO,MAAM,QAAQ,YAIpB,CAAC;AAEF,eAAO,MAAM,aAAa,uBAYzB,CAAC;AAMF,eAAO,MAAM,IAAI,aACL,eAAe,aACd,GAAG,WACL,6BAA6B,8BAoBvC,CAAC;AAEF,eAAO,MAAM,eAAe;SAKrB,eAAe,CAAC,KAAK,CAAC;eAChB,GAAG;;UASf,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { UiPromise, UiPromiseResponse } from '../events/ui-promise';
|
|
2
|
+
import type { UiResponseEvent } from '../events/ui-response';
|
|
3
|
+
export declare const findUiPromiseForResponse: (uiPromises: UiPromise<UiPromiseResponse['type']>[], response: UiResponseEvent) => UiPromise<"ui-receive_pin" | "ui-receive_passphrase" | "ui-receive_select-device-in-bootloader-for-web-device" | "ui-receive_select-device-for-switch-firmware-web-device" | "device-disconnect"> | undefined;
|
|
4
|
+
//# sourceMappingURL=uiPromiseRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uiPromiseRegistry.d.ts","sourceRoot":"","sources":["../../src/core/uiPromiseRegistry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAS7D,eAAO,MAAM,wBAAwB,eACvB,UAAU,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAAE,YACxC,eAAe,kNA0B1B,CAAC"}
|
|
@@ -46,7 +46,6 @@ export default class DataManager {
|
|
|
46
46
|
static checkAndReloadData(): Promise<void>;
|
|
47
47
|
static forceReloadData(): Promise<void>;
|
|
48
48
|
static getProtocolV2Resources(): import("../types").IProtocolV2Resource[] | undefined;
|
|
49
|
-
static getProtocolV2BootResources(): import("../types").IProtocolV2BootResources | undefined;
|
|
50
49
|
static getProtobufMessages(schema?: ProtobufMessageSchema): JSON;
|
|
51
50
|
static getSettings(key?: undefined): ConnectSettings;
|
|
52
51
|
static getSettings<T extends keyof ConnectSettings>(key: T): ConnectSettings[T];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataManager.d.ts","sourceRoot":"","sources":["../../src/data-manager/DataManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAmBjE,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,aAAa,EACb,QAAQ,EACR,wBAAwB,EACxB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EAEd,MAAM,UAAU,CAAC;AAIlB,eAAO,MAAM,eAAe,uFAMlB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;AAC3E,MAAM,MAAM,qBAAqB,GAAG,uBAAuB,GAAG,UAAU,CAAC;AAsBzE,MAAM,CAAC,OAAO,OAAO,WAAW;IAC9B,MAAM,CAAC,SAAS,EAAE,aAAa,GAAG;QAChC,CAAC,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,aAAa,CAAC,GAAG,SAAS,CAAC;KAC7D,CA6BC;IAEF,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAQ;IAEvC,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC;IAEjC,MAAM,CAAC,QAAQ,EAAE;SAAG,MAAM,IAAI,qBAAqB,GAAG,IAAI;KAAE,CAI1D;IAEF,MAAM,CAAC,kBAAkB,SAAK;IAE9B,MAAM,CAAC,iBAAiB,aACZ,QAAQ,gBACJ,aAAa,KAC1B,qBAAqB,CAyBtB;IAMF,MAAM,CAAC,4BAA4B;kBAKvB,QAAQ;;sBAEJ,aAAa;6BAqB3B;IAMF,MAAM,CAAC,kBAAkB,aAAc,QAAQ,gBAAgB,aAAa,wBAe1E;IAEF,MAAM,CAAC,qBAAqB,aAAc,QAAQ,gBAAgB,aAAa,wBAmB7E;IAEF,MAAM,CAAC,0BAA0B,aACrB,QAAQ,gBACJ,aAAa,KAC1B,aAAa,GAAG,SAAS,CAa1B;IAEF,MAAM,CAAC,mCAAmC,aAC9B,QAAQ,gBACJ,aAAa,KAC1B,aAAa,GAAG,SAAS,CAgB1B;IAEF,MAAM,CAAC,oBAAoB,aAAc,QAAQ,gBAAgB,aAAa;;;QAuB5E;IAEF,MAAM,CAAC,wBAAwB,aAAc,QAAQ,gBAAgB,aAAa,yDAsBhF;IAEF,MAAM,CAAC,oBAAoB,aAAc,QAAQ,KAAG,wBAAwB,CAc1E;IAEF,MAAM,CAAC,uBAAuB,aAAc,QAAQ;;;QAalD;IAEF,MAAM,CAAC,2BAA2B,aAAc,QAAQ,4DAMtD;IAEF,MAAM,CAAC,kBAAkB,iBAAkB,MAAM,KAAG,gBAAgB,CAKlE;IAEF,MAAM,CAAC,kBAAkB;;;kBAAuC;IAEhE,OAAO,CAAC,MAAM,CAAC,yBAAyB;WA4C3B,IAAI,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAyE9D,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC;WAalC,kBAAkB;WAUlB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAW7C,MAAM,CAAC,sBAAsB;IAI7B,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"DataManager.d.ts","sourceRoot":"","sources":["../../src/data-manager/DataManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAmBjE,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,aAAa,EACb,QAAQ,EACR,wBAAwB,EACxB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EAEd,MAAM,UAAU,CAAC;AAIlB,eAAO,MAAM,eAAe,uFAMlB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;AAC3E,MAAM,MAAM,qBAAqB,GAAG,uBAAuB,GAAG,UAAU,CAAC;AAsBzE,MAAM,CAAC,OAAO,OAAO,WAAW;IAC9B,MAAM,CAAC,SAAS,EAAE,aAAa,GAAG;QAChC,CAAC,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,aAAa,CAAC,GAAG,SAAS,CAAC;KAC7D,CA6BC;IAEF,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAQ;IAEvC,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC;IAEjC,MAAM,CAAC,QAAQ,EAAE;SAAG,MAAM,IAAI,qBAAqB,GAAG,IAAI;KAAE,CAI1D;IAEF,MAAM,CAAC,kBAAkB,SAAK;IAE9B,MAAM,CAAC,iBAAiB,aACZ,QAAQ,gBACJ,aAAa,KAC1B,qBAAqB,CAyBtB;IAMF,MAAM,CAAC,4BAA4B;kBAKvB,QAAQ;;sBAEJ,aAAa;6BAqB3B;IAMF,MAAM,CAAC,kBAAkB,aAAc,QAAQ,gBAAgB,aAAa,wBAe1E;IAEF,MAAM,CAAC,qBAAqB,aAAc,QAAQ,gBAAgB,aAAa,wBAmB7E;IAEF,MAAM,CAAC,0BAA0B,aACrB,QAAQ,gBACJ,aAAa,KAC1B,aAAa,GAAG,SAAS,CAa1B;IAEF,MAAM,CAAC,mCAAmC,aAC9B,QAAQ,gBACJ,aAAa,KAC1B,aAAa,GAAG,SAAS,CAgB1B;IAEF,MAAM,CAAC,oBAAoB,aAAc,QAAQ,gBAAgB,aAAa;;;QAuB5E;IAEF,MAAM,CAAC,wBAAwB,aAAc,QAAQ,gBAAgB,aAAa,yDAsBhF;IAEF,MAAM,CAAC,oBAAoB,aAAc,QAAQ,KAAG,wBAAwB,CAc1E;IAEF,MAAM,CAAC,uBAAuB,aAAc,QAAQ;;;QAalD;IAEF,MAAM,CAAC,2BAA2B,aAAc,QAAQ,4DAMtD;IAEF,MAAM,CAAC,kBAAkB,iBAAkB,MAAM,KAAG,gBAAgB,CAKlE;IAEF,MAAM,CAAC,kBAAkB;;;kBAAuC;IAEhE,OAAO,CAAC,MAAM,CAAC,yBAAyB;WA4C3B,IAAI,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAyE9D,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC;WAalC,kBAAkB;WAUlB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAW7C,MAAM,CAAC,sBAAsB;IAI7B,MAAM,CAAC,mBAAmB,CAAC,MAAM,GAAE,qBAAyC,GAAG,IAAI;IAInF,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,SAAS,GAAG,eAAe;IAEpD,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,MAAM,eAAe,EAAE,GAAG,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;IAU/E,MAAM,CAAC,YAAY,QAAS,eAAe,CAAC,KAAK,CAAC,aAC0B;IAG5E,MAAM,CAAC,eAAe,QAAS,eAAe,CAAC,KAAK,CAAC,aAA8B;IAGnF,MAAM,CAAC,eAAe,QAAS,eAAe,CAAC,KAAK,CAAC,aAAsB;CAC5E"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import type { Deferred } from '@onekeyfe/hd-shared';
|
|
2
2
|
import type { DEVICE } from './device';
|
|
3
3
|
import type { Device } from '../device/Device';
|
|
4
|
-
import type { UiResponseEvent } from './ui-response';
|
|
4
|
+
import type { UiResponseCorrelation, UiResponseEvent } from './ui-response';
|
|
5
5
|
export type UiPromiseResponse = UiResponseEvent | {
|
|
6
6
|
type: typeof DEVICE.DISCONNECT;
|
|
7
7
|
payload?: undefined;
|
|
8
8
|
};
|
|
9
9
|
export type UiPromise<T extends UiPromiseResponse['type']> = Deferred<Extract<UiPromiseResponse, {
|
|
10
10
|
type: T;
|
|
11
|
-
}>, T, Device
|
|
11
|
+
}>, T, Device> & {
|
|
12
|
+
responseCorrelation?: UiResponseCorrelation;
|
|
13
|
+
};
|
|
12
14
|
//# sourceMappingURL=ui-promise.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-promise.d.ts","sourceRoot":"","sources":["../../src/events/ui-promise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ui-promise.d.ts","sourceRoot":"","sources":["../../src/events/ui-promise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,MAAM,iBAAiB,GACzB,eAAe,GACf;IAAE,IAAI,EAAE,OAAO,MAAM,CAAC,UAAU,CAAC;IAAC,OAAO,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC;AAE5D,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,iBAAiB,CAAC,MAAM,CAAC,IAAI,QAAQ,CACnE,OAAO,CAAC,iBAAiB,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,EACvC,CAAC,EACD,MAAM,CACP,GAAG;IACF,mBAAmB,CAAC,EAAE,qBAAqB,CAAC;CAC7C,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { PROTO } from '../constants';
|
|
2
2
|
import type { Device } from '../types';
|
|
3
3
|
import type { DeviceButtonRequest } from './device';
|
|
4
|
+
import type { UiResponseCorrelation } from './ui-response';
|
|
4
5
|
import type { MessageFactoryFn } from './utils';
|
|
5
6
|
export declare const UI_EVENT = "UI_EVENT";
|
|
6
7
|
export declare const UI_REQUEST: {
|
|
@@ -86,6 +87,7 @@ export type UiRequestDeviceAction = {
|
|
|
86
87
|
payload: ProtocolV2UiEventMetadata & {
|
|
87
88
|
device: Device;
|
|
88
89
|
type?: PROTO.PinMatrixRequestType | 'ButtonRequest_PinEntry' | 'ButtonRequest_AttachPin';
|
|
90
|
+
responseCorrelation?: UiResponseCorrelation;
|
|
89
91
|
};
|
|
90
92
|
};
|
|
91
93
|
export interface UiRequestButton {
|
|
@@ -103,6 +105,7 @@ export interface UiRequestPassphrase {
|
|
|
103
105
|
reason?: 'open-wallet' | 'session-recovery';
|
|
104
106
|
expectedPassphraseState?: string;
|
|
105
107
|
interaction?: HardwareUiInteractionMeta;
|
|
108
|
+
responseCorrelation?: UiResponseCorrelation;
|
|
106
109
|
};
|
|
107
110
|
}
|
|
108
111
|
export interface UiRequestPassphraseOnDevice {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-request.d.ts","sourceRoot":"","sources":["../../src/events/ui-request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,eAAO,MAAM,QAAQ,aAAa,CAAC;AAEnC,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Cb,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAC/B,oBAAoB,GACpB,4BAA4B,GAC5B,kBAAkB,CAAC;AAEvB,MAAM,MAAM,sBAAsB,GAAG,eAAe,GAAG,qBAAqB,CAAC;AAE7E,MAAM,MAAM,yBAAyB,GAAG;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,YAAY,GAAG,sBAAsB,GAAG,QAAQ,GAAG,YAAY,CAAC;IAC/E,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC5C,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,cAAc,CAAC;IAC9E,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,sBAAsB,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,yBAAyB,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B;IACE,IAAI,EAAE,OAAO,UAAU,CAAC,eAAe,CAAC;IACxC,OAAO,EAAE,yBAAyB,CAAC;CACpC,GACD;IACE,IAAI,EAAE,OAAO,UAAU,CAAC,mBAAmB,CAAC;IAC5C,OAAO,EAAE,yBAAyB,CAAC;CACpC,GACD;IACE,IAAI,EAAE,OAAO,UAAU,CAAC,eAAe,CAAC;IACxC,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,GACD;IACE,IAAI,EAAE,OAAO,UAAU,CAAC,mBAAmB,CAAC;IAC5C,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,CAAC;AAEN,MAAM,WAAW,uBAAuB;IACtC,IAAI,EACA,OAAO,UAAU,CAAC,oBAAoB,GACtC,OAAO,UAAU,CAAC,qBAAqB,GACvC,OAAO,UAAU,CAAC,qBAAqB,GACvC,OAAO,UAAU,CAAC,8CAA8C,GAChE,OAAO,UAAU,CAAC,mBAAmB,GACrC,OAAO,UAAU,CAAC,2BAA2B,GAC7C,OAAO,UAAU,CAAC,mBAAmB,GACrC,OAAO,UAAU,CAAC,mCAAmC,CAAC;IAC1D,OAAO,CAAC,EAAE,OAAO,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,OAAO,UAAU,CAAC,mBAAmB,CAAC;IAC5C,OAAO,EAAE;QACP,IAAI,EAAE,UAAU,GAAG,KAAK,GAAG,YAAY,GAAG,UAAU,CAAC;KACtD,CAAC;CACH;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,OAAO,UAAU,CAAC,WAAW,CAAC;IACpC,OAAO,EAAE,yBAAyB,GAAG;QACnC,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,KAAK,CAAC,oBAAoB,GAAG,wBAAwB,GAAG,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"ui-request.d.ts","sourceRoot":"","sources":["../../src/events/ui-request.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,11 +6,19 @@ export declare const UI_RESPONSE: {
|
|
|
6
6
|
readonly SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE: "ui-receive_select-device-in-bootloader-for-web-device";
|
|
7
7
|
readonly SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE: "ui-receive_select-device-for-switch-firmware-web-device";
|
|
8
8
|
};
|
|
9
|
-
export interface
|
|
9
|
+
export interface UiResponseCorrelation {
|
|
10
|
+
interactionId: string;
|
|
11
|
+
deviceId: string;
|
|
12
|
+
}
|
|
13
|
+
export interface UiResponseCorrelationFields {
|
|
14
|
+
interactionId?: string;
|
|
15
|
+
deviceId?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface UiResponsePin extends UiResponseCorrelationFields {
|
|
10
18
|
type: typeof UI_RESPONSE.RECEIVE_PIN;
|
|
11
19
|
payload: string;
|
|
12
20
|
}
|
|
13
|
-
export interface UiResponsePassphrase {
|
|
21
|
+
export interface UiResponsePassphrase extends UiResponseCorrelationFields {
|
|
14
22
|
type: typeof UI_RESPONSE.RECEIVE_PASSPHRASE;
|
|
15
23
|
payload: {
|
|
16
24
|
value: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-response.d.ts","sourceRoot":"","sources":["../../src/events/ui-response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,eAAO,MAAM,WAAW;;;;;CAOd,CAAC;AAEX,MAAM,WAAW,aAAa;
|
|
1
|
+
{"version":3,"file":"ui-response.d.ts","sourceRoot":"","sources":["../../src/events/ui-response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,eAAO,MAAM,WAAW;;;;;CAOd,CAAC;AAEX,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,2BAA2B;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAc,SAAQ,2BAA2B;IAChE,IAAI,EAAE,OAAO,WAAW,CAAC,WAAW,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAqB,SAAQ,2BAA2B;IACvE,IAAI,EAAE,OAAO,WAAW,CAAC,kBAAkB,CAAC;IAC5C,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,8CAA8C;IAC7D,IAAI,EAAE,OAAO,WAAW,CAAC,0CAA0C,CAAC;IACpE,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,gDAAgD;IAC/D,IAAI,EAAE,OAAO,WAAW,CAAC,4CAA4C,CAAC;IACtE,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,MAAM,eAAe,GACvB,aAAa,GACb,oBAAoB,GACpB,8CAA8C,GAC9C,gDAAgD,CAAC;AAErD,MAAM,MAAM,iBAAiB,GAAG,eAAe,GAAG;IAAE,KAAK,EAAE,OAAO,QAAQ,CAAA;CAAE,CAAC;AAE7E,eAAO,MAAM,gBAAgB,EAAE,gBAAgB,CAAC,OAAO,QAAQ,EAAE,eAAe,CAQrE,CAAC"}
|