@ledgerhq/device-management-kit 1.1.0 → 1.3.0

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 (422) hide show
  1. package/lib/cjs/package.json +1 -2
  2. package/lib/cjs/src/api/apdu/utils/ApduBuilder.js +1 -1
  3. package/lib/cjs/src/api/apdu/utils/ApduBuilder.js.map +3 -3
  4. package/lib/cjs/src/api/command/Errors.js +1 -1
  5. package/lib/cjs/src/api/command/Errors.js.map +3 -3
  6. package/lib/cjs/src/api/command/model/CommandResult.js +1 -1
  7. package/lib/cjs/src/api/command/model/CommandResult.js.map +3 -3
  8. package/lib/cjs/src/api/command/os/BackupStorageCommand.js +2 -0
  9. package/lib/cjs/src/api/command/os/BackupStorageCommand.js.map +7 -0
  10. package/lib/cjs/src/api/command/os/BackupStorageCommand.test.js +2 -0
  11. package/lib/cjs/src/api/command/os/BackupStorageCommand.test.js.map +7 -0
  12. package/lib/cjs/src/api/command/os/GetAppStorageInfoCommand.js +2 -0
  13. package/lib/cjs/src/api/command/os/GetAppStorageInfoCommand.js.map +7 -0
  14. package/lib/cjs/src/api/command/os/GetAppStorageInfoCommand.test.js +2 -0
  15. package/lib/cjs/src/api/command/os/GetAppStorageInfoCommand.test.js.map +7 -0
  16. package/lib/cjs/src/api/command/os/GetBatteryStatusCommand.js +1 -1
  17. package/lib/cjs/src/api/command/os/GetBatteryStatusCommand.js.map +3 -3
  18. package/lib/cjs/src/api/command/os/GetBatteryStatusCommand.test.js +1 -1
  19. package/lib/cjs/src/api/command/os/GetBatteryStatusCommand.test.js.map +3 -3
  20. package/lib/cjs/src/api/command/use-case/SendCommandUseCase.test.js +1 -1
  21. package/lib/cjs/src/api/command/use-case/SendCommandUseCase.test.js.map +3 -3
  22. package/lib/cjs/src/api/device-action/__test-utils__/setupTestMachine.js +1 -1
  23. package/lib/cjs/src/api/device-action/__test-utils__/setupTestMachine.js.map +3 -3
  24. package/lib/cjs/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.js +1 -1
  25. package/lib/cjs/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.js.map +3 -3
  26. package/lib/cjs/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.test.js +1 -1
  27. package/lib/cjs/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.test.js.map +3 -3
  28. package/lib/cjs/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceActionTypes.js +1 -1
  29. package/lib/cjs/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceActionTypes.js.map +3 -3
  30. package/lib/cjs/src/api/device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction.js +1 -1
  31. package/lib/cjs/src/api/device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction.js.map +3 -3
  32. package/lib/cjs/src/api/device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction.test.js +1 -1
  33. package/lib/cjs/src/api/device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction.test.js.map +3 -3
  34. package/lib/cjs/src/api/device-action/os/GetDeviceMetadata/types.js +1 -1
  35. package/lib/cjs/src/api/device-action/os/GetDeviceMetadata/types.js.map +3 -3
  36. package/lib/cjs/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.js +1 -1
  37. package/lib/cjs/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.js.map +3 -3
  38. package/lib/cjs/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.test.js +1 -1
  39. package/lib/cjs/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.test.js.map +3 -3
  40. package/lib/cjs/src/api/device-action/os/GetDeviceStatus/types.js +1 -1
  41. package/lib/cjs/src/api/device-action/os/GetDeviceStatus/types.js.map +3 -3
  42. package/lib/cjs/src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.js +1 -1
  43. package/lib/cjs/src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.js.map +3 -3
  44. package/lib/cjs/src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.test.js +1 -1
  45. package/lib/cjs/src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.test.js.map +3 -3
  46. package/lib/cjs/src/api/device-action/os/GoToDashboard/types.js +1 -1
  47. package/lib/cjs/src/api/device-action/os/GoToDashboard/types.js.map +3 -3
  48. package/lib/cjs/src/api/device-action/os/InstallOrUpdateApps/InstallOrUpdateAppsDeviceAction.js +1 -1
  49. package/lib/cjs/src/api/device-action/os/InstallOrUpdateApps/InstallOrUpdateAppsDeviceAction.js.map +2 -2
  50. package/lib/cjs/src/api/device-action/os/InstallOrUpdateApps/InstallOrUpdateAppsDeviceAction.test.js +1 -1
  51. package/lib/cjs/src/api/device-action/os/InstallOrUpdateApps/InstallOrUpdateAppsDeviceAction.test.js.map +2 -2
  52. package/lib/cjs/src/api/device-action/os/InstallOrUpdateApps/types.js +1 -1
  53. package/lib/cjs/src/api/device-action/os/InstallOrUpdateApps/types.js.map +3 -3
  54. package/lib/cjs/src/api/device-action/os/ListApps/ListAppsDeviceAction.js +1 -1
  55. package/lib/cjs/src/api/device-action/os/ListApps/ListAppsDeviceAction.js.map +3 -3
  56. package/lib/cjs/src/api/device-action/os/ListApps/ListAppsDeviceAction.test.js +1 -1
  57. package/lib/cjs/src/api/device-action/os/ListApps/ListAppsDeviceAction.test.js.map +3 -3
  58. package/lib/cjs/src/api/device-action/os/ListApps/types.js +1 -1
  59. package/lib/cjs/src/api/device-action/os/ListApps/types.js.map +3 -3
  60. package/lib/cjs/src/api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction.js +1 -1
  61. package/lib/cjs/src/api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction.js.map +3 -3
  62. package/lib/cjs/src/api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction.test.js +1 -1
  63. package/lib/cjs/src/api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction.test.js.map +3 -3
  64. package/lib/cjs/src/api/device-action/os/ListAppsWithMetadata/types.js +1 -1
  65. package/lib/cjs/src/api/device-action/os/ListAppsWithMetadata/types.js.map +3 -3
  66. package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.js +1 -1
  67. package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.js.map +3 -3
  68. package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.test.js +1 -1
  69. package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.test.js.map +3 -3
  70. package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/types.js +1 -1
  71. package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/types.js.map +3 -3
  72. package/lib/cjs/src/api/device-action/os/OpenAppWithDependencies/OpenAppWithDependenciesDeviceAction.js +1 -1
  73. package/lib/cjs/src/api/device-action/os/OpenAppWithDependencies/OpenAppWithDependenciesDeviceAction.js.map +3 -3
  74. package/lib/cjs/src/api/device-action/os/OpenAppWithDependencies/OpenAppWithDependenciesDeviceAction.test.js +1 -1
  75. package/lib/cjs/src/api/device-action/os/OpenAppWithDependencies/OpenAppWithDependenciesDeviceAction.test.js.map +3 -3
  76. package/lib/cjs/src/api/device-action/os/OpenAppWithDependencies/types.js +1 -1
  77. package/lib/cjs/src/api/device-action/os/OpenAppWithDependencies/types.js.map +3 -3
  78. package/lib/cjs/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.js +1 -1
  79. package/lib/cjs/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.js.map +3 -3
  80. package/lib/cjs/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.test.js +1 -1
  81. package/lib/cjs/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.test.js.map +3 -3
  82. package/lib/cjs/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceActionTypes.js +1 -1
  83. package/lib/cjs/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceActionTypes.js.map +3 -3
  84. package/lib/cjs/src/api/device-action/task/BackupAppStorageTask.js +2 -0
  85. package/lib/cjs/src/api/device-action/task/BackupAppStorageTask.js.map +7 -0
  86. package/lib/cjs/src/api/device-action/task/BackupAppStorageTask.test.js +2 -0
  87. package/lib/cjs/src/api/device-action/task/BackupAppStorageTask.test.js.map +7 -0
  88. package/lib/cjs/src/api/device-action/task/Errors.js +2 -0
  89. package/lib/cjs/src/api/device-action/task/Errors.js.map +7 -0
  90. package/lib/cjs/src/api/device-action/task/GetApplicationsMetadataTask.js +1 -1
  91. package/lib/cjs/src/api/device-action/task/GetApplicationsMetadataTask.js.map +3 -3
  92. package/lib/cjs/src/api/device-action/task/GetApplicationsMetadataTask.test.js +1 -1
  93. package/lib/cjs/src/api/device-action/task/GetApplicationsMetadataTask.test.js.map +3 -3
  94. package/lib/cjs/src/api/device-action/task/GetFirmwareMetadataTask.js +1 -1
  95. package/lib/cjs/src/api/device-action/task/GetFirmwareMetadataTask.js.map +3 -3
  96. package/lib/cjs/src/api/device-action/task/GetFirmwareMetadataTask.test.js +1 -1
  97. package/lib/cjs/src/api/device-action/task/GetFirmwareMetadataTask.test.js.map +3 -3
  98. package/lib/cjs/src/api/device-action/xstate-utils/XStateDeviceAction.js +1 -1
  99. package/lib/cjs/src/api/device-action/xstate-utils/XStateDeviceAction.js.map +2 -2
  100. package/lib/cjs/src/api/device-session/use-case/DisableDeviceSessionRefresher.test.js +1 -1
  101. package/lib/cjs/src/api/device-session/use-case/DisableDeviceSessionRefresher.test.js.map +3 -3
  102. package/lib/cjs/src/api/index.js +1 -1
  103. package/lib/cjs/src/api/index.js.map +3 -3
  104. package/lib/cjs/src/api/model/DmkResult.js +2 -0
  105. package/lib/cjs/src/api/model/DmkResult.js.map +7 -0
  106. package/lib/cjs/src/api/model/DmkResult.test.js +2 -0
  107. package/lib/cjs/src/api/model/DmkResult.test.js.map +7 -0
  108. package/lib/cjs/src/api/network/DmkNetworkClient.js +2 -0
  109. package/lib/cjs/src/api/network/DmkNetworkClient.js.map +7 -0
  110. package/lib/cjs/src/api/network/DmkNetworkClient.test.js +2 -0
  111. package/lib/cjs/src/api/network/DmkNetworkClient.test.js.map +7 -0
  112. package/lib/cjs/src/api/network/DmkNetworkClientError.js +2 -0
  113. package/lib/cjs/src/api/network/DmkNetworkClientError.js.map +7 -0
  114. package/lib/cjs/src/api/network/DmkNetworkClientHelpers.js +2 -0
  115. package/lib/cjs/src/api/network/DmkNetworkClientHelpers.js.map +7 -0
  116. package/lib/cjs/src/api/network/DmkNetworkClientHelpers.test.js +2 -0
  117. package/lib/cjs/src/api/network/DmkNetworkClientHelpers.test.js.map +7 -0
  118. package/lib/cjs/src/api/storage/KeyValueStorage.js +2 -0
  119. package/lib/cjs/src/api/storage/KeyValueStorage.js.map +7 -0
  120. package/lib/cjs/src/api/types.js +1 -1
  121. package/lib/cjs/src/api/types.js.map +1 -1
  122. package/lib/cjs/src/api/utils/ApplicationChecker.js +2 -0
  123. package/lib/cjs/src/api/utils/ApplicationChecker.js.map +7 -0
  124. package/lib/cjs/src/api/utils/ApplicationChecker.test.js +2 -0
  125. package/lib/cjs/src/api/utils/ApplicationChecker.test.js.map +7 -0
  126. package/lib/cjs/src/api/utils/ApplicationResolver.js +2 -0
  127. package/lib/cjs/src/api/utils/ApplicationResolver.js.map +7 -0
  128. package/lib/cjs/src/api/utils/Base64String.js +1 -1
  129. package/lib/cjs/src/api/utils/Base64String.js.map +3 -3
  130. package/lib/cjs/src/api/utils/Base64String.test.js +1 -1
  131. package/lib/cjs/src/api/utils/Base64String.test.js.map +3 -3
  132. package/lib/cjs/src/internal/device-session/service/DefaultDeviceSessionService.test.js +1 -1
  133. package/lib/cjs/src/internal/device-session/service/DefaultDeviceSessionService.test.js.map +3 -3
  134. package/lib/cjs/src/internal/device-session/use-case/CloseSessionsUseCase.test.js +1 -1
  135. package/lib/cjs/src/internal/device-session/use-case/CloseSessionsUseCase.test.js.map +3 -3
  136. package/lib/cjs/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.js +1 -1
  137. package/lib/cjs/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.js.map +3 -3
  138. package/lib/cjs/src/internal/discovery/use-case/DisconnectUseCase.test.js +1 -1
  139. package/lib/cjs/src/internal/discovery/use-case/DisconnectUseCase.test.js.map +3 -3
  140. package/lib/cjs/src/internal/discovery/use-case/GetConnectedDeviceUseCase.test.js +1 -1
  141. package/lib/cjs/src/internal/discovery/use-case/GetConnectedDeviceUseCase.test.js.map +3 -3
  142. package/lib/cjs/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.js +1 -1
  143. package/lib/cjs/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.js.map +3 -3
  144. package/lib/cjs/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.js +1 -1
  145. package/lib/cjs/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.js.map +3 -3
  146. package/lib/cjs/src/internal/manager-api/data/HttpManagerApiDataSource.js +2 -0
  147. package/lib/cjs/src/internal/manager-api/data/HttpManagerApiDataSource.js.map +7 -0
  148. package/lib/cjs/src/internal/manager-api/data/HttpManagerApiDataSource.test.js +2 -0
  149. package/lib/cjs/src/internal/manager-api/data/HttpManagerApiDataSource.test.js.map +7 -0
  150. package/lib/cjs/src/internal/manager-api/data/__mocks__/HttpManagerApiDataSource.js +2 -0
  151. package/lib/cjs/src/internal/manager-api/data/__mocks__/HttpManagerApiDataSource.js.map +7 -0
  152. package/lib/cjs/src/internal/manager-api/di/managerApiModule.js +1 -1
  153. package/lib/cjs/src/internal/manager-api/di/managerApiModule.js.map +3 -3
  154. package/lib/cjs/src/internal/manager-api/di/managerApiModule.test.js +1 -1
  155. package/lib/cjs/src/internal/manager-api/di/managerApiModule.test.js.map +3 -3
  156. package/lib/cjs/src/internal/manager-api/service/DefaultManagerApiService.test.js +1 -1
  157. package/lib/cjs/src/internal/manager-api/service/DefaultManagerApiService.test.js.map +3 -3
  158. package/lib/esm/package.json +1 -2
  159. package/lib/esm/src/api/apdu/utils/ApduBuilder.js +1 -1
  160. package/lib/esm/src/api/apdu/utils/ApduBuilder.js.map +3 -3
  161. package/lib/esm/src/api/command/Errors.js +1 -1
  162. package/lib/esm/src/api/command/Errors.js.map +3 -3
  163. package/lib/esm/src/api/command/model/CommandResult.js +1 -1
  164. package/lib/esm/src/api/command/model/CommandResult.js.map +3 -3
  165. package/lib/esm/src/api/command/os/BackupStorageCommand.js +2 -0
  166. package/lib/esm/src/api/command/os/BackupStorageCommand.js.map +7 -0
  167. package/lib/esm/src/api/command/os/BackupStorageCommand.test.js +2 -0
  168. package/lib/esm/src/api/command/os/BackupStorageCommand.test.js.map +7 -0
  169. package/lib/esm/src/api/command/os/GetAppStorageInfoCommand.js +2 -0
  170. package/lib/esm/src/api/command/os/GetAppStorageInfoCommand.js.map +7 -0
  171. package/lib/esm/src/api/command/os/GetAppStorageInfoCommand.test.js +2 -0
  172. package/lib/esm/src/api/command/os/GetAppStorageInfoCommand.test.js.map +7 -0
  173. package/lib/esm/src/api/command/os/GetBatteryStatusCommand.js +1 -1
  174. package/lib/esm/src/api/command/os/GetBatteryStatusCommand.js.map +3 -3
  175. package/lib/esm/src/api/command/os/GetBatteryStatusCommand.test.js +1 -1
  176. package/lib/esm/src/api/command/os/GetBatteryStatusCommand.test.js.map +3 -3
  177. package/lib/esm/src/api/command/use-case/SendCommandUseCase.test.js +1 -1
  178. package/lib/esm/src/api/command/use-case/SendCommandUseCase.test.js.map +3 -3
  179. package/lib/esm/src/api/device-action/__test-utils__/setupTestMachine.js +1 -1
  180. package/lib/esm/src/api/device-action/__test-utils__/setupTestMachine.js.map +3 -3
  181. package/lib/esm/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.js +1 -1
  182. package/lib/esm/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.js.map +3 -3
  183. package/lib/esm/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.test.js +1 -1
  184. package/lib/esm/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.test.js.map +3 -3
  185. package/lib/esm/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceActionTypes.js +1 -0
  186. package/lib/esm/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceActionTypes.js.map +4 -4
  187. package/lib/esm/src/api/device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction.js +1 -1
  188. package/lib/esm/src/api/device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction.js.map +3 -3
  189. package/lib/esm/src/api/device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction.test.js +1 -1
  190. package/lib/esm/src/api/device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction.test.js.map +3 -3
  191. package/lib/esm/src/api/device-action/os/GetDeviceMetadata/types.js +1 -0
  192. package/lib/esm/src/api/device-action/os/GetDeviceMetadata/types.js.map +4 -4
  193. package/lib/esm/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.js +1 -1
  194. package/lib/esm/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.js.map +3 -3
  195. package/lib/esm/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.test.js +1 -1
  196. package/lib/esm/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.test.js.map +3 -3
  197. package/lib/esm/src/api/device-action/os/GetDeviceStatus/types.js +1 -0
  198. package/lib/esm/src/api/device-action/os/GetDeviceStatus/types.js.map +4 -4
  199. package/lib/esm/src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.js +1 -1
  200. package/lib/esm/src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.js.map +3 -3
  201. package/lib/esm/src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.test.js +1 -1
  202. package/lib/esm/src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.test.js.map +3 -3
  203. package/lib/esm/src/api/device-action/os/GoToDashboard/types.js +1 -0
  204. package/lib/esm/src/api/device-action/os/GoToDashboard/types.js.map +4 -4
  205. package/lib/esm/src/api/device-action/os/InstallOrUpdateApps/InstallOrUpdateAppsDeviceAction.js +1 -1
  206. package/lib/esm/src/api/device-action/os/InstallOrUpdateApps/InstallOrUpdateAppsDeviceAction.js.map +3 -3
  207. package/lib/esm/src/api/device-action/os/InstallOrUpdateApps/InstallOrUpdateAppsDeviceAction.test.js +1 -1
  208. package/lib/esm/src/api/device-action/os/InstallOrUpdateApps/InstallOrUpdateAppsDeviceAction.test.js.map +3 -3
  209. package/lib/esm/src/api/device-action/os/InstallOrUpdateApps/types.js +1 -0
  210. package/lib/esm/src/api/device-action/os/InstallOrUpdateApps/types.js.map +4 -4
  211. package/lib/esm/src/api/device-action/os/ListApps/ListAppsDeviceAction.js +1 -1
  212. package/lib/esm/src/api/device-action/os/ListApps/ListAppsDeviceAction.js.map +3 -3
  213. package/lib/esm/src/api/device-action/os/ListApps/ListAppsDeviceAction.test.js +1 -1
  214. package/lib/esm/src/api/device-action/os/ListApps/ListAppsDeviceAction.test.js.map +3 -3
  215. package/lib/esm/src/api/device-action/os/ListApps/types.js +1 -0
  216. package/lib/esm/src/api/device-action/os/ListApps/types.js.map +4 -4
  217. package/lib/esm/src/api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction.js +1 -1
  218. package/lib/esm/src/api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction.js.map +3 -3
  219. package/lib/esm/src/api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction.test.js +1 -1
  220. package/lib/esm/src/api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction.test.js.map +3 -3
  221. package/lib/esm/src/api/device-action/os/ListAppsWithMetadata/types.js +1 -0
  222. package/lib/esm/src/api/device-action/os/ListAppsWithMetadata/types.js.map +4 -4
  223. package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.js +1 -1
  224. package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.js.map +3 -3
  225. package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.test.js +1 -1
  226. package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.test.js.map +3 -3
  227. package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/types.js +1 -0
  228. package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/types.js.map +4 -4
  229. package/lib/esm/src/api/device-action/os/OpenAppWithDependencies/OpenAppWithDependenciesDeviceAction.js +1 -1
  230. package/lib/esm/src/api/device-action/os/OpenAppWithDependencies/OpenAppWithDependenciesDeviceAction.js.map +3 -3
  231. package/lib/esm/src/api/device-action/os/OpenAppWithDependencies/OpenAppWithDependenciesDeviceAction.test.js +1 -1
  232. package/lib/esm/src/api/device-action/os/OpenAppWithDependencies/OpenAppWithDependenciesDeviceAction.test.js.map +3 -3
  233. package/lib/esm/src/api/device-action/os/OpenAppWithDependencies/types.js +1 -0
  234. package/lib/esm/src/api/device-action/os/OpenAppWithDependencies/types.js.map +4 -4
  235. package/lib/esm/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.js +1 -1
  236. package/lib/esm/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.js.map +3 -3
  237. package/lib/esm/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.test.js +1 -1
  238. package/lib/esm/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.test.js.map +3 -3
  239. package/lib/esm/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceActionTypes.js +1 -0
  240. package/lib/esm/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceActionTypes.js.map +4 -4
  241. package/lib/esm/src/api/device-action/task/BackupAppStorageTask.js +2 -0
  242. package/lib/esm/src/api/device-action/task/BackupAppStorageTask.js.map +7 -0
  243. package/lib/esm/src/api/device-action/task/BackupAppStorageTask.test.js +2 -0
  244. package/lib/esm/src/api/device-action/task/BackupAppStorageTask.test.js.map +7 -0
  245. package/lib/esm/src/api/device-action/task/Errors.js +2 -0
  246. package/lib/esm/src/api/device-action/task/Errors.js.map +7 -0
  247. package/lib/esm/src/api/device-action/task/GetApplicationsMetadataTask.js +1 -1
  248. package/lib/esm/src/api/device-action/task/GetApplicationsMetadataTask.js.map +3 -3
  249. package/lib/esm/src/api/device-action/task/GetApplicationsMetadataTask.test.js +1 -1
  250. package/lib/esm/src/api/device-action/task/GetApplicationsMetadataTask.test.js.map +3 -3
  251. package/lib/esm/src/api/device-action/task/GetFirmwareMetadataTask.js +1 -1
  252. package/lib/esm/src/api/device-action/task/GetFirmwareMetadataTask.js.map +3 -3
  253. package/lib/esm/src/api/device-action/task/GetFirmwareMetadataTask.test.js +1 -1
  254. package/lib/esm/src/api/device-action/task/GetFirmwareMetadataTask.test.js.map +3 -3
  255. package/lib/esm/src/api/device-action/xstate-utils/XStateDeviceAction.js +1 -1
  256. package/lib/esm/src/api/device-action/xstate-utils/XStateDeviceAction.js.map +2 -2
  257. package/lib/esm/src/api/device-session/use-case/DisableDeviceSessionRefresher.test.js +1 -1
  258. package/lib/esm/src/api/device-session/use-case/DisableDeviceSessionRefresher.test.js.map +3 -3
  259. package/lib/esm/src/api/index.js +1 -1
  260. package/lib/esm/src/api/index.js.map +3 -3
  261. package/lib/esm/src/api/model/DmkResult.js +2 -0
  262. package/lib/esm/src/api/model/DmkResult.js.map +7 -0
  263. package/lib/esm/src/api/model/DmkResult.test.js +2 -0
  264. package/lib/esm/src/api/model/DmkResult.test.js.map +7 -0
  265. package/lib/esm/src/api/network/DmkNetworkClient.js +2 -0
  266. package/lib/esm/src/api/network/DmkNetworkClient.js.map +7 -0
  267. package/lib/esm/src/api/network/DmkNetworkClient.test.js +2 -0
  268. package/lib/esm/src/api/network/DmkNetworkClient.test.js.map +7 -0
  269. package/lib/esm/src/api/network/DmkNetworkClientError.js +2 -0
  270. package/lib/esm/src/api/network/DmkNetworkClientError.js.map +7 -0
  271. package/lib/esm/src/api/network/DmkNetworkClientHelpers.js +2 -0
  272. package/lib/esm/src/api/network/DmkNetworkClientHelpers.js.map +7 -0
  273. package/lib/esm/src/api/network/DmkNetworkClientHelpers.test.js +2 -0
  274. package/lib/esm/src/api/network/DmkNetworkClientHelpers.test.js.map +7 -0
  275. package/lib/esm/src/api/storage/KeyValueStorage.js +2 -0
  276. package/lib/esm/src/api/storage/KeyValueStorage.js.map +7 -0
  277. package/lib/esm/src/api/utils/ApplicationChecker.js +2 -0
  278. package/lib/esm/src/api/utils/ApplicationChecker.js.map +7 -0
  279. package/lib/esm/src/api/utils/ApplicationChecker.test.js +2 -0
  280. package/lib/esm/src/api/utils/ApplicationChecker.test.js.map +7 -0
  281. package/lib/esm/src/api/utils/ApplicationResolver.js +1 -0
  282. package/lib/esm/src/api/utils/ApplicationResolver.js.map +7 -0
  283. package/lib/esm/src/api/utils/Base64String.js +1 -1
  284. package/lib/esm/src/api/utils/Base64String.js.map +3 -3
  285. package/lib/esm/src/api/utils/Base64String.test.js +1 -1
  286. package/lib/esm/src/api/utils/Base64String.test.js.map +3 -3
  287. package/lib/esm/src/internal/device-session/service/DefaultDeviceSessionService.test.js +1 -1
  288. package/lib/esm/src/internal/device-session/service/DefaultDeviceSessionService.test.js.map +3 -3
  289. package/lib/esm/src/internal/device-session/use-case/CloseSessionsUseCase.test.js +1 -1
  290. package/lib/esm/src/internal/device-session/use-case/CloseSessionsUseCase.test.js.map +3 -3
  291. package/lib/esm/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.js +1 -1
  292. package/lib/esm/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.js.map +3 -3
  293. package/lib/esm/src/internal/discovery/use-case/DisconnectUseCase.test.js +1 -1
  294. package/lib/esm/src/internal/discovery/use-case/DisconnectUseCase.test.js.map +3 -3
  295. package/lib/esm/src/internal/discovery/use-case/GetConnectedDeviceUseCase.test.js +1 -1
  296. package/lib/esm/src/internal/discovery/use-case/GetConnectedDeviceUseCase.test.js.map +3 -3
  297. package/lib/esm/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.js +1 -1
  298. package/lib/esm/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.js.map +3 -3
  299. package/lib/esm/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.js +1 -1
  300. package/lib/esm/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.js.map +3 -3
  301. package/lib/esm/src/internal/manager-api/data/HttpManagerApiDataSource.js +2 -0
  302. package/lib/esm/src/internal/manager-api/data/HttpManagerApiDataSource.js.map +7 -0
  303. package/lib/esm/src/internal/manager-api/data/HttpManagerApiDataSource.test.js +2 -0
  304. package/lib/esm/src/internal/manager-api/data/HttpManagerApiDataSource.test.js.map +7 -0
  305. package/lib/esm/src/internal/manager-api/data/__mocks__/{AxiosManagerApiDataSource.js → HttpManagerApiDataSource.js} +2 -2
  306. package/lib/esm/src/internal/manager-api/data/__mocks__/HttpManagerApiDataSource.js.map +7 -0
  307. package/lib/esm/src/internal/manager-api/di/managerApiModule.js +1 -1
  308. package/lib/esm/src/internal/manager-api/di/managerApiModule.js.map +3 -3
  309. package/lib/esm/src/internal/manager-api/di/managerApiModule.test.js +1 -1
  310. package/lib/esm/src/internal/manager-api/di/managerApiModule.test.js.map +3 -3
  311. package/lib/esm/src/internal/manager-api/service/DefaultManagerApiService.test.js +1 -1
  312. package/lib/esm/src/internal/manager-api/service/DefaultManagerApiService.test.js.map +3 -3
  313. package/lib/types/src/api/apdu/utils/ApduBuilder.d.ts +7 -0
  314. package/lib/types/src/api/apdu/utils/ApduBuilder.d.ts.map +1 -1
  315. package/lib/types/src/api/command/Errors.d.ts +0 -20
  316. package/lib/types/src/api/command/Errors.d.ts.map +1 -1
  317. package/lib/types/src/api/command/model/CommandResult.d.ts +11 -17
  318. package/lib/types/src/api/command/model/CommandResult.d.ts.map +1 -1
  319. package/lib/types/src/api/command/os/BackupStorageCommand.d.ts +23 -0
  320. package/lib/types/src/api/command/os/BackupStorageCommand.d.ts.map +1 -0
  321. package/lib/types/src/api/command/os/BackupStorageCommand.test.d.ts +2 -0
  322. package/lib/types/src/api/command/os/BackupStorageCommand.test.d.ts.map +1 -0
  323. package/lib/types/src/api/command/os/GetAppStorageInfoCommand.d.ts +31 -0
  324. package/lib/types/src/api/command/os/GetAppStorageInfoCommand.d.ts.map +1 -0
  325. package/lib/types/src/api/command/os/GetAppStorageInfoCommand.test.d.ts +2 -0
  326. package/lib/types/src/api/command/os/GetAppStorageInfoCommand.test.d.ts.map +1 -0
  327. package/lib/types/src/api/command/os/GetBatteryStatusCommand.d.ts.map +1 -1
  328. package/lib/types/src/api/device-action/__test-utils__/setupTestMachine.d.ts.map +1 -1
  329. package/lib/types/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.d.ts +9 -6
  330. package/lib/types/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.d.ts.map +1 -1
  331. package/lib/types/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceActionTypes.d.ts +16 -7
  332. package/lib/types/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceActionTypes.d.ts.map +1 -1
  333. package/lib/types/src/api/device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction.d.ts.map +1 -1
  334. package/lib/types/src/api/device-action/os/GetDeviceMetadata/types.d.ts +16 -4
  335. package/lib/types/src/api/device-action/os/GetDeviceMetadata/types.d.ts.map +1 -1
  336. package/lib/types/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.d.ts.map +1 -1
  337. package/lib/types/src/api/device-action/os/GetDeviceStatus/types.d.ts +6 -0
  338. package/lib/types/src/api/device-action/os/GetDeviceStatus/types.d.ts.map +1 -1
  339. package/lib/types/src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.d.ts +1 -1
  340. package/lib/types/src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.d.ts.map +1 -1
  341. package/lib/types/src/api/device-action/os/GoToDashboard/types.d.ts +9 -1
  342. package/lib/types/src/api/device-action/os/GoToDashboard/types.d.ts.map +1 -1
  343. package/lib/types/src/api/device-action/os/InstallOrUpdateApps/InstallOrUpdateAppsDeviceAction.d.ts.map +1 -1
  344. package/lib/types/src/api/device-action/os/InstallOrUpdateApps/types.d.ts +9 -1
  345. package/lib/types/src/api/device-action/os/InstallOrUpdateApps/types.d.ts.map +1 -1
  346. package/lib/types/src/api/device-action/os/ListApps/ListAppsDeviceAction.d.ts.map +1 -1
  347. package/lib/types/src/api/device-action/os/ListApps/types.d.ts +6 -0
  348. package/lib/types/src/api/device-action/os/ListApps/types.d.ts.map +1 -1
  349. package/lib/types/src/api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction.d.ts.map +1 -1
  350. package/lib/types/src/api/device-action/os/ListAppsWithMetadata/types.d.ts +8 -1
  351. package/lib/types/src/api/device-action/os/ListAppsWithMetadata/types.d.ts.map +1 -1
  352. package/lib/types/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.d.ts.map +1 -1
  353. package/lib/types/src/api/device-action/os/OpenAppDeviceAction/types.d.ts +12 -2
  354. package/lib/types/src/api/device-action/os/OpenAppDeviceAction/types.d.ts.map +1 -1
  355. package/lib/types/src/api/device-action/os/OpenAppWithDependencies/OpenAppWithDependenciesDeviceAction.d.ts.map +1 -1
  356. package/lib/types/src/api/device-action/os/OpenAppWithDependencies/types.d.ts +8 -0
  357. package/lib/types/src/api/device-action/os/OpenAppWithDependencies/types.d.ts.map +1 -1
  358. package/lib/types/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.d.ts.map +1 -1
  359. package/lib/types/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceActionTypes.d.ts +9 -1
  360. package/lib/types/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceActionTypes.d.ts.map +1 -1
  361. package/lib/types/src/api/device-action/task/BackupAppStorageTask.d.ts +23 -0
  362. package/lib/types/src/api/device-action/task/BackupAppStorageTask.d.ts.map +1 -0
  363. package/lib/types/src/api/device-action/task/BackupAppStorageTask.test.d.ts +2 -0
  364. package/lib/types/src/api/device-action/task/BackupAppStorageTask.test.d.ts.map +1 -0
  365. package/lib/types/src/api/device-action/task/Errors.d.ts +12 -0
  366. package/lib/types/src/api/device-action/task/Errors.d.ts.map +1 -0
  367. package/lib/types/src/api/device-action/task/GetApplicationsMetadataTask.d.ts +5 -3
  368. package/lib/types/src/api/device-action/task/GetApplicationsMetadataTask.d.ts.map +1 -1
  369. package/lib/types/src/api/device-action/task/GetFirmwareMetadataTask.d.ts +7 -3
  370. package/lib/types/src/api/device-action/task/GetFirmwareMetadataTask.d.ts.map +1 -1
  371. package/lib/types/src/api/device-action/xstate-utils/XStateDeviceAction.d.ts.map +1 -1
  372. package/lib/types/src/api/index.d.ts +13 -2
  373. package/lib/types/src/api/index.d.ts.map +1 -1
  374. package/lib/types/src/api/model/DmkResult.d.ts +24 -0
  375. package/lib/types/src/api/model/DmkResult.d.ts.map +1 -0
  376. package/lib/types/src/api/model/DmkResult.test.d.ts +2 -0
  377. package/lib/types/src/api/model/DmkResult.test.d.ts.map +1 -0
  378. package/lib/types/src/api/network/DmkNetworkClient.d.ts +97 -0
  379. package/lib/types/src/api/network/DmkNetworkClient.d.ts.map +1 -0
  380. package/lib/types/src/api/network/DmkNetworkClient.test.d.ts +2 -0
  381. package/lib/types/src/api/network/DmkNetworkClient.test.d.ts.map +1 -0
  382. package/lib/types/src/api/network/DmkNetworkClientError.d.ts +33 -0
  383. package/lib/types/src/api/network/DmkNetworkClientError.d.ts.map +1 -0
  384. package/lib/types/src/api/network/DmkNetworkClientHelpers.d.ts +73 -0
  385. package/lib/types/src/api/network/DmkNetworkClientHelpers.d.ts.map +1 -0
  386. package/lib/types/src/api/network/DmkNetworkClientHelpers.test.d.ts +2 -0
  387. package/lib/types/src/api/network/DmkNetworkClientHelpers.test.d.ts.map +1 -0
  388. package/lib/types/src/api/storage/KeyValueStorage.d.ts +7 -0
  389. package/lib/types/src/api/storage/KeyValueStorage.d.ts.map +1 -0
  390. package/lib/types/src/api/types.d.ts +2 -0
  391. package/lib/types/src/api/types.d.ts.map +1 -1
  392. package/lib/types/src/api/utils/ApplicationChecker.d.ts +14 -0
  393. package/lib/types/src/api/utils/ApplicationChecker.d.ts.map +1 -0
  394. package/lib/types/src/api/utils/ApplicationChecker.test.d.ts +2 -0
  395. package/lib/types/src/api/utils/ApplicationChecker.test.d.ts.map +1 -0
  396. package/lib/types/src/api/utils/ApplicationResolver.d.ts +12 -0
  397. package/lib/types/src/api/utils/ApplicationResolver.d.ts.map +1 -0
  398. package/lib/types/src/api/utils/Base64String.d.ts +1 -0
  399. package/lib/types/src/api/utils/Base64String.d.ts.map +1 -1
  400. package/lib/types/src/internal/manager-api/data/{AxiosManagerApiDataSource.d.ts → HttpManagerApiDataSource.d.ts} +3 -3
  401. package/lib/types/src/internal/manager-api/data/HttpManagerApiDataSource.d.ts.map +1 -0
  402. package/lib/types/src/internal/manager-api/data/HttpManagerApiDataSource.test.d.ts +2 -0
  403. package/lib/types/src/internal/manager-api/data/HttpManagerApiDataSource.test.d.ts.map +1 -0
  404. package/lib/types/src/internal/manager-api/data/__mocks__/{AxiosManagerApiDataSource.d.ts → HttpManagerApiDataSource.d.ts} +2 -2
  405. package/lib/types/src/internal/manager-api/data/__mocks__/HttpManagerApiDataSource.d.ts.map +1 -0
  406. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  407. package/package.json +2 -3
  408. package/lib/cjs/src/internal/manager-api/data/AxiosManagerApiDataSource.js +0 -2
  409. package/lib/cjs/src/internal/manager-api/data/AxiosManagerApiDataSource.js.map +0 -7
  410. package/lib/cjs/src/internal/manager-api/data/AxiosManagerApiDataSource.test.js +0 -2
  411. package/lib/cjs/src/internal/manager-api/data/AxiosManagerApiDataSource.test.js.map +0 -7
  412. package/lib/cjs/src/internal/manager-api/data/__mocks__/AxiosManagerApiDataSource.js +0 -2
  413. package/lib/cjs/src/internal/manager-api/data/__mocks__/AxiosManagerApiDataSource.js.map +0 -7
  414. package/lib/esm/src/internal/manager-api/data/AxiosManagerApiDataSource.js +0 -2
  415. package/lib/esm/src/internal/manager-api/data/AxiosManagerApiDataSource.js.map +0 -7
  416. package/lib/esm/src/internal/manager-api/data/AxiosManagerApiDataSource.test.js +0 -2
  417. package/lib/esm/src/internal/manager-api/data/AxiosManagerApiDataSource.test.js.map +0 -7
  418. package/lib/esm/src/internal/manager-api/data/__mocks__/AxiosManagerApiDataSource.js.map +0 -7
  419. package/lib/types/src/internal/manager-api/data/AxiosManagerApiDataSource.d.ts.map +0 -1
  420. package/lib/types/src/internal/manager-api/data/AxiosManagerApiDataSource.test.d.ts +0 -2
  421. package/lib/types/src/internal/manager-api/data/AxiosManagerApiDataSource.test.d.ts.map +0 -1
  422. package/lib/types/src/internal/manager-api/data/__mocks__/AxiosManagerApiDataSource.d.ts.map +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/manager-api/service/DefaultManagerApiService.test.ts"],
4
- "sourcesContent": ["import { Left, Right } from \"purify-ts\";\nimport { type Mocked } from \"vitest\";\n\nimport { getOsVersionCommandResponseMockBuilder } from \"@api/command/os/__mocks__/GetOsVersionCommand\";\nimport { DeviceModelId } from \"@api/device/DeviceModel\";\nimport {\n BTC_APP,\n BTC_APP_METADATA,\n ETH_APP,\n ETH_APP_METADATA,\n} from \"@api/device-action/__test-utils__/data\";\nimport { type DmkConfig } from \"@api/DmkConfig\";\nimport { AxiosManagerApiDataSource } from \"@internal/manager-api/data/AxiosManagerApiDataSource\";\nimport { HttpFetchApiError } from \"@internal/manager-api/model/Errors\";\nimport {\n type FinalFirmware,\n type OsuFirmware,\n} from \"@internal/manager-api/model/Firmware\";\n\nimport { DefaultManagerApiService } from \"./DefaultManagerApiService\";\nimport { type ManagerApiService } from \"./ManagerApiService\";\n\nvi.mock(\"@internal/manager-api/data/AxiosManagerApiDataSource\");\nlet dataSource: Mocked<AxiosManagerApiDataSource>;\nlet service: ManagerApiService;\ndescribe(\"ManagerApiService\", () => {\n beforeEach(() => {\n dataSource = new AxiosManagerApiDataSource(\n {} as DmkConfig,\n ) as Mocked<AxiosManagerApiDataSource>;\n service = new DefaultManagerApiService(dataSource);\n });\n\n describe(\"getAppList\", () => {\n it(\"should call api with the correct parameters\", () => {\n // given\n const deviceInfo = getOsVersionCommandResponseMockBuilder(\n DeviceModelId.STAX,\n );\n // when\n service.getAppList(deviceInfo);\n // then\n expect(dataSource.getAppList).toHaveBeenCalledWith({\n targetId: \"857735172\",\n firmwareVersionName: \"1.3.0\",\n });\n });\n });\n\n describe(\"getAppsByHash\", () => {\n describe(\"success cases\", () => {\n it(\"with no apps, should return an empty list\", async () => {\n dataSource.getAppsByHash.mockResolvedValue(Right([]));\n expect(await service.getAppsByHash([])).toEqual(Right([]));\n });\n\n it(\"with one app, should return the metadata\", async () => {\n dataSource.getAppsByHash.mockResolvedValue(Right([BTC_APP_METADATA]));\n expect(await service.getAppsByHash([BTC_APP.appFullHash])).toEqual(\n Right([BTC_APP_METADATA]),\n );\n });\n\n it(\"with two app, should return the metadata of both apps\", async () => {\n dataSource.getAppsByHash.mockResolvedValue(\n Right([BTC_APP_METADATA, ETH_APP_METADATA]),\n );\n expect(\n await service.getAppsByHash(\n [BTC_APP, ETH_APP].map((app) => app.appFullHash),\n ),\n ).toEqual(Right([BTC_APP_METADATA, ETH_APP_METADATA]));\n });\n\n it(\"with one app and one without `appFullHash`, should return the metadata of the correct app\", async () => {\n dataSource.getAppsByHash.mockResolvedValue(Right([BTC_APP_METADATA]));\n const APP_WITH_NO_HASH = { ...ETH_APP, appFullHash: \"\" };\n expect(\n await service.getAppsByHash(\n [BTC_APP, APP_WITH_NO_HASH].map((app) => app.appFullHash),\n ),\n ).toEqual(Right([BTC_APP_METADATA]));\n });\n });\n\n describe(\"error cases\", () => {\n it(\"should return an error when the data source fails with a known error\", async () => {\n const error = new HttpFetchApiError(new Error(\"Failed to fetch data\"));\n dataSource.getAppsByHash.mockRejectedValue(error);\n expect(await service.getAppsByHash([BTC_APP.appFullHash])).toEqual(\n Left(error),\n );\n });\n\n it(\"should return an error when the data source fails with an unknown error\", async () => {\n const error = new Error(\"unkown error\");\n dataSource.getAppsByHash.mockRejectedValue(error);\n expect(await service.getAppsByHash([BTC_APP.appFullHash])).toEqual(\n Left(new HttpFetchApiError(error)),\n );\n });\n });\n });\n\n describe(\"getDeviceVersion\", () => {\n it(\"should call api with the correct parameters\", () => {\n // given\n const deviceInfo = getOsVersionCommandResponseMockBuilder(\n DeviceModelId.STAX,\n );\n // when\n service.getDeviceVersion(deviceInfo);\n // then\n expect(dataSource.getDeviceVersion).toHaveBeenCalledWith({\n targetId: \"857735172\",\n });\n });\n });\n\n describe(\"getFirmwareVersion\", () => {\n it(\"should call api with the correct parameters\", () => {\n // given\n const mockGetDeviceVersion = {\n id: 17,\n target_id: \"857735172\",\n };\n const deviceInfo = getOsVersionCommandResponseMockBuilder(\n DeviceModelId.STAX,\n );\n // when\n service.getFirmwareVersion(deviceInfo, mockGetDeviceVersion);\n // then\n expect(dataSource.getFirmwareVersion).toHaveBeenCalledWith({\n deviceId: 17,\n version: \"1.3.0\",\n });\n });\n });\n\n describe(\"getOsuFirmwareVersion\", () => {\n it(\"should call api with the correct parameters\", () => {\n // given\n const mockGetDeviceVersion = {\n id: 17,\n target_id: \"857735172\",\n };\n const deviceInfo = getOsVersionCommandResponseMockBuilder(\n DeviceModelId.STAX,\n );\n // when\n service.getOsuFirmwareVersion(deviceInfo, mockGetDeviceVersion);\n // then\n expect(dataSource.getOsuFirmwareVersion).toHaveBeenCalledWith({\n deviceId: 17,\n version: \"1.3.0\",\n });\n });\n });\n\n describe(\"getLatestFirmwareVersion\", () => {\n it(\"should call api with the correct parameters\", () => {\n // given\n const deviceVersion = {\n id: 17,\n target_id: \"857735172\",\n };\n const currentFirmware = {\n id: 159,\n } as FinalFirmware;\n // when\n service.getLatestFirmwareVersion(currentFirmware, deviceVersion);\n // then\n expect(dataSource.getLatestFirmwareVersion).toHaveBeenCalledWith({\n currentFinalFirmwareId: 159,\n deviceId: 17,\n });\n });\n });\n\n describe(\"getNextFirmwareVersion\", () => {\n it(\"should call api with the correct parameters\", () => {\n // given\n const osuFirmware = {\n nextFinalFirmware: 159,\n } as OsuFirmware;\n // when\n service.getNextFirmwareVersion(osuFirmware);\n // then\n expect(dataSource.getFirmwareVersionById).toHaveBeenCalledWith(159);\n });\n });\n\n describe(\"getLanguagePackages\", () => {\n it(\"should call api with the correct parameters\", () => {\n // given\n const deviceVersion = {\n id: 17,\n target_id: \"857735172\",\n };\n const currentFirmware = {\n id: 159,\n } as FinalFirmware;\n // when\n service.getLanguagePackages(deviceVersion, currentFirmware);\n // then\n expect(dataSource.getLanguagePackages).toHaveBeenCalledWith({\n deviceId: 17,\n currentFinalFirmwareId: 159,\n });\n });\n });\n\n describe(\"getMcuList\", () => {\n it(\"should call api with the correct parameters\", () => {\n // when\n service.getMcuList();\n // then\n expect(dataSource.getMcuList).toHaveBeenCalled();\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_purify_ts", "import_GetOsVersionCommand", "import_DeviceModel", "import_data", "import_AxiosManagerApiDataSource", "import_Errors", "import_DefaultManagerApiService", "dataSource", "service", "deviceInfo", "app", "APP_WITH_NO_HASH", "error", "mockGetDeviceVersion", "deviceVersion", "currentFirmware", "osuFirmware"]
4
+ "sourcesContent": ["import { Left, Right } from \"purify-ts\";\nimport { type Mocked } from \"vitest\";\n\nimport { getOsVersionCommandResponseMockBuilder } from \"@api/command/os/__mocks__/GetOsVersionCommand\";\nimport { DeviceModelId } from \"@api/device/DeviceModel\";\nimport {\n BTC_APP,\n BTC_APP_METADATA,\n ETH_APP,\n ETH_APP_METADATA,\n} from \"@api/device-action/__test-utils__/data\";\nimport { type DmkConfig } from \"@api/DmkConfig\";\nimport { HttpManagerApiDataSource } from \"@internal/manager-api/data/HttpManagerApiDataSource\";\nimport { HttpFetchApiError } from \"@internal/manager-api/model/Errors\";\nimport {\n type FinalFirmware,\n type OsuFirmware,\n} from \"@internal/manager-api/model/Firmware\";\n\nimport { DefaultManagerApiService } from \"./DefaultManagerApiService\";\nimport { type ManagerApiService } from \"./ManagerApiService\";\n\nvi.mock(\"@internal/manager-api/data/HttpManagerApiDataSource\");\nlet dataSource: Mocked<HttpManagerApiDataSource>;\nlet service: ManagerApiService;\ndescribe(\"ManagerApiService\", () => {\n beforeEach(() => {\n dataSource = new HttpManagerApiDataSource(\n {} as DmkConfig,\n ) as Mocked<HttpManagerApiDataSource>;\n service = new DefaultManagerApiService(dataSource);\n });\n\n describe(\"getAppList\", () => {\n it(\"should call api with the correct parameters\", () => {\n // given\n const deviceInfo = getOsVersionCommandResponseMockBuilder(\n DeviceModelId.STAX,\n );\n // when\n service.getAppList(deviceInfo);\n // then\n expect(dataSource.getAppList).toHaveBeenCalledWith({\n targetId: \"857735172\",\n firmwareVersionName: \"1.3.0\",\n });\n });\n });\n\n describe(\"getAppsByHash\", () => {\n describe(\"success cases\", () => {\n it(\"with no apps, should return an empty list\", async () => {\n dataSource.getAppsByHash.mockResolvedValue(Right([]));\n expect(await service.getAppsByHash([])).toEqual(Right([]));\n });\n\n it(\"with one app, should return the metadata\", async () => {\n dataSource.getAppsByHash.mockResolvedValue(Right([BTC_APP_METADATA]));\n expect(await service.getAppsByHash([BTC_APP.appFullHash])).toEqual(\n Right([BTC_APP_METADATA]),\n );\n });\n\n it(\"with two app, should return the metadata of both apps\", async () => {\n dataSource.getAppsByHash.mockResolvedValue(\n Right([BTC_APP_METADATA, ETH_APP_METADATA]),\n );\n expect(\n await service.getAppsByHash(\n [BTC_APP, ETH_APP].map((app) => app.appFullHash),\n ),\n ).toEqual(Right([BTC_APP_METADATA, ETH_APP_METADATA]));\n });\n\n it(\"with one app and one without `appFullHash`, should return the metadata of the correct app\", async () => {\n dataSource.getAppsByHash.mockResolvedValue(Right([BTC_APP_METADATA]));\n const APP_WITH_NO_HASH = { ...ETH_APP, appFullHash: \"\" };\n expect(\n await service.getAppsByHash(\n [BTC_APP, APP_WITH_NO_HASH].map((app) => app.appFullHash),\n ),\n ).toEqual(Right([BTC_APP_METADATA]));\n });\n });\n\n describe(\"error cases\", () => {\n it(\"should return an error when the data source fails with a known error\", async () => {\n const error = new HttpFetchApiError(new Error(\"Failed to fetch data\"));\n dataSource.getAppsByHash.mockRejectedValue(error);\n expect(await service.getAppsByHash([BTC_APP.appFullHash])).toEqual(\n Left(error),\n );\n });\n\n it(\"should return an error when the data source fails with an unknown error\", async () => {\n const error = new Error(\"unkown error\");\n dataSource.getAppsByHash.mockRejectedValue(error);\n expect(await service.getAppsByHash([BTC_APP.appFullHash])).toEqual(\n Left(new HttpFetchApiError(error)),\n );\n });\n });\n });\n\n describe(\"getDeviceVersion\", () => {\n it(\"should call api with the correct parameters\", () => {\n // given\n const deviceInfo = getOsVersionCommandResponseMockBuilder(\n DeviceModelId.STAX,\n );\n // when\n service.getDeviceVersion(deviceInfo);\n // then\n expect(dataSource.getDeviceVersion).toHaveBeenCalledWith({\n targetId: \"857735172\",\n });\n });\n });\n\n describe(\"getFirmwareVersion\", () => {\n it(\"should call api with the correct parameters\", () => {\n // given\n const mockGetDeviceVersion = {\n id: 17,\n target_id: \"857735172\",\n };\n const deviceInfo = getOsVersionCommandResponseMockBuilder(\n DeviceModelId.STAX,\n );\n // when\n service.getFirmwareVersion(deviceInfo, mockGetDeviceVersion);\n // then\n expect(dataSource.getFirmwareVersion).toHaveBeenCalledWith({\n deviceId: 17,\n version: \"1.3.0\",\n });\n });\n });\n\n describe(\"getOsuFirmwareVersion\", () => {\n it(\"should call api with the correct parameters\", () => {\n // given\n const mockGetDeviceVersion = {\n id: 17,\n target_id: \"857735172\",\n };\n const deviceInfo = getOsVersionCommandResponseMockBuilder(\n DeviceModelId.STAX,\n );\n // when\n service.getOsuFirmwareVersion(deviceInfo, mockGetDeviceVersion);\n // then\n expect(dataSource.getOsuFirmwareVersion).toHaveBeenCalledWith({\n deviceId: 17,\n version: \"1.3.0\",\n });\n });\n });\n\n describe(\"getLatestFirmwareVersion\", () => {\n it(\"should call api with the correct parameters\", () => {\n // given\n const deviceVersion = {\n id: 17,\n target_id: \"857735172\",\n };\n const currentFirmware = {\n id: 159,\n } as FinalFirmware;\n // when\n service.getLatestFirmwareVersion(currentFirmware, deviceVersion);\n // then\n expect(dataSource.getLatestFirmwareVersion).toHaveBeenCalledWith({\n currentFinalFirmwareId: 159,\n deviceId: 17,\n });\n });\n });\n\n describe(\"getNextFirmwareVersion\", () => {\n it(\"should call api with the correct parameters\", () => {\n // given\n const osuFirmware = {\n nextFinalFirmware: 159,\n } as OsuFirmware;\n // when\n service.getNextFirmwareVersion(osuFirmware);\n // then\n expect(dataSource.getFirmwareVersionById).toHaveBeenCalledWith(159);\n });\n });\n\n describe(\"getLanguagePackages\", () => {\n it(\"should call api with the correct parameters\", () => {\n // given\n const deviceVersion = {\n id: 17,\n target_id: \"857735172\",\n };\n const currentFirmware = {\n id: 159,\n } as FinalFirmware;\n // when\n service.getLanguagePackages(deviceVersion, currentFirmware);\n // then\n expect(dataSource.getLanguagePackages).toHaveBeenCalledWith({\n deviceId: 17,\n currentFinalFirmwareId: 159,\n });\n });\n });\n\n describe(\"getMcuList\", () => {\n it(\"should call api with the correct parameters\", () => {\n // when\n service.getMcuList();\n // then\n expect(dataSource.getMcuList).toHaveBeenCalled();\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_purify_ts", "import_GetOsVersionCommand", "import_DeviceModel", "import_data", "import_HttpManagerApiDataSource", "import_Errors", "import_DefaultManagerApiService", "dataSource", "service", "deviceInfo", "app", "APP_WITH_NO_HASH", "error", "mockGetDeviceVersion", "deviceVersion", "currentFirmware", "osuFirmware"]
7
7
  }
@@ -2,7 +2,6 @@
2
2
  "dependencies": {
3
3
  "@noble/hashes": "^1.8.0",
4
4
  "@sentry/minimal": "catalog:",
5
- "axios": "catalog:",
6
5
  "inversify": "catalog:",
7
6
  "isomorphic-ws": "catalog:",
8
7
  "purify-ts": "catalog:",
@@ -64,5 +63,5 @@
64
63
  "watch:builds": "pnpm ldmk-tool watch --entryPoints index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
65
64
  "watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
66
65
  },
67
- "version": "1.1.0"
66
+ "version": "1.3.0"
68
67
  }
@@ -1,2 +1,2 @@
1
- import{Apdu as i}from"../../apdu/model/Apdu";import{ByteArrayBuilder as n}from"./ByteArrayBuilder";const p=5,r=255,l=r+5;class A{_ins;_cla;_p1;p2;data=new n(r);constructor({ins:t,cla:a,p1:e,p2:d}){this._cla=a&255,this._ins=t&255,this._p1=e&255,this.p2=d&255}build=()=>new i(this._cla,this._ins,this._p1,this.p2,this.data.build());add8BitUIntToData=t=>(this.data.add8BitUIntToData(t),this);add16BitUIntToData=t=>(this.data.add16BitUIntToData(t),this);add32BitUIntToData=t=>(this.data.add32BitUIntToData(t),this);addBufferToData=t=>(this.data.addBufferToData(t),this);addHexaStringToData=t=>(this.data.addHexaStringToData(t),this);addAsciiStringToData=t=>(this.data.addAsciiStringToData(t),this);encodeInLVFromHexa=t=>(this.data.encodeInLVFromHexa(t),this);encodeInLVFromBuffer=t=>(this.data.encodeInLVFromBuffer(t),this);encodeInLVFromAscii=t=>(this.data.encodeInLVFromAscii(t),this);getAvailablePayloadLength=()=>this.data.getAvailablePayloadLength();getErrors=()=>this.data.getErrors()}export{r as APDU_MAX_PAYLOAD,l as APDU_MAX_SIZE,A as ApduBuilder,p as HEADER_LENGTH};
1
+ import{Apdu as i}from"../../apdu/model/Apdu";import{ByteArrayBuilder as n}from"./ByteArrayBuilder";const p=5,a=255,l=a+5;class A{_ins;_cla;_p1;p2;data=new n(a);constructor({ins:t,cla:r,p1:e,p2:d}){this._cla=r&255,this._ins=t&255,this._p1=e&255,this.p2=d&255}build=()=>new i(this._cla,this._ins,this._p1,this.p2,this.data.build());add8BitUIntToData=t=>(this.data.add8BitUIntToData(t),this);add16BitUIntToData=t=>(this.data.add16BitUIntToData(t),this);add32BitUIntToData=t=>(this.data.add32BitUIntToData(t),this);add64BitUIntToData=(t,r=!0)=>(this.data.add64BitUIntToData(t,r),this);addBufferToData=t=>(this.data.addBufferToData(t),this);addHexaStringToData=t=>(this.data.addHexaStringToData(t),this);addAsciiStringToData=t=>(this.data.addAsciiStringToData(t),this);encodeInLVFromHexa=t=>(this.data.encodeInLVFromHexa(t),this);encodeInLVFromBuffer=t=>(this.data.encodeInLVFromBuffer(t),this);encodeInLVFromAscii=t=>(this.data.encodeInLVFromAscii(t),this);getAvailablePayloadLength=()=>this.data.getAvailablePayloadLength();getErrors=()=>this.data.getErrors()}export{a as APDU_MAX_PAYLOAD,l as APDU_MAX_SIZE,A as ApduBuilder,p as HEADER_LENGTH};
2
2
  //# sourceMappingURL=ApduBuilder.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/api/apdu/utils/ApduBuilder.ts"],
4
- "sourcesContent": ["import { Apdu } from \"@api/apdu/model/Apdu\";\n\nimport { type AppBuilderError } from \"./AppBuilderError\";\nimport { ByteArrayBuilder } from \"./ByteArrayBuilder\";\n\nexport const HEADER_LENGTH = 5;\nexport const APDU_MAX_PAYLOAD = 255;\nexport const APDU_MAX_SIZE = APDU_MAX_PAYLOAD + 5;\n\nexport type ApduBuilderArgs = {\n readonly ins: number;\n readonly cla: number;\n readonly p1: number;\n readonly p2: number;\n};\n\n/**\n * ApduBuilder is a utility class to help build APDU commands.\n * It allows to easily add data to the data field of the APDU command\n * and to encode this data in different formats.\n *\n * @example\n * ```\n * const apduBuilder = new ApduBuilder({ ins: 0x01, cla: 0x02, p1: 0x03, p2: 0x04 })\n * .add8BitUIntToData(0x05)\n * .add16BitUIntToData(0x0607)\n * .addHexaStringToData(\"0x0809\")\n * .addAsciiStringToData(\"hello\")\n *\n * const apdu = apduBuilder.build();\n * const builderErrors = apduBuilder.getErrors();\n * ```\n */\nexport class ApduBuilder {\n private readonly _ins: number;\n private readonly _cla: number;\n private readonly _p1: number;\n private readonly p2: number;\n private data: ByteArrayBuilder = new ByteArrayBuilder(APDU_MAX_PAYLOAD);\n\n constructor({ ins, cla, p1, p2 }: ApduBuilderArgs) {\n this._cla = cla & 0xff;\n this._ins = ins & 0xff;\n this._p1 = p1 & 0xff;\n this.p2 = p2 & 0xff;\n }\n\n // ==========\n // Public API\n // ==========\n\n /**\n * Build a new Apdu instance with the current state of the builder\n * @returns {Apdu} - Returns a new Apdu instance\n */\n build = (): Apdu =>\n new Apdu(this._cla, this._ins, this._p1, this.p2, this.data.build());\n\n /**\n * Add a 8-bit unsigned integer to the data field (max value 0xff = 255)\n * @param value?: number - The value to add to the data\n * @returns {ApduBuilder} - Returns the current instance of ApduBuilder\n */\n add8BitUIntToData = (value: number): ApduBuilder => {\n this.data.add8BitUIntToData(value);\n return this;\n };\n\n /**\n * Add a 16-bit unsigned integer to the data field (max value 0xffff = 65535)\n * @param value: number - The value to add to the data\n * @returns {ApduBuilder} - Returns the current instance of ApduBuilder\n */\n add16BitUIntToData = (value: number): ApduBuilder => {\n this.data.add16BitUIntToData(value);\n return this;\n };\n\n /**\n * Add a 32-bit unsigned integer to the data field (max value 0xffffffff = 4294967295)\n * @param value: number - The value to add to the data\n * @returns {ApduBuilder} - Returns the current instance of ApduBuilder\n */\n add32BitUIntToData = (value: number): ApduBuilder => {\n this.data.add32BitUIntToData(value);\n return this;\n };\n\n /**\n * Add a Uint8Array to the data field if it has enough remaining space\n * @param value: Uint8Array - The value to add to the data\n * @returns {ApduBuilder} - Returns the current instance of ApduBuilder\n */\n addBufferToData = (value: Uint8Array): ApduBuilder => {\n this.data.addBufferToData(value);\n return this;\n };\n\n /**\n * Add a string to the data field if it has enough remaining space\n * and it can be formatted as a hexadecimal string\n * @param value: string - The value to add to the data\n * @returns {ApduBuilder} - Returns the current instance of ApduBuilder\n */\n addHexaStringToData = (value: string): ApduBuilder => {\n this.data.addHexaStringToData(value);\n return this;\n };\n\n /**\n * Add an ascii string to the data field if it has enough remaining space\n * @param value: string - The value to add to the data\n * @returns {ApduBuilder} - Returns the current instance of ApduBuilder\n */\n addAsciiStringToData = (value: string): ApduBuilder => {\n this.data.addAsciiStringToData(value);\n return this;\n };\n\n /**\n * Add a Length-Value encoded hexadecimal string to the data field if it has enough remaining space\n * Length-Value encoding is a way to encode data in a binary format with the first byte\n * being the length of the data and the following bytes being the data itself\n * @param value: string - The value to add to the data\n * @returns {ApduBuilder} - Returns the current instance of ApduBuilder\n */\n encodeInLVFromHexa = (value: string): ApduBuilder => {\n this.data.encodeInLVFromHexa(value);\n return this;\n };\n\n /**\n * Add a Length-Value encoded buffer to the data field if it has enough remaining space\n * Length-Value encoding is a way to encode data in a binary format with the first byte\n * being the length of the data and the following bytes being the data itself\n * @param value: Uint8Array - The value to add to the data\n * @returns {ApduBuilder} - Returns the current instance of ApduBuilder\n */\n encodeInLVFromBuffer = (value: Uint8Array): ApduBuilder => {\n this.data.encodeInLVFromBuffer(value);\n return this;\n };\n\n /**\n * Add a Length-Value encoded ascii string to the data field if it has enough remaining space\n * Length-Value encoding is a way to encode data in a binary format with the first byte\n * being the length of the data and the following bytes being the data itself\n * @param value: string - The value to add to the data\n * @returns {ApduBuilder} - Returns the current instance of ApduBuilder\n */\n encodeInLVFromAscii = (value: string): ApduBuilder => {\n this.data.encodeInLVFromAscii(value);\n return this;\n };\n\n /**\n * Returns the remaining payload length\n * @returns {number}\n */\n getAvailablePayloadLength = (): number =>\n this.data.getAvailablePayloadLength();\n\n /**\n * Returns the current errors\n * @returns {AppBuilderError[]} - Returns an array of errors\n */\n getErrors = (): AppBuilderError[] => this.data.getErrors();\n}\n"],
5
- "mappings": "AAAA,OAAS,QAAAA,MAAY,uBAGrB,OAAS,oBAAAC,MAAwB,qBAE1B,MAAMC,EAAgB,EAChBC,EAAmB,IACnBC,EAAgBD,EAAmB,EA0BzC,MAAME,CAAY,CACN,KACA,KACA,IACA,GACT,KAAyB,IAAIJ,EAAiBE,CAAgB,EAEtE,YAAY,CAAE,IAAAG,EAAK,IAAAC,EAAK,GAAAC,EAAI,GAAAC,CAAG,EAAoB,CACjD,KAAK,KAAOF,EAAM,IAClB,KAAK,KAAOD,EAAM,IAClB,KAAK,IAAME,EAAK,IAChB,KAAK,GAAKC,EAAK,GACjB,CAUA,MAAQ,IACN,IAAIT,EAAK,KAAK,KAAM,KAAK,KAAM,KAAK,IAAK,KAAK,GAAI,KAAK,KAAK,MAAM,CAAC,EAOrE,kBAAqBU,IACnB,KAAK,KAAK,kBAAkBA,CAAK,EAC1B,MAQT,mBAAsBA,IACpB,KAAK,KAAK,mBAAmBA,CAAK,EAC3B,MAQT,mBAAsBA,IACpB,KAAK,KAAK,mBAAmBA,CAAK,EAC3B,MAQT,gBAAmBA,IACjB,KAAK,KAAK,gBAAgBA,CAAK,EACxB,MAST,oBAAuBA,IACrB,KAAK,KAAK,oBAAoBA,CAAK,EAC5B,MAQT,qBAAwBA,IACtB,KAAK,KAAK,qBAAqBA,CAAK,EAC7B,MAUT,mBAAsBA,IACpB,KAAK,KAAK,mBAAmBA,CAAK,EAC3B,MAUT,qBAAwBA,IACtB,KAAK,KAAK,qBAAqBA,CAAK,EAC7B,MAUT,oBAAuBA,IACrB,KAAK,KAAK,oBAAoBA,CAAK,EAC5B,MAOT,0BAA4B,IAC1B,KAAK,KAAK,0BAA0B,EAMtC,UAAY,IAAyB,KAAK,KAAK,UAAU,CAC3D",
6
- "names": ["Apdu", "ByteArrayBuilder", "HEADER_LENGTH", "APDU_MAX_PAYLOAD", "APDU_MAX_SIZE", "ApduBuilder", "ins", "cla", "p1", "p2", "value"]
4
+ "sourcesContent": ["import { Apdu } from \"@api/apdu/model/Apdu\";\n\nimport { type AppBuilderError } from \"./AppBuilderError\";\nimport { ByteArrayBuilder } from \"./ByteArrayBuilder\";\n\nexport const HEADER_LENGTH = 5;\nexport const APDU_MAX_PAYLOAD = 255;\nexport const APDU_MAX_SIZE = APDU_MAX_PAYLOAD + 5;\n\nexport type ApduBuilderArgs = {\n readonly ins: number;\n readonly cla: number;\n readonly p1: number;\n readonly p2: number;\n};\n\n/**\n * ApduBuilder is a utility class to help build APDU commands.\n * It allows to easily add data to the data field of the APDU command\n * and to encode this data in different formats.\n *\n * @example\n * ```\n * const apduBuilder = new ApduBuilder({ ins: 0x01, cla: 0x02, p1: 0x03, p2: 0x04 })\n * .add8BitUIntToData(0x05)\n * .add16BitUIntToData(0x0607)\n * .addHexaStringToData(\"0x0809\")\n * .addAsciiStringToData(\"hello\")\n *\n * const apdu = apduBuilder.build();\n * const builderErrors = apduBuilder.getErrors();\n * ```\n */\nexport class ApduBuilder {\n private readonly _ins: number;\n private readonly _cla: number;\n private readonly _p1: number;\n private readonly p2: number;\n private data: ByteArrayBuilder = new ByteArrayBuilder(APDU_MAX_PAYLOAD);\n\n constructor({ ins, cla, p1, p2 }: ApduBuilderArgs) {\n this._cla = cla & 0xff;\n this._ins = ins & 0xff;\n this._p1 = p1 & 0xff;\n this.p2 = p2 & 0xff;\n }\n\n // ==========\n // Public API\n // ==========\n\n /**\n * Build a new Apdu instance with the current state of the builder\n * @returns {Apdu} - Returns a new Apdu instance\n */\n build = (): Apdu =>\n new Apdu(this._cla, this._ins, this._p1, this.p2, this.data.build());\n\n /**\n * Add a 8-bit unsigned integer to the data field (max value 0xff = 255)\n * @param value?: number - The value to add to the data\n * @returns {ApduBuilder} - Returns the current instance of ApduBuilder\n */\n add8BitUIntToData = (value: number): ApduBuilder => {\n this.data.add8BitUIntToData(value);\n return this;\n };\n\n /**\n * Add a 16-bit unsigned integer to the data field (max value 0xffff = 65535)\n * @param value: number - The value to add to the data\n * @returns {ApduBuilder} - Returns the current instance of ApduBuilder\n */\n add16BitUIntToData = (value: number): ApduBuilder => {\n this.data.add16BitUIntToData(value);\n return this;\n };\n\n /**\n * Add a 32-bit unsigned integer to the data field (max value 0xffffffff = 4294967295)\n * @param value: number - The value to add to the data\n * @returns {ApduBuilder} - Returns the current instance of ApduBuilder\n */\n add32BitUIntToData = (value: number): ApduBuilder => {\n this.data.add32BitUIntToData(value);\n return this;\n };\n\n /**\n * Add a 64-bit unsigned integer to the data field in big-endian (max value 0xffffffffffffffff)\n * @param value: number | bigint - The value to add to the data\n * @param bigEndian: boolean - True for big-endian (default), false for little-endian\n * @returns {ApduBuilder} - Returns the current instance of ApduBuilder\n */\n add64BitUIntToData = (\n value: number | bigint,\n bigEndian: boolean = true,\n ): ApduBuilder => {\n this.data.add64BitUIntToData(value, bigEndian);\n return this;\n };\n\n /**\n * Add a Uint8Array to the data field if it has enough remaining space\n * @param value: Uint8Array - The value to add to the data\n * @returns {ApduBuilder} - Returns the current instance of ApduBuilder\n */\n addBufferToData = (value: Uint8Array): ApduBuilder => {\n this.data.addBufferToData(value);\n return this;\n };\n\n /**\n * Add a string to the data field if it has enough remaining space\n * and it can be formatted as a hexadecimal string\n * @param value: string - The value to add to the data\n * @returns {ApduBuilder} - Returns the current instance of ApduBuilder\n */\n addHexaStringToData = (value: string): ApduBuilder => {\n this.data.addHexaStringToData(value);\n return this;\n };\n\n /**\n * Add an ascii string to the data field if it has enough remaining space\n * @param value: string - The value to add to the data\n * @returns {ApduBuilder} - Returns the current instance of ApduBuilder\n */\n addAsciiStringToData = (value: string): ApduBuilder => {\n this.data.addAsciiStringToData(value);\n return this;\n };\n\n /**\n * Add a Length-Value encoded hexadecimal string to the data field if it has enough remaining space\n * Length-Value encoding is a way to encode data in a binary format with the first byte\n * being the length of the data and the following bytes being the data itself\n * @param value: string - The value to add to the data\n * @returns {ApduBuilder} - Returns the current instance of ApduBuilder\n */\n encodeInLVFromHexa = (value: string): ApduBuilder => {\n this.data.encodeInLVFromHexa(value);\n return this;\n };\n\n /**\n * Add a Length-Value encoded buffer to the data field if it has enough remaining space\n * Length-Value encoding is a way to encode data in a binary format with the first byte\n * being the length of the data and the following bytes being the data itself\n * @param value: Uint8Array - The value to add to the data\n * @returns {ApduBuilder} - Returns the current instance of ApduBuilder\n */\n encodeInLVFromBuffer = (value: Uint8Array): ApduBuilder => {\n this.data.encodeInLVFromBuffer(value);\n return this;\n };\n\n /**\n * Add a Length-Value encoded ascii string to the data field if it has enough remaining space\n * Length-Value encoding is a way to encode data in a binary format with the first byte\n * being the length of the data and the following bytes being the data itself\n * @param value: string - The value to add to the data\n * @returns {ApduBuilder} - Returns the current instance of ApduBuilder\n */\n encodeInLVFromAscii = (value: string): ApduBuilder => {\n this.data.encodeInLVFromAscii(value);\n return this;\n };\n\n /**\n * Returns the remaining payload length\n * @returns {number}\n */\n getAvailablePayloadLength = (): number =>\n this.data.getAvailablePayloadLength();\n\n /**\n * Returns the current errors\n * @returns {AppBuilderError[]} - Returns an array of errors\n */\n getErrors = (): AppBuilderError[] => this.data.getErrors();\n}\n"],
5
+ "mappings": "AAAA,OAAS,QAAAA,MAAY,uBAGrB,OAAS,oBAAAC,MAAwB,qBAE1B,MAAMC,EAAgB,EAChBC,EAAmB,IACnBC,EAAgBD,EAAmB,EA0BzC,MAAME,CAAY,CACN,KACA,KACA,IACA,GACT,KAAyB,IAAIJ,EAAiBE,CAAgB,EAEtE,YAAY,CAAE,IAAAG,EAAK,IAAAC,EAAK,GAAAC,EAAI,GAAAC,CAAG,EAAoB,CACjD,KAAK,KAAOF,EAAM,IAClB,KAAK,KAAOD,EAAM,IAClB,KAAK,IAAME,EAAK,IAChB,KAAK,GAAKC,EAAK,GACjB,CAUA,MAAQ,IACN,IAAIT,EAAK,KAAK,KAAM,KAAK,KAAM,KAAK,IAAK,KAAK,GAAI,KAAK,KAAK,MAAM,CAAC,EAOrE,kBAAqBU,IACnB,KAAK,KAAK,kBAAkBA,CAAK,EAC1B,MAQT,mBAAsBA,IACpB,KAAK,KAAK,mBAAmBA,CAAK,EAC3B,MAQT,mBAAsBA,IACpB,KAAK,KAAK,mBAAmBA,CAAK,EAC3B,MAST,mBAAqB,CACnBA,EACAC,EAAqB,MAErB,KAAK,KAAK,mBAAmBD,EAAOC,CAAS,EACtC,MAQT,gBAAmBD,IACjB,KAAK,KAAK,gBAAgBA,CAAK,EACxB,MAST,oBAAuBA,IACrB,KAAK,KAAK,oBAAoBA,CAAK,EAC5B,MAQT,qBAAwBA,IACtB,KAAK,KAAK,qBAAqBA,CAAK,EAC7B,MAUT,mBAAsBA,IACpB,KAAK,KAAK,mBAAmBA,CAAK,EAC3B,MAUT,qBAAwBA,IACtB,KAAK,KAAK,qBAAqBA,CAAK,EAC7B,MAUT,oBAAuBA,IACrB,KAAK,KAAK,oBAAoBA,CAAK,EAC5B,MAOT,0BAA4B,IAC1B,KAAK,KAAK,0BAA0B,EAMtC,UAAY,IAAyB,KAAK,KAAK,UAAU,CAC3D",
6
+ "names": ["Apdu", "ByteArrayBuilder", "HEADER_LENGTH", "APDU_MAX_PAYLOAD", "APDU_MAX_SIZE", "ApduBuilder", "ins", "cla", "p1", "p2", "value", "bigEndian"]
7
7
  }
@@ -1,2 +1,2 @@
1
- class a{_tag="InvalidStatusWordError";originalError;constructor(r){this.originalError=new Error(r??"Invalid status word.")}}class t{_tag="InvalidBatteryStatusTypeError";originalError;constructor(r){this.originalError=new Error(r??"Invalid battery status type.")}}class n{_tag="InvalidBatteryDataError";originalError;constructor(r){this.originalError=new Error(r??"Invalid battery data.")}}class e{_tag="InvalidBatteryFlagsError";originalError;constructor(r){this.originalError=new Error(r??"Invalid battery flags.")}}class i{_tag="InvalidResponseFormatError";originalError;constructor(r){this.originalError=new Error(r??"Invalid response format.")}}class s{_tag="InvalidGetFirmwareMetadataResponseError";originalError;constructor(r){this.originalError=new Error(r??"Invalid Firmware Metadata response error.")}}export{n as InvalidBatteryDataError,e as InvalidBatteryFlagsError,t as InvalidBatteryStatusTypeError,s as InvalidGetFirmwareMetadataResponseError,i as InvalidResponseFormatError,a as InvalidStatusWordError};
1
+ class n{_tag="InvalidStatusWordError";originalError;constructor(r){this.originalError=new Error(r??"Invalid status word.")}}class t{_tag="InvalidResponseFormatError";originalError;constructor(r){this.originalError=new Error(r??"Invalid response format.")}}export{t as InvalidResponseFormatError,n as InvalidStatusWordError};
2
2
  //# sourceMappingURL=Errors.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/api/command/Errors.ts"],
4
- "sourcesContent": ["import { type DmkError } from \"@api/Error\";\n\nexport class InvalidStatusWordError implements DmkError {\n readonly _tag = \"InvalidStatusWordError\";\n readonly originalError?: Error;\n\n constructor(message?: string) {\n this.originalError = new Error(message ?? \"Invalid status word.\");\n }\n}\n\nexport class InvalidBatteryStatusTypeError implements DmkError {\n readonly _tag = \"InvalidBatteryStatusTypeError\";\n readonly originalError: Error;\n\n constructor(message?: string) {\n this.originalError = new Error(message ?? \"Invalid battery status type.\");\n }\n}\n\nexport class InvalidBatteryDataError implements DmkError {\n readonly _tag = \"InvalidBatteryDataError\";\n readonly originalError: Error;\n\n constructor(message?: string) {\n this.originalError = new Error(message ?? \"Invalid battery data.\");\n }\n}\n\nexport class InvalidBatteryFlagsError implements DmkError {\n readonly _tag = \"InvalidBatteryFlagsError\";\n readonly originalError: Error;\n\n constructor(message?: string) {\n this.originalError = new Error(message ?? \"Invalid battery flags.\");\n }\n}\n\nexport class InvalidResponseFormatError implements DmkError {\n readonly _tag = \"InvalidResponseFormatError\";\n readonly originalError: Error;\n\n constructor(message?: string) {\n this.originalError = new Error(message ?? \"Invalid response format.\");\n }\n}\n\nexport class InvalidGetFirmwareMetadataResponseError implements DmkError {\n readonly _tag = \"InvalidGetFirmwareMetadataResponseError\";\n readonly originalError: Error;\n\n constructor(message?: string) {\n this.originalError = new Error(\n message ?? \"Invalid Firmware Metadata response error.\",\n );\n }\n}\n"],
5
- "mappings": "AAEO,MAAMA,CAA2C,CAC7C,KAAO,yBACP,cAET,YAAYC,EAAkB,CAC5B,KAAK,cAAgB,IAAI,MAAMA,GAAW,sBAAsB,CAClE,CACF,CAEO,MAAMC,CAAkD,CACpD,KAAO,gCACP,cAET,YAAYD,EAAkB,CAC5B,KAAK,cAAgB,IAAI,MAAMA,GAAW,8BAA8B,CAC1E,CACF,CAEO,MAAME,CAA4C,CAC9C,KAAO,0BACP,cAET,YAAYF,EAAkB,CAC5B,KAAK,cAAgB,IAAI,MAAMA,GAAW,uBAAuB,CACnE,CACF,CAEO,MAAMG,CAA6C,CAC/C,KAAO,2BACP,cAET,YAAYH,EAAkB,CAC5B,KAAK,cAAgB,IAAI,MAAMA,GAAW,wBAAwB,CACpE,CACF,CAEO,MAAMI,CAA+C,CACjD,KAAO,6BACP,cAET,YAAYJ,EAAkB,CAC5B,KAAK,cAAgB,IAAI,MAAMA,GAAW,0BAA0B,CACtE,CACF,CAEO,MAAMK,CAA4D,CAC9D,KAAO,0CACP,cAET,YAAYL,EAAkB,CAC5B,KAAK,cAAgB,IAAI,MACvBA,GAAW,2CACb,CACF,CACF",
6
- "names": ["InvalidStatusWordError", "message", "InvalidBatteryStatusTypeError", "InvalidBatteryDataError", "InvalidBatteryFlagsError", "InvalidResponseFormatError", "InvalidGetFirmwareMetadataResponseError"]
4
+ "sourcesContent": ["import { type DmkError } from \"@api/Error\";\n\nexport class InvalidStatusWordError implements DmkError {\n readonly _tag = \"InvalidStatusWordError\";\n readonly originalError?: Error;\n\n constructor(message?: string) {\n this.originalError = new Error(message ?? \"Invalid status word.\");\n }\n}\n\nexport class InvalidResponseFormatError implements DmkError {\n readonly _tag = \"InvalidResponseFormatError\";\n readonly originalError: Error;\n\n constructor(message?: string) {\n this.originalError = new Error(message ?? \"Invalid response format.\");\n }\n}\n"],
5
+ "mappings": "AAEO,MAAMA,CAA2C,CAC7C,KAAO,yBACP,cAET,YAAYC,EAAkB,CAC5B,KAAK,cAAgB,IAAI,MAAMA,GAAW,sBAAsB,CAClE,CACF,CAEO,MAAMC,CAA+C,CACjD,KAAO,6BACP,cAET,YAAYD,EAAkB,CAC5B,KAAK,cAAgB,IAAI,MAAMA,GAAW,0BAA0B,CACtE,CACF",
6
+ "names": ["InvalidStatusWordError", "message", "InvalidResponseFormatError"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var a=(e=>(e.Error="ERROR",e.Success="SUCCESS",e))(a||{});function o({data:r,error:t}){return t?{status:"ERROR",error:t}:{status:"SUCCESS",data:r}}function s(r){return r.status==="SUCCESS"}export{o as CommandResultFactory,a as CommandResultStatus,s as isSuccessCommandResult};
1
+ import{DmkResultFactory as e,DmkResultStatus as m,isSuccessDmkResult as t}from"../../model/DmkResult";function s({data:r,error:o}){return o!==void 0?e({error:o}):e({data:r})}function d(r){return t(r)}export{s as CommandResultFactory,m as CommandResultStatus,d as isSuccessCommandResult};
2
2
  //# sourceMappingURL=CommandResult.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/api/command/model/CommandResult.ts"],
4
- "sourcesContent": ["import {\n type InvalidBatteryDataError,\n type InvalidBatteryStatusTypeError,\n type InvalidGetFirmwareMetadataResponseError,\n type InvalidResponseFormatError,\n type InvalidStatusWordError,\n} from \"@api/command/Errors\";\nimport { type GlobalCommandErrorStatusCode } from \"@api/command/utils/GlobalCommandError\";\nimport {\n type DeviceExchangeError,\n type UnknownDeviceExchangeError,\n} from \"@api/Error\";\n\nexport enum CommandResultStatus {\n Error = \"ERROR\",\n Success = \"SUCCESS\",\n}\nexport type CommandSuccessResult<Data> = {\n status: CommandResultStatus.Success;\n data: Data;\n};\nexport type CommandErrorResult<SpecificErrorCodes = void> = {\n error:\n | DeviceExchangeError<SpecificErrorCodes | GlobalCommandErrorStatusCode>\n | InvalidBatteryDataError\n | InvalidBatteryStatusTypeError\n | InvalidResponseFormatError\n | InvalidStatusWordError\n | InvalidGetFirmwareMetadataResponseError\n | UnknownDeviceExchangeError;\n status: CommandResultStatus.Error;\n};\nexport type CommandResult<Data, SpecificErrorCodes = void> =\n | CommandSuccessResult<Data>\n | CommandErrorResult<SpecificErrorCodes>;\n\nexport function CommandResultFactory<Data, SpecificErrorCodes = void>({\n data,\n error,\n}:\n | { data: Data; error?: undefined }\n | {\n data?: undefined;\n error:\n | DeviceExchangeError<SpecificErrorCodes>\n | InvalidBatteryDataError\n | InvalidBatteryStatusTypeError\n | InvalidResponseFormatError\n | InvalidStatusWordError\n | InvalidGetFirmwareMetadataResponseError\n | UnknownDeviceExchangeError;\n }): CommandResult<Data, SpecificErrorCodes> {\n if (error) {\n return {\n status: CommandResultStatus.Error,\n error,\n };\n }\n return {\n status: CommandResultStatus.Success,\n data,\n };\n}\n\nexport function isSuccessCommandResult<Data, StatusCode>(\n result: CommandResult<Data, StatusCode>,\n): result is CommandSuccessResult<Data> {\n return result.status === CommandResultStatus.Success;\n}\n"],
5
- "mappings": "AAaO,IAAKA,OACVA,EAAA,MAAQ,QACRA,EAAA,QAAU,UAFAA,OAAA,IAuBL,SAASC,EAAsD,CACpE,KAAAC,EACA,MAAAC,CACF,EAYgD,CAC9C,OAAIA,EACK,CACL,OAAQ,QACR,MAAAA,CACF,EAEK,CACL,OAAQ,UACR,KAAAD,CACF,CACF,CAEO,SAASE,EACdC,EACsC,CACtC,OAAOA,EAAO,SAAW,SAC3B",
6
- "names": ["CommandResultStatus", "CommandResultFactory", "data", "error", "isSuccessCommandResult", "result"]
4
+ "sourcesContent": ["import type {\n InvalidResponseFormatError,\n InvalidStatusWordError,\n} from \"@api/command/Errors\";\nimport type { GlobalCommandErrorStatusCode } from \"@api/command/utils/GlobalCommandError\";\nimport type {\n DeviceExchangeError,\n UnknownDeviceExchangeError,\n} from \"@api/Error\";\nimport type {\n DmkErrorResult,\n DmkResult,\n DmkSuccessResult,\n} from \"@api/model/DmkResult\";\nimport {\n DmkResultFactory,\n DmkResultStatus,\n isSuccessDmkResult,\n} from \"@api/model/DmkResult\";\n\nexport { DmkResultStatus as CommandResultStatus };\ntype CommandError<SpecificErrorCodes = void> =\n | DeviceExchangeError<SpecificErrorCodes | GlobalCommandErrorStatusCode>\n | InvalidResponseFormatError\n | InvalidStatusWordError\n | UnknownDeviceExchangeError;\n\nexport type CommandSuccessResult<Data> = DmkSuccessResult<Data>;\nexport type CommandErrorResult<SpecificErrorCodes = void> = DmkErrorResult<\n CommandError<SpecificErrorCodes>\n>;\nexport type CommandResult<Data, SpecificErrorCodes = void> = DmkResult<\n Data,\n CommandError<SpecificErrorCodes>\n>;\n\nexport function CommandResultFactory<Data, SpecificErrorCodes = void>({\n data,\n error,\n}:\n | { data: Data; error?: undefined }\n | {\n data?: undefined;\n error: CommandError<SpecificErrorCodes>;\n }): CommandResult<Data, SpecificErrorCodes> {\n if (error !== undefined) {\n return DmkResultFactory({\n error,\n });\n }\n\n return DmkResultFactory({\n data,\n });\n}\n\nexport function isSuccessCommandResult<Data, StatusCode>(\n result: CommandResult<Data, StatusCode>,\n): result is CommandSuccessResult<Data> {\n return isSuccessDmkResult(result);\n}\n"],
5
+ "mappings": "AAcA,OACE,oBAAAA,EACA,mBAAAC,EACA,sBAAAC,MACK,uBAkBA,SAASC,EAAsD,CACpE,KAAAC,EACA,MAAAC,CACF,EAKgD,CAC9C,OAAIA,IAAU,OACLC,EAAiB,CACtB,MAAAD,CACF,CAAC,EAGIC,EAAiB,CACtB,KAAAF,CACF,CAAC,CACH,CAEO,SAASG,EACdC,EACsC,CACtC,OAAOC,EAAmBD,CAAM,CAClC",
6
+ "names": ["DmkResultFactory", "DmkResultStatus", "isSuccessDmkResult", "CommandResultFactory", "data", "error", "DmkResultFactory", "isSuccessCommandResult", "result", "isSuccessDmkResult"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ import{ApduBuilder as d}from"../../apdu/utils/ApduBuilder";import{ApduParser as p}from"../../apdu/utils/ApduParser";import{InvalidStatusWordError as s}from"../../command/Errors";import{CommandResultFactory as e}from"../../command/model/CommandResult";import{isCommandErrorCode as c}from"../../command/utils/CommandErrors";import{CommandUtils as u}from"../../command/utils/CommandUtils";import{GlobalCommandErrorHandler as i}from"../../command/utils/GlobalCommandError";import{DeviceExchangeError as C}from"../../Error";const m={5123:{message:"Invalid context. Get info must be called."},5419:{message:"Failed to generate AES key."},"541a":{message:"Internal error, crypto operation failed."},"541b":{message:"Internal error, failed to compute AES CMAC."},"541c":{message:"Failed to encrypt the app storage backup."},"622f":{message:"Invalid device state, recovery mode."},6642:{message:"Invalid backup state, backup already performed."}};class g extends C{constructor(r){super({tag:"BackupStorageCommandError",...r})}}class h{name="BackupStorage";header={cla:224,ins:107,p1:0,p2:0};getApdu(){return new d(this.header).build()}parseResponse(r){const o=new p(r);if(!u.isSuccessResponse(r)){const t=o.encodeToHexaString(r.statusCode);return c(t,m)?e({error:new g({...m[t],errorCode:t})}):e({error:i.handle(r)})}const a=o.extractFieldByLength(o.getUnparsedRemainingLength());return a===void 0?e({error:new s("Failed to extract app storage data chunk")}):e({data:{chunkData:a,chunkSize:a.length}})}}export{m as BACKUP_STORAGE_ERRORS,h as BackupStorageCommand,g as BackupStorageCommandError};
2
+ //# sourceMappingURL=BackupStorageCommand.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/api/command/os/BackupStorageCommand.ts"],
4
+ "sourcesContent": ["import { type Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder } from \"@api/apdu/utils/ApduBuilder\";\nimport { ApduParser } from \"@api/apdu/utils/ApduParser\";\nimport { type Command } from \"@api/command/Command\";\nimport { InvalidStatusWordError } from \"@api/command/Errors\";\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 BackupStorageCommandResponse = {\n chunkData: Uint8Array;\n chunkSize: number;\n};\n\nexport type BackupStorageCommandErrorCodes =\n | \"5123\"\n | \"5419\"\n | \"541a\"\n | \"541b\"\n | \"541c\"\n | \"622f\"\n | \"6642\";\n\nexport const BACKUP_STORAGE_ERRORS: CommandErrors<BackupStorageCommandErrorCodes> =\n {\n \"5123\": { message: \"Invalid context. Get info must be called.\" },\n \"5419\": { message: \"Failed to generate AES key.\" },\n \"541a\": { message: \"Internal error, crypto operation failed.\" },\n \"541b\": { message: \"Internal error, failed to compute AES CMAC.\" },\n \"541c\": { message: \"Failed to encrypt the app storage backup.\" },\n \"622f\": { message: \"Invalid device state, recovery mode.\" },\n \"6642\": { message: \"Invalid backup state, backup already performed.\" },\n };\n\nexport class BackupStorageCommandError extends DeviceExchangeError<BackupStorageCommandErrorCodes> {\n constructor(args: CommandErrorArgs<BackupStorageCommandErrorCodes>) {\n super({ tag: \"BackupStorageCommandError\", ...args });\n }\n}\n\nexport type BackupStorageCommandResult = CommandResult<\n BackupStorageCommandResponse,\n BackupStorageCommandErrorCodes\n>;\n\nexport class BackupStorageCommand\n implements\n Command<BackupStorageCommandResponse, void, BackupStorageCommandErrorCodes>\n{\n readonly name = \"BackupStorage\";\n\n private readonly header = {\n cla: 0xe0,\n ins: 0x6b,\n p1: 0x00,\n p2: 0x00,\n };\n\n getApdu(): Apdu {\n return new ApduBuilder(this.header).build();\n }\n\n parseResponse(apduResponse: ApduResponse): BackupStorageCommandResult {\n const parser = new ApduParser(apduResponse);\n\n if (!CommandUtils.isSuccessResponse(apduResponse)) {\n const errorCode = parser.encodeToHexaString(apduResponse.statusCode);\n if (isCommandErrorCode(errorCode, BACKUP_STORAGE_ERRORS)) {\n return CommandResultFactory({\n error: new BackupStorageCommandError({\n ...BACKUP_STORAGE_ERRORS[errorCode],\n errorCode,\n }),\n });\n }\n return CommandResultFactory({\n error: GlobalCommandErrorHandler.handle(apduResponse),\n });\n }\n\n const appStorageDataChunk = parser.extractFieldByLength(\n parser.getUnparsedRemainingLength(),\n );\n\n if (appStorageDataChunk === undefined) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Failed to extract app storage data chunk\",\n ),\n });\n }\n\n return CommandResultFactory({\n data: {\n chunkData: appStorageDataChunk,\n chunkSize: appStorageDataChunk.length,\n },\n });\n }\n}\n"],
5
+ "mappings": "AACA,OAAS,eAAAA,MAAmB,8BAC5B,OAAS,cAAAC,MAAkB,6BAE3B,OAAS,0BAAAC,MAA8B,sBACvC,OAEE,wBAAAC,MACK,mCACP,OAEE,sBAAAC,MACK,mCACP,OAAS,gBAAAC,MAAoB,kCAC7B,OAAS,6BAAAC,MAAiC,wCAE1C,OAAgC,uBAAAC,MAA2B,aAgBpD,MAAMC,EACX,CACE,KAAQ,CAAE,QAAS,2CAA4C,EAC/D,KAAQ,CAAE,QAAS,6BAA8B,EACjD,OAAQ,CAAE,QAAS,0CAA2C,EAC9D,OAAQ,CAAE,QAAS,6CAA8C,EACjE,OAAQ,CAAE,QAAS,2CAA4C,EAC/D,OAAQ,CAAE,QAAS,sCAAuC,EAC1D,KAAQ,CAAE,QAAS,iDAAkD,CACvE,EAEK,MAAMC,UAAkCF,CAAoD,CACjG,YAAYG,EAAwD,CAClE,MAAM,CAAE,IAAK,4BAA6B,GAAGA,CAAK,CAAC,CACrD,CACF,CAOO,MAAMC,CAGb,CACW,KAAO,gBAEC,OAAS,CACxB,IAAK,IACL,IAAK,IACL,GAAI,EACJ,GAAI,CACN,EAEA,SAAgB,CACd,OAAO,IAAIX,EAAY,KAAK,MAAM,EAAE,MAAM,CAC5C,CAEA,cAAcY,EAAwD,CACpE,MAAMC,EAAS,IAAIZ,EAAWW,CAAY,EAE1C,GAAI,CAACP,EAAa,kBAAkBO,CAAY,EAAG,CACjD,MAAME,EAAYD,EAAO,mBAAmBD,EAAa,UAAU,EACnE,OAAIR,EAAmBU,EAAWN,CAAqB,EAC9CL,EAAqB,CAC1B,MAAO,IAAIM,EAA0B,CACnC,GAAGD,EAAsBM,CAAS,EAClC,UAAAA,CACF,CAAC,CACH,CAAC,EAEIX,EAAqB,CAC1B,MAAOG,EAA0B,OAAOM,CAAY,CACtD,CAAC,CACH,CAEA,MAAMG,EAAsBF,EAAO,qBACjCA,EAAO,2BAA2B,CACpC,EAEA,OAAIE,IAAwB,OACnBZ,EAAqB,CAC1B,MAAO,IAAID,EACT,0CACF,CACF,CAAC,EAGIC,EAAqB,CAC1B,KAAM,CACJ,UAAWY,EACX,UAAWA,EAAoB,MACjC,CACF,CAAC,CACH,CACF",
6
+ "names": ["ApduBuilder", "ApduParser", "InvalidStatusWordError", "CommandResultFactory", "isCommandErrorCode", "CommandUtils", "GlobalCommandErrorHandler", "DeviceExchangeError", "BACKUP_STORAGE_ERRORS", "BackupStorageCommandError", "args", "BackupStorageCommand", "apduResponse", "parser", "errorCode", "appStorageDataChunk"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{isSuccessCommandResult as r}from"../../command/model/CommandResult";import{BackupStorageCommand as o}from"../../command/os/BackupStorageCommand";import{ApduResponse as c}from"../../device-session/ApduResponse";describe("BackupStorageCommand",()=>{describe("Name",()=>{it("name should be 'BackupStorage'",()=>{const e=new o().name;expect(e).toBe("BackupStorage")})}),describe("Command",()=>{it("should return the correct APDU for backing up app storage",()=>{const t=Uint8Array.from([224,107,0,0,0]),e=new o().getApdu();expect(e.getRawApdu()).toEqual(t)})}),describe("Success response",()=>{it("should return the app storage data chunk as a hex string",()=>{const t=Uint8Array.from([144,0]),e=new c({statusCode:t,data:Uint8Array.from([171,205,239,1,35])}),a=new o().parseResponse(e);expect(r(a)).toBe(!0),expect(a).toEqual({data:{chunkData:Uint8Array.from([171,205,239,1,35]),chunkSize:5},status:"SUCCESS"})})}),describe("Error response",()=>{it.each([{description:"get info was not called first",statusCode:[81,35],expectedMessage:"Invalid context. Get info must be called."},{description:"AES key generation fails",statusCode:[84,25],expectedMessage:"Failed to generate AES key."},{description:"crypto operation fails",statusCode:[84,26],expectedMessage:"Internal error, crypto operation failed."},{description:"AES CMAC computation fails",statusCode:[84,27],expectedMessage:"Internal error, failed to compute AES CMAC."},{description:"encryption of backup fails",statusCode:[84,28],expectedMessage:"Failed to encrypt the app storage backup."},{description:"device is in recovery mode",statusCode:[98,47],expectedMessage:"Invalid device state, recovery mode."},{description:"backup was already performed",statusCode:[102,66],expectedMessage:"Invalid backup state, backup already performed."},{description:"error code is not specific to BackupStorageCommand (global error)",statusCode:[85,21],expectedMessage:"Device is locked."}])("should return error when $description",({statusCode:t,expectedMessage:e})=>{const a=new c({statusCode:Uint8Array.from(t),data:new Uint8Array([])}),s=new o().parseResponse(a);expect(r(s)).toBe(!1),expect(s.error.message).toBe(e)})})});
2
+ //# sourceMappingURL=BackupStorageCommand.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/api/command/os/BackupStorageCommand.test.ts"],
4
+ "sourcesContent": ["import { isSuccessCommandResult } from \"@api/command/model/CommandResult\";\nimport { BackupStorageCommand } from \"@api/command/os/BackupStorageCommand\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\n\ndescribe(\"BackupStorageCommand\", () => {\n describe(\"Name\", () => {\n it(\"name should be 'BackupStorage'\", () => {\n // ARRANGE\n const command = new BackupStorageCommand();\n\n // ACT\n const name = command.name;\n\n // ASSERT\n expect(name).toBe(\"BackupStorage\");\n });\n });\n\n describe(\"Command\", () => {\n it(\"should return the correct APDU for backing up app storage\", () => {\n // ARRANGE\n const expectedApdu = Uint8Array.from([0xe0, 0x6b, 0x00, 0x00, 0x00]);\n\n // ACT\n const apdu = new BackupStorageCommand().getApdu();\n\n // ASSERT\n expect(apdu.getRawApdu()).toEqual(expectedApdu);\n });\n });\n\n describe(\"Success response\", () => {\n it(\"should return the app storage data chunk as a hex string\", () => {\n // ARRANGE\n const statusCode = Uint8Array.from([0x90, 0x00]);\n const response = new ApduResponse({\n statusCode,\n data: Uint8Array.from([0xab, 0xcd, 0xef, 0x01, 0x23]),\n });\n\n // ACT\n const result = new BackupStorageCommand().parseResponse(response);\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(true);\n expect(result).toEqual({\n data: {\n chunkData: Uint8Array.from([0xab, 0xcd, 0xef, 0x01, 0x23]),\n chunkSize: 5,\n },\n status: \"SUCCESS\",\n });\n });\n });\n\n describe(\"Error response\", () => {\n it.each([\n {\n description: \"get info was not called first\",\n statusCode: [0x51, 0x23],\n expectedMessage: \"Invalid context. Get info must be called.\",\n },\n {\n description: \"AES key generation fails\",\n statusCode: [0x54, 0x19],\n expectedMessage: \"Failed to generate AES key.\",\n },\n {\n description: \"crypto operation fails\",\n statusCode: [0x54, 0x1a],\n expectedMessage: \"Internal error, crypto operation failed.\",\n },\n {\n description: \"AES CMAC computation fails\",\n statusCode: [0x54, 0x1b],\n expectedMessage: \"Internal error, failed to compute AES CMAC.\",\n },\n {\n description: \"encryption of backup fails\",\n statusCode: [0x54, 0x1c],\n expectedMessage: \"Failed to encrypt the app storage backup.\",\n },\n {\n description: \"device is in recovery mode\",\n statusCode: [0x62, 0x2f],\n expectedMessage: \"Invalid device state, recovery mode.\",\n },\n {\n description: \"backup was already performed\",\n statusCode: [0x66, 0x42],\n expectedMessage: \"Invalid backup state, backup already performed.\",\n },\n {\n description:\n \"error code is not specific to BackupStorageCommand (global error)\",\n statusCode: [0x55, 0x15],\n expectedMessage: \"Device is locked.\",\n },\n ])(\n \"should return error when $description\",\n ({ statusCode, expectedMessage }) => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: Uint8Array.from(statusCode),\n data: new Uint8Array([]),\n });\n\n // ACT\n const result = new BackupStorageCommand().parseResponse(response);\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n expect((result as unknown as { error: Error }).error.message).toBe(\n expectedMessage,\n );\n },\n );\n });\n});\n"],
5
+ "mappings": "AAAA,OAAS,0BAAAA,MAA8B,mCACvC,OAAS,wBAAAC,MAA4B,uCACrC,OAAS,gBAAAC,MAAoB,mCAE7B,SAAS,uBAAwB,IAAM,CACrC,SAAS,OAAQ,IAAM,CACrB,GAAG,iCAAkC,IAAM,CAKzC,MAAMC,EAHU,IAAIF,EAAqB,EAGpB,KAGrB,OAAOE,CAAI,EAAE,KAAK,eAAe,CACnC,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,4DAA6D,IAAM,CAEpE,MAAMC,EAAe,WAAW,KAAK,CAAC,IAAM,IAAM,EAAM,EAAM,CAAI,CAAC,EAG7DC,EAAO,IAAIJ,EAAqB,EAAE,QAAQ,EAGhD,OAAOI,EAAK,WAAW,CAAC,EAAE,QAAQD,CAAY,CAChD,CAAC,CACH,CAAC,EAED,SAAS,mBAAoB,IAAM,CACjC,GAAG,2DAA4D,IAAM,CAEnE,MAAME,EAAa,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACzCC,EAAW,IAAIL,EAAa,CAChC,WAAAI,EACA,KAAM,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,EAAM,EAAI,CAAC,CACtD,CAAC,EAGKE,EAAS,IAAIP,EAAqB,EAAE,cAAcM,CAAQ,EAGhE,OAAOP,EAAuBQ,CAAM,CAAC,EAAE,KAAK,EAAI,EAChD,OAAOA,CAAM,EAAE,QAAQ,CACrB,KAAM,CACJ,UAAW,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,EAAM,EAAI,CAAC,EACzD,UAAW,CACb,EACA,OAAQ,SACV,CAAC,CACH,CAAC,CACH,CAAC,EAED,SAAS,iBAAkB,IAAM,CAC/B,GAAG,KAAK,CACN,CACE,YAAa,gCACb,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,2CACnB,EACA,CACE,YAAa,2BACb,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,6BACnB,EACA,CACE,YAAa,yBACb,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,0CACnB,EACA,CACE,YAAa,6BACb,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,6CACnB,EACA,CACE,YAAa,6BACb,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,2CACnB,EACA,CACE,YAAa,6BACb,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,sCACnB,EACA,CACE,YAAa,+BACb,WAAY,CAAC,IAAM,EAAI,EACvB,gBAAiB,iDACnB,EACA,CACE,YACE,oEACF,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,mBACnB,CACF,CAAC,EACC,wCACA,CAAC,CAAE,WAAAF,EAAY,gBAAAG,CAAgB,IAAM,CAEnC,MAAMF,EAAW,IAAIL,EAAa,CAChC,WAAY,WAAW,KAAKI,CAAU,EACtC,KAAM,IAAI,WAAW,CAAC,CAAC,CACzB,CAAC,EAGKE,EAAS,IAAIP,EAAqB,EAAE,cAAcM,CAAQ,EAGhE,OAAOP,EAAuBQ,CAAM,CAAC,EAAE,KAAK,EAAK,EACjD,OAAQA,EAAuC,MAAM,OAAO,EAAE,KAC5DC,CACF,CACF,CACF,CACF,CAAC,CACH,CAAC",
6
+ "names": ["isSuccessCommandResult", "BackupStorageCommand", "ApduResponse", "name", "expectedApdu", "apdu", "statusCode", "response", "result", "expectedMessage"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{ApduBuilder as C}from"../../apdu/utils/ApduBuilder";import{ApduParser as S}from"../../apdu/utils/ApduParser";import{InvalidStatusWordError as p}from"../../command/Errors";import{CommandResultFactory as t}from"../../command/model/CommandResult";import{isCommandErrorCode as l}from"../../command/utils/CommandErrors";import{CommandUtils as A}from"../../command/utils/CommandUtils";import{GlobalCommandErrorHandler as c}from"../../command/utils/GlobalCommandError";import{DeviceExchangeError as u}from"../../Error";const g={5123:{message:"Application not found."},"662f":{message:"Device is in recovery mode."},"670a":{message:"Invalid application name length, two chars minimum."}};class I extends u{constructor(e){super({tag:"GetAppStorageInfoCommandError",...e})}}class b{constructor(e){this.args=e}name="GetAppStorageInfo";header={cla:224,ins:106,p1:0,p2:0};getApdu(){const{appName:e}=this.args;return new C(this.header).addAsciiStringToData(e).build()}parseResponse(e){const r=new S(e);if(!A.isSuccessResponse(e)){const o=r.encodeToHexaString(e.statusCode);return l(o,g)?t({error:new I({...g[o],errorCode:o})}):t({error:c.handle(e)})}const a=r.extract32BitUInt();if(a===void 0)return t({error:new p("Failed to extract app storage size")});let s="",m=!1,i=!1,d="";if(a!==0){const o=r.extract32BitUInt();if(o===void 0)return t({error:new p("Failed to extract app storage version")});s=o.toString(16);const n=r.extract16BitUInt();if(n===void 0)return t({error:new p("Failed to extract app storage properties")});m=(n&1)===1,i=(n&2)===2,d=r.encodeToHexaString(r.extractFieldByLength(32))}return t({data:{storageSize:a,storageVersion:s,hasSettings:m,hasData:i,storageHash:d}})}}export{g as GET_APP_STORAGE_INFO_ERRORS,b as GetAppStorageInfoCommand,I as GetAppStorageInfoCommandError};
2
+ //# sourceMappingURL=GetAppStorageInfoCommand.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/api/command/os/GetAppStorageInfoCommand.ts"],
4
+ "sourcesContent": ["import { type Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder } from \"@api/apdu/utils/ApduBuilder\";\nimport { ApduParser } from \"@api/apdu/utils/ApduParser\";\nimport { type Command } from \"@api/command/Command\";\nimport { InvalidStatusWordError } from \"@api/command/Errors\";\nimport {\n type CommandResult,\n CommandResultFactory,\n} from \"@api/command/model/CommandResult\";\nimport { isCommandErrorCode } from \"@api/command/utils/CommandErrors\";\nimport { type CommandErrors } 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 GetAppStorageInfoCommandArgs = {\n appName: string;\n};\n\nexport type GetAppStorageInfoCommandResponse = {\n storageSize: number;\n storageVersion: string;\n hasSettings: boolean;\n hasData: boolean;\n storageHash: string;\n};\n\nexport type GetAppStorageInfoCommandErrorCodes = \"5123\" | \"662f\" | \"670a\";\n\nexport const GET_APP_STORAGE_INFO_ERRORS: CommandErrors<GetAppStorageInfoCommandErrorCodes> =\n {\n \"5123\": { message: \"Application not found.\" },\n \"662f\": { message: \"Device is in recovery mode.\" },\n \"670a\": { message: \"Invalid application name length, two chars minimum.\" },\n };\n\nexport class GetAppStorageInfoCommandError extends DeviceExchangeError<GetAppStorageInfoCommandErrorCodes> {\n constructor(args: CommandErrorArgs<GetAppStorageInfoCommandErrorCodes>) {\n super({ tag: \"GetAppStorageInfoCommandError\", ...args });\n }\n}\n\nexport type GetAppStorageInfoCommandResult = CommandResult<\n GetAppStorageInfoCommandResponse,\n GetAppStorageInfoCommandErrorCodes\n>;\n\nexport class GetAppStorageInfoCommand\n implements\n Command<\n GetAppStorageInfoCommandResponse,\n GetAppStorageInfoCommandArgs,\n GetAppStorageInfoCommandErrorCodes\n >\n{\n readonly name = \"GetAppStorageInfo\";\n\n private readonly header = {\n cla: 0xe0,\n ins: 0x6a,\n p1: 0x00,\n p2: 0x00,\n };\n\n constructor(private readonly args: GetAppStorageInfoCommandArgs) {}\n\n getApdu(): Apdu {\n const { appName } = this.args;\n return new ApduBuilder(this.header).addAsciiStringToData(appName).build();\n }\n\n parseResponse(apduResponse: ApduResponse): GetAppStorageInfoCommandResult {\n const parser = new ApduParser(apduResponse);\n if (!CommandUtils.isSuccessResponse(apduResponse)) {\n const errorCode = parser.encodeToHexaString(apduResponse.statusCode);\n if (isCommandErrorCode(errorCode, GET_APP_STORAGE_INFO_ERRORS)) {\n return CommandResultFactory({\n error: new GetAppStorageInfoCommandError({\n ...GET_APP_STORAGE_INFO_ERRORS[errorCode],\n errorCode,\n }),\n });\n }\n return CommandResultFactory({\n error: GlobalCommandErrorHandler.handle(apduResponse),\n });\n }\n\n const appStorageSize = parser.extract32BitUInt();\n if (appStorageSize === undefined) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Failed to extract app storage size\"),\n });\n }\n\n let appStorageVersion = \"\";\n let hasAppStorageSettings = false;\n let hasAppStorageData = false;\n let hash = \"\";\n\n if (appStorageSize !== 0) {\n const appStorageVersionNumber = parser.extract32BitUInt();\n if (appStorageVersionNumber === undefined) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Failed to extract app storage version\",\n ),\n });\n }\n appStorageVersion = appStorageVersionNumber.toString(16);\n /**\n * The properties byte is a bitfield with the following structure:\n * - Bit 0: hasSettings\n * - Bit 1: hasData\n */\n const appStorageProperties = parser.extract16BitUInt();\n if (appStorageProperties === undefined) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Failed to extract app storage properties\",\n ),\n });\n }\n\n hasAppStorageSettings = (appStorageProperties & 1) === 1;\n hasAppStorageData = (appStorageProperties & 2) === 2;\n hash = parser.encodeToHexaString(parser.extractFieldByLength(0x20));\n }\n\n return CommandResultFactory({\n data: {\n storageSize: appStorageSize,\n storageVersion: appStorageVersion,\n hasSettings: hasAppStorageSettings,\n hasData: hasAppStorageData,\n storageHash: hash,\n },\n });\n }\n}\n"],
5
+ "mappings": "AACA,OAAS,eAAAA,MAAmB,8BAC5B,OAAS,cAAAC,MAAkB,6BAE3B,OAAS,0BAAAC,MAA8B,sBACvC,OAEE,wBAAAC,MACK,mCACP,OAAS,sBAAAC,MAA0B,mCAEnC,OAAS,gBAAAC,MAAoB,kCAC7B,OAAS,6BAAAC,MAAiC,wCAE1C,OAAgC,uBAAAC,MAA2B,aAgBpD,MAAMC,EACX,CACE,KAAQ,CAAE,QAAS,wBAAyB,EAC5C,OAAQ,CAAE,QAAS,6BAA8B,EACjD,OAAQ,CAAE,QAAS,qDAAsD,CAC3E,EAEK,MAAMC,UAAsCF,CAAwD,CACzG,YAAYG,EAA4D,CACtE,MAAM,CAAE,IAAK,gCAAiC,GAAGA,CAAK,CAAC,CACzD,CACF,CAOO,MAAMC,CAOb,CAUE,YAA6BD,EAAoC,CAApC,UAAAA,CAAqC,CATzD,KAAO,oBAEC,OAAS,CACxB,IAAK,IACL,IAAK,IACL,GAAI,EACJ,GAAI,CACN,EAIA,SAAgB,CACd,KAAM,CAAE,QAAAE,CAAQ,EAAI,KAAK,KACzB,OAAO,IAAIZ,EAAY,KAAK,MAAM,EAAE,qBAAqBY,CAAO,EAAE,MAAM,CAC1E,CAEA,cAAcC,EAA4D,CACxE,MAAMC,EAAS,IAAIb,EAAWY,CAAY,EAC1C,GAAI,CAACR,EAAa,kBAAkBQ,CAAY,EAAG,CACjD,MAAME,EAAYD,EAAO,mBAAmBD,EAAa,UAAU,EACnE,OAAIT,EAAmBW,EAAWP,CAA2B,EACpDL,EAAqB,CAC1B,MAAO,IAAIM,EAA8B,CACvC,GAAGD,EAA4BO,CAAS,EACxC,UAAAA,CACF,CAAC,CACH,CAAC,EAEIZ,EAAqB,CAC1B,MAAOG,EAA0B,OAAOO,CAAY,CACtD,CAAC,CACH,CAEA,MAAMG,EAAiBF,EAAO,iBAAiB,EAC/C,GAAIE,IAAmB,OACrB,OAAOb,EAAqB,CAC1B,MAAO,IAAID,EAAuB,oCAAoC,CACxE,CAAC,EAGH,IAAIe,EAAoB,GACpBC,EAAwB,GACxBC,EAAoB,GACpBC,EAAO,GAEX,GAAIJ,IAAmB,EAAG,CACxB,MAAMK,EAA0BP,EAAO,iBAAiB,EACxD,GAAIO,IAA4B,OAC9B,OAAOlB,EAAqB,CAC1B,MAAO,IAAID,EACT,uCACF,CACF,CAAC,EAEHe,EAAoBI,EAAwB,SAAS,EAAE,EAMvD,MAAMC,EAAuBR,EAAO,iBAAiB,EACrD,GAAIQ,IAAyB,OAC3B,OAAOnB,EAAqB,CAC1B,MAAO,IAAID,EACT,0CACF,CACF,CAAC,EAGHgB,GAAyBI,EAAuB,KAAO,EACvDH,GAAqBG,EAAuB,KAAO,EACnDF,EAAON,EAAO,mBAAmBA,EAAO,qBAAqB,EAAI,CAAC,CACpE,CAEA,OAAOX,EAAqB,CAC1B,KAAM,CACJ,YAAaa,EACb,eAAgBC,EAChB,YAAaC,EACb,QAASC,EACT,YAAaC,CACf,CACF,CAAC,CACH,CACF",
6
+ "names": ["ApduBuilder", "ApduParser", "InvalidStatusWordError", "CommandResultFactory", "isCommandErrorCode", "CommandUtils", "GlobalCommandErrorHandler", "DeviceExchangeError", "GET_APP_STORAGE_INFO_ERRORS", "GetAppStorageInfoCommandError", "args", "GetAppStorageInfoCommand", "appName", "apduResponse", "parser", "errorCode", "appStorageSize", "appStorageVersion", "hasAppStorageSettings", "hasAppStorageData", "hash", "appStorageVersionNumber", "appStorageProperties"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{InvalidStatusWordError as p}from"../../command/Errors";import{isSuccessCommandResult as s}from"../../command/model/CommandResult";import{GetAppStorageInfoCommand as o}from"../../command/os/GetAppStorageInfoCommand";import{ApduResponse as n}from"../../device-session/ApduResponse";describe("GetAppStorageInfoCommand",()=>{describe("Name",()=>{it("name should be 'GetAppStorageInfo'",()=>{const e=new o({appName:"MyApp"}).name;expect(e).toBe("GetAppStorageInfo")})}),describe("Command",()=>{it("should return the correct APDU for getting the app storage info",()=>{const t=Uint8Array.from([224,106,0,0,5,77,121,65,112,112]),e=new o({appName:"MyApp"}).getApdu();expect(e.getRawApdu()).toEqual(t)})}),describe("Success response",()=>{it("should return correct app storage info when app storage size is not 0",()=>{const t=Uint8Array.from([144,0]),e=new n({statusCode:t,data:Uint8Array.from([0,0,0,1,0,0,0,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1])}),r=new o({appName:"MyApp"}).parseResponse(e);expect(s(r)).toBe(!0),expect(r).toEqual({data:{storageSize:1,storageVersion:"1",hasSettings:!0,hasData:!0,storageHash:"0000000000000000000000000000000000000000000000000000000000000001"},status:"SUCCESS"})}),it("should return correct app storage info when app storage size is 0",()=>{const t=Uint8Array.from([144,0]),e=new n({statusCode:t,data:Uint8Array.from([0,0,0,0])}),r=new o({appName:"MyApp"}).parseResponse(e);expect(s(r)).toBe(!0),expect(r).toEqual({data:{storageSize:0,storageVersion:"",hasSettings:!1,hasData:!1,storageHash:""},status:"SUCCESS"})})}),describe("Error response",()=>{it.each([{description:"application is not found",statusCode:[81,35],expectedMessage:"Application not found."},{description:"device is in recovery mode",statusCode:[102,47],expectedMessage:"Device is in recovery mode."},{description:"application name length is invalid",statusCode:[103,10],expectedMessage:"Invalid application name length, two chars minimum."},{description:"error code is not specific to GetAppStorageInfoCommand (global error)",statusCode:[85,21],expectedMessage:"Device is locked."}])("should return error when $description",({statusCode:t,expectedMessage:e})=>{const r=new n({statusCode:Uint8Array.from(t),data:new Uint8Array([])}),a=new o({appName:"MyApp"}).parseResponse(r);expect(s(a)).toBe(!1),expect(a.error.message).toBe(e)}),it.each([{description:"app storage size extraction fails",data:new Uint8Array([]),expectedOriginalMessage:"Failed to extract app storage size"},{description:"app storage version extraction fails",data:Uint8Array.from([0,0,0,1]),expectedOriginalMessage:"Failed to extract app storage version"},{description:"app storage properties extraction fails",data:Uint8Array.from([0,0,0,1,0,0,0,1]),expectedOriginalMessage:"Failed to extract app storage properties"}])("should return error when $description",({data:t,expectedOriginalMessage:e})=>{const r=new n({statusCode:Uint8Array.from([144,0]),data:t}),a=new o({appName:"MyApp"}).parseResponse(r);expect(s(a)).toBe(!1),expect(a.error).toBeInstanceOf(p),expect(a.error.originalError?.message).toBe(e)})})});
2
+ //# sourceMappingURL=GetAppStorageInfoCommand.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/api/command/os/GetAppStorageInfoCommand.test.ts"],
4
+ "sourcesContent": ["import { InvalidStatusWordError } from \"@api/command/Errors\";\nimport { isSuccessCommandResult } from \"@api/command/model/CommandResult\";\nimport { GetAppStorageInfoCommand } from \"@api/command/os/GetAppStorageInfoCommand\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\n\ndescribe(\"GetAppStorageInfoCommand\", () => {\n describe(\"Name\", () => {\n it(\"name should be 'GetAppStorageInfo'\", () => {\n // ARRANGE\n const command = new GetAppStorageInfoCommand({ appName: \"MyApp\" });\n\n // ACT\n const name = command.name;\n\n // ASSERT\n expect(name).toBe(\"GetAppStorageInfo\");\n });\n });\n\n describe(\"Command\", () => {\n it(\"should return the correct APDU for getting the app storage info\", () => {\n // ARRANGE\n const expectedApdu = Uint8Array.from([\n 0xe0, 0x6a, 0x00, 0x00, 0x05, 0x4d, 0x79, 0x41, 0x70, 0x70,\n ]);\n\n // ACT\n const apdu = new GetAppStorageInfoCommand({ appName: \"MyApp\" }).getApdu();\n\n // ASSERT\n expect(apdu.getRawApdu()).toEqual(expectedApdu);\n });\n });\n\n describe(\"Success response\", () => {\n it(\"should return correct app storage info when app storage size is not 0\", () => {\n // ARRANGE\n const statusCode = Uint8Array.from([0x90, 0x00]);\n const response = new ApduResponse({\n statusCode,\n data: Uint8Array.from([\n // appStorageSize (32-bit BE) = 1\n 0x00, 0x00, 0x00, 0x01,\n // appStorageVersion (32-bit BE) = 1\n 0x00, 0x00, 0x00, 0x01,\n // appStorageProperties (16-bit BE) = 0x0003 (bits 0 and 1 set)\n 0x00, 0x03,\n // appStorageHash (32 bytes)\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,\n ]),\n });\n\n // ACT\n const result = new GetAppStorageInfoCommand({\n appName: \"MyApp\",\n }).parseResponse(response);\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(true);\n expect(result).toEqual({\n data: {\n storageSize: 1,\n storageVersion: \"1\",\n hasSettings: true,\n hasData: true,\n storageHash:\n \"0000000000000000000000000000000000000000000000000000000000000001\",\n },\n status: \"SUCCESS\",\n });\n });\n\n it(\"should return correct app storage info when app storage size is 0\", () => {\n // ARRANGE\n const statusCode = Uint8Array.from([0x90, 0x00]);\n const response = new ApduResponse({\n statusCode,\n data: Uint8Array.from([\n // appStorageSize (32-bit BE) = 0\n 0x00, 0x00, 0x00, 0x00,\n ]),\n });\n\n // ACT\n const result = new GetAppStorageInfoCommand({\n appName: \"MyApp\",\n }).parseResponse(response);\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(true);\n expect(result).toEqual({\n data: {\n storageSize: 0,\n storageVersion: \"\",\n hasSettings: false,\n hasData: false,\n storageHash: \"\",\n },\n status: \"SUCCESS\",\n });\n });\n });\n\n describe(\"Error response\", () => {\n it.each([\n {\n description: \"application is not found\",\n statusCode: [0x51, 0x23],\n expectedMessage: \"Application not found.\",\n },\n {\n description: \"device is in recovery mode\",\n statusCode: [0x66, 0x2f],\n expectedMessage: \"Device is in recovery mode.\",\n },\n {\n description: \"application name length is invalid\",\n statusCode: [0x67, 0x0a],\n expectedMessage: \"Invalid application name length, two chars minimum.\",\n },\n {\n description:\n \"error code is not specific to GetAppStorageInfoCommand (global error)\",\n statusCode: [0x55, 0x15],\n expectedMessage: \"Device is locked.\",\n },\n ])(\n \"should return error when $description\",\n ({ statusCode, expectedMessage }) => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: Uint8Array.from(statusCode),\n data: new Uint8Array([]),\n });\n\n // ACT\n const result = new GetAppStorageInfoCommand({\n appName: \"MyApp\",\n }).parseResponse(response);\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n expect((result as unknown as { error: Error }).error.message).toBe(\n expectedMessage,\n );\n },\n );\n\n it.each([\n {\n description: \"app storage size extraction fails\",\n data: new Uint8Array([]),\n expectedOriginalMessage: \"Failed to extract app storage size\",\n },\n {\n description: \"app storage version extraction fails\",\n data: Uint8Array.from([0x00, 0x00, 0x00, 0x01]),\n expectedOriginalMessage: \"Failed to extract app storage version\",\n },\n {\n description: \"app storage properties extraction fails\",\n data: Uint8Array.from([0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01]),\n expectedOriginalMessage: \"Failed to extract app storage properties\",\n },\n ])(\n \"should return error when $description\",\n ({ data, expectedOriginalMessage }) => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data,\n });\n\n // ACT\n const result = new GetAppStorageInfoCommand({\n appName: \"MyApp\",\n }).parseResponse(response);\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n expect(\n (result as unknown as { error: InvalidStatusWordError }).error,\n ).toBeInstanceOf(InvalidStatusWordError);\n expect(\n (result as unknown as { error: InvalidStatusWordError }).error\n .originalError?.message,\n ).toBe(expectedOriginalMessage);\n },\n );\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["InvalidStatusWordError", "isSuccessCommandResult", "GetAppStorageInfoCommand", "ApduResponse", "name", "expectedApdu", "apdu", "statusCode", "response", "result", "expectedMessage", "data", "expectedOriginalMessage"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{ApduBuilder as u}from"../../apdu/utils/ApduBuilder";import{ApduParser as p}from"../../apdu/utils/ApduParser";import{InvalidBatteryDataError as a,InvalidBatteryStatusTypeError as E}from"../../command/Errors";import{CommandResultFactory as r}from"../../command/model/CommandResult";var A=(t=>(t[t.BATTERY_PERCENTAGE=0]="BATTERY_PERCENTAGE",t[t.BATTERY_VOLTAGE=1]="BATTERY_VOLTAGE",t[t.BATTERY_TEMPERATURE=2]="BATTERY_TEMPERATURE",t[t.BATTERY_CURRENT=3]="BATTERY_CURRENT",t[t.BATTERY_FLAGS=4]="BATTERY_FLAGS",t))(A||{}),i=(e=>(e[e.NONE=0]="NONE",e[e.USB=1]="USB",e[e.QI=2]="QI",e))(i||{});class c{name="getBatteryStatus";args;constructor(n){this.args=n}getApdu(){const n={cla:224,ins:16,p1:0,p2:this.args.statusType};return new u(n).build()}parseResponse(n){const s=new p(n);switch(this.args.statusType){case 0:{const e=s.extract8BitUInt();return e===void 0?r({error:new a("Cannot parse APDU response")}):r({data:e>100?-1:e})}case 1:{const e=s.extract16BitUInt();return e===void 0?r({error:new a("Cannot parse APDU response")}):r({data:e})}case 2:case 3:{const e=s.extract8BitUInt();return e===void 0?r({error:new a("Cannot parse APDU response")}):r({data:e<<24>>24})}case 4:{const e=s.extract32BitUInt();if(e===void 0)return r({error:new a("Cannot parse APDU response")});const o=!!(e&8),t=!o&&!!(e&1);return r({data:{charging:t?2:o?1:0,issueCharging:!!(e&16),issueTemperature:!!(e&32),issueBattery:!!(e&128)}})}default:return r({error:new E("One or some case(s) not covered")})}}}export{A as BatteryStatusType,i as ChargingMode,c as GetBatteryStatusCommand};
1
+ import{ApduBuilder as u}from"../../apdu/utils/ApduBuilder";import{ApduParser as i}from"../../apdu/utils/ApduParser";import{InvalidResponseFormatError as p}from"../../command/Errors";import{CommandResultFactory as n}from"../../command/model/CommandResult";import{CommandUtils as E}from"../../command/utils/CommandUtils";import{GlobalCommandErrorHandler as m}from"../../command/utils/GlobalCommandError";var R=(e=>(e[e.BATTERY_PERCENTAGE=0]="BATTERY_PERCENTAGE",e[e.BATTERY_VOLTAGE=1]="BATTERY_VOLTAGE",e[e.BATTERY_TEMPERATURE=2]="BATTERY_TEMPERATURE",e[e.BATTERY_CURRENT=3]="BATTERY_CURRENT",e[e.BATTERY_FLAGS=4]="BATTERY_FLAGS",e))(R||{}),B=(r=>(r[r.NONE=0]="NONE",r[r.USB=1]="USB",r[r.QI=2]="QI",r))(B||{});class x{name="getBatteryStatus";args;constructor(s){this.args=s}getApdu(){const s={cla:224,ins:16,p1:0,p2:this.args.statusType};return new u(s).build()}parseResponse(s){if(!E.isSuccessResponse(s))return n({error:m.handle(s)});const a=new i(s),r=t=>n({error:new p(t)});switch(this.args.statusType){case 0:{const t=a.extract8BitUInt();return t===void 0?r("getBatteryStatus: missing battery percentage in response"):n({data:t>100?-1:t})}case 1:{const t=a.extract16BitUInt();return t===void 0?r("getBatteryStatus: missing battery voltage in response"):n({data:t})}case 2:case 3:{const t=a.extract8BitUInt();return t===void 0?r(this.args.statusType===2?"getBatteryStatus: missing battery temperature in response":"getBatteryStatus: missing battery current in response"):n({data:t<<24>>24})}case 4:{const t=a.extract32BitUInt();if(t===void 0)return r("getBatteryStatus: missing battery flags in response");const e=!!(t&8),o=!e&&!!(t&1);return n({data:{charging:o?2:e?1:0,issueCharging:!!(t&16),issueTemperature:!!(t&32),issueBattery:!!(t&128)}})}default:return r("getBatteryStatus: unsupported battery status type")}}}export{R as BatteryStatusType,B as ChargingMode,x as GetBatteryStatusCommand};
2
2
  //# sourceMappingURL=GetBatteryStatusCommand.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/api/command/os/GetBatteryStatusCommand.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 InvalidBatteryDataError,\n InvalidBatteryStatusTypeError,\n} from \"@api/command/Errors\";\nimport {\n type CommandResult,\n CommandResultFactory,\n} from \"@api/command/model/CommandResult\";\nimport { type ApduResponse } from \"@api/device-session/ApduResponse\";\n\n/**\n * The type of battery information to retrieve.\n */\nexport enum BatteryStatusType {\n /**\n * The command response will be the battery percentage.\n */\n BATTERY_PERCENTAGE = 0x00,\n /**\n * The command response will be the battery voltage in mV.\n */\n BATTERY_VOLTAGE = 0x01,\n /**\n * The command response will be the battery temperature in degree celsius\n */\n BATTERY_TEMPERATURE = 0x02,\n /**\n * The command response will be the battery current in mA.\n */\n BATTERY_CURRENT = 0x03,\n /**\n * The command response will be the battery status (cf. `BatteryStatusFlags`)\n */\n BATTERY_FLAGS = 0x04,\n}\n\nexport enum ChargingMode {\n NONE = 0x00,\n USB = 0x01,\n QI = 0x02,\n}\n\nenum FlagMasks {\n CHARGING = 0x00000001,\n USB = 0x00000002,\n USB_POWERED = 0x00000008,\n BLE = 0x00000004,\n ISSUE_BATTERY = 0x00000080,\n ISSUE_CHARGING = 0x00000010,\n ISSUE_TEMPERATURE = 0x00000020,\n}\n\nexport type BatteryStatusFlags = {\n readonly charging: ChargingMode;\n readonly issueCharging: boolean;\n readonly issueTemperature: boolean;\n readonly issueBattery: boolean;\n};\n\n/**\n * The response type depends on the `statusType` parameter sent with the command,\n * cf. `BatteryStatusType`.\n */\nexport type GetBatteryStatusResponse = number | BatteryStatusFlags;\n\nexport type GetBatteryStatusArgs = {\n readonly statusType: BatteryStatusType;\n};\n\n/**\n * Command to get the battery status of the device.\n * The parameter statusType defines the type of information to retrieve, cf.\n * `BatteryStatusType`.\n *\n * WARNING: this command should not be sent within a logic of polling as it is\n * going to decrease the overall performance of the communication with the device.\n */\nexport class GetBatteryStatusCommand\n implements Command<GetBatteryStatusResponse, GetBatteryStatusArgs>\n{\n readonly name = \"getBatteryStatus\";\n readonly args: GetBatteryStatusArgs;\n\n constructor(args: GetBatteryStatusArgs) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n const getBatteryStatusArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x10,\n p1: 0x00,\n p2: this.args.statusType,\n };\n return new ApduBuilder(getBatteryStatusArgs).build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<GetBatteryStatusResponse> {\n const parser = new ApduParser(apduResponse);\n\n switch (this.args.statusType) {\n case BatteryStatusType.BATTERY_PERCENTAGE: {\n const percentage = parser.extract8BitUInt();\n if (percentage === undefined) {\n return CommandResultFactory({\n error: new InvalidBatteryDataError(\"Cannot parse APDU response\"),\n });\n }\n return CommandResultFactory({\n data: percentage > 100 ? -1 : percentage,\n });\n }\n case BatteryStatusType.BATTERY_VOLTAGE: {\n const data = parser.extract16BitUInt();\n if (data === undefined) {\n return CommandResultFactory({\n error: new InvalidBatteryDataError(\"Cannot parse APDU response\"),\n });\n }\n return CommandResultFactory({\n data,\n });\n }\n case BatteryStatusType.BATTERY_TEMPERATURE:\n case BatteryStatusType.BATTERY_CURRENT: {\n const data = parser.extract8BitUInt();\n if (data === undefined) {\n return CommandResultFactory({\n error: new InvalidBatteryDataError(\"Cannot parse APDU response\"),\n });\n }\n return CommandResultFactory({\n data: (data << 24) >> 24,\n });\n }\n case BatteryStatusType.BATTERY_FLAGS: {\n const flags = parser.extract32BitUInt();\n if (flags === undefined) {\n return CommandResultFactory({\n error: new InvalidBatteryDataError(\"Cannot parse APDU response\"),\n });\n }\n const chargingUSB = !!(flags & FlagMasks.USB_POWERED);\n const chargingQi = !chargingUSB && !!(flags & FlagMasks.CHARGING);\n return CommandResultFactory({\n data: {\n charging: chargingQi\n ? ChargingMode.QI\n : chargingUSB\n ? ChargingMode.USB\n : ChargingMode.NONE,\n issueCharging: !!(flags & FlagMasks.ISSUE_CHARGING),\n issueTemperature: !!(flags & FlagMasks.ISSUE_TEMPERATURE),\n issueBattery: !!(flags & FlagMasks.ISSUE_BATTERY),\n },\n });\n }\n default:\n return CommandResultFactory({\n error: new InvalidBatteryStatusTypeError(\n \"One or some case(s) not covered\",\n ),\n });\n }\n }\n}\n"],
5
- "mappings": "AACA,OAAS,eAAAA,MAAyC,8BAClD,OAAS,cAAAC,MAAkB,6BAE3B,OACE,2BAAAC,EACA,iCAAAC,MACK,sBACP,OAEE,wBAAAC,MACK,mCAMA,IAAKC,OAIVA,IAAA,mBAAqB,GAArB,qBAIAA,IAAA,gBAAkB,GAAlB,kBAIAA,IAAA,oBAAsB,GAAtB,sBAIAA,IAAA,gBAAkB,GAAlB,kBAIAA,IAAA,cAAgB,GAAhB,gBApBUA,OAAA,IAuBAC,OACVA,IAAA,KAAO,GAAP,OACAA,IAAA,IAAM,GAAN,MACAA,IAAA,GAAK,GAAL,KAHUA,OAAA,IAyCL,MAAMC,CAEb,CACW,KAAO,mBACP,KAET,YAAYC,EAA4B,CACtC,KAAK,KAAOA,CACd,CAEA,SAAgB,CACd,MAAMC,EAAwC,CAC5C,IAAK,IACL,IAAK,GACL,GAAI,EACJ,GAAI,KAAK,KAAK,UAChB,EACA,OAAO,IAAIC,EAAYD,CAAoB,EAAE,MAAM,CACrD,CAEA,cACEE,EACyC,CACzC,MAAMC,EAAS,IAAIC,EAAWF,CAAY,EAE1C,OAAQ,KAAK,KAAK,WAAY,CAC5B,IAAK,GAAsC,CACzC,MAAMG,EAAaF,EAAO,gBAAgB,EAC1C,OAAIE,IAAe,OACVC,EAAqB,CAC1B,MAAO,IAAIC,EAAwB,4BAA4B,CACjE,CAAC,EAEID,EAAqB,CAC1B,KAAMD,EAAa,IAAM,GAAKA,CAChC,CAAC,CACH,CACA,IAAK,GAAmC,CACtC,MAAMG,EAAOL,EAAO,iBAAiB,EACrC,OAAIK,IAAS,OACJF,EAAqB,CAC1B,MAAO,IAAIC,EAAwB,4BAA4B,CACjE,CAAC,EAEID,EAAqB,CAC1B,KAAAE,CACF,CAAC,CACH,CACA,IAAK,GACL,IAAK,GAAmC,CACtC,MAAMA,EAAOL,EAAO,gBAAgB,EACpC,OAAIK,IAAS,OACJF,EAAqB,CAC1B,MAAO,IAAIC,EAAwB,4BAA4B,CACjE,CAAC,EAEID,EAAqB,CAC1B,KAAOE,GAAQ,IAAO,EACxB,CAAC,CACH,CACA,IAAK,GAAiC,CACpC,MAAMC,EAAQN,EAAO,iBAAiB,EACtC,GAAIM,IAAU,OACZ,OAAOH,EAAqB,CAC1B,MAAO,IAAIC,EAAwB,4BAA4B,CACjE,CAAC,EAEH,MAAMG,EAAc,CAAC,EAAED,EAAQ,GACzBE,EAAa,CAACD,GAAe,CAAC,EAAED,EAAQ,GAC9C,OAAOH,EAAqB,CAC1B,KAAM,CACJ,SAAUK,EACN,EACAD,EACE,EACA,EACN,cAAe,CAAC,EAAED,EAAQ,IAC1B,iBAAkB,CAAC,EAAEA,EAAQ,IAC7B,aAAc,CAAC,EAAEA,EAAQ,IAC3B,CACF,CAAC,CACH,CACA,QACE,OAAOH,EAAqB,CAC1B,MAAO,IAAIM,EACT,iCACF,CACF,CAAC,CACL,CACF,CACF",
6
- "names": ["ApduBuilder", "ApduParser", "InvalidBatteryDataError", "InvalidBatteryStatusTypeError", "CommandResultFactory", "BatteryStatusType", "ChargingMode", "GetBatteryStatusCommand", "args", "getBatteryStatusArgs", "ApduBuilder", "apduResponse", "parser", "ApduParser", "percentage", "CommandResultFactory", "InvalidBatteryDataError", "data", "flags", "chargingUSB", "chargingQi", "InvalidBatteryStatusTypeError"]
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 { InvalidResponseFormatError } from \"@api/command/Errors\";\nimport {\n type CommandResult,\n CommandResultFactory,\n} from \"@api/command/model/CommandResult\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { GlobalCommandErrorHandler } from \"@api/command/utils/GlobalCommandError\";\nimport { type ApduResponse } from \"@api/device-session/ApduResponse\";\n\n/**\n * The type of battery information to retrieve.\n */\nexport enum BatteryStatusType {\n /**\n * The command response will be the battery percentage.\n */\n BATTERY_PERCENTAGE = 0x00,\n /**\n * The command response will be the battery voltage in mV.\n */\n BATTERY_VOLTAGE = 0x01,\n /**\n * The command response will be the battery temperature in degree celsius\n */\n BATTERY_TEMPERATURE = 0x02,\n /**\n * The command response will be the battery current in mA.\n */\n BATTERY_CURRENT = 0x03,\n /**\n * The command response will be the battery status (cf. `BatteryStatusFlags`)\n */\n BATTERY_FLAGS = 0x04,\n}\n\nexport enum ChargingMode {\n NONE = 0x00,\n USB = 0x01,\n QI = 0x02,\n}\n\nenum FlagMasks {\n CHARGING = 0x00000001,\n USB = 0x00000002,\n USB_POWERED = 0x00000008,\n BLE = 0x00000004,\n ISSUE_BATTERY = 0x00000080,\n ISSUE_CHARGING = 0x00000010,\n ISSUE_TEMPERATURE = 0x00000020,\n}\n\nexport type BatteryStatusFlags = {\n readonly charging: ChargingMode;\n readonly issueCharging: boolean;\n readonly issueTemperature: boolean;\n readonly issueBattery: boolean;\n};\n\n/**\n * The response type depends on the `statusType` parameter sent with the command,\n * cf. `BatteryStatusType`.\n */\nexport type GetBatteryStatusResponse = number | BatteryStatusFlags;\n\nexport type GetBatteryStatusArgs = {\n readonly statusType: BatteryStatusType;\n};\n\n/**\n * Command to get the battery status of the device.\n * The parameter statusType defines the type of information to retrieve, cf.\n * `BatteryStatusType`.\n *\n * WARNING: this command should not be sent within a logic of polling as it is\n * going to decrease the overall performance of the communication with the device.\n */\nexport class GetBatteryStatusCommand\n implements Command<GetBatteryStatusResponse, GetBatteryStatusArgs>\n{\n readonly name = \"getBatteryStatus\";\n readonly args: GetBatteryStatusArgs;\n\n constructor(args: GetBatteryStatusArgs) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n const getBatteryStatusArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x10,\n p1: 0x00,\n p2: this.args.statusType,\n };\n return new ApduBuilder(getBatteryStatusArgs).build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<GetBatteryStatusResponse> {\n if (!CommandUtils.isSuccessResponse(apduResponse)) {\n return CommandResultFactory({\n error: GlobalCommandErrorHandler.handle(apduResponse),\n });\n }\n const parser = new ApduParser(apduResponse);\n const invalidResponseFormat = (message: string) =>\n CommandResultFactory<GetBatteryStatusResponse>({\n error: new InvalidResponseFormatError(message),\n });\n\n switch (this.args.statusType) {\n case BatteryStatusType.BATTERY_PERCENTAGE: {\n const percentage = parser.extract8BitUInt();\n if (percentage === undefined) {\n return invalidResponseFormat(\n \"getBatteryStatus: missing battery percentage in response\",\n );\n }\n return CommandResultFactory({\n data: percentage > 100 ? -1 : percentage,\n });\n }\n case BatteryStatusType.BATTERY_VOLTAGE: {\n const data = parser.extract16BitUInt();\n if (data === undefined) {\n return invalidResponseFormat(\n \"getBatteryStatus: missing battery voltage in response\",\n );\n }\n return CommandResultFactory({\n data,\n });\n }\n case BatteryStatusType.BATTERY_TEMPERATURE:\n case BatteryStatusType.BATTERY_CURRENT: {\n const data = parser.extract8BitUInt();\n if (data === undefined) {\n return invalidResponseFormat(\n this.args.statusType === BatteryStatusType.BATTERY_TEMPERATURE\n ? \"getBatteryStatus: missing battery temperature in response\"\n : \"getBatteryStatus: missing battery current in response\",\n );\n }\n return CommandResultFactory({\n data: (data << 24) >> 24,\n });\n }\n case BatteryStatusType.BATTERY_FLAGS: {\n const flags = parser.extract32BitUInt();\n if (flags === undefined) {\n return invalidResponseFormat(\n \"getBatteryStatus: missing battery flags in response\",\n );\n }\n const chargingUSB = !!(flags & FlagMasks.USB_POWERED);\n const chargingQi = !chargingUSB && !!(flags & FlagMasks.CHARGING);\n return CommandResultFactory({\n data: {\n charging: chargingQi\n ? ChargingMode.QI\n : chargingUSB\n ? ChargingMode.USB\n : ChargingMode.NONE,\n issueCharging: !!(flags & FlagMasks.ISSUE_CHARGING),\n issueTemperature: !!(flags & FlagMasks.ISSUE_TEMPERATURE),\n issueBattery: !!(flags & FlagMasks.ISSUE_BATTERY),\n },\n });\n }\n default:\n return invalidResponseFormat(\n \"getBatteryStatus: unsupported battery status type\",\n );\n }\n }\n}\n"],
5
+ "mappings": "AACA,OAAS,eAAAA,MAAyC,8BAClD,OAAS,cAAAC,MAAkB,6BAE3B,OAAS,8BAAAC,MAAkC,sBAC3C,OAEE,wBAAAC,MACK,mCACP,OAAS,gBAAAC,MAAoB,kCAC7B,OAAS,6BAAAC,MAAiC,wCAMnC,IAAKC,OAIVA,IAAA,mBAAqB,GAArB,qBAIAA,IAAA,gBAAkB,GAAlB,kBAIAA,IAAA,oBAAsB,GAAtB,sBAIAA,IAAA,gBAAkB,GAAlB,kBAIAA,IAAA,cAAgB,GAAhB,gBApBUA,OAAA,IAuBAC,OACVA,IAAA,KAAO,GAAP,OACAA,IAAA,IAAM,GAAN,MACAA,IAAA,GAAK,GAAL,KAHUA,OAAA,IAyCL,MAAMC,CAEb,CACW,KAAO,mBACP,KAET,YAAYC,EAA4B,CACtC,KAAK,KAAOA,CACd,CAEA,SAAgB,CACd,MAAMC,EAAwC,CAC5C,IAAK,IACL,IAAK,GACL,GAAI,EACJ,GAAI,KAAK,KAAK,UAChB,EACA,OAAO,IAAIC,EAAYD,CAAoB,EAAE,MAAM,CACrD,CAEA,cACEE,EACyC,CACzC,GAAI,CAACC,EAAa,kBAAkBD,CAAY,EAC9C,OAAOE,EAAqB,CAC1B,MAAOC,EAA0B,OAAOH,CAAY,CACtD,CAAC,EAEH,MAAMI,EAAS,IAAIC,EAAWL,CAAY,EACpCM,EAAyBC,GAC7BL,EAA+C,CAC7C,MAAO,IAAIM,EAA2BD,CAAO,CAC/C,CAAC,EAEH,OAAQ,KAAK,KAAK,WAAY,CAC5B,IAAK,GAAsC,CACzC,MAAME,EAAaL,EAAO,gBAAgB,EAC1C,OAAIK,IAAe,OACVH,EACL,0DACF,EAEKJ,EAAqB,CAC1B,KAAMO,EAAa,IAAM,GAAKA,CAChC,CAAC,CACH,CACA,IAAK,GAAmC,CACtC,MAAMC,EAAON,EAAO,iBAAiB,EACrC,OAAIM,IAAS,OACJJ,EACL,uDACF,EAEKJ,EAAqB,CAC1B,KAAAQ,CACF,CAAC,CACH,CACA,IAAK,GACL,IAAK,GAAmC,CACtC,MAAMA,EAAON,EAAO,gBAAgB,EACpC,OAAIM,IAAS,OACJJ,EACL,KAAK,KAAK,aAAe,EACrB,4DACA,uDACN,EAEKJ,EAAqB,CAC1B,KAAOQ,GAAQ,IAAO,EACxB,CAAC,CACH,CACA,IAAK,GAAiC,CACpC,MAAMC,EAAQP,EAAO,iBAAiB,EACtC,GAAIO,IAAU,OACZ,OAAOL,EACL,qDACF,EAEF,MAAMM,EAAc,CAAC,EAAED,EAAQ,GACzBE,EAAa,CAACD,GAAe,CAAC,EAAED,EAAQ,GAC9C,OAAOT,EAAqB,CAC1B,KAAM,CACJ,SAAUW,EACN,EACAD,EACE,EACA,EACN,cAAe,CAAC,EAAED,EAAQ,IAC1B,iBAAkB,CAAC,EAAEA,EAAQ,IAC7B,aAAc,CAAC,EAAEA,EAAQ,IAC3B,CACF,CAAC,CACH,CACA,QACE,OAAOL,EACL,mDACF,CACJ,CACF,CACF",
6
+ "names": ["ApduBuilder", "ApduParser", "InvalidResponseFormatError", "CommandResultFactory", "CommandUtils", "GlobalCommandErrorHandler", "BatteryStatusType", "ChargingMode", "GetBatteryStatusCommand", "args", "getBatteryStatusArgs", "ApduBuilder", "apduResponse", "CommandUtils", "CommandResultFactory", "GlobalCommandErrorHandler", "parser", "ApduParser", "invalidResponseFormat", "message", "InvalidResponseFormatError", "percentage", "data", "flags", "chargingUSB", "chargingQi"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{CommandResultFactory as n,isSuccessCommandResult as u}from"../../command/model/CommandResult";import{ApduResponse as r}from"../../device-session/ApduResponse";import{BatteryStatusType as e,ChargingMode as R,GetBatteryStatusCommand as s}from"./GetBatteryStatusCommand";const d=Uint8Array.from([224,16,0,0,0]),i=Uint8Array.from([224,16,0,1,0]),x=Uint8Array.from([224,16,0,2,0]),S=Uint8Array.from([224,16,0,3,0]),m=Uint8Array.from([224,16,0,4,0]),o=Uint8Array.from([55,144,0]),T=Uint8Array.from([15,255,144,0]),c=Uint8Array.from([16,144,0]),A=Uint8Array.from([0,0,0,15,144,0]),p=Uint8Array.from([103,0]);describe("GetBatteryStatus",()=>{describe("name",()=>{it("should be 'getBatteryStatus'",()=>{const t=new s({statusType:e.BATTERY_PERCENTAGE});expect(t.name).toBe("getBatteryStatus")})}),describe("getApdu",()=>{it("should return the GetBatteryStatus APDU",()=>{expect(new s({statusType:e.BATTERY_PERCENTAGE}).getApdu().getRawApdu()).toStrictEqual(d),expect(new s({statusType:e.BATTERY_VOLTAGE}).getApdu().getRawApdu()).toStrictEqual(i),expect(new s({statusType:e.BATTERY_TEMPERATURE}).getApdu().getRawApdu()).toStrictEqual(x),expect(new s({statusType:e.BATTERY_CURRENT}).getApdu().getRawApdu()).toStrictEqual(S),expect(new s({statusType:e.BATTERY_FLAGS}).getApdu().getRawApdu()).toStrictEqual(m)})}),describe("parseResponse",()=>{it("should parse the response when querying percentage",()=>{const t=new r({statusCode:o.slice(-2),data:o.slice(0,-2)}),a=new s({statusType:e.BATTERY_PERCENTAGE}).parseResponse(t);expect(a).toStrictEqual(n({data:55}))}),it("should parse the response when querying voltage",()=>{const t=new r({statusCode:T.slice(-2),data:T.slice(0,-2)}),a=new s({statusType:e.BATTERY_VOLTAGE}).parseResponse(t);expect(a).toStrictEqual(n({data:4095}))}),it("should parse the response when querying temperature",()=>{const t=new r({statusCode:c.slice(-2),data:c.slice(0,-2)}),a=new s({statusType:e.BATTERY_TEMPERATURE}).parseResponse(t);expect(a).toStrictEqual(n({data:16}))}),it("should parse the response when querying flags",()=>{const t=new r({statusCode:A.slice(-2),data:A.slice(0,-2)}),a=new s({statusType:e.BATTERY_FLAGS}).parseResponse(t);expect(a).toStrictEqual(n({data:{charging:R.USB,issueCharging:!1,issueTemperature:!1,issueBattery:!1}}))}),it("should return an error if the response returned unsupported format",()=>{const t=new r({statusCode:p.slice(-2),data:p.slice(0,-2)}),a=new s({statusType:e.BATTERY_PERCENTAGE}).parseResponse(t);expect(u(a)).toBeFalsy()})})});
1
+ import{InvalidResponseFormatError as c}from"../../command/Errors";import{CommandResultFactory as r,isSuccessCommandResult as x}from"../../command/model/CommandResult";import{GlobalCommandErrorHandler as _}from"../../command/utils/GlobalCommandError";import{ApduResponse as n}from"../../device-session/ApduResponse";import{BatteryStatusType as a,ChargingMode as u,GetBatteryStatusCommand as s}from"./GetBatteryStatusCommand";const y=Uint8Array.from([224,16,0,0,0]),g=Uint8Array.from([224,16,0,1,0]),w=Uint8Array.from([224,16,0,2,0]),P=Uint8Array.from([224,16,0,3,0]),h=Uint8Array.from([224,16,0,4,0]),i=Uint8Array.from([55,144,0]),p=Uint8Array.from([101,144,0]),d=Uint8Array.from([15,255,144,0]),T=Uint8Array.from([16,144,0]),S=Uint8Array.from([255,144,0]),m=Uint8Array.from([0,0,0,15,144,0]),R=Uint8Array.from([0,0,0,1,144,0]),l=Uint8Array.from([0,0,0,0,144,0]),E=Uint8Array.from([144,0]),A=Uint8Array.from([103,0]);describe("GetBatteryStatus",()=>{describe("name",()=>{it("should be 'getBatteryStatus'",()=>{const t=new s({statusType:a.BATTERY_PERCENTAGE});expect(t.name).toBe("getBatteryStatus")})}),describe("getApdu",()=>{it("should return the GetBatteryStatus APDU",()=>{expect(new s({statusType:a.BATTERY_PERCENTAGE}).getApdu().getRawApdu()).toStrictEqual(y),expect(new s({statusType:a.BATTERY_VOLTAGE}).getApdu().getRawApdu()).toStrictEqual(g),expect(new s({statusType:a.BATTERY_TEMPERATURE}).getApdu().getRawApdu()).toStrictEqual(w),expect(new s({statusType:a.BATTERY_CURRENT}).getApdu().getRawApdu()).toStrictEqual(P),expect(new s({statusType:a.BATTERY_FLAGS}).getApdu().getRawApdu()).toStrictEqual(h)})}),describe("parseResponse",()=>{it("should parse the response when querying percentage",()=>{const t=new n({statusCode:i.slice(-2),data:i.slice(0,-2)}),e=new s({statusType:a.BATTERY_PERCENTAGE}).parseResponse(t);expect(e).toStrictEqual(r({data:55}))}),it("should return -1 when battery percentage is above 100",()=>{const t=new n({statusCode:p.slice(-2),data:p.slice(0,-2)}),e=new s({statusType:a.BATTERY_PERCENTAGE}).parseResponse(t);expect(e).toStrictEqual(r({data:-1}))}),it("should parse the response when querying voltage",()=>{const t=new n({statusCode:d.slice(-2),data:d.slice(0,-2)}),e=new s({statusType:a.BATTERY_VOLTAGE}).parseResponse(t);expect(e).toStrictEqual(r({data:4095}))}),it("should parse the response when querying temperature",()=>{const t=new n({statusCode:T.slice(-2),data:T.slice(0,-2)}),e=new s({statusType:a.BATTERY_TEMPERATURE}).parseResponse(t);expect(e).toStrictEqual(r({data:16}))}),it("should parse the response when querying current",()=>{const t=new n({statusCode:S.slice(-2),data:S.slice(0,-2)}),e=new s({statusType:a.BATTERY_CURRENT}).parseResponse(t);expect(e).toStrictEqual(r({data:-1}))}),it("should parse the response when querying flags",()=>{const t=new n({statusCode:m.slice(-2),data:m.slice(0,-2)}),e=new s({statusType:a.BATTERY_FLAGS}).parseResponse(t);expect(e).toStrictEqual(r({data:{charging:u.USB,issueCharging:!1,issueTemperature:!1,issueBattery:!1}}))}),it("should parse the response when querying flags with Qi charging",()=>{const t=new n({statusCode:R.slice(-2),data:R.slice(0,-2)}),e=new s({statusType:a.BATTERY_FLAGS}).parseResponse(t);expect(e).toStrictEqual(r({data:{charging:u.QI,issueCharging:!1,issueTemperature:!1,issueBattery:!1}}))}),it("should parse the response when querying flags with no charging",()=>{const t=new n({statusCode:l.slice(-2),data:l.slice(0,-2)}),e=new s({statusType:a.BATTERY_FLAGS}).parseResponse(t);expect(e).toStrictEqual(r({data:{charging:u.NONE,issueCharging:!1,issueTemperature:!1,issueBattery:!1}}))}),it("should return a handled command error when the status word is not successful",()=>{const t=new n({statusCode:A.slice(-2),data:A.slice(0,-2)}),e=new s({statusType:a.BATTERY_PERCENTAGE}).parseResponse(t);expect(e).toStrictEqual(r({error:_.handle(t)}))}),it("should return InvalidResponseFormatError when expected battery data is missing",()=>{const t=new n({statusCode:E.slice(-2),data:E.slice(0,-2)}),e=new s({statusType:a.BATTERY_PERCENTAGE}).parseResponse(t);expect(e).toStrictEqual(r({error:new c("getBatteryStatus: missing battery percentage in response")}))}),it("should return InvalidResponseFormatError when voltage data is missing",()=>{const t=new n({statusCode:E.slice(-2),data:E.slice(0,-2)}),e=new s({statusType:a.BATTERY_VOLTAGE}).parseResponse(t);expect(e).toStrictEqual(r({error:new c("getBatteryStatus: missing battery voltage in response")}))}),it("should return InvalidResponseFormatError when temperature data is missing",()=>{const t=new n({statusCode:E.slice(-2),data:E.slice(0,-2)}),e=new s({statusType:a.BATTERY_TEMPERATURE}).parseResponse(t);expect(e).toStrictEqual(r({error:new c("getBatteryStatus: missing battery temperature in response")}))}),it("should return InvalidResponseFormatError when current data is missing",()=>{const t=new n({statusCode:E.slice(-2),data:E.slice(0,-2)}),e=new s({statusType:a.BATTERY_CURRENT}).parseResponse(t);expect(e).toStrictEqual(r({error:new c("getBatteryStatus: missing battery current in response")}))}),it("should return InvalidResponseFormatError when flags data is missing",()=>{const t=new n({statusCode:E.slice(-2),data:E.slice(0,-2)}),e=new s({statusType:a.BATTERY_FLAGS}).parseResponse(t);expect(e).toStrictEqual(r({error:new c("getBatteryStatus: missing battery flags in response")}))}),it("should return InvalidResponseFormatError when status type is unsupported",()=>{const t=new n({statusCode:i.slice(-2),data:i.slice(0,-2)}),e=new s({statusType:255}).parseResponse(t);expect(x(e)).toBeFalsy(),expect(e).toStrictEqual(r({error:new c("getBatteryStatus: unsupported battery status type")}))})})});
2
2
  //# sourceMappingURL=GetBatteryStatusCommand.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/api/command/os/GetBatteryStatusCommand.test.ts"],
4
- "sourcesContent": ["import {\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@api/command/model/CommandResult\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\n\nimport {\n BatteryStatusType,\n ChargingMode,\n GetBatteryStatusCommand,\n} from \"./GetBatteryStatusCommand\";\n\nconst GET_BATTERY_STATUS_APDU_PERCENTAGE = Uint8Array.from([\n 0xe0, 0x10, 0x00, 0x00, 0x00,\n]);\nconst GET_BATTERY_STATUS_APDU_VOLTAGE = Uint8Array.from([\n 0xe0, 0x10, 0x00, 0x01, 0x00,\n]);\nconst GET_BATTERY_STATUS_APDU_TEMPERATURE = Uint8Array.from([\n 0xe0, 0x10, 0x00, 0x02, 0x00,\n]);\nconst GET_BATTERY_STATUS_APDU_CURRENT = Uint8Array.from([\n 0xe0, 0x10, 0x00, 0x03, 0x00,\n]);\nconst GET_BATTERY_STATUS_APDU_FLAGS = Uint8Array.from([\n 0xe0, 0x10, 0x00, 0x04, 0x00,\n]);\n\nconst PERCENTAGE_RESPONSE_HEX = Uint8Array.from([0x37, 0x90, 0x00]);\nconst VOLTAGE_RESPONSE_HEX = Uint8Array.from([0x0f, 0xff, 0x90, 0x00]);\nconst TEMPERATURE_RESPONSE_HEX = Uint8Array.from([0x10, 0x90, 0x00]);\nconst FLAGS_RESPONSE_HEX = Uint8Array.from([\n 0x00, 0x00, 0x00, 0x0f, 0x90, 0x00,\n]);\nconst FAILED_RESPONSE_HEX = Uint8Array.from([0x67, 0x00]);\n\ndescribe(\"GetBatteryStatus\", () => {\n describe(\"name\", () => {\n it(\"should be 'getBatteryStatus'\", () => {\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_PERCENTAGE,\n });\n expect(command.name).toBe(\"getBatteryStatus\");\n });\n });\n\n describe(\"getApdu\", () => {\n it(\"should return the GetBatteryStatus APDU\", () => {\n expect(\n new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_PERCENTAGE,\n })\n .getApdu()\n .getRawApdu(),\n ).toStrictEqual(GET_BATTERY_STATUS_APDU_PERCENTAGE);\n expect(\n new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_VOLTAGE,\n })\n .getApdu()\n .getRawApdu(),\n ).toStrictEqual(GET_BATTERY_STATUS_APDU_VOLTAGE);\n expect(\n new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_TEMPERATURE,\n })\n .getApdu()\n .getRawApdu(),\n ).toStrictEqual(GET_BATTERY_STATUS_APDU_TEMPERATURE);\n expect(\n new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_CURRENT,\n })\n .getApdu()\n .getRawApdu(),\n ).toStrictEqual(GET_BATTERY_STATUS_APDU_CURRENT);\n expect(\n new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_FLAGS,\n })\n .getApdu()\n .getRawApdu(),\n ).toStrictEqual(GET_BATTERY_STATUS_APDU_FLAGS);\n });\n });\n describe(\"parseResponse\", () => {\n it(\"should parse the response when querying percentage\", () => {\n const PERCENTAGE_RESPONSE = new ApduResponse({\n statusCode: PERCENTAGE_RESPONSE_HEX.slice(-2),\n data: PERCENTAGE_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_PERCENTAGE,\n });\n const parsed = command.parseResponse(PERCENTAGE_RESPONSE);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: 55 }));\n });\n it(\"should parse the response when querying voltage\", () => {\n const VOLTAGE_RESPONSE = new ApduResponse({\n statusCode: VOLTAGE_RESPONSE_HEX.slice(-2),\n data: VOLTAGE_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_VOLTAGE,\n });\n const parsed = command.parseResponse(VOLTAGE_RESPONSE);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: 4095 }));\n });\n it(\"should parse the response when querying temperature\", () => {\n const TEMPERATURE_RESPONSE = new ApduResponse({\n statusCode: TEMPERATURE_RESPONSE_HEX.slice(-2),\n data: TEMPERATURE_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_TEMPERATURE,\n });\n const parsed = command.parseResponse(TEMPERATURE_RESPONSE);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: 16 }));\n });\n it(\"should parse the response when querying flags\", () => {\n const FLAGS_RESPONSE = new ApduResponse({\n statusCode: FLAGS_RESPONSE_HEX.slice(-2),\n data: FLAGS_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_FLAGS,\n });\n const parsed = command.parseResponse(FLAGS_RESPONSE);\n expect(parsed).toStrictEqual(\n CommandResultFactory({\n data: {\n charging: ChargingMode.USB,\n issueCharging: false,\n issueTemperature: false,\n issueBattery: false,\n },\n }),\n );\n });\n it(\"should return an error if the response returned unsupported format\", () => {\n const FAILED_RESPONSE = new ApduResponse({\n statusCode: FAILED_RESPONSE_HEX.slice(-2),\n data: FAILED_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_PERCENTAGE,\n });\n const result = command.parseResponse(FAILED_RESPONSE);\n expect(isSuccessCommandResult(result)).toBeFalsy();\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["CommandResultFactory", "isSuccessCommandResult", "ApduResponse", "BatteryStatusType", "ChargingMode", "GetBatteryStatusCommand", "GET_BATTERY_STATUS_APDU_PERCENTAGE", "GET_BATTERY_STATUS_APDU_VOLTAGE", "GET_BATTERY_STATUS_APDU_TEMPERATURE", "GET_BATTERY_STATUS_APDU_CURRENT", "GET_BATTERY_STATUS_APDU_FLAGS", "PERCENTAGE_RESPONSE_HEX", "VOLTAGE_RESPONSE_HEX", "TEMPERATURE_RESPONSE_HEX", "FLAGS_RESPONSE_HEX", "FAILED_RESPONSE_HEX", "command", "PERCENTAGE_RESPONSE", "parsed", "VOLTAGE_RESPONSE", "TEMPERATURE_RESPONSE", "FLAGS_RESPONSE", "FAILED_RESPONSE", "result"]
4
+ "sourcesContent": ["import { InvalidResponseFormatError } from \"@api/command/Errors\";\nimport {\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@api/command/model/CommandResult\";\nimport { GlobalCommandErrorHandler } from \"@api/command/utils/GlobalCommandError\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\n\nimport {\n BatteryStatusType,\n ChargingMode,\n GetBatteryStatusCommand,\n} from \"./GetBatteryStatusCommand\";\n\nconst GET_BATTERY_STATUS_APDU_PERCENTAGE = Uint8Array.from([\n 0xe0, 0x10, 0x00, 0x00, 0x00,\n]);\nconst GET_BATTERY_STATUS_APDU_VOLTAGE = Uint8Array.from([\n 0xe0, 0x10, 0x00, 0x01, 0x00,\n]);\nconst GET_BATTERY_STATUS_APDU_TEMPERATURE = Uint8Array.from([\n 0xe0, 0x10, 0x00, 0x02, 0x00,\n]);\nconst GET_BATTERY_STATUS_APDU_CURRENT = Uint8Array.from([\n 0xe0, 0x10, 0x00, 0x03, 0x00,\n]);\nconst GET_BATTERY_STATUS_APDU_FLAGS = Uint8Array.from([\n 0xe0, 0x10, 0x00, 0x04, 0x00,\n]);\n\nconst PERCENTAGE_RESPONSE_HEX = Uint8Array.from([0x37, 0x90, 0x00]);\nconst PERCENTAGE_OVERFLOW_RESPONSE_HEX = Uint8Array.from([0x65, 0x90, 0x00]);\nconst VOLTAGE_RESPONSE_HEX = Uint8Array.from([0x0f, 0xff, 0x90, 0x00]);\nconst TEMPERATURE_RESPONSE_HEX = Uint8Array.from([0x10, 0x90, 0x00]);\nconst CURRENT_RESPONSE_HEX = Uint8Array.from([0xff, 0x90, 0x00]);\nconst FLAGS_RESPONSE_HEX = Uint8Array.from([\n 0x00, 0x00, 0x00, 0x0f, 0x90, 0x00,\n]);\nconst QI_FLAGS_RESPONSE_HEX = Uint8Array.from([\n 0x00, 0x00, 0x00, 0x01, 0x90, 0x00,\n]);\nconst NONE_FLAGS_RESPONSE_HEX = Uint8Array.from([\n 0x00, 0x00, 0x00, 0x00, 0x90, 0x00,\n]);\nconst EMPTY_SUCCESS_RESPONSE_HEX = Uint8Array.from([0x90, 0x00]);\nconst FAILED_RESPONSE_HEX = Uint8Array.from([0x67, 0x00]);\n\ndescribe(\"GetBatteryStatus\", () => {\n describe(\"name\", () => {\n it(\"should be 'getBatteryStatus'\", () => {\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_PERCENTAGE,\n });\n expect(command.name).toBe(\"getBatteryStatus\");\n });\n });\n\n describe(\"getApdu\", () => {\n it(\"should return the GetBatteryStatus APDU\", () => {\n expect(\n new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_PERCENTAGE,\n })\n .getApdu()\n .getRawApdu(),\n ).toStrictEqual(GET_BATTERY_STATUS_APDU_PERCENTAGE);\n expect(\n new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_VOLTAGE,\n })\n .getApdu()\n .getRawApdu(),\n ).toStrictEqual(GET_BATTERY_STATUS_APDU_VOLTAGE);\n expect(\n new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_TEMPERATURE,\n })\n .getApdu()\n .getRawApdu(),\n ).toStrictEqual(GET_BATTERY_STATUS_APDU_TEMPERATURE);\n expect(\n new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_CURRENT,\n })\n .getApdu()\n .getRawApdu(),\n ).toStrictEqual(GET_BATTERY_STATUS_APDU_CURRENT);\n expect(\n new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_FLAGS,\n })\n .getApdu()\n .getRawApdu(),\n ).toStrictEqual(GET_BATTERY_STATUS_APDU_FLAGS);\n });\n });\n describe(\"parseResponse\", () => {\n it(\"should parse the response when querying percentage\", () => {\n const PERCENTAGE_RESPONSE = new ApduResponse({\n statusCode: PERCENTAGE_RESPONSE_HEX.slice(-2),\n data: PERCENTAGE_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_PERCENTAGE,\n });\n const parsed = command.parseResponse(PERCENTAGE_RESPONSE);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: 55 }));\n });\n it(\"should return -1 when battery percentage is above 100\", () => {\n const PERCENTAGE_OVERFLOW_RESPONSE = new ApduResponse({\n statusCode: PERCENTAGE_OVERFLOW_RESPONSE_HEX.slice(-2),\n data: PERCENTAGE_OVERFLOW_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_PERCENTAGE,\n });\n const parsed = command.parseResponse(PERCENTAGE_OVERFLOW_RESPONSE);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: -1 }));\n });\n it(\"should parse the response when querying voltage\", () => {\n const VOLTAGE_RESPONSE = new ApduResponse({\n statusCode: VOLTAGE_RESPONSE_HEX.slice(-2),\n data: VOLTAGE_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_VOLTAGE,\n });\n const parsed = command.parseResponse(VOLTAGE_RESPONSE);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: 4095 }));\n });\n it(\"should parse the response when querying temperature\", () => {\n const TEMPERATURE_RESPONSE = new ApduResponse({\n statusCode: TEMPERATURE_RESPONSE_HEX.slice(-2),\n data: TEMPERATURE_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_TEMPERATURE,\n });\n const parsed = command.parseResponse(TEMPERATURE_RESPONSE);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: 16 }));\n });\n it(\"should parse the response when querying current\", () => {\n const CURRENT_RESPONSE = new ApduResponse({\n statusCode: CURRENT_RESPONSE_HEX.slice(-2),\n data: CURRENT_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_CURRENT,\n });\n const parsed = command.parseResponse(CURRENT_RESPONSE);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: -1 }));\n });\n it(\"should parse the response when querying flags\", () => {\n const FLAGS_RESPONSE = new ApduResponse({\n statusCode: FLAGS_RESPONSE_HEX.slice(-2),\n data: FLAGS_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_FLAGS,\n });\n const parsed = command.parseResponse(FLAGS_RESPONSE);\n expect(parsed).toStrictEqual(\n CommandResultFactory({\n data: {\n charging: ChargingMode.USB,\n issueCharging: false,\n issueTemperature: false,\n issueBattery: false,\n },\n }),\n );\n });\n it(\"should parse the response when querying flags with Qi charging\", () => {\n const QI_FLAGS_RESPONSE = new ApduResponse({\n statusCode: QI_FLAGS_RESPONSE_HEX.slice(-2),\n data: QI_FLAGS_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_FLAGS,\n });\n const parsed = command.parseResponse(QI_FLAGS_RESPONSE);\n expect(parsed).toStrictEqual(\n CommandResultFactory({\n data: {\n charging: ChargingMode.QI,\n issueCharging: false,\n issueTemperature: false,\n issueBattery: false,\n },\n }),\n );\n });\n it(\"should parse the response when querying flags with no charging\", () => {\n const NONE_FLAGS_RESPONSE = new ApduResponse({\n statusCode: NONE_FLAGS_RESPONSE_HEX.slice(-2),\n data: NONE_FLAGS_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_FLAGS,\n });\n const parsed = command.parseResponse(NONE_FLAGS_RESPONSE);\n expect(parsed).toStrictEqual(\n CommandResultFactory({\n data: {\n charging: ChargingMode.NONE,\n issueCharging: false,\n issueTemperature: false,\n issueBattery: false,\n },\n }),\n );\n });\n it(\"should return a handled command error when the status word is not successful\", () => {\n const FAILED_RESPONSE = new ApduResponse({\n statusCode: FAILED_RESPONSE_HEX.slice(-2),\n data: FAILED_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_PERCENTAGE,\n });\n const result = command.parseResponse(FAILED_RESPONSE);\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: GlobalCommandErrorHandler.handle(FAILED_RESPONSE),\n }),\n );\n });\n it(\"should return InvalidResponseFormatError when expected battery data is missing\", () => {\n const EMPTY_SUCCESS_RESPONSE = new ApduResponse({\n statusCode: EMPTY_SUCCESS_RESPONSE_HEX.slice(-2),\n data: EMPTY_SUCCESS_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_PERCENTAGE,\n });\n const result = command.parseResponse(EMPTY_SUCCESS_RESPONSE);\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidResponseFormatError(\n \"getBatteryStatus: missing battery percentage in response\",\n ),\n }),\n );\n });\n it(\"should return InvalidResponseFormatError when voltage data is missing\", () => {\n const EMPTY_SUCCESS_RESPONSE = new ApduResponse({\n statusCode: EMPTY_SUCCESS_RESPONSE_HEX.slice(-2),\n data: EMPTY_SUCCESS_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_VOLTAGE,\n });\n const result = command.parseResponse(EMPTY_SUCCESS_RESPONSE);\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidResponseFormatError(\n \"getBatteryStatus: missing battery voltage in response\",\n ),\n }),\n );\n });\n it(\"should return InvalidResponseFormatError when temperature data is missing\", () => {\n const EMPTY_SUCCESS_RESPONSE = new ApduResponse({\n statusCode: EMPTY_SUCCESS_RESPONSE_HEX.slice(-2),\n data: EMPTY_SUCCESS_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_TEMPERATURE,\n });\n const result = command.parseResponse(EMPTY_SUCCESS_RESPONSE);\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidResponseFormatError(\n \"getBatteryStatus: missing battery temperature in response\",\n ),\n }),\n );\n });\n it(\"should return InvalidResponseFormatError when current data is missing\", () => {\n const EMPTY_SUCCESS_RESPONSE = new ApduResponse({\n statusCode: EMPTY_SUCCESS_RESPONSE_HEX.slice(-2),\n data: EMPTY_SUCCESS_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_CURRENT,\n });\n const result = command.parseResponse(EMPTY_SUCCESS_RESPONSE);\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidResponseFormatError(\n \"getBatteryStatus: missing battery current in response\",\n ),\n }),\n );\n });\n it(\"should return InvalidResponseFormatError when flags data is missing\", () => {\n const EMPTY_SUCCESS_RESPONSE = new ApduResponse({\n statusCode: EMPTY_SUCCESS_RESPONSE_HEX.slice(-2),\n data: EMPTY_SUCCESS_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_FLAGS,\n });\n const result = command.parseResponse(EMPTY_SUCCESS_RESPONSE);\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidResponseFormatError(\n \"getBatteryStatus: missing battery flags in response\",\n ),\n }),\n );\n });\n it(\"should return InvalidResponseFormatError when status type is unsupported\", () => {\n const PERCENTAGE_RESPONSE = new ApduResponse({\n statusCode: PERCENTAGE_RESPONSE_HEX.slice(-2),\n data: PERCENTAGE_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: 0xff as BatteryStatusType,\n });\n const result = command.parseResponse(PERCENTAGE_RESPONSE);\n expect(isSuccessCommandResult(result)).toBeFalsy();\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidResponseFormatError(\n \"getBatteryStatus: unsupported battery status type\",\n ),\n }),\n );\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["InvalidResponseFormatError", "CommandResultFactory", "isSuccessCommandResult", "GlobalCommandErrorHandler", "ApduResponse", "BatteryStatusType", "ChargingMode", "GetBatteryStatusCommand", "GET_BATTERY_STATUS_APDU_PERCENTAGE", "GET_BATTERY_STATUS_APDU_VOLTAGE", "GET_BATTERY_STATUS_APDU_TEMPERATURE", "GET_BATTERY_STATUS_APDU_CURRENT", "GET_BATTERY_STATUS_APDU_FLAGS", "PERCENTAGE_RESPONSE_HEX", "PERCENTAGE_OVERFLOW_RESPONSE_HEX", "VOLTAGE_RESPONSE_HEX", "TEMPERATURE_RESPONSE_HEX", "CURRENT_RESPONSE_HEX", "FLAGS_RESPONSE_HEX", "QI_FLAGS_RESPONSE_HEX", "NONE_FLAGS_RESPONSE_HEX", "EMPTY_SUCCESS_RESPONSE_HEX", "FAILED_RESPONSE_HEX", "command", "PERCENTAGE_RESPONSE", "parsed", "PERCENTAGE_OVERFLOW_RESPONSE", "VOLTAGE_RESPONSE", "TEMPERATURE_RESPONSE", "CURRENT_RESPONSE", "FLAGS_RESPONSE", "QI_FLAGS_RESPONSE", "NONE_FLAGS_RESPONSE", "FAILED_RESPONSE", "result", "EMPTY_SUCCESS_RESPONSE"]
7
7
  }
@@ -1,2 +1,2 @@
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"})})});
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{HttpManagerApiDataSource as D}from"../../../internal/manager-api/data/HttpManagerApiDataSource";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,i,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({}),i=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,i,m,f);t.addDeviceSession(e);const s=new a(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 a(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 }, 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
- "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"]
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 { HttpManagerApiDataSource } from \"@internal/manager-api/data/HttpManagerApiDataSource\";\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 HttpManagerApiDataSource({} 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,4BAAAC,MAAgC,sDAEzC,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,EAAyB,CAAC,CAAc,EACnEO,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
+ "names": ["Left", "CommandResultStatus", "DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS", "deviceSessionStubBuilder", "DefaultDeviceSessionService", "DefaultLoggerPublisherService", "HttpManagerApiDataSource", "DefaultManagerApiService", "DefaultSecureChannelDataSource", "DefaultSecureChannelService", "SendCommandUseCase", "logger", "sessionService", "managerApi", "managerApiDataSource", "secureChannel", "secureChannelDataSource", "fakeSessionId", "command", "deviceSession", "useCase", "response", "res"]
7
7
  }