@ledgerhq/device-management-kit 0.0.0-develop-20241017000946 → 0.5.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 (1236) hide show
  1. package/lib/cjs/index.js +1 -6126
  2. package/lib/cjs/index.js.map +4 -4
  3. package/lib/cjs/package.json +64 -0
  4. package/lib/cjs/src/api/DeviceManagementKit.js +2 -0
  5. package/lib/cjs/src/api/DeviceManagementKit.js.map +7 -0
  6. package/lib/cjs/src/api/DeviceManagementKit.test.js +2 -0
  7. package/lib/cjs/src/api/DeviceManagementKit.test.js.map +7 -0
  8. package/lib/cjs/src/api/DeviceManagementKitBuilder.js +2 -0
  9. package/lib/cjs/src/api/DeviceManagementKitBuilder.js.map +7 -0
  10. package/lib/cjs/src/api/DeviceManagementKitBuilder.test.js +2 -0
  11. package/lib/cjs/src/api/DeviceManagementKitBuilder.test.js.map +7 -0
  12. package/lib/cjs/src/api/DmkConfig.js +2 -0
  13. package/lib/cjs/src/api/DmkConfig.js.map +7 -0
  14. package/lib/cjs/src/api/Error.js +2 -0
  15. package/lib/cjs/src/api/Error.js.map +7 -0
  16. package/lib/cjs/src/api/apdu/model/Apdu.js +2 -0
  17. package/lib/cjs/src/api/apdu/model/Apdu.js.map +7 -0
  18. package/lib/cjs/src/api/apdu/model/Apdu.test.js +2 -0
  19. package/lib/cjs/src/api/apdu/model/Apdu.test.js.map +7 -0
  20. package/lib/cjs/src/api/apdu/utils/ApduBuilder.js +2 -0
  21. package/lib/cjs/src/api/apdu/utils/ApduBuilder.js.map +7 -0
  22. package/lib/cjs/src/api/apdu/utils/ApduBuilder.test.js +2 -0
  23. package/lib/cjs/src/api/apdu/utils/ApduBuilder.test.js.map +7 -0
  24. package/lib/cjs/src/api/apdu/utils/ApduParser.js +2 -0
  25. package/lib/cjs/src/api/apdu/utils/ApduParser.js.map +7 -0
  26. package/lib/cjs/src/api/apdu/utils/ApduParser.test.js +2 -0
  27. package/lib/cjs/src/api/apdu/utils/ApduParser.test.js.map +7 -0
  28. package/lib/cjs/src/api/apdu/utils/AppBuilderError.js +2 -0
  29. package/lib/cjs/src/api/apdu/utils/AppBuilderError.js.map +7 -0
  30. package/lib/cjs/src/api/apdu/utils/ByteArrayBuilder.js +2 -0
  31. package/lib/cjs/src/api/apdu/utils/ByteArrayBuilder.js.map +7 -0
  32. package/lib/cjs/src/api/apdu/utils/ByteArrayBuilder.test.js +2 -0
  33. package/lib/cjs/src/api/apdu/utils/ByteArrayBuilder.test.js.map +7 -0
  34. package/lib/cjs/src/api/apdu/utils/ByteArrayParser.js +2 -0
  35. package/lib/cjs/src/api/apdu/utils/ByteArrayParser.js.map +7 -0
  36. package/lib/cjs/src/api/apdu/utils/ByteArrayParser.test.js +2 -0
  37. package/lib/cjs/src/api/apdu/utils/ByteArrayParser.test.js.map +7 -0
  38. package/lib/cjs/src/api/command/Command.js +2 -0
  39. package/lib/cjs/src/api/command/Command.js.map +7 -0
  40. package/lib/cjs/src/api/command/Errors.js +2 -0
  41. package/lib/cjs/src/api/command/Errors.js.map +7 -0
  42. package/lib/cjs/src/api/command/di/commandModule.js +2 -0
  43. package/lib/cjs/src/api/command/di/commandModule.js.map +7 -0
  44. package/lib/cjs/src/api/command/di/commandModule.test.js +2 -0
  45. package/lib/cjs/src/api/command/di/commandModule.test.js.map +7 -0
  46. package/lib/cjs/src/api/command/di/commandTypes.js +2 -0
  47. package/lib/cjs/src/api/command/di/commandTypes.js.map +7 -0
  48. package/lib/cjs/src/api/command/model/CommandResult.js +2 -0
  49. package/lib/cjs/src/api/command/model/CommandResult.js.map +7 -0
  50. package/lib/cjs/src/api/command/model/CommandResult.test.js +2 -0
  51. package/lib/cjs/src/api/command/model/CommandResult.test.js.map +7 -0
  52. package/lib/cjs/src/api/command/os/CloseAppCommand.js +2 -0
  53. package/lib/cjs/src/api/command/os/CloseAppCommand.js.map +7 -0
  54. package/lib/cjs/src/api/command/os/CloseAppCommand.test.js +2 -0
  55. package/lib/cjs/src/api/command/os/CloseAppCommand.test.js.map +7 -0
  56. package/lib/cjs/src/api/command/os/GetAppAndVersionCommand.js +2 -0
  57. package/lib/cjs/src/api/command/os/GetAppAndVersionCommand.js.map +7 -0
  58. package/lib/cjs/src/api/command/os/GetAppAndVersionCommand.test.js +2 -0
  59. package/lib/cjs/src/api/command/os/GetAppAndVersionCommand.test.js.map +7 -0
  60. package/lib/cjs/src/api/command/os/GetBatteryStatusCommand.js +2 -0
  61. package/lib/cjs/src/api/command/os/GetBatteryStatusCommand.js.map +7 -0
  62. package/lib/cjs/src/api/command/os/GetBatteryStatusCommand.test.js +2 -0
  63. package/lib/cjs/src/api/command/os/GetBatteryStatusCommand.test.js.map +7 -0
  64. package/lib/cjs/src/api/command/os/GetOsVersionCommand.js +2 -0
  65. package/lib/cjs/src/api/command/os/GetOsVersionCommand.js.map +7 -0
  66. package/lib/cjs/src/api/command/os/GetOsVersionCommand.test.js +2 -0
  67. package/lib/cjs/src/api/command/os/GetOsVersionCommand.test.js.map +7 -0
  68. package/lib/cjs/src/api/command/os/ListAppsCommand.js +2 -0
  69. package/lib/cjs/src/api/command/os/ListAppsCommand.js.map +7 -0
  70. package/lib/cjs/src/api/command/os/ListAppsCommand.test.js +2 -0
  71. package/lib/cjs/src/api/command/os/ListAppsCommand.test.js.map +7 -0
  72. package/lib/cjs/src/api/command/os/OpenAppCommand.js +2 -0
  73. package/lib/cjs/src/api/command/os/OpenAppCommand.js.map +7 -0
  74. package/lib/cjs/src/api/command/os/OpenAppCommand.test.js +2 -0
  75. package/lib/cjs/src/api/command/os/OpenAppCommand.test.js.map +7 -0
  76. package/lib/cjs/src/api/command/use-case/SendCommandUseCase.js +2 -0
  77. package/lib/cjs/src/api/command/use-case/SendCommandUseCase.js.map +7 -0
  78. package/lib/cjs/src/api/command/use-case/SendCommandUseCase.test.js +2 -0
  79. package/lib/cjs/src/api/command/use-case/SendCommandUseCase.test.js.map +7 -0
  80. package/lib/cjs/src/api/command/utils/CommandErrors.js +2 -0
  81. package/lib/cjs/src/api/command/utils/CommandErrors.js.map +7 -0
  82. package/lib/cjs/src/api/command/utils/CommandUtils.js +2 -0
  83. package/lib/cjs/src/api/command/utils/CommandUtils.js.map +7 -0
  84. package/lib/cjs/src/api/command/utils/CommandUtils.test.js +2 -0
  85. package/lib/cjs/src/api/command/utils/CommandUtils.test.js.map +7 -0
  86. package/lib/cjs/src/api/command/utils/GlobalCommandError.js +2 -0
  87. package/lib/cjs/src/api/command/utils/GlobalCommandError.js.map +7 -0
  88. package/lib/cjs/src/api/command/utils/GlobalCommandError.test.js +2 -0
  89. package/lib/cjs/src/api/command/utils/GlobalCommandError.test.js.map +7 -0
  90. package/lib/cjs/src/api/device/DeviceModel.js +2 -0
  91. package/lib/cjs/src/api/device/DeviceModel.js.map +7 -0
  92. package/lib/cjs/src/api/device/DeviceStatus.js +2 -0
  93. package/lib/cjs/src/api/device/DeviceStatus.js.map +7 -0
  94. package/lib/cjs/src/api/device-action/DeviceAction.js +2 -0
  95. package/lib/cjs/src/api/device-action/DeviceAction.js.map +7 -0
  96. package/lib/cjs/src/api/device-action/__test-utils__/data.js +2 -0
  97. package/lib/cjs/src/api/device-action/__test-utils__/data.js.map +7 -0
  98. package/lib/cjs/src/api/device-action/__test-utils__/makeInternalApi.js +2 -0
  99. package/lib/cjs/src/api/device-action/__test-utils__/makeInternalApi.js.map +7 -0
  100. package/lib/cjs/src/api/device-action/__test-utils__/setupTestMachine.js +2 -0
  101. package/lib/cjs/src/api/device-action/__test-utils__/setupTestMachine.js.map +7 -0
  102. package/lib/cjs/src/api/device-action/__test-utils__/testDeviceActionStates.js +2 -0
  103. package/lib/cjs/src/api/device-action/__test-utils__/testDeviceActionStates.js.map +7 -0
  104. package/lib/cjs/src/api/device-action/di/deviceActionModule.js +2 -0
  105. package/lib/cjs/src/api/device-action/di/deviceActionModule.js.map +7 -0
  106. package/lib/cjs/src/api/device-action/di/deviceActionModule.test.js +2 -0
  107. package/lib/cjs/src/api/device-action/di/deviceActionModule.test.js.map +7 -0
  108. package/lib/cjs/src/api/device-action/di/deviceActionTypes.js +2 -0
  109. package/lib/cjs/src/api/device-action/di/deviceActionTypes.js.map +7 -0
  110. package/lib/cjs/src/api/device-action/model/DeviceActionState.js +2 -0
  111. package/lib/cjs/src/api/device-action/model/DeviceActionState.js.map +7 -0
  112. package/lib/cjs/src/api/device-action/model/UserInteractionRequired.js +2 -0
  113. package/lib/cjs/src/api/device-action/model/UserInteractionRequired.js.map +7 -0
  114. package/lib/cjs/src/api/device-action/os/Const.js +2 -0
  115. package/lib/cjs/src/api/device-action/os/Const.js.map +7 -0
  116. package/lib/cjs/src/api/device-action/os/Errors.js +2 -0
  117. package/lib/cjs/src/api/device-action/os/Errors.js.map +7 -0
  118. package/lib/cjs/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.js +2 -0
  119. package/lib/cjs/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.js.map +7 -0
  120. package/lib/cjs/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.test.js +2 -0
  121. package/lib/cjs/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.test.js.map +7 -0
  122. package/lib/cjs/src/api/device-action/os/GetDeviceStatus/types.js +2 -0
  123. package/lib/cjs/src/api/device-action/os/GetDeviceStatus/types.js.map +7 -0
  124. package/lib/cjs/src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.js +2 -0
  125. package/lib/cjs/src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.js.map +7 -0
  126. package/lib/cjs/src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.test.js +2 -0
  127. package/lib/cjs/src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.test.js.map +7 -0
  128. package/lib/cjs/src/api/device-action/os/GoToDashboard/types.js +2 -0
  129. package/lib/cjs/src/api/device-action/os/GoToDashboard/types.js.map +7 -0
  130. package/lib/cjs/src/api/device-action/os/ListApps/ListAppsDeviceAction.js +2 -0
  131. package/lib/cjs/src/api/device-action/os/ListApps/ListAppsDeviceAction.js.map +7 -0
  132. package/lib/cjs/src/api/device-action/os/ListApps/ListAppsDeviceAction.test.js +2 -0
  133. package/lib/cjs/src/api/device-action/os/ListApps/ListAppsDeviceAction.test.js.map +7 -0
  134. package/lib/cjs/src/api/device-action/os/ListApps/types.js +2 -0
  135. package/lib/cjs/src/api/device-action/os/ListApps/types.js.map +7 -0
  136. package/lib/cjs/src/api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction.js +2 -0
  137. package/lib/cjs/src/api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction.js.map +7 -0
  138. package/lib/cjs/src/api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction.test.js +2 -0
  139. package/lib/cjs/src/api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction.test.js.map +7 -0
  140. package/lib/cjs/src/api/device-action/os/ListAppsWithMetadata/types.js +2 -0
  141. package/lib/cjs/src/api/device-action/os/ListAppsWithMetadata/types.js.map +7 -0
  142. package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.js +2 -0
  143. package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.js.map +7 -0
  144. package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.test.js +2 -0
  145. package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.test.js.map +7 -0
  146. package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/types.js +2 -0
  147. package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/types.js.map +7 -0
  148. package/lib/cjs/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.js +2 -0
  149. package/lib/cjs/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.js.map +7 -0
  150. package/lib/cjs/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.test.js +2 -0
  151. package/lib/cjs/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.test.js.map +7 -0
  152. package/lib/cjs/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceActionTypes.js +2 -0
  153. package/lib/cjs/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceActionTypes.js.map +7 -0
  154. package/lib/cjs/src/api/device-action/use-case/ExecuteDeviceActionUseCase.js +2 -0
  155. package/lib/cjs/src/api/device-action/use-case/ExecuteDeviceActionUseCase.js.map +7 -0
  156. package/lib/cjs/src/api/device-action/xstate-utils/StateMachineTypes.js +2 -0
  157. package/lib/cjs/src/api/device-action/xstate-utils/StateMachineTypes.js.map +7 -0
  158. package/lib/cjs/src/api/device-action/xstate-utils/XStateDeviceAction.js +2 -0
  159. package/lib/cjs/src/api/device-action/xstate-utils/XStateDeviceAction.js.map +7 -0
  160. package/lib/cjs/src/api/device-session/ApduResponse.js +2 -0
  161. package/lib/cjs/src/api/device-session/ApduResponse.js.map +7 -0
  162. package/lib/cjs/src/api/device-session/ApduResponse.stub.js +2 -0
  163. package/lib/cjs/src/api/device-session/ApduResponse.stub.js.map +7 -0
  164. package/lib/cjs/src/api/device-session/DeviceSessionState.js +2 -0
  165. package/lib/cjs/src/api/device-session/DeviceSessionState.js.map +7 -0
  166. package/lib/cjs/src/api/device-session/types.js +2 -0
  167. package/lib/cjs/src/api/device-session/types.js.map +7 -0
  168. package/lib/cjs/src/api/discovery/ConnectionType.js +2 -0
  169. package/lib/cjs/src/api/discovery/ConnectionType.js.map +7 -0
  170. package/lib/cjs/src/api/index.js +2 -0
  171. package/lib/cjs/src/api/index.js.map +7 -0
  172. package/lib/cjs/src/api/logger-subscriber/__mocks__/ConsoleLogger.js +2 -0
  173. package/lib/cjs/src/api/logger-subscriber/__mocks__/ConsoleLogger.js.map +7 -0
  174. package/lib/cjs/src/api/logger-subscriber/model/LogLevel.js +2 -0
  175. package/lib/cjs/src/api/logger-subscriber/model/LogLevel.js.map +7 -0
  176. package/lib/cjs/src/api/logger-subscriber/model/LogSubscriberOptions.js +2 -0
  177. package/lib/cjs/src/api/logger-subscriber/model/LogSubscriberOptions.js.map +7 -0
  178. package/lib/cjs/src/api/logger-subscriber/service/ConsoleLogger.js +2 -0
  179. package/lib/cjs/src/api/logger-subscriber/service/ConsoleLogger.js.map +7 -0
  180. package/lib/cjs/src/api/logger-subscriber/service/ConsoleLogger.test.js +2 -0
  181. package/lib/cjs/src/api/logger-subscriber/service/ConsoleLogger.test.js.map +7 -0
  182. package/lib/cjs/src/api/logger-subscriber/service/LoggerSubscriberService.js +2 -0
  183. package/lib/cjs/src/api/logger-subscriber/service/LoggerSubscriberService.js.map +7 -0
  184. package/lib/cjs/src/api/logger-subscriber/service/WebLogsExporterLogger.js +2 -0
  185. package/lib/cjs/src/api/logger-subscriber/service/WebLogsExporterLogger.js.map +7 -0
  186. package/lib/cjs/src/api/logger-subscriber/service/WebLogsExporterLogger.test.js +2 -0
  187. package/lib/cjs/src/api/logger-subscriber/service/WebLogsExporterLogger.test.js.map +7 -0
  188. package/lib/cjs/src/api/transport/model/ConnectedDevice.js +2 -0
  189. package/lib/cjs/src/api/transport/model/ConnectedDevice.js.map +7 -0
  190. package/lib/cjs/src/api/transport/model/DiscoveredDevice.js +2 -0
  191. package/lib/cjs/src/api/transport/model/DiscoveredDevice.js.map +7 -0
  192. package/lib/cjs/src/api/transport/model/Transport.js +2 -0
  193. package/lib/cjs/src/api/transport/model/Transport.js.map +7 -0
  194. package/lib/cjs/src/api/transport/model/TransportIdentifier.js +2 -0
  195. package/lib/cjs/src/api/transport/model/TransportIdentifier.js.map +7 -0
  196. package/lib/cjs/src/api/types.js +2 -0
  197. package/lib/cjs/src/api/types.js.map +7 -0
  198. package/lib/cjs/src/api/utils/Base64String.js +2 -0
  199. package/lib/cjs/src/api/utils/Base64String.js.map +7 -0
  200. package/lib/cjs/src/api/utils/Base64String.test.js +2 -0
  201. package/lib/cjs/src/api/utils/Base64String.test.js.map +7 -0
  202. package/lib/cjs/src/api/utils/HexaString.js +2 -0
  203. package/lib/cjs/src/api/utils/HexaString.js.map +7 -0
  204. package/lib/cjs/src/api/utils/HexaString.test.js +2 -0
  205. package/lib/cjs/src/api/utils/HexaString.test.js.map +7 -0
  206. package/lib/cjs/src/di.js +2 -0
  207. package/lib/cjs/src/di.js.map +7 -0
  208. package/lib/cjs/src/di.stub.js +2 -0
  209. package/lib/cjs/src/di.stub.js.map +7 -0
  210. package/lib/cjs/src/index.js +2 -0
  211. package/lib/cjs/src/index.js.map +7 -0
  212. package/lib/cjs/src/internal/config/data/ConfigDataSource.js +2 -0
  213. package/lib/cjs/src/internal/config/data/ConfigDataSource.js.map +7 -0
  214. package/lib/cjs/src/internal/config/data/Dto.js +2 -0
  215. package/lib/cjs/src/internal/config/data/Dto.js.map +7 -0
  216. package/lib/cjs/src/internal/config/data/LocalConfigDataSource.js +2 -0
  217. package/lib/cjs/src/internal/config/data/LocalConfigDataSource.js.map +7 -0
  218. package/lib/cjs/src/internal/config/data/LocalConfigDataSource.stub.js +2 -0
  219. package/lib/cjs/src/internal/config/data/LocalConfigDataSource.stub.js.map +7 -0
  220. package/lib/cjs/src/internal/config/data/LocalConfigDataSource.test.js +2 -0
  221. package/lib/cjs/src/internal/config/data/LocalConfigDataSource.test.js.map +7 -0
  222. package/lib/cjs/src/internal/config/data/RemoteConfigDataSource.js +2 -0
  223. package/lib/cjs/src/internal/config/data/RemoteConfigDataSource.js.map +7 -0
  224. package/lib/cjs/src/internal/config/data/RemoteConfigDataSource.stub.js +2 -0
  225. package/lib/cjs/src/internal/config/data/RemoteConfigDataSource.stub.js.map +7 -0
  226. package/lib/cjs/src/internal/config/data/RemoteConfigDataSource.test.js +2 -0
  227. package/lib/cjs/src/internal/config/data/RemoteConfigDataSource.test.js.map +7 -0
  228. package/lib/cjs/src/internal/config/data/__mocks__/LocalConfigDataSource.js +2 -0
  229. package/lib/cjs/src/internal/config/data/__mocks__/LocalConfigDataSource.js.map +7 -0
  230. package/lib/cjs/src/internal/config/data/__mocks__/RemoteConfigDataSource.js +2 -0
  231. package/lib/cjs/src/internal/config/data/__mocks__/RemoteConfigDataSource.js.map +7 -0
  232. package/lib/cjs/src/internal/config/di/configModule.js +2 -0
  233. package/lib/cjs/src/internal/config/di/configModule.js.map +7 -0
  234. package/lib/cjs/src/internal/config/di/configModule.test.js +2 -0
  235. package/lib/cjs/src/internal/config/di/configModule.test.js.map +7 -0
  236. package/lib/cjs/src/internal/config/di/configTypes.js +2 -0
  237. package/lib/cjs/src/internal/config/di/configTypes.js.map +7 -0
  238. package/lib/cjs/src/internal/config/model/Config.js +2 -0
  239. package/lib/cjs/src/internal/config/model/Config.js.map +7 -0
  240. package/lib/cjs/src/internal/config/model/Errors.js +2 -0
  241. package/lib/cjs/src/internal/config/model/Errors.js.map +7 -0
  242. package/lib/cjs/src/internal/config/service/ConfigService.js +2 -0
  243. package/lib/cjs/src/internal/config/service/ConfigService.js.map +7 -0
  244. package/lib/cjs/src/internal/config/service/DefaultConfigService.js +2 -0
  245. package/lib/cjs/src/internal/config/service/DefaultConfigService.js.map +7 -0
  246. package/lib/cjs/src/internal/config/service/DefaultConfigService.test.js +2 -0
  247. package/lib/cjs/src/internal/config/service/DefaultConfigService.test.js.map +7 -0
  248. package/lib/cjs/src/internal/config/use-case/GetDmkVersionUseCase.js +2 -0
  249. package/lib/cjs/src/internal/config/use-case/GetDmkVersionUseCase.js.map +7 -0
  250. package/lib/cjs/src/internal/config/use-case/GetDmkVersionUseCase.test.js +2 -0
  251. package/lib/cjs/src/internal/config/use-case/GetDmkVersionUseCase.test.js.map +7 -0
  252. package/lib/cjs/src/internal/device-model/data/DeviceModelDataSource.js +2 -0
  253. package/lib/cjs/src/internal/device-model/data/DeviceModelDataSource.js.map +7 -0
  254. package/lib/cjs/src/internal/device-model/data/StaticDeviceModelDataSource.js +2 -0
  255. package/lib/cjs/src/internal/device-model/data/StaticDeviceModelDataSource.js.map +7 -0
  256. package/lib/cjs/src/internal/device-model/data/StaticDeviceModelDataSource.test.js +2 -0
  257. package/lib/cjs/src/internal/device-model/data/StaticDeviceModelDataSource.test.js.map +7 -0
  258. package/lib/cjs/src/internal/device-model/di/deviceModelModule.js +2 -0
  259. package/lib/cjs/src/internal/device-model/di/deviceModelModule.js.map +7 -0
  260. package/lib/cjs/src/internal/device-model/di/deviceModelModule.test.js +2 -0
  261. package/lib/cjs/src/internal/device-model/di/deviceModelModule.test.js.map +7 -0
  262. package/lib/cjs/src/internal/device-model/di/deviceModelTypes.js +2 -0
  263. package/lib/cjs/src/internal/device-model/di/deviceModelTypes.js.map +7 -0
  264. package/lib/cjs/src/internal/device-model/model/DeviceModel.js +2 -0
  265. package/lib/cjs/src/internal/device-model/model/DeviceModel.js.map +7 -0
  266. package/lib/cjs/src/internal/device-model/model/DeviceModel.stub.js +2 -0
  267. package/lib/cjs/src/internal/device-model/model/DeviceModel.stub.js.map +7 -0
  268. package/lib/cjs/src/internal/device-model/model/DeviceModel.test.js +2 -0
  269. package/lib/cjs/src/internal/device-model/model/DeviceModel.test.js.map +7 -0
  270. package/lib/cjs/src/internal/device-session/data/ApduResponseConst.js +2 -0
  271. package/lib/cjs/src/internal/device-session/data/ApduResponseConst.js.map +7 -0
  272. package/lib/cjs/src/internal/device-session/data/DeviceSessionRefresherConst.js +2 -0
  273. package/lib/cjs/src/internal/device-session/data/DeviceSessionRefresherConst.js.map +7 -0
  274. package/lib/cjs/src/internal/device-session/data/FramerConst.js +2 -0
  275. package/lib/cjs/src/internal/device-session/data/FramerConst.js.map +7 -0
  276. package/lib/cjs/src/internal/device-session/di/deviceSessionModule.js +2 -0
  277. package/lib/cjs/src/internal/device-session/di/deviceSessionModule.js.map +7 -0
  278. package/lib/cjs/src/internal/device-session/di/deviceSessionModule.test.js +2 -0
  279. package/lib/cjs/src/internal/device-session/di/deviceSessionModule.test.js.map +7 -0
  280. package/lib/cjs/src/internal/device-session/di/deviceSessionTypes.js +2 -0
  281. package/lib/cjs/src/internal/device-session/di/deviceSessionTypes.js.map +7 -0
  282. package/lib/cjs/src/internal/device-session/model/DeviceSession.js +2 -0
  283. package/lib/cjs/src/internal/device-session/model/DeviceSession.js.map +7 -0
  284. package/lib/cjs/src/internal/device-session/model/DeviceSession.stub.js +2 -0
  285. package/lib/cjs/src/internal/device-session/model/DeviceSession.stub.js.map +7 -0
  286. package/lib/cjs/src/internal/device-session/model/DeviceSessionRefresher.js +2 -0
  287. package/lib/cjs/src/internal/device-session/model/DeviceSessionRefresher.js.map +7 -0
  288. package/lib/cjs/src/internal/device-session/model/DeviceSessionRefresher.test.js +2 -0
  289. package/lib/cjs/src/internal/device-session/model/DeviceSessionRefresher.test.js.map +7 -0
  290. package/lib/cjs/src/internal/device-session/model/Errors.js +2 -0
  291. package/lib/cjs/src/internal/device-session/model/Errors.js.map +7 -0
  292. package/lib/cjs/src/internal/device-session/model/Frame.js +2 -0
  293. package/lib/cjs/src/internal/device-session/model/Frame.js.map +7 -0
  294. package/lib/cjs/src/internal/device-session/model/FrameHeader.js +2 -0
  295. package/lib/cjs/src/internal/device-session/model/FrameHeader.js.map +7 -0
  296. package/lib/cjs/src/internal/device-session/service/ApduReceiverService.js +2 -0
  297. package/lib/cjs/src/internal/device-session/service/ApduReceiverService.js.map +7 -0
  298. package/lib/cjs/src/internal/device-session/service/ApduSenderService.js +2 -0
  299. package/lib/cjs/src/internal/device-session/service/ApduSenderService.js.map +7 -0
  300. package/lib/cjs/src/internal/device-session/service/DefaultApduReceiverService.js +2 -0
  301. package/lib/cjs/src/internal/device-session/service/DefaultApduReceiverService.js.map +7 -0
  302. package/lib/cjs/src/internal/device-session/service/DefaultApduReceiverService.stub.js +2 -0
  303. package/lib/cjs/src/internal/device-session/service/DefaultApduReceiverService.stub.js.map +7 -0
  304. package/lib/cjs/src/internal/device-session/service/DefaultApduReceiverService.test.js +2 -0
  305. package/lib/cjs/src/internal/device-session/service/DefaultApduReceiverService.test.js.map +7 -0
  306. package/lib/cjs/src/internal/device-session/service/DefaultApduSenderService.js +2 -0
  307. package/lib/cjs/src/internal/device-session/service/DefaultApduSenderService.js.map +7 -0
  308. package/lib/cjs/src/internal/device-session/service/DefaultApduSenderService.stub.js +2 -0
  309. package/lib/cjs/src/internal/device-session/service/DefaultApduSenderService.stub.js.map +7 -0
  310. package/lib/cjs/src/internal/device-session/service/DefaultApduSenderService.test.js +2 -0
  311. package/lib/cjs/src/internal/device-session/service/DefaultApduSenderService.test.js.map +7 -0
  312. package/lib/cjs/src/internal/device-session/service/DefaultDeviceSessionService.js +2 -0
  313. package/lib/cjs/src/internal/device-session/service/DefaultDeviceSessionService.js.map +7 -0
  314. package/lib/cjs/src/internal/device-session/service/DefaultDeviceSessionService.test.js +2 -0
  315. package/lib/cjs/src/internal/device-session/service/DefaultDeviceSessionService.test.js.map +7 -0
  316. package/lib/cjs/src/internal/device-session/service/DeviceSessionService.js +2 -0
  317. package/lib/cjs/src/internal/device-session/service/DeviceSessionService.js.map +7 -0
  318. package/lib/cjs/src/internal/device-session/use-case/CloseSessionsUseCase.js +2 -0
  319. package/lib/cjs/src/internal/device-session/use-case/CloseSessionsUseCase.js.map +7 -0
  320. package/lib/cjs/src/internal/device-session/use-case/CloseSessionsUseState.test.js +2 -0
  321. package/lib/cjs/src/internal/device-session/use-case/CloseSessionsUseState.test.js.map +7 -0
  322. package/lib/cjs/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.js +2 -0
  323. package/lib/cjs/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.js.map +7 -0
  324. package/lib/cjs/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.js +2 -0
  325. package/lib/cjs/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.js.map +7 -0
  326. package/lib/cjs/src/internal/device-session/utils/FramerUtils.js +2 -0
  327. package/lib/cjs/src/internal/device-session/utils/FramerUtils.js.map +7 -0
  328. package/lib/cjs/src/internal/device-session/utils/FramerUtils.test.js +2 -0
  329. package/lib/cjs/src/internal/device-session/utils/FramerUtils.test.js.map +7 -0
  330. package/lib/cjs/src/internal/discovery/di/discoveryModule.js +2 -0
  331. package/lib/cjs/src/internal/discovery/di/discoveryModule.js.map +7 -0
  332. package/lib/cjs/src/internal/discovery/di/discoveryModule.test.js +2 -0
  333. package/lib/cjs/src/internal/discovery/di/discoveryModule.test.js.map +7 -0
  334. package/lib/cjs/src/internal/discovery/di/discoveryTypes.js +2 -0
  335. package/lib/cjs/src/internal/discovery/di/discoveryTypes.js.map +7 -0
  336. package/lib/cjs/src/internal/discovery/use-case/ConnectUseCase.js +2 -0
  337. package/lib/cjs/src/internal/discovery/use-case/ConnectUseCase.js.map +7 -0
  338. package/lib/cjs/src/internal/discovery/use-case/ConnectUseCase.test.js +2 -0
  339. package/lib/cjs/src/internal/discovery/use-case/ConnectUseCase.test.js.map +7 -0
  340. package/lib/cjs/src/internal/discovery/use-case/DisconnectUseCase.js +2 -0
  341. package/lib/cjs/src/internal/discovery/use-case/DisconnectUseCase.js.map +7 -0
  342. package/lib/cjs/src/internal/discovery/use-case/DisconnectUseCase.test.js +2 -0
  343. package/lib/cjs/src/internal/discovery/use-case/DisconnectUseCase.test.js.map +7 -0
  344. package/lib/cjs/src/internal/discovery/use-case/GetConnectedDeviceUseCase.js +2 -0
  345. package/lib/cjs/src/internal/discovery/use-case/GetConnectedDeviceUseCase.js.map +7 -0
  346. package/lib/cjs/src/internal/discovery/use-case/GetConnectedDeviceUseCase.test.js +2 -0
  347. package/lib/cjs/src/internal/discovery/use-case/GetConnectedDeviceUseCase.test.js.map +7 -0
  348. package/lib/cjs/src/internal/discovery/use-case/ListConnectedDevicesUseCase.js +2 -0
  349. package/lib/cjs/src/internal/discovery/use-case/ListConnectedDevicesUseCase.js.map +7 -0
  350. package/lib/cjs/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.js +2 -0
  351. package/lib/cjs/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.js.map +7 -0
  352. package/lib/cjs/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.js +2 -0
  353. package/lib/cjs/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.js.map +7 -0
  354. package/lib/cjs/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.js +2 -0
  355. package/lib/cjs/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.js.map +7 -0
  356. package/lib/cjs/src/internal/discovery/use-case/ListenToKnownDevicesUseCase.js +2 -0
  357. package/lib/cjs/src/internal/discovery/use-case/ListenToKnownDevicesUseCase.js.map +7 -0
  358. package/lib/cjs/src/internal/discovery/use-case/ListenToKnownDevicesUseCase.test.js +2 -0
  359. package/lib/cjs/src/internal/discovery/use-case/ListenToKnownDevicesUseCase.test.js.map +7 -0
  360. package/lib/cjs/src/internal/discovery/use-case/StartDiscoveringUseCase.js +2 -0
  361. package/lib/cjs/src/internal/discovery/use-case/StartDiscoveringUseCase.js.map +7 -0
  362. package/lib/cjs/src/internal/discovery/use-case/StartDiscoveringUseCase.test.js +2 -0
  363. package/lib/cjs/src/internal/discovery/use-case/StartDiscoveringUseCase.test.js.map +7 -0
  364. package/lib/cjs/src/internal/discovery/use-case/StopDiscoveringUseCase.js +2 -0
  365. package/lib/cjs/src/internal/discovery/use-case/StopDiscoveringUseCase.js.map +7 -0
  366. package/lib/cjs/src/internal/discovery/use-case/StopDiscoveringUseCase.test.js +2 -0
  367. package/lib/cjs/src/internal/discovery/use-case/StopDiscoveringUseCase.test.js.map +7 -0
  368. package/lib/cjs/src/internal/logger-publisher/di/loggerModule.js +2 -0
  369. package/lib/cjs/src/internal/logger-publisher/di/loggerModule.js.map +7 -0
  370. package/lib/cjs/src/internal/logger-publisher/di/loggerModule.test.js +2 -0
  371. package/lib/cjs/src/internal/logger-publisher/di/loggerModule.test.js.map +7 -0
  372. package/lib/cjs/src/internal/logger-publisher/di/loggerTypes.js +2 -0
  373. package/lib/cjs/src/internal/logger-publisher/di/loggerTypes.js.map +7 -0
  374. package/lib/cjs/src/internal/logger-publisher/model/LogPublisherOptions.js +2 -0
  375. package/lib/cjs/src/internal/logger-publisher/model/LogPublisherOptions.js.map +7 -0
  376. package/lib/cjs/src/internal/logger-publisher/service/DefaultLoggerPublisherService.js +2 -0
  377. package/lib/cjs/src/internal/logger-publisher/service/DefaultLoggerPublisherService.js.map +7 -0
  378. package/lib/cjs/src/internal/logger-publisher/service/DefaultLoggerPublisherService.test.js +2 -0
  379. package/lib/cjs/src/internal/logger-publisher/service/DefaultLoggerPublisherService.test.js.map +7 -0
  380. package/lib/cjs/src/internal/logger-publisher/service/LoggerPublisherService.js +2 -0
  381. package/lib/cjs/src/internal/logger-publisher/service/LoggerPublisherService.js.map +7 -0
  382. package/lib/cjs/src/internal/logger-publisher/service/__mocks__/DefaultLoggerService.js +2 -0
  383. package/lib/cjs/src/internal/logger-publisher/service/__mocks__/DefaultLoggerService.js.map +7 -0
  384. package/lib/cjs/src/internal/manager-api/data/AxiosManagerApiDataSource.js +2 -0
  385. package/lib/cjs/src/internal/manager-api/data/AxiosManagerApiDataSource.js.map +7 -0
  386. package/lib/cjs/src/internal/manager-api/data/AxiosManagerApiDataSource.test.js +2 -0
  387. package/lib/cjs/src/internal/manager-api/data/AxiosManagerApiDataSource.test.js.map +7 -0
  388. package/lib/cjs/src/internal/manager-api/data/ManagerApiDataSource.js +2 -0
  389. package/lib/cjs/src/internal/manager-api/data/ManagerApiDataSource.js.map +7 -0
  390. package/lib/cjs/src/internal/manager-api/data/ManagerApiDto.js +2 -0
  391. package/lib/cjs/src/internal/manager-api/data/ManagerApiDto.js.map +7 -0
  392. package/lib/cjs/src/internal/manager-api/data/__mocks__/AxiosManagerApiDataSource.js +2 -0
  393. package/lib/cjs/src/internal/manager-api/data/__mocks__/AxiosManagerApiDataSource.js.map +7 -0
  394. package/lib/cjs/src/internal/manager-api/di/managerApiModule.js +2 -0
  395. package/lib/cjs/src/internal/manager-api/di/managerApiModule.js.map +7 -0
  396. package/lib/cjs/src/internal/manager-api/di/managerApiModule.test.js +2 -0
  397. package/lib/cjs/src/internal/manager-api/di/managerApiModule.test.js.map +7 -0
  398. package/lib/cjs/src/internal/manager-api/di/managerApiTypes.js +2 -0
  399. package/lib/cjs/src/internal/manager-api/di/managerApiTypes.js.map +7 -0
  400. package/lib/cjs/src/internal/manager-api/model/Const.js +2 -0
  401. package/lib/cjs/src/internal/manager-api/model/Const.js.map +7 -0
  402. package/lib/cjs/src/internal/manager-api/model/Errors.js +2 -0
  403. package/lib/cjs/src/internal/manager-api/model/Errors.js.map +7 -0
  404. package/lib/cjs/src/internal/manager-api/model/ManagerApiType.js +2 -0
  405. package/lib/cjs/src/internal/manager-api/model/ManagerApiType.js.map +7 -0
  406. package/lib/cjs/src/internal/manager-api/service/DefaultManagerApiService.js +2 -0
  407. package/lib/cjs/src/internal/manager-api/service/DefaultManagerApiService.js.map +7 -0
  408. package/lib/cjs/src/internal/manager-api/service/DefaultManagerApiService.test.js +2 -0
  409. package/lib/cjs/src/internal/manager-api/service/DefaultManagerApiService.test.js.map +7 -0
  410. package/lib/cjs/src/internal/manager-api/service/ManagerApiService.js +2 -0
  411. package/lib/cjs/src/internal/manager-api/service/ManagerApiService.js.map +7 -0
  412. package/lib/cjs/src/internal/send/di/sendModule.js +2 -0
  413. package/lib/cjs/src/internal/send/di/sendModule.js.map +7 -0
  414. package/lib/cjs/src/internal/send/di/sendModule.test.js +2 -0
  415. package/lib/cjs/src/internal/send/di/sendModule.test.js.map +7 -0
  416. package/lib/cjs/src/internal/send/di/sendTypes.js +2 -0
  417. package/lib/cjs/src/internal/send/di/sendTypes.js.map +7 -0
  418. package/lib/cjs/src/internal/send/use-case/SendApduUseCase.js +2 -0
  419. package/lib/cjs/src/internal/send/use-case/SendApduUseCase.js.map +7 -0
  420. package/lib/cjs/src/internal/send/use-case/SendApduUseCase.test.js +2 -0
  421. package/lib/cjs/src/internal/send/use-case/SendApduUseCase.test.js.map +7 -0
  422. package/lib/cjs/src/internal/transport/ble/di/bleDiTypes.js +2 -0
  423. package/lib/cjs/src/internal/transport/ble/di/bleDiTypes.js.map +7 -0
  424. package/lib/cjs/src/internal/transport/ble/di/bleModule.js +2 -0
  425. package/lib/cjs/src/internal/transport/ble/di/bleModule.js.map +7 -0
  426. package/lib/cjs/src/internal/transport/ble/di/bleModule.test.js +2 -0
  427. package/lib/cjs/src/internal/transport/ble/di/bleModule.test.js.map +7 -0
  428. package/lib/cjs/src/internal/transport/ble/model/BleDevice.stub.js +2 -0
  429. package/lib/cjs/src/internal/transport/ble/model/BleDevice.stub.js.map +7 -0
  430. package/lib/cjs/src/internal/transport/ble/model/BleDeviceInfos.js +2 -0
  431. package/lib/cjs/src/internal/transport/ble/model/BleDeviceInfos.js.map +7 -0
  432. package/lib/cjs/src/internal/transport/ble/service/BleDeviceConnectionFactory.js +2 -0
  433. package/lib/cjs/src/internal/transport/ble/service/BleDeviceConnectionFactory.js.map +7 -0
  434. package/lib/cjs/src/internal/transport/ble/service/BleDeviceConnectionFactory.stub.js +2 -0
  435. package/lib/cjs/src/internal/transport/ble/service/BleDeviceConnectionFactory.stub.js.map +7 -0
  436. package/lib/cjs/src/internal/transport/ble/transport/BleDeviceConnection.js +2 -0
  437. package/lib/cjs/src/internal/transport/ble/transport/BleDeviceConnection.js.map +7 -0
  438. package/lib/cjs/src/internal/transport/ble/transport/BleDeviceConnection.test.js +2 -0
  439. package/lib/cjs/src/internal/transport/ble/transport/BleDeviceConnection.test.js.map +7 -0
  440. package/lib/cjs/src/internal/transport/ble/transport/WebBleTransport.js +2 -0
  441. package/lib/cjs/src/internal/transport/ble/transport/WebBleTransport.js.map +7 -0
  442. package/lib/cjs/src/internal/transport/ble/transport/WebBleTransport.test.js +2 -0
  443. package/lib/cjs/src/internal/transport/ble/transport/WebBleTransport.test.js.map +7 -0
  444. package/lib/cjs/src/internal/transport/ble/transport/__mocks__/WebBleTransport.js +2 -0
  445. package/lib/cjs/src/internal/transport/ble/transport/__mocks__/WebBleTransport.js.map +7 -0
  446. package/lib/cjs/src/internal/transport/data/TransportDataSource.js +2 -0
  447. package/lib/cjs/src/internal/transport/data/TransportDataSource.js.map +7 -0
  448. package/lib/cjs/src/internal/transport/di/transportDiTypes.js +2 -0
  449. package/lib/cjs/src/internal/transport/di/transportDiTypes.js.map +7 -0
  450. package/lib/cjs/src/internal/transport/di/transportModule.js +2 -0
  451. package/lib/cjs/src/internal/transport/di/transportModule.js.map +7 -0
  452. package/lib/cjs/src/internal/transport/mockserver/MockserverTransport.js +2 -0
  453. package/lib/cjs/src/internal/transport/mockserver/MockserverTransport.js.map +7 -0
  454. package/lib/cjs/src/internal/transport/model/DeviceConnection.js +2 -0
  455. package/lib/cjs/src/internal/transport/model/DeviceConnection.js.map +7 -0
  456. package/lib/cjs/src/internal/transport/model/Errors.js +2 -0
  457. package/lib/cjs/src/internal/transport/model/Errors.js.map +7 -0
  458. package/lib/cjs/src/internal/transport/model/InternalConnectedDevice.js +2 -0
  459. package/lib/cjs/src/internal/transport/model/InternalConnectedDevice.js.map +7 -0
  460. package/lib/cjs/src/internal/transport/model/InternalConnectedDevice.stub.js +2 -0
  461. package/lib/cjs/src/internal/transport/model/InternalConnectedDevice.stub.js.map +7 -0
  462. package/lib/cjs/src/internal/transport/model/InternalConnectedDevice.test.js +2 -0
  463. package/lib/cjs/src/internal/transport/model/InternalConnectedDevice.test.js.map +7 -0
  464. package/lib/cjs/src/internal/transport/model/InternalDiscoveredDevice.js +2 -0
  465. package/lib/cjs/src/internal/transport/model/InternalDiscoveredDevice.js.map +7 -0
  466. package/lib/cjs/src/internal/transport/usb/data/UsbHidConfig.js +2 -0
  467. package/lib/cjs/src/internal/transport/usb/data/UsbHidConfig.js.map +7 -0
  468. package/lib/cjs/src/internal/transport/usb/di/usbDiTypes.js +2 -0
  469. package/lib/cjs/src/internal/transport/usb/di/usbDiTypes.js.map +7 -0
  470. package/lib/cjs/src/internal/transport/usb/di/usbModule.js +2 -0
  471. package/lib/cjs/src/internal/transport/usb/di/usbModule.js.map +7 -0
  472. package/lib/cjs/src/internal/transport/usb/di/usbModule.test.js +2 -0
  473. package/lib/cjs/src/internal/transport/usb/di/usbModule.test.js.map +7 -0
  474. package/lib/cjs/src/internal/transport/usb/model/HIDDevice.stub.js +2 -0
  475. package/lib/cjs/src/internal/transport/usb/model/HIDDevice.stub.js.map +7 -0
  476. package/lib/cjs/src/internal/transport/usb/service/UsbHidDeviceConnectionFactory.js +2 -0
  477. package/lib/cjs/src/internal/transport/usb/service/UsbHidDeviceConnectionFactory.js.map +7 -0
  478. package/lib/cjs/src/internal/transport/usb/service/UsbHidDeviceConnectionFactory.stub.js +2 -0
  479. package/lib/cjs/src/internal/transport/usb/service/UsbHidDeviceConnectionFactory.stub.js.map +7 -0
  480. package/lib/cjs/src/internal/transport/usb/transport/UsbHidDeviceConnection.js +2 -0
  481. package/lib/cjs/src/internal/transport/usb/transport/UsbHidDeviceConnection.js.map +7 -0
  482. package/lib/cjs/src/internal/transport/usb/transport/UsbHidDeviceConnection.test.js +2 -0
  483. package/lib/cjs/src/internal/transport/usb/transport/UsbHidDeviceConnection.test.js.map +7 -0
  484. package/lib/cjs/src/internal/transport/usb/transport/WebUsbHidTransport.js +2 -0
  485. package/lib/cjs/src/internal/transport/usb/transport/WebUsbHidTransport.js.map +7 -0
  486. package/lib/cjs/src/internal/transport/usb/transport/WebUsbHidTransport.test.js +2 -0
  487. package/lib/cjs/src/internal/transport/usb/transport/WebUsbHidTransport.test.js.map +7 -0
  488. package/lib/cjs/src/internal/transport/usb/transport/__mocks__/WebUsbHidTransport.js +2 -0
  489. package/lib/cjs/src/internal/transport/usb/transport/__mocks__/WebUsbHidTransport.js.map +7 -0
  490. package/lib/esm/index.js +1 -26507
  491. package/lib/esm/index.js.map +4 -4
  492. package/lib/esm/package.json +64 -0
  493. package/lib/esm/src/api/DeviceManagementKit.js +2 -0
  494. package/lib/esm/src/api/DeviceManagementKit.js.map +7 -0
  495. package/lib/esm/src/api/DeviceManagementKit.test.js +2 -0
  496. package/lib/esm/src/api/DeviceManagementKit.test.js.map +7 -0
  497. package/lib/esm/src/api/DeviceManagementKitBuilder.js +2 -0
  498. package/lib/esm/src/api/DeviceManagementKitBuilder.js.map +7 -0
  499. package/lib/esm/src/api/DeviceManagementKitBuilder.test.js +2 -0
  500. package/lib/esm/src/api/DeviceManagementKitBuilder.test.js.map +7 -0
  501. package/lib/esm/src/api/DmkConfig.js +1 -0
  502. package/lib/esm/src/api/DmkConfig.js.map +7 -0
  503. package/lib/esm/src/api/Error.js +2 -0
  504. package/lib/esm/src/api/Error.js.map +7 -0
  505. package/lib/esm/src/api/apdu/model/Apdu.js +2 -0
  506. package/lib/esm/src/api/apdu/model/Apdu.js.map +7 -0
  507. package/lib/esm/src/api/apdu/model/Apdu.test.js +2 -0
  508. package/lib/esm/src/api/apdu/model/Apdu.test.js.map +7 -0
  509. package/lib/esm/src/api/apdu/utils/ApduBuilder.js +2 -0
  510. package/lib/esm/src/api/apdu/utils/ApduBuilder.js.map +7 -0
  511. package/lib/esm/src/api/apdu/utils/ApduBuilder.test.js +2 -0
  512. package/lib/esm/src/api/apdu/utils/ApduBuilder.test.js.map +7 -0
  513. package/lib/esm/src/api/apdu/utils/ApduParser.js +2 -0
  514. package/lib/esm/src/api/apdu/utils/ApduParser.js.map +7 -0
  515. package/lib/esm/src/api/apdu/utils/ApduParser.test.js +2 -0
  516. package/lib/esm/src/api/apdu/utils/ApduParser.test.js.map +7 -0
  517. package/lib/esm/src/api/apdu/utils/AppBuilderError.js +2 -0
  518. package/lib/esm/src/api/apdu/utils/AppBuilderError.js.map +7 -0
  519. package/lib/esm/src/api/apdu/utils/ByteArrayBuilder.js +2 -0
  520. package/lib/esm/src/api/apdu/utils/ByteArrayBuilder.js.map +7 -0
  521. package/lib/esm/src/api/apdu/utils/ByteArrayBuilder.test.js +2 -0
  522. package/lib/esm/src/api/apdu/utils/ByteArrayBuilder.test.js.map +7 -0
  523. package/lib/esm/src/api/apdu/utils/ByteArrayParser.js +2 -0
  524. package/lib/esm/src/api/apdu/utils/ByteArrayParser.js.map +7 -0
  525. package/lib/esm/src/api/apdu/utils/ByteArrayParser.test.js +2 -0
  526. package/lib/esm/src/api/apdu/utils/ByteArrayParser.test.js.map +7 -0
  527. package/lib/esm/src/api/command/Command.js +1 -0
  528. package/lib/esm/src/api/command/Command.js.map +7 -0
  529. package/lib/esm/src/api/command/Errors.js +2 -0
  530. package/lib/esm/src/api/command/Errors.js.map +7 -0
  531. package/lib/esm/src/api/command/di/commandModule.js +2 -0
  532. package/lib/esm/src/api/command/di/commandModule.js.map +7 -0
  533. package/lib/esm/src/api/command/di/commandModule.test.js +2 -0
  534. package/lib/esm/src/api/command/di/commandModule.test.js.map +7 -0
  535. package/lib/esm/src/api/command/di/commandTypes.js +2 -0
  536. package/lib/esm/src/api/command/di/commandTypes.js.map +7 -0
  537. package/lib/esm/src/api/command/model/CommandResult.js +2 -0
  538. package/lib/esm/src/api/command/model/CommandResult.js.map +7 -0
  539. package/lib/esm/src/api/command/model/CommandResult.test.js +2 -0
  540. package/lib/esm/src/api/command/model/CommandResult.test.js.map +7 -0
  541. package/lib/esm/src/api/command/os/CloseAppCommand.js +2 -0
  542. package/lib/esm/src/api/command/os/CloseAppCommand.js.map +7 -0
  543. package/lib/esm/src/api/command/os/CloseAppCommand.test.js +2 -0
  544. package/lib/esm/src/api/command/os/CloseAppCommand.test.js.map +7 -0
  545. package/lib/esm/src/api/command/os/GetAppAndVersionCommand.js +2 -0
  546. package/lib/esm/src/api/command/os/GetAppAndVersionCommand.js.map +7 -0
  547. package/lib/esm/src/api/command/os/GetAppAndVersionCommand.test.js +2 -0
  548. package/lib/esm/src/api/command/os/GetAppAndVersionCommand.test.js.map +7 -0
  549. package/lib/esm/src/api/command/os/GetBatteryStatusCommand.js +2 -0
  550. package/lib/esm/src/api/command/os/GetBatteryStatusCommand.js.map +7 -0
  551. package/lib/esm/src/api/command/os/GetBatteryStatusCommand.test.js +2 -0
  552. package/lib/esm/src/api/command/os/GetBatteryStatusCommand.test.js.map +7 -0
  553. package/lib/esm/src/api/command/os/GetOsVersionCommand.js +2 -0
  554. package/lib/esm/src/api/command/os/GetOsVersionCommand.js.map +7 -0
  555. package/lib/esm/src/api/command/os/GetOsVersionCommand.test.js +2 -0
  556. package/lib/esm/src/api/command/os/GetOsVersionCommand.test.js.map +7 -0
  557. package/lib/esm/src/api/command/os/ListAppsCommand.js +2 -0
  558. package/lib/esm/src/api/command/os/ListAppsCommand.js.map +7 -0
  559. package/lib/esm/src/api/command/os/ListAppsCommand.test.js +2 -0
  560. package/lib/esm/src/api/command/os/ListAppsCommand.test.js.map +7 -0
  561. package/lib/esm/src/api/command/os/OpenAppCommand.js +2 -0
  562. package/lib/esm/src/api/command/os/OpenAppCommand.js.map +7 -0
  563. package/lib/esm/src/api/command/os/OpenAppCommand.test.js +2 -0
  564. package/lib/esm/src/api/command/os/OpenAppCommand.test.js.map +7 -0
  565. package/lib/esm/src/api/command/use-case/SendCommandUseCase.js +2 -0
  566. package/lib/esm/src/api/command/use-case/SendCommandUseCase.js.map +7 -0
  567. package/lib/esm/src/api/command/use-case/SendCommandUseCase.test.js +2 -0
  568. package/lib/esm/src/api/command/use-case/SendCommandUseCase.test.js.map +7 -0
  569. package/lib/esm/src/api/command/utils/CommandErrors.js +2 -0
  570. package/lib/esm/src/api/command/utils/CommandErrors.js.map +7 -0
  571. package/lib/esm/src/api/command/utils/CommandUtils.js +2 -0
  572. package/lib/esm/src/api/command/utils/CommandUtils.js.map +7 -0
  573. package/lib/esm/src/api/command/utils/CommandUtils.test.js +2 -0
  574. package/lib/esm/src/api/command/utils/CommandUtils.test.js.map +7 -0
  575. package/lib/esm/src/api/command/utils/GlobalCommandError.js +2 -0
  576. package/lib/esm/src/api/command/utils/GlobalCommandError.js.map +7 -0
  577. package/lib/esm/src/api/command/utils/GlobalCommandError.test.js +2 -0
  578. package/lib/esm/src/api/command/utils/GlobalCommandError.test.js.map +7 -0
  579. package/lib/esm/src/api/device/DeviceModel.js +2 -0
  580. package/lib/esm/src/api/device/DeviceModel.js.map +7 -0
  581. package/lib/esm/src/api/device/DeviceStatus.js +2 -0
  582. package/lib/esm/src/api/device/DeviceStatus.js.map +7 -0
  583. package/lib/esm/src/api/device-action/DeviceAction.js +1 -0
  584. package/lib/esm/src/api/device-action/DeviceAction.js.map +7 -0
  585. package/lib/esm/src/api/device-action/__test-utils__/data.js +2 -0
  586. package/lib/esm/src/api/device-action/__test-utils__/data.js.map +7 -0
  587. package/lib/esm/src/api/device-action/__test-utils__/makeInternalApi.js +2 -0
  588. package/lib/esm/src/api/device-action/__test-utils__/makeInternalApi.js.map +7 -0
  589. package/lib/esm/src/api/device-action/__test-utils__/setupTestMachine.js +2 -0
  590. package/lib/esm/src/api/device-action/__test-utils__/setupTestMachine.js.map +7 -0
  591. package/lib/esm/src/api/device-action/__test-utils__/testDeviceActionStates.js +2 -0
  592. package/lib/esm/src/api/device-action/__test-utils__/testDeviceActionStates.js.map +7 -0
  593. package/lib/esm/src/api/device-action/di/deviceActionModule.js +2 -0
  594. package/lib/esm/src/api/device-action/di/deviceActionModule.js.map +7 -0
  595. package/lib/esm/src/api/device-action/di/deviceActionModule.test.js +2 -0
  596. package/lib/esm/src/api/device-action/di/deviceActionModule.test.js.map +7 -0
  597. package/lib/esm/src/api/device-action/di/deviceActionTypes.js +2 -0
  598. package/lib/esm/src/api/device-action/di/deviceActionTypes.js.map +7 -0
  599. package/lib/esm/src/api/device-action/model/DeviceActionState.js +2 -0
  600. package/lib/esm/src/api/device-action/model/DeviceActionState.js.map +7 -0
  601. package/lib/esm/src/api/device-action/model/UserInteractionRequired.js +2 -0
  602. package/lib/esm/src/api/device-action/model/UserInteractionRequired.js.map +7 -0
  603. package/lib/esm/src/api/device-action/os/Const.js +2 -0
  604. package/lib/esm/src/api/device-action/os/Const.js.map +7 -0
  605. package/lib/esm/src/api/device-action/os/Errors.js +2 -0
  606. package/lib/esm/src/api/device-action/os/Errors.js.map +7 -0
  607. package/lib/esm/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.js +2 -0
  608. package/lib/esm/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.js.map +7 -0
  609. package/lib/esm/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.test.js +2 -0
  610. package/lib/esm/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.test.js.map +7 -0
  611. package/lib/esm/src/api/device-action/os/GetDeviceStatus/types.js +1 -0
  612. package/lib/esm/src/api/device-action/os/GetDeviceStatus/types.js.map +7 -0
  613. package/lib/esm/src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.js +2 -0
  614. package/lib/esm/src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.js.map +7 -0
  615. package/lib/esm/src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.test.js +2 -0
  616. package/lib/esm/src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.test.js.map +7 -0
  617. package/lib/esm/src/api/device-action/os/GoToDashboard/types.js +1 -0
  618. package/lib/esm/src/api/device-action/os/GoToDashboard/types.js.map +7 -0
  619. package/lib/esm/src/api/device-action/os/ListApps/ListAppsDeviceAction.js +2 -0
  620. package/lib/esm/src/api/device-action/os/ListApps/ListAppsDeviceAction.js.map +7 -0
  621. package/lib/esm/src/api/device-action/os/ListApps/ListAppsDeviceAction.test.js +2 -0
  622. package/lib/esm/src/api/device-action/os/ListApps/ListAppsDeviceAction.test.js.map +7 -0
  623. package/lib/esm/src/api/device-action/os/ListApps/types.js +1 -0
  624. package/lib/esm/src/api/device-action/os/ListApps/types.js.map +7 -0
  625. package/lib/esm/src/api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction.js +2 -0
  626. package/lib/esm/src/api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction.js.map +7 -0
  627. package/lib/esm/src/api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction.test.js +2 -0
  628. package/lib/esm/src/api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction.test.js.map +7 -0
  629. package/lib/esm/src/api/device-action/os/ListAppsWithMetadata/types.js +1 -0
  630. package/lib/esm/src/api/device-action/os/ListAppsWithMetadata/types.js.map +7 -0
  631. package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.js +2 -0
  632. package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.js.map +7 -0
  633. package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.test.js +2 -0
  634. package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.test.js.map +7 -0
  635. package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/types.js +1 -0
  636. package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/types.js.map +7 -0
  637. package/lib/esm/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.js +2 -0
  638. package/lib/esm/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.js.map +7 -0
  639. package/lib/esm/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.test.js +2 -0
  640. package/lib/esm/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.test.js.map +7 -0
  641. package/lib/esm/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceActionTypes.js +1 -0
  642. package/lib/esm/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceActionTypes.js.map +7 -0
  643. package/lib/esm/src/api/device-action/use-case/ExecuteDeviceActionUseCase.js +2 -0
  644. package/lib/esm/src/api/device-action/use-case/ExecuteDeviceActionUseCase.js.map +7 -0
  645. package/lib/esm/src/api/device-action/xstate-utils/StateMachineTypes.js +1 -0
  646. package/lib/esm/src/api/device-action/xstate-utils/StateMachineTypes.js.map +7 -0
  647. package/lib/esm/src/api/device-action/xstate-utils/XStateDeviceAction.js +2 -0
  648. package/lib/esm/src/api/device-action/xstate-utils/XStateDeviceAction.js.map +7 -0
  649. package/lib/esm/src/api/device-session/ApduResponse.js +2 -0
  650. package/lib/esm/src/api/device-session/ApduResponse.js.map +7 -0
  651. package/lib/esm/src/api/device-session/ApduResponse.stub.js +2 -0
  652. package/lib/esm/src/api/device-session/ApduResponse.stub.js.map +7 -0
  653. package/lib/esm/src/api/device-session/DeviceSessionState.js +2 -0
  654. package/lib/esm/src/api/device-session/DeviceSessionState.js.map +7 -0
  655. package/lib/esm/src/api/device-session/types.js +1 -0
  656. package/lib/esm/src/api/device-session/types.js.map +7 -0
  657. package/lib/esm/src/api/discovery/ConnectionType.js +1 -0
  658. package/lib/esm/src/api/discovery/ConnectionType.js.map +7 -0
  659. package/lib/esm/src/api/index.js +2 -0
  660. package/lib/esm/src/api/index.js.map +7 -0
  661. package/lib/esm/src/api/logger-subscriber/__mocks__/ConsoleLogger.js +2 -0
  662. package/lib/esm/src/api/logger-subscriber/__mocks__/ConsoleLogger.js.map +7 -0
  663. package/lib/esm/src/api/logger-subscriber/model/LogLevel.js +2 -0
  664. package/lib/esm/src/api/logger-subscriber/model/LogLevel.js.map +7 -0
  665. package/lib/esm/src/api/logger-subscriber/model/LogSubscriberOptions.js +1 -0
  666. package/lib/esm/src/api/logger-subscriber/model/LogSubscriberOptions.js.map +7 -0
  667. package/lib/esm/src/api/logger-subscriber/service/ConsoleLogger.js +2 -0
  668. package/lib/esm/src/api/logger-subscriber/service/ConsoleLogger.js.map +7 -0
  669. package/lib/esm/src/api/logger-subscriber/service/ConsoleLogger.test.js +2 -0
  670. package/lib/esm/src/api/logger-subscriber/service/ConsoleLogger.test.js.map +7 -0
  671. package/lib/esm/src/api/logger-subscriber/service/LoggerSubscriberService.js +1 -0
  672. package/lib/esm/src/api/logger-subscriber/service/LoggerSubscriberService.js.map +7 -0
  673. package/lib/esm/src/api/logger-subscriber/service/WebLogsExporterLogger.js +2 -0
  674. package/lib/esm/src/api/logger-subscriber/service/WebLogsExporterLogger.js.map +7 -0
  675. package/lib/esm/src/api/logger-subscriber/service/WebLogsExporterLogger.test.js +2 -0
  676. package/lib/esm/src/api/logger-subscriber/service/WebLogsExporterLogger.test.js.map +7 -0
  677. package/lib/esm/src/api/transport/model/ConnectedDevice.js +2 -0
  678. package/lib/esm/src/api/transport/model/ConnectedDevice.js.map +7 -0
  679. package/lib/esm/src/api/transport/model/DiscoveredDevice.js +1 -0
  680. package/lib/esm/src/api/transport/model/DiscoveredDevice.js.map +7 -0
  681. package/lib/esm/src/api/transport/model/Transport.js +1 -0
  682. package/lib/esm/src/api/transport/model/Transport.js.map +7 -0
  683. package/lib/esm/src/api/transport/model/TransportIdentifier.js +2 -0
  684. package/lib/esm/src/api/transport/model/TransportIdentifier.js.map +7 -0
  685. package/lib/esm/src/api/types.js +1 -0
  686. package/lib/esm/src/api/types.js.map +7 -0
  687. package/lib/esm/src/api/utils/Base64String.js +2 -0
  688. package/lib/esm/src/api/utils/Base64String.js.map +7 -0
  689. package/lib/esm/src/api/utils/Base64String.test.js +2 -0
  690. package/lib/esm/src/api/utils/Base64String.test.js.map +7 -0
  691. package/lib/esm/src/api/utils/HexaString.js +2 -0
  692. package/lib/esm/src/api/utils/HexaString.js.map +7 -0
  693. package/lib/esm/src/api/utils/HexaString.test.js +2 -0
  694. package/lib/esm/src/api/utils/HexaString.test.js.map +7 -0
  695. package/lib/esm/src/di.js +2 -0
  696. package/lib/esm/src/di.js.map +7 -0
  697. package/lib/esm/src/di.stub.js +2 -0
  698. package/lib/esm/src/di.stub.js.map +7 -0
  699. package/lib/esm/src/index.js +2 -0
  700. package/lib/esm/src/index.js.map +7 -0
  701. package/lib/esm/src/internal/config/data/ConfigDataSource.js +1 -0
  702. package/lib/esm/src/internal/config/data/ConfigDataSource.js.map +7 -0
  703. package/lib/esm/src/internal/config/data/Dto.js +1 -0
  704. package/lib/esm/src/internal/config/data/Dto.js.map +7 -0
  705. package/lib/esm/src/internal/config/data/LocalConfigDataSource.js +2 -0
  706. package/lib/esm/src/internal/config/data/LocalConfigDataSource.js.map +7 -0
  707. package/lib/esm/src/internal/config/data/LocalConfigDataSource.stub.js +2 -0
  708. package/lib/esm/src/internal/config/data/LocalConfigDataSource.stub.js.map +7 -0
  709. package/lib/esm/src/internal/config/data/LocalConfigDataSource.test.js +2 -0
  710. package/lib/esm/src/internal/config/data/LocalConfigDataSource.test.js.map +7 -0
  711. package/lib/esm/src/internal/config/data/RemoteConfigDataSource.js +2 -0
  712. package/lib/esm/src/internal/config/data/RemoteConfigDataSource.js.map +7 -0
  713. package/lib/esm/src/internal/config/data/RemoteConfigDataSource.stub.js +2 -0
  714. package/lib/esm/src/internal/config/data/RemoteConfigDataSource.stub.js.map +7 -0
  715. package/lib/esm/src/internal/config/data/RemoteConfigDataSource.test.js +2 -0
  716. package/lib/esm/src/internal/config/data/RemoteConfigDataSource.test.js.map +7 -0
  717. package/lib/esm/src/internal/config/data/__mocks__/LocalConfigDataSource.js +2 -0
  718. package/lib/esm/src/internal/config/data/__mocks__/LocalConfigDataSource.js.map +7 -0
  719. package/lib/esm/src/internal/config/data/__mocks__/RemoteConfigDataSource.js +2 -0
  720. package/lib/esm/src/internal/config/data/__mocks__/RemoteConfigDataSource.js.map +7 -0
  721. package/lib/esm/src/internal/config/di/configModule.js +2 -0
  722. package/lib/esm/src/internal/config/di/configModule.js.map +7 -0
  723. package/lib/esm/src/internal/config/di/configModule.test.js +2 -0
  724. package/lib/esm/src/internal/config/di/configModule.test.js.map +7 -0
  725. package/lib/esm/src/internal/config/di/configTypes.js +2 -0
  726. package/lib/esm/src/internal/config/di/configTypes.js.map +7 -0
  727. package/lib/esm/src/internal/config/model/Config.js +2 -0
  728. package/lib/esm/src/internal/config/model/Config.js.map +7 -0
  729. package/lib/esm/src/internal/config/model/Errors.js +2 -0
  730. package/lib/esm/src/internal/config/model/Errors.js.map +7 -0
  731. package/lib/esm/src/internal/config/service/ConfigService.js +1 -0
  732. package/lib/esm/src/internal/config/service/ConfigService.js.map +7 -0
  733. package/lib/esm/src/internal/config/service/DefaultConfigService.js +2 -0
  734. package/lib/esm/src/internal/config/service/DefaultConfigService.js.map +7 -0
  735. package/lib/esm/src/internal/config/service/DefaultConfigService.test.js +2 -0
  736. package/lib/esm/src/internal/config/service/DefaultConfigService.test.js.map +7 -0
  737. package/lib/esm/src/internal/config/use-case/GetDmkVersionUseCase.js +2 -0
  738. package/lib/esm/src/internal/config/use-case/GetDmkVersionUseCase.js.map +7 -0
  739. package/lib/esm/src/internal/config/use-case/GetDmkVersionUseCase.test.js +2 -0
  740. package/lib/esm/src/internal/config/use-case/GetDmkVersionUseCase.test.js.map +7 -0
  741. package/lib/esm/src/internal/device-model/data/DeviceModelDataSource.js +1 -0
  742. package/lib/esm/src/internal/device-model/data/DeviceModelDataSource.js.map +7 -0
  743. package/lib/esm/src/internal/device-model/data/StaticDeviceModelDataSource.js +2 -0
  744. package/lib/esm/src/internal/device-model/data/StaticDeviceModelDataSource.js.map +7 -0
  745. package/lib/esm/src/internal/device-model/data/StaticDeviceModelDataSource.test.js +2 -0
  746. package/lib/esm/src/internal/device-model/data/StaticDeviceModelDataSource.test.js.map +7 -0
  747. package/lib/esm/src/internal/device-model/di/deviceModelModule.js +2 -0
  748. package/lib/esm/src/internal/device-model/di/deviceModelModule.js.map +7 -0
  749. package/lib/esm/src/internal/device-model/di/deviceModelModule.test.js +2 -0
  750. package/lib/esm/src/internal/device-model/di/deviceModelModule.test.js.map +7 -0
  751. package/lib/esm/src/internal/device-model/di/deviceModelTypes.js +2 -0
  752. package/lib/esm/src/internal/device-model/di/deviceModelTypes.js.map +7 -0
  753. package/lib/esm/src/internal/device-model/model/DeviceModel.js +2 -0
  754. package/lib/esm/src/internal/device-model/model/DeviceModel.js.map +7 -0
  755. package/lib/esm/src/internal/device-model/model/DeviceModel.stub.js +2 -0
  756. package/lib/esm/src/internal/device-model/model/DeviceModel.stub.js.map +7 -0
  757. package/lib/esm/src/internal/device-model/model/DeviceModel.test.js +2 -0
  758. package/lib/esm/src/internal/device-model/model/DeviceModel.test.js.map +7 -0
  759. package/lib/esm/src/internal/device-session/data/ApduResponseConst.js +2 -0
  760. package/lib/esm/src/internal/device-session/data/ApduResponseConst.js.map +7 -0
  761. package/lib/esm/src/internal/device-session/data/DeviceSessionRefresherConst.js +2 -0
  762. package/lib/esm/src/internal/device-session/data/DeviceSessionRefresherConst.js.map +7 -0
  763. package/lib/esm/src/internal/device-session/data/FramerConst.js +2 -0
  764. package/lib/esm/src/internal/device-session/data/FramerConst.js.map +7 -0
  765. package/lib/esm/src/internal/device-session/di/deviceSessionModule.js +2 -0
  766. package/lib/esm/src/internal/device-session/di/deviceSessionModule.js.map +7 -0
  767. package/lib/esm/src/internal/device-session/di/deviceSessionModule.test.js +2 -0
  768. package/lib/esm/src/internal/device-session/di/deviceSessionModule.test.js.map +7 -0
  769. package/lib/esm/src/internal/device-session/di/deviceSessionTypes.js +2 -0
  770. package/lib/esm/src/internal/device-session/di/deviceSessionTypes.js.map +7 -0
  771. package/lib/esm/src/internal/device-session/model/DeviceSession.js +2 -0
  772. package/lib/esm/src/internal/device-session/model/DeviceSession.js.map +7 -0
  773. package/lib/esm/src/internal/device-session/model/DeviceSession.stub.js +2 -0
  774. package/lib/esm/src/internal/device-session/model/DeviceSession.stub.js.map +7 -0
  775. package/lib/esm/src/internal/device-session/model/DeviceSessionRefresher.js +2 -0
  776. package/lib/esm/src/internal/device-session/model/DeviceSessionRefresher.js.map +7 -0
  777. package/lib/esm/src/internal/device-session/model/DeviceSessionRefresher.test.js +2 -0
  778. package/lib/esm/src/internal/device-session/model/DeviceSessionRefresher.test.js.map +7 -0
  779. package/lib/esm/src/internal/device-session/model/Errors.js +2 -0
  780. package/lib/esm/src/internal/device-session/model/Errors.js.map +7 -0
  781. package/lib/esm/src/internal/device-session/model/Frame.js +2 -0
  782. package/lib/esm/src/internal/device-session/model/Frame.js.map +7 -0
  783. package/lib/esm/src/internal/device-session/model/FrameHeader.js +2 -0
  784. package/lib/esm/src/internal/device-session/model/FrameHeader.js.map +7 -0
  785. package/lib/esm/src/internal/device-session/service/ApduReceiverService.js +1 -0
  786. package/lib/esm/src/internal/device-session/service/ApduReceiverService.js.map +7 -0
  787. package/lib/esm/src/internal/device-session/service/ApduSenderService.js +1 -0
  788. package/lib/esm/src/internal/device-session/service/ApduSenderService.js.map +7 -0
  789. package/lib/esm/src/internal/device-session/service/DefaultApduReceiverService.js +2 -0
  790. package/lib/esm/src/internal/device-session/service/DefaultApduReceiverService.js.map +7 -0
  791. package/lib/esm/src/internal/device-session/service/DefaultApduReceiverService.stub.js +2 -0
  792. package/lib/esm/src/internal/device-session/service/DefaultApduReceiverService.stub.js.map +7 -0
  793. package/lib/esm/src/internal/device-session/service/DefaultApduReceiverService.test.js +2 -0
  794. package/lib/esm/src/internal/device-session/service/DefaultApduReceiverService.test.js.map +7 -0
  795. package/lib/esm/src/internal/device-session/service/DefaultApduSenderService.js +2 -0
  796. package/lib/esm/src/internal/device-session/service/DefaultApduSenderService.js.map +7 -0
  797. package/lib/esm/src/internal/device-session/service/DefaultApduSenderService.stub.js +2 -0
  798. package/lib/esm/src/internal/device-session/service/DefaultApduSenderService.stub.js.map +7 -0
  799. package/lib/esm/src/internal/device-session/service/DefaultApduSenderService.test.js +2 -0
  800. package/lib/esm/src/internal/device-session/service/DefaultApduSenderService.test.js.map +7 -0
  801. package/lib/esm/src/internal/device-session/service/DefaultDeviceSessionService.js +2 -0
  802. package/lib/esm/src/internal/device-session/service/DefaultDeviceSessionService.js.map +7 -0
  803. package/lib/esm/src/internal/device-session/service/DefaultDeviceSessionService.test.js +2 -0
  804. package/lib/esm/src/internal/device-session/service/DefaultDeviceSessionService.test.js.map +7 -0
  805. package/lib/esm/src/internal/device-session/service/DeviceSessionService.js +1 -0
  806. package/lib/esm/src/internal/device-session/service/DeviceSessionService.js.map +7 -0
  807. package/lib/esm/src/internal/device-session/use-case/CloseSessionsUseCase.js +2 -0
  808. package/lib/esm/src/internal/device-session/use-case/CloseSessionsUseCase.js.map +7 -0
  809. package/lib/esm/src/internal/device-session/use-case/CloseSessionsUseState.test.js +2 -0
  810. package/lib/esm/src/internal/device-session/use-case/CloseSessionsUseState.test.js.map +7 -0
  811. package/lib/esm/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.js +2 -0
  812. package/lib/esm/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.js.map +7 -0
  813. package/lib/esm/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.js +2 -0
  814. package/lib/esm/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.js.map +7 -0
  815. package/lib/esm/src/internal/device-session/utils/FramerUtils.js +2 -0
  816. package/lib/esm/src/internal/device-session/utils/FramerUtils.js.map +7 -0
  817. package/lib/esm/src/internal/device-session/utils/FramerUtils.test.js +2 -0
  818. package/lib/esm/src/internal/device-session/utils/FramerUtils.test.js.map +7 -0
  819. package/lib/esm/src/internal/discovery/di/discoveryModule.js +2 -0
  820. package/lib/esm/src/internal/discovery/di/discoveryModule.js.map +7 -0
  821. package/lib/esm/src/internal/discovery/di/discoveryModule.test.js +2 -0
  822. package/lib/esm/src/internal/discovery/di/discoveryModule.test.js.map +7 -0
  823. package/lib/esm/src/internal/discovery/di/discoveryTypes.js +2 -0
  824. package/lib/esm/src/internal/discovery/di/discoveryTypes.js.map +7 -0
  825. package/lib/esm/src/internal/discovery/use-case/ConnectUseCase.js +2 -0
  826. package/lib/esm/src/internal/discovery/use-case/ConnectUseCase.js.map +7 -0
  827. package/lib/esm/src/internal/discovery/use-case/ConnectUseCase.test.js +2 -0
  828. package/lib/esm/src/internal/discovery/use-case/ConnectUseCase.test.js.map +7 -0
  829. package/lib/esm/src/internal/discovery/use-case/DisconnectUseCase.js +2 -0
  830. package/lib/esm/src/internal/discovery/use-case/DisconnectUseCase.js.map +7 -0
  831. package/lib/esm/src/internal/discovery/use-case/DisconnectUseCase.test.js +2 -0
  832. package/lib/esm/src/internal/discovery/use-case/DisconnectUseCase.test.js.map +7 -0
  833. package/lib/esm/src/internal/discovery/use-case/GetConnectedDeviceUseCase.js +2 -0
  834. package/lib/esm/src/internal/discovery/use-case/GetConnectedDeviceUseCase.js.map +7 -0
  835. package/lib/esm/src/internal/discovery/use-case/GetConnectedDeviceUseCase.test.js +2 -0
  836. package/lib/esm/src/internal/discovery/use-case/GetConnectedDeviceUseCase.test.js.map +7 -0
  837. package/lib/esm/src/internal/discovery/use-case/ListConnectedDevicesUseCase.js +2 -0
  838. package/lib/esm/src/internal/discovery/use-case/ListConnectedDevicesUseCase.js.map +7 -0
  839. package/lib/esm/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.js +2 -0
  840. package/lib/esm/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.js.map +7 -0
  841. package/lib/esm/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.js +2 -0
  842. package/lib/esm/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.js.map +7 -0
  843. package/lib/esm/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.js +2 -0
  844. package/lib/esm/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.js.map +7 -0
  845. package/lib/esm/src/internal/discovery/use-case/ListenToKnownDevicesUseCase.js +2 -0
  846. package/lib/esm/src/internal/discovery/use-case/ListenToKnownDevicesUseCase.js.map +7 -0
  847. package/lib/esm/src/internal/discovery/use-case/ListenToKnownDevicesUseCase.test.js +2 -0
  848. package/lib/esm/src/internal/discovery/use-case/ListenToKnownDevicesUseCase.test.js.map +7 -0
  849. package/lib/esm/src/internal/discovery/use-case/StartDiscoveringUseCase.js +2 -0
  850. package/lib/esm/src/internal/discovery/use-case/StartDiscoveringUseCase.js.map +7 -0
  851. package/lib/esm/src/internal/discovery/use-case/StartDiscoveringUseCase.test.js +2 -0
  852. package/lib/esm/src/internal/discovery/use-case/StartDiscoveringUseCase.test.js.map +7 -0
  853. package/lib/esm/src/internal/discovery/use-case/StopDiscoveringUseCase.js +2 -0
  854. package/lib/esm/src/internal/discovery/use-case/StopDiscoveringUseCase.js.map +7 -0
  855. package/lib/esm/src/internal/discovery/use-case/StopDiscoveringUseCase.test.js +2 -0
  856. package/lib/esm/src/internal/discovery/use-case/StopDiscoveringUseCase.test.js.map +7 -0
  857. package/lib/esm/src/internal/logger-publisher/di/loggerModule.js +2 -0
  858. package/lib/esm/src/internal/logger-publisher/di/loggerModule.js.map +7 -0
  859. package/lib/esm/src/internal/logger-publisher/di/loggerModule.test.js +2 -0
  860. package/lib/esm/src/internal/logger-publisher/di/loggerModule.test.js.map +7 -0
  861. package/lib/esm/src/internal/logger-publisher/di/loggerTypes.js +2 -0
  862. package/lib/esm/src/internal/logger-publisher/di/loggerTypes.js.map +7 -0
  863. package/lib/esm/src/internal/logger-publisher/model/LogPublisherOptions.js +1 -0
  864. package/lib/esm/src/internal/logger-publisher/model/LogPublisherOptions.js.map +7 -0
  865. package/lib/esm/src/internal/logger-publisher/service/DefaultLoggerPublisherService.js +2 -0
  866. package/lib/esm/src/internal/logger-publisher/service/DefaultLoggerPublisherService.js.map +7 -0
  867. package/lib/esm/src/internal/logger-publisher/service/DefaultLoggerPublisherService.test.js +2 -0
  868. package/lib/esm/src/internal/logger-publisher/service/DefaultLoggerPublisherService.test.js.map +7 -0
  869. package/lib/esm/src/internal/logger-publisher/service/LoggerPublisherService.js +1 -0
  870. package/lib/esm/src/internal/logger-publisher/service/LoggerPublisherService.js.map +7 -0
  871. package/lib/esm/src/internal/logger-publisher/service/__mocks__/DefaultLoggerService.js +2 -0
  872. package/lib/esm/src/internal/logger-publisher/service/__mocks__/DefaultLoggerService.js.map +7 -0
  873. package/lib/esm/src/internal/manager-api/data/AxiosManagerApiDataSource.js +2 -0
  874. package/lib/esm/src/internal/manager-api/data/AxiosManagerApiDataSource.js.map +7 -0
  875. package/lib/esm/src/internal/manager-api/data/AxiosManagerApiDataSource.test.js +2 -0
  876. package/lib/esm/src/internal/manager-api/data/AxiosManagerApiDataSource.test.js.map +7 -0
  877. package/lib/esm/src/internal/manager-api/data/ManagerApiDataSource.js +1 -0
  878. package/lib/esm/src/internal/manager-api/data/ManagerApiDataSource.js.map +7 -0
  879. package/lib/esm/src/internal/manager-api/data/ManagerApiDto.js +2 -0
  880. package/lib/esm/src/internal/manager-api/data/ManagerApiDto.js.map +7 -0
  881. package/lib/esm/src/internal/manager-api/data/__mocks__/AxiosManagerApiDataSource.js +2 -0
  882. package/lib/esm/src/internal/manager-api/data/__mocks__/AxiosManagerApiDataSource.js.map +7 -0
  883. package/lib/esm/src/internal/manager-api/di/managerApiModule.js +2 -0
  884. package/lib/esm/src/internal/manager-api/di/managerApiModule.js.map +7 -0
  885. package/lib/esm/src/internal/manager-api/di/managerApiModule.test.js +2 -0
  886. package/lib/esm/src/internal/manager-api/di/managerApiModule.test.js.map +7 -0
  887. package/lib/esm/src/internal/manager-api/di/managerApiTypes.js +2 -0
  888. package/lib/esm/src/internal/manager-api/di/managerApiTypes.js.map +7 -0
  889. package/lib/esm/src/internal/manager-api/model/Const.js +2 -0
  890. package/lib/esm/src/internal/manager-api/model/Const.js.map +7 -0
  891. package/lib/esm/src/internal/manager-api/model/Errors.js +2 -0
  892. package/lib/esm/src/internal/manager-api/model/Errors.js.map +7 -0
  893. package/lib/esm/src/internal/manager-api/model/ManagerApiType.js +2 -0
  894. package/lib/esm/src/internal/manager-api/model/ManagerApiType.js.map +7 -0
  895. package/lib/esm/src/internal/manager-api/service/DefaultManagerApiService.js +2 -0
  896. package/lib/esm/src/internal/manager-api/service/DefaultManagerApiService.js.map +7 -0
  897. package/lib/esm/src/internal/manager-api/service/DefaultManagerApiService.test.js +2 -0
  898. package/lib/esm/src/internal/manager-api/service/DefaultManagerApiService.test.js.map +7 -0
  899. package/lib/esm/src/internal/manager-api/service/ManagerApiService.js +1 -0
  900. package/lib/esm/src/internal/manager-api/service/ManagerApiService.js.map +7 -0
  901. package/lib/esm/src/internal/send/di/sendModule.js +2 -0
  902. package/lib/esm/src/internal/send/di/sendModule.js.map +7 -0
  903. package/lib/esm/src/internal/send/di/sendModule.test.js +2 -0
  904. package/lib/esm/src/internal/send/di/sendModule.test.js.map +7 -0
  905. package/lib/esm/src/internal/send/di/sendTypes.js +2 -0
  906. package/lib/esm/src/internal/send/di/sendTypes.js.map +7 -0
  907. package/lib/esm/src/internal/send/use-case/SendApduUseCase.js +2 -0
  908. package/lib/esm/src/internal/send/use-case/SendApduUseCase.js.map +7 -0
  909. package/lib/esm/src/internal/send/use-case/SendApduUseCase.test.js +2 -0
  910. package/lib/esm/src/internal/send/use-case/SendApduUseCase.test.js.map +7 -0
  911. package/lib/esm/src/internal/transport/ble/di/bleDiTypes.js +2 -0
  912. package/lib/esm/src/internal/transport/ble/di/bleDiTypes.js.map +7 -0
  913. package/lib/esm/src/internal/transport/ble/di/bleModule.js +2 -0
  914. package/lib/esm/src/internal/transport/ble/di/bleModule.js.map +7 -0
  915. package/lib/esm/src/internal/transport/ble/di/bleModule.test.js +2 -0
  916. package/lib/esm/src/internal/transport/ble/di/bleModule.test.js.map +7 -0
  917. package/lib/esm/src/internal/transport/ble/model/BleDevice.stub.js +2 -0
  918. package/lib/esm/src/internal/transport/ble/model/BleDevice.stub.js.map +7 -0
  919. package/lib/esm/src/internal/transport/ble/model/BleDeviceInfos.js +2 -0
  920. package/lib/esm/src/internal/transport/ble/model/BleDeviceInfos.js.map +7 -0
  921. package/lib/esm/src/internal/transport/ble/service/BleDeviceConnectionFactory.js +2 -0
  922. package/lib/esm/src/internal/transport/ble/service/BleDeviceConnectionFactory.js.map +7 -0
  923. package/lib/esm/src/internal/transport/ble/service/BleDeviceConnectionFactory.stub.js +2 -0
  924. package/lib/esm/src/internal/transport/ble/service/BleDeviceConnectionFactory.stub.js.map +7 -0
  925. package/lib/esm/src/internal/transport/ble/transport/BleDeviceConnection.js +2 -0
  926. package/lib/esm/src/internal/transport/ble/transport/BleDeviceConnection.js.map +7 -0
  927. package/lib/esm/src/internal/transport/ble/transport/BleDeviceConnection.test.js +2 -0
  928. package/lib/esm/src/internal/transport/ble/transport/BleDeviceConnection.test.js.map +7 -0
  929. package/lib/esm/src/internal/transport/ble/transport/WebBleTransport.js +2 -0
  930. package/lib/esm/src/internal/transport/ble/transport/WebBleTransport.js.map +7 -0
  931. package/lib/esm/src/internal/transport/ble/transport/WebBleTransport.test.js +2 -0
  932. package/lib/esm/src/internal/transport/ble/transport/WebBleTransport.test.js.map +7 -0
  933. package/lib/esm/src/internal/transport/ble/transport/__mocks__/WebBleTransport.js +2 -0
  934. package/lib/esm/src/internal/transport/ble/transport/__mocks__/WebBleTransport.js.map +7 -0
  935. package/lib/esm/src/internal/transport/data/TransportDataSource.js +2 -0
  936. package/lib/esm/src/internal/transport/data/TransportDataSource.js.map +7 -0
  937. package/lib/esm/src/internal/transport/di/transportDiTypes.js +2 -0
  938. package/lib/esm/src/internal/transport/di/transportDiTypes.js.map +7 -0
  939. package/lib/esm/src/internal/transport/di/transportModule.js +2 -0
  940. package/lib/esm/src/internal/transport/di/transportModule.js.map +7 -0
  941. package/lib/esm/src/internal/transport/mockserver/MockserverTransport.js +2 -0
  942. package/lib/esm/src/internal/transport/mockserver/MockserverTransport.js.map +7 -0
  943. package/lib/esm/src/internal/transport/model/DeviceConnection.js +1 -0
  944. package/lib/esm/src/internal/transport/model/DeviceConnection.js.map +7 -0
  945. package/lib/esm/src/internal/transport/model/Errors.js +2 -0
  946. package/lib/esm/src/internal/transport/model/Errors.js.map +7 -0
  947. package/lib/esm/src/internal/transport/model/InternalConnectedDevice.js +2 -0
  948. package/lib/esm/src/internal/transport/model/InternalConnectedDevice.js.map +7 -0
  949. package/lib/esm/src/internal/transport/model/InternalConnectedDevice.stub.js +2 -0
  950. package/lib/esm/src/internal/transport/model/InternalConnectedDevice.stub.js.map +7 -0
  951. package/lib/esm/src/internal/transport/model/InternalConnectedDevice.test.js +2 -0
  952. package/lib/esm/src/internal/transport/model/InternalConnectedDevice.test.js.map +7 -0
  953. package/lib/esm/src/internal/transport/model/InternalDiscoveredDevice.js +1 -0
  954. package/lib/esm/src/internal/transport/model/InternalDiscoveredDevice.js.map +7 -0
  955. package/lib/esm/src/internal/transport/usb/data/UsbHidConfig.js +2 -0
  956. package/lib/esm/src/internal/transport/usb/data/UsbHidConfig.js.map +7 -0
  957. package/lib/esm/src/internal/transport/usb/di/usbDiTypes.js +2 -0
  958. package/lib/esm/src/internal/transport/usb/di/usbDiTypes.js.map +7 -0
  959. package/lib/esm/src/internal/transport/usb/di/usbModule.js +2 -0
  960. package/lib/esm/src/internal/transport/usb/di/usbModule.js.map +7 -0
  961. package/lib/esm/src/internal/transport/usb/di/usbModule.test.js +2 -0
  962. package/lib/esm/src/internal/transport/usb/di/usbModule.test.js.map +7 -0
  963. package/lib/esm/src/internal/transport/usb/model/HIDDevice.stub.js +2 -0
  964. package/lib/esm/src/internal/transport/usb/model/HIDDevice.stub.js.map +7 -0
  965. package/lib/esm/src/internal/transport/usb/service/UsbHidDeviceConnectionFactory.js +2 -0
  966. package/lib/esm/src/internal/transport/usb/service/UsbHidDeviceConnectionFactory.js.map +7 -0
  967. package/lib/esm/src/internal/transport/usb/service/UsbHidDeviceConnectionFactory.stub.js +2 -0
  968. package/lib/esm/src/internal/transport/usb/service/UsbHidDeviceConnectionFactory.stub.js.map +7 -0
  969. package/lib/esm/src/internal/transport/usb/transport/UsbHidDeviceConnection.js +2 -0
  970. package/lib/esm/src/internal/transport/usb/transport/UsbHidDeviceConnection.js.map +7 -0
  971. package/lib/esm/src/internal/transport/usb/transport/UsbHidDeviceConnection.test.js +2 -0
  972. package/lib/esm/src/internal/transport/usb/transport/UsbHidDeviceConnection.test.js.map +7 -0
  973. package/lib/esm/src/internal/transport/usb/transport/WebUsbHidTransport.js +2 -0
  974. package/lib/esm/src/internal/transport/usb/transport/WebUsbHidTransport.js.map +7 -0
  975. package/lib/esm/src/internal/transport/usb/transport/WebUsbHidTransport.test.js +2 -0
  976. package/lib/esm/src/internal/transport/usb/transport/WebUsbHidTransport.test.js.map +7 -0
  977. package/lib/esm/src/internal/transport/usb/transport/__mocks__/WebUsbHidTransport.js +2 -0
  978. package/lib/esm/src/internal/transport/usb/transport/__mocks__/WebUsbHidTransport.js.map +7 -0
  979. package/lib/types/src/api/{DeviceSdk.d.ts → DeviceManagementKit.d.ts} +38 -23
  980. package/lib/types/src/api/DeviceManagementKit.d.ts.map +1 -0
  981. package/lib/types/src/api/DeviceManagementKit.test.d.ts +2 -0
  982. package/lib/types/src/api/DeviceManagementKit.test.d.ts.map +1 -0
  983. package/lib/types/src/api/DeviceManagementKitBuilder.d.ts +35 -0
  984. package/lib/types/src/api/DeviceManagementKitBuilder.d.ts.map +1 -0
  985. package/lib/types/src/api/DeviceManagementKitBuilder.test.d.ts +2 -0
  986. package/lib/types/src/api/DeviceManagementKitBuilder.test.d.ts.map +1 -0
  987. package/lib/types/src/api/DmkConfig.d.ts +5 -0
  988. package/lib/types/src/api/DmkConfig.d.ts.map +1 -0
  989. package/lib/types/src/api/Error.d.ts +2 -2
  990. package/lib/types/src/api/apdu/utils/ApduBuilder.d.ts +1 -1
  991. package/lib/types/src/api/apdu/utils/ApduBuilder.d.ts.map +1 -1
  992. package/lib/types/src/api/apdu/utils/ApduParser.d.ts +2 -2
  993. package/lib/types/src/api/apdu/utils/ApduParser.d.ts.map +1 -1
  994. package/lib/types/src/api/apdu/utils/AppBuilderError.d.ts +5 -5
  995. package/lib/types/src/api/apdu/utils/AppBuilderError.d.ts.map +1 -1
  996. package/lib/types/src/api/apdu/utils/ByteArrayBuilder.d.ts +1 -1
  997. package/lib/types/src/api/apdu/utils/ByteArrayBuilder.d.ts.map +1 -1
  998. package/lib/types/src/api/apdu/utils/ByteArrayParser.d.ts +1 -1
  999. package/lib/types/src/api/apdu/utils/ByteArrayParser.d.ts.map +1 -1
  1000. package/lib/types/src/api/command/Command.d.ts +4 -4
  1001. package/lib/types/src/api/command/Command.d.ts.map +1 -1
  1002. package/lib/types/src/api/command/Errors.d.ts +6 -6
  1003. package/lib/types/src/api/command/Errors.d.ts.map +1 -1
  1004. package/lib/types/src/api/command/model/CommandResult.d.ts +3 -3
  1005. package/lib/types/src/api/command/model/CommandResult.d.ts.map +1 -1
  1006. package/lib/types/src/api/command/os/CloseAppCommand.d.ts +4 -4
  1007. package/lib/types/src/api/command/os/CloseAppCommand.d.ts.map +1 -1
  1008. package/lib/types/src/api/command/os/GetAppAndVersionCommand.d.ts +4 -4
  1009. package/lib/types/src/api/command/os/GetAppAndVersionCommand.d.ts.map +1 -1
  1010. package/lib/types/src/api/command/os/GetBatteryStatusCommand.d.ts +4 -4
  1011. package/lib/types/src/api/command/os/GetBatteryStatusCommand.d.ts.map +1 -1
  1012. package/lib/types/src/api/command/os/GetOsVersionCommand.d.ts +4 -4
  1013. package/lib/types/src/api/command/os/GetOsVersionCommand.d.ts.map +1 -1
  1014. package/lib/types/src/api/command/os/ListAppsCommand.d.ts +5 -5
  1015. package/lib/types/src/api/command/os/ListAppsCommand.d.ts.map +1 -1
  1016. package/lib/types/src/api/command/os/OpenAppCommand.d.ts +5 -5
  1017. package/lib/types/src/api/command/os/OpenAppCommand.d.ts.map +1 -1
  1018. package/lib/types/src/api/command/utils/CommandErrors.d.ts +1 -1
  1019. package/lib/types/src/api/command/utils/CommandErrors.d.ts.map +1 -1
  1020. package/lib/types/src/api/command/utils/CommandUtils.d.ts +1 -1
  1021. package/lib/types/src/api/command/utils/CommandUtils.d.ts.map +1 -1
  1022. package/lib/types/src/api/command/utils/GlobalCommandError.d.ts +4 -4
  1023. package/lib/types/src/api/command/utils/GlobalCommandError.d.ts.map +1 -1
  1024. package/lib/types/src/api/device-action/DeviceAction.d.ts +8 -8
  1025. package/lib/types/src/api/device-action/DeviceAction.d.ts.map +1 -1
  1026. package/lib/types/src/api/device-action/__test-utils__/makeInternalApi.d.ts +1 -1
  1027. package/lib/types/src/api/device-action/__test-utils__/makeInternalApi.d.ts.map +1 -1
  1028. package/lib/types/src/api/device-action/__test-utils__/setupTestMachine.d.ts +4 -4
  1029. package/lib/types/src/api/device-action/__test-utils__/setupTestMachine.d.ts.map +1 -1
  1030. package/lib/types/src/api/device-action/__test-utils__/testDeviceActionStates.d.ts +4 -4
  1031. package/lib/types/src/api/device-action/__test-utils__/testDeviceActionStates.d.ts.map +1 -1
  1032. package/lib/types/src/api/device-action/os/Errors.d.ts +4 -4
  1033. package/lib/types/src/api/device-action/os/Errors.d.ts.map +1 -1
  1034. package/lib/types/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.d.ts +5 -5
  1035. package/lib/types/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.d.ts.map +1 -1
  1036. package/lib/types/src/api/device-action/os/GetDeviceStatus/types.d.ts +6 -6
  1037. package/lib/types/src/api/device-action/os/GetDeviceStatus/types.d.ts.map +1 -1
  1038. package/lib/types/src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.d.ts +5 -5
  1039. package/lib/types/src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.d.ts.map +1 -1
  1040. package/lib/types/src/api/device-action/os/GoToDashboard/types.d.ts +5 -5
  1041. package/lib/types/src/api/device-action/os/GoToDashboard/types.d.ts.map +1 -1
  1042. package/lib/types/src/api/device-action/os/ListApps/ListAppsDeviceAction.d.ts +4 -4
  1043. package/lib/types/src/api/device-action/os/ListApps/ListAppsDeviceAction.d.ts.map +1 -1
  1044. package/lib/types/src/api/device-action/os/ListApps/types.d.ts +6 -6
  1045. package/lib/types/src/api/device-action/os/ListApps/types.d.ts.map +1 -1
  1046. package/lib/types/src/api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction.d.ts +9 -9
  1047. package/lib/types/src/api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction.d.ts.map +1 -1
  1048. package/lib/types/src/api/device-action/os/ListAppsWithMetadata/types.d.ts +8 -8
  1049. package/lib/types/src/api/device-action/os/ListAppsWithMetadata/types.d.ts.map +1 -1
  1050. package/lib/types/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.d.ts +7 -9
  1051. package/lib/types/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.d.ts.map +1 -1
  1052. package/lib/types/src/api/device-action/os/OpenAppDeviceAction/types.d.ts +7 -6
  1053. package/lib/types/src/api/device-action/os/OpenAppDeviceAction/types.d.ts.map +1 -1
  1054. package/lib/types/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.d.ts +6 -6
  1055. package/lib/types/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.d.ts.map +1 -1
  1056. package/lib/types/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceActionTypes.d.ts +3 -3
  1057. package/lib/types/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceActionTypes.d.ts.map +1 -1
  1058. package/lib/types/src/api/device-action/use-case/ExecuteDeviceActionUseCase.d.ts +3 -3
  1059. package/lib/types/src/api/device-action/xstate-utils/StateMachineTypes.d.ts +1 -1
  1060. package/lib/types/src/api/device-action/xstate-utils/StateMachineTypes.d.ts.map +1 -1
  1061. package/lib/types/src/api/device-action/xstate-utils/XStateDeviceAction.d.ts +6 -6
  1062. package/lib/types/src/api/device-action/xstate-utils/XStateDeviceAction.d.ts.map +1 -1
  1063. package/lib/types/src/api/device-session/ApduResponse.stub.d.ts +1 -1
  1064. package/lib/types/src/api/device-session/ApduResponse.stub.d.ts.map +1 -1
  1065. package/lib/types/src/api/device-session/DeviceSessionState.d.ts +4 -4
  1066. package/lib/types/src/api/device-session/DeviceSessionState.d.ts.map +1 -1
  1067. package/lib/types/src/api/index.d.ts +3 -3
  1068. package/lib/types/src/api/index.d.ts.map +1 -1
  1069. package/lib/types/src/api/logger-subscriber/service/ConsoleLogger.d.ts +2 -2
  1070. package/lib/types/src/api/logger-subscriber/service/ConsoleLogger.d.ts.map +1 -1
  1071. package/lib/types/src/api/logger-subscriber/service/LoggerSubscriberService.d.ts +9 -4
  1072. package/lib/types/src/api/logger-subscriber/service/LoggerSubscriberService.d.ts.map +1 -1
  1073. package/lib/types/src/api/logger-subscriber/service/WebLogsExporterLogger.d.ts +2 -2
  1074. package/lib/types/src/api/logger-subscriber/service/WebLogsExporterLogger.d.ts.map +1 -1
  1075. package/lib/types/src/api/transport/model/ConnectedDevice.d.ts +7 -4
  1076. package/lib/types/src/api/transport/model/ConnectedDevice.d.ts.map +1 -1
  1077. package/lib/types/src/api/transport/model/DiscoveredDevice.d.ts +2 -2
  1078. package/lib/types/src/api/transport/model/DiscoveredDevice.d.ts.map +1 -1
  1079. package/lib/types/src/api/transport/model/Transport.d.ts +10 -9
  1080. package/lib/types/src/api/transport/model/Transport.d.ts.map +1 -1
  1081. package/lib/types/src/api/transport/model/TransportIdentifier.d.ts +1 -0
  1082. package/lib/types/src/api/transport/model/TransportIdentifier.d.ts.map +1 -1
  1083. package/lib/types/src/api/types.d.ts +1 -1
  1084. package/lib/types/src/api/types.d.ts.map +1 -1
  1085. package/lib/types/src/di.d.ts +5 -5
  1086. package/lib/types/src/di.d.ts.map +1 -1
  1087. package/lib/types/src/internal/config/data/ConfigDataSource.d.ts +3 -3
  1088. package/lib/types/src/internal/config/data/ConfigDataSource.d.ts.map +1 -1
  1089. package/lib/types/src/internal/config/data/__mocks__/LocalConfigDataSource.d.ts +1 -1
  1090. package/lib/types/src/internal/config/data/__mocks__/LocalConfigDataSource.d.ts.map +1 -1
  1091. package/lib/types/src/internal/config/data/__mocks__/RemoteConfigDataSource.d.ts +1 -1
  1092. package/lib/types/src/internal/config/data/__mocks__/RemoteConfigDataSource.d.ts.map +1 -1
  1093. package/lib/types/src/internal/config/di/configTypes.d.ts +1 -1
  1094. package/lib/types/src/internal/config/service/ConfigService.d.ts +2 -2
  1095. package/lib/types/src/internal/config/service/ConfigService.d.ts.map +1 -1
  1096. package/lib/types/src/internal/config/service/DefaultConfigService.d.ts +1 -1
  1097. package/lib/types/src/internal/config/use-case/GetDmkVersionUseCase.d.ts +12 -0
  1098. package/lib/types/src/internal/config/use-case/{GetSdkVersionUseCase.d.ts.map → GetDmkVersionUseCase.d.ts.map} +1 -1
  1099. package/lib/types/src/internal/config/use-case/GetDmkVersionUseCase.test.d.ts +2 -0
  1100. package/lib/types/src/internal/config/use-case/GetDmkVersionUseCase.test.d.ts.map +1 -0
  1101. package/lib/types/src/internal/device-model/data/DeviceModelDataSource.d.ts +5 -2
  1102. package/lib/types/src/internal/device-model/data/DeviceModelDataSource.d.ts.map +1 -1
  1103. package/lib/types/src/internal/device-model/data/StaticDeviceModelDataSource.d.ts +3 -0
  1104. package/lib/types/src/internal/device-model/data/StaticDeviceModelDataSource.d.ts.map +1 -1
  1105. package/lib/types/src/internal/device-model/model/DeviceModel.stub.d.ts +1 -1
  1106. package/lib/types/src/internal/device-model/model/DeviceModel.stub.d.ts.map +1 -1
  1107. package/lib/types/src/internal/device-session/data/DeviceSessionRefresherConst.d.ts +2 -0
  1108. package/lib/types/src/internal/device-session/data/DeviceSessionRefresherConst.d.ts.map +1 -0
  1109. package/lib/types/src/internal/device-session/di/deviceSessionModule.d.ts.map +1 -1
  1110. package/lib/types/src/internal/device-session/di/deviceSessionTypes.d.ts +0 -1
  1111. package/lib/types/src/internal/device-session/di/deviceSessionTypes.d.ts.map +1 -1
  1112. package/lib/types/src/internal/device-session/model/DeviceSession.d.ts +11 -11
  1113. package/lib/types/src/internal/device-session/model/DeviceSession.d.ts.map +1 -1
  1114. package/lib/types/src/internal/device-session/model/DeviceSession.stub.d.ts +2 -2
  1115. package/lib/types/src/internal/device-session/model/DeviceSession.stub.d.ts.map +1 -1
  1116. package/lib/types/src/internal/device-session/model/DeviceSessionRefresher.d.ts +28 -4
  1117. package/lib/types/src/internal/device-session/model/DeviceSessionRefresher.d.ts.map +1 -1
  1118. package/lib/types/src/internal/device-session/model/Errors.d.ts +6 -6
  1119. package/lib/types/src/internal/device-session/model/Errors.d.ts.map +1 -1
  1120. package/lib/types/src/internal/device-session/model/Frame.d.ts +1 -1
  1121. package/lib/types/src/internal/device-session/model/Frame.d.ts.map +1 -1
  1122. package/lib/types/src/internal/device-session/model/FrameHeader.d.ts +1 -1
  1123. package/lib/types/src/internal/device-session/model/FrameHeader.d.ts.map +1 -1
  1124. package/lib/types/src/internal/device-session/service/ApduReceiverService.d.ts +4 -4
  1125. package/lib/types/src/internal/device-session/service/ApduReceiverService.d.ts.map +1 -1
  1126. package/lib/types/src/internal/device-session/service/ApduSenderService.d.ts +1 -1
  1127. package/lib/types/src/internal/device-session/service/ApduSenderService.d.ts.map +1 -1
  1128. package/lib/types/src/internal/device-session/service/DefaultApduReceiverService.stub.d.ts +3 -3
  1129. package/lib/types/src/internal/device-session/service/DefaultApduReceiverService.stub.d.ts.map +1 -1
  1130. package/lib/types/src/internal/device-session/service/DefaultApduSenderService.stub.d.ts +3 -3
  1131. package/lib/types/src/internal/device-session/service/DefaultApduSenderService.stub.d.ts.map +1 -1
  1132. package/lib/types/src/internal/device-session/service/DefaultDeviceSessionService.d.ts +4 -1
  1133. package/lib/types/src/internal/device-session/service/DefaultDeviceSessionService.d.ts.map +1 -1
  1134. package/lib/types/src/internal/device-session/service/DeviceSessionService.d.ts +7 -5
  1135. package/lib/types/src/internal/device-session/service/DeviceSessionService.d.ts.map +1 -1
  1136. package/lib/types/src/internal/device-session/use-case/CloseSessionsUseState.test.d.ts +2 -0
  1137. package/lib/types/src/internal/device-session/use-case/CloseSessionsUseState.test.d.ts.map +1 -0
  1138. package/lib/types/src/internal/discovery/di/discoveryModule.d.ts.map +1 -1
  1139. package/lib/types/src/internal/discovery/di/discoveryTypes.d.ts +3 -0
  1140. package/lib/types/src/internal/discovery/di/discoveryTypes.d.ts.map +1 -1
  1141. package/lib/types/src/internal/discovery/use-case/DisconnectUseCase.d.ts +1 -1
  1142. package/lib/types/src/internal/discovery/use-case/GetConnectedDeviceUseCase.d.ts.map +1 -1
  1143. package/lib/types/src/internal/{device-session/use-case/ListDeviceSessionsUseCase.d.ts → discovery/use-case/ListConnectedDevicesUseCase.d.ts} +5 -5
  1144. package/lib/types/src/internal/discovery/use-case/ListConnectedDevicesUseCase.d.ts.map +1 -0
  1145. package/lib/types/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.d.ts +2 -0
  1146. package/lib/types/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.d.ts.map +1 -0
  1147. package/lib/types/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.d.ts +14 -0
  1148. package/lib/types/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.d.ts.map +1 -0
  1149. package/lib/types/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.d.ts +2 -0
  1150. package/lib/types/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.d.ts.map +1 -0
  1151. package/lib/types/src/internal/discovery/use-case/ListenToKnownDevicesUseCase.d.ts +13 -0
  1152. package/lib/types/src/internal/discovery/use-case/ListenToKnownDevicesUseCase.d.ts.map +1 -0
  1153. package/lib/types/src/internal/discovery/use-case/ListenToKnownDevicesUseCase.test.d.ts +2 -0
  1154. package/lib/types/src/internal/discovery/use-case/ListenToKnownDevicesUseCase.test.d.ts.map +1 -0
  1155. package/lib/types/src/internal/logger-publisher/di/loggerModule.d.ts +1 -1
  1156. package/lib/types/src/internal/logger-publisher/di/loggerModule.d.ts.map +1 -1
  1157. package/lib/types/src/internal/logger-publisher/service/LoggerPublisherService.d.ts +2 -2
  1158. package/lib/types/src/internal/logger-publisher/service/LoggerPublisherService.d.ts.map +1 -1
  1159. package/lib/types/src/internal/logger-publisher/service/__mocks__/DefaultLoggerService.d.ts +1 -1
  1160. package/lib/types/src/internal/logger-publisher/service/__mocks__/DefaultLoggerService.d.ts.map +1 -1
  1161. package/lib/types/src/internal/manager-api/data/AxiosManagerApiDataSource.d.ts +2 -2
  1162. package/lib/types/src/internal/manager-api/data/ManagerApiDataSource.d.ts +3 -3
  1163. package/lib/types/src/internal/manager-api/data/ManagerApiDataSource.d.ts.map +1 -1
  1164. package/lib/types/src/internal/manager-api/data/__mocks__/AxiosManagerApiDataSource.d.ts +1 -1
  1165. package/lib/types/src/internal/manager-api/data/__mocks__/AxiosManagerApiDataSource.d.ts.map +1 -1
  1166. package/lib/types/src/internal/manager-api/di/managerApiModule.d.ts +2 -2
  1167. package/lib/types/src/internal/manager-api/di/managerApiModule.d.ts.map +1 -1
  1168. package/lib/types/src/internal/manager-api/di/managerApiTypes.d.ts +1 -1
  1169. package/lib/types/src/internal/manager-api/model/Errors.d.ts +2 -2
  1170. package/lib/types/src/internal/manager-api/model/Errors.d.ts.map +1 -1
  1171. package/lib/types/src/internal/manager-api/service/ManagerApiService.d.ts +4 -4
  1172. package/lib/types/src/internal/manager-api/service/ManagerApiService.d.ts.map +1 -1
  1173. package/lib/types/src/internal/send/use-case/SendApduUseCase.d.ts +1 -1
  1174. package/lib/types/src/internal/transport/ble/di/bleDiTypes.d.ts +4 -0
  1175. package/lib/types/src/internal/transport/ble/di/bleDiTypes.d.ts.map +1 -0
  1176. package/lib/types/src/internal/transport/ble/di/bleModule.d.ts +3 -0
  1177. package/lib/types/src/internal/transport/ble/di/bleModule.d.ts.map +1 -0
  1178. package/lib/types/src/internal/transport/ble/di/bleModule.test.d.ts +2 -0
  1179. package/lib/types/src/internal/transport/ble/di/bleModule.test.d.ts.map +1 -0
  1180. package/lib/types/src/internal/transport/ble/model/BleDevice.stub.d.ts +3 -0
  1181. package/lib/types/src/internal/transport/ble/model/BleDevice.stub.d.ts.map +1 -0
  1182. package/lib/types/src/internal/transport/ble/model/BleDeviceInfos.d.ts +10 -0
  1183. package/lib/types/src/internal/transport/ble/model/BleDeviceInfos.d.ts.map +1 -0
  1184. package/lib/types/src/internal/transport/ble/service/BleDeviceConnectionFactory.d.ts +13 -0
  1185. package/lib/types/src/internal/transport/ble/service/BleDeviceConnectionFactory.d.ts.map +1 -0
  1186. package/lib/types/src/internal/transport/ble/service/BleDeviceConnectionFactory.stub.d.ts +3 -0
  1187. package/lib/types/src/internal/transport/ble/service/BleDeviceConnectionFactory.stub.d.ts.map +1 -0
  1188. package/lib/types/src/internal/transport/ble/transport/BleDeviceConnection.d.ts +104 -0
  1189. package/lib/types/src/internal/transport/ble/transport/BleDeviceConnection.d.ts.map +1 -0
  1190. package/lib/types/src/internal/transport/ble/transport/BleDeviceConnection.test.d.ts +2 -0
  1191. package/lib/types/src/internal/transport/ble/transport/BleDeviceConnection.test.d.ts.map +1 -0
  1192. package/lib/types/src/internal/transport/ble/transport/WebBleTransport.d.ts +97 -0
  1193. package/lib/types/src/internal/transport/ble/transport/WebBleTransport.d.ts.map +1 -0
  1194. package/lib/types/src/internal/transport/ble/transport/WebBleTransport.test.d.ts +2 -0
  1195. package/lib/types/src/internal/transport/ble/transport/WebBleTransport.test.d.ts.map +1 -0
  1196. package/lib/types/src/internal/transport/ble/transport/__mocks__/WebBleTransport.d.ts +14 -0
  1197. package/lib/types/src/internal/transport/ble/transport/__mocks__/WebBleTransport.d.ts.map +1 -0
  1198. package/lib/types/src/internal/transport/data/TransportDataSource.d.ts +2 -2
  1199. package/lib/types/src/internal/transport/data/TransportDataSource.d.ts.map +1 -1
  1200. package/lib/types/src/internal/transport/di/transportDiTypes.d.ts +1 -1
  1201. package/lib/types/src/internal/transport/di/transportModule.d.ts +4 -4
  1202. package/lib/types/src/internal/transport/di/transportModule.d.ts.map +1 -1
  1203. package/lib/types/src/internal/transport/mockserver/MockserverTransport.d.ts +6 -5
  1204. package/lib/types/src/internal/transport/mockserver/MockserverTransport.d.ts.map +1 -1
  1205. package/lib/types/src/internal/transport/model/DeviceConnection.d.ts +5 -5
  1206. package/lib/types/src/internal/transport/model/DeviceConnection.d.ts.map +1 -1
  1207. package/lib/types/src/internal/transport/model/Errors.d.ts +34 -14
  1208. package/lib/types/src/internal/transport/model/Errors.d.ts.map +1 -1
  1209. package/lib/types/src/internal/transport/model/InternalConnectedDevice.d.ts +5 -5
  1210. package/lib/types/src/internal/transport/model/InternalConnectedDevice.d.ts.map +1 -1
  1211. package/lib/types/src/internal/transport/model/InternalConnectedDevice.stub.d.ts +1 -1
  1212. package/lib/types/src/internal/transport/model/InternalConnectedDevice.stub.d.ts.map +1 -1
  1213. package/lib/types/src/internal/transport/model/InternalDiscoveredDevice.d.ts +3 -3
  1214. package/lib/types/src/internal/transport/model/InternalDiscoveredDevice.d.ts.map +1 -1
  1215. package/lib/types/src/internal/transport/usb/transport/UsbHidDeviceConnection.d.ts +2 -2
  1216. package/lib/types/src/internal/transport/usb/transport/WebUsbHidTransport.d.ts +27 -33
  1217. package/lib/types/src/internal/transport/usb/transport/WebUsbHidTransport.d.ts.map +1 -1
  1218. package/lib/types/src/internal/transport/usb/transport/__mocks__/WebUsbHidTransport.d.ts +2 -1
  1219. package/lib/types/src/internal/transport/usb/transport/__mocks__/WebUsbHidTransport.d.ts.map +1 -1
  1220. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  1221. package/package.json +17 -13
  1222. package/lib/types/src/api/DeviceSdk.d.ts.map +0 -1
  1223. package/lib/types/src/api/DeviceSdk.test.d.ts +0 -2
  1224. package/lib/types/src/api/DeviceSdk.test.d.ts.map +0 -1
  1225. package/lib/types/src/api/DeviceSdkBuilder.d.ts +0 -35
  1226. package/lib/types/src/api/DeviceSdkBuilder.d.ts.map +0 -1
  1227. package/lib/types/src/api/DeviceSdkBuilder.test.d.ts +0 -2
  1228. package/lib/types/src/api/DeviceSdkBuilder.test.d.ts.map +0 -1
  1229. package/lib/types/src/api/SdkConfig.d.ts +0 -5
  1230. package/lib/types/src/api/SdkConfig.d.ts.map +0 -1
  1231. package/lib/types/src/internal/config/use-case/GetSdkVersionUseCase.d.ts +0 -12
  1232. package/lib/types/src/internal/config/use-case/GetSdkVersionUseCase.test.d.ts +0 -2
  1233. package/lib/types/src/internal/config/use-case/GetSdkVersionUseCase.test.d.ts.map +0 -1
  1234. package/lib/types/src/internal/device-session/use-case/ListDeviceSessionsUseCase.d.ts.map +0 -1
  1235. package/lib/types/src/internal/device-session/use-case/ListDeviceSessionsUseCase.test.d.ts +0 -2
  1236. package/lib/types/src/internal/device-session/use-case/ListDeviceSessionsUseCase.test.d.ts.map +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../index.ts", "../../src/index.ts", "../../src/api/apdu/model/Apdu.ts", "../../src/api/utils/HexaString.ts", "../../src/api/apdu/utils/AppBuilderError.ts", "../../src/api/apdu/utils/ByteArrayBuilder.ts", "../../src/api/apdu/utils/ApduBuilder.ts", "../../src/api/apdu/utils/ByteArrayParser.ts", "../../src/api/apdu/utils/ApduParser.ts", "../../src/api/command/model/CommandResult.ts", "../../src/api/command/utils/CommandUtils.ts", "../../src/api/Error.ts", "../../src/api/command/utils/CommandErrors.ts", "../../src/api/command/utils/GlobalCommandError.ts", "../../src/api/command/os/CloseAppCommand.ts", "../../src/api/command/Errors.ts", "../../src/api/command/os/GetAppAndVersionCommand.ts", "../../src/api/command/os/GetBatteryStatusCommand.ts", "../../src/api/device/DeviceModel.ts", "../../src/api/command/os/GetOsVersionCommand.ts", "../../src/api/command/os/ListAppsCommand.ts", "../../src/api/command/os/OpenAppCommand.ts", "../../src/api/device/DeviceStatus.ts", "../../src/api/device-session/ApduResponse.ts", "../../src/api/command/di/commandTypes.ts", "../../src/internal/config/di/configTypes.ts", "../../src/internal/device-session/di/deviceSessionTypes.ts", "../../src/internal/discovery/di/discoveryTypes.ts", "../../src/internal/send/di/sendTypes.ts", "../../src/di.ts", "../../src/api/command/di/commandModule.ts", "../../src/api/command/use-case/SendCommandUseCase.ts", "../../src/internal/logger-publisher/di/loggerTypes.ts", "../../src/di.stub.ts", "../../src/api/device-action/di/deviceActionModule.ts", "../../src/api/device-action/use-case/ExecuteDeviceActionUseCase.ts", "../../src/api/device-action/di/deviceActionTypes.ts", "../../src/internal/config/di/configModule.ts", "../../src/internal/config/data/LocalConfigDataSource.ts", "../../src/internal/config/model/Config.ts", "../../src/internal/config/model/Errors.ts", "../../package.json", "../../src/internal/config/data/LocalConfigDataSource.stub.ts", "../../src/internal/config/data/RemoteConfigDataSource.ts", "../../src/internal/config/data/RemoteConfigDataSource.stub.ts", "../../src/internal/config/service/DefaultConfigService.ts", "../../src/internal/config/use-case/GetSdkVersionUseCase.ts", "../../src/internal/device-model/di/deviceModelModule.ts", "../../src/internal/device-model/data/StaticDeviceModelDataSource.ts", "../../src/internal/device-model/model/DeviceModel.ts", "../../src/internal/device-model/di/deviceModelTypes.ts", "../../src/internal/device-session/di/deviceSessionModule.ts", "../../src/internal/device-session/service/DefaultApduReceiverService.ts", "../../src/internal/device-session/data/ApduResponseConst.ts", "../../src/internal/device-session/data/FramerConst.ts", "../../src/internal/device-session/model/Errors.ts", "../../src/internal/device-session/model/Frame.ts", "../../src/internal/device-session/utils/FramerUtils.ts", "../../src/internal/device-session/model/FrameHeader.ts", "../../src/internal/device-session/service/DefaultApduSenderService.ts", "../../src/internal/device-session/service/DefaultDeviceSessionService.ts", "../../src/internal/device-session/use-case/CloseSessionsUseCase.ts", "../../src/internal/device-session/use-case/GetDeviceSessionStateUseCase.ts", "../../src/internal/device-session/use-case/ListDeviceSessionsUseCase.ts", "../../src/internal/discovery/di/discoveryModule.ts", "../../src/internal/discovery/use-case/ConnectUseCase.ts", "../../src/internal/device-session/model/DeviceSession.ts", "../../src/api/device-session/DeviceSessionState.ts", "../../src/internal/device-session/model/DeviceSessionRefresher.ts", "../../src/internal/manager-api/di/managerApiTypes.ts", "../../src/internal/transport/di/transportDiTypes.ts", "../../src/internal/transport/model/Errors.ts", "../../src/internal/discovery/use-case/DisconnectUseCase.ts", "../../src/internal/discovery/use-case/GetConnectedDeviceUseCase.ts", "../../src/api/transport/model/ConnectedDevice.ts", "../../src/internal/discovery/use-case/StartDiscoveringUseCase.ts", "../../src/internal/discovery/use-case/StopDiscoveringUseCase.ts", "../../src/internal/logger-publisher/di/loggerModule.ts", "../../src/internal/logger-publisher/service/DefaultLoggerPublisherService.ts", "../../src/api/logger-subscriber/model/LogLevel.ts", "../../src/internal/manager-api/di/managerApiModule.ts", "../../src/internal/manager-api/data/AxiosManagerApiDataSource.ts", "../../src/internal/manager-api/model/Errors.ts", "../../src/internal/manager-api/service/DefaultManagerApiService.ts", "../../src/internal/manager-api/model/Const.ts", "../../src/internal/send/di/sendModule.ts", "../../src/internal/send/use-case/SendApduUseCase.ts", "../../src/internal/transport/di/transportModule.ts", "../../src/api/transport/model/TransportIdentifier.ts", "../../src/internal/transport/mockserver/MockserverTransport.ts", "../../src/internal/transport/usb/transport/WebUsbHidTransport.ts", "../../src/internal/transport/model/InternalConnectedDevice.ts", "../../src/internal/transport/usb/data/UsbHidConfig.ts", "../../src/internal/transport/usb/di/usbDiTypes.ts", "../../src/internal/transport/data/TransportDataSource.ts", "../../src/internal/transport/usb/di/usbModule.ts", "../../src/internal/transport/usb/service/UsbHidDeviceConnectionFactory.ts", "../../src/internal/transport/usb/transport/UsbHidDeviceConnection.ts", "../../src/api/DeviceSdk.ts", "../../src/api/DeviceSdkBuilder.ts", "../../src/api/logger-subscriber/service/ConsoleLogger.ts", "../../src/api/logger-subscriber/service/WebLogsExporterLogger.ts", "../../src/api/device-action/model/DeviceActionState.ts", "../../src/api/device-action/model/UserInteractionRequired.ts", "../../src/api/device-action/os/Errors.ts", "../../src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.ts", "../../src/api/device-action/os/Const.ts", "../../src/api/device-action/xstate-utils/XStateDeviceAction.ts", "../../src/api/device-action/os/GoToDashboard/GoToDashboardDeviceAction.ts", "../../src/api/device-action/os/ListApps/ListAppsDeviceAction.ts", "../../src/api/device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction.ts", "../../src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.ts", "../../src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.ts", "../../src/api/utils/Base64String.ts"],
4
- "sourcesContent": ["export * from \"./src\";\n", "import \"reflect-metadata\";\n\nexport * from \"./api\";\n", "/**\n * An APDU command that can be sent to a device.\n * DO NOT USE THIS CLASS DIRECTLY, use ApduBuilder instead.\n */\nexport class Apdu {\n /**\n * Instruction class (1 byte)\n */\n readonly cla: number;\n\n /**\n * Instruction code (1 byte)\n */\n readonly ins: number;\n\n /**\n * Instruction parameter 1 (2 bytes)\n */\n readonly p1: number;\n\n /**\n * Instruction parameter 2 (2 bytes)\n */\n readonly p2: number;\n\n /**\n * Bytes of data\n */\n readonly data: Uint8Array;\n\n constructor(\n cla: number,\n ins: number,\n p1: number,\n p2: number,\n data?: Uint8Array,\n ) {\n this.cla = cla;\n this.ins = ins;\n this.p1 = p1;\n this.p2 = p2;\n this.data = data ?? new Uint8Array();\n }\n\n /**\n * Get the raw binary data of the APDU command\n * @returns {Uint8Array} - The raw APDU command\n */\n getRawApdu(): Uint8Array {\n const header = Uint8Array.from([\n this.cla,\n this.ins,\n this.p1,\n this.p2,\n this.data.length,\n ]);\n\n const apdu = new Uint8Array(header.length + this.data.length);\n apdu.set(header, 0);\n\n if (this.data.length > 0) {\n apdu.set(this.data, header.length);\n }\n\n return apdu;\n }\n}\n", "export type HexaString = `0x${string}`;\n\nexport const isHexaString = (value: string): value is HexaString => {\n return /^0x[0-9a-fA-F]*$/.test(value);\n};\n\nexport const hexaStringToBuffer = (value: string): Uint8Array | null => {\n if (value.startsWith(\"0x\")) {\n value = value.slice(2);\n }\n if (value.length === 0) {\n return new Uint8Array();\n }\n if (value.length % 2 !== 0) {\n value = \"0\" + value;\n }\n if (/^[0-9a-fA-F]*$/.test(value) === false) {\n return null;\n }\n const bytes = value.match(/.{1,2}/g)?.map((byte) => parseInt(byte, 16));\n if (!bytes || bytes.some(isNaN)) {\n return null;\n }\n return new Uint8Array(bytes);\n};\n\nexport const bufferToHexaString = (value: Uint8Array): HexaString => {\n return `0x${Array.from(value, (byte) =>\n byte.toString(16).padStart(2, \"0\"),\n ).join(\"\")}`;\n};\n", "import { SdkError } from \"@api/Error\";\n\nimport { APDU_MAX_PAYLOAD } from \"./ApduBuilder\";\n\ninterface SdkAppBuilderError extends SdkError {\n readonly message: string;\n}\n\nexport class ValueOverflowError implements SdkAppBuilderError {\n readonly _tag = \"ValueOverflow\";\n readonly originalError?: Error;\n readonly message: string;\n constructor(value: string, max: number | bigint = APDU_MAX_PAYLOAD) {\n this.message = `Value overflow for ${value}, max is ${max}`;\n }\n}\n\nexport class DataOverflowError implements SdkAppBuilderError {\n readonly _tag = \"DataOverflow\";\n readonly message: string;\n readonly originalError?: Error;\n constructor(value: string, remaining = 0) {\n this.message =\n remaining === 0\n ? `this.data is already full (value: ${value})`\n : `this.data will overflow with \"${value}\", remaining bytes: ${remaining}`;\n }\n}\n\nexport class HexaStringEncodeError implements SdkAppBuilderError {\n readonly _tag = \"HexaString\";\n readonly message: string;\n readonly originalError?: Error;\n constructor(value: string) {\n this.message = `Invalid encoded hexa string or length is null: ${value}`;\n }\n}\n\n/**\n * Type for all possible errors that can be thrown by the AppBuilder.\n */\nexport type AppBuilderError =\n | ValueOverflowError\n | DataOverflowError\n | HexaStringEncodeError;\n", "import { hexaStringToBuffer } from \"@api/utils/HexaString\";\n\nimport {\n AppBuilderError,\n DataOverflowError,\n HexaStringEncodeError,\n ValueOverflowError,\n} from \"./AppBuilderError\";\n\nconst MAX_32_BIT_UINT = 0xffffffff;\n\n/**\n * ByteArrayBuilder is a utility class to help build APDU payloads.\n * It allows to easily add data to the payload of an APDU command\n * and to encode this data in different formats.\n *\n * @example\n * ```\n * const builder = new ByteArrayBuilder(255)\n * .add8BitUIntToData(0x05)\n * .add16BitUIntToData(0x0607)\n * .addHexaStringToData(\"0x0809\")\n * .addAsciiStringToData(\"hello\")\n *\n * const payload = builder.build();\n * const builderErrors = builder.getErrors();\n * ```\n */\nexport class ByteArrayBuilder {\n private data: Uint8Array = new Uint8Array();\n private readonly errors: AppBuilderError[] = []; // Custom Error\n\n constructor(private maxPayloadSize: number = MAX_32_BIT_UINT) {}\n\n // ==========\n // Public API\n // ==========\n\n /**\n * Build a new payload instance with the current state of the builder\n * @returns {payload} - Returns a new payload instance\n */\n build = (): Uint8Array => this.data;\n\n /**\n * Try to build a new payload instance with the current state of the builder\n * if the builder don't contain any error.\n * @returns {payload | undefined} - Returns a new payload instance or undefined\n */\n tryBuild = (): Uint8Array | undefined => {\n return this.hasErrors() ? undefined : this.data;\n };\n\n /**\n * Add a 8-bit unsigned integer to the payload (max value 0xff = 255)\n * @param value: number | bigint - The value to add to the data\n * @returns {ByteArrayBuilder} - Returns the current instance of ByteArrayBuilder\n */\n add8BitUIntToData = (value: number | bigint): ByteArrayBuilder => {\n return this.addNumberToData(value, 8n, false, false);\n };\n\n /**\n * Add a 16-bit unsigned integer to the payload (max value 0xffff = 65535)\n * @param value: number | bigint - The value to add to the data\n * @param bigEndian: boolean - True to encode in big endian, false for little endian\n * @returns {ByteArrayBuilder} - Returns the current instance of ByteArrayBuilder\n */\n add16BitUIntToData = (\n value: number | bigint,\n bigEndian: boolean = true,\n ): ByteArrayBuilder => {\n return this.addNumberToData(value, 16n, false, bigEndian);\n };\n\n /**\n * Add a 32-bit unsigned integer to the payload (max value 0xffffffff = 4294967295)\n * @param value: number | bigint - The value to add to the data\n * @param bigEndian: boolean - True to encode in big endian, false for little endian\n * @returns {ByteArrayBuilder} - Returns the current instance of ByteArrayBuilder\n */\n add32BitUIntToData = (\n value: number | bigint,\n bigEndian: boolean = true,\n ): ByteArrayBuilder => {\n return this.addNumberToData(value, 32n, false, bigEndian);\n };\n\n /**\n * Add a 64-bit unsigned integer to the payload (max value 0xffffffffffffffff = 18446744073709551615)\n * @param value: number | bigint - The value to add to the data\n * @param bigEndian: boolean - True to encode in big endian, false for little endian\n * @returns {ByteArrayBuilder} - Returns the current instance of ByteArrayBuilder\n */\n add64BitUIntToData = (\n value: number | bigint,\n bigEndian: boolean = true,\n ): ByteArrayBuilder => {\n return this.addNumberToData(value, 64n, false, bigEndian);\n };\n\n /**\n * Add a 16-bit signed integer to the payload (value between -0x8000 to 0x7fff)\n * @param value: number | bigint - The value to add to the data\n * @param bigEndian: boolean - True to encode in big endian, false for little endian\n * @returns {ByteArrayBuilder} - Returns the current instance of ByteArrayBuilder\n */\n add16BitIntToData = (\n value: number | bigint,\n bigEndian: boolean = true,\n ): ByteArrayBuilder => {\n return this.addNumberToData(value, 16n, true, bigEndian);\n };\n\n /**\n * Add a 32-bit signed integer to the payload (value between -0x80000000 to 0x7fffffff)\n * @param value: number | bigint - The value to add to the data\n * @param bigEndian: boolean - True to encode in big endian, false for little endian\n * @returns {ByteArrayBuilder} - Returns the current instance of ByteArrayBuilder\n */\n add32BitIntToData = (\n value: number | bigint,\n bigEndian: boolean = true,\n ): ByteArrayBuilder => {\n return this.addNumberToData(value, 32n, true, bigEndian);\n };\n\n /**\n * Add a 64-bit signed integer to the payload (value between -0x8000000000000000 to 0x7fffffffffffffff)\n * @param value: number | bigint - The value to add to the data\n * @param bigEndian: boolean - True to encode in big endian, false for little endian\n * @returns {ByteArrayBuilder} - Returns the current instance of ByteArrayBuilder\n */\n add64BitIntToData = (\n value: number | bigint,\n bigEndian: boolean = true,\n ): ByteArrayBuilder => {\n return this.addNumberToData(value, 64n, true, bigEndian);\n };\n\n /**\n * Add a Uint8Array to the payload if it has enough remaining space\n * @param value: Uint8Array - The value to add to the data\n * @returns {ByteArrayBuilder} - Returns the current instance of ByteArrayBuilder\n */\n addBufferToData = (value: Uint8Array): ByteArrayBuilder => {\n if (!this.hasEnoughLengthRemaining(value)) {\n this.errors.push(new DataOverflowError(value.toString()));\n return this;\n }\n\n this.data = Uint8Array.from([...this.data, ...value]);\n return this;\n };\n\n /**\n * Add a string to the payload 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 {ByteArrayBuilder} - Returns the current instance of ByteArrayBuilder\n */\n addHexaStringToData = (value: string): ByteArrayBuilder => {\n const result = hexaStringToBuffer(value);\n if (result === null || result.length === 0) {\n this.errors.push(new HexaStringEncodeError(value));\n return this;\n }\n this.addBufferToData(result);\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 {ByteArrayBuilder} - Returns the current instance of ByteArrayBuilder\n */\n addAsciiStringToData = (value: string): ByteArrayBuilder => {\n const bytes = new TextEncoder().encode(value);\n this.addBufferToData(bytes);\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 {ByteArrayBuilder} - Returns the current instance of ByteArrayBuilder\n */\n encodeInLVFromHexa = (value: string): ByteArrayBuilder => {\n const result = hexaStringToBuffer(value);\n if (result === null || result.length === 0) {\n this.errors.push(new HexaStringEncodeError(value));\n return this;\n }\n\n if (!this.hasEnoughLengthRemaining(result, true)) {\n this.errors.push(new DataOverflowError(value));\n return this;\n }\n // values are always being well formatted at this point\n // therefore no status test is needed\n this.add8BitUIntToData(result.length);\n this.addBufferToData(result);\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 {ByteArrayBuilder} - Returns the current instance of ByteArrayBuilder\n */\n encodeInLVFromBuffer = (value: Uint8Array): ByteArrayBuilder => {\n if (!this.hasEnoughLengthRemaining(value, true)) {\n this.errors.push(new DataOverflowError(value.toString()));\n return this;\n }\n\n this.add8BitUIntToData(value.length);\n this.addBufferToData(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 {ByteArrayBuilder} - Returns the current instance of ByteArrayBuilder\n */\n encodeInLVFromAscii = (value: string): ByteArrayBuilder => {\n if (!this.hasEnoughLengthRemaining(value, true)) {\n this.errors.push(new DataOverflowError(value));\n return this;\n }\n\n this.add8BitUIntToData(value.length);\n this.addAsciiStringToData(value);\n return this;\n };\n\n /**\n * Returns the remaining payload length\n * @returns {number}\n */\n getAvailablePayloadLength = (): number => {\n return this.maxPayloadSize - this.data.length;\n };\n\n /**\n * Returns the current errors\n * @returns {AppBuilderError[]} - Returns an array of errors\n */\n getErrors = (): AppBuilderError[] => this.errors;\n\n /**\n * Verifies if the builder contains errors\n * @returns {boolean} - Returns wether the builder contains errors or not\n */\n hasErrors = (): boolean => this.errors.length !== 0;\n\n // ===========\n // Private API\n // ===========\n\n /**\n * Check if there is enough space to add a value to the data field\n * @param value {string | Uint8Array | number[]} - Value to add to the data\n * @param hasLv {boolean} - Length-Value encoding flag\n * @returns {boolean} - Returns true if there is enough space to add the value\n */\n private hasEnoughLengthRemaining = (\n value: string | Uint8Array | number[],\n hasLv: boolean = false,\n ): boolean => {\n return (\n this.data.length + value.length + (hasLv ? 1 : 0) <= this.maxPayloadSize\n );\n };\n\n /**\n * Add a number to the payload\n * @param value: number | bigint - The value to add to the data\n * @param sizeInBits: bigint - The number size in bits, for example 16 for a uint16\n * @param signed: boolean - Whether the value is signed or unsigned.\n * @param bigEndian: boolean - True to encode in big endian, false for little endian\n * @returns {ByteArrayBuilder} - Returns the current instance of ByteArrayBuilder\n */\n private addNumberToData(\n value: number | bigint,\n sizeInBits: bigint,\n signed: boolean,\n bigEndian: boolean,\n ): ByteArrayBuilder {\n // Convert the number to two's complement and check its bounds\n let converted = this.checkBoundsAndConvert(value, sizeInBits, signed);\n if (converted === undefined) {\n return this;\n }\n\n // Compute the buffer\n const sizeInBytes = Number(sizeInBits) / 8;\n const buffer = new Uint8Array(sizeInBytes);\n if (bigEndian) {\n for (let i = sizeInBytes - 1; i >= 0; i--) {\n buffer[i] = Number(converted & 0xffn);\n converted >>= 8n;\n }\n } else {\n for (let i = 0; i < sizeInBytes; i++) {\n buffer[i] = Number(converted & 0xffn);\n converted >>= 8n;\n }\n }\n return this.addBufferToData(buffer);\n }\n\n /**\n * Checks the bounds of a signed or unsigned integer value and converts it to two's complement if it is signed and negative.\n * @param value The value to check and convert.\n * @param sizeInBits The size of the value in bits.\n * @param signed Whether the value is signed or unsigned.\n * @returns The converted value, or null if the value is out of bounds.\n */\n private checkBoundsAndConvert(\n value: number | bigint,\n sizeInBits: bigint,\n signed: boolean,\n ): bigint | undefined {\n // Normalize the value to a bigint\n if (typeof value === \"number\") {\n if (!Number.isInteger(value) || value > Number.MAX_SAFE_INTEGER) {\n this.errors.push(new ValueOverflowError(value.toString()));\n return;\n }\n value = BigInt(value);\n }\n\n if (!signed) {\n // Check if the value is within the bounds of an unsigned integer\n const limit = 1n << sizeInBits;\n if (value < 0 || value >= limit) {\n this.errors.push(new ValueOverflowError(value.toString(), limit - 1n));\n return;\n }\n } else {\n // Check if the value is within the bounds of a signed integer\n const limit = 1n << (sizeInBits - 1n);\n if (value >= limit || value < -limit) {\n this.errors.push(new ValueOverflowError(value.toString(), limit - 1n));\n return;\n }\n\n // Convert the value to two's complement if it is negative\n // https://en.wikipedia.org/wiki/Two%27s_complement\n if (value < 0n) {\n const mask = (1n << sizeInBits) - 1n;\n value = -value;\n value = (~value & mask) + 1n;\n }\n }\n return value;\n }\n}\n", "import { Apdu } from \"@api/apdu/model/Apdu\";\n\nimport { 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", "import { bufferToHexaString, HexaString } from \"@api/utils/HexaString\";\n\nexport type TaggedField = {\n readonly tag: number;\n readonly value: Uint8Array;\n};\n\n/**\n * ByteArrayParser is a utility class to help parse a byte array.\n *\n * It provides methods to extract fields of different types from the buffer.\n *\n * @example\n * ```\n * const parser = new ByteArrayParser(buffer);\n * const targetId = parser.encodeToHexaString(parser.extractFieldByLength(4));\n * const seVersion = parser.encodeToString(parser.extractFieldLVEncoded());\n * ```\n */\nexport class ByteArrayParser {\n private index: number = 0;\n\n constructor(private readonly buffer: Uint8Array) {}\n\n // ==========\n // Public API\n // ==========\n\n /**\n * Test if the length is greater than the response length\n * @param length: number\n * @returns {boolean} - Returns false if the length is greater than the response length\n */\n testMinimalLength(length: number): boolean {\n return length <= this.buffer.length - this.index;\n }\n\n /**\n * Extract a single byte from the response\n * @returns {number | undefined} - Returns the byte extracted from the response\n */\n extract8BitUInt(): number | undefined {\n if (this.outOfRange(1)) return;\n return this.buffer[this.index++];\n }\n\n /**\n * Extract a 16-bit unsigned integer from the response\n * @param bigEndian: boolean - True to decode in big endian, false for little endian\n * @returns {number | undefined} - Returns the 16-bit unsigned integer extracted from the response\n */\n extract16BitUInt(bigEndian: boolean = true): number | undefined {\n const value = this.extractNumber(16n, false, bigEndian);\n return value === undefined ? undefined : Number(value);\n }\n\n /**\n * Extract a 16-bit signed integer from the response\n * @param bigEndian: boolean - True to decode in big endian, false for little endian\n * @returns {number | undefined} - Returns the 16-bit signed integer extracted from the response\n */\n extract16BitInt(bigEndian: boolean = true): number | undefined {\n const value = this.extractNumber(16n, true, bigEndian);\n return value === undefined ? undefined : Number(value);\n }\n\n /**\n * Extract a 32-bit unsigned integer from the response\n * @param bigEndian: boolean - True to decode in big endian, false for little endian\n * @returns {number | undefined} - Returns the 32-bit unsigned integer extracted from the response\n */\n extract32BitUInt(bigEndian: boolean = true): number | undefined {\n const value = this.extractNumber(32n, false, bigEndian);\n return value === undefined ? undefined : Number(value);\n }\n\n /**\n * Extract a 32-bit signed integer from the response\n * @param bigEndian: boolean - True to decode in big endian, false for little endian\n * @returns {number | undefined} - Returns the 32-bit signed integer extracted from the response\n */\n extract32BitInt(bigEndian: boolean = true): number | undefined {\n const value = this.extractNumber(32n, true, bigEndian);\n return value === undefined ? undefined : Number(value);\n }\n\n /**\n * Extract a 64-bit unsigned integer from the response\n * @param bigEndian: boolean - True to decode in big endian, false for little endian\n * @returns {number | undefined} - Returns the 64-bit unsigned integer extracted from the response\n */\n extract64BitUInt(bigEndian: boolean = true): bigint | undefined {\n return this.extractNumber(64n, false, bigEndian);\n }\n\n /**\n * Extract a 64-bit signed integer from the response\n * @param bigEndian: boolean - True to decode in big endian, false for little endian\n * @returns {number | undefined} - Returns the 64-bit signed integer extracted from the response\n */\n extract64BitInt(bigEndian: boolean = true): bigint | undefined {\n return this.extractNumber(64n, true, bigEndian);\n }\n\n /**\n * Extract a field of a specified length from the response\n * @param length: number - The length of the field to extract\n * @returns {Uint8Array | undefined} - Returns the field extracted from the response\n */\n extractFieldByLength(length: number): Uint8Array | undefined {\n if (this.outOfRange(length)) return;\n if (length === 0) return new Uint8Array();\n const field = this.buffer.slice(this.index, this.index + length);\n this.index += length;\n return field;\n }\n\n /**\n * Extract a field from the response that is length-value encoded\n * @returns {Uint8Array | undefined} - Returns the field extracted from the response\n */\n extractFieldLVEncoded(): Uint8Array | undefined {\n // extract Length field\n const length = this.extract8BitUInt();\n if (length === undefined) return;\n else if (length === 0) return new Uint8Array();\n const field = this.extractFieldByLength(length);\n // if the field is inconsistent then roll back to the initial point\n if (field === undefined) this.index--;\n return field;\n }\n\n /**\n * Extract a field from the response that is tag-length-value encoded\n * @returns {TaggedField | undefined} - Returns the field extracted from the response\n */\n extractFieldTLVEncoded(): TaggedField | undefined {\n if (this.outOfRange(2)) return;\n\n const tag = this.extract8BitUInt();\n const value = this.extractFieldLVEncoded();\n\n if (tag === undefined || value === undefined) {\n this.index--;\n return;\n }\n return { tag, value };\n }\n\n /**\n * Encode a value to a hexadecimal string\n * @param value {Uint8Array} - The value to encode\n * @param prefix {boolean} - Whether to add a prefix to the encoded value\n * @returns {string} - The encoded value as a hexadecimal string\n */\n encodeToHexaString(value?: Uint8Array, prefix?: false): string;\n encodeToHexaString(value?: Uint8Array, prefix?: true): HexaString;\n encodeToHexaString(\n value?: Uint8Array,\n prefix: boolean = false,\n ): HexaString | string {\n if (value === undefined || value.length === 0) return \"\";\n const result = bufferToHexaString(value);\n return prefix ? result : result.slice(2);\n }\n\n /**\n * Encode a value to an ASCII string\n * @param value {Uint8Array} - The value to encode\n * @returns {string} - The encoded value as an ASCII string\n */\n encodeToString(value?: Uint8Array): string {\n let result = \"\";\n let index = 0;\n\n if (!value) return result;\n\n while (index <= value.length) {\n const item = value[index];\n if (item) result += String.fromCharCode(item);\n index++;\n }\n\n return result;\n }\n\n /**\n * Get the current index of the parser\n * @returns {number} - The current index of the parser\n */\n getCurrentIndex(): number {\n return this.index;\n }\n\n /**\n * Reset the index of the parser to 0\n */\n resetIndex() {\n this.index = 0;\n }\n\n /**\n * Get the remaining length of the response\n * @returns {number} - The remaining length of the response\n */\n getUnparsedRemainingLength(): number {\n return this.buffer.length - this.index;\n }\n\n // ===========\n // Private API\n // ===========\n\n /**\n * Check whether the expected length is out of range\n * @param length: number\n * @returns {boolean} - Returns true if the expected length is out of range\n */\n private outOfRange(length: number): boolean {\n return this.index + length > this.buffer.length;\n }\n\n /**\n * Extract a number from the buffer\n * @param sizeInBits: bigint - The number size in bits, for example 16 for a uint16\n * @param signed: boolean - True is the number can be signed and converted to two's compliment\n * @param bigEndian: boolean - True to decode in big endian, false for little endian\n * @returns {bigint | undefined} - Returns the number extracted from the buffer\n */\n private extractNumber(\n sizeInBits: bigint,\n signed: boolean,\n bigEndian: boolean,\n ): bigint | undefined {\n // Check the range\n const sizeInBytes: number = Number(sizeInBits) / 8;\n if (this.outOfRange(sizeInBytes)) return;\n\n // Compute the number\n let value: bigint = 0n;\n if (bigEndian) {\n for (let i = 0; i < sizeInBytes; i++) {\n value = (value << 8n) | BigInt(this.buffer[i + this.index]!);\n }\n } else {\n for (let i = sizeInBytes - 1; i >= 0; i--) {\n value = (value << 8n) | BigInt(this.buffer[i + this.index]!);\n }\n }\n\n // Convert the value to two's complement if it is negative\n // https://en.wikipedia.org/wiki/Two%27s_complement\n if (signed) {\n const limit = 1n << (sizeInBits - 1n);\n if (value & limit) {\n value -= limit << 1n;\n }\n }\n\n this.index += sizeInBytes;\n return value;\n }\n}\n", "import { ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { HexaString } from \"@api/utils/HexaString\";\n\nimport { ByteArrayParser } from \"./ByteArrayParser\";\n\nexport type TaggedField = {\n readonly tag: number;\n readonly value: Uint8Array;\n};\n\n/**\n * ApduParser is a utility class to help parse APDU responses.\n *\n * It provides methods to extract fields of different types from the response.\n *\n * @example\n * ```\n * const parser = new ApduParser(apduResponse);\n * const targetId = parser.encodeToHexaString(parser.extractFieldByLength(4));\n * const seVersion = parser.encodeToString(parser.extractFieldLVEncoded());\n * ```\n */\nexport class ApduParser {\n private parser: ByteArrayParser;\n\n constructor(response: ApduResponse) {\n this.parser = new ByteArrayParser(response.data);\n }\n\n /**\n * Test if the length is greater than the response length\n * @param length: number\n * @returns {boolean} - Returns false if the length is greater than the response length\n */\n testMinimalLength = (length: number): boolean =>\n this.parser.testMinimalLength(length);\n\n /**\n * Extract a single byte from the response\n * @returns {number | undefined} - Returns the byte extracted from the response\n */\n extract8BitUInt = (): number | undefined => this.parser.extract8BitUInt();\n\n /**\n * Extract a 16-bit unsigned integer (Big Endian coding) from the response\n * @returns {number | undefined} - Returns the 16-bit unsigned integer extracted from the response\n */\n extract16BitUInt = (): number | undefined => this.parser.extract16BitUInt();\n\n /**\n * Extract a 32-bit unsigned integer (Big Endian coding) from the response\n * @returns {number | undefined} - Returns the 32-bit unsigned integer extracted from the response\n */\n extract32BitUInt = (): number | undefined => this.parser.extract32BitUInt();\n\n /**\n * Extract a field of a specified length from the response\n * @param length: number - The length of the field to extract\n * @returns {Uint8Array | undefined} - Returns the field extracted from the response\n */\n extractFieldByLength = (length: number): Uint8Array | undefined =>\n this.parser.extractFieldByLength(length);\n\n /**\n * Extract a field from the response that is length-value encoded\n * @returns {Uint8Array | undefined} - Returns the field extracted from the response\n */\n extractFieldLVEncoded = (): Uint8Array | undefined =>\n this.parser.extractFieldLVEncoded();\n\n /**\n * Extract a field from the response that is tag-length-value encoded\n * @returns {TaggedField | undefined} - Returns the field extracted from the response\n */\n extractFieldTLVEncoded = (): TaggedField | undefined =>\n this.parser.extractFieldTLVEncoded();\n\n /**\n * Encode a value to a hexadecimal string\n * @param value {Uint8Array} - The value to encode\n * @param prefix {boolean} - Whether to add a prefix to the encoded value\n * @returns {string} - The encoded value as a hexadecimal string\n */\n encodeToHexaString(value?: Uint8Array, prefix?: false): string;\n encodeToHexaString(value?: Uint8Array, prefix?: true): HexaString;\n encodeToHexaString(\n value?: Uint8Array,\n prefix: boolean = false,\n ): HexaString | string {\n return prefix\n ? this.parser.encodeToHexaString(value, true)\n : this.parser.encodeToHexaString(value, false);\n }\n\n /**\n * Encode a value to an ASCII string\n * @param value {Uint8Array} - The value to encode\n * @returns {string} - The encoded value as an ASCII string\n */\n encodeToString = (value?: Uint8Array): string =>\n this.parser.encodeToString(value);\n\n /**\n * Get the remaining length of the response\n * @returns {number} - The remaining length of the response\n */\n getUnparsedRemainingLength = (): number =>\n this.parser.getUnparsedRemainingLength();\n}\n", "import {\n InvalidBatteryDataError,\n InvalidBatteryStatusTypeError,\n InvalidResponseFormatError,\n InvalidStatusWordError,\n} from \"@api/command/Errors\";\nimport { GlobalCommandErrorStatusCode } from \"@api/command/utils/GlobalCommandError\";\nimport { DeviceExchangeError, UnknownDeviceExchangeError } from \"@api/Error\";\n\nexport enum CommandResultStatus {\n Error = \"ERROR\",\n Success = \"SUCCESS\",\n}\ntype 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 | 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 | 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", "import { ApduResponse } from \"@api/device-session/ApduResponse\";\n\nexport class CommandUtils {\n static isValidStatusCode(statusCode: Uint8Array) {\n return statusCode.length === 2;\n }\n\n static isSuccessResponse({ statusCode }: ApduResponse) {\n if (!this.isValidStatusCode(statusCode)) {\n return false;\n }\n\n return statusCode[0] === 0x90 && statusCode[1] === 0x00;\n }\n\n static isLockedDeviceResponse({ statusCode }: ApduResponse) {\n if (!this.isValidStatusCode(statusCode)) {\n return false;\n }\n\n return statusCode[0] === 0x55 && statusCode[1] === 0x15;\n }\n}\n", "export interface SdkError {\n readonly _tag: string;\n readonly originalError?: unknown;\n message?: string;\n}\n\nexport type DeviceExchangeErrorArgs<SpecificErrorCodes> = {\n tag: string;\n originalError?: unknown;\n errorCode: SpecificErrorCodes;\n message: string;\n};\n\nexport type CommandErrorArgs<SpecificErrorCodes> = Omit<\n DeviceExchangeErrorArgs<SpecificErrorCodes>,\n \"tag\"\n>;\n\nexport abstract class DeviceExchangeError<SpecificErrorCodes = void> {\n readonly _tag: string;\n readonly originalError?: unknown;\n readonly errorCode: SpecificErrorCodes;\n readonly message: string;\n\n protected constructor({\n tag,\n errorCode,\n originalError,\n message,\n }: DeviceExchangeErrorArgs<SpecificErrorCodes>) {\n this._tag = tag;\n this.originalError = originalError;\n this.errorCode = errorCode;\n this.message = message;\n }\n}\n\nexport class UnknownDeviceExchangeError implements SdkError {\n readonly _tag = \"UnknownDeviceExchangeError\";\n readonly originalError?: unknown;\n readonly message: string;\n\n constructor(originalError?: unknown) {\n this.originalError = originalError;\n this.message = \"Unexpected device exchange error happened.\";\n }\n}\n", "import { DeviceExchangeErrorArgs } from \"@api/Error\";\n\n/**\n * CommandErrors dictionary utility type\n */\nexport type CommandErrors<SpecificErrorCodes extends string> = Record<\n SpecificErrorCodes,\n Pick<DeviceExchangeErrorArgs<SpecificErrorCodes>, \"message\"> &\n Partial<Pick<DeviceExchangeErrorArgs<SpecificErrorCodes>, \"tag\">>\n>;\n\n/**\n * Typeguard to check if an error status code is handled\n *\n * @param errorCode\n * @param errors\n */\nexport const isCommandErrorCode = <SpecificErrorCodes extends string>(\n errorCode: string,\n errors: CommandErrors<SpecificErrorCodes>,\n): errorCode is SpecificErrorCodes => Object.keys(errors).includes(errorCode);\n", "import { ApduParser } from \"@api/apdu/utils/ApduParser\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\nimport {\n CommandErrorArgs,\n DeviceExchangeError,\n UnknownDeviceExchangeError,\n} from \"@api/Error\";\n\nimport { CommandErrors, isCommandErrorCode } from \"./CommandErrors\";\n\n/**\n * Status word list of global errors that any command could result\n */\nexport type GlobalCommandErrorStatusCode = \"5515\" | \"5501\" | \"5502\" | \"5223\";\n\n/**\n * Global command error class\n */\nexport class GlobalCommandError extends DeviceExchangeError<GlobalCommandErrorStatusCode> {\n constructor(args: CommandErrorArgs<GlobalCommandErrorStatusCode>) {\n super({ tag: \"GlobalCommandError\", ...args });\n }\n}\n\n/**\n * Global errors dictionary that links a global status code to an error message\n */\nexport const GLOBAL_ERRORS: CommandErrors<GlobalCommandErrorStatusCode> = {\n \"5515\": { message: \"Device is locked.\", tag: \"DeviceLockedError\" },\n \"5501\": { message: \"Action refused on device.\", tag: \"ActionRefusedError\" },\n \"5502\": { message: \"Pin is not set\", tag: \"PinNotSetError\" },\n \"5223\": { message: \"Device internal error\", tag: \"DeviceInternalError\" },\n};\n\n/**\n * Global error handler utility class\n */\nexport class GlobalCommandErrorHandler {\n /**\n * Static method to get a handled GlobalCommandError or an unhandled SdkError from an apdu response\n * @param apduResponse\n */\n static handle(\n apduResponse: ApduResponse,\n ): GlobalCommandError | UnknownDeviceExchangeError {\n const parser = new ApduParser(apduResponse);\n const errorCode = parser.encodeToHexaString(apduResponse.statusCode);\n if (isCommandErrorCode(errorCode, GLOBAL_ERRORS)) {\n return new GlobalCommandError({ ...GLOBAL_ERRORS[errorCode], errorCode });\n }\n return new UnknownDeviceExchangeError({\n message: \"UnknownError\",\n errorCode,\n });\n }\n}\n", "import { Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder, ApduBuilderArgs } from \"@api/apdu/utils/ApduBuilder\";\nimport { Command } from \"@api/command/Command\";\nimport {\n CommandResult,\n CommandResultFactory,\n} from \"@api/command/model/CommandResult\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { GlobalCommandErrorHandler } from \"@api/command/utils/GlobalCommandError\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\n\nexport type CloseAppCommandResult = CommandResult<void>;\n\n/**\n * The command to close a runnint application on the device.\n */\nexport class CloseAppCommand implements Command<void> {\n readonly args = undefined;\n\n readonly triggersDisconnection = true;\n\n getApdu(): Apdu {\n const closeAppApduArgs: ApduBuilderArgs = {\n cla: 0xb0,\n ins: 0xa7,\n p1: 0x00,\n p2: 0x00,\n };\n return new ApduBuilder(closeAppApduArgs).build();\n }\n\n parseResponse(apduResponse: ApduResponse): CommandResult<void> {\n if (CommandUtils.isSuccessResponse(apduResponse)) {\n return CommandResultFactory({\n data: undefined,\n });\n }\n return CommandResultFactory({\n error: GlobalCommandErrorHandler.handle(apduResponse),\n });\n }\n}\n", "import { SdkError } from \"@api/Error\";\n\nexport class InvalidStatusWordError implements SdkError {\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 SdkError {\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 SdkError {\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 SdkError {\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 SdkError {\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", "import { Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder, ApduBuilderArgs } from \"@api/apdu/utils/ApduBuilder\";\nimport { ApduParser } from \"@api/apdu/utils/ApduParser\";\nimport { Command } from \"@api/command/Command\";\nimport { InvalidResponseFormatError } from \"@api/command/Errors\";\nimport {\n CommandResult,\n CommandResultFactory,\n} from \"@api/command/model/CommandResult\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { GlobalCommandErrorHandler } from \"@api/command/utils/GlobalCommandError\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\n\nexport type GetAppAndVersionResponse = {\n /**\n * The name of the application currently running on the device.\n */\n readonly name: string;\n /**\n * The version of the application currently running on the device.\n */\n readonly version: string;\n /**\n * Flags that are used to provide additional information about the application.\n */\n readonly flags?: number | Uint8Array;\n};\n\nexport type GetAppAndVersionCommandResult =\n CommandResult<GetAppAndVersionResponse>;\n\n/**\n * Command to get information about the application currently running on the\n * device.\n */\nexport class GetAppAndVersionCommand\n implements Command<GetAppAndVersionResponse>\n{\n readonly args = undefined;\n\n getApdu(): Apdu {\n const getAppAndVersionApduArgs: ApduBuilderArgs = {\n cla: 0xb0,\n ins: 0x01,\n p1: 0x00,\n p2: 0x00,\n };\n return new ApduBuilder(getAppAndVersionApduArgs).build();\n }\n\n parseResponse(apduResponse: ApduResponse): GetAppAndVersionCommandResult {\n if (!CommandUtils.isSuccessResponse(apduResponse)) {\n return CommandResultFactory({\n error: GlobalCommandErrorHandler.handle(apduResponse),\n });\n }\n const parser = new ApduParser(apduResponse);\n\n if (parser.extract8BitUInt() !== 1) {\n return CommandResultFactory({\n error: new InvalidResponseFormatError(\n \"getAppAndVersion: format not supported\",\n ),\n });\n }\n\n const name = parser.encodeToString(parser.extractFieldLVEncoded());\n const version = parser.encodeToString(parser.extractFieldLVEncoded());\n\n if (parser.getUnparsedRemainingLength() === 0) {\n return CommandResultFactory({\n data: { name, version },\n });\n }\n\n const flags = parser.extractFieldLVEncoded();\n return CommandResultFactory({\n data: { name, version, flags },\n });\n }\n}\n", "import { Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder, ApduBuilderArgs } from \"@api/apdu/utils/ApduBuilder\";\nimport { ApduParser } from \"@api/apdu/utils/ApduParser\";\nimport { Command } from \"@api/command/Command\";\nimport {\n InvalidBatteryDataError,\n InvalidBatteryStatusTypeError,\n} from \"@api/command/Errors\";\nimport {\n CommandResult,\n CommandResultFactory,\n} from \"@api/command/model/CommandResult\";\nimport { 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 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", "export enum DeviceModelId {\n NANO_S = \"nanoS\",\n NANO_SP = \"nanoSP\",\n NANO_X = \"nanoX\",\n STAX = \"stax\",\n FLEX = \"flex\",\n}\n\n/**\n * Unique identifier for a device.\n *\n * NB: This identifier is generated at runtime and is not persisted. It cannot\n * be used to identify a device across sessions.\n * There is in fact no way to identify a device across sessions, which is a\n * privacy feature of Ledger devices.\n */\nexport type DeviceId = string;\n\nexport type DeviceModelArgs = {\n readonly id: DeviceId;\n readonly model: DeviceModelId;\n readonly name: string;\n};\n\nexport class DeviceModel {\n public readonly id: DeviceId;\n public readonly model: DeviceModelId;\n public readonly name: string;\n\n constructor({ id, model, name }: DeviceModelArgs) {\n this.id = id;\n this.model = model;\n this.name = name;\n }\n}\n", "import { Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder, ApduBuilderArgs } from \"@api/apdu/utils/ApduBuilder\";\nimport { ApduParser } from \"@api/apdu/utils/ApduParser\";\nimport { Command } from \"@api/command/Command\";\nimport {\n CommandResult,\n CommandResultFactory,\n} from \"@api/command/model/CommandResult\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { GlobalCommandErrorHandler } from \"@api/command/utils/GlobalCommandError\";\nimport { DeviceModelId } from \"@api/device/DeviceModel\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\n\n/**\n * Response of the GetOsVersionCommand.\n */\nexport type GetOsVersionResponse = {\n /**\n * Target identifier.\n */\n readonly targetId: string;\n\n /**\n * Version of BOLOS on the secure element (SE).\n * {@link https://developers.ledger.com/docs/device-app/architecture/bolos/hardware-architecture | Hardware Architecture}\n */\n readonly seVersion: string;\n\n /**\n * Secure element flags.\n * Used to represent the current state of the secure element.\n */\n readonly seFlags: number;\n\n /**\n * Version of the microcontroller unit (MCU) SEPH, which is the SE-MCU link protocol.\n * {@link https://developers.ledger.com/docs/device-app/architecture/bolos/hardware-architecture | Hardware Architecture}\n */\n readonly mcuSephVersion: string;\n\n /**\n * Version of the MCU bootloader.\n */\n readonly mcuBootloaderVersion: string;\n\n /**\n * Hardware revision version.\n * Only available for Ledger Nano X in which case it's \"00\" or \"01\".\n */\n readonly hwVersion: string;\n\n /**\n * Identifier of the installed language pack.\n * Can be one of:\n * - \"00\": English\n * - \"01\": French\n * - \"02\": Spanish\n */\n readonly langId: string; // [SHOULD] be an enum\n\n /**\n * State for Ledger Recover. // [SHOULD] Add more information about this field\n */\n readonly recoverState: string;\n};\n\n/**\n * Command to get information about the device firmware.\n */\nexport class GetOsVersionCommand implements Command<GetOsVersionResponse> {\n readonly args = undefined;\n\n getApdu(): Apdu {\n const getOsVersionApduArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x01,\n p1: 0x00,\n p2: 0x00,\n };\n return new ApduBuilder(getOsVersionApduArgs).build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n deviceModelId: DeviceModelId,\n ): CommandResult<GetOsVersionResponse> {\n if (!CommandUtils.isSuccessResponse(apduResponse)) {\n return CommandResultFactory({\n error: GlobalCommandErrorHandler.handle(apduResponse),\n });\n }\n const parser = new ApduParser(apduResponse);\n\n const targetId = parser.encodeToHexaString(parser.extractFieldByLength(4));\n const seVersion = parser.encodeToString(parser.extractFieldLVEncoded());\n const seFlags = parseInt(\n parser.encodeToHexaString(parser.extractFieldLVEncoded()).toString(),\n 16,\n );\n const mcuSephVersion = parser.encodeToString(\n parser.extractFieldLVEncoded(),\n );\n const mcuBootloaderVersion = parser.encodeToString(\n parser.extractFieldLVEncoded(),\n );\n\n let hwVersion = \"00\";\n if (deviceModelId === DeviceModelId.NANO_X) {\n hwVersion = parser.encodeToHexaString(parser.extractFieldLVEncoded());\n }\n\n const langId = parser.encodeToHexaString(parser.extractFieldLVEncoded());\n const recoverState = parser.encodeToHexaString(\n parser.extractFieldLVEncoded(),\n );\n\n return CommandResultFactory({\n data: {\n targetId,\n seVersion,\n seFlags,\n mcuSephVersion,\n mcuBootloaderVersion,\n hwVersion,\n langId,\n recoverState: recoverState ? recoverState : \"0\",\n },\n });\n }\n}\n", "import { Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder, ApduBuilderArgs } from \"@api/apdu/utils/ApduBuilder\";\nimport { ApduParser } from \"@api/apdu/utils/ApduParser\";\nimport { Command } from \"@api/command/Command\";\nimport {\n CommandResult,\n CommandResultFactory,\n} from \"@api/command/model/CommandResult\";\nimport {\n CommandErrors,\n isCommandErrorCode,\n} from \"@api/command/utils/CommandErrors\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { GlobalCommandErrorHandler } from \"@api/command/utils/GlobalCommandError\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { CommandErrorArgs, DeviceExchangeError } from \"@api/Error\";\n\nexport type AppResponse = {\n readonly appEntryLength: number;\n readonly appSizeInBlocks: number;\n readonly appCodeHash: string;\n readonly appFullHash: string;\n readonly appName: string;\n};\n\nexport type ListAppsResponse = AppResponse[];\n\nexport type ListAppsArgs = {\n readonly isContinue: boolean;\n};\n\nexport type ListAppsErrorCodes = \"6624\";\n\nconst LIST_APP_ERRORS: CommandErrors<ListAppsErrorCodes> = {\n \"6624\": { message: \"Invalid state (List applications command must be sent)\" },\n};\n\nexport type ListAppsCommandResult = CommandResult<\n ListAppsResponse,\n ListAppsErrorCodes\n>;\n\nexport class ListAppsCommandError extends DeviceExchangeError<ListAppsErrorCodes> {\n constructor({ message, errorCode }: CommandErrorArgs<ListAppsErrorCodes>) {\n super({ message, errorCode, tag: \"ListAppsCommandError\" });\n }\n}\n\nexport class ListAppsCommand\n implements Command<ListAppsResponse, ListAppsArgs, ListAppsErrorCodes>\n{\n readonly args: ListAppsArgs;\n\n constructor(args = { isContinue: false }) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n const listAppApduArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: this.args.isContinue ? 0xdf : 0xde,\n p1: 0x00,\n p2: 0x00,\n };\n return new ApduBuilder(listAppApduArgs).build();\n }\n\n parseResponse(apduResponse: ApduResponse): ListAppsCommandResult {\n const res = [];\n const parser = new ApduParser(apduResponse);\n\n if (!CommandUtils.isSuccessResponse(apduResponse)) {\n const errorCode = parser.encodeToHexaString(apduResponse.statusCode);\n if (isCommandErrorCode(errorCode, LIST_APP_ERRORS)) {\n return CommandResultFactory({\n error: new ListAppsCommandError({\n ...LIST_APP_ERRORS[errorCode],\n errorCode,\n }),\n });\n }\n return CommandResultFactory({\n error: GlobalCommandErrorHandler.handle(apduResponse),\n });\n }\n\n if (apduResponse.data.length <= 0) {\n return CommandResultFactory({\n data: [],\n });\n }\n\n // [NOTE] version of parsing, not used for now, skipping 1 byte\n parser.extract8BitUInt()!;\n\n while (parser.getUnparsedRemainingLength() > 0) {\n const appEntryLength = parser.extract8BitUInt()!;\n const appSizeInBlocks = parser.extract16BitUInt()!;\n parser.extract16BitUInt()!; // Skip 2 bytes (flags, missing in doc for now)\n const appCodeHash = parser.encodeToHexaString(\n parser.extractFieldByLength(0x20), // 32 bytes\n );\n const appFullHash = parser.encodeToHexaString(\n parser.extractFieldByLength(0x20), // 32 bytes\n );\n\n const appName = parser.encodeToString(parser.extractFieldLVEncoded());\n\n res.push({\n appEntryLength,\n appSizeInBlocks,\n appCodeHash,\n appFullHash,\n appName,\n });\n }\n\n return CommandResultFactory({\n data: res,\n });\n }\n}\n", "import { Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder, ApduBuilderArgs } from \"@api/apdu/utils/ApduBuilder\";\nimport { ApduParser } from \"@api/apdu/utils/ApduParser\";\nimport { Command } from \"@api/command/Command\";\nimport {\n CommandResult,\n CommandResultFactory,\n} from \"@api/command/model/CommandResult\";\nimport {\n CommandErrors,\n isCommandErrorCode,\n} from \"@api/command/utils/CommandErrors\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { GlobalCommandErrorHandler } from \"@api/command/utils/GlobalCommandError\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { CommandErrorArgs, DeviceExchangeError } from \"@api/Error\";\n\nexport type OpenAppArgs = {\n readonly appName: string;\n};\n\nexport type OpenAppErrorCodes = \"670a\" | \"6807\";\n\nconst OPEN_APP_ERRORS: CommandErrors<OpenAppErrorCodes> = {\n \"670a\": { message: \"No app name provided\" },\n \"6807\": { message: \"Unknown application name\" },\n};\n\nexport class OpenAppCommandError extends DeviceExchangeError<OpenAppErrorCodes> {\n constructor({ message, errorCode }: CommandErrorArgs<OpenAppErrorCodes>) {\n super({ tag: \"OpenAppCommandError\", message, errorCode });\n }\n}\n\nexport type OpenAppCommandResult = CommandResult<void, OpenAppErrorCodes>;\n\n/**\n * The command to open an application on the device.\n */\nexport class OpenAppCommand\n implements Command<void, OpenAppArgs, OpenAppErrorCodes>\n{\n readonly args: OpenAppArgs;\n\n readonly triggersDisconnection = true;\n\n constructor(args: OpenAppArgs) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n const openAppApduArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0xd8,\n p1: 0x00,\n p2: 0x00,\n };\n return new ApduBuilder(openAppApduArgs)\n .addAsciiStringToData(this.args.appName)\n .build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<void, OpenAppErrorCodes> {\n if (CommandUtils.isSuccessResponse(apduResponse)) {\n return CommandResultFactory({\n data: undefined,\n });\n }\n const parser = new ApduParser(apduResponse);\n const errorCode = parser.encodeToHexaString(apduResponse.statusCode);\n if (isCommandErrorCode(errorCode, OPEN_APP_ERRORS)) {\n return CommandResultFactory({\n error: new OpenAppCommandError({\n ...OPEN_APP_ERRORS[errorCode],\n errorCode,\n }),\n });\n }\n return CommandResultFactory({\n error: GlobalCommandErrorHandler.handle(apduResponse),\n });\n }\n}\n", "export enum DeviceStatus {\n LOCKED = \"LOCKED\",\n BUSY = \"BUSY\",\n CONNECTED = \"CONNECTED\",\n NOT_CONNECTED = \"NOT CONNECTED\",\n}\n", "export type ApduResponseConstructorArgs = {\n readonly statusCode: Uint8Array;\n readonly data: Uint8Array;\n};\n\nexport class ApduResponse {\n public readonly statusCode: Uint8Array;\n public readonly data: Uint8Array;\n\n constructor({ statusCode, data }: ApduResponseConstructorArgs) {\n this.statusCode = statusCode;\n this.data = data;\n }\n}\n", "export const commandTypes = {\n SendCommandUseCase: Symbol.for(\"SendCommandUseCase\"),\n};\n", "export const configTypes = {\n LocalConfigDataSource: Symbol.for(\"LocalConfigDataSource\"),\n RemoteConfigDataSource: Symbol.for(\"RemoteConfigDataSource\"),\n ConfigService: Symbol.for(\"ConfigService\"),\n GetSdkVersionUseCase: Symbol.for(\"GetSdkVersionUseCase\"),\n};\n", "export const deviceSessionTypes = {\n ApduSenderServiceFactory: Symbol.for(\"ApduSenderServiceFactory\"),\n ApduReceiverServiceFactory: Symbol.for(\"ApduReceiverServiceFactory\"),\n DeviceSessionService: Symbol.for(\"DeviceSessionService\"),\n GetDeviceSessionStateUseCase: Symbol.for(\"GetDeviceSessionStateUseCase\"),\n CloseSessionsUseCase: Symbol.for(\"CloseSessionsUseCase\"),\n ListDeviceSessionsUseCase: Symbol.for(\"ListDeviceSessionsUseCase\"),\n};\n", "export const discoveryTypes = {\n StartDiscoveringUseCase: Symbol.for(\"StartDiscoveringUseCase\"),\n StopDiscoveringUseCase: Symbol.for(\"StopDiscoveringUseCase\"),\n ConnectUseCase: Symbol.for(\"ConnectUseCase\"),\n DisconnectUseCase: Symbol.for(\"DisconnectUseCase\"),\n GetConnectedDeviceUseCase: Symbol.for(\"GetConnectedDeviceUseCase\"),\n};\n", "export const sendTypes = {\n SendApduUseCase: Symbol.for(\"SendApduUseCase\"),\n};\n", "import { Container } from \"inversify\";\n\n// Uncomment this line to enable the logger middleware\n// import { makeLoggerMiddleware } from \"inversify-logger-middleware\";\nimport { commandModuleFactory } from \"@api/command/di/commandModule\";\nimport { deviceActionModuleFactory } from \"@api/device-action/di/deviceActionModule\";\nimport { LoggerSubscriberService } from \"@api/logger-subscriber/service/LoggerSubscriberService\";\n// Uncomment this line to enable the logger middleware\n// import { makeLoggerMiddleware } from \"inversify-logger-middleware\";\nimport { SdkConfig } from \"@api/SdkConfig\";\nimport { Transport } from \"@api/transport/model/Transport\";\nimport { BuiltinTransports } from \"@api/transport/model/TransportIdentifier\";\nimport { configModuleFactory } from \"@internal/config/di/configModule\";\nimport { deviceModelModuleFactory } from \"@internal/device-model/di/deviceModelModule\";\nimport { deviceSessionModuleFactory } from \"@internal/device-session/di/deviceSessionModule\";\nimport { discoveryModuleFactory } from \"@internal/discovery/di/discoveryModule\";\nimport { loggerModuleFactory } from \"@internal/logger-publisher/di/loggerModule\";\nimport { managerApiModuleFactory } from \"@internal/manager-api/di/managerApiModule\";\nimport {\n DEFAULT_MANAGER_API_BASE_URL,\n DEFAULT_MOCK_SERVER_BASE_URL,\n} from \"@internal/manager-api/model/Const\";\nimport { sendModuleFactory } from \"@internal/send/di/sendModule\";\nimport { transportModuleFactory } from \"@internal/transport//di/transportModule\";\nimport { usbModuleFactory } from \"@internal/transport/usb/di/usbModule\";\n\n// Uncomment this line to enable the logger middleware\n// const logger = makeLoggerMiddleware();\n\nexport type MakeContainerProps = {\n stub: boolean;\n transports: BuiltinTransports[];\n customTransports: Transport[];\n loggers: LoggerSubscriberService[];\n config: SdkConfig;\n};\n\nexport const makeContainer = ({\n stub = false,\n transports = [],\n customTransports = [],\n loggers = [],\n config = {\n managerApiUrl: DEFAULT_MANAGER_API_BASE_URL,\n mockUrl: DEFAULT_MOCK_SERVER_BASE_URL,\n },\n}: Partial<MakeContainerProps>) => {\n const container = new Container();\n\n // Uncomment this line to enable the logger middleware\n // container.applyMiddleware(logger);\n\n container.load(\n configModuleFactory({ stub }),\n deviceModelModuleFactory({ stub }),\n transportModuleFactory({ stub, transports, customTransports, config }),\n usbModuleFactory({ stub }),\n managerApiModuleFactory({ stub, config }),\n discoveryModuleFactory({ stub }),\n loggerModuleFactory({ subscribers: loggers }),\n deviceSessionModuleFactory({ stub }),\n sendModuleFactory({ stub }),\n commandModuleFactory({ stub }),\n deviceActionModuleFactory({ stub }),\n // modules go here\n );\n\n return container;\n};\n", "import { ContainerModule } from \"inversify\";\n\nimport { SendCommandUseCase } from \"@api/command/use-case/SendCommandUseCase\";\nimport { StubUseCase } from \"@root/src/di.stub\";\n\nimport { commandTypes } from \"./commandTypes\";\n\ntype CommandModuleArgs = Partial<{\n readonly stub: boolean;\n}>;\n\nexport const commandModuleFactory = ({\n stub = false,\n}: CommandModuleArgs = {}) =>\n new ContainerModule(\n (\n bind,\n _unbind,\n _isBound,\n rebind,\n _unbindAsync,\n _onActivation,\n _onDeactivation,\n ) => {\n bind(commandTypes.SendCommandUseCase).to(SendCommandUseCase);\n if (stub) {\n rebind(commandTypes.SendCommandUseCase).to(StubUseCase);\n }\n },\n );\n", "import { inject, injectable } from \"inversify\";\n\nimport { Command } from \"@api/command/Command\";\nimport { CommandResult } from \"@api/command/model/CommandResult\";\nimport { deviceSessionTypes } from \"@internal/device-session/di/deviceSessionTypes\";\nimport type { DeviceSessionService } from \"@internal/device-session/service/DeviceSessionService\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport { LoggerPublisherService } from \"@internal/logger-publisher/service/LoggerPublisherService\";\n\nexport type SendCommandUseCaseArgs<Response, ErrorStatusCodes, Args = void> = {\n /**\n * The device session id.\n */\n readonly sessionId: string;\n /**\n * The command to send.\n */\n readonly command: Command<Response, ErrorStatusCodes, Args>;\n};\n\n/**\n * Sends a command to a device through a device session.\n */\n@injectable()\nexport class SendCommandUseCase {\n private readonly _sessionService: DeviceSessionService;\n private readonly _logger: LoggerPublisherService;\n constructor(\n @inject(deviceSessionTypes.DeviceSessionService)\n sessionService: DeviceSessionService,\n @inject(loggerTypes.LoggerPublisherServiceFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this._sessionService = sessionService;\n this._logger = loggerFactory(\"SendCommandUseCase\");\n }\n\n /**\n * Sends a command to a device through a device session.\n *\n * @param sessionId - The device session id.\n * @param command - The command to send.\n * @returns The response from the command.\n */\n async execute<Response, Args, ErrorStatusCodes>({\n sessionId,\n command,\n }: SendCommandUseCaseArgs<Response, Args, ErrorStatusCodes>): Promise<\n CommandResult<Response, ErrorStatusCodes>\n > {\n const deviceSessionOrError =\n this._sessionService.getDeviceSessionById(sessionId);\n\n return deviceSessionOrError.caseOf({\n // Case device session found\n Right: async (deviceSession) =>\n await deviceSession.sendCommand<Response, Args, ErrorStatusCodes>(\n command,\n ),\n // Case device session not found\n Left: (error) => {\n this._logger.error(\"Error getting session\", {\n data: { error },\n });\n throw error;\n },\n });\n }\n}\n", "export const loggerTypes = {\n LoggerPublisherServiceFactory: Symbol.for(\"LoggerPublisherServiceFactory\"),\n};\n", "import { injectable } from \"inversify\";\n\n@injectable()\nexport class StubUseCase {\n execute = jest.fn(() => \"stub\");\n}\n", "import { ContainerModule } from \"inversify\";\n\nimport { ExecuteDeviceActionUseCase } from \"@api/device-action/use-case/ExecuteDeviceActionUseCase\";\nimport { StubUseCase } from \"@root/src/di.stub\";\n\nimport { deviceActionTypes } from \"./deviceActionTypes\";\n\ntype DeviceActionModuleArgs = Partial<{\n readonly stub: boolean;\n}>;\n\nexport const deviceActionModuleFactory = ({\n stub = false,\n}: DeviceActionModuleArgs = {}) =>\n new ContainerModule(\n (\n bind,\n _unbind,\n _isBound,\n rebind,\n _unbindAsync,\n _onActivation,\n _onDeactivation,\n ) => {\n bind(deviceActionTypes.ExecuteDeviceActionUseCase).to(\n ExecuteDeviceActionUseCase,\n );\n if (stub) {\n rebind(deviceActionTypes.ExecuteDeviceActionUseCase).to(StubUseCase);\n }\n },\n );\n", "import { inject, injectable } from \"inversify\";\n\nimport {\n DeviceAction,\n DeviceActionIntermediateValue,\n ExecuteDeviceActionReturnType,\n} from \"@api/device-action/DeviceAction\";\nimport { SdkError } from \"@api/Error\";\nimport { deviceSessionTypes } from \"@internal/device-session/di/deviceSessionTypes\";\nimport type { DeviceSessionService } from \"@internal/device-session/service/DeviceSessionService\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport { LoggerPublisherService } from \"@internal/logger-publisher/service/LoggerPublisherService\";\n\nexport type ExecuteDeviceActionUseCaseArgs<\n Output,\n Input,\n Error extends SdkError,\n IntermediateValue extends DeviceActionIntermediateValue,\n> = {\n /**\n * The device session id.\n */\n readonly sessionId: string;\n /**\n * The device action to execute.\n */\n readonly deviceAction: DeviceAction<Output, Input, Error, IntermediateValue>;\n};\n\n/**\n * Executes a device action to a device through a device session.\n */\n@injectable()\nexport class ExecuteDeviceActionUseCase {\n private readonly _sessionService: DeviceSessionService;\n private readonly _logger: LoggerPublisherService;\n constructor(\n @inject(deviceSessionTypes.DeviceSessionService)\n sessionService: DeviceSessionService,\n @inject(loggerTypes.LoggerPublisherServiceFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this._sessionService = sessionService;\n this._logger = loggerFactory(\"ExecuteDeviceActionUseCase\");\n }\n\n /**\n * Executes a device action to a device through a device session.\n *\n * @param sessionId - The device session id.\n * @param deviceAction - The device action to execute\n * @returns An object containing an observable of the device action state, and a cancel function.\n */\n execute<\n Output,\n Error extends SdkError,\n IntermediateValue extends DeviceActionIntermediateValue,\n Input,\n >({\n sessionId,\n deviceAction,\n }: ExecuteDeviceActionUseCaseArgs<\n Output,\n Input,\n Error,\n IntermediateValue\n >): ExecuteDeviceActionReturnType<Output, Error, IntermediateValue> {\n const deviceSessionOrError =\n this._sessionService.getDeviceSessionById(sessionId);\n\n return deviceSessionOrError.caseOf({\n // Case device session found\n Right: (deviceSession) =>\n deviceSession.executeDeviceAction<\n Output,\n Input,\n Error,\n IntermediateValue\n >(deviceAction),\n // Case device session not found\n Left: (error) => {\n this._logger.error(\"Error getting session\", {\n data: { error },\n });\n throw error;\n },\n });\n }\n}\n", "export const deviceActionTypes = {\n ExecuteDeviceActionUseCase: Symbol.for(\"ExecuteDeviceActionUseCase\"),\n};\n", "import { ContainerModule } from \"inversify\";\n\nimport { FileLocalConfigDataSource } from \"@internal/config/data/LocalConfigDataSource\";\nimport { StubLocalConfigDataSource } from \"@internal/config/data/LocalConfigDataSource.stub\";\nimport { RestRemoteConfigDataSource } from \"@internal/config/data/RemoteConfigDataSource\";\nimport { StubRemoteConfigDataSource } from \"@internal/config/data/RemoteConfigDataSource.stub\";\nimport { DefaultConfigService } from \"@internal/config/service/DefaultConfigService\";\nimport { GetSdkVersionUseCase } from \"@internal/config/use-case/GetSdkVersionUseCase\";\n\nimport { configTypes } from \"./configTypes\";\n\n// This module is used to configure the dependency injection container\n// This is where we will bind our interfaces to their implementations (or mocks...)\ntype FactoryProps = {\n stub: boolean;\n};\n\nexport const configModuleFactory = ({ stub }: FactoryProps) =>\n new ContainerModule((bind, _unbind, _isBound, rebind) => {\n bind(configTypes.LocalConfigDataSource).to(FileLocalConfigDataSource);\n bind(configTypes.RemoteConfigDataSource).to(RestRemoteConfigDataSource);\n bind(configTypes.GetSdkVersionUseCase).to(GetSdkVersionUseCase);\n bind(configTypes.ConfigService).to(DefaultConfigService);\n\n if (stub) {\n // We can rebind our interfaces to their mock implementations\n rebind(configTypes.LocalConfigDataSource).to(StubLocalConfigDataSource);\n rebind(configTypes.RemoteConfigDataSource).to(StubRemoteConfigDataSource);\n }\n });\n", "import { injectable } from \"inversify\";\nimport { Either } from \"purify-ts\";\n\nimport { Config, isConfig } from \"@internal/config/model/Config\";\nimport {\n JSONParseError,\n LocalConfigFailure,\n ReadFileError,\n} from \"@internal/config/model/Errors\";\nimport pkg from \"@root/package.json\";\n\nimport { LocalConfigDataSource } from \"./ConfigDataSource\";\n\nconst version = {\n name: pkg.name,\n version: pkg.version,\n};\n\nexport const stubFsReadFile = () => JSON.stringify(version);\n\n@injectable()\n/**\n * The data source for retrieving local configuration.\n */\nexport class FileLocalConfigDataSource implements LocalConfigDataSource {\n /**\n * Retrieves the local configuration.\n * @returns An `Either` containing either a `LocalConfigFailure` or a `Config` object.\n */\n getConfig(): Either<LocalConfigFailure, Config> {\n return Either.encase(() => stubFsReadFile())\n .mapLeft((error) => new ReadFileError(error))\n .chain((str) => {\n return Either.encase(() => {\n const config: unknown = JSON.parse(str);\n if (isConfig(config)) {\n return config;\n }\n throw new Error(\"Invalid config file\");\n }).mapLeft((error) => new JSONParseError(error));\n });\n }\n}\n", "// Domain scoped types\n\nexport type Config = {\n version: string;\n name: string;\n};\n\n/**\n * Checks if the provided object is a valid Config object.\n * @param obj - The object to be checked.\n * @returns A boolean indicating whether the object is a Config object.\n */\nexport function isConfig(obj: unknown): obj is Config {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n \"version\" in obj &&\n \"name\" in obj &&\n typeof obj.version === \"string\" &&\n typeof obj.name === \"string\"\n );\n}\n", "export class ApiCallError {\n readonly _tag = \"ApiCallError\";\n originalError?: Error;\n constructor(readonly err?: Error) {\n this.originalError = err;\n }\n}\n\nexport class ParseResponseError {\n readonly _tag = \"ParseResponseError\";\n originalError?: Error;\n constructor(readonly err?: Error) {\n this.originalError = err;\n }\n}\n\nexport class JSONParseError {\n readonly _tag = \"JSONParseError\";\n originalError?: Error;\n constructor(readonly err?: Error) {\n this.originalError = err;\n }\n}\n\nexport type RemoteConfigFailure =\n | ApiCallError\n | ParseResponseError\n | JSONParseError;\n\nexport class ReadFileError {\n readonly _tag = \"ReadFileError\";\n originalError?: Error;\n constructor(readonly err?: Error) {\n this.originalError = err;\n }\n}\n\nexport type LocalConfigFailure = JSONParseError | ReadFileError;\n", "{\n \"name\": \"@ledgerhq/device-management-kit\",\n \"version\": \"0.4.0\",\n \"license\": \"MIT\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/types/index.d.ts\",\n \"import\": \"./lib/esm/index.js\",\n \"require\": \"./lib/cjs/index.js\"\n },\n \"./*\": {\n \"types\": \"./lib/types/*\"\n }\n },\n \"files\": [\n \"./lib\"\n ],\n \"scripts\": {\n \"prebuild\": \"rimraf lib\",\n \"build\": \"pnpm lmdk-build --entryPoints index.ts --tsconfig tsconfig.prod.json\",\n \"dev\": \"concurrently \\\"pnpm watch:builds\\\" \\\"pnpm watch:types\\\"\",\n \"watch:builds\": \"pnpm lmdk-watch --entryPoints index.ts --tsconfig tsconfig.prod.json\",\n \"watch:types\": \"concurrently \\\"tsc --watch -p tsconfig.prod.json\\\" \\\"tsc-alias --watch -p tsconfig.prod.json\\\"\",\n \"lint\": \"eslint\",\n \"lint:fix\": \"pnpm lint --fix\",\n \"postpack\": \"find . -name '*.tgz' -exec cp {} ../../dist/ \\\\; \",\n \"prettier\": \"prettier . --check\",\n \"prettier:fix\": \"prettier . --write\",\n \"test\": \"jest\",\n \"test:watch\": \"pnpm test -- --watch\",\n \"test:coverage\": \"pnpm test -- --coverage\",\n \"typecheck\": \"tsc --noEmit\",\n \"module:create\": \"pnpm hygen core-module with-prompt\"\n },\n \"dependencies\": {\n \"@ledgerhq/device-sdk-transport-mock\": \"workspace:*\",\n \"@sentry/minimal\": \"^6.19.7\",\n \"@statelyai/inspect\": \"^0.4.0\",\n \"axios\": \"^1.7.7\",\n \"inversify\": \"^6.0.2\",\n \"inversify-logger-middleware\": \"^3.1.0\",\n \"purify-ts\": \"^2.1.0\",\n \"reflect-metadata\": \"^0.2.2\",\n \"rxjs\": \"^7.8.1\",\n \"semver\": \"^7.6.3\",\n \"uuid\": \"^10.0.0\",\n \"xstate\": \"^5.18.2\"\n },\n \"devDependencies\": {\n \"@ledgerhq/esbuild-tools\": \"workspace:*\",\n \"@ledgerhq/eslint-config-dsdk\": \"workspace:*\",\n \"@ledgerhq/jest-config-dsdk\": \"workspace:*\",\n \"@ledgerhq/prettier-config-dsdk\": \"workspace:*\",\n \"@ledgerhq/tsconfig-dsdk\": \"workspace:*\",\n \"@types/semver\": \"^7.5.8\",\n \"@types/uuid\": \"^10.0.0\",\n \"@types/w3c-web-hid\": \"^1.0.6\",\n \"ts-node\": \"^10.9.2\"\n }\n}\n", "import { injectable } from \"inversify\";\nimport { Either } from \"purify-ts\";\n\nimport { Config } from \"@internal/config/model/Config\";\n\nimport { LocalConfigDataSource } from \"./ConfigDataSource\";\n\n/**\n *\n * class StubLocalConfigDataSource\n *\n */\n@injectable()\nexport class StubLocalConfigDataSource implements LocalConfigDataSource {\n getConfig(): Either<never, Config> {\n return Either.of({\n name: \"DeviceSDK\",\n version: \"0.0.0-stub.1\",\n });\n }\n}\n", "import { injectable } from \"inversify\";\nimport { Either, Left } from \"purify-ts\";\n\nimport { Config } from \"@internal/config/model/Config\";\nimport {\n ApiCallError,\n JSONParseError,\n ParseResponseError,\n RemoteConfigFailure,\n} from \"@internal/config/model/Errors\";\n\nimport { RemoteConfigDataSource } from \"./ConfigDataSource\";\nimport { ConfigDto } from \"./Dto\";\n\n/**\n * class RemoteRestConfigDataSource\n * This is a remote data source that reads the config from a remote API (example).\n */\n@injectable()\nexport class RestRemoteConfigDataSource implements RemoteConfigDataSource {\n async getConfig(): Promise<Either<RemoteConfigFailure, Config>> {\n const call = await this._callApi();\n if (call.isLeft()) {\n return Left(new ApiCallError(call.extract()));\n }\n\n if (!call.extract().ok) {\n return Left(new ApiCallError(new Error(\"response not ok\")));\n }\n\n const json = await call.extract().json();\n if (json.isLeft()) {\n return Left(new JSONParseError());\n }\n\n return json\n .chain((dto) => this._parseResponse(dto))\n .map((config) => config);\n }\n\n // Parser for the Dto\n // parserResponse: ConfigDto => Config\n private _parseResponse(dto: ConfigDto): Either<ParseResponseError, Config> {\n const { name, version } = dto;\n if (!name || !version) {\n return Left(new ParseResponseError());\n }\n return Either.of({ name, version });\n }\n\n private _callApi(): Promise<\n Either<\n never,\n {\n ok: boolean;\n json: () => Promise<Either<JSONParseError, ConfigDto>>;\n }\n >\n > {\n return new Promise((res) => {\n res(\n Either.of({\n ok: true,\n json: async () =>\n new Promise((r) => {\n r(\n Either.of({\n name: \"DeviceSDK\",\n version: \"0.0.0-fake.1\",\n yolo: \"yolo\",\n }),\n );\n }),\n }),\n );\n });\n }\n}\n", "import { injectable } from \"inversify\";\nimport { Either } from \"purify-ts\";\n\nimport { Config } from \"@internal/config/model/Config\";\n\nimport { RemoteConfigDataSource } from \"./ConfigDataSource\";\n\n/**\n * class RemoteRestConfigDataSource\n * This is a remote data source that reads the config from a remote API (example).\n */\n@injectable()\nexport class StubRemoteConfigDataSource implements RemoteConfigDataSource {\n async getConfig(): Promise<Either<never, Config>> {\n return new Promise((res) =>\n res(\n Either.of({\n name: \"DeviceSDK\",\n version: \"0.0.0-fake.2\",\n }),\n ),\n );\n }\n}\n", "import { inject, injectable } from \"inversify\";\n\nimport type {\n LocalConfigDataSource,\n RemoteConfigDataSource,\n} from \"@internal/config/data/ConfigDataSource\";\nimport { configTypes } from \"@internal/config/di/configTypes\";\nimport { Config } from \"@internal/config/model/Config\";\nimport {\n LocalConfigFailure,\n RemoteConfigFailure,\n} from \"@internal/config/model/Errors\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport type { LoggerPublisherService } from \"@internal/logger-publisher/service/LoggerPublisherService\";\n\nimport { ConfigService } from \"./ConfigService\";\n\n@injectable()\nexport class DefaultConfigService implements ConfigService {\n private _local: LocalConfigDataSource;\n private _remote: RemoteConfigDataSource;\n private _logger: LoggerPublisherService;\n constructor(\n @inject(configTypes.LocalConfigDataSource) local: LocalConfigDataSource,\n @inject(configTypes.RemoteConfigDataSource) remote: RemoteConfigDataSource,\n @inject(loggerTypes.LoggerPublisherServiceFactory)\n loggerServiceFactory: (tag: string) => LoggerPublisherService,\n ) {\n this._local = local;\n this._remote = remote;\n this._logger = loggerServiceFactory(\"config\");\n }\n\n async getSdkConfig(): Promise<Config> {\n // Returns an Either<ReadFileError | JsonParseError, Config>\n const localConfig = this._local\n .getConfig()\n .ifLeft((error: LocalConfigFailure) => {\n this._logger.error(\"Local config not available\", {\n data: { error },\n });\n });\n\n if (localConfig.isRight()) {\n const val = localConfig.extract();\n this._logger.info(\"Local config available\", { data: { config: val } });\n return val;\n }\n\n return this._remote.getConfig().then((config) => {\n return config\n .mapLeft((error: RemoteConfigFailure) => {\n // Here we handle the error and return a default value\n this._logger.error(\"Local config available\", { data: { error } });\n return { name: \"DeadSdk\", version: \"0.0.0-dead.1\" };\n })\n .extract();\n });\n }\n}\n", "import { inject, injectable } from \"inversify\";\n\nimport { configTypes } from \"@internal/config/di/configTypes\";\nimport type { ConfigService } from \"@internal/config/service/ConfigService\";\n\n/**\n * class GetSDKVersionUseCase\n * This is our actual use case that our SDK will use.\n * We will have many use cases in our SDK, and each should be contained in its own file.\n */\n@injectable()\nexport class GetSdkVersionUseCase {\n private _configService: ConfigService;\n constructor(@inject(configTypes.ConfigService) configService: ConfigService) {\n this._configService = configService;\n }\n async getSdkVersion(): Promise<string> {\n return (await this._configService.getSdkConfig()).version;\n }\n}\n", "import { ContainerModule } from \"inversify\";\n\nimport { StaticDeviceModelDataSource } from \"@internal/device-model/data/StaticDeviceModelDataSource\";\n\nimport { deviceModelTypes } from \"./deviceModelTypes\";\n\ntype FactoryProps = {\n stub: boolean;\n};\n\nexport const deviceModelModuleFactory = ({ stub }: FactoryProps) =>\n new ContainerModule((bind, _unbind, _isBound, _rebind) => {\n bind(deviceModelTypes.DeviceModelDataSource).to(\n StaticDeviceModelDataSource,\n );\n\n if (stub) {\n // We can rebind our interfaces to their mock implementations\n // rebind(...).to(....);\n }\n });\n", "import { injectable } from \"inversify\";\n\nimport { DeviceModelId } from \"@api/device/DeviceModel\";\nimport { InternalDeviceModel } from \"@internal/device-model/model/DeviceModel\";\n\nimport { DeviceModelDataSource } from \"./DeviceModelDataSource\";\n\n/**\n * Static/in memory implementation of the device model data source\n */\n@injectable()\nexport class StaticDeviceModelDataSource implements DeviceModelDataSource {\n private static deviceModelByIds: {\n [key in DeviceModelId]: InternalDeviceModel;\n } = {\n [DeviceModelId.NANO_S]: new InternalDeviceModel({\n id: DeviceModelId.NANO_S,\n productName: \"Ledger Nano S\",\n usbProductId: 0x10,\n bootloaderUsbProductId: 0x0001,\n usbOnly: true,\n memorySize: 320 * 1024,\n masks: [0x31100000],\n }),\n [DeviceModelId.NANO_SP]: new InternalDeviceModel({\n id: DeviceModelId.NANO_SP,\n productName: \"Ledger Nano S Plus\",\n usbProductId: 0x50,\n bootloaderUsbProductId: 0x0005,\n usbOnly: true,\n memorySize: 1533 * 1024,\n masks: [0x33100000],\n }),\n [DeviceModelId.NANO_X]: new InternalDeviceModel({\n id: DeviceModelId.NANO_X,\n productName: \"Ledger Nano X\",\n usbProductId: 0x40,\n bootloaderUsbProductId: 0x0004,\n usbOnly: false,\n memorySize: 2 * 1024 * 1024,\n masks: [0x33000000],\n bluetoothSpec: [\n {\n serviceUuid: \"13d63400-2c97-0004-0000-4c6564676572\",\n notifyUuid: \"13d63400-2c97-0004-0001-4c6564676572\",\n writeUuid: \"13d63400-2c97-0004-0002-4c6564676572\",\n writeCmdUuid: \"13d63400-2c97-0004-0003-4c6564676572\",\n },\n ],\n }),\n [DeviceModelId.STAX]: new InternalDeviceModel({\n id: DeviceModelId.STAX,\n productName: \"Ledger Stax\",\n usbProductId: 0x60,\n bootloaderUsbProductId: 0x0006,\n usbOnly: false,\n memorySize: 1533 * 1024,\n masks: [0x33200000],\n bluetoothSpec: [\n {\n serviceUuid: \"13d63400-2c97-6004-0000-4c6564676572\",\n notifyUuid: \"13d63400-2c97-6004-0001-4c6564676572\",\n writeUuid: \"13d63400-2c97-6004-0002-4c6564676572\",\n writeCmdUuid: \"13d63400-2c97-6004-0003-4c6564676572\",\n },\n ],\n }),\n [DeviceModelId.FLEX]: new InternalDeviceModel({\n id: DeviceModelId.FLEX,\n productName: \"Ledger Flex\",\n usbProductId: 0x70,\n bootloaderUsbProductId: 0x0007,\n usbOnly: false,\n memorySize: 1533 * 1024,\n masks: [0x33300000],\n bluetoothSpec: [\n {\n serviceUuid: \"13d63400-2c97-3004-0000-4c6564676572\",\n notifyUuid: \"13d63400-2c97-3004-0001-4c6564676572\",\n writeUuid: \"13d63400-2c97-3004-0002-4c6564676572\",\n writeCmdUuid: \"13d63400-2c97-3004-0003-4c6564676572\",\n },\n ],\n }),\n };\n\n getAllDeviceModels(): InternalDeviceModel[] {\n return Object.values(StaticDeviceModelDataSource.deviceModelByIds);\n }\n\n getDeviceModel(params: { id: DeviceModelId }): InternalDeviceModel {\n return StaticDeviceModelDataSource.deviceModelByIds[params.id];\n }\n\n /**\n * Returns the list of device models that match all the given parameters\n */\n filterDeviceModels(\n params: Partial<InternalDeviceModel>,\n ): InternalDeviceModel[] {\n return this.getAllDeviceModels().filter((deviceModel) => {\n return Object.entries(params).every(([key, value]) => {\n return deviceModel[key as keyof InternalDeviceModel] === value;\n });\n });\n }\n}\n", "import semver from \"semver\";\n\nimport { DeviceModelId } from \"@api/device/DeviceModel\";\n\n/**\n * The info of a device model\n */\nexport class InternalDeviceModel {\n id: DeviceModelId;\n productName: string;\n usbProductId: number;\n bootloaderUsbProductId: number;\n usbOnly: boolean;\n memorySize: number;\n masks: number[];\n bluetoothSpec?: {\n serviceUuid: string;\n writeUuid: string;\n writeCmdUuid: string;\n notifyUuid: string;\n }[];\n\n constructor(props: {\n id: DeviceModelId;\n productName: string;\n usbProductId: number;\n bootloaderUsbProductId: number;\n usbOnly: boolean;\n memorySize: number;\n masks: number[];\n\n bluetoothSpec?: {\n serviceUuid: string;\n writeUuid: string;\n writeCmdUuid: string;\n notifyUuid: string;\n }[];\n }) {\n this.id = props.id;\n this.productName = props.productName;\n this.usbProductId = props.usbProductId;\n this.bootloaderUsbProductId = props.bootloaderUsbProductId;\n this.usbOnly = props.usbOnly;\n this.memorySize = props.memorySize;\n this.masks = props.masks;\n this.bluetoothSpec = props.bluetoothSpec;\n }\n\n getBlockSize(firmwareVersion: string): number {\n switch (this.id) {\n case DeviceModelId.NANO_S:\n return semver.lt(semver.coerce(firmwareVersion) ?? \"\", \"2.0.0\")\n ? 4 * 1024\n : 2 * 1024;\n case DeviceModelId.NANO_X:\n return 4 * 1024;\n case DeviceModelId.NANO_SP:\n case DeviceModelId.STAX:\n case DeviceModelId.FLEX:\n return 32;\n }\n }\n}\n", "export const deviceModelTypes = {\n DeviceModelDataSource: Symbol.for(\"DeviceModelDataSource\"),\n};\n", "import { ContainerModule, interfaces } from \"inversify\";\n\nimport { ApduReceiverService } from \"@internal/device-session/service/ApduReceiverService\";\nimport { ApduSenderService } from \"@internal/device-session/service/ApduSenderService\";\nimport {\n DefaultApduReceiverConstructorArgs,\n DefaultApduReceiverService,\n} from \"@internal/device-session/service/DefaultApduReceiverService\";\nimport {\n DefaultApduSenderService,\n DefaultApduSenderServiceConstructorArgs,\n} from \"@internal/device-session/service/DefaultApduSenderService\";\nimport { DefaultDeviceSessionService } from \"@internal/device-session/service/DefaultDeviceSessionService\";\nimport { CloseSessionsUseCase } from \"@internal/device-session/use-case/CloseSessionsUseCase\";\nimport { GetDeviceSessionStateUseCase } from \"@internal/device-session/use-case/GetDeviceSessionStateUseCase\";\nimport { ListDeviceSessionsUseCase } from \"@internal/device-session/use-case/ListDeviceSessionsUseCase\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport { LoggerPublisherService } from \"@internal/logger-publisher/service/LoggerPublisherService\";\nimport { StubUseCase } from \"@root/src/di.stub\";\n\nimport { deviceSessionTypes } from \"./deviceSessionTypes\";\n\nexport type DeviceSessionModuleArgs = Partial<{\n stub: boolean;\n}>;\n\nexport const deviceSessionModuleFactory = (\n { stub }: DeviceSessionModuleArgs = { stub: false },\n) =>\n new ContainerModule(\n (\n bind,\n _unbind,\n _isBound,\n rebind,\n _unbindAsync,\n _onActivation,\n _onDeactivation,\n ) => {\n bind<interfaces.Factory<ApduSenderService>>(\n deviceSessionTypes.ApduSenderServiceFactory,\n ).toFactory((context) => {\n const logger = context.container.get<\n (name: string) => LoggerPublisherService\n >(loggerTypes.LoggerPublisherServiceFactory);\n\n return (args: DefaultApduSenderServiceConstructorArgs) => {\n return new DefaultApduSenderService(args, logger);\n };\n });\n\n bind<interfaces.Factory<ApduReceiverService>>(\n deviceSessionTypes.ApduReceiverServiceFactory,\n ).toFactory((context) => {\n const logger = context.container.get<\n (name: string) => LoggerPublisherService\n >(loggerTypes.LoggerPublisherServiceFactory);\n\n return (args: DefaultApduReceiverConstructorArgs) => {\n return new DefaultApduReceiverService(args, logger);\n };\n });\n\n bind(deviceSessionTypes.DeviceSessionService)\n .to(DefaultDeviceSessionService)\n .inSingletonScope();\n\n bind(deviceSessionTypes.GetDeviceSessionStateUseCase).to(\n GetDeviceSessionStateUseCase,\n );\n bind(deviceSessionTypes.CloseSessionsUseCase).to(CloseSessionsUseCase);\n\n bind(deviceSessionTypes.ListDeviceSessionsUseCase).to(\n ListDeviceSessionsUseCase,\n );\n\n if (stub) {\n rebind(deviceSessionTypes.GetDeviceSessionStateUseCase).to(StubUseCase);\n rebind(deviceSessionTypes.ListDeviceSessionsUseCase).to(StubUseCase);\n }\n },\n );\n", "import { inject, injectable } from \"inversify\";\nimport { Either, Just, Left, Maybe, Nothing, Right } from \"purify-ts\";\nimport { v4 } from \"uuid\";\n\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { APDU_RESPONSE_STATUS_CODE_LENGTH } from \"@internal/device-session/data/ApduResponseConst\";\nimport {\n APDU_DATA_LENGTH_LENGTH,\n CHANNEL_LENGTH,\n HEAD_TAG_LENGTH,\n INDEX_LENGTH,\n} from \"@internal/device-session/data/FramerConst\";\nimport { ReceiverApduError } from \"@internal/device-session/model/Errors\";\nimport { Frame } from \"@internal/device-session/model/Frame\";\nimport { FrameHeader } from \"@internal/device-session/model/FrameHeader\";\nimport { FramerUtils } from \"@internal/device-session/utils/FramerUtils\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport { LoggerPublisherService } from \"@internal/logger-publisher/service/LoggerPublisherService\";\n\nimport { ApduReceiverService } from \"./ApduReceiverService\";\n\nexport type DefaultApduReceiverConstructorArgs = {\n channel?: Maybe<Uint8Array>;\n};\n\n@injectable()\nexport class DefaultApduReceiverService implements ApduReceiverService {\n private readonly _channel: Maybe<Uint8Array>;\n private readonly _logger: LoggerPublisherService;\n private _pendingFrames: Frame[];\n\n constructor(\n { channel = Maybe.zero() }: DefaultApduReceiverConstructorArgs,\n @inject(loggerTypes.LoggerPublisherServiceFactory)\n loggerModuleFactory: (tag: string) => LoggerPublisherService,\n ) {\n this._channel = channel;\n this._logger = loggerModuleFactory(\"ApduReceiverService\");\n this._pendingFrames = [];\n }\n\n /*\n * Return\n * - A complete ApduResponse\n * - Or a Nothing if not all the data has been received\n * - Or a ReceiverApduError if the apdu is not formatted correctly\n *\n * @param Uint8Array\n */\n public handleFrame(\n frameBytes: Uint8Array,\n ): Either<ReceiverApduError, Maybe<ApduResponse>> {\n const frame = this.getFrameFromBytes(frameBytes);\n\n return frame.map((value) => {\n this._logger.debug(\"handle frame\", {\n data: { frame: value.getRawData() },\n });\n this._pendingFrames.push(value);\n if (!this._pendingFrames[0]) {\n return Nothing;\n }\n const dataSize = this._pendingFrames[0].getHeader().getDataLength();\n return this.getCompleteFrame(dataSize);\n });\n }\n\n /*\n * Return\n * - A complete ApduResponse\n * - Or a Nothing if not all the data has been received\n *\n * @param Maybe<number>\n */\n private getCompleteFrame(dataSize: Maybe<number>): Maybe<ApduResponse> {\n return dataSize.chain((value) => {\n if (!this.isComplete(value)) {\n this._logger.debug(\"frame is not complete, waiting for more\");\n return Nothing;\n }\n\n const concatenatedFramesData = FramerUtils.getFirstBytesFrom(\n this.concatFrames(this._pendingFrames),\n value,\n );\n const data = FramerUtils.getFirstBytesFrom(\n concatenatedFramesData,\n concatenatedFramesData.length - APDU_RESPONSE_STATUS_CODE_LENGTH,\n );\n const statusCode = FramerUtils.getLastBytesFrom(\n concatenatedFramesData,\n APDU_RESPONSE_STATUS_CODE_LENGTH,\n );\n\n this._pendingFrames = [];\n\n return Just(\n new ApduResponse({\n data: data,\n statusCode,\n }),\n );\n });\n }\n\n /*\n * Parse an Uint8Array to a Frame\n * Return an error if the frame is not formatted correctly\n *\n * @param Uint8Array\n */\n private getFrameFromBytes(\n rawFrame: Uint8Array,\n ): Either<ReceiverApduError, Frame> {\n const channelSize = this._channel.caseOf({\n Just: () => CHANNEL_LENGTH,\n Nothing: () => 0,\n });\n\n const headTag = rawFrame.slice(channelSize, channelSize + HEAD_TAG_LENGTH);\n const index = rawFrame.slice(\n channelSize + HEAD_TAG_LENGTH,\n channelSize + HEAD_TAG_LENGTH + INDEX_LENGTH,\n );\n\n const isFirstIndex = index.reduce((curr, val) => curr + val, 0) === 0;\n\n if (!isFirstIndex && this._pendingFrames.length === 0) {\n return Left(new ReceiverApduError());\n }\n\n const dataSizeIndex = channelSize + HEAD_TAG_LENGTH + INDEX_LENGTH;\n const dataSizeLength = isFirstIndex ? APDU_DATA_LENGTH_LENGTH : 0;\n\n if (\n rawFrame.length <\n channelSize + HEAD_TAG_LENGTH + INDEX_LENGTH + dataSizeLength\n ) {\n return Left(new ReceiverApduError(\"Unable to parse header from apdu\"));\n }\n\n const dataSize = isFirstIndex\n ? Just(rawFrame.slice(dataSizeIndex, dataSizeIndex + dataSizeLength))\n : Nothing;\n\n const dataIndex = dataSizeIndex + dataSizeLength;\n const data = rawFrame.slice(dataIndex);\n\n const frame = new Frame({\n header: new FrameHeader({\n uuid: v4(),\n channel: this._channel,\n dataSize,\n headTag,\n index,\n length: channelSize + HEAD_TAG_LENGTH + INDEX_LENGTH + dataSizeLength,\n }),\n data,\n });\n\n return Right(frame);\n }\n\n /*\n * Return true if all the datas has been received\n *\n * @param number\n */\n private isComplete(dataSize: number): boolean {\n const totalReceiveLength = this._pendingFrames.reduce(\n (prev, curr) => prev + curr.getData().length,\n 0,\n );\n\n return totalReceiveLength >= dataSize;\n }\n\n private concatFrames(frames: Frame[]): Uint8Array {\n return frames.reduce(\n (prev: Uint8Array, curr: Frame) =>\n Uint8Array.from([...prev, ...curr.getData()]),\n new Uint8Array(0),\n );\n }\n}\n", "export const APDU_RESPONSE_STATUS_CODE_LENGTH = 2;\n", "export const HEAD_TAG = 0x05;\nexport const HEAD_TAG_LENGTH = 1;\nexport const CHANNEL_LENGTH = 2;\nexport const INDEX_LENGTH = 2;\nexport const APDU_DATA_LENGTH_LENGTH = 2;\n", "import { SdkError } from \"@root/src/api/Error\";\n\nexport class FramerOverflowError implements SdkError {\n readonly _tag = \"FramerOverflowError\";\n originalError?: Error;\n constructor() {\n this.originalError = new Error(\n \"Frame header length is greater than frame size\",\n );\n }\n}\n\nexport class FramerApduError implements SdkError {\n readonly _tag = \"FramerApduError\";\n originalError?: Error;\n\n constructor() {\n this.originalError = new Error(\"Frame offset is greater than apdu length\");\n }\n}\n\nexport class ReceiverApduError implements SdkError {\n readonly _tag = \"ReceiverApduError\";\n originalError: Error;\n\n constructor(message?: string) {\n this.originalError = new Error(message ?? \"Unable to parse apdu\");\n }\n}\n\nexport class DeviceSessionNotFound implements SdkError {\n readonly _tag = \"DeviceSessionNotFound\";\n originalError?: Error;\n\n constructor(originalError?: Error) {\n this.originalError = originalError ?? new Error(\"Device session not found\");\n }\n}\n\nexport class DeviceSessionRefresherError implements SdkError {\n readonly _tag = \"DeviceSessionRefresherError\";\n originalError?: Error;\n\n constructor(originalError?: Error) {\n this.originalError =\n originalError ?? new Error(\"Device session refresher error\");\n }\n}\n", "import { FrameHeader } from \"@internal/device-session/model/FrameHeader\";\n\ntype FrameConstructorArgs = {\n header: FrameHeader;\n data: Uint8Array;\n};\n\nexport class Frame {\n protected _header: FrameHeader;\n protected _data: Uint8Array;\n\n constructor({ header, data }: FrameConstructorArgs) {\n this._header = header;\n this._data = data;\n }\n\n toString(): string {\n return JSON.stringify(\n {\n header: this._header.toString(),\n data: this._data.toString(),\n },\n null,\n 2,\n );\n }\n\n getRawData(): Uint8Array {\n const headerRaw = this._header.getRawData();\n const raw = new Uint8Array(headerRaw.length + this._data.length);\n\n raw.set(headerRaw, 0);\n raw.set(this._data, headerRaw.length);\n return raw;\n }\n\n getHeader(): FrameHeader {\n return this._header;\n }\n\n getData(): Uint8Array {\n return this._data;\n }\n}\n", "export const FramerUtils = {\n /*\n * Get last bytes of Uint8Array\n *\n * @param Uint8Array\n */\n getLastBytesFrom(array: Uint8Array, size: number): Uint8Array {\n return array.slice(-size);\n },\n\n /*\n * Get first bytes of Uint8Array\n *\n * @param Uint8Array\n */\n getFirstBytesFrom(array: Uint8Array, size: number): Uint8Array {\n return array.slice(0, size);\n },\n\n /*\n * Get number from Uint8Array\n *\n * @param Uint8Array\n */\n bytesToNumber(array: Uint8Array): number {\n return array.reduce(\n (acc, val, index) =>\n acc + val * Math.pow(0x100, array.length - 1 - index),\n 0,\n );\n },\n\n /*\n * Get bytes Uint8Array from number\n *\n * @param number\n * @param size\n */\n numberToByteArray(number: number, size: number): Uint8Array {\n return new Uint8Array(size).map((_el, index) => {\n return (number >> (8 * (size - 1 - index))) & 0xff;\n });\n },\n};\n", "import { Maybe } from \"purify-ts\";\n\nimport { FramerUtils } from \"@internal/device-session/utils/FramerUtils\";\n\ntype FrameHeaderConstructorArgs = {\n uuid: string;\n channel: Maybe<Uint8Array>;\n headTag: Uint8Array;\n index: Uint8Array;\n length: number;\n dataSize: Maybe<Uint8Array>;\n};\n\nexport class FrameHeader {\n protected _uuid: string;\n protected _channel: Maybe<Uint8Array>;\n protected _headTag: Uint8Array;\n protected _index: Uint8Array;\n protected _length: number;\n protected _dataLength: Maybe<Uint8Array>;\n constructor({\n uuid,\n dataSize,\n index,\n headTag,\n length,\n channel,\n }: FrameHeaderConstructorArgs) {\n this._uuid = uuid;\n this._dataLength = dataSize;\n this._index = index;\n this._headTag = headTag;\n this._length = length;\n this._channel = channel;\n }\n getDataLength(): Maybe<number> {\n return this._dataLength.map((value) => FramerUtils.bytesToNumber(value));\n }\n setDataSize(dataSize: Maybe<Uint8Array>): FrameHeader {\n this._dataLength = dataSize;\n return this;\n }\n getLength(): number {\n return this._length;\n }\n toString(): string {\n return JSON.stringify({\n uuid: this._uuid.toString(),\n dataSize: this._dataLength.extract()?.toString(),\n index: this._index.toString(),\n headTag: this._headTag.toString(),\n length: this._length.toString(),\n channel: this._channel.extract()?.toString(),\n });\n }\n getRawData(): Uint8Array {\n return new Uint8Array([\n ...this._channel.caseOf({\n Just: (channel) => [...channel],\n Nothing: () => [],\n }),\n ...this._headTag,\n ...this._index,\n ...this._dataLength.caseOf({\n Just: (dataSize) => [...dataSize],\n Nothing: () => [],\n }),\n ]);\n }\n}\n", "import { inject, injectable } from \"inversify\";\nimport { Either, Left, Maybe, Right } from \"purify-ts\";\nimport { v4 } from \"uuid\";\n\nimport {\n APDU_DATA_LENGTH_LENGTH,\n CHANNEL_LENGTH,\n HEAD_TAG,\n HEAD_TAG_LENGTH,\n INDEX_LENGTH,\n} from \"@internal/device-session/data/FramerConst\";\nimport {\n FramerApduError,\n FramerOverflowError,\n} from \"@internal/device-session/model/Errors\";\nimport { Frame } from \"@internal/device-session/model/Frame\";\nimport { FrameHeader } from \"@internal/device-session/model/FrameHeader\";\nimport { FramerUtils } from \"@internal/device-session/utils/FramerUtils\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport { LoggerPublisherService } from \"@internal/logger-publisher/service/LoggerPublisherService\";\nimport { SdkError } from \"@root/src/api/Error\";\n\nimport type { ApduSenderService } from \"./ApduSenderService\";\n\nexport type DefaultApduSenderServiceConstructorArgs = {\n frameSize: number;\n channel?: Maybe<Uint8Array>;\n padding?: boolean;\n};\n\n/**\n * Default implementation of ApduSenderService\n *\n * Split APDU in an array of frames readies to send to a InternalConnectedDevice\n */\n@injectable()\nexport class DefaultApduSenderService implements ApduSenderService {\n protected _frameSize: number;\n protected _channel: Maybe<Uint8Array>;\n protected _padding: boolean;\n private _logger: LoggerPublisherService;\n\n /**\n * Constructor\n *\n * @param frameSize\n * @param channel\n * @param padding\n * @param loggerServiceFactory\n */\n constructor(\n {\n frameSize,\n channel = Maybe.zero(),\n padding = false,\n }: DefaultApduSenderServiceConstructorArgs,\n @inject(loggerTypes.LoggerPublisherServiceFactory)\n loggerServiceFactory: (tag: string) => LoggerPublisherService,\n ) {\n this._frameSize = frameSize;\n this._channel = channel;\n this._padding = padding;\n this._logger = loggerServiceFactory(\"framer\");\n }\n\n /**\n * Get frames from apdu\n *\n * @param apdu\n */\n public getFrames(apdu: Uint8Array): Frame[] {\n const frames: Frame[] = [];\n let count = 0;\n let frame = this.getFrameAtIndex(apdu, count);\n\n while (frame.isRight()) {\n frames.push(frame.extract());\n count += 1;\n frame = this.getFrameAtIndex(apdu, count).mapLeft((error) => {\n if (error instanceof FramerOverflowError) {\n this._logger.debug(\"Frames parsed\", { data: { count } });\n } else {\n this._logger.error(\"Error while parsing frame\", { data: { error } });\n }\n return error;\n });\n }\n return frames;\n }\n\n /**\n * Get apdu frame at index\n * Split every {{PACKET_SIZE - HEADER_SIZE}} bytes of apdu\n * @param apdu\n * @param frameIndex\n * @private\n */\n private getFrameAtIndex(\n apdu: Uint8Array,\n frameIndex: number,\n ): Either<SdkError, Frame> {\n const header = this.getFrameHeaderFrom(frameIndex, apdu.length);\n const frameOffset =\n frameIndex * this._frameSize - this.getHeaderSizeSumFrom(frameIndex);\n\n if (frameOffset > apdu.length) {\n return Left(new FramerOverflowError());\n }\n if (header.getLength() > this._frameSize) {\n return Left(new FramerApduError());\n }\n const dataMaxSize = this._frameSize - header.getLength();\n const data = apdu.slice(\n frameIndex === 0 ? 0 : frameOffset,\n frameIndex === 0\n ? dataMaxSize\n : frameOffset + this._frameSize - header.getLength(),\n );\n const frameData = this._padding\n ? new Uint8Array(dataMaxSize).fill(0)\n : new Uint8Array(data.length < dataMaxSize ? data.length : dataMaxSize);\n frameData.set(data, 0);\n const frame = new Frame({\n header,\n data: frameData,\n });\n return Right(frame);\n }\n\n /**\n * Get frame header\n * @param frameIndex\n * @param apduSize\n * @private\n */\n private getFrameHeaderFrom(\n frameIndex: number,\n apduSize: number,\n ): FrameHeader {\n const header = new FrameHeader({\n uuid: v4(),\n channel: this._channel.map((channel) =>\n FramerUtils.getLastBytesFrom(channel, CHANNEL_LENGTH),\n ),\n headTag: new Uint8Array([HEAD_TAG]),\n index: FramerUtils.numberToByteArray(frameIndex, INDEX_LENGTH),\n length: this.getFrameHeaderSizeFromIndex(frameIndex),\n dataSize: Maybe.zero(),\n });\n if (frameIndex === 0) {\n header.setDataSize(\n Maybe.of(\n FramerUtils.numberToByteArray(apduSize, APDU_DATA_LENGTH_LENGTH),\n ),\n );\n }\n return header;\n }\n\n /**\n * Get frame offset\n * First frame has more bytes of header\n * Padding append means a 0 bytes is added at the end of each frame\n * @private\n * @param frameIndex\n */\n private getHeaderSizeSumFrom(frameIndex: number): number {\n let sum = this.getFrameHeaderSizeFromIndex(0);\n let i = 1;\n while (i < frameIndex) {\n sum += this.getFrameHeaderSizeFromIndex(i);\n i += 1;\n }\n return sum;\n }\n\n /**\n * Get frame header size\n * @private\n * @param frameIndex\n */\n private getFrameHeaderSizeFromIndex(frameIndex: number): number {\n return (\n this._channel.caseOf({\n Just: () => CHANNEL_LENGTH,\n Nothing: () => 0,\n }) +\n INDEX_LENGTH +\n HEAD_TAG_LENGTH +\n (frameIndex === 0 ? APDU_DATA_LENGTH_LENGTH : 0)\n );\n }\n}\n", "import { inject, injectable } from \"inversify\";\nimport { Maybe } from \"purify-ts\";\n\nimport { DeviceSession } from \"@internal/device-session/model/DeviceSession\";\nimport { DeviceSessionNotFound } from \"@internal/device-session/model/Errors\";\nimport { DeviceSessionService } from \"@internal/device-session/service/DeviceSessionService\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport { LoggerPublisherService } from \"@internal/logger-publisher/service/LoggerPublisherService\";\n\n@injectable()\nexport class DefaultDeviceSessionService implements DeviceSessionService {\n private _sessions: DeviceSession[];\n private _logger: LoggerPublisherService;\n\n constructor(\n @inject(loggerTypes.LoggerPublisherServiceFactory)\n loggerModuleFactory: (tag: string) => LoggerPublisherService,\n ) {\n this._sessions = [];\n this._logger = loggerModuleFactory(\"DeviceSessionService\");\n }\n\n addDeviceSession(deviceSession: DeviceSession) {\n const found = this._sessions.find((s) => s.id === deviceSession.id);\n if (found) {\n this._logger.warn(\"DeviceSession already exists\", {\n data: { deviceSession },\n });\n return this;\n }\n\n this._sessions.push(deviceSession);\n this._logger.info(\"DeviceSession added\", { data: { deviceSession } });\n return this;\n }\n\n removeDeviceSession(sessionId: string) {\n const found = this._sessions.find((s) => s.id === sessionId);\n if (found) {\n found.close();\n this._sessions = this._sessions.filter((s) => s.id !== sessionId);\n this._logger.info(\"DeviceSession removed\", { data: { sessionId } });\n return this;\n }\n\n this._logger.warn(\"DeviceSession not found\", { data: { sessionId } });\n return this;\n }\n\n getDeviceSessionById(sessionId: string) {\n const deviceSession = Maybe.fromNullable(\n this._sessions.find((s) => s.id === sessionId),\n );\n\n return deviceSession.toEither(new DeviceSessionNotFound());\n }\n\n getDeviceSessionByDeviceId(deviceId: string) {\n const deviceSession = Maybe.fromNullable(\n this._sessions.find((s) => s.connectedDevice.id === deviceId),\n );\n\n return deviceSession.toEither(new DeviceSessionNotFound());\n }\n\n getDeviceSessions() {\n return this._sessions;\n }\n}\n", "import { inject, injectable } from \"inversify\";\n\nimport { deviceSessionTypes } from \"@internal/device-session/di/deviceSessionTypes\";\nimport type { DeviceSessionService } from \"@internal/device-session/service/DeviceSessionService\";\n\n@injectable()\nexport class CloseSessionsUseCase {\n private readonly _sessionService: DeviceSessionService;\n constructor(\n @inject(deviceSessionTypes.DeviceSessionService)\n sessionService: DeviceSessionService,\n ) {\n this._sessionService = sessionService;\n }\n\n execute() {\n const deviceSessions = this._sessionService.getDeviceSessions();\n\n for (const dSession of deviceSessions) {\n dSession.close();\n }\n }\n}\n", "import { inject, injectable } from \"inversify\";\n\nimport { DeviceSessionId } from \"@api/device-session/types\";\nimport { deviceSessionTypes } from \"@internal/device-session/di/deviceSessionTypes\";\nimport type { DeviceSessionService } from \"@internal/device-session/service/DeviceSessionService\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport { LoggerPublisherService } from \"@internal/logger-publisher/service/LoggerPublisherService\";\n\nexport type GetSessionDeviceStateUseCaseArgs = {\n sessionId: DeviceSessionId;\n};\n\n/**\n * Get deviceSession state from its id.\n */\n@injectable()\nexport class GetDeviceSessionStateUseCase {\n private readonly _sessionService: DeviceSessionService;\n private readonly _logger: LoggerPublisherService;\n constructor(\n @inject(deviceSessionTypes.DeviceSessionService)\n sessionService: DeviceSessionService,\n @inject(loggerTypes.LoggerPublisherServiceFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this._sessionService = sessionService;\n this._logger = loggerFactory(\"GetDeviceSessionStateUseCase\");\n }\n\n execute({ sessionId }: GetSessionDeviceStateUseCaseArgs) {\n const errorOrDeviceSession =\n this._sessionService.getDeviceSessionById(sessionId);\n\n return errorOrDeviceSession.caseOf({\n Left: (error) => {\n this._logger.error(\"Error getting session device\", { data: { error } });\n throw error;\n },\n Right: (deviceSession) => deviceSession.state,\n });\n }\n}\n", "import { inject, injectable } from \"inversify\";\n\nimport { deviceSessionTypes } from \"@internal/device-session/di/deviceSessionTypes\";\nimport { DeviceSession } from \"@internal/device-session/model/DeviceSession\";\nimport type { DeviceSessionService } from \"@internal/device-session/service/DeviceSessionService\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport { LoggerPublisherService } from \"@internal/logger-publisher/service/LoggerPublisherService\";\n\n/**\n * List all device sessions.\n */\n@injectable()\nexport class ListDeviceSessionsUseCase {\n private readonly _sessionService: DeviceSessionService;\n private readonly _logger: LoggerPublisherService;\n\n constructor(\n @inject(deviceSessionTypes.DeviceSessionService)\n sessionService: DeviceSessionService,\n @inject(loggerTypes.LoggerPublisherServiceFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this._sessionService = sessionService;\n this._logger = loggerFactory(\"ListDeviceSessionsUseCase\");\n }\n\n execute(): DeviceSession[] {\n this._logger.info(\"Listing device sessions\");\n return this._sessionService.getDeviceSessions();\n }\n}\n", "import { ContainerModule } from \"inversify\";\n\nimport { ConnectUseCase } from \"@internal/discovery/use-case/ConnectUseCase\";\nimport { DisconnectUseCase } from \"@internal/discovery/use-case/DisconnectUseCase\";\nimport { GetConnectedDeviceUseCase } from \"@internal/discovery/use-case/GetConnectedDeviceUseCase\";\nimport { StartDiscoveringUseCase } from \"@internal/discovery/use-case/StartDiscoveringUseCase\";\nimport { StopDiscoveringUseCase } from \"@internal/discovery/use-case/StopDiscoveringUseCase\";\nimport { StubUseCase } from \"@root/src/di.stub\";\n\nimport { discoveryTypes } from \"./discoveryTypes\";\n\ntype FactoryProps = {\n stub: boolean;\n};\n\nexport const discoveryModuleFactory = ({ stub = false }: FactoryProps) =>\n new ContainerModule((bind, _unbind, _isBound, rebind) => {\n bind(discoveryTypes.ConnectUseCase).to(ConnectUseCase);\n bind(discoveryTypes.DisconnectUseCase).to(DisconnectUseCase);\n bind(discoveryTypes.StartDiscoveringUseCase).to(StartDiscoveringUseCase);\n bind(discoveryTypes.StopDiscoveringUseCase).to(StopDiscoveringUseCase);\n bind(discoveryTypes.GetConnectedDeviceUseCase).to(\n GetConnectedDeviceUseCase,\n );\n\n if (stub) {\n rebind(discoveryTypes.StartDiscoveringUseCase).to(StubUseCase);\n rebind(discoveryTypes.StopDiscoveringUseCase).to(StubUseCase);\n rebind(discoveryTypes.ConnectUseCase).to(StubUseCase);\n rebind(discoveryTypes.DisconnectUseCase).to(StubUseCase);\n rebind(discoveryTypes.GetConnectedDeviceUseCase).to(StubUseCase);\n }\n });\n", "import { inject, injectable, multiInject } from \"inversify\";\n\nimport { DeviceSessionId } from \"@api/device-session/types\";\nimport { DiscoveredDevice } from \"@api/transport/model/DiscoveredDevice\";\nimport type { Transport } from \"@api/transport/model/Transport\";\nimport { DeviceId } from \"@api/types\";\nimport { deviceSessionTypes } from \"@internal/device-session/di/deviceSessionTypes\";\nimport { DeviceSession } from \"@internal/device-session/model/DeviceSession\";\nimport type { DeviceSessionService } from \"@internal/device-session/service/DeviceSessionService\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport { LoggerPublisherService } from \"@internal/logger-publisher/service/LoggerPublisherService\";\nimport { managerApiTypes } from \"@internal/manager-api/di/managerApiTypes\";\nimport type { ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\nimport { transportDiTypes } from \"@internal/transport/di/transportDiTypes\";\nimport { TransportNotSupportedError } from \"@internal/transport/model/Errors\";\n\n/**\n * The arguments for the ConnectUseCase.\n */\nexport type ConnectUseCaseArgs = {\n /**\n * UUID of the device got from device discovery `StartDiscoveringUseCase`\n */\n device: DiscoveredDevice;\n};\n\n/**\n * Connects to a discovered device.\n */\n@injectable()\nexport class ConnectUseCase {\n private readonly _transports: Transport[];\n private readonly _sessionService: DeviceSessionService;\n private readonly _loggerFactory: (tag: string) => LoggerPublisherService;\n private readonly _managerApi: ManagerApiService;\n private readonly _logger: LoggerPublisherService;\n\n constructor(\n @multiInject(transportDiTypes.Transport)\n transports: Transport[],\n @inject(deviceSessionTypes.DeviceSessionService)\n sessionService: DeviceSessionService,\n @inject(loggerTypes.LoggerPublisherServiceFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n @inject(managerApiTypes.ManagerApiService)\n managerApi: ManagerApiService,\n ) {\n this._sessionService = sessionService;\n this._transports = transports;\n this._loggerFactory = loggerFactory;\n this._logger = loggerFactory(\"ConnectUseCase\");\n this._managerApi = managerApi;\n }\n\n private handleDeviceDisconnect(deviceId: DeviceId) {\n const deviceSessionOrError =\n this._sessionService.getDeviceSessionByDeviceId(deviceId);\n deviceSessionOrError.map((deviceSession) => {\n this._sessionService.removeDeviceSession(deviceSession.id);\n });\n }\n\n async execute({ device }: ConnectUseCaseArgs): Promise<DeviceSessionId> {\n const transport = this._transports.find(\n (t) => t.getIdentifier() === device.transport,\n );\n if (!transport) {\n throw new TransportNotSupportedError(new Error(\"Unknown transport\"));\n }\n const either = await transport.connect({\n deviceId: device.id,\n onDisconnect: (dId) => this.handleDeviceDisconnect(dId),\n });\n\n return either.caseOf({\n Left: (error) => {\n this._logger.error(\"Error connecting to device\", {\n data: { deviceId: device.id, error },\n });\n throw error;\n },\n Right: (connectedDevice) => {\n const deviceSession = new DeviceSession(\n { connectedDevice },\n this._loggerFactory,\n this._managerApi,\n );\n this._sessionService.addDeviceSession(deviceSession);\n return deviceSession.id;\n },\n });\n }\n}\n", "import { BehaviorSubject } from \"rxjs\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { Command } from \"@api/command/Command\";\nimport { CommandResult } from \"@api/command/model/CommandResult\";\nimport { ListAppsResponse } from \"@api/command/os/ListAppsCommand\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { DeviceStatus } from \"@api/device/DeviceStatus\";\nimport {\n DeviceAction,\n DeviceActionIntermediateValue,\n ExecuteDeviceActionReturnType,\n} from \"@api/device-action/DeviceAction\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\nimport {\n DeviceSessionState,\n DeviceSessionStateType,\n} from \"@api/device-session/DeviceSessionState\";\nimport { DeviceSessionId } from \"@api/device-session/types\";\nimport { SdkError } from \"@api/Error\";\nimport { LoggerPublisherService } from \"@internal/logger-publisher/service/LoggerPublisherService\";\nimport { type ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\nimport { InternalConnectedDevice } from \"@internal/transport/model/InternalConnectedDevice\";\n\nimport { DeviceSessionRefresher } from \"./DeviceSessionRefresher\";\n\nexport type SessionConstructorArgs = {\n connectedDevice: InternalConnectedDevice;\n id?: DeviceSessionId;\n};\n\n/**\n * Represents a session with a device.\n */\nexport class DeviceSession {\n private readonly _id: DeviceSessionId;\n private readonly _connectedDevice: InternalConnectedDevice;\n private readonly _deviceState: BehaviorSubject<DeviceSessionState>;\n private readonly _refresher: DeviceSessionRefresher;\n private readonly _managerApiService: ManagerApiService;\n\n constructor(\n { connectedDevice, id = uuidv4() }: SessionConstructorArgs,\n loggerModuleFactory: (tag: string) => LoggerPublisherService,\n managerApiService: ManagerApiService,\n ) {\n this._id = id;\n this._connectedDevice = connectedDevice;\n this._deviceState = new BehaviorSubject<DeviceSessionState>({\n sessionStateType: DeviceSessionStateType.Connected,\n deviceStatus: DeviceStatus.CONNECTED,\n });\n this._refresher = new DeviceSessionRefresher(\n {\n refreshInterval: 1000,\n deviceStatus: DeviceStatus.CONNECTED,\n sendApduFn: (rawApdu: Uint8Array) =>\n this.sendApdu(rawApdu, {\n isPolling: true,\n triggersDisconnection: false,\n }),\n updateStateFn: (callback) => {\n const state = this._deviceState.getValue();\n this.setDeviceSessionState(callback(state));\n },\n },\n loggerModuleFactory(\"device-session-refresher\"),\n );\n this._managerApiService = managerApiService;\n }\n\n public get id() {\n return this._id;\n }\n\n public get connectedDevice() {\n return this._connectedDevice;\n }\n\n public get state() {\n return this._deviceState.asObservable();\n }\n\n public setDeviceSessionState(state: DeviceSessionState) {\n this._deviceState.next(state);\n }\n\n private updateDeviceStatus(deviceStatus: DeviceStatus) {\n const sessionState = this._deviceState.getValue();\n this._refresher.setDeviceStatus(deviceStatus);\n this._deviceState.next({\n ...sessionState,\n deviceStatus,\n });\n }\n\n async sendApdu(\n rawApdu: Uint8Array,\n options: { isPolling: boolean; triggersDisconnection: boolean } = {\n isPolling: false,\n triggersDisconnection: false,\n },\n ) {\n if (!options.isPolling) this.updateDeviceStatus(DeviceStatus.BUSY);\n\n const errorOrResponse = await this._connectedDevice.sendApdu(\n rawApdu,\n options.triggersDisconnection,\n );\n\n return errorOrResponse.ifRight((response: ApduResponse) => {\n if (CommandUtils.isLockedDeviceResponse(response)) {\n this.updateDeviceStatus(DeviceStatus.LOCKED);\n } else {\n this.updateDeviceStatus(DeviceStatus.CONNECTED);\n }\n });\n }\n\n async sendCommand<Response, Args, ErrorStatusCodes>(\n command: Command<Response, Args, ErrorStatusCodes>,\n ): Promise<CommandResult<Response, ErrorStatusCodes>> {\n const apdu = command.getApdu();\n const response = await this.sendApdu(apdu.getRawApdu(), {\n isPolling: false,\n triggersDisconnection: command.triggersDisconnection ?? false,\n });\n\n return response.caseOf({\n Left: (err) => {\n throw err;\n },\n Right: (r) =>\n command.parseResponse(r, this._connectedDevice.deviceModel.id),\n });\n }\n\n executeDeviceAction<\n Output,\n Input,\n Error extends SdkError,\n IntermediateValue extends DeviceActionIntermediateValue,\n >(\n deviceAction: DeviceAction<Output, Input, Error, IntermediateValue>,\n ): ExecuteDeviceActionReturnType<Output, Error, IntermediateValue> {\n const { observable, cancel } = deviceAction._execute({\n sendCommand: async <Response, ErrorStatusCodes, Args>(\n command: Command<Response, ErrorStatusCodes, Args>,\n ) => this.sendCommand(command),\n getDeviceSessionState: () => this._deviceState.getValue(),\n getDeviceSessionStateObservable: () => this.state,\n setDeviceSessionState: (state: DeviceSessionState) => {\n this.setDeviceSessionState(state);\n return this._deviceState.getValue();\n },\n getMetadataForAppHashes: (apps: ListAppsResponse) =>\n this._managerApiService.getAppsByHash(apps),\n });\n\n return {\n observable,\n cancel,\n };\n }\n\n close() {\n this.updateDeviceStatus(DeviceStatus.NOT_CONNECTED);\n this._deviceState.complete();\n }\n}\n", "import { GetAppAndVersionResponse } from \"@api/command/os/GetAppAndVersionCommand\";\nimport { BatteryStatusFlags } from \"@api/command/os/GetBatteryStatusCommand\";\nimport { DeviceStatus } from \"@api/device/DeviceStatus\";\nimport { Application } from \"@internal/manager-api/model/ManagerApiType\";\n\n/**\n * The battery status of a device.\n */\nexport type BatteryStatus = {\n readonly level: number;\n readonly voltage: number;\n readonly temperature: number;\n readonly current: number;\n readonly status: BatteryStatusFlags;\n};\n\n/**\n * The firmware version of a device.\n */\nexport type FirmwareVersion = {\n /**\n * Microcontroller Unit version\n */\n readonly mcu: string;\n\n /**\n * Bootloader version\n */\n readonly bootloader: string;\n\n /**\n * Operating System version\n */\n readonly os: string;\n};\n\n/**\n * The current application running on a device. Alias of GetAppAndVersionResponse.\n */\nexport type RunningApp = GetAppAndVersionResponse;\n\n/**\n * The state types of a device session.\n */\nexport enum DeviceSessionStateType {\n Connected,\n ReadyWithoutSecureChannel,\n ReadyWithSecureChannel,\n}\n\ntype DeviceSessionBaseState = {\n readonly sessionStateType: DeviceSessionStateType;\n\n /**\n * The status of the device.\n */\n readonly deviceStatus: DeviceStatus;\n\n /**\n * The name of the device.\n */\n readonly deviceName?: string;\n};\n\ntype DeviceSessionReadyState = {\n /**\n * The battery status of the device.\n * TODO: This should not be optional, but it is not in the current implementation.\n */\n readonly batteryStatus?: BatteryStatus;\n\n /**\n * The firmware version of the device.\n * TODO: This should not be optional, but it is not in the current implementation.\n */\n readonly firmwareVersion?: FirmwareVersion;\n\n /**\n * The current application running on the device.\n */\n readonly currentApp: RunningApp;\n\n /**\n * The current applications installed on the device.\n */\n readonly installedApps: Application[];\n};\n\n/**\n * The state of a connected device session.\n */\nexport type ConnectedState = DeviceSessionBaseState & {\n /**\n * The type of the device session state.\n */\n readonly sessionStateType: DeviceSessionStateType.Connected;\n};\n\n/**\n * The state of a device session when it is ready without a secure channel.\n */\nexport type ReadyWithoutSecureChannelState = DeviceSessionBaseState &\n DeviceSessionReadyState & {\n /**\n * The type of the device session state.\n */\n readonly sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel;\n };\n\n/**\n * The state of a device session when it is ready with a secure channel.\n */\nexport type ReadyWithSecureChannelState = DeviceSessionBaseState &\n DeviceSessionReadyState & {\n /**\n * The type of the device session state.\n */\n readonly sessionStateType: DeviceSessionStateType.ReadyWithSecureChannel;\n };\n\n/**\n * The state of a device session.\n */\nexport type DeviceSessionState =\n | ConnectedState\n | ReadyWithoutSecureChannelState\n | ReadyWithSecureChannelState;\n", "import { injectable } from \"inversify\";\nimport { Either } from \"purify-ts\";\nimport { filter, interval, map, Subscription, switchMap } from \"rxjs\";\n\nimport { isSuccessCommandResult } from \"@api/command/model/CommandResult\";\nimport { GetAppAndVersionCommand } from \"@api/command/os/GetAppAndVersionCommand\";\nimport { DeviceStatus } from \"@api/device/DeviceStatus\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\nimport {\n DeviceSessionState,\n DeviceSessionStateType,\n} from \"@api/device-session/DeviceSessionState\";\nimport { SdkError } from \"@api/Error\";\nimport { type LoggerPublisherService } from \"@internal/logger-publisher/service/LoggerPublisherService\";\n\n/**\n * The arguments for the DeviceSessionRefresher.\n */\nexport type DeviceSessionRefresherArgs = {\n /**\n * The refresh interval in milliseconds.\n */\n refreshInterval: number;\n\n /**\n * The current device status when the refresher is created.\n */\n deviceStatus: Exclude<DeviceStatus, DeviceStatus.NOT_CONNECTED>;\n\n /**\n * The function used to send APDU commands to the device.\n */\n sendApduFn: (rawApdu: Uint8Array) => Promise<Either<SdkError, ApduResponse>>;\n\n /**\n * Callback that updates the state of the device session with\n * polling response.\n * @param callback - A function that will take the previous state and return the new state.\n * @returns void\n */\n updateStateFn(\n callback: (state: DeviceSessionState) => DeviceSessionState,\n ): void;\n};\n\n/**\n * The session refresher that periodically sends a command to refresh the session.\n */\n@injectable()\nexport class DeviceSessionRefresher {\n private readonly _logger: LoggerPublisherService;\n private readonly _getAppAndVersionCommand = new GetAppAndVersionCommand();\n private _deviceStatus: DeviceStatus;\n private _subscription: Subscription;\n\n constructor(\n {\n refreshInterval,\n deviceStatus,\n sendApduFn,\n updateStateFn,\n }: DeviceSessionRefresherArgs,\n logger: LoggerPublisherService,\n ) {\n this._deviceStatus = deviceStatus;\n this._logger = logger;\n this._subscription = interval(refreshInterval)\n .pipe(\n filter(\n () =>\n ![DeviceStatus.BUSY, DeviceStatus.NOT_CONNECTED].includes(\n this._deviceStatus,\n ),\n ),\n switchMap(() => {\n const rawApdu = this._getAppAndVersionCommand.getApdu().getRawApdu();\n return sendApduFn(rawApdu);\n }),\n map((resp) =>\n resp.caseOf({\n Left: (error) => {\n this._logger.error(\"Error in sending APDU when polling\", {\n data: { error },\n });\n return null;\n },\n Right: (data: ApduResponse) => {\n try {\n return this._getAppAndVersionCommand.parseResponse(data);\n } catch (error) {\n this._logger.error(\"Error in parsing APDU response\", {\n data: { error },\n });\n return null;\n }\n },\n }),\n ),\n filter((parsedResponse) => parsedResponse !== null),\n )\n .subscribe((parsedResponse) => {\n if (!isSuccessCommandResult(parsedResponse)) {\n return;\n }\n // `batteryStatus` and `firmwareVersion` are not available in the polling response.\n updateStateFn((state) => ({\n ...state,\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: this._deviceStatus,\n currentApp: parsedResponse.data,\n installedApps: \"installedApps\" in state ? state.installedApps : [],\n }));\n });\n }\n\n /**\n * Maintain a device status to prevent sending APDU when the device is busy.\n *\n * @param {DeviceStatus} deviceStatus - The new device status.\n */\n setDeviceStatus(deviceStatus: DeviceStatus) {\n if (deviceStatus === DeviceStatus.NOT_CONNECTED) {\n this.stop();\n }\n this._deviceStatus = deviceStatus;\n }\n\n /**\n * Stops the session refresher.\n * The refresher will no longer send commands to refresh the session.\n */\n stop() {\n if (!this._subscription || this._subscription.closed) {\n return;\n }\n this._subscription.unsubscribe();\n }\n}\n", "export const managerApiTypes = {\n ManagerApiService: Symbol.for(\"ManagerApiService\"),\n ManagerApiDataSource: Symbol.for(\"ManagerApiDataSource\"),\n SdkConfig: Symbol.for(\"ManagerApiSdkConfig\"),\n};\n", "export const transportDiTypes = {\n Transport: Symbol.for(\"Transport\"),\n SdkConfig: Symbol.for(\"TransportSdkConfig\"),\n};\n", "import { SdkError } from \"@api/Error\";\n\nexport type PromptDeviceAccessError =\n | UsbHidTransportNotSupportedError\n | NoAccessibleDeviceError;\n\nexport type ConnectError = UnknownDeviceError | OpeningConnectionError;\n\nclass GeneralSdkError implements SdkError {\n _tag = \"GeneralSdkError\";\n originalError?: unknown;\n constructor(err?: unknown) {\n if (err instanceof Error) {\n this.originalError = err;\n } else {\n this.originalError = new Error(String(err));\n }\n }\n}\n\nexport class DeviceNotRecognizedError extends GeneralSdkError {\n override readonly _tag = \"DeviceNotRecognizedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class NoAccessibleDeviceError extends GeneralSdkError {\n override readonly _tag = \"NoAccessibleDeviceError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class OpeningConnectionError extends GeneralSdkError {\n override readonly _tag = \"ConnectionOpeningError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class UnknownDeviceError extends GeneralSdkError {\n override readonly _tag = \"UnknownDeviceError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class TransportNotSupportedError extends GeneralSdkError {\n override readonly _tag = \"TransportNotSupportedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class UsbHidTransportNotSupportedError extends GeneralSdkError {\n override readonly _tag = \"UsbHidTransportNotSupportedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class SendApduConcurrencyError extends GeneralSdkError {\n override readonly _tag = \"SendApduConcurrencyError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class DisconnectError extends GeneralSdkError {\n override readonly _tag = \"DisconnectError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class ReconnectionFailedError extends GeneralSdkError {\n override readonly _tag = \"ReconnectionFailedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class HidSendReportError extends GeneralSdkError {\n override readonly _tag = \"HidSendReportError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n", "import { inject, injectable, multiInject } from \"inversify\";\n\nimport type { Transport } from \"@api/transport/model/Transport\";\nimport type { DeviceSessionId } from \"@api/types\";\nimport { deviceSessionTypes } from \"@internal/device-session/di/deviceSessionTypes\";\nimport type { DeviceSessionService } from \"@internal/device-session/service/DeviceSessionService\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport { LoggerPublisherService } from \"@internal/logger-publisher/service/LoggerPublisherService\";\nimport { transportDiTypes } from \"@internal/transport/di/transportDiTypes\";\nimport { TransportNotSupportedError } from \"@internal/transport/model/Errors\";\n\n/**\n * The arguments for the DisconnectUseCase.\n */\nexport type DisconnectUseCaseArgs = {\n /**\n * Device session identifier from `DeviceSdk.connect`.\n */\n sessionId: DeviceSessionId;\n};\n\n/**\n * Disconnects to a discovered device.\n */\n@injectable()\nexport class DisconnectUseCase {\n private readonly _transports: Transport[];\n private readonly _sessionService: DeviceSessionService;\n private readonly _logger: LoggerPublisherService;\n\n constructor(\n @multiInject(transportDiTypes.Transport)\n transports: Transport[],\n @inject(deviceSessionTypes.DeviceSessionService)\n sessionService: DeviceSessionService,\n @inject(loggerTypes.LoggerPublisherServiceFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this._sessionService = sessionService;\n this._transports = transports;\n this._logger = loggerFactory(\"DisconnectUseCase\");\n }\n\n async execute({ sessionId }: DisconnectUseCaseArgs): Promise<void> {\n const errorOrSession = this._sessionService.getDeviceSessionById(sessionId);\n\n return errorOrSession.caseOf({\n Left: (error) => {\n this._logger.error(\"Device session not found\", {\n data: { sessionId, error },\n });\n throw error;\n },\n Right: async (deviceSession) => {\n const transportIdentifier = deviceSession.connectedDevice.transport;\n const transport = this._transports.find(\n (t) => t.getIdentifier() === transportIdentifier,\n );\n if (!transport) {\n throw new TransportNotSupportedError(new Error(\"Unknown transport\"));\n }\n\n deviceSession.close();\n this._sessionService.removeDeviceSession(sessionId);\n await transport\n .disconnect({\n connectedDevice: deviceSession.connectedDevice,\n })\n .then((errorOrDisconnected) =>\n errorOrDisconnected.mapLeft((error) => {\n throw error;\n }),\n );\n },\n });\n }\n}\n", "import { inject, injectable } from \"inversify\";\n\nimport { DeviceSessionId } from \"@api/device-session/types\";\nimport { ConnectedDevice } from \"@api/transport/model/ConnectedDevice\";\nimport { deviceSessionTypes } from \"@internal/device-session/di/deviceSessionTypes\";\nimport type { DeviceSessionService } from \"@internal/device-session/service/DeviceSessionService\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport { LoggerPublisherService } from \"@internal/logger-publisher/service/LoggerPublisherService\";\n\nexport type GetConnectedDeviceUseCaseArgs = {\n sessionId: DeviceSessionId;\n};\n\n/**\n * Get a connected device from deviceSession id.\n */\n@injectable()\nexport class GetConnectedDeviceUseCase {\n private readonly _sessionService: DeviceSessionService;\n private readonly _logger: LoggerPublisherService;\n\n constructor(\n @inject(deviceSessionTypes.DeviceSessionService)\n sessionService: DeviceSessionService,\n @inject(loggerTypes.LoggerPublisherServiceFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this._sessionService = sessionService;\n this._logger = loggerFactory(\"GetConnectedDeviceUseCase\");\n }\n\n execute({ sessionId }: GetConnectedDeviceUseCaseArgs): ConnectedDevice {\n const deviceSessionOrError =\n this._sessionService.getDeviceSessionById(sessionId);\n\n return deviceSessionOrError.caseOf({\n Right: (deviceSession) =>\n new ConnectedDevice({\n internalConnectedDevice: deviceSession.connectedDevice,\n }),\n Left: (error) => {\n this._logger.error(\"Error getting session\", {\n data: { error },\n });\n throw error;\n },\n });\n }\n}\n", "import { DeviceId, DeviceModelId } from \"@api/device/DeviceModel\";\nimport { ConnectionType } from \"@api/discovery/ConnectionType\";\nimport { InternalConnectedDevice } from \"@internal/transport/model/InternalConnectedDevice\";\n\ntype ConnectedDeviceConstructorArgs = {\n readonly internalConnectedDevice: InternalConnectedDevice;\n};\n\nexport class ConnectedDevice {\n public readonly id: DeviceId;\n public readonly modelId: DeviceModelId;\n public readonly name: string;\n public readonly type: ConnectionType;\n\n constructor({\n internalConnectedDevice: {\n id,\n deviceModel: { id: deviceModelId, productName: deviceName },\n type,\n },\n }: ConnectedDeviceConstructorArgs) {\n this.id = id;\n this.modelId = deviceModelId;\n this.name = deviceName;\n this.type = type;\n }\n}\n", "import { injectable, multiInject } from \"inversify\";\nimport { map, mergeMap, Observable, of } from \"rxjs\";\n\nimport { DeviceModel } from \"@api/device/DeviceModel\";\nimport { DiscoveredDevice } from \"@api/transport/model/DiscoveredDevice\";\nimport type { Transport } from \"@api/transport/model/Transport\";\nimport { TransportIdentifier } from \"@api/transport/model/TransportIdentifier\";\nimport { transportDiTypes } from \"@internal/transport/di/transportDiTypes\";\nimport { TransportNotSupportedError } from \"@internal/transport/model/Errors\";\nimport { InternalDiscoveredDevice } from \"@internal/transport/model/InternalDiscoveredDevice\";\n\nexport type StartDiscoveringUseCaseArgs = {\n /**\n * Identifier of the transport to start discovering devices.\n * Can be undefined to discover all available transports in parralel.\n */\n transport?: TransportIdentifier;\n};\n\n/**\n * Starts discovering devices connected.\n *\n * For the WebHID implementation, this use-case needs to be called as a result of an user interaction (button \"click\" event for ex).\n */\n@injectable()\nexport class StartDiscoveringUseCase {\n constructor(\n @multiInject(transportDiTypes.Transport)\n private transports: Transport[],\n ) {}\n\n private mapDiscoveredDevice(\n device: InternalDiscoveredDevice,\n ): DiscoveredDevice {\n const deviceModel = new DeviceModel({\n id: device.id,\n model: device.deviceModel.id,\n name: device.deviceModel.productName,\n });\n return {\n id: device.id,\n deviceModel,\n transport: device.transport,\n };\n }\n\n execute({\n transport,\n }: StartDiscoveringUseCaseArgs): Observable<DiscoveredDevice> {\n if (transport) {\n const instance = this.transports.find(\n (t) => t.getIdentifier() === transport,\n );\n if (!instance) {\n throw new TransportNotSupportedError(new Error(\"Unknown transport\"));\n }\n return instance\n .startDiscovering()\n .pipe(map((device) => this.mapDiscoveredDevice(device)));\n } else {\n // Discover from all transports in parallel\n return of(...this.transports).pipe(\n mergeMap((instance) =>\n instance\n .startDiscovering()\n .pipe(map((device) => this.mapDiscoveredDevice(device))),\n ),\n );\n }\n }\n}\n", "import { injectable, multiInject } from \"inversify\";\n\nimport type { Transport } from \"@api/transport/model/Transport\";\nimport { transportDiTypes } from \"@internal/transport/di/transportDiTypes\";\n\n/**\n * Stops discovering devices connected.\n */\n@injectable()\nexport class StopDiscoveringUseCase {\n constructor(\n @multiInject(transportDiTypes.Transport)\n private transports: Transport[],\n ) {}\n\n execute(): void {\n for (const transport of this.transports) {\n transport.stopDiscovering();\n }\n }\n}\n", "import { ContainerModule, interfaces } from \"inversify\";\n\nimport { LoggerSubscriberService } from \"@api/logger-subscriber/service/LoggerSubscriberService\";\nimport { DefaultLoggerPublisherService } from \"@internal/logger-publisher/service/DefaultLoggerPublisherService\";\nimport { LoggerPublisherService } from \"@internal/logger-publisher/service/LoggerPublisherService\";\n\nimport { loggerTypes } from \"./loggerTypes\";\n\ntype FactoryProps = {\n subscribers: LoggerSubscriberService[];\n};\n\nexport const loggerModuleFactory = (\n { subscribers }: FactoryProps = { subscribers: [] },\n) =>\n new ContainerModule(\n (\n bind,\n _unbind,\n _isBound,\n _rebind,\n _unbindAsync,\n _onActivation,\n _onDeactivation,\n ) => {\n bind<interfaces.Factory<LoggerPublisherService>>(\n loggerTypes.LoggerPublisherServiceFactory,\n ).toFactory((_context) => {\n return (tag: string) =>\n new DefaultLoggerPublisherService(subscribers, tag);\n });\n },\n );\n", "import { injectable } from \"inversify\";\n\nimport { LogLevel } from \"@api/logger-subscriber/model/LogLevel\";\nimport { LogSubscriberOptions } from \"@api/logger-subscriber/model/LogSubscriberOptions\";\nimport { LoggerSubscriberService } from \"@api/logger-subscriber/service/LoggerSubscriberService\";\nimport { LogPublisherOptions } from \"@internal/logger-publisher/model/LogPublisherOptions\";\n\nimport { LoggerPublisherService } from \"./LoggerPublisherService\";\n\n@injectable()\nexport class DefaultLoggerPublisherService implements LoggerPublisherService {\n subscribers: LoggerSubscriberService[];\n tag: string;\n\n constructor(subscribers: LoggerSubscriberService[], tag: string) {\n this.subscribers = subscribers;\n this.tag = tag;\n }\n\n _log(level: LogLevel, message: string, options?: LogPublisherOptions): void {\n this.subscribers.forEach((subscriber) => {\n const subscriberOptions: LogSubscriberOptions = {\n timestamp: Date.now(),\n tag: this.tag,\n ...options,\n };\n subscriber.log(level, message, subscriberOptions);\n });\n }\n\n info(message: string, options?: LogPublisherOptions): void {\n this._log(LogLevel.Info, message, options);\n }\n\n warn(message: string, options?: LogPublisherOptions): void {\n this._log(LogLevel.Warning, message, options);\n }\n\n debug(message: string, options?: LogPublisherOptions): void {\n this._log(LogLevel.Debug, message, options);\n }\n\n error(message: string, options?: LogPublisherOptions): void {\n this._log(LogLevel.Error, message, options);\n }\n}\n", "export enum LogLevel {\n Fatal = 0,\n Error = 1,\n Warning = 2,\n Info = 3,\n Debug = 4,\n}\n", "import { ContainerModule } from \"inversify\";\n\nimport { SdkConfig } from \"@api/SdkConfig\";\nimport { AxiosManagerApiDataSource } from \"@internal/manager-api/data/AxiosManagerApiDataSource\";\nimport { DefaultManagerApiService } from \"@internal/manager-api/service/DefaultManagerApiService\";\nimport { StubUseCase } from \"@root/src/di.stub\";\n\nimport { managerApiTypes } from \"./managerApiTypes\";\n\ntype FactoryProps = {\n stub?: boolean;\n config: SdkConfig;\n};\n\nexport const managerApiModuleFactory = ({ stub, config }: FactoryProps) =>\n new ContainerModule((bind, _unbind, _isBound, rebind) => {\n bind(managerApiTypes.SdkConfig).toConstantValue(config);\n\n bind(managerApiTypes.ManagerApiDataSource).to(AxiosManagerApiDataSource);\n bind(managerApiTypes.ManagerApiService).to(DefaultManagerApiService);\n\n if (stub) {\n rebind(managerApiTypes.ManagerApiDataSource).to(StubUseCase);\n rebind(managerApiTypes.ManagerApiService).to(StubUseCase);\n }\n });\n", "import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { EitherAsync } from \"purify-ts\";\n\nimport { type SdkConfig } from \"@api/SdkConfig\";\nimport { managerApiTypes } from \"@internal/manager-api/di/managerApiTypes\";\nimport { HttpFetchApiError } from \"@internal/manager-api/model/Errors\";\nimport {\n Application,\n AppType,\n} from \"@internal/manager-api/model/ManagerApiType\";\n\nimport { ManagerApiDataSource } from \"./ManagerApiDataSource\";\nimport { ApplicationDto, AppTypeDto } from \"./ManagerApiDto\";\n\n@injectable()\nexport class AxiosManagerApiDataSource implements ManagerApiDataSource {\n private readonly baseUrl: string;\n constructor(@inject(managerApiTypes.SdkConfig) config: SdkConfig) {\n this.baseUrl = config.managerApiUrl;\n }\n\n private mapAppTypeDtoToAppType(appType: AppTypeDto): AppType {\n switch (appType) {\n case AppTypeDto.currency:\n return AppType.currency;\n case AppTypeDto.plugin:\n return AppType.plugin;\n case AppTypeDto.tool:\n return AppType.tool;\n case AppTypeDto.swap:\n return AppType.swap;\n }\n }\n\n private mapApplicationDtoToApplication(\n apps: Array<ApplicationDto | null>,\n ): Array<Application | null> {\n return apps.map((app) => {\n if (app === null) {\n return null;\n }\n\n const { applicationType, ...rest } = app;\n\n return {\n ...rest,\n applicationType: this.mapAppTypeDtoToAppType(applicationType),\n };\n });\n }\n\n getAppsByHash(\n hashes: string[],\n ): EitherAsync<HttpFetchApiError, Array<Application | null>> {\n return EitherAsync(() =>\n axios.post<Array<ApplicationDto | null>>(\n `${this.baseUrl}/v2/apps/hash`,\n hashes,\n ),\n )\n .map((res) => res.data)\n .map((apps) => this.mapApplicationDtoToApplication(apps))\n .mapLeft((error) => new HttpFetchApiError(error));\n }\n}\n", "import { SdkError } from \"@api/Error\";\n\nexport class HttpFetchApiError implements SdkError {\n _tag = \"FetchError\";\n originalError?: unknown;\n\n constructor(public readonly error: unknown) {\n this.originalError = error;\n }\n}\n", "import { inject, injectable } from \"inversify\";\nimport { EitherAsync } from \"purify-ts\";\n\nimport { ListAppsResponse } from \"@api/command/os/ListAppsCommand\";\nimport { type ManagerApiDataSource } from \"@internal/manager-api/data/ManagerApiDataSource\";\nimport { managerApiTypes } from \"@internal/manager-api/di/managerApiTypes\";\nimport { HttpFetchApiError } from \"@internal/manager-api/model/Errors\";\nimport { Application } from \"@internal/manager-api/model/ManagerApiType\";\n\nimport { ManagerApiService } from \"./ManagerApiService\";\n\n@injectable()\nexport class DefaultManagerApiService implements ManagerApiService {\n constructor(\n @inject(managerApiTypes.ManagerApiDataSource)\n private readonly dataSource: ManagerApiDataSource,\n ) {\n this.dataSource = dataSource;\n }\n\n getAppsByHash(apps: ListAppsResponse) {\n const hashes = apps.reduce<string[]>((acc, app) => {\n if (app.appFullHash) {\n return acc.concat(app.appFullHash);\n }\n\n return acc;\n }, []);\n\n return EitherAsync<HttpFetchApiError, Array<Application | null>>(\n async ({ fromPromise, throwE }) => {\n if (hashes.length === 0) {\n return [];\n }\n try {\n const response = await fromPromise(\n this.dataSource.getAppsByHash(hashes),\n );\n return response;\n } catch (error) {\n if (error instanceof HttpFetchApiError) {\n return throwE(error);\n }\n\n return throwE(new HttpFetchApiError(error));\n }\n },\n );\n }\n}\n", "export const DEFAULT_MANAGER_API_BASE_URL =\n \"https://manager.api.live.ledger.com/api\";\nexport const DEFAULT_MOCK_SERVER_BASE_URL = \"http://localhost:8080\";\n", "import { ContainerModule } from \"inversify\";\n\nimport { SendApduUseCase } from \"@internal/send/use-case/SendApduUseCase\";\nimport { StubUseCase } from \"@root/src/di.stub\";\n\nimport { sendTypes } from \"./sendTypes\";\n\ntype FactoryProps = {\n stub: boolean;\n};\n\nexport const sendModuleFactory = ({ stub = false }: FactoryProps) =>\n new ContainerModule(\n (\n bind,\n _unbind,\n _isBound,\n rebind,\n _unbindAsync,\n _onActivation,\n _onDeactivation,\n ) => {\n bind(sendTypes.SendApduUseCase).to(SendApduUseCase);\n if (stub) {\n rebind(sendTypes.SendApduUseCase).to(StubUseCase);\n }\n },\n );\n", "import { inject, injectable } from \"inversify\";\n\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { DeviceSessionId } from \"@api/types\";\nimport { deviceSessionTypes } from \"@internal/device-session/di/deviceSessionTypes\";\nimport type { DeviceSessionService } from \"@internal/device-session/service/DeviceSessionService\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport { LoggerPublisherService } from \"@internal/logger-publisher/service/LoggerPublisherService\";\n\n/**\n * The arguments for the SendApduUseCase.\n */\nexport type SendApduUseCaseArgs = {\n /**\n * Device session identifier from `DeviceSdk.connect`.\n */\n sessionId: DeviceSessionId;\n /**\n * Raw APDU to send to the device.\n */\n apdu: Uint8Array;\n};\n\n/**\n * Sends an APDU to a connected device.\n */\n@injectable()\nexport class SendApduUseCase {\n private readonly _sessionService: DeviceSessionService;\n private readonly _logger: LoggerPublisherService;\n\n constructor(\n @inject(deviceSessionTypes.DeviceSessionService)\n sessionService: DeviceSessionService,\n @inject(loggerTypes.LoggerPublisherServiceFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this._sessionService = sessionService;\n this._logger = loggerFactory(\"SendApduUseCase\");\n }\n\n async execute({\n sessionId,\n apdu,\n }: SendApduUseCaseArgs): Promise<ApduResponse> {\n const deviceSessionOrError =\n this._sessionService.getDeviceSessionById(sessionId);\n\n return deviceSessionOrError.caseOf({\n // Case device session found\n Right: async (deviceSession) => {\n const response = await deviceSession.sendApdu(apdu);\n return response.caseOf({\n // Case APDU sent and response received successfully\n Right: (data) => data,\n // Case error sending or receiving APDU\n Left: (error) => {\n this._logger.error(\"Error sending APDU\", {\n data: { sessionId, apdu, error },\n });\n throw error;\n },\n });\n },\n // Case device session not found\n Left: (error) => {\n this._logger.error(\"Error getting deviceSession\", {\n data: { error },\n });\n throw error;\n },\n });\n }\n}\n", "import { ContainerModule } from \"inversify\";\n\nimport { SdkConfig } from \"@api/SdkConfig\";\nimport { Transport } from \"@api/transport/model/Transport\";\nimport { BuiltinTransports } from \"@api/transport/model/TransportIdentifier\";\nimport { TransportDataSource } from \"@internal/transport/data/TransportDataSource\";\n\nimport { transportDiTypes } from \"./transportDiTypes\";\n\ntype FactoryProps = {\n stub: boolean;\n transports: BuiltinTransports[];\n customTransports: Transport[];\n config: SdkConfig;\n};\n\nexport const transportModuleFactory = ({\n stub = false,\n transports = [],\n customTransports = [],\n config,\n}: Partial<FactoryProps> = {}) =>\n new ContainerModule((bind, _unbind, _isBound, _rebind) => {\n for (const transport of transports) {\n bind(transportDiTypes.Transport)\n .to(TransportDataSource.get(transport))\n .inSingletonScope();\n }\n for (const transport of customTransports) {\n bind(transportDiTypes.Transport).toConstantValue(transport);\n }\n bind(transportDiTypes.SdkConfig).toConstantValue(config);\n if (stub) {\n // Add stubs here\n }\n });\n", "export type TransportIdentifier = string;\n\nexport enum BuiltinTransports {\n USB = \"USB\",\n MOCK_SERVER = \"MOCK_SERVER\",\n}\n", "import {\n CommandResponse,\n Device,\n MockClient,\n Session,\n} from \"@ledgerhq/device-sdk-transport-mock\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\nimport { from, mergeMap, Observable } from \"rxjs\";\n\nimport { DeviceId } from \"@api/device/DeviceModel\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { SdkError } from \"@api/Error\";\nimport type { SdkConfig } from \"@api/SdkConfig\";\nimport { Transport } from \"@api/transport/model/Transport\";\nimport {\n BuiltinTransports,\n TransportIdentifier,\n} from \"@api/transport/model/TransportIdentifier\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport { LoggerPublisherService } from \"@internal/logger-publisher/service/LoggerPublisherService\";\nimport { transportDiTypes } from \"@internal/transport/di/transportDiTypes\";\nimport { DisconnectHandler } from \"@internal/transport/model/DeviceConnection\";\nimport {\n ConnectError,\n DisconnectError,\n NoAccessibleDeviceError,\n OpeningConnectionError,\n} from \"@internal/transport/model/Errors\";\nimport { InternalConnectedDevice } from \"@internal/transport/model/InternalConnectedDevice\";\nimport { InternalDiscoveredDevice } from \"@internal/transport/model/InternalDiscoveredDevice\";\n\n@injectable()\nexport class MockTransport implements Transport {\n private logger: LoggerPublisherService;\n private mockClient: MockClient;\n private readonly identifier: TransportIdentifier =\n BuiltinTransports.MOCK_SERVER;\n\n constructor(\n @inject(loggerTypes.LoggerPublisherServiceFactory)\n loggerServiceFactory: (tag: string) => LoggerPublisherService,\n @inject(transportDiTypes.SdkConfig) config: SdkConfig,\n ) {\n this.logger = loggerServiceFactory(\"MockTransport\");\n this.mockClient = new MockClient(config.mockUrl);\n }\n\n isSupported(): boolean {\n return true;\n }\n\n getIdentifier(): TransportIdentifier {\n return this.identifier;\n }\n\n startDiscovering(): Observable<InternalDiscoveredDevice> {\n this.logger.debug(\"startDiscovering\");\n return from(\n this.mockClient.scan().then((devices: Device[]) => {\n return devices.map((device: Device) => {\n return {\n id: device.id,\n deviceModel: {\n id: device.device_type,\n productName: device.name,\n usbProductId: 0x10,\n legacyUsbProductId: 0x0001,\n bootloaderUsbProductId: 0x10,\n getBlockSize() {\n return 32;\n },\n usbOnly: true,\n memorySize: 320 * 1024,\n masks: [0x31100000],\n },\n transport: this.identifier,\n } as InternalDiscoveredDevice;\n });\n }),\n ).pipe(mergeMap((device) => device));\n }\n\n stopDiscovering(): void {\n //DO NOTHING HERE\n this.logger.debug(\"stopDiscovering\");\n }\n\n async connect(params: {\n deviceId: DeviceId;\n onDisconnect: DisconnectHandler;\n }): Promise<Either<ConnectError, InternalConnectedDevice>> {\n this.logger.debug(\"connect\");\n const sessionId: string = params.deviceId;\n try {\n const session: Session = await this.mockClient.connect(sessionId);\n this.logger.debug(\"connected device model id::\", {\n data: { session, sessionId },\n });\n const connectedDevice = {\n sendApdu: (apdu) => {\n return this.sendApdu(\n sessionId,\n params.deviceId,\n params.onDisconnect,\n apdu,\n );\n },\n deviceModel: {\n id: session.device.device_type,\n productName: session.device.name,\n usbProductId: 0x10,\n legacyUsbProductId: 0x0001,\n bootloaderUsbProductId: 0x10,\n getBlockSize() {\n return 32;\n },\n usbOnly: true,\n memorySize: 320 * 1024,\n masks: [0x31100000],\n },\n id: params.deviceId,\n type: session.device.connectivity_type,\n transport: this.identifier,\n } as InternalConnectedDevice;\n return Right(connectedDevice);\n } catch (error) {\n return Left(new OpeningConnectionError(error as Error));\n }\n }\n\n async disconnect(params: {\n connectedDevice: InternalConnectedDevice;\n }): Promise<Either<SdkError, void>> {\n this.logger.debug(\"disconnect\");\n const sessionId: string = params.connectedDevice.id;\n try {\n const success: boolean = await this.mockClient.disconnect(sessionId);\n if (!success) {\n return Left(\n new DisconnectError(new Error(`Failed to disconnect ${sessionId}`)),\n );\n }\n return Right(void 0);\n } catch (error) {\n return Left(new DisconnectError(error as Error));\n }\n }\n\n async sendApdu(\n sessionId: string,\n deviceId: DeviceId,\n onDisconnect: DisconnectHandler,\n apdu: Uint8Array,\n ): Promise<Either<SdkError, ApduResponse>> {\n this.logger.debug(\"send\");\n try {\n const response: CommandResponse = await this.mockClient.send(\n sessionId,\n apdu,\n );\n return Right({\n statusCode: this.mockClient.fromHexString(\n response.response.substring(\n response.response.length - 4,\n response.response.length,\n ),\n ),\n data: this.mockClient.fromHexString(\n response.response.substring(0, response.response.length - 4),\n ),\n } as ApduResponse);\n } catch (error) {\n onDisconnect(deviceId);\n return Left(new NoAccessibleDeviceError(error as Error));\n }\n }\n}\n", "import * as Sentry from \"@sentry/minimal\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, EitherAsync, Left, Maybe, Right } from \"purify-ts\";\nimport { from, Observable, switchMap } from \"rxjs\";\nimport { v4 as uuid } from \"uuid\";\n\nimport { DeviceId } from \"@api/device/DeviceModel\";\nimport { ConnectionType } from \"@api/discovery/ConnectionType\";\nimport { SdkError } from \"@api/Error\";\nimport { Transport } from \"@api/transport/model/Transport\";\nimport {\n BuiltinTransports,\n TransportIdentifier,\n} from \"@api/transport/model/TransportIdentifier\";\nimport type { DeviceModelDataSource } from \"@internal/device-model/data/DeviceModelDataSource\";\nimport { deviceModelTypes } from \"@internal/device-model/di/deviceModelTypes\";\nimport { InternalDeviceModel } from \"@internal/device-model/model/DeviceModel\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport type { LoggerPublisherService } from \"@internal/logger-publisher/service/LoggerPublisherService\";\nimport { DisconnectHandler } from \"@internal/transport/model/DeviceConnection\";\nimport {\n ConnectError,\n DeviceNotRecognizedError,\n DisconnectError,\n NoAccessibleDeviceError,\n OpeningConnectionError,\n type PromptDeviceAccessError,\n UnknownDeviceError,\n UsbHidTransportNotSupportedError,\n} from \"@internal/transport/model/Errors\";\nimport { InternalConnectedDevice } from \"@internal/transport/model/InternalConnectedDevice\";\nimport { InternalDiscoveredDevice } from \"@internal/transport/model/InternalDiscoveredDevice\";\nimport { LEDGER_VENDOR_ID } from \"@internal/transport/usb/data/UsbHidConfig\";\nimport { usbDiTypes } from \"@internal/transport/usb/di/usbDiTypes\";\nimport { UsbHidDeviceConnectionFactory } from \"@internal/transport/usb/service/UsbHidDeviceConnectionFactory\";\nimport { UsbHidDeviceConnection } from \"@internal/transport/usb/transport/UsbHidDeviceConnection\";\n\n// An attempt to manage the state of several devices with one transport. Not final.\ntype WebHidInternalDevice = {\n id: DeviceId;\n hidDevice: HIDDevice;\n discoveredDevice: InternalDiscoveredDevice;\n};\n\n@injectable()\nexport class WebUsbHidTransport implements Transport {\n /** Maps DeviceId to an internal object containing the associated DiscoveredDevice and HIDDevice */\n private _internalDevicesById: Map<DeviceId, WebHidInternalDevice> = new Map();\n /** Maps all *connected* HIDDevice to their UsbHidDeviceConnection */\n private _deviceConnectionsByHidDevice: Map<\n HIDDevice,\n UsbHidDeviceConnection\n > = new Map();\n /** Set of all the UsbHidDeviceConnection for which HIDDevice has been disconnected, so they are waiting for a reconnection */\n private _deviceConnectionsPendingReconnection: Set<UsbHidDeviceConnection> =\n new Set();\n /** AbortController to stop listening to HID connection events */\n private _connectionListenersAbortController: AbortController;\n private _logger: LoggerPublisherService;\n private _usbHidDeviceConnectionFactory: UsbHidDeviceConnectionFactory;\n private readonly connectionType: ConnectionType = \"USB\";\n private readonly identifier: TransportIdentifier = BuiltinTransports.USB;\n\n constructor(\n @inject(deviceModelTypes.DeviceModelDataSource)\n private deviceModelDataSource: DeviceModelDataSource,\n @inject(loggerTypes.LoggerPublisherServiceFactory)\n loggerServiceFactory: (tag: string) => LoggerPublisherService,\n @inject(usbDiTypes.UsbHidDeviceConnectionFactory)\n usbHidDeviceConnectionFactory: UsbHidDeviceConnectionFactory,\n ) {\n this._connectionListenersAbortController = new AbortController();\n this._logger = loggerServiceFactory(\"WebUsbHidTransport\");\n this._usbHidDeviceConnectionFactory = usbHidDeviceConnectionFactory;\n\n this.hidApi.map((hidApi) => {\n // FIXME: we should not override the global navigator.hid.onconnect and navigator.hid.ondisconnect but instead use addEventListener\n // The thing is if we want to do that we need a destroy() method on the SDK to remove the event listeners\n hidApi.ondisconnect = (event) =>\n this.handleDeviceDisconnectionEvent(event);\n hidApi.onconnect = (event) => this.handleDeviceConnectionEvent(event);\n });\n }\n\n /**\n * Get the WebHID API if supported or error\n * @returns `Either<UsbHidTransportNotSupportedError, HID>`\n */\n private get hidApi(): Either<UsbHidTransportNotSupportedError, HID> {\n if (this.isSupported()) {\n return Right(navigator.hid);\n }\n\n return Left(new UsbHidTransportNotSupportedError(\"WebHID not supported\"));\n }\n\n isSupported() {\n try {\n const result = !!navigator?.hid;\n this._logger.debug(`isSupported: ${result}`);\n return result;\n } catch (error) {\n this._logger.error(`isSupported: error`, { data: { error } });\n return false;\n }\n }\n\n getIdentifier(): TransportIdentifier {\n return this.identifier;\n }\n\n /**\n * Currently: as there is no way to uniquely identify a device, we might need to always update the internal mapping\n * of devices when prompting for device access.\n *\n * Also, we cannot trust hidApi.getDevices() as 2 devices of the same models (even on the same USB port) will be recognized\n * as the same devices.\n */\n // private async promptDeviceAccess(): Promise<Either<PromptDeviceAccessError, DiscoveredDeviceDto[]>> {\n private async promptDeviceAccess(): Promise<\n Either<PromptDeviceAccessError, HIDDevice[]>\n > {\n return EitherAsync.liftEither(this.hidApi)\n .map(async (hidApi) => {\n // `requestDevice` returns an array. but normally the user can select only one device at a time.\n let hidDevices: HIDDevice[] = [];\n\n try {\n hidDevices = await hidApi.requestDevice({\n filters: [{ vendorId: LEDGER_VENDOR_ID }],\n });\n } catch (error) {\n const deviceError = new NoAccessibleDeviceError(error);\n this._logger.error(`promptDeviceAccess: error requesting device`, {\n data: { error },\n });\n Sentry.captureException(deviceError);\n throw deviceError;\n }\n\n this._logger.debug(\n `promptDeviceAccess: hidDevices len ${hidDevices.length}`,\n );\n\n // Granted access to 0 device (by clicking on cancel for ex) results in an error\n if (hidDevices.length === 0) {\n this._logger.warn(\"No device was selected\");\n throw new NoAccessibleDeviceError(\"No selected device\");\n }\n\n const discoveredHidDevices: HIDDevice[] = [];\n\n for (const hidDevice of hidDevices) {\n discoveredHidDevices.push(hidDevice);\n\n this._logger.debug(`promptDeviceAccess: selected device`, {\n data: { hidDevice },\n });\n }\n\n return discoveredHidDevices;\n })\n .run();\n }\n\n /**\n * For WebHID, the client can only discover devices for which the user granted access to.\n *\n * The issue is that once a user grant access to a device of a model/productId A, any other model/productId A device will be accessible.\n * Even if plugged on another USB port.\n * So we cannot rely on the `hid.getDevices` to get the list of accessible devices, because it is not possible to differentiate\n * between 2 devices of the same model.\n * Neither on `connect` and `disconnect` events.\n * We can only rely on the `hid.requestDevice` because it is the user who will select the device that we can access.\n *\n * 2 possible implementations:\n * - only `hid.requestDevice` and return the one selected device\n * - `hid.getDevices` first to get the previously accessible devices, then a `hid.requestDevice` to get any new one\n *\n * [ASK] Should we also subscribe to hid events `connect` and `disconnect` ?\n *\n * [ASK] For the 2nd option: the DiscoveredDevice could have a `isSelected` property ?\n * So the consumer can directly select this device.\n */\n startDiscovering(): Observable<InternalDiscoveredDevice> {\n this._logger.debug(\"startDiscovering\");\n\n // Logs the connection and disconnection events\n this.startListeningToConnectionEvents();\n\n return from(this.promptDeviceAccess()).pipe(\n switchMap((either) => {\n return either.caseOf({\n Left: (error) => {\n this._logger.error(\"Error while getting accessible device\", {\n data: { error },\n });\n Sentry.captureException(error);\n throw error;\n },\n Right: (hidDevices) => {\n this._logger.info(`Got access to ${hidDevices.length} HID devices`);\n\n const discoveredDevices = hidDevices.map((hidDevice) => {\n const matchingInternalDevice = Array.from(\n this._internalDevicesById.values(),\n ).find(\n (internalDevice) => internalDevice.hidDevice === hidDevice,\n );\n\n if (matchingInternalDevice) {\n this._logger.debug(\n `Device already discovered ${matchingInternalDevice.id}`,\n );\n return matchingInternalDevice.discoveredDevice;\n }\n const maybeDeviceModel = this.getDeviceModel(hidDevice);\n return maybeDeviceModel.caseOf({\n Just: (deviceModel) => {\n const id = uuid();\n\n const discoveredDevice = {\n id,\n deviceModel,\n transport: this.identifier,\n };\n\n const internalDevice: WebHidInternalDevice = {\n id,\n hidDevice,\n discoveredDevice,\n };\n\n this._logger.debug(\n `Discovered device ${id} ${discoveredDevice.deviceModel.productName}`,\n );\n this._internalDevicesById.set(id, internalDevice);\n\n return discoveredDevice;\n },\n Nothing: () => {\n // [ASK] Or we just ignore the not recognized device ? And log them\n this._logger.warn(\n `Device not recognized: hidDevice.productId: 0x${hidDevice.productId.toString(16)}`,\n );\n throw new DeviceNotRecognizedError(\n `Device not recognized: hidDevice.productId: 0x${hidDevice.productId.toString(16)}`,\n );\n },\n });\n });\n return from(discoveredDevices);\n },\n });\n }),\n );\n }\n\n stopDiscovering(): void {\n this._logger.debug(\"stopDiscovering\");\n\n this.stopListeningToConnectionEvents();\n }\n\n /**\n * Logs `connect` and `disconnect` events for already accessible devices\n */\n private startListeningToConnectionEvents(): void {\n this._logger.debug(\"startListeningToConnectionEvents\");\n\n this.hidApi.map((hidApi) => {\n hidApi.addEventListener(\n \"connect\",\n (event) => {\n this._logger.debug(\"connection event\", { data: { event } });\n },\n { signal: this._connectionListenersAbortController.signal },\n );\n\n hidApi.addEventListener(\n \"disconnect\",\n (event) => {\n this._logger.debug(\"disconnect event\", { data: { event } });\n },\n { signal: this._connectionListenersAbortController.signal },\n );\n });\n }\n\n private stopListeningToConnectionEvents(): void {\n this._logger.debug(\"stopListeningToConnectionEvents\");\n this._connectionListenersAbortController.abort();\n }\n\n /**\n * Connect to a HID USB device and update the internal state of the associated device\n */\n async connect({\n deviceId,\n onDisconnect,\n }: {\n deviceId: DeviceId;\n onDisconnect: DisconnectHandler;\n }): Promise<Either<ConnectError, InternalConnectedDevice>> {\n this._logger.debug(\"connect\", { data: { deviceId } });\n\n const internalDevice = this._internalDevicesById.get(deviceId);\n\n if (!internalDevice) {\n this._logger.error(`Unknown device ${deviceId}`);\n return Left(new UnknownDeviceError(`Unknown device ${deviceId}`));\n }\n\n try {\n await internalDevice.hidDevice.open();\n } catch (error) {\n if (error instanceof DOMException && error.name === \"InvalidStateError\") {\n this._logger.debug(`Device ${deviceId} is already opened`);\n } else {\n const connectionError = new OpeningConnectionError(error);\n this._logger.debug(`Error while opening device: ${deviceId}`, {\n data: { error },\n });\n Sentry.captureException(connectionError);\n return Left(connectionError);\n }\n }\n\n const {\n discoveredDevice: { deviceModel },\n } = internalDevice;\n\n const deviceConnection = this._usbHidDeviceConnectionFactory.create(\n internalDevice.hidDevice,\n {\n onConnectionTerminated: () => {\n onDisconnect(deviceId);\n this._deviceConnectionsPendingReconnection.delete(deviceConnection);\n this.deleteInternalDevice({ internalDevice });\n },\n deviceId,\n },\n );\n\n this._deviceConnectionsByHidDevice.set(\n internalDevice.hidDevice,\n deviceConnection,\n );\n const connectedDevice = new InternalConnectedDevice({\n sendApdu: (apdu, triggersDisconnection) =>\n deviceConnection.sendApdu(apdu, triggersDisconnection),\n deviceModel,\n id: deviceId,\n type: this.connectionType,\n transport: this.identifier,\n });\n return Right(connectedDevice);\n }\n\n private getDeviceModel(hidDevice: HIDDevice): Maybe<InternalDeviceModel> {\n const { productId } = hidDevice;\n const matchingModel = this.deviceModelDataSource.getAllDeviceModels().find(\n (deviceModel) =>\n // outside of bootloader mode, the value that we need to identify a device model is the first byte of the actual hidDevice.productId\n deviceModel.usbProductId === productId >> 8 ||\n deviceModel.bootloaderUsbProductId === productId,\n );\n return matchingModel ? Maybe.of(matchingModel) : Maybe.zero();\n }\n\n private getHidUsbProductId(hidDevice: HIDDevice): number {\n return this.getDeviceModel(hidDevice).caseOf({\n Just: (deviceModel) => deviceModel.usbProductId,\n Nothing: () => hidDevice.productId >> 8,\n });\n }\n\n private async deleteInternalDevice(params: {\n internalDevice: WebHidInternalDevice;\n }): Promise<Either<SdkError, void>> {\n this._logger.debug(\"_internalDisconnect\", {\n data: { connectedDevice: params },\n });\n const { internalDevice } = params;\n\n try {\n this._internalDevicesById.delete(internalDevice.id);\n this._deviceConnectionsByHidDevice.delete(internalDevice.hidDevice);\n await internalDevice.hidDevice.close();\n return Right(void 0);\n } catch (error) {\n return Left(new DisconnectError(error));\n }\n }\n\n /**\n * Disconnect from a HID USB device\n */\n async disconnect(params: {\n connectedDevice: InternalConnectedDevice;\n }): Promise<Either<SdkError, void>> {\n this._logger.debug(\"disconnect\", { data: { connectedDevice: params } });\n const internalDevice = this._internalDevicesById.get(\n params.connectedDevice.id,\n );\n\n if (!internalDevice) {\n this._logger.error(`Unknown device ${params.connectedDevice.id}`);\n return Left(\n new UnknownDeviceError(`Unknown device ${params.connectedDevice.id}`),\n );\n }\n\n const deviceConnection = this._deviceConnectionsByHidDevice.get(\n internalDevice.hidDevice,\n );\n\n deviceConnection?.disconnect();\n\n return this.deleteInternalDevice({\n internalDevice,\n });\n }\n\n /**\n * Type guard to check if the event is a HID connection event\n * @param event\n * @private\n */\n private isHIDConnectionEvent(event: Event): event is HIDConnectionEvent {\n return (\n \"device\" in event &&\n typeof event.device === \"object\" &&\n event.device !== null &&\n \"productId\" in event.device &&\n typeof event.device.productId === \"number\"\n );\n }\n\n /**\n * Handle the disconnection event of a HID device\n * @param event\n */\n private async handleDeviceDisconnectionEvent(event: Event) {\n if (!this.isHIDConnectionEvent(event)) {\n this._logger.error(\"Invalid event\", { data: { event } });\n return;\n }\n\n this._logger.info(\"[handleDeviceDisconnectionEvent] Device disconnected\", {\n data: { event },\n });\n\n try {\n await event.device.close();\n } catch (error) {\n this._logger.error(\"Error while closing device \", {\n data: { event, error },\n });\n }\n\n const matchingDeviceConnection = this._deviceConnectionsByHidDevice.get(\n event.device,\n );\n\n if (matchingDeviceConnection) {\n matchingDeviceConnection.lostConnection();\n this._deviceConnectionsPendingReconnection.add(matchingDeviceConnection);\n this._deviceConnectionsByHidDevice.delete(event.device);\n }\n }\n\n /**\n * Handle the connection event of a HID device\n * @param event\n */\n private handleDeviceConnectionEvent(event: Event) {\n if (!this.isHIDConnectionEvent(event)) {\n this._logger.error(\"Invalid event\", { data: { event } });\n return;\n }\n\n this._logger.info(\"[handleDeviceConnectionEvent] Device connected\", {\n data: { event },\n });\n\n const matchingDeviceConnection = Array.from(\n this._deviceConnectionsPendingReconnection,\n ).find(\n (deviceConnection) =>\n this.getHidUsbProductId(deviceConnection.device) ===\n this.getHidUsbProductId(event.device),\n );\n if (!matchingDeviceConnection) return;\n\n const matchingInternalDevice = this._internalDevicesById.get(\n matchingDeviceConnection.deviceId,\n );\n\n if (!matchingInternalDevice) {\n this._logger.error(\"Internal device not found\", {\n data: { matchingDeviceConnection },\n });\n return;\n }\n this._deviceConnectionsPendingReconnection.delete(matchingDeviceConnection);\n this._deviceConnectionsByHidDevice.set(\n event.device,\n matchingDeviceConnection,\n );\n\n this._internalDevicesById.set(matchingDeviceConnection.deviceId, {\n ...matchingInternalDevice,\n hidDevice: event.device,\n });\n\n try {\n matchingDeviceConnection.reconnectHidDevice(event.device);\n } catch (error) {\n this._logger.error(\"Error while reconnecting to device\", {\n data: { event, error },\n });\n matchingDeviceConnection.disconnect();\n }\n }\n}\n", "import { DeviceId } from \"@api/device/DeviceModel\";\nimport { ConnectionType } from \"@api/discovery/ConnectionType\";\nimport { TransportIdentifier } from \"@api/transport/model/TransportIdentifier\";\nimport { InternalDeviceModel } from \"@internal/device-model/model/DeviceModel\";\nimport { SendApduFnType } from \"@internal/transport/model/DeviceConnection\";\n\n/**\n * The internal connected device.\n */\nexport type ConnectedDeviceConstructorArgs = {\n id: DeviceId;\n deviceModel: InternalDeviceModel;\n type: ConnectionType;\n transport: TransportIdentifier;\n sendApdu: SendApduFnType;\n};\n\nexport class InternalConnectedDevice {\n public readonly id: DeviceId;\n public readonly deviceModel: InternalDeviceModel;\n public readonly sendApdu: SendApduFnType;\n public readonly type: ConnectionType;\n public readonly transport: TransportIdentifier;\n\n constructor({\n id,\n deviceModel,\n type,\n transport,\n sendApdu,\n }: ConnectedDeviceConstructorArgs) {\n this.id = id;\n this.deviceModel = deviceModel;\n this.sendApdu = sendApdu;\n this.type = type;\n this.transport = transport;\n }\n}\n", "// [SHOULD] Move it to device-model module\nexport const LEDGER_VENDOR_ID = 0x2c97;\nexport const FRAME_SIZE = 64;\nexport const RECONNECT_DEVICE_TIMEOUT = 6000; // in some cases, when opening/closing an app, it takes up to 6s between the HID \"disconnect\" and \"connect\" events\n", "export const usbDiTypes = {\n UsbHidDeviceConnectionFactory: Symbol.for(\"UsbHidDeviceConnectionFactory\"),\n};\n", "import { interfaces } from \"inversify\";\n\nimport { Transport } from \"@api/transport/model/Transport\";\nimport { BuiltinTransports } from \"@api/transport/model/TransportIdentifier\";\nimport { MockTransport } from \"@internal/transport/mockserver/MockserverTransport\";\nimport { WebUsbHidTransport } from \"@internal/transport/usb/transport/WebUsbHidTransport\";\n\nexport class TransportDataSource {\n private static transports: {\n [transport in BuiltinTransports]: interfaces.Newable<Transport>;\n } = {\n [BuiltinTransports.USB]: WebUsbHidTransport,\n [BuiltinTransports.MOCK_SERVER]: MockTransport,\n };\n\n static get(transport: BuiltinTransports): interfaces.Newable<Transport> {\n return TransportDataSource.transports[transport];\n }\n}\n", "import { ContainerModule } from \"inversify\";\n\nimport { UsbHidDeviceConnectionFactory } from \"@internal/transport/usb/service/UsbHidDeviceConnectionFactory\";\n\nimport { usbDiTypes } from \"./usbDiTypes\";\n\ntype FactoryProps = {\n stub: boolean;\n};\n\nexport const usbModuleFactory = ({\n stub = false,\n}: Partial<FactoryProps> = {}) =>\n new ContainerModule((bind, _unbind, _isBound, _rebind) => {\n // UsbHidDeviceConnectionFactory\n bind(usbDiTypes.UsbHidDeviceConnectionFactory).to(\n UsbHidDeviceConnectionFactory,\n );\n\n if (stub) {\n // Add stubs here\n }\n });\n", "import { inject, injectable } from \"inversify\";\nimport { Maybe } from \"purify-ts\";\n\nimport { DeviceId } from \"@api/types\";\nimport { CHANNEL_LENGTH } from \"@internal/device-session/data/FramerConst\";\nimport { deviceSessionTypes } from \"@internal/device-session/di/deviceSessionTypes\";\nimport { ApduReceiverService } from \"@internal/device-session/service/ApduReceiverService\";\nimport { ApduSenderService } from \"@internal/device-session/service/ApduSenderService\";\nimport { DefaultApduReceiverConstructorArgs } from \"@internal/device-session/service/DefaultApduReceiverService\";\nimport { DefaultApduSenderServiceConstructorArgs } from \"@internal/device-session/service/DefaultApduSenderService\";\nimport { FramerUtils } from \"@internal/device-session/utils/FramerUtils\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport { LoggerPublisherService } from \"@internal/logger-publisher/service/LoggerPublisherService\";\nimport { FRAME_SIZE } from \"@internal/transport/usb/data/UsbHidConfig\";\nimport { UsbHidDeviceConnection } from \"@internal/transport/usb/transport/UsbHidDeviceConnection\";\n\n@injectable()\nexport class UsbHidDeviceConnectionFactory {\n randomChannel = Math.floor(Math.random() * 0xffff);\n\n constructor(\n @inject(deviceSessionTypes.ApduSenderServiceFactory)\n private readonly apduSenderFactory: (\n args: DefaultApduSenderServiceConstructorArgs,\n ) => ApduSenderService,\n @inject(deviceSessionTypes.ApduReceiverServiceFactory)\n private readonly apduReceiverFactory: (\n args: DefaultApduReceiverConstructorArgs,\n ) => ApduReceiverService,\n @inject(loggerTypes.LoggerPublisherServiceFactory)\n private readonly loggerFactory: (name: string) => LoggerPublisherService,\n ) {}\n\n public create(\n device: HIDDevice,\n params: { onConnectionTerminated: () => void; deviceId: DeviceId },\n channel = Maybe.of(\n FramerUtils.numberToByteArray(this.randomChannel, CHANNEL_LENGTH),\n ),\n ): UsbHidDeviceConnection {\n return new UsbHidDeviceConnection(\n {\n device,\n deviceId: params.deviceId,\n apduSender: this.apduSenderFactory({\n frameSize: FRAME_SIZE,\n channel,\n padding: true,\n }),\n apduReceiver: this.apduReceiverFactory({ channel }),\n onConnectionTerminated: params.onConnectionTerminated,\n },\n this.loggerFactory,\n );\n }\n}\n", "import { inject } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\nimport { Subject } from \"rxjs\";\n\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { SdkError } from \"@api/Error\";\nimport { DeviceId } from \"@api/types\";\nimport { ApduReceiverService } from \"@internal/device-session/service/ApduReceiverService\";\nimport { ApduSenderService } from \"@internal/device-session/service/ApduSenderService\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport type { LoggerPublisherService } from \"@internal/logger-publisher/service/LoggerPublisherService\";\nimport { DeviceConnection } from \"@internal/transport/model/DeviceConnection\";\nimport { ReconnectionFailedError } from \"@internal/transport/model/Errors\";\nimport { HidSendReportError } from \"@internal/transport/model/Errors\";\nimport { RECONNECT_DEVICE_TIMEOUT } from \"@internal/transport/usb/data/UsbHidConfig\";\n\ntype UsbHidDeviceConnectionConstructorArgs = {\n device: HIDDevice;\n deviceId: DeviceId;\n apduSender: ApduSenderService;\n apduReceiver: ApduReceiverService;\n onConnectionTerminated: () => void;\n};\n\n/**\n * Class to manage the connection with a USB HID device.\n * It sends APDU commands to the device and receives the responses.\n * It handles temporary disconnections and reconnections.\n */\nexport class UsbHidDeviceConnection implements DeviceConnection {\n private _device: HIDDevice;\n private _deviceId: DeviceId;\n private readonly _apduSender: ApduSenderService;\n private readonly _apduReceiver: ApduReceiverService;\n private _sendApduSubject: Subject<ApduResponse> = new Subject();\n private readonly _logger: LoggerPublisherService;\n\n /** Callback to notify the connection termination */\n private _onConnectionTerminated: () => void;\n /** Subject to notify the reconnection status */\n private reconnectionSubject: Subject<\"success\" | SdkError> = new Subject();\n /** Flag to indicate if the connection is waiting for a reconnection */\n private waitingForReconnection = false;\n /** Timeout to wait for the device to reconnect */\n private lostConnectionTimeout: NodeJS.Timeout | null = null;\n /** Flag to indicate if the connection is terminated */\n private terminated = false;\n\n constructor(\n {\n device,\n deviceId,\n apduSender,\n apduReceiver,\n onConnectionTerminated,\n }: UsbHidDeviceConnectionConstructorArgs,\n @inject(loggerTypes.LoggerPublisherServiceFactory)\n loggerServiceFactory: (tag: string) => LoggerPublisherService,\n ) {\n this._apduSender = apduSender;\n this._apduReceiver = apduReceiver;\n this._onConnectionTerminated = onConnectionTerminated;\n this._logger = loggerServiceFactory(\"UsbHidDeviceConnection\");\n this._device = device;\n this._device.oninputreport = (event) => this.receiveHidInputReport(event);\n this._deviceId = deviceId;\n this._logger.info(\"\uD83D\uDD0C Connected to device\");\n }\n\n public get device() {\n return this._device;\n }\n\n public get deviceId() {\n return this._deviceId;\n }\n\n async sendApdu(\n apdu: Uint8Array,\n triggersDisconnection?: boolean,\n ): Promise<Either<SdkError, ApduResponse>> {\n this._sendApduSubject = new Subject();\n\n this._logger.debug(\"Sending APDU\", {\n data: { apdu },\n tag: \"apdu-sender\",\n });\n\n const resultPromise = new Promise<Either<SdkError, ApduResponse>>(\n (resolve) => {\n this._sendApduSubject.subscribe({\n next: async (r) => {\n if (triggersDisconnection && CommandUtils.isSuccessResponse(r)) {\n // Anticipate the disconnection and wait for the reconnection before resolving\n const reconnectionRes = await this.waitForReconnection();\n reconnectionRes.caseOf({\n Left: (err) => resolve(Left(err)),\n Right: () => resolve(Right(r)),\n });\n } else {\n resolve(Right(r));\n }\n },\n error: (err) => {\n resolve(Left(err));\n },\n });\n },\n );\n\n if (this.waitingForReconnection || !this.device.opened) {\n const reconnectionRes = await this.waitForReconnection();\n if (reconnectionRes.isLeft()) {\n return reconnectionRes;\n }\n }\n\n const frames = this._apduSender.getFrames(apdu);\n for (const frame of frames) {\n this._logger.debug(\"Sending Frame\", {\n data: { frame: frame.getRawData() },\n });\n try {\n await this._device.sendReport(0, frame.getRawData());\n } catch (error) {\n this._logger.error(\"Error sending frame\", { data: { error } });\n return Promise.resolve(Left(new HidSendReportError(error)));\n }\n }\n\n return resultPromise;\n }\n\n private receiveHidInputReport(event: HIDInputReportEvent) {\n const data = new Uint8Array(event.data.buffer);\n this._logger.debug(\"Received Frame\", {\n data: { frame: data },\n tag: \"apdu-receiver\",\n });\n const response = this._apduReceiver.handleFrame(data);\n response.caseOf({\n Right: (maybeApduResponse) => {\n maybeApduResponse.map((apduResponse) => {\n this._logger.debug(\"Received APDU Response\", {\n data: { response: apduResponse },\n });\n this._sendApduSubject.next(apduResponse);\n this._sendApduSubject.complete();\n });\n },\n Left: (err) => {\n this._sendApduSubject.error(err);\n },\n });\n }\n\n private waitForReconnection(): Promise<Either<SdkError, void>> {\n if (this.terminated)\n return Promise.resolve(Left(new ReconnectionFailedError()));\n return new Promise<Either<SdkError, void>>((resolve) => {\n const sub = this.reconnectionSubject.subscribe({\n next: (res) => {\n if (res === \"success\") {\n resolve(Right(undefined));\n } else {\n resolve(Left(res));\n }\n sub.unsubscribe();\n },\n });\n });\n }\n\n /**\n * Method called when the HIDDevice gets disconnected.\n * It starts a timeout to wait for the device to reconnect.\n * */\n public lostConnection() {\n this._logger.info(\"\u23F1\uFE0F Lost connection, starting timer\");\n this.waitingForReconnection = true;\n this.lostConnectionTimeout = setTimeout(() => {\n this._logger.info(\"\u274C Disconnection timeout, terminating connection\");\n this.disconnect();\n }, RECONNECT_DEVICE_TIMEOUT);\n }\n\n /** Reconnect the device after a disconnection */\n public async reconnectHidDevice(device: HIDDevice) {\n this._device = device;\n this._device.oninputreport = (event) => this.receiveHidInputReport(event);\n\n if (this.lostConnectionTimeout) {\n this._logger.info(\"\u23F1\uFE0F\uD83D\uDD0C Device reconnected\");\n clearTimeout(this.lostConnectionTimeout);\n }\n await device.open();\n this.waitingForReconnection = false;\n this.reconnectionSubject.next(\"success\");\n }\n\n public disconnect() {\n this._logger.info(\"\uD83D\uDD1A Disconnect\");\n if (this.lostConnectionTimeout) clearTimeout(this.lostConnectionTimeout);\n this.terminated = true;\n this._onConnectionTerminated();\n this.reconnectionSubject.next(new ReconnectionFailedError());\n }\n}\n", "import { Container } from \"inversify\";\nimport { Observable } from \"rxjs\";\n\nimport { commandTypes } from \"@api/command/di/commandTypes\";\nimport { CommandResult } from \"@api/command/model/CommandResult\";\nimport {\n SendCommandUseCase,\n SendCommandUseCaseArgs,\n} from \"@api/command/use-case/SendCommandUseCase\";\nimport {\n ExecuteDeviceActionUseCase,\n ExecuteDeviceActionUseCaseArgs,\n} from \"@api/device-action/use-case/ExecuteDeviceActionUseCase\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { DeviceSessionState } from \"@api/device-session/DeviceSessionState\";\nimport { DeviceSessionId } from \"@api/device-session/types\";\nimport { ConnectedDevice } from \"@api/transport/model/ConnectedDevice\";\nimport {\n ConnectUseCaseArgs,\n DisconnectUseCaseArgs,\n DiscoveredDevice,\n GetConnectedDeviceUseCaseArgs,\n SendApduUseCaseArgs,\n StartDiscoveringUseCaseArgs,\n} from \"@api/types\";\nimport { configTypes } from \"@internal/config/di/configTypes\";\nimport { GetSdkVersionUseCase } from \"@internal/config/use-case/GetSdkVersionUseCase\";\nimport { deviceSessionTypes } from \"@internal/device-session/di/deviceSessionTypes\";\nimport { DeviceSession } from \"@internal/device-session/model/DeviceSession\";\nimport { CloseSessionsUseCase } from \"@internal/device-session/use-case/CloseSessionsUseCase\";\nimport { GetDeviceSessionStateUseCase } from \"@internal/device-session/use-case/GetDeviceSessionStateUseCase\";\nimport { ListDeviceSessionsUseCase } from \"@internal/device-session/use-case/ListDeviceSessionsUseCase\";\nimport { discoveryTypes } from \"@internal/discovery/di/discoveryTypes\";\nimport { ConnectUseCase } from \"@internal/discovery/use-case/ConnectUseCase\";\nimport { DisconnectUseCase } from \"@internal/discovery/use-case/DisconnectUseCase\";\nimport { GetConnectedDeviceUseCase } from \"@internal/discovery/use-case/GetConnectedDeviceUseCase\";\nimport type { StartDiscoveringUseCase } from \"@internal/discovery/use-case/StartDiscoveringUseCase\";\nimport type { StopDiscoveringUseCase } from \"@internal/discovery/use-case/StopDiscoveringUseCase\";\nimport { sendTypes } from \"@internal/send/di/sendTypes\";\nimport { SendApduUseCase } from \"@internal/send/use-case/SendApduUseCase\";\nimport { makeContainer, MakeContainerProps } from \"@root/src/di\";\n\nimport {\n DeviceActionIntermediateValue,\n ExecuteDeviceActionReturnType,\n} from \"./device-action/DeviceAction\";\nimport { deviceActionTypes } from \"./device-action/di/deviceActionTypes\";\nimport { SdkError } from \"./Error\";\n\n/**\n * The main class to interact with the SDK.\n *\n * NB: do not instantiate this class directly, instead, use `DeviceSdkBuilder`.\n */\nexport class DeviceSdk {\n readonly container: Container;\n /** @internal */\n constructor({\n stub,\n transports,\n customTransports,\n loggers,\n config,\n }: Partial<MakeContainerProps> = {}) {\n // NOTE: MakeContainerProps might not be the exact type here\n // For the init of the project this is sufficient, but we might need to\n // update the constructor arguments as we go (we might have more than just the container config)\n this.container = makeContainer({\n stub,\n transports,\n customTransports,\n loggers,\n config,\n });\n }\n\n /**\n * Returns a promise resolving to the version of the SDK.\n */\n getVersion(): Promise<string> {\n return this.container\n .get<GetSdkVersionUseCase>(configTypes.GetSdkVersionUseCase)\n .getSdkVersion();\n }\n\n /**\n * Starts discovering devices connected.\n *\n * For the WeHID implementation, this use-case needs to be called as a result\n * of an user interaction (button \"click\" event for ex).\n *\n * @param {StartDiscoveringUseCaseArgs} args - The transport to use for discover, or undefined to discover from all transports.\n * @returns {Observable<DiscoveredDevice>} An observable of discovered devices.\n */\n startDiscovering(\n args: StartDiscoveringUseCaseArgs,\n ): Observable<DiscoveredDevice> {\n return this.container\n .get<StartDiscoveringUseCase>(discoveryTypes.StartDiscoveringUseCase)\n .execute(args);\n }\n\n /**\n * Stops discovering devices connected.\n */\n stopDiscovering() {\n return this.container\n .get<StopDiscoveringUseCase>(discoveryTypes.StopDiscoveringUseCase)\n .execute();\n }\n\n /**\n * Connects to a device previously discovered with `DeviceSdk.startDiscovering`.\n * Creates a new device session which:\n * - Represents the connection to the device.\n * - Is terminated upon disconnection of the device.\n * - Exposes the device state through an observable (see `DeviceSdk.getDeviceSessionState`)\n * - Should be used for all subsequent communication with the device.\n *\n * @param {ConnectUseCaseArgs} args - The device ID (obtained in discovery) to connect to.\n * @returns The session ID to use for further communication with the device.\n */\n connect(args: ConnectUseCaseArgs): Promise<DeviceSessionId> {\n return this.container\n .get<ConnectUseCase>(discoveryTypes.ConnectUseCase)\n .execute(args);\n }\n\n /**\n * Disconnects to a discovered device.\n *\n * @param {DisconnectUseCaseArgs} args - The session ID to disconnect.\n */\n disconnect(args: DisconnectUseCaseArgs): Promise<void> {\n return this.container\n .get<DisconnectUseCase>(discoveryTypes.DisconnectUseCase)\n .execute(args);\n }\n\n /**\n * Sends an APDU command to a device through a device session.\n *\n * @param {SendApduUseCaseArgs} args - The device session ID and APDU command to send.\n */\n sendApdu(args: SendApduUseCaseArgs): Promise<ApduResponse> {\n return this.container\n .get<SendApduUseCase>(sendTypes.SendApduUseCase)\n .execute(args);\n }\n\n /**\n * Sends a command to a device through a device session.\n *\n * @param {SendCommandUseCaseArgs<Response, Args, ErrorCodes>} args - The device session ID, command, command error codes and command parameters to send.\n * @returns A promise resolving with the response from the command.\n */\n sendCommand<Response, Args, ErrorCodes>(\n args: SendCommandUseCaseArgs<Response, Args, ErrorCodes>,\n ): Promise<CommandResult<Response, ErrorCodes>> {\n return this.container\n .get<SendCommandUseCase>(commandTypes.SendCommandUseCase)\n .execute(args);\n }\n\n executeDeviceAction<\n Output,\n Input,\n Error extends SdkError,\n IntermediateValue extends DeviceActionIntermediateValue,\n >(\n args: ExecuteDeviceActionUseCaseArgs<\n Output,\n Input,\n Error,\n IntermediateValue\n >,\n ): ExecuteDeviceActionReturnType<Output, Error, IntermediateValue> {\n return this.container\n .get<ExecuteDeviceActionUseCase>(\n deviceActionTypes.ExecuteDeviceActionUseCase,\n )\n .execute(args);\n }\n\n /**\n * Gets the connected from its device session ID.\n *\n * @param {GetConnectedDeviceUseCaseArgs} args - The device session ID.\n * @returns {ConnectedDevice} The connected device.\n */\n getConnectedDevice(args: GetConnectedDeviceUseCaseArgs): ConnectedDevice {\n return this.container\n .get<GetConnectedDeviceUseCase>(discoveryTypes.GetConnectedDeviceUseCase)\n .execute(args);\n }\n\n /**\n * Gets the device state of a session.\n *\n * @param {{DeviceSessionId}} args - The device session ID.\n * @returns {Observable<DeviceSessionState>} An observable of the session device state.\n */\n getDeviceSessionState(args: {\n sessionId: DeviceSessionId;\n }): Observable<DeviceSessionState> {\n return this.container\n .get<GetDeviceSessionStateUseCase>(\n deviceSessionTypes.GetDeviceSessionStateUseCase,\n )\n .execute(args);\n }\n\n close() {\n return this.container\n .get<CloseSessionsUseCase>(deviceSessionTypes.CloseSessionsUseCase)\n .execute();\n }\n\n /**\n * Lists all device sessions.\n *\n * @returns {DeviceSession[]} The list of device sessions.\n */\n listDeviceSessions(): DeviceSession[] {\n return this.container\n .get<ListDeviceSessionsUseCase>(\n deviceSessionTypes.ListDeviceSessionsUseCase,\n )\n .execute();\n }\n}\n", "import {\n DEFAULT_MANAGER_API_BASE_URL,\n DEFAULT_MOCK_SERVER_BASE_URL,\n} from \"@internal/manager-api/model/Const\";\n\nimport { LoggerSubscriberService } from \"./logger-subscriber/service/LoggerSubscriberService\";\nimport { Transport } from \"./transport/model/Transport\";\nimport { BuiltinTransports } from \"./transport/model/TransportIdentifier\";\nimport { DeviceSdk } from \"./DeviceSdk\";\nimport { SdkConfig } from \"./SdkConfig\";\n\n/**\n * Builder for the `DeviceSdk` class.\n *\n * @example\n * ```\n * const sdk = new LedgerDeviceSdkBuilder()\n * .setStub(false)\n * .addTransport(BuiltinTransports.USB)\n * .addCustomTransport(new MyTransport())\n * .addLogger(myLogger)\n * .build();\n * ```\n */\nexport class LedgerDeviceSdkBuilder {\n private stub = false;\n private readonly loggers: LoggerSubscriberService[] = [];\n private readonly transports: BuiltinTransports[] = [];\n private readonly customTransports: Transport[] = [];\n private config: SdkConfig = {\n managerApiUrl: DEFAULT_MANAGER_API_BASE_URL,\n mockUrl: DEFAULT_MOCK_SERVER_BASE_URL,\n };\n\n build(): DeviceSdk {\n return new DeviceSdk({\n stub: this.stub,\n transports: this.transports,\n customTransports: this.customTransports,\n loggers: this.loggers,\n config: this.config,\n });\n }\n\n setStub(stubbed: boolean): LedgerDeviceSdkBuilder {\n this.stub = stubbed;\n return this;\n }\n\n addTransport(transport: BuiltinTransports): LedgerDeviceSdkBuilder {\n this.transports.push(transport);\n return this;\n }\n\n addCustomTransport(transport: Transport): LedgerDeviceSdkBuilder {\n this.customTransports.push(transport);\n return this;\n }\n\n /**\n * Add a logger to the SDK that will receive its logs\n */\n addLogger(logger: LoggerSubscriberService): LedgerDeviceSdkBuilder {\n this.loggers.push(logger);\n return this;\n }\n\n addConfig(config: Partial<SdkConfig>): LedgerDeviceSdkBuilder {\n this.config = {\n ...this.config,\n ...config,\n };\n return this;\n }\n}\n", "import { LogLevel } from \"@api/logger-subscriber/model/LogLevel\";\nimport { LogSubscriberOptions } from \"@api/logger-subscriber/model/LogSubscriberOptions\";\nimport { LoggerSubscriberService } from \"@api/logger-subscriber/service/LoggerSubscriberService\";\n\nexport class ConsoleLogger implements LoggerSubscriberService {\n private readonly maxLevel: LogLevel;\n\n constructor(level: LogLevel = LogLevel.Debug) {\n this.maxLevel = level;\n }\n\n log(\n level: LogLevel | null,\n message: string,\n options: LogSubscriberOptions,\n ): void {\n const tag = `[${options.tag}]`;\n\n switch (level) {\n case LogLevel.Info: {\n if (this.maxLevel >= LogLevel.Info) {\n console.info(tag, message, options.data);\n }\n break;\n }\n case LogLevel.Warning: {\n if (this.maxLevel >= LogLevel.Warning) {\n console.warn(tag, message, options.data);\n }\n break;\n }\n case LogLevel.Debug: {\n if (this.maxLevel >= LogLevel.Debug) {\n console.debug(tag, message, options.data);\n }\n break;\n }\n case LogLevel.Error: {\n if (this.maxLevel >= LogLevel.Error) {\n console.error(tag, message, options.data);\n }\n break;\n }\n case LogLevel.Fatal: {\n if (this.maxLevel >= LogLevel.Fatal) {\n console.error(tag, message, options.data);\n }\n break;\n }\n default:\n console.log(tag, message, options.data);\n }\n }\n}\n", "import { LogLevel } from \"@api/logger-subscriber/model/LogLevel\";\nimport { LogSubscriberOptions } from \"@api/types\";\nimport { DeviceSession } from \"@internal/device-session/model/DeviceSession\";\n\nimport { LoggerSubscriberService } from \"./LoggerSubscriberService\";\n\n/**\n * This function is used to format the logs to JSON format,\n * remove circular dependencies and do some extra formatting.\n * */\nexport function getJSONStringifyReplacer(): (\n key: string,\n value: unknown,\n) => unknown {\n const ancestors: unknown[] = [];\n return function (_: string, value: unknown): unknown {\n // format Uint8Array values to more readable format\n if (value instanceof Uint8Array) {\n const bytesHex = Array.from(value).map((x) =>\n x.toString(16).padStart(2, \"0\"),\n );\n return {\n hex: \"0x\" + bytesHex.join(\"\"),\n readableHex: bytesHex.join(\" \"),\n value: value.toString(),\n };\n }\n\n // format DeviceSession values to avoid huge object in logs\n if (value instanceof DeviceSession) {\n const {\n connectedDevice: { deviceModel, type, id },\n } = value;\n return {\n id: value.id,\n connectedDevice: {\n deviceModel,\n type,\n id,\n },\n };\n }\n\n // format circular references to \"[Circular]\"\n // Taken from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value#circular_references\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n // `this` is the object that value is contained in,\n // i.e., its direct parent.\n // @ts-expect-error cf. comment above\n while (ancestors.length > 0 && ancestors.at(-1) !== (this as unknown)) {\n ancestors.pop();\n }\n if (ancestors.includes(value)) {\n return \"[Circular]\";\n }\n ancestors.push(value);\n return value;\n };\n}\n\nexport class WebLogsExporterLogger implements LoggerSubscriberService {\n private logs: Array<\n [level: LogLevel, message: string, options: LogSubscriberOptions]\n > = [];\n\n log(level: LogLevel, message: string, options: LogSubscriberOptions): void {\n this.logs.push([level, message, options]);\n }\n\n private formatLogsToJSON(): string {\n const remappedLogs = this.logs.map(([level, message, options]) => {\n const { timestamp, ...restOptions } = options;\n return {\n level: LogLevel[level],\n message,\n options: {\n ...restOptions,\n date: new Date(options.timestamp),\n },\n };\n });\n\n return JSON.stringify(remappedLogs, getJSONStringifyReplacer(), 2);\n }\n\n /**\n * Export logs to JSON file.\n */\n public exportLogsToJSON(): void {\n const logs = this.formatLogsToJSON();\n const blob = new Blob([logs], { type: \"application/json\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `ledger-device-management-kit-logs-${new Date().toISOString()}.json`;\n a.click();\n }\n}\n", "/**\n * The status of a device action.\n */\nexport enum DeviceActionStatus {\n NotStarted = \"not-started\",\n Pending = \"pending\",\n Stopped = \"stopped\",\n Completed = \"completed\",\n Error = \"error\",\n}\n\nexport type DeviceActionState<Output, Error, IntermediateValue> =\n | { readonly status: DeviceActionStatus.NotStarted }\n | {\n readonly status: DeviceActionStatus.Pending;\n readonly intermediateValue: IntermediateValue;\n }\n | { readonly status: DeviceActionStatus.Stopped }\n | { readonly status: DeviceActionStatus.Completed; readonly output: Output }\n | { readonly status: DeviceActionStatus.Error; readonly error: Error };\n", "/**\n * The user interaction required on the device to move further in a device action.\n * This is used to inform the user about the action they need to take on the device.\n */\nexport enum UserInteractionRequired {\n None = \"none\",\n UnlockDevice = \"unlock-device\",\n AllowSecureConnection = \"allow-secure-connection\",\n ConfirmOpenApp = \"confirm-open-app\",\n SignTransaction = \"sign-transaction\",\n SignTypedData = \"sign-typed-data\",\n AllowListApps = \"allow-list-apps\",\n VerifyAddress = \"verify-address\",\n SignPersonalMessage = \"sign-personal-message\",\n}\n", "import { SdkError } from \"@api/Error\";\n\nexport class DeviceNotOnboardedError implements SdkError {\n readonly _tag = \"DeviceNotOnboardedError\";\n readonly originalError?: Error;\n\n constructor(message?: string) {\n this.originalError = new Error(message ?? \"Device not onboarded.\");\n }\n}\n\nexport class DeviceLockedError implements SdkError {\n readonly _tag = \"DeviceLockedError\";\n readonly originalError?: Error;\n\n constructor(message?: string) {\n this.originalError = new Error(message ?? \"Device locked.\");\n }\n}\n\nexport class UnknownDAError implements SdkError {\n readonly _tag = \"UnknownDAError\";\n readonly originalError?: Error;\n\n constructor(message?: string) {\n this.originalError = new Error(message ?? \"Unknown error.\");\n }\n}\n", "import { Left, Right } from \"purify-ts\";\nimport { Observable } from \"rxjs\";\nimport { tap, timeout } from \"rxjs/operators\";\nimport { assign, fromObservable, fromPromise, setup } from \"xstate\";\n\nimport { isSuccessCommandResult } from \"@api/command/model/CommandResult\";\nimport {\n GetAppAndVersionCommand,\n GetAppAndVersionCommandResult,\n} from \"@api/command/os/GetAppAndVersionCommand\";\nimport { DeviceStatus } from \"@api/device/DeviceStatus\";\nimport { InternalApi } from \"@api/device-action/DeviceAction\";\nimport { UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport { DEFAULT_UNLOCK_TIMEOUT_MS } from \"@api/device-action/os/Const\";\nimport {\n DeviceLockedError,\n DeviceNotOnboardedError,\n} from \"@api/device-action/os/Errors\";\nimport { StateMachineTypes } from \"@api/device-action/xstate-utils/StateMachineTypes\";\nimport {\n DeviceActionStateMachine,\n XStateDeviceAction,\n} from \"@api/device-action/xstate-utils/XStateDeviceAction\";\nimport {\n DeviceSessionState,\n DeviceSessionStateType,\n} from \"@api/device-session/DeviceSessionState\";\n\nimport {\n GetDeviceStatusDAError,\n GetDeviceStatusDAInput,\n GetDeviceStatusDAIntermediateValue,\n GetDeviceStatusDAOutput,\n} from \"./types\";\n\ntype GetDeviceStatusMachineInternalState = {\n readonly onboarded: boolean;\n readonly locked: boolean;\n readonly currentApp: string | null;\n readonly currentAppVersion: string | null;\n readonly error: GetDeviceStatusDAError | null;\n};\n\nexport type MachineDependencies = {\n readonly getAppAndVersion: () => Promise<GetAppAndVersionCommandResult>;\n readonly getDeviceSessionState: () => DeviceSessionState;\n readonly waitForDeviceUnlock: (args: {\n input: { unlockTimeout: number };\n }) => Observable<void>;\n readonly setDeviceSessionState: (\n state: DeviceSessionState,\n ) => DeviceSessionState;\n readonly isDeviceOnboarded: () => boolean;\n};\n\nexport type ExtractMachineDependencies = (\n internalApi: InternalApi,\n) => MachineDependencies;\n\nexport class GetDeviceStatusDeviceAction extends XStateDeviceAction<\n GetDeviceStatusDAOutput,\n GetDeviceStatusDAInput,\n GetDeviceStatusDAError,\n GetDeviceStatusDAIntermediateValue,\n GetDeviceStatusMachineInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n GetDeviceStatusDAOutput,\n GetDeviceStatusDAInput,\n GetDeviceStatusDAError,\n GetDeviceStatusDAIntermediateValue,\n GetDeviceStatusMachineInternalState\n > {\n type types = StateMachineTypes<\n GetDeviceStatusDAOutput,\n GetDeviceStatusDAInput,\n GetDeviceStatusDAError,\n GetDeviceStatusDAIntermediateValue,\n GetDeviceStatusMachineInternalState\n >;\n\n const {\n getAppAndVersion,\n getDeviceSessionState,\n setDeviceSessionState,\n waitForDeviceUnlock,\n isDeviceOnboarded,\n } = this.extractDependencies(internalApi);\n\n const unlockTimeout = this.input.unlockTimeout ?? DEFAULT_UNLOCK_TIMEOUT_MS;\n\n return setup({\n types: {\n input: {\n unlockTimeout,\n } as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n getAppAndVersion: fromPromise(getAppAndVersion),\n waitForDeviceUnlock: fromObservable(waitForDeviceUnlock),\n },\n guards: {\n isDeviceOnboarded: () => isDeviceOnboarded(), // TODO: we don't have this info for now, this can be derived from the \"flags\" obtained in the getVersion command\n isDeviceUnlocked: () =>\n getDeviceSessionState().deviceStatus !== DeviceStatus.LOCKED,\n hasError: ({ context }) => context._internalState.error !== null,\n },\n actions: {\n assignErrorDeviceNotOnboarded: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: new DeviceNotOnboardedError(),\n }),\n }),\n assignErrorDeviceLocked: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: new DeviceLockedError(),\n }),\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.UnlockDevice,\n },\n }),\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: _.event[\"error\"], // NOTE: it should never happen, the error is not typed anymore here\n }),\n }),\n assignNoUserActionNeeded: assign({\n intermediateValue: (_) =>\n ({\n ..._.context.intermediateValue,\n requiredUserInteraction: UserInteractionRequired.None,\n }) satisfies types[\"context\"][\"intermediateValue\"],\n }),\n assignUserActionUnlockNeeded: assign({\n intermediateValue: (_) =>\n ({\n ..._.context.intermediateValue,\n requiredUserInteraction: UserInteractionRequired.UnlockDevice,\n }) satisfies types[\"context\"][\"intermediateValue\"],\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QHEwBcAiYBuBLAxmAMpoCGaArrFnoQIL5q4D2AdgHQ0FgBKYpEAJ4BiANoAGALqJQAB2axcTNjJAAPRAFoArAHZx7AIwAmQ7oCcugMyHzANmMAWYwBoQgxI8vsAHOJM+VuLmVj5e2gC+EW6omDjcJORUXPSMLBwA8qwARsykAE4QuKxQAMIAFmD4ANZiUqryisqsqhoImo4O7OGhPj4h5n6Obh4IunZ2RoZ+ena6nYaGUTHoKcRklNTxqc3sWbkFRSUVVbWihtJIII1K6a1aVtoGTxOOjtbv84YjiObik7ofPM7GFDP9jNofMsQLE1olNmsGLsADLMGrFMqVGp1S5yBS3FRXNqaOzadjiHx2KyORbzcRBczmH4IbTOdjaabaKmdGy6XSRaIw1bbdZJLa0MBI9LsVHo45Ys4XBr45r3dps-n0ubaGxgx6PZlWULkkLBGmDCzGYzQ2Ei+HJEVStjsACqsDA+SdrBdrAANmjqmthBA2GB2MVsMxqmG3R6vT7-TU1hJcdcVXciYgglZycYQiYqRTQoZtMynDmbM4aW8rHYzD4BSs4hL7eLuF7Xe7PWk2AmA0GPflmPl2LJfeQAGbDgC2nbjPe9fv7IpTyqaGdAbXmxnZPkMNNM820VuZ+8M7Dsb3MznpwW31sFtpbGwdEo7dFksjorAgADUPYobAnNiIasGGEZRmGT4JC+bY7NKH5fj+-75IBrDAdUCAQfg5DpCmq5XDcqqZmMjgGDY-yGJeejjFRzJ2P47DZoEJb+Hyx42sKz5ioiC7sIh35-gB6QYcIg7DqO45oFO+SztBhCtrxuwCchwlAQqWGsJGOHNPh9SEemhKbogdLsIMTjmPuNF1nYZaOBW+5OPu9l1oCjZCs2ME8Y6fGIb6BC4WwdDYKQuDjtkvq8HAFC+mgokEXi65GeoiBguYZJOPSJa6Hm1hGsyuglkxxiUjYVjXlq7nyaKCI+cpn7+Tp6TBaF4WRXwsAxXFCpiEqBlJS0JFAo4vg+BCe55e8-QFUVVglVShjlWRtZ2FEgqsMwEBwKo1WKXVG5pgNaokmRZmQg4fyLHR7ieCNpjGPyx7aNo6UNo4nGeQpsFKdKax8AIoyJQSg3Ge0L07q9F3+Istk3Qg1IjUaZ7GNS-LlU4H1wt9+3OvseSFBiGFrsDx01mZ15mHooReFaVj0fZ5Jci5zissYIKY3a2NvnxsrVITCrE8RoMdDucxWgx1jpZCELDHDgKTC9jg6mNXKLDSHPcbV3O7LG3bNH2SYioLB3EmCI1-HuVL6Cj4hU6eNjsIVD3UrWfKXVCj5cV5Wvtr5n6CShaFE-1JMkWzPgXpCjh+Faw3Mjq5jdOlJhGvo-RzRr3uvr79VjgFzQtWFpARVFnWxcHQNCylCBm+eKPjJL4jWMEdNww4O46vSFVsfyD5Nlj3na9KRAUPghCwPAIdV20QIR7e-RzOYbNK98cN7ndgR-BSzgo+YmdfYPOfSgAovkQ75MbyVtItehmSrJgcijz2uHD+pmXyQSQnyVLs2tQA */\n id: \"GetDeviceStatusDeviceAction\",\n initial: \"DeviceReady\",\n context: (_) => {\n const sessionState = getDeviceSessionState();\n const { sessionStateType } = sessionState;\n return {\n input: {\n unlockTimeout: _.input.unlockTimeout,\n },\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n _internalState: {\n onboarded: false, // we don't know how to check yet\n locked: sessionState.deviceStatus === DeviceStatus.LOCKED,\n currentApp:\n sessionStateType ===\n DeviceSessionStateType.ReadyWithoutSecureChannel\n ? sessionState.currentApp.name\n : null,\n currentAppVersion: null,\n error: null,\n },\n };\n },\n states: {\n DeviceReady: {\n always: {\n target: \"OnboardingCheck\",\n },\n },\n OnboardingCheck: {\n // TODO: we don't have this info for now\n always: [\n {\n guard: {\n type: \"isDeviceOnboarded\",\n },\n target: \"LockingCheck\",\n actions: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n onboarded: true,\n }),\n }),\n },\n {\n target: \"Error\",\n actions: \"assignErrorDeviceNotOnboarded\",\n },\n ],\n },\n LockingCheck: {\n // We check if the device is locked in the session state\n always: [\n {\n target: \"AppAndVersionCheck\",\n guard: {\n type: \"isDeviceUnlocked\",\n },\n actions: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n locked: false,\n }),\n }),\n },\n {\n target: \"UserActionUnlockDevice\",\n },\n ],\n },\n UserActionUnlockDevice: {\n // we wait for the device to be unlocked (default timeout is 15s)\n entry: \"assignUserActionUnlockNeeded\",\n exit: \"assignNoUserActionNeeded\",\n invoke: {\n id: \"UserActionUnlockDevice\",\n src: \"waitForDeviceUnlock\",\n input: (_) => ({\n unlockTimeout,\n }),\n onDone: {\n target: \"AppAndVersionCheck\",\n actions: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n locked: false,\n }),\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorDeviceLocked\",\n },\n },\n },\n AppAndVersionCheck: {\n // We check the current app and version using the getAppAndVersion command\n invoke: {\n src: \"getAppAndVersion\",\n onDone: {\n target: \"ApplicationAvailableResultCheck\",\n actions: assign({\n _internalState: (_) => {\n if (isSuccessCommandResult(_.event.output)) {\n const state: DeviceSessionState = getDeviceSessionState();\n // Narrow the type to ReadyWithoutSecureChannelState or ReadyWithSecureChannelState\n if (\n state.sessionStateType !==\n DeviceSessionStateType.Connected\n ) {\n setDeviceSessionState({\n ...state,\n currentApp: _.event.output.data,\n });\n }\n return {\n ..._.context._internalState,\n currentApp: _.event.output.data.name,\n currentAppVersion: _.event.output.data.version,\n };\n }\n return {\n ..._.context._internalState,\n error: _.event.output.error,\n };\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n ApplicationAvailableResultCheck: {\n always: [\n {\n guard: \"hasError\",\n target: \"Error\",\n },\n {\n target: \"Success\",\n },\n ],\n },\n Success: {\n type: \"final\",\n },\n Error: {\n type: \"final\",\n },\n },\n output: (args) => {\n // TODO: instead we should rely on the current state (\"Success\" or \"Error\")\n const { context } = args;\n const { error, currentApp, currentAppVersion } = context._internalState;\n if (error) {\n return Left(error);\n }\n return Right<GetDeviceStatusDAOutput>({\n currentApp: currentApp!,\n currentAppVersion,\n });\n },\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const getAppAndVersion = () => {\n return internalApi.sendCommand(new GetAppAndVersionCommand());\n };\n\n const waitForDeviceUnlock = ({\n input,\n }: {\n input: { unlockTimeout: number };\n }) =>\n new Observable<void>((subscriber) => {\n const inner = internalApi\n .getDeviceSessionStateObservable()\n .pipe(\n tap((state) => {\n if (state.deviceStatus === DeviceStatus.CONNECTED) {\n subscriber.complete();\n inner.unsubscribe();\n }\n }),\n )\n .subscribe();\n\n return () => {\n inner.unsubscribe();\n };\n }).pipe(timeout(input.unlockTimeout));\n\n return {\n getAppAndVersion,\n waitForDeviceUnlock,\n getDeviceSessionState: () => internalApi.getDeviceSessionState(),\n setDeviceSessionState: (state: DeviceSessionState) =>\n internalApi.setDeviceSessionState(state),\n isDeviceOnboarded: () => true, // TODO: we don't have this info for now\n };\n }\n}\n", "export const DEFAULT_UNLOCK_TIMEOUT_MS = 60 * 1000;\n", "import { createBrowserInspector } from \"@statelyai/inspect\";\nimport { Observable, ReplaySubject, share } from \"rxjs\";\nimport { createActor, SnapshotFrom, StateMachine, StateSchema } from \"xstate\";\n\nimport {\n DeviceAction,\n DeviceActionIntermediateValue,\n ExecuteDeviceActionReturnType,\n InternalApi,\n} from \"@api/device-action/DeviceAction\";\nimport {\n DeviceActionState,\n DeviceActionStatus,\n} from \"@api/device-action/model/DeviceActionState\";\nimport { SdkError } from \"@api/Error\";\n\nimport { StateMachineTypes } from \"./StateMachineTypes\";\n\nexport type DeviceActionStateMachine<\n Output,\n Input,\n Error extends SdkError,\n IntermediateValue extends DeviceActionIntermediateValue,\n InternalState,\n> = StateMachine<\n StateMachineTypes<\n Output,\n Input,\n Error,\n IntermediateValue,\n InternalState\n >[\"context\"], // context\n /**\n * The following usages `any` are OK because this is just a wrapper around the\n * state machine and we are not directly going to use these types.\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n any, // event\n any, // children\n any, // actor\n any, // action\n any, // guard\n any, // delay\n any, // state value\n any, // tag\n /* eslint-enable @typescript-eslint/no-explicit-any */\n StateMachineTypes<\n Output,\n Input,\n Error,\n IntermediateValue,\n InternalState\n >[\"input\"],\n StateMachineTypes<\n Output,\n Input,\n Error,\n IntermediateValue,\n InternalState\n >[\"output\"],\n /* eslint-disable @typescript-eslint/no-explicit-any */\n any,\n any,\n /* eslint-enable @typescript-eslint/no-explicit-any */\n StateSchema\n>;\n\n/**\n * A DeviceAction that uses an XState state machine to execute.\n * It maps the state machine snapshots to the DeviceActionState.\n * This class is abstract and should be extended to implement the state machine.\n */\nexport abstract class XStateDeviceAction<\n Output,\n Input,\n Error extends SdkError,\n IntermediateValue extends DeviceActionIntermediateValue,\n InternalState,\n> implements DeviceAction<Output, Input, Error, IntermediateValue>\n{\n readonly input: Input;\n readonly inspect: boolean = false;\n\n /**\n *\n * @param input The input for the DeviceAction\n * @param inspect If true, the state machine will be inspected in the browser\n */\n constructor(args: { input: Input; inspect?: boolean }) {\n this.input = args.input;\n this.inspect = Boolean(args.inspect);\n }\n\n protected abstract makeStateMachine(\n internalAPI: InternalApi,\n ): DeviceActionStateMachine<\n Output,\n Input,\n Error,\n IntermediateValue,\n InternalState\n >;\n\n _execute(\n internalApi: InternalApi,\n ): ExecuteDeviceActionReturnType<Output, Error, IntermediateValue> {\n const stateMachine = this.makeStateMachine(internalApi);\n\n const actor = createActor(stateMachine, {\n input: this.input,\n // optional inspector for debugging\n inspect: this.inspect ? createBrowserInspector().inspect : undefined,\n });\n\n /**\n * Using a ReplaySubject is important because the first snapshots might be\n * emitted before the observable is subscribed (if the machine goes through\n * those states fully synchronously).\n * This way, we ensure that the subscriber always receives the latest snapshot.\n * */\n const subject = new ReplaySubject<\n DeviceActionState<Output, Error, IntermediateValue>\n >();\n\n const handleActorSnapshot = (\n snapshot: SnapshotFrom<typeof stateMachine>,\n ) => {\n const { context, status, output, error } = snapshot;\n switch (status) {\n case \"active\":\n subject.next({\n status: DeviceActionStatus.Pending,\n intermediateValue: context.intermediateValue,\n });\n break;\n case \"done\":\n output.caseOf({\n Left: (err) => {\n subject.next({\n status: DeviceActionStatus.Error,\n error: err,\n });\n },\n Right: (result) => {\n subject.next({\n status: DeviceActionStatus.Completed,\n output: result,\n });\n },\n });\n subject.complete();\n break;\n case \"error\":\n // this is an error in the execution of the state machine, it should not happen\n subject.error(error);\n subject.complete();\n break;\n case \"stopped\":\n subject.next({\n status: DeviceActionStatus.Stopped,\n });\n subject.complete();\n break;\n default:\n this._exhaustiveMatchingGuard(status);\n }\n };\n\n const observable = new Observable<\n DeviceActionState<Output, Error, IntermediateValue>\n >((subscriber) => {\n const subjectSubscription = subject.subscribe(subscriber);\n return () => {\n actorSubscription.unsubscribe();\n subjectSubscription.unsubscribe();\n actor.stop(); // stop the actor when the observable is unsubscribed\n };\n });\n\n const actorSubscription = actor.subscribe(handleActorSnapshot);\n actor.start();\n\n return {\n observable: observable.pipe(share()), // share to garantee that once there is no more observer, the actor is stopped\n cancel: () => {\n actor.stop();\n actorSubscription.unsubscribe();\n handleActorSnapshot(actor.getSnapshot());\n },\n };\n }\n\n private _exhaustiveMatchingGuard(status: never): never {\n console.log(\"_exhaustiveMatchingGuard status\", status);\n throw new Error(`Unhandled status: ${status}`);\n }\n}\n", "import { Left, Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport { isSuccessCommandResult } from \"@api/command/model/CommandResult\";\nimport {\n CloseAppCommand,\n CloseAppCommandResult,\n} from \"@api/command/os/CloseAppCommand\";\nimport {\n GetAppAndVersionCommand,\n GetAppAndVersionCommandResult,\n} from \"@api/command/os/GetAppAndVersionCommand\";\nimport { InternalApi } from \"@api/device-action/DeviceAction\";\nimport { UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport { DEFAULT_UNLOCK_TIMEOUT_MS } from \"@api/device-action/os/Const\";\nimport { UnknownDAError } from \"@api/device-action/os/Errors\";\nimport { GetDeviceStatusDeviceAction } from \"@api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction\";\nimport { StateMachineTypes } from \"@api/device-action/xstate-utils/StateMachineTypes\";\nimport {\n DeviceActionStateMachine,\n XStateDeviceAction,\n} from \"@api/device-action/xstate-utils/XStateDeviceAction\";\nimport {\n DeviceSessionState,\n DeviceSessionStateType,\n} from \"@api/device-session/DeviceSessionState\";\n\nimport type {\n GoToDashboardDAError,\n GoToDashboardDAInput,\n GoToDashboardDAIntermediateValue,\n GoToDashboardDAOutput,\n} from \"./types\";\n\ntype GoToDashboardMachineInternalState = {\n readonly currentApp: string | null;\n readonly error: GoToDashboardDAError | null;\n};\n\nexport type MachineDependencies = {\n readonly getAppAndVersion: () => Promise<GetAppAndVersionCommandResult>;\n readonly closeApp: () => Promise<CloseAppCommandResult>;\n readonly getDeviceSessionState: () => DeviceSessionState;\n readonly setDeviceSessionState: (\n state: DeviceSessionState,\n ) => DeviceSessionState;\n};\n\nexport type ExtractMachineDependencies = (\n internalApi: InternalApi,\n) => MachineDependencies;\n\nexport class GoToDashboardDeviceAction extends XStateDeviceAction<\n GoToDashboardDAOutput,\n GoToDashboardDAInput,\n GoToDashboardDAError,\n GoToDashboardDAIntermediateValue,\n GoToDashboardMachineInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n GoToDashboardDAOutput,\n GoToDashboardDAInput,\n GoToDashboardDAError,\n GoToDashboardDAIntermediateValue,\n GoToDashboardMachineInternalState\n > {\n type types = StateMachineTypes<\n GoToDashboardDAOutput,\n GoToDashboardDAInput,\n GoToDashboardDAError,\n GoToDashboardDAIntermediateValue,\n GoToDashboardMachineInternalState\n >;\n\n const {\n getDeviceSessionState,\n setDeviceSessionState,\n closeApp,\n getAppAndVersion,\n } = this.extractDependencies(internalApi);\n\n const unlockTimeout = this.input.unlockTimeout ?? DEFAULT_UNLOCK_TIMEOUT_MS;\n\n const getDeviceStatusMachine = new GetDeviceStatusDeviceAction({\n input: {\n unlockTimeout,\n },\n }).makeStateMachine(internalApi);\n return setup({\n types: {\n input: {\n unlockTimeout,\n } as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n getAppAndVersion: fromPromise(getAppAndVersion),\n closeApp: fromPromise(closeApp),\n getDeviceStatus: getDeviceStatusMachine,\n },\n guards: {\n hasError: ({ context }: { context: types[\"context\"] }) => {\n return context._internalState.error !== null;\n },\n isDashboardOpen: ({ context }: { context: types[\"context\"] }) =>\n context._internalState.currentApp === \"BOLOS\",\n },\n actions: {\n // assignGetDeviceStatusUnknownError: assign({\n // _internalState: (_) => ({\n // ..._.context._internalState,\n // error: new UnknownDAError(\"GetDeviceUnknownStatusError\"),\n // }),\n // }),\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: _.event[\"error\"], // NOTE: it should never happen, the error is not typed anymore here\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QHED2AVVARAhrAFgEao4BOEWYAbgJYDGYAgnQC42oB2AdJbQwEpgcEAJ4BiANoAGALqJQAB1SwabTvJAAPRAHYAjFwDMATikA2MwA5DOnQBYArGeOGANCBGI9VrlcvmpRyknQwcAXzD3NExcAmIyCmp6JlZ2bmQwFl5kgGUWHBYAV1gxCE4wLhoOKlQAawqIJIY8guLpOSQQJRU1Dg1tBAAmOy49QYcpHQdBvR0pMcszO3dPBEM7My4HYz1pqWNLPRsdJYiojGw8IhJybIZmXq4AYXwwOlq7sBaikvaNbtUaX6iDsgy2g3Wdksjn8JlBDhWiAchk2OkMgysB2RzlBZxA0UucRuiT4KUeLzeHyaX3yP0keg6imUgPUnQGgxmo3hdkcemMwwcG0RCGxXDRGMsWJRxlxkXxF1i1wSnweaR4V3i5Ap70ksn+zN6wIQfMsYsG0LMg2MZlm60mwucDi4HMli0GgX0zjxBMVmpJyVVnHVRIS2tq9MZXQNQLZII5XEcoQx5kO3mWHkQjud5oOlo93mM3oVGuJKtSQd9xLDkkGkYBhtjCEtxi41h5fJs+ysOgdOjBE2Gw1sUmC5qLMRLyupge4ldDrx1EkMdejrNAA2sTu8jsO0Lsej5wr7prsoTGs2CJz748JStu0-L3CeABtlEwFApSuVKtU6hUfZO96kjOzyvrA74KAgVQ1HQBRpO0fydPWMbrl4kwGFMzizMYcyCsK-gjE4OiWBC-jGDK+g3nOQEBo+oFvowH5iGApCkKgpBcAoz4FAAZuxAC2XAASGNH3HRL4MR+UG-rBvQIXqSGrn0jaHGCNocoYko2BiUzCvymyadsdg6Dh+zTFRgH+mJ5JgRB1aIUyPQoVoaHEWKegjsYDgOGi9hjMKHmGAYdg7KCVhLOagoWSJVlkmqEngYxCj2Qy+pOWuLnGuMUhcNagoHMZgqhMYAVSEFCahRKEWWFFcrCXesUgRkLBJYwHAQAAaixKicF+HAVNBf5CcWMVlo8zWte1XWkD1HDSTBcGcPJK7pcpqEIARCZQsMqZSDM+7Cg4limjaXnbHMlhzIYERyhwqCNPAnT1X6Y3OchGUDAAtDKvj6NYgQohYljCsMRjzIYASTN2NjXXVI0Na9FbUoIwirI5LJrZloJcCOI52GVZihD5goIhmxoHq24OQycl02NFCMPuNmSfN8xRpRjRqfRsv16P9p4WFYIOGIYCYjgex1mD5oLrPTL2M-FC5UqSrOPejDbrbMraniZ+4nGV6J6OmqwbJsl3jPY2wQ2YaKy6W8sVpZYbs+rmUzDl4y84T7rBDyZgOvsWvqd4EI67bU7AeJtlJc7zkbnyYrBORxGaVCDh6PhhtGAcJjjPye3EWHolxUGCV2YrMcfWhFi5TyjgUYb9h+2TFG+GMIUhRyUy7IXjV0RNH5tZ13VvUpRpjOYYpBWZCxzOnZNHQZGweSR7qhDLcMTqN9vcDkhR0AwsCq1Gq1GhyIxWvsSYWMZ-I9mTJGEbXsx7Av4Qb7ecsR48ACirHsRXmMBjIi2JaRwEIDzeWtsDMmgUdCthwjadSaJFiWBumEIAA */\n id: \"GoToDashboardDeviceAction\",\n initial: \"DeviceReady\",\n context: (_) => {\n const sessionState = getDeviceSessionState();\n return {\n input: {\n unlockTimeout: _.input.unlockTimeout,\n },\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n _internalState: {\n currentApp:\n \"currentApp\" in sessionState\n ? sessionState.currentApp.name\n : null,\n error: null,\n },\n };\n },\n states: {\n DeviceReady: {\n always: {\n target: \"GetDeviceStatus\",\n },\n },\n GetDeviceStatus: {\n // We run the GetDeviceStatus flow to get information about the device state\n invoke: {\n id: \"deviceStatus\",\n src: \"getDeviceStatus\",\n input: (_) => ({\n unlockTimeout: _.context.input.unlockTimeout,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) =>\n _.event.snapshot.context.intermediateValue,\n }),\n },\n onDone: {\n target: \"CheckDeviceStatus\",\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<GoToDashboardMachineInternalState>(\n {\n Right: (output) => ({\n ..._.context._internalState,\n currentApp: output.currentApp,\n }),\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n },\n );\n },\n }),\n },\n // NOTE: The way we handle our DeviceActions means that we should never as we return an Either\n // onError: {\n // target: \"Error\",\n // actions: \"assignGetDeviceStatusUnknownError\",\n // },\n },\n },\n CheckDeviceStatus: {\n // We check the device status to see if we can have an error\n always: [\n {\n target: \"Error\",\n guard: \"hasError\",\n },\n {\n target: \"DashboardCheck\",\n },\n ],\n },\n DashboardCheck: {\n // We check if the dashboard is open\n always: [\n {\n target: \"Success\",\n guard: \"isDashboardOpen\",\n },\n {\n target: \"Error\",\n guard: \"hasError\",\n },\n {\n target: \"Error\",\n guard: (_) => {\n return _.context._internalState.currentApp === null;\n },\n actions: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: new UnknownDAError(\"currentApp === null\"),\n }),\n }),\n },\n {\n target: \"CloseApp\",\n },\n ],\n },\n CloseApp: {\n invoke: {\n src: \"closeApp\",\n onDone: {\n target: \"CloseAppCheck\",\n actions: assign({\n _internalState: (_) => {\n if (isSuccessCommandResult(_.event.output)) {\n return _.context._internalState;\n }\n return {\n ..._.context._internalState,\n error: _.event.output.error,\n };\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n CloseAppCheck: {\n always: [\n {\n target: \"Error\",\n guard: \"hasError\",\n },\n {\n target: \"GetAppAndVersion\",\n reenter: true,\n },\n ],\n },\n GetAppAndVersion: {\n invoke: {\n src: \"getAppAndVersion\",\n onDone: {\n target: \"DashboardCheck\",\n actions: assign({\n _internalState: (_) => {\n if (isSuccessCommandResult(_.event.output)) {\n const state: DeviceSessionState = getDeviceSessionState();\n // Narrow the type to ReadyWithoutSecureChannelState or ReadyWithSecureChannelState\n if (\n state.sessionStateType !==\n DeviceSessionStateType.Connected\n ) {\n setDeviceSessionState({\n ...state,\n currentApp: _.event.output.data,\n });\n }\n return {\n ..._.context._internalState,\n currentApp: _.event.output.data.name,\n };\n }\n return {\n ..._.context._internalState,\n error: _.event.output.error,\n };\n },\n }),\n },\n },\n },\n Success: {\n type: \"final\",\n },\n Error: {\n type: \"final\",\n },\n },\n output: (_) => {\n if (_.context._internalState.error) {\n return Left(_.context._internalState.error);\n }\n\n return Right(undefined);\n },\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const closeApp = async () => internalApi.sendCommand(new CloseAppCommand());\n const getAppAndVersion = async () =>\n internalApi.sendCommand(new GetAppAndVersionCommand());\n\n return {\n closeApp,\n getAppAndVersion,\n getDeviceSessionState: () => internalApi.getDeviceSessionState(),\n setDeviceSessionState: (state: DeviceSessionState) =>\n internalApi.setDeviceSessionState(state),\n };\n }\n}\n", "import { Left, Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport { isSuccessCommandResult } from \"@api/command/model/CommandResult\";\nimport {\n AppResponse,\n ListAppsCommand,\n ListAppsCommandResult,\n} from \"@api/command/os/ListAppsCommand\";\nimport { InternalApi } from \"@api/device-action/DeviceAction\";\nimport { UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport { DEFAULT_UNLOCK_TIMEOUT_MS } from \"@api/device-action/os/Const\";\nimport { GoToDashboardDeviceAction } from \"@api/device-action/os/GoToDashboard/GoToDashboardDeviceAction\";\nimport { StateMachineTypes } from \"@api/device-action/xstate-utils/StateMachineTypes\";\nimport {\n DeviceActionStateMachine,\n XStateDeviceAction,\n} from \"@api/device-action/xstate-utils/XStateDeviceAction\";\n\nimport {\n ListAppsDAError,\n ListAppsDAInput,\n ListAppsDAIntermediateValue,\n ListAppsDAOutput,\n} from \"./types\";\n\ntype ListAppsMachineInternalState = {\n readonly error: ListAppsDAError | null;\n readonly apps: AppResponse[];\n readonly shouldContinue: boolean;\n};\n\nexport type MachineDependencies = {\n readonly listApps: ({\n input,\n }: {\n input: boolean;\n }) => Promise<ListAppsCommandResult>;\n};\n\nexport type ExtractMachineDependencies = (\n internalApi: InternalApi,\n) => MachineDependencies;\n\nexport class ListAppsDeviceAction extends XStateDeviceAction<\n ListAppsDAOutput,\n ListAppsDAInput,\n ListAppsDAError,\n ListAppsDAIntermediateValue,\n ListAppsMachineInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n ListAppsDAOutput,\n ListAppsDAInput,\n ListAppsDAError,\n ListAppsDAIntermediateValue,\n ListAppsMachineInternalState\n > {\n type types = StateMachineTypes<\n ListAppsDAOutput,\n ListAppsDAInput,\n ListAppsDAError,\n ListAppsDAIntermediateValue,\n ListAppsMachineInternalState\n >;\n\n const { listApps } = this.extractDependencies(internalApi);\n\n const unlockTimeout = this.input.unlockTimeout ?? DEFAULT_UNLOCK_TIMEOUT_MS;\n\n const goToDashboardMachine = new GoToDashboardDeviceAction({\n input: {\n unlockTimeout,\n },\n }).makeStateMachine(internalApi);\n\n return setup({\n types: {\n input: {\n unlockTimeout,\n } as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n listApps: fromPromise<ListAppsCommandResult, boolean>(listApps),\n goToDashboard: goToDashboardMachine,\n },\n guards: {\n hasError: ({ context }: { context: types[\"context\"] }) => {\n return context._internalState.error !== null;\n },\n hasMoreApps: (_) => _.context._internalState.shouldContinue,\n },\n actions: {\n assignAllowListApps: assign({\n intermediateValue: (_) =>\n ({\n requiredUserInteraction: UserInteractionRequired.AllowListApps,\n }) satisfies types[\"context\"][\"intermediateValue\"],\n }),\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: _.event[\"error\"], // NOTE: it should never happen, the error is not typed anymore here\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QBkCWsAuBBADj2AImAG6oDGYWZGqA9gHYB0RpFASmAIYQCeAxAG0ADAF1EoHLVioaDcSAAeiAIwBOIYwAcANgDsyzat2HlAJgDMegDQgeKg412ntAVm3mdp1af0uAvn42aJi4+CzklNR0TADitAAqtAScsAAWAEa0nABOEHwQDGCMqPTEtADWRRApGVm5wmJIIJLSsvTySgguquaMACy6rvrKfSOqfTZ2CKZC2v3K2ou6xn2mms7+gSDB2HiEJBFUbYxxiclpmTl5YNnZtNmMOAA2nBgAZvcAtozVF3UQDXkLRk0Q6iG6vQGQ2UIzGE1siE0ykYLiEaLRuiECxcbmUASC6F2YQOFCO0ROCSSNUuuQAwqkwGRyoJRECpCC5E1OsosZpHAZBi5zKpuhjJohTBZHBt3N5UapVGp8dtCaF9qxIsdTlS-ld6YzmQJlI0JOy2mCEDyHPpNILhaKhLpxQg+kI+ZjzGZdD0seYPMqdmrwqSogxGIG9vlCsVShUihHiRqyWGE7AECUymRXtEGoCmsDzVyVAM+cpzGtzKjvdp1ppnZWNNosW4+sLNEJUdo+gHVXtg5ryam+Dc7g9nq8Ptlvqn+8mmKn07Gs21c6z82bQUXLSXGGWK1XVDW1s6XMZ+kKzLaZk3XD2Qn2SQOU738HwFJhXkVOG8MDcABTKKiaIAJR8DOj5zuGL6wHmpqtJuoDcjue6aA21a1s6ejIuo2imDiCy6H0PS6HeRLqocobztBtIMDQ9AAK5gFG9BFBmcZQfeiYUccqY0fQdGMYumbZgwq4ms0G6cohKiaC4pZCOMQjlu4bguPWqyMJKrhdpKmLLNopFBhBlEcWRfECUxI73I8LzvF8plGUmJm8bRJSCWxy45qIsESfBUmKBKMzIjMnpyTitp+uY9ZyburYWDCfQ1ro5aGQ+TnHOZblMT5BYIQFlqoaojDaCK5iuq2XY1s6iW6I4h54bJlheKlXEhhlrkMdlxpsn57RbgYbiMLMeFrLpMxCiewqOOV4xEai6x4sq9C0BAcDyOB6V5bl-mdAAtNozq7S4jAKqdFgKdW+4teRbXkv2HDcFMcEcn10kuqYzowrVTjaR4TXrNds4mdq5y1FcPUvRaazHaVl5Cq66hqQiCDjJpMplQYmijClWwbdx5Ig9S-z6kyEOFm97bIqsh4KsKZYlQdyOSnywrluYsxDJTmwEpxN1PlRvNk3l3IGMiOIDB2ZWtq6H3I5WtV9BePhYm6gymIDxk8dRHWMULO0SlicyyYBPRlt4jXRXM2hqN6lg8j0GubWGmWdXrr35QsOhDbJh5+l44XwlM5hOCixhej4Ip9Ei3a49BQPHAAyvRZAULA8Drr1UM4nMMxeM4NaoR4TrI0KOczX0cWKo7+NhgAorc9xu1DoxFYBuE6O2OgKfWZ46EYimzAsXYBAEQA */\n id: \"ListAppsDeviceAction\",\n initial: \"DeviceReady\",\n context: (_) => {\n return {\n input: {\n unlockTimeout: _.input.unlockTimeout,\n },\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n _internalState: {\n error: null,\n apps: [],\n shouldContinue: false,\n },\n };\n },\n states: {\n DeviceReady: {\n always: {\n target: \"GoToDashboard\",\n },\n },\n GoToDashboard: {\n invoke: {\n id: \"dashboard\",\n src: \"goToDashboard\",\n input: (_) => ({\n unlockTimeout: _.context.input.unlockTimeout,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) =>\n _.event.snapshot.context.intermediateValue,\n }),\n },\n onDone: {\n target: \"GoToDashboardCheck\",\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<ListAppsMachineInternalState>({\n Right: () => _.context._internalState,\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n });\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n GoToDashboardCheck: {\n always: [\n {\n target: \"Error\",\n guard: \"hasError\",\n },\n {\n target: \"ListApps\",\n },\n ],\n },\n ListApps: {\n // NOTE: This is a timeout that is currently not used\n // We need to discuss this as a team, how do we want to\n // handle the case when the user does not validate or reject on the device\n // after: {\n // 15000: \"Error\",\n // actions: assign({\n // _internalState: (_) => ({\n // error: new UnknownDAError(\"ListAppsTimeout\"),\n // }),\n // }),\n // },\n entry: \"assignAllowListApps\",\n invoke: {\n src: \"listApps\",\n input: (_) => false,\n onDone: {\n target: \"Continue\",\n actions: assign({\n _internalState: (_) => {\n if (isSuccessCommandResult(_.event.output)) {\n return {\n ..._.context._internalState,\n apps: _.context._internalState.apps.concat(\n _.event.output.data,\n ),\n shouldContinue: _.event.output.data.length === 2,\n };\n }\n return {\n ..._.context._internalState,\n error: _.event.output.error,\n };\n },\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n requiredUserInteraction: UserInteractionRequired.None,\n }),\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n ListAppsCheck: {\n always: [\n {\n target: \"Error\",\n guard: \"hasError\",\n },\n \"ListAppsContinue\",\n ],\n },\n ListAppsContinue: {\n invoke: {\n src: \"listApps\",\n input: (_) => true,\n onDone: {\n target: \"Continue\",\n actions: assign({\n _internalState: (_) => {\n if (isSuccessCommandResult(_.event.output)) {\n return {\n ..._.context._internalState,\n apps: _.context._internalState.apps.concat(\n _.event.output.data,\n ),\n shouldContinue: _.event.output.data.length === 2,\n };\n }\n return {\n ..._.context._internalState,\n error: _.event.output.error,\n };\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n Continue: {\n always: [\n {\n target: \"ListAppsContinue\",\n guard: \"hasMoreApps\",\n },\n {\n target: \"Success\",\n },\n ],\n },\n Success: {\n type: \"final\",\n },\n Error: {\n type: \"final\",\n },\n },\n output: (_) => {\n if (_.context._internalState.error) {\n return Left(_.context._internalState.error);\n }\n\n return Right(_.context._internalState.apps);\n },\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const listApps = async ({ input }: { input: boolean }) => {\n const command = new ListAppsCommand({ isContinue: input });\n return internalApi.sendCommand(command);\n };\n\n return {\n listApps,\n };\n }\n}\n", "import { EitherAsync, Left, Right } from \"purify-ts\";\nimport {\n AnyEventObject,\n assign,\n fromCallback,\n fromPromise,\n setup,\n} from \"xstate\";\n\nimport { ListAppsResponse } from \"@api/command/os/ListAppsCommand\";\nimport { InternalApi } from \"@api/device-action/DeviceAction\";\nimport { UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport { DEFAULT_UNLOCK_TIMEOUT_MS } from \"@api/device-action/os/Const\";\nimport { ListAppsDeviceAction } from \"@api/device-action/os/ListApps/ListAppsDeviceAction\";\nimport { ListAppsDAOutput } from \"@api/device-action/os/ListApps/types\";\nimport { StateMachineTypes } from \"@api/device-action/xstate-utils/StateMachineTypes\";\nimport {\n DeviceActionStateMachine,\n XStateDeviceAction,\n} from \"@api/device-action/xstate-utils/XStateDeviceAction\";\nimport { DeviceSessionState } from \"@api/device-session/DeviceSessionState\";\nimport { HttpFetchApiError } from \"@internal/manager-api/model/Errors\";\nimport { Application } from \"@internal/manager-api/model/ManagerApiType\";\n\nimport {\n ListAppsWithMetadataDAError,\n ListAppsWithMetadataDAInput,\n ListAppsWithMetadataDAIntermediateValue,\n ListAppsWithMetadataDAOutput,\n} from \"./types\";\n\ntype ListAppsWithMetadataMachineInternalState = {\n error: ListAppsWithMetadataDAError | null;\n apps: ListAppsResponse;\n appsWithMetadata: ListAppsWithMetadataDAOutput;\n};\n\nexport type MachineDependencies = {\n getAppsByHash: ({\n input,\n }: {\n input: ListAppsDAOutput;\n }) => EitherAsync<HttpFetchApiError, Array<Application | null>>;\n getDeviceSessionState: () => DeviceSessionState;\n saveSessionState: (state: DeviceSessionState) => DeviceSessionState;\n};\n\nexport class ListAppsWithMetadataDeviceAction extends XStateDeviceAction<\n ListAppsWithMetadataDAOutput,\n ListAppsWithMetadataDAInput,\n ListAppsWithMetadataDAError,\n ListAppsWithMetadataDAIntermediateValue,\n ListAppsWithMetadataMachineInternalState\n> {\n makeStateMachine(\n internalAPI: InternalApi,\n ): DeviceActionStateMachine<\n ListAppsWithMetadataDAOutput,\n ListAppsWithMetadataDAInput,\n ListAppsWithMetadataDAError,\n ListAppsWithMetadataDAIntermediateValue,\n ListAppsWithMetadataMachineInternalState\n > {\n type types = StateMachineTypes<\n ListAppsWithMetadataDAOutput,\n ListAppsWithMetadataDAInput,\n ListAppsWithMetadataDAError,\n ListAppsWithMetadataDAIntermediateValue,\n ListAppsWithMetadataMachineInternalState\n >;\n\n const { getAppsByHash, saveSessionState, getDeviceSessionState } =\n this.extractDependencies(internalAPI);\n\n const unlockTimeout = this.input.unlockTimeout ?? DEFAULT_UNLOCK_TIMEOUT_MS;\n\n const listAppsMachine = new ListAppsDeviceAction({\n input: {\n unlockTimeout,\n },\n }).makeStateMachine(internalAPI);\n\n return setup({\n types: {\n input: {\n unlockTimeout,\n } as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n listApps: listAppsMachine,\n getAppsByHash: fromPromise(getAppsByHash),\n saveSessionState: fromCallback(\n ({\n input,\n sendBack,\n }: {\n sendBack: (event: AnyEventObject) => void;\n input: {\n appsWithMetadata: Array<Application | null>;\n };\n }) => {\n const { appsWithMetadata } = input;\n\n const filterted = appsWithMetadata.filter((app) => app !== null);\n\n const sessionState = getDeviceSessionState();\n const updatedState = {\n ...sessionState,\n installedApps: filterted,\n };\n try {\n saveSessionState(updatedState);\n sendBack({ type: \"done\" });\n } catch (error) {\n sendBack({ type: \"error\", error });\n }\n },\n ),\n },\n guards: {\n hasError: ({ context }: { context: types[\"context\"] }) => {\n return context._internalState.error !== null;\n },\n hasNoAppsInstalled: ({ context }: { context: types[\"context\"] }) =>\n context._internalState.apps.length === 0,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: _.event[\"error\"], // NOTE: it should never happen, the error is not typed anymore here\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QBkCWsAuBBADj2A6qhgBYCyYGAhhFdQCJgBuqAxmFqxqgPYB2AOkYt2AJTA0AngGIA2gAYAuolA4esYrz4qQAD0QBGAJzyBADgBsAdgNWAzPIAs8+TceOANCEmILAJjMBKwsHOyMjAzN7SIBfGK80TFx8IlIKaloGZjYOLi0BROw8WGkIfjABVD4mHgBrCoAbdCL8BWUkEDUNbn4dfQQAVgCBIz9IgacQ6z8-Lx8Ef1N5OwsBlbs7dyNHCziE5uTCYnJKGjoqYRzOHsFCw+kwACdHnkeBHAa6ADNXgFsBJpJYptHRdTS9Dr9IaBUbjSYrKwzOaIMwGAQTFx2MxmOx+AYDKxGAZ7EB3YqpE4Zc6XdjXfJk-AAYRIYFYtTkSlB6nB2khKKGAj89jCRjCFmWdmRCD8LiCGIMMysqIsCpJDKOaVOmQu2VpeX4BQOxWZrPZsgM7VU3JufX5fkFwvCYolUqVjkFyxlA3FeO9VjVRpSx3SZyyIlyN0NQKZLLZcj8ls61q0toQZgFQo2TqM4o2UosjjsQRC8iFa1GfiJAejGspoZ14bpBoAYpRWHXtaVypVqnUKjAWrAAEKSAASVFgJBBHTBNr5CAM7gsAkcY3TZmW-iMiPzm0Flkc2PX8gMTmrg4pIe1NIj+VbGHbV-OD2er3enwwP0e-wHhxH48nacrW6FN50XHYVzXAYNxWSsd28RA7GMQUMUcaCLFFTZdniUlA1rJ8wyufVBHvR8tXOE04yApMQIhUB+kiVYBFLTYbBmPwCwsKUdjRRxghVMwAlWSIjHPQ5L3Iwi9UjUiOwo2MzQtLlaN5ejDEsAZmL8ViFRmTj8wLSDt3kbFtzGZYxPJYNJIbIjIwAZSoJgwHsuANH4Ls+DAajZ1AtTpQ4wJnH8UyHB9fNgiMjCzCdcUzEcSyg01KkpNvA1HOc1zYHcvgXxeR4fOTOi9EQPSgvkEKYrC0spQJIwRn4pw8QLAwQjiHC+B4CA4B0dUJJS2zpL8mieVTABaLiEIQMbNPCOb5vmyxEvwmybybQQb3EKRlNG+dV3zIVizCxwc3sPxlv6+s1uIqNBx2ud-ICWa1lPexsWMb18ycQUS3FfEFTsb0LusgbrsjdVKNqe7hv6CwogECwCxPQGhSsNCjHzVdmIMMKBgMBV8eMYHkqu3U0pIts5OoaHioY093QCEwMNFJV5Gg-NInRHGKoqnNSzR4mqcG8mBFkgiqEhmnVJKhdVndQTlncKxXCsfF829H6HFsEJvSFbD9hrS7rzJ9aBAyly3OG3zadK-nzAGUUzKsQlxQxqaQnq2xt1XNnnBMuxBfFsH8nsgBXVh2GyqXUzxCqBEB7YxlXGLIisV0cy5sLlcR53RUD1aTZugBRV9Hmj+dY+XBPV0XRnU9qyxzGiiqNwmOxgnamIgA */\n id: \"ListAppsWithMetadataDeviceAction\",\n initial: \"DeviceReady\",\n context: (_) => {\n return {\n input: _.input,\n _internalState: {\n error: null,\n apps: [],\n appsWithMetadata: [],\n },\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n };\n },\n states: {\n DeviceReady: {\n always: {\n target: \"ListApps\",\n },\n },\n ListApps: {\n invoke: {\n id: \"listApps\",\n src: \"listApps\",\n input: (_) => ({\n unlockTimeout: _.context.input.unlockTimeout,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) =>\n _.event.snapshot.context.intermediateValue,\n }),\n },\n onDone: {\n target: \"ListAppsCheck\",\n actions: assign({\n intermediateValue: (_) => ({\n requiredUserInteraction: UserInteractionRequired.None,\n }),\n _internalState: (_) => {\n return _.event.output.caseOf({\n Right: (apps) => ({\n ..._.context._internalState,\n apps,\n }),\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n });\n },\n }),\n },\n },\n },\n ListAppsCheck: {\n always: [\n {\n target: \"Error\",\n guard: \"hasError\",\n },\n {\n target: \"Success\",\n guard: \"hasNoAppsInstalled\",\n actions: assign({\n _internalState: (_) => {\n return {\n ..._.context._internalState,\n appsWithMetadata: [],\n };\n },\n }),\n },\n {\n target: \"FetchMetadata\",\n },\n ],\n },\n FetchMetadata: {\n invoke: {\n id: \"getAppsByHash\",\n src: \"getAppsByHash\",\n input: (_) => _.context._internalState.apps,\n onDone: {\n target: \"FetchMetadataCheck\",\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf({\n Right: (appsWithMetadata) => ({\n ..._.context._internalState,\n appsWithMetadata,\n }),\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n });\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n FetchMetadataCheck: {\n always: [\n {\n target: \"Error\",\n guard: \"hasError\",\n },\n {\n target: \"SaveSession\",\n },\n ],\n },\n SaveSession: {\n invoke: {\n src: \"saveSessionState\",\n input: (_) => ({\n appsWithMetadata: _.context._internalState.appsWithMetadata,\n }),\n },\n on: {\n done: {\n target: \"Success\",\n },\n error: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n Success: {\n type: \"final\",\n },\n Error: {\n type: \"final\",\n },\n },\n output: (_) => {\n if (_.context._internalState.error) {\n return Left(_.context._internalState.error);\n }\n\n return Right(_.context._internalState.appsWithMetadata);\n },\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n return {\n getAppsByHash: ({ input }) => internalApi.getMetadataForAppHashes(input),\n getDeviceSessionState: () => internalApi.getDeviceSessionState(),\n saveSessionState: (state: DeviceSessionState) =>\n internalApi.setDeviceSessionState(state),\n };\n }\n}\n", "import { Left, Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport { isSuccessCommandResult } from \"@api/command/model/CommandResult\";\nimport {\n CloseAppCommand,\n CloseAppCommandResult,\n} from \"@api/command/os/CloseAppCommand\";\nimport {\n GetAppAndVersionCommand,\n GetAppAndVersionCommandResult,\n} from \"@api/command/os/GetAppAndVersionCommand\";\nimport {\n OpenAppCommand,\n OpenAppCommandResult,\n} from \"@api/command/os/OpenAppCommand\";\nimport { DeviceStatus } from \"@api/device/DeviceStatus\";\nimport { InternalApi } from \"@api/device-action/DeviceAction\";\nimport { UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport {\n DeviceLockedError,\n DeviceNotOnboardedError,\n} from \"@api/device-action/os/Errors\";\nimport { StateMachineTypes } from \"@api/device-action/xstate-utils/StateMachineTypes\";\nimport {\n DeviceActionStateMachine,\n XStateDeviceAction,\n} from \"@api/device-action/xstate-utils/XStateDeviceAction\";\nimport {\n DeviceSessionState,\n DeviceSessionStateType,\n} from \"@api/device-session/DeviceSessionState\";\n\nimport {\n OpenAppDAError,\n OpenAppDAInput,\n OpenAppDAIntermediateValue,\n OpenAppDAOutput,\n} from \"./types\";\n\ntype OpenAppStateMachineInternalState = {\n readonly currentlyRunningApp: string | null;\n readonly error: OpenAppDAError | null;\n};\n\nexport type MachineDependencies = {\n readonly getAppAndVersion: () => Promise<GetAppAndVersionCommandResult>;\n readonly closeApp: () => Promise<CloseAppCommandResult>;\n readonly openApp: (arg0: {\n input: { appName: string };\n }) => Promise<OpenAppCommandResult>;\n readonly getDeviceSessionState: () => DeviceSessionState;\n readonly setDeviceSessionState: (state: DeviceSessionState) => void;\n readonly isDeviceOnboarded: () => boolean;\n};\n\nexport type ExtractMachineDependencies = (\n internalApi: InternalApi,\n) => MachineDependencies;\n\n/**\n * Opens a given app on the device.\n *\n * It checks if the device is onboarded, unlocked, and which app is currently open.\n * If the current app is the dashboard, it will directly open the requested app.\n * If another app is opened, it will close the current app and open the requested app.\n *\n * Example of usage:\n *\n * ```ts\n * const deviceAction = new OpenAppDeviceAction({\n * input: {\n * appName: \"MyApp\",\n * },\n * });\n * sdk.executeDeviceAction({ sessionId: \"mySessionId\", deviceAction });\n * ```\n */\nexport class OpenAppDeviceAction extends XStateDeviceAction<\n OpenAppDAOutput,\n OpenAppDAInput,\n OpenAppDAError,\n OpenAppDAIntermediateValue,\n OpenAppStateMachineInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n OpenAppDAOutput,\n OpenAppDAInput,\n OpenAppDAError,\n OpenAppDAIntermediateValue,\n OpenAppStateMachineInternalState\n > {\n type types = StateMachineTypes<\n OpenAppDAOutput,\n OpenAppDAInput,\n OpenAppDAError,\n OpenAppDAIntermediateValue,\n OpenAppStateMachineInternalState\n >;\n\n const {\n getAppAndVersion,\n closeApp,\n openApp,\n getDeviceSessionState,\n setDeviceSessionState,\n isDeviceOnboarded,\n } = this.extractDependencies(internalApi);\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n getAppAndVersion: fromPromise(getAppAndVersion),\n closeApp: fromPromise(closeApp),\n openApp: fromPromise(openApp),\n },\n guards: {\n isDeviceOnboarded: () => isDeviceOnboarded(), // TODO: we don't have this info for now, this can be derived from the \"flags\" obtained in the getVersion command\n isDeviceUnlocked: () =>\n getDeviceSessionState().deviceStatus !== DeviceStatus.LOCKED,\n isRequestedAppOpen: ({ context }: { context: types[\"context\"] }) => {\n if (context._internalState.currentlyRunningApp === null)\n throw new Error(\"context.currentlyRunningApp === null\");\n return (\n context._internalState.currentlyRunningApp === context.input.appName\n );\n },\n isDashboardOpen: ({ context }: { context: types[\"context\"] }) => {\n if (context._internalState.currentlyRunningApp === null)\n throw new Error(\"context.currentlyRunningApp === null\");\n return context._internalState.currentlyRunningApp === \"BOLOS\";\n },\n hasError: ({ context }) => context._internalState.error !== null,\n },\n actions: {\n assignErrorDeviceNotOnboarded: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: new DeviceNotOnboardedError(),\n }),\n }),\n assignErrorDeviceLocked: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: new DeviceLockedError(),\n }),\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.UnlockDevice,\n },\n }),\n assignUserActionNeededOpenApp: assign({\n intermediateValue: (_) =>\n ({\n ..._.context.intermediateValue,\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n }) satisfies types[\"context\"][\"intermediateValue\"],\n }),\n assignNoUserActionNeeded: assign({\n intermediateValue: (_) =>\n ({\n ..._.context.intermediateValue,\n requiredUserInteraction: UserInteractionRequired.None,\n }) satisfies types[\"context\"][\"intermediateValue\"],\n }),\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: _.event[\"error\"], // FIXME: add a typeguard\n }),\n }),\n assignNoError: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: null,\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QHkAOYB2BBVqAiYAbgJYDGYWpALsQPYYB0BJ5ASmAIYQCeAxANoAGALqJQqWrGI16YkAA9EARhWCGADgAsAZm1b1SwUoDspgDQhuiAEzX1DbQE5tJlQDYlm414CsAXz8LNEwcfCIyCmo6RmQMACNaDgAnCGIMKABhAAswUgBrARE5CSkZDDlFBCUPbQYfZx91H0FtTRNjCysEbWM1bTdHAzcfH2q9awCg9GxcZgjKMoZYhOTU9Ozcgv4lUSQQEuloiuUauoamlrbzSxtBNTu7pW1BEe1rJUmQYJmwlkjFgAytHyaUyOXyhV24kkh1ke0q7w8DDcxmqjkM1l6Kh8nUQzR8DEEjjcz3UxKUjiMbk+31Cc3IC2iDCBIPW4K2O2KMLKxwQiKUyNRAwxWKUOJu3TaDFsw28bkExmsgnU-Rp0zp4QZUXoDFCABsyBwylhCBxiHqOHE9WBeBB6GAGGlCLQ8g7abNNf8mfrDcbTebLdaEE7gUbokJhBGuaUjvCbCSCdZNI5UQqhg1cQhNOprAxND4XP0xZTHI01SEPX9GTqfaQw-QTWaLVabWAkklaEkGKgLVQAGadgC2S3Vlfm2sYtfr2H9zaDIbrZQjUb2Bx5cb5CelydTxnT2nFXTcmjUBYTzlazkcE0CX1Hv3HiynfqbgbA7FgAFc9VQNhCV9CMZwqAlQuAWZwHiqbStI0mY+PmdRKNYxLZmKgjvDeUwVg+WpPrgBqLtEjYBi2H7fr+7ICJyq7crGIGIK0LwME8dzJuizzNNYmZeLmAysZ4Ph2KYmiaOWPz0l6Nb4b60R-lsRQ0UB5Qbq0pgMM4FJ8dYx4KpomaOJo6k9G4yHvEhBmYmJGpVhOurSYR9ByVRUL7LRwEKAxYq1PUkGtE8+ZaJmBh1A8hieMh17vFZY64UyeAcLAWQrCkTkAa5Sm8tY-TIkmlJvFojjXuocHysiegvB4JJ6P4t7ujhkmMPFiXJRAqXUYBsLKfRfLZSZyYtHYbF2JmQoaMeIweEmJjHtF9XVowGR6pIFD2dOtr2o6GDOq6I7YRJ80MIty3PtEwZbaGS4iGla50R5CBVYSJkFncbzGC4mYoo4zHlfUCo+KieizfttlHbAK09jJ9C8G2HZdj2RoDkkw51cDiyg+DBHTmdzoORgy4KR167dQ9ghPc8A1vUomZIQqeZksmTw9JoJlA56B3oyd9BkT+qUE+lnW8iohgaDoeioUYpgdBKQu5sz8rEgYxjwaJtX3qjTIc6tZTcxRmzOdGAsbqoagmM8Yr-aTTyOCNpXWAW-TGIMfmO6zNmLHVmNlOtGAOiGO0o2ztke5DGDYxd4ZXXzN3uZU1RPBBjTNM7UtdAWxjqQZ6gqv0LyO9oruPkywe49D7adt2vaI8jauB+796e6dC7TvjLnR11d1x955xJ1cKeIAZ6dGEJqJKk4qqq3ttdF-XIc67zrdue3CLVG4gqZyMpbGG4bhBeoq9b-mB7jaTZYT+JU86sX05z5R2wLxlG78oKYpNKW16mx9x6EkhWdGKTSvXgLrFKSENcbsC4Hwa6i9eQHgQgmCkIlBjKmcEFUY24ejaSTMeCkHxPgYFoBAOAcgA5u1um3XkABaHeEoKEEkKvQwQJ4XjKl6ErIBDUmCenATwA2RM7rknUm4FUhV-oiTJFTCUth05j0xJVFUTxt7sIOssRIKRQRyV4bdWOTNkTqDekqAwbxNDIUzFIhwzhZHVHkf0akZ9rKFx1CyPI6j2SaJjsoUsBIBimB8MMeUZJqFdH6PYDwKYBjwQaEYpRtlOYzlfC2NxS8bB6HsM4RUIwiSH0VNxAy6lkL1EEjTYUtisLn1ISAhuDZZxvhvpsRJmVX51FJFlZ4-Qk5wUYcxR2BTTIGUKtEvCoDpwaMUobbqugUzIg8PmEwIiTJ9yqAMaUW90IngCaIgZcUEpJVUa1Vxoy+GVGMbvZiuVf5IM8CoTZOpNZDL4eQjcIlDLIRRH5FhoxDyIGFMiASe8IoFlGNchaS0waxNqfkepG4tACiMGeQw6IiQeBGncMaMycxEl8eoIFu0fiVPbg87qSE3q6MVBpehPQ4K6G+uoZUJIVB7laNiq+2s4DkRGYTLRygs6GSQtmO4iIaWljgvUBgip-K5RErofOdiYocLBZwHhBzOWSkKqKz6Lw3i6U+QgPchlTB7xTPBeCWVHDYoAMqflIOQWA8AlXuO6KMQylImipgMi4BZzhDIKkpM0FEypRimplXNWyABRMuSRIXjNaKvHQ3h0Q0reCYT+3khGNEKgqIRxgAgBCAA */\n id: \"OpenAppDeviceAction\",\n initial: \"DeviceReady\",\n context: ({ input }) => {\n const sessionState = getDeviceSessionState();\n const { sessionStateType } = sessionState;\n return {\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n _internalState: {\n error: null,\n currentlyRunningApp:\n sessionStateType ===\n DeviceSessionStateType.ReadyWithoutSecureChannel\n ? sessionState.currentApp.name\n : null,\n },\n };\n },\n states: {\n DeviceReady: {\n // check device capabilities & status known\n always: {\n target: \"OnboardingCheck\",\n },\n },\n\n OnboardingCheck: {\n // check onboarding status provided by device session\n always: [\n {\n target: \"LockingCheck\",\n guard: {\n type: \"isDeviceOnboarded\",\n },\n },\n {\n target: \"Error\",\n actions: \"assignErrorDeviceNotOnboarded\",\n },\n ],\n },\n\n LockingCheck: {\n // check locking status provided by device session\n always: [\n {\n target: \"ApplicationAvailable\",\n guard: \"isDeviceUnlocked\",\n },\n {\n target: \"Error\",\n actions: \"assignErrorDeviceLocked\",\n },\n ],\n },\n\n ApplicationAvailable: {\n // execute getAppAndVersion command\n invoke: {\n src: \"getAppAndVersion\",\n onDone: {\n target: \"ApplicationAvailableResultCheck\",\n actions: assign({\n _internalState: (_) => {\n if (isSuccessCommandResult(_.event.output)) {\n const state: DeviceSessionState = getDeviceSessionState();\n // Narrow the type to ReadyWithoutSecureChannelState or ReadyWithSecureChannelState\n if (\n state.sessionStateType !==\n DeviceSessionStateType.Connected\n ) {\n setDeviceSessionState({\n ...state,\n currentApp: _.event.output.data,\n });\n }\n return {\n ..._.context._internalState,\n currentlyRunningApp: _.event.output.data.name,\n };\n } else {\n return {\n ..._.context._internalState,\n error: _.event.output.error,\n };\n }\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n\n ApplicationAvailableResultCheck: {\n always: [\n {\n target: \"Error\",\n guard: \"hasError\",\n },\n {\n target: \"ApplicationCheck\",\n },\n ],\n },\n\n ApplicationCheck: {\n // Is the current application the requested one\n always: [\n {\n target: \"ApplicationReady\",\n guard: \"isRequestedAppOpen\",\n },\n \"DashboardCheck\",\n ],\n },\n\n DashboardCheck: {\n // Is the current application the dashboard\n always: [\n {\n target: \"OpenApplication\",\n guard: \"isDashboardOpen\",\n },\n \"CloseApplication\",\n ],\n },\n\n CloseApplication: {\n invoke: {\n src: \"closeApp\",\n onDone: {\n target: \"CloseApplicationResultCheck\",\n actions: assign({\n _internalState: (_) => {\n if (isSuccessCommandResult(_.event.output)) {\n return {\n ..._.context._internalState,\n currentlyRunningApp: \"BOLOS\",\n };\n } else {\n return {\n ..._.context._internalState,\n error: _.event.output.error,\n };\n }\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n CloseApplicationResultCheck: {\n always: [\n {\n target: \"Error\",\n guard: \"hasError\",\n },\n { target: \"OpenApplication\" },\n ],\n },\n\n OpenApplication: {\n // execute openApp command,\n entry: \"assignUserActionNeededOpenApp\",\n exit: \"assignNoUserActionNeeded\",\n invoke: {\n src: \"openApp\",\n input: ({ context }) => ({ appName: context.input.appName }),\n onDone: {\n target: \"OpenApplicationResultCheck\",\n actions: assign({\n _internalState: (_) => {\n if (isSuccessCommandResult(_.event.output)) {\n return {\n ..._.context._internalState,\n currentlyRunningApp: _.context.input.appName,\n };\n } else {\n return {\n ..._.context._internalState,\n error: _.event.output.error,\n };\n }\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n\n OpenApplicationResultCheck: {\n always: [\n {\n target: \"Error\",\n guard: \"hasError\",\n },\n { target: \"ApplicationAvailable\" },\n ],\n },\n\n ApplicationReady: {\n // application is ready to be used\n always: \"Success\",\n },\n\n // success state\n Success: {\n type: \"final\",\n actions: \"assignNoError\", // TODO, we should not need this\n },\n\n // error state\n Error: {\n type: \"final\",\n },\n },\n output: ({ context }) =>\n context._internalState.error // TODO: instead we should rely on the current state (\"Success\" or \"Error\")\n ? Left(context._internalState.error)\n : Right(undefined),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const getAppAndVersion = async () =>\n internalApi.sendCommand(new GetAppAndVersionCommand());\n const closeApp = async () => internalApi.sendCommand(new CloseAppCommand());\n const openApp = async (arg0: { input: { appName: string } }) =>\n internalApi.sendCommand(\n new OpenAppCommand({ appName: arg0.input.appName }),\n );\n\n return {\n getAppAndVersion,\n closeApp,\n openApp,\n getDeviceSessionState: () => internalApi.getDeviceSessionState(),\n setDeviceSessionState: (state: DeviceSessionState) =>\n internalApi.setDeviceSessionState(state),\n isDeviceOnboarded: () => true, // TODO: we don't have this info for now, this can be derived from the \"flags\" obtained in the getVersion command\n };\n }\n}\n", "import { Left, Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport {\n CommandResult,\n isSuccessCommandResult,\n} from \"@api/command/model/CommandResult\";\nimport { InternalApi } from \"@api/device-action/DeviceAction\";\nimport { UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport { UnknownDAError } from \"@api/device-action/os/Errors\";\nimport { OpenAppDeviceAction } from \"@api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction\";\nimport { StateMachineTypes } from \"@api/device-action/xstate-utils/StateMachineTypes\";\nimport {\n DeviceActionStateMachine,\n XStateDeviceAction,\n} from \"@api/device-action/xstate-utils/XStateDeviceAction\";\nimport { Command } from \"@api/types\";\n\nimport {\n SendCommandInAppDAError,\n SendCommandInAppDAInput,\n SendCommandInAppDAIntermediateValue,\n SendCommandInAppDAInternalState,\n SendCommandInAppDAOutput,\n} from \"./SendCommandInAppDeviceActionTypes\";\n\n/**\n * Tries to open an app on the device, and if it is successful, sends a command\n * to the app.\n * The output will be the result of the command.\n *\n * ```ts\n * input: {\n * appName: string;\n * command: Command<CommandResult, CommandArgs>;\n * requiredUserInteraction: UserInteraction;\n * }\n * ```\n *\n * Example of usage:\n *\n * ```ts\n * const deviceAction = new SendCommandInAppDeviceAction({\n * input: {\n * appName: \"MyApp\",\n * command: new MyAppSpecificCommand({commandSpecificArg: \"foo\"}),\n * requiredUserInteraction: UserInteractionRequired.None,\n * },\n * });\n * sdk.executeDeviceAction({ sessionId: \"mySessionId\", deviceAction });\n * ```\n */\nexport class SendCommandInAppDeviceAction<\n CommandResponse,\n CommandArgs,\n CommandErrorCodes,\n UserInteraction extends UserInteractionRequired,\n> extends XStateDeviceAction<\n SendCommandInAppDAOutput<CommandResponse>,\n SendCommandInAppDAInput<\n CommandResponse,\n CommandArgs,\n CommandErrorCodes,\n UserInteraction\n >,\n SendCommandInAppDAError<CommandErrorCodes>,\n SendCommandInAppDAIntermediateValue<UserInteraction>,\n SendCommandInAppDAInternalState<CommandResponse, CommandErrorCodes>\n> {\n makeStateMachine(\n internalAPI: InternalApi,\n ): DeviceActionStateMachine<\n SendCommandInAppDAOutput<CommandResponse>,\n SendCommandInAppDAInput<\n CommandResponse,\n CommandArgs,\n CommandErrorCodes,\n UserInteraction\n >,\n SendCommandInAppDAError<CommandErrorCodes>,\n SendCommandInAppDAIntermediateValue<UserInteraction>,\n SendCommandInAppDAInternalState<CommandResponse, CommandErrorCodes>\n > {\n type types = StateMachineTypes<\n SendCommandInAppDAOutput<CommandResponse>,\n SendCommandInAppDAInput<\n CommandResponse,\n CommandArgs,\n CommandErrorCodes,\n UserInteraction\n >,\n SendCommandInAppDAError<CommandErrorCodes>,\n SendCommandInAppDAIntermediateValue<UserInteraction>,\n SendCommandInAppDAInternalState<CommandResponse, CommandErrorCodes>\n >;\n\n const { sendCommand } = this.extractDependencies(internalAPI);\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n sendCommand: fromPromise(sendCommand),\n openAppStateMachine: new OpenAppDeviceAction({\n input: { appName: this.input.appName },\n }).makeStateMachine(internalAPI),\n },\n guards: {\n noInternalError: ({ context }) => context._internalState.error === null,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: _.event[\"error\"], // NOTE: it should never happen, the error is not typed anymore here\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QFEAuALA0mAngJwEsA7KAcTFQEEII85YARMANwIGMxK3UCB7IgHQB5AA5gilESKasOXHvwDEEfmAHFmvANZreYiVIDKqAIaowAWRNt0xMAG0ADAF1EoEb1gEFRNyAAeiACMQQDsAgAcACwAzKEArABMUfGpEQCcEYkANCA4iFGO8QKhjokxERUpQenp8QC+9bloWLiEJORUNHSwjCzsnNx8ggDC6GBsWqLiktL9ckP8AEpwAK4ANqiKTq5IIB5ePn6BCEFR4YkAbKE1Zemh55URufkI8fcC8TGXl0EVoelHJcio1mhhsPhiGQKNRaPQZAN5MMBGMJlN9LMEQsfCtYBstvYgrt3J5vMNjgUQgJLokHlEgldko50rEXoh3uEvj8-hEAUCQU0QC0Ie1oV04b0sYMfAJOrCerARrwALbKkxECDKVTqIiaHQCGDihVK1XqiA7PwHMn8CmnRJBASOFIxKJXJ21GLpHJ5RARGoCEL3CKXDLpS4pCKgoXgtpQuXdeHzaXI+MSxUqtUaxRgPB4Xh4AQidZmABm+eVBphCd6Jsz5pcltJRz2Jyiv0dvIeNJi8UqoWePoQIccn3iId+sSqkajRF4EDgfmFsY6VbTUqRNr2VuboBOAFpLmzTpd0iV+0EkkEylcAVEo0vISujYnZMn+MIMVJ14tfFum+SWwKb1XkSMdIhuQFEidYNSjvQUH1FVMFW-GVUUmaYDDmV8NyIXF8UbQ4AN3X0ogEF17S9eJQhiJ0ojbI8khHc54mvRwGUBXl7xjR8xXlF9ER-WVV2NDMzQI61f2IhBXUdRw5NDX54gvXkjx+CIzxuMdfnKd44LBVoeKQ-jsWRQxVjYDhenEncAmCcMBHKBlqKyIEYivGIjzDGJqQSYMamDa4BX0kU42E4y30EZBc3zayiNshBSmKFjqn7GCMgHV57lIz0aT9P0lL+S5GkaIA */\n id: \"SendCommandInAppDeviceAction\",\n initial: \"OpenAppDeviceAction\",\n context: ({ input }) => {\n return {\n input: input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n _internalState: {\n commandResponse: null,\n error: null,\n },\n };\n },\n states: {\n OpenAppDeviceAction: {\n invoke: {\n id: \"openAppStateMachine\",\n input: { appName: this.input.appName },\n src: \"openAppStateMachine\",\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) =>\n _.event.snapshot.context.intermediateValue,\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<\n SendCommandInAppDAInternalState<\n CommandResponse,\n CommandErrorCodes\n >\n >({\n Right: () => _.context._internalState,\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n });\n },\n }),\n target: \"CheckOpenAppDeviceActionResult\",\n },\n },\n },\n CheckOpenAppDeviceActionResult: {\n always: [\n {\n target: \"SendCommand\",\n guard: \"noInternalError\",\n },\n \"Error\",\n ],\n },\n SendCommand: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: this.input.requiredUserInteraction,\n },\n }),\n exit: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n }),\n invoke: {\n id: \"sendCommand\",\n src: \"sendCommand\",\n input: ({ context }) => context.input.command,\n onDone: {\n target: \"SendCommandResultCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessCommandResult(event.output)) {\n return {\n ...context._internalState,\n commandResponse: event.output.data,\n };\n }\n return {\n ...context._internalState,\n error: event.output.error,\n };\n },\n }),\n ],\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n SendCommandResultCheck: {\n always: [\n {\n target: \"Success\",\n guard: \"noInternalError\",\n },\n \"Error\",\n ],\n },\n Success: {\n type: \"final\",\n },\n Error: {\n type: \"final\",\n },\n },\n output: ({ context }) =>\n context._internalState.commandResponse\n ? Right(context._internalState.commandResponse)\n : Left(\n context._internalState.error ||\n new UnknownDAError(\"No error in final state\"),\n ),\n });\n }\n\n extractDependencies(internalApi: InternalApi) {\n return {\n sendCommand: (_: {\n input: Command<CommandResponse, CommandArgs, CommandErrorCodes>;\n }): Promise<CommandResult<CommandResponse, CommandErrorCodes>> =>\n internalApi.sendCommand(_.input),\n };\n }\n}\n", "export function isBase64String(value: string): boolean {\n // Valid base64 characters are [A-Za-z0-9+/]\n // They are always grouped by 4 characters.\n // Optional padding at the end with one or two '='.\n // see section 4 of: https://www.rfc-editor.org/rfc/rfc4648.txt\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(\n value,\n );\n}\n\nexport function base64StringToBuffer(value: string): Uint8Array | null {\n if (value.length === 0) {\n return new Uint8Array();\n }\n if (!isBase64String(value)) {\n return null;\n }\n try {\n // Use the browser implementation of atob\n const base64Decoded = atob(value);\n const buffer = new Uint8Array(base64Decoded.length);\n for (let i = 0; i < base64Decoded.length; i++) {\n buffer[i] = base64Decoded.charCodeAt(i);\n }\n return buffer;\n } catch (_error: unknown) {\n // Use the implementation of Buffer for environments such as node\n return Uint8Array.from(Buffer.from(value, \"base64\"));\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["CommandResultStatus", "version", "BatteryStatusType", "DeviceModelId", "DeviceStatus", "import_inversify", "import_inversify", "import_inversify", "import_inversify", "import_inversify", "import_inversify", "import_inversify", "import_inversify", "import_purify_ts", "import_inversify", "import_purify_ts", "version", "import_inversify", "import_purify_ts", "import_inversify", "import_inversify", "import_inversify", "import_inversify", "semver", "import_inversify", "import_inversify", "import_purify_ts", "uuid", "loggerModuleFactory", "import_inversify", "import_purify_ts", "import_uuid", "import_inversify", "import_purify_ts", "loggerModuleFactory", "import_inversify", "import_inversify", "import_inversify", "import_inversify", "import_inversify", "import_rxjs", "import_uuid", "DeviceSessionStateType", "import_inversify", "uuidv4", "loggerModuleFactory", "import_inversify", "import_inversify", "import_inversify", "import_rxjs", "import_inversify", "import_inversify", "import_inversify", "LogLevel", "import_inversify", "import_inversify", "import_purify_ts", "axios", "import_inversify", "import_purify_ts", "fromPromise", "import_inversify", "import_inversify", "import_inversify", "BuiltinTransports", "import_inversify", "import_purify_ts", "import_rxjs", "import_inversify", "import_purify_ts", "import_rxjs", "import_uuid", "uuid", "import_inversify", "import_inversify", "import_purify_ts", "import_inversify", "import_purify_ts", "import_rxjs", "DeviceActionStatus", "UserInteractionRequired", "import_purify_ts", "import_rxjs", "import_xstate", "import_rxjs", "import_purify_ts", "import_xstate", "import_purify_ts", "import_xstate", "import_purify_ts", "import_xstate", "import_purify_ts", "import_xstate", "import_purify_ts", "import_xstate"]
3
+ "sources": ["../../index.ts"],
4
+ "sourcesContent": ["export * from \"./src\";\n"],
5
+ "mappings": "iaAAA,IAAAA,EAAA,kBAAAC,EAAAD,GAAAE,EAAAF,EAAc,iBAAd",
6
+ "names": ["device_management_kit_exports", "__toCommonJS", "__reExport"]
7
7
  }