@onekeyfe/hd-core 1.2.0-alpha.95 → 1.2.0-alpha.97

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 (89) hide show
  1. package/__tests__/check-all-firmware-release-protocol-v2.test.ts +84 -404
  2. package/__tests__/firmware-update/device-update-bootloader.test.ts +2 -6
  3. package/__tests__/firmware-update/firmware-host-binding.test.ts +0 -9
  4. package/__tests__/firmware-update/firmware-update-bootloader-poll.test.ts +112 -0
  5. package/__tests__/firmware-update/firmware-update-plan.test.ts +70 -131
  6. package/__tests__/firmware-update/firmware-update-prepared-plan.test.ts +1 -53
  7. package/__tests__/protocol-v2-resources.test.ts +232 -148
  8. package/__tests__/protocol-v2.test.ts +517 -1106
  9. package/dist/api/CheckAllFirmwareRelease.d.ts +3 -2
  10. package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
  11. package/dist/api/CheckBLEFirmwareRelease.d.ts +2 -3
  12. package/dist/api/CheckBLEFirmwareRelease.d.ts.map +1 -1
  13. package/dist/api/CheckBootloaderRelease.d.ts +1 -2
  14. package/dist/api/CheckBootloaderRelease.d.ts.map +1 -1
  15. package/dist/api/CheckFirmwareRelease.d.ts +2 -3
  16. package/dist/api/CheckFirmwareRelease.d.ts.map +1 -1
  17. package/dist/api/FirmwareUpdateV2.d.ts +0 -1
  18. package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
  19. package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
  20. package/dist/api/FirmwareUpdateV4.d.ts +8 -6
  21. package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
  22. package/dist/api/UploadPortfolio.d.ts.map +1 -1
  23. package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
  24. package/dist/api/firmware/FirmwareHostBinding.d.ts +1 -1
  25. package/dist/api/firmware/FirmwareHostBinding.d.ts.map +1 -1
  26. package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
  27. package/dist/api/firmware/FirmwareUpdatePlan.d.ts +1 -48
  28. package/dist/api/firmware/FirmwareUpdatePlan.d.ts.map +1 -1
  29. package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts.map +1 -1
  30. package/dist/api/firmware/getBinary.d.ts +1 -0
  31. package/dist/api/firmware/getBinary.d.ts.map +1 -1
  32. package/dist/data-manager/DataManager.d.ts +3 -4
  33. package/dist/data-manager/DataManager.d.ts.map +1 -1
  34. package/dist/index.d.ts +111 -103
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +849 -1301
  37. package/dist/protocols/protocol-v2/resources.d.ts +28 -10
  38. package/dist/protocols/protocol-v2/resources.d.ts.map +1 -1
  39. package/dist/types/api/checkAllFirmwareRelease.d.ts +8 -20
  40. package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
  41. package/dist/types/api/checkBLEFirmwareRelease.d.ts +13 -2
  42. package/dist/types/api/checkBLEFirmwareRelease.d.ts.map +1 -1
  43. package/dist/types/api/checkBootloaderRelease.d.ts +6 -2
  44. package/dist/types/api/checkBootloaderRelease.d.ts.map +1 -1
  45. package/dist/types/api/checkFirmwareRelease.d.ts +13 -2
  46. package/dist/types/api/checkFirmwareRelease.d.ts.map +1 -1
  47. package/dist/types/api/checkFirmwareTypeAvailable.d.ts +2 -2
  48. package/dist/types/api/checkFirmwareTypeAvailable.d.ts.map +1 -1
  49. package/dist/types/api/export.d.ts +1 -1
  50. package/dist/types/api/export.d.ts.map +1 -1
  51. package/dist/types/api/firmwareUpdate.d.ts +11 -3
  52. package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
  53. package/dist/types/settings.d.ts +36 -35
  54. package/dist/types/settings.d.ts.map +1 -1
  55. package/package.json +4 -4
  56. package/src/api/CheckAllFirmwareRelease.ts +80 -108
  57. package/src/api/CheckBLEFirmwareRelease.ts +5 -37
  58. package/src/api/CheckBootloaderRelease.ts +3 -35
  59. package/src/api/CheckFirmwareRelease.ts +7 -35
  60. package/src/api/FirmwareUpdateV2.ts +3 -15
  61. package/src/api/FirmwareUpdateV3.ts +6 -13
  62. package/src/api/FirmwareUpdateV4.ts +407 -824
  63. package/src/api/UploadPortfolio.ts +0 -18
  64. package/src/api/device/DeviceUpdateBootloader.ts +5 -26
  65. package/src/api/firmware/FirmwareHostBinding.ts +3 -16
  66. package/src/api/firmware/FirmwareUpdateBaseMethod.ts +2 -0
  67. package/src/api/firmware/FirmwareUpdatePlan.ts +88 -226
  68. package/src/api/firmware/FirmwareUpdatePreparedPlan.ts +3 -10
  69. package/src/data-manager/DataManager.ts +19 -35
  70. package/src/index.ts +0 -10
  71. package/src/protocols/protocol-v2/resources.ts +341 -157
  72. package/src/types/api/checkAllFirmwareRelease.ts +12 -27
  73. package/src/types/api/checkBLEFirmwareRelease.ts +13 -4
  74. package/src/types/api/checkBootloaderRelease.ts +6 -2
  75. package/src/types/api/checkFirmwareRelease.ts +13 -2
  76. package/src/types/api/checkFirmwareTypeAvailable.ts +2 -2
  77. package/src/types/api/export.ts +1 -6
  78. package/src/types/api/firmwareUpdate.ts +16 -10
  79. package/src/types/settings.ts +61 -35
  80. package/src/utils/deviceFeaturesUtils.ts +2 -2
  81. package/__tests__/check-firmware-release-protocol-v2.test.ts +0 -199
  82. package/__tests__/firmware-memory-host.test.ts +0 -112
  83. package/__tests__/firmware-update/firmware-prepared-host-digest.test.ts +0 -448
  84. package/dist/api/firmware/FirmwareMemoryHost.d.ts +0 -22
  85. package/dist/api/firmware/FirmwareMemoryHost.d.ts.map +0 -1
  86. package/dist/api/firmware/protocolV2Release.d.ts +0 -33
  87. package/dist/api/firmware/protocolV2Release.d.ts.map +0 -1
  88. package/src/api/firmware/FirmwareMemoryHost.ts +0 -142
  89. package/src/api/firmware/protocolV2Release.ts +0 -168
@@ -1,168 +0,0 @@
1
- import { EFirmwareType, ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared';
2
-
3
- import { DataManager } from '../../data-manager';
4
-
5
- import type { EDeviceType } from '@onekeyfe/hd-shared';
6
- import type { Device } from '../../device/Device';
7
- import type {
8
- DeviceState,
9
- Features,
10
- IFirmwareReleaseInfo,
11
- IProtocolV2FirmwareComponentTarget,
12
- } from '../../types';
13
- import type {
14
- FirmwareReleaseCheckResult,
15
- ProtocolV2ComponentReleaseInfo,
16
- ProtocolV2FirmwareReleaseStatus,
17
- } from '../../types/api/checkAllFirmwareRelease';
18
- import type { ProtocolV2FirmwareReleasePlan } from '../CheckAllFirmwareRelease';
19
-
20
- export const PROTOCOL_V2_MAIN_FIRMWARE_TARGETS: readonly IProtocolV2FirmwareComponentTarget[] = [
21
- 'APPLICATION_P1',
22
- 'APPLICATION_P2',
23
- 'SE01',
24
- 'SE02',
25
- 'SE03',
26
- 'SE04',
27
- ];
28
-
29
- export const PROTOCOL_V2_BLE_TARGETS: readonly IProtocolV2FirmwareComponentTarget[] = [
30
- 'COPROCESSOR',
31
- ];
32
-
33
- export const PROTOCOL_V2_BOOTLOADER_TARGETS: readonly IProtocolV2FirmwareComponentTarget[] = [
34
- 'BOOTLOADER',
35
- ];
36
-
37
- export type ProtocolV2FirmwareReleaseContext = {
38
- state: Omit<DeviceState, 'identity'> & {
39
- identity: Omit<DeviceState['identity'], 'deviceType'> & {
40
- deviceType: EDeviceType.Pro2 | EDeviceType.Neo;
41
- };
42
- };
43
- features: Features;
44
- firmwareType: EFirmwareType;
45
- release: IFirmwareReleaseInfo | undefined;
46
- };
47
-
48
- export async function loadProtocolV2FirmwareReleaseContext({
49
- device,
50
- firmwareType: firmwareTypeParam,
51
- checkFirmwareHash = false,
52
- methodName,
53
- }: {
54
- device: Device;
55
- firmwareType?: EFirmwareType;
56
- checkFirmwareHash?: boolean;
57
- methodName: string;
58
- }): Promise<ProtocolV2FirmwareReleaseContext> {
59
- const state = await device.getDeviceState({
60
- refreshSections: checkFirmwareHash
61
- ? ['identity', 'versions', 'verification']
62
- : ['identity', 'versions'],
63
- });
64
- if (state.identity.deviceType !== 'pro2' && state.identity.deviceType !== 'neo') {
65
- throw ERRORS.TypedError(
66
- HardwareErrorCode.DeviceNotSupportMethod,
67
- `${methodName} requires a Pro2 or Neo device for Protocol V2`
68
- );
69
- }
70
-
71
- const { features } = device;
72
- if (!features) {
73
- throw ERRORS.TypedError(
74
- HardwareErrorCode.RuntimeError,
75
- `${methodName} requires initialized device features`
76
- );
77
- }
78
-
79
- const firmwareType = firmwareTypeParam ?? state.identity.firmwareType ?? EFirmwareType.Universal;
80
- return {
81
- state: state as ProtocolV2FirmwareReleaseContext['state'],
82
- features,
83
- firmwareType,
84
- release: DataManager.getFirmwareLatestRelease(features, firmwareType),
85
- };
86
- }
87
-
88
- export function summarizeProtocolV2FirmwareRelease(
89
- plan: ProtocolV2FirmwareReleasePlan,
90
- componentTargets: readonly IProtocolV2FirmwareComponentTarget[]
91
- ): ProtocolV2FirmwareReleasePlan {
92
- const targetSet = new Set<IProtocolV2FirmwareComponentTarget>(componentTargets);
93
- const components = plan.components.filter(component => targetSet.has(component.componentTarget));
94
- const targetsToUpdate = Array.from(
95
- new Set(
96
- components.flatMap(component =>
97
- component.status === 'outdated' && component.updateTarget ? [component.updateTarget] : []
98
- )
99
- )
100
- );
101
- const hasUpgrade = targetsToUpdate.length > 0;
102
- const required = !!plan.release?.required && hasUpgrade;
103
- let status: ProtocolV2FirmwareReleaseStatus = 'valid';
104
- if (!plan.release || components.length === 0) {
105
- status = 'unavailable';
106
- } else if (required) {
107
- status = 'required';
108
- } else if (hasUpgrade) {
109
- status = 'outdated';
110
- } else if (components.some(component => component.status === 'unknown')) {
111
- status = 'unknown';
112
- } else if (components.every(component => component.status === 'unsupported')) {
113
- status = 'unavailable';
114
- }
115
-
116
- return {
117
- ...plan,
118
- status,
119
- hasUpgrade,
120
- required,
121
- components,
122
- targetsToUpdate,
123
- };
124
- }
125
-
126
- export function toProtocolV2FirmwareReleaseInfo({
127
- plan,
128
- state,
129
- release,
130
- }: {
131
- plan: ProtocolV2FirmwareReleasePlan;
132
- state: DeviceState;
133
- release: FirmwareReleaseCheckResult['release'];
134
- }): FirmwareReleaseCheckResult {
135
- return {
136
- shouldUpdate: plan.hasUpgrade,
137
- status: plan.status === 'unavailable' ? 'unknown' : plan.status,
138
- // Protocol V2 components share package-set release notes. The optional
139
- // bootloaderChangelog field belongs to the legacy Protocol V1 release model.
140
- changelog: plan.release ? [plan.release.changelog] : [],
141
- release,
142
- bootloaderMode: state.status.mode === 'bootloader' || state.status.mode === 'romloader',
143
- };
144
- }
145
-
146
- export function getProtocolV2ComponentReleaseInfo(
147
- plan: ProtocolV2FirmwareReleasePlan,
148
- componentTarget: IProtocolV2FirmwareComponentTarget
149
- ): ProtocolV2ComponentReleaseInfo | undefined {
150
- const componentRelease = plan.components.find(
151
- component => component.componentTarget === componentTarget
152
- );
153
- if (!componentRelease || !plan.release) {
154
- return undefined;
155
- }
156
- const component = plan.release.components?.[componentRelease.configKey];
157
- if (!component) {
158
- return undefined;
159
- }
160
- return {
161
- ...component,
162
- protocol: 'V2',
163
- configKey: componentRelease.configKey,
164
- componentTarget,
165
- required: plan.release.required,
166
- changelog: plan.release.changelog,
167
- };
168
- }