@onekeyfe/hd-core 1.2.0-alpha.170 → 1.2.0-alpha.171

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.
@@ -14,12 +14,12 @@ describe('FirmwareUpdateV4 install polling', () => {
14
14
  jest.restoreAllMocks();
15
15
  });
16
16
 
17
- test('uses Stage, waits for the empty Request response, then polls status', async () => {
17
+ test('keeps USB on Stage, Request Success, then status polling', async () => {
18
18
  const method = new FirmwareUpdateV4({
19
19
  id: 1,
20
20
  payload: {
21
21
  method: 'firmwareUpdateV4',
22
- connectId: 'pro2-ble',
22
+ connectId: 'pro2-usb',
23
23
  },
24
24
  });
25
25
  const targets = [{ target_id: 4, path: 'vol0:/application_p1.bin' }];
@@ -43,7 +43,7 @@ describe('FirmwareUpdateV4 install polling', () => {
43
43
  method.device = {
44
44
  getCommands: () => ({ typedCall }),
45
45
  createProtocolV2UiPhaseMetadata: jest.fn().mockReturnValue(undefined),
46
- toMessageObject: jest.fn().mockReturnValue({ connectId: 'pro2-ble' }),
46
+ toMessageObject: jest.fn().mockReturnValue({ connectId: 'pro2-usb' }),
47
47
  setCancelableAction: jest.fn(),
48
48
  clearCancelableAction: jest.fn(),
49
49
  } as unknown as Device;
@@ -59,6 +59,7 @@ describe('FirmwareUpdateV4 install polling', () => {
59
59
  };
60
60
  firmwareUpdate.reconnectProtocolV2Device = jest.fn().mockResolvedValue(undefined);
61
61
  firmwareUpdate.verifyProtocolV2ReconnectIdentity = jest.fn().mockResolvedValue({});
62
+ (method as any).isBleReconnect = jest.fn(() => false);
62
63
 
63
64
  await firmwareUpdate.protocolV2StartFirmwareUpdate({ targets });
64
65
  await firmwareUpdate.waitForProtocolV2FirmwareUpdateComplete(targets);
@@ -72,6 +73,59 @@ describe('FirmwareUpdateV4 install polling', () => {
72
73
  );
73
74
  });
74
75
 
76
+ test('writes the BLE Request and consumes its terminal Success from status polling', async () => {
77
+ const method = new FirmwareUpdateV4({
78
+ id: 1,
79
+ payload: {
80
+ method: 'firmwareUpdateV4',
81
+ connectId: 'pro2-ble',
82
+ },
83
+ });
84
+ const targets = [{ target_id: 6, path: 'vol0:/coprocessor.bin' }];
85
+ const typedCall = jest
86
+ .fn()
87
+ .mockResolvedValueOnce({ type: 'Success', message: {} })
88
+ .mockResolvedValueOnce({ type: 'Success', message: {} });
89
+ const call = jest.fn().mockResolvedValue({
90
+ type: 'WriteCompleted',
91
+ message: {},
92
+ });
93
+
94
+ method.device = {
95
+ getCommands: () => ({ typedCall, call }),
96
+ createProtocolV2UiPhaseMetadata: jest.fn().mockReturnValue(undefined),
97
+ toMessageObject: jest.fn().mockReturnValue({ connectId: 'pro2-ble' }),
98
+ setCancelableAction: jest.fn(),
99
+ } as unknown as Device;
100
+ method.postMessage = jest.fn();
101
+ method.postProgressMessage = jest.fn();
102
+ (method as any).isBleReconnect = jest.fn(() => true);
103
+
104
+ const firmwareUpdate = method as unknown as {
105
+ protocolV2StartFirmwareUpdate: (params: { targets: typeof targets }) => Promise<void>;
106
+ waitForProtocolV2FirmwareUpdateComplete: (
107
+ value: typeof targets,
108
+ requireCurrentInstallStatus: boolean
109
+ ) => Promise<void>;
110
+ };
111
+
112
+ await firmwareUpdate.protocolV2StartFirmwareUpdate({ targets });
113
+
114
+ expect(typedCall).toHaveBeenCalledTimes(1);
115
+ expect(typedCall).toHaveBeenCalledWith('DeviceFirmwareUpdateStage', 'Success', { targets });
116
+ expect(call).toHaveBeenCalledWith(
117
+ 'DeviceFirmwareUpdateRequest',
118
+ {},
119
+ { returnAfterWrite: true }
120
+ );
121
+ expect(method.postProgressMessage).not.toHaveBeenCalled();
122
+
123
+ await firmwareUpdate.waitForProtocolV2FirmwareUpdateComplete(targets, true);
124
+
125
+ expect(typedCall.mock.calls[1]?.[0]).toBe('DeviceFirmwareUpdateStatusGet');
126
+ expect(method.postProgressMessage).toHaveBeenCalledWith(100, 'installingFirmware');
127
+ });
128
+
75
129
  test('does not send Request when Stage is rejected', async () => {
76
130
  const method = new FirmwareUpdateV4({
77
131
  id: 1,
@@ -5551,15 +5551,11 @@ describe('Protocol V2 firmware update targets', () => {
5551
5551
  method: 'firmwareUpdateV4',
5552
5552
  },
5553
5553
  });
5554
- const typedCall = jest.fn().mockImplementation((type: string) => {
5555
- if (type === 'DeviceFirmwareUpdateRequest') {
5556
- return Promise.reject(new Error('React Native BLE transport released'));
5557
- }
5558
- return Promise.resolve({ type: 'Success', message: {} });
5559
- });
5554
+ const typedCall = jest.fn().mockResolvedValue({ type: 'Success', message: {} });
5555
+ const call = jest.fn().mockRejectedValue(new Error('React Native BLE transport released'));
5560
5556
 
5561
5557
  (method as any).device = stubDevice({
5562
- getCommands: () => ({ typedCall }),
5558
+ getCommands: () => ({ typedCall, call }),
5563
5559
  createProtocolV2UiPhaseMetadata: jest.fn().mockReturnValue(undefined),
5564
5560
  toMessageObject: jest.fn().mockReturnValue({ connectId: 'pro2' }),
5565
5561
  });
@@ -5572,7 +5568,12 @@ describe('Protocol V2 firmware update targets', () => {
5572
5568
  })
5573
5569
  ).resolves.toBeUndefined();
5574
5570
 
5575
- expect(typedCall).toHaveBeenCalledWith('DeviceFirmwareUpdateRequest', 'Success', {});
5571
+ expect(call).toHaveBeenCalledWith(
5572
+ 'DeviceFirmwareUpdateRequest',
5573
+ {},
5574
+ { returnAfterWrite: true }
5575
+ );
5576
+ expect(typedCall).not.toHaveBeenCalledWith('DeviceFirmwareUpdateRequest', 'Success', {});
5576
5577
  expect((method as any).protocolV2InstallNeedsBleReconnect).toBe(true);
5577
5578
  });
5578
5579
 
@@ -1 +1 @@
1
- {"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -53600,6 +53600,12 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
53600
53600
  },
53601
53601
  }, { timeoutMs: PROTOCOL_V2_FIRMWARE_STATUS_RESPONSE_TIMEOUT });
53602
53602
  if (statusResponse.type === 'Success') {
53603
+ if (this.isBleReconnect()) {
53604
+ Log$7.log('[FirmwareUpdateV4] BLE firmware install completed by terminal Success response');
53605
+ this.recordProtocolV2AuthoritativeInstallCompletion(expectedTargetIds);
53606
+ this.postProgressMessage(100, 'installingFirmware');
53607
+ return;
53608
+ }
53603
53609
  installEvidenceObserved = true;
53604
53610
  lastError = new Error('Protocol V2 firmware install acknowledged; waiting for target status');
53605
53611
  }
@@ -53969,6 +53975,21 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
53969
53975
  this.device.setCancelableAction(() => commands.cancelDevice());
53970
53976
  const interaction = this.device.createProtocolV2UiPhaseMetadata('button', 'start');
53971
53977
  this.postMessage(createUiMessage(UI_REQUEST.REQUEST_BUTTON, Object.assign({ device: this.device.toMessageObject(), source: 'method-lifecycle', reason: 'firmware-update', completion: 'operation-completed', deviceOnly: true, operation: this.name }, (interaction ? { interaction } : {}))));
53978
+ if (this.isBleReconnect()) {
53979
+ try {
53980
+ yield commands.call('DeviceFirmwareUpdateRequest', {}, { returnAfterWrite: true });
53981
+ Log$7.log('[FirmwareUpdateV4] BLE firmware install request written; continue with status polling');
53982
+ }
53983
+ catch (error) {
53984
+ this.throwIfAborted();
53985
+ if (!isProtocolV2DeviceDisconnectedError(error)) {
53986
+ throw error;
53987
+ }
53988
+ Log$7.log('[FirmwareUpdateV4] BLE transport released while writing install request; continue status polling');
53989
+ this.protocolV2InstallNeedsBleReconnect = true;
53990
+ }
53991
+ return;
53992
+ }
53972
53993
  try {
53973
53994
  yield commands.typedCall('DeviceFirmwareUpdateRequest', 'Success', {});
53974
53995
  this.protocolV2InstallRequestConfirmed = true;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onekeyfe/hd-core",
3
- "version": "1.2.0-alpha.170",
3
+ "version": "1.2.0-alpha.171",
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.170",
29
- "@onekeyfe/hd-transport": "1.2.0-alpha.170",
28
+ "@onekeyfe/hd-shared": "1.2.0-alpha.171",
29
+ "@onekeyfe/hd-transport": "1.2.0-alpha.171",
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": "d702db069d6b19f74cd5f1cf42277a7152beb3a8"
49
+ "gitHead": "68de201cc95fe521936c74f828addb3fb5251c67"
50
50
  }
@@ -2476,6 +2476,14 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
2476
2476
  { timeoutMs: PROTOCOL_V2_FIRMWARE_STATUS_RESPONSE_TIMEOUT }
2477
2477
  );
2478
2478
  if (statusResponse.type === 'Success') {
2479
+ if (this.isBleReconnect()) {
2480
+ Log.log(
2481
+ '[FirmwareUpdateV4] BLE firmware install completed by terminal Success response'
2482
+ );
2483
+ this.recordProtocolV2AuthoritativeInstallCompletion(expectedTargetIds);
2484
+ this.postProgressMessage(100, 'installingFirmware');
2485
+ return;
2486
+ }
2479
2487
  installEvidenceObserved = true;
2480
2488
  lastError = new Error(
2481
2489
  'Protocol V2 firmware install acknowledged; waiting for target status'
@@ -2987,6 +2995,26 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
2987
2995
  ...(interaction ? { interaction } : {}),
2988
2996
  })
2989
2997
  );
2998
+
2999
+ if (this.isBleReconnect()) {
3000
+ try {
3001
+ await commands.call('DeviceFirmwareUpdateRequest', {}, { returnAfterWrite: true });
3002
+ Log.log(
3003
+ '[FirmwareUpdateV4] BLE firmware install request written; continue with status polling'
3004
+ );
3005
+ } catch (error) {
3006
+ this.throwIfAborted();
3007
+ if (!isProtocolV2DeviceDisconnectedError(error)) {
3008
+ throw error;
3009
+ }
3010
+ Log.log(
3011
+ '[FirmwareUpdateV4] BLE transport released while writing install request; continue status polling'
3012
+ );
3013
+ this.protocolV2InstallNeedsBleReconnect = true;
3014
+ }
3015
+ return;
3016
+ }
3017
+
2990
3018
  try {
2991
3019
  await commands.typedCall('DeviceFirmwareUpdateRequest', 'Success', {});
2992
3020
  this.protocolV2InstallRequestConfirmed = true;