filemail-sdk 10.5.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 (277) 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.map +1 -1
  36. package/dist/src/client/downloader/downloaderCore.js +13 -5
  37. package/dist/src/client/downloader/downloaderCore.js.map +1 -1
  38. package/dist/src/client/downloader/node/nodeTransferDownloader.js.map +1 -1
  39. package/dist/src/client/downloader/transferDownloader.js.map +1 -1
  40. package/dist/src/client/environmentVariables.js.map +1 -1
  41. package/dist/src/client/healthMonitor/events/eventArgs/healthMonitorHealthyEventArgs.js.map +1 -1
  42. package/dist/src/client/healthMonitor/events/eventArgs/healthMonitorUnhealthyEventArgs.js.map +1 -1
  43. package/dist/src/client/healthMonitor/events/transferHealthMonitorEvent.js.map +1 -1
  44. package/dist/src/client/healthMonitor/onlineChecker/nodeOnlineChecker.js.map +1 -1
  45. package/dist/src/client/healthMonitor/onlineChecker/onlineChecker.js.map +1 -1
  46. package/dist/src/client/healthMonitor/onlineChecker/webOnlineChecker.js.map +1 -1
  47. package/dist/src/client/healthMonitor/transferDownloaderHealthMonitor.js.map +1 -1
  48. package/dist/src/client/healthMonitor/transferHealthMonitorBase.js.map +1 -1
  49. package/dist/src/client/healthMonitor/transferUploaderHealthMonitor.js.map +1 -1
  50. package/dist/src/client/loggers/dummyLogger.js.map +1 -1
  51. package/dist/src/client/loggers/logger.js.map +1 -1
  52. package/dist/src/client/loggers/utils/logHealthyStatus.js.map +1 -1
  53. package/dist/src/client/node/nodeFileDetailsProvider.js.map +1 -1
  54. package/dist/src/client/uploader/node/nodeTransferUploader.js.map +1 -1
  55. package/dist/src/client/uploader/transferUploader.js.map +1 -1
  56. package/dist/src/client/uploader/transferUploaderBase.js.map +1 -1
  57. package/dist/src/client/uploader/transferUploaderConfig.js.map +1 -1
  58. package/dist/src/client/uploader/utils/uploaderUtils.js.map +1 -1
  59. package/dist/src/client/uploader/web/webTransferUploader.js.map +1 -1
  60. package/dist/src/client/uploader/web/webTransferUploaderConfig.js.map +1 -1
  61. package/dist/src/downloader/api/fileServerDownloadClient.js.map +1 -1
  62. package/dist/src/downloader/api/fileServerDownloadStatusClient.d.ts +6 -0
  63. package/dist/src/downloader/api/fileServerDownloadStatusClient.d.ts.map +1 -0
  64. package/dist/src/downloader/api/fileServerDownloadStatusClient.js +2 -0
  65. package/dist/src/downloader/api/fileServerDownloadStatusClient.js.map +1 -0
  66. package/dist/src/downloader/api/node/nodeFileServerDownloadClient.d.ts.map +1 -1
  67. package/dist/src/downloader/api/node/nodeFileServerDownloadClient.js +8 -6
  68. package/dist/src/downloader/api/node/nodeFileServerDownloadClient.js.map +1 -1
  69. package/dist/src/downloader/api/node/nodeFileServerDownloadStatusClient.d.ts +10 -0
  70. package/dist/src/downloader/api/node/nodeFileServerDownloadStatusClient.d.ts.map +1 -0
  71. package/dist/src/downloader/api/node/nodeFileServerDownloadStatusClient.js +39 -0
  72. package/dist/src/downloader/api/node/nodeFileServerDownloadStatusClient.js.map +1 -0
  73. package/dist/src/downloader/chunkDownloader.js.map +1 -1
  74. package/dist/src/downloader/downloadFolderResolver.js.map +1 -1
  75. package/dist/src/downloader/downloadLogger.js.map +1 -1
  76. package/dist/src/downloader/downloadOptions.d.ts +5 -0
  77. package/dist/src/downloader/downloadOptions.d.ts.map +1 -1
  78. package/dist/src/downloader/downloadOptions.js +5 -0
  79. package/dist/src/downloader/downloadOptions.js.map +1 -1
  80. package/dist/src/downloader/downloadStatus/downloadFileChunkProgress.js.map +1 -1
  81. package/dist/src/downloader/downloadStatus/downloadFileProgress.js.map +1 -1
  82. package/dist/src/downloader/downloadStatus/downloadFilePromise.js.map +1 -1
  83. package/dist/src/downloader/downloadStatus/downloadState.js.map +1 -1
  84. package/dist/src/downloader/downloadTracker.d.ts +2 -1
  85. package/dist/src/downloader/downloadTracker.d.ts.map +1 -1
  86. package/dist/src/downloader/downloadTracker.js +5 -4
  87. package/dist/src/downloader/downloadTracker.js.map +1 -1
  88. package/dist/src/downloader/dtos/downloadCommand.js.map +1 -1
  89. package/dist/src/downloader/dtos/downloadError.js.map +1 -1
  90. package/dist/src/downloader/dtos/downloadErrorCode.js.map +1 -1
  91. package/dist/src/downloader/dtos/downloadEvent.js.map +1 -1
  92. package/dist/src/downloader/dtos/downloadFileChunkInfo.js.map +1 -1
  93. package/dist/src/downloader/dtos/downloadFileInfo.js.map +1 -1
  94. package/dist/src/downloader/dtos/downloadFilesCommand.js.map +1 -1
  95. package/dist/src/downloader/dtos/downloadInfo.js.map +1 -1
  96. package/dist/src/downloader/dtos/downloadRegistrationMode.d.ts +2 -1
  97. package/dist/src/downloader/dtos/downloadRegistrationMode.d.ts.map +1 -1
  98. package/dist/src/downloader/dtos/downloadRegistrationMode.js +1 -0
  99. package/dist/src/downloader/dtos/downloadRegistrationMode.js.map +1 -1
  100. package/dist/src/downloader/dtos/downloadTrackerFileInfo.js.map +1 -1
  101. package/dist/src/downloader/dtos/downloadTrackerFileProgressInfo.js.map +1 -1
  102. package/dist/src/downloader/dtos/downloadTrackerProgressInfo.js.map +1 -1
  103. package/dist/src/downloader/dtos/downloadTrackingMetadata.d.ts +2 -0
  104. package/dist/src/downloader/dtos/downloadTrackingMetadata.d.ts.map +1 -1
  105. package/dist/src/downloader/dtos/downloadTrackingMetadata.js.map +1 -1
  106. package/dist/src/downloader/dtos/downloaderRestoredState.js.map +1 -1
  107. package/dist/src/downloader/eventArgs/chunkDownloadEventArgs.js.map +1 -1
  108. package/dist/src/downloader/eventArgs/chunkDownloadFailedEventArgs.js.map +1 -1
  109. package/dist/src/downloader/eventArgs/downloadCompletedEventArgs.js.map +1 -1
  110. package/dist/src/downloader/eventArgs/downloadEventArgs.js.map +1 -1
  111. package/dist/src/downloader/eventArgs/downloadMetadataDeterminedEventArgs.js.map +1 -1
  112. package/dist/src/downloader/eventArgs/downloadPauseEventArgs.js.map +1 -1
  113. package/dist/src/downloader/eventArgs/downloadTrackingFailedEventArgs.js.map +1 -1
  114. package/dist/src/downloader/eventArgs/fileDownloadEventArgs.js.map +1 -1
  115. package/dist/src/downloader/eventArgs/fileDownloadFailedEventArgs.js.map +1 -1
  116. package/dist/src/downloader/filesDownloader.d.ts.map +1 -1
  117. package/dist/src/downloader/filesDownloader.js +26 -0
  118. package/dist/src/downloader/filesDownloader.js.map +1 -1
  119. package/dist/src/downloader/filesPreparer.js.map +1 -1
  120. package/dist/src/downloader/md5Provider/downloaderChunkMD5Provider.js.map +1 -1
  121. package/dist/src/downloader/md5Provider/downloaderChunkMD5ProviderFactory.js.map +1 -1
  122. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5Provider.js.map +1 -1
  123. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5ProviderFactory.js.map +1 -1
  124. package/dist/src/index.d.ts +1 -0
  125. package/dist/src/index.d.ts.map +1 -1
  126. package/dist/src/index.js.map +1 -1
  127. package/dist/src/index.node.d.ts +1 -0
  128. package/dist/src/index.node.d.ts.map +1 -1
  129. package/dist/src/index.node.js +1 -0
  130. package/dist/src/index.node.js.map +1 -1
  131. package/dist/src/index.web.js.map +1 -1
  132. package/dist/src/uploader/api/fileServerUploadClient.js.map +1 -1
  133. package/dist/src/uploader/api/node/nodeFileServerUploadClient.js.map +1 -1
  134. package/dist/src/uploader/api/web/utils/axiosIdleTimeoutManager.js.map +1 -1
  135. package/dist/src/uploader/api/web/webFileServerUploadClient.js.map +1 -1
  136. package/dist/src/uploader/chunkStreamProviderFactory/node/nodeFileDetailsUploaderChunkStreamProviderFactory.js.map +1 -1
  137. package/dist/src/uploader/chunkStreamProviderFactory/uploaderChunkStreamProviderFactory.js.map +1 -1
  138. package/dist/src/uploader/chunkStreamProviderFactory/web/webFileDetailsUploaderChunkStreamProviderFactory.js.map +1 -1
  139. package/dist/src/uploader/chunksIterator/chunksIterator.js.map +1 -1
  140. package/dist/src/uploader/eventArgs/fileAckFailedEventArgs.js.map +1 -1
  141. package/dist/src/uploader/eventArgs/fileChunkUploadCompletedEventArgs.js.map +1 -1
  142. package/dist/src/uploader/eventArgs/fileChunkUploadCompletedPartiallyEventArgs.js.map +1 -1
  143. package/dist/src/uploader/eventArgs/fileChunkUploadEventArgs.js.map +1 -1
  144. package/dist/src/uploader/eventArgs/fileChunkUploadFailedEventArgs.js.map +1 -1
  145. package/dist/src/uploader/eventArgs/fileChunkUploadProgressedEventArgs.js.map +1 -1
  146. package/dist/src/uploader/eventArgs/fileUploadEventArgs.js.map +1 -1
  147. package/dist/src/uploader/eventArgs/fileUploadFailedEventArgs.js.map +1 -1
  148. package/dist/src/uploader/eventArgs/filesBatchAckFailedEventArgs.js.map +1 -1
  149. package/dist/src/uploader/eventArgs/filesRegistrationBatchFailedEventArgs.js.map +1 -1
  150. package/dist/src/uploader/eventArgs/transferMetadataDeterminedEventArgs.js.map +1 -1
  151. package/dist/src/uploader/eventArgs/transferUploadCompletedEventArgs.js.map +1 -1
  152. package/dist/src/uploader/eventArgs/transferUploadProgressedEventArgs.js.map +1 -1
  153. package/dist/src/uploader/export/transferUploadExportData.js.map +1 -1
  154. package/dist/src/uploader/export/transferUploadExportState.js.map +1 -1
  155. package/dist/src/uploader/export/transferUploadMetadata.js.map +1 -1
  156. package/dist/src/uploader/fileChunksPlan.js.map +1 -1
  157. package/dist/src/uploader/md5Provider/md5ComputationStrategies/defaultMD5ComputationStrategyFactory.js.map +1 -1
  158. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationSession.js.map +1 -1
  159. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategy.js.map +1 -1
  160. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategyFactory.js.map +1 -1
  161. package/dist/src/uploader/md5Provider/md5ComputationStrategies/node/nodeAsyncMD5ComputationStrategy.js.map +1 -1
  162. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/computeBlobMD5.js.map +1 -1
  163. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5.worker.js.map +1 -1
  164. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkerMessages.js.map +1 -1
  165. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkersManager.js.map +1 -1
  166. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/registerMD5Worker.js.map +1 -1
  167. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webAsyncWebWorkerMD5ComputationStrategy.js.map +1 -1
  168. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webMD5ComputationStrategyFactory.js.map +1 -1
  169. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webSyncMD5ComputationStrategy.js.map +1 -1
  170. package/dist/src/uploader/md5Provider/precomputedMD5Provider.js.map +1 -1
  171. package/dist/src/uploader/md5Provider/uploaderMD5Provider.js.map +1 -1
  172. package/dist/src/uploader/options/transferUploadAppendInfo.js.map +1 -1
  173. package/dist/src/uploader/options/transferUploadConfig.js.map +1 -1
  174. package/dist/src/uploader/options/transferUploadInfo.js.map +1 -1
  175. package/dist/src/uploader/options/transferUploadInfoBase.js.map +1 -1
  176. package/dist/src/uploader/pauseController.js.map +1 -1
  177. package/dist/src/uploader/pendingFileAck.js.map +1 -1
  178. package/dist/src/uploader/registeredTransferFile.js.map +1 -1
  179. package/dist/src/uploader/state/continuousChunksCalculator.js.map +1 -1
  180. package/dist/src/uploader/state/readonlyTransferUploadStateFile.js.map +1 -1
  181. package/dist/src/uploader/state/readonlyTransferUploadStateFiles.js.map +1 -1
  182. package/dist/src/uploader/state/transferUploadProgressCalculator.js.map +1 -1
  183. package/dist/src/uploader/state/transferUploadState.js.map +1 -1
  184. package/dist/src/uploader/state/transferUploadStateFile.js.map +1 -1
  185. package/dist/src/uploader/state/transferUploadStateFiles.js.map +1 -1
  186. package/dist/src/uploader/transferFailureAbortReason.js.map +1 -1
  187. package/dist/src/uploader/transferFilesRegistrar.js.map +1 -1
  188. package/dist/src/uploader/transferUpload.js.map +1 -1
  189. package/dist/src/uploader/transferUploadAcker.js.map +1 -1
  190. package/dist/src/uploader/transferUploadError.js.map +1 -1
  191. package/dist/src/uploader/transferUploadEvent.js.map +1 -1
  192. package/dist/src/utils/api/apiClient.js.map +1 -1
  193. package/dist/src/utils/api/apiClientBase.js.map +1 -1
  194. package/dist/src/utils/api/apiError.js.map +1 -1
  195. package/dist/src/utils/api/apiFilemail449Error.js.map +1 -1
  196. package/dist/src/utils/api/apiFilemailError.js.map +1 -1
  197. package/dist/src/utils/api/dtos/ackTransferFilesRequest.js.map +1 -1
  198. package/dist/src/utils/api/dtos/ackTransferFilesResponse.js.map +1 -1
  199. package/dist/src/utils/api/dtos/baseResponse.js.map +1 -1
  200. package/dist/src/utils/api/dtos/cancelTransferRequest.js.map +1 -1
  201. package/dist/src/utils/api/dtos/finalizeTransferRequest.js.map +1 -1
  202. package/dist/src/utils/api/dtos/finalizeTransferResponse.js.map +1 -1
  203. package/dist/src/utils/api/dtos/getCompanyResponse.js.map +1 -1
  204. package/dist/src/utils/api/dtos/getCompressedFileMetadataResponse.js.map +1 -1
  205. package/dist/src/utils/api/dtos/getInboxTransfersRequest.js.map +1 -1
  206. package/dist/src/utils/api/dtos/getInboxTransfersResponse.js.map +1 -1
  207. package/dist/src/utils/api/dtos/getRangehashResponse.js.map +1 -1
  208. package/dist/src/utils/api/dtos/getTransferRequest.js.map +1 -1
  209. package/dist/src/utils/api/dtos/getTransferResponse.d.ts +1 -0
  210. package/dist/src/utils/api/dtos/getTransferResponse.d.ts.map +1 -1
  211. package/dist/src/utils/api/dtos/getTransferResponse.js.map +1 -1
  212. package/dist/src/utils/api/dtos/initializeTransferRequest.js.map +1 -1
  213. package/dist/src/utils/api/dtos/initializeTransferResponse.js.map +1 -1
  214. package/dist/src/utils/api/dtos/loginRequest.js.map +1 -1
  215. package/dist/src/utils/api/dtos/loginResponse.js.map +1 -1
  216. package/dist/src/utils/api/dtos/registerFileDownloadRequest.js.map +1 -1
  217. package/dist/src/utils/api/dtos/registerTransferDownloadRequest.js.map +1 -1
  218. package/dist/src/utils/api/dtos/registerTransferFilesRequest.js.map +1 -1
  219. package/dist/src/utils/api/dtos/registerTransferFilesResponse.js.map +1 -1
  220. package/dist/src/utils/api/dtos/resetTransferRequest.js.map +1 -1
  221. package/dist/src/utils/api/dtos/sendFileChunkRequest.js.map +1 -1
  222. package/dist/src/utils/api/dtos/transferCustomFieldDto.js.map +1 -1
  223. package/dist/src/utils/api/dtos/transferFileDto.js.map +1 -1
  224. package/dist/src/utils/api/fileServerClientFactory.d.ts +2 -0
  225. package/dist/src/utils/api/fileServerClientFactory.d.ts.map +1 -1
  226. package/dist/src/utils/api/fileServerClientFactory.js.map +1 -1
  227. package/dist/src/utils/api/node/gotWorkarounds.js.map +1 -1
  228. package/dist/src/utils/api/node/nodeApiClient.js.map +1 -1
  229. package/dist/src/utils/api/node/nodeClientBase.js.map +1 -1
  230. package/dist/src/utils/api/node/nodeFileServerClientFactory.d.ts +2 -0
  231. package/dist/src/utils/api/node/nodeFileServerClientFactory.d.ts.map +1 -1
  232. package/dist/src/utils/api/node/nodeFileServerClientFactory.js +4 -0
  233. package/dist/src/utils/api/node/nodeFileServerClientFactory.js.map +1 -1
  234. package/dist/src/utils/api/node/nodeFileserverClientBase.js.map +1 -1
  235. package/dist/src/utils/api/urlUtil.js.map +1 -1
  236. package/dist/src/utils/api/web/webApiClient.js.map +1 -1
  237. package/dist/src/utils/api/web/webClientBase.js.map +1 -1
  238. package/dist/src/utils/api/web/webFileServerClientFactory.d.ts +2 -0
  239. package/dist/src/utils/api/web/webFileServerClientFactory.d.ts.map +1 -1
  240. package/dist/src/utils/api/web/webFileServerClientFactory.js +3 -0
  241. package/dist/src/utils/api/web/webFileServerClientFactory.js.map +1 -1
  242. package/dist/src/utils/api/web/webFileserverClientBase.js.map +1 -1
  243. package/dist/src/utils/concurrencyController/concurrencyController.js.map +1 -1
  244. package/dist/src/utils/concurrencyController/concurrencyReleaser.js.map +1 -1
  245. package/dist/src/utils/concurrencyController/transferConcurrencyController.js.map +1 -1
  246. package/dist/src/utils/crypto/cryptographyProvider.js.map +1 -1
  247. package/dist/src/utils/crypto/node/nodeCryptographyProvider.js.map +1 -1
  248. package/dist/src/utils/crypto/web/webCryptographyProvider.js.map +1 -1
  249. package/dist/src/utils/dateAndTime/simpleDateFormatter.js.map +1 -1
  250. package/dist/src/utils/events/chunkProgressEvent.js.map +1 -1
  251. package/dist/src/utils/events/eventsEngine.js.map +1 -1
  252. package/dist/src/utils/events/node/nodeEventsEngine.js.map +1 -1
  253. package/dist/src/utils/events/web/webEventsEngine.js.map +1 -1
  254. package/dist/src/utils/fileSystem/chunkStreamEncryptionData.js.map +1 -1
  255. package/dist/src/utils/fileSystem/chunkStreamProvider.js.map +1 -1
  256. package/dist/src/utils/fileSystem/chunkStreamProviderFactory.js.map +1 -1
  257. package/dist/src/utils/fileSystem/fileDetails.js.map +1 -1
  258. package/dist/src/utils/fileSystem/fileSystemService.js.map +1 -1
  259. package/dist/src/utils/fileSystem/fsError.js.map +1 -1
  260. package/dist/src/utils/fileSystem/node/nodeChunkStreamProvider.js.map +1 -1
  261. package/dist/src/utils/fileSystem/node/nodeChunkStreamProviderFactory.js.map +1 -1
  262. package/dist/src/utils/fileSystem/node/nodeFileDetails.js.map +1 -1
  263. package/dist/src/utils/fileSystem/node/nodeFileSystemService.js.map +1 -1
  264. package/dist/src/utils/fileSystem/parsedPath.js.map +1 -1
  265. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamEncrypter.js.map +1 -1
  266. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.js.map +1 -1
  267. package/dist/src/utils/fileSystem/web/webChunkStreamProviderFactory.js.map +1 -1
  268. package/dist/src/utils/fileSystem/web/webFileDetails.js.map +1 -1
  269. package/dist/src/utils/jsonParsing.js.map +1 -1
  270. package/dist/src/utils/logging/logEventPropertyNames.js.map +1 -1
  271. package/dist/src/utils/mergeAbortAndPauseSignals.js.map +1 -1
  272. package/dist/src/utils/networking/throttlingOptions.js.map +1 -1
  273. package/dist/src/utils/promiseAll.js.map +1 -1
  274. package/dist/src/utils/types/transferStatus.js.map +1 -1
  275. package/dist/src/utils/uint8ArrayUtils.js.map +1 -1
  276. package/package.json +80 -80
  277. package/readme.md +27 -27
@@ -1 +1 @@
1
- {"version":3,"file":"computeBlobMD5.js","sourceRoot":"","sources":["../../../../../../src/uploader/md5Provider/md5ComputationStrategies/web/computeBlobMD5.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAgB,MAAM,WAAW,CAAC;AAEpD,IAAI,iBAA2D,CAAC;AAEhE,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,cAAc,CAAC,SAAe,EAAE,MAAc;IACxE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;IAEzC,IAAI,MAAM,KAAK,KAAK;QAChB,OAAO,OAAO,CAAC;IAEnB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACxG,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,MAAmB;IACzC,IAAI,CAAC;QACD,gFAAgF;QAChF,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;QAEvC,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YACtC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACL,CAAC;IACD,MAAM,CAAC;QACH,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC","sourcesContent":["import SparkMD5 from \"spark-md5\";\nimport { createMD5, type IHasher } from \"hash-wasm\";\n\nlet wasmHasherPromise: Promise<IHasher | undefined> | undefined;\n\nexport default async function computeBlobMD5(chunkBlob: Blob, format: string): Promise<string> {\n const buffer = await chunkBlob.arrayBuffer();\n const hashHex = await computeMD5(buffer);\n\n if (format === `hex`)\n return hashHex;\n\n return btoa(hashHex.match(/\\w{2}/g)!.map(byte => String.fromCharCode(parseInt(byte, 16))).join(``));\n}\n\nasync function computeMD5(buffer: ArrayBuffer): Promise<string> {\n try {\n // Share initialization across concurrent reads, once per main thread or worker.\n wasmHasherPromise ??= createMD5();\n const hasher = await wasmHasherPromise;\n\n if (hasher) {\n hasher.init();\n hasher.update(new Uint8Array(buffer));\n return hasher.digest(`hex`);\n }\n }\n catch {\n wasmHasherPromise = Promise.resolve(undefined);\n }\n\n return SparkMD5.ArrayBuffer.hash(buffer);\n}"]}
1
+ {"version":3,"file":"computeBlobMD5.js","sourceRoot":"","sources":["../../../../../../src/uploader/md5Provider/md5ComputationStrategies/web/computeBlobMD5.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAgB,MAAM,WAAW,CAAC;AAEpD,IAAI,iBAA2D,CAAC;AAEhE,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,cAAc,CAAC,SAAe,EAAE,MAAc;IACxE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;IAEzC,IAAI,MAAM,KAAK,KAAK;QAChB,OAAO,OAAO,CAAC;IAEnB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACxG,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,MAAmB;IACzC,IAAI,CAAC;QACD,gFAAgF;QAChF,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;QAEvC,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YACtC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACL,CAAC;IACD,MAAM,CAAC;QACH,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC","sourcesContent":["import SparkMD5 from \"spark-md5\";\r\nimport { createMD5, type IHasher } from \"hash-wasm\";\r\n\r\nlet wasmHasherPromise: Promise<IHasher | undefined> | undefined;\r\n\r\nexport default async function computeBlobMD5(chunkBlob: Blob, format: string): Promise<string> {\r\n const buffer = await chunkBlob.arrayBuffer();\r\n const hashHex = await computeMD5(buffer);\r\n\r\n if (format === `hex`)\r\n return hashHex;\r\n\r\n return btoa(hashHex.match(/\\w{2}/g)!.map(byte => String.fromCharCode(parseInt(byte, 16))).join(``));\r\n}\r\n\r\nasync function computeMD5(buffer: ArrayBuffer): Promise<string> {\r\n try {\r\n // Share initialization across concurrent reads, once per main thread or worker.\r\n wasmHasherPromise ??= createMD5();\r\n const hasher = await wasmHasherPromise;\r\n\r\n if (hasher) {\r\n hasher.init();\r\n hasher.update(new Uint8Array(buffer));\r\n return hasher.digest(`hex`);\r\n }\r\n }\r\n catch {\r\n wasmHasherPromise = Promise.resolve(undefined);\r\n }\r\n\r\n return SparkMD5.ArrayBuffer.hash(buffer);\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"md5.worker.js","sourceRoot":"","sources":["../../../../../../../src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5.worker.ts"],"names":[],"mappings":"AAAA,OAAO,iBAA0C,MAAM,wBAAwB,CAAC;AAIhF,uEAAuE;AACvE,iBAAiB,CAAC,UAAuC,CAAC,CAAC;AAE3D,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAA2B,CAAC,CAAC","sourcesContent":["import registerMD5Worker, { type MD5WorkerScope } from \"./registerMD5Worker.js\";\n\nimport type { MD5WorkerReady } from \"./md5WorkerMessages.js\";\n\n// This only calls the proper worker for easier worker testability sake\nregisterMD5Worker(globalThis as unknown as MD5WorkerScope);\n\nglobalThis.postMessage({ type: `md5-ready` } satisfies MD5WorkerReady);"]}
1
+ {"version":3,"file":"md5.worker.js","sourceRoot":"","sources":["../../../../../../../src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5.worker.ts"],"names":[],"mappings":"AAAA,OAAO,iBAA0C,MAAM,wBAAwB,CAAC;AAIhF,uEAAuE;AACvE,iBAAiB,CAAC,UAAuC,CAAC,CAAC;AAE3D,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAA2B,CAAC,CAAC","sourcesContent":["import registerMD5Worker, { type MD5WorkerScope } from \"./registerMD5Worker.js\";\r\n\r\nimport type { MD5WorkerReady } from \"./md5WorkerMessages.js\";\r\n\r\n// This only calls the proper worker for easier worker testability sake\r\nregisterMD5Worker(globalThis as unknown as MD5WorkerScope);\r\n\r\nglobalThis.postMessage({ type: `md5-ready` } satisfies MD5WorkerReady);"]}
@@ -1 +1 @@
1
- {"version":3,"file":"md5WorkerMessages.js","sourceRoot":"","sources":["../../../../../../../src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkerMessages.ts"],"names":[],"mappings":"","sourcesContent":["import type { MD5ComputationResult } from \"../../../uploaderMD5Provider.js\";\n\nexport type MD5WorkerRequest = {\n workId: string;\n chunkBlob: Blob;\n format: string;\n};\n\nexport type MD5WorkerResponse = {\n workId: string;\n result: MD5ComputationResult;\n};\n\nexport type MD5WorkerReady = {\n type: `md5-ready`;\n};"]}
1
+ {"version":3,"file":"md5WorkerMessages.js","sourceRoot":"","sources":["../../../../../../../src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkerMessages.ts"],"names":[],"mappings":"","sourcesContent":["import type { MD5ComputationResult } from \"../../../uploaderMD5Provider.js\";\r\n\r\nexport type MD5WorkerRequest = {\r\n workId: string;\r\n chunkBlob: Blob;\r\n format: string;\r\n};\r\n\r\nexport type MD5WorkerResponse = {\r\n workId: string;\r\n result: MD5ComputationResult;\r\n};\r\n\r\nexport type MD5WorkerReady = {\r\n type: `md5-ready`;\r\n};"]}
@@ -1 +1 @@
1
- {"version":3,"file":"md5WorkersManager.js","sourceRoot":"","sources":["../../../../../../../src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkersManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { MD5WorkerReady } from \"./md5WorkerMessages.js\";\n\nconst WorkerStartupTimeoutInMs = 10_000;\n\nexport default class MD5WebWorkersManager {\n #createWorker: () => Worker;\n\n #workers: Worker[] = [];\n\n #roundRobinCounter = 0;\n\n constructor(createWorker: () => Worker) {\n if (!createWorker)\n throw new Error(`CreateWorker method is not defined`);\n\n this.#createWorker = createWorker;\n }\n\n hasAvailableWorkers(): boolean {\n return this.#workers.length > 0;\n }\n\n getWorker(): Worker {\n if (!this.hasAvailableWorkers())\n throw new Error(`There are no available MD5 Web Workers`);\n\n const workerIndex = this.#roundRobinCounter % this.#workers.length;\n\n this.#roundRobinCounter = (this.#roundRobinCounter + 1) % this.#workers.length;\n\n return this.#workers[workerIndex];\n }\n\n async createWorkers(workersCount: number, abortSignal?: AbortSignal): Promise<void> {\n for (let i = 0; i < workersCount; i++) {\n abortSignal?.throwIfAborted();\n\n const worker = await this.createWorker(abortSignal);\n this.#workers.push(worker);\n }\n }\n\n private async createWorker(abortSignal?: AbortSignal): Promise<Worker> {\n const worker = this.#createWorker();\n\n try {\n await this.waitUntilWorkerReady(worker, abortSignal);\n\n abortSignal?.throwIfAborted();\n\n this.addWorkerFailureListeners(worker);\n\n return worker;\n }\n catch (error) {\n worker.terminate();\n throw error;\n }\n }\n\n private addWorkerFailureListeners(worker: Worker) {\n worker.addEventListener(`error`, this.workerErrorHandler);\n worker.addEventListener(`messageerror`, this.workerMessageErrorHandler);\n }\n\n private workerErrorHandler = (event: ErrorEvent) => {\n this.workerFailureCleanup(event.currentTarget as Worker);\n };\n\n private workerMessageErrorHandler = (event: MessageEvent) => {\n this.workerFailureCleanup(event.currentTarget as Worker);\n };\n\n private removeWorkerFailureListeners(worker: Worker) {\n worker.removeEventListener(`error`, this.workerErrorHandler);\n worker.removeEventListener(`messageerror`, this.workerMessageErrorHandler);\n }\n\n private workerFailureCleanup(worker: Worker) {\n this.removeWorkerFailureListeners(worker);\n this.deleteWorker(worker);\n worker.terminate();\n }\n\n private deleteWorker(worker: Worker) {\n const index = this.#workers.indexOf(worker);\n\n if (index === -1)\n return;\n\n this.#workers.splice(index, 1);\n\n if (this.#workers.length === 0) {\n this.#roundRobinCounter = 0;\n return;\n }\n\n if (index < this.#roundRobinCounter)\n this.#roundRobinCounter -= 1;\n\n this.#roundRobinCounter %= this.#workers.length;\n }\n\n private waitUntilWorkerReady(worker: Worker, abortSignal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n const cleanup = () => {\n clearTimeout(timeout);\n\n worker.removeEventListener(`message`, readyListener);\n worker.removeEventListener(`error`, errorListener);\n worker.removeEventListener(`messageerror`, messageErrorListener);\n abortSignal?.removeEventListener(`abort`, abortListener);\n };\n\n const fail = (error: unknown) => {\n cleanup();\n reject(error);\n };\n\n const readyListener = (event: MessageEvent<MD5WorkerReady>) => {\n if (event.data?.type !== `md5-ready`)\n return;\n\n cleanup();\n resolve();\n };\n\n const errorListener = (event: ErrorEvent) => fail(event.error instanceof Error ? event.error : new Error(event.message || `MD5 worker failed to start`));\n const messageErrorListener = () => fail(new Error(`Cannot deserialize MD5 worker startup response`));\n const abortListener = () => fail(abortSignal?.reason ?? new Error(`Aborted`));\n const timeout = setTimeout(() => fail(new Error(`MD5 worker startup timed out`)), WorkerStartupTimeoutInMs);\n\n worker.addEventListener(`message`, readyListener);\n worker.addEventListener(`error`, errorListener, { once: true });\n worker.addEventListener(`messageerror`, messageErrorListener, { once: true });\n abortSignal?.addEventListener(`abort`, abortListener, { once: true });\n\n if (abortSignal?.aborted)\n abortListener();\n });\n }\n\n dispose() {\n this.#workers.forEach(worker => {\n this.removeWorkerFailureListeners(worker);\n worker.terminate();\n });\n\n this.#workers = [];\n this.#roundRobinCounter = 0;\n }\n}"]}
1
+ {"version":3,"file":"md5WorkersManager.js","sourceRoot":"","sources":["../../../../../../../src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkersManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { MD5WorkerReady } from \"./md5WorkerMessages.js\";\r\n\r\nconst WorkerStartupTimeoutInMs = 10_000;\r\n\r\nexport default class MD5WebWorkersManager {\r\n #createWorker: () => Worker;\r\n\r\n #workers: Worker[] = [];\r\n\r\n #roundRobinCounter = 0;\r\n\r\n constructor(createWorker: () => Worker) {\r\n if (!createWorker)\r\n throw new Error(`CreateWorker method is not defined`);\r\n\r\n this.#createWorker = createWorker;\r\n }\r\n\r\n hasAvailableWorkers(): boolean {\r\n return this.#workers.length > 0;\r\n }\r\n\r\n getWorker(): Worker {\r\n if (!this.hasAvailableWorkers())\r\n throw new Error(`There are no available MD5 Web Workers`);\r\n\r\n const workerIndex = this.#roundRobinCounter % this.#workers.length;\r\n\r\n this.#roundRobinCounter = (this.#roundRobinCounter + 1) % this.#workers.length;\r\n\r\n return this.#workers[workerIndex];\r\n }\r\n\r\n async createWorkers(workersCount: number, abortSignal?: AbortSignal): Promise<void> {\r\n for (let i = 0; i < workersCount; i++) {\r\n abortSignal?.throwIfAborted();\r\n\r\n const worker = await this.createWorker(abortSignal);\r\n this.#workers.push(worker);\r\n }\r\n }\r\n\r\n private async createWorker(abortSignal?: AbortSignal): Promise<Worker> {\r\n const worker = this.#createWorker();\r\n\r\n try {\r\n await this.waitUntilWorkerReady(worker, abortSignal);\r\n\r\n abortSignal?.throwIfAborted();\r\n\r\n this.addWorkerFailureListeners(worker);\r\n\r\n return worker;\r\n }\r\n catch (error) {\r\n worker.terminate();\r\n throw error;\r\n }\r\n }\r\n\r\n private addWorkerFailureListeners(worker: Worker) {\r\n worker.addEventListener(`error`, this.workerErrorHandler);\r\n worker.addEventListener(`messageerror`, this.workerMessageErrorHandler);\r\n }\r\n\r\n private workerErrorHandler = (event: ErrorEvent) => {\r\n this.workerFailureCleanup(event.currentTarget as Worker);\r\n };\r\n\r\n private workerMessageErrorHandler = (event: MessageEvent) => {\r\n this.workerFailureCleanup(event.currentTarget as Worker);\r\n };\r\n\r\n private removeWorkerFailureListeners(worker: Worker) {\r\n worker.removeEventListener(`error`, this.workerErrorHandler);\r\n worker.removeEventListener(`messageerror`, this.workerMessageErrorHandler);\r\n }\r\n\r\n private workerFailureCleanup(worker: Worker) {\r\n this.removeWorkerFailureListeners(worker);\r\n this.deleteWorker(worker);\r\n worker.terminate();\r\n }\r\n\r\n private deleteWorker(worker: Worker) {\r\n const index = this.#workers.indexOf(worker);\r\n\r\n if (index === -1)\r\n return;\r\n\r\n this.#workers.splice(index, 1);\r\n\r\n if (this.#workers.length === 0) {\r\n this.#roundRobinCounter = 0;\r\n return;\r\n }\r\n\r\n if (index < this.#roundRobinCounter)\r\n this.#roundRobinCounter -= 1;\r\n\r\n this.#roundRobinCounter %= this.#workers.length;\r\n }\r\n\r\n private waitUntilWorkerReady(worker: Worker, abortSignal?: AbortSignal): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n const cleanup = () => {\r\n clearTimeout(timeout);\r\n\r\n worker.removeEventListener(`message`, readyListener);\r\n worker.removeEventListener(`error`, errorListener);\r\n worker.removeEventListener(`messageerror`, messageErrorListener);\r\n abortSignal?.removeEventListener(`abort`, abortListener);\r\n };\r\n\r\n const fail = (error: unknown) => {\r\n cleanup();\r\n reject(error);\r\n };\r\n\r\n const readyListener = (event: MessageEvent<MD5WorkerReady>) => {\r\n if (event.data?.type !== `md5-ready`)\r\n return;\r\n\r\n cleanup();\r\n resolve();\r\n };\r\n\r\n const errorListener = (event: ErrorEvent) => fail(event.error instanceof Error ? event.error : new Error(event.message || `MD5 worker failed to start`));\r\n const messageErrorListener = () => fail(new Error(`Cannot deserialize MD5 worker startup response`));\r\n const abortListener = () => fail(abortSignal?.reason ?? new Error(`Aborted`));\r\n const timeout = setTimeout(() => fail(new Error(`MD5 worker startup timed out`)), WorkerStartupTimeoutInMs);\r\n\r\n worker.addEventListener(`message`, readyListener);\r\n worker.addEventListener(`error`, errorListener, { once: true });\r\n worker.addEventListener(`messageerror`, messageErrorListener, { once: true });\r\n abortSignal?.addEventListener(`abort`, abortListener, { once: true });\r\n\r\n if (abortSignal?.aborted)\r\n abortListener();\r\n });\r\n }\r\n\r\n dispose() {\r\n this.#workers.forEach(worker => {\r\n this.removeWorkerFailureListeners(worker);\r\n worker.terminate();\r\n });\r\n\r\n this.#workers = [];\r\n this.#roundRobinCounter = 0;\r\n }\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"registerMD5Worker.js","sourceRoot":"","sources":["../../../../../../../src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/registerMD5Worker.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAIlD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,MAAsB;IAC5D,MAAM,OAAO,GAAG,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAoB,EAAE,EAAE;QACtE,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACpD,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACX,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACxF,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;QACvF,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAqC,EAAE,EAAE;QACzE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import computeBlobMD5 from \"../computeBlobMD5.js\";\n\nimport type { MD5WorkerRequest, MD5WorkerResponse } from \"./md5WorkerMessages.js\";\n\nexport default function registerMD5Worker(worker: MD5WorkerScope): void {\n const compute = async ({ workId, chunkBlob, format }: MD5WorkerRequest) => {\n try {\n const md5 = await computeBlobMD5(chunkBlob, format);\n worker.postMessage({ workId, result: { isSuccess: true, md5 } });\n }\n catch (error) {\n const responseError = new Error(error instanceof Error ? error.message : String(error));\n worker.postMessage({ workId, result: { isSuccess: false, error: responseError } });\n }\n };\n\n worker.addEventListener(`message`, (event: MessageEvent<MD5WorkerRequest>) => {\n compute(event.data);\n });\n}\n\nexport interface MD5WorkerScope {\n addEventListener(type: `message`, listener: (event: MessageEvent<MD5WorkerRequest>) => void): void;\n postMessage(message: MD5WorkerResponse): void;\n}"]}
1
+ {"version":3,"file":"registerMD5Worker.js","sourceRoot":"","sources":["../../../../../../../src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/registerMD5Worker.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAIlD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,MAAsB;IAC5D,MAAM,OAAO,GAAG,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAoB,EAAE,EAAE;QACtE,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACpD,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACX,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACxF,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;QACvF,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAqC,EAAE,EAAE;QACzE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import computeBlobMD5 from \"../computeBlobMD5.js\";\r\n\r\nimport type { MD5WorkerRequest, MD5WorkerResponse } from \"./md5WorkerMessages.js\";\r\n\r\nexport default function registerMD5Worker(worker: MD5WorkerScope): void {\r\n const compute = async ({ workId, chunkBlob, format }: MD5WorkerRequest) => {\r\n try {\r\n const md5 = await computeBlobMD5(chunkBlob, format);\r\n worker.postMessage({ workId, result: { isSuccess: true, md5 } });\r\n }\r\n catch (error) {\r\n const responseError = new Error(error instanceof Error ? error.message : String(error));\r\n worker.postMessage({ workId, result: { isSuccess: false, error: responseError } });\r\n }\r\n };\r\n\r\n worker.addEventListener(`message`, (event: MessageEvent<MD5WorkerRequest>) => {\r\n compute(event.data);\r\n });\r\n}\r\n\r\nexport interface MD5WorkerScope {\r\n addEventListener(type: `message`, listener: (event: MessageEvent<MD5WorkerRequest>) => void): void;\r\n postMessage(message: MD5WorkerResponse): void;\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"webAsyncWebWorkerMD5ComputationStrategy.js","sourceRoot":"","sources":["../../../../../../src/uploader/md5Provider/md5ComputationStrategies/web/webAsyncWebWorkerMD5ComputationStrategy.ts"],"names":[],"mappings":"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","sourcesContent":["import { v4 as guid } from \"uuid\";\n\nimport type MD5ComputationStrategy from \"../md5ComputationStrategy.js\";\nimport type ChunkStreamProvider from \"../../../../utils/fileSystem/chunkStreamProvider.js\";\nimport type { MD5WorkerRequest, MD5WorkerResponse } from \"./md5WebWorker/md5WorkerMessages.js\";\nimport type MD5WebWorkersManager from \"./md5WebWorker/md5WorkersManager.js\";\n\nexport default class WebAsyncWebWorkerMD5ComputationStrategy implements MD5ComputationStrategy {\n #workersManager: MD5WebWorkersManager;\n\n constructor(workersManager: MD5WebWorkersManager) {\n if (!workersManager)\n throw new Error(`Workers manager is not defined`);\n\n this.#workersManager = workersManager;\n }\n\n async computeMD5(chunkStreamProvider: ChunkStreamProvider, format: string, abortSignal?: AbortSignal): Promise<string> {\n abortSignal?.throwIfAborted();\n\n if (!this.#workersManager.hasAvailableWorkers())\n throw new Error(`There are no available MD5 Web Workers`);\n\n return new Promise((resolve, reject) => {\n let worker: Worker | undefined;\n\n const workId = guid();\n\n const cleanup = () => {\n worker?.removeEventListener(`message`, resultListener);\n worker?.removeEventListener(`error`, errorListener);\n worker?.removeEventListener(`messageerror`, messageErrorListener);\n abortSignal?.removeEventListener(`abort`, abortListener);\n };\n\n const succeed = (md5: string) => {\n cleanup();\n resolve(md5);\n };\n\n const fail = (error: unknown) => {\n cleanup();\n reject(error);\n };\n\n const errorListener = (event: ErrorEvent) => {\n fail(event.error instanceof Error ? event.error : new Error(event.message || `MD5 worker failed`));\n };\n\n const messageErrorListener = () => fail(new Error(`Cannot deserialize MD5 worker response`));\n const abortListener = () => fail(abortSignal?.reason ?? new Error(`Aborted`));\n\n const resultListener = (event: MessageEvent<MD5WorkerResponse>) => {\n if (event.data?.workId !== workId)\n return;\n\n if (event.data.result.isSuccess)\n succeed(event.data.result.md5);\n else\n fail(event.data.result.error);\n };\n\n abortSignal?.addEventListener(`abort`, abortListener, { once: true });\n\n const dispatchWorkToWebWorker = async () => {\n try {\n const chunkBlob = await chunkStreamProvider.getChunkBlob();\n\n abortSignal?.throwIfAborted();\n\n worker = this.#workersManager.getWorker();\n\n worker.addEventListener(`message`, resultListener);\n worker.addEventListener(`error`, errorListener, { once: true });\n worker.addEventListener(`messageerror`, messageErrorListener, { once: true });\n\n worker.postMessage({ workId, chunkBlob, format } satisfies MD5WorkerRequest);\n }\n catch (error) {\n fail(error);\n }\n };\n\n dispatchWorkToWebWorker();\n });\n }\n}"]}
1
+ {"version":3,"file":"webAsyncWebWorkerMD5ComputationStrategy.js","sourceRoot":"","sources":["../../../../../../src/uploader/md5Provider/md5ComputationStrategies/web/webAsyncWebWorkerMD5ComputationStrategy.ts"],"names":[],"mappings":"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","sourcesContent":["import { v4 as guid } from \"uuid\";\r\n\r\nimport type MD5ComputationStrategy from \"../md5ComputationStrategy.js\";\r\nimport type ChunkStreamProvider from \"../../../../utils/fileSystem/chunkStreamProvider.js\";\r\nimport type { MD5WorkerRequest, MD5WorkerResponse } from \"./md5WebWorker/md5WorkerMessages.js\";\r\nimport type MD5WebWorkersManager from \"./md5WebWorker/md5WorkersManager.js\";\r\n\r\nexport default class WebAsyncWebWorkerMD5ComputationStrategy implements MD5ComputationStrategy {\r\n #workersManager: MD5WebWorkersManager;\r\n\r\n constructor(workersManager: MD5WebWorkersManager) {\r\n if (!workersManager)\r\n throw new Error(`Workers manager is not defined`);\r\n\r\n this.#workersManager = workersManager;\r\n }\r\n\r\n async computeMD5(chunkStreamProvider: ChunkStreamProvider, format: string, abortSignal?: AbortSignal): Promise<string> {\r\n abortSignal?.throwIfAborted();\r\n\r\n if (!this.#workersManager.hasAvailableWorkers())\r\n throw new Error(`There are no available MD5 Web Workers`);\r\n\r\n return new Promise((resolve, reject) => {\r\n let worker: Worker | undefined;\r\n\r\n const workId = guid();\r\n\r\n const cleanup = () => {\r\n worker?.removeEventListener(`message`, resultListener);\r\n worker?.removeEventListener(`error`, errorListener);\r\n worker?.removeEventListener(`messageerror`, messageErrorListener);\r\n abortSignal?.removeEventListener(`abort`, abortListener);\r\n };\r\n\r\n const succeed = (md5: string) => {\r\n cleanup();\r\n resolve(md5);\r\n };\r\n\r\n const fail = (error: unknown) => {\r\n cleanup();\r\n reject(error);\r\n };\r\n\r\n const errorListener = (event: ErrorEvent) => {\r\n fail(event.error instanceof Error ? event.error : new Error(event.message || `MD5 worker failed`));\r\n };\r\n\r\n const messageErrorListener = () => fail(new Error(`Cannot deserialize MD5 worker response`));\r\n const abortListener = () => fail(abortSignal?.reason ?? new Error(`Aborted`));\r\n\r\n const resultListener = (event: MessageEvent<MD5WorkerResponse>) => {\r\n if (event.data?.workId !== workId)\r\n return;\r\n\r\n if (event.data.result.isSuccess)\r\n succeed(event.data.result.md5);\r\n else\r\n fail(event.data.result.error);\r\n };\r\n\r\n abortSignal?.addEventListener(`abort`, abortListener, { once: true });\r\n\r\n const dispatchWorkToWebWorker = async () => {\r\n try {\r\n const chunkBlob = await chunkStreamProvider.getChunkBlob();\r\n\r\n abortSignal?.throwIfAborted();\r\n\r\n worker = this.#workersManager.getWorker();\r\n\r\n worker.addEventListener(`message`, resultListener);\r\n worker.addEventListener(`error`, errorListener, { once: true });\r\n worker.addEventListener(`messageerror`, messageErrorListener, { once: true });\r\n\r\n worker.postMessage({ workId, chunkBlob, format } satisfies MD5WorkerRequest);\r\n }\r\n catch (error) {\r\n fail(error);\r\n }\r\n };\r\n\r\n dispatchWorkToWebWorker();\r\n });\r\n }\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"webMD5ComputationStrategyFactory.js","sourceRoot":"","sources":["../../../../../../src/uploader/md5Provider/md5ComputationStrategies/web/webMD5ComputationStrategyFactory.ts"],"names":[],"mappings":"AAAA,OAAO,uCAAuC,MAAM,8CAA8C,CAAC;AACnG,OAAO,6BAA6B,MAAM,oCAAoC,CAAC;AAC/E,OAAO,oBAAoB,MAAM,qCAAqC,CAAC;AAKvE,MAAM,CAAC,OAAO,OAAO,gCAAgC;IACxC,aAAa,CAAe;IAC5B,aAAa,CAAS;IACtB,WAAW,CAAyB;IAE7C,YAAY,YAA0B,EAAE,YAAoB,EAAE,UAAkC;QAC5F,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAEpE,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,WAAyB;QACzC,WAAW,EAAE,cAAc,EAAE,CAAC;QAE9B,IAAI,cAAgD,CAAC;QAErD,MAAM,OAAO,GAAG,GAAG,EAAE;YACjB,cAAc,EAAE,OAAO,EAAE,CAAC;YAC1B,cAAc,GAAG,SAAS,CAAC;QAC/B,CAAC,CAAC;QAEF,IAAI,CAAC;YACD,cAAc,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAE9D,MAAM,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;YAEpE,WAAW,EAAE,cAAc,EAAE,CAAC;YAE9B,MAAM,QAAQ,GAAG,IAAI,uCAAuC,CAAC,cAAc,CAAC,CAAC;YAE7E,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QACjC,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;YAEV,IAAI,WAAW,EAAE,OAAO;gBACpB,MAAM,WAAW,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;YAErD,IAAI,CAAC,WAAW,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAE5E,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;QAClC,CAAC;IACL,CAAC;IAEO,eAAe;QACnB,OAAO,EAAE,QAAQ,EAAE,IAAI,6BAA6B,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IACjF,CAAC;CACJ","sourcesContent":["import WebAsyncWebWorkerMD5ComputationStrategy from \"./webAsyncWebWorkerMD5ComputationStrategy.js\";\nimport WebSyncMD5ComputationStrategy from \"./webSyncMD5ComputationStrategy.js\";\nimport MD5WebWorkersManager from \"./md5WebWorker/md5WorkersManager.js\";\n\nimport type MD5ComputationStrategyFactory from \"../md5ComputationStrategyFactory.js\";\nimport type MD5ComputationSession from \"../md5ComputationSession.js\";\n\nexport default class WebMD5ComputationStrategyFactory implements MD5ComputationStrategyFactory {\n readonly #createWorker: () => Worker;\n readonly #workersCount: number;\n readonly #onFallback: (error: Error) => void;\n\n constructor(createWorker: () => Worker, workersCount: number, onFallback: (error: Error) => void) {\n if (!Number.isSafeInteger(workersCount) || workersCount < 1)\n throw new Error(`MD5 workers count must be a positive integer`);\n\n this.#createWorker = createWorker;\n this.#workersCount = workersCount;\n this.#onFallback = onFallback;\n }\n\n async createSession(abortSignal?: AbortSignal): Promise<MD5ComputationSession> {\n abortSignal?.throwIfAborted();\n\n let workersManager: MD5WebWorkersManager | undefined;\n\n const dispose = () => {\n workersManager?.dispose();\n workersManager = undefined;\n };\n\n try {\n workersManager = new MD5WebWorkersManager(this.#createWorker);\n\n await workersManager.createWorkers(this.#workersCount, abortSignal);\n\n abortSignal?.throwIfAborted();\n\n const strategy = new WebAsyncWebWorkerMD5ComputationStrategy(workersManager);\n\n return { strategy, dispose };\n }\n catch (error) {\n dispose();\n\n if (abortSignal?.aborted)\n throw abortSignal.reason ?? new Error(`Aborted`);\n\n this.#onFallback(error instanceof Error ? error : new Error(String(error)));\n\n return this.getSyncStrategy();\n }\n }\n\n private getSyncStrategy(): MD5ComputationSession | PromiseLike<MD5ComputationSession> {\n return { strategy: new WebSyncMD5ComputationStrategy(), dispose: () => { } };\n }\n}"]}
1
+ {"version":3,"file":"webMD5ComputationStrategyFactory.js","sourceRoot":"","sources":["../../../../../../src/uploader/md5Provider/md5ComputationStrategies/web/webMD5ComputationStrategyFactory.ts"],"names":[],"mappings":"AAAA,OAAO,uCAAuC,MAAM,8CAA8C,CAAC;AACnG,OAAO,6BAA6B,MAAM,oCAAoC,CAAC;AAC/E,OAAO,oBAAoB,MAAM,qCAAqC,CAAC;AAKvE,MAAM,CAAC,OAAO,OAAO,gCAAgC;IACxC,aAAa,CAAe;IAC5B,aAAa,CAAS;IACtB,WAAW,CAAyB;IAE7C,YAAY,YAA0B,EAAE,YAAoB,EAAE,UAAkC;QAC5F,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAEpE,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,WAAyB;QACzC,WAAW,EAAE,cAAc,EAAE,CAAC;QAE9B,IAAI,cAAgD,CAAC;QAErD,MAAM,OAAO,GAAG,GAAG,EAAE;YACjB,cAAc,EAAE,OAAO,EAAE,CAAC;YAC1B,cAAc,GAAG,SAAS,CAAC;QAC/B,CAAC,CAAC;QAEF,IAAI,CAAC;YACD,cAAc,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAE9D,MAAM,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;YAEpE,WAAW,EAAE,cAAc,EAAE,CAAC;YAE9B,MAAM,QAAQ,GAAG,IAAI,uCAAuC,CAAC,cAAc,CAAC,CAAC;YAE7E,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QACjC,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;YAEV,IAAI,WAAW,EAAE,OAAO;gBACpB,MAAM,WAAW,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;YAErD,IAAI,CAAC,WAAW,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAE5E,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;QAClC,CAAC;IACL,CAAC;IAEO,eAAe;QACnB,OAAO,EAAE,QAAQ,EAAE,IAAI,6BAA6B,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IACjF,CAAC;CACJ","sourcesContent":["import WebAsyncWebWorkerMD5ComputationStrategy from \"./webAsyncWebWorkerMD5ComputationStrategy.js\";\r\nimport WebSyncMD5ComputationStrategy from \"./webSyncMD5ComputationStrategy.js\";\r\nimport MD5WebWorkersManager from \"./md5WebWorker/md5WorkersManager.js\";\r\n\r\nimport type MD5ComputationStrategyFactory from \"../md5ComputationStrategyFactory.js\";\r\nimport type MD5ComputationSession from \"../md5ComputationSession.js\";\r\n\r\nexport default class WebMD5ComputationStrategyFactory implements MD5ComputationStrategyFactory {\r\n readonly #createWorker: () => Worker;\r\n readonly #workersCount: number;\r\n readonly #onFallback: (error: Error) => void;\r\n\r\n constructor(createWorker: () => Worker, workersCount: number, onFallback: (error: Error) => void) {\r\n if (!Number.isSafeInteger(workersCount) || workersCount < 1)\r\n throw new Error(`MD5 workers count must be a positive integer`);\r\n\r\n this.#createWorker = createWorker;\r\n this.#workersCount = workersCount;\r\n this.#onFallback = onFallback;\r\n }\r\n\r\n async createSession(abortSignal?: AbortSignal): Promise<MD5ComputationSession> {\r\n abortSignal?.throwIfAborted();\r\n\r\n let workersManager: MD5WebWorkersManager | undefined;\r\n\r\n const dispose = () => {\r\n workersManager?.dispose();\r\n workersManager = undefined;\r\n };\r\n\r\n try {\r\n workersManager = new MD5WebWorkersManager(this.#createWorker);\r\n\r\n await workersManager.createWorkers(this.#workersCount, abortSignal);\r\n\r\n abortSignal?.throwIfAborted();\r\n\r\n const strategy = new WebAsyncWebWorkerMD5ComputationStrategy(workersManager);\r\n\r\n return { strategy, dispose };\r\n }\r\n catch (error) {\r\n dispose();\r\n\r\n if (abortSignal?.aborted)\r\n throw abortSignal.reason ?? new Error(`Aborted`);\r\n\r\n this.#onFallback(error instanceof Error ? error : new Error(String(error)));\r\n\r\n return this.getSyncStrategy();\r\n }\r\n }\r\n\r\n private getSyncStrategy(): MD5ComputationSession | PromiseLike<MD5ComputationSession> {\r\n return { strategy: new WebSyncMD5ComputationStrategy(), dispose: () => { } };\r\n }\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"webSyncMD5ComputationStrategy.js","sourceRoot":"","sources":["../../../../../../src/uploader/md5Provider/md5ComputationStrategies/web/webSyncMD5ComputationStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,qBAAqB,CAAC;AAKjD,MAAM,CAAC,OAAO,OAAO,6BAA6B;IAC9C,6DAA6D;IAC7D,KAAK,CAAC,UAAU,CAAC,mBAAwC,EAAE,MAAc,EAAE,YAA0B;QACjG,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,YAAY,EAAE,CAAC;QAE3D,OAAO,MAAM,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;CACJ","sourcesContent":["import computeBlobMD5 from \"./computeBlobMD5.js\";\n\nimport type MD5ComputationStrategy from \"../md5ComputationStrategy.js\";\nimport type ChunkStreamProvider from \"../../../../utils/fileSystem/chunkStreamProvider.js\";\n\nexport default class WebSyncMD5ComputationStrategy implements MD5ComputationStrategy {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async computeMD5(chunkStreamProvider: ChunkStreamProvider, format: string, _abortSignal?: AbortSignal): Promise<string> {\n const chunkBlob = await chunkStreamProvider.getChunkBlob();\n\n return await computeBlobMD5(chunkBlob, format);\n }\n}"]}
1
+ {"version":3,"file":"webSyncMD5ComputationStrategy.js","sourceRoot":"","sources":["../../../../../../src/uploader/md5Provider/md5ComputationStrategies/web/webSyncMD5ComputationStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,qBAAqB,CAAC;AAKjD,MAAM,CAAC,OAAO,OAAO,6BAA6B;IAC9C,6DAA6D;IAC7D,KAAK,CAAC,UAAU,CAAC,mBAAwC,EAAE,MAAc,EAAE,YAA0B;QACjG,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,YAAY,EAAE,CAAC;QAE3D,OAAO,MAAM,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;CACJ","sourcesContent":["import computeBlobMD5 from \"./computeBlobMD5.js\";\r\n\r\nimport type MD5ComputationStrategy from \"../md5ComputationStrategy.js\";\r\nimport type ChunkStreamProvider from \"../../../../utils/fileSystem/chunkStreamProvider.js\";\r\n\r\nexport default class WebSyncMD5ComputationStrategy implements MD5ComputationStrategy {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n async computeMD5(chunkStreamProvider: ChunkStreamProvider, format: string, _abortSignal?: AbortSignal): Promise<string> {\r\n const chunkBlob = await chunkStreamProvider.getChunkBlob();\r\n\r\n return await computeBlobMD5(chunkBlob, format);\r\n }\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"precomputedMD5Provider.js","sourceRoot":"","sources":["../../../../src/uploader/md5Provider/precomputedMD5Provider.ts"],"names":[],"mappings":"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","sourcesContent":["import UploaderChunkStreamProviderFactory from \"../chunkStreamProviderFactory/uploaderChunkStreamProviderFactory.js\";\nimport UploaderMD5Provider, { MD5ComputationResult, MD5ProviderObserver, UploaderMD5ProviderFileToBeMD5Hashed } from \"./uploaderMD5Provider.js\";\nimport ChunkStreamEncryptionData from \"../../utils/fileSystem/chunkStreamEncryptionData.js\";\nimport ConcurrencyController from \"../../utils/concurrencyController/concurrencyController.js\";\nimport FsError from \"../../utils/fileSystem/fsError.js\";\nimport { promiseAllSettled } from \"../../utils/promiseAll.js\";\nimport ConcurrencyReleaser from \"../../utils/concurrencyController/concurrencyReleaser.js\";\nimport FileDetails from \"../../utils/fileSystem/fileDetails.js\";\n\nimport type ChunkStreamProvider from \"../../utils/fileSystem/chunkStreamProvider.js\";\nimport type MD5ComputationStrategy from \"./md5ComputationStrategies/md5ComputationStrategy.js\";\nimport type MD5ComputationStrategyFactory from \"./md5ComputationStrategies/md5ComputationStrategyFactory.js\";\nimport type MD5ComputationSession from \"./md5ComputationStrategies/md5ComputationSession.js\";\n\nexport default class PrecomputedMD5Provider<T extends FileDetails> implements UploaderMD5Provider<T> {\n readonly #md5ComputationStrategyFactory: MD5ComputationStrategyFactory;\n readonly #format: string;\n\n #isRunning = false;\n #isFinished = false;\n #isError: Error | undefined = undefined;\n\n #mainLoopPromise: Promise<void> | undefined;\n\n #internalAbortController: AbortController | undefined;\n\n #computedMD5s = new Map<string | number, Map<number, MD5ComputationResult>>();\n #observers: Set<MD5ProviderObserver> = new Set();\n\n #encryptionData?: ChunkStreamEncryptionData;\n\n readonly #chunkStreamProviderFactory: UploaderChunkStreamProviderFactory<T>;\n readonly #concurrencyController: ConcurrencyController;\n\n constructor(md5ComputationStrategyFactory: MD5ComputationStrategyFactory, format: string, chunkStreamProviderFactory: UploaderChunkStreamProviderFactory<T>, concurrencyController: ConcurrencyController) {\n if (!md5ComputationStrategyFactory)\n throw new Error(`MD5 computation strategy factory is undefined`);\n if (!format || format.length === 0)\n throw new Error(`MD5 format is incorrect`);\n if (!chunkStreamProviderFactory)\n throw new Error(`Chunk stream provider factory is undefined`);\n if (!concurrencyController)\n throw new Error(`Concurrency controller is undefined`);\n\n this.#md5ComputationStrategyFactory = md5ComputationStrategyFactory;\n this.#format = format;\n this.#chunkStreamProviderFactory = chunkStreamProviderFactory;\n this.#concurrencyController = concurrencyController;\n }\n\n async start(files: UploaderMD5ProviderFileToBeMD5Hashed<T>[], encryptionData: ChunkStreamEncryptionData | undefined, abortSignal?: AbortSignal): Promise<void> {\n try {\n this.clear();\n\n this.#encryptionData = encryptionData;\n\n this.throwIfEncryptionDataIsNotValid();\n\n this.#isRunning = true;\n\n this.#internalAbortController = new AbortController();\n\n this.addAbortSignalListener(abortSignal);\n\n this.#mainLoopPromise = this.precomputeAllFiles(files);\n\n await this.#mainLoopPromise;\n\n this.#isFinished = !this.#internalAbortController.signal.aborted;\n }\n catch (error) {\n this.#isError = new Error(`Unhandled error occured in WebPrecomputedMD5Provider. See 'cause' for more details`, { cause: error as Error });\n }\n finally {\n this.#isRunning = false;\n\n this.notifyObservers();\n }\n }\n\n private clear() {\n this.#computedMD5s.clear();\n this.#isFinished = false;\n this.#isError = undefined;\n }\n\n private addAbortSignalListener(abortSignal: AbortSignal | undefined) {\n const internalAbortController = this.#internalAbortController!;\n\n if (abortSignal?.aborted)\n internalAbortController.abort();\n else\n abortSignal?.addEventListener(`abort`, () => internalAbortController.abort(), { once: true });\n }\n\n private throwIfEncryptionDataIsNotValid() {\n if (!this.#encryptionData)\n return;\n\n if (this.#encryptionData.iv.length !== 16)\n throw new FsError(`Encryption IV must be 16 bytes long`);\n if (this.#encryptionData.key.length !== 32)\n throw new FsError(`Encryption key must be 32 bytes long`);\n }\n\n private async precomputeAllFiles(files: UploaderMD5ProviderFileToBeMD5Hashed<T>[]) {\n let session: MD5ComputationSession | undefined;\n\n try {\n if (this.shouldStopProcessing())\n return;\n\n session = await this.#md5ComputationStrategyFactory.createSession(this.#internalAbortController?.signal);\n\n await this.precomputeChunks(files, session.strategy);\n }\n catch (error) {\n if (!this.#internalAbortController?.signal.aborted)\n throw error;\n }\n finally {\n session?.dispose();\n }\n }\n\n private async precomputeChunks(files: UploaderMD5ProviderFileToBeMD5Hashed<T>[], strategy: MD5ComputationStrategy) {\n const ongoingChunkMD5Computations = new Set<Promise<void>>();\n\n try {\n for (const file of files) {\n for (const chunk of file.chunksIterator) {\n const releaseSemaphore = await this.#concurrencyController.acquire();\n\n if (this.shouldStopProcessing()) {\n releaseSemaphore();\n break;\n }\n\n const chunkMD5ComputingPromise = this.precomputeChunkMd5(file.file, chunk.startPosition, chunk.sizeInBytes, releaseSemaphore, strategy);\n\n const trackedChunkUploadPromise = chunkMD5ComputingPromise.finally(() => {\n ongoingChunkMD5Computations.delete(trackedChunkUploadPromise);\n });\n\n ongoingChunkMD5Computations.add(trackedChunkUploadPromise);\n\n if (this.shouldStopProcessing())\n break;\n }\n\n if (this.shouldStopProcessing())\n break;\n }\n }\n finally {\n await promiseAllSettled(Array.from(ongoingChunkMD5Computations));\n }\n }\n\n private async precomputeChunkMd5(file: T, chunkStartPosition: number, chunkSizeInBytes: number, releaseSemaphore: ConcurrencyReleaser, strategy: MD5ComputationStrategy) {\n let chunkStreamProvider: ChunkStreamProvider | undefined;\n\n try {\n chunkStreamProvider = this.#chunkStreamProviderFactory.createChunkStreamProvider(file, chunkStartPosition, chunkSizeInBytes, this.#encryptionData);\n\n const md5 = await strategy.computeMD5(chunkStreamProvider, this.#format, this.#internalAbortController?.signal);\n\n this.setComputationResult(file.externalId, chunkStartPosition, { isSuccess: true, md5 });\n }\n catch (error) {\n const chunkError = this.getChunkError(error);\n\n this.setComputationResult(file.externalId, chunkStartPosition, { isSuccess: false, error: chunkError });\n }\n finally {\n releaseSemaphore();\n\n if (chunkStreamProvider && !chunkStreamProvider.isReleased)\n await chunkStreamProvider.release().catch(() => { /* Cleanup failure must not replace the MD5 result. */ });\n\n this.notifyObservers();\n }\n }\n\n private getChunkError(error: unknown): Error {\n if (this.#internalAbortController?.signal?.aborted)\n return this.createAbortError(this.#internalAbortController?.signal);\n\n if (error instanceof FsError)\n return error;\n\n return new FsError(`ComputingFileMd5ChecksumException`, { cause: error as Error });\n }\n\n private createAbortError(abortSignal: AbortSignal) {\n if (abortSignal.reason instanceof Error)\n return abortSignal.reason;\n\n return new Error(`Aborted`);\n }\n\n private setComputationResult(fileId: string | number, chunkStartPosition: number, result: MD5ComputationResult) {\n if (!this.#computedMD5s.has(fileId))\n this.#computedMD5s.set(fileId, new Map());\n\n this.#computedMD5s.get(fileId)!.set(chunkStartPosition, result);\n }\n\n private shouldStopProcessing() {\n return this.#internalAbortController?.signal.aborted === true || this.#isError;\n }\n\n async stop(): Promise<void> {\n this.#internalAbortController?.abort();\n\n await this.#mainLoopPromise;\n }\n\n private notifyObservers() {\n this.#observers.forEach(observer => this.notifyAndRemoveObserverIfResultExists(observer));\n }\n\n private notifyAndRemoveObserverIfResultExists(observer: MD5ProviderObserver) {\n const result = this.#computedMD5s.get(observer.fileId)?.get(observer.chunkStartPosition);\n\n if (result) {\n if (result.isSuccess)\n observer.resolve(result.md5);\n else\n observer.reject(result.error);\n\n this.removeObserver(observer);\n\n return;\n }\n\n if (this.#isRunning)\n return;\n\n if (this.#isError)\n observer.reject(this.#isError);\n else if (this.#isFinished)\n observer.reject(new Error(`MD5 provider has never computed MD5 for this chunk`));\n else\n observer.reject(new Error(`MD5s precomputing failed`));\n\n this.removeObserver(observer);\n }\n\n private removeObserver(observer: MD5ProviderObserver) {\n this.#observers.delete(observer);\n }\n\n async getMd5Checksum(file: T, chunkStartPosition: number): Promise<string> {\n const promise = new Promise<string>((resolve, reject) => {\n const observer = { fileId: file.externalId, chunkStartPosition, resolve, reject };\n\n this.#observers.add(observer);\n\n this.notifyAndRemoveObserverIfResultExists(observer);\n });\n\n return promise;\n }\n}"]}
1
+ {"version":3,"file":"precomputedMD5Provider.js","sourceRoot":"","sources":["../../../../src/uploader/md5Provider/precomputedMD5Provider.ts"],"names":[],"mappings":"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","sourcesContent":["import UploaderChunkStreamProviderFactory from \"../chunkStreamProviderFactory/uploaderChunkStreamProviderFactory.js\";\r\nimport UploaderMD5Provider, { MD5ComputationResult, MD5ProviderObserver, UploaderMD5ProviderFileToBeMD5Hashed } from \"./uploaderMD5Provider.js\";\r\nimport ChunkStreamEncryptionData from \"../../utils/fileSystem/chunkStreamEncryptionData.js\";\r\nimport ConcurrencyController from \"../../utils/concurrencyController/concurrencyController.js\";\r\nimport FsError from \"../../utils/fileSystem/fsError.js\";\r\nimport { promiseAllSettled } from \"../../utils/promiseAll.js\";\r\nimport ConcurrencyReleaser from \"../../utils/concurrencyController/concurrencyReleaser.js\";\r\nimport FileDetails from \"../../utils/fileSystem/fileDetails.js\";\r\n\r\nimport type ChunkStreamProvider from \"../../utils/fileSystem/chunkStreamProvider.js\";\r\nimport type MD5ComputationStrategy from \"./md5ComputationStrategies/md5ComputationStrategy.js\";\r\nimport type MD5ComputationStrategyFactory from \"./md5ComputationStrategies/md5ComputationStrategyFactory.js\";\r\nimport type MD5ComputationSession from \"./md5ComputationStrategies/md5ComputationSession.js\";\r\n\r\nexport default class PrecomputedMD5Provider<T extends FileDetails> implements UploaderMD5Provider<T> {\r\n readonly #md5ComputationStrategyFactory: MD5ComputationStrategyFactory;\r\n readonly #format: string;\r\n\r\n #isRunning = false;\r\n #isFinished = false;\r\n #isError: Error | undefined = undefined;\r\n\r\n #mainLoopPromise: Promise<void> | undefined;\r\n\r\n #internalAbortController: AbortController | undefined;\r\n\r\n #computedMD5s = new Map<string | number, Map<number, MD5ComputationResult>>();\r\n #observers: Set<MD5ProviderObserver> = new Set();\r\n\r\n #encryptionData?: ChunkStreamEncryptionData;\r\n\r\n readonly #chunkStreamProviderFactory: UploaderChunkStreamProviderFactory<T>;\r\n readonly #concurrencyController: ConcurrencyController;\r\n\r\n constructor(md5ComputationStrategyFactory: MD5ComputationStrategyFactory, format: string, chunkStreamProviderFactory: UploaderChunkStreamProviderFactory<T>, concurrencyController: ConcurrencyController) {\r\n if (!md5ComputationStrategyFactory)\r\n throw new Error(`MD5 computation strategy factory is undefined`);\r\n if (!format || format.length === 0)\r\n throw new Error(`MD5 format is incorrect`);\r\n if (!chunkStreamProviderFactory)\r\n throw new Error(`Chunk stream provider factory is undefined`);\r\n if (!concurrencyController)\r\n throw new Error(`Concurrency controller is undefined`);\r\n\r\n this.#md5ComputationStrategyFactory = md5ComputationStrategyFactory;\r\n this.#format = format;\r\n this.#chunkStreamProviderFactory = chunkStreamProviderFactory;\r\n this.#concurrencyController = concurrencyController;\r\n }\r\n\r\n async start(files: UploaderMD5ProviderFileToBeMD5Hashed<T>[], encryptionData: ChunkStreamEncryptionData | undefined, abortSignal?: AbortSignal): Promise<void> {\r\n try {\r\n this.clear();\r\n\r\n this.#encryptionData = encryptionData;\r\n\r\n this.throwIfEncryptionDataIsNotValid();\r\n\r\n this.#isRunning = true;\r\n\r\n this.#internalAbortController = new AbortController();\r\n\r\n this.addAbortSignalListener(abortSignal);\r\n\r\n this.#mainLoopPromise = this.precomputeAllFiles(files);\r\n\r\n await this.#mainLoopPromise;\r\n\r\n this.#isFinished = !this.#internalAbortController.signal.aborted;\r\n }\r\n catch (error) {\r\n this.#isError = new Error(`Unhandled error occured in WebPrecomputedMD5Provider. See 'cause' for more details`, { cause: error as Error });\r\n }\r\n finally {\r\n this.#isRunning = false;\r\n\r\n this.notifyObservers();\r\n }\r\n }\r\n\r\n private clear() {\r\n this.#computedMD5s.clear();\r\n this.#isFinished = false;\r\n this.#isError = undefined;\r\n }\r\n\r\n private addAbortSignalListener(abortSignal: AbortSignal | undefined) {\r\n const internalAbortController = this.#internalAbortController!;\r\n\r\n if (abortSignal?.aborted)\r\n internalAbortController.abort();\r\n else\r\n abortSignal?.addEventListener(`abort`, () => internalAbortController.abort(), { once: true });\r\n }\r\n\r\n private throwIfEncryptionDataIsNotValid() {\r\n if (!this.#encryptionData)\r\n return;\r\n\r\n if (this.#encryptionData.iv.length !== 16)\r\n throw new FsError(`Encryption IV must be 16 bytes long`);\r\n if (this.#encryptionData.key.length !== 32)\r\n throw new FsError(`Encryption key must be 32 bytes long`);\r\n }\r\n\r\n private async precomputeAllFiles(files: UploaderMD5ProviderFileToBeMD5Hashed<T>[]) {\r\n let session: MD5ComputationSession | undefined;\r\n\r\n try {\r\n if (this.shouldStopProcessing())\r\n return;\r\n\r\n session = await this.#md5ComputationStrategyFactory.createSession(this.#internalAbortController?.signal);\r\n\r\n await this.precomputeChunks(files, session.strategy);\r\n }\r\n catch (error) {\r\n if (!this.#internalAbortController?.signal.aborted)\r\n throw error;\r\n }\r\n finally {\r\n session?.dispose();\r\n }\r\n }\r\n\r\n private async precomputeChunks(files: UploaderMD5ProviderFileToBeMD5Hashed<T>[], strategy: MD5ComputationStrategy) {\r\n const ongoingChunkMD5Computations = new Set<Promise<void>>();\r\n\r\n try {\r\n for (const file of files) {\r\n for (const chunk of file.chunksIterator) {\r\n const releaseSemaphore = await this.#concurrencyController.acquire();\r\n\r\n if (this.shouldStopProcessing()) {\r\n releaseSemaphore();\r\n break;\r\n }\r\n\r\n const chunkMD5ComputingPromise = this.precomputeChunkMd5(file.file, chunk.startPosition, chunk.sizeInBytes, releaseSemaphore, strategy);\r\n\r\n const trackedChunkUploadPromise = chunkMD5ComputingPromise.finally(() => {\r\n ongoingChunkMD5Computations.delete(trackedChunkUploadPromise);\r\n });\r\n\r\n ongoingChunkMD5Computations.add(trackedChunkUploadPromise);\r\n\r\n if (this.shouldStopProcessing())\r\n break;\r\n }\r\n\r\n if (this.shouldStopProcessing())\r\n break;\r\n }\r\n }\r\n finally {\r\n await promiseAllSettled(Array.from(ongoingChunkMD5Computations));\r\n }\r\n }\r\n\r\n private async precomputeChunkMd5(file: T, chunkStartPosition: number, chunkSizeInBytes: number, releaseSemaphore: ConcurrencyReleaser, strategy: MD5ComputationStrategy) {\r\n let chunkStreamProvider: ChunkStreamProvider | undefined;\r\n\r\n try {\r\n chunkStreamProvider = this.#chunkStreamProviderFactory.createChunkStreamProvider(file, chunkStartPosition, chunkSizeInBytes, this.#encryptionData);\r\n\r\n const md5 = await strategy.computeMD5(chunkStreamProvider, this.#format, this.#internalAbortController?.signal);\r\n\r\n this.setComputationResult(file.externalId, chunkStartPosition, { isSuccess: true, md5 });\r\n }\r\n catch (error) {\r\n const chunkError = this.getChunkError(error);\r\n\r\n this.setComputationResult(file.externalId, chunkStartPosition, { isSuccess: false, error: chunkError });\r\n }\r\n finally {\r\n releaseSemaphore();\r\n\r\n if (chunkStreamProvider && !chunkStreamProvider.isReleased)\r\n await chunkStreamProvider.release().catch(() => { /* Cleanup failure must not replace the MD5 result. */ });\r\n\r\n this.notifyObservers();\r\n }\r\n }\r\n\r\n private getChunkError(error: unknown): Error {\r\n if (this.#internalAbortController?.signal?.aborted)\r\n return this.createAbortError(this.#internalAbortController?.signal);\r\n\r\n if (error instanceof FsError)\r\n return error;\r\n\r\n return new FsError(`ComputingFileMd5ChecksumException`, { cause: error as Error });\r\n }\r\n\r\n private createAbortError(abortSignal: AbortSignal) {\r\n if (abortSignal.reason instanceof Error)\r\n return abortSignal.reason;\r\n\r\n return new Error(`Aborted`);\r\n }\r\n\r\n private setComputationResult(fileId: string | number, chunkStartPosition: number, result: MD5ComputationResult) {\r\n if (!this.#computedMD5s.has(fileId))\r\n this.#computedMD5s.set(fileId, new Map());\r\n\r\n this.#computedMD5s.get(fileId)!.set(chunkStartPosition, result);\r\n }\r\n\r\n private shouldStopProcessing() {\r\n return this.#internalAbortController?.signal.aborted === true || this.#isError;\r\n }\r\n\r\n async stop(): Promise<void> {\r\n this.#internalAbortController?.abort();\r\n\r\n await this.#mainLoopPromise;\r\n }\r\n\r\n private notifyObservers() {\r\n this.#observers.forEach(observer => this.notifyAndRemoveObserverIfResultExists(observer));\r\n }\r\n\r\n private notifyAndRemoveObserverIfResultExists(observer: MD5ProviderObserver) {\r\n const result = this.#computedMD5s.get(observer.fileId)?.get(observer.chunkStartPosition);\r\n\r\n if (result) {\r\n if (result.isSuccess)\r\n observer.resolve(result.md5);\r\n else\r\n observer.reject(result.error);\r\n\r\n this.removeObserver(observer);\r\n\r\n return;\r\n }\r\n\r\n if (this.#isRunning)\r\n return;\r\n\r\n if (this.#isError)\r\n observer.reject(this.#isError);\r\n else if (this.#isFinished)\r\n observer.reject(new Error(`MD5 provider has never computed MD5 for this chunk`));\r\n else\r\n observer.reject(new Error(`MD5s precomputing failed`));\r\n\r\n this.removeObserver(observer);\r\n }\r\n\r\n private removeObserver(observer: MD5ProviderObserver) {\r\n this.#observers.delete(observer);\r\n }\r\n\r\n async getMd5Checksum(file: T, chunkStartPosition: number): Promise<string> {\r\n const promise = new Promise<string>((resolve, reject) => {\r\n const observer = { fileId: file.externalId, chunkStartPosition, resolve, reject };\r\n\r\n this.#observers.add(observer);\r\n\r\n this.notifyAndRemoveObserverIfResultExists(observer);\r\n });\r\n\r\n return promise;\r\n }\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"uploaderMD5Provider.js","sourceRoot":"","sources":["../../../../src/uploader/md5Provider/uploaderMD5Provider.ts"],"names":[],"mappings":"","sourcesContent":["import ChunkStreamEncryptionData from \"../../utils/fileSystem/chunkStreamEncryptionData.js\";\n\ninterface UploaderMD5Provider<T> {\n start(files: UploaderMD5ProviderFileToBeMD5Hashed<T>[], encryptionData: ChunkStreamEncryptionData | undefined, abortSignal?: AbortSignal): Promise<void>;\n\n stop(): Promise<void>;\n\n getMd5Checksum(file: T, chunkStartPosition: number): Promise<string>;\n}\n\nexport default UploaderMD5Provider;\n\nexport type MD5ComputationResult = ({\n isSuccess: true;\n md5: string;\n} | {\n isSuccess: false;\n error: Error;\n});\n\nexport type UploaderMD5ProviderFileToBeMD5Hashed<T> = {\n file: Readonly<T>;\n chunksIterator: IterableIterator<{\n startPosition: number;\n sizeInBytes: number;\n }>;\n};\n\nexport type MD5ProviderObserver = {\n fileId: string | number;\n chunkStartPosition: number;\n resolve: (md5: string) => void;\n reject: (error: Error) => void;\n};"]}
1
+ {"version":3,"file":"uploaderMD5Provider.js","sourceRoot":"","sources":["../../../../src/uploader/md5Provider/uploaderMD5Provider.ts"],"names":[],"mappings":"","sourcesContent":["import ChunkStreamEncryptionData from \"../../utils/fileSystem/chunkStreamEncryptionData.js\";\r\n\r\ninterface UploaderMD5Provider<T> {\r\n start(files: UploaderMD5ProviderFileToBeMD5Hashed<T>[], encryptionData: ChunkStreamEncryptionData | undefined, abortSignal?: AbortSignal): Promise<void>;\r\n\r\n stop(): Promise<void>;\r\n\r\n getMd5Checksum(file: T, chunkStartPosition: number): Promise<string>;\r\n}\r\n\r\nexport default UploaderMD5Provider;\r\n\r\nexport type MD5ComputationResult = ({\r\n isSuccess: true;\r\n md5: string;\r\n} | {\r\n isSuccess: false;\r\n error: Error;\r\n});\r\n\r\nexport type UploaderMD5ProviderFileToBeMD5Hashed<T> = {\r\n file: Readonly<T>;\r\n chunksIterator: IterableIterator<{\r\n startPosition: number;\r\n sizeInBytes: number;\r\n }>;\r\n};\r\n\r\nexport type MD5ProviderObserver = {\r\n fileId: string | number;\r\n chunkStartPosition: number;\r\n resolve: (md5: string) => void;\r\n reject: (error: Error) => void;\r\n};"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploadAppendInfo.js","sourceRoot":"","sources":["../../../../src/uploader/options/transferUploadAppendInfo.ts"],"names":[],"mappings":"","sourcesContent":["import type TransferUploadInfoBase from \"./transferUploadInfoBase.js\";\n\ninterface TransferUploadAppendInfo<T> extends TransferUploadInfoBase<T> {\n transferId: string,\n transferKey: string,\n transferFileServerUrl: string,\n transferDownloadUrl: string,\n transferRegion?: string,\n e2eeData?: TransferUploadAppendInfoE2eeData,\n}\n\ninterface TransferUploadAppendInfoE2eeData {\n iv: Uint8Array,\n key: Uint8Array,\n}\n\nexport { TransferUploadAppendInfoE2eeData, TransferUploadAppendInfo };\n"]}
1
+ {"version":3,"file":"transferUploadAppendInfo.js","sourceRoot":"","sources":["../../../../src/uploader/options/transferUploadAppendInfo.ts"],"names":[],"mappings":"","sourcesContent":["import type TransferUploadInfoBase from \"./transferUploadInfoBase.js\";\r\n\r\ninterface TransferUploadAppendInfo<T> extends TransferUploadInfoBase<T> {\r\n transferId: string,\r\n transferKey: string,\r\n transferFileServerUrl: string,\r\n transferDownloadUrl: string,\r\n transferRegion?: string,\r\n e2eeData?: TransferUploadAppendInfoE2eeData,\r\n}\r\n\r\ninterface TransferUploadAppendInfoE2eeData {\r\n iv: Uint8Array,\r\n key: Uint8Array,\r\n}\r\n\r\nexport { TransferUploadAppendInfoE2eeData, TransferUploadAppendInfo };\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploadConfig.js","sourceRoot":"","sources":["../../../../src/uploader/options/transferUploadConfig.ts"],"names":[],"mappings":"","sourcesContent":["interface TransferUploadConfig {\n progressEventThrottlingInMs: number,\n currentRatesTimespanInMs: number,\n chunkSizeInBytes: number,\n}\n\nexport default TransferUploadConfig;\n"]}
1
+ {"version":3,"file":"transferUploadConfig.js","sourceRoot":"","sources":["../../../../src/uploader/options/transferUploadConfig.ts"],"names":[],"mappings":"","sourcesContent":["interface TransferUploadConfig {\r\n progressEventThrottlingInMs: number,\r\n currentRatesTimespanInMs: number,\r\n chunkSizeInBytes: number,\r\n}\r\n\r\nexport default TransferUploadConfig;\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploadInfo.js","sourceRoot":"","sources":["../../../../src/uploader/options/transferUploadInfo.ts"],"names":[],"mappings":"","sourcesContent":["import type TransferUploadInfoBase from \"./transferUploadInfoBase.js\";\n\ninterface TransferUploadInfo<T> extends TransferUploadInfoBase<T> {\n dataRegion?: `auto` | `eu` | `us` | `no`,\n confirmation?: boolean,\n days?: number,\n from?: string,\n to?: string[],\n message?: string,\n notify?: boolean,\n subject?: string,\n uploadPassword?: string,\n companyId?: string,\n incomingLoginToken?: string,\n incomingPageId?: string,\n fileRequestId?: string,\n fileRequestShareId?: string,\n customFields?: TransferUploadInfoCustomField[],\n e2eeKey?: string,\n}\n\nexport interface TransferUploadInfoCustomField {\n id: string,\n value: string | string[],\n}\n\nexport default TransferUploadInfo;\n"]}
1
+ {"version":3,"file":"transferUploadInfo.js","sourceRoot":"","sources":["../../../../src/uploader/options/transferUploadInfo.ts"],"names":[],"mappings":"","sourcesContent":["import type TransferUploadInfoBase from \"./transferUploadInfoBase.js\";\r\n\r\ninterface TransferUploadInfo<T> extends TransferUploadInfoBase<T> {\r\n dataRegion?: `auto` | `eu` | `us` | `no`,\r\n confirmation?: boolean,\r\n days?: number,\r\n from?: string,\r\n to?: string[],\r\n message?: string,\r\n notify?: boolean,\r\n subject?: string,\r\n uploadPassword?: string,\r\n companyId?: string,\r\n incomingLoginToken?: string,\r\n incomingPageId?: string,\r\n fileRequestId?: string,\r\n fileRequestShareId?: string,\r\n customFields?: TransferUploadInfoCustomField[],\r\n e2eeKey?: string,\r\n}\r\n\r\nexport interface TransferUploadInfoCustomField {\r\n id: string,\r\n value: string | string[],\r\n}\r\n\r\nexport default TransferUploadInfo;\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploadInfoBase.js","sourceRoot":"","sources":["../../../../src/uploader/options/transferUploadInfoBase.ts"],"names":[],"mappings":"","sourcesContent":["interface TransferUploadInfoBase<T> {\n files: T[];\n isLegacyTransfer?: boolean;\n}\n\nexport default TransferUploadInfoBase;"]}
1
+ {"version":3,"file":"transferUploadInfoBase.js","sourceRoot":"","sources":["../../../../src/uploader/options/transferUploadInfoBase.ts"],"names":[],"mappings":"","sourcesContent":["interface TransferUploadInfoBase<T> {\r\n files: T[];\r\n isLegacyTransfer?: boolean;\r\n}\r\n\r\nexport default TransferUploadInfoBase;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"pauseController.js","sourceRoot":"","sources":["../../../src/uploader/pauseController.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,MAAM,CAAC,OAAO,OAAO,eAAe;IAChC,OAAO,GAAG,IAAI,yBAAyB,EAAE,CAAC;IAE1C,KAAK;QACD,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;IACjD,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;CACJ;AAQD,MAAM,yBAAyB;IAClB,gBAAgB,GAAG,IAAI,eAAe,EAAE,CAAC;IAElD,IAAI,uBAAuB;QACvB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;IAChD,CAAC;IAED,gBAAgB,CAAC,UAAmB,EAAE,QAAoB;QACtD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrE,CAAC;IAED,mBAAmB,CAAC,UAAmB,EAAE,QAAoB;QACzD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACxE,CAAC;CACJ","sourcesContent":["/* eslint-disable max-classes-per-file */\nexport default class PauseController {\n #signal = new PauseSignalImplementation();\n\n pause() {\n this.#signal.internalAbortController.abort();\n }\n\n get signal(): PauseSignal {\n return this.#signal;\n }\n}\n\nexport interface PauseSignal {\n paused: boolean,\n addEventListener(eventName: `pause`, listener: () => void): void;\n removeEventListener(_eventName: `pause`, listener: () => void): void;\n}\n\nclass PauseSignalImplementation {\n readonly #abortController = new AbortController();\n\n get internalAbortController(): AbortController {\n return this.#abortController;\n }\n\n get paused(): boolean {\n return this.#abortController.signal.aborted;\n }\n\n addEventListener(_eventName: `pause`, listener: () => void) {\n this.#abortController.signal.addEventListener(`abort`, listener);\n }\n\n removeEventListener(_eventName: `pause`, listener: () => void) {\n this.#abortController.signal.removeEventListener(`abort`, listener);\n }\n}"]}
1
+ {"version":3,"file":"pauseController.js","sourceRoot":"","sources":["../../../src/uploader/pauseController.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,MAAM,CAAC,OAAO,OAAO,eAAe;IAChC,OAAO,GAAG,IAAI,yBAAyB,EAAE,CAAC;IAE1C,KAAK;QACD,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;IACjD,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;CACJ;AAQD,MAAM,yBAAyB;IAClB,gBAAgB,GAAG,IAAI,eAAe,EAAE,CAAC;IAElD,IAAI,uBAAuB;QACvB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;IAChD,CAAC;IAED,gBAAgB,CAAC,UAAmB,EAAE,QAAoB;QACtD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrE,CAAC;IAED,mBAAmB,CAAC,UAAmB,EAAE,QAAoB;QACzD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACxE,CAAC;CACJ","sourcesContent":["/* eslint-disable max-classes-per-file */\r\nexport default class PauseController {\r\n #signal = new PauseSignalImplementation();\r\n\r\n pause() {\r\n this.#signal.internalAbortController.abort();\r\n }\r\n\r\n get signal(): PauseSignal {\r\n return this.#signal;\r\n }\r\n}\r\n\r\nexport interface PauseSignal {\r\n paused: boolean,\r\n addEventListener(eventName: `pause`, listener: () => void): void;\r\n removeEventListener(_eventName: `pause`, listener: () => void): void;\r\n}\r\n\r\nclass PauseSignalImplementation {\r\n readonly #abortController = new AbortController();\r\n\r\n get internalAbortController(): AbortController {\r\n return this.#abortController;\r\n }\r\n\r\n get paused(): boolean {\r\n return this.#abortController.signal.aborted;\r\n }\r\n\r\n addEventListener(_eventName: `pause`, listener: () => void) {\r\n this.#abortController.signal.addEventListener(`abort`, listener);\r\n }\r\n\r\n removeEventListener(_eventName: `pause`, listener: () => void) {\r\n this.#abortController.signal.removeEventListener(`abort`, listener);\r\n }\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"pendingFileAck.js","sourceRoot":"","sources":["../../../src/uploader/pendingFileAck.ts"],"names":[],"mappings":"","sourcesContent":["interface PendingFileAck {\n externalFileId: string | number,\n uploadItemId: string,\n sizeInBytes: number,\n}\n\nexport default PendingFileAck;\n"]}
1
+ {"version":3,"file":"pendingFileAck.js","sourceRoot":"","sources":["../../../src/uploader/pendingFileAck.ts"],"names":[],"mappings":"","sourcesContent":["interface PendingFileAck {\r\n externalFileId: string | number,\r\n uploadItemId: string,\r\n sizeInBytes: number,\r\n}\r\n\r\nexport default PendingFileAck;\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"registeredTransferFile.js","sourceRoot":"","sources":["../../../src/uploader/registeredTransferFile.ts"],"names":[],"mappings":"","sourcesContent":["interface RegisteredTransferFile {\n uploadItemId: string,\n fileId: string,\n}\n\nexport default RegisteredTransferFile;\n"]}
1
+ {"version":3,"file":"registeredTransferFile.js","sourceRoot":"","sources":["../../../src/uploader/registeredTransferFile.ts"],"names":[],"mappings":"","sourcesContent":["interface RegisteredTransferFile {\r\n uploadItemId: string,\r\n fileId: string,\r\n}\r\n\r\nexport default RegisteredTransferFile;\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"continuousChunksCalculator.js","sourceRoot":"","sources":["../../../../src/uploader/state/continuousChunksCalculator.ts"],"names":[],"mappings":"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","sourcesContent":["export default class ContinuousChunksCalculator {\n #filesChunks: Map<string | number, ContinuousChunk[]> = new Map();\n\n export(): ContinuousChunksCalculatorState {\n const fileChunksEntries = Array.from(this.#filesChunks.entries());\n return fileChunksEntries.map(entry => this.copyFileChunksEntry(entry));\n }\n\n recover(exportedState: ContinuousChunksCalculatorState) {\n const copiedEntries = exportedState.map(entry => this.copyFileChunksEntry(entry));\n this.#filesChunks = new Map(copiedEntries);\n }\n\n private copyFileChunksEntry([fileId, chunks]: readonly [string | number, ContinuousChunk[]]): [string | number, ContinuousChunk[]] {\n const copiedChunks = chunks.map(chunk => ({ ...chunk }));\n return [fileId, copiedChunks];\n }\n\n getChunks(fileId: string | number): readonly Readonly<ContinuousChunk>[] {\n return this.#filesChunks.get(fileId) ?? [];\n }\n\n getChunksUploadedBytesCount(fileId: string | number): number {\n return this.getChunks(fileId).reduce((partialSum, chunk) => partialSum + chunk.sizeInBytes, 0);\n }\n\n addNewChunk(fileId: string | number, newChunk: ContinuousChunk) {\n if (newChunk.sizeInBytes === 0)\n return;\n\n if (!this.#filesChunks.has(fileId)) {\n this.initializeNewFileWithNewChunk(fileId, newChunk);\n return;\n }\n\n this.processNewChunk(fileId, newChunk);\n }\n\n private initializeNewFileWithNewChunk(fileId: string | number, newChunk: ContinuousChunk) {\n const initValue = [newChunk];\n\n this.#filesChunks.set(fileId, initValue);\n\n return initValue;\n }\n\n private processNewChunk(fileId: string | number, newChunk: ContinuousChunk) {\n const fileChunks = this.#filesChunks.get(fileId)!;\n\n for (let i = 0; i < fileChunks.length; i++) {\n const nextChunkIndex = i + 1;\n\n const thisChunk = fileChunks[i]!;\n const nextChunk = fileChunks.length > nextChunkIndex ? fileChunks[nextChunkIndex] : undefined;\n\n const thisChunksNextContinuousChunkStartPosition = thisChunk.startPosition + thisChunk.sizeInBytes;\n const newChunksNextContinuousChunkStartPosition = newChunk.startPosition + newChunk.sizeInBytes;\n\n const isThisChunkStartingAfterNewChunk = thisChunk.startPosition > newChunk.startPosition;\n\n const canExtendThisChunk = thisChunksNextContinuousChunkStartPosition === newChunk.startPosition;\n const canJoinWithThisChunk = thisChunk.startPosition === newChunksNextContinuousChunkStartPosition;\n const canJoinWithNextChunk = nextChunk && nextChunk.startPosition === newChunksNextContinuousChunkStartPosition;\n\n if (canExtendThisChunk && canJoinWithNextChunk) {\n this.joinTwoExistingChunksWithNewChunk(fileId, i, newChunk, nextChunkIndex);\n return;\n }\n\n if (canExtendThisChunk) {\n this.extendExistingChunkWithNewChunk(fileId, i, newChunk);\n return;\n }\n\n if (canJoinWithThisChunk) {\n this.joinNewChunkWithExistingChunk(fileId, newChunk, i);\n return;\n }\n\n if (isThisChunkStartingAfterNewChunk) {\n this.insertNewChunkIntoSequence(fileId, i, newChunk);\n return;\n }\n }\n\n fileChunks.push(newChunk);\n }\n\n private joinTwoExistingChunksWithNewChunk(fileId: string | number, leftChunkIndex: number, newChunk: ContinuousChunk, rightChunkIndex: number) {\n const fileChunks = this.#filesChunks.get(fileId)!;\n\n const leftChunk = fileChunks[leftChunkIndex]!;\n const rightChunk = fileChunks[rightChunkIndex]!;\n\n leftChunk.sizeInBytes += newChunk.sizeInBytes + rightChunk.sizeInBytes;\n\n fileChunks.splice(rightChunkIndex, 1);\n }\n\n private extendExistingChunkWithNewChunk(fileId: string | number, existingChunkIndex: number, newChunk: ContinuousChunk) {\n const fileChunks = this.#filesChunks.get(fileId)!;\n fileChunks[existingChunkIndex]!.sizeInBytes += newChunk.sizeInBytes;\n }\n\n private joinNewChunkWithExistingChunk(fileId: string | number, newChunk: ContinuousChunk, existingChunkIndex: number) {\n const fileChunks = this.#filesChunks.get(fileId)!;\n fileChunks[existingChunkIndex]!.startPosition = newChunk.startPosition;\n fileChunks[existingChunkIndex]!.sizeInBytes += newChunk.sizeInBytes;\n }\n\n private insertNewChunkIntoSequence(fileId: string | number, indexToInsertAt: number, newChunk: ContinuousChunk) {\n const fileChunks = this.#filesChunks.get(fileId)!;\n fileChunks.splice(indexToInsertAt, 0, newChunk);\n }\n}\n\nexport type ContinuousChunk = { startPosition: number, sizeInBytes: number };\nexport type ContinuousChunksCalculatorState = [string | number, ContinuousChunk[]][];"]}
1
+ {"version":3,"file":"continuousChunksCalculator.js","sourceRoot":"","sources":["../../../../src/uploader/state/continuousChunksCalculator.ts"],"names":[],"mappings":"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","sourcesContent":["export default class ContinuousChunksCalculator {\r\n #filesChunks: Map<string | number, ContinuousChunk[]> = new Map();\r\n\r\n export(): ContinuousChunksCalculatorState {\r\n const fileChunksEntries = Array.from(this.#filesChunks.entries());\r\n return fileChunksEntries.map(entry => this.copyFileChunksEntry(entry));\r\n }\r\n\r\n recover(exportedState: ContinuousChunksCalculatorState) {\r\n const copiedEntries = exportedState.map(entry => this.copyFileChunksEntry(entry));\r\n this.#filesChunks = new Map(copiedEntries);\r\n }\r\n\r\n private copyFileChunksEntry([fileId, chunks]: readonly [string | number, ContinuousChunk[]]): [string | number, ContinuousChunk[]] {\r\n const copiedChunks = chunks.map(chunk => ({ ...chunk }));\r\n return [fileId, copiedChunks];\r\n }\r\n\r\n getChunks(fileId: string | number): readonly Readonly<ContinuousChunk>[] {\r\n return this.#filesChunks.get(fileId) ?? [];\r\n }\r\n\r\n getChunksUploadedBytesCount(fileId: string | number): number {\r\n return this.getChunks(fileId).reduce((partialSum, chunk) => partialSum + chunk.sizeInBytes, 0);\r\n }\r\n\r\n addNewChunk(fileId: string | number, newChunk: ContinuousChunk) {\r\n if (newChunk.sizeInBytes === 0)\r\n return;\r\n\r\n if (!this.#filesChunks.has(fileId)) {\r\n this.initializeNewFileWithNewChunk(fileId, newChunk);\r\n return;\r\n }\r\n\r\n this.processNewChunk(fileId, newChunk);\r\n }\r\n\r\n private initializeNewFileWithNewChunk(fileId: string | number, newChunk: ContinuousChunk) {\r\n const initValue = [newChunk];\r\n\r\n this.#filesChunks.set(fileId, initValue);\r\n\r\n return initValue;\r\n }\r\n\r\n private processNewChunk(fileId: string | number, newChunk: ContinuousChunk) {\r\n const fileChunks = this.#filesChunks.get(fileId)!;\r\n\r\n for (let i = 0; i < fileChunks.length; i++) {\r\n const nextChunkIndex = i + 1;\r\n\r\n const thisChunk = fileChunks[i]!;\r\n const nextChunk = fileChunks.length > nextChunkIndex ? fileChunks[nextChunkIndex] : undefined;\r\n\r\n const thisChunksNextContinuousChunkStartPosition = thisChunk.startPosition + thisChunk.sizeInBytes;\r\n const newChunksNextContinuousChunkStartPosition = newChunk.startPosition + newChunk.sizeInBytes;\r\n\r\n const isThisChunkStartingAfterNewChunk = thisChunk.startPosition > newChunk.startPosition;\r\n\r\n const canExtendThisChunk = thisChunksNextContinuousChunkStartPosition === newChunk.startPosition;\r\n const canJoinWithThisChunk = thisChunk.startPosition === newChunksNextContinuousChunkStartPosition;\r\n const canJoinWithNextChunk = nextChunk && nextChunk.startPosition === newChunksNextContinuousChunkStartPosition;\r\n\r\n if (canExtendThisChunk && canJoinWithNextChunk) {\r\n this.joinTwoExistingChunksWithNewChunk(fileId, i, newChunk, nextChunkIndex);\r\n return;\r\n }\r\n\r\n if (canExtendThisChunk) {\r\n this.extendExistingChunkWithNewChunk(fileId, i, newChunk);\r\n return;\r\n }\r\n\r\n if (canJoinWithThisChunk) {\r\n this.joinNewChunkWithExistingChunk(fileId, newChunk, i);\r\n return;\r\n }\r\n\r\n if (isThisChunkStartingAfterNewChunk) {\r\n this.insertNewChunkIntoSequence(fileId, i, newChunk);\r\n return;\r\n }\r\n }\r\n\r\n fileChunks.push(newChunk);\r\n }\r\n\r\n private joinTwoExistingChunksWithNewChunk(fileId: string | number, leftChunkIndex: number, newChunk: ContinuousChunk, rightChunkIndex: number) {\r\n const fileChunks = this.#filesChunks.get(fileId)!;\r\n\r\n const leftChunk = fileChunks[leftChunkIndex]!;\r\n const rightChunk = fileChunks[rightChunkIndex]!;\r\n\r\n leftChunk.sizeInBytes += newChunk.sizeInBytes + rightChunk.sizeInBytes;\r\n\r\n fileChunks.splice(rightChunkIndex, 1);\r\n }\r\n\r\n private extendExistingChunkWithNewChunk(fileId: string | number, existingChunkIndex: number, newChunk: ContinuousChunk) {\r\n const fileChunks = this.#filesChunks.get(fileId)!;\r\n fileChunks[existingChunkIndex]!.sizeInBytes += newChunk.sizeInBytes;\r\n }\r\n\r\n private joinNewChunkWithExistingChunk(fileId: string | number, newChunk: ContinuousChunk, existingChunkIndex: number) {\r\n const fileChunks = this.#filesChunks.get(fileId)!;\r\n fileChunks[existingChunkIndex]!.startPosition = newChunk.startPosition;\r\n fileChunks[existingChunkIndex]!.sizeInBytes += newChunk.sizeInBytes;\r\n }\r\n\r\n private insertNewChunkIntoSequence(fileId: string | number, indexToInsertAt: number, newChunk: ContinuousChunk) {\r\n const fileChunks = this.#filesChunks.get(fileId)!;\r\n fileChunks.splice(indexToInsertAt, 0, newChunk);\r\n }\r\n}\r\n\r\nexport type ContinuousChunk = { startPosition: number, sizeInBytes: number };\r\nexport type ContinuousChunksCalculatorState = [string | number, ContinuousChunk[]][];"]}
@@ -1 +1 @@
1
- {"version":3,"file":"readonlyTransferUploadStateFile.js","sourceRoot":"","sources":["../../../../src/uploader/state/readonlyTransferUploadStateFile.ts"],"names":[],"mappings":"","sourcesContent":["import type TransferUploadStateFile from \"./transferUploadStateFile.js\";\n\ntype ReadonlyTransferUploadStateFile = Readonly<TransferUploadStateFile>;\n\nexport default ReadonlyTransferUploadStateFile;\n"]}
1
+ {"version":3,"file":"readonlyTransferUploadStateFile.js","sourceRoot":"","sources":["../../../../src/uploader/state/readonlyTransferUploadStateFile.ts"],"names":[],"mappings":"","sourcesContent":["import type TransferUploadStateFile from \"./transferUploadStateFile.js\";\r\n\r\ntype ReadonlyTransferUploadStateFile = Readonly<TransferUploadStateFile>;\r\n\r\nexport default ReadonlyTransferUploadStateFile;\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"readonlyTransferUploadStateFiles.js","sourceRoot":"","sources":["../../../../src/uploader/state/readonlyTransferUploadStateFiles.ts"],"names":[],"mappings":"","sourcesContent":["import type ReadonlyTransferUploadStateFile from \"./readonlyTransferUploadStateFile.js\";\n\ntype ReadonlyTransferUploadStateFiles = {\n [externalId: string | number]: ReadonlyTransferUploadStateFile;\n}\n\nexport default ReadonlyTransferUploadStateFiles;"]}
1
+ {"version":3,"file":"readonlyTransferUploadStateFiles.js","sourceRoot":"","sources":["../../../../src/uploader/state/readonlyTransferUploadStateFiles.ts"],"names":[],"mappings":"","sourcesContent":["import type ReadonlyTransferUploadStateFile from \"./readonlyTransferUploadStateFile.js\";\r\n\r\ntype ReadonlyTransferUploadStateFiles = {\r\n [externalId: string | number]: ReadonlyTransferUploadStateFile;\r\n}\r\n\r\nexport default ReadonlyTransferUploadStateFiles;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploadProgressCalculator.js","sourceRoot":"","sources":["../../../../src/uploader/state/transferUploadProgressCalculator.ts"],"names":[],"mappings":"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","sourcesContent":["class TransferUploadRatesCalculator {\n #currentRatesTimespanInMs: number;\n #totalSizeInBytes: number;\n #startTime: number;\n #uploadedBytesCountSinceStart: number;\n\n #previousCurrentSpeedInBytesPerSec?: number;\n #previousRemainingSeconds?: number;\n\n #progressEventsHistory: { time: number, uploadedBytesCount: number; }[];\n\n constructor(totalSizeInBytes: number, currentRatesTimespanInMs: number) {\n this.#startTime = new Date().getTime();\n this.#uploadedBytesCountSinceStart = 0;\n this.#progressEventsHistory = [];\n\n this.#currentRatesTimespanInMs = currentRatesTimespanInMs;\n this.#totalSizeInBytes = totalSizeInBytes;\n }\n\n addNewProgressEvent(uploadedBytesCount: number) {\n this.#uploadedBytesCountSinceStart += uploadedBytesCount;\n this.#progressEventsHistory.push({ time: new Date().getTime(), uploadedBytesCount });\n }\n\n getRates(uploadedBytesTotal: number): { remainingSeconds: number, currentSpeedInBytesPerSec: number, averageSpeedInBytesPerSec: number } {\n const currentTime = new Date().getTime();\n\n this.removeOldEventsButLeaveAtLeastFour(currentTime);\n\n const averageStats = this.calculateSpeedAndRemainingTime(currentTime, this.#startTime, this.#uploadedBytesCountSinceStart, uploadedBytesTotal);\n\n if (this.#progressEventsHistory.length === 0) {\n const remainingSeconds = this.smoothRemainingSecondsWithMemoization(averageStats.remainingSeconds);\n\n return {\n remainingSeconds,\n currentSpeedInBytesPerSec: 0,\n averageSpeedInBytesPerSec: averageStats.speedInBytesPerSec,\n };\n }\n\n const historyTransferredBytesSum = this.#progressEventsHistory.reduce((partialSum, event) => partialSum + event.uploadedBytesCount, 0);\n const currentStats = this.calculateSpeedAndRemainingTime(currentTime, this.#progressEventsHistory[0]!.time, historyTransferredBytesSum, uploadedBytesTotal);\n\n const smoothedCurrentSpeedInBytesPerSec = this.smoothCurrentSpeedInBytesPerSecWithMemoization(currentStats.speedInBytesPerSec);\n const remainingSeconds = this.smoothRemainingSecondsWithMemoization(currentStats.remainingSeconds);\n\n return {\n remainingSeconds,\n currentSpeedInBytesPerSec: smoothedCurrentSpeedInBytesPerSec,\n averageSpeedInBytesPerSec: averageStats.speedInBytesPerSec,\n };\n }\n\n private removeOldEventsButLeaveAtLeastFour(currentTime: number) {\n while (this.#progressEventsHistory.length > 4 && currentTime - this.#progressEventsHistory[0]!.time > this.#currentRatesTimespanInMs)\n this.#progressEventsHistory.shift();\n }\n\n private calculateSpeedAndRemainingTime(currentTime: number, sinceTime: number, transferredBytes: number, uploadedBytesTotal: number) {\n const elapsedInSeconds = (currentTime - sinceTime) / 1000;\n\n if (elapsedInSeconds === 0)\n return { remainingSeconds: Number.POSITIVE_INFINITY, speedInBytesPerSec: 0 };\n\n const speedInBytesPerSec = transferredBytes / elapsedInSeconds;\n\n if (speedInBytesPerSec === 0)\n return { remainingSeconds: Number.POSITIVE_INFINITY, speedInBytesPerSec: 0 };\n\n const remainingSeconds = (this.#totalSizeInBytes - uploadedBytesTotal) / speedInBytesPerSec;\n\n return { remainingSeconds, speedInBytesPerSec };\n }\n\n private smoothCurrentSpeedInBytesPerSecWithMemoization(currentSpeedInBytesPerSec: number): number {\n if (!this.#previousCurrentSpeedInBytesPerSec || !Number.isFinite(this.#previousCurrentSpeedInBytesPerSec))\n this.#previousCurrentSpeedInBytesPerSec = currentSpeedInBytesPerSec;\n\n const smoothedCurrentSpeedInBytesPerSec = currentSpeedInBytesPerSec * 0.7 + this.#previousCurrentSpeedInBytesPerSec * 0.3;\n\n this.#previousCurrentSpeedInBytesPerSec = smoothedCurrentSpeedInBytesPerSec;\n\n return smoothedCurrentSpeedInBytesPerSec;\n }\n\n private smoothRemainingSecondsWithMemoization(currentRemainingSeconds: number): number {\n if (!this.#previousRemainingSeconds || !Number.isFinite(this.#previousRemainingSeconds))\n this.#previousRemainingSeconds = currentRemainingSeconds;\n\n const computedRemainingSeconds = currentRemainingSeconds * 0.7 + this.#previousRemainingSeconds * 0.3;\n\n this.#previousRemainingSeconds = computedRemainingSeconds;\n\n return computedRemainingSeconds;\n }\n}\n\nexport default TransferUploadRatesCalculator;"]}
1
+ {"version":3,"file":"transferUploadProgressCalculator.js","sourceRoot":"","sources":["../../../../src/uploader/state/transferUploadProgressCalculator.ts"],"names":[],"mappings":"AAAA,MAAM,6BAA6B;IAC/B,yBAAyB,CAAS;IAClC,iBAAiB,CAAS;IAC1B,UAAU,CAAS;IACnB,6BAA6B,CAAS;IAEtC,kCAAkC,CAAU;IAC5C,yBAAyB,CAAU;IAEnC,sBAAsB,CAAkD;IAExE,YAAY,gBAAwB,EAAE,wBAAgC;QAClE,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACvC,IAAI,CAAC,6BAA6B,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;QAEjC,IAAI,CAAC,yBAAyB,GAAG,wBAAwB,CAAC;QAC1D,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;IAC9C,CAAC;IAED,mBAAmB,CAAC,kBAA0B;QAC1C,IAAI,CAAC,6BAA6B,IAAI,kBAAkB,CAAC;QACzD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,kBAAkB,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,QAAQ,CAAC,kBAA0B;QAC/B,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAEzC,IAAI,CAAC,kCAAkC,CAAC,WAAW,CAAC,CAAC;QAErD,MAAM,YAAY,GAAG,IAAI,CAAC,8BAA8B,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,6BAA6B,EAAE,kBAAkB,CAAC,CAAC;QAE/I,IAAI,IAAI,CAAC,sBAAsB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,MAAM,gBAAgB,GAAG,IAAI,CAAC,qCAAqC,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;YAEnG,OAAO;gBACH,gBAAgB;gBAChB,yBAAyB,EAAE,CAAC;gBAC5B,yBAAyB,EAAE,YAAY,CAAC,kBAAkB;aAC7D,CAAC;QACN,CAAC;QAED,MAAM,0BAA0B,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QACvI,MAAM,YAAY,GAAG,IAAI,CAAC,8BAA8B,CAAC,WAAW,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,0BAA0B,EAAE,kBAAkB,CAAC,CAAC;QAE5J,MAAM,iCAAiC,GAAG,IAAI,CAAC,8CAA8C,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;QAC/H,MAAM,gBAAgB,GAAG,IAAI,CAAC,qCAAqC,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;QAEnG,OAAO;YACH,gBAAgB;YAChB,yBAAyB,EAAE,iCAAiC;YAC5D,yBAAyB,EAAE,YAAY,CAAC,kBAAkB;SAC7D,CAAC;IACN,CAAC;IAEO,kCAAkC,CAAC,WAAmB;QAC1D,OAAO,IAAI,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAE,CAAC,IAAI,GAAG,IAAI,CAAC,yBAAyB;YAChI,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;IAC5C,CAAC;IAEO,8BAA8B,CAAC,WAAmB,EAAE,SAAiB,EAAE,gBAAwB,EAAE,kBAA0B;QAC/H,MAAM,gBAAgB,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;QAE1D,IAAI,gBAAgB,KAAK,CAAC;YACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;QAEjF,MAAM,kBAAkB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;QAE/D,IAAI,kBAAkB,KAAK,CAAC;YACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;QAEjF,MAAM,gBAAgB,GAAG,CAAC,IAAI,CAAC,iBAAiB,GAAG,kBAAkB,CAAC,GAAG,kBAAkB,CAAC;QAE5F,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAC;IACpD,CAAC;IAEO,8CAA8C,CAAC,yBAAiC;QACpF,IAAI,CAAC,IAAI,CAAC,kCAAkC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,kCAAkC,CAAC;YACrG,IAAI,CAAC,kCAAkC,GAAG,yBAAyB,CAAC;QAExE,MAAM,iCAAiC,GAAG,yBAAyB,GAAG,GAAG,GAAG,IAAI,CAAC,kCAAkC,GAAG,GAAG,CAAC;QAE1H,IAAI,CAAC,kCAAkC,GAAG,iCAAiC,CAAC;QAE5E,OAAO,iCAAiC,CAAC;IAC7C,CAAC;IAEO,qCAAqC,CAAC,uBAA+B;QACzE,IAAI,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC;YACnF,IAAI,CAAC,yBAAyB,GAAG,uBAAuB,CAAC;QAE7D,MAAM,wBAAwB,GAAG,uBAAuB,GAAG,GAAG,GAAG,IAAI,CAAC,yBAAyB,GAAG,GAAG,CAAC;QAEtG,IAAI,CAAC,yBAAyB,GAAG,wBAAwB,CAAC;QAE1D,OAAO,wBAAwB,CAAC;IACpC,CAAC;CACJ;AAED,eAAe,6BAA6B,CAAC","sourcesContent":["class TransferUploadRatesCalculator {\r\n #currentRatesTimespanInMs: number;\r\n #totalSizeInBytes: number;\r\n #startTime: number;\r\n #uploadedBytesCountSinceStart: number;\r\n\r\n #previousCurrentSpeedInBytesPerSec?: number;\r\n #previousRemainingSeconds?: number;\r\n\r\n #progressEventsHistory: { time: number, uploadedBytesCount: number; }[];\r\n\r\n constructor(totalSizeInBytes: number, currentRatesTimespanInMs: number) {\r\n this.#startTime = new Date().getTime();\r\n this.#uploadedBytesCountSinceStart = 0;\r\n this.#progressEventsHistory = [];\r\n\r\n this.#currentRatesTimespanInMs = currentRatesTimespanInMs;\r\n this.#totalSizeInBytes = totalSizeInBytes;\r\n }\r\n\r\n addNewProgressEvent(uploadedBytesCount: number) {\r\n this.#uploadedBytesCountSinceStart += uploadedBytesCount;\r\n this.#progressEventsHistory.push({ time: new Date().getTime(), uploadedBytesCount });\r\n }\r\n\r\n getRates(uploadedBytesTotal: number): { remainingSeconds: number, currentSpeedInBytesPerSec: number, averageSpeedInBytesPerSec: number } {\r\n const currentTime = new Date().getTime();\r\n\r\n this.removeOldEventsButLeaveAtLeastFour(currentTime);\r\n\r\n const averageStats = this.calculateSpeedAndRemainingTime(currentTime, this.#startTime, this.#uploadedBytesCountSinceStart, uploadedBytesTotal);\r\n\r\n if (this.#progressEventsHistory.length === 0) {\r\n const remainingSeconds = this.smoothRemainingSecondsWithMemoization(averageStats.remainingSeconds);\r\n\r\n return {\r\n remainingSeconds,\r\n currentSpeedInBytesPerSec: 0,\r\n averageSpeedInBytesPerSec: averageStats.speedInBytesPerSec,\r\n };\r\n }\r\n\r\n const historyTransferredBytesSum = this.#progressEventsHistory.reduce((partialSum, event) => partialSum + event.uploadedBytesCount, 0);\r\n const currentStats = this.calculateSpeedAndRemainingTime(currentTime, this.#progressEventsHistory[0]!.time, historyTransferredBytesSum, uploadedBytesTotal);\r\n\r\n const smoothedCurrentSpeedInBytesPerSec = this.smoothCurrentSpeedInBytesPerSecWithMemoization(currentStats.speedInBytesPerSec);\r\n const remainingSeconds = this.smoothRemainingSecondsWithMemoization(currentStats.remainingSeconds);\r\n\r\n return {\r\n remainingSeconds,\r\n currentSpeedInBytesPerSec: smoothedCurrentSpeedInBytesPerSec,\r\n averageSpeedInBytesPerSec: averageStats.speedInBytesPerSec,\r\n };\r\n }\r\n\r\n private removeOldEventsButLeaveAtLeastFour(currentTime: number) {\r\n while (this.#progressEventsHistory.length > 4 && currentTime - this.#progressEventsHistory[0]!.time > this.#currentRatesTimespanInMs)\r\n this.#progressEventsHistory.shift();\r\n }\r\n\r\n private calculateSpeedAndRemainingTime(currentTime: number, sinceTime: number, transferredBytes: number, uploadedBytesTotal: number) {\r\n const elapsedInSeconds = (currentTime - sinceTime) / 1000;\r\n\r\n if (elapsedInSeconds === 0)\r\n return { remainingSeconds: Number.POSITIVE_INFINITY, speedInBytesPerSec: 0 };\r\n\r\n const speedInBytesPerSec = transferredBytes / elapsedInSeconds;\r\n\r\n if (speedInBytesPerSec === 0)\r\n return { remainingSeconds: Number.POSITIVE_INFINITY, speedInBytesPerSec: 0 };\r\n\r\n const remainingSeconds = (this.#totalSizeInBytes - uploadedBytesTotal) / speedInBytesPerSec;\r\n\r\n return { remainingSeconds, speedInBytesPerSec };\r\n }\r\n\r\n private smoothCurrentSpeedInBytesPerSecWithMemoization(currentSpeedInBytesPerSec: number): number {\r\n if (!this.#previousCurrentSpeedInBytesPerSec || !Number.isFinite(this.#previousCurrentSpeedInBytesPerSec))\r\n this.#previousCurrentSpeedInBytesPerSec = currentSpeedInBytesPerSec;\r\n\r\n const smoothedCurrentSpeedInBytesPerSec = currentSpeedInBytesPerSec * 0.7 + this.#previousCurrentSpeedInBytesPerSec * 0.3;\r\n\r\n this.#previousCurrentSpeedInBytesPerSec = smoothedCurrentSpeedInBytesPerSec;\r\n\r\n return smoothedCurrentSpeedInBytesPerSec;\r\n }\r\n\r\n private smoothRemainingSecondsWithMemoization(currentRemainingSeconds: number): number {\r\n if (!this.#previousRemainingSeconds || !Number.isFinite(this.#previousRemainingSeconds))\r\n this.#previousRemainingSeconds = currentRemainingSeconds;\r\n\r\n const computedRemainingSeconds = currentRemainingSeconds * 0.7 + this.#previousRemainingSeconds * 0.3;\r\n\r\n this.#previousRemainingSeconds = computedRemainingSeconds;\r\n\r\n return computedRemainingSeconds;\r\n }\r\n}\r\n\r\nexport default TransferUploadRatesCalculator;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploadState.js","sourceRoot":"","sources":["../../../../src/uploader/state/transferUploadState.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-param-reassign */\nimport throttle from 'lodash.throttle';\n\nimport TransferUploadStateFile from \"./transferUploadStateFile.js\";\nimport TransferUploadEvent from \"../transferUploadEvent.js\";\nimport TransferStatus from \"../../utils/types/transferStatus.js\";\nimport TransferUploadError from \"../transferUploadError.js\";\nimport TransferUploadRatesCalculator from \"./transferUploadProgressCalculator.js\";\nimport ContinuousChunksCalculator from './continuousChunksCalculator.js';\n\nimport type ChunkProgressEvent from \"../../utils/events/chunkProgressEvent.js\";\nimport type EventsEngine from \"../../utils/events/eventsEngine.js\";\nimport type FileDetails from \"../../utils/fileSystem/fileDetails.js\";\nimport type TransferUploadStateFiles from \"./transferUploadStateFiles.js\";\nimport type FileChunkUploadFailedEventArgs from \"../eventArgs/fileChunkUploadFailedEventArgs.js\";\nimport type FileAckFailedEventArgs from \"../eventArgs/fileAckFailedEventArgs.js\";\nimport type FileChunkUploadEventArgs from \"../eventArgs/fileChunkUploadEventArgs.js\";\nimport type FileUploadEventArgs from \"../eventArgs/fileUploadEventArgs.js\";\nimport type TransferUploadCompletedEventArgs from \"../eventArgs/transferUploadCompletedEventArgs.js\";\nimport type ReadonlyTransferUploadStateFile from \"./readonlyTransferUploadStateFile.js\";\nimport type ReadonlyTransferUploadStateFiles from \"./readonlyTransferUploadStateFiles.js\";\nimport type FileUploadFailedEventArgs from \"../eventArgs/fileUploadFailedEventArgs.js\";\nimport type TransferUploadExportState from \"../export/transferUploadExportState.js\";\nimport type TransferUploadProgressedEventArgs from \"../eventArgs/transferUploadProgressedEventArgs.js\";\nimport type TransferUploadMetadata from '../export/transferUploadMetadata.js';\nimport type FileChunkUploadProgressedEventArgs from '../eventArgs/fileChunkUploadProgressedEventArgs.js';\nimport type { ContinuousChunk, ContinuousChunksCalculatorState } from './continuousChunksCalculator.js';\nimport type FileChunkUploadCompletedPartiallyEventArgs from '../eventArgs/fileChunkUploadCompletedPartiallyEventArgs.js';\nimport type FileChunkUploadCompletedEventArgs from '../eventArgs/fileChunkUploadCompletedEventArgs.js';\n\nexport default class TransferUploadState {\n #status: TransferStatus = TransferStatus.Initialized;\n\n #completedFilesCount = 0;\n #failedFilesCount = 0;\n #files: TransferUploadStateFiles = {};\n #eventsEngine: EventsEngine;\n\n #ratesCalculator?: TransferUploadRatesCalculator;\n #continuousChunkCalculator: ContinuousChunksCalculator;\n\n readonly #currentRatesTimespanInMs: number;\n\n #uploadedBytesCount = 0;\n #failedBytesCount = 0;\n\n #totalBytesCount = 0;\n\n #getRatesAndNotifyUploadProgressedThrottled: ReturnType<typeof throttle<TransferUploadState[`getRatesAndNotifyUploadProgressed`]>>;\n\n get status(): TransferStatus {\n return this.#status;\n }\n\n get completedFilesCount(): number {\n return this.#completedFilesCount;\n }\n\n get failedFilesCount(): number {\n return this.#failedFilesCount;\n }\n\n get uploadedBytesCount(): number {\n return this.#uploadedBytesCount;\n }\n\n get failedBytesCount(): number {\n return this.#failedBytesCount;\n }\n\n get files(): ReadonlyTransferUploadStateFiles {\n return this.#files;\n }\n\n constructor(files: readonly FileDetails[], eventsEngine: EventsEngine, currentRatesTimespanInMs: number, progressEventThrottlingInMs: number)\n constructor(files: readonly FileDetails[], eventsEngine: EventsEngine, currentRatesTimespanInMs: number, progressEventThrottlingInMs: number, exportedState: TransferUploadExportState)\n constructor(files: readonly FileDetails[], eventsEngine: EventsEngine, currentRatesTimespanInMs: number, progressEventThrottlingInMs: number, exportedState?: TransferUploadExportState) {\n this.#eventsEngine = eventsEngine;\n this.#currentRatesTimespanInMs = currentRatesTimespanInMs;\n\n this.#getRatesAndNotifyUploadProgressedThrottled = throttle(this.getRatesAndNotifyUploadProgressed, progressEventThrottlingInMs);\n\n this.initializeTransferStatus(files);\n\n this.#continuousChunkCalculator = new ContinuousChunksCalculator();\n\n if (exportedState)\n this.recoverFromExportedState(exportedState);\n }\n\n private initializeTransferStatus(filesDetails: readonly FileDetails[]) {\n for (const file of filesDetails) {\n this.#files[file.externalId] = new TransferUploadStateFile(file.externalId, file.fileSizeInBytes, file.fileName);\n\n this.#totalBytesCount += file.fileSizeInBytes;\n }\n }\n\n getChunksForFile(externalId: string | number): readonly Readonly<ContinuousChunk>[] {\n return this.#continuousChunkCalculator.getChunks(externalId);\n }\n\n export(): TransferUploadExportState {\n return {\n continuousChunksCalculatorState: this.#continuousChunkCalculator.export(),\n completedFiles: Object.values(this.#files).filter(file => file.isCompleted).map(file => file.externalId),\n };\n }\n\n recover() {\n this.#status = TransferStatus.Initialized;\n this.#completedFilesCount = 0;\n this.#uploadedBytesCount = 0;\n this.#failedFilesCount = 0;\n this.#failedBytesCount = 0;\n\n for (const [, file] of Object.entries(this.#files)) {\n file.isBeingUploaded = false;\n file.runningChunksCount = 0;\n file.isFailed = false;\n file.failedReason = null;\n file.failedBytesCount = 0;\n\n if (file.isCompleted)\n this.#completedFilesCount += 1;\n\n // A file can have all its chunks recorded and still miss the live isUploadCompleted transition (e.g. a\n // full chunk recorded through the partially-completed path on pause), so the flag is recomputed from\n // the chunks the same way recoverFromExportedState does - such a file has to be acked on the next run.\n file.isUploadCompleted = this.hasAllChunksUploaded(file);\n file.uploadedBytesCount = this.#continuousChunkCalculator.getChunksUploadedBytesCount(file.externalId);\n\n this.#uploadedBytesCount += file.uploadedBytesCount;\n }\n }\n\n private hasAllChunksUploaded(file: TransferUploadStateFile): boolean {\n const fileChunks = this.#continuousChunkCalculator.getChunks(file.externalId);\n\n return fileChunks.length === 1 && fileChunks[0]!.startPosition === 0 && fileChunks[0]!.sizeInBytes === file.fileSizeInBytes;\n }\n\n private recoverFromExportedState(exportedState: TransferUploadExportState | ContinuousChunksCalculatorState) {\n // Remove this variable and the legacy recovery logic after all our clients are on desktop version >= 4.22\n const isLegacyModeTransfer = Array.isArray(exportedState);\n\n const continuousChunksState = isLegacyModeTransfer ? exportedState : exportedState.continuousChunksCalculatorState;\n const completedFiles = isLegacyModeTransfer ? undefined : new Set(exportedState.completedFiles);\n\n this.#continuousChunkCalculator.recover(continuousChunksState);\n\n for (const [, file] of Object.entries(this.#files)) {\n const isUploadCompleted = this.hasAllChunksUploaded(file);\n\n file.isUploadCompleted = isUploadCompleted;\n file.isCompleted = isLegacyModeTransfer ? isUploadCompleted : completedFiles!.has(file.externalId);\n file.uploadedBytesCount = this.#continuousChunkCalculator.getChunksUploadedBytesCount(file.externalId);\n\n if (file.isCompleted)\n this.#completedFilesCount += 1;\n\n this.#uploadedBytesCount += file.uploadedBytesCount;\n }\n }\n\n getFile(externalFileId: string | number): ReadonlyTransferUploadStateFile {\n return this.getFileInternal(externalFileId);\n }\n\n private getFileInternal(externalFileId: string | number): TransferUploadStateFile {\n const file = this.#files[externalFileId];\n\n if (!file)\n throw new TransferUploadError(`File with id = ${externalFileId} doesn't exist`);\n\n return file;\n }\n\n transferRun() {\n this.#status = TransferStatus.Running;\n\n this.#ratesCalculator = undefined;\n\n this.#eventsEngine.emit(TransferUploadEvent.TransferRun);\n }\n\n transferPauseRequested() {\n this.#status = TransferStatus.Pausing;\n\n this.#eventsEngine.emit(TransferUploadEvent.TransferPauseRequested);\n }\n\n transferPaused() {\n this.#status = TransferStatus.Paused;\n\n this.#getRatesAndNotifyUploadProgressedThrottled.flush();\n\n this.#eventsEngine.emit(TransferUploadEvent.TransferPaused);\n }\n\n transferAbortRequested() {\n this.#status = TransferStatus.Aborting;\n\n this.#eventsEngine.emit(TransferUploadEvent.TransferAbortRequested);\n }\n\n transferAborted() {\n this.#status = TransferStatus.Aborted;\n\n for (const [, file] of Object.entries(this.#files)) {\n if (file.isBeingUploaded) {\n file.isBeingUploaded = false;\n file.isFailed = true;\n\n if (!file.failedReason)\n file.failedReason = `Aborted`;\n }\n }\n\n this.#getRatesAndNotifyUploadProgressedThrottled.cancel();\n\n this.#eventsEngine.emit(TransferUploadEvent.TransferAborted);\n }\n\n transferCancelRequested() {\n this.#status = TransferStatus.Canceling;\n\n this.#eventsEngine.emit(TransferUploadEvent.TransferCancelRequested);\n }\n\n transferCanceled() {\n this.#status = TransferStatus.Canceled;\n\n this.#getRatesAndNotifyUploadProgressedThrottled.cancel();\n\n this.#eventsEngine.emit(TransferUploadEvent.TransferCanceled);\n }\n\n transferCompleted(transferMetadata: TransferUploadMetadata, transferDownloadUrl: string, confirmationUrl: string | undefined, recipientTrackingLinks?: TransferUploadCompletedEventArgs[`recipientTrackingLinks`]) {\n this.#status = TransferStatus.Completed;\n\n this.#getRatesAndNotifyUploadProgressedThrottled.flush();\n\n const eventArgs: TransferUploadCompletedEventArgs = {\n transferId: transferMetadata.transferId,\n transferKey: transferMetadata.transferKey,\n transferDownloadUrl,\n confirmationUrl,\n fileServerUrl: transferMetadata.transferFileServerUrl,\n region: transferMetadata.transferRegion,\n recipientTrackingLinks,\n };\n\n this.#eventsEngine.emit(TransferUploadEvent.TransferCompleted, eventArgs);\n }\n\n transferFailed() {\n this.#status = TransferStatus.Failed;\n\n this.#getRatesAndNotifyUploadProgressedThrottled.cancel();\n\n this.#eventsEngine.emit(TransferUploadEvent.TransferFailed);\n }\n\n fileUploadStarted(file: TransferUploadStateFile, uploadItemId: string | undefined) {\n file.isBeingUploaded = true;\n\n const eventArgs: FileUploadEventArgs = { fileStatus: file, uploadItemId };\n this.#eventsEngine.emit(TransferUploadEvent.FileUploadStarted, eventArgs);\n }\n\n fileUploadCompleted(file: TransferUploadStateFile, uploadItemId: string | undefined) {\n file.isBeingUploaded = false;\n file.isUploadCompleted = true;\n\n const eventArgs: FileUploadEventArgs = { fileStatus: file, uploadItemId };\n this.#eventsEngine.emit(TransferUploadEvent.FileUploadCompleted, eventArgs);\n }\n\n fileCompleted(externalFileId: string | number, uploadItemId: string | undefined) {\n const file = this.getFileInternal(externalFileId);\n\n file.isCompleted = true;\n\n this.#completedFilesCount += 1;\n\n this.#eventsEngine.emit(TransferUploadEvent.RecreateDataUpdated);\n\n const eventArgs: FileUploadEventArgs = { fileStatus: file, uploadItemId };\n this.#eventsEngine.emit(TransferUploadEvent.FileCompleted, eventArgs);\n }\n\n fileAckFailed(externalFileId: string | number, uploadItemId: string, reason: string, error: Error) {\n const file = this.getFileInternal(externalFileId);\n\n const eventArgs: FileAckFailedEventArgs = { fileStatus: file, uploadItemId, reason, error };\n this.#eventsEngine.emit(TransferUploadEvent.FileAckFailed, eventArgs);\n }\n\n fileUploadFailed(file: TransferUploadStateFile, uploadItemId: string | undefined) {\n file.isBeingUploaded = false;\n file.isFailed = true;\n\n this.#failedFilesCount += 1;\n\n const eventArgs: FileUploadFailedEventArgs = { fileStatus: file, uploadItemId, reason: file.failedReason };\n this.#eventsEngine.emit(TransferUploadEvent.FileUploadFailed, eventArgs);\n }\n\n chunkUploadStarted(externalFileId: string | number, uploadItemId: string | undefined, chunkStartPosition: number, chunkSizeInBytes: number) {\n const file = this.getFileInternal(externalFileId);\n\n if (!this.#ratesCalculator)\n this.#ratesCalculator = new TransferUploadRatesCalculator(this.#totalBytesCount, this.#currentRatesTimespanInMs);\n\n if (!file.isBeingUploaded)\n this.fileUploadStarted(file, uploadItemId);\n\n file.runningChunksCount += 1;\n\n const eventArgs: FileChunkUploadEventArgs = { fileStatus: file, uploadItemId, chunkStartPosition, chunkSizeInBytes };\n this.#eventsEngine.emit(TransferUploadEvent.FileChunkUploadStarted, eventArgs);\n }\n\n chunkUploadProgressed(externalFileId: string | number, uploadItemId: string | undefined, chunkStartPosition: number, chunkSizeInBytes: number, apiEventArgs: ChunkProgressEvent): void {\n const file = this.getFileInternal(externalFileId);\n\n file.uploadedBytesCount += apiEventArgs.transferredBytesSinceLastEvent;\n this.#uploadedBytesCount += apiEventArgs.transferredBytesSinceLastEvent;\n\n this.#ratesCalculator!.addNewProgressEvent(apiEventArgs.transferredBytesSinceLastEvent);\n\n const eventArgs: FileChunkUploadProgressedEventArgs = { fileStatus: file, uploadItemId, chunkStartPosition, chunkSizeInBytes, transferredBytesSinceLastEvent: apiEventArgs.transferredBytesSinceLastEvent };\n this.#eventsEngine.emit(TransferUploadEvent.FileChunkUploadProgressed, eventArgs);\n\n this.#getRatesAndNotifyUploadProgressedThrottled();\n }\n\n private getRatesAndNotifyUploadProgressed() {\n const progressStats = this.#ratesCalculator!.getRates(this.#uploadedBytesCount);\n\n const tranferEventArgs: TransferUploadProgressedEventArgs = {\n uploadedBytesTotalCount: this.#uploadedBytesCount,\n progressInPercentage: (this.#uploadedBytesCount * 100) / this.#totalBytesCount,\n remainingSeconds: progressStats.remainingSeconds,\n averageSpeedInBytesPerSecond: progressStats.averageSpeedInBytesPerSec,\n currentSpeedInBytesPerSecond: progressStats.currentSpeedInBytesPerSec,\n };\n\n this.#eventsEngine.emit(TransferUploadEvent.TransferProgressed, tranferEventArgs);\n }\n\n chunkUploadCompleted(externalFileId: string | number, uploadItemId: string | undefined, startPosition: number, sizeInBytes: number) {\n const file = this.getFileInternal(externalFileId);\n\n file.runningChunksCount -= 1;\n\n this.#continuousChunkCalculator.addNewChunk(externalFileId, { startPosition, sizeInBytes });\n\n this.#eventsEngine.emit(TransferUploadEvent.RecreateDataUpdated);\n\n const eventArgs: FileChunkUploadCompletedEventArgs = { fileStatus: file, uploadItemId, chunkStartPosition: startPosition, chunkSizeInBytes: sizeInBytes };\n this.#eventsEngine.emit(TransferUploadEvent.FileChunkUploadCompleted, eventArgs);\n\n if (file.runningChunksCount > 0)\n return;\n\n if (file.uploadedBytesCount === file.fileSizeInBytes)\n this.fileUploadCompleted(file, uploadItemId);\n else if (file.uploadedBytesCount + file.failedBytesCount === file.fileSizeInBytes)\n this.fileUploadFailed(file, uploadItemId);\n }\n\n chunkUploadCompletedPartially(externalFileId: string | number, uploadItemId: string | undefined, startPosition: number, sizeInBytes: number, uploadedBytesCount: number, isPauseRequested: boolean) {\n const file = this.getFileInternal(externalFileId);\n\n file.runningChunksCount -= 1;\n\n const failedBytes = sizeInBytes - uploadedBytesCount;\n\n file.failedBytesCount += failedBytes;\n this.#failedBytesCount += failedBytes;\n\n if (!file.failedReason)\n file.failedReason = isPauseRequested ? `Pause requested` : `Chunk upload completed partially`;\n\n if (uploadedBytesCount > 0)\n this.#continuousChunkCalculator.addNewChunk(externalFileId, { startPosition, sizeInBytes: uploadedBytesCount });\n\n this.#eventsEngine.emit(TransferUploadEvent.RecreateDataUpdated);\n\n const eventArgs: FileChunkUploadCompletedPartiallyEventArgs = { fileStatus: file, uploadItemId, chunkStartPosition: startPosition, chunkSizeInBytes: sizeInBytes, uploadedBytesCount, isPauseRequested };\n this.#eventsEngine.emit(TransferUploadEvent.FileChunkUploadCompletedPartially, eventArgs);\n\n if (file.runningChunksCount === 0 && file.uploadedBytesCount + file.failedBytesCount === file.fileSizeInBytes)\n this.fileUploadFailed(file, uploadItemId);\n }\n\n chunkUploadFailed(externalFileId: string | number, uploadItemId: string | undefined, chunkStartPosition: number, chunkSizeInBytes: number, uploadedBytesCount: number, failedReason: string, error: Error) {\n const file = this.getFileInternal(externalFileId);\n\n file.runningChunksCount -= 1;\n\n const failedBytes = chunkSizeInBytes;\n\n file.uploadedBytesCount -= uploadedBytesCount;\n file.failedBytesCount += failedBytes;\n\n this.#uploadedBytesCount -= uploadedBytesCount;\n this.#failedBytesCount += failedBytes;\n\n if (!file.failedReason)\n file.failedReason = failedReason;\n\n const eventArgs: FileChunkUploadFailedEventArgs = { fileStatus: file, uploadItemId, chunkStartPosition, chunkSizeInBytes, reason: failedReason, error };\n this.#eventsEngine.emit(TransferUploadEvent.FileChunkUploadFailed, eventArgs);\n\n if (file.runningChunksCount === 0 && file.uploadedBytesCount + file.failedBytesCount === file.fileSizeInBytes)\n this.fileUploadFailed(file, uploadItemId);\n }\n}"]}
1
+ {"version":3,"file":"transferUploadState.js","sourceRoot":"","sources":["../../../../src/uploader/state/transferUploadState.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-param-reassign */\r\nimport throttle from 'lodash.throttle';\r\n\r\nimport TransferUploadStateFile from \"./transferUploadStateFile.js\";\r\nimport TransferUploadEvent from \"../transferUploadEvent.js\";\r\nimport TransferStatus from \"../../utils/types/transferStatus.js\";\r\nimport TransferUploadError from \"../transferUploadError.js\";\r\nimport TransferUploadRatesCalculator from \"./transferUploadProgressCalculator.js\";\r\nimport ContinuousChunksCalculator from './continuousChunksCalculator.js';\r\n\r\nimport type ChunkProgressEvent from \"../../utils/events/chunkProgressEvent.js\";\r\nimport type EventsEngine from \"../../utils/events/eventsEngine.js\";\r\nimport type FileDetails from \"../../utils/fileSystem/fileDetails.js\";\r\nimport type TransferUploadStateFiles from \"./transferUploadStateFiles.js\";\r\nimport type FileChunkUploadFailedEventArgs from \"../eventArgs/fileChunkUploadFailedEventArgs.js\";\r\nimport type FileAckFailedEventArgs from \"../eventArgs/fileAckFailedEventArgs.js\";\r\nimport type FileChunkUploadEventArgs from \"../eventArgs/fileChunkUploadEventArgs.js\";\r\nimport type FileUploadEventArgs from \"../eventArgs/fileUploadEventArgs.js\";\r\nimport type TransferUploadCompletedEventArgs from \"../eventArgs/transferUploadCompletedEventArgs.js\";\r\nimport type ReadonlyTransferUploadStateFile from \"./readonlyTransferUploadStateFile.js\";\r\nimport type ReadonlyTransferUploadStateFiles from \"./readonlyTransferUploadStateFiles.js\";\r\nimport type FileUploadFailedEventArgs from \"../eventArgs/fileUploadFailedEventArgs.js\";\r\nimport type TransferUploadExportState from \"../export/transferUploadExportState.js\";\r\nimport type TransferUploadProgressedEventArgs from \"../eventArgs/transferUploadProgressedEventArgs.js\";\r\nimport type TransferUploadMetadata from '../export/transferUploadMetadata.js';\r\nimport type FileChunkUploadProgressedEventArgs from '../eventArgs/fileChunkUploadProgressedEventArgs.js';\r\nimport type { ContinuousChunk, ContinuousChunksCalculatorState } from './continuousChunksCalculator.js';\r\nimport type FileChunkUploadCompletedPartiallyEventArgs from '../eventArgs/fileChunkUploadCompletedPartiallyEventArgs.js';\r\nimport type FileChunkUploadCompletedEventArgs from '../eventArgs/fileChunkUploadCompletedEventArgs.js';\r\n\r\nexport default class TransferUploadState {\r\n #status: TransferStatus = TransferStatus.Initialized;\r\n\r\n #completedFilesCount = 0;\r\n #failedFilesCount = 0;\r\n #files: TransferUploadStateFiles = {};\r\n #eventsEngine: EventsEngine;\r\n\r\n #ratesCalculator?: TransferUploadRatesCalculator;\r\n #continuousChunkCalculator: ContinuousChunksCalculator;\r\n\r\n readonly #currentRatesTimespanInMs: number;\r\n\r\n #uploadedBytesCount = 0;\r\n #failedBytesCount = 0;\r\n\r\n #totalBytesCount = 0;\r\n\r\n #getRatesAndNotifyUploadProgressedThrottled: ReturnType<typeof throttle<TransferUploadState[`getRatesAndNotifyUploadProgressed`]>>;\r\n\r\n get status(): TransferStatus {\r\n return this.#status;\r\n }\r\n\r\n get completedFilesCount(): number {\r\n return this.#completedFilesCount;\r\n }\r\n\r\n get failedFilesCount(): number {\r\n return this.#failedFilesCount;\r\n }\r\n\r\n get uploadedBytesCount(): number {\r\n return this.#uploadedBytesCount;\r\n }\r\n\r\n get failedBytesCount(): number {\r\n return this.#failedBytesCount;\r\n }\r\n\r\n get files(): ReadonlyTransferUploadStateFiles {\r\n return this.#files;\r\n }\r\n\r\n constructor(files: readonly FileDetails[], eventsEngine: EventsEngine, currentRatesTimespanInMs: number, progressEventThrottlingInMs: number)\r\n constructor(files: readonly FileDetails[], eventsEngine: EventsEngine, currentRatesTimespanInMs: number, progressEventThrottlingInMs: number, exportedState: TransferUploadExportState)\r\n constructor(files: readonly FileDetails[], eventsEngine: EventsEngine, currentRatesTimespanInMs: number, progressEventThrottlingInMs: number, exportedState?: TransferUploadExportState) {\r\n this.#eventsEngine = eventsEngine;\r\n this.#currentRatesTimespanInMs = currentRatesTimespanInMs;\r\n\r\n this.#getRatesAndNotifyUploadProgressedThrottled = throttle(this.getRatesAndNotifyUploadProgressed, progressEventThrottlingInMs);\r\n\r\n this.initializeTransferStatus(files);\r\n\r\n this.#continuousChunkCalculator = new ContinuousChunksCalculator();\r\n\r\n if (exportedState)\r\n this.recoverFromExportedState(exportedState);\r\n }\r\n\r\n private initializeTransferStatus(filesDetails: readonly FileDetails[]) {\r\n for (const file of filesDetails) {\r\n this.#files[file.externalId] = new TransferUploadStateFile(file.externalId, file.fileSizeInBytes, file.fileName);\r\n\r\n this.#totalBytesCount += file.fileSizeInBytes;\r\n }\r\n }\r\n\r\n getChunksForFile(externalId: string | number): readonly Readonly<ContinuousChunk>[] {\r\n return this.#continuousChunkCalculator.getChunks(externalId);\r\n }\r\n\r\n export(): TransferUploadExportState {\r\n return {\r\n continuousChunksCalculatorState: this.#continuousChunkCalculator.export(),\r\n completedFiles: Object.values(this.#files).filter(file => file.isCompleted).map(file => file.externalId),\r\n };\r\n }\r\n\r\n recover() {\r\n this.#status = TransferStatus.Initialized;\r\n this.#completedFilesCount = 0;\r\n this.#uploadedBytesCount = 0;\r\n this.#failedFilesCount = 0;\r\n this.#failedBytesCount = 0;\r\n\r\n for (const [, file] of Object.entries(this.#files)) {\r\n file.isBeingUploaded = false;\r\n file.runningChunksCount = 0;\r\n file.isFailed = false;\r\n file.failedReason = null;\r\n file.failedBytesCount = 0;\r\n\r\n if (file.isCompleted)\r\n this.#completedFilesCount += 1;\r\n\r\n // A file can have all its chunks recorded and still miss the live isUploadCompleted transition (e.g. a\r\n // full chunk recorded through the partially-completed path on pause), so the flag is recomputed from\r\n // the chunks the same way recoverFromExportedState does - such a file has to be acked on the next run.\r\n file.isUploadCompleted = this.hasAllChunksUploaded(file);\r\n file.uploadedBytesCount = this.#continuousChunkCalculator.getChunksUploadedBytesCount(file.externalId);\r\n\r\n this.#uploadedBytesCount += file.uploadedBytesCount;\r\n }\r\n }\r\n\r\n private hasAllChunksUploaded(file: TransferUploadStateFile): boolean {\r\n const fileChunks = this.#continuousChunkCalculator.getChunks(file.externalId);\r\n\r\n return fileChunks.length === 1 && fileChunks[0]!.startPosition === 0 && fileChunks[0]!.sizeInBytes === file.fileSizeInBytes;\r\n }\r\n\r\n private recoverFromExportedState(exportedState: TransferUploadExportState | ContinuousChunksCalculatorState) {\r\n // Remove this variable and the legacy recovery logic after all our clients are on desktop version >= 4.22\r\n const isLegacyModeTransfer = Array.isArray(exportedState);\r\n\r\n const continuousChunksState = isLegacyModeTransfer ? exportedState : exportedState.continuousChunksCalculatorState;\r\n const completedFiles = isLegacyModeTransfer ? undefined : new Set(exportedState.completedFiles);\r\n\r\n this.#continuousChunkCalculator.recover(continuousChunksState);\r\n\r\n for (const [, file] of Object.entries(this.#files)) {\r\n const isUploadCompleted = this.hasAllChunksUploaded(file);\r\n\r\n file.isUploadCompleted = isUploadCompleted;\r\n file.isCompleted = isLegacyModeTransfer ? isUploadCompleted : completedFiles!.has(file.externalId);\r\n file.uploadedBytesCount = this.#continuousChunkCalculator.getChunksUploadedBytesCount(file.externalId);\r\n\r\n if (file.isCompleted)\r\n this.#completedFilesCount += 1;\r\n\r\n this.#uploadedBytesCount += file.uploadedBytesCount;\r\n }\r\n }\r\n\r\n getFile(externalFileId: string | number): ReadonlyTransferUploadStateFile {\r\n return this.getFileInternal(externalFileId);\r\n }\r\n\r\n private getFileInternal(externalFileId: string | number): TransferUploadStateFile {\r\n const file = this.#files[externalFileId];\r\n\r\n if (!file)\r\n throw new TransferUploadError(`File with id = ${externalFileId} doesn't exist`);\r\n\r\n return file;\r\n }\r\n\r\n transferRun() {\r\n this.#status = TransferStatus.Running;\r\n\r\n this.#ratesCalculator = undefined;\r\n\r\n this.#eventsEngine.emit(TransferUploadEvent.TransferRun);\r\n }\r\n\r\n transferPauseRequested() {\r\n this.#status = TransferStatus.Pausing;\r\n\r\n this.#eventsEngine.emit(TransferUploadEvent.TransferPauseRequested);\r\n }\r\n\r\n transferPaused() {\r\n this.#status = TransferStatus.Paused;\r\n\r\n this.#getRatesAndNotifyUploadProgressedThrottled.flush();\r\n\r\n this.#eventsEngine.emit(TransferUploadEvent.TransferPaused);\r\n }\r\n\r\n transferAbortRequested() {\r\n this.#status = TransferStatus.Aborting;\r\n\r\n this.#eventsEngine.emit(TransferUploadEvent.TransferAbortRequested);\r\n }\r\n\r\n transferAborted() {\r\n this.#status = TransferStatus.Aborted;\r\n\r\n for (const [, file] of Object.entries(this.#files)) {\r\n if (file.isBeingUploaded) {\r\n file.isBeingUploaded = false;\r\n file.isFailed = true;\r\n\r\n if (!file.failedReason)\r\n file.failedReason = `Aborted`;\r\n }\r\n }\r\n\r\n this.#getRatesAndNotifyUploadProgressedThrottled.cancel();\r\n\r\n this.#eventsEngine.emit(TransferUploadEvent.TransferAborted);\r\n }\r\n\r\n transferCancelRequested() {\r\n this.#status = TransferStatus.Canceling;\r\n\r\n this.#eventsEngine.emit(TransferUploadEvent.TransferCancelRequested);\r\n }\r\n\r\n transferCanceled() {\r\n this.#status = TransferStatus.Canceled;\r\n\r\n this.#getRatesAndNotifyUploadProgressedThrottled.cancel();\r\n\r\n this.#eventsEngine.emit(TransferUploadEvent.TransferCanceled);\r\n }\r\n\r\n transferCompleted(transferMetadata: TransferUploadMetadata, transferDownloadUrl: string, confirmationUrl: string | undefined, recipientTrackingLinks?: TransferUploadCompletedEventArgs[`recipientTrackingLinks`]) {\r\n this.#status = TransferStatus.Completed;\r\n\r\n this.#getRatesAndNotifyUploadProgressedThrottled.flush();\r\n\r\n const eventArgs: TransferUploadCompletedEventArgs = {\r\n transferId: transferMetadata.transferId,\r\n transferKey: transferMetadata.transferKey,\r\n transferDownloadUrl,\r\n confirmationUrl,\r\n fileServerUrl: transferMetadata.transferFileServerUrl,\r\n region: transferMetadata.transferRegion,\r\n recipientTrackingLinks,\r\n };\r\n\r\n this.#eventsEngine.emit(TransferUploadEvent.TransferCompleted, eventArgs);\r\n }\r\n\r\n transferFailed() {\r\n this.#status = TransferStatus.Failed;\r\n\r\n this.#getRatesAndNotifyUploadProgressedThrottled.cancel();\r\n\r\n this.#eventsEngine.emit(TransferUploadEvent.TransferFailed);\r\n }\r\n\r\n fileUploadStarted(file: TransferUploadStateFile, uploadItemId: string | undefined) {\r\n file.isBeingUploaded = true;\r\n\r\n const eventArgs: FileUploadEventArgs = { fileStatus: file, uploadItemId };\r\n this.#eventsEngine.emit(TransferUploadEvent.FileUploadStarted, eventArgs);\r\n }\r\n\r\n fileUploadCompleted(file: TransferUploadStateFile, uploadItemId: string | undefined) {\r\n file.isBeingUploaded = false;\r\n file.isUploadCompleted = true;\r\n\r\n const eventArgs: FileUploadEventArgs = { fileStatus: file, uploadItemId };\r\n this.#eventsEngine.emit(TransferUploadEvent.FileUploadCompleted, eventArgs);\r\n }\r\n\r\n fileCompleted(externalFileId: string | number, uploadItemId: string | undefined) {\r\n const file = this.getFileInternal(externalFileId);\r\n\r\n file.isCompleted = true;\r\n\r\n this.#completedFilesCount += 1;\r\n\r\n this.#eventsEngine.emit(TransferUploadEvent.RecreateDataUpdated);\r\n\r\n const eventArgs: FileUploadEventArgs = { fileStatus: file, uploadItemId };\r\n this.#eventsEngine.emit(TransferUploadEvent.FileCompleted, eventArgs);\r\n }\r\n\r\n fileAckFailed(externalFileId: string | number, uploadItemId: string, reason: string, error: Error) {\r\n const file = this.getFileInternal(externalFileId);\r\n\r\n const eventArgs: FileAckFailedEventArgs = { fileStatus: file, uploadItemId, reason, error };\r\n this.#eventsEngine.emit(TransferUploadEvent.FileAckFailed, eventArgs);\r\n }\r\n\r\n fileUploadFailed(file: TransferUploadStateFile, uploadItemId: string | undefined) {\r\n file.isBeingUploaded = false;\r\n file.isFailed = true;\r\n\r\n this.#failedFilesCount += 1;\r\n\r\n const eventArgs: FileUploadFailedEventArgs = { fileStatus: file, uploadItemId, reason: file.failedReason };\r\n this.#eventsEngine.emit(TransferUploadEvent.FileUploadFailed, eventArgs);\r\n }\r\n\r\n chunkUploadStarted(externalFileId: string | number, uploadItemId: string | undefined, chunkStartPosition: number, chunkSizeInBytes: number) {\r\n const file = this.getFileInternal(externalFileId);\r\n\r\n if (!this.#ratesCalculator)\r\n this.#ratesCalculator = new TransferUploadRatesCalculator(this.#totalBytesCount, this.#currentRatesTimespanInMs);\r\n\r\n if (!file.isBeingUploaded)\r\n this.fileUploadStarted(file, uploadItemId);\r\n\r\n file.runningChunksCount += 1;\r\n\r\n const eventArgs: FileChunkUploadEventArgs = { fileStatus: file, uploadItemId, chunkStartPosition, chunkSizeInBytes };\r\n this.#eventsEngine.emit(TransferUploadEvent.FileChunkUploadStarted, eventArgs);\r\n }\r\n\r\n chunkUploadProgressed(externalFileId: string | number, uploadItemId: string | undefined, chunkStartPosition: number, chunkSizeInBytes: number, apiEventArgs: ChunkProgressEvent): void {\r\n const file = this.getFileInternal(externalFileId);\r\n\r\n file.uploadedBytesCount += apiEventArgs.transferredBytesSinceLastEvent;\r\n this.#uploadedBytesCount += apiEventArgs.transferredBytesSinceLastEvent;\r\n\r\n this.#ratesCalculator!.addNewProgressEvent(apiEventArgs.transferredBytesSinceLastEvent);\r\n\r\n const eventArgs: FileChunkUploadProgressedEventArgs = { fileStatus: file, uploadItemId, chunkStartPosition, chunkSizeInBytes, transferredBytesSinceLastEvent: apiEventArgs.transferredBytesSinceLastEvent };\r\n this.#eventsEngine.emit(TransferUploadEvent.FileChunkUploadProgressed, eventArgs);\r\n\r\n this.#getRatesAndNotifyUploadProgressedThrottled();\r\n }\r\n\r\n private getRatesAndNotifyUploadProgressed() {\r\n const progressStats = this.#ratesCalculator!.getRates(this.#uploadedBytesCount);\r\n\r\n const tranferEventArgs: TransferUploadProgressedEventArgs = {\r\n uploadedBytesTotalCount: this.#uploadedBytesCount,\r\n progressInPercentage: (this.#uploadedBytesCount * 100) / this.#totalBytesCount,\r\n remainingSeconds: progressStats.remainingSeconds,\r\n averageSpeedInBytesPerSecond: progressStats.averageSpeedInBytesPerSec,\r\n currentSpeedInBytesPerSecond: progressStats.currentSpeedInBytesPerSec,\r\n };\r\n\r\n this.#eventsEngine.emit(TransferUploadEvent.TransferProgressed, tranferEventArgs);\r\n }\r\n\r\n chunkUploadCompleted(externalFileId: string | number, uploadItemId: string | undefined, startPosition: number, sizeInBytes: number) {\r\n const file = this.getFileInternal(externalFileId);\r\n\r\n file.runningChunksCount -= 1;\r\n\r\n this.#continuousChunkCalculator.addNewChunk(externalFileId, { startPosition, sizeInBytes });\r\n\r\n this.#eventsEngine.emit(TransferUploadEvent.RecreateDataUpdated);\r\n\r\n const eventArgs: FileChunkUploadCompletedEventArgs = { fileStatus: file, uploadItemId, chunkStartPosition: startPosition, chunkSizeInBytes: sizeInBytes };\r\n this.#eventsEngine.emit(TransferUploadEvent.FileChunkUploadCompleted, eventArgs);\r\n\r\n if (file.runningChunksCount > 0)\r\n return;\r\n\r\n if (file.uploadedBytesCount === file.fileSizeInBytes)\r\n this.fileUploadCompleted(file, uploadItemId);\r\n else if (file.uploadedBytesCount + file.failedBytesCount === file.fileSizeInBytes)\r\n this.fileUploadFailed(file, uploadItemId);\r\n }\r\n\r\n chunkUploadCompletedPartially(externalFileId: string | number, uploadItemId: string | undefined, startPosition: number, sizeInBytes: number, uploadedBytesCount: number, isPauseRequested: boolean) {\r\n const file = this.getFileInternal(externalFileId);\r\n\r\n file.runningChunksCount -= 1;\r\n\r\n const failedBytes = sizeInBytes - uploadedBytesCount;\r\n\r\n file.failedBytesCount += failedBytes;\r\n this.#failedBytesCount += failedBytes;\r\n\r\n if (!file.failedReason)\r\n file.failedReason = isPauseRequested ? `Pause requested` : `Chunk upload completed partially`;\r\n\r\n if (uploadedBytesCount > 0)\r\n this.#continuousChunkCalculator.addNewChunk(externalFileId, { startPosition, sizeInBytes: uploadedBytesCount });\r\n\r\n this.#eventsEngine.emit(TransferUploadEvent.RecreateDataUpdated);\r\n\r\n const eventArgs: FileChunkUploadCompletedPartiallyEventArgs = { fileStatus: file, uploadItemId, chunkStartPosition: startPosition, chunkSizeInBytes: sizeInBytes, uploadedBytesCount, isPauseRequested };\r\n this.#eventsEngine.emit(TransferUploadEvent.FileChunkUploadCompletedPartially, eventArgs);\r\n\r\n if (file.runningChunksCount === 0 && file.uploadedBytesCount + file.failedBytesCount === file.fileSizeInBytes)\r\n this.fileUploadFailed(file, uploadItemId);\r\n }\r\n\r\n chunkUploadFailed(externalFileId: string | number, uploadItemId: string | undefined, chunkStartPosition: number, chunkSizeInBytes: number, uploadedBytesCount: number, failedReason: string, error: Error) {\r\n const file = this.getFileInternal(externalFileId);\r\n\r\n file.runningChunksCount -= 1;\r\n\r\n const failedBytes = chunkSizeInBytes;\r\n\r\n file.uploadedBytesCount -= uploadedBytesCount;\r\n file.failedBytesCount += failedBytes;\r\n\r\n this.#uploadedBytesCount -= uploadedBytesCount;\r\n this.#failedBytesCount += failedBytes;\r\n\r\n if (!file.failedReason)\r\n file.failedReason = failedReason;\r\n\r\n const eventArgs: FileChunkUploadFailedEventArgs = { fileStatus: file, uploadItemId, chunkStartPosition, chunkSizeInBytes, reason: failedReason, error };\r\n this.#eventsEngine.emit(TransferUploadEvent.FileChunkUploadFailed, eventArgs);\r\n\r\n if (file.runningChunksCount === 0 && file.uploadedBytesCount + file.failedBytesCount === file.fileSizeInBytes)\r\n this.fileUploadFailed(file, uploadItemId);\r\n }\r\n}"]}