@ledgerhq/device-management-kit 0.0.0-test-recursive-stack-20251002122259 → 0.0.0-test-attest-npmjs-1-20251120163531

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 (236) hide show
  1. package/lib/cjs/package.json +1 -1
  2. package/lib/cjs/src/api/DeviceManagementKit.js +1 -1
  3. package/lib/cjs/src/api/DeviceManagementKit.js.map +2 -2
  4. package/lib/cjs/src/api/DeviceManagementKit.test.js +1 -1
  5. package/lib/cjs/src/api/DeviceManagementKit.test.js.map +2 -2
  6. package/lib/cjs/src/api/command/Command.js +1 -1
  7. package/lib/cjs/src/api/command/Command.js.map +1 -1
  8. package/lib/cjs/src/api/command/Errors.js +1 -1
  9. package/lib/cjs/src/api/command/Errors.js.map +3 -3
  10. package/lib/cjs/src/api/command/model/CommandResult.js +1 -1
  11. package/lib/cjs/src/api/command/model/CommandResult.js.map +2 -2
  12. package/lib/cjs/src/api/command/os/CloseAppCommand.js +1 -1
  13. package/lib/cjs/src/api/command/os/CloseAppCommand.js.map +2 -2
  14. package/lib/cjs/src/api/command/os/CloseAppCommand.test.js +1 -1
  15. package/lib/cjs/src/api/command/os/CloseAppCommand.test.js.map +2 -2
  16. package/lib/cjs/src/api/command/os/GetAppAndVersionCommand.js +1 -1
  17. package/lib/cjs/src/api/command/os/GetAppAndVersionCommand.js.map +2 -2
  18. package/lib/cjs/src/api/command/os/GetAppAndVersionCommand.test.js +1 -1
  19. package/lib/cjs/src/api/command/os/GetAppAndVersionCommand.test.js.map +2 -2
  20. package/lib/cjs/src/api/command/os/GetBatteryStatusCommand.js +1 -1
  21. package/lib/cjs/src/api/command/os/GetBatteryStatusCommand.js.map +2 -2
  22. package/lib/cjs/src/api/command/os/GetBatteryStatusCommand.test.js +1 -1
  23. package/lib/cjs/src/api/command/os/GetBatteryStatusCommand.test.js.map +3 -3
  24. package/lib/cjs/src/api/command/os/GetCustomImageSizeCommand.js +1 -1
  25. package/lib/cjs/src/api/command/os/GetCustomImageSizeCommand.js.map +2 -2
  26. package/lib/cjs/src/api/command/os/GetCustomImageSizeCommand.test.js +1 -1
  27. package/lib/cjs/src/api/command/os/GetCustomImageSizeCommand.test.js.map +2 -2
  28. package/lib/cjs/src/api/command/os/GetOsVersionCommand.js +1 -1
  29. package/lib/cjs/src/api/command/os/GetOsVersionCommand.js.map +2 -2
  30. package/lib/cjs/src/api/command/os/GetOsVersionCommand.test.js +1 -1
  31. package/lib/cjs/src/api/command/os/GetOsVersionCommand.test.js.map +2 -2
  32. package/lib/cjs/src/api/command/os/ListAppsCommand.js +1 -1
  33. package/lib/cjs/src/api/command/os/ListAppsCommand.js.map +2 -2
  34. package/lib/cjs/src/api/command/os/ListAppsCommand.test.js +1 -1
  35. package/lib/cjs/src/api/command/os/ListAppsCommand.test.js.map +2 -2
  36. package/lib/cjs/src/api/command/os/ListLanguagePackCommand.js +1 -1
  37. package/lib/cjs/src/api/command/os/ListLanguagePackCommand.js.map +2 -2
  38. package/lib/cjs/src/api/command/os/ListLanguagePackCommand.test.js +1 -1
  39. package/lib/cjs/src/api/command/os/ListLanguagePackCommand.test.js.map +2 -2
  40. package/lib/cjs/src/api/command/os/LoadCertificateCommand.js +1 -1
  41. package/lib/cjs/src/api/command/os/LoadCertificateCommand.js.map +2 -2
  42. package/lib/cjs/src/api/command/os/LoadCertificateCommand.test.js +1 -1
  43. package/lib/cjs/src/api/command/os/LoadCertificateCommand.test.js.map +3 -3
  44. package/lib/cjs/src/api/command/os/OpenAppCommand.js +1 -1
  45. package/lib/cjs/src/api/command/os/OpenAppCommand.js.map +2 -2
  46. package/lib/cjs/src/api/command/os/OpenAppCommand.test.js +1 -1
  47. package/lib/cjs/src/api/command/os/OpenAppCommand.test.js.map +2 -2
  48. package/lib/cjs/src/api/command/use-case/SendCommandUseCase.test.js +1 -1
  49. package/lib/cjs/src/api/command/use-case/SendCommandUseCase.test.js.map +2 -2
  50. package/lib/cjs/src/api/device-action/model/UserInteractionRequired.js +1 -1
  51. package/lib/cjs/src/api/device-action/model/UserInteractionRequired.js.map +2 -2
  52. package/lib/cjs/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.test.js +1 -1
  53. package/lib/cjs/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.test.js.map +2 -2
  54. package/lib/cjs/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.test.js +1 -1
  55. package/lib/cjs/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.test.js.map +2 -2
  56. package/lib/cjs/src/api/device-action/task/GetFirmwareMetadataTask.js +1 -1
  57. package/lib/cjs/src/api/device-action/task/GetFirmwareMetadataTask.js.map +2 -2
  58. package/lib/cjs/src/api/device-action/task/GetFirmwareMetadataTask.test.js +1 -1
  59. package/lib/cjs/src/api/device-action/task/GetFirmwareMetadataTask.test.js.map +2 -2
  60. package/lib/cjs/src/api/device-action/xstate-utils/XStateDeviceAction.js +1 -1
  61. package/lib/cjs/src/api/device-action/xstate-utils/XStateDeviceAction.js.map +2 -2
  62. package/lib/cjs/src/api/index.js +1 -1
  63. package/lib/cjs/src/api/index.js.map +2 -2
  64. package/lib/cjs/src/api/logger-subscriber/service/ConsoleLogger.js +1 -1
  65. package/lib/cjs/src/api/logger-subscriber/service/ConsoleLogger.js.map +3 -3
  66. package/lib/cjs/src/api/transport/model/ConnectedDevice.js +1 -1
  67. package/lib/cjs/src/api/transport/model/ConnectedDevice.js.map +3 -3
  68. package/lib/cjs/src/api/transport/model/TransportConnectedDevice.js +1 -1
  69. package/lib/cjs/src/api/transport/model/TransportConnectedDevice.js.map +3 -3
  70. package/lib/cjs/src/internal/device-session/model/DeviceSession.js +1 -1
  71. package/lib/cjs/src/internal/device-session/model/DeviceSession.js.map +3 -3
  72. package/lib/cjs/src/internal/device-session/service/DefaultDeviceSessionService.js +1 -1
  73. package/lib/cjs/src/internal/device-session/service/DefaultDeviceSessionService.js.map +3 -3
  74. package/lib/cjs/src/internal/device-session/service/DefaultDeviceSessionService.test.js +1 -1
  75. package/lib/cjs/src/internal/device-session/service/DefaultDeviceSessionService.test.js.map +3 -3
  76. package/lib/cjs/src/internal/device-session/service/DeviceSessionService.js +1 -1
  77. package/lib/cjs/src/internal/device-session/service/DeviceSessionService.js.map +1 -1
  78. package/lib/cjs/src/internal/discovery/di/discoveryModule.js +1 -1
  79. package/lib/cjs/src/internal/discovery/di/discoveryModule.js.map +3 -3
  80. package/lib/cjs/src/internal/discovery/di/discoveryModule.test.js +1 -1
  81. package/lib/cjs/src/internal/discovery/di/discoveryModule.test.js.map +3 -3
  82. package/lib/cjs/src/internal/discovery/di/discoveryTypes.js +1 -1
  83. package/lib/cjs/src/internal/discovery/di/discoveryTypes.js.map +2 -2
  84. package/lib/cjs/src/internal/discovery/use-case/ConnectUseCase.js +1 -1
  85. package/lib/cjs/src/internal/discovery/use-case/ConnectUseCase.js.map +3 -3
  86. package/lib/cjs/src/internal/discovery/use-case/ConnectUseCase.test.js +1 -1
  87. package/lib/cjs/src/internal/discovery/use-case/ConnectUseCase.test.js.map +3 -3
  88. package/lib/cjs/src/internal/discovery/use-case/DisconnectUseCase.js +1 -1
  89. package/lib/cjs/src/internal/discovery/use-case/DisconnectUseCase.js.map +3 -3
  90. package/lib/cjs/src/internal/discovery/use-case/ReconnectUseCase.js +2 -0
  91. package/lib/cjs/src/internal/discovery/use-case/ReconnectUseCase.js.map +7 -0
  92. package/lib/cjs/src/internal/discovery/use-case/ReconnectUseCase.test.js +2 -0
  93. package/lib/cjs/src/internal/discovery/use-case/ReconnectUseCase.test.js.map +7 -0
  94. package/lib/esm/package.json +1 -1
  95. package/lib/esm/src/api/DeviceManagementKit.js +1 -1
  96. package/lib/esm/src/api/DeviceManagementKit.js.map +2 -2
  97. package/lib/esm/src/api/DeviceManagementKit.test.js +1 -1
  98. package/lib/esm/src/api/DeviceManagementKit.test.js.map +2 -2
  99. package/lib/esm/src/api/command/Errors.js +1 -1
  100. package/lib/esm/src/api/command/Errors.js.map +3 -3
  101. package/lib/esm/src/api/command/model/CommandResult.js.map +2 -2
  102. package/lib/esm/src/api/command/os/CloseAppCommand.js +1 -1
  103. package/lib/esm/src/api/command/os/CloseAppCommand.js.map +2 -2
  104. package/lib/esm/src/api/command/os/CloseAppCommand.test.js +1 -1
  105. package/lib/esm/src/api/command/os/CloseAppCommand.test.js.map +2 -2
  106. package/lib/esm/src/api/command/os/GetAppAndVersionCommand.js +1 -1
  107. package/lib/esm/src/api/command/os/GetAppAndVersionCommand.js.map +2 -2
  108. package/lib/esm/src/api/command/os/GetAppAndVersionCommand.test.js +1 -1
  109. package/lib/esm/src/api/command/os/GetAppAndVersionCommand.test.js.map +2 -2
  110. package/lib/esm/src/api/command/os/GetBatteryStatusCommand.js +1 -1
  111. package/lib/esm/src/api/command/os/GetBatteryStatusCommand.js.map +2 -2
  112. package/lib/esm/src/api/command/os/GetBatteryStatusCommand.test.js +1 -1
  113. package/lib/esm/src/api/command/os/GetBatteryStatusCommand.test.js.map +3 -3
  114. package/lib/esm/src/api/command/os/GetCustomImageSizeCommand.js +1 -1
  115. package/lib/esm/src/api/command/os/GetCustomImageSizeCommand.js.map +2 -2
  116. package/lib/esm/src/api/command/os/GetCustomImageSizeCommand.test.js +1 -1
  117. package/lib/esm/src/api/command/os/GetCustomImageSizeCommand.test.js.map +2 -2
  118. package/lib/esm/src/api/command/os/GetOsVersionCommand.js +1 -1
  119. package/lib/esm/src/api/command/os/GetOsVersionCommand.js.map +2 -2
  120. package/lib/esm/src/api/command/os/GetOsVersionCommand.test.js +1 -1
  121. package/lib/esm/src/api/command/os/GetOsVersionCommand.test.js.map +2 -2
  122. package/lib/esm/src/api/command/os/ListAppsCommand.js +1 -1
  123. package/lib/esm/src/api/command/os/ListAppsCommand.js.map +2 -2
  124. package/lib/esm/src/api/command/os/ListAppsCommand.test.js +1 -1
  125. package/lib/esm/src/api/command/os/ListAppsCommand.test.js.map +2 -2
  126. package/lib/esm/src/api/command/os/ListLanguagePackCommand.js +1 -1
  127. package/lib/esm/src/api/command/os/ListLanguagePackCommand.js.map +2 -2
  128. package/lib/esm/src/api/command/os/ListLanguagePackCommand.test.js +1 -1
  129. package/lib/esm/src/api/command/os/ListLanguagePackCommand.test.js.map +2 -2
  130. package/lib/esm/src/api/command/os/LoadCertificateCommand.js +1 -1
  131. package/lib/esm/src/api/command/os/LoadCertificateCommand.js.map +2 -2
  132. package/lib/esm/src/api/command/os/LoadCertificateCommand.test.js +1 -1
  133. package/lib/esm/src/api/command/os/LoadCertificateCommand.test.js.map +3 -3
  134. package/lib/esm/src/api/command/os/OpenAppCommand.js +1 -1
  135. package/lib/esm/src/api/command/os/OpenAppCommand.js.map +2 -2
  136. package/lib/esm/src/api/command/os/OpenAppCommand.test.js +1 -1
  137. package/lib/esm/src/api/command/os/OpenAppCommand.test.js.map +2 -2
  138. package/lib/esm/src/api/command/use-case/SendCommandUseCase.test.js +1 -1
  139. package/lib/esm/src/api/command/use-case/SendCommandUseCase.test.js.map +2 -2
  140. package/lib/esm/src/api/device-action/model/UserInteractionRequired.js +1 -1
  141. package/lib/esm/src/api/device-action/model/UserInteractionRequired.js.map +2 -2
  142. package/lib/esm/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.test.js +1 -1
  143. package/lib/esm/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.test.js.map +2 -2
  144. package/lib/esm/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.test.js +1 -1
  145. package/lib/esm/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.test.js.map +2 -2
  146. package/lib/esm/src/api/device-action/task/GetFirmwareMetadataTask.js +1 -1
  147. package/lib/esm/src/api/device-action/task/GetFirmwareMetadataTask.js.map +3 -3
  148. package/lib/esm/src/api/device-action/task/GetFirmwareMetadataTask.test.js +1 -1
  149. package/lib/esm/src/api/device-action/task/GetFirmwareMetadataTask.test.js.map +3 -3
  150. package/lib/esm/src/api/device-action/xstate-utils/XStateDeviceAction.js +1 -1
  151. package/lib/esm/src/api/device-action/xstate-utils/XStateDeviceAction.js.map +2 -2
  152. package/lib/esm/src/api/index.js +1 -1
  153. package/lib/esm/src/api/index.js.map +3 -3
  154. package/lib/esm/src/api/logger-subscriber/service/ConsoleLogger.js +1 -1
  155. package/lib/esm/src/api/logger-subscriber/service/ConsoleLogger.js.map +3 -3
  156. package/lib/esm/src/api/transport/model/ConnectedDevice.js +1 -1
  157. package/lib/esm/src/api/transport/model/ConnectedDevice.js.map +3 -3
  158. package/lib/esm/src/api/transport/model/TransportConnectedDevice.js +1 -1
  159. package/lib/esm/src/api/transport/model/TransportConnectedDevice.js.map +3 -3
  160. package/lib/esm/src/internal/device-session/model/DeviceSession.js +1 -1
  161. package/lib/esm/src/internal/device-session/model/DeviceSession.js.map +3 -3
  162. package/lib/esm/src/internal/device-session/service/DefaultDeviceSessionService.js +1 -1
  163. package/lib/esm/src/internal/device-session/service/DefaultDeviceSessionService.js.map +3 -3
  164. package/lib/esm/src/internal/device-session/service/DefaultDeviceSessionService.test.js +1 -1
  165. package/lib/esm/src/internal/device-session/service/DefaultDeviceSessionService.test.js.map +3 -3
  166. package/lib/esm/src/internal/discovery/di/discoveryModule.js +1 -1
  167. package/lib/esm/src/internal/discovery/di/discoveryModule.js.map +3 -3
  168. package/lib/esm/src/internal/discovery/di/discoveryModule.test.js +1 -1
  169. package/lib/esm/src/internal/discovery/di/discoveryModule.test.js.map +3 -3
  170. package/lib/esm/src/internal/discovery/di/discoveryTypes.js +1 -1
  171. package/lib/esm/src/internal/discovery/di/discoveryTypes.js.map +2 -2
  172. package/lib/esm/src/internal/discovery/use-case/ConnectUseCase.js +1 -1
  173. package/lib/esm/src/internal/discovery/use-case/ConnectUseCase.js.map +3 -3
  174. package/lib/esm/src/internal/discovery/use-case/ConnectUseCase.test.js +1 -1
  175. package/lib/esm/src/internal/discovery/use-case/ConnectUseCase.test.js.map +3 -3
  176. package/lib/esm/src/internal/discovery/use-case/DisconnectUseCase.js +1 -1
  177. package/lib/esm/src/internal/discovery/use-case/DisconnectUseCase.js.map +3 -3
  178. package/lib/esm/src/internal/discovery/use-case/ReconnectUseCase.js +2 -0
  179. package/lib/esm/src/internal/discovery/use-case/ReconnectUseCase.js.map +7 -0
  180. package/lib/esm/src/internal/discovery/use-case/ReconnectUseCase.test.js +2 -0
  181. package/lib/esm/src/internal/discovery/use-case/ReconnectUseCase.test.js.map +7 -0
  182. package/lib/types/src/api/DeviceManagementKit.d.ts +12 -0
  183. package/lib/types/src/api/DeviceManagementKit.d.ts.map +1 -1
  184. package/lib/types/src/api/command/Command.d.ts +4 -0
  185. package/lib/types/src/api/command/Command.d.ts.map +1 -1
  186. package/lib/types/src/api/command/Errors.d.ts +5 -0
  187. package/lib/types/src/api/command/Errors.d.ts.map +1 -1
  188. package/lib/types/src/api/command/model/CommandResult.d.ts +3 -3
  189. package/lib/types/src/api/command/model/CommandResult.d.ts.map +1 -1
  190. package/lib/types/src/api/command/os/CloseAppCommand.d.ts +1 -0
  191. package/lib/types/src/api/command/os/CloseAppCommand.d.ts.map +1 -1
  192. package/lib/types/src/api/command/os/GetAppAndVersionCommand.d.ts +1 -0
  193. package/lib/types/src/api/command/os/GetAppAndVersionCommand.d.ts.map +1 -1
  194. package/lib/types/src/api/command/os/GetBatteryStatusCommand.d.ts +1 -0
  195. package/lib/types/src/api/command/os/GetBatteryStatusCommand.d.ts.map +1 -1
  196. package/lib/types/src/api/command/os/GetCustomImageSizeCommand.d.ts +1 -0
  197. package/lib/types/src/api/command/os/GetCustomImageSizeCommand.d.ts.map +1 -1
  198. package/lib/types/src/api/command/os/GetOsVersionCommand.d.ts +1 -0
  199. package/lib/types/src/api/command/os/GetOsVersionCommand.d.ts.map +1 -1
  200. package/lib/types/src/api/command/os/ListAppsCommand.d.ts +1 -0
  201. package/lib/types/src/api/command/os/ListAppsCommand.d.ts.map +1 -1
  202. package/lib/types/src/api/command/os/ListLanguagePackCommand.d.ts +1 -0
  203. package/lib/types/src/api/command/os/ListLanguagePackCommand.d.ts.map +1 -1
  204. package/lib/types/src/api/command/os/LoadCertificateCommand.d.ts +1 -0
  205. package/lib/types/src/api/command/os/LoadCertificateCommand.d.ts.map +1 -1
  206. package/lib/types/src/api/command/os/OpenAppCommand.d.ts +1 -0
  207. package/lib/types/src/api/command/os/OpenAppCommand.d.ts.map +1 -1
  208. package/lib/types/src/api/device-action/model/UserInteractionRequired.d.ts +2 -1
  209. package/lib/types/src/api/device-action/model/UserInteractionRequired.d.ts.map +1 -1
  210. package/lib/types/src/api/device-action/task/GetFirmwareMetadataTask.d.ts.map +1 -1
  211. package/lib/types/src/api/device-action/xstate-utils/XStateDeviceAction.d.ts.map +1 -1
  212. package/lib/types/src/api/index.d.ts +1 -1
  213. package/lib/types/src/api/index.d.ts.map +1 -1
  214. package/lib/types/src/api/logger-subscriber/service/ConsoleLogger.d.ts +1 -0
  215. package/lib/types/src/api/logger-subscriber/service/ConsoleLogger.d.ts.map +1 -1
  216. package/lib/types/src/api/transport/model/ConnectedDevice.d.ts +3 -2
  217. package/lib/types/src/api/transport/model/ConnectedDevice.d.ts.map +1 -1
  218. package/lib/types/src/api/transport/model/TransportConnectedDevice.d.ts +3 -1
  219. package/lib/types/src/api/transport/model/TransportConnectedDevice.d.ts.map +1 -1
  220. package/lib/types/src/internal/device-session/model/DeviceSession.d.ts.map +1 -1
  221. package/lib/types/src/internal/device-session/service/DefaultDeviceSessionService.d.ts +7 -5
  222. package/lib/types/src/internal/device-session/service/DefaultDeviceSessionService.d.ts.map +1 -1
  223. package/lib/types/src/internal/device-session/service/DeviceSessionService.d.ts +28 -1
  224. package/lib/types/src/internal/device-session/service/DeviceSessionService.d.ts.map +1 -1
  225. package/lib/types/src/internal/discovery/di/discoveryModule.d.ts.map +1 -1
  226. package/lib/types/src/internal/discovery/di/discoveryTypes.d.ts +1 -0
  227. package/lib/types/src/internal/discovery/di/discoveryTypes.d.ts.map +1 -1
  228. package/lib/types/src/internal/discovery/use-case/ConnectUseCase.d.ts +3 -2
  229. package/lib/types/src/internal/discovery/use-case/ConnectUseCase.d.ts.map +1 -1
  230. package/lib/types/src/internal/discovery/use-case/DisconnectUseCase.d.ts.map +1 -1
  231. package/lib/types/src/internal/discovery/use-case/ReconnectUseCase.d.ts +32 -0
  232. package/lib/types/src/internal/discovery/use-case/ReconnectUseCase.d.ts.map +1 -0
  233. package/lib/types/src/internal/discovery/use-case/ReconnectUseCase.test.d.ts +2 -0
  234. package/lib/types/src/internal/discovery/use-case/ReconnectUseCase.test.d.ts.map +1 -0
  235. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  236. package/package.json +3 -3
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/api/command/os/OpenAppCommand.ts"],
4
- "sourcesContent": ["import { type Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder, type ApduBuilderArgs } from \"@api/apdu/utils/ApduBuilder\";\nimport { ApduParser } from \"@api/apdu/utils/ApduParser\";\nimport { type Command } from \"@api/command/Command\";\nimport {\n type CommandResult,\n CommandResultFactory,\n} from \"@api/command/model/CommandResult\";\nimport {\n type CommandErrors,\n isCommandErrorCode,\n} from \"@api/command/utils/CommandErrors\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { GlobalCommandErrorHandler } from \"@api/command/utils/GlobalCommandError\";\nimport { type ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { type CommandErrorArgs, DeviceExchangeError } from \"@api/Error\";\n\nexport type OpenAppArgs = {\n readonly appName: string;\n};\n\nexport type OpenAppErrorCodes = \"670a\" | \"6807\";\n\nconst OPEN_APP_ERRORS: CommandErrors<OpenAppErrorCodes> = {\n \"670a\": { message: \"No app name provided\" },\n \"6807\": { message: \"Unknown application name\" },\n};\n\nexport class OpenAppCommandError extends DeviceExchangeError<OpenAppErrorCodes> {\n constructor({ message, errorCode }: CommandErrorArgs<OpenAppErrorCodes>) {\n super({ tag: \"OpenAppCommandError\", message, errorCode });\n }\n}\n\nexport type OpenAppCommandResult = CommandResult<void, OpenAppErrorCodes>;\n\n/**\n * The command to open an application on the device.\n */\nexport class OpenAppCommand\n implements Command<void, OpenAppArgs, OpenAppErrorCodes>\n{\n readonly args: OpenAppArgs;\n\n readonly triggersDisconnection = true;\n\n constructor(args: OpenAppArgs) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n const openAppApduArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0xd8,\n p1: 0x00,\n p2: 0x00,\n };\n return new ApduBuilder(openAppApduArgs)\n .addAsciiStringToData(this.args.appName)\n .build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<void, OpenAppErrorCodes> {\n if (CommandUtils.isSuccessResponse(apduResponse)) {\n return CommandResultFactory({\n data: undefined,\n });\n }\n const parser = new ApduParser(apduResponse);\n const errorCode = parser.encodeToHexaString(apduResponse.statusCode);\n if (isCommandErrorCode(errorCode, OPEN_APP_ERRORS)) {\n return CommandResultFactory({\n error: new OpenAppCommandError({\n ...OPEN_APP_ERRORS[errorCode],\n errorCode,\n }),\n });\n }\n return CommandResultFactory({\n error: GlobalCommandErrorHandler.handle(apduResponse),\n });\n }\n}\n"],
5
- "mappings": "AACA,OAAS,eAAAA,MAAyC,8BAClD,OAAS,cAAAC,MAAkB,6BAE3B,OAEE,wBAAAC,MACK,mCACP,OAEE,sBAAAC,MACK,mCACP,OAAS,gBAAAC,MAAoB,kCAC7B,OAAS,6BAAAC,MAAiC,wCAE1C,OAAgC,uBAAAC,MAA2B,aAQ3D,MAAMC,EAAoD,CACxD,OAAQ,CAAE,QAAS,sBAAuB,EAC1C,KAAQ,CAAE,QAAS,0BAA2B,CAChD,EAEO,MAAMC,UAA4BF,CAAuC,CAC9E,YAAY,CAAE,QAAAG,EAAS,UAAAC,CAAU,EAAwC,CACvE,MAAM,CAAE,IAAK,sBAAuB,QAAAD,EAAS,UAAAC,CAAU,CAAC,CAC1D,CACF,CAOO,MAAMC,CAEb,CACW,KAEA,sBAAwB,GAEjC,YAAYC,EAAmB,CAC7B,KAAK,KAAOA,CACd,CAEA,SAAgB,CACd,MAAMC,EAAmC,CACvC,IAAK,IACL,IAAK,IACL,GAAI,EACJ,GAAI,CACN,EACA,OAAO,IAAIb,EAAYa,CAAe,EACnC,qBAAqB,KAAK,KAAK,OAAO,EACtC,MAAM,CACX,CAEA,cACEC,EACwC,CACxC,GAAIV,EAAa,kBAAkBU,CAAY,EAC7C,OAAOZ,EAAqB,CAC1B,KAAM,MACR,CAAC,EAGH,MAAMQ,EADS,IAAIT,EAAWa,CAAY,EACjB,mBAAmBA,EAAa,UAAU,EACnE,OAAIX,EAAmBO,EAAWH,CAAe,EACxCL,EAAqB,CAC1B,MAAO,IAAIM,EAAoB,CAC7B,GAAGD,EAAgBG,CAAS,EAC5B,UAAAA,CACF,CAAC,CACH,CAAC,EAEIR,EAAqB,CAC1B,MAAOG,EAA0B,OAAOS,CAAY,CACtD,CAAC,CACH,CACF",
4
+ "sourcesContent": ["import { type Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder, type ApduBuilderArgs } from \"@api/apdu/utils/ApduBuilder\";\nimport { ApduParser } from \"@api/apdu/utils/ApduParser\";\nimport { type Command } from \"@api/command/Command\";\nimport {\n type CommandResult,\n CommandResultFactory,\n} from \"@api/command/model/CommandResult\";\nimport {\n type CommandErrors,\n isCommandErrorCode,\n} from \"@api/command/utils/CommandErrors\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { GlobalCommandErrorHandler } from \"@api/command/utils/GlobalCommandError\";\nimport { type ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { type CommandErrorArgs, DeviceExchangeError } from \"@api/Error\";\n\nexport type OpenAppArgs = {\n readonly appName: string;\n};\n\nexport type OpenAppErrorCodes = \"670a\" | \"6807\";\n\nconst OPEN_APP_ERRORS: CommandErrors<OpenAppErrorCodes> = {\n \"670a\": { message: \"No app name provided\" },\n \"6807\": { message: \"Unknown application name\" },\n};\n\nexport class OpenAppCommandError extends DeviceExchangeError<OpenAppErrorCodes> {\n constructor({ message, errorCode }: CommandErrorArgs<OpenAppErrorCodes>) {\n super({ tag: \"OpenAppCommandError\", message, errorCode });\n }\n}\n\nexport type OpenAppCommandResult = CommandResult<void, OpenAppErrorCodes>;\n\n/**\n * The command to open an application on the device.\n */\nexport class OpenAppCommand\n implements Command<void, OpenAppArgs, OpenAppErrorCodes>\n{\n readonly name = \"openApp\";\n readonly args: OpenAppArgs;\n\n readonly triggersDisconnection = true;\n\n constructor(args: OpenAppArgs) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n const openAppApduArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0xd8,\n p1: 0x00,\n p2: 0x00,\n };\n return new ApduBuilder(openAppApduArgs)\n .addAsciiStringToData(this.args.appName)\n .build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<void, OpenAppErrorCodes> {\n if (CommandUtils.isSuccessResponse(apduResponse)) {\n return CommandResultFactory({\n data: undefined,\n });\n }\n const parser = new ApduParser(apduResponse);\n const errorCode = parser.encodeToHexaString(apduResponse.statusCode);\n if (isCommandErrorCode(errorCode, OPEN_APP_ERRORS)) {\n return CommandResultFactory({\n error: new OpenAppCommandError({\n ...OPEN_APP_ERRORS[errorCode],\n errorCode,\n }),\n });\n }\n return CommandResultFactory({\n error: GlobalCommandErrorHandler.handle(apduResponse),\n });\n }\n}\n"],
5
+ "mappings": "AACA,OAAS,eAAAA,MAAyC,8BAClD,OAAS,cAAAC,MAAkB,6BAE3B,OAEE,wBAAAC,MACK,mCACP,OAEE,sBAAAC,MACK,mCACP,OAAS,gBAAAC,MAAoB,kCAC7B,OAAS,6BAAAC,MAAiC,wCAE1C,OAAgC,uBAAAC,MAA2B,aAQ3D,MAAMC,EAAoD,CACxD,OAAQ,CAAE,QAAS,sBAAuB,EAC1C,KAAQ,CAAE,QAAS,0BAA2B,CAChD,EAEO,MAAMC,UAA4BF,CAAuC,CAC9E,YAAY,CAAE,QAAAG,EAAS,UAAAC,CAAU,EAAwC,CACvE,MAAM,CAAE,IAAK,sBAAuB,QAAAD,EAAS,UAAAC,CAAU,CAAC,CAC1D,CACF,CAOO,MAAMC,CAEb,CACW,KAAO,UACP,KAEA,sBAAwB,GAEjC,YAAYC,EAAmB,CAC7B,KAAK,KAAOA,CACd,CAEA,SAAgB,CACd,MAAMC,EAAmC,CACvC,IAAK,IACL,IAAK,IACL,GAAI,EACJ,GAAI,CACN,EACA,OAAO,IAAIb,EAAYa,CAAe,EACnC,qBAAqB,KAAK,KAAK,OAAO,EACtC,MAAM,CACX,CAEA,cACEC,EACwC,CACxC,GAAIV,EAAa,kBAAkBU,CAAY,EAC7C,OAAOZ,EAAqB,CAC1B,KAAM,MACR,CAAC,EAGH,MAAMQ,EADS,IAAIT,EAAWa,CAAY,EACjB,mBAAmBA,EAAa,UAAU,EACnE,OAAIX,EAAmBO,EAAWH,CAAe,EACxCL,EAAqB,CAC1B,MAAO,IAAIM,EAAoB,CAC7B,GAAGD,EAAgBG,CAAS,EAC5B,UAAAA,CACF,CAAC,CACH,CAAC,EAEIR,EAAqB,CAC1B,MAAOG,EAA0B,OAAOS,CAAY,CACtD,CAAC,CACH,CACF",
6
6
  "names": ["ApduBuilder", "ApduParser", "CommandResultFactory", "isCommandErrorCode", "CommandUtils", "GlobalCommandErrorHandler", "DeviceExchangeError", "OPEN_APP_ERRORS", "OpenAppCommandError", "message", "errorCode", "OpenAppCommand", "args", "openAppApduArgs", "apduResponse"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{ApduResponse as p}from"../../device-session/ApduResponse";import{isSuccessCommandResult as t}from"../../../../src";import{OpenAppCommand as n,OpenAppCommandError as s}from"./OpenAppCommand";describe("OpenAppCommand",()=>{const o="MyApp";it("should return the correct APDU for opening an application",()=>{const e=Uint8Array.from([224,216,0,0,5,77,121,65,112,112]),r=new n({appName:o}).getApdu();expect(r.getRawApdu()).toStrictEqual(e)}),it("should not throw error when command is successful",()=>{const e=new p({statusCode:new Uint8Array([144,0]),data:new Uint8Array([])});expect(()=>new n({appName:o}).parseResponse(e)).not.toThrow()}),describe("errors",()=>{it("should return a handled open app error if no name provided",()=>{const e=new p({statusCode:new Uint8Array([103,10]),data:new Uint8Array([])}),r=new n({appName:o}).parseResponse(e);expect(t(r)).toBe(!1),expect(r.error).toBeInstanceOf(s)}),it("should return a handled open app error if unknown application name",()=>{const e=new p({statusCode:new Uint8Array([104,7]),data:new Uint8Array([])}),r=new n({appName:o}).parseResponse(e);expect(t(r)).toBe(!1),expect(r.error).toBeInstanceOf(s)})})});
1
+ import{ApduResponse as p}from"../../device-session/ApduResponse";import{isSuccessCommandResult as t}from"../../../../src";import{OpenAppCommand as o,OpenAppCommandError as s}from"./OpenAppCommand";describe("OpenAppCommand",()=>{const n="MyApp";describe("name",()=>{it("should be 'openApp'",()=>{expect(new o({appName:n}).name).toBe("openApp")})}),it("should return the correct APDU for opening an application",()=>{const e=Uint8Array.from([224,216,0,0,5,77,121,65,112,112]),r=new o({appName:n}).getApdu();expect(r.getRawApdu()).toStrictEqual(e)}),it("should not throw error when command is successful",()=>{const e=new p({statusCode:new Uint8Array([144,0]),data:new Uint8Array([])});expect(()=>new o({appName:n}).parseResponse(e)).not.toThrow()}),describe("errors",()=>{it("should return a handled open app error if no name provided",()=>{const e=new p({statusCode:new Uint8Array([103,10]),data:new Uint8Array([])}),r=new o({appName:n}).parseResponse(e);expect(t(r)).toBe(!1),expect(r.error).toBeInstanceOf(s)}),it("should return a handled open app error if unknown application name",()=>{const e=new p({statusCode:new Uint8Array([104,7]),data:new Uint8Array([])}),r=new o({appName:n}).parseResponse(e);expect(t(r)).toBe(!1),expect(r.error).toBeInstanceOf(s)})})});
2
2
  //# sourceMappingURL=OpenAppCommand.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/api/command/os/OpenAppCommand.test.ts"],
4
- "sourcesContent": ["import { type CommandErrorResult } from \"@api/command/model/CommandResult\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { isSuccessCommandResult } from \"@root/src\";\n\nimport {\n OpenAppCommand,\n OpenAppCommandError,\n type OpenAppErrorCodes,\n} from \"./OpenAppCommand\";\n\ndescribe(\"OpenAppCommand\", () => {\n const appName = \"MyApp\";\n it(\"should return the correct APDU for opening an application\", () => {\n const expectedApdu = Uint8Array.from([\n 0xe0, 0xd8, 0x00, 0x00, 0x05, 0x4d, 0x79, 0x41, 0x70, 0x70,\n ]);\n const apdu = new OpenAppCommand({ appName }).getApdu();\n expect(apdu.getRawApdu()).toStrictEqual(expectedApdu);\n });\n\n it(\"should not throw error when command is successful\", () => {\n const apduResponse: ApduResponse = new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: new Uint8Array([]),\n });\n expect(() =>\n new OpenAppCommand({ appName }).parseResponse(apduResponse),\n ).not.toThrow();\n });\n\n describe(\"errors\", () => {\n it(\"should return a handled open app error if no name provided\", () => {\n const apduResponse: ApduResponse = new ApduResponse({\n statusCode: new Uint8Array([0x67, 0x0a]),\n data: new Uint8Array([]),\n });\n const result = new OpenAppCommand({ appName }).parseResponse(\n apduResponse,\n ) as CommandErrorResult<OpenAppErrorCodes>;\n expect(isSuccessCommandResult(result)).toBe(false);\n expect(result.error).toBeInstanceOf(OpenAppCommandError);\n });\n it(\"should return a handled open app error if unknown application name\", () => {\n const apduResponse: ApduResponse = new ApduResponse({\n statusCode: new Uint8Array([0x68, 0x07]),\n data: new Uint8Array([]),\n });\n const result = new OpenAppCommand({ appName }).parseResponse(\n apduResponse,\n ) as CommandErrorResult<OpenAppErrorCodes>;\n expect(isSuccessCommandResult(result)).toBe(false);\n expect(result.error).toBeInstanceOf(OpenAppCommandError);\n });\n });\n});\n"],
5
- "mappings": "AACA,OAAS,gBAAAA,MAAoB,mCAC7B,OAAS,0BAAAC,MAA8B,YAEvC,OACE,kBAAAC,EACA,uBAAAC,MAEK,mBAEP,SAAS,iBAAkB,IAAM,CAC/B,MAAMC,EAAU,QAChB,GAAG,4DAA6D,IAAM,CACpE,MAAMC,EAAe,WAAW,KAAK,CACnC,IAAM,IAAM,EAAM,EAAM,EAAM,GAAM,IAAM,GAAM,IAAM,GACxD,CAAC,EACKC,EAAO,IAAIJ,EAAe,CAAE,QAAAE,CAAQ,CAAC,EAAE,QAAQ,EACrD,OAAOE,EAAK,WAAW,CAAC,EAAE,cAAcD,CAAY,CACtD,CAAC,EAED,GAAG,oDAAqD,IAAM,CAC5D,MAAME,EAA6B,IAAIP,EAAa,CAClD,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,EACvC,KAAM,IAAI,WAAW,CAAC,CAAC,CACzB,CAAC,EACD,OAAO,IACL,IAAIE,EAAe,CAAE,QAAAE,CAAQ,CAAC,EAAE,cAAcG,CAAY,CAC5D,EAAE,IAAI,QAAQ,CAChB,CAAC,EAED,SAAS,SAAU,IAAM,CACvB,GAAG,6DAA8D,IAAM,CACrE,MAAMA,EAA6B,IAAIP,EAAa,CAClD,WAAY,IAAI,WAAW,CAAC,IAAM,EAAI,CAAC,EACvC,KAAM,IAAI,WAAW,CAAC,CAAC,CACzB,CAAC,EACKQ,EAAS,IAAIN,EAAe,CAAE,QAAAE,CAAQ,CAAC,EAAE,cAC7CG,CACF,EACA,OAAON,EAAuBO,CAAM,CAAC,EAAE,KAAK,EAAK,EACjD,OAAOA,EAAO,KAAK,EAAE,eAAeL,CAAmB,CACzD,CAAC,EACD,GAAG,qEAAsE,IAAM,CAC7E,MAAMI,EAA6B,IAAIP,EAAa,CAClD,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,EACvC,KAAM,IAAI,WAAW,CAAC,CAAC,CACzB,CAAC,EACKQ,EAAS,IAAIN,EAAe,CAAE,QAAAE,CAAQ,CAAC,EAAE,cAC7CG,CACF,EACA,OAAON,EAAuBO,CAAM,CAAC,EAAE,KAAK,EAAK,EACjD,OAAOA,EAAO,KAAK,EAAE,eAAeL,CAAmB,CACzD,CAAC,CACH,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import { type CommandErrorResult } from \"@api/command/model/CommandResult\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { isSuccessCommandResult } from \"@root/src\";\n\nimport {\n OpenAppCommand,\n OpenAppCommandError,\n type OpenAppErrorCodes,\n} from \"./OpenAppCommand\";\n\ndescribe(\"OpenAppCommand\", () => {\n const appName = \"MyApp\";\n\n describe(\"name\", () => {\n it(\"should be 'openApp'\", () => {\n expect(new OpenAppCommand({ appName }).name).toBe(\"openApp\");\n });\n });\n\n it(\"should return the correct APDU for opening an application\", () => {\n const expectedApdu = Uint8Array.from([\n 0xe0, 0xd8, 0x00, 0x00, 0x05, 0x4d, 0x79, 0x41, 0x70, 0x70,\n ]);\n const apdu = new OpenAppCommand({ appName }).getApdu();\n expect(apdu.getRawApdu()).toStrictEqual(expectedApdu);\n });\n\n it(\"should not throw error when command is successful\", () => {\n const apduResponse: ApduResponse = new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: new Uint8Array([]),\n });\n expect(() =>\n new OpenAppCommand({ appName }).parseResponse(apduResponse),\n ).not.toThrow();\n });\n\n describe(\"errors\", () => {\n it(\"should return a handled open app error if no name provided\", () => {\n const apduResponse: ApduResponse = new ApduResponse({\n statusCode: new Uint8Array([0x67, 0x0a]),\n data: new Uint8Array([]),\n });\n const result = new OpenAppCommand({ appName }).parseResponse(\n apduResponse,\n ) as CommandErrorResult<OpenAppErrorCodes>;\n expect(isSuccessCommandResult(result)).toBe(false);\n expect(result.error).toBeInstanceOf(OpenAppCommandError);\n });\n it(\"should return a handled open app error if unknown application name\", () => {\n const apduResponse: ApduResponse = new ApduResponse({\n statusCode: new Uint8Array([0x68, 0x07]),\n data: new Uint8Array([]),\n });\n const result = new OpenAppCommand({ appName }).parseResponse(\n apduResponse,\n ) as CommandErrorResult<OpenAppErrorCodes>;\n expect(isSuccessCommandResult(result)).toBe(false);\n expect(result.error).toBeInstanceOf(OpenAppCommandError);\n });\n });\n});\n"],
5
+ "mappings": "AACA,OAAS,gBAAAA,MAAoB,mCAC7B,OAAS,0BAAAC,MAA8B,YAEvC,OACE,kBAAAC,EACA,uBAAAC,MAEK,mBAEP,SAAS,iBAAkB,IAAM,CAC/B,MAAMC,EAAU,QAEhB,SAAS,OAAQ,IAAM,CACrB,GAAG,sBAAuB,IAAM,CAC9B,OAAO,IAAIF,EAAe,CAAE,QAAAE,CAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,SAAS,CAC7D,CAAC,CACH,CAAC,EAED,GAAG,4DAA6D,IAAM,CACpE,MAAMC,EAAe,WAAW,KAAK,CACnC,IAAM,IAAM,EAAM,EAAM,EAAM,GAAM,IAAM,GAAM,IAAM,GACxD,CAAC,EACKC,EAAO,IAAIJ,EAAe,CAAE,QAAAE,CAAQ,CAAC,EAAE,QAAQ,EACrD,OAAOE,EAAK,WAAW,CAAC,EAAE,cAAcD,CAAY,CACtD,CAAC,EAED,GAAG,oDAAqD,IAAM,CAC5D,MAAME,EAA6B,IAAIP,EAAa,CAClD,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,EACvC,KAAM,IAAI,WAAW,CAAC,CAAC,CACzB,CAAC,EACD,OAAO,IACL,IAAIE,EAAe,CAAE,QAAAE,CAAQ,CAAC,EAAE,cAAcG,CAAY,CAC5D,EAAE,IAAI,QAAQ,CAChB,CAAC,EAED,SAAS,SAAU,IAAM,CACvB,GAAG,6DAA8D,IAAM,CACrE,MAAMA,EAA6B,IAAIP,EAAa,CAClD,WAAY,IAAI,WAAW,CAAC,IAAM,EAAI,CAAC,EACvC,KAAM,IAAI,WAAW,CAAC,CAAC,CACzB,CAAC,EACKQ,EAAS,IAAIN,EAAe,CAAE,QAAAE,CAAQ,CAAC,EAAE,cAC7CG,CACF,EACA,OAAON,EAAuBO,CAAM,CAAC,EAAE,KAAK,EAAK,EACjD,OAAOA,EAAO,KAAK,EAAE,eAAeL,CAAmB,CACzD,CAAC,EACD,GAAG,qEAAsE,IAAM,CAC7E,MAAMI,EAA6B,IAAIP,EAAa,CAClD,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,EACvC,KAAM,IAAI,WAAW,CAAC,CAAC,CACzB,CAAC,EACKQ,EAAS,IAAIN,EAAe,CAAE,QAAAE,CAAQ,CAAC,EAAE,cAC7CG,CACF,EACA,OAAON,EAAuBO,CAAM,CAAC,EAAE,KAAK,EAAK,EACjD,OAAOA,EAAO,KAAK,EAAE,eAAeL,CAAmB,CACzD,CAAC,CACH,CAAC,CACH,CAAC",
6
6
  "names": ["ApduResponse", "isSuccessCommandResult", "OpenAppCommand", "OpenAppCommandError", "appName", "expectedApdu", "apdu", "apduResponse", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{Left as p}from"purify-ts";import{CommandResultStatus as i}from"../../command/model/CommandResult";import{DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS as f}from"../../../internal/device-session/data/DeviceSessionRefresherConst";import{deviceSessionStubBuilder as l}from"../../../internal/device-session/model/DeviceSession.stub";import{DefaultDeviceSessionService as v}from"../../../internal/device-session/service/DefaultDeviceSessionService";import{DefaultLoggerPublisherService as g}from"../../../internal/logger-publisher/service/DefaultLoggerPublisherService";import{AxiosManagerApiDataSource as D}from"../../../internal/manager-api/data/AxiosManagerApiDataSource";import{DefaultManagerApiService as C}from"../../../internal/manager-api/service/DefaultManagerApiService";import{DefaultSecureChannelDataSource as h}from"../../../internal/secure-channel/data/DefaultSecureChannelDataSource";import{DefaultSecureChannelService as y}from"../../../internal/secure-channel/service/DefaultSecureChannelService";import{SendCommandUseCase as a}from"./SendCommandUseCase";let o,t,n,c,m,u;const S="fakeSessionId";let s;describe("SendCommandUseCase",()=>{beforeEach(()=>{o=new g([],"send-command-use-case"),t=new v(()=>o),c=new D({}),n=new C(c),u=new h({}),m=new y(u),s={getApdu:vi.fn(),parseResponse:vi.fn()}}),afterEach(()=>{vi.restoreAllMocks()}),it("should send a command to a connected device",async()=>{const e=l({},()=>o,n,m,f);t.addDeviceSession(e);const r=new a(t,()=>o);vi.spyOn(e,"sendCommand").mockResolvedValue({status:i.Success,data:void 0});const d=await r.execute({sessionId:S,command:s});e.close(),expect(d).toStrictEqual({status:i.Success,data:void 0})}),it("should throw an error if the session is not found",async()=>{const e=new a(t,()=>o);vi.spyOn(t,"getDeviceSessionById").mockReturnValue(p({_tag:"DeviceSessionNotFound"}));const r=e.execute({sessionId:S,command:s});await expect(r).rejects.toMatchObject({_tag:"DeviceSessionNotFound"})})});
1
+ import{Left as p}from"purify-ts";import{CommandResultStatus as n}from"../../command/model/CommandResult";import{DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS as f}from"../../../internal/device-session/data/DeviceSessionRefresherConst";import{deviceSessionStubBuilder as v}from"../../../internal/device-session/model/DeviceSession.stub";import{DefaultDeviceSessionService as l}from"../../../internal/device-session/service/DefaultDeviceSessionService";import{DefaultLoggerPublisherService as g}from"../../../internal/logger-publisher/service/DefaultLoggerPublisherService";import{AxiosManagerApiDataSource as D}from"../../../internal/manager-api/data/AxiosManagerApiDataSource";import{DefaultManagerApiService as C}from"../../../internal/manager-api/service/DefaultManagerApiService";import{DefaultSecureChannelDataSource as h}from"../../../internal/secure-channel/data/DefaultSecureChannelDataSource";import{DefaultSecureChannelService as y}from"../../../internal/secure-channel/service/DefaultSecureChannelService";import{SendCommandUseCase as i}from"./SendCommandUseCase";let o,t,a,c,m,u;const S="fakeSessionId";let r={name:"testCommand",getApdu:vi.fn(),parseResponse:vi.fn()};describe("SendCommandUseCase",()=>{beforeEach(()=>{o=new g([],"send-command-use-case"),t=new l(()=>o),c=new D({}),a=new C(c),u=new h({}),m=new y(u),r={name:"testCommand",getApdu:vi.fn(),parseResponse:vi.fn()}}),afterEach(()=>{vi.restoreAllMocks()}),it("should send a command to a connected device",async()=>{const e=v({},()=>o,a,m,f);t.addDeviceSession(e);const s=new i(t,()=>o);vi.spyOn(e,"sendCommand").mockResolvedValue({status:n.Success,data:void 0});const d=await s.execute({sessionId:S,command:r});e.close(),expect(d).toStrictEqual({status:n.Success,data:void 0})}),it("should throw an error if the session is not found",async()=>{const e=new i(t,()=>o);vi.spyOn(t,"getDeviceSessionById").mockReturnValue(p({_tag:"DeviceSessionNotFound"}));const s=e.execute({sessionId:S,command:r});await expect(s).rejects.toMatchObject({_tag:"DeviceSessionNotFound"})})});
2
2
  //# sourceMappingURL=SendCommandUseCase.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/api/command/use-case/SendCommandUseCase.test.ts"],
4
- "sourcesContent": ["import { Left } from \"purify-ts\";\n\nimport { type Command } from \"@api/command/Command\";\nimport { CommandResultStatus } from \"@api/command/model/CommandResult\";\nimport { type DmkConfig } from \"@api/DmkConfig\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS } from \"@internal/device-session/data/DeviceSessionRefresherConst\";\nimport { deviceSessionStubBuilder } from \"@internal/device-session/model/DeviceSession.stub\";\nimport { DefaultDeviceSessionService } from \"@internal/device-session/service/DefaultDeviceSessionService\";\nimport { type DeviceSessionService } from \"@internal/device-session/service/DeviceSessionService\";\nimport { DefaultLoggerPublisherService } from \"@internal/logger-publisher/service/DefaultLoggerPublisherService\";\nimport { AxiosManagerApiDataSource } from \"@internal/manager-api/data/AxiosManagerApiDataSource\";\nimport { type ManagerApiDataSource } from \"@internal/manager-api/data/ManagerApiDataSource\";\nimport { DefaultManagerApiService } from \"@internal/manager-api/service/DefaultManagerApiService\";\nimport { type ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\nimport { DefaultSecureChannelDataSource } from \"@internal/secure-channel/data/DefaultSecureChannelDataSource\";\nimport { type SecureChannelDataSource } from \"@internal/secure-channel/data/SecureChannelDataSource\";\nimport { DefaultSecureChannelService } from \"@internal/secure-channel/service/DefaultSecureChannelService\";\nimport { type SecureChannelService } from \"@internal/secure-channel/service/SecureChannelService\";\n\nimport { SendCommandUseCase } from \"./SendCommandUseCase\";\n\nlet logger: LoggerPublisherService;\nlet sessionService: DeviceSessionService;\nlet managerApi: ManagerApiService;\nlet managerApiDataSource: ManagerApiDataSource;\nlet secureChannel: SecureChannelService;\nlet secureChannelDataSource: SecureChannelDataSource;\nconst fakeSessionId = \"fakeSessionId\";\nlet command: Command<{ status: string }>;\n\ndescribe(\"SendCommandUseCase\", () => {\n beforeEach(() => {\n logger = new DefaultLoggerPublisherService([], \"send-command-use-case\");\n sessionService = new DefaultDeviceSessionService(() => logger);\n managerApiDataSource = new AxiosManagerApiDataSource({} as DmkConfig);\n managerApi = new DefaultManagerApiService(managerApiDataSource);\n secureChannelDataSource = new DefaultSecureChannelDataSource(\n {} as DmkConfig,\n );\n secureChannel = new DefaultSecureChannelService(secureChannelDataSource);\n command = {\n getApdu: vi.fn(),\n parseResponse: vi.fn(),\n };\n });\n\n afterEach(() => {\n vi.restoreAllMocks();\n });\n\n it(\"should send a command to a connected device\", async () => {\n const deviceSession = deviceSessionStubBuilder(\n {},\n () => logger,\n managerApi,\n secureChannel,\n DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS,\n );\n sessionService.addDeviceSession(deviceSession);\n const useCase = new SendCommandUseCase(sessionService, () => logger);\n\n vi.spyOn(deviceSession, \"sendCommand\").mockResolvedValue({\n status: CommandResultStatus.Success,\n data: undefined,\n });\n\n const response = await useCase.execute<{ status: string }, void, void>({\n sessionId: fakeSessionId,\n command,\n });\n\n deviceSession.close();\n\n expect(response).toStrictEqual({\n status: CommandResultStatus.Success,\n data: undefined,\n });\n });\n\n it(\"should throw an error if the session is not found\", async () => {\n const useCase = new SendCommandUseCase(sessionService, () => logger);\n vi.spyOn(sessionService, \"getDeviceSessionById\").mockReturnValue(\n Left({ _tag: \"DeviceSessionNotFound\" }),\n );\n\n const res = useCase.execute<{ status: string }, void, void>({\n sessionId: fakeSessionId,\n command,\n });\n\n await expect(res).rejects.toMatchObject({ _tag: \"DeviceSessionNotFound\" });\n });\n});\n"],
5
- "mappings": "AAAA,OAAS,QAAAA,MAAY,YAGrB,OAAS,uBAAAC,MAA2B,mCAGpC,OAAS,4CAAAC,MAAgD,4DACzD,OAAS,4BAAAC,MAAgC,oDACzC,OAAS,+BAAAC,MAAmC,+DAE5C,OAAS,iCAAAC,MAAqC,mEAC9C,OAAS,6BAAAC,MAAiC,uDAE1C,OAAS,4BAAAC,MAAgC,yDAEzC,OAAS,kCAAAC,MAAsC,+DAE/C,OAAS,+BAAAC,MAAmC,+DAG5C,OAAS,sBAAAC,MAA0B,uBAEnC,IAAIC,EACAC,EACAC,EACAC,EACAC,EACAC,EACJ,MAAMC,EAAgB,gBACtB,IAAIC,EAEJ,SAAS,qBAAsB,IAAM,CACnC,WAAW,IAAM,CACfP,EAAS,IAAIN,EAA8B,CAAC,EAAG,uBAAuB,EACtEO,EAAiB,IAAIR,EAA4B,IAAMO,CAAM,EAC7DG,EAAuB,IAAIR,EAA0B,CAAC,CAAc,EACpEO,EAAa,IAAIN,EAAyBO,CAAoB,EAC9DE,EAA0B,IAAIR,EAC5B,CAAC,CACH,EACAO,EAAgB,IAAIN,EAA4BO,CAAuB,EACvEE,EAAU,CACR,QAAS,GAAG,GAAG,EACf,cAAe,GAAG,GAAG,CACvB,CACF,CAAC,EAED,UAAU,IAAM,CACd,GAAG,gBAAgB,CACrB,CAAC,EAED,GAAG,8CAA+C,SAAY,CAC5D,MAAMC,EAAgBhB,EACpB,CAAC,EACD,IAAMQ,EACNE,EACAE,EACAb,CACF,EACAU,EAAe,iBAAiBO,CAAa,EAC7C,MAAMC,EAAU,IAAIV,EAAmBE,EAAgB,IAAMD,CAAM,EAEnE,GAAG,MAAMQ,EAAe,aAAa,EAAE,kBAAkB,CACvD,OAAQlB,EAAoB,QAC5B,KAAM,MACR,CAAC,EAED,MAAMoB,EAAW,MAAMD,EAAQ,QAAwC,CACrE,UAAWH,EACX,QAAAC,CACF,CAAC,EAEDC,EAAc,MAAM,EAEpB,OAAOE,CAAQ,EAAE,cAAc,CAC7B,OAAQpB,EAAoB,QAC5B,KAAM,MACR,CAAC,CACH,CAAC,EAED,GAAG,oDAAqD,SAAY,CAClE,MAAMmB,EAAU,IAAIV,EAAmBE,EAAgB,IAAMD,CAAM,EACnE,GAAG,MAAMC,EAAgB,sBAAsB,EAAE,gBAC/CZ,EAAK,CAAE,KAAM,uBAAwB,CAAC,CACxC,EAEA,MAAMsB,EAAMF,EAAQ,QAAwC,CAC1D,UAAWH,EACX,QAAAC,CACF,CAAC,EAED,MAAM,OAAOI,CAAG,EAAE,QAAQ,cAAc,CAAE,KAAM,uBAAwB,CAAC,CAC3E,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import { Left } from \"purify-ts\";\n\nimport { type Command } from \"@api/command/Command\";\nimport { CommandResultStatus } from \"@api/command/model/CommandResult\";\nimport { type DmkConfig } from \"@api/DmkConfig\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS } from \"@internal/device-session/data/DeviceSessionRefresherConst\";\nimport { deviceSessionStubBuilder } from \"@internal/device-session/model/DeviceSession.stub\";\nimport { DefaultDeviceSessionService } from \"@internal/device-session/service/DefaultDeviceSessionService\";\nimport { type DeviceSessionService } from \"@internal/device-session/service/DeviceSessionService\";\nimport { DefaultLoggerPublisherService } from \"@internal/logger-publisher/service/DefaultLoggerPublisherService\";\nimport { AxiosManagerApiDataSource } from \"@internal/manager-api/data/AxiosManagerApiDataSource\";\nimport { type ManagerApiDataSource } from \"@internal/manager-api/data/ManagerApiDataSource\";\nimport { DefaultManagerApiService } from \"@internal/manager-api/service/DefaultManagerApiService\";\nimport { type ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\nimport { DefaultSecureChannelDataSource } from \"@internal/secure-channel/data/DefaultSecureChannelDataSource\";\nimport { type SecureChannelDataSource } from \"@internal/secure-channel/data/SecureChannelDataSource\";\nimport { DefaultSecureChannelService } from \"@internal/secure-channel/service/DefaultSecureChannelService\";\nimport { type SecureChannelService } from \"@internal/secure-channel/service/SecureChannelService\";\n\nimport { SendCommandUseCase } from \"./SendCommandUseCase\";\n\nlet logger: LoggerPublisherService;\nlet sessionService: DeviceSessionService;\nlet managerApi: ManagerApiService;\nlet managerApiDataSource: ManagerApiDataSource;\nlet secureChannel: SecureChannelService;\nlet secureChannelDataSource: SecureChannelDataSource;\nconst fakeSessionId = \"fakeSessionId\";\nlet command: Command<{ status: string }, void, void> = {\n name: \"testCommand\",\n getApdu: vi.fn(),\n parseResponse: vi.fn(),\n};\n\ndescribe(\"SendCommandUseCase\", () => {\n beforeEach(() => {\n logger = new DefaultLoggerPublisherService([], \"send-command-use-case\");\n sessionService = new DefaultDeviceSessionService(() => logger);\n managerApiDataSource = new AxiosManagerApiDataSource({} as DmkConfig);\n managerApi = new DefaultManagerApiService(managerApiDataSource);\n secureChannelDataSource = new DefaultSecureChannelDataSource(\n {} as DmkConfig,\n );\n secureChannel = new DefaultSecureChannelService(secureChannelDataSource);\n command = {\n name: \"testCommand\",\n getApdu: vi.fn(),\n parseResponse: vi.fn(),\n };\n });\n\n afterEach(() => {\n vi.restoreAllMocks();\n });\n\n it(\"should send a command to a connected device\", async () => {\n const deviceSession = deviceSessionStubBuilder(\n {},\n () => logger,\n managerApi,\n secureChannel,\n DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS,\n );\n sessionService.addDeviceSession(deviceSession);\n const useCase = new SendCommandUseCase(sessionService, () => logger);\n\n vi.spyOn(deviceSession, \"sendCommand\").mockResolvedValue({\n status: CommandResultStatus.Success,\n data: undefined,\n });\n\n const response = await useCase.execute<{ status: string }, void, void>({\n sessionId: fakeSessionId,\n command,\n });\n\n deviceSession.close();\n\n expect(response).toStrictEqual({\n status: CommandResultStatus.Success,\n data: undefined,\n });\n });\n\n it(\"should throw an error if the session is not found\", async () => {\n const useCase = new SendCommandUseCase(sessionService, () => logger);\n vi.spyOn(sessionService, \"getDeviceSessionById\").mockReturnValue(\n Left({ _tag: \"DeviceSessionNotFound\" }),\n );\n\n const res = useCase.execute<{ status: string }, void, void>({\n sessionId: fakeSessionId,\n command,\n });\n\n await expect(res).rejects.toMatchObject({ _tag: \"DeviceSessionNotFound\" });\n });\n});\n"],
5
+ "mappings": "AAAA,OAAS,QAAAA,MAAY,YAGrB,OAAS,uBAAAC,MAA2B,mCAGpC,OAAS,4CAAAC,MAAgD,4DACzD,OAAS,4BAAAC,MAAgC,oDACzC,OAAS,+BAAAC,MAAmC,+DAE5C,OAAS,iCAAAC,MAAqC,mEAC9C,OAAS,6BAAAC,MAAiC,uDAE1C,OAAS,4BAAAC,MAAgC,yDAEzC,OAAS,kCAAAC,MAAsC,+DAE/C,OAAS,+BAAAC,MAAmC,+DAG5C,OAAS,sBAAAC,MAA0B,uBAEnC,IAAIC,EACAC,EACAC,EACAC,EACAC,EACAC,EACJ,MAAMC,EAAgB,gBACtB,IAAIC,EAAmD,CACrD,KAAM,cACN,QAAS,GAAG,GAAG,EACf,cAAe,GAAG,GAAG,CACvB,EAEA,SAAS,qBAAsB,IAAM,CACnC,WAAW,IAAM,CACfP,EAAS,IAAIN,EAA8B,CAAC,EAAG,uBAAuB,EACtEO,EAAiB,IAAIR,EAA4B,IAAMO,CAAM,EAC7DG,EAAuB,IAAIR,EAA0B,CAAC,CAAc,EACpEO,EAAa,IAAIN,EAAyBO,CAAoB,EAC9DE,EAA0B,IAAIR,EAC5B,CAAC,CACH,EACAO,EAAgB,IAAIN,EAA4BO,CAAuB,EACvEE,EAAU,CACR,KAAM,cACN,QAAS,GAAG,GAAG,EACf,cAAe,GAAG,GAAG,CACvB,CACF,CAAC,EAED,UAAU,IAAM,CACd,GAAG,gBAAgB,CACrB,CAAC,EAED,GAAG,8CAA+C,SAAY,CAC5D,MAAMC,EAAgBhB,EACpB,CAAC,EACD,IAAMQ,EACNE,EACAE,EACAb,CACF,EACAU,EAAe,iBAAiBO,CAAa,EAC7C,MAAMC,EAAU,IAAIV,EAAmBE,EAAgB,IAAMD,CAAM,EAEnE,GAAG,MAAMQ,EAAe,aAAa,EAAE,kBAAkB,CACvD,OAAQlB,EAAoB,QAC5B,KAAM,MACR,CAAC,EAED,MAAMoB,EAAW,MAAMD,EAAQ,QAAwC,CACrE,UAAWH,EACX,QAAAC,CACF,CAAC,EAEDC,EAAc,MAAM,EAEpB,OAAOE,CAAQ,EAAE,cAAc,CAC7B,OAAQpB,EAAoB,QAC5B,KAAM,MACR,CAAC,CACH,CAAC,EAED,GAAG,oDAAqD,SAAY,CAClE,MAAMmB,EAAU,IAAIV,EAAmBE,EAAgB,IAAMD,CAAM,EACnE,GAAG,MAAMC,EAAgB,sBAAsB,EAAE,gBAC/CZ,EAAK,CAAE,KAAM,uBAAwB,CAAC,CACxC,EAEA,MAAMsB,EAAMF,EAAQ,QAAwC,CAC1D,UAAWH,EACX,QAAAC,CACF,CAAC,EAED,MAAM,OAAOI,CAAG,EAAE,QAAQ,cAAc,CAAE,KAAM,uBAAwB,CAAC,CAC3E,CAAC,CACH,CAAC",
6
6
  "names": ["Left", "CommandResultStatus", "DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS", "deviceSessionStubBuilder", "DefaultDeviceSessionService", "DefaultLoggerPublisherService", "AxiosManagerApiDataSource", "DefaultManagerApiService", "DefaultSecureChannelDataSource", "DefaultSecureChannelService", "SendCommandUseCase", "logger", "sessionService", "managerApi", "managerApiDataSource", "secureChannel", "secureChannelDataSource", "fakeSessionId", "command", "deviceSession", "useCase", "response", "res"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var p=(o=>(o.None="none",o.UnlockDevice="unlock-device",o.AllowSecureConnection="allow-secure-connection",o.ConfirmOpenApp="confirm-open-app",o.SignTransaction="sign-transaction",o.SignTypedData="sign-typed-data",o.AllowListApps="allow-list-apps",o.VerifyAddress="verify-address",o.SignPersonalMessage="sign-personal-message",o.SignDelegationAuthorization="sign-delegation-authorization",o.Web3ChecksOptIn="web3-checks-opt-in",o))(p||{});export{p as UserInteractionRequired};
1
+ var s=(p=>(p.None="none",p.UnlockDevice="unlock-device",p.AllowSecureConnection="allow-secure-connection",p.ConfirmOpenApp="confirm-open-app",p.SignTransaction="sign-transaction",p.SignTypedData="sign-typed-data",p.AllowListApps="allow-list-apps",p.VerifyAddress="verify-address",p.SignPersonalMessage="sign-personal-message",p.SignDelegationAuthorization="sign-delegation-authorization",p.Web3ChecksOptIn="web3-checks-opt-in",p.VerifySafeAddress="verify-safe-address",p))(s||{});export{s as UserInteractionRequired};
2
2
  //# sourceMappingURL=UserInteractionRequired.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/api/device-action/model/UserInteractionRequired.ts"],
4
- "sourcesContent": ["/**\n * The user interaction required on the device to move further in a device action.\n * This is used to inform the users about the action they need to take on the device.\n */\nexport enum UserInteractionRequired {\n None = \"none\",\n UnlockDevice = \"unlock-device\",\n AllowSecureConnection = \"allow-secure-connection\",\n ConfirmOpenApp = \"confirm-open-app\",\n SignTransaction = \"sign-transaction\",\n SignTypedData = \"sign-typed-data\",\n AllowListApps = \"allow-list-apps\",\n VerifyAddress = \"verify-address\",\n SignPersonalMessage = \"sign-personal-message\",\n SignDelegationAuthorization = \"sign-delegation-authorization\",\n Web3ChecksOptIn = \"web3-checks-opt-in\",\n}\n"],
5
- "mappings": "AAIO,IAAKA,OACVA,EAAA,KAAO,OACPA,EAAA,aAAe,gBACfA,EAAA,sBAAwB,0BACxBA,EAAA,eAAiB,mBACjBA,EAAA,gBAAkB,mBAClBA,EAAA,cAAgB,kBAChBA,EAAA,cAAgB,kBAChBA,EAAA,cAAgB,iBAChBA,EAAA,oBAAsB,wBACtBA,EAAA,4BAA8B,gCAC9BA,EAAA,gBAAkB,qBAXRA,OAAA",
4
+ "sourcesContent": ["/**\n * The user interaction required on the device to move further in a device action.\n * This is used to inform the users about the action they need to take on the device.\n */\nexport enum UserInteractionRequired {\n None = \"none\",\n UnlockDevice = \"unlock-device\",\n AllowSecureConnection = \"allow-secure-connection\",\n ConfirmOpenApp = \"confirm-open-app\",\n SignTransaction = \"sign-transaction\",\n SignTypedData = \"sign-typed-data\",\n AllowListApps = \"allow-list-apps\",\n VerifyAddress = \"verify-address\",\n SignPersonalMessage = \"sign-personal-message\",\n SignDelegationAuthorization = \"sign-delegation-authorization\",\n Web3ChecksOptIn = \"web3-checks-opt-in\",\n VerifySafeAddress = \"verify-safe-address\",\n}\n"],
5
+ "mappings": "AAIO,IAAKA,OACVA,EAAA,KAAO,OACPA,EAAA,aAAe,gBACfA,EAAA,sBAAwB,0BACxBA,EAAA,eAAiB,mBACjBA,EAAA,gBAAkB,mBAClBA,EAAA,cAAgB,kBAChBA,EAAA,cAAgB,kBAChBA,EAAA,cAAgB,iBAChBA,EAAA,oBAAsB,wBACtBA,EAAA,4BAA8B,gCAC9BA,EAAA,gBAAkB,qBAClBA,EAAA,kBAAoB,sBAZVA,OAAA",
6
6
  "names": ["UserInteractionRequired"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{Left as D,Right as w}from"purify-ts";import{assign as I,createMachine as M}from"xstate";import{ApduBuilder as g}from"../../../apdu/utils/ApduBuilder";import{CommandResultFactory as A}from"../../../command/model/CommandResult";import{makeDeviceActionInternalApiMock as m}from"../../../device-action/__test-utils__/makeInternalApi";import{testDeviceActionStates as y}from"../../../device-action/__test-utils__/testDeviceActionStates";import{DeviceActionStatus as n}from"../../../device-action/model/DeviceActionState";import{UserInteractionRequired as e}from"../../../device-action/model/UserInteractionRequired";import{UnknownDAError as C}from"../../../device-action/os/Errors";import{OpenAppDeviceAction as S}from"../../../device-action/os/OpenAppDeviceAction/OpenAppDeviceAction";import{UnknownDeviceExchangeError as v}from"../../../../../src";import{CallTaskInAppDeviceAction as u}from"./CallTaskInAppDeviceAction";vi.mock("@api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction",async a=>{const o=await a();return{...o,OpenAppDeviceAction:vi.fn(()=>({...o.OpenAppDeviceAction,makeStateMachine:vi.fn()}))}});const l=a=>{S.mockImplementation(()=>({makeStateMachine:vi.fn().mockImplementation(()=>M({initial:"pending",states:{pending:{entry:I({intermediateValue:{requiredUserInteraction:e.ConfirmOpenApp}}),after:{0:"done"}},done:{type:"final"}},output:()=>a?D(a):w(void 0)}))}))};describe("CallTaskInAppDeviceAction",()=>{const a=vi.fn(),o=()=>({callTask:a}),{sendCommand:f}=m(),p={paramString:"aParameter",paramNumber:1234},k={aNumber:5678,aString:"mockedResponseString"};beforeEach(()=>{vi.resetAllMocks()}),describe("without mocking extractDependencies",()=>{it("should call sendCommand on internalApi with the correct parameters",async()=>{l(),f.mockResolvedValue(A({data:void 0}));const i=new u({input:{task:async r=>await r.sendCommand(new d(p)),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!1}});await new Promise((r,t)=>{i._execute(m()).observable.subscribe({error:()=>t(),complete:()=>r(),next:()=>{}})}),expect(f).toHaveBeenCalledWith(new d(p))})}),describe("error cases",()=>{it("should error and output the error if the open app fails",()=>new Promise((i,r)=>{l(new C("Mocked error"));const t=[{status:n.Pending,intermediateValue:{requiredUserInteraction:e.None}},{status:n.Pending,intermediateValue:{requiredUserInteraction:e.ConfirmOpenApp}},{status:n.Error,error:new C("Mocked error")}];y(new u({input:{task:async s=>await s.sendCommand(new d(p)),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!1}}),t,m(),{onDone:i,onError:r})})),it("should error and output an error if the call task fails",()=>new Promise((i,r)=>{l(),a.mockResolvedValue(A({error:new v("Mocked error")}));const t=new u({input:{task:async c=>await c.sendCommand(new d(p)),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!1}});vi.spyOn(t,"extractDependencies").mockImplementation(o);const s=[{status:n.Pending,intermediateValue:{requiredUserInteraction:e.None}},{status:n.Pending,intermediateValue:{requiredUserInteraction:e.ConfirmOpenApp}},{status:n.Pending,intermediateValue:{requiredUserInteraction:e.VerifyAddress}},{status:n.Error,error:new v("Mocked error")}];y(t,s,m(),{onDone:i,onError:r})}))}),describe("success cases",()=>{it("should succeed and output the command result if the send command succeeds",()=>new Promise((i,r)=>{l(),a.mockResolvedValue(A({data:k}));const t=new u({input:{task:async c=>await c.sendCommand(new d(p)),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!1}});vi.spyOn(t,"extractDependencies").mockImplementation(o);const s=[{status:n.Pending,intermediateValue:{requiredUserInteraction:e.None}},{status:n.Pending,intermediateValue:{requiredUserInteraction:e.ConfirmOpenApp}},{status:n.Pending,intermediateValue:{requiredUserInteraction:e.VerifyAddress}},{status:n.Completed,output:k}];y(t,s,m(),{onDone:i,onError:r})})),it("should succeed while skipping OpenApp",()=>new Promise((i,r)=>{l(),a.mockResolvedValue(A({data:k}));const t=new u({input:{task:async c=>await c.sendCommand(new d(p)),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!0}});vi.spyOn(t,"extractDependencies").mockImplementation(o);const s=[{status:n.Pending,intermediateValue:{requiredUserInteraction:e.VerifyAddress}},{status:n.Completed,output:k}];y(t,s,m(),{onDone:i,onError:r})}))})});class d{params;constructor(o){this.params=o}getApdu(){return new g({cla:0,ins:1,p1:2,p2:3}).add32BitUIntToData(this.params.paramNumber).addAsciiStringToData(this.params.paramString).build()}parseResponse(){return A({data:{aNumber:1,aString:"aString"}})}}
1
+ import{Left as D,Right as w}from"purify-ts";import{assign as I,createMachine as M}from"xstate";import{ApduBuilder as g}from"../../../apdu/utils/ApduBuilder";import{CommandResultFactory as A}from"../../../command/model/CommandResult";import{makeDeviceActionInternalApiMock as m}from"../../../device-action/__test-utils__/makeInternalApi";import{testDeviceActionStates as y}from"../../../device-action/__test-utils__/testDeviceActionStates";import{DeviceActionStatus as n}from"../../../device-action/model/DeviceActionState";import{UserInteractionRequired as e}from"../../../device-action/model/UserInteractionRequired";import{UnknownDAError as C}from"../../../device-action/os/Errors";import{OpenAppDeviceAction as S}from"../../../device-action/os/OpenAppDeviceAction/OpenAppDeviceAction";import{UnknownDeviceExchangeError as v}from"../../../../../src";import{CallTaskInAppDeviceAction as u}from"./CallTaskInAppDeviceAction";vi.mock("@api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction",async r=>{const o=await r();return{...o,OpenAppDeviceAction:vi.fn(()=>({...o.OpenAppDeviceAction,makeStateMachine:vi.fn()}))}});const l=r=>{S.mockImplementation(()=>({makeStateMachine:vi.fn().mockImplementation(()=>M({initial:"pending",states:{pending:{entry:I({intermediateValue:{requiredUserInteraction:e.ConfirmOpenApp}}),after:{0:"done"}},done:{type:"final"}},output:()=>r?D(r):w(void 0)}))}))};describe("CallTaskInAppDeviceAction",()=>{const r=vi.fn(),o=()=>({callTask:r}),{sendCommand:f}=m(),p={paramString:"aParameter",paramNumber:1234},k={aNumber:5678,aString:"mockedResponseString"};beforeEach(()=>{vi.resetAllMocks()}),describe("without mocking extractDependencies",()=>{it("should call sendCommand on internalApi with the correct parameters",async()=>{l(),f.mockResolvedValue(A({data:void 0}));const i=new u({input:{task:async a=>await a.sendCommand(new d(p)),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!1}});await new Promise((a,t)=>{i._execute(m()).observable.subscribe({error:()=>t(),complete:()=>a(),next:()=>{}})}),expect(f).toHaveBeenCalledWith(new d(p))})}),describe("error cases",()=>{it("should error and output the error if the open app fails",()=>new Promise((i,a)=>{l(new C("Mocked error"));const t=[{status:n.Pending,intermediateValue:{requiredUserInteraction:e.None}},{status:n.Pending,intermediateValue:{requiredUserInteraction:e.ConfirmOpenApp}},{status:n.Error,error:new C("Mocked error")}];y(new u({input:{task:async s=>await s.sendCommand(new d(p)),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!1}}),t,m(),{onDone:i,onError:a})})),it("should error and output an error if the call task fails",()=>new Promise((i,a)=>{l(),r.mockResolvedValue(A({error:new v("Mocked error")}));const t=new u({input:{task:async c=>await c.sendCommand(new d(p)),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!1}});vi.spyOn(t,"extractDependencies").mockImplementation(o);const s=[{status:n.Pending,intermediateValue:{requiredUserInteraction:e.None}},{status:n.Pending,intermediateValue:{requiredUserInteraction:e.ConfirmOpenApp}},{status:n.Pending,intermediateValue:{requiredUserInteraction:e.VerifyAddress}},{status:n.Error,error:new v("Mocked error")}];y(t,s,m(),{onDone:i,onError:a})}))}),describe("success cases",()=>{it("should succeed and output the command result if the send command succeeds",()=>new Promise((i,a)=>{l(),r.mockResolvedValue(A({data:k}));const t=new u({input:{task:async c=>await c.sendCommand(new d(p)),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!1}});vi.spyOn(t,"extractDependencies").mockImplementation(o);const s=[{status:n.Pending,intermediateValue:{requiredUserInteraction:e.None}},{status:n.Pending,intermediateValue:{requiredUserInteraction:e.ConfirmOpenApp}},{status:n.Pending,intermediateValue:{requiredUserInteraction:e.VerifyAddress}},{status:n.Completed,output:k}];y(t,s,m(),{onDone:i,onError:a})})),it("should succeed while skipping OpenApp",()=>new Promise((i,a)=>{l(),r.mockResolvedValue(A({data:k}));const t=new u({input:{task:async c=>await c.sendCommand(new d(p)),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!0}});vi.spyOn(t,"extractDependencies").mockImplementation(o);const s=[{status:n.Pending,intermediateValue:{requiredUserInteraction:e.VerifyAddress}},{status:n.Completed,output:k}];y(t,s,m(),{onDone:i,onError:a})}))})});class d{name="testCommand";params;constructor(o){this.params=o}getApdu(){return new g({cla:0,ins:1,p1:2,p2:3}).add32BitUIntToData(this.params.paramNumber).addAsciiStringToData(this.params.paramString).build()}parseResponse(){return A({data:{aNumber:1,aString:"aString"}})}}
2
2
  //# sourceMappingURL=CallTaskInAppDeviceAction.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.test.ts"],
4
- "sourcesContent": ["/* eslint @typescript-eslint/consistent-type-imports:0 */\nimport { Left, Right } from \"purify-ts\";\nimport { type Mock } from \"vitest\";\nimport { assign, createMachine } from \"xstate\";\n\nimport { type Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder } from \"@api/apdu/utils/ApduBuilder\";\nimport { CommandResultFactory } from \"@api/command/model/CommandResult\";\nimport { makeDeviceActionInternalApiMock } from \"@api/device-action/__test-utils__/makeInternalApi\";\nimport { testDeviceActionStates } from \"@api/device-action/__test-utils__/testDeviceActionStates\";\nimport {\n type DeviceActionState,\n DeviceActionStatus,\n} from \"@api/device-action/model/DeviceActionState\";\nimport { UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport { UnknownDAError } from \"@api/device-action/os/Errors\";\nimport { OpenAppDeviceAction } from \"@api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction\";\nimport { type Command } from \"@api/types\";\nimport { UnknownDeviceExchangeError } from \"@root/src\";\n\nimport { CallTaskInAppDeviceAction } from \"./CallTaskInAppDeviceAction\";\nimport {\n type CallTaskInAppDAError,\n type CallTaskInAppDAIntermediateValue,\n type CallTaskInAppDAOutput,\n} from \"./CallTaskInAppDeviceActionTypes\";\n\nvi.mock(\n \"@api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction\",\n async (importOriginal) => {\n const original =\n await importOriginal<\n typeof import(\"@api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction\")\n >();\n return {\n ...original,\n OpenAppDeviceAction: vi.fn(() => ({\n ...original.OpenAppDeviceAction,\n makeStateMachine: vi.fn(),\n })),\n };\n },\n);\n\nconst setupOpenAppDAMock = (error?: unknown) => {\n (OpenAppDeviceAction as Mock).mockImplementation(() => ({\n makeStateMachine: vi.fn().mockImplementation(() =>\n createMachine({\n initial: \"pending\",\n states: {\n pending: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n }),\n after: {\n 0: \"done\",\n },\n },\n done: {\n type: \"final\",\n },\n },\n output: () => (error ? Left(error) : Right(undefined)),\n }),\n ),\n }));\n};\n\ndescribe(\"CallTaskInAppDeviceAction\", () => {\n const callMyTask = vi.fn();\n\n const extractDependenciesMock = () => ({\n callTask: callMyTask,\n });\n\n const { sendCommand: apiSendCommandMock } = makeDeviceActionInternalApiMock();\n\n const commandParams = {\n paramString: \"aParameter\",\n paramNumber: 1234,\n };\n const mockedCommandResponse = {\n aNumber: 5678,\n aString: \"mockedResponseString\",\n };\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"without mocking extractDependencies\", () => {\n it(\"should call sendCommand on internalApi with the correct parameters\", async () => {\n setupOpenAppDAMock();\n apiSendCommandMock.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n\n const deviceAction = new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n await internalApi.sendCommand(new TestCommand(commandParams)),\n appName: \"MyApp\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n });\n await new Promise<void>((resolve, reject) => {\n deviceAction\n ._execute(makeDeviceActionInternalApiMock())\n .observable.subscribe({\n error: () => reject(),\n complete: () => resolve(),\n next: () => {},\n });\n });\n\n expect(apiSendCommandMock).toHaveBeenCalledWith(\n new TestCommand(commandParams),\n );\n });\n });\n\n describe(\"error cases\", () => {\n it(\"should error and output the error if the open app fails\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock(new UnknownDAError(\"Mocked error\"));\n\n const expectedStates: MyCommandCallTaskDAState[] = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDAError(\"Mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n await internalApi.sendCommand(new TestCommand(commandParams)),\n appName: \"MyApp\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n }),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should error and output an error if the call task fails\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock();\n\n callMyTask.mockResolvedValue(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n }),\n );\n\n const deviceAction = new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n await internalApi.sendCommand(new TestCommand(commandParams)),\n appName: \"MyApp\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockImplementation(\n extractDependenciesMock,\n );\n\n const expectedStates: MyCommandCallTaskDAState[] = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n });\n\n describe(\"success cases\", () => {\n it(\"should succeed and output the command result if the send command succeeds\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock();\n\n callMyTask.mockResolvedValue(\n CommandResultFactory({ data: mockedCommandResponse }),\n );\n\n const deviceAction = new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n await internalApi.sendCommand(new TestCommand(commandParams)),\n appName: \"MyApp\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockImplementation(\n extractDependenciesMock,\n );\n\n const expectedStates: MyCommandCallTaskDAState[] = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: mockedCommandResponse,\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should succeed while skipping OpenApp\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock();\n\n callMyTask.mockResolvedValue(\n CommandResultFactory({ data: mockedCommandResponse }),\n );\n\n const deviceAction = new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n await internalApi.sendCommand(new TestCommand(commandParams)),\n appName: \"MyApp\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: true,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockImplementation(\n extractDependenciesMock,\n );\n\n const expectedStates: MyCommandCallTaskDAState[] = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: mockedCommandResponse,\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n });\n});\n\ntype MyCommandResponse = {\n aNumber: number;\n aString: string;\n};\n\ntype MyCommandParams = {\n paramString: string;\n paramNumber: number;\n};\n\nclass TestCommand implements Command<MyCommandResponse, MyCommandParams> {\n params: MyCommandParams;\n constructor(params: MyCommandParams) {\n this.params = params;\n }\n getApdu(): Apdu {\n return new ApduBuilder({ cla: 0x00, ins: 0x01, p1: 0x02, p2: 0x03 })\n .add32BitUIntToData(this.params.paramNumber)\n .addAsciiStringToData(this.params.paramString)\n .build();\n }\n parseResponse() {\n return CommandResultFactory({ data: { aNumber: 1, aString: \"aString\" } });\n }\n}\n\ntype MyCommandCallTaskDAState = DeviceActionState<\n CallTaskInAppDAOutput<MyCommandResponse>,\n CallTaskInAppDAError<UnknownDAError>,\n CallTaskInAppDAIntermediateValue<\n UserInteractionRequired.None | UserInteractionRequired.VerifyAddress\n >\n>;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/* eslint @typescript-eslint/consistent-type-imports:0 */\nimport { Left, Right } from \"purify-ts\";\nimport { type Mock } from \"vitest\";\nimport { assign, createMachine } from \"xstate\";\n\nimport { type Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder } from \"@api/apdu/utils/ApduBuilder\";\nimport { CommandResultFactory } from \"@api/command/model/CommandResult\";\nimport { makeDeviceActionInternalApiMock } from \"@api/device-action/__test-utils__/makeInternalApi\";\nimport { testDeviceActionStates } from \"@api/device-action/__test-utils__/testDeviceActionStates\";\nimport {\n type DeviceActionState,\n DeviceActionStatus,\n} from \"@api/device-action/model/DeviceActionState\";\nimport { UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport { UnknownDAError } from \"@api/device-action/os/Errors\";\nimport { OpenAppDeviceAction } from \"@api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction\";\nimport { type Command } from \"@api/types\";\nimport { UnknownDeviceExchangeError } from \"@root/src\";\n\nimport { CallTaskInAppDeviceAction } from \"./CallTaskInAppDeviceAction\";\nimport {\n type CallTaskInAppDAError,\n type CallTaskInAppDAIntermediateValue,\n type CallTaskInAppDAOutput,\n} from \"./CallTaskInAppDeviceActionTypes\";\n\nvi.mock(\n \"@api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction\",\n async (importOriginal) => {\n const original =\n await importOriginal<\n typeof import(\"@api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction\")\n >();\n return {\n ...original,\n OpenAppDeviceAction: vi.fn(() => ({\n ...original.OpenAppDeviceAction,\n makeStateMachine: vi.fn(),\n })),\n };\n },\n);\n\nconst setupOpenAppDAMock = (error?: unknown) => {\n (OpenAppDeviceAction as Mock).mockImplementation(() => ({\n makeStateMachine: vi.fn().mockImplementation(() =>\n createMachine({\n initial: \"pending\",\n states: {\n pending: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n }),\n after: {\n 0: \"done\",\n },\n },\n done: {\n type: \"final\",\n },\n },\n output: () => (error ? Left(error) : Right(undefined)),\n }),\n ),\n }));\n};\n\ndescribe(\"CallTaskInAppDeviceAction\", () => {\n const callMyTask = vi.fn();\n\n const extractDependenciesMock = () => ({\n callTask: callMyTask,\n });\n\n const { sendCommand: apiSendCommandMock } = makeDeviceActionInternalApiMock();\n\n const commandParams = {\n paramString: \"aParameter\",\n paramNumber: 1234,\n };\n const mockedCommandResponse = {\n aNumber: 5678,\n aString: \"mockedResponseString\",\n };\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"without mocking extractDependencies\", () => {\n it(\"should call sendCommand on internalApi with the correct parameters\", async () => {\n setupOpenAppDAMock();\n apiSendCommandMock.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n\n const deviceAction = new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n await internalApi.sendCommand(new TestCommand(commandParams)),\n appName: \"MyApp\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n });\n await new Promise<void>((resolve, reject) => {\n deviceAction\n ._execute(makeDeviceActionInternalApiMock())\n .observable.subscribe({\n error: () => reject(),\n complete: () => resolve(),\n next: () => {},\n });\n });\n\n expect(apiSendCommandMock).toHaveBeenCalledWith(\n new TestCommand(commandParams),\n );\n });\n });\n\n describe(\"error cases\", () => {\n it(\"should error and output the error if the open app fails\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock(new UnknownDAError(\"Mocked error\"));\n\n const expectedStates: MyCommandCallTaskDAState[] = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDAError(\"Mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n await internalApi.sendCommand(new TestCommand(commandParams)),\n appName: \"MyApp\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n }),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should error and output an error if the call task fails\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock();\n\n callMyTask.mockResolvedValue(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n }),\n );\n\n const deviceAction = new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n await internalApi.sendCommand(new TestCommand(commandParams)),\n appName: \"MyApp\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockImplementation(\n extractDependenciesMock,\n );\n\n const expectedStates: MyCommandCallTaskDAState[] = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n });\n\n describe(\"success cases\", () => {\n it(\"should succeed and output the command result if the send command succeeds\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock();\n\n callMyTask.mockResolvedValue(\n CommandResultFactory({ data: mockedCommandResponse }),\n );\n\n const deviceAction = new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n await internalApi.sendCommand(new TestCommand(commandParams)),\n appName: \"MyApp\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockImplementation(\n extractDependenciesMock,\n );\n\n const expectedStates: MyCommandCallTaskDAState[] = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: mockedCommandResponse,\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should succeed while skipping OpenApp\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock();\n\n callMyTask.mockResolvedValue(\n CommandResultFactory({ data: mockedCommandResponse }),\n );\n\n const deviceAction = new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n await internalApi.sendCommand(new TestCommand(commandParams)),\n appName: \"MyApp\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: true,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockImplementation(\n extractDependenciesMock,\n );\n\n const expectedStates: MyCommandCallTaskDAState[] = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: mockedCommandResponse,\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n });\n});\n\ntype MyCommandResponse = {\n aNumber: number;\n aString: string;\n};\n\ntype MyCommandParams = {\n paramString: string;\n paramNumber: number;\n};\n\nclass TestCommand implements Command<MyCommandResponse, MyCommandParams> {\n readonly name = \"testCommand\";\n\n params: MyCommandParams;\n constructor(params: MyCommandParams) {\n this.params = params;\n }\n getApdu(): Apdu {\n return new ApduBuilder({ cla: 0x00, ins: 0x01, p1: 0x02, p2: 0x03 })\n .add32BitUIntToData(this.params.paramNumber)\n .addAsciiStringToData(this.params.paramString)\n .build();\n }\n parseResponse() {\n return CommandResultFactory({ data: { aNumber: 1, aString: \"aString\" } });\n }\n}\n\ntype MyCommandCallTaskDAState = DeviceActionState<\n CallTaskInAppDAOutput<MyCommandResponse>,\n CallTaskInAppDAError<UnknownDAError>,\n CallTaskInAppDAIntermediateValue<\n UserInteractionRequired.None | UserInteractionRequired.VerifyAddress\n >\n>;\n"],
5
+ "mappings": "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",
6
6
  "names": ["Left", "Right", "assign", "createMachine", "ApduBuilder", "CommandResultFactory", "makeDeviceActionInternalApiMock", "testDeviceActionStates", "DeviceActionStatus", "UserInteractionRequired", "UnknownDAError", "OpenAppDeviceAction", "UnknownDeviceExchangeError", "CallTaskInAppDeviceAction", "importOriginal", "original", "setupOpenAppDAMock", "error", "callMyTask", "extractDependenciesMock", "apiSendCommandMock", "commandParams", "mockedCommandResponse", "deviceAction", "internalApi", "TestCommand", "resolve", "reject", "expectedStates", "params"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{Left as D,Right as S}from"purify-ts";import{assign as k,createMachine as I}from"xstate";import{ApduBuilder as M}from"../../../apdu/utils/ApduBuilder";import{CommandResultFactory as A}from"../../../command/model/CommandResult";import{makeDeviceActionInternalApiMock as p}from"../../../device-action/__test-utils__/makeInternalApi";import{testDeviceActionStates as f}from"../../../device-action/__test-utils__/testDeviceActionStates";import{DeviceActionStatus as n}from"../../../device-action/model/DeviceActionState";import{UserInteractionRequired as e}from"../../../device-action/model/UserInteractionRequired";import{UnknownDAError as C}from"../../../device-action/os/Errors";import{OpenAppDeviceAction as g}from"../../../device-action/os/OpenAppDeviceAction/OpenAppDeviceAction";import{UnknownDeviceExchangeError as v}from"../../../../../src";import{SendCommandInAppDeviceAction as c}from"./SendCommandInAppDeviceAction";vi.mock("@api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction",async r=>({...await r(),OpenAppDeviceAction:vi.fn(()=>({makeStateMachine:vi.fn()}))}));const u=r=>{g.mockImplementation(()=>({makeStateMachine:vi.fn().mockImplementation(()=>I({initial:"pending",states:{pending:{entry:k({intermediateValue:{requiredUserInteraction:e.ConfirmOpenApp}}),after:{0:"done"}},done:{type:"final"}},output:()=>r?D(r):S(void 0)}))}))};describe("SendCommandInAppDeviceAction",()=>{const r=vi.fn(),i=()=>({sendCommand:r}),{sendCommand:y}=p(),m={paramString:"aParameter",paramNumber:1234},l={aNumber:5678,aString:"mockedResponseString"};beforeEach(()=>{vi.resetAllMocks()}),describe("without mocking extractDependencies",()=>{it("should call sendCommand on internalApi with the correct parameters",async()=>{u(),y.mockResolvedValue(A({data:void 0}));const o=new c({input:{command:new d(m),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!1}});await new Promise((a,t)=>{o._execute(p()).observable.subscribe({error:()=>t(),complete:()=>a(),next:()=>{}})}),expect(y).toHaveBeenCalledWith(new d(m))})}),describe("error cases",()=>{it("should error and output the error if the open app fails",()=>new Promise((o,a)=>{u(new C("Mocked error"));const t=[{status:n.Pending,intermediateValue:{requiredUserInteraction:e.None}},{status:n.Pending,intermediateValue:{requiredUserInteraction:e.ConfirmOpenApp}},{status:n.Error,error:new C("Mocked error")}];f(new c({input:{command:new d(m),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!1}}),t,p(),{onDone:o,onError:a})})),it("should error and output an error if the send command fails",()=>new Promise((o,a)=>{u(),r.mockResolvedValue(A({error:new v("Mocked error")}));const t=new c({input:{command:new d(m),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!1}});vi.spyOn(t,"extractDependencies").mockImplementation(i);const s=[{status:n.Pending,intermediateValue:{requiredUserInteraction:e.None}},{status:n.Pending,intermediateValue:{requiredUserInteraction:e.ConfirmOpenApp}},{status:n.Pending,intermediateValue:{requiredUserInteraction:e.VerifyAddress}},{status:n.Error,error:new v("Mocked error")}];f(t,s,p(),{onDone:o,onError:a})}))}),describe("success cases",()=>{it("should succeed and output the command result if the send command succeeds",()=>new Promise((o,a)=>{u(),r.mockResolvedValue(A({data:l}));const t=new c({input:{command:new d(m),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!1}});vi.spyOn(t,"extractDependencies").mockImplementation(i);const s=[{status:n.Pending,intermediateValue:{requiredUserInteraction:e.None}},{status:n.Pending,intermediateValue:{requiredUserInteraction:e.ConfirmOpenApp}},{status:n.Pending,intermediateValue:{requiredUserInteraction:e.VerifyAddress}},{status:n.Completed,output:l}];f(t,s,p(),{onDone:o,onError:a})})),it("should succeed while skipping OpenApp",()=>new Promise((o,a)=>{u(),r.mockResolvedValue(A({data:l}));const t=new c({input:{command:new d(m),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!0}});vi.spyOn(t,"extractDependencies").mockImplementation(i);const s=[{status:n.Pending,intermediateValue:{requiredUserInteraction:e.VerifyAddress}},{status:n.Completed,output:l}];f(t,s,p(),{onDone:o,onError:a})}))})});class d{params;constructor(i){this.params=i}getApdu(){return new M({cla:0,ins:1,p1:2,p2:3}).add32BitUIntToData(this.params.paramNumber).addAsciiStringToData(this.params.paramString).build()}parseResponse(){return A({data:{aNumber:1,aString:"aString"}})}}
1
+ import{Left as D,Right as S}from"purify-ts";import{assign as k,createMachine as I}from"xstate";import{ApduBuilder as M}from"../../../apdu/utils/ApduBuilder";import{CommandResultFactory as A}from"../../../command/model/CommandResult";import{makeDeviceActionInternalApiMock as d}from"../../../device-action/__test-utils__/makeInternalApi";import{testDeviceActionStates as f}from"../../../device-action/__test-utils__/testDeviceActionStates";import{DeviceActionStatus as n}from"../../../device-action/model/DeviceActionState";import{UserInteractionRequired as e}from"../../../device-action/model/UserInteractionRequired";import{UnknownDAError as C}from"../../../device-action/os/Errors";import{OpenAppDeviceAction as g}from"../../../device-action/os/OpenAppDeviceAction/OpenAppDeviceAction";import{UnknownDeviceExchangeError as v}from"../../../../../src";import{SendCommandInAppDeviceAction as c}from"./SendCommandInAppDeviceAction";vi.mock("@api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction",async r=>({...await r(),OpenAppDeviceAction:vi.fn(()=>({makeStateMachine:vi.fn()}))}));const u=r=>{g.mockImplementation(()=>({makeStateMachine:vi.fn().mockImplementation(()=>I({initial:"pending",states:{pending:{entry:k({intermediateValue:{requiredUserInteraction:e.ConfirmOpenApp}}),after:{0:"done"}},done:{type:"final"}},output:()=>r?D(r):S(void 0)}))}))};describe("SendCommandInAppDeviceAction",()=>{const r=vi.fn(),i=()=>({sendCommand:r}),{sendCommand:y}=d(),m={paramString:"aParameter",paramNumber:1234},l={aNumber:5678,aString:"mockedResponseString"};beforeEach(()=>{vi.resetAllMocks()}),describe("without mocking extractDependencies",()=>{it("should call sendCommand on internalApi with the correct parameters",async()=>{u(),y.mockResolvedValue(A({data:void 0}));const o=new c({input:{command:new p(m),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!1}});await new Promise((a,t)=>{o._execute(d()).observable.subscribe({error:()=>t(),complete:()=>a(),next:()=>{}})}),expect(y).toHaveBeenCalledWith(new p(m))})}),describe("error cases",()=>{it("should error and output the error if the open app fails",()=>new Promise((o,a)=>{u(new C("Mocked error"));const t=[{status:n.Pending,intermediateValue:{requiredUserInteraction:e.None}},{status:n.Pending,intermediateValue:{requiredUserInteraction:e.ConfirmOpenApp}},{status:n.Error,error:new C("Mocked error")}];f(new c({input:{command:new p(m),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!1}}),t,d(),{onDone:o,onError:a})})),it("should error and output an error if the send command fails",()=>new Promise((o,a)=>{u(),r.mockResolvedValue(A({error:new v("Mocked error")}));const t=new c({input:{command:new p(m),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!1}});vi.spyOn(t,"extractDependencies").mockImplementation(i);const s=[{status:n.Pending,intermediateValue:{requiredUserInteraction:e.None}},{status:n.Pending,intermediateValue:{requiredUserInteraction:e.ConfirmOpenApp}},{status:n.Pending,intermediateValue:{requiredUserInteraction:e.VerifyAddress}},{status:n.Error,error:new v("Mocked error")}];f(t,s,d(),{onDone:o,onError:a})}))}),describe("success cases",()=>{it("should succeed and output the command result if the send command succeeds",()=>new Promise((o,a)=>{u(),r.mockResolvedValue(A({data:l}));const t=new c({input:{command:new p(m),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!1}});vi.spyOn(t,"extractDependencies").mockImplementation(i);const s=[{status:n.Pending,intermediateValue:{requiredUserInteraction:e.None}},{status:n.Pending,intermediateValue:{requiredUserInteraction:e.ConfirmOpenApp}},{status:n.Pending,intermediateValue:{requiredUserInteraction:e.VerifyAddress}},{status:n.Completed,output:l}];f(t,s,d(),{onDone:o,onError:a})})),it("should succeed while skipping OpenApp",()=>new Promise((o,a)=>{u(),r.mockResolvedValue(A({data:l}));const t=new c({input:{command:new p(m),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!0}});vi.spyOn(t,"extractDependencies").mockImplementation(i);const s=[{status:n.Pending,intermediateValue:{requiredUserInteraction:e.VerifyAddress}},{status:n.Completed,output:l}];f(t,s,d(),{onDone:o,onError:a})}))})});class p{name="testCommand";params;constructor(i){this.params=i}getApdu(){return new M({cla:0,ins:1,p1:2,p2:3}).add32BitUIntToData(this.params.paramNumber).addAsciiStringToData(this.params.paramString).build()}parseResponse(){return A({data:{aNumber:1,aString:"aString"}})}}
2
2
  //# sourceMappingURL=SendCommandInAppDeviceAction.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.test.ts"],
4
- "sourcesContent": ["/* eslint @typescript-eslint/consistent-type-imports:0 */\nimport { Left, Right } from \"purify-ts\";\nimport { type Mock } from \"vitest\";\nimport { assign, createMachine } from \"xstate\";\n\nimport { type Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder } from \"@api/apdu/utils/ApduBuilder\";\nimport { CommandResultFactory } from \"@api/command/model/CommandResult\";\nimport { makeDeviceActionInternalApiMock } from \"@api/device-action/__test-utils__/makeInternalApi\";\nimport { testDeviceActionStates } from \"@api/device-action/__test-utils__/testDeviceActionStates\";\nimport {\n type DeviceActionState,\n DeviceActionStatus,\n} from \"@api/device-action/model/DeviceActionState\";\nimport { UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport { UnknownDAError } from \"@api/device-action/os/Errors\";\nimport { OpenAppDeviceAction } from \"@api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction\";\nimport { type Command } from \"@api/types\";\nimport { UnknownDeviceExchangeError } from \"@root/src\";\n\nimport { SendCommandInAppDeviceAction } from \"./SendCommandInAppDeviceAction\";\nimport {\n type SendCommandInAppDAError,\n type SendCommandInAppDAIntermediateValue,\n type SendCommandInAppDAOutput,\n} from \"./SendCommandInAppDeviceActionTypes\";\n\nvi.mock(\n \"@api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction\",\n async (importOriginal) => {\n const original =\n await importOriginal<\n typeof import(\"../OpenAppDeviceAction/OpenAppDeviceAction\")\n >();\n\n return {\n ...original,\n OpenAppDeviceAction: vi.fn(() => ({\n makeStateMachine: vi.fn(),\n })),\n };\n },\n);\n\nconst setupOpenAppDAMock = (error?: unknown) => {\n (OpenAppDeviceAction as Mock).mockImplementation(() => ({\n makeStateMachine: vi.fn().mockImplementation(() =>\n createMachine({\n initial: \"pending\",\n states: {\n pending: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n }),\n after: {\n 0: \"done\",\n },\n },\n done: {\n type: \"final\",\n },\n },\n output: () => (error ? Left(error) : Right(undefined)),\n }),\n ),\n }));\n};\n\ndescribe(\"SendCommandInAppDeviceAction\", () => {\n const sendMyCommand = vi.fn();\n\n const extractDependenciesMock = () => ({\n sendCommand: sendMyCommand,\n });\n\n const { sendCommand: apiSendCommandMock } = makeDeviceActionInternalApiMock();\n\n const commandParams = {\n paramString: \"aParameter\",\n paramNumber: 1234,\n };\n const mockedCommandResponse = {\n aNumber: 5678,\n aString: \"mockedResponseString\",\n };\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"without mocking extractDependencies\", () => {\n it(\"should call sendCommand on internalApi with the correct parameters\", async () => {\n setupOpenAppDAMock();\n apiSendCommandMock.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n\n const deviceAction = new SendCommandInAppDeviceAction({\n input: {\n command: new TestCommand(commandParams),\n appName: \"MyApp\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n });\n await new Promise<void>((resolve, reject) => {\n deviceAction\n ._execute(makeDeviceActionInternalApiMock())\n .observable.subscribe({\n error: () => reject(),\n complete: () => resolve(),\n next: () => {},\n });\n });\n\n expect(apiSendCommandMock).toHaveBeenCalledWith(\n new TestCommand(commandParams),\n );\n });\n });\n\n describe(\"error cases\", () => {\n it(\"should error and output the error if the open app fails\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock(new UnknownDAError(\"Mocked error\"));\n\n const expectedStates: MyCommandSendCommandDAState[] = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDAError(\"Mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n new SendCommandInAppDeviceAction({\n input: {\n command: new TestCommand(commandParams),\n appName: \"MyApp\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n }),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should error and output an error if the send command fails\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock();\n\n sendMyCommand.mockResolvedValue(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n }),\n );\n\n const deviceAction = new SendCommandInAppDeviceAction({\n input: {\n command: new TestCommand(commandParams),\n appName: \"MyApp\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockImplementation(\n extractDependenciesMock,\n );\n\n const expectedStates: MyCommandSendCommandDAState[] = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n });\n\n describe(\"success cases\", () => {\n it(\"should succeed and output the command result if the send command succeeds\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock();\n\n sendMyCommand.mockResolvedValue(\n CommandResultFactory({ data: mockedCommandResponse }),\n );\n\n const deviceAction = new SendCommandInAppDeviceAction({\n input: {\n command: new TestCommand(commandParams),\n appName: \"MyApp\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockImplementation(\n extractDependenciesMock,\n );\n\n const expectedStates: MyCommandSendCommandDAState[] = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: mockedCommandResponse,\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should succeed while skipping OpenApp\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock();\n\n sendMyCommand.mockResolvedValue(\n CommandResultFactory({ data: mockedCommandResponse }),\n );\n\n const deviceAction = new SendCommandInAppDeviceAction({\n input: {\n command: new TestCommand(commandParams),\n appName: \"MyApp\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: true,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockImplementation(\n extractDependenciesMock,\n );\n\n const expectedStates: MyCommandSendCommandDAState[] = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: mockedCommandResponse,\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n });\n});\n\ntype MyCommandResponse = {\n aNumber: number;\n aString: string;\n};\n\ntype MyCommandParams = {\n paramString: string;\n paramNumber: number;\n};\n\nclass TestCommand implements Command<MyCommandResponse, MyCommandParams> {\n params: MyCommandParams;\n constructor(params: MyCommandParams) {\n this.params = params;\n }\n getApdu(): Apdu {\n return new ApduBuilder({ cla: 0x00, ins: 0x01, p1: 0x02, p2: 0x03 })\n .add32BitUIntToData(this.params.paramNumber)\n .addAsciiStringToData(this.params.paramString)\n .build();\n }\n parseResponse() {\n return CommandResultFactory({ data: { aNumber: 1, aString: \"aString\" } });\n }\n}\n\ntype MyCommandSendCommandDAState = DeviceActionState<\n SendCommandInAppDAOutput<MyCommandResponse>,\n SendCommandInAppDAError<UnknownDAError>,\n SendCommandInAppDAIntermediateValue<\n UserInteractionRequired.None | UserInteractionRequired.VerifyAddress\n >\n>;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/* eslint @typescript-eslint/consistent-type-imports:0 */\nimport { Left, Right } from \"purify-ts\";\nimport { type Mock } from \"vitest\";\nimport { assign, createMachine } from \"xstate\";\n\nimport { type Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder } from \"@api/apdu/utils/ApduBuilder\";\nimport { CommandResultFactory } from \"@api/command/model/CommandResult\";\nimport { makeDeviceActionInternalApiMock } from \"@api/device-action/__test-utils__/makeInternalApi\";\nimport { testDeviceActionStates } from \"@api/device-action/__test-utils__/testDeviceActionStates\";\nimport {\n type DeviceActionState,\n DeviceActionStatus,\n} from \"@api/device-action/model/DeviceActionState\";\nimport { UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport { UnknownDAError } from \"@api/device-action/os/Errors\";\nimport { OpenAppDeviceAction } from \"@api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction\";\nimport { type Command } from \"@api/types\";\nimport { UnknownDeviceExchangeError } from \"@root/src\";\n\nimport { SendCommandInAppDeviceAction } from \"./SendCommandInAppDeviceAction\";\nimport {\n type SendCommandInAppDAError,\n type SendCommandInAppDAIntermediateValue,\n type SendCommandInAppDAOutput,\n} from \"./SendCommandInAppDeviceActionTypes\";\n\nvi.mock(\n \"@api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction\",\n async (importOriginal) => {\n const original =\n await importOriginal<\n typeof import(\"../OpenAppDeviceAction/OpenAppDeviceAction\")\n >();\n\n return {\n ...original,\n OpenAppDeviceAction: vi.fn(() => ({\n makeStateMachine: vi.fn(),\n })),\n };\n },\n);\n\nconst setupOpenAppDAMock = (error?: unknown) => {\n (OpenAppDeviceAction as Mock).mockImplementation(() => ({\n makeStateMachine: vi.fn().mockImplementation(() =>\n createMachine({\n initial: \"pending\",\n states: {\n pending: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n }),\n after: {\n 0: \"done\",\n },\n },\n done: {\n type: \"final\",\n },\n },\n output: () => (error ? Left(error) : Right(undefined)),\n }),\n ),\n }));\n};\n\ndescribe(\"SendCommandInAppDeviceAction\", () => {\n const sendMyCommand = vi.fn();\n\n const extractDependenciesMock = () => ({\n sendCommand: sendMyCommand,\n });\n\n const { sendCommand: apiSendCommandMock } = makeDeviceActionInternalApiMock();\n\n const commandParams = {\n paramString: \"aParameter\",\n paramNumber: 1234,\n };\n const mockedCommandResponse = {\n aNumber: 5678,\n aString: \"mockedResponseString\",\n };\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"without mocking extractDependencies\", () => {\n it(\"should call sendCommand on internalApi with the correct parameters\", async () => {\n setupOpenAppDAMock();\n apiSendCommandMock.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n\n const deviceAction = new SendCommandInAppDeviceAction({\n input: {\n command: new TestCommand(commandParams),\n appName: \"MyApp\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n });\n await new Promise<void>((resolve, reject) => {\n deviceAction\n ._execute(makeDeviceActionInternalApiMock())\n .observable.subscribe({\n error: () => reject(),\n complete: () => resolve(),\n next: () => {},\n });\n });\n\n expect(apiSendCommandMock).toHaveBeenCalledWith(\n new TestCommand(commandParams),\n );\n });\n });\n\n describe(\"error cases\", () => {\n it(\"should error and output the error if the open app fails\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock(new UnknownDAError(\"Mocked error\"));\n\n const expectedStates: MyCommandSendCommandDAState[] = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDAError(\"Mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n new SendCommandInAppDeviceAction({\n input: {\n command: new TestCommand(commandParams),\n appName: \"MyApp\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n }),\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should error and output an error if the send command fails\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock();\n\n sendMyCommand.mockResolvedValue(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n }),\n );\n\n const deviceAction = new SendCommandInAppDeviceAction({\n input: {\n command: new TestCommand(commandParams),\n appName: \"MyApp\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockImplementation(\n extractDependenciesMock,\n );\n\n const expectedStates: MyCommandSendCommandDAState[] = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n });\n\n describe(\"success cases\", () => {\n it(\"should succeed and output the command result if the send command succeeds\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock();\n\n sendMyCommand.mockResolvedValue(\n CommandResultFactory({ data: mockedCommandResponse }),\n );\n\n const deviceAction = new SendCommandInAppDeviceAction({\n input: {\n command: new TestCommand(commandParams),\n appName: \"MyApp\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockImplementation(\n extractDependenciesMock,\n );\n\n const expectedStates: MyCommandSendCommandDAState[] = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: mockedCommandResponse,\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should succeed while skipping OpenApp\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock();\n\n sendMyCommand.mockResolvedValue(\n CommandResultFactory({ data: mockedCommandResponse }),\n );\n\n const deviceAction = new SendCommandInAppDeviceAction({\n input: {\n command: new TestCommand(commandParams),\n appName: \"MyApp\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: true,\n },\n });\n\n vi.spyOn(deviceAction, \"extractDependencies\").mockImplementation(\n extractDependenciesMock,\n );\n\n const expectedStates: MyCommandSendCommandDAState[] = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: mockedCommandResponse,\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n });\n});\n\ntype MyCommandResponse = {\n aNumber: number;\n aString: string;\n};\n\ntype MyCommandParams = {\n paramString: string;\n paramNumber: number;\n};\n\nclass TestCommand implements Command<MyCommandResponse, MyCommandParams> {\n readonly name = \"testCommand\";\n\n params: MyCommandParams;\n constructor(params: MyCommandParams) {\n this.params = params;\n }\n getApdu(): Apdu {\n return new ApduBuilder({ cla: 0x00, ins: 0x01, p1: 0x02, p2: 0x03 })\n .add32BitUIntToData(this.params.paramNumber)\n .addAsciiStringToData(this.params.paramString)\n .build();\n }\n parseResponse() {\n return CommandResultFactory({ data: { aNumber: 1, aString: \"aString\" } });\n }\n}\n\ntype MyCommandSendCommandDAState = DeviceActionState<\n SendCommandInAppDAOutput<MyCommandResponse>,\n SendCommandInAppDAError<UnknownDAError>,\n SendCommandInAppDAIntermediateValue<\n UserInteractionRequired.None | UserInteractionRequired.VerifyAddress\n >\n>;\n"],
5
+ "mappings": "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",
6
6
  "names": ["Left", "Right", "assign", "createMachine", "ApduBuilder", "CommandResultFactory", "makeDeviceActionInternalApiMock", "testDeviceActionStates", "DeviceActionStatus", "UserInteractionRequired", "UnknownDAError", "OpenAppDeviceAction", "UnknownDeviceExchangeError", "SendCommandInAppDeviceAction", "importOriginal", "setupOpenAppDAMock", "error", "sendMyCommand", "extractDependenciesMock", "apiSendCommandMock", "commandParams", "mockedCommandResponse", "deviceAction", "TestCommand", "resolve", "reject", "expectedStates", "params"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{InvalidStatusWordError as C}from"../../command/Errors";import{CommandResultFactory as c,isSuccessCommandResult as u}from"../../command/model/CommandResult";import{GetCustomImageSizeCommand as V}from"../../command/os/GetCustomImageSizeCommand";import{GetOsVersionCommand as F}from"../../command/os/GetOsVersionCommand";class x{constructor(e){this.api=e}async run(){const e=await this.api.sendCommand(new F);if(!u(e))return e;const m={mcu:e.data.mcuSephVersion,bootloader:e.data.mcuBootloaderVersion,os:e.data.seVersion,metadata:e.data},r=this.api.getManagerApiService(),n=await r.getDeviceVersion(e.data).chain(a=>r.getFirmwareVersion(e.data,a).map(i=>({deviceVersion:a,currentFirmware:i})));if(n.isLeft())return c({error:new C("Cannot fetch current firmware metadata")});const{deviceVersion:s,currentFirmware:o}=n.unsafeCoerce(),w=(await r.getLatestFirmwareVersion(o,s).chain(a=>r.getNextFirmwareVersion(a).chain(i=>r.getMcuList().map(t=>t.find(l=>l.name===m.mcu)).map(t=>t===void 0||!i.mcuVersions.includes(t.id)).map(t=>({osuFirmware:a,finalFirmware:i,mcuUpdateRequired:t}))))).caseOf({Right:a=>a,Left:a=>{}}),f={currentFirmware:o,availableUpdate:w};let d={};const p=await this.api.sendCommand(new V);return u(p)&&(d={size:p.data}),c({data:{deviceVersion:s,firmware:o,firmwareVersion:m,firmwareUpdateContext:f,customImage:d}})}}export{x as GetFirmwareMetadataTask};
1
+ import{InvalidGetFirmwareMetadataResponseError as F}from"../../command/Errors";import{CommandResultFactory as c,isSuccessCommandResult as u}from"../../command/model/CommandResult";import{GetCustomImageSizeCommand as V}from"../../command/os/GetCustomImageSizeCommand";import{GetOsVersionCommand as C}from"../../command/os/GetOsVersionCommand";class R{constructor(e){this.api=e}async run(){const e=await this.api.sendCommand(new C);if(!u(e))return e;const m={mcu:e.data.mcuSephVersion,bootloader:e.data.mcuBootloaderVersion,os:e.data.seVersion,metadata:e.data},r=this.api.getManagerApiService(),n=await r.getDeviceVersion(e.data).chain(a=>r.getFirmwareVersion(e.data,a).map(i=>({deviceVersion:a,currentFirmware:i})));if(n.isLeft())return c({error:new F});const{deviceVersion:s,currentFirmware:o}=n.unsafeCoerce(),w=(await r.getLatestFirmwareVersion(o,s).chain(a=>r.getNextFirmwareVersion(a).chain(i=>r.getMcuList().map(t=>t.find(l=>l.name===m.mcu)).map(t=>t===void 0||!i.mcuVersions.includes(t.id)).map(t=>({osuFirmware:a,finalFirmware:i,mcuUpdateRequired:t}))))).caseOf({Right:a=>a,Left:a=>{}}),f={currentFirmware:o,availableUpdate:w};let d={};const p=await this.api.sendCommand(new V);return u(p)&&(d={size:p.data}),c({data:{deviceVersion:s,firmware:o,firmwareVersion:m,firmwareUpdateContext:f,customImage:d}})}}export{R as GetFirmwareMetadataTask};
2
2
  //# sourceMappingURL=GetFirmwareMetadataTask.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/api/device-action/task/GetFirmwareMetadataTask.ts"],
4
- "sourcesContent": ["import { InvalidStatusWordError } from \"@api/command/Errors\";\nimport {\n type CommandResult,\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@api/command/model/CommandResult\";\nimport { GetCustomImageSizeCommand } from \"@api/command/os/GetCustomImageSizeCommand\";\nimport { GetOsVersionCommand } from \"@api/command/os/GetOsVersionCommand\";\nimport type { InternalApi } from \"@api/device-action/DeviceAction\";\nimport {\n type CustomImage,\n type FirmwareUpdate,\n type FirmwareUpdateContext,\n type FirmwareVersion,\n} from \"@api/device-session/DeviceSessionState\";\nimport { type DeviceVersion } from \"@internal/manager-api/model/Device\";\nimport { type FinalFirmware } from \"@internal/manager-api/model/Firmware\";\n\nexport type GetFirmwareMetadataTaskResult = CommandResult<{\n deviceVersion: DeviceVersion;\n firmware: FinalFirmware;\n firmwareVersion: FirmwareVersion;\n firmwareUpdateContext: FirmwareUpdateContext;\n customImage: CustomImage;\n}>;\n\nexport class GetFirmwareMetadataTask {\n constructor(private readonly api: InternalApi) {}\n\n async run(): Promise<GetFirmwareMetadataTaskResult> {\n // Get installed firmware metadata\n const osVersion = await this.api.sendCommand(new GetOsVersionCommand());\n if (!isSuccessCommandResult(osVersion)) {\n return osVersion;\n }\n const firmwareVersion: FirmwareVersion = {\n mcu: osVersion.data.mcuSephVersion,\n bootloader: osVersion.data.mcuBootloaderVersion,\n os: osVersion.data.seVersion,\n metadata: osVersion.data,\n };\n\n // Fetch current firmware metadata from app store\n const manager = this.api.getManagerApiService();\n const result = await manager\n .getDeviceVersion(osVersion.data)\n .chain((deviceVersion) =>\n manager\n .getFirmwareVersion(osVersion.data, deviceVersion)\n .map((currentFirmware) => ({ deviceVersion, currentFirmware })),\n );\n if (result.isLeft()) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Cannot fetch current firmware metadata\",\n ),\n });\n }\n const { deviceVersion, currentFirmware } = result.unsafeCoerce();\n\n // Fetch latest firmware available, if any\n const maybeUpdate = await manager\n .getLatestFirmwareVersion(currentFirmware, deviceVersion)\n .chain((osuFirmware) =>\n manager.getNextFirmwareVersion(osuFirmware).chain((finalFirmware) =>\n manager\n .getMcuList()\n .map((mcus) => mcus.find((mcu) => mcu.name === firmwareVersion.mcu))\n .map(\n (mcu) =>\n mcu === undefined ||\n !finalFirmware.mcuVersions.includes(mcu.id),\n )\n .map((mcuUpdateRequired) => ({\n osuFirmware,\n finalFirmware,\n mcuUpdateRequired,\n })),\n ),\n );\n const availableUpdate: FirmwareUpdate | undefined = maybeUpdate.caseOf({\n Right: (data) => data,\n Left: (_error) => undefined,\n });\n const firmwareUpdateContext = {\n currentFirmware,\n availableUpdate,\n };\n\n // Get custom image metadata\n let customImage: CustomImage = {};\n const imageSize = await this.api.sendCommand(\n new GetCustomImageSizeCommand(),\n );\n if (isSuccessCommandResult(imageSize)) {\n customImage = { size: imageSize.data };\n }\n\n // Return firmware metadata\n return CommandResultFactory({\n data: {\n deviceVersion,\n firmware: currentFirmware,\n firmwareVersion,\n firmwareUpdateContext,\n customImage,\n },\n });\n }\n}\n"],
5
- "mappings": "AAAA,OAAS,0BAAAA,MAA8B,sBACvC,OAEE,wBAAAC,EACA,0BAAAC,MACK,mCACP,OAAS,6BAAAC,MAAiC,4CAC1C,OAAS,uBAAAC,MAA2B,sCAmB7B,MAAMC,CAAwB,CACnC,YAA6BC,EAAkB,CAAlB,SAAAA,CAAmB,CAEhD,MAAM,KAA8C,CAElD,MAAMC,EAAY,MAAM,KAAK,IAAI,YAAY,IAAIH,CAAqB,EACtE,GAAI,CAACF,EAAuBK,CAAS,EACnC,OAAOA,EAET,MAAMC,EAAmC,CACvC,IAAKD,EAAU,KAAK,eACpB,WAAYA,EAAU,KAAK,qBAC3B,GAAIA,EAAU,KAAK,UACnB,SAAUA,EAAU,IACtB,EAGME,EAAU,KAAK,IAAI,qBAAqB,EACxCC,EAAS,MAAMD,EAClB,iBAAiBF,EAAU,IAAI,EAC/B,MAAOI,GACNF,EACG,mBAAmBF,EAAU,KAAMI,CAAa,EAChD,IAAKC,IAAqB,CAAE,cAAAD,EAAe,gBAAAC,CAAgB,EAAE,CAClE,EACF,GAAIF,EAAO,OAAO,EAChB,OAAOT,EAAqB,CAC1B,MAAO,IAAID,EACT,wCACF,CACF,CAAC,EAEH,KAAM,CAAE,cAAAW,EAAe,gBAAAC,CAAgB,EAAIF,EAAO,aAAa,EAsBzDG,GAnBc,MAAMJ,EACvB,yBAAyBG,EAAiBD,CAAa,EACvD,MAAOG,GACNL,EAAQ,uBAAuBK,CAAW,EAAE,MAAOC,GACjDN,EACG,WAAW,EACX,IAAKO,GAASA,EAAK,KAAMC,GAAQA,EAAI,OAAST,EAAgB,GAAG,CAAC,EAClE,IACES,GACCA,IAAQ,QACR,CAACF,EAAc,YAAY,SAASE,EAAI,EAAE,CAC9C,EACC,IAAKC,IAAuB,CAC3B,YAAAJ,EACA,cAAAC,EACA,kBAAAG,CACF,EAAE,CACN,CACF,GAC8D,OAAO,CACrE,MAAQC,GAASA,EACjB,KAAOC,GAAQ,EACjB,CAAC,EACKC,EAAwB,CAC5B,gBAAAT,EACA,gBAAAC,CACF,EAGA,IAAIS,EAA2B,CAAC,EAChC,MAAMC,EAAY,MAAM,KAAK,IAAI,YAC/B,IAAIpB,CACN,EACA,OAAID,EAAuBqB,CAAS,IAClCD,EAAc,CAAE,KAAMC,EAAU,IAAK,GAIhCtB,EAAqB,CAC1B,KAAM,CACJ,cAAAU,EACA,SAAUC,EACV,gBAAAJ,EACA,sBAAAa,EACA,YAAAC,CACF,CACF,CAAC,CACH,CACF",
6
- "names": ["InvalidStatusWordError", "CommandResultFactory", "isSuccessCommandResult", "GetCustomImageSizeCommand", "GetOsVersionCommand", "GetFirmwareMetadataTask", "api", "osVersion", "firmwareVersion", "manager", "result", "deviceVersion", "currentFirmware", "availableUpdate", "osuFirmware", "finalFirmware", "mcus", "mcu", "mcuUpdateRequired", "data", "_error", "firmwareUpdateContext", "customImage", "imageSize"]
4
+ "sourcesContent": ["import { InvalidGetFirmwareMetadataResponseError } from \"@api/command/Errors\";\nimport {\n type CommandResult,\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@api/command/model/CommandResult\";\nimport { GetCustomImageSizeCommand } from \"@api/command/os/GetCustomImageSizeCommand\";\nimport { GetOsVersionCommand } from \"@api/command/os/GetOsVersionCommand\";\nimport type { InternalApi } from \"@api/device-action/DeviceAction\";\nimport {\n type CustomImage,\n type FirmwareUpdate,\n type FirmwareUpdateContext,\n type FirmwareVersion,\n} from \"@api/device-session/DeviceSessionState\";\nimport { type DeviceVersion } from \"@internal/manager-api/model/Device\";\nimport { type FinalFirmware } from \"@internal/manager-api/model/Firmware\";\n\nexport type GetFirmwareMetadataTaskResult = CommandResult<{\n deviceVersion: DeviceVersion;\n firmware: FinalFirmware;\n firmwareVersion: FirmwareVersion;\n firmwareUpdateContext: FirmwareUpdateContext;\n customImage: CustomImage;\n}>;\n\nexport class GetFirmwareMetadataTask {\n constructor(private readonly api: InternalApi) {}\n\n async run(): Promise<GetFirmwareMetadataTaskResult> {\n // Get installed firmware metadata\n const osVersion = await this.api.sendCommand(new GetOsVersionCommand());\n if (!isSuccessCommandResult(osVersion)) {\n return osVersion;\n }\n const firmwareVersion: FirmwareVersion = {\n mcu: osVersion.data.mcuSephVersion,\n bootloader: osVersion.data.mcuBootloaderVersion,\n os: osVersion.data.seVersion,\n metadata: osVersion.data,\n };\n\n // Fetch current firmware metadata from app store\n const manager = this.api.getManagerApiService();\n const result = await manager\n .getDeviceVersion(osVersion.data)\n .chain((deviceVersion) =>\n manager\n .getFirmwareVersion(osVersion.data, deviceVersion)\n .map((currentFirmware) => ({ deviceVersion, currentFirmware })),\n );\n if (result.isLeft()) {\n return CommandResultFactory({\n error: new InvalidGetFirmwareMetadataResponseError(),\n });\n }\n const { deviceVersion, currentFirmware } = result.unsafeCoerce();\n\n // Fetch latest firmware available, if any\n const maybeUpdate = await manager\n .getLatestFirmwareVersion(currentFirmware, deviceVersion)\n .chain((osuFirmware) =>\n manager.getNextFirmwareVersion(osuFirmware).chain((finalFirmware) =>\n manager\n .getMcuList()\n .map((mcus) => mcus.find((mcu) => mcu.name === firmwareVersion.mcu))\n .map(\n (mcu) =>\n mcu === undefined ||\n !finalFirmware.mcuVersions.includes(mcu.id),\n )\n .map((mcuUpdateRequired) => ({\n osuFirmware,\n finalFirmware,\n mcuUpdateRequired,\n })),\n ),\n );\n const availableUpdate: FirmwareUpdate | undefined = maybeUpdate.caseOf({\n Right: (data) => data,\n Left: (_error) => undefined,\n });\n const firmwareUpdateContext = {\n currentFirmware,\n availableUpdate,\n };\n\n // Get custom image metadata\n let customImage: CustomImage = {};\n const imageSize = await this.api.sendCommand(\n new GetCustomImageSizeCommand(),\n );\n if (isSuccessCommandResult(imageSize)) {\n customImage = { size: imageSize.data };\n }\n\n // Return firmware metadata\n return CommandResultFactory({\n data: {\n deviceVersion,\n firmware: currentFirmware,\n firmwareVersion,\n firmwareUpdateContext,\n customImage,\n },\n });\n }\n}\n"],
5
+ "mappings": "AAAA,OAAS,2CAAAA,MAA+C,sBACxD,OAEE,wBAAAC,EACA,0BAAAC,MACK,mCACP,OAAS,6BAAAC,MAAiC,4CAC1C,OAAS,uBAAAC,MAA2B,sCAmB7B,MAAMC,CAAwB,CACnC,YAA6BC,EAAkB,CAAlB,SAAAA,CAAmB,CAEhD,MAAM,KAA8C,CAElD,MAAMC,EAAY,MAAM,KAAK,IAAI,YAAY,IAAIH,CAAqB,EACtE,GAAI,CAACF,EAAuBK,CAAS,EACnC,OAAOA,EAET,MAAMC,EAAmC,CACvC,IAAKD,EAAU,KAAK,eACpB,WAAYA,EAAU,KAAK,qBAC3B,GAAIA,EAAU,KAAK,UACnB,SAAUA,EAAU,IACtB,EAGME,EAAU,KAAK,IAAI,qBAAqB,EACxCC,EAAS,MAAMD,EAClB,iBAAiBF,EAAU,IAAI,EAC/B,MAAOI,GACNF,EACG,mBAAmBF,EAAU,KAAMI,CAAa,EAChD,IAAKC,IAAqB,CAAE,cAAAD,EAAe,gBAAAC,CAAgB,EAAE,CAClE,EACF,GAAIF,EAAO,OAAO,EAChB,OAAOT,EAAqB,CAC1B,MAAO,IAAID,CACb,CAAC,EAEH,KAAM,CAAE,cAAAW,EAAe,gBAAAC,CAAgB,EAAIF,EAAO,aAAa,EAsBzDG,GAnBc,MAAMJ,EACvB,yBAAyBG,EAAiBD,CAAa,EACvD,MAAOG,GACNL,EAAQ,uBAAuBK,CAAW,EAAE,MAAOC,GACjDN,EACG,WAAW,EACX,IAAKO,GAASA,EAAK,KAAMC,GAAQA,EAAI,OAAST,EAAgB,GAAG,CAAC,EAClE,IACES,GACCA,IAAQ,QACR,CAACF,EAAc,YAAY,SAASE,EAAI,EAAE,CAC9C,EACC,IAAKC,IAAuB,CAC3B,YAAAJ,EACA,cAAAC,EACA,kBAAAG,CACF,EAAE,CACN,CACF,GAC8D,OAAO,CACrE,MAAQC,GAASA,EACjB,KAAOC,GAAQ,EACjB,CAAC,EACKC,EAAwB,CAC5B,gBAAAT,EACA,gBAAAC,CACF,EAGA,IAAIS,EAA2B,CAAC,EAChC,MAAMC,EAAY,MAAM,KAAK,IAAI,YAC/B,IAAIpB,CACN,EACA,OAAID,EAAuBqB,CAAS,IAClCD,EAAc,CAAE,KAAMC,EAAU,IAAK,GAIhCtB,EAAqB,CAC1B,KAAM,CACJ,cAAAU,EACA,SAAUC,EACV,gBAAAJ,EACA,sBAAAa,EACA,YAAAC,CACF,CACF,CAAC,CACH,CACF",
6
+ "names": ["InvalidGetFirmwareMetadataResponseError", "CommandResultFactory", "isSuccessCommandResult", "GetCustomImageSizeCommand", "GetOsVersionCommand", "GetFirmwareMetadataTask", "api", "osVersion", "firmwareVersion", "manager", "result", "deviceVersion", "currentFirmware", "availableUpdate", "osuFirmware", "finalFirmware", "mcus", "mcu", "mcuUpdateRequired", "data", "_error", "firmwareUpdateContext", "customImage", "imageSize"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{EitherAsync as n}from"purify-ts";import{InvalidStatusWordError as m}from"../../command/Errors";import{CommandResultFactory as e}from"../../command/model/CommandResult";import{makeDeviceActionInternalApiMock as V}from"../../device-action/__test-utils__/makeInternalApi";import{GetFirmwareMetadataTask as u}from"./GetFirmwareMetadataTask";describe("GetFirmwareMetadataTask",()=>{const a=V(),o={mcuSephVersion:"mcu_version",mcuBootloaderVersion:"bl_version",seVersion:"se_version"},w=97,c={id:7},i={id:361,version:"1.6.0",perso:"perso_11"},l={id:362,perso:"perso_11"},d={id:363,version:"1.7.0",perso:"perso_11",mcuVersions:[1]},v=[{id:3,name:"other_version"},{id:1,name:"mcu_version"}],r={getDeviceVersion:vi.fn(),getFirmwareVersion:vi.fn(),getLatestFirmwareVersion:vi.fn(),getNextFirmwareVersion:vi.fn(),getMcuList:vi.fn()};beforeEach(()=>{vi.clearAllMocks(),a.getManagerApiService.mockReturnValue(r),r.getDeviceVersion.mockReturnValue(n(async()=>c)),r.getFirmwareVersion.mockReturnValue(n(async()=>i)),r.getLatestFirmwareVersion.mockReturnValue(n(async()=>l)),r.getNextFirmwareVersion.mockReturnValue(n(async()=>d)),r.getMcuList.mockReturnValue(n(async()=>v))}),it("success with no firmware update available",async()=>{a.sendCommand.mockResolvedValueOnce(e({data:o})).mockResolvedValueOnce(e({data:w})),r.getLatestFirmwareVersion.mockReturnValueOnce(n(async({throwE:s})=>{s(new Error("error"))}));const t=await new u(a).run();expect(t).toStrictEqual(e({data:{deviceVersion:c,firmware:i,firmwareVersion:{mcu:"mcu_version",bootloader:"bl_version",os:"se_version",metadata:o},firmwareUpdateContext:{currentFirmware:i,availableUpdate:void 0},customImage:{size:w}}}))}),it("success with a firmware update available",async()=>{a.sendCommand.mockResolvedValueOnce(e({data:o})).mockResolvedValueOnce(e({error:new m("error")}));const t=await new u(a).run();expect(t).toStrictEqual(e({data:{deviceVersion:c,firmware:i,firmwareVersion:{mcu:"mcu_version",bootloader:"bl_version",os:"se_version",metadata:o},firmwareUpdateContext:{currentFirmware:i,availableUpdate:{osuFirmware:l,finalFirmware:d,mcuUpdateRequired:!1}},customImage:{}}})),expect(r.getDeviceVersion).toHaveBeenCalledWith(o),expect(r.getFirmwareVersion).toHaveBeenCalledWith(o,c),expect(r.getLatestFirmwareVersion).toHaveBeenCalledWith(i,c),expect(r.getNextFirmwareVersion).toHaveBeenCalledWith(l)}),it("success with a firmware update available and MCU update",async()=>{a.sendCommand.mockResolvedValueOnce(e({data:o})).mockResolvedValueOnce(e({error:new m("error")}));const t={...d,mcuVersions:[3]};r.getNextFirmwareVersion.mockReturnValue(n(async()=>t));const s=await new u(a).run();expect(s).toStrictEqual(e({data:{deviceVersion:c,firmware:i,firmwareVersion:{mcu:"mcu_version",bootloader:"bl_version",os:"se_version",metadata:o},firmwareUpdateContext:{currentFirmware:i,availableUpdate:{osuFirmware:l,finalFirmware:t,mcuUpdateRequired:!0}},customImage:{}}}))}),it("should fail when OS version cannot be retrieved",async()=>{a.sendCommand.mockResolvedValueOnce(e({error:new m("error")}));const t=await new u(a).run();expect(t).toStrictEqual(e({error:new m("error")}))}),it("should fail if device version cannot be fetched",async()=>{a.sendCommand.mockResolvedValueOnce(e({data:o})),r.getDeviceVersion.mockReturnValueOnce(n(async({throwE:s})=>{s(new Error("error"))}));const t=await new u(a).run();expect(t).toStrictEqual(e({error:new m("Cannot fetch current firmware metadata")}))}),it("should fail if firmware version cannot be fetched",async()=>{a.sendCommand.mockResolvedValueOnce(e({data:o})),r.getFirmwareVersion.mockReturnValueOnce(n(async({throwE:s})=>{s(new Error("error"))}));const t=await new u(a).run();expect(t).toStrictEqual(e({error:new m("Cannot fetch current firmware metadata")}))})});
1
+ import{EitherAsync as n}from"purify-ts";import{InvalidGetFirmwareMetadataResponseError as v,InvalidStatusWordError as l}from"../../command/Errors";import{CommandResultFactory as e}from"../../command/model/CommandResult";import{makeDeviceActionInternalApiMock as p}from"../../device-action/__test-utils__/makeInternalApi";import{GetFirmwareMetadataTask as m}from"./GetFirmwareMetadataTask";describe("GetFirmwareMetadataTask",()=>{const a=p(),o={mcuSephVersion:"mcu_version",mcuBootloaderVersion:"bl_version",seVersion:"se_version"},w=97,c={id:7},i={id:361,version:"1.6.0",perso:"perso_11"},u={id:362,perso:"perso_11"},d={id:363,version:"1.7.0",perso:"perso_11",mcuVersions:[1]},V=[{id:3,name:"other_version"},{id:1,name:"mcu_version"}],r={getDeviceVersion:vi.fn(),getFirmwareVersion:vi.fn(),getLatestFirmwareVersion:vi.fn(),getNextFirmwareVersion:vi.fn(),getMcuList:vi.fn()};beforeEach(()=>{vi.clearAllMocks(),a.getManagerApiService.mockReturnValue(r),r.getDeviceVersion.mockReturnValue(n(async()=>c)),r.getFirmwareVersion.mockReturnValue(n(async()=>i)),r.getLatestFirmwareVersion.mockReturnValue(n(async()=>u)),r.getNextFirmwareVersion.mockReturnValue(n(async()=>d)),r.getMcuList.mockReturnValue(n(async()=>V))}),it("success with no firmware update available",async()=>{a.sendCommand.mockResolvedValueOnce(e({data:o})).mockResolvedValueOnce(e({data:w})),r.getLatestFirmwareVersion.mockReturnValueOnce(n(async({throwE:s})=>{s(new Error("error"))}));const t=await new m(a).run();expect(t).toStrictEqual(e({data:{deviceVersion:c,firmware:i,firmwareVersion:{mcu:"mcu_version",bootloader:"bl_version",os:"se_version",metadata:o},firmwareUpdateContext:{currentFirmware:i,availableUpdate:void 0},customImage:{size:w}}}))}),it("success with a firmware update available",async()=>{a.sendCommand.mockResolvedValueOnce(e({data:o})).mockResolvedValueOnce(e({error:new l("error")}));const t=await new m(a).run();expect(t).toStrictEqual(e({data:{deviceVersion:c,firmware:i,firmwareVersion:{mcu:"mcu_version",bootloader:"bl_version",os:"se_version",metadata:o},firmwareUpdateContext:{currentFirmware:i,availableUpdate:{osuFirmware:u,finalFirmware:d,mcuUpdateRequired:!1}},customImage:{}}})),expect(r.getDeviceVersion).toHaveBeenCalledWith(o),expect(r.getFirmwareVersion).toHaveBeenCalledWith(o,c),expect(r.getLatestFirmwareVersion).toHaveBeenCalledWith(i,c),expect(r.getNextFirmwareVersion).toHaveBeenCalledWith(u)}),it("success with a firmware update available and MCU update",async()=>{a.sendCommand.mockResolvedValueOnce(e({data:o})).mockResolvedValueOnce(e({error:new l("error")}));const t={...d,mcuVersions:[3]};r.getNextFirmwareVersion.mockReturnValue(n(async()=>t));const s=await new m(a).run();expect(s).toStrictEqual(e({data:{deviceVersion:c,firmware:i,firmwareVersion:{mcu:"mcu_version",bootloader:"bl_version",os:"se_version",metadata:o},firmwareUpdateContext:{currentFirmware:i,availableUpdate:{osuFirmware:u,finalFirmware:t,mcuUpdateRequired:!0}},customImage:{}}}))}),it("should fail when OS version cannot be retrieved",async()=>{a.sendCommand.mockResolvedValueOnce(e({error:new l("error")}));const t=await new m(a).run();expect(t).toStrictEqual(e({error:new l("error")}))}),it("should fail if device version cannot be fetched with InvalidGetFirmwareMetadataResponseError",async()=>{a.sendCommand.mockResolvedValueOnce(e({data:o})),r.getDeviceVersion.mockReturnValueOnce(n(async({throwE:s})=>{s(new Error("error"))}));const t=await new m(a).run();expect(t).toStrictEqual(e({error:new v}))}),it("should fail if firmware version cannot be fetched with InvalidGetFirmwareMetadataResponseError",async()=>{a.sendCommand.mockResolvedValueOnce(e({data:o})),r.getFirmwareVersion.mockReturnValueOnce(n(async({throwE:s})=>{s(new Error("error"))}));const t=await new m(a).run();expect(t).toStrictEqual(e({error:new v}))})});
2
2
  //# sourceMappingURL=GetFirmwareMetadataTask.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/api/device-action/task/GetFirmwareMetadataTask.test.ts"],
4
- "sourcesContent": ["import { EitherAsync } from \"purify-ts\";\n\nimport { InvalidStatusWordError } from \"@api/command/Errors\";\nimport { CommandResultFactory } from \"@api/command/model/CommandResult\";\nimport { type GetOsVersionResponse } from \"@api/command/os/GetOsVersionCommand\";\nimport { makeDeviceActionInternalApiMock } from \"@api/device-action/__test-utils__/makeInternalApi\";\nimport {\n type FinalFirmware,\n type McuFirmware,\n type OsuFirmware,\n} from \"@internal/manager-api/model/Firmware\";\nimport { type ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\n\nimport { GetFirmwareMetadataTask } from \"./GetFirmwareMetadataTask\";\n\ndescribe(\"GetFirmwareMetadataTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n const OS_VERSION = {\n mcuSephVersion: \"mcu_version\",\n mcuBootloaderVersion: \"bl_version\",\n seVersion: \"se_version\",\n } as GetOsVersionResponse;\n\n const CUSTOM_IMAGE_SIZE = 97;\n\n const DEVICE_VERSION = {\n id: 7,\n };\n\n const FIRMWARE_VERSION = {\n id: 361,\n version: \"1.6.0\",\n perso: \"perso_11\",\n } as FinalFirmware;\n\n const OSU_VERSION = {\n id: 362,\n perso: \"perso_11\",\n } as OsuFirmware;\n\n const NEXT_FIRMWARE_VERSION = {\n id: 363,\n version: \"1.7.0\",\n perso: \"perso_11\",\n mcuVersions: [1],\n } as FinalFirmware;\n\n const MCUS = [\n {\n id: 3,\n name: \"other_version\",\n },\n {\n id: 1,\n name: \"mcu_version\",\n },\n ] as McuFirmware[];\n\n const MANAGER_MOCK = {\n getDeviceVersion: vi.fn(),\n getFirmwareVersion: vi.fn(),\n getLatestFirmwareVersion: vi.fn(),\n getNextFirmwareVersion: vi.fn(),\n getMcuList: vi.fn(),\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n\n apiMock.getManagerApiService.mockReturnValue(\n MANAGER_MOCK as unknown as ManagerApiService,\n );\n MANAGER_MOCK.getDeviceVersion.mockReturnValue(\n EitherAsync(async () => DEVICE_VERSION),\n );\n MANAGER_MOCK.getFirmwareVersion.mockReturnValue(\n EitherAsync(async () => FIRMWARE_VERSION),\n );\n MANAGER_MOCK.getLatestFirmwareVersion.mockReturnValue(\n EitherAsync(async () => OSU_VERSION),\n );\n MANAGER_MOCK.getNextFirmwareVersion.mockReturnValue(\n EitherAsync(async () => NEXT_FIRMWARE_VERSION),\n );\n MANAGER_MOCK.getMcuList.mockReturnValue(EitherAsync(async () => MCUS));\n });\n\n it(\"success with no firmware update available\", async () => {\n // GIVEN\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: OS_VERSION }))\n .mockResolvedValueOnce(CommandResultFactory({ data: CUSTOM_IMAGE_SIZE }));\n MANAGER_MOCK.getLatestFirmwareVersion.mockReturnValueOnce(\n EitherAsync(async ({ throwE }) => {\n throwE(new Error(\"error\"));\n }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n data: {\n deviceVersion: DEVICE_VERSION,\n firmware: FIRMWARE_VERSION,\n firmwareVersion: {\n mcu: \"mcu_version\",\n bootloader: \"bl_version\",\n os: \"se_version\",\n metadata: OS_VERSION,\n },\n firmwareUpdateContext: {\n currentFirmware: FIRMWARE_VERSION,\n availableUpdate: undefined,\n },\n customImage: { size: CUSTOM_IMAGE_SIZE },\n },\n }),\n );\n });\n\n it(\"success with a firmware update available\", async () => {\n // GIVEN\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: OS_VERSION }))\n .mockResolvedValueOnce(\n CommandResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n data: {\n deviceVersion: DEVICE_VERSION,\n firmware: FIRMWARE_VERSION,\n firmwareVersion: {\n mcu: \"mcu_version\",\n bootloader: \"bl_version\",\n os: \"se_version\",\n metadata: OS_VERSION,\n },\n firmwareUpdateContext: {\n currentFirmware: FIRMWARE_VERSION,\n availableUpdate: {\n osuFirmware: OSU_VERSION,\n finalFirmware: NEXT_FIRMWARE_VERSION,\n mcuUpdateRequired: false,\n },\n },\n customImage: {},\n },\n }),\n );\n expect(MANAGER_MOCK.getDeviceVersion).toHaveBeenCalledWith(OS_VERSION);\n expect(MANAGER_MOCK.getFirmwareVersion).toHaveBeenCalledWith(\n OS_VERSION,\n DEVICE_VERSION,\n );\n expect(MANAGER_MOCK.getLatestFirmwareVersion).toHaveBeenCalledWith(\n FIRMWARE_VERSION,\n DEVICE_VERSION,\n );\n expect(MANAGER_MOCK.getNextFirmwareVersion).toHaveBeenCalledWith(\n OSU_VERSION,\n );\n });\n\n it(\"success with a firmware update available and MCU update\", async () => {\n // GIVEN\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: OS_VERSION }))\n .mockResolvedValueOnce(\n CommandResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n const nextFirmware = {\n ...NEXT_FIRMWARE_VERSION,\n mcuVersions: [3],\n };\n MANAGER_MOCK.getNextFirmwareVersion.mockReturnValue(\n EitherAsync(async () => nextFirmware),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n data: {\n deviceVersion: DEVICE_VERSION,\n firmware: FIRMWARE_VERSION,\n firmwareVersion: {\n mcu: \"mcu_version\",\n bootloader: \"bl_version\",\n os: \"se_version\",\n metadata: OS_VERSION,\n },\n firmwareUpdateContext: {\n currentFirmware: FIRMWARE_VERSION,\n availableUpdate: {\n osuFirmware: OSU_VERSION,\n finalFirmware: nextFirmware,\n mcuUpdateRequired: true,\n },\n },\n customImage: {},\n },\n }),\n );\n });\n\n it(\"should fail when OS version cannot be retrieved\", async () => {\n // GIVEN\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n });\n\n it(\"should fail if device version cannot be fetched\", async () => {\n // GIVEN\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ data: OS_VERSION }),\n );\n MANAGER_MOCK.getDeviceVersion.mockReturnValueOnce(\n EitherAsync(async ({ throwE }) => {\n throwE(new Error(\"error\"));\n }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Cannot fetch current firmware metadata\",\n ),\n }),\n );\n });\n\n it(\"should fail if firmware version cannot be fetched\", async () => {\n // GIVEN\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ data: OS_VERSION }),\n );\n MANAGER_MOCK.getFirmwareVersion.mockReturnValueOnce(\n EitherAsync(async ({ throwE }) => {\n throwE(new Error(\"error\"));\n }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Cannot fetch current firmware metadata\",\n ),\n }),\n );\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["EitherAsync", "InvalidStatusWordError", "CommandResultFactory", "makeDeviceActionInternalApiMock", "GetFirmwareMetadataTask", "apiMock", "OS_VERSION", "CUSTOM_IMAGE_SIZE", "DEVICE_VERSION", "FIRMWARE_VERSION", "OSU_VERSION", "NEXT_FIRMWARE_VERSION", "MCUS", "MANAGER_MOCK", "throwE", "result", "nextFirmware"]
4
+ "sourcesContent": ["import { EitherAsync } from \"purify-ts\";\n\nimport {\n InvalidGetFirmwareMetadataResponseError,\n InvalidStatusWordError,\n} from \"@api/command/Errors\";\nimport { CommandResultFactory } from \"@api/command/model/CommandResult\";\nimport { type GetOsVersionResponse } from \"@api/command/os/GetOsVersionCommand\";\nimport { makeDeviceActionInternalApiMock } from \"@api/device-action/__test-utils__/makeInternalApi\";\nimport {\n type FinalFirmware,\n type McuFirmware,\n type OsuFirmware,\n} from \"@internal/manager-api/model/Firmware\";\nimport { type ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\n\nimport { GetFirmwareMetadataTask } from \"./GetFirmwareMetadataTask\";\n\ndescribe(\"GetFirmwareMetadataTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n const OS_VERSION = {\n mcuSephVersion: \"mcu_version\",\n mcuBootloaderVersion: \"bl_version\",\n seVersion: \"se_version\",\n } as GetOsVersionResponse;\n\n const CUSTOM_IMAGE_SIZE = 97;\n\n const DEVICE_VERSION = {\n id: 7,\n };\n\n const FIRMWARE_VERSION = {\n id: 361,\n version: \"1.6.0\",\n perso: \"perso_11\",\n } as FinalFirmware;\n\n const OSU_VERSION = {\n id: 362,\n perso: \"perso_11\",\n } as OsuFirmware;\n\n const NEXT_FIRMWARE_VERSION = {\n id: 363,\n version: \"1.7.0\",\n perso: \"perso_11\",\n mcuVersions: [1],\n } as FinalFirmware;\n\n const MCUS = [\n {\n id: 3,\n name: \"other_version\",\n },\n {\n id: 1,\n name: \"mcu_version\",\n },\n ] as McuFirmware[];\n\n const MANAGER_MOCK = {\n getDeviceVersion: vi.fn(),\n getFirmwareVersion: vi.fn(),\n getLatestFirmwareVersion: vi.fn(),\n getNextFirmwareVersion: vi.fn(),\n getMcuList: vi.fn(),\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n\n apiMock.getManagerApiService.mockReturnValue(\n MANAGER_MOCK as unknown as ManagerApiService,\n );\n MANAGER_MOCK.getDeviceVersion.mockReturnValue(\n EitherAsync(async () => DEVICE_VERSION),\n );\n MANAGER_MOCK.getFirmwareVersion.mockReturnValue(\n EitherAsync(async () => FIRMWARE_VERSION),\n );\n MANAGER_MOCK.getLatestFirmwareVersion.mockReturnValue(\n EitherAsync(async () => OSU_VERSION),\n );\n MANAGER_MOCK.getNextFirmwareVersion.mockReturnValue(\n EitherAsync(async () => NEXT_FIRMWARE_VERSION),\n );\n MANAGER_MOCK.getMcuList.mockReturnValue(EitherAsync(async () => MCUS));\n });\n\n it(\"success with no firmware update available\", async () => {\n // GIVEN\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: OS_VERSION }))\n .mockResolvedValueOnce(CommandResultFactory({ data: CUSTOM_IMAGE_SIZE }));\n MANAGER_MOCK.getLatestFirmwareVersion.mockReturnValueOnce(\n EitherAsync(async ({ throwE }) => {\n throwE(new Error(\"error\"));\n }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n data: {\n deviceVersion: DEVICE_VERSION,\n firmware: FIRMWARE_VERSION,\n firmwareVersion: {\n mcu: \"mcu_version\",\n bootloader: \"bl_version\",\n os: \"se_version\",\n metadata: OS_VERSION,\n },\n firmwareUpdateContext: {\n currentFirmware: FIRMWARE_VERSION,\n availableUpdate: undefined,\n },\n customImage: { size: CUSTOM_IMAGE_SIZE },\n },\n }),\n );\n });\n\n it(\"success with a firmware update available\", async () => {\n // GIVEN\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: OS_VERSION }))\n .mockResolvedValueOnce(\n CommandResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n data: {\n deviceVersion: DEVICE_VERSION,\n firmware: FIRMWARE_VERSION,\n firmwareVersion: {\n mcu: \"mcu_version\",\n bootloader: \"bl_version\",\n os: \"se_version\",\n metadata: OS_VERSION,\n },\n firmwareUpdateContext: {\n currentFirmware: FIRMWARE_VERSION,\n availableUpdate: {\n osuFirmware: OSU_VERSION,\n finalFirmware: NEXT_FIRMWARE_VERSION,\n mcuUpdateRequired: false,\n },\n },\n customImage: {},\n },\n }),\n );\n expect(MANAGER_MOCK.getDeviceVersion).toHaveBeenCalledWith(OS_VERSION);\n expect(MANAGER_MOCK.getFirmwareVersion).toHaveBeenCalledWith(\n OS_VERSION,\n DEVICE_VERSION,\n );\n expect(MANAGER_MOCK.getLatestFirmwareVersion).toHaveBeenCalledWith(\n FIRMWARE_VERSION,\n DEVICE_VERSION,\n );\n expect(MANAGER_MOCK.getNextFirmwareVersion).toHaveBeenCalledWith(\n OSU_VERSION,\n );\n });\n\n it(\"success with a firmware update available and MCU update\", async () => {\n // GIVEN\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: OS_VERSION }))\n .mockResolvedValueOnce(\n CommandResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n const nextFirmware = {\n ...NEXT_FIRMWARE_VERSION,\n mcuVersions: [3],\n };\n MANAGER_MOCK.getNextFirmwareVersion.mockReturnValue(\n EitherAsync(async () => nextFirmware),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n data: {\n deviceVersion: DEVICE_VERSION,\n firmware: FIRMWARE_VERSION,\n firmwareVersion: {\n mcu: \"mcu_version\",\n bootloader: \"bl_version\",\n os: \"se_version\",\n metadata: OS_VERSION,\n },\n firmwareUpdateContext: {\n currentFirmware: FIRMWARE_VERSION,\n availableUpdate: {\n osuFirmware: OSU_VERSION,\n finalFirmware: nextFirmware,\n mcuUpdateRequired: true,\n },\n },\n customImage: {},\n },\n }),\n );\n });\n\n it(\"should fail when OS version cannot be retrieved\", async () => {\n // GIVEN\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n });\n\n it(\"should fail if device version cannot be fetched with InvalidGetFirmwareMetadataResponseError\", async () => {\n // GIVEN\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ data: OS_VERSION }),\n );\n MANAGER_MOCK.getDeviceVersion.mockReturnValueOnce(\n EitherAsync(async ({ throwE }) => {\n throwE(new Error(\"error\"));\n }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidGetFirmwareMetadataResponseError(),\n }),\n );\n });\n\n it(\"should fail if firmware version cannot be fetched with InvalidGetFirmwareMetadataResponseError\", async () => {\n // GIVEN\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ data: OS_VERSION }),\n );\n MANAGER_MOCK.getFirmwareVersion.mockReturnValueOnce(\n EitherAsync(async ({ throwE }) => {\n throwE(new Error(\"error\"));\n }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidGetFirmwareMetadataResponseError(),\n }),\n );\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["EitherAsync", "InvalidGetFirmwareMetadataResponseError", "InvalidStatusWordError", "CommandResultFactory", "makeDeviceActionInternalApiMock", "GetFirmwareMetadataTask", "apiMock", "OS_VERSION", "CUSTOM_IMAGE_SIZE", "DEVICE_VERSION", "FIRMWARE_VERSION", "OSU_VERSION", "NEXT_FIRMWARE_VERSION", "MCUS", "MANAGER_MOCK", "throwE", "result", "nextFirmware"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{Observable as d,ReplaySubject as h,share as S}from"rxjs";import{createActor as I}from"xstate";import{DeviceActionStatus as a}from"../../device-action/model/DeviceActionState";class E{input;inspect=!1;constructor(r){this.input=r.input,this.inspect=!!r.inspect}_execute(r){const n=this.makeStateMachine(r),e=I(n,{input:this.input}),t=new h,s=i=>{const{context:c,status:l,output:b,error:u}=i;switch(l){case"active":t.next({status:a.Pending,intermediateValue:c.intermediateValue});break;case"done":b.caseOf({Left:m=>{t.next({status:a.Error,error:m})},Right:m=>{t.next({status:a.Completed,output:m})}}),t.complete();break;case"error":t.error(u),t.complete();break;case"stopped":t.next({status:a.Stopped}),t.complete();break;default:this._exhaustiveMatchingGuard(l)}},p=new d(i=>{const c=t.subscribe(i);return()=>{o.unsubscribe(),c.unsubscribe(),e.stop()}}),o=e.subscribe(s);return e.start(),{observable:p.pipe(S()),cancel:()=>{e.stop(),o.unsubscribe(),s(e.getSnapshot())}}}_subscribeToStateMachine(r){const n=I(r,{input:this.input}),e=new h,t=o=>{const{context:i,status:c,output:l,error:b}=o;switch(c){case"active":e.next({status:a.Pending,intermediateValue:i.intermediateValue});break;case"done":l.caseOf({Left:u=>{e.next({status:a.Error,error:u})},Right:u=>{e.next({status:a.Completed,output:u})}}),e.complete();break;case"error":e.error(b),e.complete();break;case"stopped":e.next({status:a.Stopped}),e.complete();break;default:this._exhaustiveMatchingGuard(c)}},s=new d(o=>{const i=e.subscribe(o);return()=>{p.unsubscribe(),i.unsubscribe(),n.stop()}}),p=n.subscribe(t);return n.start(),{observable:s.pipe(S()),cancel:()=>{n.stop(),p.unsubscribe(),t(n.getSnapshot())}}}_exhaustiveMatchingGuard(r){throw console.log("_exhaustiveMatchingGuard status",r),new Error(`Unhandled status: ${r}`)}}export{E as XStateDeviceAction};
1
+ import{Observable as h,ReplaySubject as d,share as S}from"rxjs";import{createActor as I}from"xstate";import{DeviceActionStatus as a}from"../../device-action/model/DeviceActionState";class E{input;inspect=!1;constructor(e){this.input=e.input,this.inspect=!!e.inspect}_execute(e){const n=this.makeStateMachine(e);return this._subscribeToStateMachine(n)}_subscribeToStateMachine(e){const n=I(e,{input:this.input}),t=new d,o=r=>{const{context:i,status:p,output:l,error:m}=r;switch(p){case"active":t.next({status:a.Pending,intermediateValue:i.intermediateValue});break;case"done":l.caseOf({Left:c=>{t.next({status:a.Error,error:c})},Right:c=>{t.next({status:a.Completed,output:c})}}),t.complete();break;case"error":t.error(m),t.complete();break;case"stopped":t.next({status:a.Stopped}),t.complete();break;default:this._exhaustiveMatchingGuard(p)}},s=new h(r=>{const i=t.subscribe(r);return()=>{u.unsubscribe(),i.unsubscribe(),n.stop()}}),u=n.subscribe(o);return n.start(),{observable:s.pipe(S()),cancel:()=>{n.stop(),u.unsubscribe(),o(n.getSnapshot())}}}_exhaustiveMatchingGuard(e){throw console.log("_exhaustiveMatchingGuard status",e),new Error(`Unhandled status: ${e}`)}}export{E as XStateDeviceAction};
2
2
  //# sourceMappingURL=XStateDeviceAction.js.map