@ledgerhq/device-management-kit 0.0.0-rnble-transport-20250327112620 → 0.0.0-rnble-transport-20250331135728

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 (264) hide show
  1. package/README.md +21 -5
  2. package/lib/cjs/src/api/DeviceManagementKit.js.map +2 -2
  3. package/lib/cjs/src/api/command/use-case/SendCommandUseCase.test.js +1 -1
  4. package/lib/cjs/src/api/command/use-case/SendCommandUseCase.test.js.map +3 -3
  5. package/lib/cjs/src/api/device-action/__test-utils__/setupTestMachine.js +1 -1
  6. package/lib/cjs/src/api/device-action/__test-utils__/setupTestMachine.js.map +3 -3
  7. package/lib/cjs/src/api/device-session/use-case/DisableDeviceSessionRefresher.test.js +1 -1
  8. package/lib/cjs/src/api/device-session/use-case/DisableDeviceSessionRefresher.test.js.map +3 -3
  9. package/lib/cjs/src/api/index.js +1 -1
  10. package/lib/cjs/src/api/index.js.map +3 -3
  11. package/lib/cjs/src/api/logger-subscriber/service/WebLogsExporterLogger.test.js +1 -1
  12. package/lib/cjs/src/api/logger-subscriber/service/WebLogsExporterLogger.test.js.map +3 -3
  13. package/lib/cjs/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.js.map +2 -2
  14. package/lib/cjs/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.test.js +1 -1
  15. package/lib/cjs/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.test.js.map +3 -3
  16. package/lib/cjs/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.js +2 -0
  17. package/lib/cjs/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.js.map +7 -0
  18. package/lib/cjs/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.test.js +2 -0
  19. package/lib/cjs/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.test.js.map +7 -0
  20. package/lib/cjs/src/api/secure-channel/device-action/InstallApp/types.js +2 -0
  21. package/lib/cjs/src/api/secure-channel/device-action/InstallApp/types.js.map +7 -0
  22. package/lib/cjs/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.js.map +2 -2
  23. package/lib/cjs/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.test.js +1 -1
  24. package/lib/cjs/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.test.js.map +3 -3
  25. package/lib/cjs/src/api/secure-channel/device-action/ListInstalledApps/types.js +1 -1
  26. package/lib/cjs/src/api/secure-channel/device-action/ListInstalledApps/types.js.map +2 -2
  27. package/lib/cjs/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.js +2 -0
  28. package/lib/cjs/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.js.map +7 -0
  29. package/lib/cjs/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.test.js +2 -0
  30. package/lib/cjs/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.test.js.map +7 -0
  31. package/lib/cjs/src/api/secure-channel/device-action/UninstallApp/types.js +2 -0
  32. package/lib/cjs/src/api/secure-channel/device-action/UninstallApp/types.js.map +7 -0
  33. package/lib/cjs/src/api/secure-channel/utils.test.js +1 -1
  34. package/lib/cjs/src/api/secure-channel/utils.test.js.map +2 -2
  35. package/lib/cjs/src/api/transport/model/TransportConnectedDevice.test.js +1 -1
  36. package/lib/cjs/src/api/transport/model/TransportConnectedDevice.test.js.map +3 -3
  37. package/lib/cjs/src/api/types.js +1 -1
  38. package/lib/cjs/src/api/types.js.map +1 -1
  39. package/lib/cjs/src/internal/device-session/data/DeviceSessionRefresherConst.js +1 -1
  40. package/lib/cjs/src/internal/device-session/data/DeviceSessionRefresherConst.js.map +3 -3
  41. package/lib/cjs/src/internal/device-session/model/DevicePinger.js +2 -0
  42. package/lib/cjs/src/internal/device-session/model/DevicePinger.js.map +7 -0
  43. package/lib/cjs/src/internal/device-session/model/DevicePinger.test.js +2 -0
  44. package/lib/cjs/src/internal/device-session/model/DevicePinger.test.js.map +7 -0
  45. package/lib/cjs/src/internal/device-session/model/DeviceSession.js +1 -1
  46. package/lib/cjs/src/internal/device-session/model/DeviceSession.js.map +3 -3
  47. package/lib/cjs/src/internal/device-session/model/DeviceSession.stub.js +1 -1
  48. package/lib/cjs/src/internal/device-session/model/DeviceSession.stub.js.map +3 -3
  49. package/lib/cjs/src/internal/device-session/model/DeviceSessionEventDispatcher.js +2 -0
  50. package/lib/cjs/src/internal/device-session/model/DeviceSessionEventDispatcher.js.map +7 -0
  51. package/lib/cjs/src/internal/device-session/model/DeviceSessionEventDispatcher.test.js +2 -0
  52. package/lib/cjs/src/internal/device-session/model/DeviceSessionEventDispatcher.test.js.map +7 -0
  53. package/lib/cjs/src/internal/device-session/model/DeviceSessionRefresher.js +1 -1
  54. package/lib/cjs/src/internal/device-session/model/DeviceSessionRefresher.js.map +3 -3
  55. package/lib/cjs/src/internal/device-session/model/DeviceSessionRefresher.test.js +1 -1
  56. package/lib/cjs/src/internal/device-session/model/DeviceSessionRefresher.test.js.map +3 -3
  57. package/lib/cjs/src/internal/device-session/model/DeviceSessionStateHandler.js +2 -0
  58. package/lib/cjs/src/internal/device-session/model/DeviceSessionStateHandler.js.map +7 -0
  59. package/lib/cjs/src/internal/device-session/model/DeviceSessionStateHandler.test.js +2 -0
  60. package/lib/cjs/src/internal/device-session/model/DeviceSessionStateHandler.test.js.map +7 -0
  61. package/lib/cjs/src/internal/device-session/service/DefaultDeviceSessionService.test.js +1 -1
  62. package/lib/cjs/src/internal/device-session/service/DefaultDeviceSessionService.test.js.map +3 -3
  63. package/lib/cjs/src/internal/device-session/service/MutexService.js +2 -0
  64. package/lib/cjs/src/internal/device-session/service/MutexService.js.map +7 -0
  65. package/lib/cjs/src/internal/device-session/service/MutexService.test.js +2 -0
  66. package/lib/cjs/src/internal/device-session/service/MutexService.test.js.map +7 -0
  67. package/lib/cjs/src/internal/device-session/service/RefresherService.js +1 -1
  68. package/lib/cjs/src/internal/device-session/service/RefresherService.js.map +3 -3
  69. package/lib/cjs/src/internal/device-session/service/RefresherService.test.js +1 -1
  70. package/lib/cjs/src/internal/device-session/service/RefresherService.test.js.map +3 -3
  71. package/lib/cjs/src/internal/device-session/use-case/CloseSessionsUseCase.test.js +1 -1
  72. package/lib/cjs/src/internal/device-session/use-case/CloseSessionsUseCase.test.js.map +3 -3
  73. package/lib/cjs/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.js +1 -1
  74. package/lib/cjs/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.js.map +3 -3
  75. package/lib/cjs/src/internal/device-session/utils/deviceSessionUtils.js +2 -0
  76. package/lib/cjs/src/internal/device-session/utils/deviceSessionUtils.js.map +7 -0
  77. package/lib/cjs/src/internal/discovery/use-case/ConnectUseCase.js +1 -1
  78. package/lib/cjs/src/internal/discovery/use-case/ConnectUseCase.js.map +3 -3
  79. package/lib/cjs/src/internal/discovery/use-case/DisconnectUseCase.test.js +1 -1
  80. package/lib/cjs/src/internal/discovery/use-case/DisconnectUseCase.test.js.map +3 -3
  81. package/lib/cjs/src/internal/discovery/use-case/GetConnectedDeviceUseCase.test.js +1 -1
  82. package/lib/cjs/src/internal/discovery/use-case/GetConnectedDeviceUseCase.test.js.map +3 -3
  83. package/lib/cjs/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.js +1 -1
  84. package/lib/cjs/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.js.map +3 -3
  85. package/lib/cjs/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.js +1 -1
  86. package/lib/cjs/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.js.map +3 -3
  87. package/lib/cjs/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.js +1 -1
  88. package/lib/cjs/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.js.map +3 -3
  89. package/lib/cjs/src/internal/manager-api/data/AxiosManagerApiDataSource.test.js +1 -1
  90. package/lib/cjs/src/internal/manager-api/data/AxiosManagerApiDataSource.test.js.map +2 -2
  91. package/lib/cjs/src/internal/secure-channel/data/DefaultSecureChannelDataSource.test.js +1 -1
  92. package/lib/cjs/src/internal/secure-channel/data/DefaultSecureChannelDataSource.test.js.map +2 -2
  93. package/lib/cjs/src/internal/secure-channel/model/Params.js +1 -1
  94. package/lib/cjs/src/internal/secure-channel/model/Params.js.map +1 -1
  95. package/lib/cjs/src/internal/secure-channel/service/DefaultSecureChannelService.js +1 -1
  96. package/lib/cjs/src/internal/secure-channel/service/DefaultSecureChannelService.js.map +3 -3
  97. package/lib/cjs/src/internal/secure-channel/service/DefaultSecureChannelService.test.js +1 -1
  98. package/lib/cjs/src/internal/secure-channel/service/DefaultSecureChannelService.test.js.map +3 -3
  99. package/lib/cjs/src/internal/secure-channel/service/SecureChannelService.js +1 -1
  100. package/lib/cjs/src/internal/secure-channel/service/SecureChannelService.js.map +1 -1
  101. package/lib/cjs/src/internal/send/use-case/SendApduUseCase.test.js +1 -1
  102. package/lib/cjs/src/internal/send/use-case/SendApduUseCase.test.js.map +3 -3
  103. package/lib/esm/src/api/DeviceManagementKit.js.map +2 -2
  104. package/lib/esm/src/api/command/use-case/SendCommandUseCase.test.js +1 -1
  105. package/lib/esm/src/api/command/use-case/SendCommandUseCase.test.js.map +3 -3
  106. package/lib/esm/src/api/device-action/__test-utils__/setupTestMachine.js +1 -1
  107. package/lib/esm/src/api/device-action/__test-utils__/setupTestMachine.js.map +3 -3
  108. package/lib/esm/src/api/device-session/use-case/DisableDeviceSessionRefresher.test.js +1 -1
  109. package/lib/esm/src/api/device-session/use-case/DisableDeviceSessionRefresher.test.js.map +3 -3
  110. package/lib/esm/src/api/index.js +1 -1
  111. package/lib/esm/src/api/index.js.map +3 -3
  112. package/lib/esm/src/api/logger-subscriber/service/WebLogsExporterLogger.test.js +1 -1
  113. package/lib/esm/src/api/logger-subscriber/service/WebLogsExporterLogger.test.js.map +3 -3
  114. package/lib/esm/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.js.map +2 -2
  115. package/lib/esm/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.test.js +1 -1
  116. package/lib/esm/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.test.js.map +3 -3
  117. package/lib/esm/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.js +2 -0
  118. package/lib/esm/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.js.map +7 -0
  119. package/lib/esm/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.test.js +2 -0
  120. package/lib/esm/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.test.js.map +7 -0
  121. package/lib/esm/src/api/secure-channel/device-action/InstallApp/types.js +1 -0
  122. package/lib/esm/src/api/secure-channel/device-action/InstallApp/types.js.map +7 -0
  123. package/lib/esm/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.js.map +2 -2
  124. package/lib/esm/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.test.js +1 -1
  125. package/lib/esm/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.test.js.map +3 -3
  126. package/lib/esm/src/api/secure-channel/device-action/ListInstalledApps/types.js.map +2 -2
  127. package/lib/esm/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.js +2 -0
  128. package/lib/esm/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.js.map +7 -0
  129. package/lib/esm/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.test.js +2 -0
  130. package/lib/esm/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.test.js.map +7 -0
  131. package/lib/esm/src/api/secure-channel/device-action/UninstallApp/types.js +1 -0
  132. package/lib/esm/src/api/secure-channel/device-action/UninstallApp/types.js.map +7 -0
  133. package/lib/esm/src/api/secure-channel/utils.test.js +1 -1
  134. package/lib/esm/src/api/secure-channel/utils.test.js.map +2 -2
  135. package/lib/esm/src/api/transport/model/TransportConnectedDevice.test.js +1 -1
  136. package/lib/esm/src/api/transport/model/TransportConnectedDevice.test.js.map +3 -3
  137. package/lib/esm/src/internal/device-session/data/DeviceSessionRefresherConst.js +1 -1
  138. package/lib/esm/src/internal/device-session/data/DeviceSessionRefresherConst.js.map +3 -3
  139. package/lib/esm/src/internal/device-session/model/DevicePinger.js +2 -0
  140. package/lib/esm/src/internal/device-session/model/DevicePinger.js.map +7 -0
  141. package/lib/esm/src/internal/device-session/model/DevicePinger.test.js +2 -0
  142. package/lib/esm/src/internal/device-session/model/DevicePinger.test.js.map +7 -0
  143. package/lib/esm/src/internal/device-session/model/DeviceSession.js +1 -1
  144. package/lib/esm/src/internal/device-session/model/DeviceSession.js.map +3 -3
  145. package/lib/esm/src/internal/device-session/model/DeviceSession.stub.js +1 -1
  146. package/lib/esm/src/internal/device-session/model/DeviceSession.stub.js.map +3 -3
  147. package/lib/esm/src/internal/device-session/model/DeviceSessionEventDispatcher.js +2 -0
  148. package/lib/esm/src/internal/device-session/model/DeviceSessionEventDispatcher.js.map +7 -0
  149. package/lib/esm/src/internal/device-session/model/DeviceSessionEventDispatcher.test.js +2 -0
  150. package/lib/esm/src/internal/device-session/model/DeviceSessionEventDispatcher.test.js.map +7 -0
  151. package/lib/esm/src/internal/device-session/model/DeviceSessionRefresher.js +1 -1
  152. package/lib/esm/src/internal/device-session/model/DeviceSessionRefresher.js.map +3 -3
  153. package/lib/esm/src/internal/device-session/model/DeviceSessionRefresher.test.js +1 -1
  154. package/lib/esm/src/internal/device-session/model/DeviceSessionRefresher.test.js.map +3 -3
  155. package/lib/esm/src/internal/device-session/model/DeviceSessionStateHandler.js +2 -0
  156. package/lib/esm/src/internal/device-session/model/DeviceSessionStateHandler.js.map +7 -0
  157. package/lib/esm/src/internal/device-session/model/DeviceSessionStateHandler.test.js +2 -0
  158. package/lib/esm/src/internal/device-session/model/DeviceSessionStateHandler.test.js.map +7 -0
  159. package/lib/esm/src/internal/device-session/service/DefaultDeviceSessionService.test.js +1 -1
  160. package/lib/esm/src/internal/device-session/service/DefaultDeviceSessionService.test.js.map +3 -3
  161. package/lib/esm/src/internal/device-session/service/MutexService.js +2 -0
  162. package/lib/esm/src/internal/device-session/service/MutexService.js.map +7 -0
  163. package/lib/esm/src/internal/device-session/service/MutexService.test.js +2 -0
  164. package/lib/esm/src/internal/device-session/service/MutexService.test.js.map +7 -0
  165. package/lib/esm/src/internal/device-session/service/RefresherService.js +1 -1
  166. package/lib/esm/src/internal/device-session/service/RefresherService.js.map +3 -3
  167. package/lib/esm/src/internal/device-session/service/RefresherService.test.js +1 -1
  168. package/lib/esm/src/internal/device-session/service/RefresherService.test.js.map +3 -3
  169. package/lib/esm/src/internal/device-session/use-case/CloseSessionsUseCase.test.js +1 -1
  170. package/lib/esm/src/internal/device-session/use-case/CloseSessionsUseCase.test.js.map +3 -3
  171. package/lib/esm/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.js +1 -1
  172. package/lib/esm/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.js.map +3 -3
  173. package/lib/esm/src/internal/device-session/utils/deviceSessionUtils.js +2 -0
  174. package/lib/esm/src/internal/device-session/utils/deviceSessionUtils.js.map +7 -0
  175. package/lib/esm/src/internal/discovery/use-case/ConnectUseCase.js +1 -1
  176. package/lib/esm/src/internal/discovery/use-case/ConnectUseCase.js.map +3 -3
  177. package/lib/esm/src/internal/discovery/use-case/DisconnectUseCase.test.js +1 -1
  178. package/lib/esm/src/internal/discovery/use-case/DisconnectUseCase.test.js.map +3 -3
  179. package/lib/esm/src/internal/discovery/use-case/GetConnectedDeviceUseCase.test.js +1 -1
  180. package/lib/esm/src/internal/discovery/use-case/GetConnectedDeviceUseCase.test.js.map +3 -3
  181. package/lib/esm/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.js +1 -1
  182. package/lib/esm/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.js.map +3 -3
  183. package/lib/esm/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.js +1 -1
  184. package/lib/esm/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.js.map +3 -3
  185. package/lib/esm/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.js +1 -1
  186. package/lib/esm/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.js.map +3 -3
  187. package/lib/esm/src/internal/manager-api/data/AxiosManagerApiDataSource.test.js +1 -1
  188. package/lib/esm/src/internal/manager-api/data/AxiosManagerApiDataSource.test.js.map +2 -2
  189. package/lib/esm/src/internal/secure-channel/data/DefaultSecureChannelDataSource.test.js +1 -1
  190. package/lib/esm/src/internal/secure-channel/data/DefaultSecureChannelDataSource.test.js.map +2 -2
  191. package/lib/esm/src/internal/secure-channel/service/DefaultSecureChannelService.js +1 -1
  192. package/lib/esm/src/internal/secure-channel/service/DefaultSecureChannelService.js.map +3 -3
  193. package/lib/esm/src/internal/secure-channel/service/DefaultSecureChannelService.test.js +1 -1
  194. package/lib/esm/src/internal/secure-channel/service/DefaultSecureChannelService.test.js.map +3 -3
  195. package/lib/esm/src/internal/send/use-case/SendApduUseCase.test.js +1 -1
  196. package/lib/esm/src/internal/send/use-case/SendApduUseCase.test.js.map +3 -3
  197. package/lib/types/src/api/DeviceManagementKit.d.ts +5 -1
  198. package/lib/types/src/api/DeviceManagementKit.d.ts.map +1 -1
  199. package/lib/types/src/api/device-action/__test-utils__/setupTestMachine.d.ts +4 -0
  200. package/lib/types/src/api/device-action/__test-utils__/setupTestMachine.d.ts.map +1 -1
  201. package/lib/types/src/api/index.d.ts +2 -0
  202. package/lib/types/src/api/index.d.ts.map +1 -1
  203. package/lib/types/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.d.ts +3 -3
  204. package/lib/types/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.d.ts.map +1 -1
  205. package/lib/types/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.test.d.ts +1 -0
  206. package/lib/types/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.d.ts +8 -0
  207. package/lib/types/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.d.ts.map +1 -0
  208. package/lib/types/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.test.d.ts +2 -0
  209. package/lib/types/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.test.d.ts.map +1 -0
  210. package/lib/types/src/api/secure-channel/device-action/InstallApp/types.d.ts +44 -0
  211. package/lib/types/src/api/secure-channel/device-action/InstallApp/types.d.ts.map +1 -0
  212. package/lib/types/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.d.ts +3 -3
  213. package/lib/types/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.d.ts.map +1 -1
  214. package/lib/types/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.test.d.ts +1 -0
  215. package/lib/types/src/api/secure-channel/device-action/ListInstalledApps/types.d.ts +1 -3
  216. package/lib/types/src/api/secure-channel/device-action/ListInstalledApps/types.d.ts.map +1 -1
  217. package/lib/types/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.d.ts +8 -0
  218. package/lib/types/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.d.ts.map +1 -0
  219. package/lib/types/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.test.d.ts +2 -0
  220. package/lib/types/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.test.d.ts.map +1 -0
  221. package/lib/types/src/api/secure-channel/device-action/UninstallApp/types.d.ts +41 -0
  222. package/lib/types/src/api/secure-channel/device-action/UninstallApp/types.d.ts.map +1 -0
  223. package/lib/types/src/api/types.d.ts +2 -0
  224. package/lib/types/src/api/types.d.ts.map +1 -1
  225. package/lib/types/src/internal/device-session/data/DeviceSessionRefresherConst.d.ts +6 -1
  226. package/lib/types/src/internal/device-session/data/DeviceSessionRefresherConst.d.ts.map +1 -1
  227. package/lib/types/src/internal/device-session/model/DevicePinger.d.ts +18 -0
  228. package/lib/types/src/internal/device-session/model/DevicePinger.d.ts.map +1 -0
  229. package/lib/types/src/internal/device-session/model/DevicePinger.test.d.ts +2 -0
  230. package/lib/types/src/internal/device-session/model/DevicePinger.test.d.ts.map +1 -0
  231. package/lib/types/src/internal/device-session/model/DeviceSession.d.ts +18 -11
  232. package/lib/types/src/internal/device-session/model/DeviceSession.d.ts.map +1 -1
  233. package/lib/types/src/internal/device-session/model/DeviceSession.stub.d.ts +2 -2
  234. package/lib/types/src/internal/device-session/model/DeviceSession.stub.d.ts.map +1 -1
  235. package/lib/types/src/internal/device-session/model/DeviceSessionEventDispatcher.d.ts +35 -0
  236. package/lib/types/src/internal/device-session/model/DeviceSessionEventDispatcher.d.ts.map +1 -0
  237. package/lib/types/src/internal/device-session/model/DeviceSessionEventDispatcher.test.d.ts +2 -0
  238. package/lib/types/src/internal/device-session/model/DeviceSessionEventDispatcher.test.d.ts.map +1 -0
  239. package/lib/types/src/internal/device-session/model/DeviceSessionRefresher.d.ts +17 -79
  240. package/lib/types/src/internal/device-session/model/DeviceSessionRefresher.d.ts.map +1 -1
  241. package/lib/types/src/internal/device-session/model/DeviceSessionStateHandler.d.ts +20 -0
  242. package/lib/types/src/internal/device-session/model/DeviceSessionStateHandler.d.ts.map +1 -0
  243. package/lib/types/src/internal/device-session/model/DeviceSessionStateHandler.test.d.ts +2 -0
  244. package/lib/types/src/internal/device-session/model/DeviceSessionStateHandler.test.d.ts.map +1 -0
  245. package/lib/types/src/internal/device-session/service/MutexService.d.ts +7 -0
  246. package/lib/types/src/internal/device-session/service/MutexService.d.ts.map +1 -0
  247. package/lib/types/src/internal/device-session/service/MutexService.test.d.ts +2 -0
  248. package/lib/types/src/internal/device-session/service/MutexService.test.d.ts.map +1 -0
  249. package/lib/types/src/internal/device-session/service/RefresherService.d.ts +7 -2
  250. package/lib/types/src/internal/device-session/service/RefresherService.d.ts.map +1 -1
  251. package/lib/types/src/internal/device-session/utils/deviceSessionUtils.d.ts +3 -0
  252. package/lib/types/src/internal/device-session/utils/deviceSessionUtils.d.ts.map +1 -0
  253. package/lib/types/src/internal/discovery/use-case/ConnectUseCase.d.ts +8 -1
  254. package/lib/types/src/internal/discovery/use-case/ConnectUseCase.d.ts.map +1 -1
  255. package/lib/types/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.d.ts +1 -1
  256. package/lib/types/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.d.ts.map +1 -1
  257. package/lib/types/src/internal/secure-channel/model/Params.d.ts +3 -5
  258. package/lib/types/src/internal/secure-channel/model/Params.d.ts.map +1 -1
  259. package/lib/types/src/internal/secure-channel/service/DefaultSecureChannelService.d.ts +6 -6
  260. package/lib/types/src/internal/secure-channel/service/DefaultSecureChannelService.d.ts.map +1 -1
  261. package/lib/types/src/internal/secure-channel/service/SecureChannelService.d.ts +39 -5
  262. package/lib/types/src/internal/secure-channel/service/SecureChannelService.d.ts.map +1 -1
  263. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  264. package/package.json +2 -2
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.test.ts"],
4
- "sourcesContent": ["describe.todo(\"ListInstalledAppsDeviceAction\");\n"],
5
- "mappings": "AAAA,SAAS,KAAK,+BAA+B",
6
- "names": []
4
+ "sourcesContent": ["import { Left, Right } from \"purify-ts\";\nimport { concat, of, throwError } from \"rxjs\";\n\nimport { CommandResultFactory } from \"@api/command/model/CommandResult\";\nimport { DeviceStatus } from \"@api/device/DeviceStatus\";\nimport { makeDeviceActionInternalApiMock } from \"@api/device-action/__test-utils__/makeInternalApi\";\nimport { setupGoToDashboardMock } from \"@api/device-action/__test-utils__/setupTestMachine\";\nimport { testDeviceActionStates } from \"@api/device-action/__test-utils__/testDeviceActionStates\";\nimport { DeviceActionStatus } from \"@api/device-action/model/DeviceActionState\";\nimport { UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport { DeviceSessionStateType } from \"@api/device-session/DeviceSessionState\";\nimport {\n type SecureChannelEventPayload,\n SecureChannelEventType,\n} from \"@api/secure-channel/task/types\";\nimport { type DeviceVersion } from \"@internal/manager-api/model/Device\";\nimport { HttpFetchApiError } from \"@internal/manager-api/model/Errors\";\nimport { type FinalFirmware } from \"@internal/manager-api/model/Firmware\";\nimport { SecureChannelError } from \"@internal/secure-channel/model/Errors\";\n\nimport { ListInstalledAppsDeviceAction } from \"./ListInstalledAppsDeviceAction\";\nimport { type ListInstalledAppsDAState } from \"./types\";\n\nvi.mock(\"@api/device-action/os/GoToDashboard/GoToDashboardDeviceAction\");\n\ndescribe(\"ListInstalledAppsDeviceAction\", () => {\n const getOsVersionMock = vi.fn();\n const getDeviceVersionMock = vi.fn();\n const getFirmwareVersionMock = vi.fn();\n const listInstalledAppsMock = vi.fn();\n const getDeviceSessionStateMock = vi.fn();\n const setDeviceSessionStateMock = vi.fn();\n\n const extractDependenciesMock = () => ({\n getOsVersion: getOsVersionMock,\n getDeviceVersion: getDeviceVersionMock,\n getFirmwareVersion: getFirmwareVersionMock,\n listInstalledApps: listInstalledAppsMock,\n getDeviceSessionState: getDeviceSessionStateMock,\n setDeviceSessionState: setDeviceSessionStateMock,\n });\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n it(\"should return a list that contains all installed apps on the device\", () =>\n new Promise<void>((resolve, reject) => {\n setupGoToDashboardMock();\n getOsVersionMock.mockResolvedValue(\n CommandResultFactory({\n data: {\n targetId: \"123456\",\n secureElementFlags: {\n isSecureConnectionAllowed: true,\n },\n },\n }),\n );\n getDeviceVersionMock.mockResolvedValue(\n Right({ id: 123456 } as DeviceVersion),\n );\n getFirmwareVersionMock.mockResolvedValue(\n Right({ perso: \"perso_test\" } as FinalFirmware),\n );\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"BOLOS\", version: \"0.0.0\" },\n isSecureConnectionAllowed: false,\n });\n listInstalledAppsMock.mockReturnValue(\n of(\n {\n type: SecureChannelEventType.Exchange,\n },\n {\n type: SecureChannelEventType.Result,\n payload: [\n {\n flags: 123456,\n hash: \"hash_test\",\n hash_code_data: \"hash_code_data_test\",\n name: \"Bitcoin\",\n },\n ],\n },\n ),\n );\n\n const expectedStates: Array<ListInstalledAppsDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: {\n installedApps: [\n {\n flags: 123456,\n hash: \"hash_test\",\n hash_code_data: \"hash_code_data_test\",\n name: \"Bitcoin\",\n },\n ],\n },\n },\n ];\n\n const listInstalledAppsDeviceAction = new ListInstalledAppsDeviceAction({\n input: {},\n });\n vi.spyOn(\n listInstalledAppsDeviceAction,\n \"extractDependencies\",\n ).mockImplementation(extractDependenciesMock);\n\n testDeviceActionStates(\n listInstalledAppsDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n it(\"should return error when error occurs in fetching device version\", () =>\n new Promise<void>((resolve, reject) => {\n setupGoToDashboardMock();\n getOsVersionMock.mockResolvedValue(\n CommandResultFactory({\n data: {\n targetId: \"123456\",\n secureElementFlags: {\n isSecureConnectionAllowed: false,\n },\n },\n }),\n );\n getDeviceVersionMock.mockResolvedValue(\n Left(new HttpFetchApiError(\"Device version fetch failed\")),\n );\n getFirmwareVersionMock.mockResolvedValue(\n Right({ perso: \"perso_test\" } as FinalFirmware),\n );\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"BOLOS\", version: \"0.0.0\" },\n isSecureConnectionAllowed: false,\n });\n listInstalledAppsMock.mockReturnValue(\n of(\n {\n type: SecureChannelEventType.Exchange,\n payload: {\n data: new Uint8Array([0x00, 0x01, 0x02, 0x03]),\n } as SecureChannelEventPayload[\"Exchange\"],\n },\n {\n type: SecureChannelEventType.Result,\n payload: [],\n },\n ),\n );\n\n const expectedStates: Array<ListInstalledAppsDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new HttpFetchApiError(\"Device version fetch failed\"),\n },\n ];\n\n const listInstalledAppsDeviceAction = new ListInstalledAppsDeviceAction({\n input: {},\n });\n vi.spyOn(\n listInstalledAppsDeviceAction,\n \"extractDependencies\",\n ).mockImplementation(extractDependenciesMock);\n\n testDeviceActionStates(\n listInstalledAppsDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n it(\"should return error when error occurs in fetching firmware version\", () =>\n new Promise<void>((resolve, reject) => {\n setupGoToDashboardMock();\n getOsVersionMock.mockResolvedValue(\n CommandResultFactory({\n data: {\n targetId: \"123456\",\n secureElementFlags: {\n isSecureConnectionAllowed: false,\n },\n },\n }),\n );\n getDeviceVersionMock.mockResolvedValue(\n Right({ id: 123456 } as DeviceVersion),\n );\n getFirmwareVersionMock.mockResolvedValue(\n Left(new HttpFetchApiError(\"Firmware version fetch failed\")),\n );\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"BOLOS\", version: \"0.0.0\" },\n isSecureConnectionAllowed: false,\n });\n listInstalledAppsMock.mockReturnValue(\n of(\n {\n type: SecureChannelEventType.Exchange,\n payload: {\n data: new Uint8Array([0x00, 0x01, 0x02, 0x03]),\n } as SecureChannelEventPayload[\"Exchange\"],\n },\n {\n type: SecureChannelEventType.Result,\n payload: [],\n },\n ),\n );\n\n const expectedStates: Array<ListInstalledAppsDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new HttpFetchApiError(\"Firmware version fetch failed\"),\n },\n ];\n\n const listInstalledAppsDeviceAction = new ListInstalledAppsDeviceAction({\n input: {},\n });\n vi.spyOn(\n listInstalledAppsDeviceAction,\n \"extractDependencies\",\n ).mockImplementation(extractDependenciesMock);\n\n testDeviceActionStates(\n listInstalledAppsDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n it(\"should return error when error occurs in communicating with secure channel\", () =>\n new Promise<void>((resolve, reject) => {\n setupGoToDashboardMock();\n getOsVersionMock.mockResolvedValue(\n CommandResultFactory({\n data: {\n targetId: \"123456\",\n secureElementFlags: {\n isSecureConnectionAllowed: false,\n },\n },\n }),\n );\n getDeviceVersionMock.mockResolvedValue(\n Right({ id: 123456 } as DeviceVersion),\n );\n getFirmwareVersionMock.mockResolvedValue(\n Right({ perso: \"perso_test\" } as FinalFirmware),\n );\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"BOLOS\", version: \"0.0.0\" },\n isSecureConnectionAllowed: false,\n });\n listInstalledAppsMock.mockReturnValue(\n concat(\n of({\n type: SecureChannelEventType.Exchange,\n payload: {\n data: new Uint8Array([0x00, 0x01, 0x02, 0x03]),\n } as SecureChannelEventPayload[\"Exchange\"],\n }),\n throwError(() => new SecureChannelError(\"Secure channel error\")),\n ),\n );\n\n const expectedStates: Array<ListInstalledAppsDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new SecureChannelError(\"Secure channel error\"),\n },\n ];\n\n const listInstalledAppsDeviceAction = new ListInstalledAppsDeviceAction({\n input: {},\n });\n vi.spyOn(\n listInstalledAppsDeviceAction,\n \"extractDependencies\",\n ).mockImplementation(extractDependenciesMock);\n\n testDeviceActionStates(\n listInstalledAppsDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["Left", "Right", "concat", "of", "throwError", "CommandResultFactory", "DeviceStatus", "makeDeviceActionInternalApiMock", "setupGoToDashboardMock", "testDeviceActionStates", "DeviceActionStatus", "UserInteractionRequired", "DeviceSessionStateType", "SecureChannelEventType", "HttpFetchApiError", "SecureChannelError", "ListInstalledAppsDeviceAction", "getOsVersionMock", "getDeviceVersionMock", "getFirmwareVersionMock", "listInstalledAppsMock", "getDeviceSessionStateMock", "setDeviceSessionStateMock", "extractDependenciesMock", "resolve", "reject", "expectedStates", "listInstalledAppsDeviceAction"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/api/secure-channel/device-action/ListInstalledApps/types.ts"],
4
- "sourcesContent": ["import { type EitherAsync } from \"purify-ts\";\nimport { type Observable } from \"rxjs\";\n\nimport { type CommandErrorResult } from \"@api/command/model/CommandResult\";\nimport {\n type GetOsVersionCommandResult,\n type GetOsVersionResponse,\n} from \"@api/command/os/GetOsVersionCommand\";\nimport { type DeviceActionState } from \"@api/device-action/model/DeviceActionState\";\nimport { type UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport { type UnknownDAError } from \"@api/device-action/os/Errors\";\nimport {\n type GoToDashboardDAError,\n type GoToDashboardDAInput,\n} from \"@api/device-action/os/GoToDashboard/types\";\nimport { type DeviceSessionState } from \"@api/device-session/DeviceSessionState\";\nimport { type SecureChannelEvent } from \"@api/secure-channel/task/types\";\nimport { type DeviceVersion } from \"@internal/manager-api/model/Device\";\nimport { type HttpFetchApiError } from \"@internal/manager-api/model/Errors\";\nimport { type FinalFirmware } from \"@internal/manager-api/model/Firmware\";\n\nexport type Input<T> = { input: T };\n\nexport type ListInstalledAppsDAOutput = {\n installedApps: Array<InstalledApp>;\n};\n\nexport type ListInstalledAppsDAInput = GoToDashboardDAInput;\n\nexport type ListInstalledAppsDAError =\n | CommandErrorResult[\"error\"]\n | GoToDashboardDAError\n | HttpFetchApiError\n | UnknownDAError;\n\nexport type ListInstalledAppsDARequiredInteraction =\n | UserInteractionRequired.None\n | UserInteractionRequired.UnlockDevice\n | UserInteractionRequired.AllowSecureConnection;\n\nexport type ListInstalledAppsDAIntermediateValue = {\n requiredUserInteraction: ListInstalledAppsDARequiredInteraction;\n};\n\nexport type ListInstalledAppsDAState = DeviceActionState<\n ListInstalledAppsDAOutput,\n ListInstalledAppsDAError,\n ListInstalledAppsDAIntermediateValue\n>;\n\nexport type ListInstalledAppsStateMachineInternalState = {\n error: ListInstalledAppsDAError | null;\n result: { installedApps: Array<InstalledApp> };\n getOsVersionResponse: GetOsVersionResponse | null;\n deviceVersion: DeviceVersion | null;\n firmwareVersion: FinalFirmware | null;\n};\n\nexport type MachineDependencies = {\n getOsVersion: () => Promise<GetOsVersionCommandResult>;\n getDeviceVersion: (\n args: Input<{ deviceInfo: GetOsVersionResponse }>,\n ) => EitherAsync<HttpFetchApiError, DeviceVersion>;\n getFirmwareVersion: (\n args: Input<{\n deviceInfo: GetOsVersionResponse;\n deviceVersion: DeviceVersion;\n }>,\n ) => EitherAsync<HttpFetchApiError, FinalFirmware>;\n listInstalledApps: (\n args: Input<{\n deviceInfo: GetOsVersionResponse;\n finalFirmware: FinalFirmware;\n }>,\n ) => Observable<SecureChannelEvent>;\n getDeviceSessionState: () => DeviceSessionState;\n setDeviceSessionState: (state: DeviceSessionState) => DeviceSessionState;\n};\n\nexport type InstalledApp = {\n flags: number;\n hash: string;\n hash_code_data: string;\n name: string;\n};\n\nexport function installedAppResultGuard(\n value: unknown,\n): value is ListInstalledAppsDAOutput[\"installedApps\"] {\n return (\n Array.isArray(value) &&\n value.every(\n (item) =>\n typeof item === \"object\" &&\n item !== null &&\n \"flags\" in item &&\n \"hash\" in item &&\n \"hash_code_data\" in item &&\n \"name\" in item &&\n typeof item.flags === \"number\" &&\n typeof item.hash === \"string\" &&\n typeof item.hash_code_data === \"string\" &&\n typeof item.name === \"string\",\n )\n );\n}\n"],
5
- "mappings": "AAsFO,SAASA,EACdC,EACqD,CACrD,OACE,MAAM,QAAQA,CAAK,GACnBA,EAAM,MACHC,GACC,OAAOA,GAAS,UAChBA,IAAS,MACT,UAAWA,GACX,SAAUA,GACV,mBAAoBA,GACpB,SAAUA,GACV,OAAOA,EAAK,OAAU,UACtB,OAAOA,EAAK,MAAS,UACrB,OAAOA,EAAK,gBAAmB,UAC/B,OAAOA,EAAK,MAAS,QACzB,CAEJ",
4
+ "sourcesContent": ["import { type EitherAsync } from \"purify-ts\";\nimport { type Observable } from \"rxjs\";\n\nimport { type CommandErrorResult } from \"@api/command/model/CommandResult\";\nimport {\n type GetOsVersionCommandResult,\n type GetOsVersionResponse,\n} from \"@api/command/os/GetOsVersionCommand\";\nimport { type DeviceActionState } from \"@api/device-action/model/DeviceActionState\";\nimport { type UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport { type UnknownDAError } from \"@api/device-action/os/Errors\";\nimport {\n type GoToDashboardDAError,\n type GoToDashboardDAInput,\n} from \"@api/device-action/os/GoToDashboard/types\";\nimport { type DeviceSessionState } from \"@api/device-session/DeviceSessionState\";\nimport { type SecureChannelEvent } from \"@api/secure-channel/task/types\";\nimport { type Input } from \"@api/secure-channel/types\";\nimport { type DeviceVersion } from \"@internal/manager-api/model/Device\";\nimport { type HttpFetchApiError } from \"@internal/manager-api/model/Errors\";\nimport { type FinalFirmware } from \"@internal/manager-api/model/Firmware\";\n\nexport type ListInstalledAppsDAOutput = {\n installedApps: Array<InstalledApp>;\n};\n\nexport type ListInstalledAppsDAInput = GoToDashboardDAInput;\n\nexport type ListInstalledAppsDAError =\n | CommandErrorResult[\"error\"]\n | GoToDashboardDAError\n | HttpFetchApiError\n | UnknownDAError;\n\nexport type ListInstalledAppsDARequiredInteraction =\n | UserInteractionRequired.None\n | UserInteractionRequired.UnlockDevice\n | UserInteractionRequired.AllowSecureConnection;\n\nexport type ListInstalledAppsDAIntermediateValue = {\n requiredUserInteraction: ListInstalledAppsDARequiredInteraction;\n};\n\nexport type ListInstalledAppsDAState = DeviceActionState<\n ListInstalledAppsDAOutput,\n ListInstalledAppsDAError,\n ListInstalledAppsDAIntermediateValue\n>;\n\nexport type ListInstalledAppsStateMachineInternalState = {\n error: ListInstalledAppsDAError | null;\n result: { installedApps: Array<InstalledApp> };\n getOsVersionResponse: GetOsVersionResponse | null;\n deviceVersion: DeviceVersion | null;\n firmwareVersion: FinalFirmware | null;\n};\n\nexport type MachineDependencies = {\n getOsVersion: () => Promise<GetOsVersionCommandResult>;\n getDeviceVersion: (\n args: Input<{ deviceInfo: GetOsVersionResponse }>,\n ) => EitherAsync<HttpFetchApiError, DeviceVersion>;\n getFirmwareVersion: (\n args: Input<{\n deviceInfo: GetOsVersionResponse;\n deviceVersion: DeviceVersion;\n }>,\n ) => EitherAsync<HttpFetchApiError, FinalFirmware>;\n listInstalledApps: (\n args: Input<{\n deviceInfo: GetOsVersionResponse;\n finalFirmware: FinalFirmware;\n }>,\n ) => Observable<SecureChannelEvent>;\n getDeviceSessionState: () => DeviceSessionState;\n setDeviceSessionState: (state: DeviceSessionState) => DeviceSessionState;\n};\n\nexport type InstalledApp = {\n flags: number;\n hash: string;\n hash_code_data: string;\n name: string;\n};\n\nexport function installedAppResultGuard(\n value: unknown,\n): value is ListInstalledAppsDAOutput[\"installedApps\"] {\n return (\n Array.isArray(value) &&\n value.every(\n (item) =>\n typeof item === \"object\" &&\n item !== null &&\n \"flags\" in item &&\n \"hash\" in item &&\n \"hash_code_data\" in item &&\n \"name\" in item &&\n typeof item.flags === \"number\" &&\n typeof item.hash === \"string\" &&\n typeof item.hash_code_data === \"string\" &&\n typeof item.name === \"string\",\n )\n );\n}\n"],
5
+ "mappings": "AAqFO,SAASA,EACdC,EACqD,CACrD,OACE,MAAM,QAAQA,CAAK,GACnBA,EAAM,MACHC,GACC,OAAOA,GAAS,UAChBA,IAAS,MACT,UAAWA,GACX,SAAUA,GACV,mBAAoBA,GACpB,SAAUA,GACV,OAAOA,EAAK,OAAU,UACtB,OAAOA,EAAK,MAAS,UACrB,OAAOA,EAAK,gBAAmB,UAC/B,OAAOA,EAAK,MAAS,QACzB,CAEJ",
6
6
  "names": ["installedAppResultGuard", "value", "item"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ import{Left as g,Right as D}from"purify-ts";import{assign as a,fromObservable as I,fromPromise as d,setup as v}from"xstate";import{isSuccessCommandResult as y}from"../../../command/model/CommandResult";import{GetOsVersionCommand as f}from"../../../command/os/GetOsVersionCommand";import{UserInteractionRequired as p}from"../../../device-action/model/UserInteractionRequired";import{DEFAULT_UNLOCK_TIMEOUT_MS as E}from"../../../device-action/os/Const";import{UnknownDAError as A}from"../../../device-action/os/Errors";import{GoToDashboardDeviceAction as U}from"../../../device-action/os/GoToDashboard/GoToDashboardDeviceAction";import{XStateDeviceAction as x}from"../../../device-action/xstate-utils/XStateDeviceAction";import{DeviceSessionStateType as O}from"../../../device-session/DeviceSessionState";import{ListInstalledAppsDeviceAction as V}from"../../../secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction";import{ConnectToSecureChannelTask as k}from"../../../secure-channel/task/ConnectToSecureChannelTask";import{SecureChannelEventType as m}from"../../../secure-channel/task/types";class P extends x{makeStateMachine(n){const{getOsVersion:l,getAppsByHash:c,uninstallApp:u,getDeviceSessionState:r,setDeviceSessionState:o}=this.extractDependencies(n),s=this.input.unlockTimeout??E,i=new U({input:{unlockTimeout:s}}).makeStateMachine(n),S=new V({input:{unlockTimeout:s}}).makeStateMachine(n);return v({types:{input:{},context:{},output:{}},actors:{listInstalledApps:S,goToDashboard:i,getOsVersion:d(l),getAppsByHash:d(c),uninstallApp:I(u)},guards:{hasError:t=>t.context._internalState.error!==null,appNotInstalled:t=>!t.context._internalState.installedApps.some(e=>e.name===t.context.input.appName),appNotFound:t=>t.context._internalState.appList.findIndex(e=>e?.versionName===t.context.input.appName)===-1,isDepAppOfOther:t=>t.context._internalState.appList.some(e=>e?.parentName===t.context.input.appName)},actions:{assignErrorFromEvent:a({_internalState:t=>({...t.context._internalState,error:t.event.error})}),assignAppNotFound:a({_internalState:t=>({...t.context._internalState,error:new A("App to uninstall not found in manager API")})}),assignIsDepAppOfOther:a({_internalState:t=>({...t.context._internalState,error:new A("App to uninstall is a dependency of another installed app")})})}}).createMachine({id:"UninstallAppDeviceAction",initial:"DeviceReady",context:t=>({input:{unlockTimeout:t.input.unlockTimeout,appName:t.input.appName},intermediateValue:{requiredUserInteraction:p.None},_internalState:{error:null,installedApps:[],appList:[],getOsVersionResponse:null}}),states:{DeviceReady:{always:{target:"ListInstalledApps"}},ListInstalledApps:{invoke:{id:"listInstalledApps",src:"listInstalledApps",input:t=>({unlockTimeout:t.context.input.unlockTimeout}),onSnapshot:{actions:a({intermediateValue:t=>({...t.context.intermediateValue,requiredUserInteraction:t.event.snapshot.context.intermediateValue.requiredUserInteraction})})},onDone:{target:"ListInstalledAppsCheck",actions:a({_internalState:t=>t.event.output.caseOf({Right:({installedApps:e})=>({...t.context._internalState,installedApps:e,hasCheckedInstalledApps:!0}),Left:e=>({...t.context._internalState,error:e})})})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},ListInstalledAppsCheck:{always:[{target:"Error",guard:"hasError"},{target:"Success",guard:"appNotInstalled"},{target:"GetAppsByHash"}]},GetAppsByHash:{invoke:{id:"getAppsByHash",src:"getAppsByHash",input:t=>t.context._internalState.installedApps,onDone:{target:"GetAppsByHashCheck",actions:a({_internalState:t=>t.event.output.caseOf({Right:e=>({...t.context._internalState,appList:e}),Left:e=>({...t.context._internalState,error:e})})})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},GetAppsByHashCheck:{always:[{target:"Error",guard:"hasError"},{target:"Error",guard:"appNotFound",actions:"assignAppNotFound"},{target:"Error",guard:"isDepAppOfOther",actions:"assignIsDepAppOfOther"},{target:"GoToDashboard"}]},GoToDashboard:{invoke:{id:"goToDashboard",src:"goToDashboard",input:t=>({unlockTimeout:t.context.input.unlockTimeout}),onSnapshot:{actions:a({intermediateValue:t=>({...t.context.intermediateValue,requiredUserInteraction:t.event.snapshot.context.intermediateValue.requiredUserInteraction})})},onDone:{target:"GoToDashboardCheck",actions:a({_internalState:t=>t.event.output.caseOf({Right:()=>t.context._internalState,Left:e=>({...t.context._internalState,error:e})})})},onError:{target:"Error",actions:"assignErrorFromEvent"}}},GoToDashboardCheck:{always:[{target:"Error",guard:"hasError"},{target:"GetOsVersion"}]},GetOsVersion:{invoke:{id:"getOsVersion",src:"getOsVersion",input:t=>{},onDone:{target:"GetOsVersionCheck",actions:a({_internalState:t=>{if(y(t.event.output)){const e=r(),h=t.event.output.data.secureElementFlags.isSecureConnectionAllowed;return e.sessionStateType!==O.Connected&&o({...e,isSecureConnectionAllowed:h}),{...t.context._internalState,getOsVersionResponse:t.event.output.data}}return{...t.context._internalState,error:t.event.output.error}}})}}},GetOsVersionCheck:{always:[{target:"Error",guard:"hasError"},{target:"UninstallApp"}]},UninstallApp:{invoke:{id:"uninstallApp",src:"uninstallApp",input:t=>({deviceInfo:t.context._internalState.getOsVersionResponse,app:t.context._internalState.appList.find(e=>e?.versionName===t.context.input.appName)}),onSnapshot:{actions:a({intermediateValue:t=>{switch(t.event.snapshot.context?.type){case m.PermissionRequested:return{requiredUserInteraction:p.AllowSecureConnection};case m.PermissionGranted:return{requiredUserInteraction:p.None};default:return{...t.context.intermediateValue}}}})},onDone:{target:"ListInstalledApps"},onError:{target:"Error",actions:"assignErrorFromEvent"}}},Success:{type:"final",description:"App uninstalled successfully"},Error:{type:"final"}},output:({context:t})=>t._internalState.error?g(t._internalState.error):D(void 0)})}extractDependencies(n){return{getOsVersion:()=>n.sendCommand(new f),getAppsByHash:({input:r})=>{const o=r.map(s=>s.hash);return n.getManagerApiService().getAppsByHash(o)},uninstallApp:({input:r})=>{const{deviceInfo:o,app:s}=r,i=n.getSecureChannelService().uninstallApp(o,s);return new k(n,{connection:i}).run()},getDeviceSessionState:()=>n.getDeviceSessionState(),setDeviceSessionState:r=>n.setDeviceSessionState(r)}}}export{P as UninstallAppDeviceAction};
2
+ //# sourceMappingURL=UninstallAppDeviceAction.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.ts"],
4
+ "sourcesContent": ["import { Left, Right } from \"purify-ts\";\nimport { assign, fromObservable, fromPromise, setup } from \"xstate\";\n\nimport { isSuccessCommandResult } from \"@api/command/model/CommandResult\";\nimport {\n GetOsVersionCommand,\n type GetOsVersionResponse,\n} from \"@api/command/os/GetOsVersionCommand\";\nimport { type 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 { GoToDashboardDeviceAction } from \"@api/device-action/os/GoToDashboard/GoToDashboardDeviceAction\";\nimport { type StateMachineTypes } from \"@api/device-action/xstate-utils/StateMachineTypes\";\nimport {\n type DeviceActionStateMachine,\n XStateDeviceAction,\n} from \"@api/device-action/xstate-utils/XStateDeviceAction\";\nimport {\n type DeviceSessionState,\n DeviceSessionStateType,\n} from \"@api/device-session/DeviceSessionState\";\nimport { ListInstalledAppsDeviceAction } from \"@api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction\";\nimport { type InstalledApp } from \"@api/secure-channel/device-action/ListInstalledApps/types\";\nimport { ConnectToSecureChannelTask } from \"@api/secure-channel/task/ConnectToSecureChannelTask\";\nimport { SecureChannelEventType } from \"@api/secure-channel/task/types\";\nimport { type Input } from \"@api/secure-channel/types\";\nimport { type Application } from \"@internal/manager-api/model/Application\";\n\nimport {\n type MachineDependencies,\n type UninstallAppDAError,\n type UninstallAppDAInput,\n type UninstallAppDAIntermediateValue,\n type UninstallAppDAOutput,\n type UninstallAppStateMachineInternalState,\n} from \"./types\";\n\nexport class UninstallAppDeviceAction extends XStateDeviceAction<\n UninstallAppDAOutput,\n UninstallAppDAInput,\n UninstallAppDAError,\n UninstallAppDAIntermediateValue,\n UninstallAppStateMachineInternalState\n> {\n override makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n UninstallAppDAOutput,\n UninstallAppDAInput,\n UninstallAppDAError,\n UninstallAppDAIntermediateValue,\n UninstallAppStateMachineInternalState\n > {\n type types = StateMachineTypes<\n UninstallAppDAOutput,\n UninstallAppDAInput,\n UninstallAppDAError,\n UninstallAppDAIntermediateValue,\n UninstallAppStateMachineInternalState\n >;\n\n const {\n getOsVersion,\n getAppsByHash,\n uninstallApp,\n getDeviceSessionState,\n setDeviceSessionState,\n } = 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 const listInstalledAppsMachine = new ListInstalledAppsDeviceAction({\n input: {\n unlockTimeout,\n },\n }).makeStateMachine(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 listInstalledApps: listInstalledAppsMachine,\n goToDashboard: goToDashboardMachine,\n getOsVersion: fromPromise(getOsVersion),\n getAppsByHash: fromPromise(getAppsByHash),\n uninstallApp: fromObservable(uninstallApp),\n },\n guards: {\n hasError: (_) => _.context._internalState.error !== null,\n appNotInstalled: (_) =>\n !_.context._internalState.installedApps.some(\n (app) => app.name === _.context.input.appName,\n ),\n appNotFound: (_) =>\n _.context._internalState.appList.findIndex(\n (app) => app?.versionName === _.context.input.appName,\n ) === -1,\n isDepAppOfOther: (_) =>\n _.context._internalState.appList.some(\n (app) => app?.parentName === _.context.input.appName,\n ),\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: _.event[\"error\"],\n }),\n }),\n assignAppNotFound: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: new UnknownDAError(\n \"App to uninstall not found in manager API\",\n ),\n }),\n }),\n assignIsDepAppOfOther: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: new UnknownDAError(\n \"App to uninstall is a dependency of another installed app\",\n ),\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QEkB2sAuBDANjgggA6EAiYAbgJYDGY+1GlA9qgHRlW0BKYWEAngGIA2gAYAuolCEmsSoxZSQAD0QBGAJyjWADgDsAFg0A2HSb2iArMbUBmADQh+iAExrjrS6KuWNtte7Glga2AL6hjmiYuATEHDR0DMxsAOJMACpMJFiwABYARkxYAE4QghAsYKyUqORMANZVUBlZOQVFpWKSSCAycgqoSqoIxi6WrKJq1rYGNgaiBrOOzgi2th5qonouorYuo9YBBuGR6Nh4RKQUCfQDrGmZ2XmFJWVgxcVMxayEOFgYADMvgBbVjNR5tF6dCRKPryZJDRAHCZTYwzOYLJZOdR6DSeFy2MwBPaaXzGE4gKLnWJXTiJO4PVrPDoQADCuTA1HqIhhPThA0RCE2XlY+0semMomMBgsOjMyyRoh0E28BmClhc+0mxwilLOMUu8Vot2S9xaT3ar3ZnO5wjU3Wksnhih6w2F2jFEqlMqV8uxq0stlYgTlGg02wJOjCuqpBri12NSRY9zAGAA8rAAGrvOQscqVaq1BpNVMZ7PFXOoLqwp0C13qDVqVhaIK+HSifazNQK1YuPHGLTWQxabaLSwU2MXeN0k3JlKlrM55LWrk8h29WsI+tCjRqAysebSvY6TWagw6HvnvFeDsaGX6UR+Wx6Cf6qe0m5J1IL8uVle2+0a36LdQDdXd90PEIXBPU9zx7dFWD0LwxgMHYFkmckYzfGkjXpU15wwS4ABlKEwfNUCqGo6kaFNCOIEjMGrPlNxdUDXFscVRR0VFxXDJCL39PYgxcPRbD8NQ9DUOV9BfLDonfXDZ2-OjCAYjB-zXIDnUGbcRIkxDNEfEIwwCFx4MDYNjFMMxw01Qlo1OeScITPC51TYjSPUjlVztdd+RAlRXEkvQDK0O8xN3NQzP9HR9xvKxCT0E9Jj0WTdVQJgIDgJRJ2cmcvy0us2IQABaYwezK18nMNFylPYFyeD4FZHWA1jAoQVCezccYb02JDDPcQkqupGr8oZc1IRZQqAuGaDxhMfQxjsKMlQcf1NBcFVdlmPs9wJNVhrjD9E3GiFmStbz6mmtrhijTaFu4tZRJMSZzJCqNnyS9x5m2DRDoU2qv1osslza-ybvUNwg02DRLFi+YZnbSx4JE5sJO8Xc3CsWZMMckbp0-Bkf1B1B-2unTiokuxWGlJULHWWwOzGcymwMKnULEuzRn+vLCfw9z6M88nBR2VLRWQ6xxR0GxRhRpsb2fNYjDcXFZLxo7FKBgiPMwMnmNain2rGDiD01PdUs0NVu0EtUtq8KydginV1YBsbTQAZQAV2oWhYHgfXtJFsxtGsXbuMsCPdh7bjPG8AkNFi70-B50a+eTABRD4vmF3Tg88UZd3DyO1pWDj9wlCwLFMDQ+1xcdwlCIA */\n id: \"UninstallAppDeviceAction\",\n initial: \"DeviceReady\",\n context: (_) => {\n return {\n input: {\n unlockTimeout: _.input.unlockTimeout,\n appName: _.input.appName,\n },\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n _internalState: {\n error: null,\n installedApps: [],\n appList: [],\n getOsVersionResponse: null,\n },\n };\n },\n states: {\n DeviceReady: {\n always: {\n target: \"ListInstalledApps\",\n },\n },\n ListInstalledApps: {\n invoke: {\n id: \"listInstalledApps\",\n src: \"listInstalledApps\",\n input: (_) => ({\n unlockTimeout: _.context.input.unlockTimeout,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n requiredUserInteraction:\n _.event.snapshot.context.intermediateValue\n .requiredUserInteraction,\n }),\n }),\n },\n onDone: {\n target: \"ListInstalledAppsCheck\",\n actions: assign({\n _internalState: (_) =>\n _.event.output.caseOf<UninstallAppStateMachineInternalState>({\n Right: ({ installedApps }) => ({\n ..._.context._internalState,\n installedApps,\n hasCheckedInstalledApps: true,\n }),\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n }),\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n ListInstalledAppsCheck: {\n always: [\n {\n target: \"Error\",\n guard: \"hasError\",\n },\n {\n target: \"Success\",\n guard: \"appNotInstalled\",\n },\n {\n target: \"GetAppsByHash\",\n },\n ],\n },\n GetAppsByHash: {\n invoke: {\n id: \"getAppsByHash\",\n src: \"getAppsByHash\",\n input: (_) => _.context._internalState.installedApps!,\n onDone: {\n target: \"GetAppsByHashCheck\",\n actions: assign({\n _internalState: (_) =>\n _.event.output.caseOf({\n Right: (apps) => ({\n ..._.context._internalState,\n appList: apps,\n }),\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n }),\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n GetAppsByHashCheck: {\n always: [\n {\n target: \"Error\",\n guard: \"hasError\",\n },\n {\n target: \"Error\",\n guard: \"appNotFound\",\n actions: \"assignAppNotFound\",\n },\n {\n target: \"Error\",\n guard: \"isDepAppOfOther\",\n actions: \"assignIsDepAppOfOther\",\n },\n {\n target: \"GoToDashboard\",\n },\n ],\n },\n GoToDashboard: {\n invoke: {\n id: \"goToDashboard\",\n src: \"goToDashboard\",\n input: (_) => ({\n unlockTimeout: _.context.input.unlockTimeout,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) => ({\n ..._.context.intermediateValue,\n requiredUserInteraction:\n _.event.snapshot.context.intermediateValue\n .requiredUserInteraction,\n }),\n }),\n },\n onDone: {\n target: \"GoToDashboardCheck\",\n actions: assign({\n _internalState: (_) =>\n _.event.output.caseOf<UninstallAppStateMachineInternalState>({\n Right: () => _.context._internalState,\n Left: (error) => ({\n ..._.context._internalState,\n error,\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: \"GetOsVersion\",\n },\n ],\n },\n GetOsVersion: {\n invoke: {\n id: \"getOsVersion\",\n src: \"getOsVersion\",\n input: (_) => undefined,\n onDone: {\n target: \"GetOsVersionCheck\",\n actions: assign({\n _internalState: (_) => {\n if (isSuccessCommandResult(_.event.output)) {\n const currentState: DeviceSessionState =\n getDeviceSessionState();\n const isSecureConnectionAllowed =\n _.event.output.data.secureElementFlags\n .isSecureConnectionAllowed;\n if (\n currentState.sessionStateType !==\n DeviceSessionStateType.Connected\n ) {\n setDeviceSessionState({\n ...currentState,\n isSecureConnectionAllowed,\n });\n }\n return {\n ..._.context._internalState,\n getOsVersionResponse: _.event.output.data,\n };\n }\n return {\n ..._.context._internalState,\n error: _.event.output.error,\n };\n },\n }),\n },\n },\n },\n GetOsVersionCheck: {\n always: [\n {\n target: \"Error\",\n guard: \"hasError\",\n },\n {\n target: \"UninstallApp\",\n },\n ],\n },\n UninstallApp: {\n invoke: {\n id: \"uninstallApp\",\n src: \"uninstallApp\",\n input: (_) => ({\n deviceInfo: _.context._internalState.getOsVersionResponse!,\n app: _.context._internalState.appList.find(\n (app) => app?.versionName === _.context.input.appName,\n )!,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) => {\n switch (_.event.snapshot.context?.type) {\n case SecureChannelEventType.PermissionRequested: {\n return {\n requiredUserInteraction:\n UserInteractionRequired.AllowSecureConnection,\n };\n }\n case SecureChannelEventType.PermissionGranted: {\n return {\n requiredUserInteraction: UserInteractionRequired.None,\n };\n }\n default:\n return {\n ..._.context.intermediateValue,\n };\n }\n },\n }),\n },\n onDone: {\n target: \"ListInstalledApps\",\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n Success: {\n type: \"final\",\n description: \"App uninstalled successfully\",\n },\n Error: {\n type: \"final\",\n },\n },\n output: ({ context }) =>\n context._internalState.error\n ? Left(context._internalState.error)\n : Right(void 0),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const getOsVersion = () =>\n internalApi.sendCommand(new GetOsVersionCommand());\n\n const getAppsByHash = ({ input }: Input<InstalledApp[]>) => {\n const appHashes = input.map((app) => app.hash);\n return internalApi.getManagerApiService().getAppsByHash(appHashes);\n };\n\n const uninstallApp = ({\n input,\n }: Input<{\n deviceInfo: GetOsVersionResponse;\n app: Application;\n }>) => {\n const { deviceInfo, app } = input;\n const eitherConnection = internalApi\n .getSecureChannelService()\n .uninstallApp(deviceInfo, app);\n return new ConnectToSecureChannelTask(internalApi, {\n connection: eitherConnection,\n }).run();\n };\n\n return {\n getOsVersion,\n getAppsByHash,\n uninstallApp,\n getDeviceSessionState: () => internalApi.getDeviceSessionState(),\n setDeviceSessionState: (state) =>\n internalApi.setDeviceSessionState(state),\n };\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["Left", "Right", "assign", "fromObservable", "fromPromise", "setup", "isSuccessCommandResult", "GetOsVersionCommand", "UserInteractionRequired", "DEFAULT_UNLOCK_TIMEOUT_MS", "UnknownDAError", "GoToDashboardDeviceAction", "XStateDeviceAction", "DeviceSessionStateType", "ListInstalledAppsDeviceAction", "ConnectToSecureChannelTask", "SecureChannelEventType", "UninstallAppDeviceAction", "internalApi", "getOsVersion", "getAppsByHash", "uninstallApp", "getDeviceSessionState", "setDeviceSessionState", "unlockTimeout", "goToDashboardMachine", "listInstalledAppsMachine", "_", "app", "installedApps", "error", "apps", "currentState", "isSecureConnectionAllowed", "context", "input", "appHashes", "deviceInfo", "eitherConnection", "state"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{Right as A}from"purify-ts";import{of as N,throwError as U}from"rxjs";import{CommandResultFactory as v}from"../../../command/model/CommandResult";import{DeviceStatus as I}from"../../../device/DeviceStatus";import{makeDeviceActionInternalApiMock as u}from"../../../device-action/__test-utils__/makeInternalApi";import{setupGoToDashboardMock as f,setupListInstalledAppsMock as p}from"../../../device-action/__test-utils__/setupTestMachine";import{testDeviceActionStates as d}from"../../../device-action/__test-utils__/testDeviceActionStates";import{DeviceActionStatus as e}from"../../../device-action/model/DeviceActionState";import{UserInteractionRequired as t}from"../../../device-action/model/UserInteractionRequired";import{UnknownDAError as S}from"../../../device-action/os/Errors";import{DeviceSessionStateType as V}from"../../../device-session/DeviceSessionState";import{SecureChannelEventType as y}from"../../../secure-channel/task/types";import{SecureChannelError as g}from"../../../../internal/secure-channel/model/Errors";import{UninstallAppDeviceAction as m}from"./UninstallAppDeviceAction";vi.mock("@api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction");vi.mock("@api/device-action/os/GoToDashboard/GoToDashboardDeviceAction");describe("UninstallAppDeviceAction",()=>{const a=vi.fn(),o=vi.fn(),h=vi.fn(),c=vi.fn(),D=vi.fn(),l=()=>({getOsVersion:a,getAppsByHash:o,uninstallApp:h,getDeviceSessionState:c,setDeviceSessionState:D});beforeEach(()=>{vi.resetAllMocks()}),it("should finish successfully when the app is not installed on the device",()=>new Promise((i,s)=>{p([{installedApps:[{name:"Bitcoin"}]}]);const r=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Completed,output:void 0}],n=new m({input:{appName:"Ethereum"}});vi.spyOn(n,"extractDependencies").mockImplementation(l),d(n,r,u(),{onDone:i,onError:s})})),it("should finish successfully when the app is installed on the device",()=>new Promise((i,s)=>{p([{installedApps:[{name:"Bitcoin"}]},{installedApps:[]}]),f(),a.mockResolvedValue(v({data:{targetId:12345678,secureElementFlags:{isSecureConnectionAllowed:!0}}})),c.mockReturnValue({sessionStateType:V.ReadyWithoutSecureChannel,deviceStatus:I.CONNECTED,currentApp:{name:"BOLOS",version:"0.0.0"},isSecureConnectionAllowed:!1}),o.mockResolvedValue(A([{versionName:"Bitcoin",perso:"test_perso",firmware:"test_firmware_for_bitcoin",firmwareKey:"test_firmware_key_for_bitcoin",hash:"test_hash_for_bitcoin"}])),h.mockReturnValue(N({type:y.Exchange}));const r=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Completed,output:void 0}],n=new m({input:{appName:"Bitcoin"}});vi.spyOn(n,"extractDependencies").mockImplementation(l),d(n,r,u(),{onDone:i,onError:s})})),it("should finish unsuccessfully when the app is a dependency of other installed apps",()=>new Promise((i,s)=>{p([{installedApps:[{name:"Bitcoin"},{name:"Testcoin"}]}]),f(),a.mockResolvedValue(v({data:{targetId:12345678,secureElementFlags:{isSecureConnectionAllowed:!0}}})),c.mockReturnValue({sessionStateType:V.ReadyWithoutSecureChannel,deviceStatus:I.CONNECTED,currentApp:{name:"BOLOS",version:"0.0.0"},isSecureConnectionAllowed:!1}),o.mockResolvedValue(A([{versionName:"Testcoin",parentName:"Bitcoin"},{versionName:"Bitcoin"}]));const r=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Error,error:new S("App to uninstall is a dependency of another installed app")}],n=new m({input:{appName:"Bitcoin"}});vi.spyOn(n,"extractDependencies").mockImplementation(l),d(n,r,u(),{onDone:i,onError:s})})),it("should finish unsuccessfully when the app is not found in manager API",()=>new Promise((i,s)=>{p([{installedApps:[{name:"Bitcoin"}]}]),f(),a.mockResolvedValue(v({data:{targetId:12345678,secureElementFlags:{isSecureConnectionAllowed:!0}}})),c.mockReturnValue({}),o.mockResolvedValueOnce(A([]));const r=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Error,error:new S("App to uninstall not found in manager API")}],n=new m({input:{appName:"Bitcoin"}});vi.spyOn(n,"extractDependencies").mockImplementation(l),d(n,r,u(),{onDone:i,onError:s})})),it("should finish unsuccessfully when there is error in uninstallApp",()=>new Promise((i,s)=>{p([{installedApps:[{name:"Bitcoin"}]}]),f(),a.mockResolvedValue(v({data:{targetId:12345678,secureElementFlags:{isSecureConnectionAllowed:!0}}})),c.mockReturnValue({}),o.mockResolvedValueOnce(A([{versionName:"Bitcoin"}])),h.mockReturnValue(U(()=>new g("Uninstall app error in secure channel")));const r=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Error,error:new g("Uninstall app error in secure channel")}],n=new m({input:{appName:"Bitcoin"}});vi.spyOn(n,"extractDependencies").mockImplementation(l),d(n,r,u(),{onDone:i,onError:s})}))});
2
+ //# sourceMappingURL=UninstallAppDeviceAction.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.test.ts"],
4
+ "sourcesContent": ["import { Right } from \"purify-ts\";\nimport { of, throwError } from \"rxjs\";\n\nimport { CommandResultFactory } from \"@api/command/model/CommandResult\";\nimport { type GetOsVersionResponse } from \"@api/command/os/GetOsVersionCommand\";\nimport { DeviceStatus } from \"@api/device/DeviceStatus\";\nimport { makeDeviceActionInternalApiMock } from \"@api/device-action/__test-utils__/makeInternalApi\";\nimport {\n setupGoToDashboardMock,\n setupListInstalledAppsMock,\n} from \"@api/device-action/__test-utils__/setupTestMachine\";\nimport { testDeviceActionStates } from \"@api/device-action/__test-utils__/testDeviceActionStates\";\nimport { DeviceActionStatus } from \"@api/device-action/model/DeviceActionState\";\nimport { UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport { UnknownDAError } from \"@api/device-action/os/Errors\";\nimport {\n type DeviceSessionState,\n DeviceSessionStateType,\n} from \"@api/device-session/DeviceSessionState\";\nimport { type InstalledApp } from \"@api/secure-channel/device-action/ListInstalledApps/types\";\nimport {\n type SecureChannelEvent,\n SecureChannelEventType,\n} from \"@api/secure-channel/task/types\";\nimport { type Application } from \"@internal/manager-api/model/Application\";\nimport { SecureChannelError } from \"@internal/secure-channel/model/Errors\";\n\nimport { type UninstallAppDAState } from \"./types\";\nimport { UninstallAppDeviceAction } from \"./UninstallAppDeviceAction\";\n\nvi.mock(\n \"@api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction\",\n);\nvi.mock(\"@api/device-action/os/GoToDashboard/GoToDashboardDeviceAction\");\n\ndescribe(\"UninstallAppDeviceAction\", () => {\n const getOsVersionMock = vi.fn();\n const getAppsByHashMock = vi.fn();\n const uninstallAppMock = vi.fn();\n const getDeviceSessionStateMock = vi.fn();\n const setDeviceSessionStateMock = vi.fn();\n const extractDependenciesMock = () => ({\n getOsVersion: getOsVersionMock,\n getAppsByHash: getAppsByHashMock,\n uninstallApp: uninstallAppMock,\n getDeviceSessionState: getDeviceSessionStateMock,\n setDeviceSessionState: setDeviceSessionStateMock,\n });\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n it(\"should finish successfully when the app is not installed on the device\", () =>\n new Promise<void>((resolve, reject) => {\n setupListInstalledAppsMock([\n { installedApps: [{ name: \"Bitcoin\" } as InstalledApp] },\n ]);\n\n const expectedStates: Array<UninstallAppDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: undefined,\n },\n ];\n\n const uninstallAppDeviceAction = new UninstallAppDeviceAction({\n input: { appName: \"Ethereum\" },\n });\n vi.spyOn(\n uninstallAppDeviceAction,\n \"extractDependencies\",\n ).mockImplementation(extractDependenciesMock);\n\n testDeviceActionStates(\n uninstallAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n it(\"should finish successfully when the app is installed on the device\", () =>\n new Promise<void>((resolve, reject) => {\n setupListInstalledAppsMock([\n { installedApps: [{ name: \"Bitcoin\" } as InstalledApp] },\n { installedApps: [] },\n ]);\n setupGoToDashboardMock();\n getOsVersionMock.mockResolvedValue(\n CommandResultFactory({\n data: {\n targetId: 12345678,\n secureElementFlags: {\n isSecureConnectionAllowed: true,\n },\n } as GetOsVersionResponse,\n }),\n );\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"BOLOS\", version: \"0.0.0\" },\n isSecureConnectionAllowed: false,\n });\n getAppsByHashMock.mockResolvedValue(\n Right([\n {\n versionName: \"Bitcoin\",\n perso: \"test_perso\",\n firmware: \"test_firmware_for_bitcoin\",\n firmwareKey: \"test_firmware_key_for_bitcoin\",\n hash: \"test_hash_for_bitcoin\",\n } as Application,\n ]),\n );\n uninstallAppMock.mockReturnValue(\n of({\n type: SecureChannelEventType.Exchange,\n } as SecureChannelEvent),\n );\n\n const expectedStates: Array<UninstallAppDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: undefined,\n },\n ];\n\n const uninstallAppDeviceAction = new UninstallAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(\n uninstallAppDeviceAction,\n \"extractDependencies\",\n ).mockImplementation(extractDependenciesMock);\n\n testDeviceActionStates(\n uninstallAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n it(\"should finish unsuccessfully when the app is a dependency of other installed apps\", () =>\n new Promise<void>((resolve, reject) => {\n setupListInstalledAppsMock([\n {\n installedApps: [\n { name: \"Bitcoin\" },\n { name: \"Testcoin\" },\n ] as InstalledApp[],\n },\n ]);\n setupGoToDashboardMock();\n getOsVersionMock.mockResolvedValue(\n CommandResultFactory({\n data: {\n targetId: 12345678,\n secureElementFlags: {\n isSecureConnectionAllowed: true,\n },\n } as GetOsVersionResponse,\n }),\n );\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"BOLOS\", version: \"0.0.0\" },\n isSecureConnectionAllowed: false,\n });\n getAppsByHashMock.mockResolvedValue(\n Right([\n {\n versionName: \"Testcoin\",\n parentName: \"Bitcoin\",\n },\n {\n versionName: \"Bitcoin\",\n },\n ] as Application[]),\n );\n\n const expectedStates: Array<UninstallAppDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDAError(\n \"App to uninstall is a dependency of another installed app\",\n ),\n },\n ];\n\n const uninstallAppDeviceAction = new UninstallAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(\n uninstallAppDeviceAction,\n \"extractDependencies\",\n ).mockImplementation(extractDependenciesMock);\n\n testDeviceActionStates(\n uninstallAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n it(\"should finish unsuccessfully when the app is not found in manager API\", () =>\n new Promise<void>((resolve, reject) => {\n setupListInstalledAppsMock([\n { installedApps: [{ name: \"Bitcoin\" } as InstalledApp] },\n ]);\n setupGoToDashboardMock();\n getOsVersionMock.mockResolvedValue(\n CommandResultFactory({\n data: {\n targetId: 12345678,\n secureElementFlags: {\n isSecureConnectionAllowed: true,\n },\n } as GetOsVersionResponse,\n }),\n );\n getDeviceSessionStateMock.mockReturnValue({} as DeviceSessionState);\n getAppsByHashMock.mockResolvedValueOnce(Right([]));\n\n const expectedStates: Array<UninstallAppDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDAError(\n \"App to uninstall not found in manager API\",\n ),\n },\n ];\n\n const uninstallAppDeviceAction = new UninstallAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(\n uninstallAppDeviceAction,\n \"extractDependencies\",\n ).mockImplementation(extractDependenciesMock);\n\n testDeviceActionStates(\n uninstallAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n it(\"should finish unsuccessfully when there is error in uninstallApp\", () =>\n new Promise<void>((resolve, reject) => {\n setupListInstalledAppsMock([\n { installedApps: [{ name: \"Bitcoin\" } as InstalledApp] },\n ]);\n setupGoToDashboardMock();\n getOsVersionMock.mockResolvedValue(\n CommandResultFactory({\n data: {\n targetId: 12345678,\n secureElementFlags: {\n isSecureConnectionAllowed: true,\n },\n } as GetOsVersionResponse,\n }),\n );\n getDeviceSessionStateMock.mockReturnValue({} as DeviceSessionState);\n getAppsByHashMock.mockResolvedValueOnce(\n Right([{ versionName: \"Bitcoin\" } as Application]),\n );\n uninstallAppMock.mockReturnValue(\n throwError(\n () => new SecureChannelError(\"Uninstall app error in secure channel\"),\n ),\n );\n\n const expectedStates: Array<UninstallAppDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new SecureChannelError(\n \"Uninstall app error in secure channel\",\n ),\n },\n ];\n\n const uninstallAppDeviceAction = new UninstallAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(\n uninstallAppDeviceAction,\n \"extractDependencies\",\n ).mockImplementation(extractDependenciesMock);\n\n testDeviceActionStates(\n uninstallAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["Right", "of", "throwError", "CommandResultFactory", "DeviceStatus", "makeDeviceActionInternalApiMock", "setupGoToDashboardMock", "setupListInstalledAppsMock", "testDeviceActionStates", "DeviceActionStatus", "UserInteractionRequired", "UnknownDAError", "DeviceSessionStateType", "SecureChannelEventType", "SecureChannelError", "UninstallAppDeviceAction", "getOsVersionMock", "getAppsByHashMock", "uninstallAppMock", "getDeviceSessionStateMock", "setDeviceSessionStateMock", "extractDependenciesMock", "resolve", "reject", "expectedStates", "uninstallAppDeviceAction"]
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -1,2 +1,2 @@
1
- import{isDeviceGenuine as t,isRefusedByUser as s,willRequestPermission as i}from"./utils";describe("willRequestPermission",()=>{it("should return true if the APDU is a permission request",()=>{const e=new Uint8Array([224,81,0,0,0]);expect(i(e)).toBe(!0)}),it("should return false if the APDU is not a permission request",()=>{const e=new Uint8Array([224,82,0,0,0]);expect(i(e)).toBe(!1)})});describe("isRefusedByUser",()=>{it("should return true if the status code indicates a refusal",()=>{[new Uint8Array([85,1]),new Uint8Array([105,133])].forEach(e=>{expect(s(e)).toBe(!0)})}),it("should return false if the status code does not indicate a refusal",()=>{const e=new Uint8Array([144,0]);expect(s(e)).toBe(!1)})});describe("isDeviceGenuine",()=>{it("should return true if the device is genuine",()=>{expect(t("0000")).toBe(!0)}),it("should return false if the device is not genuine",()=>{expect(t("not genuine")).toBe(!1)})});describe.todo("SecureElementFlags");
1
+ import{isDeviceGenuine as t,isRefusedByUser as s,willRequestPermission as i}from"./utils";describe("willRequestPermission",()=>{it("should return true if the APDU is a permission request",()=>{const e=new Uint8Array([224,81,0,0,0]);expect(i(e)).toBe(!0)}),it("should return false if the APDU is not a permission request",()=>{const e=new Uint8Array([224,82,0,0,0]);expect(i(e)).toBe(!1)})});describe("isRefusedByUser",()=>{it("should return true if the status code indicates a refusal",()=>{[new Uint8Array([85,1]),new Uint8Array([105,133])].forEach(e=>{expect(s(e)).toBe(!0)})}),it("should return false if the status code does not indicate a refusal",()=>{const e=new Uint8Array([144,0]);expect(s(e)).toBe(!1)})});describe("isDeviceGenuine",()=>{it("should return true if the device is genuine",()=>{expect(t("0000")).toBe(!0)}),it("should return false if the device is not genuine",()=>{expect(t("not genuine")).toBe(!1)})});
2
2
  //# sourceMappingURL=utils.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/api/secure-channel/utils.test.ts"],
4
- "sourcesContent": ["import {\n isDeviceGenuine,\n isRefusedByUser,\n willRequestPermission,\n} from \"./utils\";\n\ndescribe(\"willRequestPermission\", () => {\n it(\"should return true if the APDU is a permission request\", () => {\n const apdu = new Uint8Array([0xe0, 0x51, 0x00, 0x00, 0x00]);\n expect(willRequestPermission(apdu)).toBe(true);\n });\n it(\"should return false if the APDU is not a permission request\", () => {\n const apdu = new Uint8Array([0xe0, 0x52, 0x00, 0x00, 0x00]);\n expect(willRequestPermission(apdu)).toBe(false);\n });\n});\n\ndescribe(\"isRefusedByUser\", () => {\n it(\"should return true if the status code indicates a refusal\", () => {\n [new Uint8Array([0x55, 0x01]), new Uint8Array([0x69, 0x85])].forEach(\n (statusCode) => {\n expect(isRefusedByUser(statusCode)).toBe(true);\n },\n );\n });\n it(\"should return false if the status code does not indicate a refusal\", () => {\n const statusCode = new Uint8Array([0x90, 0x00]);\n expect(isRefusedByUser(statusCode)).toBe(false);\n });\n});\n\ndescribe(\"isDeviceGenuine\", () => {\n it(\"should return true if the device is genuine\", () => {\n const payload = \"0000\";\n expect(isDeviceGenuine(payload)).toBe(true);\n });\n it(\"should return false if the device is not genuine\", () => {\n const payload = \"not genuine\";\n expect(isDeviceGenuine(payload)).toBe(false);\n });\n});\n\ndescribe.todo(\"SecureElementFlags\");\n"],
5
- "mappings": "AAAA,OACE,mBAAAA,EACA,mBAAAC,EACA,yBAAAC,MACK,UAEP,SAAS,wBAAyB,IAAM,CACtC,GAAG,yDAA0D,IAAM,CACjE,MAAMC,EAAO,IAAI,WAAW,CAAC,IAAM,GAAM,EAAM,EAAM,CAAI,CAAC,EAC1D,OAAOD,EAAsBC,CAAI,CAAC,EAAE,KAAK,EAAI,CAC/C,CAAC,EACD,GAAG,8DAA+D,IAAM,CACtE,MAAMA,EAAO,IAAI,WAAW,CAAC,IAAM,GAAM,EAAM,EAAM,CAAI,CAAC,EAC1D,OAAOD,EAAsBC,CAAI,CAAC,EAAE,KAAK,EAAK,CAChD,CAAC,CACH,CAAC,EAED,SAAS,kBAAmB,IAAM,CAChC,GAAG,4DAA6D,IAAM,CACpE,CAAC,IAAI,WAAW,CAAC,GAAM,CAAI,CAAC,EAAG,IAAI,WAAW,CAAC,IAAM,GAAI,CAAC,CAAC,EAAE,QAC1DC,GAAe,CACd,OAAOH,EAAgBG,CAAU,CAAC,EAAE,KAAK,EAAI,CAC/C,CACF,CACF,CAAC,EACD,GAAG,qEAAsE,IAAM,CAC7E,MAAMA,EAAa,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,EAC9C,OAAOH,EAAgBG,CAAU,CAAC,EAAE,KAAK,EAAK,CAChD,CAAC,CACH,CAAC,EAED,SAAS,kBAAmB,IAAM,CAChC,GAAG,8CAA+C,IAAM,CAEtD,OAAOJ,EADS,MACc,CAAC,EAAE,KAAK,EAAI,CAC5C,CAAC,EACD,GAAG,mDAAoD,IAAM,CAE3D,OAAOA,EADS,aACc,CAAC,EAAE,KAAK,EAAK,CAC7C,CAAC,CACH,CAAC,EAED,SAAS,KAAK,oBAAoB",
4
+ "sourcesContent": ["import {\n isDeviceGenuine,\n isRefusedByUser,\n willRequestPermission,\n} from \"./utils\";\n\ndescribe(\"willRequestPermission\", () => {\n it(\"should return true if the APDU is a permission request\", () => {\n const apdu = new Uint8Array([0xe0, 0x51, 0x00, 0x00, 0x00]);\n expect(willRequestPermission(apdu)).toBe(true);\n });\n it(\"should return false if the APDU is not a permission request\", () => {\n const apdu = new Uint8Array([0xe0, 0x52, 0x00, 0x00, 0x00]);\n expect(willRequestPermission(apdu)).toBe(false);\n });\n});\n\ndescribe(\"isRefusedByUser\", () => {\n it(\"should return true if the status code indicates a refusal\", () => {\n [new Uint8Array([0x55, 0x01]), new Uint8Array([0x69, 0x85])].forEach(\n (statusCode) => {\n expect(isRefusedByUser(statusCode)).toBe(true);\n },\n );\n });\n it(\"should return false if the status code does not indicate a refusal\", () => {\n const statusCode = new Uint8Array([0x90, 0x00]);\n expect(isRefusedByUser(statusCode)).toBe(false);\n });\n});\n\ndescribe(\"isDeviceGenuine\", () => {\n it(\"should return true if the device is genuine\", () => {\n const payload = \"0000\";\n expect(isDeviceGenuine(payload)).toBe(true);\n });\n it(\"should return false if the device is not genuine\", () => {\n const payload = \"not genuine\";\n expect(isDeviceGenuine(payload)).toBe(false);\n });\n});\n"],
5
+ "mappings": "AAAA,OACE,mBAAAA,EACA,mBAAAC,EACA,yBAAAC,MACK,UAEP,SAAS,wBAAyB,IAAM,CACtC,GAAG,yDAA0D,IAAM,CACjE,MAAMC,EAAO,IAAI,WAAW,CAAC,IAAM,GAAM,EAAM,EAAM,CAAI,CAAC,EAC1D,OAAOD,EAAsBC,CAAI,CAAC,EAAE,KAAK,EAAI,CAC/C,CAAC,EACD,GAAG,8DAA+D,IAAM,CACtE,MAAMA,EAAO,IAAI,WAAW,CAAC,IAAM,GAAM,EAAM,EAAM,CAAI,CAAC,EAC1D,OAAOD,EAAsBC,CAAI,CAAC,EAAE,KAAK,EAAK,CAChD,CAAC,CACH,CAAC,EAED,SAAS,kBAAmB,IAAM,CAChC,GAAG,4DAA6D,IAAM,CACpE,CAAC,IAAI,WAAW,CAAC,GAAM,CAAI,CAAC,EAAG,IAAI,WAAW,CAAC,IAAM,GAAI,CAAC,CAAC,EAAE,QAC1DC,GAAe,CACd,OAAOH,EAAgBG,CAAU,CAAC,EAAE,KAAK,EAAI,CAC/C,CACF,CACF,CAAC,EACD,GAAG,qEAAsE,IAAM,CAC7E,MAAMA,EAAa,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,EAC9C,OAAOH,EAAgBG,CAAU,CAAC,EAAE,KAAK,EAAK,CAChD,CAAC,CACH,CAAC,EAED,SAAS,kBAAmB,IAAM,CAChC,GAAG,8CAA+C,IAAM,CAEtD,OAAOJ,EADS,MACc,CAAC,EAAE,KAAK,EAAI,CAC5C,CAAC,EACD,GAAG,mDAAoD,IAAM,CAE3D,OAAOA,EADS,aACc,CAAC,EAAE,KAAK,EAAK,CAC7C,CAAC,CACH,CAAC",
6
6
  "names": ["isDeviceGenuine", "isRefusedByUser", "willRequestPermission", "apdu", "statusCode"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{Right as t}from"purify-ts";import{deviceModelStubBuilder as r}from"../../device-model/model/DeviceModel.stub";import{defaultApduResponseStubBuilder as o}from"../../device-session/ApduResponse.stub";import{TransportConnectedDevice as c}from"./TransportConnectedDevice";import{connectedDeviceStubBuilder as i}from"./TransportConnectedDevice.stub";describe("TransportConnectedDevice",()=>{let e;beforeEach(()=>{e=i()}),it("should create an instance",()=>{expect(e).toBeDefined(),expect(e).toBeInstanceOf(c)}),it("should return the correct id",()=>{expect(e.id).toEqual("42")}),it("should return the correct device model",()=>{expect(JSON.stringify(e.deviceModel)).toEqual(JSON.stringify(r()))}),it("should return the correct type",()=>{expect(e.type).toEqual("MOCK")}),it("should return the correct send apdu response",()=>{expect(e.sendApdu(new Uint8Array)).resolves.toMatchObject(t(o()))})});
1
+ import{Right as r}from"purify-ts";import{deviceModelStubBuilder as o}from"../../device-model/model/DeviceModel.stub";import{defaultApduResponseStubBuilder as c}from"../../device-session/ApduResponse.stub";import{TransportConnectedDevice as i}from"./TransportConnectedDevice";import{connectedDeviceStubBuilder as n}from"./TransportConnectedDevice.stub";describe("TransportConnectedDevice",()=>{let e;beforeEach(()=>{e=n()}),it("should create an instance",()=>{expect(e).toBeDefined(),expect(e).toBeInstanceOf(i)}),it("should return the correct id",()=>{expect(e.id).toEqual("42")}),it("should return the correct device model",()=>{expect(JSON.stringify(e.deviceModel)).toEqual(JSON.stringify(o()))}),it("should return the correct type",()=>{expect(e.type).toEqual("MOCK")}),it("should return the correct send apdu response",async()=>{const t=await e.sendApdu(new Uint8Array);expect(t).toMatchObject(r(c()))})});
2
2
  //# sourceMappingURL=TransportConnectedDevice.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/api/transport/model/TransportConnectedDevice.test.ts"],
4
- "sourcesContent": ["import { Right } from \"purify-ts\";\n\nimport { deviceModelStubBuilder } from \"@api/device-model/model/DeviceModel.stub\";\nimport { defaultApduResponseStubBuilder } from \"@api/device-session/ApduResponse.stub\";\n\nimport { TransportConnectedDevice } from \"./TransportConnectedDevice\";\nimport { connectedDeviceStubBuilder } from \"./TransportConnectedDevice.stub\";\n\ndescribe(\"TransportConnectedDevice\", () => {\n let connectedDevice: TransportConnectedDevice;\n\n beforeEach(() => {\n connectedDevice = connectedDeviceStubBuilder();\n });\n\n it(\"should create an instance\", () => {\n expect(connectedDevice).toBeDefined();\n expect(connectedDevice).toBeInstanceOf(TransportConnectedDevice);\n });\n\n it(\"should return the correct id\", () => {\n expect(connectedDevice.id).toEqual(\"42\");\n });\n\n it(\"should return the correct device model\", () => {\n expect(JSON.stringify(connectedDevice.deviceModel)).toEqual(\n JSON.stringify(deviceModelStubBuilder()),\n );\n });\n\n it(\"should return the correct type\", () => {\n expect(connectedDevice.type).toEqual(\"MOCK\");\n });\n\n it(\"should return the correct send apdu response\", () => {\n expect(connectedDevice.sendApdu(new Uint8Array())).resolves.toMatchObject(\n Right(defaultApduResponseStubBuilder()),\n );\n });\n});\n"],
5
- "mappings": "AAAA,OAAS,SAAAA,MAAa,YAEtB,OAAS,0BAAAC,MAA8B,2CACvC,OAAS,kCAAAC,MAAsC,wCAE/C,OAAS,4BAAAC,MAAgC,6BACzC,OAAS,8BAAAC,MAAkC,kCAE3C,SAAS,2BAA4B,IAAM,CACzC,IAAIC,EAEJ,WAAW,IAAM,CACfA,EAAkBD,EAA2B,CAC/C,CAAC,EAED,GAAG,4BAA6B,IAAM,CACpC,OAAOC,CAAe,EAAE,YAAY,EACpC,OAAOA,CAAe,EAAE,eAAeF,CAAwB,CACjE,CAAC,EAED,GAAG,+BAAgC,IAAM,CACvC,OAAOE,EAAgB,EAAE,EAAE,QAAQ,IAAI,CACzC,CAAC,EAED,GAAG,yCAA0C,IAAM,CACjD,OAAO,KAAK,UAAUA,EAAgB,WAAW,CAAC,EAAE,QAClD,KAAK,UAAUJ,EAAuB,CAAC,CACzC,CACF,CAAC,EAED,GAAG,iCAAkC,IAAM,CACzC,OAAOI,EAAgB,IAAI,EAAE,QAAQ,MAAM,CAC7C,CAAC,EAED,GAAG,+CAAgD,IAAM,CACvD,OAAOA,EAAgB,SAAS,IAAI,UAAY,CAAC,EAAE,SAAS,cAC1DL,EAAME,EAA+B,CAAC,CACxC,CACF,CAAC,CACH,CAAC",
6
- "names": ["Right", "deviceModelStubBuilder", "defaultApduResponseStubBuilder", "TransportConnectedDevice", "connectedDeviceStubBuilder", "connectedDevice"]
4
+ "sourcesContent": ["import { Right } from \"purify-ts\";\n\nimport { deviceModelStubBuilder } from \"@api/device-model/model/DeviceModel.stub\";\nimport { defaultApduResponseStubBuilder } from \"@api/device-session/ApduResponse.stub\";\n\nimport { TransportConnectedDevice } from \"./TransportConnectedDevice\";\nimport { connectedDeviceStubBuilder } from \"./TransportConnectedDevice.stub\";\n\ndescribe(\"TransportConnectedDevice\", () => {\n let connectedDevice: TransportConnectedDevice;\n\n beforeEach(() => {\n connectedDevice = connectedDeviceStubBuilder();\n });\n\n it(\"should create an instance\", () => {\n expect(connectedDevice).toBeDefined();\n expect(connectedDevice).toBeInstanceOf(TransportConnectedDevice);\n });\n\n it(\"should return the correct id\", () => {\n expect(connectedDevice.id).toEqual(\"42\");\n });\n\n it(\"should return the correct device model\", () => {\n expect(JSON.stringify(connectedDevice.deviceModel)).toEqual(\n JSON.stringify(deviceModelStubBuilder()),\n );\n });\n\n it(\"should return the correct type\", () => {\n expect(connectedDevice.type).toEqual(\"MOCK\");\n });\n\n it(\"should return the correct send apdu response\", async () => {\n const res = await connectedDevice.sendApdu(new Uint8Array());\n expect(res).toMatchObject(Right(defaultApduResponseStubBuilder()));\n });\n});\n"],
5
+ "mappings": "AAAA,OAAS,SAAAA,MAAa,YAEtB,OAAS,0BAAAC,MAA8B,2CACvC,OAAS,kCAAAC,MAAsC,wCAE/C,OAAS,4BAAAC,MAAgC,6BACzC,OAAS,8BAAAC,MAAkC,kCAE3C,SAAS,2BAA4B,IAAM,CACzC,IAAIC,EAEJ,WAAW,IAAM,CACfA,EAAkBD,EAA2B,CAC/C,CAAC,EAED,GAAG,4BAA6B,IAAM,CACpC,OAAOC,CAAe,EAAE,YAAY,EACpC,OAAOA,CAAe,EAAE,eAAeF,CAAwB,CACjE,CAAC,EAED,GAAG,+BAAgC,IAAM,CACvC,OAAOE,EAAgB,EAAE,EAAE,QAAQ,IAAI,CACzC,CAAC,EAED,GAAG,yCAA0C,IAAM,CACjD,OAAO,KAAK,UAAUA,EAAgB,WAAW,CAAC,EAAE,QAClD,KAAK,UAAUJ,EAAuB,CAAC,CACzC,CACF,CAAC,EAED,GAAG,iCAAkC,IAAM,CACzC,OAAOI,EAAgB,IAAI,EAAE,QAAQ,MAAM,CAC7C,CAAC,EAED,GAAG,+CAAgD,SAAY,CAC7D,MAAMC,EAAM,MAAMD,EAAgB,SAAS,IAAI,UAAY,EAC3D,OAAOC,CAAG,EAAE,cAAcN,EAAME,EAA+B,CAAC,CAAC,CACnE,CAAC,CACH,CAAC",
6
+ "names": ["Right", "deviceModelStubBuilder", "defaultApduResponseStubBuilder", "TransportConnectedDevice", "connectedDeviceStubBuilder", "connectedDevice", "res"]
7
7
  }
@@ -1,2 +1,2 @@
1
- const E=1e3;export{E as DEVICE_SESSION_REFRESH_INTERVAL};
1
+ const E=1e3,I=1e3,S={isRefresherDisabled:!1,pollingInterval:1e3};export{S as DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS,I as DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL,E as DEVICE_SESSION_REFRESHER_POLLING_INTERVAL};
2
2
  //# sourceMappingURL=DeviceSessionRefresherConst.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/device-session/data/DeviceSessionRefresherConst.ts"],
4
- "sourcesContent": ["export const DEVICE_SESSION_REFRESH_INTERVAL = 1000;\n"],
5
- "mappings": "AAAO,MAAMA,EAAkC",
6
- "names": ["DEVICE_SESSION_REFRESH_INTERVAL"]
4
+ "sourcesContent": ["// used for default args\nexport const DEVICE_SESSION_REFRESHER_POLLING_INTERVAL = 1000;\n\n// used to set a minimum interval for the exposed refresher options\nexport const DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL = 1000;\n\nexport const DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS = {\n isRefresherDisabled: false,\n pollingInterval: DEVICE_SESSION_REFRESHER_POLLING_INTERVAL,\n};\n"],
5
+ "mappings": "AACO,MAAMA,EAA4C,IAG5CC,EAAoD,IAEpDC,EAA2C,CACtD,oBAAqB,GACrB,gBAAiB,GACnB",
6
+ "names": ["DEVICE_SESSION_REFRESHER_POLLING_INTERVAL", "DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL", "DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ import{DeviceModelId as a}from"../../../api/device/DeviceModel";import{GetAppAndVersionCommand as r,GetOsVersionCommand as c}from"../../../api/index";import{DEVICE_SESSION_REFRESHER_POLLING_INTERVAL as p}from"../../device-session/data/DeviceSessionRefresherConst";import{SessionEvents as i}from"../../device-session/model/DeviceSessionEventDispatcher";class l{constructor(e,t,o,n){this.connectedDevice=t;this._sessionEventDispatcher=o;this._sendCommandFunction=n,this._logger=e("device-pinger"),this._subscription=this._sessionEventDispatcher.listen().subscribe(async s=>await this.mapEventAction(s))}_sendCommandFunction;_subscription;_logger;async ping(){try{return await this.mapDevicePingAction(this.connectedDevice.deviceModel.id)}catch(e){throw this._logger.error("Error while pinging device",{data:{error:e}}),e}}mapEventAction=async e=>{switch(e.eventName){case i.REFRESH_NEEDED:return await this.ping();default:return null}};async mapDevicePingAction(e){switch(e){case a.NANO_S:{const t=(async()=>{const s=await this._sendCommandFunction(new r);return this._sendCommandFunction(new c),s})(),o=new Promise(s=>{setTimeout(()=>s(null),p*2+100)}),n=await Promise.race([t,o]);return n?this._sessionEventDispatcher.dispatch({eventName:i.COMMAND_SUCCEEDED,eventData:n}):this._sessionEventDispatcher.dispatch({eventName:i.DEVICE_STATE_UPDATE_LOCKED}),n}default:{const t=await this._sendCommandFunction(new r);return this._sessionEventDispatcher.dispatch({eventName:i.COMMAND_SUCCEEDED,eventData:t}),t}}}unsubscribe(){this._subscription.unsubscribe()}}export{l as DevicePinger};
2
+ //# sourceMappingURL=DevicePinger.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/internal/device-session/model/DevicePinger.ts"],
4
+ "sourcesContent": ["import { type Subscription } from \"rxjs\";\n\nimport { DeviceModelId } from \"@api/device/DeviceModel\";\nimport {\n GetAppAndVersionCommand,\n type GetAppAndVersionResponse,\n GetOsVersionCommand,\n type TransportConnectedDevice,\n} from \"@api/index\";\nimport {\n type Command,\n type CommandResult,\n type LoggerPublisherService,\n} from \"@api/types\";\nimport { DEVICE_SESSION_REFRESHER_POLLING_INTERVAL } from \"@internal/device-session/data/DeviceSessionRefresherConst\";\nimport {\n type DeviceSessionEventDispatcher,\n type NewEvent,\n SessionEvents,\n} from \"@internal/device-session/model/DeviceSessionEventDispatcher\";\n\ntype SendCommandFunction = <Response, Args, ErrorStatusCodes>(\n command: Command<Response, Args, ErrorStatusCodes>,\n) => Promise<CommandResult<Response, ErrorStatusCodes>>;\n\nexport class DevicePinger {\n private readonly _sendCommandFunction: SendCommandFunction;\n private _subscription: Subscription;\n private _logger: LoggerPublisherService;\n\n constructor(\n loggerModuleFactory: (tag: string) => LoggerPublisherService,\n private connectedDevice: TransportConnectedDevice,\n private _sessionEventDispatcher: DeviceSessionEventDispatcher,\n sendCommandFunction: SendCommandFunction,\n ) {\n this._sendCommandFunction = sendCommandFunction;\n this._logger = loggerModuleFactory(\"device-pinger\");\n this._subscription = this._sessionEventDispatcher\n .listen()\n .subscribe(async (event) => await this.mapEventAction(event));\n }\n\n public async ping(): Promise<CommandResult<GetAppAndVersionResponse> | null> {\n try {\n const result = await this.mapDevicePingAction(\n this.connectedDevice.deviceModel.id,\n );\n return result;\n } catch (error) {\n this._logger.error(\"Error while pinging device\", {\n data: {\n error,\n },\n });\n throw error;\n }\n }\n\n private mapEventAction = async (event: NewEvent) => {\n switch (event.eventName) {\n case SessionEvents.REFRESH_NEEDED:\n return await this.ping();\n default:\n return null;\n }\n };\n\n private async mapDevicePingAction(deviceModelId: DeviceModelId) {\n switch (deviceModelId) {\n case DeviceModelId.NANO_S: {\n const chainPromise: Promise<CommandResult<GetAppAndVersionResponse>> =\n (async () => {\n const appVersionResult = await this._sendCommandFunction(\n new GetAppAndVersionCommand(),\n );\n\n this._sendCommandFunction(new GetOsVersionCommand());\n return appVersionResult;\n })();\n\n const timeoutPromise: Promise<null> = new Promise((resolve) => {\n setTimeout(\n () => resolve(null),\n DEVICE_SESSION_REFRESHER_POLLING_INTERVAL * 2 + 100,\n );\n });\n\n const resultOrTimeout: CommandResult<GetAppAndVersionResponse> | null =\n await Promise.race([chainPromise, timeoutPromise]);\n\n if (!resultOrTimeout) {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_LOCKED,\n });\n } else {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.COMMAND_SUCCEEDED,\n eventData: resultOrTimeout,\n });\n }\n return resultOrTimeout;\n }\n default: {\n const result = await this._sendCommandFunction(\n new GetAppAndVersionCommand(),\n );\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.COMMAND_SUCCEEDED,\n eventData: result,\n });\n return result;\n }\n }\n }\n\n public unsubscribe(): void {\n this._subscription.unsubscribe();\n }\n}\n"],
5
+ "mappings": "AAEA,OAAS,iBAAAA,MAAqB,0BAC9B,OACE,2BAAAC,EAEA,uBAAAC,MAEK,aAMP,OAAS,6CAAAC,MAAiD,4DAC1D,OAGE,iBAAAC,MACK,8DAMA,MAAMC,CAAa,CAKxB,YACEC,EACQC,EACAC,EACRC,EACA,CAHQ,qBAAAF,EACA,6BAAAC,EAGR,KAAK,qBAAuBC,EAC5B,KAAK,QAAUH,EAAoB,eAAe,EAClD,KAAK,cAAgB,KAAK,wBACvB,OAAO,EACP,UAAU,MAAOI,GAAU,MAAM,KAAK,eAAeA,CAAK,CAAC,CAChE,CAfiB,qBACT,cACA,QAeR,MAAa,MAAgE,CAC3E,GAAI,CAIF,OAHe,MAAM,KAAK,oBACxB,KAAK,gBAAgB,YAAY,EACnC,CAEF,OAASC,EAAO,CACd,WAAK,QAAQ,MAAM,6BAA8B,CAC/C,KAAM,CACJ,MAAAA,CACF,CACF,CAAC,EACKA,CACR,CACF,CAEQ,eAAiB,MAAOD,GAAoB,CAClD,OAAQA,EAAM,UAAW,CACvB,KAAKN,EAAc,eACjB,OAAO,MAAM,KAAK,KAAK,EACzB,QACE,OAAO,IACX,CACF,EAEA,MAAc,oBAAoBQ,EAA8B,CAC9D,OAAQA,EAAe,CACrB,KAAKZ,EAAc,OAAQ,CACzB,MAAMa,GACH,SAAY,CACX,MAAMC,EAAmB,MAAM,KAAK,qBAClC,IAAIb,CACN,EAEA,YAAK,qBAAqB,IAAIC,CAAqB,EAC5CY,CACT,GAAG,EAECC,EAAgC,IAAI,QAASC,GAAY,CAC7D,WACE,IAAMA,EAAQ,IAAI,EAClBb,EAA4C,EAAI,GAClD,CACF,CAAC,EAEKc,EACJ,MAAM,QAAQ,KAAK,CAACJ,EAAcE,CAAc,CAAC,EAEnD,OAAKE,EAKH,KAAK,wBAAwB,SAAS,CACpC,UAAWb,EAAc,kBACzB,UAAWa,CACb,CAAC,EAPD,KAAK,wBAAwB,SAAS,CACpC,UAAWb,EAAc,0BAC3B,CAAC,EAOIa,CACT,CACA,QAAS,CACP,MAAMC,EAAS,MAAM,KAAK,qBACxB,IAAIjB,CACN,EACA,YAAK,wBAAwB,SAAS,CACpC,UAAWG,EAAc,kBACzB,UAAWc,CACb,CAAC,EACMA,CACT,CACF,CACF,CAEO,aAAoB,CACzB,KAAK,cAAc,YAAY,CACjC,CACF",
6
+ "names": ["DeviceModelId", "GetAppAndVersionCommand", "GetOsVersionCommand", "DEVICE_SESSION_REFRESHER_POLLING_INTERVAL", "SessionEvents", "DevicePinger", "loggerModuleFactory", "connectedDevice", "_sessionEventDispatcher", "sendCommandFunction", "event", "error", "deviceModelId", "chainPromise", "appVersionResult", "timeoutPromise", "resolve", "resultOrTimeout", "result"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{Subject as D}from"rxjs";import{afterEach as f,beforeEach as C,describe as N,expect as n,it as r,vi as t}from"vitest";import{DeviceModelId as E}from"../../../api/device/DeviceModel";import{GetAppAndVersionCommand as S}from"../../../api/index";import{DEVICE_SESSION_REFRESHER_POLLING_INTERVAL as g}from"../../device-session/data/DeviceSessionRefresherConst";import{SessionEvents as i}from"../../device-session/model/DeviceSessionEventDispatcher";import{DevicePinger as p}from"./DevicePinger";N("DevicePinger",()=>{let e,u;const v=t.fn(()=>u);let c,a,l,s;C(()=>{c=new D,a={listen:()=>c.asObservable(),dispatch:t.fn()},e=t.fn(),u={info:t.fn(),warn:t.fn(),error:t.fn(),debug:t.fn(),subscribers:[]},l={deviceModel:{id:E.NANO_X}},s=new p(v,l,a,e)}),f(()=>{s.unsubscribe(),t.restoreAllMocks()}),r("should call sendCommandFunction and dispatch COMMAND_SUCCEEDED event on successful ping for non-NANO_S",async()=>{const o={status:"success",data:{foo:"bar"}};e.mockResolvedValue(o);const d=await s.ping();n(e).toHaveBeenCalledTimes(1);const m=e.mock.calls[0][0];n(m).toBeInstanceOf(S),n(a.dispatch).toHaveBeenCalledWith({eventName:i.COMMAND_SUCCEEDED,eventData:o}),n(d).toEqual(o)}),r("should log error and throw error on ping failure",async()=>{const o=new Error("ping failed");e.mockRejectedValue(o),await n(s.ping()).rejects.toThrow("ping failed"),n(e).toHaveBeenCalledTimes(1)}),r("should dispatch DEVICE_STATE_UPDATE_LOCKED and return null on timeout for NANO_S",async()=>{l.deviceModel.id=E.NANO_S,s.unsubscribe(),s=new p(v,l,a,e);const o=new Promise(()=>{});e.mockReturnValueOnce(o),t.useFakeTimers();const d=s.ping();t.advanceTimersByTime(g*4);const m=await d;n(m).toBeNull(),n(a.dispatch).toHaveBeenCalledWith({eventName:i.DEVICE_STATE_UPDATE_LOCKED}),n(e).toHaveBeenCalledTimes(1),t.useRealTimers()}),r("should call ping on REFRESH_NEEDED event",async()=>{const o={status:"success",data:{foo:"bar"}};e.mockResolvedValue(o),c.next({eventName:i.REFRESH_NEEDED,eventData:void 0}),await Promise.resolve(),n(e).toHaveBeenCalled(),n(a.dispatch).toHaveBeenCalledWith({eventName:i.COMMAND_SUCCEEDED,eventData:o})}),r("should not process events after unsubscribe is called",async()=>{s.unsubscribe(),e.mockClear(),c.next({eventName:i.REFRESH_NEEDED,eventData:void 0}),await Promise.resolve(),n(e).not.toHaveBeenCalled()})});
2
+ //# sourceMappingURL=DevicePinger.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/internal/device-session/model/DevicePinger.test.ts"],
4
+ "sourcesContent": ["import { Subject } from \"rxjs\";\nimport { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { DeviceModelId } from \"@api/device/DeviceModel\";\nimport {\n GetAppAndVersionCommand,\n type TransportConnectedDevice,\n} from \"@api/index\";\nimport type { LoggerPublisherService } from \"@api/types\";\nimport { DEVICE_SESSION_REFRESHER_POLLING_INTERVAL } from \"@internal/device-session/data/DeviceSessionRefresherConst\";\nimport {\n type DeviceSessionEventDispatcher,\n type NewEvent,\n SessionEvents,\n} from \"@internal/device-session/model/DeviceSessionEventDispatcher\";\n\nimport { DevicePinger } from \"./DevicePinger\";\n\ndescribe(\"DevicePinger\", () => {\n let dummySendCommandFunction: ReturnType<typeof vi.fn>;\n let mockLogger: LoggerPublisherService & {\n info: ReturnType<typeof vi.fn>;\n warn: ReturnType<typeof vi.fn>;\n error: ReturnType<typeof vi.fn>;\n };\n const mockedLoggerModuleFactory = vi.fn(() => mockLogger);\n let eventSubject: Subject<NewEvent>;\n let mockSessionEventDispatcher: DeviceSessionEventDispatcher;\n let dummyConnectedDevice: TransportConnectedDevice;\n let devicePinger: DevicePinger;\n\n beforeEach(() => {\n eventSubject = new Subject<NewEvent>();\n mockSessionEventDispatcher = {\n listen: () => eventSubject.asObservable(),\n dispatch: vi.fn(),\n } as unknown as DeviceSessionEventDispatcher;\n\n dummySendCommandFunction = vi.fn();\n mockLogger = {\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n debug: vi.fn(),\n subscribers: [],\n };\n\n dummyConnectedDevice = {\n deviceModel: {\n id: DeviceModelId.NANO_X,\n },\n } as unknown as TransportConnectedDevice;\n\n devicePinger = new DevicePinger(\n mockedLoggerModuleFactory,\n dummyConnectedDevice,\n mockSessionEventDispatcher,\n dummySendCommandFunction,\n );\n });\n\n afterEach(() => {\n devicePinger.unsubscribe();\n vi.restoreAllMocks();\n });\n\n it(\"should call sendCommandFunction and dispatch COMMAND_SUCCEEDED event on successful ping for non-NANO_S\", async () => {\n // given\n const dummyResult = {\n status: \"success\",\n data: { foo: \"bar\" },\n };\n dummySendCommandFunction.mockResolvedValue(dummyResult);\n\n // when\n const result = await devicePinger.ping();\n\n // then\n expect(dummySendCommandFunction).toHaveBeenCalledTimes(1);\n const commandArg = dummySendCommandFunction.mock\n .calls[0]![0] as GetAppAndVersionCommand;\n expect(commandArg).toBeInstanceOf(GetAppAndVersionCommand);\n expect(mockSessionEventDispatcher.dispatch).toHaveBeenCalledWith({\n eventName: SessionEvents.COMMAND_SUCCEEDED,\n eventData: dummyResult,\n });\n expect(result).toEqual(dummyResult);\n });\n\n it(\"should log error and throw error on ping failure\", async () => {\n // given\n const dummyError = new Error(\"ping failed\");\n dummySendCommandFunction.mockRejectedValue(dummyError);\n\n // then\n await expect(devicePinger.ping()).rejects.toThrow(\"ping failed\");\n expect(dummySendCommandFunction).toHaveBeenCalledTimes(1);\n });\n\n it(\"should dispatch DEVICE_STATE_UPDATE_LOCKED and return null on timeout for NANO_S\", async () => {\n // given\n dummyConnectedDevice.deviceModel.id = DeviceModelId.NANO_S;\n devicePinger.unsubscribe();\n devicePinger = new DevicePinger(\n mockedLoggerModuleFactory,\n dummyConnectedDevice,\n mockSessionEventDispatcher,\n dummySendCommandFunction,\n );\n const neverResolvingPromise = new Promise(() => {});\n dummySendCommandFunction.mockReturnValueOnce(neverResolvingPromise);\n vi.useFakeTimers();\n\n // when\n const pingPromise = devicePinger.ping();\n vi.advanceTimersByTime(DEVICE_SESSION_REFRESHER_POLLING_INTERVAL * 4);\n\n const result = await pingPromise;\n\n // then\n expect(result).toBeNull();\n expect(mockSessionEventDispatcher.dispatch).toHaveBeenCalledWith({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_LOCKED,\n });\n expect(dummySendCommandFunction).toHaveBeenCalledTimes(1);\n\n vi.useRealTimers();\n });\n\n it(\"should call ping on REFRESH_NEEDED event\", async () => {\n // given\n const dummyResult = {\n status: \"success\",\n data: { foo: \"bar\" },\n };\n dummySendCommandFunction.mockResolvedValue(dummyResult);\n\n // when\n eventSubject.next({\n eventName: SessionEvents.REFRESH_NEEDED,\n eventData: undefined,\n });\n await Promise.resolve();\n\n // then\n expect(dummySendCommandFunction).toHaveBeenCalled();\n expect(mockSessionEventDispatcher.dispatch).toHaveBeenCalledWith({\n eventName: SessionEvents.COMMAND_SUCCEEDED,\n eventData: dummyResult,\n });\n });\n\n it(\"should not process events after unsubscribe is called\", async () => {\n // given\n devicePinger.unsubscribe();\n dummySendCommandFunction.mockClear();\n\n // when\n eventSubject.next({\n eventName: SessionEvents.REFRESH_NEEDED,\n eventData: undefined,\n });\n await Promise.resolve();\n\n // then\n expect(dummySendCommandFunction).not.toHaveBeenCalled();\n });\n});\n"],
5
+ "mappings": "AAAA,OAAS,WAAAA,MAAe,OACxB,OAAS,aAAAC,EAAW,cAAAC,EAAY,YAAAC,EAAU,UAAAC,EAAQ,MAAAC,EAAI,MAAAC,MAAU,SAEhE,OAAS,iBAAAC,MAAqB,0BAC9B,OACE,2BAAAC,MAEK,aAEP,OAAS,6CAAAC,MAAiD,4DAC1D,OAGE,iBAAAC,MACK,8DAEP,OAAS,gBAAAC,MAAoB,iBAE7BR,EAAS,eAAgB,IAAM,CAC7B,IAAIS,EACAC,EAKJ,MAAMC,EAA4BR,EAAG,GAAG,IAAMO,CAAU,EACxD,IAAIE,EACAC,EACAC,EACAC,EAEJhB,EAAW,IAAM,CACfa,EAAe,IAAIf,EACnBgB,EAA6B,CAC3B,OAAQ,IAAMD,EAAa,aAAa,EACxC,SAAUT,EAAG,GAAG,CAClB,EAEAM,EAA2BN,EAAG,GAAG,EACjCO,EAAa,CACX,KAAMP,EAAG,GAAG,EACZ,KAAMA,EAAG,GAAG,EACZ,MAAOA,EAAG,GAAG,EACb,MAAOA,EAAG,GAAG,EACb,YAAa,CAAC,CAChB,EAEAW,EAAuB,CACrB,YAAa,CACX,GAAIV,EAAc,MACpB,CACF,EAEAW,EAAe,IAAIP,EACjBG,EACAG,EACAD,EACAJ,CACF,CACF,CAAC,EAEDX,EAAU,IAAM,CACdiB,EAAa,YAAY,EACzBZ,EAAG,gBAAgB,CACrB,CAAC,EAEDD,EAAG,yGAA0G,SAAY,CAEvH,MAAMc,EAAc,CAClB,OAAQ,UACR,KAAM,CAAE,IAAK,KAAM,CACrB,EACAP,EAAyB,kBAAkBO,CAAW,EAGtD,MAAMC,EAAS,MAAMF,EAAa,KAAK,EAGvCd,EAAOQ,CAAwB,EAAE,sBAAsB,CAAC,EACxD,MAAMS,EAAaT,EAAyB,KACzC,MAAM,CAAC,EAAG,CAAC,EACdR,EAAOiB,CAAU,EAAE,eAAeb,CAAuB,EACzDJ,EAAOY,EAA2B,QAAQ,EAAE,qBAAqB,CAC/D,UAAWN,EAAc,kBACzB,UAAWS,CACb,CAAC,EACDf,EAAOgB,CAAM,EAAE,QAAQD,CAAW,CACpC,CAAC,EAEDd,EAAG,mDAAoD,SAAY,CAEjE,MAAMiB,EAAa,IAAI,MAAM,aAAa,EAC1CV,EAAyB,kBAAkBU,CAAU,EAGrD,MAAMlB,EAAOc,EAAa,KAAK,CAAC,EAAE,QAAQ,QAAQ,aAAa,EAC/Dd,EAAOQ,CAAwB,EAAE,sBAAsB,CAAC,CAC1D,CAAC,EAEDP,EAAG,mFAAoF,SAAY,CAEjGY,EAAqB,YAAY,GAAKV,EAAc,OACpDW,EAAa,YAAY,EACzBA,EAAe,IAAIP,EACjBG,EACAG,EACAD,EACAJ,CACF,EACA,MAAMW,EAAwB,IAAI,QAAQ,IAAM,CAAC,CAAC,EAClDX,EAAyB,oBAAoBW,CAAqB,EAClEjB,EAAG,cAAc,EAGjB,MAAMkB,EAAcN,EAAa,KAAK,EACtCZ,EAAG,oBAAoBG,EAA4C,CAAC,EAEpE,MAAMW,EAAS,MAAMI,EAGrBpB,EAAOgB,CAAM,EAAE,SAAS,EACxBhB,EAAOY,EAA2B,QAAQ,EAAE,qBAAqB,CAC/D,UAAWN,EAAc,0BAC3B,CAAC,EACDN,EAAOQ,CAAwB,EAAE,sBAAsB,CAAC,EAExDN,EAAG,cAAc,CACnB,CAAC,EAEDD,EAAG,2CAA4C,SAAY,CAEzD,MAAMc,EAAc,CAClB,OAAQ,UACR,KAAM,CAAE,IAAK,KAAM,CACrB,EACAP,EAAyB,kBAAkBO,CAAW,EAGtDJ,EAAa,KAAK,CAChB,UAAWL,EAAc,eACzB,UAAW,MACb,CAAC,EACD,MAAM,QAAQ,QAAQ,EAGtBN,EAAOQ,CAAwB,EAAE,iBAAiB,EAClDR,EAAOY,EAA2B,QAAQ,EAAE,qBAAqB,CAC/D,UAAWN,EAAc,kBACzB,UAAWS,CACb,CAAC,CACH,CAAC,EAEDd,EAAG,wDAAyD,SAAY,CAEtEa,EAAa,YAAY,EACzBN,EAAyB,UAAU,EAGnCG,EAAa,KAAK,CAChB,UAAWL,EAAc,eACzB,UAAW,MACb,CAAC,EACD,MAAM,QAAQ,QAAQ,EAGtBN,EAAOQ,CAAwB,EAAE,IAAI,iBAAiB,CACxD,CAAC,CACH,CAAC",
6
+ "names": ["Subject", "afterEach", "beforeEach", "describe", "expect", "it", "vi", "DeviceModelId", "GetAppAndVersionCommand", "DEVICE_SESSION_REFRESHER_POLLING_INTERVAL", "SessionEvents", "DevicePinger", "dummySendCommandFunction", "mockLogger", "mockedLoggerModuleFactory", "eventSubject", "mockSessionEventDispatcher", "dummyConnectedDevice", "devicePinger", "dummyResult", "result", "commandArg", "dummyError", "neverResolvingPromise", "pingPromise"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{Left as c}from"purify-ts";import{BehaviorSubject as d}from"rxjs";import{v4 as v}from"uuid";import{CommandUtils as p}from"../../../api/command/utils/CommandUtils";import{DeviceStatus as r}from"../../../api/device/DeviceStatus";import{DeviceSessionStateType as u}from"../../../api/device-session/DeviceSessionState";import{DeviceBusyError as S}from"../../../api/Error";import{DEVICE_SESSION_REFRESH_INTERVAL as l}from"../../device-session/data/DeviceSessionRefresherConst";import{RefresherService as h}from"../../device-session/service/RefresherService";import{DeviceSessionRefresher as m}from"./DeviceSessionRefresher";class O{_id;_connectedDevice;_deviceState;_refresher;_refresherService;_managerApiService;_secureChannelService;_readyPromise;_resolveReady;constructor({connectedDevice:e,id:i=v()},s,t,n){this._id=i,this._connectedDevice=e,this._deviceState=new d({sessionStateType:u.Connected,deviceStatus:r.CONNECTED,deviceModelId:this._connectedDevice.deviceModel.id}),this._refresher=new m({refreshInterval:l,deviceStatus:r.CONNECTED,deviceModelId:this._connectedDevice.deviceModel.id,sendApduFn:o=>this.sendApdu(o,{isPolling:!0,triggersDisconnection:!1}),updateStateFn:o=>{const a=this._deviceState.getValue();this.setDeviceSessionState(o(a))}},s("device-session-refresher")),this._refresherService=new h(this._refresher),this._managerApiService=t,this._secureChannelService=n,this._readyPromise=new Promise(o=>{this._resolveReady=o}),this._refresher.start()}async waitIsReady(){await this._readyPromise}get id(){return this._id}get connectedDevice(){return this._connectedDevice}get state(){return this._deviceState.asObservable()}setDeviceSessionState(e){this._deviceState.next(e),this._resolveReady()}async sendApdu(e,i={isPolling:!1,triggersDisconnection:!1,abortTimeout:0}){let s;return i.isPolling||(s=this._refresherService.disableRefresher("sendApdu"),await this.waitUntilReady(i.abortTimeout)),this._deviceState.getValue().deviceStatus===r.BUSY?c(new S):(this.updateDeviceStatus(r.BUSY),(await this._connectedDevice.sendApdu(e,i.triggersDisconnection)).ifRight(o=>{console.log("device session apdu response",o.data),p.isLockedDeviceResponse(o)?this.updateDeviceStatus(r.LOCKED):this.updateDeviceStatus(r.CONNECTED),!i.isPolling&&s&&s()}).ifLeft(()=>{console.log("device session apdu error"),this.updateDeviceStatus(r.CONNECTED),!i.isPolling&&s&&s()}))}async sendCommand(e){const i=e.getApdu();return(await this.sendApdu(i.getRawApdu(),{isPolling:!1,triggersDisconnection:e.triggersDisconnection??!1})).caseOf({Left:t=>{throw t},Right:t=>e.parseResponse(t,this._connectedDevice.deviceModel.id)})}executeDeviceAction(e){const{observable:i,cancel:s}=e._execute({sendApdu:async t=>this.sendApdu(t),sendCommand:async t=>this.sendCommand(t),getDeviceSessionState:()=>this._deviceState.getValue(),getDeviceSessionStateObservable:()=>this.state,setDeviceSessionState:t=>(this.setDeviceSessionState(t),this._deviceState.getValue()),disableRefresher:t=>this._refresherService.disableRefresher(t),getManagerApiService:()=>this._managerApiService,getSecureChannelService:()=>this._secureChannelService});return{observable:i,cancel:s}}close(){this.updateDeviceStatus(r.NOT_CONNECTED),this._deviceState.complete(),this._refresher.stop()}disableRefresher(e){return this._refresherService.disableRefresher(e)}updateDeviceStatus(e){const i=this._deviceState.getValue();this._refresher.setDeviceStatus(e),this._deviceState.next({...i,deviceStatus:e})}async waitUntilReady(e=0){let i;const t=[new Promise(n=>{i=this._deviceState.subscribe(o=>{[r.LOCKED,r.CONNECTED].includes(o.deviceStatus)&&(i?.unsubscribe(),n())})})];e>0&&t.push(new Promise(n=>{setTimeout(()=>{this.updateDeviceStatus(r.CONNECTED),n()},e)})),await Promise.race(t)}}export{O as DeviceSession};
1
+ import{BehaviorSubject as p}from"rxjs";import{v4 as v}from"uuid";import{CommandUtils as d}from"../../../api/command/utils/CommandUtils";import{DeviceStatus as a}from"../../../api/device/DeviceStatus";import{DeviceSessionStateType as h}from"../../../api/device-session/DeviceSessionState";import{DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS as S}from"../../device-session/data/DeviceSessionRefresherConst";import{MutexService as u}from"../../device-session/service/MutexService";import{RefresherService as m}from"../../device-session/service/RefresherService";import{DevicePinger as D}from"./DevicePinger";import{DeviceSessionEventDispatcher as l,SessionEvents as r}from"./DeviceSessionEventDispatcher";import{DeviceSessionRefresher as _}from"./DeviceSessionRefresher";import{DeviceSessionStateHandler as f}from"./DeviceSessionStateHandler";class w{_id;_connectedDevice;_deviceState;_managerApiService;_secureChannelService;_logger;_refresherOptions;_pinger;_deviceSessionRefresher;_refresherService;_commandMutex=new u;_sessionEventDispatcher=new l;constructor({connectedDevice:e,id:i=v()},s,t,n,o){this._id=i,this._connectedDevice=e,this._logger=s("device-session"),this._managerApiService=t,this._secureChannelService=n,this._refresherOptions={...S,...o},this._deviceState=new p({sessionStateType:h.Connected,deviceStatus:a.CONNECTED,deviceModelId:this._connectedDevice.deviceModel.id}),this._pinger=new D(s,e,this._sessionEventDispatcher,c=>this.sendCommand(c)),this._deviceSessionRefresher=new _(s,this._refresherOptions,this._sessionEventDispatcher,this._connectedDevice),new f(s,this._sessionEventDispatcher,this._connectedDevice,this._deviceState,c=>this.setDeviceSessionState(c)),this._refresherService=new m(s,{start:()=>this._deviceSessionRefresher.restartRefresher(),stop:()=>this._deviceSessionRefresher.stopRefresher()})}async initialiseSession(){try{await this._pinger.ping()}catch(e){throw this._logger.error("Error while initialising session",{data:{error:e}}),e}finally{this._refresherOptions.isRefresherDisabled||this._deviceSessionRefresher.startRefresher()}}get id(){return this._id}get connectedDevice(){return this._connectedDevice}get state(){return this._deviceState.asObservable()}setDeviceSessionState(e){this._deviceState.next(e)}async sendApdu(e,i={isPolling:!1,triggersDisconnection:!1,abortTimeout:void 0}){let s;const t=await this._commandMutex.lock();i.abortTimeout&&(s=setTimeout(()=>{this._deviceState.getValue().deviceStatus===a.BUSY&&(this._logger.warn(`Aborting command execution due to timeout of ${i.abortTimeout}ms`,{data:{mutex:this._commandMutex}}),this._sessionEventDispatcher.dispatch({eventName:r.DEVICE_STATE_UPDATE_CONNECTED}),this._commandMutex.clear())},i.abortTimeout));try{this._sessionEventDispatcher.dispatch({eventName:r.DEVICE_STATE_UPDATE_BUSY});const n=await this._connectedDevice.sendApdu(e,i.triggersDisconnection);return n.ifRight(o=>{d.isLockedDeviceResponse(o)?this._sessionEventDispatcher.dispatch({eventName:r.DEVICE_STATE_UPDATE_LOCKED}):this._sessionEventDispatcher.dispatch({eventName:r.DEVICE_STATE_UPDATE_CONNECTED})}).ifLeft(()=>{this._sessionEventDispatcher.dispatch({eventName:r.DEVICE_STATE_UPDATE_CONNECTED})}),n}finally{s&&clearTimeout(s),t()}}async sendCommand(e){const i=e.getApdu();return(await this.sendApdu(i.getRawApdu(),{isPolling:!1,triggersDisconnection:e.triggersDisconnection??!1})).caseOf({Left:t=>{throw t},Right:t=>e.parseResponse(t,this._connectedDevice.deviceModel.id)})}executeDeviceAction(e){const{observable:i,cancel:s}=e._execute({sendApdu:async t=>this.sendApdu(t),sendCommand:async t=>this.sendCommand(t),getDeviceSessionState:()=>this._deviceState.getValue(),getDeviceSessionStateObservable:()=>this.state,setDeviceSessionState:t=>(this.setDeviceSessionState(t),this._deviceState.getValue()),disableRefresher:t=>this._refresherService.disableRefresher(t),getManagerApiService:()=>this._managerApiService,getSecureChannelService:()=>this._secureChannelService});return{observable:i,cancel:s}}close(){this._updateDeviceStatus(a.NOT_CONNECTED),this._deviceState.complete(),this._deviceSessionRefresher.stopRefresher()}disableRefresher(e){return this._refresherService.disableRefresher(e)}_updateDeviceStatus(e){const i=this._deviceState.getValue();this._deviceState.next({...i,deviceStatus:e})}}export{w as DeviceSession};
2
2
  //# sourceMappingURL=DeviceSession.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/device-session/model/DeviceSession.ts"],
4
- "sourcesContent": ["import { type Either, Left } from \"purify-ts\";\nimport { BehaviorSubject, type Subscription } from \"rxjs\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { type Command } from \"@api/command/Command\";\nimport { type CommandResult } from \"@api/command/model/CommandResult\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { DeviceStatus } from \"@api/device/DeviceStatus\";\nimport {\n type DeviceAction,\n type DeviceActionIntermediateValue,\n type ExecuteDeviceActionReturnType,\n} from \"@api/device-action/DeviceAction\";\nimport { type ApduResponse } from \"@api/device-session/ApduResponse\";\nimport {\n type DeviceSessionState,\n DeviceSessionStateType,\n} from \"@api/device-session/DeviceSessionState\";\nimport { type DeviceSessionId } from \"@api/device-session/types\";\nimport { DeviceBusyError, type DmkError } from \"@api/Error\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { type TransportConnectedDevice } from \"@api/transport/model/TransportConnectedDevice\";\nimport { DEVICE_SESSION_REFRESH_INTERVAL } from \"@internal/device-session/data/DeviceSessionRefresherConst\";\nimport { RefresherService } from \"@internal/device-session/service/RefresherService\";\nimport { type ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\nimport { type SecureChannelService } from \"@internal/secure-channel/service/SecureChannelService\";\n\nimport { DeviceSessionRefresher } from \"./DeviceSessionRefresher\";\n\nexport type SessionConstructorArgs = {\n connectedDevice: TransportConnectedDevice;\n id?: DeviceSessionId;\n};\n\ntype SendApduOptions = {\n isPolling?: boolean;\n triggersDisconnection?: boolean;\n abortTimeout?: number;\n};\n\n/**\n * Represents a session with a device.\n */\nexport class DeviceSession {\n private readonly _id: DeviceSessionId;\n private readonly _connectedDevice: TransportConnectedDevice;\n private readonly _deviceState: BehaviorSubject<DeviceSessionState>;\n private readonly _refresher: DeviceSessionRefresher;\n private readonly _refresherService: RefresherService;\n private readonly _managerApiService: ManagerApiService;\n private readonly _secureChannelService: SecureChannelService;\n private readonly _readyPromise: Promise<void>;\n private _resolveReady!: () => void;\n\n constructor(\n { connectedDevice, id = uuidv4() }: SessionConstructorArgs,\n loggerModuleFactory: (tag: string) => LoggerPublisherService,\n managerApiService: ManagerApiService,\n secureChannelService: SecureChannelService,\n ) {\n this._id = id;\n this._connectedDevice = connectedDevice;\n this._deviceState = new BehaviorSubject<DeviceSessionState>({\n sessionStateType: DeviceSessionStateType.Connected,\n deviceStatus: DeviceStatus.CONNECTED,\n deviceModelId: this._connectedDevice.deviceModel.id,\n });\n this._refresher = new DeviceSessionRefresher(\n {\n refreshInterval: DEVICE_SESSION_REFRESH_INTERVAL,\n deviceStatus: DeviceStatus.CONNECTED,\n deviceModelId: this._connectedDevice.deviceModel.id,\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._refresherService = new RefresherService(this._refresher);\n this._managerApiService = managerApiService;\n this._secureChannelService = secureChannelService;\n this._readyPromise = new Promise<void>((resolve) => {\n this._resolveReady = resolve;\n });\n this._refresher.start();\n }\n\n public async waitIsReady() {\n await this._readyPromise;\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 this._resolveReady();\n }\n\n public async sendApdu(\n rawApdu: Uint8Array,\n options: SendApduOptions = {\n isPolling: false,\n triggersDisconnection: false,\n abortTimeout: 0,\n },\n ): Promise<Either<DmkError, ApduResponse>> {\n let reenableRefresher: () => void;\n if (!options.isPolling) {\n reenableRefresher = this._refresherService.disableRefresher(\"sendApdu\");\n await this.waitUntilReady(options.abortTimeout);\n }\n\n const sessionState = this._deviceState.getValue();\n if (sessionState.deviceStatus === DeviceStatus.BUSY) {\n return Left(new DeviceBusyError());\n }\n\n this.updateDeviceStatus(DeviceStatus.BUSY);\n\n const errorOrResponse = await this._connectedDevice.sendApdu(\n rawApdu,\n options.triggersDisconnection,\n );\n\n return errorOrResponse\n .ifRight((response: ApduResponse) => {\n console.log(\"device session apdu response\", response.data);\n if (CommandUtils.isLockedDeviceResponse(response)) {\n this.updateDeviceStatus(DeviceStatus.LOCKED);\n } else {\n this.updateDeviceStatus(DeviceStatus.CONNECTED);\n }\n\n if (!options.isPolling && reenableRefresher) {\n reenableRefresher();\n }\n })\n .ifLeft(() => {\n console.log(\"device session apdu error\");\n this.updateDeviceStatus(DeviceStatus.CONNECTED);\n\n if (!options.isPolling && reenableRefresher) {\n reenableRefresher();\n }\n });\n }\n\n public 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 public executeDeviceAction<\n Output,\n Input,\n Error extends DmkError,\n IntermediateValue extends DeviceActionIntermediateValue,\n >(\n deviceAction: DeviceAction<Output, Input, Error, IntermediateValue>,\n ): ExecuteDeviceActionReturnType<Output, Error, IntermediateValue> {\n const { observable, cancel } = deviceAction._execute({\n sendApdu: async (apdu: Uint8Array) => this.sendApdu(apdu),\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 disableRefresher: (blockerId: string) =>\n this._refresherService.disableRefresher(blockerId),\n getManagerApiService: () => this._managerApiService,\n getSecureChannelService: () => this._secureChannelService,\n });\n\n return {\n observable,\n cancel,\n };\n }\n\n public close() {\n this.updateDeviceStatus(DeviceStatus.NOT_CONNECTED);\n this._deviceState.complete();\n this._refresher.stop();\n }\n\n public disableRefresher(id: string): () => void {\n return this._refresherService.disableRefresher(id);\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 private async waitUntilReady(abortTimeout: number = 0) {\n let deviceStateSub: Subscription;\n\n const deviceStatusPromise = new Promise<void>((resolve) => {\n deviceStateSub = this._deviceState.subscribe((state) => {\n if (\n [DeviceStatus.LOCKED, DeviceStatus.CONNECTED].includes(\n state.deviceStatus,\n )\n ) {\n deviceStateSub?.unsubscribe();\n resolve();\n }\n });\n });\n const waitPromises = [deviceStatusPromise];\n if (abortTimeout > 0) {\n waitPromises.push(\n new Promise<void>((resolve) => {\n setTimeout(() => {\n this.updateDeviceStatus(DeviceStatus.CONNECTED);\n resolve();\n }, abortTimeout);\n }),\n );\n }\n await Promise.race(waitPromises);\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["Left", "BehaviorSubject", "uuidv4", "CommandUtils", "DeviceStatus", "DeviceSessionStateType", "DeviceBusyError", "DEVICE_SESSION_REFRESH_INTERVAL", "RefresherService", "DeviceSessionRefresher", "DeviceSession", "connectedDevice", "id", "loggerModuleFactory", "managerApiService", "secureChannelService", "rawApdu", "callback", "state", "resolve", "options", "reenableRefresher", "response", "command", "apdu", "err", "r", "deviceAction", "observable", "cancel", "blockerId", "deviceStatus", "sessionState", "abortTimeout", "deviceStateSub", "waitPromises"]
4
+ "sourcesContent": ["import { type Either } from \"purify-ts\";\nimport { BehaviorSubject, type Observable } from \"rxjs\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { type Command } from \"@api/command/Command\";\nimport { type CommandResult } from \"@api/command/model/CommandResult\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { DeviceStatus } from \"@api/device/DeviceStatus\";\nimport {\n type DeviceAction,\n type DeviceActionIntermediateValue,\n type ExecuteDeviceActionReturnType,\n} from \"@api/device-action/DeviceAction\";\nimport { type ApduResponse } from \"@api/device-session/ApduResponse\";\nimport {\n type DeviceSessionState,\n DeviceSessionStateType,\n} from \"@api/device-session/DeviceSessionState\";\nimport { type DeviceSessionId } from \"@api/device-session/types\";\nimport { type DmkError } from \"@api/Error\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { type TransportConnectedDevice } from \"@api/transport/model/TransportConnectedDevice\";\nimport { DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS } from \"@internal/device-session/data/DeviceSessionRefresherConst\";\nimport { MutexService } from \"@internal/device-session/service/MutexService\";\nimport { RefresherService } from \"@internal/device-session/service/RefresherService\";\nimport { type ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\nimport { type SecureChannelService } from \"@internal/secure-channel/service/SecureChannelService\";\n\nimport { DevicePinger } from \"./DevicePinger\";\nimport {\n DeviceSessionEventDispatcher,\n SessionEvents,\n} from \"./DeviceSessionEventDispatcher\";\nimport { DeviceSessionRefresher } from \"./DeviceSessionRefresher\";\nimport { DeviceSessionStateHandler } from \"./DeviceSessionStateHandler\";\n\nexport type SessionConstructorArgs = {\n connectedDevice: TransportConnectedDevice;\n id?: DeviceSessionId;\n};\n\nexport type DeviceSessionRefresherOptions = {\n isRefresherDisabled: boolean;\n pollingInterval?: number;\n};\n\ntype SendApduOptions = {\n isPolling?: boolean;\n triggersDisconnection?: boolean;\n abortTimeout?: number;\n};\n\n/**\n * Represents a session with a device.\n */\nexport class DeviceSession {\n private readonly _id: DeviceSessionId;\n private readonly _connectedDevice: TransportConnectedDevice;\n private readonly _deviceState: BehaviorSubject<DeviceSessionState>;\n private readonly _managerApiService: ManagerApiService;\n private readonly _secureChannelService: SecureChannelService;\n private readonly _logger: LoggerPublisherService;\n private readonly _refresherOptions: DeviceSessionRefresherOptions;\n private _pinger: DevicePinger;\n private _deviceSessionRefresher: DeviceSessionRefresher;\n private readonly _refresherService: RefresherService;\n private _commandMutex = new MutexService();\n private _sessionEventDispatcher = new DeviceSessionEventDispatcher();\n\n constructor(\n { connectedDevice, id = uuidv4() }: SessionConstructorArgs,\n loggerModuleFactory: (tag: string) => LoggerPublisherService,\n managerApiService: ManagerApiService,\n secureChannelService: SecureChannelService,\n deviceSessionRefresherOptions: DeviceSessionRefresherOptions | undefined,\n ) {\n this._id = id;\n this._connectedDevice = connectedDevice;\n this._logger = loggerModuleFactory(\"device-session\");\n this._managerApiService = managerApiService;\n this._secureChannelService = secureChannelService;\n this._refresherOptions = {\n ...DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS,\n ...deviceSessionRefresherOptions,\n };\n this._deviceState = new BehaviorSubject<DeviceSessionState>({\n sessionStateType: DeviceSessionStateType.Connected,\n deviceStatus: DeviceStatus.CONNECTED,\n deviceModelId: this._connectedDevice.deviceModel.id,\n });\n\n this._pinger = new DevicePinger(\n loggerModuleFactory,\n connectedDevice,\n this._sessionEventDispatcher,\n (command) => this.sendCommand(command),\n );\n this._deviceSessionRefresher = new DeviceSessionRefresher(\n loggerModuleFactory,\n this._refresherOptions,\n this._sessionEventDispatcher,\n this._connectedDevice,\n );\n new DeviceSessionStateHandler(\n loggerModuleFactory,\n this._sessionEventDispatcher,\n this._connectedDevice,\n this._deviceState,\n (state) => this.setDeviceSessionState(state),\n );\n\n this._refresherService = new RefresherService(loggerModuleFactory, {\n start: () => this._deviceSessionRefresher.restartRefresher(),\n stop: () => this._deviceSessionRefresher.stopRefresher(),\n });\n }\n\n public async initialiseSession(): Promise<void> {\n try {\n await this._pinger.ping();\n } catch (error) {\n this._logger.error(\"Error while initialising session\", {\n data: { error },\n });\n throw error;\n } finally {\n if (!this._refresherOptions.isRefresherDisabled) {\n this._deviceSessionRefresher.startRefresher();\n }\n }\n }\n\n public get id(): DeviceSessionId {\n return this._id;\n }\n\n public get connectedDevice(): TransportConnectedDevice {\n return this._connectedDevice;\n }\n\n public get state(): Observable<DeviceSessionState> {\n return this._deviceState.asObservable();\n }\n\n public setDeviceSessionState(state: DeviceSessionState): void {\n this._deviceState.next(state);\n }\n\n public async sendApdu(\n rawApdu: Uint8Array,\n options: SendApduOptions = {\n isPolling: false,\n triggersDisconnection: false,\n abortTimeout: undefined,\n },\n ): Promise<Either<DmkError, ApduResponse>> {\n let abortSendApduTimeout: NodeJS.Timeout | undefined = undefined;\n const release = await this._commandMutex.lock();\n\n if (options.abortTimeout) {\n abortSendApduTimeout = setTimeout(() => {\n if (this._deviceState.getValue().deviceStatus !== DeviceStatus.BUSY) {\n return;\n }\n this._logger.warn(\n `Aborting command execution due to timeout of ${options.abortTimeout}ms`,\n { data: { mutex: this._commandMutex } },\n );\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_CONNECTED,\n });\n this._commandMutex.clear();\n }, options.abortTimeout);\n }\n\n try {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_BUSY,\n });\n const result = await this._connectedDevice.sendApdu(\n rawApdu,\n options.triggersDisconnection,\n );\n\n result\n .ifRight((response: ApduResponse) => {\n if (CommandUtils.isLockedDeviceResponse(response)) {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_LOCKED,\n });\n } else {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_CONNECTED,\n });\n }\n })\n .ifLeft(() => {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_CONNECTED,\n });\n });\n return result;\n } finally {\n if (abortSendApduTimeout) {\n clearTimeout(abortSendApduTimeout);\n }\n release();\n }\n }\n\n public async sendCommand<Response, Args, ErrorStatusCodes>(\n command: Command<Response, Args, ErrorStatusCodes>,\n ): Promise<CommandResult<Response, ErrorStatusCodes>> {\n const apdu = command.getApdu();\n\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 public executeDeviceAction<\n Output,\n Input,\n E extends DmkError,\n IntermediateValue extends DeviceActionIntermediateValue,\n >(\n deviceAction: DeviceAction<Output, Input, E, IntermediateValue>,\n ): ExecuteDeviceActionReturnType<Output, E, IntermediateValue> {\n const { observable, cancel } = deviceAction._execute({\n sendApdu: async (apdu: Uint8Array) => this.sendApdu(apdu),\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 disableRefresher: (blockerId: string) =>\n this._refresherService.disableRefresher(blockerId),\n getManagerApiService: () => this._managerApiService,\n getSecureChannelService: () => this._secureChannelService,\n });\n return { observable, cancel };\n }\n\n public close(): void {\n this._updateDeviceStatus(DeviceStatus.NOT_CONNECTED);\n this._deviceState.complete();\n this._deviceSessionRefresher.stopRefresher();\n }\n\n public disableRefresher(id: string): () => void {\n return this._refresherService.disableRefresher(id);\n }\n\n private _updateDeviceStatus(deviceStatus: DeviceStatus): void {\n const state = this._deviceState.getValue();\n this._deviceState.next({ ...state, deviceStatus });\n }\n}\n"],
5
+ "mappings": "AACA,OAAS,mBAAAA,MAAwC,OACjD,OAAS,MAAMC,MAAc,OAI7B,OAAS,gBAAAC,MAAoB,kCAC7B,OAAS,gBAAAC,MAAoB,2BAO7B,OAEE,0BAAAC,MACK,yCAKP,OAAS,4CAAAC,MAAgD,4DACzD,OAAS,gBAAAC,MAAoB,gDAC7B,OAAS,oBAAAC,MAAwB,oDAIjC,OAAS,gBAAAC,MAAoB,iBAC7B,OACE,gCAAAC,EACA,iBAAAC,MACK,iCACP,OAAS,0BAAAC,MAA8B,2BACvC,OAAS,6BAAAC,MAAiC,8BAqBnC,MAAMC,CAAc,CACR,IACA,iBACA,aACA,mBACA,sBACA,QACA,kBACT,QACA,wBACS,kBACT,cAAgB,IAAIP,EACpB,wBAA0B,IAAIG,EAEtC,YACE,CAAE,gBAAAK,EAAiB,GAAAC,EAAKd,EAAO,CAAE,EACjCe,EACAC,EACAC,EACAC,EACA,CACA,KAAK,IAAMJ,EACX,KAAK,iBAAmBD,EACxB,KAAK,QAAUE,EAAoB,gBAAgB,EACnD,KAAK,mBAAqBC,EAC1B,KAAK,sBAAwBC,EAC7B,KAAK,kBAAoB,CACvB,GAAGb,EACH,GAAGc,CACL,EACA,KAAK,aAAe,IAAInB,EAAoC,CAC1D,iBAAkBI,EAAuB,UACzC,aAAcD,EAAa,UAC3B,cAAe,KAAK,iBAAiB,YAAY,EACnD,CAAC,EAED,KAAK,QAAU,IAAIK,EACjBQ,EACAF,EACA,KAAK,wBACJM,GAAY,KAAK,YAAYA,CAAO,CACvC,EACA,KAAK,wBAA0B,IAAIT,EACjCK,EACA,KAAK,kBACL,KAAK,wBACL,KAAK,gBACP,EACA,IAAIJ,EACFI,EACA,KAAK,wBACL,KAAK,iBACL,KAAK,aACJK,GAAU,KAAK,sBAAsBA,CAAK,CAC7C,EAEA,KAAK,kBAAoB,IAAId,EAAiBS,EAAqB,CACjE,MAAO,IAAM,KAAK,wBAAwB,iBAAiB,EAC3D,KAAM,IAAM,KAAK,wBAAwB,cAAc,CACzD,CAAC,CACH,CAEA,MAAa,mBAAmC,CAC9C,GAAI,CACF,MAAM,KAAK,QAAQ,KAAK,CAC1B,OAASM,EAAO,CACd,WAAK,QAAQ,MAAM,mCAAoC,CACrD,KAAM,CAAE,MAAAA,CAAM,CAChB,CAAC,EACKA,CACR,QAAE,CACK,KAAK,kBAAkB,qBAC1B,KAAK,wBAAwB,eAAe,CAEhD,CACF,CAEA,IAAW,IAAsB,CAC/B,OAAO,KAAK,GACd,CAEA,IAAW,iBAA4C,CACrD,OAAO,KAAK,gBACd,CAEA,IAAW,OAAwC,CACjD,OAAO,KAAK,aAAa,aAAa,CACxC,CAEO,sBAAsBD,EAAiC,CAC5D,KAAK,aAAa,KAAKA,CAAK,CAC9B,CAEA,MAAa,SACXE,EACAC,EAA2B,CACzB,UAAW,GACX,sBAAuB,GACvB,aAAc,MAChB,EACyC,CACzC,IAAIC,EACJ,MAAMC,EAAU,MAAM,KAAK,cAAc,KAAK,EAE1CF,EAAQ,eACVC,EAAuB,WAAW,IAAM,CAClC,KAAK,aAAa,SAAS,EAAE,eAAiBtB,EAAa,OAG/D,KAAK,QAAQ,KACX,gDAAgDqB,EAAQ,YAAY,KACpE,CAAE,KAAM,CAAE,MAAO,KAAK,aAAc,CAAE,CACxC,EACA,KAAK,wBAAwB,SAAS,CACpC,UAAWd,EAAc,6BAC3B,CAAC,EACD,KAAK,cAAc,MAAM,EAC3B,EAAGc,EAAQ,YAAY,GAGzB,GAAI,CACF,KAAK,wBAAwB,SAAS,CACpC,UAAWd,EAAc,wBAC3B,CAAC,EACD,MAAMiB,EAAS,MAAM,KAAK,iBAAiB,SACzCJ,EACAC,EAAQ,qBACV,EAEA,OAAAG,EACG,QAASC,GAA2B,CAC/B1B,EAAa,uBAAuB0B,CAAQ,EAC9C,KAAK,wBAAwB,SAAS,CACpC,UAAWlB,EAAc,0BAC3B,CAAC,EAED,KAAK,wBAAwB,SAAS,CACpC,UAAWA,EAAc,6BAC3B,CAAC,CAEL,CAAC,EACA,OAAO,IAAM,CACZ,KAAK,wBAAwB,SAAS,CACpC,UAAWA,EAAc,6BAC3B,CAAC,CACH,CAAC,EACIiB,CACT,QAAE,CACIF,GACF,aAAaA,CAAoB,EAEnCC,EAAQ,CACV,CACF,CAEA,MAAa,YACXN,EACoD,CACpD,MAAMS,EAAOT,EAAQ,QAAQ,EAO7B,OALiB,MAAM,KAAK,SAASS,EAAK,WAAW,EAAG,CACtD,UAAW,GACX,sBAAuBT,EAAQ,uBAAyB,EAC1D,CAAC,GAEe,OAAO,CACrB,KAAOU,GAAQ,CACb,MAAMA,CACR,EACA,MAAQC,GACNX,EAAQ,cAAcW,EAAG,KAAK,iBAAiB,YAAY,EAAE,CACjE,CAAC,CACH,CAEO,oBAMLC,EAC6D,CAC7D,KAAM,CAAE,WAAAC,EAAY,OAAAC,CAAO,EAAIF,EAAa,SAAS,CACnD,SAAU,MAAOH,GAAqB,KAAK,SAASA,CAAI,EACxD,YAAa,MACXT,GACG,KAAK,YAAYA,CAAO,EAC7B,sBAAuB,IAAM,KAAK,aAAa,SAAS,EACxD,gCAAiC,IAAM,KAAK,MAC5C,sBAAwBC,IACtB,KAAK,sBAAsBA,CAAK,EACzB,KAAK,aAAa,SAAS,GAEpC,iBAAmBc,GACjB,KAAK,kBAAkB,iBAAiBA,CAAS,EACnD,qBAAsB,IAAM,KAAK,mBACjC,wBAAyB,IAAM,KAAK,qBACtC,CAAC,EACD,MAAO,CAAE,WAAAF,EAAY,OAAAC,CAAO,CAC9B,CAEO,OAAc,CACnB,KAAK,oBAAoB/B,EAAa,aAAa,EACnD,KAAK,aAAa,SAAS,EAC3B,KAAK,wBAAwB,cAAc,CAC7C,CAEO,iBAAiBY,EAAwB,CAC9C,OAAO,KAAK,kBAAkB,iBAAiBA,CAAE,CACnD,CAEQ,oBAAoBqB,EAAkC,CAC5D,MAAMf,EAAQ,KAAK,aAAa,SAAS,EACzC,KAAK,aAAa,KAAK,CAAE,GAAGA,EAAO,aAAAe,CAAa,CAAC,CACnD,CACF",
6
+ "names": ["BehaviorSubject", "uuidv4", "CommandUtils", "DeviceStatus", "DeviceSessionStateType", "DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS", "MutexService", "RefresherService", "DevicePinger", "DeviceSessionEventDispatcher", "SessionEvents", "DeviceSessionRefresher", "DeviceSessionStateHandler", "DeviceSession", "connectedDevice", "id", "loggerModuleFactory", "managerApiService", "secureChannelService", "deviceSessionRefresherOptions", "command", "state", "error", "rawApdu", "options", "abortSendApduTimeout", "release", "result", "response", "apdu", "err", "r", "deviceAction", "observable", "cancel", "blockerId", "deviceStatus"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{connectedDeviceStubBuilder as n}from"../../../api/transport/model/TransportConnectedDevice.stub";import{DeviceSession as t}from"../../device-session/model/DeviceSession";const a=(e={},r,i,o)=>new t({connectedDevice:n(),id:"fakeSessionId",...e},r,i,o);export{a as deviceSessionStubBuilder};
1
+ import{connectedDeviceStubBuilder as s}from"../../../api/transport/model/TransportConnectedDevice.stub";import{DeviceSession as t}from"../../device-session/model/DeviceSession";const p=(e={},r,i,o,n)=>new t({connectedDevice:s(),id:"fakeSessionId",...e},r,i,o,n);export{p as deviceSessionStubBuilder};
2
2
  //# sourceMappingURL=DeviceSession.stub.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/device-session/model/DeviceSession.stub.ts"],
4
- "sourcesContent": ["import { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { connectedDeviceStubBuilder } from \"@api/transport/model/TransportConnectedDevice.stub\";\nimport {\n DeviceSession,\n type SessionConstructorArgs,\n} from \"@internal/device-session/model/DeviceSession\";\nimport type { ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\nimport { type SecureChannelService } from \"@internal/secure-channel/service/SecureChannelService\";\n\nexport const deviceSessionStubBuilder = (\n props: Partial<SessionConstructorArgs> = {},\n loggerFactory: (tag: string) => LoggerPublisherService,\n managerApi: ManagerApiService,\n secureChannel: SecureChannelService,\n) =>\n new DeviceSession(\n {\n connectedDevice: connectedDeviceStubBuilder(),\n id: \"fakeSessionId\",\n ...props,\n },\n loggerFactory,\n managerApi,\n secureChannel,\n );\n"],
5
- "mappings": "AACA,OAAS,8BAAAA,MAAkC,qDAC3C,OACE,iBAAAC,MAEK,+CAIA,MAAMC,EAA2B,CACtCC,EAAyC,CAAC,EAC1CC,EACAC,EACAC,IAEA,IAAIL,EACF,CACE,gBAAiBD,EAA2B,EAC5C,GAAI,gBACJ,GAAGG,CACL,EACAC,EACAC,EACAC,CACF",
6
- "names": ["connectedDeviceStubBuilder", "DeviceSession", "deviceSessionStubBuilder", "props", "loggerFactory", "managerApi", "secureChannel"]
4
+ "sourcesContent": ["import { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { connectedDeviceStubBuilder } from \"@api/transport/model/TransportConnectedDevice.stub\";\nimport {\n DeviceSession,\n type DeviceSessionRefresherOptions,\n type SessionConstructorArgs,\n} from \"@internal/device-session/model/DeviceSession\";\nimport type { ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\nimport { type SecureChannelService } from \"@internal/secure-channel/service/SecureChannelService\";\n\nexport const deviceSessionStubBuilder = (\n props: Partial<SessionConstructorArgs> = {},\n loggerFactory: (tag: string) => LoggerPublisherService,\n managerApi: ManagerApiService,\n secureChannel: SecureChannelService,\n deviceSessionRefresherOptions: DeviceSessionRefresherOptions,\n) =>\n new DeviceSession(\n {\n connectedDevice: connectedDeviceStubBuilder(),\n id: \"fakeSessionId\",\n ...props,\n },\n loggerFactory,\n managerApi,\n secureChannel,\n deviceSessionRefresherOptions,\n );\n"],
5
+ "mappings": "AACA,OAAS,8BAAAA,MAAkC,qDAC3C,OACE,iBAAAC,MAGK,+CAIA,MAAMC,EAA2B,CACtCC,EAAyC,CAAC,EAC1CC,EACAC,EACAC,EACAC,IAEA,IAAIN,EACF,CACE,gBAAiBD,EAA2B,EAC5C,GAAI,gBACJ,GAAGG,CACL,EACAC,EACAC,EACAC,EACAC,CACF",
6
+ "names": ["connectedDeviceStubBuilder", "DeviceSession", "deviceSessionStubBuilder", "props", "loggerFactory", "managerApi", "secureChannel", "deviceSessionRefresherOptions"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ import{Subject as n}from"rxjs";var t=(e=>(e.NEW_STATE="NEW_STATE",e.REFRESH_NEEDED="REFRESH_NEEDED",e.COMMAND_SUCCEEDED="COMMAND_SUCCEEDED",e.DEVICE_STATE_UPDATE_BUSY="DEVICE_STATE_UPDATE_BUSY",e.DEVICE_STATE_UPDATE_LOCKED="DEVICE_STATE_UPDATE_LOCKED",e.DEVICE_STATE_UPDATE_CONNECTED="DEVICE_STATE_UPDATE_CONNECTED",e))(t||{});class s{_eventEmitter=new n;listen(){return this._eventEmitter.asObservable()}dispatch(E){this._eventEmitter.next(E)}}export{s as DeviceSessionEventDispatcher,t as SessionEvents};
2
+ //# sourceMappingURL=DeviceSessionEventDispatcher.js.map