filemail-sdk 10.4.0 → 10.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/LICENSE +10 -10
  2. package/dist/src/autoDownloader/autoDownloader.js.map +1 -1
  3. package/dist/src/autoDownloader/autoDownloaderDestroyer.js.map +1 -1
  4. package/dist/src/autoDownloader/autoDownloaderError.js.map +1 -1
  5. package/dist/src/autoDownloader/autoDownloaderEvent.js.map +1 -1
  6. package/dist/src/autoDownloader/autoDownloaderOptions.js.map +1 -1
  7. package/dist/src/autoDownloader/autoDownloaderStateSerializer.js.map +1 -1
  8. package/dist/src/autoDownloader/eventArgs/autoDownloadEventArgs.js.map +1 -1
  9. package/dist/src/autoDownloader/eventArgs/autoDownloadFailedEventArgs.js.map +1 -1
  10. package/dist/src/autoDownloader/eventArgs/autoDownloadProgressedEventArgs.js.map +1 -1
  11. package/dist/src/autoDownloader/eventArgs/autoDownloadStartedEventArgs.js.map +1 -1
  12. package/dist/src/autoDownloader/eventArgs/autoDownloadStartingFailedEventArgs.js.map +1 -1
  13. package/dist/src/autoDownloader/eventArgs/autoDownloadUnhealthyEventArgs.js.map +1 -1
  14. package/dist/src/autoDownloader/eventArgs/checkingForNewTransfersStartedEventArgs.js.map +1 -1
  15. package/dist/src/autoDownloader/eventArgs/newTransfersCheckCompletedEventArgs.js.map +1 -1
  16. package/dist/src/autoDownloader/factory/nodeAutoDownloaderFactory.d.ts.map +1 -1
  17. package/dist/src/autoDownloader/factory/nodeAutoDownloaderFactory.js +1 -0
  18. package/dist/src/autoDownloader/factory/nodeAutoDownloaderFactory.js.map +1 -1
  19. package/dist/src/autoDownloader/factory/nodeAutoDownloaderFactoryOptions.d.ts +1 -0
  20. package/dist/src/autoDownloader/factory/nodeAutoDownloaderFactoryOptions.d.ts.map +1 -1
  21. package/dist/src/autoDownloader/factory/nodeAutoDownloaderFactoryOptions.js.map +1 -1
  22. package/dist/src/autoDownloader/newInboxTransfersRetriever/newInboxTransfer.js.map +1 -1
  23. package/dist/src/autoDownloader/newInboxTransfersRetriever/newInboxTransfersRetriever.js.map +1 -1
  24. package/dist/src/autoDownloader/node/nodeAutoDownloaderStateSerializer.js.map +1 -1
  25. package/dist/src/autoDownloader/node/nodeTransferDownloaderFactory.js.map +1 -1
  26. package/dist/src/autoDownloader/state/autoDownloaderRecoverableState.js.map +1 -1
  27. package/dist/src/autoDownloader/state/autoDownloaderState.js.map +1 -1
  28. package/dist/src/autoDownloader/state/autoDownloaderStateRecoverableTransfer.js.map +1 -1
  29. package/dist/src/autoDownloader/state/autoDownloaderStateRunningTransfer.js.map +1 -1
  30. package/dist/src/autoDownloader/state/autoDownloaderStateSnapshot.js.map +1 -1
  31. package/dist/src/autoDownloader/transferDownloaderFactory.js.map +1 -1
  32. package/dist/src/autoDownloader/transferHandler/autoDownloaderNewTransferHandler.js.map +1 -1
  33. package/dist/src/autoDownloader/transferHandler/autoDownloaderRecoverableTransferHandler.js.map +1 -1
  34. package/dist/src/autoDownloader/transferHandler/autoDownloaderTransferHandlerBase.js.map +1 -1
  35. package/dist/src/client/downloader/downloaderCore.d.ts +2 -1
  36. package/dist/src/client/downloader/downloaderCore.d.ts.map +1 -1
  37. package/dist/src/client/downloader/downloaderCore.js +19 -9
  38. package/dist/src/client/downloader/downloaderCore.js.map +1 -1
  39. package/dist/src/client/downloader/node/nodeTransferDownloader.d.ts.map +1 -1
  40. package/dist/src/client/downloader/node/nodeTransferDownloader.js +4 -2
  41. package/dist/src/client/downloader/node/nodeTransferDownloader.js.map +1 -1
  42. package/dist/src/client/downloader/transferDownloader.js.map +1 -1
  43. package/dist/src/client/environmentVariables.js.map +1 -1
  44. package/dist/src/client/healthMonitor/events/eventArgs/healthMonitorHealthyEventArgs.js.map +1 -1
  45. package/dist/src/client/healthMonitor/events/eventArgs/healthMonitorUnhealthyEventArgs.js.map +1 -1
  46. package/dist/src/client/healthMonitor/events/transferHealthMonitorEvent.js.map +1 -1
  47. package/dist/src/client/healthMonitor/onlineChecker/nodeOnlineChecker.js.map +1 -1
  48. package/dist/src/client/healthMonitor/onlineChecker/onlineChecker.js.map +1 -1
  49. package/dist/src/client/healthMonitor/onlineChecker/webOnlineChecker.js.map +1 -1
  50. package/dist/src/client/healthMonitor/transferDownloaderHealthMonitor.js.map +1 -1
  51. package/dist/src/client/healthMonitor/transferHealthMonitorBase.js.map +1 -1
  52. package/dist/src/client/healthMonitor/transferUploaderHealthMonitor.js.map +1 -1
  53. package/dist/src/client/loggers/dummyLogger.js.map +1 -1
  54. package/dist/src/client/loggers/logger.js.map +1 -1
  55. package/dist/src/client/loggers/utils/logHealthyStatus.js.map +1 -1
  56. package/dist/src/client/node/nodeFileDetailsProvider.js.map +1 -1
  57. package/dist/src/client/uploader/node/nodeTransferUploader.d.ts.map +1 -1
  58. package/dist/src/client/uploader/node/nodeTransferUploader.js +10 -4
  59. package/dist/src/client/uploader/node/nodeTransferUploader.js.map +1 -1
  60. package/dist/src/client/uploader/transferUploader.js.map +1 -1
  61. package/dist/src/client/uploader/transferUploaderBase.js +1 -1
  62. package/dist/src/client/uploader/transferUploaderBase.js.map +1 -1
  63. package/dist/src/client/uploader/transferUploaderConfig.js.map +1 -1
  64. package/dist/src/client/uploader/utils/uploaderUtils.js.map +1 -1
  65. package/dist/src/client/uploader/web/webTransferUploader.d.ts +2 -2
  66. package/dist/src/client/uploader/web/webTransferUploader.d.ts.map +1 -1
  67. package/dist/src/client/uploader/web/webTransferUploader.js +7 -2
  68. package/dist/src/client/uploader/web/webTransferUploader.js.map +1 -1
  69. package/dist/src/client/uploader/web/webTransferUploaderConfig.d.ts +7 -0
  70. package/dist/src/client/uploader/web/webTransferUploaderConfig.d.ts.map +1 -0
  71. package/dist/src/client/uploader/web/webTransferUploaderConfig.js +2 -0
  72. package/dist/src/client/uploader/web/webTransferUploaderConfig.js.map +1 -0
  73. package/dist/src/downloader/api/fileServerDownloadClient.d.ts +2 -2
  74. package/dist/src/downloader/api/fileServerDownloadClient.d.ts.map +1 -1
  75. package/dist/src/downloader/api/fileServerDownloadClient.js.map +1 -1
  76. package/dist/src/downloader/api/fileServerDownloadStatusClient.d.ts +6 -0
  77. package/dist/src/downloader/api/fileServerDownloadStatusClient.d.ts.map +1 -0
  78. package/dist/src/downloader/api/fileServerDownloadStatusClient.js +2 -0
  79. package/dist/src/downloader/api/fileServerDownloadStatusClient.js.map +1 -0
  80. package/dist/src/downloader/api/node/nodeFileServerDownloadClient.d.ts.map +1 -1
  81. package/dist/src/downloader/api/node/nodeFileServerDownloadClient.js +8 -6
  82. package/dist/src/downloader/api/node/nodeFileServerDownloadClient.js.map +1 -1
  83. package/dist/src/downloader/api/node/nodeFileServerDownloadStatusClient.d.ts +10 -0
  84. package/dist/src/downloader/api/node/nodeFileServerDownloadStatusClient.d.ts.map +1 -0
  85. package/dist/src/downloader/api/node/nodeFileServerDownloadStatusClient.js +39 -0
  86. package/dist/src/downloader/api/node/nodeFileServerDownloadStatusClient.js.map +1 -0
  87. package/dist/src/downloader/chunkDownloader.d.ts +3 -2
  88. package/dist/src/downloader/chunkDownloader.d.ts.map +1 -1
  89. package/dist/src/downloader/chunkDownloader.js +6 -3
  90. package/dist/src/downloader/chunkDownloader.js.map +1 -1
  91. package/dist/src/downloader/downloadFolderResolver.js.map +1 -1
  92. package/dist/src/downloader/downloadLogger.js.map +1 -1
  93. package/dist/src/downloader/downloadOptions.d.ts +5 -0
  94. package/dist/src/downloader/downloadOptions.d.ts.map +1 -1
  95. package/dist/src/downloader/downloadOptions.js +5 -0
  96. package/dist/src/downloader/downloadOptions.js.map +1 -1
  97. package/dist/src/downloader/downloadStatus/downloadFileChunkProgress.js.map +1 -1
  98. package/dist/src/downloader/downloadStatus/downloadFileProgress.js.map +1 -1
  99. package/dist/src/downloader/downloadStatus/downloadFilePromise.js.map +1 -1
  100. package/dist/src/downloader/downloadStatus/downloadState.js.map +1 -1
  101. package/dist/src/downloader/downloadTracker.d.ts +2 -1
  102. package/dist/src/downloader/downloadTracker.d.ts.map +1 -1
  103. package/dist/src/downloader/downloadTracker.js +5 -4
  104. package/dist/src/downloader/downloadTracker.js.map +1 -1
  105. package/dist/src/downloader/dtos/downloadCommand.js.map +1 -1
  106. package/dist/src/downloader/dtos/downloadError.js.map +1 -1
  107. package/dist/src/downloader/dtos/downloadErrorCode.js.map +1 -1
  108. package/dist/src/downloader/dtos/downloadEvent.js.map +1 -1
  109. package/dist/src/downloader/dtos/downloadFileChunkInfo.js.map +1 -1
  110. package/dist/src/downloader/dtos/downloadFileInfo.js.map +1 -1
  111. package/dist/src/downloader/dtos/downloadFilesCommand.js.map +1 -1
  112. package/dist/src/downloader/dtos/downloadInfo.js.map +1 -1
  113. package/dist/src/downloader/dtos/downloadRegistrationMode.d.ts +2 -1
  114. package/dist/src/downloader/dtos/downloadRegistrationMode.d.ts.map +1 -1
  115. package/dist/src/downloader/dtos/downloadRegistrationMode.js +1 -0
  116. package/dist/src/downloader/dtos/downloadRegistrationMode.js.map +1 -1
  117. package/dist/src/downloader/dtos/downloadTrackerFileInfo.js.map +1 -1
  118. package/dist/src/downloader/dtos/downloadTrackerFileProgressInfo.js.map +1 -1
  119. package/dist/src/downloader/dtos/downloadTrackerProgressInfo.js.map +1 -1
  120. package/dist/src/downloader/dtos/downloadTrackingMetadata.d.ts +2 -0
  121. package/dist/src/downloader/dtos/downloadTrackingMetadata.d.ts.map +1 -1
  122. package/dist/src/downloader/dtos/downloadTrackingMetadata.js.map +1 -1
  123. package/dist/src/downloader/dtos/downloaderRestoredState.js.map +1 -1
  124. package/dist/src/downloader/eventArgs/chunkDownloadEventArgs.js.map +1 -1
  125. package/dist/src/downloader/eventArgs/chunkDownloadFailedEventArgs.js.map +1 -1
  126. package/dist/src/downloader/eventArgs/downloadCompletedEventArgs.js.map +1 -1
  127. package/dist/src/downloader/eventArgs/downloadEventArgs.js.map +1 -1
  128. package/dist/src/downloader/eventArgs/downloadMetadataDeterminedEventArgs.js.map +1 -1
  129. package/dist/src/downloader/eventArgs/downloadPauseEventArgs.js.map +1 -1
  130. package/dist/src/downloader/eventArgs/downloadTrackingFailedEventArgs.js.map +1 -1
  131. package/dist/src/downloader/eventArgs/fileDownloadEventArgs.js.map +1 -1
  132. package/dist/src/downloader/eventArgs/fileDownloadFailedEventArgs.js.map +1 -1
  133. package/dist/src/downloader/filesDownloader.d.ts +2 -1
  134. package/dist/src/downloader/filesDownloader.d.ts.map +1 -1
  135. package/dist/src/downloader/filesDownloader.js +30 -2
  136. package/dist/src/downloader/filesDownloader.js.map +1 -1
  137. package/dist/src/downloader/filesPreparer.js.map +1 -1
  138. package/dist/src/downloader/md5Provider/downloaderChunkMD5Provider.d.ts +6 -0
  139. package/dist/src/downloader/md5Provider/downloaderChunkMD5Provider.d.ts.map +1 -0
  140. package/dist/src/downloader/md5Provider/downloaderChunkMD5Provider.js +2 -0
  141. package/dist/src/downloader/md5Provider/downloaderChunkMD5Provider.js.map +1 -0
  142. package/dist/src/downloader/md5Provider/downloaderChunkMD5ProviderFactory.d.ts +7 -0
  143. package/dist/src/downloader/md5Provider/downloaderChunkMD5ProviderFactory.d.ts.map +1 -0
  144. package/dist/src/downloader/md5Provider/downloaderChunkMD5ProviderFactory.js +2 -0
  145. package/dist/src/downloader/md5Provider/downloaderChunkMD5ProviderFactory.js.map +1 -0
  146. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5Provider.d.ts +10 -0
  147. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5Provider.d.ts.map +1 -0
  148. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5Provider.js +36 -0
  149. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5Provider.js.map +1 -0
  150. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5ProviderFactory.d.ts +10 -0
  151. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5ProviderFactory.d.ts.map +1 -0
  152. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5ProviderFactory.js +14 -0
  153. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5ProviderFactory.js.map +1 -0
  154. package/dist/src/index.d.ts +11 -0
  155. package/dist/src/index.d.ts.map +1 -1
  156. package/dist/src/index.js +1 -0
  157. package/dist/src/index.js.map +1 -1
  158. package/dist/src/index.node.d.ts +5 -0
  159. package/dist/src/index.node.d.ts.map +1 -1
  160. package/dist/src/index.node.js +5 -0
  161. package/dist/src/index.node.js.map +1 -1
  162. package/dist/src/index.web.d.ts +5 -0
  163. package/dist/src/index.web.d.ts.map +1 -1
  164. package/dist/src/index.web.js +4 -0
  165. package/dist/src/index.web.js.map +1 -1
  166. package/dist/src/uploader/api/fileServerUploadClient.js.map +1 -1
  167. package/dist/src/uploader/api/node/nodeFileServerUploadClient.d.ts.map +1 -1
  168. package/dist/src/uploader/api/node/nodeFileServerUploadClient.js +1 -2
  169. package/dist/src/uploader/api/node/nodeFileServerUploadClient.js.map +1 -1
  170. package/dist/src/uploader/api/web/utils/axiosIdleTimeoutManager.js.map +1 -1
  171. package/dist/src/uploader/api/web/webFileServerUploadClient.d.ts.map +1 -1
  172. package/dist/src/uploader/api/web/webFileServerUploadClient.js +1 -2
  173. package/dist/src/uploader/api/web/webFileServerUploadClient.js.map +1 -1
  174. package/dist/src/uploader/chunkStreamProviderFactory/node/nodeFileDetailsUploaderChunkStreamProviderFactory.d.ts +9 -0
  175. package/dist/src/uploader/chunkStreamProviderFactory/node/nodeFileDetailsUploaderChunkStreamProviderFactory.d.ts.map +1 -0
  176. package/dist/src/uploader/chunkStreamProviderFactory/{nodeFileDetailsUploaderChunkStreamProviderFactory.js → node/nodeFileDetailsUploaderChunkStreamProviderFactory.js} +1 -1
  177. package/dist/src/uploader/chunkStreamProviderFactory/node/nodeFileDetailsUploaderChunkStreamProviderFactory.js.map +1 -0
  178. package/dist/src/uploader/chunkStreamProviderFactory/uploaderChunkStreamProviderFactory.d.ts +2 -2
  179. package/dist/src/uploader/chunkStreamProviderFactory/uploaderChunkStreamProviderFactory.d.ts.map +1 -1
  180. package/dist/src/uploader/chunkStreamProviderFactory/uploaderChunkStreamProviderFactory.js.map +1 -1
  181. package/dist/src/uploader/chunkStreamProviderFactory/web/webFileDetailsUploaderChunkStreamProviderFactory.d.ts +9 -0
  182. package/dist/src/uploader/chunkStreamProviderFactory/web/webFileDetailsUploaderChunkStreamProviderFactory.d.ts.map +1 -0
  183. package/dist/src/uploader/chunkStreamProviderFactory/{webFileDetailsUploaderChunkStreamProviderFactory.js → web/webFileDetailsUploaderChunkStreamProviderFactory.js} +1 -1
  184. package/dist/src/uploader/chunkStreamProviderFactory/web/webFileDetailsUploaderChunkStreamProviderFactory.js.map +1 -0
  185. package/dist/src/uploader/chunksIterator/chunksIterator.js.map +1 -1
  186. package/dist/src/uploader/eventArgs/fileAckFailedEventArgs.js.map +1 -1
  187. package/dist/src/uploader/eventArgs/fileChunkUploadCompletedEventArgs.js.map +1 -1
  188. package/dist/src/uploader/eventArgs/fileChunkUploadCompletedPartiallyEventArgs.js.map +1 -1
  189. package/dist/src/uploader/eventArgs/fileChunkUploadEventArgs.js.map +1 -1
  190. package/dist/src/uploader/eventArgs/fileChunkUploadFailedEventArgs.js.map +1 -1
  191. package/dist/src/uploader/eventArgs/fileChunkUploadProgressedEventArgs.js.map +1 -1
  192. package/dist/src/uploader/eventArgs/fileUploadEventArgs.js.map +1 -1
  193. package/dist/src/uploader/eventArgs/fileUploadFailedEventArgs.js.map +1 -1
  194. package/dist/src/uploader/eventArgs/filesBatchAckFailedEventArgs.js.map +1 -1
  195. package/dist/src/uploader/eventArgs/filesRegistrationBatchFailedEventArgs.js.map +1 -1
  196. package/dist/src/uploader/eventArgs/transferMetadataDeterminedEventArgs.js.map +1 -1
  197. package/dist/src/uploader/eventArgs/transferUploadCompletedEventArgs.js.map +1 -1
  198. package/dist/src/uploader/eventArgs/transferUploadProgressedEventArgs.js.map +1 -1
  199. package/dist/src/uploader/export/transferUploadExportData.js.map +1 -1
  200. package/dist/src/uploader/export/transferUploadExportState.js.map +1 -1
  201. package/dist/src/uploader/export/transferUploadMetadata.js.map +1 -1
  202. package/dist/src/uploader/fileChunksPlan.d.ts +8 -0
  203. package/dist/src/uploader/fileChunksPlan.d.ts.map +1 -0
  204. package/dist/src/uploader/fileChunksPlan.js +2 -0
  205. package/dist/src/uploader/fileChunksPlan.js.map +1 -0
  206. package/dist/src/uploader/md5Provider/md5ComputationStrategies/defaultMD5ComputationStrategyFactory.d.ts +10 -0
  207. package/dist/src/uploader/md5Provider/md5ComputationStrategies/defaultMD5ComputationStrategyFactory.d.ts.map +1 -0
  208. package/dist/src/uploader/md5Provider/md5ComputationStrategies/defaultMD5ComputationStrategyFactory.js +12 -0
  209. package/dist/src/uploader/md5Provider/md5ComputationStrategies/defaultMD5ComputationStrategyFactory.js.map +1 -0
  210. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationSession.d.ts +7 -0
  211. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationSession.d.ts.map +1 -0
  212. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationSession.js +2 -0
  213. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationSession.js.map +1 -0
  214. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategy.d.ts +6 -0
  215. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategy.d.ts.map +1 -0
  216. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategy.js +2 -0
  217. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategy.js.map +1 -0
  218. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategyFactory.d.ts +6 -0
  219. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategyFactory.d.ts.map +1 -0
  220. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategyFactory.js +2 -0
  221. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategyFactory.js.map +1 -0
  222. package/dist/src/uploader/md5Provider/md5ComputationStrategies/node/nodeAsyncMD5ComputationStrategy.d.ts +7 -0
  223. package/dist/src/uploader/md5Provider/md5ComputationStrategies/node/nodeAsyncMD5ComputationStrategy.d.ts.map +1 -0
  224. package/dist/src/uploader/md5Provider/md5ComputationStrategies/node/nodeAsyncMD5ComputationStrategy.js +14 -0
  225. package/dist/src/uploader/md5Provider/md5ComputationStrategies/node/nodeAsyncMD5ComputationStrategy.js.map +1 -0
  226. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/computeBlobMD5.d.ts +2 -0
  227. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/computeBlobMD5.d.ts.map +1 -0
  228. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/computeBlobMD5.js +27 -0
  229. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/computeBlobMD5.js.map +1 -0
  230. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5.worker.d.ts +2 -0
  231. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5.worker.d.ts.map +1 -0
  232. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5.worker.js +5 -0
  233. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5.worker.js.map +1 -0
  234. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkerMessages.d.ts +14 -0
  235. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkerMessages.d.ts.map +1 -0
  236. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkerMessages.js +2 -0
  237. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkerMessages.js.map +1 -0
  238. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkersManager.d.ts +17 -0
  239. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkersManager.d.ts.map +1 -0
  240. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkersManager.js +113 -0
  241. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkersManager.js.map +1 -0
  242. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/registerMD5Worker.d.ts +7 -0
  243. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/registerMD5Worker.d.ts.map +1 -0
  244. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/registerMD5Worker.js +17 -0
  245. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/registerMD5Worker.js.map +1 -0
  246. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webAsyncWebWorkerMD5ComputationStrategy.d.ts +9 -0
  247. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webAsyncWebWorkerMD5ComputationStrategy.d.ts.map +1 -0
  248. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webAsyncWebWorkerMD5ComputationStrategy.js +62 -0
  249. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webAsyncWebWorkerMD5ComputationStrategy.js.map +1 -0
  250. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webMD5ComputationStrategyFactory.d.ts +9 -0
  251. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webMD5ComputationStrategyFactory.d.ts.map +1 -0
  252. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webMD5ComputationStrategyFactory.js +41 -0
  253. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webMD5ComputationStrategyFactory.js.map +1 -0
  254. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webSyncMD5ComputationStrategy.d.ts +6 -0
  255. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webSyncMD5ComputationStrategy.d.ts.map +1 -0
  256. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webSyncMD5ComputationStrategy.js +9 -0
  257. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webSyncMD5ComputationStrategy.js.map +1 -0
  258. package/dist/src/uploader/md5Provider/precomputedMD5Provider.d.ts +27 -0
  259. package/dist/src/uploader/md5Provider/precomputedMD5Provider.d.ts.map +1 -0
  260. package/dist/src/uploader/md5Provider/precomputedMD5Provider.js +189 -0
  261. package/dist/src/uploader/md5Provider/precomputedMD5Provider.js.map +1 -0
  262. package/dist/src/uploader/md5Provider/uploaderMD5Provider.d.ts +28 -0
  263. package/dist/src/uploader/md5Provider/uploaderMD5Provider.d.ts.map +1 -0
  264. package/dist/src/uploader/md5Provider/uploaderMD5Provider.js +2 -0
  265. package/dist/src/uploader/md5Provider/uploaderMD5Provider.js.map +1 -0
  266. package/dist/src/uploader/options/transferUploadAppendInfo.js.map +1 -1
  267. package/dist/src/uploader/options/transferUploadConfig.js.map +1 -1
  268. package/dist/src/uploader/options/transferUploadInfo.js.map +1 -1
  269. package/dist/src/uploader/options/transferUploadInfoBase.js.map +1 -1
  270. package/dist/src/uploader/pauseController.js.map +1 -1
  271. package/dist/src/uploader/pendingFileAck.js.map +1 -1
  272. package/dist/src/uploader/registeredTransferFile.js.map +1 -1
  273. package/dist/src/uploader/state/continuousChunksCalculator.js.map +1 -1
  274. package/dist/src/uploader/state/readonlyTransferUploadStateFile.js.map +1 -1
  275. package/dist/src/uploader/state/readonlyTransferUploadStateFiles.js.map +1 -1
  276. package/dist/src/uploader/state/transferUploadProgressCalculator.js.map +1 -1
  277. package/dist/src/uploader/state/transferUploadState.js.map +1 -1
  278. package/dist/src/uploader/state/transferUploadStateFile.js.map +1 -1
  279. package/dist/src/uploader/state/transferUploadStateFiles.js.map +1 -1
  280. package/dist/src/uploader/transferFailureAbortReason.js.map +1 -1
  281. package/dist/src/uploader/transferFilesRegistrar.js.map +1 -1
  282. package/dist/src/uploader/transferUpload.d.ts +4 -2
  283. package/dist/src/uploader/transferUpload.d.ts.map +1 -1
  284. package/dist/src/uploader/transferUpload.js +27 -9
  285. package/dist/src/uploader/transferUpload.js.map +1 -1
  286. package/dist/src/uploader/transferUploadAcker.js.map +1 -1
  287. package/dist/src/uploader/transferUploadError.js.map +1 -1
  288. package/dist/src/uploader/transferUploadEvent.js.map +1 -1
  289. package/dist/src/utils/api/apiClient.js.map +1 -1
  290. package/dist/src/utils/api/apiClientBase.js.map +1 -1
  291. package/dist/src/utils/api/apiError.js.map +1 -1
  292. package/dist/src/utils/api/apiFilemail449Error.js.map +1 -1
  293. package/dist/src/utils/api/apiFilemailError.js.map +1 -1
  294. package/dist/src/utils/api/dtos/ackTransferFilesRequest.js.map +1 -1
  295. package/dist/src/utils/api/dtos/ackTransferFilesResponse.js.map +1 -1
  296. package/dist/src/utils/api/dtos/baseResponse.js.map +1 -1
  297. package/dist/src/utils/api/dtos/cancelTransferRequest.js.map +1 -1
  298. package/dist/src/utils/api/dtos/finalizeTransferRequest.js.map +1 -1
  299. package/dist/src/utils/api/dtos/finalizeTransferResponse.js.map +1 -1
  300. package/dist/src/utils/api/dtos/getCompanyResponse.js.map +1 -1
  301. package/dist/src/utils/api/dtos/getCompressedFileMetadataResponse.js.map +1 -1
  302. package/dist/src/utils/api/dtos/getInboxTransfersRequest.js.map +1 -1
  303. package/dist/src/utils/api/dtos/getInboxTransfersResponse.js.map +1 -1
  304. package/dist/src/utils/api/dtos/getRangehashResponse.js.map +1 -1
  305. package/dist/src/utils/api/dtos/getTransferRequest.js.map +1 -1
  306. package/dist/src/utils/api/dtos/getTransferResponse.d.ts +1 -0
  307. package/dist/src/utils/api/dtos/getTransferResponse.d.ts.map +1 -1
  308. package/dist/src/utils/api/dtos/getTransferResponse.js.map +1 -1
  309. package/dist/src/utils/api/dtos/initializeTransferRequest.js.map +1 -1
  310. package/dist/src/utils/api/dtos/initializeTransferResponse.js.map +1 -1
  311. package/dist/src/utils/api/dtos/loginRequest.js.map +1 -1
  312. package/dist/src/utils/api/dtos/loginResponse.js.map +1 -1
  313. package/dist/src/utils/api/dtos/registerFileDownloadRequest.js.map +1 -1
  314. package/dist/src/utils/api/dtos/registerTransferDownloadRequest.js.map +1 -1
  315. package/dist/src/utils/api/dtos/registerTransferFilesRequest.js.map +1 -1
  316. package/dist/src/utils/api/dtos/registerTransferFilesResponse.js.map +1 -1
  317. package/dist/src/utils/api/dtos/resetTransferRequest.js.map +1 -1
  318. package/dist/src/utils/api/dtos/sendFileChunkRequest.d.ts +1 -0
  319. package/dist/src/utils/api/dtos/sendFileChunkRequest.d.ts.map +1 -1
  320. package/dist/src/utils/api/dtos/sendFileChunkRequest.js.map +1 -1
  321. package/dist/src/utils/api/dtos/transferCustomFieldDto.js.map +1 -1
  322. package/dist/src/utils/api/dtos/transferFileDto.js.map +1 -1
  323. package/dist/src/utils/api/fileServerClientFactory.d.ts +2 -0
  324. package/dist/src/utils/api/fileServerClientFactory.d.ts.map +1 -1
  325. package/dist/src/utils/api/fileServerClientFactory.js.map +1 -1
  326. package/dist/src/utils/api/node/gotWorkarounds.js.map +1 -1
  327. package/dist/src/utils/api/node/nodeApiClient.js.map +1 -1
  328. package/dist/src/utils/api/node/nodeClientBase.js.map +1 -1
  329. package/dist/src/utils/api/node/nodeFileServerClientFactory.d.ts +2 -0
  330. package/dist/src/utils/api/node/nodeFileServerClientFactory.d.ts.map +1 -1
  331. package/dist/src/utils/api/node/nodeFileServerClientFactory.js +4 -0
  332. package/dist/src/utils/api/node/nodeFileServerClientFactory.js.map +1 -1
  333. package/dist/src/utils/api/node/nodeFileserverClientBase.js.map +1 -1
  334. package/dist/src/utils/api/urlUtil.js.map +1 -1
  335. package/dist/src/utils/api/web/webApiClient.js.map +1 -1
  336. package/dist/src/utils/api/web/webClientBase.js.map +1 -1
  337. package/dist/src/utils/api/web/webFileServerClientFactory.d.ts +2 -0
  338. package/dist/src/utils/api/web/webFileServerClientFactory.d.ts.map +1 -1
  339. package/dist/src/utils/api/web/webFileServerClientFactory.js +3 -0
  340. package/dist/src/utils/api/web/webFileServerClientFactory.js.map +1 -1
  341. package/dist/src/utils/api/web/webFileserverClientBase.js.map +1 -1
  342. package/dist/src/utils/concurrencyController/concurrencyController.js.map +1 -1
  343. package/dist/src/utils/concurrencyController/concurrencyReleaser.js.map +1 -1
  344. package/dist/src/utils/concurrencyController/transferConcurrencyController.js.map +1 -1
  345. package/dist/src/utils/crypto/cryptographyProvider.js.map +1 -1
  346. package/dist/src/utils/crypto/node/nodeCryptographyProvider.js.map +1 -1
  347. package/dist/src/utils/crypto/web/webCryptographyProvider.js.map +1 -1
  348. package/dist/src/utils/dateAndTime/simpleDateFormatter.js.map +1 -1
  349. package/dist/src/utils/events/chunkProgressEvent.js.map +1 -1
  350. package/dist/src/utils/events/eventsEngine.js.map +1 -1
  351. package/dist/src/utils/events/node/nodeEventsEngine.js.map +1 -1
  352. package/dist/src/utils/events/web/webEventsEngine.js.map +1 -1
  353. package/dist/src/utils/fileSystem/chunkStreamEncryptionData.d.ts +6 -0
  354. package/dist/src/utils/fileSystem/chunkStreamEncryptionData.d.ts.map +1 -0
  355. package/dist/src/utils/fileSystem/chunkStreamEncryptionData.js +2 -0
  356. package/dist/src/utils/fileSystem/chunkStreamEncryptionData.js.map +1 -0
  357. package/dist/src/utils/fileSystem/chunkStreamProvider.d.ts +0 -5
  358. package/dist/src/utils/fileSystem/chunkStreamProvider.d.ts.map +1 -1
  359. package/dist/src/utils/fileSystem/chunkStreamProvider.js.map +1 -1
  360. package/dist/src/utils/fileSystem/chunkStreamProviderFactory.d.ts +2 -2
  361. package/dist/src/utils/fileSystem/chunkStreamProviderFactory.d.ts.map +1 -1
  362. package/dist/src/utils/fileSystem/chunkStreamProviderFactory.js.map +1 -1
  363. package/dist/src/utils/fileSystem/fileDetails.js.map +1 -1
  364. package/dist/src/utils/fileSystem/fileSystemService.js.map +1 -1
  365. package/dist/src/utils/fileSystem/fsError.js.map +1 -1
  366. package/dist/src/utils/fileSystem/node/nodeChunkStreamProvider.d.ts +2 -3
  367. package/dist/src/utils/fileSystem/node/nodeChunkStreamProvider.d.ts.map +1 -1
  368. package/dist/src/utils/fileSystem/node/nodeChunkStreamProvider.js +9 -28
  369. package/dist/src/utils/fileSystem/node/nodeChunkStreamProvider.js.map +1 -1
  370. package/dist/src/utils/fileSystem/node/nodeChunkStreamProviderFactory.d.ts +2 -2
  371. package/dist/src/utils/fileSystem/node/nodeChunkStreamProviderFactory.d.ts.map +1 -1
  372. package/dist/src/utils/fileSystem/node/nodeChunkStreamProviderFactory.js +1 -1
  373. package/dist/src/utils/fileSystem/node/nodeChunkStreamProviderFactory.js.map +1 -1
  374. package/dist/src/utils/fileSystem/node/nodeFileDetails.js.map +1 -1
  375. package/dist/src/utils/fileSystem/node/nodeFileSystemService.js.map +1 -1
  376. package/dist/src/utils/fileSystem/parsedPath.js.map +1 -1
  377. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamEncrypter.js.map +1 -1
  378. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.d.ts +2 -3
  379. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.d.ts.map +1 -1
  380. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.js +0 -19
  381. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.js.map +1 -1
  382. package/dist/src/utils/fileSystem/web/webChunkStreamProviderFactory.d.ts +2 -2
  383. package/dist/src/utils/fileSystem/web/webChunkStreamProviderFactory.d.ts.map +1 -1
  384. package/dist/src/utils/fileSystem/web/webChunkStreamProviderFactory.js +1 -1
  385. package/dist/src/utils/fileSystem/web/webChunkStreamProviderFactory.js.map +1 -1
  386. package/dist/src/utils/fileSystem/web/webFileDetails.js.map +1 -1
  387. package/dist/src/utils/jsonParsing.js.map +1 -1
  388. package/dist/src/utils/logging/logEventPropertyNames.js.map +1 -1
  389. package/dist/src/utils/mergeAbortAndPauseSignals.js.map +1 -1
  390. package/dist/src/utils/networking/throttlingOptions.js.map +1 -1
  391. package/dist/src/utils/promiseAll.js.map +1 -1
  392. package/dist/src/utils/types/transferStatus.js.map +1 -1
  393. package/dist/src/utils/uint8ArrayUtils.js.map +1 -1
  394. package/package.json +80 -79
  395. package/readme.md +27 -27
  396. package/dist/src/uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.d.ts +0 -9
  397. package/dist/src/uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.d.ts.map +0 -1
  398. package/dist/src/uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.js.map +0 -1
  399. package/dist/src/uploader/chunkStreamProviderFactory/webFileDetailsUploaderChunkStreamProviderFactory.d.ts +0 -9
  400. package/dist/src/uploader/chunkStreamProviderFactory/webFileDetailsUploaderChunkStreamProviderFactory.d.ts.map +0 -1
  401. package/dist/src/uploader/chunkStreamProviderFactory/webFileDetailsUploaderChunkStreamProviderFactory.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"healthMonitorHealthyEventArgs.js","sourceRoot":"","sources":["../../../../../../src/client/healthMonitor/events/eventArgs/healthMonitorHealthyEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["interface HealthMonitorHealthyEventArgs {\n transferredBytesTotalCount: number | undefined;\n progressInPercentage: number | undefined;\n remainingSeconds: number | undefined;\n averageSpeedInBytesPerSecond: number | undefined;\n currentSpeedInBytesPerSecond: number | undefined;\n}\n\nexport default HealthMonitorHealthyEventArgs;"]}
1
+ {"version":3,"file":"healthMonitorHealthyEventArgs.js","sourceRoot":"","sources":["../../../../../../src/client/healthMonitor/events/eventArgs/healthMonitorHealthyEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["interface HealthMonitorHealthyEventArgs {\r\n transferredBytesTotalCount: number | undefined;\r\n progressInPercentage: number | undefined;\r\n remainingSeconds: number | undefined;\r\n averageSpeedInBytesPerSecond: number | undefined;\r\n currentSpeedInBytesPerSecond: number | undefined;\r\n}\r\n\r\nexport default HealthMonitorHealthyEventArgs;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"healthMonitorUnhealthyEventArgs.js","sourceRoot":"","sources":["../../../../../../src/client/healthMonitor/events/eventArgs/healthMonitorUnhealthyEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["interface HealthMonitorUnhealthyEventArgs {\n reason: HealthMonitorUnhealthyEventArgsReason,\n transferredBytesTotalCount?: number;\n progressInPercentage?: number;\n remainingSeconds?: number;\n averageSpeedInBytesPerSecond?: number;\n currentSpeedInBytesPerSecond?: number;\n}\n\nexport interface HealthMonitorUnhealthyEventArgsReason {\n internet: HealthMonitorUnhealthyEventArgsReasonValue,\n api: HealthMonitorUnhealthyEventArgsReasonValue,\n fileServer: HealthMonitorUnhealthyEventArgsReasonValue,\n}\n\nexport interface HealthMonitorUnhealthyEventArgsReasonValue {\n status: `Checking` | `Ok` | `Error` | `Unknown`\n error?: Error,\n}\n\nexport default HealthMonitorUnhealthyEventArgs;"]}
1
+ {"version":3,"file":"healthMonitorUnhealthyEventArgs.js","sourceRoot":"","sources":["../../../../../../src/client/healthMonitor/events/eventArgs/healthMonitorUnhealthyEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["interface HealthMonitorUnhealthyEventArgs {\r\n reason: HealthMonitorUnhealthyEventArgsReason,\r\n transferredBytesTotalCount?: number;\r\n progressInPercentage?: number;\r\n remainingSeconds?: number;\r\n averageSpeedInBytesPerSecond?: number;\r\n currentSpeedInBytesPerSecond?: number;\r\n}\r\n\r\nexport interface HealthMonitorUnhealthyEventArgsReason {\r\n internet: HealthMonitorUnhealthyEventArgsReasonValue,\r\n api: HealthMonitorUnhealthyEventArgsReasonValue,\r\n fileServer: HealthMonitorUnhealthyEventArgsReasonValue,\r\n}\r\n\r\nexport interface HealthMonitorUnhealthyEventArgsReasonValue {\r\n status: `Checking` | `Ok` | `Error` | `Unknown`\r\n error?: Error,\r\n}\r\n\r\nexport default HealthMonitorUnhealthyEventArgs;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferHealthMonitorEvent.js","sourceRoot":"","sources":["../../../../../src/client/healthMonitor/events/transferHealthMonitorEvent.ts"],"names":[],"mappings":"AAAA,IAAK,0BAGJ;AAHD,WAAK,0BAA0B;IAC3B,+DAAiC,CAAA;IACjC,mEAAqC,CAAA;AACzC,CAAC,EAHI,0BAA0B,KAA1B,0BAA0B,QAG9B;AAED,eAAe,0BAA0B,CAAC","sourcesContent":["enum TransferHealthMonitorEvent {\n Healthy = `HealthMonitor_Healthy`,\n Unhealthy = `HealthMonitor_Unhealthy`,\n}\n\nexport default TransferHealthMonitorEvent;"]}
1
+ {"version":3,"file":"transferHealthMonitorEvent.js","sourceRoot":"","sources":["../../../../../src/client/healthMonitor/events/transferHealthMonitorEvent.ts"],"names":[],"mappings":"AAAA,IAAK,0BAGJ;AAHD,WAAK,0BAA0B;IAC3B,+DAAiC,CAAA;IACjC,mEAAqC,CAAA;AACzC,CAAC,EAHI,0BAA0B,KAA1B,0BAA0B,QAG9B;AAED,eAAe,0BAA0B,CAAC","sourcesContent":["enum TransferHealthMonitorEvent {\r\n Healthy = `HealthMonitor_Healthy`,\r\n Unhealthy = `HealthMonitor_Unhealthy`,\r\n}\r\n\r\nexport default TransferHealthMonitorEvent;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"nodeOnlineChecker.js","sourceRoot":"","sources":["../../../../../src/client/healthMonitor/onlineChecker/nodeOnlineChecker.ts"],"names":[],"mappings":"AAAA,OAAO,aAAsC,MAAM,oBAAoB,CAAC;AAExE,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,aAAa;IACjD,KAAK,CAAC,gBAAgB;QACzB,OAAO,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1C,CAAC;CACJ","sourcesContent":["import OnlineChecker, { OnlineCheckerResult } from \"./onlineChecker.js\";\n\nexport default class NodeOnlineChecker extends OnlineChecker {\n public async isInternetOnline(): Promise<OnlineCheckerResult> {\n return await this.isGoogleReachable();\n }\n}"]}
1
+ {"version":3,"file":"nodeOnlineChecker.js","sourceRoot":"","sources":["../../../../../src/client/healthMonitor/onlineChecker/nodeOnlineChecker.ts"],"names":[],"mappings":"AAAA,OAAO,aAAsC,MAAM,oBAAoB,CAAC;AAExE,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,aAAa;IACjD,KAAK,CAAC,gBAAgB;QACzB,OAAO,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1C,CAAC;CACJ","sourcesContent":["import OnlineChecker, { OnlineCheckerResult } from \"./onlineChecker.js\";\r\n\r\nexport default class NodeOnlineChecker extends OnlineChecker {\r\n public async isInternetOnline(): Promise<OnlineCheckerResult> {\r\n return await this.isGoogleReachable();\r\n }\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"onlineChecker.js","sourceRoot":"","sources":["../../../../../src/client/healthMonitor/onlineChecker/onlineChecker.ts"],"names":[],"mappings":"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","sourcesContent":["export default abstract class OnlineChecker {\n protected apiBaseUrl: string;\n\n constructor(apiBaseUrl: string) {\n if (!apiBaseUrl || apiBaseUrl.length === 0)\n throw new Error(`Api Base URL is required`);\n\n this.apiBaseUrl = apiBaseUrl;\n }\n\n public abstract isInternetOnline(): Promise<OnlineCheckerResult>;\n\n public async isApiReachable(): Promise<OnlineCheckerResult> {\n return await this.probe(`${this.apiBaseUrl}/heartbeat?d=${Date.now()}`);\n }\n\n public async isFileServerReachable(fileServerBaseUrl: string): Promise<OnlineCheckerResult> {\n return await this.probe(`${fileServerBaseUrl}/up?d=${Date.now()}`);\n }\n\n protected async isGoogleReachable(): Promise<OnlineCheckerResult> {\n return await this.probe(`https://www.gstatic.com/generate_204?d=${Date.now()}`);\n }\n\n protected async probe(url: string, timeoutInMs = 4000, options: ProbeRequestOptions = {}): Promise<OnlineCheckerResult> {\n const startedAt = Date.now();\n\n try {\n const timeoutSignal = AbortSignal.timeout(timeoutInMs);\n const result = await fetch(url, this.createProbeRequestInit(timeoutSignal, options.requestMode));\n const probeDurationInMs = Date.now() - startedAt;\n\n if (result.ok || (options.opaqueResponseMeansOnline && result.type === `opaque`))\n return { isOnline: true };\n\n const response = await this.getProbeResponseDetails(result);\n\n throw this.enrichProbeError(new Error(`Response returned ${result.status} status`), url, response, {\n probeRequestMode: options.requestMode,\n probeResponseType: result.type,\n probeTimeoutInMs: timeoutInMs,\n probeDurationInMs,\n probeFailureCategory: `HttpError`,\n });\n }\n catch (error) {\n const errorObject = this.getErrorObject(error);\n const probeDurationInMs = Date.now() - startedAt;\n\n return {\n isOnline: false,\n error: this.enrichProbeError(errorObject, url, undefined, {\n probeRequestMode: options.requestMode,\n probeTimeoutInMs: timeoutInMs,\n probeDurationInMs,\n probeFailureCategory: this.getProbeFailureCategory(errorObject),\n }),\n };\n }\n }\n\n protected async probeReadableWithFallback(url: string, timeoutInMs = 4000, readableProbeBlockedHint?: string): Promise<OnlineCheckerResult> {\n const readableResult = await this.probe(url, timeoutInMs, { requestMode: `cors` });\n\n if (readableResult.isOnline)\n return readableResult;\n\n const readableError = this.getErrorObject(readableResult.error) as ProbeError;\n\n if (readableError.response !== undefined)\n return readableResult;\n\n const fallbackResult = await this.probe(url, timeoutInMs, {\n requestMode: `no-cors`,\n opaqueResponseMeansOnline: true,\n });\n\n if (fallbackResult.isOnline) {\n return {\n isOnline: false,\n error: this.enrichProbeError(readableError, url, undefined, {\n probeFailureCategory: `ReadableResponseBlocked`,\n probeFailureHint: readableProbeBlockedHint,\n probeFallbackRequestMode: `no-cors`,\n probeFallbackSucceeded: true,\n }),\n };\n }\n\n const fallbackError = this.getErrorObject(fallbackResult.error);\n\n return {\n isOnline: false,\n error: this.enrichProbeError(readableError, url, undefined, {\n probeFallbackRequestMode: `no-cors`,\n probeFallbackSucceeded: false,\n probeFallbackErrorName: fallbackError.name,\n probeFallbackErrorMessage: fallbackError.message,\n }),\n };\n }\n\n private createProbeRequestInit(timeoutSignal: AbortSignal, requestMode?: RequestMode): RequestInit {\n return {\n method: `GET`,\n cache: `no-store`,\n signal: timeoutSignal,\n ...(requestMode ? { mode: requestMode } : {}),\n };\n }\n\n private async getProbeResponseDetails(response: Response): Promise<ProbeResponseDetails> {\n const body = await this.tryGetResponseBody(response);\n const headers: Record<string, string> = {};\n\n response.headers.forEach((value, key) => {\n headers[key] = value;\n });\n\n return {\n status: response.status,\n statusText: response.statusText || undefined,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n body,\n };\n }\n\n private async tryGetResponseBody(response: Response): Promise<string | undefined> {\n try {\n const body = await response.text();\n\n return body.length > 0 ? body : undefined;\n }\n catch {\n return undefined;\n }\n }\n\n private enrichProbeError(error: unknown, requestUrl: string, response?: ProbeResponseDetails, diagnostics?: ProbeErrorDiagnostics): Error {\n const errorToEnrich = this.getErrorObject(error) as ProbeError;\n\n try {\n this.applyProbeErrorMetadata(errorToEnrich, requestUrl, response, diagnostics);\n\n return errorToEnrich;\n }\n catch {\n const wrappedError = new Error(errorToEnrich.message, { cause: errorToEnrich }) as ProbeError;\n\n wrappedError.name = errorToEnrich.name;\n this.applyProbeErrorMetadata(wrappedError, requestUrl, response, diagnostics);\n\n return wrappedError;\n }\n }\n\n private applyProbeErrorMetadata(errorToEnrich: ProbeError, requestUrl: string, response?: ProbeResponseDetails, diagnostics?: ProbeErrorDiagnostics): void {\n const enrichedError = errorToEnrich;\n\n enrichedError.requestUrl ??= requestUrl;\n\n if (response !== undefined && enrichedError.response === undefined)\n enrichedError.response = response;\n\n if (diagnostics?.probeRequestMode !== undefined)\n enrichedError.probeRequestMode = diagnostics.probeRequestMode;\n\n if (diagnostics?.probeResponseType !== undefined)\n enrichedError.probeResponseType = diagnostics.probeResponseType;\n\n if (diagnostics?.probeTimeoutInMs !== undefined)\n enrichedError.probeTimeoutInMs = diagnostics.probeTimeoutInMs;\n\n if (diagnostics?.probeDurationInMs !== undefined)\n enrichedError.probeDurationInMs = diagnostics.probeDurationInMs;\n\n if (diagnostics?.probeFailureCategory !== undefined)\n enrichedError.probeFailureCategory = diagnostics.probeFailureCategory;\n\n if (diagnostics?.probeFailureHint !== undefined)\n enrichedError.probeFailureHint = diagnostics.probeFailureHint;\n\n if (diagnostics?.probeFallbackRequestMode !== undefined)\n enrichedError.probeFallbackRequestMode = diagnostics.probeFallbackRequestMode;\n\n if (diagnostics?.probeFallbackSucceeded !== undefined)\n enrichedError.probeFallbackSucceeded = diagnostics.probeFallbackSucceeded;\n\n if (diagnostics?.probeFallbackErrorName !== undefined)\n enrichedError.probeFallbackErrorName = diagnostics.probeFallbackErrorName;\n\n if (diagnostics?.probeFallbackErrorMessage !== undefined)\n enrichedError.probeFallbackErrorMessage = diagnostics.probeFallbackErrorMessage;\n }\n\n private getProbeFailureCategory(error: Error): ProbeFailureCategory {\n const errorWithMetadata = error as ProbeError;\n\n if (errorWithMetadata.probeFailureCategory !== undefined)\n return errorWithMetadata.probeFailureCategory;\n\n const errorMessage = error.message.toLowerCase();\n const isTimeoutError = error.name === `AbortError` || errorMessage.includes(`timeout`) || errorMessage.includes(`aborted`);\n\n if (isTimeoutError)\n return `Timeout`;\n\n return `NetworkError`;\n }\n\n private getErrorObject(error: unknown): Error {\n if (error instanceof Error)\n return error;\n\n if (typeof error === `string`)\n return new Error(error);\n\n return new Error(`Unknown health monitor probe error`);\n }\n}\n\nexport interface OnlineCheckerResult {\n isOnline: boolean,\n error?: Error,\n}\n\ninterface ProbeResponseDetails {\n status?: number,\n statusText?: string,\n headers?: Record<string, string>,\n body?: string,\n}\n\ninterface ProbeRequestOptions {\n requestMode?: RequestMode,\n opaqueResponseMeansOnline?: boolean,\n}\n\ntype ProbeFailureCategory = `HttpError` | `NetworkError` | `Timeout` | `ReadableResponseBlocked`;\n\ninterface ProbeErrorDiagnostics {\n probeRequestMode?: RequestMode,\n probeResponseType?: ResponseType,\n probeTimeoutInMs?: number,\n probeDurationInMs?: number,\n probeFailureCategory?: ProbeFailureCategory,\n probeFailureHint?: string,\n probeFallbackRequestMode?: RequestMode,\n probeFallbackSucceeded?: boolean,\n probeFallbackErrorName?: string,\n probeFallbackErrorMessage?: string,\n}\n\ninterface ProbeError extends Error {\n requestUrl?: string,\n response?: ProbeResponseDetails,\n probeRequestMode?: RequestMode,\n probeResponseType?: ResponseType,\n probeTimeoutInMs?: number,\n probeDurationInMs?: number,\n probeFailureCategory?: ProbeFailureCategory,\n probeFailureHint?: string,\n probeFallbackRequestMode?: RequestMode,\n probeFallbackSucceeded?: boolean,\n probeFallbackErrorName?: string,\n probeFallbackErrorMessage?: string,\n}"]}
1
+ {"version":3,"file":"onlineChecker.js","sourceRoot":"","sources":["../../../../../src/client/healthMonitor/onlineChecker/onlineChecker.ts"],"names":[],"mappings":"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","sourcesContent":["export default abstract class OnlineChecker {\r\n protected apiBaseUrl: string;\r\n\r\n constructor(apiBaseUrl: string) {\r\n if (!apiBaseUrl || apiBaseUrl.length === 0)\r\n throw new Error(`Api Base URL is required`);\r\n\r\n this.apiBaseUrl = apiBaseUrl;\r\n }\r\n\r\n public abstract isInternetOnline(): Promise<OnlineCheckerResult>;\r\n\r\n public async isApiReachable(): Promise<OnlineCheckerResult> {\r\n return await this.probe(`${this.apiBaseUrl}/heartbeat?d=${Date.now()}`);\r\n }\r\n\r\n public async isFileServerReachable(fileServerBaseUrl: string): Promise<OnlineCheckerResult> {\r\n return await this.probe(`${fileServerBaseUrl}/up?d=${Date.now()}`);\r\n }\r\n\r\n protected async isGoogleReachable(): Promise<OnlineCheckerResult> {\r\n return await this.probe(`https://www.gstatic.com/generate_204?d=${Date.now()}`);\r\n }\r\n\r\n protected async probe(url: string, timeoutInMs = 4000, options: ProbeRequestOptions = {}): Promise<OnlineCheckerResult> {\r\n const startedAt = Date.now();\r\n\r\n try {\r\n const timeoutSignal = AbortSignal.timeout(timeoutInMs);\r\n const result = await fetch(url, this.createProbeRequestInit(timeoutSignal, options.requestMode));\r\n const probeDurationInMs = Date.now() - startedAt;\r\n\r\n if (result.ok || (options.opaqueResponseMeansOnline && result.type === `opaque`))\r\n return { isOnline: true };\r\n\r\n const response = await this.getProbeResponseDetails(result);\r\n\r\n throw this.enrichProbeError(new Error(`Response returned ${result.status} status`), url, response, {\r\n probeRequestMode: options.requestMode,\r\n probeResponseType: result.type,\r\n probeTimeoutInMs: timeoutInMs,\r\n probeDurationInMs,\r\n probeFailureCategory: `HttpError`,\r\n });\r\n }\r\n catch (error) {\r\n const errorObject = this.getErrorObject(error);\r\n const probeDurationInMs = Date.now() - startedAt;\r\n\r\n return {\r\n isOnline: false,\r\n error: this.enrichProbeError(errorObject, url, undefined, {\r\n probeRequestMode: options.requestMode,\r\n probeTimeoutInMs: timeoutInMs,\r\n probeDurationInMs,\r\n probeFailureCategory: this.getProbeFailureCategory(errorObject),\r\n }),\r\n };\r\n }\r\n }\r\n\r\n protected async probeReadableWithFallback(url: string, timeoutInMs = 4000, readableProbeBlockedHint?: string): Promise<OnlineCheckerResult> {\r\n const readableResult = await this.probe(url, timeoutInMs, { requestMode: `cors` });\r\n\r\n if (readableResult.isOnline)\r\n return readableResult;\r\n\r\n const readableError = this.getErrorObject(readableResult.error) as ProbeError;\r\n\r\n if (readableError.response !== undefined)\r\n return readableResult;\r\n\r\n const fallbackResult = await this.probe(url, timeoutInMs, {\r\n requestMode: `no-cors`,\r\n opaqueResponseMeansOnline: true,\r\n });\r\n\r\n if (fallbackResult.isOnline) {\r\n return {\r\n isOnline: false,\r\n error: this.enrichProbeError(readableError, url, undefined, {\r\n probeFailureCategory: `ReadableResponseBlocked`,\r\n probeFailureHint: readableProbeBlockedHint,\r\n probeFallbackRequestMode: `no-cors`,\r\n probeFallbackSucceeded: true,\r\n }),\r\n };\r\n }\r\n\r\n const fallbackError = this.getErrorObject(fallbackResult.error);\r\n\r\n return {\r\n isOnline: false,\r\n error: this.enrichProbeError(readableError, url, undefined, {\r\n probeFallbackRequestMode: `no-cors`,\r\n probeFallbackSucceeded: false,\r\n probeFallbackErrorName: fallbackError.name,\r\n probeFallbackErrorMessage: fallbackError.message,\r\n }),\r\n };\r\n }\r\n\r\n private createProbeRequestInit(timeoutSignal: AbortSignal, requestMode?: RequestMode): RequestInit {\r\n return {\r\n method: `GET`,\r\n cache: `no-store`,\r\n signal: timeoutSignal,\r\n ...(requestMode ? { mode: requestMode } : {}),\r\n };\r\n }\r\n\r\n private async getProbeResponseDetails(response: Response): Promise<ProbeResponseDetails> {\r\n const body = await this.tryGetResponseBody(response);\r\n const headers: Record<string, string> = {};\r\n\r\n response.headers.forEach((value, key) => {\r\n headers[key] = value;\r\n });\r\n\r\n return {\r\n status: response.status,\r\n statusText: response.statusText || undefined,\r\n headers: Object.keys(headers).length > 0 ? headers : undefined,\r\n body,\r\n };\r\n }\r\n\r\n private async tryGetResponseBody(response: Response): Promise<string | undefined> {\r\n try {\r\n const body = await response.text();\r\n\r\n return body.length > 0 ? body : undefined;\r\n }\r\n catch {\r\n return undefined;\r\n }\r\n }\r\n\r\n private enrichProbeError(error: unknown, requestUrl: string, response?: ProbeResponseDetails, diagnostics?: ProbeErrorDiagnostics): Error {\r\n const errorToEnrich = this.getErrorObject(error) as ProbeError;\r\n\r\n try {\r\n this.applyProbeErrorMetadata(errorToEnrich, requestUrl, response, diagnostics);\r\n\r\n return errorToEnrich;\r\n }\r\n catch {\r\n const wrappedError = new Error(errorToEnrich.message, { cause: errorToEnrich }) as ProbeError;\r\n\r\n wrappedError.name = errorToEnrich.name;\r\n this.applyProbeErrorMetadata(wrappedError, requestUrl, response, diagnostics);\r\n\r\n return wrappedError;\r\n }\r\n }\r\n\r\n private applyProbeErrorMetadata(errorToEnrich: ProbeError, requestUrl: string, response?: ProbeResponseDetails, diagnostics?: ProbeErrorDiagnostics): void {\r\n const enrichedError = errorToEnrich;\r\n\r\n enrichedError.requestUrl ??= requestUrl;\r\n\r\n if (response !== undefined && enrichedError.response === undefined)\r\n enrichedError.response = response;\r\n\r\n if (diagnostics?.probeRequestMode !== undefined)\r\n enrichedError.probeRequestMode = diagnostics.probeRequestMode;\r\n\r\n if (diagnostics?.probeResponseType !== undefined)\r\n enrichedError.probeResponseType = diagnostics.probeResponseType;\r\n\r\n if (diagnostics?.probeTimeoutInMs !== undefined)\r\n enrichedError.probeTimeoutInMs = diagnostics.probeTimeoutInMs;\r\n\r\n if (diagnostics?.probeDurationInMs !== undefined)\r\n enrichedError.probeDurationInMs = diagnostics.probeDurationInMs;\r\n\r\n if (diagnostics?.probeFailureCategory !== undefined)\r\n enrichedError.probeFailureCategory = diagnostics.probeFailureCategory;\r\n\r\n if (diagnostics?.probeFailureHint !== undefined)\r\n enrichedError.probeFailureHint = diagnostics.probeFailureHint;\r\n\r\n if (diagnostics?.probeFallbackRequestMode !== undefined)\r\n enrichedError.probeFallbackRequestMode = diagnostics.probeFallbackRequestMode;\r\n\r\n if (diagnostics?.probeFallbackSucceeded !== undefined)\r\n enrichedError.probeFallbackSucceeded = diagnostics.probeFallbackSucceeded;\r\n\r\n if (diagnostics?.probeFallbackErrorName !== undefined)\r\n enrichedError.probeFallbackErrorName = diagnostics.probeFallbackErrorName;\r\n\r\n if (diagnostics?.probeFallbackErrorMessage !== undefined)\r\n enrichedError.probeFallbackErrorMessage = diagnostics.probeFallbackErrorMessage;\r\n }\r\n\r\n private getProbeFailureCategory(error: Error): ProbeFailureCategory {\r\n const errorWithMetadata = error as ProbeError;\r\n\r\n if (errorWithMetadata.probeFailureCategory !== undefined)\r\n return errorWithMetadata.probeFailureCategory;\r\n\r\n const errorMessage = error.message.toLowerCase();\r\n const isTimeoutError = error.name === `AbortError` || errorMessage.includes(`timeout`) || errorMessage.includes(`aborted`);\r\n\r\n if (isTimeoutError)\r\n return `Timeout`;\r\n\r\n return `NetworkError`;\r\n }\r\n\r\n private getErrorObject(error: unknown): Error {\r\n if (error instanceof Error)\r\n return error;\r\n\r\n if (typeof error === `string`)\r\n return new Error(error);\r\n\r\n return new Error(`Unknown health monitor probe error`);\r\n }\r\n}\r\n\r\nexport interface OnlineCheckerResult {\r\n isOnline: boolean,\r\n error?: Error,\r\n}\r\n\r\ninterface ProbeResponseDetails {\r\n status?: number,\r\n statusText?: string,\r\n headers?: Record<string, string>,\r\n body?: string,\r\n}\r\n\r\ninterface ProbeRequestOptions {\r\n requestMode?: RequestMode,\r\n opaqueResponseMeansOnline?: boolean,\r\n}\r\n\r\ntype ProbeFailureCategory = `HttpError` | `NetworkError` | `Timeout` | `ReadableResponseBlocked`;\r\n\r\ninterface ProbeErrorDiagnostics {\r\n probeRequestMode?: RequestMode,\r\n probeResponseType?: ResponseType,\r\n probeTimeoutInMs?: number,\r\n probeDurationInMs?: number,\r\n probeFailureCategory?: ProbeFailureCategory,\r\n probeFailureHint?: string,\r\n probeFallbackRequestMode?: RequestMode,\r\n probeFallbackSucceeded?: boolean,\r\n probeFallbackErrorName?: string,\r\n probeFallbackErrorMessage?: string,\r\n}\r\n\r\ninterface ProbeError extends Error {\r\n requestUrl?: string,\r\n response?: ProbeResponseDetails,\r\n probeRequestMode?: RequestMode,\r\n probeResponseType?: ResponseType,\r\n probeTimeoutInMs?: number,\r\n probeDurationInMs?: number,\r\n probeFailureCategory?: ProbeFailureCategory,\r\n probeFailureHint?: string,\r\n probeFallbackRequestMode?: RequestMode,\r\n probeFallbackSucceeded?: boolean,\r\n probeFallbackErrorName?: string,\r\n probeFallbackErrorMessage?: string,\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"webOnlineChecker.js","sourceRoot":"","sources":["../../../../../src/client/healthMonitor/onlineChecker/webOnlineChecker.ts"],"names":[],"mappings":"AAAA,OAAO,aAAsC,MAAM,oBAAoB,CAAC;AAExE,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,aAAa;IAChD,KAAK,CAAC,gBAAgB;QACzB,IAAI,SAAS,EAAE,MAAM,KAAK,KAAK;YAC3B,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,kCAAkC,CAAC,EAAE,CAAC;QAErF,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,0CAA0C,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE;YAClF,WAAW,EAAE,SAAS;YACtB,yBAAyB,EAAE,IAAI;SAClC,CAAC,CAAC;IACP,CAAC;IAEe,KAAK,CAAC,cAAc;QAChC,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC,UAAU,gBAAgB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAElE,OAAO,MAAM,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC,CAAC;IAChH,CAAC;IAEe,KAAK,CAAC,qBAAqB,CAAC,iBAAyB;QACjE,MAAM,UAAU,GAAG,GAAG,iBAAiB,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAE7D,OAAO,MAAM,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC,CAAC;IAChH,CAAC;IAEO,2BAA2B,CAAC,UAAkB;QAClD,IAAI,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC;YACtC,OAAO,iIAAiI,CAAC;QAE7I,IAAI,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC;YACrC,OAAO,yKAAyK,CAAC;QAErL,OAAO,iKAAiK,CAAC;IAC7K,CAAC;IAEO,qBAAqB,CAAC,UAAkB;QAC5C,OAAO,UAAU,CAAC,QAAQ,EAAE,QAAQ,KAAK,QAAQ,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACxF,CAAC;IAEO,oBAAoB,CAAC,UAAkB;QAC3C,IAAI,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM;gBAC5B,OAAO,KAAK,CAAC;YAEjB,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrE,CAAC;QACD,MAAM,CAAC;YACH,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;CACJ","sourcesContent":["import OnlineChecker, { OnlineCheckerResult } from \"./onlineChecker.js\";\n\nexport default class WebOnlineChecker extends OnlineChecker {\n public async isInternetOnline(): Promise<OnlineCheckerResult> {\n if (navigator?.onLine === false)\n return { isOnline: false, error: new Error(`Offline mode detected by browser`) };\n\n return await this.probe(`https://www.gstatic.com/generate_204?d=${Date.now()}`, 4000, {\n requestMode: `no-cors`,\n opaqueResponseMeansOnline: true,\n });\n }\n\n public override async isApiReachable(): Promise<OnlineCheckerResult> {\n const requestUrl = `${this.apiBaseUrl}/heartbeat?d=${Date.now()}`;\n\n return await this.probeReadableWithFallback(requestUrl, 4000, this.getReadableProbeBlockedHint(requestUrl));\n }\n\n public override async isFileServerReachable(fileServerBaseUrl: string): Promise<OnlineCheckerResult> {\n const requestUrl = `${fileServerBaseUrl}/up?d=${Date.now()}`;\n\n return await this.probeReadableWithFallback(requestUrl, 4000, this.getReadableProbeBlockedHint(requestUrl));\n }\n\n private getReadableProbeBlockedHint(requestUrl: string): string {\n if (this.isMixedContentRequest(requestUrl))\n return `Readable browser probe failed while a no-cors fallback succeeded. This usually means the browser blocked mixed-content traffic.`;\n\n if (this.isCrossOriginRequest(requestUrl))\n return `Readable browser probe failed while a no-cors fallback succeeded. This usually means a CORS or browser policy restriction, not a missing HTTP response from the server.`;\n\n return `Readable browser probe failed while a no-cors fallback succeeded. This usually means a browser policy restriction, not a missing HTTP response from the server.`;\n }\n\n private isMixedContentRequest(requestUrl: string): boolean {\n return globalThis.location?.protocol === `https:` && requestUrl.startsWith(`http:`);\n }\n\n private isCrossOriginRequest(requestUrl: string): boolean {\n try {\n if (!globalThis.location?.origin)\n return false;\n\n return new URL(requestUrl).origin !== globalThis.location.origin;\n }\n catch {\n return false;\n }\n }\n}"]}
1
+ {"version":3,"file":"webOnlineChecker.js","sourceRoot":"","sources":["../../../../../src/client/healthMonitor/onlineChecker/webOnlineChecker.ts"],"names":[],"mappings":"AAAA,OAAO,aAAsC,MAAM,oBAAoB,CAAC;AAExE,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,aAAa;IAChD,KAAK,CAAC,gBAAgB;QACzB,IAAI,SAAS,EAAE,MAAM,KAAK,KAAK;YAC3B,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,kCAAkC,CAAC,EAAE,CAAC;QAErF,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,0CAA0C,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE;YAClF,WAAW,EAAE,SAAS;YACtB,yBAAyB,EAAE,IAAI;SAClC,CAAC,CAAC;IACP,CAAC;IAEe,KAAK,CAAC,cAAc;QAChC,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC,UAAU,gBAAgB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAElE,OAAO,MAAM,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC,CAAC;IAChH,CAAC;IAEe,KAAK,CAAC,qBAAqB,CAAC,iBAAyB;QACjE,MAAM,UAAU,GAAG,GAAG,iBAAiB,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAE7D,OAAO,MAAM,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC,CAAC;IAChH,CAAC;IAEO,2BAA2B,CAAC,UAAkB;QAClD,IAAI,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC;YACtC,OAAO,iIAAiI,CAAC;QAE7I,IAAI,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC;YACrC,OAAO,yKAAyK,CAAC;QAErL,OAAO,iKAAiK,CAAC;IAC7K,CAAC;IAEO,qBAAqB,CAAC,UAAkB;QAC5C,OAAO,UAAU,CAAC,QAAQ,EAAE,QAAQ,KAAK,QAAQ,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACxF,CAAC;IAEO,oBAAoB,CAAC,UAAkB;QAC3C,IAAI,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM;gBAC5B,OAAO,KAAK,CAAC;YAEjB,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrE,CAAC;QACD,MAAM,CAAC;YACH,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;CACJ","sourcesContent":["import OnlineChecker, { OnlineCheckerResult } from \"./onlineChecker.js\";\r\n\r\nexport default class WebOnlineChecker extends OnlineChecker {\r\n public async isInternetOnline(): Promise<OnlineCheckerResult> {\r\n if (navigator?.onLine === false)\r\n return { isOnline: false, error: new Error(`Offline mode detected by browser`) };\r\n\r\n return await this.probe(`https://www.gstatic.com/generate_204?d=${Date.now()}`, 4000, {\r\n requestMode: `no-cors`,\r\n opaqueResponseMeansOnline: true,\r\n });\r\n }\r\n\r\n public override async isApiReachable(): Promise<OnlineCheckerResult> {\r\n const requestUrl = `${this.apiBaseUrl}/heartbeat?d=${Date.now()}`;\r\n\r\n return await this.probeReadableWithFallback(requestUrl, 4000, this.getReadableProbeBlockedHint(requestUrl));\r\n }\r\n\r\n public override async isFileServerReachable(fileServerBaseUrl: string): Promise<OnlineCheckerResult> {\r\n const requestUrl = `${fileServerBaseUrl}/up?d=${Date.now()}`;\r\n\r\n return await this.probeReadableWithFallback(requestUrl, 4000, this.getReadableProbeBlockedHint(requestUrl));\r\n }\r\n\r\n private getReadableProbeBlockedHint(requestUrl: string): string {\r\n if (this.isMixedContentRequest(requestUrl))\r\n return `Readable browser probe failed while a no-cors fallback succeeded. This usually means the browser blocked mixed-content traffic.`;\r\n\r\n if (this.isCrossOriginRequest(requestUrl))\r\n return `Readable browser probe failed while a no-cors fallback succeeded. This usually means a CORS or browser policy restriction, not a missing HTTP response from the server.`;\r\n\r\n return `Readable browser probe failed while a no-cors fallback succeeded. This usually means a browser policy restriction, not a missing HTTP response from the server.`;\r\n }\r\n\r\n private isMixedContentRequest(requestUrl: string): boolean {\r\n return globalThis.location?.protocol === `https:` && requestUrl.startsWith(`http:`);\r\n }\r\n\r\n private isCrossOriginRequest(requestUrl: string): boolean {\r\n try {\r\n if (!globalThis.location?.origin)\r\n return false;\r\n\r\n return new URL(requestUrl).origin !== globalThis.location.origin;\r\n }\r\n catch {\r\n return false;\r\n }\r\n }\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferDownloaderHealthMonitor.js","sourceRoot":"","sources":["../../../../src/client/healthMonitor/transferDownloaderHealthMonitor.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,MAAM,wCAAwC,CAAC;AAI3E,OAAO,yBAAyB,MAAM,gCAAgC,CAAC;AAEvE,MAAM,CAAC,OAAO,OAAO,+BAAgC,SAAQ,yBAA4C;IAC3F,+CAA+C,CAAC,SAAkB;QACxE,MAAM,aAAa,GAAI,SAAiD,CAAC,aAAa,CAAC;QAEvF,IAAI,CAAC,aAAa;YACd,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QAEtF,OAAO,aAAa,CAAC;IACzB,CAAC;IAES,2BAA2B;QACjC,OAAO,qBAAqB,CAAC,0BAA0B,CAAC;IAC5D,CAAC;IAES,8BAA8B;QACpC,OAAO,qBAAqB,CAAC,kBAAkB,CAAC;IACpD,CAAC;IAES,6BAA6B,CAAC,+BAAmD;QACvF,OAAO,+BAA+B,EAAE,eAAe,IAAI,CAAC,CAAC;IACjE,CAAC;IAES,mBAAmB;QACzB,OAAO;YACH,0BAA0B,EAAE,IAAI,CAAC,mCAAmC,EAAE,eAAe;YACrF,4BAA4B,EAAE,IAAI,CAAC,mCAAmC,EAAE,qBAAqB;YAC7F,4BAA4B,EAAE,IAAI,CAAC,mCAAmC,EAAE,qBAAqB;YAC7F,oBAAoB,EAAE,IAAI,CAAC,mCAAmC,EAAE,eAAe;YAC/E,gBAAgB,EAAE,IAAI,CAAC,mCAAmC,EAAE,6BAA6B,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,mCAAmC,EAAE,6BAA6B;SAC3L,CAAC;IACN,CAAC;CACJ","sourcesContent":["import TransferDownloadEvent from \"../../downloader/dtos/downloadEvent.js\";\nimport DownloadEventArgs from \"../../downloader/eventArgs/downloadEventArgs.js\";\nimport DownloadMetadataDeterminedEventArgs from \"../../downloader/eventArgs/downloadMetadataDeterminedEventArgs.js\";\nimport HealthMonitorHealthyEventArgs from \"./events/eventArgs/healthMonitorHealthyEventArgs.js\";\nimport TransferHealthMonitorBase from \"./transferHealthMonitorBase.js\";\n\nexport default class TransferDownloaderHealthMonitor extends TransferHealthMonitorBase<DownloadEventArgs> {\n protected getFileServerBaseUrlFromFileServerKnowEventArgs(eventArgs: unknown): string {\n const fileServerUrl = (eventArgs as DownloadMetadataDeterminedEventArgs).fileServerUrl;\n\n if (!fileServerUrl)\n throw new Error(`Event args are not of DownloadMetadataDeterminedEventArgs type`);\n\n return fileServerUrl;\n }\n\n protected getFileServerKnownEventName(): string {\n return TransferDownloadEvent.TransferMetadataDetermined;\n }\n\n protected getTransferProgressedEventName(): string {\n return TransferDownloadEvent.DownloadProgressed;\n }\n\n protected getTransferredBytesTotalCount(currentHistoryLastProgressEvent?: DownloadEventArgs): number {\n return currentHistoryLastProgressEvent?.downloadedBytes ?? 0;\n }\n\n protected getHealthyEventArgs(): HealthMonitorHealthyEventArgs {\n return {\n transferredBytesTotalCount: this.lastProgressEventFromPreviousPeriod?.downloadedBytes,\n averageSpeedInBytesPerSecond: this.lastProgressEventFromPreviousPeriod?.bytesPerSecondAverage,\n currentSpeedInBytesPerSecond: this.lastProgressEventFromPreviousPeriod?.bytesPerSecondCurrent,\n progressInPercentage: this.lastProgressEventFromPreviousPeriod?.progressPercent,\n remainingSeconds: this.lastProgressEventFromPreviousPeriod?.estimatedRemainingTimeSeconds === null ? undefined : this.lastProgressEventFromPreviousPeriod?.estimatedRemainingTimeSeconds,\n };\n }\n}"]}
1
+ {"version":3,"file":"transferDownloaderHealthMonitor.js","sourceRoot":"","sources":["../../../../src/client/healthMonitor/transferDownloaderHealthMonitor.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,MAAM,wCAAwC,CAAC;AAI3E,OAAO,yBAAyB,MAAM,gCAAgC,CAAC;AAEvE,MAAM,CAAC,OAAO,OAAO,+BAAgC,SAAQ,yBAA4C;IAC3F,+CAA+C,CAAC,SAAkB;QACxE,MAAM,aAAa,GAAI,SAAiD,CAAC,aAAa,CAAC;QAEvF,IAAI,CAAC,aAAa;YACd,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QAEtF,OAAO,aAAa,CAAC;IACzB,CAAC;IAES,2BAA2B;QACjC,OAAO,qBAAqB,CAAC,0BAA0B,CAAC;IAC5D,CAAC;IAES,8BAA8B;QACpC,OAAO,qBAAqB,CAAC,kBAAkB,CAAC;IACpD,CAAC;IAES,6BAA6B,CAAC,+BAAmD;QACvF,OAAO,+BAA+B,EAAE,eAAe,IAAI,CAAC,CAAC;IACjE,CAAC;IAES,mBAAmB;QACzB,OAAO;YACH,0BAA0B,EAAE,IAAI,CAAC,mCAAmC,EAAE,eAAe;YACrF,4BAA4B,EAAE,IAAI,CAAC,mCAAmC,EAAE,qBAAqB;YAC7F,4BAA4B,EAAE,IAAI,CAAC,mCAAmC,EAAE,qBAAqB;YAC7F,oBAAoB,EAAE,IAAI,CAAC,mCAAmC,EAAE,eAAe;YAC/E,gBAAgB,EAAE,IAAI,CAAC,mCAAmC,EAAE,6BAA6B,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,mCAAmC,EAAE,6BAA6B;SAC3L,CAAC;IACN,CAAC;CACJ","sourcesContent":["import TransferDownloadEvent from \"../../downloader/dtos/downloadEvent.js\";\r\nimport DownloadEventArgs from \"../../downloader/eventArgs/downloadEventArgs.js\";\r\nimport DownloadMetadataDeterminedEventArgs from \"../../downloader/eventArgs/downloadMetadataDeterminedEventArgs.js\";\r\nimport HealthMonitorHealthyEventArgs from \"./events/eventArgs/healthMonitorHealthyEventArgs.js\";\r\nimport TransferHealthMonitorBase from \"./transferHealthMonitorBase.js\";\r\n\r\nexport default class TransferDownloaderHealthMonitor extends TransferHealthMonitorBase<DownloadEventArgs> {\r\n protected getFileServerBaseUrlFromFileServerKnowEventArgs(eventArgs: unknown): string {\r\n const fileServerUrl = (eventArgs as DownloadMetadataDeterminedEventArgs).fileServerUrl;\r\n\r\n if (!fileServerUrl)\r\n throw new Error(`Event args are not of DownloadMetadataDeterminedEventArgs type`);\r\n\r\n return fileServerUrl;\r\n }\r\n\r\n protected getFileServerKnownEventName(): string {\r\n return TransferDownloadEvent.TransferMetadataDetermined;\r\n }\r\n\r\n protected getTransferProgressedEventName(): string {\r\n return TransferDownloadEvent.DownloadProgressed;\r\n }\r\n\r\n protected getTransferredBytesTotalCount(currentHistoryLastProgressEvent?: DownloadEventArgs): number {\r\n return currentHistoryLastProgressEvent?.downloadedBytes ?? 0;\r\n }\r\n\r\n protected getHealthyEventArgs(): HealthMonitorHealthyEventArgs {\r\n return {\r\n transferredBytesTotalCount: this.lastProgressEventFromPreviousPeriod?.downloadedBytes,\r\n averageSpeedInBytesPerSecond: this.lastProgressEventFromPreviousPeriod?.bytesPerSecondAverage,\r\n currentSpeedInBytesPerSecond: this.lastProgressEventFromPreviousPeriod?.bytesPerSecondCurrent,\r\n progressInPercentage: this.lastProgressEventFromPreviousPeriod?.progressPercent,\r\n remainingSeconds: this.lastProgressEventFromPreviousPeriod?.estimatedRemainingTimeSeconds === null ? undefined : this.lastProgressEventFromPreviousPeriod?.estimatedRemainingTimeSeconds,\r\n };\r\n }\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferHealthMonitorBase.js","sourceRoot":"","sources":["../../../../src/client/healthMonitor/transferHealthMonitorBase.ts"],"names":[],"mappings":"AACA,OAAO,0BAA0B,MAAM,wCAAwC,CAAC;AAKhF,MAAM,CAAC,OAAO,OAAgB,yBAAyB;IAC1C,cAAc,CAAgB;IAC9B,qBAAqB,CAAe;IAE7C,oBAAoB,CAAS;IAE7B,QAAQ,CAA4C;IAEpD,cAAc,CAAqB;IAEnC,6BAA6B,GAAqC,EAAE,CAAC;IAE3D,mCAAmC,CAAgB;IAE7D,mBAAmB,GAAG,IAAI,CAAC;IAC3B,UAAU,GAAG,KAAK,CAAC;IACnB,aAAa,GAAG,CAAC,CAAC;IAElB,YAAY,aAA4B,EAAE,oBAAkC,EAAE,mBAAmB,GAAG,MAAM;QACtG,IAAI,CAAC,aAAa;YACd,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACrD,IAAI,CAAC,oBAAoB;YACrB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAEpD,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,qBAAqB,GAAG,oBAAoB,CAAC;QAElD,IAAI,CAAC,oBAAoB,GAAG,mBAAmB,CAAC;IACpD,CAAC;IAED,KAAK;QACD,IAAI,IAAI,CAAC,UAAU;YACf,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAEzD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,CAAC,gCAAgC,EAAE,CAAC;QAExC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC;IAEO,UAAU;QACd,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC;QACxC,IAAI,CAAC,mCAAmC,GAAG,SAAS,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;IACpC,CAAC;IAED,IAAI;QACA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAExB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE5B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAE1B,IAAI,CAAC,oCAAoC,EAAE,CAAC;IAChD,CAAC;IAEO,gCAAgC;QACpC,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAClH,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC5H,CAAC;IAEO,oCAAoC;QACxC,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACrH,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC/H,CAAC;IAKO,2BAA2B,GAAG,CAAC,SAAkB,EAAE,EAAE;QACzD,IAAI,CAAC,IAAI,CAAC,UAAU;YAChB,OAAO;QAEX,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,+CAA+C,CAAC,SAAS,CAAC,CAAC;IAC1F,CAAC,CAAC;IAIM,8BAA8B,GAAG,CAAC,SAAY,EAAE,EAAE;QACtD,IAAI,CAAC,IAAI,CAAC,UAAU;YAChB,OAAO;QAEX,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAEzE,IAAI,IAAI,CAAC,mBAAmB;YACxB,OAAO;QAEX,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAErD,IAAI,CAAC,SAAS;YACV,OAAO;QAEX,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC;IAEM,kBAAkB,CAAC,oBAAuB;QAC9C,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC;QACxC,IAAI,CAAC,mCAAmC,GAAG,oBAAoB,CAAC;QAEhE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAEhC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC;IAEO,WAAW,GAAG,KAAK,EAAE,YAAoB,EAAiB,EAAE;QAChE,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;YACtC,OAAO;QAEX,MAAM,OAAO,GAAG,IAAI,CAAC,6BAA6B,CAAC;QACnD,MAAM,8BAA8B,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAE9G,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,8BAA8B,CAAC,CAAC;QAE1E,IAAI,CAAC,mCAAmC,GAAG,8BAA8B,IAAI,IAAI,CAAC,mCAAmC,CAAC;QAEtH,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAChC,IAAI,CAAC,aAAa,EAAE,CAAC;QACzB,CAAC;aACI,CAAC;YACF,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;YACjC,MAAM,IAAI,CAAC,yCAAyC,CAAC,YAAY,CAAC,CAAC;QACvE,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;YACtC,OAAO;QAEX,IAAI,CAAC,iCAAiC,EAAE,CAAC;QAEzC,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEM,mBAAmB,CAAC,YAAoB;QAC5C,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE5B,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;YACtC,OAAO;QAEX,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAChG,CAAC;IAEO,kBAAkB,CAAC,YAAoB;QAC3C,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,KAAK,YAAY,CAAC;IAClE,CAAC;IAEO,sBAAsB;QAC1B,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;IAC5B,CAAC;IAEO,iCAAiC;QACrC,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC;IAC5C,CAAC;IAEO,kBAAkB,CAAC,+BAA8C;QACrE,MAAM,iCAAiC,GAAG,IAAI,CAAC,6BAA6B,CAAC,+BAA+B,CAAC,CAAC;QAC9G,MAAM,wCAAwC,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAE9H,MAAM,mBAAmB,GAAG,iCAAiC,GAAG,wCAAwC,CAAC;QAEzG,OAAO,mBAAmB,GAAG,CAAC,CAAC;IACnC,CAAC;IAIO,KAAK,CAAC,yCAAyC,CAAC,YAAoB;QACxE,IAAI,CAAC,oCAAoC,EAAE,CAAC;QAE5C,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,mBAAmB,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;QAEhH,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;YACtC,OAAO;QAEX,IAAI,gBAAgB;YAChB,IAAI,CAAC,2CAA2C,EAAE,CAAC;aAClD,CAAC;YACF,IAAI,CAAC,+BAA+B,CAAC,mBAAmB,CAAC,CAAC;YAC1D,OAAO;QACX,CAAC;QAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;QAEhE,MAAM,yBAAyB,GAAG,IAAI,CAAC,cAAc;YACjD,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC;YAChE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEjC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM,kBAAkB,CAAC;QAClF,MAAM,wBAAwB,GAAG,MAAM,yBAAyB,CAAC;QAEjE,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;YACtC,OAAO;QAEX,IAAI,WAAW,IAAI,wBAAwB,EAAE,QAAQ,KAAK,IAAI;YAC1D,IAAI,CAAC,0BAA0B,EAAE,CAAC;aACjC,CAAC;YACF,MAAM,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,wBAAwB,CAAC,CAAC;YAE/E,IAAI,CAAC,yCAAyC,CAAC,gBAAgB,EAAE,wBAAwB,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;QACtH,CAAC;IACL,CAAC;IAEO,sBAAsB,CAAC,wBAAyD;QACpF,IAAI,CAAC,wBAAwB;YACzB,OAAO,SAAS,CAAC;QAErB,OAAO,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IAC9D,CAAC;IAEO,aAAa;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACnF,CAAC;IAIO,oCAAoC;QACxC,MAAM,SAAS,GAAoC;YAC/C,MAAM,EAAE;gBACJ,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;gBAChC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;gBAC3B,UAAU,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;aACrC;YACD,GAAG,IAAI,CAAC,mCAAmC;SAC9C,CAAC;QAEF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACrF,CAAC;IAEO,2CAA2C;QAC/C,MAAM,SAAS,GAAoC;YAC/C,MAAM,EAAE;gBACJ,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAC1B,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;gBAC3B,UAAU,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;aACrC;YACD,GAAG,IAAI,CAAC,mCAAmC;SAC9C,CAAC;QAEF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACrF,CAAC;IAEO,+BAA+B,CAAC,KAAa;QACjD,MAAM,SAAS,GAAoC;YAC/C,MAAM,EAAE;gBACJ,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE;gBACpC,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;gBAC1B,UAAU,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;aACpC;YACD,GAAG,IAAI,CAAC,mCAAmC;SAC9C,CAAC;QAEF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACrF,CAAC;IAEO,yCAAyC,CAAC,gBAA4C,EAAE,eAAkC,EAAE,QAA2B;QAC3J,MAAM,SAAS,GAAoC;YAC/C,MAAM,EAAE;gBACJ,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAC1B,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;gBACvE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE;aAC3G;YACD,GAAG,IAAI,CAAC,mCAAmC;SAC9C,CAAC;QAEF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACrF,CAAC;IAEO,0BAA0B;QAC9B,MAAM,SAAS,GAAoC;YAC/C,MAAM,EAAE;gBACJ,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAC1B,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBACrB,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;aAC/B;YACD,GAAG,IAAI,CAAC,mCAAmC;SAC9C,CAAC;QAEF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACrF,CAAC;IAID,gBAAgB,CAAC,SAAiB,EAAE,OAA4B;QAC5D,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;CACJ","sourcesContent":["import type EventsEngine from \"../../utils/events/eventsEngine.js\";\nimport TransferHealthMonitorEvent from \"./events/transferHealthMonitorEvent.js\";\nimport HealthMonitorHealthyEventArgs from \"./events/eventArgs/healthMonitorHealthyEventArgs.js\";\nimport HealthMonitorUnhealthyEventArgs from \"./events/eventArgs/healthMonitorUnhealthyEventArgs.js\";\nimport OnlineChecker, { OnlineCheckerResult } from \"./onlineChecker/onlineChecker.js\";\n\nexport default abstract class TransferHealthMonitorBase<T> {\n readonly #onlineChecker: OnlineChecker;\n readonly #transferEventsEngine: EventsEngine;\n\n #healthCheckInterval: number;\n\n #timeout: ReturnType<typeof setTimeout> | undefined;\n\n #fileServerUrl: string | undefined;\n\n #currentPeriodProgressHistory: { time: number, eventArgs: T }[] = [];\n\n protected lastProgressEventFromPreviousPeriod: T | undefined;\n\n #isCurrentlyHealthy = true;\n #isRunning = false;\n #runningToken = 0;\n\n constructor(onlineChecker: OnlineChecker, transferEventsEngine: EventsEngine, healthCheckInterval = 15_000) {\n if (!onlineChecker)\n throw new Error(`Online checker can't be empty`);\n if (!transferEventsEngine)\n throw new Error(`Events engine can't be empty`);\n\n this.#onlineChecker = onlineChecker;\n this.#transferEventsEngine = transferEventsEngine;\n\n this.#healthCheckInterval = healthCheckInterval;\n }\n\n start() {\n if (this.#isRunning)\n throw new Error(`Health Monitor is already running`);\n\n this.#isRunning = true;\n\n this.resetState();\n\n this.subscribeToTransferRunningEvents();\n\n this.createNextRunningToken();\n\n this.scheduleHealthCheck(this.#runningToken);\n }\n\n private resetState() {\n this.#currentPeriodProgressHistory = [];\n this.lastProgressEventFromPreviousPeriod = undefined;\n this.#timeout = undefined;\n this.#isCurrentlyHealthy = true;\n }\n\n stop() {\n this.#isRunning = false;\n\n this.createNextRunningToken();\n\n clearTimeout(this.#timeout);\n\n this.#timeout = undefined;\n\n this.unsubscribeFromTransferRunningEvents();\n }\n\n private subscribeToTransferRunningEvents() {\n this.#transferEventsEngine.addEventListener(this.getFileServerKnownEventName(), this.fileServerKnownEventHandler);\n this.#transferEventsEngine.addEventListener(this.getTransferProgressedEventName(), this.transferProgressedEventHandler);\n }\n\n private unsubscribeFromTransferRunningEvents() {\n this.#transferEventsEngine.removeEventListener(this.getFileServerKnownEventName(), this.fileServerKnownEventHandler);\n this.#transferEventsEngine.removeEventListener(this.getTransferProgressedEventName(), this.transferProgressedEventHandler);\n }\n\n protected abstract getFileServerKnownEventName(): string;\n protected abstract getTransferProgressedEventName(): string;\n\n private fileServerKnownEventHandler = (eventArgs: unknown) => {\n if (!this.#isRunning)\n return;\n\n this.#fileServerUrl = this.getFileServerBaseUrlFromFileServerKnowEventArgs(eventArgs);\n };\n\n protected abstract getFileServerBaseUrlFromFileServerKnowEventArgs(eventArgs: unknown): string;\n\n private transferProgressedEventHandler = (eventArgs: T) => {\n if (!this.#isRunning)\n return;\n\n this.#currentPeriodProgressHistory.push({ time: Date.now(), eventArgs });\n\n if (this.#isCurrentlyHealthy)\n return;\n\n const isHealthy = this.determineIsHealthy(eventArgs);\n\n if (!isHealthy)\n return;\n\n this.notifyHealthy();\n this.restartHealthCheck(eventArgs);\n };\n\n private restartHealthCheck(currentProgressEvent: T) {\n this.#currentPeriodProgressHistory = [];\n this.lastProgressEventFromPreviousPeriod = currentProgressEvent;\n\n this.#isCurrentlyHealthy = true;\n\n this.scheduleHealthCheck(this.#runningToken);\n }\n\n private checkHealth = async (runningToken: number): Promise<void> => {\n if (!this.isCurrentRunActive(runningToken))\n return;\n\n const history = this.#currentPeriodProgressHistory;\n const currentPeriodLastProgressEvent = history.length > 0 ? history[history.length - 1].eventArgs : undefined;\n\n const isHealthy = this.determineIsHealthy(currentPeriodLastProgressEvent);\n\n this.lastProgressEventFromPreviousPeriod = currentPeriodLastProgressEvent || this.lastProgressEventFromPreviousPeriod;\n\n if (isHealthy) {\n this.#isCurrentlyHealthy = true;\n this.notifyHealthy();\n }\n else {\n this.#isCurrentlyHealthy = false;\n await this.figureOutUnhealthyReasonWithNotifications(runningToken);\n }\n\n if (!this.isCurrentRunActive(runningToken))\n return;\n\n this.clearCurrentPeriodProgressHistory();\n\n this.scheduleHealthCheck(runningToken);\n };\n\n private scheduleHealthCheck(runningToken: number): void {\n clearTimeout(this.#timeout);\n\n if (!this.isCurrentRunActive(runningToken))\n return;\n\n this.#timeout = setTimeout(() => this.checkHealth(runningToken), this.#healthCheckInterval);\n }\n\n private isCurrentRunActive(runningToken: number): boolean {\n return this.#isRunning && this.#runningToken === runningToken;\n }\n\n private createNextRunningToken() {\n this.#runningToken += 1;\n }\n\n private clearCurrentPeriodProgressHistory() {\n this.#currentPeriodProgressHistory = [];\n }\n\n private determineIsHealthy(currentHistoryLastProgressEvent: T | undefined) {\n const currentTransferredBytesTotalCount = this.getTransferredBytesTotalCount(currentHistoryLastProgressEvent);\n const previousPeriodTransferredBytesTotalCount = this.getTransferredBytesTotalCount(this.lastProgressEventFromPreviousPeriod);\n\n const bytesSentThisPeriod = currentTransferredBytesTotalCount - previousPeriodTransferredBytesTotalCount;\n\n return bytesSentThisPeriod > 0;\n }\n\n protected abstract getTransferredBytesTotalCount(currentHistoryLastProgressEvent?: T): number;\n\n private async figureOutUnhealthyReasonWithNotifications(runningToken: number): Promise<void> {\n this.notifyStartedCheckingUnhealthyReason();\n\n const { isOnline: isInternetOnline, error: internetOnlineError } = await this.#onlineChecker.isInternetOnline();\n\n if (!this.isCurrentRunActive(runningToken))\n return;\n\n if (isInternetOnline)\n this.notifyUnhealthyInternetOkRestCheckingReason();\n else {\n this.notifyUnhealthyNoInternetReason(internetOnlineError);\n return;\n }\n\n const isApiOnlinePromise = this.#onlineChecker.isApiReachable();\n\n const isFileServerOnlinePromise = this.#fileServerUrl\n ? this.#onlineChecker.isFileServerReachable(this.#fileServerUrl)\n : Promise.resolve(undefined);\n\n const { isOnline: isApiOnline, error: apiOnlineError } = await isApiOnlinePromise;\n const isFileServerOnlineResult = await isFileServerOnlinePromise;\n\n if (!this.isCurrentRunActive(runningToken))\n return;\n\n if (isApiOnline && isFileServerOnlineResult?.isOnline === true)\n this.notifyUnhealthyAllOkReason();\n else {\n const fileServerStatus = this.isOnlineResultToStatus(isFileServerOnlineResult);\n\n this.notifyUnhealthyApiOrFileServerErrorReason(fileServerStatus, isFileServerOnlineResult?.error, apiOnlineError);\n }\n }\n\n private isOnlineResultToStatus(isFileServerOnlineResult: OnlineCheckerResult | undefined): `Ok` | `Error` | `Unknown` {\n if (!isFileServerOnlineResult)\n return `Unknown`;\n\n return isFileServerOnlineResult.isOnline ? `Ok` : `Error`;\n }\n\n private notifyHealthy() {\n const eventArgs = this.getHealthyEventArgs();\n this.#transferEventsEngine.emit(TransferHealthMonitorEvent.Healthy, eventArgs);\n }\n\n protected abstract getHealthyEventArgs(): HealthMonitorHealthyEventArgs;\n\n private notifyStartedCheckingUnhealthyReason() {\n const eventArgs: HealthMonitorUnhealthyEventArgs = {\n reason: {\n internet: { status: `Checking` },\n api: { status: `Checking` },\n fileServer: { status: `Checking` },\n },\n ...this.lastProgressEventFromPreviousPeriod,\n };\n\n this.#transferEventsEngine.emit(TransferHealthMonitorEvent.Unhealthy, eventArgs);\n }\n\n private notifyUnhealthyInternetOkRestCheckingReason() {\n const eventArgs: HealthMonitorUnhealthyEventArgs = {\n reason: {\n internet: { status: `Ok` },\n api: { status: `Checking` },\n fileServer: { status: `Checking` },\n },\n ...this.lastProgressEventFromPreviousPeriod,\n };\n\n this.#transferEventsEngine.emit(TransferHealthMonitorEvent.Unhealthy, eventArgs);\n }\n\n private notifyUnhealthyNoInternetReason(error?: Error) {\n const eventArgs: HealthMonitorUnhealthyEventArgs = {\n reason: {\n internet: { status: `Error`, error },\n api: { status: `Unknown` },\n fileServer: { status: `Unknown` },\n },\n ...this.lastProgressEventFromPreviousPeriod,\n };\n\n this.#transferEventsEngine.emit(TransferHealthMonitorEvent.Unhealthy, eventArgs);\n }\n\n private notifyUnhealthyApiOrFileServerErrorReason(fileServerStatus: `Ok` | `Error` | `Unknown`, fileServerError: Error | undefined, apiError: Error | undefined) {\n const eventArgs: HealthMonitorUnhealthyEventArgs = {\n reason: {\n internet: { status: `Ok` },\n api: apiError ? { status: `Error`, error: apiError } : { status: `Ok` },\n fileServer: fileServerError ? { status: `Error`, error: fileServerError } : { status: fileServerStatus },\n },\n ...this.lastProgressEventFromPreviousPeriod,\n };\n\n this.#transferEventsEngine.emit(TransferHealthMonitorEvent.Unhealthy, eventArgs);\n }\n\n private notifyUnhealthyAllOkReason() {\n const eventArgs: HealthMonitorUnhealthyEventArgs = {\n reason: {\n internet: { status: `Ok` },\n api: { status: `Ok` },\n fileServer: { status: `Ok` },\n },\n ...this.lastProgressEventFromPreviousPeriod,\n };\n\n this.#transferEventsEngine.emit(TransferHealthMonitorEvent.Unhealthy, eventArgs);\n }\n\n addEventListener(eventName: TransferHealthMonitorEvent.Healthy, handler: (event: HealthMonitorHealthyEventArgs) => void): void\n addEventListener(eventName: TransferHealthMonitorEvent.Unhealthy, handler: (event: HealthMonitorUnhealthyEventArgs) => void): void\n addEventListener(eventName: string, handler: (arg?: any) => void): void {\n this.#transferEventsEngine.addEventListener(eventName, handler);\n }\n}"]}
1
+ {"version":3,"file":"transferHealthMonitorBase.js","sourceRoot":"","sources":["../../../../src/client/healthMonitor/transferHealthMonitorBase.ts"],"names":[],"mappings":"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","sourcesContent":["import type EventsEngine from \"../../utils/events/eventsEngine.js\";\r\nimport TransferHealthMonitorEvent from \"./events/transferHealthMonitorEvent.js\";\r\nimport HealthMonitorHealthyEventArgs from \"./events/eventArgs/healthMonitorHealthyEventArgs.js\";\r\nimport HealthMonitorUnhealthyEventArgs from \"./events/eventArgs/healthMonitorUnhealthyEventArgs.js\";\r\nimport OnlineChecker, { OnlineCheckerResult } from \"./onlineChecker/onlineChecker.js\";\r\n\r\nexport default abstract class TransferHealthMonitorBase<T> {\r\n readonly #onlineChecker: OnlineChecker;\r\n readonly #transferEventsEngine: EventsEngine;\r\n\r\n #healthCheckInterval: number;\r\n\r\n #timeout: ReturnType<typeof setTimeout> | undefined;\r\n\r\n #fileServerUrl: string | undefined;\r\n\r\n #currentPeriodProgressHistory: { time: number, eventArgs: T }[] = [];\r\n\r\n protected lastProgressEventFromPreviousPeriod: T | undefined;\r\n\r\n #isCurrentlyHealthy = true;\r\n #isRunning = false;\r\n #runningToken = 0;\r\n\r\n constructor(onlineChecker: OnlineChecker, transferEventsEngine: EventsEngine, healthCheckInterval = 15_000) {\r\n if (!onlineChecker)\r\n throw new Error(`Online checker can't be empty`);\r\n if (!transferEventsEngine)\r\n throw new Error(`Events engine can't be empty`);\r\n\r\n this.#onlineChecker = onlineChecker;\r\n this.#transferEventsEngine = transferEventsEngine;\r\n\r\n this.#healthCheckInterval = healthCheckInterval;\r\n }\r\n\r\n start() {\r\n if (this.#isRunning)\r\n throw new Error(`Health Monitor is already running`);\r\n\r\n this.#isRunning = true;\r\n\r\n this.resetState();\r\n\r\n this.subscribeToTransferRunningEvents();\r\n\r\n this.createNextRunningToken();\r\n\r\n this.scheduleHealthCheck(this.#runningToken);\r\n }\r\n\r\n private resetState() {\r\n this.#currentPeriodProgressHistory = [];\r\n this.lastProgressEventFromPreviousPeriod = undefined;\r\n this.#timeout = undefined;\r\n this.#isCurrentlyHealthy = true;\r\n }\r\n\r\n stop() {\r\n this.#isRunning = false;\r\n\r\n this.createNextRunningToken();\r\n\r\n clearTimeout(this.#timeout);\r\n\r\n this.#timeout = undefined;\r\n\r\n this.unsubscribeFromTransferRunningEvents();\r\n }\r\n\r\n private subscribeToTransferRunningEvents() {\r\n this.#transferEventsEngine.addEventListener(this.getFileServerKnownEventName(), this.fileServerKnownEventHandler);\r\n this.#transferEventsEngine.addEventListener(this.getTransferProgressedEventName(), this.transferProgressedEventHandler);\r\n }\r\n\r\n private unsubscribeFromTransferRunningEvents() {\r\n this.#transferEventsEngine.removeEventListener(this.getFileServerKnownEventName(), this.fileServerKnownEventHandler);\r\n this.#transferEventsEngine.removeEventListener(this.getTransferProgressedEventName(), this.transferProgressedEventHandler);\r\n }\r\n\r\n protected abstract getFileServerKnownEventName(): string;\r\n protected abstract getTransferProgressedEventName(): string;\r\n\r\n private fileServerKnownEventHandler = (eventArgs: unknown) => {\r\n if (!this.#isRunning)\r\n return;\r\n\r\n this.#fileServerUrl = this.getFileServerBaseUrlFromFileServerKnowEventArgs(eventArgs);\r\n };\r\n\r\n protected abstract getFileServerBaseUrlFromFileServerKnowEventArgs(eventArgs: unknown): string;\r\n\r\n private transferProgressedEventHandler = (eventArgs: T) => {\r\n if (!this.#isRunning)\r\n return;\r\n\r\n this.#currentPeriodProgressHistory.push({ time: Date.now(), eventArgs });\r\n\r\n if (this.#isCurrentlyHealthy)\r\n return;\r\n\r\n const isHealthy = this.determineIsHealthy(eventArgs);\r\n\r\n if (!isHealthy)\r\n return;\r\n\r\n this.notifyHealthy();\r\n this.restartHealthCheck(eventArgs);\r\n };\r\n\r\n private restartHealthCheck(currentProgressEvent: T) {\r\n this.#currentPeriodProgressHistory = [];\r\n this.lastProgressEventFromPreviousPeriod = currentProgressEvent;\r\n\r\n this.#isCurrentlyHealthy = true;\r\n\r\n this.scheduleHealthCheck(this.#runningToken);\r\n }\r\n\r\n private checkHealth = async (runningToken: number): Promise<void> => {\r\n if (!this.isCurrentRunActive(runningToken))\r\n return;\r\n\r\n const history = this.#currentPeriodProgressHistory;\r\n const currentPeriodLastProgressEvent = history.length > 0 ? history[history.length - 1].eventArgs : undefined;\r\n\r\n const isHealthy = this.determineIsHealthy(currentPeriodLastProgressEvent);\r\n\r\n this.lastProgressEventFromPreviousPeriod = currentPeriodLastProgressEvent || this.lastProgressEventFromPreviousPeriod;\r\n\r\n if (isHealthy) {\r\n this.#isCurrentlyHealthy = true;\r\n this.notifyHealthy();\r\n }\r\n else {\r\n this.#isCurrentlyHealthy = false;\r\n await this.figureOutUnhealthyReasonWithNotifications(runningToken);\r\n }\r\n\r\n if (!this.isCurrentRunActive(runningToken))\r\n return;\r\n\r\n this.clearCurrentPeriodProgressHistory();\r\n\r\n this.scheduleHealthCheck(runningToken);\r\n };\r\n\r\n private scheduleHealthCheck(runningToken: number): void {\r\n clearTimeout(this.#timeout);\r\n\r\n if (!this.isCurrentRunActive(runningToken))\r\n return;\r\n\r\n this.#timeout = setTimeout(() => this.checkHealth(runningToken), this.#healthCheckInterval);\r\n }\r\n\r\n private isCurrentRunActive(runningToken: number): boolean {\r\n return this.#isRunning && this.#runningToken === runningToken;\r\n }\r\n\r\n private createNextRunningToken() {\r\n this.#runningToken += 1;\r\n }\r\n\r\n private clearCurrentPeriodProgressHistory() {\r\n this.#currentPeriodProgressHistory = [];\r\n }\r\n\r\n private determineIsHealthy(currentHistoryLastProgressEvent: T | undefined) {\r\n const currentTransferredBytesTotalCount = this.getTransferredBytesTotalCount(currentHistoryLastProgressEvent);\r\n const previousPeriodTransferredBytesTotalCount = this.getTransferredBytesTotalCount(this.lastProgressEventFromPreviousPeriod);\r\n\r\n const bytesSentThisPeriod = currentTransferredBytesTotalCount - previousPeriodTransferredBytesTotalCount;\r\n\r\n return bytesSentThisPeriod > 0;\r\n }\r\n\r\n protected abstract getTransferredBytesTotalCount(currentHistoryLastProgressEvent?: T): number;\r\n\r\n private async figureOutUnhealthyReasonWithNotifications(runningToken: number): Promise<void> {\r\n this.notifyStartedCheckingUnhealthyReason();\r\n\r\n const { isOnline: isInternetOnline, error: internetOnlineError } = await this.#onlineChecker.isInternetOnline();\r\n\r\n if (!this.isCurrentRunActive(runningToken))\r\n return;\r\n\r\n if (isInternetOnline)\r\n this.notifyUnhealthyInternetOkRestCheckingReason();\r\n else {\r\n this.notifyUnhealthyNoInternetReason(internetOnlineError);\r\n return;\r\n }\r\n\r\n const isApiOnlinePromise = this.#onlineChecker.isApiReachable();\r\n\r\n const isFileServerOnlinePromise = this.#fileServerUrl\r\n ? this.#onlineChecker.isFileServerReachable(this.#fileServerUrl)\r\n : Promise.resolve(undefined);\r\n\r\n const { isOnline: isApiOnline, error: apiOnlineError } = await isApiOnlinePromise;\r\n const isFileServerOnlineResult = await isFileServerOnlinePromise;\r\n\r\n if (!this.isCurrentRunActive(runningToken))\r\n return;\r\n\r\n if (isApiOnline && isFileServerOnlineResult?.isOnline === true)\r\n this.notifyUnhealthyAllOkReason();\r\n else {\r\n const fileServerStatus = this.isOnlineResultToStatus(isFileServerOnlineResult);\r\n\r\n this.notifyUnhealthyApiOrFileServerErrorReason(fileServerStatus, isFileServerOnlineResult?.error, apiOnlineError);\r\n }\r\n }\r\n\r\n private isOnlineResultToStatus(isFileServerOnlineResult: OnlineCheckerResult | undefined): `Ok` | `Error` | `Unknown` {\r\n if (!isFileServerOnlineResult)\r\n return `Unknown`;\r\n\r\n return isFileServerOnlineResult.isOnline ? `Ok` : `Error`;\r\n }\r\n\r\n private notifyHealthy() {\r\n const eventArgs = this.getHealthyEventArgs();\r\n this.#transferEventsEngine.emit(TransferHealthMonitorEvent.Healthy, eventArgs);\r\n }\r\n\r\n protected abstract getHealthyEventArgs(): HealthMonitorHealthyEventArgs;\r\n\r\n private notifyStartedCheckingUnhealthyReason() {\r\n const eventArgs: HealthMonitorUnhealthyEventArgs = {\r\n reason: {\r\n internet: { status: `Checking` },\r\n api: { status: `Checking` },\r\n fileServer: { status: `Checking` },\r\n },\r\n ...this.lastProgressEventFromPreviousPeriod,\r\n };\r\n\r\n this.#transferEventsEngine.emit(TransferHealthMonitorEvent.Unhealthy, eventArgs);\r\n }\r\n\r\n private notifyUnhealthyInternetOkRestCheckingReason() {\r\n const eventArgs: HealthMonitorUnhealthyEventArgs = {\r\n reason: {\r\n internet: { status: `Ok` },\r\n api: { status: `Checking` },\r\n fileServer: { status: `Checking` },\r\n },\r\n ...this.lastProgressEventFromPreviousPeriod,\r\n };\r\n\r\n this.#transferEventsEngine.emit(TransferHealthMonitorEvent.Unhealthy, eventArgs);\r\n }\r\n\r\n private notifyUnhealthyNoInternetReason(error?: Error) {\r\n const eventArgs: HealthMonitorUnhealthyEventArgs = {\r\n reason: {\r\n internet: { status: `Error`, error },\r\n api: { status: `Unknown` },\r\n fileServer: { status: `Unknown` },\r\n },\r\n ...this.lastProgressEventFromPreviousPeriod,\r\n };\r\n\r\n this.#transferEventsEngine.emit(TransferHealthMonitorEvent.Unhealthy, eventArgs);\r\n }\r\n\r\n private notifyUnhealthyApiOrFileServerErrorReason(fileServerStatus: `Ok` | `Error` | `Unknown`, fileServerError: Error | undefined, apiError: Error | undefined) {\r\n const eventArgs: HealthMonitorUnhealthyEventArgs = {\r\n reason: {\r\n internet: { status: `Ok` },\r\n api: apiError ? { status: `Error`, error: apiError } : { status: `Ok` },\r\n fileServer: fileServerError ? { status: `Error`, error: fileServerError } : { status: fileServerStatus },\r\n },\r\n ...this.lastProgressEventFromPreviousPeriod,\r\n };\r\n\r\n this.#transferEventsEngine.emit(TransferHealthMonitorEvent.Unhealthy, eventArgs);\r\n }\r\n\r\n private notifyUnhealthyAllOkReason() {\r\n const eventArgs: HealthMonitorUnhealthyEventArgs = {\r\n reason: {\r\n internet: { status: `Ok` },\r\n api: { status: `Ok` },\r\n fileServer: { status: `Ok` },\r\n },\r\n ...this.lastProgressEventFromPreviousPeriod,\r\n };\r\n\r\n this.#transferEventsEngine.emit(TransferHealthMonitorEvent.Unhealthy, eventArgs);\r\n }\r\n\r\n addEventListener(eventName: TransferHealthMonitorEvent.Healthy, handler: (event: HealthMonitorHealthyEventArgs) => void): void\r\n addEventListener(eventName: TransferHealthMonitorEvent.Unhealthy, handler: (event: HealthMonitorUnhealthyEventArgs) => void): void\r\n addEventListener(eventName: string, handler: (arg?: any) => void): void {\r\n this.#transferEventsEngine.addEventListener(eventName, handler);\r\n }\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploaderHealthMonitor.js","sourceRoot":"","sources":["../../../../src/client/healthMonitor/transferUploaderHealthMonitor.ts"],"names":[],"mappings":"AAEA,OAAO,mBAAmB,MAAM,uCAAuC,CAAC;AAExE,OAAO,yBAAyB,MAAM,gCAAgC,CAAC;AAEvE,MAAM,CAAC,OAAO,OAAO,6BAA8B,SAAQ,yBAA4D;IACzG,+CAA+C,CAAC,SAAkB;QACxE,MAAM,aAAa,GAAI,SAAiD,CAAC,aAAa,CAAC;QACvF,IAAI,CAAC,aAAa;YACd,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QAEtF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;QAExD,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAES,2BAA2B;QACjC,OAAO,mBAAmB,CAAC,0BAA0B,CAAC;IAC1D,CAAC;IAES,8BAA8B;QACpC,OAAO,mBAAmB,CAAC,kBAAkB,CAAC;IAClD,CAAC;IAES,6BAA6B,CAAC,+BAAmE;QACvG,OAAO,+BAA+B,EAAE,uBAAuB,IAAI,CAAC,CAAC;IACzE,CAAC;IAES,mBAAmB;QACzB,OAAO;YACH,0BAA0B,EAAE,IAAI,CAAC,mCAAmC,EAAE,uBAAuB;YAC7F,4BAA4B,EAAE,IAAI,CAAC,mCAAmC,EAAE,4BAA4B;YACpG,4BAA4B,EAAE,IAAI,CAAC,mCAAmC,EAAE,4BAA4B;YACpG,oBAAoB,EAAE,IAAI,CAAC,mCAAmC,EAAE,oBAAoB;YACpF,gBAAgB,EAAE,IAAI,CAAC,mCAAmC,EAAE,gBAAgB;SAC/E,CAAC;IACN,CAAC;CACJ","sourcesContent":["import { TransferMetadataDeterminedEventArgs } from \"../../index.node.js\";\nimport TransferUploadProgressedEventArgs from \"../../uploader/eventArgs/transferUploadProgressedEventArgs.js\";\nimport TransferUploadEvent from \"../../uploader/transferUploadEvent.js\";\nimport HealthMonitorHealthyEventArgs from \"./events/eventArgs/healthMonitorHealthyEventArgs.js\";\nimport TransferHealthMonitorBase from \"./transferHealthMonitorBase.js\";\n\nexport default class TransferUploaderHealthMonitor extends TransferHealthMonitorBase<TransferUploadProgressedEventArgs> {\n protected getFileServerBaseUrlFromFileServerKnowEventArgs(eventArgs: unknown): string {\n const fileServerUrl = (eventArgs as TransferMetadataDeterminedEventArgs).fileServerUrl;\n if (!fileServerUrl)\n throw new Error(`Event args are not of TransferMetadataDeterminedEventArgs type`);\n\n const fileServerBaseUrl = new URL(fileServerUrl).origin;\n\n return fileServerBaseUrl;\n }\n\n protected getFileServerKnownEventName(): string {\n return TransferUploadEvent.TransferMetadataDetermined;\n }\n\n protected getTransferProgressedEventName(): string {\n return TransferUploadEvent.TransferProgressed;\n }\n\n protected getTransferredBytesTotalCount(currentHistoryLastProgressEvent?: TransferUploadProgressedEventArgs): number {\n return currentHistoryLastProgressEvent?.uploadedBytesTotalCount ?? 0;\n }\n\n protected getHealthyEventArgs(): HealthMonitorHealthyEventArgs {\n return {\n transferredBytesTotalCount: this.lastProgressEventFromPreviousPeriod?.uploadedBytesTotalCount,\n averageSpeedInBytesPerSecond: this.lastProgressEventFromPreviousPeriod?.averageSpeedInBytesPerSecond,\n currentSpeedInBytesPerSecond: this.lastProgressEventFromPreviousPeriod?.currentSpeedInBytesPerSecond,\n progressInPercentage: this.lastProgressEventFromPreviousPeriod?.progressInPercentage,\n remainingSeconds: this.lastProgressEventFromPreviousPeriod?.remainingSeconds,\n };\n }\n}"]}
1
+ {"version":3,"file":"transferUploaderHealthMonitor.js","sourceRoot":"","sources":["../../../../src/client/healthMonitor/transferUploaderHealthMonitor.ts"],"names":[],"mappings":"AAEA,OAAO,mBAAmB,MAAM,uCAAuC,CAAC;AAExE,OAAO,yBAAyB,MAAM,gCAAgC,CAAC;AAEvE,MAAM,CAAC,OAAO,OAAO,6BAA8B,SAAQ,yBAA4D;IACzG,+CAA+C,CAAC,SAAkB;QACxE,MAAM,aAAa,GAAI,SAAiD,CAAC,aAAa,CAAC;QACvF,IAAI,CAAC,aAAa;YACd,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QAEtF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;QAExD,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAES,2BAA2B;QACjC,OAAO,mBAAmB,CAAC,0BAA0B,CAAC;IAC1D,CAAC;IAES,8BAA8B;QACpC,OAAO,mBAAmB,CAAC,kBAAkB,CAAC;IAClD,CAAC;IAES,6BAA6B,CAAC,+BAAmE;QACvG,OAAO,+BAA+B,EAAE,uBAAuB,IAAI,CAAC,CAAC;IACzE,CAAC;IAES,mBAAmB;QACzB,OAAO;YACH,0BAA0B,EAAE,IAAI,CAAC,mCAAmC,EAAE,uBAAuB;YAC7F,4BAA4B,EAAE,IAAI,CAAC,mCAAmC,EAAE,4BAA4B;YACpG,4BAA4B,EAAE,IAAI,CAAC,mCAAmC,EAAE,4BAA4B;YACpG,oBAAoB,EAAE,IAAI,CAAC,mCAAmC,EAAE,oBAAoB;YACpF,gBAAgB,EAAE,IAAI,CAAC,mCAAmC,EAAE,gBAAgB;SAC/E,CAAC;IACN,CAAC;CACJ","sourcesContent":["import { TransferMetadataDeterminedEventArgs } from \"../../index.node.js\";\r\nimport TransferUploadProgressedEventArgs from \"../../uploader/eventArgs/transferUploadProgressedEventArgs.js\";\r\nimport TransferUploadEvent from \"../../uploader/transferUploadEvent.js\";\r\nimport HealthMonitorHealthyEventArgs from \"./events/eventArgs/healthMonitorHealthyEventArgs.js\";\r\nimport TransferHealthMonitorBase from \"./transferHealthMonitorBase.js\";\r\n\r\nexport default class TransferUploaderHealthMonitor extends TransferHealthMonitorBase<TransferUploadProgressedEventArgs> {\r\n protected getFileServerBaseUrlFromFileServerKnowEventArgs(eventArgs: unknown): string {\r\n const fileServerUrl = (eventArgs as TransferMetadataDeterminedEventArgs).fileServerUrl;\r\n if (!fileServerUrl)\r\n throw new Error(`Event args are not of TransferMetadataDeterminedEventArgs type`);\r\n\r\n const fileServerBaseUrl = new URL(fileServerUrl).origin;\r\n\r\n return fileServerBaseUrl;\r\n }\r\n\r\n protected getFileServerKnownEventName(): string {\r\n return TransferUploadEvent.TransferMetadataDetermined;\r\n }\r\n\r\n protected getTransferProgressedEventName(): string {\r\n return TransferUploadEvent.TransferProgressed;\r\n }\r\n\r\n protected getTransferredBytesTotalCount(currentHistoryLastProgressEvent?: TransferUploadProgressedEventArgs): number {\r\n return currentHistoryLastProgressEvent?.uploadedBytesTotalCount ?? 0;\r\n }\r\n\r\n protected getHealthyEventArgs(): HealthMonitorHealthyEventArgs {\r\n return {\r\n transferredBytesTotalCount: this.lastProgressEventFromPreviousPeriod?.uploadedBytesTotalCount,\r\n averageSpeedInBytesPerSecond: this.lastProgressEventFromPreviousPeriod?.averageSpeedInBytesPerSecond,\r\n currentSpeedInBytesPerSecond: this.lastProgressEventFromPreviousPeriod?.currentSpeedInBytesPerSecond,\r\n progressInPercentage: this.lastProgressEventFromPreviousPeriod?.progressInPercentage,\r\n remainingSeconds: this.lastProgressEventFromPreviousPeriod?.remainingSeconds,\r\n };\r\n }\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"dummyLogger.js","sourceRoot":"","sources":["../../../../src/client/loggers/dummyLogger.ts"],"names":[],"mappings":"AAAA,sDAAsD;AAItD,MAAM,WAAW;IAEb,QAAQ,CAAC,QAAgB,EAAE,GAAG,eAAsB,IAAU,CAAC;IAC/D,QAAQ,CAAC,QAAgB,IAAU,CAAC;IACpC,OAAO,CAAC,QAAgB,IAAU,CAAC;IACnC,UAAU,CAAC,QAAgB,IAAU,CAAC;IACtC,QAAQ,CAAC,MAAa,IAAU,CAAC;CACpC;AAED,eAAe,WAAW,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n\nimport type Logger from \"./logger.js\";\n\nclass DummyLogger implements Logger {\n logDebug(message: string): void;\n logDebug(_message: string, ..._additionalData: any[]): void { }\n logTrace(_message: string): void { }\n logInfo(_message: string): void { }\n logWarning(_message: string): void { }\n logError(_error: Error): void { }\n}\n\nexport default DummyLogger;"]}
1
+ {"version":3,"file":"dummyLogger.js","sourceRoot":"","sources":["../../../../src/client/loggers/dummyLogger.ts"],"names":[],"mappings":"AAAA,sDAAsD;AAItD,MAAM,WAAW;IAEb,QAAQ,CAAC,QAAgB,EAAE,GAAG,eAAsB,IAAU,CAAC;IAC/D,QAAQ,CAAC,QAAgB,IAAU,CAAC;IACpC,OAAO,CAAC,QAAgB,IAAU,CAAC;IACnC,UAAU,CAAC,QAAgB,IAAU,CAAC;IACtC,QAAQ,CAAC,MAAa,IAAU,CAAC;CACpC;AAED,eAAe,WAAW,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\n\r\nimport type Logger from \"./logger.js\";\r\n\r\nclass DummyLogger implements Logger {\r\n logDebug(message: string): void;\r\n logDebug(_message: string, ..._additionalData: any[]): void { }\r\n logTrace(_message: string): void { }\r\n logInfo(_message: string): void { }\r\n logWarning(_message: string): void { }\r\n logError(_error: Error): void { }\r\n}\r\n\r\nexport default DummyLogger;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../src/client/loggers/logger.ts"],"names":[],"mappings":"","sourcesContent":["interface Logger {\n logTrace(message: string): void;\n logTrace(message: string, additionalData?: Record<string, unknown>): void;\n\n logDebug(message: string): void;\n logDebug(message: string, additionalData?: Record<string, unknown>): void;\n\n logInfo(message: string): void;\n logInfo(message: string, additionalData?: Record<string, unknown>): void;\n\n logWarning(message: string): void;\n logWarning(message: string, additionalData?: Record<string, unknown>): void;\n\n logError(error: Error): void;\n logError(error: Error, message?: string): void;\n logError(error: Error, message?: string, additionalData?: Record<string, unknown>): void;\n}\n\nexport default Logger;"]}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../src/client/loggers/logger.ts"],"names":[],"mappings":"","sourcesContent":["interface Logger {\r\n logTrace(message: string): void;\r\n logTrace(message: string, additionalData?: Record<string, unknown>): void;\r\n\r\n logDebug(message: string): void;\r\n logDebug(message: string, additionalData?: Record<string, unknown>): void;\r\n\r\n logInfo(message: string): void;\r\n logInfo(message: string, additionalData?: Record<string, unknown>): void;\r\n\r\n logWarning(message: string): void;\r\n logWarning(message: string, additionalData?: Record<string, unknown>): void;\r\n\r\n logError(error: Error): void;\r\n logError(error: Error, message?: string): void;\r\n logError(error: Error, message?: string, additionalData?: Record<string, unknown>): void;\r\n}\r\n\r\nexport default Logger;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"logHealthyStatus.js","sourceRoot":"","sources":["../../../../../src/client/loggers/utils/logHealthyStatus.ts"],"names":[],"mappings":"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","sourcesContent":["import HealthMonitorHealthyEventArgs from \"../../healthMonitor/events/eventArgs/healthMonitorHealthyEventArgs.js\";\nimport HealthMonitorUnhealthyEventArgs, { HealthMonitorUnhealthyEventArgsReasonValue } from \"../../healthMonitor/events/eventArgs/healthMonitorUnhealthyEventArgs.js\";\nimport Logger from \"../logger.js\";\nimport logEventPropertyName from \"../../../utils/logging/logEventPropertyNames.js\";\n\nexport default function logHealthyStatus(logger: Logger, isHealthy: boolean, event: HealthMonitorHealthyEventArgs | HealthMonitorUnhealthyEventArgs, logEntryMetadata: Record<string, unknown> = {}) {\n const serializableEvent = makeEventSerializable(isHealthy, event);\n const logAdditionalData = {\n isHealthy,\n event: serializableEvent,\n ...getFileServerErrorMetadata(serializableEvent),\n ...getTransferIdMetadata(serializableEvent, logEntryMetadata),\n ...logEntryMetadata,\n };\n\n logger.logInfo(`Transfer health status`, logAdditionalData);\n}\n\nfunction makeEventSerializable(isHealthy: boolean, event: HealthMonitorHealthyEventArgs | HealthMonitorUnhealthyEventArgs): SerializableHealthMonitorEvent {\n if (isHealthy)\n return event as HealthMonitorHealthyEventArgs;\n\n const unhealthyEvent = event as HealthMonitorUnhealthyEventArgs;\n\n return {\n ...unhealthyEvent,\n reason: {\n ...unhealthyEvent.reason,\n internet: makeReasonValueSerializable(unhealthyEvent.reason.internet),\n api: makeReasonValueSerializable(unhealthyEvent.reason.api),\n fileServer: makeReasonValueSerializable(unhealthyEvent.reason.fileServer),\n },\n };\n}\n\nfunction makeReasonValueSerializable(value: HealthMonitorUnhealthyEventArgsReasonValue): SerializableHealthMonitorUnhealthyEventArgsReasonValue {\n return {\n ...value,\n error: value.error === undefined ? undefined : makeErrorSerializable(value.error),\n };\n}\n\nfunction makeErrorSerializable(error: Error): SerializableHealthMonitorError {\n const errorWithMetadata = error as Error & {\n code?: string;\n requestUrl?: string;\n response?: SerializableHealthMonitorErrorResponse;\n probeRequestMode?: RequestMode;\n probeResponseType?: ResponseType;\n probeTimeoutInMs?: number;\n probeDurationInMs?: number;\n probeFailureCategory?: string;\n probeFailureHint?: string;\n probeFallbackRequestMode?: RequestMode;\n probeFallbackSucceeded?: boolean;\n probeFallbackErrorName?: string;\n probeFallbackErrorMessage?: string;\n };\n\n return {\n name: error.name,\n message: error.message,\n code: errorWithMetadata.code,\n requestUrl: errorWithMetadata.requestUrl,\n response: errorWithMetadata.response,\n probeRequestMode: errorWithMetadata.probeRequestMode,\n probeResponseType: errorWithMetadata.probeResponseType,\n probeTimeoutInMs: errorWithMetadata.probeTimeoutInMs,\n probeDurationInMs: errorWithMetadata.probeDurationInMs,\n probeFailureCategory: errorWithMetadata.probeFailureCategory,\n probeFailureHint: errorWithMetadata.probeFailureHint,\n probeFallbackRequestMode: errorWithMetadata.probeFallbackRequestMode,\n probeFallbackSucceeded: errorWithMetadata.probeFallbackSucceeded,\n probeFallbackErrorName: errorWithMetadata.probeFallbackErrorName,\n probeFallbackErrorMessage: errorWithMetadata.probeFallbackErrorMessage,\n };\n}\n\nfunction getFileServerErrorMetadata(event: SerializableHealthMonitorEvent): Record<string, unknown> {\n if (!isSerializableUnhealthyEvent(event))\n return {};\n\n const fileServerError = event.reason.fileServer.error;\n\n return {\n ...(fileServerError?.requestUrl ? { fileServerRequestUrl: fileServerError.requestUrl } : {}),\n ...(fileServerError?.response ? { fileServerResponse: fileServerError.response } : {}),\n ...(fileServerError ? { fileServerErrorSummary: makeHealthMonitorErrorSummary(fileServerError) } : {}),\n ...(fileServerError?.probeRequestMode ? { fileServerProbeRequestMode: fileServerError.probeRequestMode } : {}),\n ...(fileServerError?.probeFailureCategory ? { fileServerProbeFailureCategory: fileServerError.probeFailureCategory } : {}),\n ...(fileServerError?.probeFailureHint ? { fileServerProbeFailureHint: fileServerError.probeFailureHint } : {}),\n ...(fileServerError?.probeFallbackSucceeded !== undefined ? { fileServerProbeFallbackSucceeded: fileServerError.probeFallbackSucceeded } : {}),\n };\n}\n\nfunction getTransferIdMetadata(event: SerializableHealthMonitorEvent, logEntryMetadata: Record<string, unknown>): Record<string, unknown> {\n if (logEntryMetadata[logEventPropertyName.TransferIdPropertyName] !== undefined)\n return {};\n\n const transferId = (event as SerializableHealthMonitorEvent & { transferId?: unknown }).transferId;\n\n if (typeof transferId !== `string` || transferId.length === 0)\n return {};\n\n return { [logEventPropertyName.TransferIdPropertyName]: transferId };\n}\n\nfunction isSerializableUnhealthyEvent(event: SerializableHealthMonitorEvent): event is SerializableHealthMonitorUnhealthyEventArgs {\n return `reason` in event;\n}\n\nfunction makeHealthMonitorErrorSummary(error: SerializableHealthMonitorError): string {\n const categoryPrefix = error.probeFailureCategory ? `[${error.probeFailureCategory}] ` : ``;\n const hintSuffix = error.probeFailureHint ? ` ${error.probeFailureHint}` : ``;\n const fallbackSuffix = error.probeFallbackSucceeded === false && error.probeFallbackErrorMessage\n ? ` Fallback ${error.probeFallbackRequestMode ?? `secondary`} probe also failed with ${error.probeFallbackErrorName ?? `Error`}: ${error.probeFallbackErrorMessage}.`\n : ``;\n\n return `${categoryPrefix}${error.name}: ${error.message}${hintSuffix}${fallbackSuffix}`;\n}\n\ntype SerializableHealthMonitorEvent = HealthMonitorHealthyEventArgs | SerializableHealthMonitorUnhealthyEventArgs;\n\ninterface SerializableHealthMonitorUnhealthyEventArgs extends Omit<HealthMonitorUnhealthyEventArgs, `reason`> {\n reason: SerializableHealthMonitorUnhealthyEventArgsReason;\n}\n\ninterface SerializableHealthMonitorUnhealthyEventArgsReason {\n internet: SerializableHealthMonitorUnhealthyEventArgsReasonValue,\n api: SerializableHealthMonitorUnhealthyEventArgsReasonValue,\n fileServer: SerializableHealthMonitorUnhealthyEventArgsReasonValue,\n}\n\ninterface SerializableHealthMonitorUnhealthyEventArgsReasonValue extends Omit<HealthMonitorUnhealthyEventArgsReasonValue, `error`> {\n error?: SerializableHealthMonitorError,\n}\n\ninterface SerializableHealthMonitorError {\n name: string,\n message: string,\n code?: string | number,\n requestUrl?: string,\n response?: SerializableHealthMonitorErrorResponse,\n probeRequestMode?: RequestMode,\n probeResponseType?: ResponseType,\n probeTimeoutInMs?: number,\n probeDurationInMs?: number,\n probeFailureCategory?: string,\n probeFailureHint?: string,\n probeFallbackRequestMode?: RequestMode,\n probeFallbackSucceeded?: boolean,\n probeFallbackErrorName?: string,\n probeFallbackErrorMessage?: string,\n}\n\ninterface SerializableHealthMonitorErrorResponse {\n status?: number,\n statusText?: string,\n headers?: Record<string, string>,\n body?: unknown,\n}"]}
1
+ {"version":3,"file":"logHealthyStatus.js","sourceRoot":"","sources":["../../../../../src/client/loggers/utils/logHealthyStatus.ts"],"names":[],"mappings":"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","sourcesContent":["import HealthMonitorHealthyEventArgs from \"../../healthMonitor/events/eventArgs/healthMonitorHealthyEventArgs.js\";\r\nimport HealthMonitorUnhealthyEventArgs, { HealthMonitorUnhealthyEventArgsReasonValue } from \"../../healthMonitor/events/eventArgs/healthMonitorUnhealthyEventArgs.js\";\r\nimport Logger from \"../logger.js\";\r\nimport logEventPropertyName from \"../../../utils/logging/logEventPropertyNames.js\";\r\n\r\nexport default function logHealthyStatus(logger: Logger, isHealthy: boolean, event: HealthMonitorHealthyEventArgs | HealthMonitorUnhealthyEventArgs, logEntryMetadata: Record<string, unknown> = {}) {\r\n const serializableEvent = makeEventSerializable(isHealthy, event);\r\n const logAdditionalData = {\r\n isHealthy,\r\n event: serializableEvent,\r\n ...getFileServerErrorMetadata(serializableEvent),\r\n ...getTransferIdMetadata(serializableEvent, logEntryMetadata),\r\n ...logEntryMetadata,\r\n };\r\n\r\n logger.logInfo(`Transfer health status`, logAdditionalData);\r\n}\r\n\r\nfunction makeEventSerializable(isHealthy: boolean, event: HealthMonitorHealthyEventArgs | HealthMonitorUnhealthyEventArgs): SerializableHealthMonitorEvent {\r\n if (isHealthy)\r\n return event as HealthMonitorHealthyEventArgs;\r\n\r\n const unhealthyEvent = event as HealthMonitorUnhealthyEventArgs;\r\n\r\n return {\r\n ...unhealthyEvent,\r\n reason: {\r\n ...unhealthyEvent.reason,\r\n internet: makeReasonValueSerializable(unhealthyEvent.reason.internet),\r\n api: makeReasonValueSerializable(unhealthyEvent.reason.api),\r\n fileServer: makeReasonValueSerializable(unhealthyEvent.reason.fileServer),\r\n },\r\n };\r\n}\r\n\r\nfunction makeReasonValueSerializable(value: HealthMonitorUnhealthyEventArgsReasonValue): SerializableHealthMonitorUnhealthyEventArgsReasonValue {\r\n return {\r\n ...value,\r\n error: value.error === undefined ? undefined : makeErrorSerializable(value.error),\r\n };\r\n}\r\n\r\nfunction makeErrorSerializable(error: Error): SerializableHealthMonitorError {\r\n const errorWithMetadata = error as Error & {\r\n code?: string;\r\n requestUrl?: string;\r\n response?: SerializableHealthMonitorErrorResponse;\r\n probeRequestMode?: RequestMode;\r\n probeResponseType?: ResponseType;\r\n probeTimeoutInMs?: number;\r\n probeDurationInMs?: number;\r\n probeFailureCategory?: string;\r\n probeFailureHint?: string;\r\n probeFallbackRequestMode?: RequestMode;\r\n probeFallbackSucceeded?: boolean;\r\n probeFallbackErrorName?: string;\r\n probeFallbackErrorMessage?: string;\r\n };\r\n\r\n return {\r\n name: error.name,\r\n message: error.message,\r\n code: errorWithMetadata.code,\r\n requestUrl: errorWithMetadata.requestUrl,\r\n response: errorWithMetadata.response,\r\n probeRequestMode: errorWithMetadata.probeRequestMode,\r\n probeResponseType: errorWithMetadata.probeResponseType,\r\n probeTimeoutInMs: errorWithMetadata.probeTimeoutInMs,\r\n probeDurationInMs: errorWithMetadata.probeDurationInMs,\r\n probeFailureCategory: errorWithMetadata.probeFailureCategory,\r\n probeFailureHint: errorWithMetadata.probeFailureHint,\r\n probeFallbackRequestMode: errorWithMetadata.probeFallbackRequestMode,\r\n probeFallbackSucceeded: errorWithMetadata.probeFallbackSucceeded,\r\n probeFallbackErrorName: errorWithMetadata.probeFallbackErrorName,\r\n probeFallbackErrorMessage: errorWithMetadata.probeFallbackErrorMessage,\r\n };\r\n}\r\n\r\nfunction getFileServerErrorMetadata(event: SerializableHealthMonitorEvent): Record<string, unknown> {\r\n if (!isSerializableUnhealthyEvent(event))\r\n return {};\r\n\r\n const fileServerError = event.reason.fileServer.error;\r\n\r\n return {\r\n ...(fileServerError?.requestUrl ? { fileServerRequestUrl: fileServerError.requestUrl } : {}),\r\n ...(fileServerError?.response ? { fileServerResponse: fileServerError.response } : {}),\r\n ...(fileServerError ? { fileServerErrorSummary: makeHealthMonitorErrorSummary(fileServerError) } : {}),\r\n ...(fileServerError?.probeRequestMode ? { fileServerProbeRequestMode: fileServerError.probeRequestMode } : {}),\r\n ...(fileServerError?.probeFailureCategory ? { fileServerProbeFailureCategory: fileServerError.probeFailureCategory } : {}),\r\n ...(fileServerError?.probeFailureHint ? { fileServerProbeFailureHint: fileServerError.probeFailureHint } : {}),\r\n ...(fileServerError?.probeFallbackSucceeded !== undefined ? { fileServerProbeFallbackSucceeded: fileServerError.probeFallbackSucceeded } : {}),\r\n };\r\n}\r\n\r\nfunction getTransferIdMetadata(event: SerializableHealthMonitorEvent, logEntryMetadata: Record<string, unknown>): Record<string, unknown> {\r\n if (logEntryMetadata[logEventPropertyName.TransferIdPropertyName] !== undefined)\r\n return {};\r\n\r\n const transferId = (event as SerializableHealthMonitorEvent & { transferId?: unknown }).transferId;\r\n\r\n if (typeof transferId !== `string` || transferId.length === 0)\r\n return {};\r\n\r\n return { [logEventPropertyName.TransferIdPropertyName]: transferId };\r\n}\r\n\r\nfunction isSerializableUnhealthyEvent(event: SerializableHealthMonitorEvent): event is SerializableHealthMonitorUnhealthyEventArgs {\r\n return `reason` in event;\r\n}\r\n\r\nfunction makeHealthMonitorErrorSummary(error: SerializableHealthMonitorError): string {\r\n const categoryPrefix = error.probeFailureCategory ? `[${error.probeFailureCategory}] ` : ``;\r\n const hintSuffix = error.probeFailureHint ? ` ${error.probeFailureHint}` : ``;\r\n const fallbackSuffix = error.probeFallbackSucceeded === false && error.probeFallbackErrorMessage\r\n ? ` Fallback ${error.probeFallbackRequestMode ?? `secondary`} probe also failed with ${error.probeFallbackErrorName ?? `Error`}: ${error.probeFallbackErrorMessage}.`\r\n : ``;\r\n\r\n return `${categoryPrefix}${error.name}: ${error.message}${hintSuffix}${fallbackSuffix}`;\r\n}\r\n\r\ntype SerializableHealthMonitorEvent = HealthMonitorHealthyEventArgs | SerializableHealthMonitorUnhealthyEventArgs;\r\n\r\ninterface SerializableHealthMonitorUnhealthyEventArgs extends Omit<HealthMonitorUnhealthyEventArgs, `reason`> {\r\n reason: SerializableHealthMonitorUnhealthyEventArgsReason;\r\n}\r\n\r\ninterface SerializableHealthMonitorUnhealthyEventArgsReason {\r\n internet: SerializableHealthMonitorUnhealthyEventArgsReasonValue,\r\n api: SerializableHealthMonitorUnhealthyEventArgsReasonValue,\r\n fileServer: SerializableHealthMonitorUnhealthyEventArgsReasonValue,\r\n}\r\n\r\ninterface SerializableHealthMonitorUnhealthyEventArgsReasonValue extends Omit<HealthMonitorUnhealthyEventArgsReasonValue, `error`> {\r\n error?: SerializableHealthMonitorError,\r\n}\r\n\r\ninterface SerializableHealthMonitorError {\r\n name: string,\r\n message: string,\r\n code?: string | number,\r\n requestUrl?: string,\r\n response?: SerializableHealthMonitorErrorResponse,\r\n probeRequestMode?: RequestMode,\r\n probeResponseType?: ResponseType,\r\n probeTimeoutInMs?: number,\r\n probeDurationInMs?: number,\r\n probeFailureCategory?: string,\r\n probeFailureHint?: string,\r\n probeFallbackRequestMode?: RequestMode,\r\n probeFallbackSucceeded?: boolean,\r\n probeFallbackErrorName?: string,\r\n probeFallbackErrorMessage?: string,\r\n}\r\n\r\ninterface SerializableHealthMonitorErrorResponse {\r\n status?: number,\r\n statusText?: string,\r\n headers?: Record<string, string>,\r\n body?: unknown,\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"nodeFileDetailsProvider.js","sourceRoot":"","sources":["../../../../src/client/node/nodeFileDetailsProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import fsPath from 'path';\nimport fs from 'fs/promises';\n\nimport { v4 as guid } from 'uuid';\n\nimport NodeFileDetails from '../../utils/fileSystem/node/nodeFileDetails.js';\nimport { promiseAll, promiseAllDeprecated } from '../../utils/promiseAll.js';\n\nclass NodeFileDetailsProvider {\n #paths: string[];\n #fileDetails: NodeFileDetails[];\n\n constructor(paths: string[]) {\n this.#fileDetails = [];\n\n this.#paths = paths;\n }\n\n async create(): Promise<NodeFileDetails[]> {\n const tasks: Promise<void>[] = [];\n\n for (const path of this.#paths)\n tasks.push(this.addPathToFileDetailsArray(path, ``));\n\n await promiseAll(tasks);\n\n return this.#fileDetails;\n }\n\n private async addPathToFileDetailsArray(path: string, destinationDirectoryPath: string) {\n if (await this.isDirectory(path))\n await this.addDirectory(path, destinationDirectoryPath);\n else\n await this.addFile(path, destinationDirectoryPath);\n }\n\n private async isDirectory(path: string): Promise<boolean> {\n try {\n const stats = await fs.stat(path);\n return stats.isDirectory();\n }\n catch {\n throw new Error(`Given path doesn't exist or application can't read it: ${path}`);\n }\n }\n\n private async addDirectory(directory: string, destinationDirectoryPath: string) {\n const directoryName = fsPath.basename(fsPath.resolve(directory));\n const destinationDirectoryPathForSubitems = fsPath.posix.join(destinationDirectoryPath, directoryName);\n\n const tasks: Promise<void>[] = [];\n\n const subItems = await fs.readdir(directory);\n\n for (const subItem of subItems) {\n const subItemPath = fsPath.join(directory, subItem);\n tasks.push(this.addPathToFileDetailsArray(subItemPath, destinationDirectoryPathForSubitems));\n }\n\n await promiseAll(tasks);\n }\n\n private async addFile(file: string, destinationFilePath: string) {\n const nodeFileDetails = await NodeFileDetails.create(guid(), file, destinationFilePath);\n this.#fileDetails.push(nodeFileDetails);\n }\n\n // TODO: This method can be removed after transfer compatibility mode is removed from Desktop\n static async recreate(files: { externalId: string | number, path: string, destinationFilePath: string }[]): Promise<NodeFileDetails[]> {\n const promises: Promise<NodeFileDetails>[] = [];\n\n files.forEach(file => {\n const promise = NodeFileDetails.create(file.externalId, file.path, file.destinationFilePath);\n promises.push(promise);\n });\n\n return await promiseAllDeprecated(promises);\n }\n}\n\nexport default NodeFileDetailsProvider;"]}
1
+ {"version":3,"file":"nodeFileDetailsProvider.js","sourceRoot":"","sources":["../../../../src/client/node/nodeFileDetailsProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import fsPath from 'path';\r\nimport fs from 'fs/promises';\r\n\r\nimport { v4 as guid } from 'uuid';\r\n\r\nimport NodeFileDetails from '../../utils/fileSystem/node/nodeFileDetails.js';\r\nimport { promiseAll, promiseAllDeprecated } from '../../utils/promiseAll.js';\r\n\r\nclass NodeFileDetailsProvider {\r\n #paths: string[];\r\n #fileDetails: NodeFileDetails[];\r\n\r\n constructor(paths: string[]) {\r\n this.#fileDetails = [];\r\n\r\n this.#paths = paths;\r\n }\r\n\r\n async create(): Promise<NodeFileDetails[]> {\r\n const tasks: Promise<void>[] = [];\r\n\r\n for (const path of this.#paths)\r\n tasks.push(this.addPathToFileDetailsArray(path, ``));\r\n\r\n await promiseAll(tasks);\r\n\r\n return this.#fileDetails;\r\n }\r\n\r\n private async addPathToFileDetailsArray(path: string, destinationDirectoryPath: string) {\r\n if (await this.isDirectory(path))\r\n await this.addDirectory(path, destinationDirectoryPath);\r\n else\r\n await this.addFile(path, destinationDirectoryPath);\r\n }\r\n\r\n private async isDirectory(path: string): Promise<boolean> {\r\n try {\r\n const stats = await fs.stat(path);\r\n return stats.isDirectory();\r\n }\r\n catch {\r\n throw new Error(`Given path doesn't exist or application can't read it: ${path}`);\r\n }\r\n }\r\n\r\n private async addDirectory(directory: string, destinationDirectoryPath: string) {\r\n const directoryName = fsPath.basename(fsPath.resolve(directory));\r\n const destinationDirectoryPathForSubitems = fsPath.posix.join(destinationDirectoryPath, directoryName);\r\n\r\n const tasks: Promise<void>[] = [];\r\n\r\n const subItems = await fs.readdir(directory);\r\n\r\n for (const subItem of subItems) {\r\n const subItemPath = fsPath.join(directory, subItem);\r\n tasks.push(this.addPathToFileDetailsArray(subItemPath, destinationDirectoryPathForSubitems));\r\n }\r\n\r\n await promiseAll(tasks);\r\n }\r\n\r\n private async addFile(file: string, destinationFilePath: string) {\r\n const nodeFileDetails = await NodeFileDetails.create(guid(), file, destinationFilePath);\r\n this.#fileDetails.push(nodeFileDetails);\r\n }\r\n\r\n // TODO: This method can be removed after transfer compatibility mode is removed from Desktop\r\n static async recreate(files: { externalId: string | number, path: string, destinationFilePath: string }[]): Promise<NodeFileDetails[]> {\r\n const promises: Promise<NodeFileDetails>[] = [];\r\n\r\n files.forEach(file => {\r\n const promise = NodeFileDetails.create(file.externalId, file.path, file.destinationFilePath);\r\n promises.push(promise);\r\n });\r\n\r\n return await promiseAllDeprecated(promises);\r\n }\r\n}\r\n\r\nexport default NodeFileDetailsProvider;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"nodeTransferUploader.d.ts","sourceRoot":"","sources":["../../../../../src/client/uploader/node/nodeTransferUploader.ts"],"names":[],"mappings":"AAUA,OAAO,oBAAoB,MAAM,4BAA4B,CAAC;AAK9D,OAAO,KAAK,eAAe,MAAM,mDAAmD,CAAC;AACrF,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAC;AAClD,OAAO,KAAK,oBAAoB,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,kBAAkB,MAAM,iDAAiD,CAAC;AACtF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAC;AACrG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uDAAuD,CAAC;AACtG,OAAO,KAAK,sBAAsB,MAAM,8BAA8B,CAAC;AAEvE,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,oBAAoB,CAAC,eAAe,CAAC;gBACvE,YAAY,EAAE,kBAAkB,CAAC,eAAe,CAAC,GAAG,wBAAwB,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;gBAC9K,UAAU,EAAE,wBAAwB,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;CAqCrJ"}
1
+ {"version":3,"file":"nodeTransferUploader.d.ts","sourceRoot":"","sources":["../../../../../src/client/uploader/node/nodeTransferUploader.ts"],"names":[],"mappings":"AASA,OAAO,oBAAoB,MAAM,4BAA4B,CAAC;AAS9D,OAAO,KAAK,eAAe,MAAM,mDAAmD,CAAC;AACrF,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAC;AAClD,OAAO,KAAK,oBAAoB,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,kBAAkB,MAAM,iDAAiD,CAAC;AACtF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAC;AACrG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uDAAuD,CAAC;AACtG,OAAO,KAAK,sBAAsB,MAAM,8BAA8B,CAAC;AAEvE,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,oBAAoB,CAAC,eAAe,CAAC;gBACvE,YAAY,EAAE,kBAAkB,CAAC,eAAe,CAAC,GAAG,wBAAwB,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;gBAC9K,UAAU,EAAE,wBAAwB,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;CAyCrJ"}
@@ -4,23 +4,29 @@ import TransferUploadAcker from "../../../uploader/transferUploadAcker.js";
4
4
  import NodeApiClient from "../../../utils/api/node/nodeApiClient.js";
5
5
  import NodeEventsEngine from "../../../utils/events/node/nodeEventsEngine.js";
6
6
  import NodeFileServerClientFactory from "../../../utils/api/node/nodeFileServerClientFactory.js";
7
- import NodeFileDetailsUploaderChunkStreamProviderFactory from "../../../uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.js";
8
7
  import TransferConcurrencyController from "../../../utils/concurrencyController/transferConcurrencyController.js";
9
8
  import NodeCryptographyProvider from "../../../utils/crypto/node/nodeCryptographyProvider.js";
10
9
  import TransferUploaderBase from "../transferUploaderBase.js";
11
10
  import { buildUploadConfig, isTransferInfo, fixTransferInfo } from "../utils/uploaderUtils.js";
12
11
  import TransferUploaderHealthMonitor from '../../healthMonitor/transferUploaderHealthMonitor.js';
13
12
  import NodeOnlineChecker from '../../healthMonitor/onlineChecker/nodeOnlineChecker.js';
13
+ import NodeFileDetailsUploaderChunkStreamProviderFactory from '../../../uploader/chunkStreamProviderFactory/node/nodeFileDetailsUploaderChunkStreamProviderFactory.js';
14
+ import NodeAsyncMD5ComputationStrategy from '../../../uploader/md5Provider/md5ComputationStrategies/node/nodeAsyncMD5ComputationStrategy.js';
15
+ import DefaultMD5ComputationStrategyFactory from '../../../uploader/md5Provider/md5ComputationStrategies/defaultMD5ComputationStrategyFactory.js';
16
+ import PrecomputedMD5Provider from '../../../uploader/md5Provider/precomputedMD5Provider.js';
14
17
  export default class NodeTransferUploader extends TransferUploaderBase {
15
18
  constructor(transferInfoOrExportData, config, envValues, logger) {
16
19
  const trackingId = config.trackingId || guid();
17
20
  const eventsEngine = new NodeEventsEngine();
18
21
  const chunkStreamProviderFactory = new NodeFileDetailsUploaderChunkStreamProviderFactory();
19
- const concurrencyController = new TransferConcurrencyController(config.chunksUploadInParallel);
22
+ const uploadConcurrencyController = new TransferConcurrencyController(config.chunksUploadInParallel);
20
23
  const fileServerClientFactory = new NodeFileServerClientFactory(envValues.source, envValues.sourceDetails, config.uploadIdleTimeoutInMs, config.chunkUploadRetryLimit);
21
24
  const cryptography = new NodeCryptographyProvider();
22
25
  const uploadConfig = buildUploadConfig(config);
23
26
  const healthMonitor = new TransferUploaderHealthMonitor(new NodeOnlineChecker(envValues.apiBaseUrl), eventsEngine);
27
+ const md5ComputationStrategyFactory = new DefaultMD5ComputationStrategyFactory(new NodeAsyncMD5ComputationStrategy());
28
+ const md5ConcurrencyController = new TransferConcurrencyController(config.chunksUploadInParallel);
29
+ const md5Provider = new PrecomputedMD5Provider(md5ComputationStrategyFactory, `base64`, chunkStreamProviderFactory, md5ConcurrencyController);
24
30
  const apiClient = new NodeApiClient(envValues.apiBaseUrl, envValues.source, envValues.sourceDetails, config.apiRequestTotalTimeoutInMs, config.apiRetryLimit);
25
31
  if (config.logintoken)
26
32
  apiClient.setLoginToken(config.logintoken);
@@ -30,11 +36,11 @@ export default class NodeTransferUploader extends TransferUploaderBase {
30
36
  if (isTransferInfo(transferInfoOrExportData)) {
31
37
  fixTransferInfo(transferInfoOrExportData);
32
38
  fileDetails = transferInfoOrExportData.files;
33
- transfer = new TransferUpload(chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, transferInfoOrExportData, uploadConfig, concurrencyController, cryptography, acker);
39
+ transfer = new TransferUpload(chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, transferInfoOrExportData, uploadConfig, uploadConcurrencyController, cryptography, acker, md5Provider);
34
40
  }
35
41
  else {
36
42
  fileDetails = transferInfoOrExportData.info.files;
37
- transfer = TransferUpload.recreate(transferInfoOrExportData, uploadConfig, chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, concurrencyController, cryptography, acker);
43
+ transfer = TransferUpload.recreate(transferInfoOrExportData, uploadConfig, chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, uploadConcurrencyController, cryptography, acker, md5Provider);
38
44
  }
39
45
  super(transfer, fileDetails, config, envValues, logger, healthMonitor, trackingId);
40
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"nodeTransferUploader.js","sourceRoot":"","sources":["../../../../../src/client/uploader/node/nodeTransferUploader.ts"],"names":[],"mappings":"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","sourcesContent":["import { v4 as guid } from 'uuid';\n\nimport TransferUpload from \"../../../uploader/transferUpload.js\";\nimport TransferUploadAcker from \"../../../uploader/transferUploadAcker.js\";\nimport NodeApiClient from \"../../../utils/api/node/nodeApiClient.js\";\nimport NodeEventsEngine from \"../../../utils/events/node/nodeEventsEngine.js\";\nimport NodeFileServerClientFactory from \"../../../utils/api/node/nodeFileServerClientFactory.js\";\nimport NodeFileDetailsUploaderChunkStreamProviderFactory from \"../../../uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.js\";\nimport TransferConcurrencyController from \"../../../utils/concurrencyController/transferConcurrencyController.js\";\nimport NodeCryptographyProvider from \"../../../utils/crypto/node/nodeCryptographyProvider.js\";\nimport TransferUploaderBase from \"../transferUploaderBase.js\";\nimport { buildUploadConfig, isTransferInfo, fixTransferInfo } from \"../utils/uploaderUtils.js\";\nimport TransferUploaderHealthMonitor from '../../healthMonitor/transferUploaderHealthMonitor.js';\nimport NodeOnlineChecker from '../../healthMonitor/onlineChecker/nodeOnlineChecker.js';\n\nimport type NodeFileDetails from \"../../../utils/fileSystem/node/nodeFileDetails.js\";\nimport type Logger from \"../../loggers/logger.js\";\nimport type EnvironmentVariables from \"../../environmentVariables.js\";\nimport type TransferUploadInfo from \"../../../uploader/options/transferUploadInfo.js\";\nimport type { TransferUploadExportData } from \"../../../uploader/export/transferUploadExportData.js\";\nimport type { TransferUploadAppendInfo } from \"../../../uploader/options/transferUploadAppendInfo.js\";\nimport type TransferUploaderConfig from \"../transferUploaderConfig.js\";\n\nexport default class NodeTransferUploader extends TransferUploaderBase<NodeFileDetails> {\n constructor(transferInfo: TransferUploadInfo<NodeFileDetails> | TransferUploadAppendInfo<NodeFileDetails>, config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger)\n constructor(exportData: TransferUploadExportData<NodeFileDetails>, config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger)\n constructor(transferInfoOrExportData: (TransferUploadInfo<NodeFileDetails> | TransferUploadAppendInfo<NodeFileDetails>) | TransferUploadExportData<NodeFileDetails>, config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger) {\n const trackingId = config.trackingId || guid();\n\n const eventsEngine = new NodeEventsEngine();\n const chunkStreamProviderFactory = new NodeFileDetailsUploaderChunkStreamProviderFactory();\n const concurrencyController = new TransferConcurrencyController(config.chunksUploadInParallel);\n const fileServerClientFactory = new NodeFileServerClientFactory(envValues.source, envValues.sourceDetails, config.uploadIdleTimeoutInMs, config.chunkUploadRetryLimit);\n const cryptography = new NodeCryptographyProvider();\n const uploadConfig = buildUploadConfig(config);\n const healthMonitor = new TransferUploaderHealthMonitor(new NodeOnlineChecker(envValues.apiBaseUrl), eventsEngine);\n\n const apiClient = new NodeApiClient(envValues.apiBaseUrl, envValues.source, envValues.sourceDetails, config.apiRequestTotalTimeoutInMs, config.apiRetryLimit);\n\n if (config.logintoken)\n apiClient.setLoginToken(config.logintoken);\n\n const acker = new TransferUploadAcker(apiClient, eventsEngine, config.fileAckIntervalInMs);\n\n let fileDetails: NodeFileDetails[] | undefined;\n let transfer: TransferUpload<NodeFileDetails>;\n\n if (isTransferInfo(transferInfoOrExportData)) {\n fixTransferInfo(transferInfoOrExportData);\n\n fileDetails = transferInfoOrExportData.files;\n\n transfer = new TransferUpload(chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, transferInfoOrExportData, uploadConfig, concurrencyController, cryptography, acker);\n }\n else {\n fileDetails = transferInfoOrExportData.info.files;\n\n transfer = TransferUpload.recreate(transferInfoOrExportData, uploadConfig, chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, concurrencyController, cryptography, acker);\n }\n\n super(transfer, fileDetails, config, envValues, logger, healthMonitor, trackingId);\n }\n}"]}
1
+ {"version":3,"file":"nodeTransferUploader.js","sourceRoot":"","sources":["../../../../../src/client/uploader/node/nodeTransferUploader.ts"],"names":[],"mappings":"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","sourcesContent":["import { v4 as guid } from 'uuid';\r\n\r\nimport TransferUpload from \"../../../uploader/transferUpload.js\";\r\nimport TransferUploadAcker from \"../../../uploader/transferUploadAcker.js\";\r\nimport NodeApiClient from \"../../../utils/api/node/nodeApiClient.js\";\r\nimport NodeEventsEngine from \"../../../utils/events/node/nodeEventsEngine.js\";\r\nimport NodeFileServerClientFactory from \"../../../utils/api/node/nodeFileServerClientFactory.js\";\r\nimport TransferConcurrencyController from \"../../../utils/concurrencyController/transferConcurrencyController.js\";\r\nimport NodeCryptographyProvider from \"../../../utils/crypto/node/nodeCryptographyProvider.js\";\r\nimport TransferUploaderBase from \"../transferUploaderBase.js\";\r\nimport { buildUploadConfig, isTransferInfo, fixTransferInfo } from \"../utils/uploaderUtils.js\";\r\nimport TransferUploaderHealthMonitor from '../../healthMonitor/transferUploaderHealthMonitor.js';\r\nimport NodeOnlineChecker from '../../healthMonitor/onlineChecker/nodeOnlineChecker.js';\r\nimport NodeFileDetailsUploaderChunkStreamProviderFactory from '../../../uploader/chunkStreamProviderFactory/node/nodeFileDetailsUploaderChunkStreamProviderFactory.js';\r\nimport NodeAsyncMD5ComputationStrategy from '../../../uploader/md5Provider/md5ComputationStrategies/node/nodeAsyncMD5ComputationStrategy.js';\r\nimport DefaultMD5ComputationStrategyFactory from '../../../uploader/md5Provider/md5ComputationStrategies/defaultMD5ComputationStrategyFactory.js';\r\nimport PrecomputedMD5Provider from '../../../uploader/md5Provider/precomputedMD5Provider.js';\r\n\r\nimport type NodeFileDetails from \"../../../utils/fileSystem/node/nodeFileDetails.js\";\r\nimport type Logger from \"../../loggers/logger.js\";\r\nimport type EnvironmentVariables from \"../../environmentVariables.js\";\r\nimport type TransferUploadInfo from \"../../../uploader/options/transferUploadInfo.js\";\r\nimport type { TransferUploadExportData } from \"../../../uploader/export/transferUploadExportData.js\";\r\nimport type { TransferUploadAppendInfo } from \"../../../uploader/options/transferUploadAppendInfo.js\";\r\nimport type TransferUploaderConfig from \"../transferUploaderConfig.js\";\r\n\r\nexport default class NodeTransferUploader extends TransferUploaderBase<NodeFileDetails> {\r\n constructor(transferInfo: TransferUploadInfo<NodeFileDetails> | TransferUploadAppendInfo<NodeFileDetails>, config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger)\r\n constructor(exportData: TransferUploadExportData<NodeFileDetails>, config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger)\r\n constructor(transferInfoOrExportData: (TransferUploadInfo<NodeFileDetails> | TransferUploadAppendInfo<NodeFileDetails>) | TransferUploadExportData<NodeFileDetails>, config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger) {\r\n const trackingId = config.trackingId || guid();\r\n\r\n const eventsEngine = new NodeEventsEngine();\r\n const chunkStreamProviderFactory = new NodeFileDetailsUploaderChunkStreamProviderFactory();\r\n const uploadConcurrencyController = new TransferConcurrencyController(config.chunksUploadInParallel);\r\n const fileServerClientFactory = new NodeFileServerClientFactory(envValues.source, envValues.sourceDetails, config.uploadIdleTimeoutInMs, config.chunkUploadRetryLimit);\r\n const cryptography = new NodeCryptographyProvider();\r\n const uploadConfig = buildUploadConfig(config);\r\n const healthMonitor = new TransferUploaderHealthMonitor(new NodeOnlineChecker(envValues.apiBaseUrl), eventsEngine);\r\n\r\n const md5ComputationStrategyFactory = new DefaultMD5ComputationStrategyFactory(new NodeAsyncMD5ComputationStrategy());\r\n const md5ConcurrencyController = new TransferConcurrencyController(config.chunksUploadInParallel);\r\n const md5Provider = new PrecomputedMD5Provider<NodeFileDetails>(md5ComputationStrategyFactory, `base64`, chunkStreamProviderFactory, md5ConcurrencyController);\r\n\r\n const apiClient = new NodeApiClient(envValues.apiBaseUrl, envValues.source, envValues.sourceDetails, config.apiRequestTotalTimeoutInMs, config.apiRetryLimit);\r\n\r\n if (config.logintoken)\r\n apiClient.setLoginToken(config.logintoken);\r\n\r\n const acker = new TransferUploadAcker(apiClient, eventsEngine, config.fileAckIntervalInMs);\r\n\r\n let fileDetails: NodeFileDetails[] | undefined;\r\n let transfer: TransferUpload<NodeFileDetails>;\r\n\r\n if (isTransferInfo(transferInfoOrExportData)) {\r\n fixTransferInfo(transferInfoOrExportData);\r\n\r\n fileDetails = transferInfoOrExportData.files;\r\n\r\n transfer = new TransferUpload(chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, transferInfoOrExportData, uploadConfig, uploadConcurrencyController, cryptography, acker, md5Provider);\r\n }\r\n else {\r\n fileDetails = transferInfoOrExportData.info.files;\r\n\r\n transfer = TransferUpload.recreate(transferInfoOrExportData, uploadConfig, chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, uploadConcurrencyController, cryptography, acker, md5Provider);\r\n }\r\n\r\n super(transfer, fileDetails, config, envValues, logger, healthMonitor, trackingId);\r\n }\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploader.js","sourceRoot":"","sources":["../../../../src/client/uploader/transferUploader.ts"],"names":[],"mappings":"","sourcesContent":["import type TransferUpload from \"../../uploader/transferUpload.js\";\nimport type FileDetails from \"../../utils/fileSystem/fileDetails.js\";\n\ninterface TransferUploader<T extends FileDetails> {\n readonly transfer: TransferUpload<T>;\n\n start(): Promise<void>;\n stop(): void;\n pause(): void;\n cancel(): void;\n}\n\nexport default TransferUploader;"]}
1
+ {"version":3,"file":"transferUploader.js","sourceRoot":"","sources":["../../../../src/client/uploader/transferUploader.ts"],"names":[],"mappings":"","sourcesContent":["import type TransferUpload from \"../../uploader/transferUpload.js\";\r\nimport type FileDetails from \"../../utils/fileSystem/fileDetails.js\";\r\n\r\ninterface TransferUploader<T extends FileDetails> {\r\n readonly transfer: TransferUpload<T>;\r\n\r\n start(): Promise<void>;\r\n stop(): void;\r\n pause(): void;\r\n cancel(): void;\r\n}\r\n\r\nexport default TransferUploader;"]}
@@ -144,7 +144,7 @@ export default class TransferUploaderBase {
144
144
  this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadFailed, eventArgs => {
145
145
  const errorMessage = `File ${eventArgs.fileStatus.externalId} having uploadItemId = ${eventArgs.uploadItemId ?? `<unknown>`}, chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} upload failed: ${eventArgs.reason}`;
146
146
  this.logError(eventArgs.error, errorMessage);
147
- const isFileAccessError = eventArgs.error.cause instanceof FsError;
147
+ const isFileAccessError = eventArgs.error instanceof FsError || eventArgs.error.cause instanceof FsError;
148
148
  const fullFilePathOrName = this.getFullFilePathOrFileName(eventArgs.fileStatus);
149
149
  if (isFileAccessError && !this.#isShuttingDown) {
150
150
  this.#failedReason = `Can't read ${fullFilePathOrName} anymore`;