@onekeyfe/hd-core 1.2.6-alpha.3 → 1.2.7

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.
@@ -160,9 +160,20 @@ describe('DeviceStateMapper', () => {
160
160
  expect(patch.status?.unlocked).toBeNull();
161
161
  });
162
162
 
163
- test.each([undefined, { version: '1.0.2', build_id: 'old-p2', hash: [0x01, 0x02] }])(
164
- 'clears cached loader P2 version and verification when normal firmware reports P1',
165
- applicationData => {
163
+ test.each([
164
+ { mode: 'normal', applicationData: undefined },
165
+ {
166
+ mode: 'normal',
167
+ applicationData: { version: '1.0.2', build_id: 'old-p2', hash: [0x01, 0x02] },
168
+ },
169
+ { mode: 'notInitialized', applicationData: undefined },
170
+ {
171
+ mode: 'notInitialized',
172
+ applicationData: { version: '1.0.2', build_id: 'old-p2', hash: [0x01, 0x02] },
173
+ },
174
+ ] as const)(
175
+ 'clears cached loader P2 version and verification in $mode application mode',
176
+ ({ mode, applicationData }) => {
166
177
  const patch = mapProtocolV2DeviceInfoToState(
167
178
  {
168
179
  main_mcu: {
@@ -170,7 +181,7 @@ describe('DeviceStateMapper', () => {
170
181
  application_data: applicationData,
171
182
  },
172
183
  } as ProtocolV2DeviceInfo,
173
- 'normal'
184
+ mode
174
185
  );
175
186
 
176
187
  expect(patch.versions).toMatchObject({
@@ -868,6 +868,13 @@ describe('FirmwareUpdateV4 install polling', () => {
868
868
  p1UpdatedAt: 0,
869
869
  loaderBeforeUpdate: false,
870
870
  },
871
+ {
872
+ scenario: 'uninitialized firmware P1 updated while P2 is unobservable',
873
+ updatedAt: Infinity,
874
+ p1UpdatedAt: 0,
875
+ loaderBeforeUpdate: false,
876
+ applicationMode: 'notInitialized',
877
+ },
871
878
  {
872
879
  scenario: 'P2-only install cannot be inferred from an already updated P1',
873
880
  updatedAt: Infinity,
@@ -893,6 +900,7 @@ describe('FirmwareUpdateV4 install polling', () => {
893
900
  skipReconnect,
894
901
  statusUnavailable,
895
902
  differentDevice,
903
+ applicationMode,
896
904
  }) => {
897
905
  let now = 0;
898
906
  jest.spyOn(Date, 'now').mockImplementation(() => now);
@@ -951,7 +959,7 @@ describe('FirmwareUpdateV4 install polling', () => {
951
959
  const normal =
952
960
  options?.forceRuntimeContextRefresh && (!loaderBeforeUpdate || now >= updatedAt);
953
961
  finalFeatures = {
954
- mode: normal ? 'normal' : 'bootloader',
962
+ mode: normal ? applicationMode ?? 'normal' : 'bootloader',
955
963
  bootloaderMode: !normal,
956
964
  firmwareVersion: info.main_mcu?.application?.version,
957
965
  } as Features;
@@ -0,0 +1,166 @@
1
+ import FirmwareUpdateV4 from '../../src/api/FirmwareUpdateV4';
2
+
3
+ import type { ProtocolV2DeviceInfo } from '@onekeyfe/hd-transport';
4
+ import type { Device } from '../../src/device/Device';
5
+ import type { Features } from '../../src/types';
6
+ import type { FirmwareUpdateV4Params } from '../../src/types/api/firmwareUpdate';
7
+
8
+ jest.mock('../../src/data/config', () => ({
9
+ DEFAULT_DOMAIN: 'https://example.com/',
10
+ getSDKVersion: () => '0.0.0-test',
11
+ }));
12
+
13
+ type InstallTarget = { target_id: number; path: string };
14
+ type PollingMethod = {
15
+ params: FirmwareUpdateV4Params;
16
+ isBleReconnect: () => boolean;
17
+ protocolV2InstallNeedsReconnect: boolean;
18
+ protocolV2ExpectedSerialNumber: string;
19
+ protocolV2InstallBaselineVersions: Map<number, string>;
20
+ protocolV2LatestFinalFeatures?: Features;
21
+ protocolV2LatestFinalDeviceInfo?: ProtocolV2DeviceInfo;
22
+ reconnectProtocolV2Device: () => Promise<void>;
23
+ waitForProtocolV2FirmwareUpdateComplete: (
24
+ targets: InstallTarget[],
25
+ requireCurrentInstallStatus: boolean
26
+ ) => Promise<void>;
27
+ assertExpectedProtocolV2Versions: () => void;
28
+ };
29
+
30
+ type Scenario = {
31
+ scenario: string;
32
+ expectedTargetVersions?: FirmwareUpdateV4Params['expectedTargetVersions'];
33
+ currentVersion?: string;
34
+ p2Only?: boolean;
35
+ missingBaseline?: boolean;
36
+ loaderMode?: boolean;
37
+ completes: boolean;
38
+ };
39
+
40
+ const scenarios: Scenario[] = [
41
+ { scenario: 'omitted expected versions', completes: true },
42
+ { scenario: 'empty expected versions', expectedTargetVersions: {}, completes: true },
43
+ {
44
+ scenario: 'only a P1 expected version',
45
+ expectedTargetVersions: { app_v1: '1.0.3' },
46
+ completes: true,
47
+ },
48
+ {
49
+ scenario: 'matching paired expected versions',
50
+ expectedTargetVersions: { app_v1: '1.0.3', app_v2: '1.0.3' },
51
+ completes: true,
52
+ },
53
+ {
54
+ scenario: 'a mismatched expected P2 version',
55
+ expectedTargetVersions: { app_v2: '1.0.4' },
56
+ completes: false,
57
+ },
58
+ { scenario: 'unchanged P1', currentVersion: '1.0.2', completes: false },
59
+ { scenario: 'P2-only without expected versions', p2Only: true, completes: false },
60
+ { scenario: 'a missing P1 baseline', missingBaseline: true, completes: false },
61
+ { scenario: 'a device still in loader mode', loaderMode: true, completes: false },
62
+ ];
63
+
64
+ describe.each([
65
+ { transport: 'USB', isBle: false, platform: 'desktop' as const },
66
+ { transport: 'BLE', isBle: true, platform: 'native' as const },
67
+ ])('FirmwareUpdateV4 direct binaries over $transport', ({ isBle, platform }) => {
68
+ afterEach(() => {
69
+ jest.restoreAllMocks();
70
+ });
71
+
72
+ describe.each([
73
+ { endpoint: 'empty records', unavailable: false },
74
+ { endpoint: 'unavailable status handler', unavailable: true },
75
+ ])('$endpoint without observed install evidence', ({ unavailable }) => {
76
+ test.each(scenarios)('$scenario', async scenario => {
77
+ let now = 0;
78
+ jest.spyOn(Date, 'now').mockImplementation(() => now);
79
+ jest.spyOn(global, 'setTimeout').mockImplementation(((
80
+ callback: () => void,
81
+ delay: number
82
+ ) => {
83
+ now += delay;
84
+ callback();
85
+ return 0;
86
+ }) as typeof setTimeout);
87
+
88
+ const method = new FirmwareUpdateV4({
89
+ id: 1,
90
+ payload: {
91
+ method: 'firmwareUpdateV4',
92
+ connectId: 'pro2-optional-version-test',
93
+ platform,
94
+ ...(!scenario.p2Only ? { applicationP1Binary: new ArrayBuffer(1) } : {}),
95
+ applicationP2Binary: new ArrayBuffer(1),
96
+ ...(scenario.expectedTargetVersions !== undefined
97
+ ? { expectedTargetVersions: scenario.expectedTargetVersions }
98
+ : {}),
99
+ },
100
+ });
101
+ method.init();
102
+
103
+ const firmwareVersion = scenario.currentVersion ?? '1.0.3';
104
+ const deviceInfo = {
105
+ hw: { serial_no: 'pro2-optional-version-test' },
106
+ main_mcu: { application: { version: firmwareVersion } },
107
+ } as ProtocolV2DeviceInfo;
108
+ const features = {
109
+ mode: scenario.loaderMode ? 'bootloader' : 'normal',
110
+ bootloaderMode: !!scenario.loaderMode,
111
+ firmwareVersion,
112
+ } as Features;
113
+ const typedCall = jest.fn().mockImplementation((type: string) => {
114
+ if (type === 'DeviceInfoGet') return { type: 'DeviceInfo', message: deviceInfo };
115
+ if (type === 'DeviceFirmwareUpdateStatusGet') {
116
+ if (unavailable) throw new Error('unsupported message');
117
+ return { type: 'DeviceFirmwareUpdateStatus', message: { records: [] } };
118
+ }
119
+ throw new Error(`Unexpected command: ${type}`);
120
+ });
121
+ const probeProtocolV2RuntimeState = jest.fn().mockResolvedValue(features);
122
+ method.device = {
123
+ originalDescriptor: { path: 'pro2-optional-version-test' },
124
+ getCommands: () => ({ typedCall }),
125
+ probeProtocolV2RuntimeState,
126
+ setCancelableAction: jest.fn(),
127
+ } as unknown as Device;
128
+ method.postProgressMessage = jest.fn();
129
+
130
+ const pollingMethod = method as unknown as PollingMethod;
131
+ expect(pollingMethod.params.expectedTargetVersions).toEqual(scenario.expectedTargetVersions);
132
+ pollingMethod.isBleReconnect = () => isBle;
133
+ pollingMethod.protocolV2InstallNeedsReconnect = true;
134
+ pollingMethod.protocolV2ExpectedSerialNumber = 'pro2-optional-version-test';
135
+ pollingMethod.protocolV2InstallBaselineVersions = new Map([
136
+ [4, '1.0.2'],
137
+ [5, '1.0.2'],
138
+ ]);
139
+ if (scenario.missingBaseline) pollingMethod.protocolV2InstallBaselineVersions.delete(4);
140
+ pollingMethod.reconnectProtocolV2Device = jest.fn().mockResolvedValue(undefined);
141
+ const targets = [
142
+ { target_id: 4, path: 'vol0:/application_p1.bin' },
143
+ { target_id: 5, path: 'vol0:/application_p2.bin' },
144
+ ].filter(target => !scenario.p2Only || target.target_id === 5);
145
+
146
+ const polling = pollingMethod.waitForProtocolV2FirmwareUpdateComplete(targets, true);
147
+ if (scenario.completes) {
148
+ await expect(polling).resolves.toBeUndefined();
149
+ expect(now).toBe(0);
150
+ expect(method.postProgressMessage).toHaveBeenCalledWith(100, 'installingFirmware');
151
+ pollingMethod.protocolV2LatestFinalFeatures = features;
152
+ pollingMethod.protocolV2LatestFinalDeviceInfo = deviceInfo;
153
+ expect(() => pollingMethod.assertExpectedProtocolV2Versions()).not.toThrow();
154
+ } else {
155
+ await expect(polling).rejects.toMatchObject({
156
+ params: { firmwareUpdateCode: 'FirmwareInstallTimeout' },
157
+ });
158
+ expect(now).toBe(600_000);
159
+ expect(method.postProgressMessage).not.toHaveBeenCalledWith(100, 'installingFirmware');
160
+ }
161
+ expect(probeProtocolV2RuntimeState).toHaveBeenLastCalledWith(deviceInfo, expect.any(Number), {
162
+ forceRuntimeContextRefresh: true,
163
+ });
164
+ });
165
+ });
166
+ });
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DeviceStateMapper.d.ts","sourceRoot":"","sources":["../../src/device/DeviceStateMapper.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,aAAa,EAEb,cAAc,EACd,YAAY,EACZ,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAEV,eAAe,EACf,gBAAgB,EAChB,QAAQ,EACR,cAAc,EACf,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAsDxE,eAAO,MAAM,kBAAkB,aAAc,QAAQ,KAAG,gBAqEtD,CAAC;AAEH,eAAO,MAAM,4BAA4B,uBACnB,cAAc,KACjC,gBAA0F,CAAC;AAc9F,eAAO,MAAM,kCAAkC,aAAc,cAAc,KAAG,gBAgE7E,CAAC;AAEF,eAAO,MAAM,8BAA8B,SACnC,oBAAoB,SACpB,eAAe,KACpB,gBAyGF,CAAC;AAEF,eAAO,MAAM,gCAAgC,WAAY,YAAY,KAAG,gBActE,CAAC;AAEH,eAAO,MAAM,uBAAuB,aAAc,aAAa,KAAG,gBAmBjE,CAAC;AAEF,eAAO,MAAM,wBAAwB,aAAc,cAAc,KAAG,gBA0BnE,CAAC;AAEF,eAAO,MAAM,6BAA6B,aAAc,oBAAoB,KAAG,cAe3E,CAAC"}
1
+ {"version":3,"file":"DeviceStateMapper.d.ts","sourceRoot":"","sources":["../../src/device/DeviceStateMapper.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,aAAa,EAEb,cAAc,EACd,YAAY,EACZ,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAEV,eAAe,EACf,gBAAgB,EAChB,QAAQ,EACR,cAAc,EACf,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAsDxE,eAAO,MAAM,kBAAkB,aAAc,QAAQ,KAAG,gBAqEtD,CAAC;AAEH,eAAO,MAAM,4BAA4B,uBACnB,cAAc,KACjC,gBAA0F,CAAC;AAc9F,eAAO,MAAM,kCAAkC,aAAc,cAAc,KAAG,gBAgE7E,CAAC;AAEF,eAAO,MAAM,8BAA8B,SACnC,oBAAoB,SACpB,eAAe,KACpB,gBAiHF,CAAC;AAEF,eAAO,MAAM,gCAAgC,WAAY,YAAY,KAAG,gBActE,CAAC;AAEH,eAAO,MAAM,uBAAuB,aAAc,aAAa,KAAG,gBAmBjE,CAAC;AAEF,eAAO,MAAM,wBAAwB,aAAc,cAAc,KAAG,gBA0BnE,CAAC;AAEF,eAAO,MAAM,6BAA6B,aAAc,oBAAoB,KAAG,cAe3E,CAAC"}
package/dist/index.js CHANGED
@@ -44899,7 +44899,9 @@ const mapProtocolV2DeviceInfoToState = (info, mode = 'unknown') => {
44899
44899
  versions: definedEntries({
44900
44900
  firmware: imageVersion((_d = info.main_mcu) === null || _d === void 0 ? void 0 : _d.application),
44901
44901
  applicationP1: imageVersion((_e = info.main_mcu) === null || _e === void 0 ? void 0 : _e.application),
44902
- applicationP2: mode === 'normal' ? null : imageVersion((_f = info.main_mcu) === null || _f === void 0 ? void 0 : _f.application_data),
44902
+ applicationP2: mode === 'normal' || mode === 'notInitialized'
44903
+ ? null
44904
+ : imageVersion((_f = info.main_mcu) === null || _f === void 0 ? void 0 : _f.application_data),
44903
44905
  bootloader: imageVersion((_g = info.main_mcu) === null || _g === void 0 ? void 0 : _g.bootloader),
44904
44906
  board: imageVersion((_h = info.main_mcu) === null || _h === void 0 ? void 0 : _h.romloader),
44905
44907
  ble: imageVersion((_j = info.coprocessor) === null || _j === void 0 ? void 0 : _j.application),
@@ -44917,8 +44919,12 @@ const mapProtocolV2DeviceInfoToState = (info, mode = 'unknown') => {
44917
44919
  firmwareHash: imageHash((_u = info.main_mcu) === null || _u === void 0 ? void 0 : _u.application),
44918
44920
  applicationP1BuildId: imageBuildId((_v = info.main_mcu) === null || _v === void 0 ? void 0 : _v.application),
44919
44921
  applicationP1Hash: imageHash((_w = info.main_mcu) === null || _w === void 0 ? void 0 : _w.application),
44920
- applicationP2BuildId: mode === 'normal' ? null : imageBuildId((_x = info.main_mcu) === null || _x === void 0 ? void 0 : _x.application_data),
44921
- applicationP2Hash: mode === 'normal' ? null : imageHash((_y = info.main_mcu) === null || _y === void 0 ? void 0 : _y.application_data),
44922
+ applicationP2BuildId: mode === 'normal' || mode === 'notInitialized'
44923
+ ? null
44924
+ : imageBuildId((_x = info.main_mcu) === null || _x === void 0 ? void 0 : _x.application_data),
44925
+ applicationP2Hash: mode === 'normal' || mode === 'notInitialized'
44926
+ ? null
44927
+ : imageHash((_y = info.main_mcu) === null || _y === void 0 ? void 0 : _y.application_data),
44922
44928
  bootloaderBuildId: imageBuildId((_z = info.main_mcu) === null || _z === void 0 ? void 0 : _z.bootloader),
44923
44929
  bootloaderHash: imageHash((_0 = info.main_mcu) === null || _0 === void 0 ? void 0 : _0.bootloader),
44924
44930
  boardBuildId: imageBuildId((_1 = info.main_mcu) === null || _1 === void 0 ? void 0 : _1.romloader),
@@ -53297,7 +53303,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
53297
53303
  app_v1: features
53298
53304
  ? getDeviceFirmwareVersion(features).join('.')
53299
53305
  : (_c = (_b = deviceInfo === null || deviceInfo === void 0 ? void 0 : deviceInfo.main_mcu) === null || _b === void 0 ? void 0 : _b.application) === null || _c === void 0 ? void 0 : _c.version,
53300
- app_v2: (features === null || features === void 0 ? void 0 : features.mode) === 'normal'
53306
+ app_v2: features && this.isProtocolV2ApplicationMode(features)
53301
53307
  ? getDeviceFirmwareVersion(features).join('.')
53302
53308
  : (_e = (_d = deviceInfo === null || deviceInfo === void 0 ? void 0 : deviceInfo.main_mcu) === null || _d === void 0 ? void 0 : _d.application_data) === null || _e === void 0 ? void 0 : _e.version,
53303
53309
  coprocessor: features ? getDeviceBLEFirmwareVersion(features).join('.') : undefined,
@@ -54171,7 +54177,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
54171
54177
  versions.set(ProtocolV2FirmwareTargetType.FW_MGMT_TARGET_BOOTLOADER, getDeviceBootloaderVersion(features).join('.'));
54172
54178
  const applicationVersion = getDeviceFirmwareVersion(features).join('.');
54173
54179
  versions.set(ProtocolV2FirmwareTargetType.FW_MGMT_TARGET_APPLICATION_P1, applicationVersion);
54174
- const applicationP2Version = features.mode === 'normal'
54180
+ const applicationP2Version = this.isProtocolV2ApplicationMode(features)
54175
54181
  ? applicationVersion
54176
54182
  : (_b = (_a = deviceInfo === null || deviceInfo === void 0 ? void 0 : deviceInfo.main_mcu) === null || _a === void 0 ? void 0 : _a.application_data) === null || _b === void 0 ? void 0 : _b.version;
54177
54183
  if (applicationP2Version) {
@@ -54198,8 +54204,9 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
54198
54204
  const p2TargetId = ProtocolV2FirmwareTargetType.FW_MGMT_TARGET_APPLICATION_P2;
54199
54205
  return (expectedTargetIds.size > 0 &&
54200
54206
  Array.from(expectedTargetIds).every(targetId => {
54201
- var _a, _b, _c;
54202
- if (targetId === p2TargetId && ((_a = this.protocolV2LastRuntimeProbeFeatures) === null || _a === void 0 ? void 0 : _a.mode) === 'normal') {
54207
+ var _a, _b, _c, _d;
54208
+ if (targetId === p2TargetId &&
54209
+ this.isProtocolV2ApplicationMode(this.protocolV2LastRuntimeProbeFeatures)) {
54203
54210
  if (!expectedTargetIds.has(p1TargetId))
54204
54211
  return false;
54205
54212
  const previousP1Version = this.protocolV2InstallBaselineVersions.get(p1TargetId);
@@ -54207,7 +54214,8 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
54207
54214
  return (previousP1Version !== undefined &&
54208
54215
  currentP1Version !== undefined &&
54209
54216
  previousP1Version !== currentP1Version &&
54210
- currentP1Version === ((_c = (_b = this.params) === null || _b === void 0 ? void 0 : _b.expectedTargetVersions) === null || _c === void 0 ? void 0 : _c.app_v2));
54217
+ (((_b = (_a = this.params) === null || _a === void 0 ? void 0 : _a.expectedTargetVersions) === null || _b === void 0 ? void 0 : _b.app_v2) === undefined ||
54218
+ currentP1Version === ((_d = (_c = this.params) === null || _c === void 0 ? void 0 : _c.expectedTargetVersions) === null || _d === void 0 ? void 0 : _d.app_v2)));
54211
54219
  }
54212
54220
  const previousVersion = this.protocolV2InstallBaselineVersions.get(targetId);
54213
54221
  const currentVersion = currentVersions.get(targetId);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onekeyfe/hd-core",
3
- "version": "1.2.6-alpha.3",
3
+ "version": "1.2.7",
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.6-alpha.3",
29
- "@onekeyfe/hd-transport": "1.2.6-alpha.3",
28
+ "@onekeyfe/hd-shared": "1.2.7",
29
+ "@onekeyfe/hd-transport": "1.2.7",
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": "4ca9104edb5113a625070484628fe4b2a56478e5"
49
+ "gitHead": "6cf9b7d76b905f168169fd0442af8636afd2b469"
50
50
  }
@@ -1390,7 +1390,7 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
1390
1390
  : deviceInfo?.main_mcu?.application?.version,
1391
1391
  // Production boot verifies P2 against P1 before normal firmware can run.
1392
1392
  app_v2:
1393
- features?.mode === 'normal'
1393
+ features && this.isProtocolV2ApplicationMode(features)
1394
1394
  ? getDeviceFirmwareVersion(features).join('.')
1395
1395
  : deviceInfo?.main_mcu?.application_data?.version,
1396
1396
  coprocessor: features ? getDeviceBLEFirmwareVersion(features).join('.') : undefined,
@@ -2531,10 +2531,9 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
2531
2531
  );
2532
2532
  const applicationVersion = getDeviceFirmwareVersion(features).join('.');
2533
2533
  versions.set(ProtocolV2FirmwareTargetType.FW_MGMT_TARGET_APPLICATION_P1, applicationVersion);
2534
- const applicationP2Version =
2535
- features.mode === 'normal'
2536
- ? applicationVersion
2537
- : deviceInfo?.main_mcu?.application_data?.version;
2534
+ const applicationP2Version = this.isProtocolV2ApplicationMode(features)
2535
+ ? applicationVersion
2536
+ : deviceInfo?.main_mcu?.application_data?.version;
2538
2537
  if (applicationP2Version) {
2539
2538
  versions.set(
2540
2539
  ProtocolV2FirmwareTargetType.FW_MGMT_TARGET_APPLICATION_P2,
@@ -2571,7 +2570,10 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
2571
2570
  return (
2572
2571
  expectedTargetIds.size > 0 &&
2573
2572
  Array.from(expectedTargetIds).every(targetId => {
2574
- if (targetId === p2TargetId && this.protocolV2LastRuntimeProbeFeatures?.mode === 'normal') {
2573
+ if (
2574
+ targetId === p2TargetId &&
2575
+ this.isProtocolV2ApplicationMode(this.protocolV2LastRuntimeProbeFeatures)
2576
+ ) {
2575
2577
  // P1 must change in this install; a pre-existing P1 version cannot prove a P2-only update.
2576
2578
  if (!expectedTargetIds.has(p1TargetId)) return false;
2577
2579
  const previousP1Version = this.protocolV2InstallBaselineVersions.get(p1TargetId);
@@ -2580,7 +2582,8 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
2580
2582
  previousP1Version !== undefined &&
2581
2583
  currentP1Version !== undefined &&
2582
2584
  previousP1Version !== currentP1Version &&
2583
- currentP1Version === this.params?.expectedTargetVersions?.app_v2
2585
+ (this.params?.expectedTargetVersions?.app_v2 === undefined ||
2586
+ currentP1Version === this.params?.expectedTargetVersions?.app_v2)
2584
2587
  );
2585
2588
  }
2586
2589
  const previousVersion = this.protocolV2InstallBaselineVersions.get(targetId);
@@ -272,7 +272,10 @@ export const mapProtocolV2DeviceInfoToState = (
272
272
  firmware: imageVersion(info.main_mcu?.application),
273
273
  applicationP1: imageVersion(info.main_mcu?.application),
274
274
  // The running application does not report P2; discard a loader-era version.
275
- applicationP2: mode === 'normal' ? null : imageVersion(info.main_mcu?.application_data),
275
+ applicationP2:
276
+ mode === 'normal' || mode === 'notInitialized'
277
+ ? null
278
+ : imageVersion(info.main_mcu?.application_data),
276
279
  bootloader: imageVersion(info.main_mcu?.bootloader),
277
280
  board: imageVersion(info.main_mcu?.romloader),
278
281
  ble: imageVersion(info.coprocessor?.application),
@@ -291,8 +294,13 @@ export const mapProtocolV2DeviceInfoToState = (
291
294
  applicationP1BuildId: imageBuildId(info.main_mcu?.application),
292
295
  applicationP1Hash: imageHash(info.main_mcu?.application),
293
296
  applicationP2BuildId:
294
- mode === 'normal' ? null : imageBuildId(info.main_mcu?.application_data),
295
- applicationP2Hash: mode === 'normal' ? null : imageHash(info.main_mcu?.application_data),
297
+ mode === 'normal' || mode === 'notInitialized'
298
+ ? null
299
+ : imageBuildId(info.main_mcu?.application_data),
300
+ applicationP2Hash:
301
+ mode === 'normal' || mode === 'notInitialized'
302
+ ? null
303
+ : imageHash(info.main_mcu?.application_data),
296
304
  bootloaderBuildId: imageBuildId(info.main_mcu?.bootloader),
297
305
  bootloaderHash: imageHash(info.main_mcu?.bootloader),
298
306
  boardBuildId: imageBuildId(info.main_mcu?.romloader),