@onekeyfe/hd-core 1.2.0-alpha.129 → 1.2.0-alpha.130
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__tests__/device-lifecycle-events.test.ts +57 -1
- package/__tests__/device-settings.test.ts +98 -0
- package/__tests__/protocol-v2.test.ts +4 -1
- package/dist/api/device/DeviceSettings.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceUploadWallpaper.d.ts.map +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/device/Device.d.ts +2 -0
- package/dist/device/Device.d.ts.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +43 -15
- package/package.json +4 -4
- package/src/api/device/DeviceSettings.ts +1 -2
- package/src/api/protocol-v2/DeviceUploadWallpaper.ts +1 -0
- package/src/core/index.ts +16 -12
- package/src/device/Device.ts +30 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EDeviceType, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
1
|
+
import { EDeviceType, ERRORS, HardwareErrorCode, createDeferred } from '@onekeyfe/hd-shared';
|
|
2
2
|
import { DeviceType, TRANSPORT_EVENT } from '@onekeyfe/hd-transport';
|
|
3
3
|
|
|
4
4
|
import { initConnector, initCore } from '../src/core';
|
|
@@ -310,6 +310,62 @@ describe('public device lifecycle events', () => {
|
|
|
310
310
|
}
|
|
311
311
|
);
|
|
312
312
|
|
|
313
|
+
test('sends a fallback Cancel for an acquired Protocol V2 BLE call without a prompt callback', async () => {
|
|
314
|
+
jest.spyOn(DataManager, 'getSettings').mockReturnValue('react-native' as never);
|
|
315
|
+
const device = createInitializedDevice('V2');
|
|
316
|
+
const post = jest.fn().mockResolvedValue(undefined);
|
|
317
|
+
const cancelDevice = jest.fn(() => cancelDeviceInPrompt(device, false));
|
|
318
|
+
const cancel = jest.fn().mockResolvedValue(undefined);
|
|
319
|
+
(device as unknown as { deviceAcquired: boolean }).deviceAcquired = true;
|
|
320
|
+
device.commands = {
|
|
321
|
+
transport: { post },
|
|
322
|
+
cancelDevice,
|
|
323
|
+
cancel,
|
|
324
|
+
} as never;
|
|
325
|
+
|
|
326
|
+
await device.interruptionFromUser();
|
|
327
|
+
|
|
328
|
+
expect(cancelDevice).toHaveBeenCalledTimes(1);
|
|
329
|
+
expect(post).toHaveBeenCalledWith(device.mainId, 'Cancel', {});
|
|
330
|
+
expect(cancel).toHaveBeenCalledTimes(1);
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
test('waits for the canceled run to finish releasing before cancellation completes', async () => {
|
|
334
|
+
jest.spyOn(DataManager, 'getSettings').mockReturnValue('react-native' as never);
|
|
335
|
+
const device = createInitializedDevice('V2');
|
|
336
|
+
const operation = createDeferred<void>();
|
|
337
|
+
const releaseGate = createDeferred<void>();
|
|
338
|
+
const cancelError = ERRORS.TypedError(HardwareErrorCode.DeviceInterruptedFromUser);
|
|
339
|
+
const release = jest.spyOn(device, 'release').mockImplementation(() => releaseGate.promise);
|
|
340
|
+
device.commands = {
|
|
341
|
+
disposed: false,
|
|
342
|
+
cancel: jest.fn(() => {
|
|
343
|
+
operation.reject(cancelError);
|
|
344
|
+
return Promise.resolve();
|
|
345
|
+
}),
|
|
346
|
+
} as never;
|
|
347
|
+
(device as unknown as { deviceAcquired: boolean }).deviceAcquired = true;
|
|
348
|
+
|
|
349
|
+
const runResult = device.run(() => operation.promise).catch(error => error);
|
|
350
|
+
const cancellation = device.interruptionFromUser();
|
|
351
|
+
let cancellationCompleted = false;
|
|
352
|
+
cancellation.then(() => {
|
|
353
|
+
cancellationCompleted = true;
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
await new Promise(resolve => {
|
|
357
|
+
setImmediate(resolve);
|
|
358
|
+
});
|
|
359
|
+
expect(release).toHaveBeenCalledTimes(1);
|
|
360
|
+
expect(cancellationCompleted).toBe(false);
|
|
361
|
+
|
|
362
|
+
releaseGate.resolve();
|
|
363
|
+
await cancellation;
|
|
364
|
+
await expect(runResult).resolves.toMatchObject({
|
|
365
|
+
errorCode: HardwareErrorCode.DeviceInterruptedFromUser,
|
|
366
|
+
});
|
|
367
|
+
});
|
|
368
|
+
|
|
313
369
|
test.each([
|
|
314
370
|
[EDeviceType.Pro2, 'webusb', false, DeviceType.PRO2],
|
|
315
371
|
[EDeviceType.Neo, 'webusb', false, DeviceType.NEO],
|
|
@@ -2,6 +2,9 @@ import { EDeviceType, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
|
2
2
|
import { DeviceSettingsPage } from '@onekeyfe/hd-transport';
|
|
3
3
|
|
|
4
4
|
import DeviceSettings from '../src/api/device/DeviceSettings';
|
|
5
|
+
import { Device } from '../src/device/Device';
|
|
6
|
+
import { DEVICE } from '../src/events';
|
|
7
|
+
import { PROTOCOL_V2_DEVICE_STATUS_GET_MESSAGE_TYPE } from '../src/protocols/protocol-v2';
|
|
5
8
|
import { DEVICE_SETTINGS_NEVER_TIMEOUT_MS } from '../src/utils/deviceSettings';
|
|
6
9
|
|
|
7
10
|
import type { Features } from '../src/types';
|
|
@@ -21,6 +24,9 @@ function createDevice({ protocol }: { protocol: 'V1' | 'V2' }) {
|
|
|
21
24
|
const typedCall = jest.fn().mockResolvedValue({ message: { message: 'Success' } });
|
|
22
25
|
const updateState = jest.fn();
|
|
23
26
|
const getDeviceState = jest.fn();
|
|
27
|
+
const refreshProtocolV2SettingsAfterMutation = jest.fn(() =>
|
|
28
|
+
getDeviceState({ refreshSections: ['status', 'settings'] })
|
|
29
|
+
);
|
|
24
30
|
return {
|
|
25
31
|
device: {
|
|
26
32
|
features,
|
|
@@ -29,6 +35,7 @@ function createDevice({ protocol }: { protocol: 'V1' | 'V2' }) {
|
|
|
29
35
|
commands: { typedCall },
|
|
30
36
|
updateState,
|
|
31
37
|
getDeviceState,
|
|
38
|
+
refreshProtocolV2SettingsAfterMutation,
|
|
32
39
|
},
|
|
33
40
|
typedCall,
|
|
34
41
|
updateState,
|
|
@@ -181,6 +188,97 @@ describe('DeviceSettings protocol routing', () => {
|
|
|
181
188
|
expect(updateState).not.toHaveBeenCalled();
|
|
182
189
|
});
|
|
183
190
|
|
|
191
|
+
it('reconciles stale passphrase and label after an unrelated Protocol V2 setting change', async () => {
|
|
192
|
+
const typedCall = jest.fn().mockImplementation((requestType: string) => {
|
|
193
|
+
if (requestType === 'DeviceSettingsSet') {
|
|
194
|
+
return { message: { message: 'Success' } };
|
|
195
|
+
}
|
|
196
|
+
if (requestType === 'DeviceStatusGet') {
|
|
197
|
+
return {
|
|
198
|
+
message: {
|
|
199
|
+
init_states: true,
|
|
200
|
+
unlocked: false,
|
|
201
|
+
passphrase_enabled: false,
|
|
202
|
+
},
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
if (requestType === 'DeviceSettingsGet') {
|
|
206
|
+
return {
|
|
207
|
+
message: {
|
|
208
|
+
label: 'Current Label',
|
|
209
|
+
brightness: 80,
|
|
210
|
+
passphrase_enable: false,
|
|
211
|
+
},
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
throw new Error(`Unexpected request: ${requestType}`);
|
|
215
|
+
});
|
|
216
|
+
const device = Device.fromDescriptor({
|
|
217
|
+
id: 'pro2',
|
|
218
|
+
path: 'pro2',
|
|
219
|
+
protocolType: 'V2',
|
|
220
|
+
} as never);
|
|
221
|
+
(device as any).commands = { typedCall };
|
|
222
|
+
device.updateState(
|
|
223
|
+
{
|
|
224
|
+
protocol: 'V2',
|
|
225
|
+
identity: {
|
|
226
|
+
deviceType: EDeviceType.Pro2,
|
|
227
|
+
label: 'Stale Label',
|
|
228
|
+
},
|
|
229
|
+
status: {
|
|
230
|
+
mode: 'normal',
|
|
231
|
+
unlocked: false,
|
|
232
|
+
passphraseProtection: true,
|
|
233
|
+
},
|
|
234
|
+
settings: { brightness: 20 },
|
|
235
|
+
raw: {
|
|
236
|
+
protocolV2ProtocolInfo: {
|
|
237
|
+
version: 1,
|
|
238
|
+
build_fingerprint: 'application__5.0.0__abcdef0__PROD__RELEASE',
|
|
239
|
+
supported_messages: [PROTOCOL_V2_DEVICE_STATUS_GET_MESSAGE_TYPE],
|
|
240
|
+
},
|
|
241
|
+
},
|
|
242
|
+
},
|
|
243
|
+
'initialize'
|
|
244
|
+
);
|
|
245
|
+
const onState = jest.fn();
|
|
246
|
+
device.on(DEVICE.STATE, onState);
|
|
247
|
+
const method = new DeviceSettings({
|
|
248
|
+
id: 3,
|
|
249
|
+
payload: {
|
|
250
|
+
method: 'deviceSettings',
|
|
251
|
+
brightness: 80,
|
|
252
|
+
},
|
|
253
|
+
});
|
|
254
|
+
method.init();
|
|
255
|
+
(method as any).device = device;
|
|
256
|
+
|
|
257
|
+
await expect(method.run()).resolves.toEqual({ message: 'Success' });
|
|
258
|
+
|
|
259
|
+
expect(typedCall.mock.calls.map(call => call[0])).toEqual([
|
|
260
|
+
'DeviceSettingsSet',
|
|
261
|
+
'DeviceStatusGet',
|
|
262
|
+
'DeviceSettingsGet',
|
|
263
|
+
]);
|
|
264
|
+
expect(device.state).toMatchObject({
|
|
265
|
+
identity: { label: 'Current Label' },
|
|
266
|
+
status: { passphraseProtection: false },
|
|
267
|
+
settings: { brightness: 80 },
|
|
268
|
+
});
|
|
269
|
+
expect(onState).toHaveBeenLastCalledWith(
|
|
270
|
+
device,
|
|
271
|
+
expect.objectContaining({
|
|
272
|
+
source: 'settings-read',
|
|
273
|
+
state: expect.objectContaining({
|
|
274
|
+
identity: expect.objectContaining({ label: 'Current Label' }),
|
|
275
|
+
status: expect.objectContaining({ passphraseProtection: false }),
|
|
276
|
+
settings: expect.objectContaining({ brightness: 80 }),
|
|
277
|
+
}),
|
|
278
|
+
})
|
|
279
|
+
);
|
|
280
|
+
});
|
|
281
|
+
|
|
184
282
|
it('uses the Pro2 passphrase page as a device-side toggle and verifies the target state', async () => {
|
|
185
283
|
const { device, typedCall, getDeviceState } = createDevice({ protocol: 'V2' });
|
|
186
284
|
getDeviceState
|
|
@@ -183,6 +183,7 @@ describe('DeviceUploadWallpaper', () => {
|
|
|
183
183
|
stubDevice({
|
|
184
184
|
...device,
|
|
185
185
|
ensureProtocolV2RuntimeContext: jest.fn().mockResolvedValue(wallpaperProtocolInfo),
|
|
186
|
+
refreshProtocolV2SettingsAfterMutation: jest.fn().mockResolvedValue({}),
|
|
186
187
|
});
|
|
187
188
|
|
|
188
189
|
test('encodes, uploads and applies a Pro2 wallpaper', async () => {
|
|
@@ -204,7 +205,8 @@ describe('DeviceUploadWallpaper', () => {
|
|
|
204
205
|
jpegBase64: createJpegBase64(604, 1024),
|
|
205
206
|
},
|
|
206
207
|
});
|
|
207
|
-
|
|
208
|
+
const device = stubWallpaperDevice({ commands: { typedCall } });
|
|
209
|
+
(method as any).device = device;
|
|
208
210
|
method.postMessage = jest.fn();
|
|
209
211
|
|
|
210
212
|
method.init();
|
|
@@ -224,6 +226,7 @@ describe('DeviceUploadWallpaper', () => {
|
|
|
224
226
|
expect(typedCall).toHaveBeenLastCalledWith('DeviceSettingsSet', 'Success', {
|
|
225
227
|
settings: { wallpaper_path: result.path },
|
|
226
228
|
});
|
|
229
|
+
expect(device.refreshProtocolV2SettingsAfterMutation).toHaveBeenCalledTimes(1);
|
|
227
230
|
expect(typedCall.mock.calls.some(call => call[0] === 'SetWallpaper')).toBe(false);
|
|
228
231
|
expect(result).toMatchObject({ colorFormat: 'RGB565', message: 'wallpaper applied' });
|
|
229
232
|
const fileWriteCallCount = typedCall.mock.calls.filter(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeviceSettings.d.ts","sourceRoot":"","sources":["../../../src/api/device/DeviceSettings.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAgB3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AA0D5D,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,UAAU,CAAC,aAAa,CAAC;IACnE,qBAAqB;IAIrB,IAAI;IA0EJ,eAAe;;;;;;;IAWT,GAAG;
|
|
1
|
+
{"version":3,"file":"DeviceSettings.d.ts","sourceRoot":"","sources":["../../../src/api/device/DeviceSettings.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAgB3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AA0D5D,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,UAAU,CAAC,aAAa,CAAC;IACnE,qBAAqB;IAIrB,IAAI;IA0EJ,eAAe;;;;;;;IAWT,GAAG;CAwIV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeviceUploadWallpaper.d.ts","sourceRoot":"","sources":["../../../src/api/protocol-v2/DeviceUploadWallpaper.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAM3C,OAAO,EAGL,KAAK,wBAAwB,EAE9B,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,2BAA2B,GAAG;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,wBAAwB,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAkBF,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,UAAU,CAAC,2BAA2B,CAAC;IACxF,qBAAqB;IAIrB,OAAO,CAAC,OAAO,CAAC,CAA8D;IAE9E,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,IAAI,CAAM;IAElB,IAAI;YAwBU,kBAAkB;YAgBlB,eAAe;YAaf,MAAM;IAwBd,GAAG,IAAI,OAAO,CAAC,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"DeviceUploadWallpaper.d.ts","sourceRoot":"","sources":["../../../src/api/protocol-v2/DeviceUploadWallpaper.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAM3C,OAAO,EAGL,KAAK,wBAAwB,EAE9B,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,2BAA2B,GAAG;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,wBAAwB,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAkBF,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,UAAU,CAAC,2BAA2B,CAAC;IACxF,qBAAqB;IAIrB,OAAO,CAAC,OAAO,CAAC,CAA8D;IAE9E,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,IAAI,CAAM;IAElB,IAAI;YAwBU,kBAAkB;YAgBlB,eAAe;YAaf,MAAM;IAwBd,GAAG,IAAI,OAAO,CAAC,6BAA6B,CAAC;CAiBpD"}
|
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;AAoClC,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;AAmE7D,eAAO,MAAM,OAAO,YAAmB,WAAW,WAAW,WAAW,iBAoFvE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";AACA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAoClC,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;AAmE7D,eAAO,MAAM,OAAO,YAAmB,WAAW,WAAW,WAAW,iBAoFvE,CAAC;AAg5BF,eAAO,MAAM,MAAM,YAAa,WAAW,cAAc,MAAM,SAkF9D,CAAC;AAmGF,eAAO,MAAM,qBAAqB,gFAejC,CAAC;AAiLF,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,8BAiBvC,CAAC;AAEF,eAAO,MAAM,eAAe;SAKrB,eAAe,CAAC,KAAK,CAAC;eAChB,GAAG;;UASf,CAAC"}
|
package/dist/device/Device.d.ts
CHANGED
|
@@ -80,6 +80,7 @@ export declare class Device extends EventEmitter {
|
|
|
80
80
|
get features(): Features | undefined;
|
|
81
81
|
set features(features: Features | undefined);
|
|
82
82
|
runPromise?: Deferred<void> | null;
|
|
83
|
+
private runCleanupPromise?;
|
|
83
84
|
externalState: string[];
|
|
84
85
|
unavailableCapabilities: UnavailableCapabilities;
|
|
85
86
|
instance: number;
|
|
@@ -148,6 +149,7 @@ export declare class Device extends EventEmitter {
|
|
|
148
149
|
private _initializeProtocolV2;
|
|
149
150
|
getFeatures(): Promise<Features | undefined>;
|
|
150
151
|
getDeviceState(params?: DeviceStateReadOptions): Promise<import("../types").DeviceState>;
|
|
152
|
+
refreshProtocolV2SettingsAfterMutation(): Promise<import("../types").DeviceState>;
|
|
151
153
|
_updateFeatures(protoFeatures: PROTO.Features | Features, initSession?: boolean): void;
|
|
152
154
|
updateState(patch: DeviceStatePatch, source: DeviceStateUpdateSource): import("../types").DeviceState & {
|
|
153
155
|
raw?: import("../types").DeviceFeaturesRaw | undefined;
|
|
@@ -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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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -833,6 +833,8 @@ declare class Device extends EventEmitter {
|
|
|
833
833
|
get features(): Features | undefined;
|
|
834
834
|
set features(features: Features | undefined);
|
|
835
835
|
runPromise?: Deferred<void> | null;
|
|
836
|
+
/** Resolves only after the active run has completed its release path. */
|
|
837
|
+
private runCleanupPromise?;
|
|
836
838
|
externalState: string[];
|
|
837
839
|
unavailableCapabilities: UnavailableCapabilities;
|
|
838
840
|
instance: number;
|
|
@@ -927,6 +929,7 @@ declare class Device extends EventEmitter {
|
|
|
927
929
|
private _initializeProtocolV2;
|
|
928
930
|
getFeatures(): Promise<Features | undefined>;
|
|
929
931
|
getDeviceState(params?: DeviceStateReadOptions): Promise<DeviceState>;
|
|
932
|
+
refreshProtocolV2SettingsAfterMutation(): Promise<DeviceState>;
|
|
930
933
|
_updateFeatures(protoFeatures: Messages.Features | Features, initSession?: boolean): void;
|
|
931
934
|
updateState(patch: DeviceStatePatch, source: DeviceStateUpdateSource): DeviceState & {
|
|
932
935
|
raw?: DeviceFeaturesRaw | undefined;
|
package/dist/index.js
CHANGED
|
@@ -45732,6 +45732,11 @@ class Device extends events.exports {
|
|
|
45732
45732
|
return params.includeRaw ? cloneDeviceState(this.state) : createPublicDeviceState(this.state);
|
|
45733
45733
|
});
|
|
45734
45734
|
}
|
|
45735
|
+
refreshProtocolV2SettingsAfterMutation() {
|
|
45736
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
45737
|
+
return this.getDeviceState({ refreshSections: ['status', 'settings'] });
|
|
45738
|
+
});
|
|
45739
|
+
}
|
|
45735
45740
|
_updateFeatures(protoFeatures, initSession) {
|
|
45736
45741
|
var _a;
|
|
45737
45742
|
const previousDeviceId = this.getCurrentDeviceId();
|
|
@@ -45987,12 +45992,20 @@ class Device extends events.exports {
|
|
|
45987
45992
|
options = parseRunOptions(options);
|
|
45988
45993
|
const runPromise = hdShared.createDeferred();
|
|
45989
45994
|
this.runPromise = runPromise;
|
|
45990
|
-
this._runInner(fn, options, runPromise).catch(error => {
|
|
45995
|
+
const cleanupPromise = this._runInner(fn, options, runPromise).catch(error => {
|
|
45991
45996
|
if (this.runPromise === runPromise) {
|
|
45992
45997
|
this.runPromise = null;
|
|
45993
45998
|
}
|
|
45994
45999
|
runPromise.reject(error);
|
|
45995
46000
|
});
|
|
46001
|
+
this.runCleanupPromise = cleanupPromise;
|
|
46002
|
+
cleanupPromise
|
|
46003
|
+
.finally(() => {
|
|
46004
|
+
if (this.runCleanupPromise === cleanupPromise) {
|
|
46005
|
+
this.runCleanupPromise = undefined;
|
|
46006
|
+
}
|
|
46007
|
+
})
|
|
46008
|
+
.catch(() => undefined);
|
|
45996
46009
|
return runPromise.promise;
|
|
45997
46010
|
});
|
|
45998
46011
|
}
|
|
@@ -46086,15 +46099,27 @@ class Device extends events.exports {
|
|
|
46086
46099
|
});
|
|
46087
46100
|
}
|
|
46088
46101
|
interruptionFromUser() {
|
|
46089
|
-
var _a, _b;
|
|
46102
|
+
var _a, _b, _c;
|
|
46090
46103
|
return __awaiter(this, void 0, void 0, function* () {
|
|
46091
46104
|
const error = hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.DeviceInterruptedFromUser);
|
|
46092
|
-
|
|
46093
|
-
|
|
46105
|
+
const cleanupPromise = this.runCleanupPromise;
|
|
46106
|
+
const { cancelableAction } = this;
|
|
46107
|
+
if (cancelableAction) {
|
|
46108
|
+
yield cancelableAction(error);
|
|
46109
|
+
}
|
|
46110
|
+
else if (this.isProtocolV2() &&
|
|
46111
|
+
DataManager.isBleConnect(DataManager.getSettings('env')) &&
|
|
46112
|
+
this.hasDeviceAcquire()) {
|
|
46113
|
+
yield ((_b = (_a = this.commands) === null || _a === void 0 ? void 0 : _a.cancelDevice) === null || _b === void 0 ? void 0 : _b.call(_a).catch(cancelError => {
|
|
46114
|
+
Log$g.debug('Protocol V2 BLE fallback cancel error', cancelError);
|
|
46115
|
+
}));
|
|
46116
|
+
}
|
|
46117
|
+
yield ((_c = this.commands) === null || _c === void 0 ? void 0 : _c.cancel());
|
|
46094
46118
|
if (this.runPromise) {
|
|
46095
46119
|
this.runPromise.reject(error);
|
|
46096
46120
|
this.runPromise = null;
|
|
46097
46121
|
}
|
|
46122
|
+
yield (cleanupPromise === null || cleanupPromise === void 0 ? void 0 : cleanupPromise.catch(() => undefined));
|
|
46098
46123
|
});
|
|
46099
46124
|
}
|
|
46100
46125
|
setCancelableAction(callback) {
|
|
@@ -48467,7 +48492,7 @@ class DeviceSettings extends BaseMethod {
|
|
|
48467
48492
|
return __awaiter(this, void 0, void 0, function* () {
|
|
48468
48493
|
try {
|
|
48469
48494
|
if (this.device.isProtocolV2()) {
|
|
48470
|
-
const refreshStatusAndSettings = () => this.device.
|
|
48495
|
+
const refreshStatusAndSettings = () => this.device.refreshProtocolV2SettingsAfterMutation();
|
|
48471
48496
|
assertSettingsSupported(this.payload, DEVICE_SETTINGS_V1_ONLY_FIELDS, 'Protocol V2');
|
|
48472
48497
|
const capabilities = getDeviceSettingsCapabilities(this.device.getCurrentDeviceType(), 'V2');
|
|
48473
48498
|
assertProtocolV2SettingValues(this.payload, capabilities);
|
|
@@ -54467,6 +54492,7 @@ class DeviceUploadWallpaper extends BaseMethod {
|
|
|
54467
54492
|
const response = yield this.device.commands.typedCall('DeviceSettingsSet', 'Success', {
|
|
54468
54493
|
settings: { wallpaper_path: this.path },
|
|
54469
54494
|
});
|
|
54495
|
+
yield this.device.refreshProtocolV2SettingsAfterMutation();
|
|
54470
54496
|
return {
|
|
54471
54497
|
path: this.path,
|
|
54472
54498
|
size: encoded.data.byteLength,
|
|
@@ -65143,18 +65169,12 @@ const handlePreWarmSignal = (context, message, method) => __awaiter(void 0, void
|
|
|
65143
65169
|
}
|
|
65144
65170
|
}
|
|
65145
65171
|
});
|
|
65146
|
-
const waitWithTimeout = (promise, timeout) => __awaiter(void 0, void 0, void 0, function* () {
|
|
65147
|
-
const timeoutPromise = new Promise((_, reject) => {
|
|
65148
|
-
setTimeout(() => reject(new Error('Request timeout')), timeout);
|
|
65149
|
-
});
|
|
65150
|
-
return Promise.race([promise, timeoutPromise]);
|
|
65151
|
-
});
|
|
65152
65172
|
const waitForPendingPromise = (getPrePendingCallPromise, removePrePendingCallPromise) => __awaiter(void 0, void 0, void 0, function* () {
|
|
65153
65173
|
const pendingPromise = getPrePendingCallPromise();
|
|
65154
65174
|
if (pendingPromise) {
|
|
65155
65175
|
Log.debug('pre pending call promise before call method, wait for it');
|
|
65156
65176
|
try {
|
|
65157
|
-
yield
|
|
65177
|
+
yield pendingPromise;
|
|
65158
65178
|
}
|
|
65159
65179
|
catch (error) {
|
|
65160
65180
|
}
|
|
@@ -65564,6 +65584,12 @@ function isRetryableBleProtocolV2ProbeError(method, error) {
|
|
|
65564
65584
|
message.includes('expected V2') &&
|
|
65565
65585
|
message.includes('did not respond to expected protocol'));
|
|
65566
65586
|
}
|
|
65587
|
+
function isMissingDetectedProtocolError(error) {
|
|
65588
|
+
const typedError = error;
|
|
65589
|
+
return ((typedError === null || typedError === void 0 ? void 0 : typedError.errorCode) === hdShared.HardwareErrorCode.RuntimeError &&
|
|
65590
|
+
typeof typedError.message === 'string' &&
|
|
65591
|
+
typedError.message.includes('Device protocol has not been detected'));
|
|
65592
|
+
}
|
|
65567
65593
|
function connectDeviceForBle(method, device, retryCount = 0) {
|
|
65568
65594
|
var _a;
|
|
65569
65595
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -65598,7 +65624,8 @@ function connectDeviceForBle(method, device, retryCount = 0) {
|
|
|
65598
65624
|
}
|
|
65599
65625
|
}
|
|
65600
65626
|
catch (err) {
|
|
65601
|
-
|
|
65627
|
+
const requiresColdReconnect = isMissingDetectedProtocolError(err);
|
|
65628
|
+
if ((hdShared.ERROR_CODES_REQUIRE_DISCONNECT.includes(err.errorCode) || requiresColdReconnect) &&
|
|
65602
65629
|
device.mainId &&
|
|
65603
65630
|
device.deviceConnector) {
|
|
65604
65631
|
yield device.deviceConnector.disconnect(device.mainId).catch(() => undefined);
|
|
@@ -65606,10 +65633,11 @@ function connectDeviceForBle(method, device, retryCount = 0) {
|
|
|
65606
65633
|
}
|
|
65607
65634
|
if ((err.errorCode === hdShared.HardwareErrorCode.BleTimeoutError ||
|
|
65608
65635
|
err.errorCode === hdShared.HardwareErrorCode.BleConnectedError ||
|
|
65609
|
-
isRetryableBleProtocolV2ProbeError(method, err)
|
|
65636
|
+
isRetryableBleProtocolV2ProbeError(method, err) ||
|
|
65637
|
+
requiresColdReconnect) &&
|
|
65610
65638
|
retryCount < 6) {
|
|
65611
65639
|
const nextRetry = retryCount + 1;
|
|
65612
|
-
Log.debug(`Bluetooth
|
|
65640
|
+
Log.debug(`Bluetooth connection will retry, retry count: ${nextRetry}`);
|
|
65613
65641
|
yield wait(3000);
|
|
65614
65642
|
yield connectDeviceForBle(method, device, nextRetry);
|
|
65615
65643
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onekeyfe/hd-core",
|
|
3
|
-
"version": "1.2.0-alpha.
|
|
3
|
+
"version": "1.2.0-alpha.130",
|
|
4
4
|
"description": "Core processes and APIs for communicating with OneKey hardware devices.",
|
|
5
5
|
"author": "OneKey",
|
|
6
6
|
"homepage": "https://github.com/OneKeyHQ/hardware-js-sdk#readme",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"url": "https://github.com/OneKeyHQ/hardware-js-sdk/issues"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@onekeyfe/hd-shared": "1.2.0-alpha.
|
|
29
|
-
"@onekeyfe/hd-transport": "1.2.0-alpha.
|
|
28
|
+
"@onekeyfe/hd-shared": "1.2.0-alpha.130",
|
|
29
|
+
"@onekeyfe/hd-transport": "1.2.0-alpha.130",
|
|
30
30
|
"axios": "1.15.2",
|
|
31
31
|
"bignumber.js": "^9.0.2",
|
|
32
32
|
"buffer": "^6.0.3",
|
|
@@ -46,5 +46,5 @@
|
|
|
46
46
|
"@types/w3c-web-usb": "^1.0.10",
|
|
47
47
|
"@types/web-bluetooth": "^0.0.21"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "287003096bc4df3a5824f2bea77e50f7fdc20565"
|
|
50
50
|
}
|
|
@@ -168,8 +168,7 @@ export default class DeviceSettings extends BaseMethod<ApplySettings> {
|
|
|
168
168
|
async run() {
|
|
169
169
|
try {
|
|
170
170
|
if (this.device.isProtocolV2()) {
|
|
171
|
-
const refreshStatusAndSettings = () =>
|
|
172
|
-
this.device.getDeviceState({ refreshSections: ['status', 'settings'] });
|
|
171
|
+
const refreshStatusAndSettings = () => this.device.refreshProtocolV2SettingsAfterMutation();
|
|
173
172
|
assertSettingsSupported(this.payload, DEVICE_SETTINGS_V1_ONLY_FIELDS, 'Protocol V2');
|
|
174
173
|
const capabilities = getDeviceSettingsCapabilities(
|
|
175
174
|
this.device.getCurrentDeviceType(),
|
|
@@ -143,6 +143,7 @@ export default class DeviceUploadWallpaper extends BaseMethod<DeviceUploadWallpa
|
|
|
143
143
|
const response = await this.device.commands.typedCall('DeviceSettingsSet', 'Success', {
|
|
144
144
|
settings: { wallpaper_path: this.path },
|
|
145
145
|
});
|
|
146
|
+
await this.device.refreshProtocolV2SettingsAfterMutation();
|
|
146
147
|
return {
|
|
147
148
|
path: this.path,
|
|
148
149
|
size: encoded.data.byteLength,
|
package/src/core/index.ts
CHANGED
|
@@ -296,13 +296,6 @@ const handlePreWarmSignal = async (
|
|
|
296
296
|
}
|
|
297
297
|
};
|
|
298
298
|
|
|
299
|
-
const waitWithTimeout = async (promise: Promise<any>, timeout: number) => {
|
|
300
|
-
const timeoutPromise = new Promise((_, reject) => {
|
|
301
|
-
setTimeout(() => reject(new Error('Request timeout')), timeout);
|
|
302
|
-
});
|
|
303
|
-
return Promise.race([promise, timeoutPromise]);
|
|
304
|
-
};
|
|
305
|
-
|
|
306
299
|
const waitForPendingPromise = async (
|
|
307
300
|
getPrePendingCallPromise: () => Promise<void> | undefined,
|
|
308
301
|
removePrePendingCallPromise?: (promise: Promise<void> | undefined) => void
|
|
@@ -311,9 +304,9 @@ const waitForPendingPromise = async (
|
|
|
311
304
|
if (pendingPromise) {
|
|
312
305
|
Log.debug('pre pending call promise before call method, wait for it');
|
|
313
306
|
try {
|
|
314
|
-
await
|
|
307
|
+
await pendingPromise;
|
|
315
308
|
} catch (error) {
|
|
316
|
-
//
|
|
309
|
+
// Cancellation is best-effort, but its teardown must settle before reuse.
|
|
317
310
|
}
|
|
318
311
|
removePrePendingCallPromise?.(pendingPromise);
|
|
319
312
|
Log.debug('pre pending call promise before call method done');
|
|
@@ -906,6 +899,15 @@ function isRetryableBleProtocolV2ProbeError(method: BaseMethod, error: unknown)
|
|
|
906
899
|
);
|
|
907
900
|
}
|
|
908
901
|
|
|
902
|
+
function isMissingDetectedProtocolError(error: unknown) {
|
|
903
|
+
const typedError = error as { errorCode?: unknown; message?: unknown };
|
|
904
|
+
return (
|
|
905
|
+
typedError?.errorCode === HardwareErrorCode.RuntimeError &&
|
|
906
|
+
typeof typedError.message === 'string' &&
|
|
907
|
+
typedError.message.includes('Device protocol has not been detected')
|
|
908
|
+
);
|
|
909
|
+
}
|
|
910
|
+
|
|
909
911
|
/**
|
|
910
912
|
* If the Bluetooth connection times out, retry up to 6 times
|
|
911
913
|
* @param retryCount - Current retry count (default 0)
|
|
@@ -943,12 +945,13 @@ async function connectDeviceForBle(method: BaseMethod, device: Device, retryCoun
|
|
|
943
945
|
DevicePool.emitter.emit(DEVICE.CONNECT, device);
|
|
944
946
|
}
|
|
945
947
|
} catch (err) {
|
|
948
|
+
const requiresColdReconnect = isMissingDetectedProtocolError(err);
|
|
946
949
|
// Device.run()'s REQUIRE_DISCONNECT handling never sees acquire/initialize
|
|
947
950
|
// failures, so with keep-alive a wedged link would be reused by every retry
|
|
948
951
|
// (field case: Initialize timing out at 25s per attempt, forever). Drop it
|
|
949
952
|
// here so the next retry cold-connects.
|
|
950
953
|
if (
|
|
951
|
-
ERROR_CODES_REQUIRE_DISCONNECT.includes(err.errorCode) &&
|
|
954
|
+
(ERROR_CODES_REQUIRE_DISCONNECT.includes(err.errorCode) || requiresColdReconnect) &&
|
|
952
955
|
device.mainId &&
|
|
953
956
|
device.deviceConnector
|
|
954
957
|
) {
|
|
@@ -961,11 +964,12 @@ async function connectDeviceForBle(method: BaseMethod, device: Device, retryCoun
|
|
|
961
964
|
if (
|
|
962
965
|
(err.errorCode === HardwareErrorCode.BleTimeoutError ||
|
|
963
966
|
err.errorCode === HardwareErrorCode.BleConnectedError ||
|
|
964
|
-
isRetryableBleProtocolV2ProbeError(method, err)
|
|
967
|
+
isRetryableBleProtocolV2ProbeError(method, err) ||
|
|
968
|
+
requiresColdReconnect) &&
|
|
965
969
|
retryCount < 6
|
|
966
970
|
) {
|
|
967
971
|
const nextRetry = retryCount + 1;
|
|
968
|
-
Log.debug(`Bluetooth
|
|
972
|
+
Log.debug(`Bluetooth connection will retry, retry count: ${nextRetry}`);
|
|
969
973
|
await wait(3000);
|
|
970
974
|
await connectDeviceForBle(method, device, nextRetry);
|
|
971
975
|
} else {
|
package/src/device/Device.ts
CHANGED
|
@@ -284,6 +284,9 @@ export class Device extends EventEmitter {
|
|
|
284
284
|
|
|
285
285
|
runPromise?: Deferred<void> | null;
|
|
286
286
|
|
|
287
|
+
/** Resolves only after the active run has completed its release path. */
|
|
288
|
+
private runCleanupPromise?: Promise<void>;
|
|
289
|
+
|
|
287
290
|
externalState: string[] = [];
|
|
288
291
|
|
|
289
292
|
unavailableCapabilities: UnavailableCapabilities = {};
|
|
@@ -1079,6 +1082,10 @@ export class Device extends EventEmitter {
|
|
|
1079
1082
|
return params.includeRaw ? cloneDeviceState(this.state) : createPublicDeviceState(this.state);
|
|
1080
1083
|
}
|
|
1081
1084
|
|
|
1085
|
+
async refreshProtocolV2SettingsAfterMutation() {
|
|
1086
|
+
return this.getDeviceState({ refreshSections: ['status', 'settings'] });
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1082
1089
|
_updateFeatures(protoFeatures: PROTO.Features | Features, initSession?: boolean) {
|
|
1083
1090
|
const previousDeviceId = this.getCurrentDeviceId();
|
|
1084
1091
|
let feat =
|
|
@@ -1396,12 +1403,20 @@ export class Device extends EventEmitter {
|
|
|
1396
1403
|
|
|
1397
1404
|
const runPromise = createDeferred<void>();
|
|
1398
1405
|
this.runPromise = runPromise;
|
|
1399
|
-
this._runInner(fn, options, runPromise).catch(error => {
|
|
1406
|
+
const cleanupPromise = this._runInner(fn, options, runPromise).catch(error => {
|
|
1400
1407
|
if (this.runPromise === runPromise) {
|
|
1401
1408
|
this.runPromise = null;
|
|
1402
1409
|
}
|
|
1403
1410
|
runPromise.reject(error);
|
|
1404
1411
|
});
|
|
1412
|
+
this.runCleanupPromise = cleanupPromise;
|
|
1413
|
+
cleanupPromise
|
|
1414
|
+
.finally(() => {
|
|
1415
|
+
if (this.runCleanupPromise === cleanupPromise) {
|
|
1416
|
+
this.runCleanupPromise = undefined;
|
|
1417
|
+
}
|
|
1418
|
+
})
|
|
1419
|
+
.catch(() => undefined);
|
|
1405
1420
|
return runPromise.promise;
|
|
1406
1421
|
}
|
|
1407
1422
|
|
|
@@ -1513,13 +1528,26 @@ export class Device extends EventEmitter {
|
|
|
1513
1528
|
|
|
1514
1529
|
async interruptionFromUser() {
|
|
1515
1530
|
const error = ERRORS.TypedError(HardwareErrorCode.DeviceInterruptedFromUser);
|
|
1516
|
-
|
|
1531
|
+
const cleanupPromise = this.runCleanupPromise;
|
|
1532
|
+
const { cancelableAction } = this;
|
|
1533
|
+
if (cancelableAction) {
|
|
1534
|
+
await cancelableAction(error);
|
|
1535
|
+
} else if (
|
|
1536
|
+
this.isProtocolV2() &&
|
|
1537
|
+
DataManager.isBleConnect(DataManager.getSettings('env')) &&
|
|
1538
|
+
this.hasDeviceAcquire()
|
|
1539
|
+
) {
|
|
1540
|
+
await this.commands?.cancelDevice?.().catch(cancelError => {
|
|
1541
|
+
Log.debug('Protocol V2 BLE fallback cancel error', cancelError);
|
|
1542
|
+
});
|
|
1543
|
+
}
|
|
1517
1544
|
await this.commands?.cancel();
|
|
1518
1545
|
|
|
1519
1546
|
if (this.runPromise) {
|
|
1520
1547
|
this.runPromise.reject(error);
|
|
1521
1548
|
this.runPromise = null;
|
|
1522
1549
|
}
|
|
1550
|
+
await cleanupPromise?.catch(() => undefined);
|
|
1523
1551
|
}
|
|
1524
1552
|
|
|
1525
1553
|
setCancelableAction(callback: (err?: Error) => Promise<unknown>) {
|