@onekeyfe/hd-core 1.2.0-alpha.121 → 1.2.0-alpha.123

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.
@@ -77,7 +77,7 @@ describe('DeviceSettings protocol routing', () => {
77
77
  expect(method.unlockPolicy).toBe('unlock-before-run');
78
78
  });
79
79
 
80
- it('uses ApplySettings and refreshes Protocol V1 settings from the device', async () => {
80
+ it('uses ApplySettings and commits the confirmed patch for Protocol V1', async () => {
81
81
  const { device, typedCall, updateState } = createDevice({ protocol: 'V1' });
82
82
  const method = new DeviceSettings({
83
83
  id: 1,
@@ -107,8 +107,13 @@ describe('DeviceSettings protocol routing', () => {
107
107
  use_ble: true,
108
108
  haptic_feedback: undefined,
109
109
  });
110
- expect(device.getDeviceState).toHaveBeenCalledWith({ refreshSections: ['settings'] });
111
- expect(updateState).not.toHaveBeenCalled();
110
+ expect(updateState).toHaveBeenCalledWith(
111
+ {
112
+ identity: { label: 'Shared Label' },
113
+ settings: { language: 'ja', bleEnabled: true },
114
+ },
115
+ 'settings-write'
116
+ );
112
117
  });
113
118
 
114
119
  it('normalizes legacy Protocol V1 never values before ApplySettings', async () => {
@@ -133,33 +138,15 @@ describe('DeviceSettings protocol routing', () => {
133
138
  auto_shutdown_delay_ms: DEVICE_SETTINGS_NEVER_TIMEOUT_MS,
134
139
  })
135
140
  );
136
- expect(device.getDeviceState).toHaveBeenCalledWith({ refreshSections: ['settings'] });
137
- expect(updateState).not.toHaveBeenCalled();
138
- });
139
-
140
- it('refreshes Protocol V1 settings after the on-device brightness update completes', async () => {
141
- const { device, typedCall, updateState, getDeviceState } = createDevice({ protocol: 'V1' });
142
- const method = new DeviceSettings({
143
- id: 3,
144
- payload: {
145
- method: 'deviceSettings',
146
- changeBrightness: true,
141
+ expect(updateState).toHaveBeenCalledWith(
142
+ {
143
+ settings: {
144
+ autoLockDelayMs: DEVICE_SETTINGS_NEVER_TIMEOUT_MS,
145
+ autoShutdownDelayMs: DEVICE_SETTINGS_NEVER_TIMEOUT_MS,
146
+ },
147
147
  },
148
- });
149
- method.init();
150
- (method as any).device = device;
151
-
152
- await expect(method.run()).resolves.toEqual({ message: 'Success' });
153
- expect(typedCall).toHaveBeenCalledWith(
154
- 'ApplySettings',
155
- 'Success',
156
- expect.objectContaining({ change_brightness: true })
157
- );
158
- expect(getDeviceState).toHaveBeenCalledWith({ refreshSections: ['settings'] });
159
- expect(typedCall.mock.invocationCallOrder[0]).toBeLessThan(
160
- getDeviceState.mock.invocationCallOrder[0]
148
+ 'settings-write'
161
149
  );
162
- expect(updateState).not.toHaveBeenCalled();
163
150
  });
164
151
 
165
152
  it('uses DeviceSettingsSet and reloads Protocol V2 status and settings from the device', async () => {
@@ -338,7 +325,7 @@ describe('DeviceSettings protocol routing', () => {
338
325
  'Success',
339
326
  expect.objectContaining({ use_passphrase: true })
340
327
  );
341
- expect(getDeviceState).toHaveBeenCalledWith({ refreshSections: ['settings'] });
328
+ expect(getDeviceState).not.toHaveBeenCalled();
342
329
  });
343
330
 
344
331
  it('rejects combining a Pro2 device-side toggle with direct settings', async () => {
@@ -203,6 +203,69 @@ describe.each([
203
203
  });
204
204
  });
205
205
 
206
+ describe('FirmwareUpdateV2 WebUSB bootloader polling', () => {
207
+ beforeEach(() => {
208
+ jest.useFakeTimers({ doNotFake: ['setImmediate', 'performance'] });
209
+ });
210
+
211
+ afterEach(() => {
212
+ jest.clearAllTimers();
213
+ jest.useRealTimers();
214
+ jest.restoreAllMocks();
215
+ });
216
+
217
+ test('skips interval ticks while a bootloader probe is in flight and resumes afterward', async () => {
218
+ jest.spyOn(DataManager, 'getSettings').mockReturnValue('desktop' as never);
219
+ jest.spyOn(DataManager, 'isBleConnect').mockReturnValue(false);
220
+ jest.spyOn(DataManager, 'isBrowserWebUsb').mockReturnValue(false);
221
+
222
+ const method = new FirmwareUpdateV2({
223
+ id: 1,
224
+ payload: { method: 'firmwareUpdateV2', connectId: WEBUSB_ID },
225
+ });
226
+
227
+ let inFlight = 0;
228
+ let maxInFlight = 0;
229
+ const resolveProbes: Array<(found: boolean) => void> = [];
230
+ const probe = jest.spyOn(method as any, '_checkDeviceInBootloaderMode').mockImplementation(
231
+ () =>
232
+ new Promise<boolean>(resolve => {
233
+ inFlight += 1;
234
+ maxInFlight = Math.max(maxInFlight, inFlight);
235
+ resolveProbes.push(found => {
236
+ inFlight -= 1;
237
+ resolve(found);
238
+ });
239
+ })
240
+ );
241
+
242
+ method.device = {
243
+ getCurrentDeviceType: jest.fn(() => EDeviceType.Classic),
244
+ } as unknown as Device;
245
+
246
+ method.checkDeviceToBootloader(WEBUSB_ID);
247
+
248
+ for (let elapsed = 0; elapsed < 6500; elapsed += 500) {
249
+ jest.advanceTimersByTime(500);
250
+ // eslint-disable-next-line no-await-in-loop
251
+ await flush();
252
+ }
253
+
254
+ expect(probe).toHaveBeenCalled();
255
+ expect(maxInFlight).toBe(1);
256
+
257
+ resolveProbes[0]?.(false);
258
+ await flush();
259
+ jest.advanceTimersByTime(2000);
260
+ await flush();
261
+
262
+ expect(probe).toHaveBeenCalledTimes(2);
263
+ expect(maxInFlight).toBe(1);
264
+ resolveProbes[1]?.(false);
265
+ await flush();
266
+ });
267
+ });
268
+
206
269
  describe.each([
207
270
  [
208
271
  'FirmwareUpdateV2',
@@ -116,39 +116,6 @@ describe('getDeviceState', () => {
116
116
  expect(state).not.toHaveProperty('session');
117
117
  });
118
118
 
119
- test('emits an authoritative Protocol V1 settings snapshot when the SDK cache is unchanged', async () => {
120
- const typedCall = jest.fn().mockResolvedValue({
121
- message: {
122
- onekey_device_type: 'PRO',
123
- initialized: true,
124
- language: 'zh_hk',
125
- brightness_prcent: 88,
126
- },
127
- });
128
- const device = createV1Device(typedCall);
129
- await device.getDeviceState({ refreshSections: ['settings'] });
130
- const cachedRevision = device.state?.revision;
131
- const onState = jest.fn();
132
- device.on(DEVICE.STATE, onState);
133
-
134
- const state = await device.getDeviceState({ refreshSections: ['settings'] });
135
-
136
- expect(typedCall).toHaveBeenCalledTimes(2);
137
- expect(typedCall).toHaveBeenLastCalledWith('GetFeatures', 'Features', {});
138
- expect(state.settings.language).toBe('zh_hk');
139
- expect(state.revision).toBe(cachedRevision);
140
- expect(onState).toHaveBeenCalledWith(
141
- device,
142
- expect.objectContaining({
143
- source: 'settings-read',
144
- changedKeys: ['settings'],
145
- state: expect.objectContaining({
146
- settings: expect.objectContaining({ language: 'zh_hk', brightness: 88 }),
147
- }),
148
- })
149
- );
150
- });
151
-
152
119
  test('hydrates Protocol V2 with separate DeviceInfoGet and DeviceStatusGet', async () => {
153
120
  const typedCall = jest.fn().mockImplementation((requestType: string) => {
154
121
  if (requestType === 'DeviceInfoGet') {
@@ -1 +1 @@
1
- {"version":3,"file":"FirmwareUpdateV2.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV2.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EAEb,KAAK,aAAa,EAKnB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AA2B1C,OAAO,KAAK,EAAE,QAAQ,EAAe,MAAM,UAAU,CAAC;AAEtD,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAE1F,KAAK,MAAM,GAAG;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IACrC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,eAAe,CAAC,EAAE,KAAK,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,yBAAyB,CAAC;KACrC,CAAC,CAAC;IACH,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,YAAY,CAAC,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,CAAC,EAAE,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B,CAAC;AAkFF,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,UAAU,CAAC,MAAM,CAAC;IAC9D,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IAE1C,IAAI;IAiGJ,cAAc,YAAa,MAAM,UAS/B;YAEY,qCAAqC;IAkBnD,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;YAwJvC,4BAA4B;IAyB1C,qBAAqB;IAUrB,uBAAuB,CAAC,UAAU,EAAE,MAAM;IAc1C,gCAAgC,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAAE,YAAY,EAAE,aAAa;IAwBtF,GAAG;CAkRV"}
1
+ {"version":3,"file":"FirmwareUpdateV2.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV2.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EAEb,KAAK,aAAa,EAKnB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AA2B1C,OAAO,KAAK,EAAE,QAAQ,EAAe,MAAM,UAAU,CAAC;AAEtD,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAE1F,KAAK,MAAM,GAAG;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IACrC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,eAAe,CAAC,EAAE,KAAK,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,yBAAyB,CAAC;KACrC,CAAC,CAAC;IACH,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,YAAY,CAAC,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,CAAC,EAAE,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B,CAAC;AAkFF,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,UAAU,CAAC,MAAM,CAAC;IAC9D,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IAE1C,IAAI;IAiGJ,cAAc,YAAa,MAAM,UAS/B;YAEY,qCAAqC;IAkBnD,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;YA2JvC,4BAA4B;IAyB1C,qBAAqB;IAUrB,uBAAuB,CAAC,UAAU,EAAE,MAAM;IAc1C,gCAAgC,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAAE,YAAY,EAAE,aAAa;IAwBtF,GAAG;CAkRV"}
@@ -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;AAa3C,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;CAyIV"}
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;CAyIV"}
@@ -1 +1 @@
1
- {"version":3,"file":"DeviceUploadResource.d.ts","sourceRoot":"","sources":["../../../src/api/device/DeviceUploadResource.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAK3C,OAAO,KAAK,EAA8B,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,UAAU,CAAC,cAAc,CAAC;IAC1E,UAAU;;;;MAIR;IAEF,OAAO,CAAC,cAAc,CAIpB;IAEF,eAAe;;;;;IAQf,qBAAqB;IAgBrB,IAAI;IA+CJ,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,cAAc;IAoBtB,sBAAsB,QAEhB,qBAAqB,iBAAiB,CAAC,GACvC,qBAAqB,aAAa,CAAC,GACnC,qBAAqB,aAAa,CAAC,GACnC,qBAAqB,SAAS,CAAC,KAClC,QAAQ,4BAA4B,CAAC,CAuDtC;IAEI,GAAG;CAiBV"}
1
+ {"version":3,"file":"DeviceUploadResource.d.ts","sourceRoot":"","sources":["../../../src/api/device/DeviceUploadResource.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAK3C,OAAO,KAAK,EAA8B,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,UAAU,CAAC,cAAc,CAAC;IAC1E,UAAU;;;;MAIR;IAEF,OAAO,CAAC,cAAc,CAIpB;IAEF,eAAe;;;;;IAQf,qBAAqB;IAgBrB,IAAI;IA+CJ,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,cAAc;IAoBtB,sBAAsB,QAEhB,qBAAqB,iBAAiB,CAAC,GACvC,qBAAqB,aAAa,CAAC,GACnC,qBAAqB,aAAa,CAAC,GACnC,qBAAqB,SAAS,CAAC,KAClC,QAAQ,4BAA4B,CAAC,CAuDtC;IAEI,GAAG;CAaV"}
@@ -146,18 +146,10 @@ export declare class Device extends EventEmitter {
146
146
  clearStandardInternalState(_deviceId?: string): void;
147
147
  initialize(options?: InitOptions): Promise<void>;
148
148
  private _initializeProtocolV2;
149
- getFeatures(options?: {
150
- source?: DeviceStateUpdateSource;
151
- forceChangedKeys?: string[];
152
- }): Promise<Features | undefined>;
149
+ getFeatures(): Promise<Features | undefined>;
153
150
  getDeviceState(params?: DeviceStateReadOptions): Promise<import("../types").DeviceState>;
154
- _updateFeatures(protoFeatures: PROTO.Features | Features, initSession?: boolean, options?: {
155
- source?: DeviceStateUpdateSource;
156
- forceChangedKeys?: string[];
157
- }): void;
158
- updateState(patch: DeviceStatePatch, source: DeviceStateUpdateSource, options?: {
159
- forceChangedKeys?: string[];
160
- }): import("../types").DeviceState & {
151
+ _updateFeatures(protoFeatures: PROTO.Features | Features, initSession?: boolean): void;
152
+ updateState(patch: DeviceStatePatch, source: DeviceStateUpdateSource): import("../types").DeviceState & {
161
153
  raw?: import("../types").DeviceFeaturesRaw | undefined;
162
154
  };
163
155
  updateFeaturesPatch(patch: Partial<Features>, source: DeviceStateUpdateSource): Features | 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
@@ -925,18 +925,10 @@ declare class Device extends EventEmitter {
925
925
  * features state directly from DeviceInfoGet.
926
926
  */
927
927
  private _initializeProtocolV2;
928
- getFeatures(options?: {
929
- source?: DeviceStateUpdateSource;
930
- forceChangedKeys?: string[];
931
- }): Promise<Features | undefined>;
928
+ getFeatures(): Promise<Features | undefined>;
932
929
  getDeviceState(params?: DeviceStateReadOptions): Promise<DeviceState>;
933
- _updateFeatures(protoFeatures: Messages.Features | Features, initSession?: boolean, options?: {
934
- source?: DeviceStateUpdateSource;
935
- forceChangedKeys?: string[];
936
- }): void;
937
- updateState(patch: DeviceStatePatch, source: DeviceStateUpdateSource, options?: {
938
- forceChangedKeys?: string[];
939
- }): DeviceState & {
930
+ _updateFeatures(protoFeatures: Messages.Features | Features, initSession?: boolean): void;
931
+ updateState(patch: DeviceStatePatch, source: DeviceStateUpdateSource): DeviceState & {
940
932
  raw?: DeviceFeaturesRaw | undefined;
941
933
  };
942
934
  updateFeaturesPatch(patch: Partial<Features>, source: DeviceStateUpdateSource): Features | undefined;
package/dist/index.js CHANGED
@@ -44617,6 +44617,22 @@ const mapProtocolV2DeviceStatusToState = (status) => {
44617
44617
  raw: { protocolV2DeviceStatus: status },
44618
44618
  });
44619
44619
  };
44620
+ const mapApplySettingsToState = (settings) => {
44621
+ const identity = definedEntries({ label: settings.label });
44622
+ const status = definedEntries({ passphraseProtection: settings.use_passphrase });
44623
+ const stateSettings = definedEntries({
44624
+ language: settings.language,
44625
+ autoLockDelayMs: settings.auto_lock_delay_ms,
44626
+ autoShutdownDelayMs: settings.auto_shutdown_delay_ms,
44627
+ displayRotation: settings.display_rotation,
44628
+ passphraseAlwaysOnDevice: settings.passphrase_always_on_device,
44629
+ safetyChecks: normalizeSafetyCheckLevel(settings.safety_checks),
44630
+ experimentalFeatures: settings.experimental_features,
44631
+ hapticFeedback: settings.haptic_feedback,
44632
+ bleEnabled: settings.use_ble,
44633
+ });
44634
+ return Object.assign(Object.assign(Object.assign({}, (Object.keys(identity).length ? { identity } : {})), (Object.keys(status).length ? { status } : {})), (Object.keys(stateSettings).length ? { settings: stateSettings } : {}));
44635
+ };
44620
44636
  const mapDeviceSettingsToState = (settings) => {
44621
44637
  const identity = definedEntries({ label: settings.label });
44622
44638
  const status = definedEntries({ passphraseProtection: settings.passphrase_enable });
@@ -45624,7 +45640,7 @@ class Device extends events.exports {
45624
45640
  }
45625
45641
  });
45626
45642
  }
45627
- getFeatures(options) {
45643
+ getFeatures() {
45628
45644
  return __awaiter(this, void 0, void 0, function* () {
45629
45645
  if (this.isProtocolV2()) {
45630
45646
  const deviceInfo = yield requestProtocolV2DeviceInfo({
@@ -45633,7 +45649,7 @@ class Device extends events.exports {
45633
45649
  return this.probeProtocolV2RuntimeState(deviceInfo);
45634
45650
  }
45635
45651
  const { message } = yield this.commands.typedCall('GetFeatures', 'Features', {});
45636
- this._updateFeatures(message, undefined, options);
45652
+ this._updateFeatures(message);
45637
45653
  return this.features;
45638
45654
  });
45639
45655
  }
@@ -45650,12 +45666,6 @@ class Device extends events.exports {
45650
45666
  };
45651
45667
  let initializedWithDeviceInfo = false;
45652
45668
  let refreshedDeviceInfo;
45653
- const protocolV1RefreshOptions = refresh.has('settings')
45654
- ? {
45655
- source: 'settings-read',
45656
- forceChangedKeys: ['settings'],
45657
- }
45658
- : undefined;
45659
45669
  if (!this.state) {
45660
45670
  if (this.isProtocolV2()) {
45661
45671
  const deviceInfo = yield requestProtocolV2DeviceInfo({
@@ -45667,11 +45677,11 @@ class Device extends events.exports {
45667
45677
  initializedWithDeviceInfo = true;
45668
45678
  }
45669
45679
  else {
45670
- yield this.getFeatures(protocolV1RefreshOptions);
45680
+ yield this.getFeatures();
45671
45681
  }
45672
45682
  }
45673
45683
  else if (!this.isProtocolV2() && refresh.size > 0) {
45674
- yield this.getFeatures(protocolV1RefreshOptions);
45684
+ yield this.getFeatures();
45675
45685
  }
45676
45686
  const supportsProtocolV1OnekeyFeatures = this.getCurrentDeviceType() === hdShared.EDeviceType.Touch ||
45677
45687
  this.getCurrentDeviceType() === hdShared.EDeviceType.Pro;
@@ -45708,39 +45718,36 @@ class Device extends events.exports {
45708
45718
  return params.includeRaw ? cloneDeviceState(this.state) : createPublicDeviceState(this.state);
45709
45719
  });
45710
45720
  }
45711
- _updateFeatures(protoFeatures, initSession, options) {
45712
- var _a, _b;
45721
+ _updateFeatures(protoFeatures, initSession) {
45722
+ var _a;
45713
45723
  const previousDeviceId = this.getCurrentDeviceId();
45714
45724
  let feat = 'protocol' in protoFeatures
45715
45725
  ? protoFeatures
45716
45726
  : buildProtocolV1FeaturesPayload(protoFeatures, this.features);
45717
45727
  feat.unlocked = (_a = feat.unlocked) !== null && _a !== void 0 ? _a : true;
45718
45728
  feat = fixFeaturesFirmwareVersion(feat);
45719
- this.updateState(mapFeaturesToState(feat), (_b = options === null || options === void 0 ? void 0 : options.source) !== null && _b !== void 0 ? _b : 'initialize', {
45720
- forceChangedKeys: options === null || options === void 0 ? void 0 : options.forceChangedKeys,
45721
- });
45729
+ this.updateState(mapFeaturesToState(feat), 'initialize');
45722
45730
  this.reconcileSessionCacheDeviceIdentity(previousDeviceId);
45723
45731
  if (feat.deviceId && feat.sessionId) {
45724
45732
  this.setInternalState(feat.sessionId, initSession);
45725
45733
  }
45726
45734
  }
45727
- updateState(patch, source, options) {
45728
- var _a, _b;
45735
+ updateState(patch, source) {
45736
+ var _a;
45729
45737
  const result = this.stateStore.update(patch, source);
45730
- const changedKeys = result.changedKeys.length > 0 ? result.changedKeys : (_a = options === null || options === void 0 ? void 0 : options.forceChangedKeys) !== null && _a !== void 0 ? _a : [];
45731
- if (changedKeys.length === 0)
45738
+ if (result.changedKeys.length === 0)
45732
45739
  return result.state;
45733
45740
  const event = {
45734
- connectId: (_b = this.getConnectId()) !== null && _b !== void 0 ? _b : null,
45741
+ connectId: (_a = this.getConnectId()) !== null && _a !== void 0 ? _a : null,
45735
45742
  state: createPublicDeviceState(result.state),
45736
45743
  revision: result.revision,
45737
45744
  source,
45738
- changedKeys,
45745
+ changedKeys: result.changedKeys,
45739
45746
  };
45740
45747
  Log$g.debug('Device state updated', {
45741
45748
  source,
45742
45749
  revision: result.revision,
45743
- changedKeyCount: changedKeys.length,
45750
+ changedKeyCount: result.changedKeys.length,
45744
45751
  });
45745
45752
  this.emit(DEVICE.STATE, this, event);
45746
45753
  if (result.state.protocol === 'V1') {
@@ -48512,7 +48519,7 @@ class DeviceSettings extends BaseMethod {
48512
48519
  }
48513
48520
  const protocolV1Params = Object.assign(Object.assign({}, this.params), { auto_lock_delay_ms: normalizeProtocolV1DelayMs(this.params.auto_lock_delay_ms), auto_shutdown_delay_ms: normalizeProtocolV1DelayMs(this.params.auto_shutdown_delay_ms) });
48514
48521
  const res = yield this.device.commands.typedCall('ApplySettings', 'Success', protocolV1Params);
48515
- yield this.device.getDeviceState({ refreshSections: ['settings'] });
48522
+ this.device.updateState(mapApplySettingsToState(protocolV1Params), 'settings-write');
48516
48523
  return res.message;
48517
48524
  }
48518
48525
  catch (error) {
@@ -48711,11 +48718,7 @@ class DeviceUploadResource extends BaseMethod {
48711
48718
  this.checkUploadNFTSupport();
48712
48719
  }
48713
48720
  const res = yield this.device.commands.typedCall('ResourceUpload', ['ResourceRequest', 'ZoomRequest', 'BlurRequest', 'Success'], this.params);
48714
- const result = yield this.processResourceRequest(res);
48715
- if (this.payload.resType === hdTransport.Messages.ResourceType.WallPaper) {
48716
- yield this.device.getDeviceState({ refreshSections: ['settings'] });
48717
- }
48718
- return result;
48721
+ return this.processResourceRequest(res);
48719
48722
  });
48720
48723
  }
48721
48724
  }
@@ -50460,7 +50463,7 @@ class FirmwareUpdateV2 extends BaseMethod {
50460
50463
  this.checkPromise = hdShared.createDeferred();
50461
50464
  const env = DataManager.getSettings('env');
50462
50465
  const isBleReconnect = connectId && DataManager.isBleConnect(env);
50463
- let bleProbeInFlight = false;
50466
+ let probeInFlight = false;
50464
50467
  Log$8.log('FirmwareUpdateV2 [checkDeviceToBootloader] isBleReconnect: ', isBleReconnect);
50465
50468
  let isFirstCheck = true;
50466
50469
  let checkCount = 0;
@@ -50492,8 +50495,9 @@ class FirmwareUpdateV2 extends BaseMethod {
50492
50495
  let startPolling = () => undefined;
50493
50496
  const pollForBootloader = () => __awaiter(this, void 0, void 0, function* () {
50494
50497
  var _b, _c, _d, _e;
50495
- if (isFinished || isPromptingWebDevice)
50498
+ if (isFinished || isPromptingWebDevice || probeInFlight)
50496
50499
  return;
50500
+ probeInFlight = true;
50497
50501
  checkCount += 1;
50498
50502
  Log$8.log('FirmwareUpdateV2 [checkDeviceToBootloader] isFirstCheck: ', isFirstCheck);
50499
50503
  if (isTouchOrProDevice && isFirstCheck) {
@@ -50527,13 +50531,11 @@ class FirmwareUpdateV2 extends BaseMethod {
50527
50531
  }
50528
50532
  finally {
50529
50533
  isPromptingWebDevice = false;
50534
+ probeInFlight = false;
50530
50535
  }
50531
50536
  return;
50532
50537
  }
50533
50538
  if (isBleReconnect) {
50534
- if (bleProbeInFlight)
50535
- return;
50536
- bleProbeInFlight = true;
50537
50539
  try {
50538
50540
  yield ((_c = this.device.deviceConnector) === null || _c === void 0 ? void 0 : _c.acquire(this.device.originalDescriptor.id, null, true, (_d = this.payload.connectProtocol) !== null && _d !== void 0 ? _d : this.device.originalDescriptor.protocolType));
50539
50541
  yield this.device.initialize({ timeoutMs: BOOTLOADER_POLL_INITIALIZE_TIMEOUT_MS });
@@ -50547,11 +50549,16 @@ class FirmwareUpdateV2 extends BaseMethod {
50547
50549
  Log$8.log('catch Bluetooth error when device is restarting: ', e);
50548
50550
  }
50549
50551
  finally {
50550
- bleProbeInFlight = false;
50552
+ probeInFlight = false;
50551
50553
  }
50552
50554
  }
50553
50555
  else {
50554
- yield checkForBootloader(true);
50556
+ try {
50557
+ yield checkForBootloader(true);
50558
+ }
50559
+ finally {
50560
+ probeInFlight = false;
50561
+ }
50555
50562
  }
50556
50563
  });
50557
50564
  startPolling = () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onekeyfe/hd-core",
3
- "version": "1.2.0-alpha.121",
3
+ "version": "1.2.0-alpha.123",
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.121",
29
- "@onekeyfe/hd-transport": "1.2.0-alpha.121",
28
+ "@onekeyfe/hd-shared": "1.2.0-alpha.123",
29
+ "@onekeyfe/hd-transport": "1.2.0-alpha.123",
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": "916633f46e4d8e0599af2956a639474dd3cbd9ec"
49
+ "gitHead": "e5e299d0ac7208c878ef1d7fe5e96ec591ed3634"
50
50
  }
@@ -276,10 +276,9 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
276
276
  this.checkPromise = createDeferred();
277
277
  const env = DataManager.getSettings('env');
278
278
  const isBleReconnect = connectId && DataManager.isBleConnect(env);
279
- // Tracks the in-flight BLE probe so interval ticks never overlap: a superseded
280
- // Initialize left pending on the V1 transport is exactly what later times out
281
- // and used to tear down the connection mid-firmware-upload.
282
- let bleProbeInFlight = false;
279
+ // Bootloader probes can outlive the polling interval. Keep discovery and
280
+ // acquire serialized so concurrent ticks never race the same connection.
281
+ let probeInFlight = false;
283
282
 
284
283
  Log.log('FirmwareUpdateV2 [checkDeviceToBootloader] isBleReconnect: ', isBleReconnect);
285
284
 
@@ -321,7 +320,8 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
321
320
 
322
321
  let startPolling: () => void = () => undefined;
323
322
  const pollForBootloader = async () => {
324
- if (isFinished || isPromptingWebDevice) return;
323
+ if (isFinished || isPromptingWebDevice || probeInFlight) return;
324
+ probeInFlight = true;
325
325
  checkCount += 1;
326
326
  Log.log('FirmwareUpdateV2 [checkDeviceToBootloader] isFirstCheck: ', isFirstCheck);
327
327
  if (isTouchOrProDevice && isFirstCheck) {
@@ -362,13 +362,12 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
362
362
  this.checkPromise?.reject(e);
363
363
  } finally {
364
364
  isPromptingWebDevice = false;
365
+ probeInFlight = false;
365
366
  }
366
367
  return;
367
368
  }
368
369
 
369
370
  if (isBleReconnect) {
370
- if (bleProbeInFlight) return;
371
- bleProbeInFlight = true;
372
371
  try {
373
372
  await this.device.deviceConnector?.acquire(
374
373
  this.device.originalDescriptor.id,
@@ -389,10 +388,14 @@ export default class FirmwareUpdateV2 extends BaseMethod<Params> {
389
388
  // ignore error because of device is not connected
390
389
  Log.log('catch Bluetooth error when device is restarting: ', e);
391
390
  } finally {
392
- bleProbeInFlight = false;
391
+ probeInFlight = false;
393
392
  }
394
393
  } else {
395
- await checkForBootloader(true);
394
+ try {
395
+ await checkForBootloader(true);
396
+ } finally {
397
+ probeInFlight = false;
398
+ }
396
399
  }
397
400
  };
398
401
 
@@ -4,7 +4,10 @@ import { DeviceSessionPinType, DeviceSettingsPage } from '@onekeyfe/hd-transport
4
4
  import { BaseMethod } from '../BaseMethod';
5
5
  import { invalidParameter } from '../helpers/filesystemValidation';
6
6
  import { validateParams } from '../helpers/paramsValidator';
7
- import { mapCommonSettingsToProtocolV2 } from '../../device/DeviceStateMapper';
7
+ import {
8
+ mapApplySettingsToState,
9
+ mapCommonSettingsToProtocolV2,
10
+ } from '../../device/DeviceStateMapper';
8
11
  import { getProtocolV2SettingsBehavior } from '../../protocols/protocol-v2/settingsUnlockPolicy';
9
12
  import {
10
13
  DEVICE_SETTINGS_NEVER_TIMEOUT_MS,
@@ -268,7 +271,7 @@ export default class DeviceSettings extends BaseMethod<ApplySettings> {
268
271
  'Success',
269
272
  protocolV1Params
270
273
  );
271
- await this.device.getDeviceState({ refreshSections: ['settings'] });
274
+ this.device.updateState(mapApplySettingsToState(protocolV1Params), 'settings-write');
272
275
  return res.message;
273
276
  } catch (error) {
274
277
  if (error.message?.toLowerCase().includes('no setting provided')) {
@@ -198,10 +198,6 @@ export default class DeviceUploadResource extends BaseMethod<ResourceUpload> {
198
198
  this.params
199
199
  );
200
200
 
201
- const result = await this.processResourceRequest(res);
202
- if (this.payload.resType === PROTO.ResourceType.WallPaper) {
203
- await this.device.getDeviceState({ refreshSections: ['settings'] });
204
- }
205
- return result;
201
+ return this.processResourceRequest(res);
206
202
  }
207
203
  }
@@ -989,7 +989,7 @@ export class Device extends EventEmitter {
989
989
  }
990
990
  }
991
991
 
992
- async getFeatures(options?: { source?: DeviceStateUpdateSource; forceChangedKeys?: string[] }) {
992
+ async getFeatures() {
993
993
  if (this.isProtocolV2()) {
994
994
  const deviceInfo = await requestProtocolV2DeviceInfo({
995
995
  commands: this.commands,
@@ -998,7 +998,7 @@ export class Device extends EventEmitter {
998
998
  }
999
999
 
1000
1000
  const { message } = await this.commands.typedCall('GetFeatures', 'Features', {});
1001
- this._updateFeatures(message, undefined, options);
1001
+ this._updateFeatures(message);
1002
1002
  return this.features;
1003
1003
  }
1004
1004
 
@@ -1012,13 +1012,6 @@ export class Device extends EventEmitter {
1012
1012
  let initializedWithDeviceInfo = false;
1013
1013
  let refreshedDeviceInfo: ProtocolV2DeviceInfo | undefined;
1014
1014
 
1015
- const protocolV1RefreshOptions = refresh.has('settings')
1016
- ? {
1017
- source: 'settings-read' as const,
1018
- forceChangedKeys: ['settings'],
1019
- }
1020
- : undefined;
1021
-
1022
1015
  if (!this.state) {
1023
1016
  if (this.isProtocolV2()) {
1024
1017
  const deviceInfo = await requestProtocolV2DeviceInfo({
@@ -1029,10 +1022,10 @@ export class Device extends EventEmitter {
1029
1022
  refreshedDeviceInfo = deviceInfo;
1030
1023
  initializedWithDeviceInfo = true;
1031
1024
  } else {
1032
- await this.getFeatures(protocolV1RefreshOptions);
1025
+ await this.getFeatures();
1033
1026
  }
1034
1027
  } else if (!this.isProtocolV2() && refresh.size > 0) {
1035
- await this.getFeatures(protocolV1RefreshOptions);
1028
+ await this.getFeatures();
1036
1029
  }
1037
1030
 
1038
1031
  const supportsProtocolV1OnekeyFeatures =
@@ -1086,14 +1079,7 @@ export class Device extends EventEmitter {
1086
1079
  return params.includeRaw ? cloneDeviceState(this.state) : createPublicDeviceState(this.state);
1087
1080
  }
1088
1081
 
1089
- _updateFeatures(
1090
- protoFeatures: PROTO.Features | Features,
1091
- initSession?: boolean,
1092
- options?: {
1093
- source?: DeviceStateUpdateSource;
1094
- forceChangedKeys?: string[];
1095
- }
1096
- ) {
1082
+ _updateFeatures(protoFeatures: PROTO.Features | Features, initSession?: boolean) {
1097
1083
  const previousDeviceId = this.getCurrentDeviceId();
1098
1084
  let feat =
1099
1085
  'protocol' in protoFeatures
@@ -1104,36 +1090,28 @@ export class Device extends EventEmitter {
1104
1090
 
1105
1091
  feat = fixFeaturesFirmwareVersion(feat);
1106
1092
 
1107
- this.updateState(mapFeaturesToState(feat), options?.source ?? 'initialize', {
1108
- forceChangedKeys: options?.forceChangedKeys,
1109
- });
1093
+ this.updateState(mapFeaturesToState(feat), 'initialize');
1110
1094
  this.reconcileSessionCacheDeviceIdentity(previousDeviceId);
1111
1095
  if (feat.deviceId && feat.sessionId) {
1112
1096
  this.setInternalState(feat.sessionId, initSession);
1113
1097
  }
1114
1098
  }
1115
1099
 
1116
- updateState(
1117
- patch: DeviceStatePatch,
1118
- source: DeviceStateUpdateSource,
1119
- options?: { forceChangedKeys?: string[] }
1120
- ) {
1100
+ updateState(patch: DeviceStatePatch, source: DeviceStateUpdateSource) {
1121
1101
  const result = this.stateStore.update(patch, source);
1122
- const changedKeys =
1123
- result.changedKeys.length > 0 ? result.changedKeys : options?.forceChangedKeys ?? [];
1124
- if (changedKeys.length === 0) return result.state;
1102
+ if (result.changedKeys.length === 0) return result.state;
1125
1103
 
1126
1104
  const event: DeviceStateEvent = {
1127
1105
  connectId: this.getConnectId() ?? null,
1128
1106
  state: createPublicDeviceState(result.state),
1129
1107
  revision: result.revision,
1130
1108
  source,
1131
- changedKeys,
1109
+ changedKeys: result.changedKeys,
1132
1110
  };
1133
1111
  Log.debug('Device state updated', {
1134
1112
  source,
1135
1113
  revision: result.revision,
1136
- changedKeyCount: changedKeys.length,
1114
+ changedKeyCount: result.changedKeys.length,
1137
1115
  });
1138
1116
  this.emit(DEVICE.STATE, this, event);
1139
1117
  if (result.state.protocol === 'V1') {
@@ -1,53 +0,0 @@
1
- import { EDeviceType } from '@onekeyfe/hd-shared';
2
- import { ResourceType } from '@onekeyfe/hd-transport';
3
-
4
- import DeviceUploadResource from '../src/api/device/DeviceUploadResource';
5
-
6
- jest.mock('../src/data/config', () => ({
7
- DEFAULT_DOMAIN: 'https://example.com/',
8
- getSDKVersion: () => '0.0.0-test',
9
- }));
10
-
11
- describe('DeviceUploadResource state refresh', () => {
12
- it('refreshes Protocol V1 settings inside a wallpaper update', async () => {
13
- const typedCall = jest.fn().mockResolvedValue({
14
- type: 'Success',
15
- message: { message: 'Success' },
16
- });
17
- const getDeviceState = jest.fn().mockResolvedValue({
18
- settings: { language: 'en-US' },
19
- });
20
- const method = new DeviceUploadResource({
21
- id: 1,
22
- payload: {
23
- method: 'deviceUploadResource',
24
- suffix: 'jpg',
25
- dataHex: '00',
26
- thumbnailDataHex: '00',
27
- blurDataHex: '00',
28
- resType: ResourceType.WallPaper,
29
- },
30
- });
31
- method.init();
32
- (method as any).device = {
33
- commands: { typedCall },
34
- getCurrentDeviceType: () => EDeviceType.Pro,
35
- getCurrentFirmwareVersionString: () => '4.21.0',
36
- getDeviceState,
37
- };
38
-
39
- await expect(method.run()).resolves.toEqual({
40
- message: 'Success',
41
- applyScreen: false,
42
- });
43
- expect(typedCall).toHaveBeenCalledWith(
44
- 'ResourceUpload',
45
- ['ResourceRequest', 'ZoomRequest', 'BlurRequest', 'Success'],
46
- expect.objectContaining({ res_type: ResourceType.WallPaper })
47
- );
48
- expect(getDeviceState).toHaveBeenCalledWith({ refreshSections: ['settings'] });
49
- expect(typedCall.mock.invocationCallOrder[0]).toBeLessThan(
50
- getDeviceState.mock.invocationCallOrder[0]
51
- );
52
- });
53
- });