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

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 (283) hide show
  1. package/README.md +21 -5
  2. package/lib/cjs/package.json +1 -1
  3. package/lib/cjs/src/api/DeviceManagementKit.js.map +2 -2
  4. package/lib/cjs/src/api/command/use-case/SendCommandUseCase.test.js +1 -1
  5. package/lib/cjs/src/api/command/use-case/SendCommandUseCase.test.js.map +3 -3
  6. package/lib/cjs/src/api/device-action/__test-utils__/setupTestMachine.js +1 -1
  7. package/lib/cjs/src/api/device-action/__test-utils__/setupTestMachine.js.map +3 -3
  8. package/lib/cjs/src/api/device-model/data/StaticDeviceModelDataSource.js.map +1 -1
  9. package/lib/cjs/src/api/device-session/use-case/DisableDeviceSessionRefresher.test.js +1 -1
  10. package/lib/cjs/src/api/device-session/use-case/DisableDeviceSessionRefresher.test.js.map +3 -3
  11. package/lib/cjs/src/api/index.js +1 -1
  12. package/lib/cjs/src/api/index.js.map +3 -3
  13. package/lib/cjs/src/api/logger-subscriber/service/WebLogsExporterLogger.test.js +1 -1
  14. package/lib/cjs/src/api/logger-subscriber/service/WebLogsExporterLogger.test.js.map +3 -3
  15. package/lib/cjs/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.js.map +2 -2
  16. package/lib/cjs/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.test.js +1 -1
  17. package/lib/cjs/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.test.js.map +3 -3
  18. package/lib/cjs/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.js +2 -0
  19. package/lib/cjs/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.js.map +7 -0
  20. package/lib/cjs/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.test.js +2 -0
  21. package/lib/cjs/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.test.js.map +7 -0
  22. package/lib/cjs/src/api/secure-channel/device-action/InstallApp/types.js +2 -0
  23. package/lib/cjs/src/api/secure-channel/device-action/InstallApp/types.js.map +7 -0
  24. package/lib/cjs/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.js.map +2 -2
  25. package/lib/cjs/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.test.js +1 -1
  26. package/lib/cjs/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.test.js.map +3 -3
  27. package/lib/cjs/src/api/secure-channel/device-action/ListInstalledApps/types.js +1 -1
  28. package/lib/cjs/src/api/secure-channel/device-action/ListInstalledApps/types.js.map +2 -2
  29. package/lib/cjs/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.js +2 -0
  30. package/lib/cjs/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.js.map +7 -0
  31. package/lib/cjs/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.test.js +2 -0
  32. package/lib/cjs/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.test.js.map +7 -0
  33. package/lib/cjs/src/api/secure-channel/device-action/UninstallApp/types.js +2 -0
  34. package/lib/cjs/src/api/secure-channel/device-action/UninstallApp/types.js.map +7 -0
  35. package/lib/cjs/src/api/secure-channel/utils.test.js +1 -1
  36. package/lib/cjs/src/api/secure-channel/utils.test.js.map +2 -2
  37. package/lib/cjs/src/api/transport/model/DeviceConnection.js.map +1 -1
  38. package/lib/cjs/src/api/transport/model/DeviceConnectionStateMachine.js +1 -1
  39. package/lib/cjs/src/api/transport/model/DeviceConnectionStateMachine.js.map +3 -3
  40. package/lib/cjs/src/api/transport/model/Errors.js +1 -1
  41. package/lib/cjs/src/api/transport/model/Errors.js.map +3 -3
  42. package/lib/cjs/src/api/transport/model/TransportConnectedDevice.test.js +1 -1
  43. package/lib/cjs/src/api/transport/model/TransportConnectedDevice.test.js.map +3 -3
  44. package/lib/cjs/src/api/types.js +1 -1
  45. package/lib/cjs/src/api/types.js.map +1 -1
  46. package/lib/cjs/src/internal/device-session/data/DeviceSessionRefresherConst.js +1 -1
  47. package/lib/cjs/src/internal/device-session/data/DeviceSessionRefresherConst.js.map +3 -3
  48. package/lib/cjs/src/internal/device-session/model/DevicePinger.js +2 -0
  49. package/lib/cjs/src/internal/device-session/model/DevicePinger.js.map +7 -0
  50. package/lib/cjs/src/internal/device-session/model/DevicePinger.test.js +2 -0
  51. package/lib/cjs/src/internal/device-session/model/DevicePinger.test.js.map +7 -0
  52. package/lib/cjs/src/internal/device-session/model/DeviceSession.js +1 -1
  53. package/lib/cjs/src/internal/device-session/model/DeviceSession.js.map +3 -3
  54. package/lib/cjs/src/internal/device-session/model/DeviceSession.stub.js +1 -1
  55. package/lib/cjs/src/internal/device-session/model/DeviceSession.stub.js.map +3 -3
  56. package/lib/cjs/src/internal/device-session/model/DeviceSessionEventDispatcher.js +2 -0
  57. package/lib/cjs/src/internal/device-session/model/DeviceSessionEventDispatcher.js.map +7 -0
  58. package/lib/cjs/src/internal/device-session/model/DeviceSessionEventDispatcher.test.js +2 -0
  59. package/lib/cjs/src/internal/device-session/model/DeviceSessionEventDispatcher.test.js.map +7 -0
  60. package/lib/cjs/src/internal/device-session/model/DeviceSessionRefresher.js +1 -1
  61. package/lib/cjs/src/internal/device-session/model/DeviceSessionRefresher.js.map +3 -3
  62. package/lib/cjs/src/internal/device-session/model/DeviceSessionRefresher.test.js +1 -1
  63. package/lib/cjs/src/internal/device-session/model/DeviceSessionRefresher.test.js.map +3 -3
  64. package/lib/cjs/src/internal/device-session/model/DeviceSessionStateHandler.js +2 -0
  65. package/lib/cjs/src/internal/device-session/model/DeviceSessionStateHandler.js.map +7 -0
  66. package/lib/cjs/src/internal/device-session/model/DeviceSessionStateHandler.test.js +2 -0
  67. package/lib/cjs/src/internal/device-session/model/DeviceSessionStateHandler.test.js.map +7 -0
  68. package/lib/cjs/src/internal/device-session/service/DefaultDeviceSessionService.test.js +1 -1
  69. package/lib/cjs/src/internal/device-session/service/DefaultDeviceSessionService.test.js.map +3 -3
  70. package/lib/cjs/src/internal/device-session/service/MutexService.js +2 -0
  71. package/lib/cjs/src/internal/device-session/service/MutexService.js.map +7 -0
  72. package/lib/cjs/src/internal/device-session/service/MutexService.test.js +2 -0
  73. package/lib/cjs/src/internal/device-session/service/MutexService.test.js.map +7 -0
  74. package/lib/cjs/src/internal/device-session/service/RefresherService.js +1 -1
  75. package/lib/cjs/src/internal/device-session/service/RefresherService.js.map +3 -3
  76. package/lib/cjs/src/internal/device-session/service/RefresherService.test.js +1 -1
  77. package/lib/cjs/src/internal/device-session/service/RefresherService.test.js.map +3 -3
  78. package/lib/cjs/src/internal/device-session/use-case/CloseSessionsUseCase.test.js +1 -1
  79. package/lib/cjs/src/internal/device-session/use-case/CloseSessionsUseCase.test.js.map +3 -3
  80. package/lib/cjs/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.js +1 -1
  81. package/lib/cjs/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.js.map +3 -3
  82. package/lib/cjs/src/internal/device-session/utils/deviceSessionUtils.js +2 -0
  83. package/lib/cjs/src/internal/device-session/utils/deviceSessionUtils.js.map +7 -0
  84. package/lib/cjs/src/internal/discovery/use-case/ConnectUseCase.js +1 -1
  85. package/lib/cjs/src/internal/discovery/use-case/ConnectUseCase.js.map +3 -3
  86. package/lib/cjs/src/internal/discovery/use-case/DisconnectUseCase.test.js +1 -1
  87. package/lib/cjs/src/internal/discovery/use-case/DisconnectUseCase.test.js.map +3 -3
  88. package/lib/cjs/src/internal/discovery/use-case/GetConnectedDeviceUseCase.test.js +1 -1
  89. package/lib/cjs/src/internal/discovery/use-case/GetConnectedDeviceUseCase.test.js.map +3 -3
  90. package/lib/cjs/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.js +1 -1
  91. package/lib/cjs/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.js.map +3 -3
  92. package/lib/cjs/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.js +1 -1
  93. package/lib/cjs/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.js.map +3 -3
  94. package/lib/cjs/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.js +1 -1
  95. package/lib/cjs/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.js.map +3 -3
  96. package/lib/cjs/src/internal/manager-api/data/AxiosManagerApiDataSource.test.js +1 -1
  97. package/lib/cjs/src/internal/manager-api/data/AxiosManagerApiDataSource.test.js.map +2 -2
  98. package/lib/cjs/src/internal/secure-channel/data/DefaultSecureChannelDataSource.test.js +1 -1
  99. package/lib/cjs/src/internal/secure-channel/data/DefaultSecureChannelDataSource.test.js.map +2 -2
  100. package/lib/cjs/src/internal/secure-channel/model/Params.js +1 -1
  101. package/lib/cjs/src/internal/secure-channel/model/Params.js.map +1 -1
  102. package/lib/cjs/src/internal/secure-channel/service/DefaultSecureChannelService.js +1 -1
  103. package/lib/cjs/src/internal/secure-channel/service/DefaultSecureChannelService.js.map +3 -3
  104. package/lib/cjs/src/internal/secure-channel/service/DefaultSecureChannelService.test.js +1 -1
  105. package/lib/cjs/src/internal/secure-channel/service/DefaultSecureChannelService.test.js.map +3 -3
  106. package/lib/cjs/src/internal/secure-channel/service/SecureChannelService.js +1 -1
  107. package/lib/cjs/src/internal/secure-channel/service/SecureChannelService.js.map +1 -1
  108. package/lib/cjs/src/internal/send/use-case/SendApduUseCase.test.js +1 -1
  109. package/lib/cjs/src/internal/send/use-case/SendApduUseCase.test.js.map +3 -3
  110. package/lib/esm/package.json +1 -1
  111. package/lib/esm/src/api/DeviceManagementKit.js.map +2 -2
  112. package/lib/esm/src/api/command/use-case/SendCommandUseCase.test.js +1 -1
  113. package/lib/esm/src/api/command/use-case/SendCommandUseCase.test.js.map +3 -3
  114. package/lib/esm/src/api/device-action/__test-utils__/setupTestMachine.js +1 -1
  115. package/lib/esm/src/api/device-action/__test-utils__/setupTestMachine.js.map +3 -3
  116. package/lib/esm/src/api/device-model/data/StaticDeviceModelDataSource.js.map +1 -1
  117. package/lib/esm/src/api/device-session/use-case/DisableDeviceSessionRefresher.test.js +1 -1
  118. package/lib/esm/src/api/device-session/use-case/DisableDeviceSessionRefresher.test.js.map +3 -3
  119. package/lib/esm/src/api/index.js +1 -1
  120. package/lib/esm/src/api/index.js.map +3 -3
  121. package/lib/esm/src/api/logger-subscriber/service/WebLogsExporterLogger.test.js +1 -1
  122. package/lib/esm/src/api/logger-subscriber/service/WebLogsExporterLogger.test.js.map +3 -3
  123. package/lib/esm/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.js.map +2 -2
  124. package/lib/esm/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.test.js +1 -1
  125. package/lib/esm/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.test.js.map +3 -3
  126. package/lib/esm/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.js +2 -0
  127. package/lib/esm/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.js.map +7 -0
  128. package/lib/esm/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.test.js +2 -0
  129. package/lib/esm/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.test.js.map +7 -0
  130. package/lib/esm/src/api/secure-channel/device-action/InstallApp/types.js +1 -0
  131. package/lib/esm/src/api/secure-channel/device-action/InstallApp/types.js.map +7 -0
  132. package/lib/esm/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.js.map +2 -2
  133. package/lib/esm/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.test.js +1 -1
  134. package/lib/esm/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.test.js.map +3 -3
  135. package/lib/esm/src/api/secure-channel/device-action/ListInstalledApps/types.js.map +2 -2
  136. package/lib/esm/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.js +2 -0
  137. package/lib/esm/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.js.map +7 -0
  138. package/lib/esm/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.test.js +2 -0
  139. package/lib/esm/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.test.js.map +7 -0
  140. package/lib/esm/src/api/secure-channel/device-action/UninstallApp/types.js +1 -0
  141. package/lib/esm/src/api/secure-channel/device-action/UninstallApp/types.js.map +7 -0
  142. package/lib/esm/src/api/secure-channel/utils.test.js +1 -1
  143. package/lib/esm/src/api/secure-channel/utils.test.js.map +2 -2
  144. package/lib/esm/src/api/transport/model/DeviceConnectionStateMachine.js +1 -1
  145. package/lib/esm/src/api/transport/model/DeviceConnectionStateMachine.js.map +3 -3
  146. package/lib/esm/src/api/transport/model/Errors.js +1 -1
  147. package/lib/esm/src/api/transport/model/Errors.js.map +3 -3
  148. package/lib/esm/src/api/transport/model/TransportConnectedDevice.test.js +1 -1
  149. package/lib/esm/src/api/transport/model/TransportConnectedDevice.test.js.map +3 -3
  150. package/lib/esm/src/internal/device-session/data/DeviceSessionRefresherConst.js +1 -1
  151. package/lib/esm/src/internal/device-session/data/DeviceSessionRefresherConst.js.map +3 -3
  152. package/lib/esm/src/internal/device-session/model/DevicePinger.js +2 -0
  153. package/lib/esm/src/internal/device-session/model/DevicePinger.js.map +7 -0
  154. package/lib/esm/src/internal/device-session/model/DevicePinger.test.js +2 -0
  155. package/lib/esm/src/internal/device-session/model/DevicePinger.test.js.map +7 -0
  156. package/lib/esm/src/internal/device-session/model/DeviceSession.js +1 -1
  157. package/lib/esm/src/internal/device-session/model/DeviceSession.js.map +3 -3
  158. package/lib/esm/src/internal/device-session/model/DeviceSession.stub.js +1 -1
  159. package/lib/esm/src/internal/device-session/model/DeviceSession.stub.js.map +3 -3
  160. package/lib/esm/src/internal/device-session/model/DeviceSessionEventDispatcher.js +2 -0
  161. package/lib/esm/src/internal/device-session/model/DeviceSessionEventDispatcher.js.map +7 -0
  162. package/lib/esm/src/internal/device-session/model/DeviceSessionEventDispatcher.test.js +2 -0
  163. package/lib/esm/src/internal/device-session/model/DeviceSessionEventDispatcher.test.js.map +7 -0
  164. package/lib/esm/src/internal/device-session/model/DeviceSessionRefresher.js +1 -1
  165. package/lib/esm/src/internal/device-session/model/DeviceSessionRefresher.js.map +3 -3
  166. package/lib/esm/src/internal/device-session/model/DeviceSessionRefresher.test.js +1 -1
  167. package/lib/esm/src/internal/device-session/model/DeviceSessionRefresher.test.js.map +3 -3
  168. package/lib/esm/src/internal/device-session/model/DeviceSessionStateHandler.js +2 -0
  169. package/lib/esm/src/internal/device-session/model/DeviceSessionStateHandler.js.map +7 -0
  170. package/lib/esm/src/internal/device-session/model/DeviceSessionStateHandler.test.js +2 -0
  171. package/lib/esm/src/internal/device-session/model/DeviceSessionStateHandler.test.js.map +7 -0
  172. package/lib/esm/src/internal/device-session/service/DefaultDeviceSessionService.test.js +1 -1
  173. package/lib/esm/src/internal/device-session/service/DefaultDeviceSessionService.test.js.map +3 -3
  174. package/lib/esm/src/internal/device-session/service/MutexService.js +2 -0
  175. package/lib/esm/src/internal/device-session/service/MutexService.js.map +7 -0
  176. package/lib/esm/src/internal/device-session/service/MutexService.test.js +2 -0
  177. package/lib/esm/src/internal/device-session/service/MutexService.test.js.map +7 -0
  178. package/lib/esm/src/internal/device-session/service/RefresherService.js +1 -1
  179. package/lib/esm/src/internal/device-session/service/RefresherService.js.map +3 -3
  180. package/lib/esm/src/internal/device-session/service/RefresherService.test.js +1 -1
  181. package/lib/esm/src/internal/device-session/service/RefresherService.test.js.map +3 -3
  182. package/lib/esm/src/internal/device-session/use-case/CloseSessionsUseCase.test.js +1 -1
  183. package/lib/esm/src/internal/device-session/use-case/CloseSessionsUseCase.test.js.map +3 -3
  184. package/lib/esm/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.js +1 -1
  185. package/lib/esm/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.js.map +3 -3
  186. package/lib/esm/src/internal/device-session/utils/deviceSessionUtils.js +2 -0
  187. package/lib/esm/src/internal/device-session/utils/deviceSessionUtils.js.map +7 -0
  188. package/lib/esm/src/internal/discovery/use-case/ConnectUseCase.js +1 -1
  189. package/lib/esm/src/internal/discovery/use-case/ConnectUseCase.js.map +3 -3
  190. package/lib/esm/src/internal/discovery/use-case/DisconnectUseCase.test.js +1 -1
  191. package/lib/esm/src/internal/discovery/use-case/DisconnectUseCase.test.js.map +3 -3
  192. package/lib/esm/src/internal/discovery/use-case/GetConnectedDeviceUseCase.test.js +1 -1
  193. package/lib/esm/src/internal/discovery/use-case/GetConnectedDeviceUseCase.test.js.map +3 -3
  194. package/lib/esm/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.js +1 -1
  195. package/lib/esm/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.js.map +3 -3
  196. package/lib/esm/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.js +1 -1
  197. package/lib/esm/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.js.map +3 -3
  198. package/lib/esm/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.js +1 -1
  199. package/lib/esm/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.js.map +3 -3
  200. package/lib/esm/src/internal/manager-api/data/AxiosManagerApiDataSource.test.js +1 -1
  201. package/lib/esm/src/internal/manager-api/data/AxiosManagerApiDataSource.test.js.map +2 -2
  202. package/lib/esm/src/internal/secure-channel/data/DefaultSecureChannelDataSource.test.js +1 -1
  203. package/lib/esm/src/internal/secure-channel/data/DefaultSecureChannelDataSource.test.js.map +2 -2
  204. package/lib/esm/src/internal/secure-channel/service/DefaultSecureChannelService.js +1 -1
  205. package/lib/esm/src/internal/secure-channel/service/DefaultSecureChannelService.js.map +3 -3
  206. package/lib/esm/src/internal/secure-channel/service/DefaultSecureChannelService.test.js +1 -1
  207. package/lib/esm/src/internal/secure-channel/service/DefaultSecureChannelService.test.js.map +3 -3
  208. package/lib/esm/src/internal/send/use-case/SendApduUseCase.test.js +1 -1
  209. package/lib/esm/src/internal/send/use-case/SendApduUseCase.test.js.map +3 -3
  210. package/lib/types/src/api/DeviceManagementKit.d.ts +5 -1
  211. package/lib/types/src/api/DeviceManagementKit.d.ts.map +1 -1
  212. package/lib/types/src/api/device-action/__test-utils__/setupTestMachine.d.ts +4 -0
  213. package/lib/types/src/api/device-action/__test-utils__/setupTestMachine.d.ts.map +1 -1
  214. package/lib/types/src/api/index.d.ts +2 -0
  215. package/lib/types/src/api/index.d.ts.map +1 -1
  216. package/lib/types/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.d.ts +3 -3
  217. package/lib/types/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.d.ts.map +1 -1
  218. package/lib/types/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.test.d.ts +1 -0
  219. package/lib/types/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.d.ts +8 -0
  220. package/lib/types/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.d.ts.map +1 -0
  221. package/lib/types/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.test.d.ts +2 -0
  222. package/lib/types/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.test.d.ts.map +1 -0
  223. package/lib/types/src/api/secure-channel/device-action/InstallApp/types.d.ts +44 -0
  224. package/lib/types/src/api/secure-channel/device-action/InstallApp/types.d.ts.map +1 -0
  225. package/lib/types/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.d.ts +3 -3
  226. package/lib/types/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.d.ts.map +1 -1
  227. package/lib/types/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.test.d.ts +1 -0
  228. package/lib/types/src/api/secure-channel/device-action/ListInstalledApps/types.d.ts +1 -3
  229. package/lib/types/src/api/secure-channel/device-action/ListInstalledApps/types.d.ts.map +1 -1
  230. package/lib/types/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.d.ts +8 -0
  231. package/lib/types/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.d.ts.map +1 -0
  232. package/lib/types/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.test.d.ts +2 -0
  233. package/lib/types/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.test.d.ts.map +1 -0
  234. package/lib/types/src/api/secure-channel/device-action/UninstallApp/types.d.ts +41 -0
  235. package/lib/types/src/api/secure-channel/device-action/UninstallApp/types.d.ts.map +1 -0
  236. package/lib/types/src/api/transport/model/DeviceConnection.d.ts +1 -1
  237. package/lib/types/src/api/transport/model/DeviceConnection.d.ts.map +1 -1
  238. package/lib/types/src/api/transport/model/DeviceConnectionStateMachine.d.ts +2 -1
  239. package/lib/types/src/api/transport/model/DeviceConnectionStateMachine.d.ts.map +1 -1
  240. package/lib/types/src/api/transport/model/Errors.d.ts +5 -0
  241. package/lib/types/src/api/transport/model/Errors.d.ts.map +1 -1
  242. package/lib/types/src/api/types.d.ts +2 -0
  243. package/lib/types/src/api/types.d.ts.map +1 -1
  244. package/lib/types/src/internal/device-session/data/DeviceSessionRefresherConst.d.ts +6 -1
  245. package/lib/types/src/internal/device-session/data/DeviceSessionRefresherConst.d.ts.map +1 -1
  246. package/lib/types/src/internal/device-session/model/DevicePinger.d.ts +18 -0
  247. package/lib/types/src/internal/device-session/model/DevicePinger.d.ts.map +1 -0
  248. package/lib/types/src/internal/device-session/model/DevicePinger.test.d.ts +2 -0
  249. package/lib/types/src/internal/device-session/model/DevicePinger.test.d.ts.map +1 -0
  250. package/lib/types/src/internal/device-session/model/DeviceSession.d.ts +18 -11
  251. package/lib/types/src/internal/device-session/model/DeviceSession.d.ts.map +1 -1
  252. package/lib/types/src/internal/device-session/model/DeviceSession.stub.d.ts +2 -2
  253. package/lib/types/src/internal/device-session/model/DeviceSession.stub.d.ts.map +1 -1
  254. package/lib/types/src/internal/device-session/model/DeviceSessionEventDispatcher.d.ts +35 -0
  255. package/lib/types/src/internal/device-session/model/DeviceSessionEventDispatcher.d.ts.map +1 -0
  256. package/lib/types/src/internal/device-session/model/DeviceSessionEventDispatcher.test.d.ts +2 -0
  257. package/lib/types/src/internal/device-session/model/DeviceSessionEventDispatcher.test.d.ts.map +1 -0
  258. package/lib/types/src/internal/device-session/model/DeviceSessionRefresher.d.ts +17 -79
  259. package/lib/types/src/internal/device-session/model/DeviceSessionRefresher.d.ts.map +1 -1
  260. package/lib/types/src/internal/device-session/model/DeviceSessionStateHandler.d.ts +20 -0
  261. package/lib/types/src/internal/device-session/model/DeviceSessionStateHandler.d.ts.map +1 -0
  262. package/lib/types/src/internal/device-session/model/DeviceSessionStateHandler.test.d.ts +2 -0
  263. package/lib/types/src/internal/device-session/model/DeviceSessionStateHandler.test.d.ts.map +1 -0
  264. package/lib/types/src/internal/device-session/service/MutexService.d.ts +6 -0
  265. package/lib/types/src/internal/device-session/service/MutexService.d.ts.map +1 -0
  266. package/lib/types/src/internal/device-session/service/MutexService.test.d.ts +2 -0
  267. package/lib/types/src/internal/device-session/service/MutexService.test.d.ts.map +1 -0
  268. package/lib/types/src/internal/device-session/service/RefresherService.d.ts +7 -2
  269. package/lib/types/src/internal/device-session/service/RefresherService.d.ts.map +1 -1
  270. package/lib/types/src/internal/device-session/utils/deviceSessionUtils.d.ts +3 -0
  271. package/lib/types/src/internal/device-session/utils/deviceSessionUtils.d.ts.map +1 -0
  272. package/lib/types/src/internal/discovery/use-case/ConnectUseCase.d.ts +8 -1
  273. package/lib/types/src/internal/discovery/use-case/ConnectUseCase.d.ts.map +1 -1
  274. package/lib/types/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.d.ts +1 -1
  275. package/lib/types/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.d.ts.map +1 -1
  276. package/lib/types/src/internal/secure-channel/model/Params.d.ts +3 -5
  277. package/lib/types/src/internal/secure-channel/model/Params.d.ts.map +1 -1
  278. package/lib/types/src/internal/secure-channel/service/DefaultSecureChannelService.d.ts +6 -6
  279. package/lib/types/src/internal/secure-channel/service/DefaultSecureChannelService.d.ts.map +1 -1
  280. package/lib/types/src/internal/secure-channel/service/SecureChannelService.d.ts +39 -5
  281. package/lib/types/src/internal/secure-channel/service/SecureChannelService.d.ts.map +1 -1
  282. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  283. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/api/types.ts"],
4
- "sourcesContent": ["export type { OpenAppErrorCodes } from \"./command/os/OpenAppCommand\";\nexport type { CommandErrors } from \"./command/utils/CommandErrors\";\nexport type { DeviceId } from \"./device/DeviceModel\";\nexport type { ConnectionType } from \"./discovery/ConnectionType\";\nexport type { CommandErrorArgs } from \"./Error\";\nexport type { LogSubscriberOptions } from \"./logger-subscriber/model/LogSubscriberOptions\";\nexport type { DiscoveredDevice } from \"./transport/model/DiscoveredDevice\";\nexport type {\n Transport,\n TransportArgs,\n TransportFactory,\n} from \"./transport/model/Transport\";\nexport type { TransportIdentifier } from \"./transport/model/TransportIdentifier\";\nexport type { ApduBuilderArgs } from \"@api/apdu/utils/ApduBuilder\";\nexport type { Command } from \"@api/command/Command\";\nexport type {\n CommandErrorResult,\n CommandResult,\n CommandSuccessResult,\n} from \"@api/command/model/CommandResult\";\nexport type { SendCommandUseCaseArgs } from \"@api/command/use-case/SendCommandUseCase\";\nexport type { DeviceModelId } from \"@api/device/DeviceModel\";\nexport {\n type DeviceAction,\n type DeviceActionIntermediateValue,\n type ExecuteDeviceActionReturnType,\n} from \"@api/device-action/DeviceAction\";\nexport {\n type GetDeviceStatusDAError,\n type GetDeviceStatusDAInput,\n type GetDeviceStatusDAIntermediateValue,\n type GetDeviceStatusDAOutput,\n type GetDeviceStatusDAState,\n} from \"@api/device-action/os/GetDeviceStatus/types\";\nexport {\n type GoToDashboardDAError,\n type GoToDashboardDAInput,\n type GoToDashboardDAIntermediateValue,\n type GoToDashboardDAOutput,\n type GoToDashboardDAState,\n} from \"@api/device-action/os/GoToDashboard/types\";\nexport {\n type ListAppsDAError,\n type ListAppsDAInput,\n type ListAppsDAIntermediateValue,\n type ListAppsDAOutput,\n type ListAppsDAState,\n} from \"@api/device-action/os/ListApps/types\";\nexport {\n type ListAppsWithMetadataDAError,\n type ListAppsWithMetadataDAInput,\n type ListAppsWithMetadataDAIntermediateValue,\n type ListAppsWithMetadataDAOutput,\n type ListAppsWithMetadataDAState,\n} from \"@api/device-action/os/ListAppsWithMetadata/types\";\nexport {\n type OpenAppDAError,\n type OpenAppDAInput,\n type OpenAppDAIntermediateValue,\n type OpenAppDAOutput,\n type OpenAppDARequiredInteraction,\n type OpenAppDAState,\n} from \"@api/device-action/os/OpenAppDeviceAction/types\";\nexport {\n type SendCommandInAppDAError,\n type SendCommandInAppDAInput,\n type SendCommandInAppDAIntermediateValue,\n type SendCommandInAppDAOutput,\n} from \"@api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceActionTypes\";\nexport type { ExecuteDeviceActionUseCaseArgs } from \"@api/device-action/use-case/ExecuteDeviceActionUseCase\";\nexport { type StateMachineTypes } from \"@api/device-action/xstate-utils/StateMachineTypes\";\nexport { type DeviceModelDataSource } from \"@api/device-model/data/DeviceModelDataSource\";\nexport type { DeviceSessionState } from \"@api/device-session/DeviceSessionState\";\nexport { type ApduReceiverService } from \"@api/device-session/service/ApduReceiverService\";\nexport { type ApduReceiverServiceFactory } from \"@api/device-session/service/ApduReceiverService\";\nexport { type ApduSenderServiceFactory } from \"@api/device-session/service/ApduSenderService\";\nexport { type ApduSenderService } from \"@api/device-session/service/ApduSenderService\";\nexport type { DeviceSessionId } from \"@api/device-session/types\";\nexport type { DmkConfig } from \"@api/DmkConfig\";\nexport type { DmkError } from \"@api/Error\";\nexport type { LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nexport type {\n LoggerSubscriberService,\n LogParams,\n} from \"@api/logger-subscriber/service/LoggerSubscriberService\";\nexport {\n type GenuineCheckDAError,\n type GenuineCheckDAInput,\n type GenuineCheckDAIntermediateValue,\n type GenuineCheckDAOutput,\n type GenuineCheckDARequiredInteraction,\n type GenuineCheckDAState,\n} from \"@api/secure-channel/device-action/GenuineCheck/types\";\nexport {\n type ListInstalledAppsDAError,\n type ListInstalledAppsDAInput,\n type ListInstalledAppsDAIntermediateValue,\n type ListInstalledAppsDAOutput,\n type ListInstalledAppsDARequiredInteraction,\n type ListInstalledAppsDAState,\n} from \"@api/secure-channel/device-action/ListInstalledApps/types\";\nexport { type DeviceApduSender } from \"@api/transport/model/DeviceApduSender\";\nexport {\n type DeviceConnection,\n type DisconnectHandler,\n type SendApduFnType,\n} from \"@api/transport/model/DeviceConnection\";\nexport { type TransportDiscoveredDevice } from \"@api/transport/model/TransportDiscoveredDevice\";\nexport type { HexaString } from \"@api/utils/HexaString\";\nexport type { ConnectUseCaseArgs } from \"@internal/discovery/use-case/ConnectUseCase\";\nexport type { DisconnectUseCaseArgs } from \"@internal/discovery/use-case/DisconnectUseCase\";\nexport type { GetConnectedDeviceUseCaseArgs } from \"@internal/discovery/use-case/GetConnectedDeviceUseCase\";\nexport type { StartDiscoveringUseCaseArgs } from \"@internal/discovery/use-case/StartDiscoveringUseCase\";\nexport type { SendApduUseCaseArgs } from \"@internal/send/use-case/SendApduUseCase\";\n"],
4
+ "sourcesContent": ["export type { OpenAppErrorCodes } from \"./command/os/OpenAppCommand\";\nexport type { CommandErrors } from \"./command/utils/CommandErrors\";\nexport type { DeviceId } from \"./device/DeviceModel\";\nexport type { ConnectionType } from \"./discovery/ConnectionType\";\nexport type { CommandErrorArgs } from \"./Error\";\nexport type { LogSubscriberOptions } from \"./logger-subscriber/model/LogSubscriberOptions\";\nexport type { DiscoveredDevice } from \"./transport/model/DiscoveredDevice\";\nexport type {\n Transport,\n TransportArgs,\n TransportFactory,\n} from \"./transport/model/Transport\";\nexport type { TransportIdentifier } from \"./transport/model/TransportIdentifier\";\nexport type { ApduBuilderArgs } from \"@api/apdu/utils/ApduBuilder\";\nexport type { Command } from \"@api/command/Command\";\nexport type {\n CommandErrorResult,\n CommandResult,\n CommandSuccessResult,\n} from \"@api/command/model/CommandResult\";\nexport type { SendCommandUseCaseArgs } from \"@api/command/use-case/SendCommandUseCase\";\nexport type { DeviceModelId } from \"@api/device/DeviceModel\";\nexport {\n type DeviceAction,\n type DeviceActionIntermediateValue,\n type ExecuteDeviceActionReturnType,\n} from \"@api/device-action/DeviceAction\";\nexport {\n type GetDeviceStatusDAError,\n type GetDeviceStatusDAInput,\n type GetDeviceStatusDAIntermediateValue,\n type GetDeviceStatusDAOutput,\n type GetDeviceStatusDAState,\n} from \"@api/device-action/os/GetDeviceStatus/types\";\nexport {\n type GoToDashboardDAError,\n type GoToDashboardDAInput,\n type GoToDashboardDAIntermediateValue,\n type GoToDashboardDAOutput,\n type GoToDashboardDAState,\n} from \"@api/device-action/os/GoToDashboard/types\";\nexport {\n type ListAppsDAError,\n type ListAppsDAInput,\n type ListAppsDAIntermediateValue,\n type ListAppsDAOutput,\n type ListAppsDAState,\n} from \"@api/device-action/os/ListApps/types\";\nexport {\n type ListAppsWithMetadataDAError,\n type ListAppsWithMetadataDAInput,\n type ListAppsWithMetadataDAIntermediateValue,\n type ListAppsWithMetadataDAOutput,\n type ListAppsWithMetadataDAState,\n} from \"@api/device-action/os/ListAppsWithMetadata/types\";\nexport {\n type OpenAppDAError,\n type OpenAppDAInput,\n type OpenAppDAIntermediateValue,\n type OpenAppDAOutput,\n type OpenAppDARequiredInteraction,\n type OpenAppDAState,\n} from \"@api/device-action/os/OpenAppDeviceAction/types\";\nexport {\n type SendCommandInAppDAError,\n type SendCommandInAppDAInput,\n type SendCommandInAppDAIntermediateValue,\n type SendCommandInAppDAOutput,\n} from \"@api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceActionTypes\";\nexport type { ExecuteDeviceActionUseCaseArgs } from \"@api/device-action/use-case/ExecuteDeviceActionUseCase\";\nexport { type StateMachineTypes } from \"@api/device-action/xstate-utils/StateMachineTypes\";\nexport { type DeviceModelDataSource } from \"@api/device-model/data/DeviceModelDataSource\";\nexport type { DeviceSessionState } from \"@api/device-session/DeviceSessionState\";\nexport { type ApduReceiverService } from \"@api/device-session/service/ApduReceiverService\";\nexport { type ApduReceiverServiceFactory } from \"@api/device-session/service/ApduReceiverService\";\nexport { type ApduSenderServiceFactory } from \"@api/device-session/service/ApduSenderService\";\nexport { type ApduSenderService } from \"@api/device-session/service/ApduSenderService\";\nexport type { DeviceSessionId } from \"@api/device-session/types\";\nexport type { DmkConfig } from \"@api/DmkConfig\";\nexport type { DmkError } from \"@api/Error\";\nexport type { LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nexport type {\n LoggerSubscriberService,\n LogParams,\n} from \"@api/logger-subscriber/service/LoggerSubscriberService\";\nexport {\n type GenuineCheckDAError,\n type GenuineCheckDAInput,\n type GenuineCheckDAIntermediateValue,\n type GenuineCheckDAOutput,\n type GenuineCheckDARequiredInteraction,\n type GenuineCheckDAState,\n} from \"@api/secure-channel/device-action/GenuineCheck/types\";\nexport {\n type InstallAppDAError,\n type InstallAppDAInput,\n type InstallAppDAIntermediateValue,\n type InstallAppDAOutput,\n type InstallAppDARequiredInteraction,\n type InstallAppDAState,\n} from \"@api/secure-channel/device-action/InstallApp/types\";\nexport {\n type ListInstalledAppsDAError,\n type ListInstalledAppsDAInput,\n type ListInstalledAppsDAIntermediateValue,\n type ListInstalledAppsDAOutput,\n type ListInstalledAppsDARequiredInteraction,\n type ListInstalledAppsDAState,\n} from \"@api/secure-channel/device-action/ListInstalledApps/types\";\nexport {\n type UninstallAppDAError,\n type UninstallAppDAInput,\n type UninstallAppDAIntermediateValue,\n type UninstallAppDAOutput,\n type UninstallAppDARequiredInteraction,\n type UninstallAppDAState,\n} from \"@api/secure-channel/device-action/UninstallApp/types\";\nexport { type DeviceApduSender } from \"@api/transport/model/DeviceApduSender\";\nexport {\n type DeviceConnection,\n type DisconnectHandler,\n type SendApduFnType,\n} from \"@api/transport/model/DeviceConnection\";\nexport { type TransportDiscoveredDevice } from \"@api/transport/model/TransportDiscoveredDevice\";\nexport type { HexaString } from \"@api/utils/HexaString\";\nexport type { ConnectUseCaseArgs } from \"@internal/discovery/use-case/ConnectUseCase\";\nexport type { DisconnectUseCaseArgs } from \"@internal/discovery/use-case/DisconnectUseCase\";\nexport type { GetConnectedDeviceUseCaseArgs } from \"@internal/discovery/use-case/GetConnectedDeviceUseCase\";\nexport type { StartDiscoveringUseCaseArgs } from \"@internal/discovery/use-case/StartDiscoveringUseCase\";\nexport type { SendApduUseCaseArgs } from \"@internal/send/use-case/SendApduUseCase\";\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["types_exports", "__toCommonJS"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var _=Object.defineProperty;var t=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var V=Object.prototype.hasOwnProperty;var c=(S,E)=>{for(var R in E)_(S,R,{get:E[R],enumerable:!0})},e=(S,E,R,o)=>{if(E&&typeof E=="object"||typeof E=="function")for(let I of N(E))!V.call(S,I)&&I!==R&&_(S,I,{get:()=>E[I],enumerable:!(o=t(E,I))||o.enumerable});return S};var n=S=>e(_({},"__esModule",{value:!0}),S);var r={};c(r,{DEVICE_SESSION_REFRESH_INTERVAL:()=>p});module.exports=n(r);const p=1e3;0&&(module.exports={DEVICE_SESSION_REFRESH_INTERVAL});
1
+ "use strict";var R=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var e=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var o=(I,E)=>{for(var _ in E)R(I,_,{get:E[_],enumerable:!0})},s=(I,E,_,N)=>{if(E&&typeof E=="object"||typeof E=="function")for(let S of e(E))!O.call(I,S)&&S!==_&&R(I,S,{get:()=>E[S],enumerable:!(N=L(E,S))||N.enumerable});return I};var t=I=>s(R({},"__esModule",{value:!0}),I);var l={};o(l,{DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS:()=>D,DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL:()=>r,DEVICE_SESSION_REFRESHER_POLLING_INTERVAL:()=>V});module.exports=t(l);const V=1e3,r=1e3,D={isRefresherDisabled:!1,pollingInterval:1e3};0&&(module.exports={DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS,DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL,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": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qCAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,EAAkC",
6
- "names": ["DeviceSessionRefresherConst_exports", "__export", "DEVICE_SESSION_REFRESH_INTERVAL", "__toCommonJS"]
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": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,8CAAAE,EAAA,sDAAAC,EAAA,8CAAAC,IAAA,eAAAC,EAAAL,GACO,MAAMI,EAA4C,IAG5CD,EAAoD,IAEpDD,EAA2C,CACtD,oBAAqB,GACrB,gBAAiB,GACnB",
6
+ "names": ["DeviceSessionRefresherConst_exports", "__export", "DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS", "DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL", "DEVICE_SESSION_REFRESHER_POLLING_INTERVAL", "__toCommonJS"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ "use strict";var c=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var v=Object.prototype.hasOwnProperty;var E=(s,e)=>{for(var n in e)c(s,n,{get:e[n],enumerable:!0})},l=(s,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of u(e))!v.call(s,t)&&t!==n&&c(s,t,{get:()=>e[t],enumerable:!(i=d(e,t))||i.enumerable});return s};var h=s=>l(c({},"__esModule",{value:!0}),s);var C={};E(C,{DevicePinger:()=>D});module.exports=h(C);var p=require("../../../api/device/DeviceModel"),a=require("../../../api/index"),m=require("../../device-session/data/DeviceSessionRefresherConst"),r=require("../../device-session/model/DeviceSessionEventDispatcher");class D{constructor(e,n,i,t){this.connectedDevice=n;this._sessionEventDispatcher=i;this._sendCommandFunction=t,this._logger=e("device-pinger"),this._subscription=this._sessionEventDispatcher.listen().subscribe(async o=>await this.mapEventAction(o))}_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 r.SessionEvents.REFRESH_NEEDED:return await this.ping();default:return null}};async mapDevicePingAction(e){switch(e){case p.DeviceModelId.NANO_S:{const n=(async()=>{const o=await this._sendCommandFunction(new a.GetAppAndVersionCommand);return this._sendCommandFunction(new a.GetOsVersionCommand),o})(),i=new Promise(o=>{setTimeout(()=>o(null),m.DEVICE_SESSION_REFRESHER_POLLING_INTERVAL*2+100)}),t=await Promise.race([n,i]);return t?this._sessionEventDispatcher.dispatch({eventName:r.SessionEvents.COMMAND_SUCCEEDED,eventData:t}):this._sessionEventDispatcher.dispatch({eventName:r.SessionEvents.DEVICE_STATE_UPDATE_LOCKED}),t}default:{const n=await this._sendCommandFunction(new a.GetAppAndVersionCommand);return this._sessionEventDispatcher.dispatch({eventName:r.SessionEvents.COMMAND_SUCCEEDED,eventData:n}),n}}}unsubscribe(){this._subscription.unsubscribe()}}0&&(module.exports={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": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,kBAAAE,IAAA,eAAAC,EAAAH,GAEA,IAAAI,EAA8B,mCAC9BC,EAKO,sBAMPC,EAA0D,qEAC1DC,EAIO,uEAMA,MAAML,CAAa,CAKxB,YACEM,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,KAAK,gBAAc,eACjB,OAAO,MAAM,KAAK,KAAK,EACzB,QACE,OAAO,IACX,CACF,EAEA,MAAc,oBAAoBE,EAA8B,CAC9D,OAAQA,EAAe,CACrB,KAAK,gBAAc,OAAQ,CACzB,MAAMC,GACH,SAAY,CACX,MAAMC,EAAmB,MAAM,KAAK,qBAClC,IAAI,yBACN,EAEA,YAAK,qBAAqB,IAAI,qBAAqB,EAC5CA,CACT,GAAG,EAECC,EAAgC,IAAI,QAASC,GAAY,CAC7D,WACE,IAAMA,EAAQ,IAAI,EAClB,4CAA4C,EAAI,GAClD,CACF,CAAC,EAEKC,EACJ,MAAM,QAAQ,KAAK,CAACJ,EAAcE,CAAc,CAAC,EAEnD,OAAKE,EAKH,KAAK,wBAAwB,SAAS,CACpC,UAAW,gBAAc,kBACzB,UAAWA,CACb,CAAC,EAPD,KAAK,wBAAwB,SAAS,CACpC,UAAW,gBAAc,0BAC3B,CAAC,EAOIA,CACT,CACA,QAAS,CACP,MAAMC,EAAS,MAAM,KAAK,qBACxB,IAAI,yBACN,EACA,YAAK,wBAAwB,SAAS,CACpC,UAAW,gBAAc,kBACzB,UAAWA,CACb,CAAC,EACMA,CACT,CACF,CACF,CAEO,aAAoB,CACzB,KAAK,cAAc,YAAY,CACjC,CACF",
6
+ "names": ["DevicePinger_exports", "__export", "DevicePinger", "__toCommonJS", "import_DeviceModel", "import_api", "import_DeviceSessionRefresherConst", "import_DeviceSessionEventDispatcher", "loggerModuleFactory", "connectedDevice", "_sessionEventDispatcher", "sendCommandFunction", "event", "error", "deviceModelId", "chainPromise", "appVersionResult", "timeoutPromise", "resolve", "resultOrTimeout", "result"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var E=require("rxjs"),e=require("vitest"),d=require("../../../api/device/DeviceModel"),p=require("../../../api/index"),D=require("../../device-session/data/DeviceSessionRefresherConst"),a=require("../../device-session/model/DeviceSessionEventDispatcher"),m=require("./DevicePinger");(0,e.describe)("DevicePinger",()=>{let n,u;const v=e.vi.fn(()=>u);let r,s,i,o;(0,e.beforeEach)(()=>{r=new E.Subject,s={listen:()=>r.asObservable(),dispatch:e.vi.fn()},n=e.vi.fn(),u={info:e.vi.fn(),warn:e.vi.fn(),error:e.vi.fn(),debug:e.vi.fn(),subscribers:[]},i={deviceModel:{id:d.DeviceModelId.NANO_X}},o=new m.DevicePinger(v,i,s,n)}),(0,e.afterEach)(()=>{o.unsubscribe(),e.vi.restoreAllMocks()}),(0,e.it)("should call sendCommandFunction and dispatch COMMAND_SUCCEEDED event on successful ping for non-NANO_S",async()=>{const t={status:"success",data:{foo:"bar"}};n.mockResolvedValue(t);const c=await o.ping();(0,e.expect)(n).toHaveBeenCalledTimes(1);const l=n.mock.calls[0][0];(0,e.expect)(l).toBeInstanceOf(p.GetAppAndVersionCommand),(0,e.expect)(s.dispatch).toHaveBeenCalledWith({eventName:a.SessionEvents.COMMAND_SUCCEEDED,eventData:t}),(0,e.expect)(c).toEqual(t)}),(0,e.it)("should log error and throw error on ping failure",async()=>{const t=new Error("ping failed");n.mockRejectedValue(t),await(0,e.expect)(o.ping()).rejects.toThrow("ping failed"),(0,e.expect)(n).toHaveBeenCalledTimes(1)}),(0,e.it)("should dispatch DEVICE_STATE_UPDATE_LOCKED and return null on timeout for NANO_S",async()=>{i.deviceModel.id=d.DeviceModelId.NANO_S,o.unsubscribe(),o=new m.DevicePinger(v,i,s,n);const t=new Promise(()=>{});n.mockReturnValueOnce(t),e.vi.useFakeTimers();const c=o.ping();e.vi.advanceTimersByTime(D.DEVICE_SESSION_REFRESHER_POLLING_INTERVAL*4);const l=await c;(0,e.expect)(l).toBeNull(),(0,e.expect)(s.dispatch).toHaveBeenCalledWith({eventName:a.SessionEvents.DEVICE_STATE_UPDATE_LOCKED}),(0,e.expect)(n).toHaveBeenCalledTimes(1),e.vi.useRealTimers()}),(0,e.it)("should call ping on REFRESH_NEEDED event",async()=>{const t={status:"success",data:{foo:"bar"}};n.mockResolvedValue(t),r.next({eventName:a.SessionEvents.REFRESH_NEEDED,eventData:void 0}),await Promise.resolve(),(0,e.expect)(n).toHaveBeenCalled(),(0,e.expect)(s.dispatch).toHaveBeenCalledWith({eventName:a.SessionEvents.COMMAND_SUCCEEDED,eventData:t})}),(0,e.it)("should not process events after unsubscribe is called",async()=>{o.unsubscribe(),n.mockClear(),r.next({eventName:a.SessionEvents.REFRESH_NEEDED,eventData:void 0}),await Promise.resolve(),(0,e.expect)(n).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": "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",
6
+ "names": ["import_rxjs", "import_vitest", "import_DeviceModel", "import_api", "import_DeviceSessionRefresherConst", "import_DeviceSessionEventDispatcher", "import_DevicePinger", "dummySendCommandFunction", "mockLogger", "mockedLoggerModuleFactory", "eventSubject", "mockSessionEventDispatcher", "dummyConnectedDevice", "devicePinger", "dummyResult", "result", "commandArg", "dummyError", "neverResolvingPromise", "pingPromise"]
7
+ }
@@ -1,2 +1,2 @@
1
- "use strict";var c=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var C=(n,e)=>{for(var i in e)c(n,i,{get:e[i],enumerable:!0})},b=(n,e,i,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of _(e))!y.call(n,t)&&t!==i&&c(n,t,{get:()=>e[t],enumerable:!(s=g(e,t))||s.enumerable});return n};var A=n=>b(c({},"__esModule",{value:!0}),n);var R={};C(R,{DeviceSession:()=>E});module.exports=A(R);var d=require("purify-ts"),v=require("rxjs"),p=require("uuid"),u=require("../../../api/command/utils/CommandUtils"),r=require("../../../api/device/DeviceStatus"),S=require("../../../api/device-session/DeviceSessionState"),l=require("../../../api/Error"),h=require("../../device-session/data/DeviceSessionRefresherConst"),m=require("../../device-session/service/RefresherService"),D=require("./DeviceSessionRefresher");class E{_id;_connectedDevice;_deviceState;_refresher;_refresherService;_managerApiService;_secureChannelService;_readyPromise;_resolveReady;constructor({connectedDevice:e,id:i=(0,p.v4)()},s,t,a){this._id=i,this._connectedDevice=e,this._deviceState=new v.BehaviorSubject({sessionStateType:S.DeviceSessionStateType.Connected,deviceStatus:r.DeviceStatus.CONNECTED,deviceModelId:this._connectedDevice.deviceModel.id}),this._refresher=new D.DeviceSessionRefresher({refreshInterval:h.DEVICE_SESSION_REFRESH_INTERVAL,deviceStatus:r.DeviceStatus.CONNECTED,deviceModelId:this._connectedDevice.deviceModel.id,sendApduFn:o=>this.sendApdu(o,{isPolling:!0,triggersDisconnection:!1}),updateStateFn:o=>{const f=this._deviceState.getValue();this.setDeviceSessionState(o(f))}},s("device-session-refresher")),this._refresherService=new m.RefresherService(this._refresher),this._managerApiService=t,this._secureChannelService=a,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.DeviceStatus.BUSY?(0,d.Left)(new l.DeviceBusyError):(this.updateDeviceStatus(r.DeviceStatus.BUSY),(await this._connectedDevice.sendApdu(e,i.triggersDisconnection)).ifRight(o=>{console.log("device session apdu response",o.data),u.CommandUtils.isLockedDeviceResponse(o)?this.updateDeviceStatus(r.DeviceStatus.LOCKED):this.updateDeviceStatus(r.DeviceStatus.CONNECTED),!i.isPolling&&s&&s()}).ifLeft(()=>{console.log("device session apdu error"),this.updateDeviceStatus(r.DeviceStatus.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.DeviceStatus.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(a=>{i=this._deviceState.subscribe(o=>{[r.DeviceStatus.LOCKED,r.DeviceStatus.CONNECTED].includes(o.deviceStatus)&&(i?.unsubscribe(),a())})})];e>0&&t.push(new Promise(a=>{setTimeout(()=>{this.updateDeviceStatus(r.DeviceStatus.CONNECTED),a()},e)})),await Promise.race(t)}}0&&(module.exports={DeviceSession});
1
+ "use strict";var a=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var R=(r,e)=>{for(var t in e)a(r,t,{get:e[t],enumerable:!0})},b=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of A(e))!C.call(r,i)&&i!==t&&a(r,i,{get:()=>e[i],enumerable:!(s=g(e,i))||s.enumerable});return r};var y=r=>b(a({},"__esModule",{value:!0}),r);var O={};R(O,{DeviceSession:()=>T});module.exports=y(O);var v=require("rxjs"),d=require("uuid"),h=require("../../../api/command/utils/CommandUtils"),p=require("../../../api/device/DeviceStatus"),S=require("../../../api/device-session/DeviceSessionState"),u=require("../../device-session/data/DeviceSessionRefresherConst"),m=require("../../device-session/service/MutexService"),D=require("../../device-session/service/RefresherService"),l=require("./DevicePinger"),n=require("./DeviceSessionEventDispatcher"),_=require("./DeviceSessionRefresher"),f=require("./DeviceSessionStateHandler");class T{_id;_connectedDevice;_deviceState;_managerApiService;_secureChannelService;_logger;_refresherOptions;_pinger;_deviceSessionRefresher;_refresherService;_commandMutex=new m.MutexService;_sessionEventDispatcher=new n.DeviceSessionEventDispatcher;constructor({connectedDevice:e,id:t=(0,d.v4)()},s,i,o,E){this._id=t,this._connectedDevice=e,this._logger=s("device-session"),this._managerApiService=i,this._secureChannelService=o,this._refresherOptions={...u.DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS,...E},this._deviceState=new v.BehaviorSubject({sessionStateType:S.DeviceSessionStateType.Connected,deviceStatus:p.DeviceStatus.CONNECTED,deviceModelId:this._connectedDevice.deviceModel.id}),this._pinger=new l.DevicePinger(s,e,this._sessionEventDispatcher,c=>this.sendCommand(c)),this._deviceSessionRefresher=new _.DeviceSessionRefresher(s,this._refresherOptions,this._sessionEventDispatcher,this._connectedDevice),new f.DeviceSessionStateHandler(s,this._sessionEventDispatcher,this._connectedDevice,this._deviceState,c=>this.setDeviceSessionState(c)),this._refresherService=new D.RefresherService(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,t={isPolling:!1,triggersDisconnection:!1,abortTimeout:void 0}){const s=await this._commandMutex.lock();try{this._sessionEventDispatcher.dispatch({eventName:n.SessionEvents.DEVICE_STATE_UPDATE_BUSY});const i=await this._connectedDevice.sendApdu(e,t.triggersDisconnection,t.abortTimeout);return i.ifRight(o=>{h.CommandUtils.isLockedDeviceResponse(o)?this._sessionEventDispatcher.dispatch({eventName:n.SessionEvents.DEVICE_STATE_UPDATE_LOCKED}):this._sessionEventDispatcher.dispatch({eventName:n.SessionEvents.DEVICE_STATE_UPDATE_CONNECTED})}).ifLeft(()=>{this._sessionEventDispatcher.dispatch({eventName:n.SessionEvents.DEVICE_STATE_UPDATE_CONNECTED})}),i}finally{s()}}async sendCommand(e){const t=e.getApdu();return(await this.sendApdu(t.getRawApdu(),{isPolling:!1,triggersDisconnection:e.triggersDisconnection??!1})).caseOf({Left:i=>{throw i},Right:i=>e.parseResponse(i,this._connectedDevice.deviceModel.id)})}executeDeviceAction(e){const{observable:t,cancel:s}=e._execute({sendApdu:async i=>this.sendApdu(i),sendCommand:async i=>this.sendCommand(i),getDeviceSessionState:()=>this._deviceState.getValue(),getDeviceSessionStateObservable:()=>this.state,setDeviceSessionState:i=>(this.setDeviceSessionState(i),this._deviceState.getValue()),disableRefresher:i=>this._refresherService.disableRefresher(i),getManagerApiService:()=>this._managerApiService,getSecureChannelService:()=>this._secureChannelService});return{observable:t,cancel:s}}close(){this._updateDeviceStatus(p.DeviceStatus.NOT_CONNECTED),this._deviceState.complete(),this._deviceSessionRefresher.stopRefresher()}disableRefresher(e){return this._refresherService.disableRefresher(e)}_updateDeviceStatus(e){const t=this._deviceState.getValue();this._deviceState.next({...t,deviceStatus:e})}}0&&(module.exports={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": ["DeviceSession_exports", "__export", "DeviceSession", "__toCommonJS", "import_purify_ts", "import_rxjs", "import_uuid", "import_CommandUtils", "import_DeviceStatus", "import_DeviceSessionState", "import_Error", "import_DeviceSessionRefresherConst", "import_RefresherService", "import_DeviceSessionRefresher", "connectedDevice", "id", "uuidv4", "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 const release = await this._commandMutex.lock();\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 options.abortTimeout,\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": "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",
6
+ "names": ["DeviceSession_exports", "__export", "DeviceSession", "__toCommonJS", "import_rxjs", "import_uuid", "import_CommandUtils", "import_DeviceStatus", "import_DeviceSessionState", "import_DeviceSessionRefresherConst", "import_MutexService", "import_RefresherService", "import_DevicePinger", "import_DeviceSessionEventDispatcher", "import_DeviceSessionRefresher", "import_DeviceSessionStateHandler", "connectedDevice", "id", "uuidv4", "loggerModuleFactory", "managerApiService", "secureChannelService", "deviceSessionRefresherOptions", "command", "state", "error", "rawApdu", "options", "release", "result", "response", "apdu", "err", "r", "deviceAction", "observable", "cancel", "blockerId", "deviceStatus"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var t=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var g=(r,e)=>{for(var i in e)t(r,i,{get:e[i],enumerable:!0})},v=(r,e,i,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of S(e))!p.call(r,o)&&o!==i&&t(r,o,{get:()=>e[o],enumerable:!(n=a(e,o))||n.enumerable});return r};var m=r=>v(t({},"__esModule",{value:!0}),r);var l={};g(l,{deviceSessionStubBuilder:()=>u});module.exports=m(l);var c=require("../../../api/transport/model/TransportConnectedDevice.stub"),s=require("../../device-session/model/DeviceSession");const u=(r={},e,i,n)=>new s.DeviceSession({connectedDevice:(0,c.connectedDeviceStubBuilder)(),id:"fakeSessionId",...r},e,i,n);0&&(module.exports={deviceSessionStubBuilder});
1
+ "use strict";var s=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var v=(r,e)=>{for(var o in e)s(r,o,{get:e[o],enumerable:!0})},g=(r,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of p(e))!a.call(r,i)&&i!==o&&s(r,i,{get:()=>e[i],enumerable:!(n=S(e,i))||n.enumerable});return r};var m=r=>g(s({},"__esModule",{value:!0}),r);var f={};v(f,{deviceSessionStubBuilder:()=>u});module.exports=m(f);var t=require("../../../api/transport/model/TransportConnectedDevice.stub"),c=require("../../device-session/model/DeviceSession");const u=(r={},e,o,n,i)=>new c.DeviceSession({connectedDevice:(0,t.connectedDeviceStubBuilder)(),id:"fakeSessionId",...r},e,o,n,i);0&&(module.exports={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": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,8BAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAA2C,8DAC3CC,EAGO,wDAIA,MAAMH,EAA2B,CACtCI,EAAyC,CAAC,EAC1CC,EACAC,EACAC,IAEA,IAAI,gBACF,CACE,mBAAiB,8BAA2B,EAC5C,GAAI,gBACJ,GAAGH,CACL,EACAC,EACAC,EACAC,CACF",
6
- "names": ["DeviceSession_stub_exports", "__export", "deviceSessionStubBuilder", "__toCommonJS", "import_TransportConnectedDevice", "import_DeviceSession", "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": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,8BAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAA2C,8DAC3CC,EAIO,wDAIA,MAAMH,EAA2B,CACtCI,EAAyC,CAAC,EAC1CC,EACAC,EACAC,EACAC,IAEA,IAAI,gBACF,CACE,mBAAiB,8BAA2B,EAC5C,GAAI,gBACJ,GAAGJ,CACL,EACAC,EACAC,EACAC,EACAC,CACF",
6
+ "names": ["DeviceSession_stub_exports", "__export", "deviceSessionStubBuilder", "__toCommonJS", "import_TransportConnectedDevice", "import_DeviceSession", "props", "loggerFactory", "managerApi", "secureChannel", "deviceSessionRefresherOptions"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ "use strict";var _=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var A=Object.prototype.hasOwnProperty;var o=(E,e)=>{for(var D in e)_(E,D,{get:e[D],enumerable:!0})},d=(E,e,D,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of S(e))!A.call(E,t)&&t!==D&&_(E,t,{get:()=>e[t],enumerable:!(s=C(e,t))||s.enumerable});return E};var a=E=>d(_({},"__esModule",{value:!0}),E);var r={};o(r,{DeviceSessionEventDispatcher:()=>v,SessionEvents:()=>i});module.exports=a(r);var T=require("rxjs"),i=(n=>(n.NEW_STATE="NEW_STATE",n.REFRESH_NEEDED="REFRESH_NEEDED",n.COMMAND_SUCCEEDED="COMMAND_SUCCEEDED",n.DEVICE_STATE_UPDATE_BUSY="DEVICE_STATE_UPDATE_BUSY",n.DEVICE_STATE_UPDATE_LOCKED="DEVICE_STATE_UPDATE_LOCKED",n.DEVICE_STATE_UPDATE_CONNECTED="DEVICE_STATE_UPDATE_CONNECTED",n))(i||{});class v{_eventEmitter=new T.Subject;listen(){return this._eventEmitter.asObservable()}dispatch(e){this._eventEmitter.next(e)}}0&&(module.exports={DeviceSessionEventDispatcher,SessionEvents});
2
+ //# sourceMappingURL=DeviceSessionEventDispatcher.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/internal/device-session/model/DeviceSessionEventDispatcher.ts"],
4
+ "sourcesContent": ["import { type Observable, Subject } from \"rxjs\";\n\nimport { type GetAppAndVersionResponse } from \"@api/index\";\nimport { type CommandResult } from \"@api/types\";\n\nexport enum SessionEvents {\n NEW_STATE = \"NEW_STATE\",\n REFRESH_NEEDED = \"REFRESH_NEEDED\",\n COMMAND_SUCCEEDED = \"COMMAND_SUCCEEDED\",\n DEVICE_STATE_UPDATE_BUSY = \"DEVICE_STATE_UPDATE_BUSY\",\n DEVICE_STATE_UPDATE_LOCKED = \"DEVICE_STATE_UPDATE_LOCKED\",\n DEVICE_STATE_UPDATE_CONNECTED = \"DEVICE_STATE_UPDATE_CONNECTED\",\n}\n\ninterface SessionEventPayloads {\n [SessionEvents.NEW_STATE]: undefined;\n [SessionEvents.REFRESH_NEEDED]: undefined;\n [SessionEvents.DEVICE_STATE_UPDATE_BUSY]: undefined;\n [SessionEvents.DEVICE_STATE_UPDATE_LOCKED]: undefined;\n [SessionEvents.DEVICE_STATE_UPDATE_CONNECTED]: undefined;\n [SessionEvents.COMMAND_SUCCEEDED]: CommandResult<GetAppAndVersionResponse>;\n}\n\nexport type NewEvent = {\n [K in SessionEvents]: SessionEventPayloads[K] extends undefined\n ? { eventName: K; eventData?: undefined }\n : { eventName: K; eventData: SessionEventPayloads[K] };\n}[SessionEvents];\n\nexport class DeviceSessionEventDispatcher {\n private _eventEmitter: Subject<NewEvent> = new Subject();\n\n public listen(): Observable<NewEvent> {\n return this._eventEmitter.asObservable();\n }\n\n public dispatch(event: NewEvent): void {\n this._eventEmitter.next(event);\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,kCAAAE,EAAA,kBAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EAAyC,gBAK7BF,OACVA,EAAA,UAAY,YACZA,EAAA,eAAiB,iBACjBA,EAAA,kBAAoB,oBACpBA,EAAA,yBAA2B,2BAC3BA,EAAA,2BAA6B,6BAC7BA,EAAA,8BAAgC,gCANtBA,OAAA,IAwBL,MAAMD,CAA6B,CAChC,cAAmC,IAAI,UAExC,QAA+B,CACpC,OAAO,KAAK,cAAc,aAAa,CACzC,CAEO,SAASI,EAAuB,CACrC,KAAK,cAAc,KAAKA,CAAK,CAC/B,CACF",
6
+ "names": ["DeviceSessionEventDispatcher_exports", "__export", "DeviceSessionEventDispatcher", "SessionEvents", "__toCommonJS", "import_rxjs", "event"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var e=require("vitest"),i=require("./DeviceSessionEventDispatcher");(0,e.describe)("DeviceSessionEventDispatcher",()=>{let a;beforeEach(()=>{a=new i.DeviceSessionEventDispatcher}),(0,e.it)("should dispatch and receive an event without payload",()=>new Promise((o,c)=>{const t={eventName:i.SessionEvents.REFRESH_NEEDED,eventData:void 0},n=a.listen().subscribe(r=>{try{(0,e.expect)(r).toEqual(t),o(void 0)}catch(s){c(s)}finally{n.unsubscribe()}});a.dispatch(t)})),(0,e.it)("should dispatch and receive a COMMAND_SUCCEEDED event with payload",()=>new Promise((o,c)=>{const t={status:"success",data:{someField:"dummyValue"}},n={eventName:i.SessionEvents.COMMAND_SUCCEEDED,eventData:t},r=a.listen().subscribe(s=>{if(s.eventName===i.SessionEvents.COMMAND_SUCCEEDED)try{(0,e.expect)(s).toEqual(n),o(void 0)}catch(E){c(E)}finally{r.unsubscribe()}});a.dispatch(n)})),(0,e.it)("should dispatch multiple events",()=>new Promise((o,c)=>{const t=[{eventName:i.SessionEvents.DEVICE_STATE_UPDATE_BUSY,eventData:void 0},{eventName:i.SessionEvents.DEVICE_STATE_UPDATE_CONNECTED,eventData:void 0}],n=[],r=a.listen().subscribe(s=>{if(n.push(s),n.length===t.length)try{(0,e.expect)(n).toEqual(t),o(void 0)}catch(E){c(E)}finally{r.unsubscribe()}});t.forEach(s=>a.dispatch(s))}))});
2
+ //# sourceMappingURL=DeviceSessionEventDispatcher.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/internal/device-session/model/DeviceSessionEventDispatcher.test.ts"],
4
+ "sourcesContent": ["import { describe, expect, it } from \"vitest\";\n\nimport { type GetAppAndVersionResponse } from \"@api/index\";\nimport type { CommandResult } from \"@api/types\";\n\nimport {\n DeviceSessionEventDispatcher,\n type NewEvent,\n SessionEvents,\n} from \"./DeviceSessionEventDispatcher\";\n\ndescribe(\"DeviceSessionEventDispatcher\", () => {\n let dispatcher: DeviceSessionEventDispatcher;\n\n beforeEach(() => {\n dispatcher = new DeviceSessionEventDispatcher();\n });\n\n it(\"should dispatch and receive an event without payload\", () =>\n new Promise((resolve, reject) => {\n // given\n const expectedEvent: NewEvent = {\n eventName: SessionEvents.REFRESH_NEEDED,\n eventData: undefined,\n };\n\n // when\n const subscription = dispatcher.listen().subscribe((event) => {\n // then\n try {\n expect(event).toEqual(expectedEvent);\n resolve(undefined);\n } catch (error) {\n reject(error);\n } finally {\n subscription.unsubscribe();\n }\n });\n\n dispatcher.dispatch(expectedEvent);\n }));\n\n it(\"should dispatch and receive a COMMAND_SUCCEEDED event with payload\", () =>\n new Promise((resolve, reject) => {\n // given\n const dummyCommandResult = {\n status: \"success\",\n data: { someField: \"dummyValue\" },\n } as unknown as CommandResult<GetAppAndVersionResponse>;\n\n const expectedEvent: NewEvent = {\n eventName: SessionEvents.COMMAND_SUCCEEDED,\n eventData: dummyCommandResult,\n };\n\n // when\n const subscription = dispatcher.listen().subscribe((event) => {\n if (event.eventName === SessionEvents.COMMAND_SUCCEEDED) {\n // then\n try {\n expect(event).toEqual(expectedEvent);\n resolve(undefined);\n } catch (error) {\n reject(error);\n } finally {\n subscription.unsubscribe();\n }\n }\n });\n\n dispatcher.dispatch(expectedEvent);\n }));\n\n it(\"should dispatch multiple events\", () =>\n new Promise((resolve, reject) => {\n // given\n const events: NewEvent[] = [\n {\n eventName: SessionEvents.DEVICE_STATE_UPDATE_BUSY,\n eventData: undefined,\n },\n {\n eventName: SessionEvents.DEVICE_STATE_UPDATE_CONNECTED,\n eventData: undefined,\n },\n ];\n const received: NewEvent[] = [];\n\n // when\n const subscription = dispatcher.listen().subscribe((event) => {\n received.push(event);\n\n // then\n if (received.length === events.length) {\n try {\n expect(received).toEqual(events);\n resolve(undefined);\n } catch (error) {\n reject(error);\n } finally {\n subscription.unsubscribe();\n }\n }\n });\n\n events.forEach((event) => dispatcher.dispatch(event));\n }));\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAAqC,kBAKrCC,EAIO,6CAEP,YAAS,+BAAgC,IAAM,CAC7C,IAAIC,EAEJ,WAAW,IAAM,CACfA,EAAa,IAAI,8BACnB,CAAC,KAED,MAAG,uDAAwD,IACzD,IAAI,QAAQ,CAACC,EAASC,IAAW,CAE/B,MAAMC,EAA0B,CAC9B,UAAW,gBAAc,eACzB,UAAW,MACb,EAGMC,EAAeJ,EAAW,OAAO,EAAE,UAAWK,GAAU,CAE5D,GAAI,IACF,UAAOA,CAAK,EAAE,QAAQF,CAAa,EACnCF,EAAQ,MAAS,CACnB,OAASK,EAAO,CACdJ,EAAOI,CAAK,CACd,QAAE,CACAF,EAAa,YAAY,CAC3B,CACF,CAAC,EAEDJ,EAAW,SAASG,CAAa,CACnC,CAAC,CAAC,KAEJ,MAAG,qEAAsE,IACvE,IAAI,QAAQ,CAACF,EAASC,IAAW,CAE/B,MAAMK,EAAqB,CACzB,OAAQ,UACR,KAAM,CAAE,UAAW,YAAa,CAClC,EAEMJ,EAA0B,CAC9B,UAAW,gBAAc,kBACzB,UAAWI,CACb,EAGMH,EAAeJ,EAAW,OAAO,EAAE,UAAWK,GAAU,CAC5D,GAAIA,EAAM,YAAc,gBAAc,kBAEpC,GAAI,IACF,UAAOA,CAAK,EAAE,QAAQF,CAAa,EACnCF,EAAQ,MAAS,CACnB,OAASK,EAAO,CACdJ,EAAOI,CAAK,CACd,QAAE,CACAF,EAAa,YAAY,CAC3B,CAEJ,CAAC,EAEDJ,EAAW,SAASG,CAAa,CACnC,CAAC,CAAC,KAEJ,MAAG,kCAAmC,IACpC,IAAI,QAAQ,CAACF,EAASC,IAAW,CAE/B,MAAMM,EAAqB,CACzB,CACE,UAAW,gBAAc,yBACzB,UAAW,MACb,EACA,CACE,UAAW,gBAAc,8BACzB,UAAW,MACb,CACF,EACMC,EAAuB,CAAC,EAGxBL,EAAeJ,EAAW,OAAO,EAAE,UAAWK,GAAU,CAI5D,GAHAI,EAAS,KAAKJ,CAAK,EAGfI,EAAS,SAAWD,EAAO,OAC7B,GAAI,IACF,UAAOC,CAAQ,EAAE,QAAQD,CAAM,EAC/BP,EAAQ,MAAS,CACnB,OAASK,EAAO,CACdJ,EAAOI,CAAK,CACd,QAAE,CACAF,EAAa,YAAY,CAC3B,CAEJ,CAAC,EAEDI,EAAO,QAASH,GAAUL,EAAW,SAASK,CAAK,CAAC,CACtD,CAAC,CAAC,CACN,CAAC",
6
+ "names": ["import_vitest", "import_DeviceSessionEventDispatcher", "dispatcher", "resolve", "reject", "expectedEvent", "subscription", "event", "error", "dummyCommandResult", "events", "received"]
7
+ }
@@ -1,2 +1,2 @@
1
- "use strict";var u=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var g=(n,e)=>{for(var t in e)u(n,t,{get:e[t],enumerable:!0})},O=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of A(e))!f.call(n,i)&&i!==t&&u(n,i,{get:()=>e[i],enumerable:!(r=l(e,i))||r.enumerable});return n};var y=n=>O(u({},"__esModule",{value:!0}),n),c=(n,e,t,r)=>{for(var i=r>1?void 0:r?l(e,t):e,o=n.length-1,a;o>=0;o--)(a=n[o])&&(i=(r?a(e,t,i):a(i))||i);return r&&i&&u(e,t,i),i};var D={};g(D,{DeviceSessionRefresher:()=>d});module.exports=y(D);var m=require("inversify"),s=require("rxjs"),h=require("../../../api/command/model/CommandResult"),v=require("../../../api/command/os/GetAppAndVersionCommand"),_=require("../../../api/command/os/GetOsVersionCommand"),b=require("../../../api/device/DeviceModel"),p=require("../../../api/device/DeviceStatus"),S=require("../../../api/device-session/DeviceSessionState");let d=class{_logger;_getAppAndVersionCommand=new v.GetAppAndVersionCommand;_getOsVersionCommand=new _.GetOsVersionCommand;_deviceStatus;_subscription;_refreshInterval;_deviceModelId;_sendApduFn;_updateStateFn;constructor({refreshInterval:e,deviceStatus:t,sendApduFn:r,updateStateFn:i,deviceModelId:o},a){this._deviceStatus=t,this._logger=a,this._sendApduFn=r,this._updateStateFn=i,this._refreshInterval=e,this._deviceModelId=o}start(){if(this._subscription&&!this._subscription.closed){this._logger.warn("Refresher already started");return}const e=this._deviceModelId===b.DeviceModelId.NANO_S?this._getNanoSRefreshObservable(this._refreshInterval*2):this._getDefaultRefreshObservable((0,s.timer)(0,this._refreshInterval));this._subscription=e.subscribe(t=>{!t||!(0,h.isSuccessCommandResult)(t)||this._updateStateFn(r=>({...r,sessionStateType:S.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:this._deviceStatus,currentApp:t.data,installedApps:"installedApps"in r?r.installedApps:[],isSecureConnectionAllowed:"isSecureConnectionAllowed"in r?r.isSecureConnectionAllowed:!1}))})}_getDefaultRefreshObservable(e=(0,s.from)([0])){return e.pipe((0,s.filter)(()=>![p.DeviceStatus.BUSY,p.DeviceStatus.NOT_CONNECTED].includes(this._deviceStatus)),(0,s.switchMap)(async()=>{const t=this._getAppAndVersionCommand.getApdu().getRawApdu();return await this._sendApduFn(t)}),(0,s.map)(t=>t.caseOf({Left:r=>(this._logger.error("Error in sending APDU when polling",{data:{error:r}}),null),Right:r=>{try{return this._getAppAndVersionCommand.parseResponse(r)}catch(i){return this._logger.error("Error in parsing APDU response",{data:{error:i}}),null}}})),(0,s.filter)(t=>t!==null))}_getNanoSRefreshObservable(e){const t=this._getDefaultRefreshObservable().pipe((0,s.switchMap)(async i=>{const o=this._getOsVersionCommand.getApdu().getRawApdu();return await this._sendApduFn(o),i})),r=(0,s.of)(null).pipe((0,s.delay)(e),(0,s.map)(i=>{this._logger.warn("Nanos refresh timeout, setting device status to LOCKED"),this._updateStateFn(o=>({...o,deviceStatus:p.DeviceStatus.LOCKED}))}));return(0,s.timer)(0,e+100).pipe((0,s.switchMap)(()=>(0,s.race)(t,r)))}setDeviceStatus(e){e===p.DeviceStatus.NOT_CONNECTED&&this.stop(),this._deviceStatus=e}stop(){!this._subscription||this._subscription.closed||(this._subscription.unsubscribe(),this._subscription=void 0)}};d=c([(0,m.injectable)()],d);0&&(module.exports={DeviceSessionRefresher});
1
+ "use strict";var n=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var v=Object.prototype.hasOwnProperty;var a=(t,e)=>{for(var s in e)n(t,s,{get:e[s],enumerable:!0})},d=(t,e,s,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of f(e))!v.call(t,i)&&i!==s&&n(t,i,{get:()=>e[i],enumerable:!(r=l(e,i))||r.enumerable});return t};var u=t=>d(n({},"__esModule",{value:!0}),t);var _={};a(_,{DeviceSessionRefresher:()=>g});module.exports=u(_);var c=require("rxjs"),h=require("../../../api/device/DeviceModel"),o=require("../../device-session/data/DeviceSessionRefresherConst"),p=require("../../device-session/model/DeviceSessionEventDispatcher");class g{constructor(e,s,r,i){this._sessionEventDispatcher=r;this._refresherOptions=s,this._logger=e("device-session-refresher"),this._connectedDeviceID=i.deviceModel.id}_refresherSubscription;_refresherOptions;_logger;_connectedDeviceID;startRefresher(){if(this._refresherOptions.isRefresherDisabled)return;const e=this.getValidPollingInterval(this._refresherOptions,this._logger)*2;this._refresherSubscription=(0,c.timer)(0,e).subscribe(()=>{this._sessionEventDispatcher.dispatch({eventName:p.SessionEvents.REFRESH_NEEDED})})}stopRefresher(){this._refresherSubscription&&(this._refresherSubscription.unsubscribe(),this._refresherSubscription=void 0,this._logger.info("Refresher stopped."))}restartRefresher(){this.stopRefresher(),this.startRefresher(),this._logger.info("Refresher restarted.")}destroy(){this.stopRefresher()}getValidPollingInterval=(e,s)=>{const{pollingInterval:r}=e;switch(this._connectedDeviceID){case h.DeviceModelId.NANO_S:{const i=o.DEVICE_SESSION_REFRESHER_POLLING_INTERVAL*2;return r!==void 0&&r<i?(s.warn(`Polling interval of ${r} is too low, setting to minimum as ${i}`),i):r??i}default:return r!==void 0&&r<o.DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL?(s.warn(`Polling interval of ${r} is too low, setting to minimum as ${o.DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL}`),o.DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL):r??o.DEVICE_SESSION_REFRESHER_POLLING_INTERVAL}}}0&&(module.exports={DeviceSessionRefresher});
2
2
  //# sourceMappingURL=DeviceSessionRefresher.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/device-session/model/DeviceSessionRefresher.ts"],
4
- "sourcesContent": ["import { injectable } from \"inversify\";\nimport { Either } from \"purify-ts\";\nimport {\n delay,\n filter,\n from,\n map,\n Observable,\n of,\n race,\n Subscription,\n switchMap,\n timer,\n} from \"rxjs\";\n\nimport { isSuccessCommandResult } from \"@api/command/model/CommandResult\";\nimport {\n GetAppAndVersionCommand,\n GetAppAndVersionCommandResult,\n} from \"@api/command/os/GetAppAndVersionCommand\";\nimport { GetOsVersionCommand } from \"@api/command/os/GetOsVersionCommand\";\nimport { DeviceModelId } from \"@api/device/DeviceModel\";\nimport { DeviceStatus } from \"@api/device/DeviceStatus\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\nimport {\n DeviceSessionState,\n DeviceSessionStateType,\n} from \"@api/device-session/DeviceSessionState\";\nimport { DmkError } from \"@api/Error\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { SendApduFnType } from \"@api/transport/model/DeviceConnection\";\n\ntype UpdateStateFnType = (\n callback: (state: DeviceSessionState) => DeviceSessionState,\n) => void;\n\n/**\n * The arguments for the DeviceSessionRefresher.\n */\nexport type DeviceSessionRefresherArgs = {\n /**\n * The refresh interval in milliseconds.\n */\n refreshInterval: number;\n\n /**\n * The current device status when the refresher is created.\n */\n deviceStatus: Exclude<DeviceStatus, DeviceStatus.NOT_CONNECTED>;\n\n /**\n * The function used to send APDU commands to the device.\n */\n sendApduFn: (rawApdu: Uint8Array) => Promise<Either<DmkError, ApduResponse>>;\n\n /**\n * Callback that updates the state of the device session with\n * polling response.\n * @param callback - A function that will take the previous state and return the new state.\n * @returns void\n */\n updateStateFn: UpdateStateFnType;\n\n /**\n * Device model to handle NanoS specific refresher\n */\n deviceModelId: DeviceModelId;\n};\n\n/**\n * The session refresher that periodically sends a command to refresh the session.\n */\n@injectable()\nexport class DeviceSessionRefresher {\n private readonly _logger: LoggerPublisherService;\n private readonly _getAppAndVersionCommand = new GetAppAndVersionCommand();\n private readonly _getOsVersionCommand = new GetOsVersionCommand();\n private _deviceStatus: DeviceStatus;\n private _subscription?: Subscription;\n private readonly _refreshInterval: number;\n private readonly _deviceModelId: DeviceModelId;\n private readonly _sendApduFn: SendApduFnType;\n private readonly _updateStateFn: UpdateStateFnType;\n\n constructor(\n {\n refreshInterval,\n deviceStatus,\n sendApduFn,\n updateStateFn,\n deviceModelId,\n }: DeviceSessionRefresherArgs,\n logger: LoggerPublisherService,\n ) {\n this._deviceStatus = deviceStatus;\n this._logger = logger;\n this._sendApduFn = sendApduFn;\n this._updateStateFn = updateStateFn;\n this._refreshInterval = refreshInterval;\n this._deviceModelId = deviceModelId;\n }\n\n /**\n * Start the session refresher.\n * The refresher will send commands to refresh the session.\n */\n start() {\n if (this._subscription && !this._subscription.closed) {\n this._logger.warn(\"Refresher already started\");\n return;\n }\n\n // NanoS has a specific refresher that sends GetAppAndVersion and GetOsVersion commands\n const refreshObservable =\n this._deviceModelId === DeviceModelId.NANO_S\n ? this._getNanoSRefreshObservable(this._refreshInterval * 2)\n : this._getDefaultRefreshObservable(timer(0, this._refreshInterval));\n\n this._subscription = refreshObservable.subscribe((parsedResponse) => {\n if (!parsedResponse || !isSuccessCommandResult(parsedResponse)) {\n return;\n }\n // `batteryStatus` and `firmwareVersion` are not available in the polling response.\n this._updateStateFn((state) => ({\n ...state,\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: this._deviceStatus,\n currentApp: parsedResponse.data,\n installedApps: \"installedApps\" in state ? state.installedApps : [],\n isSecureConnectionAllowed:\n \"isSecureConnectionAllowed\" in state\n ? state.isSecureConnectionAllowed\n : false,\n }));\n });\n }\n\n /**\n * Creates an observable that refreshes a device state with GetAppAndVersion command result.\n *\n * @param {ObservableInput<number>} parentObservable - The parent observable to base the refresh observable on. Defaults to an array with a single number [0].\n * @return {Observable<GetAppAndVersionCommandResult>} An observable that emits the result of the GetAppAndVersionCommand.\n */\n private _getDefaultRefreshObservable(\n parentObservable: Observable<number> = from([0]),\n ): Observable<GetAppAndVersionCommandResult> {\n return parentObservable.pipe(\n filter(\n () =>\n ![DeviceStatus.BUSY, DeviceStatus.NOT_CONNECTED].includes(\n this._deviceStatus,\n ),\n ),\n switchMap(async () => {\n const rawApdu = this._getAppAndVersionCommand.getApdu().getRawApdu();\n return await this._sendApduFn(rawApdu);\n }),\n map((resp) =>\n resp.caseOf({\n Left: (error) => {\n this._logger.error(\"Error in sending APDU when polling\", {\n data: { error },\n });\n return null;\n },\n Right: (data: ApduResponse) => {\n try {\n return this._getAppAndVersionCommand.parseResponse(data);\n } catch (error) {\n this._logger.error(\"Error in parsing APDU response\", {\n data: { error },\n });\n return null;\n }\n },\n }),\n ),\n filter((parsedResponse) => parsedResponse !== null),\n );\n }\n\n /**\n * Creates an observable that emits events to refresh the NanoS device state.\n *\n * @param {number} refreshInterval - The interval, in milliseconds, at which the NanoS state should be refreshed.\n * @return {Observable<GetAppAndVersionCommandResult | void>} An observable that emits events to refresh the NanoS device state and handle timeout scenarios.\n */\n private _getNanoSRefreshObservable(\n refreshInterval: number,\n ): Observable<GetAppAndVersionCommandResult | void> {\n const nanoSRefreshObservable = this._getDefaultRefreshObservable().pipe(\n switchMap(async (resp) => {\n const rawApdu = this._getOsVersionCommand.getApdu().getRawApdu();\n await this._sendApduFn(rawApdu);\n return resp;\n }),\n );\n const timeoutObservable = of(null).pipe(\n delay(refreshInterval),\n map((_) => {\n this._logger.warn(\n \"Nanos refresh timeout, setting device status to LOCKED\",\n );\n this._updateStateFn((state) => ({\n ...state,\n deviceStatus: DeviceStatus.LOCKED,\n }));\n }),\n );\n return timer(0, refreshInterval + 100).pipe(\n switchMap(() => race(nanoSRefreshObservable, timeoutObservable)),\n );\n }\n\n /**\n * Maintain a device status to prevent sending APDU when the device is busy.\n *\n * @param {DeviceStatus} deviceStatus - The new device status.\n */\n setDeviceStatus(deviceStatus: DeviceStatus) {\n if (deviceStatus === DeviceStatus.NOT_CONNECTED) {\n this.stop();\n }\n this._deviceStatus = deviceStatus;\n }\n\n /**\n * Stops the session refresher.\n * The refresher will no longer send commands to refresh the session.\n */\n stop() {\n if (!this._subscription || this._subscription.closed) {\n return;\n }\n this._subscription.unsubscribe();\n this._subscription = undefined;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["DeviceSessionRefresher_exports", "__export", "DeviceSessionRefresher", "__toCommonJS", "import_inversify", "import_rxjs", "import_CommandResult", "import_GetAppAndVersionCommand", "import_GetOsVersionCommand", "import_DeviceModel", "import_DeviceStatus", "import_DeviceSessionState", "DeviceSessionRefresher", "refreshInterval", "deviceStatus", "sendApduFn", "updateStateFn", "deviceModelId", "logger", "refreshObservable", "parsedResponse", "state", "parentObservable", "rawApdu", "resp", "error", "data", "nanoSRefreshObservable", "timeoutObservable", "_", "__decorateClass"]
4
+ "sourcesContent": ["import { type Subscription, timer } from \"rxjs\";\n\nimport { DeviceModelId } from \"@api/device/DeviceModel\";\nimport { type TransportConnectedDevice } from \"@api/transport/model/TransportConnectedDevice\";\nimport { type LoggerPublisherService } from \"@api/types\";\nimport {\n DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL,\n DEVICE_SESSION_REFRESHER_POLLING_INTERVAL,\n} from \"@internal/device-session/data/DeviceSessionRefresherConst\";\nimport {\n type DeviceSessionEventDispatcher,\n SessionEvents,\n} from \"@internal/device-session/model/DeviceSessionEventDispatcher\";\n\nexport interface DeviceSessionRefresherOptions {\n isRefresherDisabled: boolean;\n pollingInterval?: number;\n}\n\nexport class DeviceSessionRefresher {\n private _refresherSubscription!: Subscription | undefined;\n private _refresherOptions: DeviceSessionRefresherOptions;\n private readonly _logger: LoggerPublisherService;\n private _connectedDeviceID: DeviceModelId;\n\n constructor(\n loggerModuleFactory: (tag: string) => LoggerPublisherService,\n refresherOptions: DeviceSessionRefresherOptions,\n private _sessionEventDispatcher: DeviceSessionEventDispatcher,\n connectedDevice: TransportConnectedDevice,\n ) {\n this._refresherOptions = refresherOptions;\n this._logger = loggerModuleFactory(\"device-session-refresher\");\n this._connectedDeviceID = connectedDevice.deviceModel.id;\n }\n\n public startRefresher(): void {\n if (this._refresherOptions.isRefresherDisabled) return;\n\n const pollingInterval =\n this.getValidPollingInterval(this._refresherOptions, this._logger) * 2;\n\n this._refresherSubscription = timer(0, pollingInterval).subscribe(() => {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.REFRESH_NEEDED,\n });\n });\n }\n\n public stopRefresher(): void {\n if (this._refresherSubscription) {\n this._refresherSubscription.unsubscribe();\n this._refresherSubscription = undefined;\n this._logger.info(\"Refresher stopped.\");\n }\n }\n\n public restartRefresher(): void {\n this.stopRefresher();\n this.startRefresher();\n this._logger.info(\"Refresher restarted.\");\n }\n\n public destroy(): void {\n this.stopRefresher();\n }\n\n private getValidPollingInterval = (\n refresherOptions: DeviceSessionRefresherOptions,\n logger: LoggerPublisherService,\n ): number => {\n const { pollingInterval } = refresherOptions;\n switch (this._connectedDeviceID) {\n case DeviceModelId.NANO_S: {\n const defaultNanoPollingInterval =\n DEVICE_SESSION_REFRESHER_POLLING_INTERVAL * 2;\n if (\n pollingInterval !== undefined &&\n pollingInterval < defaultNanoPollingInterval\n ) {\n logger.warn(\n `Polling interval of ${pollingInterval} is too low, setting to minimum as ${defaultNanoPollingInterval}`,\n );\n return defaultNanoPollingInterval;\n }\n return pollingInterval ?? defaultNanoPollingInterval;\n }\n default:\n if (\n pollingInterval !== undefined &&\n pollingInterval < DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL\n ) {\n logger.warn(\n `Polling interval of ${pollingInterval} is too low, setting to minimum as ${DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL}`,\n );\n return DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL;\n }\n\n return pollingInterval ?? DEVICE_SESSION_REFRESHER_POLLING_INTERVAL;\n }\n };\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAyC,gBAEzCC,EAA8B,mCAG9BC,EAGO,qEACPC,EAGO,uEAOA,MAAML,CAAuB,CAMlC,YACEM,EACAC,EACQC,EACRC,EACA,CAFQ,6BAAAD,EAGR,KAAK,kBAAoBD,EACzB,KAAK,QAAUD,EAAoB,0BAA0B,EAC7D,KAAK,mBAAqBG,EAAgB,YAAY,EACxD,CAdQ,uBACA,kBACS,QACT,mBAaD,gBAAuB,CAC5B,GAAI,KAAK,kBAAkB,oBAAqB,OAEhD,MAAMC,EACJ,KAAK,wBAAwB,KAAK,kBAAmB,KAAK,OAAO,EAAI,EAEvE,KAAK,0BAAyB,SAAM,EAAGA,CAAe,EAAE,UAAU,IAAM,CACtE,KAAK,wBAAwB,SAAS,CACpC,UAAW,gBAAc,cAC3B,CAAC,CACH,CAAC,CACH,CAEO,eAAsB,CACvB,KAAK,yBACP,KAAK,uBAAuB,YAAY,EACxC,KAAK,uBAAyB,OAC9B,KAAK,QAAQ,KAAK,oBAAoB,EAE1C,CAEO,kBAAyB,CAC9B,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,QAAQ,KAAK,sBAAsB,CAC1C,CAEO,SAAgB,CACrB,KAAK,cAAc,CACrB,CAEQ,wBAA0B,CAChCH,EACAI,IACW,CACX,KAAM,CAAE,gBAAAD,CAAgB,EAAIH,EAC5B,OAAQ,KAAK,mBAAoB,CAC/B,KAAK,gBAAc,OAAQ,CACzB,MAAMK,EACJ,4CAA4C,EAC9C,OACEF,IAAoB,QACpBA,EAAkBE,GAElBD,EAAO,KACL,uBAAuBD,CAAe,sCAAsCE,CAA0B,EACxG,EACOA,GAEFF,GAAmBE,CAC5B,CACA,QACE,OACEF,IAAoB,QACpBA,EAAkB,qDAElBC,EAAO,KACL,uBAAuBD,CAAe,sCAAsC,mDAAiD,EAC/H,EACO,qDAGFA,GAAmB,2CAC9B,CACF,CACF",
6
+ "names": ["DeviceSessionRefresher_exports", "__export", "DeviceSessionRefresher", "__toCommonJS", "import_rxjs", "import_DeviceModel", "import_DeviceSessionRefresherConst", "import_DeviceSessionEventDispatcher", "loggerModuleFactory", "refresherOptions", "_sessionEventDispatcher", "connectedDevice", "pollingInterval", "logger", "defaultNanoPollingInterval"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var r=require("purify-ts"),m=require("../../../api/command/model/CommandResult"),p=require("../../../api/command/os/GetAppAndVersionCommand"),l=require("../../../api/command/os/GetOsVersionCommand"),n=require("../../../api/device/DeviceModel"),a=require("../../../api/device/DeviceStatus"),s=require("../../device-session/data/DeviceSessionRefresherConst"),u=require("../../logger-publisher/service/DefaultLoggerPublisherService"),c=require("./DeviceSessionRefresher");describe("DeviceSessionRefresher",()=>{const t=vi.fn(),o=vi.fn();let e,d;beforeEach(()=>{vi.clearAllMocks(),vi.useFakeTimers(),vi.spyOn(p.GetAppAndVersionCommand.prototype,"parseResponse").mockReturnValueOnce((0,m.CommandResultFactory)({data:{name:"testAppName"}})),vi.spyOn(l.GetOsVersionCommand.prototype,"parseResponse").mockReturnValueOnce((0,m.CommandResultFactory)({data:{}})),t.mockResolvedValue((0,r.Right)({})),o.mockImplementation(()=>{}),d=new u.DefaultLoggerPublisherService([],"DeviceSessionRefresherTest")}),describe("With a modern device",()=>{beforeEach(()=>{const i=Object.values(n.DeviceModelId).filter(v=>v!==n.DeviceModelId.NANO_S);e=new c.DeviceSessionRefresher({refreshInterval:s.DEVICE_SESSION_REFRESH_INTERVAL,deviceStatus:a.DeviceStatus.CONNECTED,sendApduFn:t,updateStateFn:o,deviceModelId:i[Math.floor(Math.random()*i.length)]},d),e.start()}),afterEach(()=>{e.stop()}),it("should poll by calling sendApduFn 3 times",()=>{vi.advanceTimersByTime(s.DEVICE_SESSION_REFRESH_INTERVAL*2),expect(t).toHaveBeenCalledTimes(3)}),it("should not poll when device is busy",()=>{e.setDeviceStatus(a.DeviceStatus.BUSY),vi.advanceTimersByTime(s.DEVICE_SESSION_REFRESH_INTERVAL),expect(t).not.toHaveBeenCalled()}),it("should not poll when device is disconnected",()=>{e.setDeviceStatus(a.DeviceStatus.NOT_CONNECTED),vi.advanceTimersByTime(s.DEVICE_SESSION_REFRESH_INTERVAL),expect(t).not.toHaveBeenCalled()}),it("should update device session state by calling updateStateFn",async()=>{vi.advanceTimersByTime(s.DEVICE_SESSION_REFRESH_INTERVAL),await Promise.resolve(),expect(t).toHaveBeenCalled(),await Promise.resolve(),expect(o).toHaveBeenCalled()}),it("should not update device session state with failed polling response",async()=>{t.mockResolvedValue((0,r.Left)("error")),vi.advanceTimersByTime(s.DEVICE_SESSION_REFRESH_INTERVAL),await Promise.resolve(),expect(t).toHaveBeenCalled(),await Promise.resolve(),expect(o).not.toHaveBeenCalled()}),it("should stop the refresher when device is disconnected",()=>{const i=vi.spyOn(e,"stop");e.setDeviceStatus(a.DeviceStatus.NOT_CONNECTED),expect(i).toHaveBeenCalledTimes(1)}),it("should not throw error if stop is called on a stopped refresher",()=>{e.stop(),expect(()=>e.stop()).not.toThrow()}),it("should not throw error if start is called on a started refresher",()=>{e.start(),expect(()=>e.start()).not.toThrow()})}),describe("With a NanoS device",()=>{afterEach(()=>{e.stop()}),it("should call sendApduFn 3 times and update state 2 time for a single interval",async()=>{e=new c.DeviceSessionRefresher({refreshInterval:s.DEVICE_SESSION_REFRESH_INTERVAL,deviceStatus:a.DeviceStatus.CONNECTED,sendApduFn:t,updateStateFn:o,deviceModelId:n.DeviceModelId.NANO_S},d),e.start(),vi.advanceTimersByTime(s.DEVICE_SESSION_REFRESH_INTERVAL*2+100),await Promise.resolve(),expect(t).toHaveBeenNthCalledWith(1,new p.GetAppAndVersionCommand().getApdu().getRawApdu()),await Promise.resolve(),expect(t).toHaveBeenLastCalledWith(new l.GetOsVersionCommand().getApdu().getRawApdu()),await Promise.resolve(),expect(t).toHaveBeenCalledTimes(3),await Promise.resolve(),expect(o).toHaveBeenCalledTimes(2)}),it("should set device locked when get os version times out",async()=>{t.mockImplementation(i=>i.toString()===new l.GetOsVersionCommand().getApdu().getRawApdu().toString()?new Promise(v=>setTimeout(()=>v((0,r.Left)("timeout")),s.DEVICE_SESSION_REFRESH_INTERVAL*10)):Promise.resolve((0,r.Right)({}))),o.mockImplementation(i=>{e.setDeviceStatus(i().deviceStatus)}),e=new c.DeviceSessionRefresher({refreshInterval:s.DEVICE_SESSION_REFRESH_INTERVAL,deviceStatus:a.DeviceStatus.CONNECTED,sendApduFn:t,updateStateFn:o,deviceModelId:n.DeviceModelId.NANO_S},d),e.start(),vi.spyOn(e,"setDeviceStatus"),vi.advanceTimersByTime(s.DEVICE_SESSION_REFRESH_INTERVAL*5+100),await Promise.resolve(),expect(t).toHaveBeenNthCalledWith(1,new p.GetAppAndVersionCommand().getApdu().getRawApdu()),await Promise.resolve(),expect(e.setDeviceStatus).toHaveBeenCalledWith(a.DeviceStatus.LOCKED)})})});
1
+ "use strict";var d=require("rxjs"),e=require("vitest"),v=require("../../../api/device/DeviceModel"),c=require("../../device-session/data/DeviceSessionRefresherConst"),h=require("../../device-session/model/DeviceSessionEventDispatcher"),n=require("./DeviceSessionRefresher");(0,e.describe)("DeviceSessionRefresher",()=>{let p,r,o;const l={deviceModel:{id:v.DeviceModelId.FLEX}},m={deviceModel:{id:v.DeviceModelId.NANO_S}},i=e.vi.fn(()=>o);let s;(0,e.beforeEach)(()=>{e.vi.useFakeTimers(),p=new d.Subject,r={listen:()=>p.asObservable(),dispatch:e.vi.fn()},o={info:e.vi.fn(),warn:e.vi.fn(),error:e.vi.fn(),debug:e.vi.fn(),subscribers:[]}}),(0,e.afterEach)(()=>{s?.destroy(),e.vi.useRealTimers(),e.vi.restoreAllMocks()}),(0,e.it)("should not start refresher if disabled",()=>{const t={isRefresherDisabled:!0,pollingInterval:1e3};s=new n.DeviceSessionRefresher(i,t,r,l),s.startRefresher(),e.vi.advanceTimersByTime(2e3),(0,e.expect)(r.dispatch).not.toHaveBeenCalled()}),(0,e.it)("should warn and use minimum polling interval for default device when provided interval is too low",()=>{const t=c.DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL-100,a={isRefresherDisabled:!1,pollingInterval:t};s=new n.DeviceSessionRefresher(i,a,r,l),s.startRefresher();const f=`Polling interval of ${t} is too low, setting to minimum as ${c.DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL}`;(0,e.expect)(o.warn).toHaveBeenCalledWith(f)}),(0,e.it)("should warn and use minimum polling interval for NANO_S device when provided interval is too low",()=>{const t=c.DEVICE_SESSION_REFRESHER_POLLING_INTERVAL*2,a=t-100,f={isRefresherDisabled:!1,pollingInterval:a};s=new n.DeviceSessionRefresher(i,f,r,m),s.startRefresher();const R=`Polling interval of ${a} is too low, setting to minimum as ${t}`;(0,e.expect)(o.warn).toHaveBeenCalledWith(R)}),(0,e.it)("should not warn when provided polling interval is valid for default device",()=>{const a={isRefresherDisabled:!1,pollingInterval:c.DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL+100};s=new n.DeviceSessionRefresher(i,a,r,l),s.startRefresher(),(0,e.expect)(o.warn).not.toHaveBeenCalled()}),(0,e.it)("should dispatch refresh event on timer ticks",()=>{const t=c.DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL+100,a={isRefresherDisabled:!1,pollingInterval:t};s=new n.DeviceSessionRefresher(i,a,r,l),s.startRefresher();const f=t*2;e.vi.advanceTimersByTime(f*3),(0,e.expect)(r.dispatch.mock.calls.length).toBe(4),(0,e.expect)(r.dispatch.mock.calls[0][0]).toEqual({eventName:h.SessionEvents.REFRESH_NEEDED})}),(0,e.it)("should stop refresher",()=>{const t={isRefresherDisabled:!1,pollingInterval:1e3};s=new n.DeviceSessionRefresher(i,t,r,l),s.startRefresher(),r.dispatch.mockClear(),s.stopRefresher(),e.vi.advanceTimersByTime(2e3),(0,e.expect)(r.dispatch).not.toHaveBeenCalled(),(0,e.expect)(o.info).toHaveBeenCalledWith("Refresher stopped.")}),(0,e.it)("should restart refresher",()=>{const t={isRefresherDisabled:!1,pollingInterval:1e3};s=new n.DeviceSessionRefresher(i,t,r,l),s.startRefresher(),r.dispatch.mockClear(),e.vi.clearAllTimers(),s.restartRefresher(),(0,e.expect)(o.info).toHaveBeenCalledWith("Refresher stopped."),(0,e.expect)(o.info).toHaveBeenCalledWith("Refresher restarted."),e.vi.advanceTimersByTime(2e3),(0,e.expect)(r.dispatch.mock.calls.length).toBeGreaterThan(0)}),(0,e.it)("should destroy refresher",()=>{const t={isRefresherDisabled:!1,pollingInterval:1e3};s=new n.DeviceSessionRefresher(i,t,r,l),s.startRefresher(),s.destroy(),e.vi.advanceTimersByTime(2e3),(0,e.expect)(r.dispatch).not.toHaveBeenCalled()})});
2
2
  //# sourceMappingURL=DeviceSessionRefresher.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/device-session/model/DeviceSessionRefresher.test.ts"],
4
- "sourcesContent": ["import { Left, Right } from \"purify-ts\";\n\nimport { type Apdu } from \"@api/apdu/model/Apdu\";\nimport { CommandResultFactory } from \"@api/command/model/CommandResult\";\nimport {\n GetAppAndVersionCommand,\n type GetAppAndVersionResponse,\n} from \"@api/command/os/GetAppAndVersionCommand\";\nimport {\n GetOsVersionCommand,\n type GetOsVersionResponse,\n} from \"@api/command/os/GetOsVersionCommand\";\nimport { DeviceModelId } from \"@api/device/DeviceModel\";\nimport { DeviceStatus } from \"@api/device/DeviceStatus\";\nimport { type ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { type DeviceSessionState } from \"@api/device-session/DeviceSessionState\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { DEVICE_SESSION_REFRESH_INTERVAL } from \"@internal/device-session/data/DeviceSessionRefresherConst\";\nimport { DefaultLoggerPublisherService } from \"@internal/logger-publisher/service/DefaultLoggerPublisherService\";\n\nimport { DeviceSessionRefresher } from \"./DeviceSessionRefresher\";\n\ndescribe(\"DeviceSessionRefresher\", () => {\n const mockSendApduFn = vi.fn();\n const mockUpdateStateFn = vi.fn();\n\n let deviceSessionRefresher: DeviceSessionRefresher;\n let logger: LoggerPublisherService;\n\n beforeEach(() => {\n vi.clearAllMocks();\n vi.useFakeTimers();\n vi.spyOn(\n GetAppAndVersionCommand.prototype,\n \"parseResponse\",\n ).mockReturnValueOnce(\n CommandResultFactory({\n data: {\n name: \"testAppName\",\n } as GetAppAndVersionResponse,\n }),\n );\n vi.spyOn(\n GetOsVersionCommand.prototype,\n \"parseResponse\",\n ).mockReturnValueOnce(\n CommandResultFactory({\n data: {} as GetOsVersionResponse,\n }),\n );\n mockSendApduFn.mockResolvedValue(Right({} as ApduResponse));\n mockUpdateStateFn.mockImplementation(() => undefined);\n logger = new DefaultLoggerPublisherService(\n [],\n \"DeviceSessionRefresherTest\",\n );\n });\n\n describe(\"With a modern device\", () => {\n beforeEach(() => {\n const deviceIds = Object.values(DeviceModelId).filter(\n (id) => id !== DeviceModelId.NANO_S,\n );\n deviceSessionRefresher = new DeviceSessionRefresher(\n {\n refreshInterval: DEVICE_SESSION_REFRESH_INTERVAL,\n deviceStatus: DeviceStatus.CONNECTED,\n sendApduFn: mockSendApduFn,\n updateStateFn: mockUpdateStateFn,\n deviceModelId:\n deviceIds[Math.floor(Math.random() * deviceIds.length)]!,\n },\n logger,\n );\n deviceSessionRefresher.start();\n });\n\n afterEach(() => {\n deviceSessionRefresher.stop();\n });\n\n it(\"should poll by calling sendApduFn 3 times\", () => {\n vi.advanceTimersByTime(DEVICE_SESSION_REFRESH_INTERVAL * 2);\n expect(mockSendApduFn).toHaveBeenCalledTimes(3);\n });\n\n it(\"should not poll when device is busy\", () => {\n deviceSessionRefresher.setDeviceStatus(DeviceStatus.BUSY);\n\n vi.advanceTimersByTime(DEVICE_SESSION_REFRESH_INTERVAL);\n\n expect(mockSendApduFn).not.toHaveBeenCalled();\n });\n\n it(\"should not poll when device is disconnected\", () => {\n deviceSessionRefresher.setDeviceStatus(DeviceStatus.NOT_CONNECTED);\n\n vi.advanceTimersByTime(DEVICE_SESSION_REFRESH_INTERVAL);\n\n expect(mockSendApduFn).not.toHaveBeenCalled();\n });\n\n it(\"should update device session state by calling updateStateFn\", async () => {\n vi.advanceTimersByTime(DEVICE_SESSION_REFRESH_INTERVAL);\n\n await Promise.resolve();\n expect(mockSendApduFn).toHaveBeenCalled();\n await Promise.resolve();\n expect(mockUpdateStateFn).toHaveBeenCalled();\n });\n\n it(\"should not update device session state with failed polling response\", async () => {\n mockSendApduFn.mockResolvedValue(Left(\"error\"));\n vi.advanceTimersByTime(DEVICE_SESSION_REFRESH_INTERVAL);\n\n await Promise.resolve();\n expect(mockSendApduFn).toHaveBeenCalled();\n await Promise.resolve();\n expect(mockUpdateStateFn).not.toHaveBeenCalled();\n });\n\n it(\"should stop the refresher when device is disconnected\", () => {\n const spy = vi.spyOn(deviceSessionRefresher, \"stop\");\n deviceSessionRefresher.setDeviceStatus(DeviceStatus.NOT_CONNECTED);\n expect(spy).toHaveBeenCalledTimes(1);\n });\n\n it(\"should not throw error if stop is called on a stopped refresher\", () => {\n deviceSessionRefresher.stop();\n expect(() => deviceSessionRefresher.stop()).not.toThrow();\n });\n\n it(\"should not throw error if start is called on a started refresher\", () => {\n deviceSessionRefresher.start();\n expect(() => deviceSessionRefresher.start()).not.toThrow();\n });\n });\n\n describe(\"With a NanoS device\", () => {\n afterEach(() => {\n deviceSessionRefresher.stop();\n });\n\n it(\"should call sendApduFn 3 times and update state 2 time for a single interval\", async () => {\n deviceSessionRefresher = new DeviceSessionRefresher(\n {\n refreshInterval: DEVICE_SESSION_REFRESH_INTERVAL,\n deviceStatus: DeviceStatus.CONNECTED,\n sendApduFn: mockSendApduFn,\n updateStateFn: mockUpdateStateFn,\n deviceModelId: DeviceModelId.NANO_S,\n },\n logger,\n );\n deviceSessionRefresher.start();\n vi.advanceTimersByTime(DEVICE_SESSION_REFRESH_INTERVAL * 2 + 100);\n\n await Promise.resolve();\n expect(mockSendApduFn).toHaveBeenNthCalledWith(\n 1,\n new GetAppAndVersionCommand().getApdu().getRawApdu(),\n );\n await Promise.resolve();\n expect(mockSendApduFn).toHaveBeenLastCalledWith(\n new GetOsVersionCommand().getApdu().getRawApdu(),\n );\n await Promise.resolve();\n expect(mockSendApduFn).toHaveBeenCalledTimes(3);\n await Promise.resolve();\n expect(mockUpdateStateFn).toHaveBeenCalledTimes(2);\n });\n\n it(\"should set device locked when get os version times out\", async () => {\n mockSendApduFn.mockImplementation((apdu: Apdu) => {\n if (\n apdu.toString() ===\n new GetOsVersionCommand().getApdu().getRawApdu().toString()\n ) {\n return new Promise((resolve) =>\n setTimeout(\n () => resolve(Left(\"timeout\")),\n DEVICE_SESSION_REFRESH_INTERVAL * 10,\n ),\n );\n }\n return Promise.resolve(Right({}));\n });\n mockUpdateStateFn.mockImplementation(\n (getState: () => DeviceSessionState) => {\n deviceSessionRefresher.setDeviceStatus(getState().deviceStatus);\n },\n );\n deviceSessionRefresher = new DeviceSessionRefresher(\n {\n refreshInterval: DEVICE_SESSION_REFRESH_INTERVAL,\n deviceStatus: DeviceStatus.CONNECTED,\n sendApduFn: mockSendApduFn,\n updateStateFn: mockUpdateStateFn,\n deviceModelId: DeviceModelId.NANO_S,\n },\n logger,\n );\n deviceSessionRefresher.start();\n vi.spyOn(deviceSessionRefresher, \"setDeviceStatus\");\n vi.advanceTimersByTime(DEVICE_SESSION_REFRESH_INTERVAL * 5 + 100);\n await Promise.resolve();\n expect(mockSendApduFn).toHaveBeenNthCalledWith(\n 1,\n new GetAppAndVersionCommand().getApdu().getRawApdu(),\n );\n await Promise.resolve();\n expect(deviceSessionRefresher.setDeviceStatus).toHaveBeenCalledWith(\n DeviceStatus.LOCKED,\n );\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_purify_ts", "import_CommandResult", "import_GetAppAndVersionCommand", "import_GetOsVersionCommand", "import_DeviceModel", "import_DeviceStatus", "import_DeviceSessionRefresherConst", "import_DefaultLoggerPublisherService", "import_DeviceSessionRefresher", "mockSendApduFn", "mockUpdateStateFn", "deviceSessionRefresher", "logger", "deviceIds", "id", "spy", "apdu", "resolve", "getState"]
4
+ "sourcesContent": ["import { Subject } from \"rxjs\";\nimport { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { DeviceModelId } from \"@api/device/DeviceModel\";\nimport { type TransportConnectedDevice } from \"@api/transport/model/TransportConnectedDevice\";\nimport type { LoggerPublisherService } from \"@api/types\";\nimport {\n DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL,\n DEVICE_SESSION_REFRESHER_POLLING_INTERVAL,\n} from \"@internal/device-session/data/DeviceSessionRefresherConst\";\nimport type {\n DeviceSessionEventDispatcher,\n NewEvent,\n} from \"@internal/device-session/model/DeviceSessionEventDispatcher\";\nimport { SessionEvents } from \"@internal/device-session/model/DeviceSessionEventDispatcher\";\n\nimport {\n DeviceSessionRefresher,\n type DeviceSessionRefresherOptions,\n} from \"./DeviceSessionRefresher\";\n\ndescribe(\"DeviceSessionRefresher\", () => {\n let subject: Subject<NewEvent>;\n let mockSessionEventDispatcher: DeviceSessionEventDispatcher;\n let mockLogger: LoggerPublisherService & {\n info: ReturnType<typeof vi.fn>;\n warn: ReturnType<typeof vi.fn>;\n error: ReturnType<typeof vi.fn>;\n debug: ReturnType<typeof vi.fn>;\n subscribers?: unknown[];\n };\n\n const stubDefaultDevice = {\n deviceModel: {\n id: DeviceModelId.FLEX,\n },\n } as TransportConnectedDevice;\n\n const stubNanoSDevice = {\n deviceModel: {\n id: DeviceModelId.NANO_S,\n },\n } as TransportConnectedDevice;\n\n const mockedLoggerModuleFactory = vi.fn(() => mockLogger);\n let refresher: DeviceSessionRefresher;\n\n beforeEach(() => {\n vi.useFakeTimers();\n subject = new Subject<NewEvent>();\n mockSessionEventDispatcher = {\n listen: () => subject.asObservable(),\n dispatch: vi.fn(),\n } as unknown as DeviceSessionEventDispatcher;\n mockLogger = {\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n debug: vi.fn(),\n subscribers: [],\n };\n });\n\n afterEach(() => {\n refresher?.destroy();\n vi.useRealTimers();\n vi.restoreAllMocks();\n });\n\n it(\"should not start refresher if disabled\", () => {\n const options: DeviceSessionRefresherOptions = {\n isRefresherDisabled: true,\n pollingInterval: 1000,\n };\n\n refresher = new DeviceSessionRefresher(\n mockedLoggerModuleFactory,\n options,\n mockSessionEventDispatcher,\n stubDefaultDevice,\n );\n refresher.startRefresher();\n vi.advanceTimersByTime(2000);\n\n expect(mockSessionEventDispatcher.dispatch).not.toHaveBeenCalled();\n });\n\n it(\"should warn and use minimum polling interval for default device when provided interval is too low\", () => {\n const lowInterval = DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL - 100;\n const options: DeviceSessionRefresherOptions = {\n isRefresherDisabled: false,\n pollingInterval: lowInterval,\n };\n\n refresher = new DeviceSessionRefresher(\n mockedLoggerModuleFactory,\n options,\n mockSessionEventDispatcher,\n stubDefaultDevice,\n );\n refresher.startRefresher();\n\n const expectedMessage = `Polling interval of ${lowInterval} is too low, setting to minimum as ${DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL}`;\n expect(mockLogger.warn).toHaveBeenCalledWith(expectedMessage);\n });\n\n it(\"should warn and use minimum polling interval for NANO_S device when provided interval is too low\", () => {\n const defaultNanoPollingInterval =\n DEVICE_SESSION_REFRESHER_POLLING_INTERVAL * 2;\n const lowInterval = defaultNanoPollingInterval - 100;\n const options: DeviceSessionRefresherOptions = {\n isRefresherDisabled: false,\n pollingInterval: lowInterval,\n };\n\n refresher = new DeviceSessionRefresher(\n mockedLoggerModuleFactory,\n options,\n mockSessionEventDispatcher,\n stubNanoSDevice,\n );\n refresher.startRefresher();\n\n const expectedMessage = `Polling interval of ${lowInterval} is too low, setting to minimum as ${defaultNanoPollingInterval}`;\n expect(mockLogger.warn).toHaveBeenCalledWith(expectedMessage);\n });\n\n it(\"should not warn when provided polling interval is valid for default device\", () => {\n const validInterval =\n DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL + 100;\n const options: DeviceSessionRefresherOptions = {\n isRefresherDisabled: false,\n pollingInterval: validInterval,\n };\n\n refresher = new DeviceSessionRefresher(\n mockedLoggerModuleFactory,\n options,\n mockSessionEventDispatcher,\n stubDefaultDevice,\n );\n refresher.startRefresher();\n\n expect(mockLogger.warn).not.toHaveBeenCalled();\n });\n\n it(\"should dispatch refresh event on timer ticks\", () => {\n const validInterval =\n DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL + 100;\n const options: DeviceSessionRefresherOptions = {\n isRefresherDisabled: false,\n pollingInterval: validInterval,\n };\n\n refresher = new DeviceSessionRefresher(\n mockedLoggerModuleFactory,\n options,\n mockSessionEventDispatcher,\n stubDefaultDevice,\n );\n refresher.startRefresher();\n\n const timerInterval = validInterval * 2;\n\n vi.advanceTimersByTime(timerInterval * 3);\n\n expect(\n (mockSessionEventDispatcher.dispatch as ReturnType<typeof vi.fn>).mock\n .calls.length,\n ).toBe(4);\n expect(\n (mockSessionEventDispatcher.dispatch as ReturnType<typeof vi.fn>).mock\n .calls[0]![0],\n ).toEqual({\n eventName: SessionEvents.REFRESH_NEEDED,\n });\n });\n\n it(\"should stop refresher\", () => {\n const options: DeviceSessionRefresherOptions = {\n isRefresherDisabled: false,\n pollingInterval: 1000,\n };\n refresher = new DeviceSessionRefresher(\n mockedLoggerModuleFactory,\n options,\n mockSessionEventDispatcher,\n stubDefaultDevice,\n );\n refresher.startRefresher();\n (\n mockSessionEventDispatcher.dispatch as ReturnType<typeof vi.fn>\n ).mockClear();\n\n refresher.stopRefresher();\n vi.advanceTimersByTime(2000);\n\n expect(mockSessionEventDispatcher.dispatch).not.toHaveBeenCalled();\n expect(mockLogger.info).toHaveBeenCalledWith(\"Refresher stopped.\");\n });\n\n it(\"should restart refresher\", () => {\n const options: DeviceSessionRefresherOptions = {\n isRefresherDisabled: false,\n pollingInterval: 1000,\n };\n refresher = new DeviceSessionRefresher(\n mockedLoggerModuleFactory,\n options,\n mockSessionEventDispatcher,\n stubDefaultDevice,\n );\n refresher.startRefresher();\n (\n mockSessionEventDispatcher.dispatch as ReturnType<typeof vi.fn>\n ).mockClear();\n vi.clearAllTimers();\n\n refresher.restartRefresher();\n expect(mockLogger.info).toHaveBeenCalledWith(\"Refresher stopped.\");\n expect(mockLogger.info).toHaveBeenCalledWith(\"Refresher restarted.\");\n\n vi.advanceTimersByTime(2000);\n expect(\n (mockSessionEventDispatcher.dispatch as ReturnType<typeof vi.fn>).mock\n .calls.length,\n ).toBeGreaterThan(0);\n });\n\n it(\"should destroy refresher\", () => {\n const options: DeviceSessionRefresherOptions = {\n isRefresherDisabled: false,\n pollingInterval: 1000,\n };\n refresher = new DeviceSessionRefresher(\n mockedLoggerModuleFactory,\n options,\n mockSessionEventDispatcher,\n stubDefaultDevice,\n );\n refresher.startRefresher();\n\n refresher.destroy();\n vi.advanceTimersByTime(2000);\n\n expect(mockSessionEventDispatcher.dispatch).not.toHaveBeenCalled();\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_rxjs", "import_vitest", "import_DeviceModel", "import_DeviceSessionRefresherConst", "import_DeviceSessionEventDispatcher", "import_DeviceSessionRefresher", "subject", "mockSessionEventDispatcher", "mockLogger", "stubDefaultDevice", "stubNanoSDevice", "mockedLoggerModuleFactory", "refresher", "options", "lowInterval", "expectedMessage", "defaultNanoPollingInterval", "validInterval", "timerInterval"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ "use strict";var c=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var D=(i,e)=>{for(var s in e)c(i,s,{get:e[s],enumerable:!0})},d=(i,e,s,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of p(e))!u.call(i,n)&&n!==s&&c(i,n,{get:()=>e[n],enumerable:!(r=S(e,n))||r.enumerable});return i};var l=i=>d(c({},"__esModule",{value:!0}),i);var h={};D(h,{DeviceSessionStateHandler:()=>E});module.exports=l(h);var t=require("../../../api/index"),a=require("../../device-session/model/DeviceSessionEventDispatcher");class E{constructor(e,s,r,n,o){this._sessionEventDispatcher=s;this._connectedDevice=r;this._deviceState=n;this.setDeviceSessionState=o;this._subscription=this._sessionEventDispatcher.listen().subscribe(v=>this.mapEventAction(v)),this._logger=e("device-session-state-handler")}_subscription;_logger;_updateDeviceState(e){const s=this._parseDeviceStatus(e);if(s){const{sessionStateType:r,deviceStatus:n,currentApp:o}=s;this.setDeviceSessionState({sessionStateType:r,deviceStatus:n,deviceModelId:this._connectedDevice.deviceModel.id,currentApp:o,installedApps:[],isSecureConnectionAllowed:!1})}}mapEventAction=e=>{switch(e.eventName){case a.SessionEvents.COMMAND_SUCCEEDED:return this._updateDeviceState(e.eventData);case a.SessionEvents.DEVICE_STATE_UPDATE_BUSY:return this.setDeviceSessionState({...this._deviceState.getValue(),deviceStatus:t.DeviceStatus.BUSY});case a.SessionEvents.DEVICE_STATE_UPDATE_LOCKED:return this.setDeviceSessionState({...this._deviceState.getValue(),deviceStatus:t.DeviceStatus.LOCKED});case a.SessionEvents.DEVICE_STATE_UPDATE_CONNECTED:return this.setDeviceSessionState({...this._deviceState.getValue(),deviceStatus:t.DeviceStatus.CONNECTED});default:return null}};_parseDeviceStatus(e){return(0,t.isSuccessCommandResult)(e)?{sessionStateType:t.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:t.DeviceStatus.CONNECTED,currentApp:{name:e.data.name,version:e.data.version}}:(this._logger.error("Error while parsing APDU response",{data:{parsedResponse:e}}),null)}unsubscribe(){this._subscription.unsubscribe()}}0&&(module.exports={DeviceSessionStateHandler});
2
+ //# sourceMappingURL=DeviceSessionStateHandler.js.map