@ledgerhq/device-core 0.6.6-nightly.6 → 0.6.6

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 (174) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +11 -43
  3. package/lib/capabilities/isCustomLockScreenSupported.test.d.ts +2 -0
  4. package/lib/capabilities/isCustomLockScreenSupported.test.d.ts.map +1 -0
  5. package/lib/capabilities/isCustomLockScreenSupported.test.js +26 -0
  6. package/lib/capabilities/isCustomLockScreenSupported.test.js.map +1 -0
  7. package/lib/capabilities/isEditDeviceNameSupported.test.d.ts +2 -0
  8. package/lib/capabilities/isEditDeviceNameSupported.test.d.ts.map +1 -0
  9. package/lib/capabilities/isEditDeviceNameSupported.test.js +25 -0
  10. package/lib/capabilities/isEditDeviceNameSupported.test.js.map +1 -0
  11. package/lib/capabilities/isSyncOnboardingSupported.test.d.ts +2 -0
  12. package/lib/capabilities/isSyncOnboardingSupported.test.d.ts.map +1 -0
  13. package/lib/capabilities/isSyncOnboardingSupported.test.js +18 -0
  14. package/lib/capabilities/isSyncOnboardingSupported.test.js.map +1 -0
  15. package/lib/commands/entities/AppStorageInfo.test.d.ts +2 -0
  16. package/lib/commands/entities/AppStorageInfo.test.d.ts.map +1 -0
  17. package/lib/commands/entities/AppStorageInfo.test.js +48 -0
  18. package/lib/commands/entities/AppStorageInfo.test.js.map +1 -0
  19. package/lib/commands/use-cases/app-backup/backupAppStorage.test.d.ts +2 -0
  20. package/lib/commands/use-cases/app-backup/backupAppStorage.test.d.ts.map +1 -0
  21. package/lib/commands/use-cases/app-backup/backupAppStorage.test.js +47 -0
  22. package/lib/commands/use-cases/app-backup/backupAppStorage.test.js.map +1 -0
  23. package/lib/commands/use-cases/app-backup/getAppStorageInfo.test.d.ts +2 -0
  24. package/lib/commands/use-cases/app-backup/getAppStorageInfo.test.d.ts.map +1 -0
  25. package/lib/commands/use-cases/app-backup/getAppStorageInfo.test.js +58 -0
  26. package/lib/commands/use-cases/app-backup/getAppStorageInfo.test.js.map +1 -0
  27. package/lib/commands/use-cases/app-backup/restoreAppStorage.test.d.ts +2 -0
  28. package/lib/commands/use-cases/app-backup/restoreAppStorage.test.d.ts.map +1 -0
  29. package/lib/commands/use-cases/app-backup/restoreAppStorage.test.js +51 -0
  30. package/lib/commands/use-cases/app-backup/restoreAppStorage.test.js.map +1 -0
  31. package/lib/commands/use-cases/app-backup/restoreAppStorageCommit.test.d.ts +2 -0
  32. package/lib/commands/use-cases/app-backup/restoreAppStorageCommit.test.d.ts.map +1 -0
  33. package/lib/commands/use-cases/app-backup/restoreAppStorageCommit.test.js +40 -0
  34. package/lib/commands/use-cases/app-backup/restoreAppStorageCommit.test.js.map +1 -0
  35. package/lib/commands/use-cases/app-backup/restoreAppStorageInit.test.d.ts +2 -0
  36. package/lib/commands/use-cases/app-backup/restoreAppStorageInit.test.d.ts.map +1 -0
  37. package/lib/commands/use-cases/app-backup/restoreAppStorageInit.test.js +55 -0
  38. package/lib/commands/use-cases/app-backup/restoreAppStorageInit.test.js.map +1 -0
  39. package/lib/commands/use-cases/consent/reinstallConfigurationConsent.test.d.ts +2 -0
  40. package/lib/commands/use-cases/consent/reinstallConfigurationConsent.test.d.ts.map +1 -0
  41. package/lib/commands/use-cases/consent/reinstallConfigurationConsent.test.js +39 -0
  42. package/lib/commands/use-cases/consent/reinstallConfigurationConsent.test.js.map +1 -0
  43. package/lib/commands/use-cases/isBootloaderVersionSupported.test.d.ts +2 -0
  44. package/lib/commands/use-cases/isBootloaderVersionSupported.test.d.ts.map +1 -0
  45. package/lib/commands/use-cases/isBootloaderVersionSupported.test.js +63 -0
  46. package/lib/commands/use-cases/isBootloaderVersionSupported.test.js.map +1 -0
  47. package/lib/commands/use-cases/isCharonSupported.test.d.ts +2 -0
  48. package/lib/commands/use-cases/isCharonSupported.test.d.ts.map +1 -0
  49. package/lib/commands/use-cases/isCharonSupported.test.js +46 -0
  50. package/lib/commands/use-cases/isCharonSupported.test.js.map +1 -0
  51. package/lib/commands/use-cases/isDeviceLocalizationSupported.test.d.ts +2 -0
  52. package/lib/commands/use-cases/isDeviceLocalizationSupported.test.d.ts.map +1 -0
  53. package/lib/commands/use-cases/isDeviceLocalizationSupported.test.js +55 -0
  54. package/lib/commands/use-cases/isDeviceLocalizationSupported.test.js.map +1 -0
  55. package/lib/commands/use-cases/isHardwareVersionSupported.test.d.ts +2 -0
  56. package/lib/commands/use-cases/isHardwareVersionSupported.test.d.ts.map +1 -0
  57. package/lib/commands/use-cases/isHardwareVersionSupported.test.js +36 -0
  58. package/lib/commands/use-cases/isHardwareVersionSupported.test.js.map +1 -0
  59. package/lib/commands/use-cases/isRecoverSupported.test.d.ts +2 -0
  60. package/lib/commands/use-cases/isRecoverSupported.test.d.ts.map +1 -0
  61. package/lib/commands/use-cases/isRecoverSupported.test.js +54 -0
  62. package/lib/commands/use-cases/isRecoverSupported.test.js.map +1 -0
  63. package/lib/commands/use-cases/parseGetDeviceNameResponse.test.d.ts +2 -0
  64. package/lib/commands/use-cases/parseGetDeviceNameResponse.test.d.ts.map +1 -0
  65. package/lib/commands/use-cases/parseGetDeviceNameResponse.test.js +27 -0
  66. package/lib/commands/use-cases/parseGetDeviceNameResponse.test.js.map +1 -0
  67. package/lib/commands/use-cases/parseGetVersionResponse.test.d.ts +2 -0
  68. package/lib/commands/use-cases/parseGetVersionResponse.test.d.ts.map +1 -0
  69. package/lib/commands/use-cases/parseGetVersionResponse.test.js +145 -0
  70. package/lib/commands/use-cases/parseGetVersionResponse.test.js.map +1 -0
  71. package/lib/firmwareUpdate/shouldForceFirmwareUpdate.test.d.ts +2 -0
  72. package/lib/firmwareUpdate/shouldForceFirmwareUpdate.test.d.ts.map +1 -0
  73. package/lib/firmwareUpdate/shouldForceFirmwareUpdate.test.js +69 -0
  74. package/lib/firmwareUpdate/shouldForceFirmwareUpdate.test.js.map +1 -0
  75. package/lib/index.d.ts +0 -1
  76. package/lib/index.d.ts.map +1 -1
  77. package/lib/index.js.map +1 -1
  78. package/lib/managerApi/repositories/HttpManagerApiRepository.test.d.ts +2 -0
  79. package/lib/managerApi/repositories/HttpManagerApiRepository.test.d.ts.map +1 -0
  80. package/lib/managerApi/repositories/HttpManagerApiRepository.test.js +390 -0
  81. package/lib/managerApi/repositories/HttpManagerApiRepository.test.js.map +1 -0
  82. package/lib/managerApi/use-cases/getAppsCatalogForDevice.d.ts +1 -1
  83. package/lib/managerApi/use-cases/getAppsCatalogForDevice.d.ts.map +1 -1
  84. package/lib/managerApi/use-cases/getLatestFirmwareForDevice.test.d.ts +2 -0
  85. package/lib/managerApi/use-cases/getLatestFirmwareForDevice.test.d.ts.map +1 -0
  86. package/lib/managerApi/use-cases/getLatestFirmwareForDevice.test.js +169 -0
  87. package/lib/managerApi/use-cases/getLatestFirmwareForDevice.test.js.map +1 -0
  88. package/lib-es/capabilities/isCustomLockScreenSupported.test.d.ts +2 -0
  89. package/lib-es/capabilities/isCustomLockScreenSupported.test.d.ts.map +1 -0
  90. package/lib-es/capabilities/isCustomLockScreenSupported.test.js +24 -0
  91. package/lib-es/capabilities/isCustomLockScreenSupported.test.js.map +1 -0
  92. package/lib-es/capabilities/isEditDeviceNameSupported.test.d.ts +2 -0
  93. package/lib-es/capabilities/isEditDeviceNameSupported.test.d.ts.map +1 -0
  94. package/lib-es/capabilities/isEditDeviceNameSupported.test.js +23 -0
  95. package/lib-es/capabilities/isEditDeviceNameSupported.test.js.map +1 -0
  96. package/lib-es/capabilities/isSyncOnboardingSupported.test.d.ts +2 -0
  97. package/lib-es/capabilities/isSyncOnboardingSupported.test.d.ts.map +1 -0
  98. package/lib-es/capabilities/isSyncOnboardingSupported.test.js +16 -0
  99. package/lib-es/capabilities/isSyncOnboardingSupported.test.js.map +1 -0
  100. package/lib-es/commands/entities/AppStorageInfo.test.d.ts +2 -0
  101. package/lib-es/commands/entities/AppStorageInfo.test.d.ts.map +1 -0
  102. package/lib-es/commands/entities/AppStorageInfo.test.js +46 -0
  103. package/lib-es/commands/entities/AppStorageInfo.test.js.map +1 -0
  104. package/lib-es/commands/use-cases/app-backup/backupAppStorage.test.d.ts +2 -0
  105. package/lib-es/commands/use-cases/app-backup/backupAppStorage.test.d.ts.map +1 -0
  106. package/lib-es/commands/use-cases/app-backup/backupAppStorage.test.js +45 -0
  107. package/lib-es/commands/use-cases/app-backup/backupAppStorage.test.js.map +1 -0
  108. package/lib-es/commands/use-cases/app-backup/getAppStorageInfo.test.d.ts +2 -0
  109. package/lib-es/commands/use-cases/app-backup/getAppStorageInfo.test.d.ts.map +1 -0
  110. package/lib-es/commands/use-cases/app-backup/getAppStorageInfo.test.js +56 -0
  111. package/lib-es/commands/use-cases/app-backup/getAppStorageInfo.test.js.map +1 -0
  112. package/lib-es/commands/use-cases/app-backup/restoreAppStorage.test.d.ts +2 -0
  113. package/lib-es/commands/use-cases/app-backup/restoreAppStorage.test.d.ts.map +1 -0
  114. package/lib-es/commands/use-cases/app-backup/restoreAppStorage.test.js +49 -0
  115. package/lib-es/commands/use-cases/app-backup/restoreAppStorage.test.js.map +1 -0
  116. package/lib-es/commands/use-cases/app-backup/restoreAppStorageCommit.test.d.ts +2 -0
  117. package/lib-es/commands/use-cases/app-backup/restoreAppStorageCommit.test.d.ts.map +1 -0
  118. package/lib-es/commands/use-cases/app-backup/restoreAppStorageCommit.test.js +38 -0
  119. package/lib-es/commands/use-cases/app-backup/restoreAppStorageCommit.test.js.map +1 -0
  120. package/lib-es/commands/use-cases/app-backup/restoreAppStorageInit.test.d.ts +2 -0
  121. package/lib-es/commands/use-cases/app-backup/restoreAppStorageInit.test.d.ts.map +1 -0
  122. package/lib-es/commands/use-cases/app-backup/restoreAppStorageInit.test.js +53 -0
  123. package/lib-es/commands/use-cases/app-backup/restoreAppStorageInit.test.js.map +1 -0
  124. package/lib-es/commands/use-cases/consent/reinstallConfigurationConsent.test.d.ts +2 -0
  125. package/lib-es/commands/use-cases/consent/reinstallConfigurationConsent.test.d.ts.map +1 -0
  126. package/lib-es/commands/use-cases/consent/reinstallConfigurationConsent.test.js +37 -0
  127. package/lib-es/commands/use-cases/consent/reinstallConfigurationConsent.test.js.map +1 -0
  128. package/lib-es/commands/use-cases/isBootloaderVersionSupported.test.d.ts +2 -0
  129. package/lib-es/commands/use-cases/isBootloaderVersionSupported.test.d.ts.map +1 -0
  130. package/lib-es/commands/use-cases/isBootloaderVersionSupported.test.js +61 -0
  131. package/lib-es/commands/use-cases/isBootloaderVersionSupported.test.js.map +1 -0
  132. package/lib-es/commands/use-cases/isCharonSupported.test.d.ts +2 -0
  133. package/lib-es/commands/use-cases/isCharonSupported.test.d.ts.map +1 -0
  134. package/lib-es/commands/use-cases/isCharonSupported.test.js +44 -0
  135. package/lib-es/commands/use-cases/isCharonSupported.test.js.map +1 -0
  136. package/lib-es/commands/use-cases/isDeviceLocalizationSupported.test.d.ts +2 -0
  137. package/lib-es/commands/use-cases/isDeviceLocalizationSupported.test.d.ts.map +1 -0
  138. package/lib-es/commands/use-cases/isDeviceLocalizationSupported.test.js +53 -0
  139. package/lib-es/commands/use-cases/isDeviceLocalizationSupported.test.js.map +1 -0
  140. package/lib-es/commands/use-cases/isHardwareVersionSupported.test.d.ts +2 -0
  141. package/lib-es/commands/use-cases/isHardwareVersionSupported.test.d.ts.map +1 -0
  142. package/lib-es/commands/use-cases/isHardwareVersionSupported.test.js +34 -0
  143. package/lib-es/commands/use-cases/isHardwareVersionSupported.test.js.map +1 -0
  144. package/lib-es/commands/use-cases/isRecoverSupported.test.d.ts +2 -0
  145. package/lib-es/commands/use-cases/isRecoverSupported.test.d.ts.map +1 -0
  146. package/lib-es/commands/use-cases/isRecoverSupported.test.js +52 -0
  147. package/lib-es/commands/use-cases/isRecoverSupported.test.js.map +1 -0
  148. package/lib-es/commands/use-cases/parseGetDeviceNameResponse.test.d.ts +2 -0
  149. package/lib-es/commands/use-cases/parseGetDeviceNameResponse.test.d.ts.map +1 -0
  150. package/lib-es/commands/use-cases/parseGetDeviceNameResponse.test.js +25 -0
  151. package/lib-es/commands/use-cases/parseGetDeviceNameResponse.test.js.map +1 -0
  152. package/lib-es/commands/use-cases/parseGetVersionResponse.test.d.ts +2 -0
  153. package/lib-es/commands/use-cases/parseGetVersionResponse.test.d.ts.map +1 -0
  154. package/lib-es/commands/use-cases/parseGetVersionResponse.test.js +143 -0
  155. package/lib-es/commands/use-cases/parseGetVersionResponse.test.js.map +1 -0
  156. package/lib-es/firmwareUpdate/shouldForceFirmwareUpdate.test.d.ts +2 -0
  157. package/lib-es/firmwareUpdate/shouldForceFirmwareUpdate.test.d.ts.map +1 -0
  158. package/lib-es/firmwareUpdate/shouldForceFirmwareUpdate.test.js +67 -0
  159. package/lib-es/firmwareUpdate/shouldForceFirmwareUpdate.test.js.map +1 -0
  160. package/lib-es/index.d.ts +0 -1
  161. package/lib-es/index.d.ts.map +1 -1
  162. package/lib-es/index.js.map +1 -1
  163. package/lib-es/managerApi/repositories/HttpManagerApiRepository.test.d.ts +2 -0
  164. package/lib-es/managerApi/repositories/HttpManagerApiRepository.test.d.ts.map +1 -0
  165. package/lib-es/managerApi/repositories/HttpManagerApiRepository.test.js +388 -0
  166. package/lib-es/managerApi/repositories/HttpManagerApiRepository.test.js.map +1 -0
  167. package/lib-es/managerApi/use-cases/getAppsCatalogForDevice.d.ts +1 -1
  168. package/lib-es/managerApi/use-cases/getAppsCatalogForDevice.d.ts.map +1 -1
  169. package/lib-es/managerApi/use-cases/getLatestFirmwareForDevice.test.d.ts +2 -0
  170. package/lib-es/managerApi/use-cases/getLatestFirmwareForDevice.test.d.ts.map +1 -0
  171. package/lib-es/managerApi/use-cases/getLatestFirmwareForDevice.test.js +167 -0
  172. package/lib-es/managerApi/use-cases/getLatestFirmwareForDevice.test.js.map +1 -0
  173. package/package.json +6 -6
  174. package/src/index.ts +0 -1
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const getLatestFirmwareForDevice_1 = require("./getLatestFirmwareForDevice");
4
+ const errors_1 = require("@ledgerhq/errors");
5
+ const StubManagerApiRepository_1 = require("../repositories/StubManagerApiRepository");
6
+ const aDeviceInfo_1 = require("../entities/mocks/aDeviceInfo");
7
+ jest.mock("../repositories/ManagerApiRepository");
8
+ describe("getLatestFirmwareForDevice", () => {
9
+ let mockedManagerApiRepository;
10
+ beforeEach(() => {
11
+ // Clear the methods we are using in our test
12
+ jest.resetAllMocks();
13
+ mockedManagerApiRepository = new StubManagerApiRepository_1.StubManagerApiRepository();
14
+ });
15
+ it("throws an Error for unknown mcu", async () => {
16
+ // given
17
+ // Using a fixture builder - we could create that for all our entities
18
+ const deviceInfo = (0, aDeviceInfo_1.aDeviceInfoBuilder)({ mcuVersion: "42", isOSU: true });
19
+ jest.spyOn(mockedManagerApiRepository, "fetchMcus").mockResolvedValue([]);
20
+ jest
21
+ .spyOn(mockedManagerApiRepository, "getDeviceVersion")
22
+ .mockResolvedValue({ id: 42 });
23
+ jest.spyOn(mockedManagerApiRepository, "getCurrentOSU").mockResolvedValue({});
24
+ const params = {
25
+ deviceInfo,
26
+ providerId: 42,
27
+ userId: "",
28
+ managerApiRepository: mockedManagerApiRepository,
29
+ };
30
+ // when
31
+ const response = (0, getLatestFirmwareForDevice_1.getLatestFirmwareForDevice)(params);
32
+ // then
33
+ expect(response).rejects.toBeInstanceOf(errors_1.UnknownMCU);
34
+ });
35
+ it("should return an update without flashing mcu", async () => {
36
+ // Given
37
+ const deviceInfo = (0, aDeviceInfo_1.aDeviceInfoBuilder)({ isOSU: false, mcuVersion: "42" });
38
+ jest
39
+ .spyOn(mockedManagerApiRepository, "getDeviceVersion")
40
+ .mockResolvedValue({ id: 42 });
41
+ jest
42
+ .spyOn(mockedManagerApiRepository, "fetchMcus")
43
+ .mockResolvedValue(Promise.resolve([{ name: "42", id: 42 }]));
44
+ jest
45
+ .spyOn(mockedManagerApiRepository, "getCurrentFirmware")
46
+ .mockResolvedValue({ se_firmware: 21 });
47
+ jest
48
+ .spyOn(mockedManagerApiRepository, "fetchLatestFirmware")
49
+ .mockResolvedValue({});
50
+ jest
51
+ .spyOn(mockedManagerApiRepository, "getFinalFirmwareById")
52
+ .mockResolvedValue({ mcu_versions: [42] });
53
+ const params = {
54
+ deviceInfo,
55
+ providerId: 42,
56
+ userId: "",
57
+ managerApiRepository: mockedManagerApiRepository,
58
+ };
59
+ // When
60
+ const result = await (0, getLatestFirmwareForDevice_1.getLatestFirmwareForDevice)(params);
61
+ // Then
62
+ expect(result).toMatchObject({ shouldFlashMCU: false });
63
+ });
64
+ it("shouldn't return an available update when no mcu found", async () => {
65
+ // Given
66
+ const deviceInfo = (0, aDeviceInfo_1.aDeviceInfoBuilder)({ isOSU: false, mcuVersion: "42" });
67
+ jest
68
+ .spyOn(mockedManagerApiRepository, "getDeviceVersion")
69
+ .mockResolvedValue({ id: 42 });
70
+ jest
71
+ .spyOn(mockedManagerApiRepository, "fetchMcus")
72
+ .mockResolvedValue(Promise.resolve([{ name: "42", id: 42 }]));
73
+ jest
74
+ .spyOn(mockedManagerApiRepository, "getCurrentFirmware")
75
+ .mockResolvedValue({ id: 21 });
76
+ jest.spyOn(mockedManagerApiRepository, "fetchLatestFirmware").mockResolvedValue(null);
77
+ const params = {
78
+ deviceInfo,
79
+ providerId: 42,
80
+ userId: "",
81
+ managerApiRepository: mockedManagerApiRepository,
82
+ };
83
+ // When
84
+ const result = await (0, getLatestFirmwareForDevice_1.getLatestFirmwareForDevice)(params);
85
+ // Then
86
+ expect(result).toBeNull();
87
+ });
88
+ it("should return an available OS update", async () => {
89
+ // Given
90
+ const deviceInfo = (0, aDeviceInfo_1.aDeviceInfoBuilder)({ isOSU: false, mcuVersion: "42" });
91
+ jest
92
+ .spyOn(mockedManagerApiRepository, "getDeviceVersion")
93
+ .mockResolvedValue({ id: 42 });
94
+ jest
95
+ .spyOn(mockedManagerApiRepository, "fetchMcus")
96
+ .mockResolvedValue(Promise.resolve([{ name: "42", id: 42 }]));
97
+ jest
98
+ .spyOn(mockedManagerApiRepository, "getCurrentFirmware")
99
+ .mockResolvedValue({ se_firmware: 21 });
100
+ jest
101
+ .spyOn(mockedManagerApiRepository, "fetchLatestFirmware")
102
+ .mockResolvedValue({});
103
+ jest.spyOn(mockedManagerApiRepository, "getFinalFirmwareById").mockResolvedValue({
104
+ name: "VERSION_UPDATE_TEST",
105
+ mcu_versions: [42],
106
+ });
107
+ const params = {
108
+ deviceInfo,
109
+ providerId: 42,
110
+ userId: "",
111
+ managerApiRepository: mockedManagerApiRepository,
112
+ };
113
+ // When
114
+ const result = await (0, getLatestFirmwareForDevice_1.getLatestFirmwareForDevice)(params);
115
+ // Then
116
+ expect(result).toHaveProperty(["final"]);
117
+ expect(result).toHaveProperty(["osu"]);
118
+ expect(result).toHaveProperty(["shouldFlashMCU"]);
119
+ });
120
+ test("should return an update with device isOSU true", async () => {
121
+ const deviceInfo = (0, aDeviceInfo_1.aDeviceInfoBuilder)({ mcuVersion: "42" });
122
+ jest
123
+ .spyOn(mockedManagerApiRepository, "fetchMcus")
124
+ .mockResolvedValue(Promise.resolve([{ name: "42", id: 42 }]));
125
+ jest
126
+ .spyOn(mockedManagerApiRepository, "getDeviceVersion")
127
+ .mockResolvedValue({ id: 42 });
128
+ jest.spyOn(mockedManagerApiRepository, "getCurrentOSU").mockResolvedValue({});
129
+ jest.spyOn(mockedManagerApiRepository, "getFinalFirmwareById").mockResolvedValue({
130
+ name: "VERSION_UPDATE_TEST",
131
+ mcu_versions: [42],
132
+ });
133
+ const params = {
134
+ deviceInfo,
135
+ providerId: 42,
136
+ userId: "",
137
+ managerApiRepository: mockedManagerApiRepository,
138
+ };
139
+ // When
140
+ const result = await (0, getLatestFirmwareForDevice_1.getLatestFirmwareForDevice)(params);
141
+ // Then
142
+ expect(result).toHaveProperty(["final"]);
143
+ expect(result).toHaveProperty(["osu"]);
144
+ expect(result).toHaveProperty(["shouldFlashMCU"]);
145
+ });
146
+ test("shouldn't return an update with device isOSU true", async () => {
147
+ const deviceInfo = (0, aDeviceInfo_1.aDeviceInfoBuilder)({ mcuVersion: "42" });
148
+ jest
149
+ .spyOn(mockedManagerApiRepository, "fetchMcus")
150
+ .mockResolvedValue(Promise.resolve([{ name: "42", id: 42 }]));
151
+ jest
152
+ .spyOn(mockedManagerApiRepository, "getDeviceVersion")
153
+ .mockResolvedValue({ id: 42 });
154
+ jest
155
+ .spyOn(mockedManagerApiRepository, "getCurrentOSU")
156
+ .mockResolvedValue(null);
157
+ const params = {
158
+ deviceInfo,
159
+ providerId: 42,
160
+ userId: "",
161
+ managerApiRepository: mockedManagerApiRepository,
162
+ };
163
+ // When
164
+ const result = await (0, getLatestFirmwareForDevice_1.getLatestFirmwareForDevice)(params);
165
+ // Then
166
+ expect(result).toBeNull();
167
+ });
168
+ });
169
+ //# sourceMappingURL=getLatestFirmwareForDevice.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getLatestFirmwareForDevice.test.js","sourceRoot":"","sources":["../../../src/managerApi/use-cases/getLatestFirmwareForDevice.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=isCustomLockScreenSupported.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isCustomLockScreenSupported.test.d.ts","sourceRoot":"","sources":["../../src/capabilities/isCustomLockScreenSupported.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import { DeviceModelId } from "@ledgerhq/devices";
2
+ import { isCustomLockScreenSupported, supportedDeviceModelIds, } from "./isCustomLockScreenSupported";
3
+ describe("isCustomLockScreenSupported", () => {
4
+ it("should return true if custom lock screen is supported", () => {
5
+ expect(isCustomLockScreenSupported(DeviceModelId.stax)).toBe(true);
6
+ expect(isCustomLockScreenSupported(DeviceModelId.europa)).toBe(true);
7
+ });
8
+ it("should return false if custom lock screen is not supported", () => {
9
+ expect(isCustomLockScreenSupported(DeviceModelId.nanoS)).toBe(false);
10
+ expect(isCustomLockScreenSupported(DeviceModelId.nanoSP)).toBe(false);
11
+ expect(isCustomLockScreenSupported(DeviceModelId.nanoX)).toBe(false);
12
+ expect(isCustomLockScreenSupported(DeviceModelId.blue)).toBe(false);
13
+ });
14
+ });
15
+ describe("supportedDeviceModelIds", () => {
16
+ it("should return supported device model ids", () => {
17
+ expect(supportedDeviceModelIds).toEqual([
18
+ DeviceModelId.stax,
19
+ DeviceModelId.europa,
20
+ DeviceModelId.apex,
21
+ ]);
22
+ });
23
+ });
24
+ //# sourceMappingURL=isCustomLockScreenSupported.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isCustomLockScreenSupported.test.js","sourceRoot":"","sources":["../../src/capabilities/isCustomLockScreenSupported.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,+BAA+B,CAAC;AAEvC,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,2BAA2B,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,CAAC,2BAA2B,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,2BAA2B,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrE,MAAM,CAAC,2BAA2B,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtE,MAAM,CAAC,2BAA2B,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrE,MAAM,CAAC,2BAA2B,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,uBAAuB,CAAC,CAAC,OAAO,CAAC;YACtC,aAAa,CAAC,IAAI;YAClB,aAAa,CAAC,MAAM;YACpB,aAAa,CAAC,IAAI;SACnB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=isEditDeviceNameSupported.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isEditDeviceNameSupported.test.d.ts","sourceRoot":"","sources":["../../src/capabilities/isEditDeviceNameSupported.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import { DeviceModelId } from "@ledgerhq/devices";
2
+ import { isEditDeviceNameSupported } from "./isEditDeviceNameSupported";
3
+ const supportedDevices = [
4
+ DeviceModelId.stax,
5
+ DeviceModelId.nanoX,
6
+ DeviceModelId.europa,
7
+ DeviceModelId.nanoSP,
8
+ DeviceModelId.apex,
9
+ ];
10
+ const unsupportedDevices = [DeviceModelId.blue];
11
+ describe("isEditDeviceNameSupported", () => {
12
+ it("should return true for supported devices", () => {
13
+ supportedDevices.forEach((deviceModelId) => {
14
+ expect(isEditDeviceNameSupported(deviceModelId)).toBe(true);
15
+ });
16
+ });
17
+ it("should return false for unsupported devices", () => {
18
+ unsupportedDevices.forEach((deviceModelId) => {
19
+ expect(isEditDeviceNameSupported(deviceModelId)).toBe(false);
20
+ });
21
+ });
22
+ });
23
+ //# sourceMappingURL=isEditDeviceNameSupported.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isEditDeviceNameSupported.test.js","sourceRoot":"","sources":["../../src/capabilities/isEditDeviceNameSupported.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,MAAM,gBAAgB,GAAG;IACvB,aAAa,CAAC,IAAI;IAClB,aAAa,CAAC,KAAK;IACnB,aAAa,CAAC,MAAM;IACpB,aAAa,CAAC,MAAM;IACpB,aAAa,CAAC,IAAI;CACnB,CAAC;AACF,MAAM,kBAAkB,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAEhD,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,gBAAgB,CAAC,OAAO,CAAC,CAAC,aAA4B,EAAE,EAAE;YACxD,MAAM,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,kBAAkB,CAAC,OAAO,CAAC,CAAC,aAA4B,EAAE,EAAE;YAC1D,MAAM,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=isSyncOnboardingSupported.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isSyncOnboardingSupported.test.d.ts","sourceRoot":"","sources":["../../src/capabilities/isSyncOnboardingSupported.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import { DeviceModelId } from "@ledgerhq/devices";
2
+ import { isSyncOnboardingSupported } from "./isSyncOnboardingSupported";
3
+ describe("isSyncOnboardingSupported", () => {
4
+ it("should return true if sync onboarding is supported", () => {
5
+ expect(isSyncOnboardingSupported(DeviceModelId.stax)).toBe(true);
6
+ expect(isSyncOnboardingSupported(DeviceModelId.europa)).toBe(true);
7
+ expect(isSyncOnboardingSupported(DeviceModelId.apex)).toBe(true);
8
+ });
9
+ it("should return false if sync onboarding is not supported", () => {
10
+ expect(isSyncOnboardingSupported(DeviceModelId.nanoS)).toBe(false);
11
+ expect(isSyncOnboardingSupported(DeviceModelId.nanoSP)).toBe(false);
12
+ expect(isSyncOnboardingSupported(DeviceModelId.nanoX)).toBe(false);
13
+ expect(isSyncOnboardingSupported(DeviceModelId.blue)).toBe(false);
14
+ });
15
+ });
16
+ //# sourceMappingURL=isSyncOnboardingSupported.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isSyncOnboardingSupported.test.js","sourceRoot":"","sources":["../../src/capabilities/isSyncOnboardingSupported.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CAAC,yBAAyB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,CAAC,yBAAyB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,CAAC,yBAAyB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,yBAAyB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnE,MAAM,CAAC,yBAAyB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpE,MAAM,CAAC,yBAAyB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnE,MAAM,CAAC,yBAAyB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=AppStorageInfo.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppStorageInfo.test.d.ts","sourceRoot":"","sources":["../../../src/commands/entities/AppStorageInfo.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ import { isAppStorageInfo } from "./AppStorageInfo";
2
+ describe("isAppStorageInfo", () => {
3
+ it("should return true for valid AppStorageInfo object", () => {
4
+ const data = {
5
+ size: 1024,
6
+ dataVersion: "1.0.0",
7
+ hasSettings: true,
8
+ hasData: true,
9
+ hash: "abcd1234",
10
+ };
11
+ expect(isAppStorageInfo(data)).toBe(true);
12
+ });
13
+ it("should return false for non-object input", () => {
14
+ const data = "invalid";
15
+ expect(isAppStorageInfo(data)).toBe(false);
16
+ });
17
+ it("should return false for null input", () => {
18
+ const data = null;
19
+ expect(isAppStorageInfo(data)).toBe(false);
20
+ });
21
+ it("should return false for undefined input", () => {
22
+ const data = undefined;
23
+ expect(isAppStorageInfo(data)).toBe(false);
24
+ });
25
+ it("should return false if missing property", () => {
26
+ const data = {
27
+ // Missing size property
28
+ dataVersion: "1.0.0",
29
+ hasSettings: true,
30
+ hasData: true,
31
+ hash: "abcd1234",
32
+ };
33
+ expect(isAppStorageInfo(data)).toBe(false);
34
+ });
35
+ it("should return false if property type not correct", () => {
36
+ const data = {
37
+ size: 1024,
38
+ dataVersion: "1.0.0",
39
+ hasSettings: "Yes",
40
+ hasData: true,
41
+ hash: "abcd1234",
42
+ };
43
+ expect(isAppStorageInfo(data)).toBe(false);
44
+ });
45
+ });
46
+ //# sourceMappingURL=AppStorageInfo.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppStorageInfo.test.js","sourceRoot":"","sources":["../../../src/commands/entities/AppStorageInfo.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAkB,MAAM,kBAAkB,CAAC;AAEpE,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,IAAI,GAAmB;YAC3B,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,OAAO;YACpB,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,UAAU;SACjB,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,IAAI,GAAY,SAAS,CAAC;QAEhC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,IAAI,GAAY,IAAI,CAAC;QAE3B,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,IAAI,GAAY,SAAS,CAAC;QAEhC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,IAAI,GAAY;YACpB,wBAAwB;YACxB,WAAW,EAAE,OAAO;YACpB,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,UAAU;SACjB,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,IAAI,GAAY;YACpB,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,OAAO;YACpB,WAAW,EAAE,KAAK;YAClB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,UAAU;SACjB,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=backupAppStorage.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backupAppStorage.test.d.ts","sourceRoot":"","sources":["../../../../src/commands/use-cases/app-backup/backupAppStorage.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ import { StatusCodes } from "@ledgerhq/hw-transport";
2
+ import { backupAppStorage, parseResponse } from "./backupAppStorage";
3
+ import { InternalComputeAesCmacFailed } from "../../../errors";
4
+ jest.mock("@ledgerhq/hw-transport");
5
+ describe("backupAppStorage", () => {
6
+ let transport;
7
+ const response = Buffer.from([
8
+ 0x31, 0x30, 0x36, 0x52, 0x75, 0x65, 0x64, 0x75, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x65, 0x90, 0x00,
9
+ ]);
10
+ beforeEach(() => {
11
+ transport = {
12
+ send: jest.fn().mockResolvedValue(response),
13
+ getTraceContext: jest.fn().mockResolvedValue(undefined),
14
+ };
15
+ });
16
+ afterEach(() => {
17
+ jest.clearAllMocks();
18
+ });
19
+ it("should call the send function with correct parameters", async () => {
20
+ await backupAppStorage(transport);
21
+ expect(transport.send).toHaveBeenCalledWith(0xe0, 0x6b, 0x00, 0x00, Buffer.from([]), [
22
+ StatusCodes.OK,
23
+ StatusCodes.APP_NOT_FOUND_OR_INVALID_CONTEXT,
24
+ StatusCodes.GEN_AES_KEY_FAILED,
25
+ StatusCodes.INTERNAL_CRYPTO_OPERATION_FAILED,
26
+ StatusCodes.INTERNAL_COMPUTE_AES_CMAC_FAILED,
27
+ StatusCodes.ENCRYPT_APP_STORAGE_FAILED,
28
+ StatusCodes.DEVICE_IN_RECOVERY_MODE,
29
+ StatusCodes.INVALID_BACKUP_STATE,
30
+ ]);
31
+ });
32
+ describe("parseResponse", () => {
33
+ it("should parse the response data correctly", () => {
34
+ const expected = Buffer.from([
35
+ 0x31, 0x30, 0x36, 0x52, 0x75, 0x65, 0x64, 0x75, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x65,
36
+ ]);
37
+ expect(parseResponse(response)).toStrictEqual(expected);
38
+ });
39
+ it("should throw TransportStatusError if the response status is invalid", () => {
40
+ const data = Buffer.from([0x54, 0x1b]);
41
+ expect(() => parseResponse(data)).toThrow(new InternalComputeAesCmacFailed("Internal error, failed to compute AES CMAC."));
42
+ });
43
+ });
44
+ });
45
+ //# sourceMappingURL=backupAppStorage.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backupAppStorage.test.js","sourceRoot":"","sources":["../../../../src/commands/use-cases/app-backup/backupAppStorage.test.ts"],"names":[],"mappings":"AAAA,OAAkB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAE/D,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAEpC,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,SAAoB,CAAC;IACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;QAC3B,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;KAC/F,CAAC,CAAC;IAEH,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,GAAG;YACV,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC;YAC3C,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;SAChC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YACnF,WAAW,CAAC,EAAE;YACd,WAAW,CAAC,gCAAgC;YAC5C,WAAW,CAAC,kBAAkB;YAC9B,WAAW,CAAC,gCAAgC;YAC5C,WAAW,CAAC,gCAAgC;YAC5C,WAAW,CAAC,0BAA0B;YACtC,WAAW,CAAC,uBAAuB;YACnC,WAAW,CAAC,oBAAoB;SACjC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;gBAC3B,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;aACnF,CAAC,CAAC;YACH,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;YAC7E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACvC,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CACvC,IAAI,4BAA4B,CAAC,6CAA6C,CAAC,CAChF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getAppStorageInfo.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAppStorageInfo.test.d.ts","sourceRoot":"","sources":["../../../../src/commands/use-cases/app-backup/getAppStorageInfo.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,56 @@
1
+ import { StatusCodes } from "@ledgerhq/hw-transport";
2
+ import { getAppStorageInfo, parseResponse } from "./getAppStorageInfo";
3
+ import { InvalidAppNameLength } from "../../../errors";
4
+ jest.mock("@ledgerhq/hw-transport");
5
+ describe("getAppStorageInfo", () => {
6
+ let transport;
7
+ const response = Buffer.from([
8
+ // Status code 1234
9
+ 0x00, 0x00, 0x04, 0xd2,
10
+ // Data version 1.01
11
+ 0x31, 0x2e, 0x30, 0x31,
12
+ // Has settings and data
13
+ 0x00, 0x03,
14
+ // Hash hashhash1234hashhashhashhashhash
15
+ 0x68, 0x61, 0x73, 0x68, 0x68, 0x61, 0x73, 0x68, 0x31, 0x32, 0x33, 0x34, 0x68, 0x61, 0x73, 0x68,
16
+ 0x68, 0x61, 0x73, 0x68, 0x68, 0x61, 0x73, 0x68, 0x68, 0x61, 0x73, 0x68, 0x68, 0x61, 0x73, 0x68,
17
+ // Status word
18
+ 0x90, 0x00,
19
+ ]);
20
+ beforeEach(() => {
21
+ transport = {
22
+ send: jest.fn().mockResolvedValue(response),
23
+ getTraceContext: jest.fn().mockResolvedValue(undefined),
24
+ };
25
+ });
26
+ afterEach(() => {
27
+ jest.clearAllMocks();
28
+ });
29
+ it("should call the send function with correct parameters", async () => {
30
+ const appName = "MyApp";
31
+ await getAppStorageInfo(transport, appName);
32
+ expect(transport.send).toHaveBeenCalledWith(0xe0, 0x6a, 0x00, 0x00, Buffer.from(appName, "ascii"), [
33
+ StatusCodes.OK,
34
+ StatusCodes.APP_NOT_FOUND_OR_INVALID_CONTEXT,
35
+ StatusCodes.DEVICE_IN_RECOVERY_MODE,
36
+ StatusCodes.INVALID_APP_NAME_LENGTH,
37
+ ]);
38
+ });
39
+ describe("parseResponse", () => {
40
+ it("should parse the response data correctly", () => {
41
+ const expected = {
42
+ size: 1234,
43
+ dataVersion: Buffer.from("1.01").toString("hex"),
44
+ hasSettings: true,
45
+ hasData: true,
46
+ hash: Buffer.from("hashhash1234hashhashhashhashhash").toString("hex"),
47
+ };
48
+ expect(parseResponse(response)).toStrictEqual(expected);
49
+ });
50
+ it("should throw TransportStatusError if the response status is invalid", () => {
51
+ const data = Buffer.from([0x67, 0x0a]);
52
+ expect(() => parseResponse(data)).toThrow(new InvalidAppNameLength("Invalid application name length, two chars minimum."));
53
+ });
54
+ });
55
+ });
56
+ //# sourceMappingURL=getAppStorageInfo.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAppStorageInfo.test.js","sourceRoot":"","sources":["../../../../src/commands/use-cases/app-backup/getAppStorageInfo.test.ts"],"names":[],"mappings":"AAAA,OAAkB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAEpC,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,SAAoB,CAAC;IACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;QAC3B,mBAAmB;QACnB,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QACtB,oBAAoB;QACpB,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QACtB,wBAAwB;QACxB,IAAI,EAAE,IAAI;QACV,wCAAwC;QACxC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9F,cAAc;QACd,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;IAEH,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,GAAG;YACV,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC;YAC3C,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;SAChC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,OAAO,GAAG,OAAO,CAAC;QACxB,MAAM,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACzC,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAC7B;YACE,WAAW,CAAC,EAAE;YACd,WAAW,CAAC,gCAAgC;YAC5C,WAAW,CAAC,uBAAuB;YACnC,WAAW,CAAC,uBAAuB;SACpC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,QAAQ,GAAmB;gBAC/B,IAAI,EAAE,IAAI;gBACV,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAChD,WAAW,EAAE,IAAI;gBACjB,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;aACtE,CAAC;YACF,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;YAC7E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACvC,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CACvC,IAAI,oBAAoB,CAAC,qDAAqD,CAAC,CAChF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=restoreAppStorage.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restoreAppStorage.test.d.ts","sourceRoot":"","sources":["../../../../src/commands/use-cases/app-backup/restoreAppStorage.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,49 @@
1
+ import { StatusCodes } from "@ledgerhq/hw-transport";
2
+ import { restoreAppStorage, parseResponse } from "./restoreAppStorage";
3
+ import { InvalidRestoreState } from "../../../errors";
4
+ jest.mock("@ledgerhq/hw-transport");
5
+ describe("restoreAppStorage", () => {
6
+ let transport;
7
+ const response = Buffer.from([0x90, 0x00]);
8
+ beforeEach(() => {
9
+ transport = {
10
+ send: jest.fn().mockResolvedValue(response),
11
+ getTraceContext: jest.fn().mockResolvedValue(undefined),
12
+ };
13
+ });
14
+ afterEach(() => {
15
+ jest.clearAllMocks();
16
+ });
17
+ it("should call the send function with correct parameters", async () => {
18
+ const chunk = Buffer.from("106RueduTemple");
19
+ const args = [
20
+ 0xe0,
21
+ 0x6d,
22
+ 0x00,
23
+ 0x00,
24
+ chunk,
25
+ [
26
+ StatusCodes.OK,
27
+ StatusCodes.APP_NOT_FOUND_OR_INVALID_CONTEXT,
28
+ StatusCodes.GEN_AES_KEY_FAILED,
29
+ StatusCodes.INTERNAL_CRYPTO_OPERATION_FAILED,
30
+ StatusCodes.DEVICE_IN_RECOVERY_MODE,
31
+ StatusCodes.INVALID_RESTORE_STATE,
32
+ StatusCodes.INVALID_CHUNK_LENGTH,
33
+ StatusCodes.INVALID_BACKUP_HEADER,
34
+ ],
35
+ ];
36
+ await restoreAppStorage(transport, chunk);
37
+ expect(transport.send).toHaveBeenCalledWith(...args);
38
+ });
39
+ describe("parseResponse", () => {
40
+ it("should parse the response data correctly", () => {
41
+ expect(() => parseResponse(response)).not.toThrow();
42
+ });
43
+ it("should throw TransportStatusError if the response status is invalid", () => {
44
+ const data = Buffer.from([0x66, 0x43]);
45
+ expect(() => parseResponse(data)).toThrow(new InvalidRestoreState("Invalid restore state, restore already performed."));
46
+ });
47
+ });
48
+ });
49
+ //# sourceMappingURL=restoreAppStorage.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restoreAppStorage.test.js","sourceRoot":"","sources":["../../../../src/commands/use-cases/app-backup/restoreAppStorage.test.ts"],"names":[],"mappings":"AAAA,OAAkB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAEpC,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,SAAoB,CAAC;IACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAE3C,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,GAAG;YACV,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC;YAC3C,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;SAChC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG;YACX,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,KAAK;YACL;gBACE,WAAW,CAAC,EAAE;gBACd,WAAW,CAAC,gCAAgC;gBAC5C,WAAW,CAAC,kBAAkB;gBAC9B,WAAW,CAAC,gCAAgC;gBAC5C,WAAW,CAAC,uBAAuB;gBACnC,WAAW,CAAC,qBAAqB;gBACjC,WAAW,CAAC,oBAAoB;gBAChC,WAAW,CAAC,qBAAqB;aAClC;SACF,CAAC;QAEF,MAAM,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACtD,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;YAC7E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACvC,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CACvC,IAAI,mBAAmB,CAAC,mDAAmD,CAAC,CAC7E,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=restoreAppStorageCommit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restoreAppStorageCommit.test.d.ts","sourceRoot":"","sources":["../../../../src/commands/use-cases/app-backup/restoreAppStorageCommit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ import { StatusCodes } from "@ledgerhq/hw-transport";
2
+ import { restoreAppStorageCommit, parseResponse } from "./restoreAppStorageCommit";
3
+ import { InvalidChunkLength } from "../../../errors";
4
+ jest.mock("@ledgerhq/hw-transport");
5
+ describe("restoreAppStorageCommit", () => {
6
+ let transport;
7
+ const response = Buffer.from([0x90, 0x00]);
8
+ beforeEach(() => {
9
+ transport = {
10
+ send: jest.fn().mockResolvedValue(response),
11
+ getTraceContext: jest.fn().mockResolvedValue(undefined),
12
+ };
13
+ });
14
+ afterEach(() => {
15
+ jest.clearAllMocks();
16
+ });
17
+ it("should call the send function with correct parameters", async () => {
18
+ await restoreAppStorageCommit(transport);
19
+ expect(transport.send).toHaveBeenCalledWith(0xe0, 0x6e, 0x00, 0x00, Buffer.from([]), [
20
+ StatusCodes.OK,
21
+ StatusCodes.APP_NOT_FOUND_OR_INVALID_CONTEXT,
22
+ StatusCodes.GEN_AES_KEY_FAILED,
23
+ StatusCodes.INTERNAL_COMPUTE_AES_CMAC_FAILED,
24
+ StatusCodes.DEVICE_IN_RECOVERY_MODE,
25
+ StatusCodes.INVALID_CHUNK_LENGTH,
26
+ ]);
27
+ });
28
+ describe("parseResponse", () => {
29
+ it("should parse the response data correctly", () => {
30
+ expect(() => parseResponse(response)).not.toThrow();
31
+ });
32
+ it("should throw TransportStatusError if the response status is invalid", () => {
33
+ const data = Buffer.from([0x67, 0x34]);
34
+ expect(() => parseResponse(data)).toThrow(new InvalidChunkLength("Invalid size of the restored app storage."));
35
+ });
36
+ });
37
+ });
38
+ //# sourceMappingURL=restoreAppStorageCommit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restoreAppStorageCommit.test.js","sourceRoot":"","sources":["../../../../src/commands/use-cases/app-backup/restoreAppStorageCommit.test.ts"],"names":[],"mappings":"AAAA,OAAkB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAEpC,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,IAAI,SAAoB,CAAC;IACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAE3C,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,GAAG;YACV,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC;YAC3C,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;SAChC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YACnF,WAAW,CAAC,EAAE;YACd,WAAW,CAAC,gCAAgC;YAC5C,WAAW,CAAC,kBAAkB;YAC9B,WAAW,CAAC,gCAAgC;YAC5C,WAAW,CAAC,uBAAuB;YACnC,WAAW,CAAC,oBAAoB;SACjC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACtD,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;YAC7E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACvC,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CACvC,IAAI,kBAAkB,CAAC,2CAA2C,CAAC,CACpE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=restoreAppStorageInit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restoreAppStorageInit.test.d.ts","sourceRoot":"","sources":["../../../../src/commands/use-cases/app-backup/restoreAppStorageInit.test.ts"],"names":[],"mappings":""}