@onekeyfe/hd-core 1.2.0-alpha.25 → 1.2.0-alpha.27
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 +28 -0
- package/__tests__/device-lifecycle-events.test.ts +21 -0
- package/__tests__/deviceSettings.test.ts +4 -4
- package/__tests__/firmware-update/check-all-firmware-release.test.ts +31 -0
- package/__tests__/firmware-update/firmware-update-plan.test.ts +70 -0
- package/__tests__/kaspa-use-tweak-pro2.test.ts +20 -0
- package/__tests__/protocol-v2.test.ts +129 -6
- package/__tests__/tron-sign-message-init.test.ts +28 -0
- package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
- package/dist/api/firmware/FirmwareUpdatePlan.d.ts +3 -2
- package/dist/api/firmware/FirmwareUpdatePlan.d.ts.map +1 -1
- package/dist/api/kaspa/KaspaGetAddress.d.ts +3 -0
- package/dist/api/kaspa/KaspaGetAddress.d.ts.map +1 -1
- package/dist/api/kaspa/KaspaSignTransaction.d.ts +3 -0
- package/dist/api/kaspa/KaspaSignTransaction.d.ts.map +1 -1
- package/dist/api/tron/TronSignMessage.d.ts +3 -0
- package/dist/api/tron/TronSignMessage.d.ts.map +1 -1
- package/dist/device/Device.d.ts +1 -0
- package/dist/device/Device.d.ts.map +1 -1
- package/dist/device/DeviceCommands.d.ts.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +83 -42
- package/dist/protocols/protocol-v2/unlockRetry.d.ts.map +1 -1
- package/dist/types/api/checkAllFirmwareRelease.d.ts +2 -1
- package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
- package/dist/types/api/export.d.ts +1 -1
- package/dist/types/api/export.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdatePlan.d.ts +1 -0
- package/dist/types/api/firmwareUpdatePlan.d.ts.map +1 -1
- package/dist/types/device.d.ts +1 -0
- package/dist/types/device.d.ts.map +1 -1
- package/dist/utils/deviceSettings.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/api/CheckAllFirmwareRelease.ts +2 -0
- package/src/api/UploadPortfolio.ts +1 -1
- package/src/api/firmware/FirmwareUpdatePlan.ts +47 -37
- package/src/api/kaspa/KaspaGetAddress.ts +3 -0
- package/src/api/kaspa/KaspaSignTransaction.ts +3 -0
- package/src/api/tron/TronSignMessage.ts +3 -0
- package/src/data-manager/TransportManager.ts +1 -1
- package/src/device/Device.ts +7 -0
- package/src/device/DeviceCommands.ts +10 -4
- package/src/protocols/protocol-v2/unlockRetry.ts +18 -11
- package/src/types/api/checkAllFirmwareRelease.ts +2 -1
- package/src/types/api/export.ts +1 -0
- package/src/types/api/firmwareUpdatePlan.ts +2 -0
- package/src/types/device.ts +2 -0
- package/src/utils/deviceSettings.ts +11 -1
|
@@ -234,6 +234,34 @@ describe('DeviceCommands failure mapping', () => {
|
|
|
234
234
|
}
|
|
235
235
|
);
|
|
236
236
|
|
|
237
|
+
it.each(['Cancelled', 'User cancelled typed data signing'])(
|
|
238
|
+
'maps the Protocol V2 MP engine cancellation response "%s" to ActionCancelled',
|
|
239
|
+
async message => {
|
|
240
|
+
const commands = createCommands();
|
|
241
|
+
|
|
242
|
+
await expect(
|
|
243
|
+
commands._filterCommonTypes(
|
|
244
|
+
{
|
|
245
|
+
type: 'Failure',
|
|
246
|
+
message: {
|
|
247
|
+
code: 'Failure_ProcessError',
|
|
248
|
+
subcode: 1,
|
|
249
|
+
message,
|
|
250
|
+
},
|
|
251
|
+
} as any,
|
|
252
|
+
'SignTx'
|
|
253
|
+
)
|
|
254
|
+
).rejects.toMatchObject({
|
|
255
|
+
errorCode: HardwareErrorCode.ActionCancelled,
|
|
256
|
+
params: {
|
|
257
|
+
failureCode: 'Failure_ProcessError',
|
|
258
|
+
subcode: 1,
|
|
259
|
+
firmwareMessage: message,
|
|
260
|
+
},
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
);
|
|
264
|
+
|
|
237
265
|
it('does not use the legacy cancellation-message fallback for Protocol V1', async () => {
|
|
238
266
|
const commands = createCommands();
|
|
239
267
|
(commands.device.isProtocolV2 as jest.Mock).mockReturnValue(false);
|
|
@@ -118,6 +118,25 @@ describe('public device lifecycle events', () => {
|
|
|
118
118
|
expect(device.isUsedHere()).toBe(false);
|
|
119
119
|
});
|
|
120
120
|
|
|
121
|
+
test('exposes the current transport usage state in public device snapshots', () => {
|
|
122
|
+
const getSettings = jest
|
|
123
|
+
.spyOn(DataManager, 'getSettings')
|
|
124
|
+
.mockReturnValue('desktop-web-ble' as never);
|
|
125
|
+
const device = createInitializedDevice('V2');
|
|
126
|
+
|
|
127
|
+
expect(device.toMessageObject()?.status).toBe('available');
|
|
128
|
+
|
|
129
|
+
(device as unknown as { deviceAcquired: boolean }).deviceAcquired = true;
|
|
130
|
+
expect(device.toMessageObject()?.status).toBe('used');
|
|
131
|
+
|
|
132
|
+
device.markTransportDisconnected();
|
|
133
|
+
expect(device.toMessageObject()?.status).toBe('available');
|
|
134
|
+
|
|
135
|
+
getSettings.mockReturnValue('web' as never);
|
|
136
|
+
device.originalDescriptor.session = 'external-session';
|
|
137
|
+
expect(device.toMessageObject()?.status).toBe('occupied');
|
|
138
|
+
});
|
|
139
|
+
|
|
121
140
|
test.each([
|
|
122
141
|
['react-native', 'V1'],
|
|
123
142
|
['react-native', 'V2'],
|
|
@@ -154,6 +173,7 @@ describe('public device lifecycle events', () => {
|
|
|
154
173
|
connectId: 'ble-connect-id',
|
|
155
174
|
serialNo: 'SERIAL-001',
|
|
156
175
|
uuid: 'SERIAL-001',
|
|
176
|
+
status: 'available',
|
|
157
177
|
label: 'OneKey Test',
|
|
158
178
|
state: { protocol },
|
|
159
179
|
});
|
|
@@ -161,6 +181,7 @@ describe('public device lifecycle events', () => {
|
|
|
161
181
|
connectId: 'ble-connect-id',
|
|
162
182
|
serialNo: 'SERIAL-001',
|
|
163
183
|
uuid: 'SERIAL-001',
|
|
184
|
+
status: 'available',
|
|
164
185
|
label: 'Updated label',
|
|
165
186
|
state: { protocol },
|
|
166
187
|
});
|
|
@@ -15,16 +15,16 @@ describe('Pro 2 device settings options', () => {
|
|
|
15
15
|
expect(getLanguageConfig(EDeviceType.Pro2)).toEqual([
|
|
16
16
|
{ code: 'en', label: 'English' },
|
|
17
17
|
{ code: 'zh_cn', label: '简体中文' },
|
|
18
|
-
{ code: 'zh_hk', label: '
|
|
18
|
+
{ code: 'zh_hk', label: '繁體中文(香港)' },
|
|
19
|
+
{ code: 'zh-Hant-TW', label: '繁體中文(台灣)' },
|
|
19
20
|
{ code: 'ja', label: '日本語' },
|
|
20
21
|
{ code: 'ko', label: '한국어' },
|
|
21
22
|
{ code: 'fr', label: 'Français' },
|
|
22
23
|
{ code: 'de', label: 'Deutsch' },
|
|
23
|
-
{ code: 'ru', label: '
|
|
24
|
-
{ code: 'es', label: '
|
|
24
|
+
{ code: 'ru', label: 'Русский' },
|
|
25
|
+
{ code: 'es', label: 'Español' },
|
|
25
26
|
{ code: 'it', label: 'Italiano' },
|
|
26
27
|
{ code: 'pt_br', label: 'Portuguese (Brazil)' },
|
|
27
|
-
{ code: 'zh-Hant-TW', label: '繁體中文(台灣)' },
|
|
28
28
|
{ code: 'vi-Latn-VN', label: 'Tiếng Việt' },
|
|
29
29
|
{ code: 'tr-Latn-TR', label: 'Türkçe' },
|
|
30
30
|
{ code: 'id-Latn-ID', label: 'Bahasa Indonesia' },
|
|
@@ -62,6 +62,15 @@ const createMethod = (serialNo = 'device-id') => {
|
|
|
62
62
|
return method;
|
|
63
63
|
};
|
|
64
64
|
|
|
65
|
+
const createMethodWithForceTargets = () => {
|
|
66
|
+
const method = createMethod();
|
|
67
|
+
method.payload = {
|
|
68
|
+
...method.payload,
|
|
69
|
+
forceUpdateTargets: ['firmware', 'resource'],
|
|
70
|
+
};
|
|
71
|
+
return method;
|
|
72
|
+
};
|
|
73
|
+
|
|
65
74
|
describe('CheckAllFirmwareRelease', () => {
|
|
66
75
|
beforeEach(() => {
|
|
67
76
|
jest.clearAllMocks();
|
|
@@ -116,6 +125,28 @@ describe('CheckAllFirmwareRelease', () => {
|
|
|
116
125
|
);
|
|
117
126
|
});
|
|
118
127
|
|
|
128
|
+
test('passes host-selected update targets to the Plan builder', async () => {
|
|
129
|
+
mockBuildFirmwareUpdatePlan.mockReturnValue({
|
|
130
|
+
schemaVersion: 2,
|
|
131
|
+
planDigest: 'a'.repeat(64),
|
|
132
|
+
executor: 'v2',
|
|
133
|
+
deviceIdentity: 'device-id',
|
|
134
|
+
deviceModel: EDeviceType.Classic1s,
|
|
135
|
+
firmwareType: EFirmwareType.Universal,
|
|
136
|
+
platform: 'native',
|
|
137
|
+
artifacts: [],
|
|
138
|
+
targetsToUpdate: [],
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
await createMethodWithForceTargets().run();
|
|
142
|
+
|
|
143
|
+
expect(mockBuildFirmwareUpdatePlan).toHaveBeenCalledWith(
|
|
144
|
+
expect.objectContaining({
|
|
145
|
+
forceUpdateTargets: ['firmware', 'resource'],
|
|
146
|
+
})
|
|
147
|
+
);
|
|
148
|
+
});
|
|
149
|
+
|
|
119
150
|
test('does not hide unexpected Plan builder failures', async () => {
|
|
120
151
|
const unexpectedError = new Error('unexpected builder failure');
|
|
121
152
|
mockBuildFirmwareUpdatePlan.mockImplementation(() => {
|
|
@@ -122,6 +122,76 @@ describe('buildFirmwareUpdatePlan', () => {
|
|
|
122
122
|
expect(plan.platform).toBe('native');
|
|
123
123
|
});
|
|
124
124
|
|
|
125
|
+
test('includes same-version legacy artifacts selected by the host', () => {
|
|
126
|
+
const plan = buildFirmwareUpdatePlan({
|
|
127
|
+
features: createFeatures({
|
|
128
|
+
deviceType: EDeviceType.Pro,
|
|
129
|
+
firmwareVersion: '4.21.0',
|
|
130
|
+
bootloaderVersion: '2.8.4',
|
|
131
|
+
}),
|
|
132
|
+
firmwareType: EFirmwareType.Universal,
|
|
133
|
+
platform: 'desktop',
|
|
134
|
+
firmware: {
|
|
135
|
+
status: 'valid',
|
|
136
|
+
release: {
|
|
137
|
+
url: 'https://firmware.onekey.so/pro/firmware.bin',
|
|
138
|
+
version: [4, 21, 0],
|
|
139
|
+
resource: 'https://firmware.onekey.so/pro/resource.zip',
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
ble: {
|
|
143
|
+
status: 'valid',
|
|
144
|
+
release: {
|
|
145
|
+
webUpdate: 'https://firmware.onekey.so/pro/ble.bin',
|
|
146
|
+
version: [2, 3, 7],
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
bootloader: {
|
|
150
|
+
status: 'valid',
|
|
151
|
+
release: {
|
|
152
|
+
bootloaderResource: 'https://firmware.onekey.so/pro/bootloader.bin',
|
|
153
|
+
bootloaderVersion: [2, 8, 4],
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
forceUpdateTargets: ['firmware', 'resource', 'ble', 'bootloader'],
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
expect(plan.executor).toBe('v3');
|
|
160
|
+
expect(plan.artifacts.map(artifact => artifact.artifactId)).toEqual([
|
|
161
|
+
'bootloader',
|
|
162
|
+
'firmware',
|
|
163
|
+
'resource',
|
|
164
|
+
'ble',
|
|
165
|
+
]);
|
|
166
|
+
expect(plan.targetsToUpdate).toEqual(['bootloader', 'firmware', 'resource', 'ble']);
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
test('does not include a same-version resource unless the host selects it', () => {
|
|
170
|
+
const plan = buildFirmwareUpdatePlan({
|
|
171
|
+
features: createFeatures({
|
|
172
|
+
deviceType: EDeviceType.Pro,
|
|
173
|
+
firmwareVersion: '4.21.0',
|
|
174
|
+
bootloaderVersion: '2.8.4',
|
|
175
|
+
}),
|
|
176
|
+
firmwareType: EFirmwareType.Universal,
|
|
177
|
+
platform: 'desktop',
|
|
178
|
+
firmware: {
|
|
179
|
+
status: 'valid',
|
|
180
|
+
release: {
|
|
181
|
+
url: 'https://firmware.onekey.so/pro/firmware.bin',
|
|
182
|
+
version: [4, 21, 0],
|
|
183
|
+
resource: 'https://firmware.onekey.so/pro/resource.zip',
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
ble: noUpdate,
|
|
187
|
+
bootloader: noUpdate,
|
|
188
|
+
forceUpdateTargets: ['firmware'],
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
expect(plan.artifacts.map(artifact => artifact.artifactId)).toEqual(['firmware']);
|
|
192
|
+
expect(plan.targetsToUpdate).toEqual(['firmware']);
|
|
193
|
+
});
|
|
194
|
+
|
|
125
195
|
test('rejects a prepared native plan without a stable device identity', () => {
|
|
126
196
|
const features = createFeatures({
|
|
127
197
|
deviceType: EDeviceType.Classic1s,
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import KaspaGetAddress from '../src/api/kaspa/KaspaGetAddress';
|
|
2
|
+
import KaspaSignTransaction from '../src/api/kaspa/KaspaSignTransaction';
|
|
3
|
+
|
|
4
|
+
jest.mock('../src/data/config', () => ({
|
|
5
|
+
getSDKVersion: jest.fn(() => '1.0.0'),
|
|
6
|
+
DEFAULT_DOMAIN: 'https://jssdk.onekey.so/1.0.0/',
|
|
7
|
+
}));
|
|
8
|
+
|
|
9
|
+
describe('Kaspa Pro2 useTweak capability', () => {
|
|
10
|
+
test.each([
|
|
11
|
+
['get address', KaspaGetAddress],
|
|
12
|
+
['sign transaction', KaspaSignTransaction],
|
|
13
|
+
])('allows useTweak=false for %s', (_name, Method) => {
|
|
14
|
+
const method = new Method({ id: 1, payload: {} } as never);
|
|
15
|
+
|
|
16
|
+
expect(method.getUseTweakVersionRange()).toMatchObject({
|
|
17
|
+
pro2: { min: '0.0.0' },
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
});
|
|
@@ -200,6 +200,42 @@ describe('DeviceUploadWallpaper', () => {
|
|
|
200
200
|
});
|
|
201
201
|
|
|
202
202
|
describe('UploadPortfolio', () => {
|
|
203
|
+
test('writes and applies the portfolio while the device is locked without unlocking', async () => {
|
|
204
|
+
const packageBytes = new Uint8Array([1, 2, 3]);
|
|
205
|
+
const typedCall = jest
|
|
206
|
+
.fn()
|
|
207
|
+
.mockResolvedValueOnce({ message: { processed_byte: 3 } })
|
|
208
|
+
.mockResolvedValueOnce({ message: { message: 'Portfolio updated' } });
|
|
209
|
+
const unlockDevice = jest.fn().mockResolvedValue(undefined);
|
|
210
|
+
const device = stubDevice({
|
|
211
|
+
features: { unlocked: false },
|
|
212
|
+
commands: { typedCall },
|
|
213
|
+
isProtocolV2: () => true,
|
|
214
|
+
unlockDevice,
|
|
215
|
+
});
|
|
216
|
+
const method = new UploadPortfolio({
|
|
217
|
+
id: 1,
|
|
218
|
+
payload: {
|
|
219
|
+
method: 'uploadPortfolio',
|
|
220
|
+
packageBytes,
|
|
221
|
+
},
|
|
222
|
+
});
|
|
223
|
+
(method as any).device = device;
|
|
224
|
+
|
|
225
|
+
method.init();
|
|
226
|
+
await runMethodWithUnlockRetry(method, device as any);
|
|
227
|
+
|
|
228
|
+
expect(unlockDevice).not.toHaveBeenCalled();
|
|
229
|
+
expect(typedCall).toHaveBeenNthCalledWith(
|
|
230
|
+
1,
|
|
231
|
+
'FilesystemFileWrite',
|
|
232
|
+
'FilesystemFile',
|
|
233
|
+
expect.any(Object),
|
|
234
|
+
{ timeoutMs: undefined }
|
|
235
|
+
);
|
|
236
|
+
expect(typedCall).toHaveBeenNthCalledWith(2, 'PortfolioUpdate', 'Success', {});
|
|
237
|
+
});
|
|
238
|
+
|
|
203
239
|
test('stages the complete package before applying PortfolioUpdate', async () => {
|
|
204
240
|
const packageBytes = new Uint8Array([1, 2, 3]);
|
|
205
241
|
const typedCall = jest
|
|
@@ -219,7 +255,7 @@ describe('UploadPortfolio', () => {
|
|
|
219
255
|
method.init();
|
|
220
256
|
const result = await method.run();
|
|
221
257
|
|
|
222
|
-
expect(method.unlockPolicy).toBe('
|
|
258
|
+
expect(method.unlockPolicy).toBe('none');
|
|
223
259
|
expect(method.protocolV2UiMode).toBe('none');
|
|
224
260
|
expect(method.protocolV2UiInteraction).toBeUndefined();
|
|
225
261
|
expect(method.payload.emitProgress).toBe(false);
|
|
@@ -5359,6 +5395,93 @@ describe('Protocol V2 protected method execution', () => {
|
|
|
5359
5395
|
]);
|
|
5360
5396
|
});
|
|
5361
5397
|
|
|
5398
|
+
test('restores the expected hidden-wallet session after pre-unlock without selecting Attach PIN', async () => {
|
|
5399
|
+
const calls: string[] = [];
|
|
5400
|
+
const method = {
|
|
5401
|
+
name: 'evmSignMessage',
|
|
5402
|
+
payload: { passphraseState: 'hidden-state' },
|
|
5403
|
+
useDevicePassphraseState: true,
|
|
5404
|
+
unlockPolicy: 'retry-on-locked',
|
|
5405
|
+
run: jest.fn(() => {
|
|
5406
|
+
calls.push('run');
|
|
5407
|
+
return Promise.resolve({ message: 'ok' });
|
|
5408
|
+
}),
|
|
5409
|
+
};
|
|
5410
|
+
const typedCall = jest.fn((requestType: string, _responseType: string, request: any) => {
|
|
5411
|
+
if (requestType === 'ProtocolInfoRequest') {
|
|
5412
|
+
calls.push('negotiate-session');
|
|
5413
|
+
return Promise.resolve({ message: { version: 2 } });
|
|
5414
|
+
}
|
|
5415
|
+
if (requestType === 'DeviceSessionGet') {
|
|
5416
|
+
calls.push('resume-hidden-session');
|
|
5417
|
+
expect(request).toEqual({ session_id: 'hidden-session' });
|
|
5418
|
+
return Promise.resolve({
|
|
5419
|
+
message: {
|
|
5420
|
+
session_id: 'hidden-session',
|
|
5421
|
+
btc_test_address: 'hidden-state',
|
|
5422
|
+
},
|
|
5423
|
+
});
|
|
5424
|
+
}
|
|
5425
|
+
throw new Error(`Unexpected request: ${requestType}`);
|
|
5426
|
+
});
|
|
5427
|
+
const features = {
|
|
5428
|
+
unlocked: false,
|
|
5429
|
+
unlockedAttachPin: true,
|
|
5430
|
+
passphraseProtection: true,
|
|
5431
|
+
};
|
|
5432
|
+
const device = {
|
|
5433
|
+
features,
|
|
5434
|
+
passphraseState: 'hidden-state',
|
|
5435
|
+
commands: { typedCall },
|
|
5436
|
+
isProtocolV2: () => true,
|
|
5437
|
+
unlockDevice: jest.fn(() => {
|
|
5438
|
+
calls.push('unlock-main');
|
|
5439
|
+
features.unlocked = true;
|
|
5440
|
+
features.unlockedAttachPin = false;
|
|
5441
|
+
return Promise.resolve();
|
|
5442
|
+
}),
|
|
5443
|
+
getCurrentPassphraseProtection: () => true,
|
|
5444
|
+
getInternalState: () => 'hidden-session',
|
|
5445
|
+
clearInternalState: jest.fn(),
|
|
5446
|
+
getCurrentDeviceId: () => 'wallet-device-id',
|
|
5447
|
+
updateInternalState: jest.fn(() => calls.push('validate-hidden-session')),
|
|
5448
|
+
};
|
|
5449
|
+
|
|
5450
|
+
await expect(runMethodWithUnlockRetry(method as any, device as any)).resolves.toEqual({
|
|
5451
|
+
message: 'ok',
|
|
5452
|
+
});
|
|
5453
|
+
expect(device.unlockDevice).toHaveBeenCalledWith();
|
|
5454
|
+
expect(calls).toEqual([
|
|
5455
|
+
'unlock-main',
|
|
5456
|
+
'negotiate-session',
|
|
5457
|
+
'resume-hidden-session',
|
|
5458
|
+
'validate-hidden-session',
|
|
5459
|
+
'run',
|
|
5460
|
+
]);
|
|
5461
|
+
});
|
|
5462
|
+
|
|
5463
|
+
test('does not restore a hidden-wallet session for a standard-wallet pre-unlock', async () => {
|
|
5464
|
+
const method = {
|
|
5465
|
+
name: 'evmGetAddress',
|
|
5466
|
+
payload: { useEmptyPassphrase: true },
|
|
5467
|
+
useDevicePassphraseState: true,
|
|
5468
|
+
unlockPolicy: 'retry-on-locked',
|
|
5469
|
+
run: jest.fn().mockResolvedValue({ address: 'standard-wallet-address' }),
|
|
5470
|
+
};
|
|
5471
|
+
const device = {
|
|
5472
|
+
features: { unlocked: false },
|
|
5473
|
+
passphraseState: 'stale-hidden-state',
|
|
5474
|
+
isProtocolV2: () => true,
|
|
5475
|
+
unlockDevice: jest.fn().mockResolvedValue(undefined),
|
|
5476
|
+
};
|
|
5477
|
+
|
|
5478
|
+
await expect(runMethodWithUnlockRetry(method as any, device as any)).resolves.toEqual({
|
|
5479
|
+
address: 'standard-wallet-address',
|
|
5480
|
+
});
|
|
5481
|
+
expect(device.unlockDevice).toHaveBeenCalledTimes(1);
|
|
5482
|
+
expect(method.run).toHaveBeenCalledTimes(1);
|
|
5483
|
+
});
|
|
5484
|
+
|
|
5362
5485
|
test('unlocks before showing the method interaction when cached status is locked', async () => {
|
|
5363
5486
|
const calls: string[] = [];
|
|
5364
5487
|
const method = {
|
|
@@ -5444,10 +5567,10 @@ describe('Protocol V2 protected method execution', () => {
|
|
|
5444
5567
|
}
|
|
5445
5568
|
});
|
|
5446
5569
|
|
|
5447
|
-
test('
|
|
5570
|
+
test('runs lock-free eventless methods without unlocking or synthesized UI', async () => {
|
|
5448
5571
|
const method = {
|
|
5449
5572
|
name: 'uploadPortfolio',
|
|
5450
|
-
unlockPolicy: '
|
|
5573
|
+
unlockPolicy: 'none',
|
|
5451
5574
|
protocolV2UiMode: 'none',
|
|
5452
5575
|
run: jest.fn().mockResolvedValue({ message: 'ok' }),
|
|
5453
5576
|
};
|
|
@@ -5465,17 +5588,17 @@ describe('Protocol V2 protected method execution', () => {
|
|
|
5465
5588
|
await expect(
|
|
5466
5589
|
runMethodWithUnlockRetry(method as any, device as any, uiCoordinator as any)
|
|
5467
5590
|
).resolves.toEqual({ message: 'ok' });
|
|
5468
|
-
expect(device.unlockDevice).
|
|
5591
|
+
expect(device.unlockDevice).not.toHaveBeenCalled();
|
|
5469
5592
|
expect(uiCoordinator.enterMethodInteraction).not.toHaveBeenCalled();
|
|
5470
5593
|
expect(uiCoordinator.enterUnlockInteraction).not.toHaveBeenCalled();
|
|
5471
5594
|
expect(uiCoordinator.resumeMethodInteraction).not.toHaveBeenCalled();
|
|
5472
5595
|
});
|
|
5473
5596
|
|
|
5474
|
-
test('does not replay a state-changing method after a locked response', async () => {
|
|
5597
|
+
test('does not unlock or replay a lock-free state-changing method after a locked response', async () => {
|
|
5475
5598
|
const error = deviceLockedError();
|
|
5476
5599
|
const method = {
|
|
5477
5600
|
name: 'uploadPortfolio',
|
|
5478
|
-
unlockPolicy: '
|
|
5601
|
+
unlockPolicy: 'none',
|
|
5479
5602
|
run: jest.fn().mockRejectedValue(error),
|
|
5480
5603
|
};
|
|
5481
5604
|
const device = {
|
|
@@ -43,4 +43,32 @@ describe('TronSignMessage legacy message validation', () => {
|
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
);
|
|
46
|
+
|
|
47
|
+
test('allows Protocol V2 message signing on Pro2', async () => {
|
|
48
|
+
const method = new TronSignMessage({
|
|
49
|
+
id: 1,
|
|
50
|
+
payload: {
|
|
51
|
+
method: 'tronSignMessage',
|
|
52
|
+
path: "m/44'/195'/0'/0/0",
|
|
53
|
+
messageHex: '00',
|
|
54
|
+
messageType: 'V2',
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
method.init();
|
|
58
|
+
|
|
59
|
+
const typedCall = jest.fn().mockResolvedValue({ message: { signature: 'signature' } });
|
|
60
|
+
method.device = {
|
|
61
|
+
commands: { typedCall },
|
|
62
|
+
getCurrentFirmwareVersionString: jest.fn(() => '0.0.0'),
|
|
63
|
+
getCurrentMethodVersionRange: jest.fn(selector => selector('pro2')),
|
|
64
|
+
getCurrentFirmwareType: jest.fn(() => EFirmwareType.Universal),
|
|
65
|
+
} as unknown as Device;
|
|
66
|
+
|
|
67
|
+
await expect(method.run()).resolves.toEqual({ signature: 'signature' });
|
|
68
|
+
expect(typedCall).toHaveBeenCalledWith('TronSignMessage', 'TronMessageSignature', {
|
|
69
|
+
address_n: [2147483692, 2147483843, 2147483648, 0, 0],
|
|
70
|
+
message: '00',
|
|
71
|
+
message_type: 2,
|
|
72
|
+
});
|
|
73
|
+
});
|
|
46
74
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckAllFirmwareRelease.d.ts","sourceRoot":"","sources":["../../src/api/CheckAllFirmwareRelease.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAiB1C,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,sCAAsC,CAAC;AAK9C,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,UAAU;IAC7D,IAAI;IAME,GAAG;
|
|
1
|
+
{"version":3,"file":"CheckAllFirmwareRelease.d.ts","sourceRoot":"","sources":["../../src/api/CheckAllFirmwareRelease.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAiB1C,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,sCAAsC,CAAC;AAK9C,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,UAAU;IAC7D,IAAI;IAME,GAAG;CAgFV"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
2
|
-
import type { FirmwareUpdatePlan, FirmwareUpdatePlanTarget } from '../../types/api/firmwareUpdatePlan';
|
|
2
|
+
import type { FirmwareUpdatePlan, FirmwareUpdatePlanForceTarget, FirmwareUpdatePlanTarget } from '../../types/api/firmwareUpdatePlan';
|
|
3
3
|
import type { Features } from '../../types';
|
|
4
4
|
type FirmwareUpdatePlatform = 'native' | 'desktop' | 'ext' | 'web' | 'web-embed';
|
|
5
5
|
type ReleaseSelection = {
|
|
@@ -11,13 +11,14 @@ export declare const digestFirmwareUpdateContract: (value: unknown) => string;
|
|
|
11
11
|
export declare const FIRMWARE_UPDATE_PLAN_TARGETS: Set<FirmwareUpdatePlanTarget>;
|
|
12
12
|
export declare const FIRMWARE_UPDATE_PLAN_ROLES: Set<string>;
|
|
13
13
|
export declare const assertFirmwareUpdatePlan: (value: unknown) => FirmwareUpdatePlan;
|
|
14
|
-
export declare const buildFirmwareUpdatePlan: ({ features, firmwareType, platform, firmware, ble, bootloader, }: {
|
|
14
|
+
export declare const buildFirmwareUpdatePlan: ({ features, firmwareType, platform, firmware, ble, bootloader, forceUpdateTargets, }: {
|
|
15
15
|
features: Features;
|
|
16
16
|
firmwareType: EFirmwareType;
|
|
17
17
|
platform: FirmwareUpdatePlatform;
|
|
18
18
|
firmware: ReleaseSelection;
|
|
19
19
|
ble: ReleaseSelection;
|
|
20
20
|
bootloader?: ReleaseSelection | undefined;
|
|
21
|
+
forceUpdateTargets?: FirmwareUpdatePlanForceTarget[] | undefined;
|
|
21
22
|
}) => FirmwareUpdatePlan;
|
|
22
23
|
export {};
|
|
23
24
|
//# sourceMappingURL=FirmwareUpdatePlan.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FirmwareUpdatePlan.d.ts","sourceRoot":"","sources":["../../../src/api/firmware/FirmwareUpdatePlan.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,aAAa,EAA6B,MAAM,qBAAqB,CAAC;AAS5F,OAAO,KAAK,EACV,kBAAkB,EAElB,wBAAwB,EACzB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,KAAK,sBAAsB,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,WAAW,CAAC;AAyBjF,KAAK,gBAAgB,GAAG;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AA0GF,eAAO,MAAM,4BAA4B,UAAW,OAAO,KAAG,MAG3D,CAAC;AAgCJ,eAAO,MAAM,4BAA4B,+BAavC,CAAC;AAEH,eAAO,MAAM,0BAA0B,aAOrC,CAAC;AAYH,eAAO,MAAM,wBAAwB,UAAW,OAAO,KAAG,kBAoHzD,CAAC;AA2JF,eAAO,MAAM,uBAAuB;
|
|
1
|
+
{"version":3,"file":"FirmwareUpdatePlan.d.ts","sourceRoot":"","sources":["../../../src/api/firmware/FirmwareUpdatePlan.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,aAAa,EAA6B,MAAM,qBAAqB,CAAC;AAS5F,OAAO,KAAK,EACV,kBAAkB,EAElB,6BAA6B,EAC7B,wBAAwB,EACzB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,KAAK,sBAAsB,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,WAAW,CAAC;AAyBjF,KAAK,gBAAgB,GAAG;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AA0GF,eAAO,MAAM,4BAA4B,UAAW,OAAO,KAAG,MAG3D,CAAC;AAgCJ,eAAO,MAAM,4BAA4B,+BAavC,CAAC;AAEH,eAAO,MAAM,0BAA0B,aAOrC,CAAC;AAYH,eAAO,MAAM,wBAAwB,UAAW,OAAO,KAAG,kBAoHzD,CAAC;AA2JF,eAAO,MAAM,uBAAuB;cASxB,QAAQ;kBACJ,aAAa;cACjB,sBAAsB;cACtB,gBAAgB;SACrB,gBAAgB;;;MAGnB,kBA+HH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KaspaGetAddress.d.ts","sourceRoot":"","sources":["../../../src/api/kaspa/KaspaGetAddress.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,KAAK,EAAE,eAAe,IAAI,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,KAAK,EAAE,YAAY,EAAyB,MAAM,aAAa,CAAC;AAEvE,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,UAAU,CAAC,uBAAuB,EAAE,CAAC;IAChF,qBAAqB;IAIrB,SAAS,UAAS;IAElB,IAAI;IAmCJ,eAAe;;;;;;;;IAWf,uBAAuB
|
|
1
|
+
{"version":3,"file":"KaspaGetAddress.d.ts","sourceRoot":"","sources":["../../../src/api/kaspa/KaspaGetAddress.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,KAAK,EAAE,eAAe,IAAI,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,KAAK,EAAE,YAAY,EAAyB,MAAM,aAAa,CAAC;AAEvE,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,UAAU,CAAC,uBAAuB,EAAE,CAAC;IAChF,qBAAqB;IAIrB,SAAS,UAAS;IAElB,IAAI;IAmCJ,eAAe;;;;;;;;IAWf,uBAAuB;;;;;;;;;;;IAcjB,GAAG;CAkCV"}
|
|
@@ -23,6 +23,9 @@ export default class KaspaSignTransaction extends BaseMethod<KaspaSignTransactio
|
|
|
23
23
|
model_classic1s: {
|
|
24
24
|
min: string;
|
|
25
25
|
};
|
|
26
|
+
pro2: {
|
|
27
|
+
min: string;
|
|
28
|
+
};
|
|
26
29
|
};
|
|
27
30
|
processTxRequest(typedCall: TypedCall, res: TypedResponseMessage<'KaspaTxInputRequest'> | TypedResponseMessage<'KaspaSignedTx'>, index: number, signature: KaspaSignature[]): Promise<KaspaSignature[]>;
|
|
28
31
|
ackPrevRequest(typedCall: TypedCall, request: KaspaTxRequest, requestIndex: number): Promise<import("@onekeyfe/hd-transport").MessageResponse<"KaspaTxRequest">>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KaspaSignTransaction.d.ts","sourceRoot":"","sources":["../../../src/api/kaspa/KaspaSignTransaction.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAK3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,0BAA0B,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAEV,cAAc,EAEd,SAAS,EACV,MAAM,wBAAwB,CAAC;AAgBhC,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,UAAU,CAAC,0BAA0B,CAAC;IACtF,qBAAqB;IAIrB,SAAS,UAAS;IAGlB,cAAc,UAAS;IAEvB,iBAAiB,UAAS;IAE1B,IAAI;IAyHJ,eAAe;;;;;;;;IAWf,uBAAuB
|
|
1
|
+
{"version":3,"file":"KaspaSignTransaction.d.ts","sourceRoot":"","sources":["../../../src/api/kaspa/KaspaSignTransaction.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAK3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,0BAA0B,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAEV,cAAc,EAEd,SAAS,EACV,MAAM,wBAAwB,CAAC;AAgBhC,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,UAAU,CAAC,0BAA0B,CAAC;IACtF,qBAAqB;IAIrB,SAAS,UAAS;IAGlB,cAAc,UAAS;IAEvB,iBAAiB,UAAS;IAE1B,IAAI;IAyHJ,eAAe;;;;;;;;IAWf,uBAAuB;;;;;;;;;;;IAkBjB,gBAAgB,CACpB,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,oBAAoB,CAAC,qBAAqB,CAAC,GAAG,oBAAoB,CAAC,eAAe,CAAC,EACxF,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,cAAc,EAAE,GAC1B,OAAO,CAAC,cAAc,EAAE,CAAC;IAwCtB,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM;IA8ElF,YAAY,CAChB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,oBAAoB,CAAC,gBAAgB,CAAC,GACpD,OAAO,CAAC,cAAc,EAAE,CAAC;IAqGtB,GAAG;CAuGV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TronSignMessage.d.ts","sourceRoot":"","sources":["../../../src/api/tron/TronSignMessage.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI3C,OAAO,KAAK,EAAE,eAAe,IAAI,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEzF,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,UAAU,CAAC,uBAAuB,CAAC;IAC9E,OAAO,CAAC,mBAAmB,CAAS;IAEpC,qBAAqB;IAIrB,IAAI;IA4BJ,eAAe;;;;;;;;IAWf,wBAAwB
|
|
1
|
+
{"version":3,"file":"TronSignMessage.d.ts","sourceRoot":"","sources":["../../../src/api/tron/TronSignMessage.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI3C,OAAO,KAAK,EAAE,eAAe,IAAI,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEzF,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,UAAU,CAAC,uBAAuB,CAAC;IAC9E,OAAO,CAAC,mBAAmB,CAAS;IAEpC,qBAAqB;IAIrB,IAAI;IA4BJ,eAAe;;;;;;;;IAWf,wBAAwB;;;;;;;;;;;;;;;;;IAoBlB,GAAG;CA0BV"}
|
package/dist/device/Device.d.ts
CHANGED
|
@@ -151,6 +151,7 @@ export declare class Device extends EventEmitter {
|
|
|
151
151
|
setCancelableAction(callback: (err?: Error) => Promise<unknown>): void;
|
|
152
152
|
clearCancelableAction(): void;
|
|
153
153
|
getMode(): EOneKeyDeviceMode;
|
|
154
|
+
getStatus(): "available" | "occupied" | "used";
|
|
154
155
|
getFirmwareVersion(): import("../types").IVersionArray | null;
|
|
155
156
|
getBLEFirmwareVersion(): import("../types").IVersionArray | null;
|
|
156
157
|
isUsed(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Device.d.ts","sourceRoot":"","sources":["../../src/device/Device.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Device.d.ts","sourceRoot":"","sources":["../../src/device/Device.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeviceCommands.d.ts","sourceRoot":"","sources":["../../src/device/DeviceCommands.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,oBAAoB,EAC1B,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EAAU,KAAK,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAQlE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,KAAK,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;AACxC,KAAK,UAAU,GAAG,OAAO,CAAC,MAAM,WAAW,EAAE,MAAM,CAAC,CAAC;AACrD,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,UAAU,IAAI;IACvD,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;CACzB,CAAC;AACF,KAAK,oBAAoB,GAAG;KACzB,CAAC,IAAI,UAAU,GAAG,oBAAoB,CAAC,CAAC,CAAC;CAC3C,CAAC;AACF,MAAM,MAAM,sBAAsB,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"DeviceCommands.d.ts","sourceRoot":"","sources":["../../src/device/DeviceCommands.ts"],"names":[],"mappings":"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"}
|