@onekeyfe/hd-core 1.2.0-alpha.54 → 1.2.0-alpha.55

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.
Files changed (256) hide show
  1. package/__tests__/AllNetworkGetAddressBase.tracing.test.ts +231 -0
  2. package/__tests__/DeviceCommands.test.ts +45 -0
  3. package/__tests__/DeviceEventRegistration.test.ts +6 -0
  4. package/__tests__/check-all-firmware-release-protocol-v2.test.ts +198 -3
  5. package/__tests__/connectSettings.test.ts +5 -47
  6. package/__tests__/device-lifecycle-events.test.ts +105 -3
  7. package/__tests__/deviceUploadNft.test.ts +293 -0
  8. package/__tests__/firmware-update/firmware-update-v2-download-before-boot.test.ts +31 -59
  9. package/__tests__/get-device-state.test.ts +132 -12
  10. package/__tests__/homescreen.test.ts +41 -1
  11. package/__tests__/kaspaSignTransaction.test.ts +3 -26
  12. package/__tests__/logBlockEvent.test.ts +1 -1
  13. package/__tests__/method-protocol-support.test.ts +19 -0
  14. package/__tests__/open-wallet-session.test.ts +568 -37
  15. package/__tests__/pro2Nft.test.ts +108 -0
  16. package/__tests__/protocol-binding.test.ts +89 -0
  17. package/__tests__/protocol-v2-resources.test.ts +286 -0
  18. package/__tests__/protocol-v2-ui-lifecycle.test.ts +91 -0
  19. package/__tests__/protocol-v2-unlock-policy.test.ts +201 -35
  20. package/__tests__/protocol-v2.test.ts +1350 -1012
  21. package/__tests__/protocolV2UiInteraction.test.ts +63 -0
  22. package/__tests__/public-pro2-api-boundary.test.ts +1 -0
  23. package/__tests__/search-devices.test.ts +12 -3
  24. package/__tests__/uiProgressThrottle.test.ts +74 -0
  25. package/__tests__/uiPromiseRegistry.test.ts +86 -0
  26. package/dist/api/BaseMethod.d.ts +3 -1
  27. package/dist/api/BaseMethod.d.ts.map +1 -1
  28. package/dist/api/CheckAllFirmwareRelease.d.ts +2 -1
  29. package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
  30. package/dist/api/DetectDeviceConnectProtocol.d.ts +7 -0
  31. package/dist/api/DetectDeviceConnectProtocol.d.ts.map +1 -0
  32. package/dist/api/FirmwareUpdate.d.ts.map +1 -1
  33. package/dist/api/FirmwareUpdateV2.d.ts +0 -11
  34. package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
  35. package/dist/api/FirmwareUpdateV3.d.ts +3 -7
  36. package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
  37. package/dist/api/FirmwareUpdateV4.d.ts +11 -25
  38. package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
  39. package/dist/api/GetPassphraseState.d.ts.map +1 -1
  40. package/dist/api/OpenWalletSession.d.ts.map +1 -1
  41. package/dist/api/SearchDevices.d.ts.map +1 -1
  42. package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -1
  43. package/dist/api/device/DeviceUnlock.d.ts +2 -2
  44. package/dist/api/device/DeviceUnlock.d.ts.map +1 -1
  45. package/dist/api/device/DeviceUpdateBootloader.d.ts +1 -5
  46. package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
  47. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +0 -9
  48. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
  49. package/dist/api/firmware/getBinary.d.ts +0 -7
  50. package/dist/api/firmware/getBinary.d.ts.map +1 -1
  51. package/dist/api/firmware/updateBootloader.d.ts +0 -2
  52. package/dist/api/firmware/updateBootloader.d.ts.map +1 -1
  53. package/dist/api/firmware/uploadFirmware.d.ts +1 -9
  54. package/dist/api/firmware/uploadFirmware.d.ts.map +1 -1
  55. package/dist/api/helpers/protocolV2FileWrite.d.ts +2 -0
  56. package/dist/api/helpers/protocolV2FileWrite.d.ts.map +1 -1
  57. package/dist/api/index.d.ts +2 -0
  58. package/dist/api/index.d.ts.map +1 -1
  59. package/dist/api/kaspa/KaspaSignTransaction.d.ts.map +1 -1
  60. package/dist/api/protocol-v2/DeviceUploadNft.d.ts +31 -0
  61. package/dist/api/protocol-v2/DeviceUploadNft.d.ts.map +1 -0
  62. package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts.map +1 -1
  63. package/dist/api/protocol-v2/helpers.d.ts.map +1 -1
  64. package/dist/api/stellar/StellarSignTransaction.d.ts +1 -1
  65. package/dist/core/deviceEventRegistration.d.ts +2 -0
  66. package/dist/core/deviceEventRegistration.d.ts.map +1 -1
  67. package/dist/core/index.d.ts.map +1 -1
  68. package/dist/core/uiPromiseRegistry.d.ts +4 -0
  69. package/dist/core/uiPromiseRegistry.d.ts.map +1 -0
  70. package/dist/data-manager/DataManager.d.ts +4 -2
  71. package/dist/data-manager/DataManager.d.ts.map +1 -1
  72. package/dist/data-manager/connectSettings.d.ts.map +1 -1
  73. package/dist/device/Device.d.ts +29 -6
  74. package/dist/device/Device.d.ts.map +1 -1
  75. package/dist/device/DeviceCommands.d.ts +4 -4
  76. package/dist/device/DeviceCommands.d.ts.map +1 -1
  77. package/dist/device/DevicePool.d.ts.map +1 -1
  78. package/dist/events/device.d.ts +4 -0
  79. package/dist/events/device.d.ts.map +1 -1
  80. package/dist/events/logBlockEvent.d.ts.map +1 -1
  81. package/dist/events/ui-promise.d.ts +4 -2
  82. package/dist/events/ui-promise.d.ts.map +1 -1
  83. package/dist/events/ui-request.d.ts +31 -2
  84. package/dist/events/ui-request.d.ts.map +1 -1
  85. package/dist/events/ui-response.d.ts +10 -2
  86. package/dist/events/ui-response.d.ts.map +1 -1
  87. package/dist/index.d.ts +214 -231
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +2616 -3527
  90. package/dist/inject.d.ts +6 -1
  91. package/dist/inject.d.ts.map +1 -1
  92. package/dist/lowLevelInject.d.ts.map +1 -1
  93. package/dist/protocols/protocol-v2/features.d.ts +0 -4
  94. package/dist/protocols/protocol-v2/features.d.ts.map +1 -1
  95. package/dist/protocols/protocol-v2/resources.d.ts +30 -0
  96. package/dist/protocols/protocol-v2/resources.d.ts.map +1 -0
  97. package/dist/protocols/protocol-v2/uiInteraction.d.ts +7 -4
  98. package/dist/protocols/protocol-v2/uiInteraction.d.ts.map +1 -1
  99. package/dist/protocols/protocol-v2/unlockPolicy.d.ts +1 -3
  100. package/dist/protocols/protocol-v2/unlockPolicy.d.ts.map +1 -1
  101. package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts +22 -0
  102. package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts.map +1 -0
  103. package/dist/protocols/protocol-v2/walletSession.d.ts +6 -1
  104. package/dist/protocols/protocol-v2/walletSession.d.ts.map +1 -1
  105. package/dist/topLevelInject.d.ts.map +1 -1
  106. package/dist/types/api/checkAllFirmwareRelease.d.ts +2 -4
  107. package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
  108. package/dist/types/api/detectDeviceConnectProtocol.d.ts +4 -0
  109. package/dist/types/api/detectDeviceConnectProtocol.d.ts.map +1 -0
  110. package/dist/types/api/deviceUnlock.d.ts +5 -1
  111. package/dist/types/api/deviceUnlock.d.ts.map +1 -1
  112. package/dist/types/api/deviceUpdateBootloader.d.ts +0 -6
  113. package/dist/types/api/deviceUpdateBootloader.d.ts.map +1 -1
  114. package/dist/types/api/export.d.ts +2 -4
  115. package/dist/types/api/export.d.ts.map +1 -1
  116. package/dist/types/api/firmwareUpdate.d.ts +2 -70
  117. package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
  118. package/dist/types/api/index.d.ts +7 -10
  119. package/dist/types/api/index.d.ts.map +1 -1
  120. package/dist/types/api/protocolV2.d.ts +3 -0
  121. package/dist/types/api/protocolV2.d.ts.map +1 -1
  122. package/dist/types/device.d.ts.map +1 -1
  123. package/dist/types/params.d.ts +1 -0
  124. package/dist/types/params.d.ts.map +1 -1
  125. package/dist/types/settings.d.ts +22 -13
  126. package/dist/types/settings.d.ts.map +1 -1
  127. package/dist/utils/deviceFeaturesCompat.d.ts +0 -1
  128. package/dist/utils/deviceFeaturesCompat.d.ts.map +1 -1
  129. package/dist/utils/deviceFeaturesUtils.d.ts +4 -0
  130. package/dist/utils/deviceFeaturesUtils.d.ts.map +1 -1
  131. package/dist/utils/homescreen.d.ts +4 -0
  132. package/dist/utils/homescreen.d.ts.map +1 -1
  133. package/dist/utils/index.d.ts +1 -1
  134. package/dist/utils/index.d.ts.map +1 -1
  135. package/dist/utils/patch.d.ts +1 -1
  136. package/dist/utils/patch.d.ts.map +1 -1
  137. package/dist/utils/pro2Nft.d.ts +31 -0
  138. package/dist/utils/pro2Nft.d.ts.map +1 -0
  139. package/dist/utils/pro2Wallpaper.d.ts +10 -0
  140. package/dist/utils/pro2Wallpaper.d.ts.map +1 -1
  141. package/dist/utils/uiProgressThrottle.d.ts +3 -0
  142. package/dist/utils/uiProgressThrottle.d.ts.map +1 -0
  143. package/package.json +4 -4
  144. package/src/api/BaseMethod.ts +8 -10
  145. package/src/api/CheckAllFirmwareRelease.ts +54 -57
  146. package/src/api/DetectDeviceConnectProtocol.ts +18 -0
  147. package/src/api/FirmwareUpdate.ts +7 -15
  148. package/src/api/FirmwareUpdateV2.ts +126 -316
  149. package/src/api/FirmwareUpdateV3.ts +63 -265
  150. package/src/api/FirmwareUpdateV4.ts +569 -965
  151. package/src/api/GetPassphraseState.ts +7 -1
  152. package/src/api/OpenWalletSession.ts +70 -17
  153. package/src/api/SearchDevices.ts +3 -1
  154. package/src/api/allnetwork/AllNetworkGetAddress.ts +21 -21
  155. package/src/api/allnetwork/AllNetworkGetAddressBase.ts +34 -11
  156. package/src/api/device/DeviceUnlock.ts +8 -3
  157. package/src/api/device/DeviceUpdateBootloader.ts +6 -122
  158. package/src/api/firmware/FirmwareUpdateBaseMethod.ts +16 -83
  159. package/src/api/firmware/updateBootloader.ts +4 -19
  160. package/src/api/firmware/uploadFirmware.ts +39 -144
  161. package/src/api/helpers/protocolV2FileWrite.ts +11 -4
  162. package/src/api/index.ts +2 -0
  163. package/src/api/kaspa/KaspaSignTransaction.ts +1 -12
  164. package/src/api/protocol-v2/DeviceUploadNft.ts +189 -0
  165. package/src/api/protocol-v2/ProtocolInfoRequest.ts +3 -1
  166. package/src/api/protocol-v2/helpers.ts +1 -0
  167. package/src/core/deviceEventRegistration.ts +4 -0
  168. package/src/core/index.ts +167 -83
  169. package/src/core/uiPromiseRegistry.ts +41 -0
  170. package/src/data/messages/messages-protocol-v2.json +25 -0
  171. package/src/data-manager/DataManager.ts +71 -39
  172. package/src/data-manager/connectSettings.ts +0 -11
  173. package/src/device/Device.ts +259 -43
  174. package/src/device/DeviceCommands.ts +7 -1
  175. package/src/device/DevicePool.ts +7 -2
  176. package/src/events/device.ts +4 -0
  177. package/src/events/logBlockEvent.ts +1 -0
  178. package/src/events/ui-promise.ts +4 -2
  179. package/src/events/ui-request.ts +36 -2
  180. package/src/events/ui-response.ts +12 -2
  181. package/src/index.ts +0 -5
  182. package/src/inject.ts +60 -24
  183. package/src/lowLevelInject.ts +7 -8
  184. package/src/protocols/protocol-v2/features.ts +10 -7
  185. package/src/protocols/protocol-v2/resources.ts +359 -0
  186. package/src/protocols/protocol-v2/uiInteraction.ts +46 -6
  187. package/src/protocols/protocol-v2/unlockPolicy.ts +1 -105
  188. package/src/protocols/protocol-v2/unlockPolicyRunner.ts +118 -0
  189. package/src/protocols/protocol-v2/walletSession.ts +214 -36
  190. package/src/topLevelInject.ts +7 -8
  191. package/src/types/api/checkAllFirmwareRelease.ts +2 -4
  192. package/src/types/api/detectDeviceConnectProtocol.ts +7 -0
  193. package/src/types/api/deviceUnlock.ts +12 -1
  194. package/src/types/api/deviceUpdateBootloader.ts +0 -6
  195. package/src/types/api/export.ts +1 -18
  196. package/src/types/api/firmwareUpdate.ts +3 -76
  197. package/src/types/api/index.ts +13 -14
  198. package/src/types/api/protocolV2.ts +13 -0
  199. package/src/types/device.ts +3 -0
  200. package/src/types/params.ts +7 -1
  201. package/src/types/settings.ts +42 -13
  202. package/src/utils/deviceFeaturesCompat.ts +0 -6
  203. package/src/utils/deviceFeaturesUtils.ts +8 -0
  204. package/src/utils/homescreen.ts +32 -6
  205. package/src/utils/index.ts +6 -1
  206. package/src/utils/pro2Nft.ts +142 -0
  207. package/src/utils/pro2Wallpaper.ts +35 -8
  208. package/src/utils/uiProgressThrottle.ts +63 -0
  209. package/__tests__/device-initialize-timeout.test.ts +0 -56
  210. package/__tests__/firmware-update/check-all-firmware-release.test.ts +0 -175
  211. package/__tests__/firmware-update/firmware-artifact-source.test.ts +0 -119
  212. package/__tests__/firmware-update/firmware-host-binding.test.ts +0 -70
  213. package/__tests__/firmware-update/firmware-preparation-error.test.ts +0 -27
  214. package/__tests__/firmware-update/firmware-update-bootloader-poll.test.ts +0 -200
  215. package/__tests__/firmware-update/firmware-update-capabilities.test.ts +0 -13
  216. package/__tests__/firmware-update/firmware-update-plan-bootloader-identity.test.ts +0 -294
  217. package/__tests__/firmware-update/firmware-update-plan.test.ts +0 -593
  218. package/__tests__/firmware-update/firmware-update-prepared-plan.test.ts +0 -213
  219. package/__tests__/firmware-update/firmware-update-v3-reconnect.test.ts +0 -58
  220. package/__tests__/firmware-update/firmware-upload-source.test.ts +0 -70
  221. package/dist/api/firmware/FirmwareArtifactSource.d.ts +0 -25
  222. package/dist/api/firmware/FirmwareArtifactSource.d.ts.map +0 -1
  223. package/dist/api/firmware/FirmwareHostBinding.d.ts +0 -6
  224. package/dist/api/firmware/FirmwareHostBinding.d.ts.map +0 -1
  225. package/dist/api/firmware/FirmwarePreparationError.d.ts +0 -3
  226. package/dist/api/firmware/FirmwarePreparationError.d.ts.map +0 -1
  227. package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts +0 -3
  228. package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts.map +0 -1
  229. package/dist/api/firmware/FirmwareUpdatePlan.d.ts +0 -25
  230. package/dist/api/firmware/FirmwareUpdatePlan.d.ts.map +0 -1
  231. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts +0 -32
  232. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts.map +0 -1
  233. package/dist/api/firmware/progressThrottle.d.ts +0 -3
  234. package/dist/api/firmware/progressThrottle.d.ts.map +0 -1
  235. package/dist/protocols/protocol-v2/lockedError.d.ts +0 -2
  236. package/dist/protocols/protocol-v2/lockedError.d.ts.map +0 -1
  237. package/dist/protocols/protocol-v2/unlockRetry.d.ts +0 -10
  238. package/dist/protocols/protocol-v2/unlockRetry.d.ts.map +0 -1
  239. package/dist/types/api/firmwareUpdateCapabilities.d.ts +0 -9
  240. package/dist/types/api/firmwareUpdateCapabilities.d.ts.map +0 -1
  241. package/dist/types/api/firmwareUpdatePlan.d.ts +0 -28
  242. package/dist/types/api/firmwareUpdatePlan.d.ts.map +0 -1
  243. package/dist/types/api/firmwareUpdatePreparedPlan.d.ts +0 -42
  244. package/dist/types/api/firmwareUpdatePreparedPlan.d.ts.map +0 -1
  245. package/src/api/firmware/FirmwareArtifactSource.ts +0 -278
  246. package/src/api/firmware/FirmwareHostBinding.ts +0 -100
  247. package/src/api/firmware/FirmwarePreparationError.ts +0 -12
  248. package/src/api/firmware/FirmwareUpdateCapabilities.ts +0 -9
  249. package/src/api/firmware/FirmwareUpdatePlan.ts +0 -772
  250. package/src/api/firmware/FirmwareUpdatePreparedPlan.ts +0 -415
  251. package/src/api/firmware/progressThrottle.ts +0 -44
  252. package/src/protocols/protocol-v2/lockedError.ts +0 -10
  253. package/src/protocols/protocol-v2/unlockRetry.ts +0 -109
  254. package/src/types/api/firmwareUpdateCapabilities.ts +0 -9
  255. package/src/types/api/firmwareUpdatePlan.ts +0 -38
  256. package/src/types/api/firmwareUpdatePreparedPlan.ts +0 -53
@@ -1,294 +0,0 @@
1
- import { EDeviceType, EFirmwareType } from '@onekeyfe/hd-shared';
2
-
3
- import { buildFirmwareUpdatePlan } from '../../src/api/firmware/FirmwareUpdatePlan';
4
- import {
5
- assertFirmwareUpdatePreparedPlanDeviceIdentity,
6
- prepareFirmwareUpdatePlan,
7
- } from '../../src/api/firmware/FirmwareUpdatePreparedPlan';
8
-
9
- import type { Features } from '../../src/types';
10
-
11
- const FIRMWARE_SHA256 = 'a'.repeat(64);
12
-
13
- const BLE_SHA256 = 'b'.repeat(64);
14
-
15
- const buildDesktopPlan = (
16
- features: Partial<Features>,
17
- options?: {
18
- ble?: { status: string; release?: Record<string, unknown> };
19
- firmwareStatus?: string;
20
- }
21
- ) =>
22
- buildFirmwareUpdatePlan({
23
- features: features as Features,
24
- firmwareType: EFirmwareType.Universal,
25
- platform: 'desktop',
26
- firmware: {
27
- status: options?.firmwareStatus ?? 'none',
28
- release: {
29
- url: 'https://firmware.onekey.so/classic/firmware.bin',
30
- expectedSize: 4,
31
- fingerprint: FIRMWARE_SHA256,
32
- version: [3, 20, 0],
33
- },
34
- },
35
- ble: options?.ble ?? {
36
- status: 'valid',
37
- release: undefined,
38
- },
39
- bootloader: {
40
- status: 'valid',
41
- release: undefined,
42
- },
43
- });
44
-
45
- const bleNoneWithRelease = {
46
- status: 'none',
47
- release: {
48
- url: 'https://firmware.onekey.so/classic/ble.bin',
49
- webUpdate: 'https://firmware.onekey.so/classic/ble.bin',
50
- expectedSize: 8,
51
- fingerprint: BLE_SHA256,
52
- version: [1, 5, 6],
53
- },
54
- };
55
-
56
- // A classic1s that lost its firmware reports no serial in bootloader mode; the
57
- // recovery flow must still be able to build (and later execute) a prepared plan.
58
- const bootloaderClassic1sFeatures: Partial<Features> = {
59
- deviceType: EDeviceType.Classic1s,
60
- bootloaderMode: true,
61
- firmwareVersion: '0.0.0',
62
- bootloaderVersion: '2.1.2',
63
- };
64
-
65
- describe('firmware update plan identity in bootloader mode', () => {
66
- test('builds a degraded-identity plan for a serial-less bootloader classic1s on desktop', () => {
67
- const plan = buildDesktopPlan(bootloaderClassic1sFeatures);
68
- expect(plan.deviceIdentity).toBe('unavailable');
69
- expect(plan.executor).not.toBe('v4');
70
- expect(plan.targetsToUpdate).toContain('firmware');
71
- });
72
-
73
- test('bootloader mode with intact firmware (status unknown) still gets the firmware artifact', () => {
74
- const plan = buildDesktopPlan(
75
- {
76
- deviceType: EDeviceType.Classic1s,
77
- bootloaderMode: true,
78
- firmwareVersion: '2.1.2',
79
- bootloaderVersion: '2.1.2',
80
- },
81
- { firmwareStatus: 'unknown' }
82
- );
83
- expect(plan.targetsToUpdate).toContain('firmware');
84
- expect(plan.deviceIdentity).toBe('unavailable');
85
- });
86
-
87
- test('normal-mode status none with a release available still adds no artifacts', () => {
88
- const plan = buildDesktopPlan({
89
- deviceType: EDeviceType.Classic1s,
90
- serialNo: 'CLA45F0023',
91
- firmwareVersion: '3.19.0',
92
- bootloaderVersion: '2.1.2',
93
- });
94
- expect(plan.targetsToUpdate).toEqual([]);
95
- });
96
-
97
- test('recovery plan carries the BLE artifact when the BLE version is unreadable in bootloader', () => {
98
- const plan = buildDesktopPlan(bootloaderClassic1sFeatures, { ble: bleNoneWithRelease });
99
- expect(plan.targetsToUpdate).toEqual(expect.arrayContaining(['firmware', 'ble']));
100
- });
101
-
102
- test('a normal-mode device without BLE hardware (status none) gets no BLE artifact', () => {
103
- const plan = buildFirmwareUpdatePlan({
104
- features: {
105
- deviceType: EDeviceType.Mini,
106
- serialNo: 'mini-device-id',
107
- firmwareVersion: '3.9.0',
108
- bootloaderVersion: '2.0.0',
109
- } as Features,
110
- firmwareType: EFirmwareType.Universal,
111
- platform: 'desktop',
112
- firmware: {
113
- status: 'outdated',
114
- release: {
115
- url: 'https://firmware.onekey.so/mini/firmware.bin',
116
- expectedSize: 4,
117
- fingerprint: FIRMWARE_SHA256,
118
- version: [3, 10, 0],
119
- },
120
- },
121
- ble: { status: 'none', release: undefined },
122
- bootloader: { status: 'valid', release: undefined },
123
- });
124
- expect(plan.targetsToUpdate).toEqual(['firmware']);
125
- });
126
-
127
- test('still rejects a serial-less normal-mode device on desktop', () => {
128
- expect(() =>
129
- buildDesktopPlan(
130
- {
131
- deviceType: EDeviceType.Classic1s,
132
- firmwareVersion: '3.19.0',
133
- bootloaderVersion: '2.1.2',
134
- },
135
- { firmwareStatus: 'outdated' }
136
- )
137
- ).toThrow(/stable device identity/);
138
- });
139
-
140
- test('keeps rejecting degraded identity for serial-less Pro (v3) in bootloader', () => {
141
- expect(() =>
142
- buildDesktopPlan(
143
- {
144
- deviceType: EDeviceType.Pro,
145
- bootloaderMode: true,
146
- firmwareVersion: '0.0.0',
147
- bootloaderVersion: '2.8.0',
148
- },
149
- { firmwareStatus: 'none' }
150
- )
151
- ).toThrow(/stable device identity/);
152
- });
153
-
154
- test('degraded plans are v2-only', () => {
155
- const plan = buildDesktopPlan(bootloaderClassic1sFeatures);
156
- expect(plan.executor).toBe('v2');
157
- });
158
-
159
- describe('prepared plan device identity assertion', () => {
160
- const prepareDegradedPlan = () => {
161
- const plan = buildDesktopPlan(bootloaderClassic1sFeatures);
162
- return prepareFirmwareUpdatePlan({
163
- plan,
164
- leaseRef: 'fwlease:00000000-0000-4000-8000-000000000001',
165
- artifacts: [
166
- {
167
- artifactId: 'firmware',
168
- artifact: {
169
- artifactRef: `fw:${FIRMWARE_SHA256}`,
170
- size: 4,
171
- sha256: FIRMWARE_SHA256,
172
- },
173
- },
174
- ],
175
- });
176
- };
177
-
178
- test('accepts a degraded plan when the live device is also identity-less in bootloader mode', () => {
179
- const preparedPlan = prepareDegradedPlan();
180
- expect(() =>
181
- assertFirmwareUpdatePreparedPlanDeviceIdentity({
182
- preparedPlan,
183
- deviceIdentity: undefined,
184
- bootloaderMode: true,
185
- deviceModel: String(EDeviceType.Classic1s),
186
- })
187
- ).not.toThrow();
188
- });
189
-
190
- test('rejects a degraded plan outside bootloader mode', () => {
191
- const preparedPlan = prepareDegradedPlan();
192
- expect(() =>
193
- assertFirmwareUpdatePreparedPlanDeviceIdentity({
194
- preparedPlan,
195
- deviceIdentity: undefined,
196
- bootloaderMode: false,
197
- deviceModel: String(EDeviceType.Classic1s),
198
- })
199
- ).toThrow();
200
- });
201
-
202
- test('rejects a degraded plan when bootloader mode is not stated', () => {
203
- const preparedPlan = prepareDegradedPlan();
204
- expect(() =>
205
- assertFirmwareUpdatePreparedPlanDeviceIdentity({
206
- preparedPlan,
207
- deviceIdentity: undefined,
208
- deviceModel: String(EDeviceType.Classic1s),
209
- })
210
- ).toThrow();
211
- });
212
-
213
- test('rejects a degraded plan when the live device reports a real identity', () => {
214
- const preparedPlan = prepareDegradedPlan();
215
- expect(() =>
216
- assertFirmwareUpdatePreparedPlanDeviceIdentity({
217
- preparedPlan,
218
- deviceIdentity: 'CLA45F0023',
219
- bootloaderMode: true,
220
- deviceModel: String(EDeviceType.Classic1s),
221
- })
222
- ).toThrow();
223
- });
224
-
225
- test('rejects a degraded plan on a different device model', () => {
226
- const preparedPlan = prepareDegradedPlan();
227
- expect(() =>
228
- assertFirmwareUpdatePreparedPlanDeviceIdentity({
229
- preparedPlan,
230
- deviceIdentity: undefined,
231
- bootloaderMode: true,
232
- deviceModel: String(EDeviceType.Mini),
233
- })
234
- ).toThrow();
235
- });
236
-
237
- test('rejects a degraded plan when the live model is unstated', () => {
238
- const preparedPlan = prepareDegradedPlan();
239
- expect(() =>
240
- assertFirmwareUpdatePreparedPlanDeviceIdentity({
241
- preparedPlan,
242
- deviceIdentity: undefined,
243
- bootloaderMode: true,
244
- })
245
- ).toThrow();
246
- });
247
-
248
- test('a live serial equal to the reserved sentinel never matches a degraded plan', () => {
249
- const preparedPlan = prepareDegradedPlan();
250
- expect(() =>
251
- assertFirmwareUpdatePreparedPlanDeviceIdentity({
252
- preparedPlan,
253
- deviceIdentity: 'unavailable',
254
- bootloaderMode: false,
255
- deviceModel: String(EDeviceType.Classic1s),
256
- })
257
- ).toThrow();
258
- });
259
-
260
- test('rejects a real-identity plan when the live device is identity-less in bootloader mode', () => {
261
- const plan = buildDesktopPlan(
262
- {
263
- deviceType: EDeviceType.Classic1s,
264
- serialNo: 'CLA45F0023',
265
- firmwareVersion: '3.19.0',
266
- bootloaderVersion: '2.1.2',
267
- },
268
- { firmwareStatus: 'outdated' }
269
- );
270
- const preparedPlan = prepareFirmwareUpdatePlan({
271
- plan,
272
- leaseRef: 'fwlease:00000000-0000-4000-8000-000000000002',
273
- artifacts: [
274
- {
275
- artifactId: 'firmware',
276
- artifact: {
277
- artifactRef: `fw:${FIRMWARE_SHA256}`,
278
- size: 4,
279
- sha256: FIRMWARE_SHA256,
280
- },
281
- },
282
- ],
283
- });
284
- expect(() =>
285
- assertFirmwareUpdatePreparedPlanDeviceIdentity({
286
- preparedPlan,
287
- deviceIdentity: undefined,
288
- bootloaderMode: true,
289
- deviceModel: String(EDeviceType.Classic1s),
290
- })
291
- ).toThrow();
292
- });
293
- });
294
- });