filemail-sdk 9.3.4 → 9.4.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 (231) 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.js.map +1 -1
  17. package/dist/src/autoDownloader/factory/nodeAutoDownloaderFactoryOptions.js.map +1 -1
  18. package/dist/src/autoDownloader/newInboxTransfersRetriever/newInboxTransfer.js.map +1 -1
  19. package/dist/src/autoDownloader/newInboxTransfersRetriever/newInboxTransfersRetriever.js.map +1 -1
  20. package/dist/src/autoDownloader/node/nodeAutoDownloaderStateSerializer.js.map +1 -1
  21. package/dist/src/autoDownloader/node/nodeTransferDownloaderFactory.js.map +1 -1
  22. package/dist/src/autoDownloader/state/autoDownloaderRecoverableState.js.map +1 -1
  23. package/dist/src/autoDownloader/state/autoDownloaderState.js.map +1 -1
  24. package/dist/src/autoDownloader/state/autoDownloaderStateRecoverableTransfer.js.map +1 -1
  25. package/dist/src/autoDownloader/state/autoDownloaderStateRunningTransfer.js.map +1 -1
  26. package/dist/src/autoDownloader/state/autoDownloaderStateSnapshot.js.map +1 -1
  27. package/dist/src/autoDownloader/transferDownloaderFactory.js.map +1 -1
  28. package/dist/src/autoDownloader/transferHandler/autoDownloaderNewTransferHandler.js.map +1 -1
  29. package/dist/src/autoDownloader/transferHandler/autoDownloaderRecoverableTransferHandler.js.map +1 -1
  30. package/dist/src/autoDownloader/transferHandler/autoDownloaderTransferHandlerBase.js.map +1 -1
  31. package/dist/src/client/downloader/downloaderCore.d.ts.map +1 -1
  32. package/dist/src/client/downloader/downloaderCore.js +6 -0
  33. package/dist/src/client/downloader/downloaderCore.js.map +1 -1
  34. package/dist/src/client/downloader/node/nodeTransferDownloader.js.map +1 -1
  35. package/dist/src/client/downloader/transferDownloader.js.map +1 -1
  36. package/dist/src/client/environmentVariables.js.map +1 -1
  37. package/dist/src/client/healthMonitor/events/eventArgs/healthMonitorHealthyEventArgs.js.map +1 -1
  38. package/dist/src/client/healthMonitor/events/eventArgs/healthMonitorUnhealthyEventArgs.js.map +1 -1
  39. package/dist/src/client/healthMonitor/events/transferHealthMonitorEvent.js.map +1 -1
  40. package/dist/src/client/healthMonitor/onlineChecker/nodeOnlineChecker.js.map +1 -1
  41. package/dist/src/client/healthMonitor/onlineChecker/onlineChecker.js.map +1 -1
  42. package/dist/src/client/healthMonitor/onlineChecker/webOnlineChecker.js.map +1 -1
  43. package/dist/src/client/healthMonitor/transferDownloaderHealthMonitor.js.map +1 -1
  44. package/dist/src/client/healthMonitor/transferHealthMonitorBase.js.map +1 -1
  45. package/dist/src/client/healthMonitor/transferUploaderHealthMonitor.js.map +1 -1
  46. package/dist/src/client/loggers/dummyLogger.js.map +1 -1
  47. package/dist/src/client/loggers/logger.js.map +1 -1
  48. package/dist/src/client/loggers/utils/logHealthyStatus.js.map +1 -1
  49. package/dist/src/client/node/nodeFileDetailsProvider.js.map +1 -1
  50. package/dist/src/client/uploader/node/nodeTransferUploader.js.map +1 -1
  51. package/dist/src/client/uploader/transferUploader.js.map +1 -1
  52. package/dist/src/client/uploader/transferUploaderBase.js.map +1 -1
  53. package/dist/src/client/uploader/transferUploaderConfig.js.map +1 -1
  54. package/dist/src/client/uploader/utils/uploaderUtils.js.map +1 -1
  55. package/dist/src/client/uploader/web/webTransferUploader.js.map +1 -1
  56. package/dist/src/downloader/api/fileServerDownloadClient.js.map +1 -1
  57. package/dist/src/downloader/api/node/nodeFileServerDownloadClient.js.map +1 -1
  58. package/dist/src/downloader/chunkDownloader.d.ts.map +1 -1
  59. package/dist/src/downloader/chunkDownloader.js +22 -3
  60. package/dist/src/downloader/chunkDownloader.js.map +1 -1
  61. package/dist/src/downloader/downloadFolderResolver.js.map +1 -1
  62. package/dist/src/downloader/downloadLogger.js.map +1 -1
  63. package/dist/src/downloader/downloadOptions.js.map +1 -1
  64. package/dist/src/downloader/downloadStatus/downloadFileChunkProgress.js.map +1 -1
  65. package/dist/src/downloader/downloadStatus/downloadFileProgress.js.map +1 -1
  66. package/dist/src/downloader/downloadStatus/downloadFilePromise.js.map +1 -1
  67. package/dist/src/downloader/downloadStatus/downloadState.d.ts +1 -0
  68. package/dist/src/downloader/downloadStatus/downloadState.d.ts.map +1 -1
  69. package/dist/src/downloader/downloadStatus/downloadState.js +4 -0
  70. package/dist/src/downloader/downloadStatus/downloadState.js.map +1 -1
  71. package/dist/src/downloader/downloadTracker.d.ts.map +1 -1
  72. package/dist/src/downloader/downloadTracker.js +31 -0
  73. package/dist/src/downloader/downloadTracker.js.map +1 -1
  74. package/dist/src/downloader/dtos/downloadCommand.js.map +1 -1
  75. package/dist/src/downloader/dtos/downloadError.js.map +1 -1
  76. package/dist/src/downloader/dtos/downloadErrorCode.js.map +1 -1
  77. package/dist/src/downloader/dtos/downloadEvent.js.map +1 -1
  78. package/dist/src/downloader/dtos/downloadFileChunkInfo.js.map +1 -1
  79. package/dist/src/downloader/dtos/downloadFileInfo.js.map +1 -1
  80. package/dist/src/downloader/dtos/downloadFilesCommand.js.map +1 -1
  81. package/dist/src/downloader/dtos/downloadInfo.js.map +1 -1
  82. package/dist/src/downloader/dtos/downloadRegistrationMode.js.map +1 -1
  83. package/dist/src/downloader/dtos/downloadTrackerFileInfo.js.map +1 -1
  84. package/dist/src/downloader/dtos/downloadTrackerFileProgressInfo.d.ts +5 -0
  85. package/dist/src/downloader/dtos/downloadTrackerFileProgressInfo.d.ts.map +1 -1
  86. package/dist/src/downloader/dtos/downloadTrackerFileProgressInfo.js.map +1 -1
  87. package/dist/src/downloader/dtos/downloadTrackerProgressInfo.js.map +1 -1
  88. package/dist/src/downloader/dtos/downloadTrackingMetadata.js.map +1 -1
  89. package/dist/src/downloader/dtos/downloaderRestoredState.js.map +1 -1
  90. package/dist/src/downloader/eventArgs/chunkDownloadEventArgs.js.map +1 -1
  91. package/dist/src/downloader/eventArgs/chunkDownloadFailedEventArgs.js.map +1 -1
  92. package/dist/src/downloader/eventArgs/downloadCompletedEventArgs.js.map +1 -1
  93. package/dist/src/downloader/eventArgs/downloadEventArgs.js.map +1 -1
  94. package/dist/src/downloader/eventArgs/downloadMetadataDeterminedEventArgs.js.map +1 -1
  95. package/dist/src/downloader/eventArgs/downloadPauseEventArgs.js.map +1 -1
  96. package/dist/src/downloader/eventArgs/downloadTrackingFailedEventArgs.js.map +1 -1
  97. package/dist/src/downloader/eventArgs/fileDownloadEventArgs.js.map +1 -1
  98. package/dist/src/downloader/eventArgs/fileDownloadFailedEventArgs.js.map +1 -1
  99. package/dist/src/downloader/filesDownloader.d.ts.map +1 -1
  100. package/dist/src/downloader/filesDownloader.js +97 -6
  101. package/dist/src/downloader/filesDownloader.js.map +1 -1
  102. package/dist/src/downloader/filesPreparer.js.map +1 -1
  103. package/dist/src/index.js.map +1 -1
  104. package/dist/src/index.node.js.map +1 -1
  105. package/dist/src/index.web.js.map +1 -1
  106. package/dist/src/uploader/api/dtos/handshakeRequest.js.map +1 -1
  107. package/dist/src/uploader/api/dtos/handshakeResponse.js.map +1 -1
  108. package/dist/src/uploader/api/dtos/pingResponse.js.map +1 -1
  109. package/dist/src/uploader/api/dtos/sendChunkRequest.js.map +1 -1
  110. package/dist/src/uploader/api/fileServerUdpClient.js.map +1 -1
  111. package/dist/src/uploader/api/fileServerUploadClient.js.map +1 -1
  112. package/dist/src/uploader/api/node/nodeFileServerUdpClient.js +8 -8
  113. package/dist/src/uploader/api/node/nodeFileServerUdpClient.js.map +1 -1
  114. package/dist/src/uploader/api/node/nodeFileServerUploadClient.js.map +1 -1
  115. package/dist/src/uploader/api/web/utils/axiosIdleTimeoutManager.js.map +1 -1
  116. package/dist/src/uploader/api/web/webFileServerUploadClient.js.map +1 -1
  117. package/dist/src/uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.js.map +1 -1
  118. package/dist/src/uploader/chunkStreamProviderFactory/uploaderChunkStreamProviderFactory.js.map +1 -1
  119. package/dist/src/uploader/chunkStreamProviderFactory/webFileDetailsUploaderChunkStreamProviderFactory.js.map +1 -1
  120. package/dist/src/uploader/chunksIterator/chunksIterator.js.map +1 -1
  121. package/dist/src/uploader/eventArgs/fileChunkUploadCompletedEventArgs.js.map +1 -1
  122. package/dist/src/uploader/eventArgs/fileChunkUploadCompletedPartiallyEventArgs.js.map +1 -1
  123. package/dist/src/uploader/eventArgs/fileChunkUploadEventArgs.js.map +1 -1
  124. package/dist/src/uploader/eventArgs/fileChunkUploadFailedEventArgs.js.map +1 -1
  125. package/dist/src/uploader/eventArgs/fileChunkUploadProgressedEventArgs.js.map +1 -1
  126. package/dist/src/uploader/eventArgs/fileUploadEventArgs.js.map +1 -1
  127. package/dist/src/uploader/eventArgs/fileUploadFailedEventArgs.js.map +1 -1
  128. package/dist/src/uploader/eventArgs/transferMetadataDeterminedEventArgs.js.map +1 -1
  129. package/dist/src/uploader/eventArgs/transferUploadCompletedEventArgs.js.map +1 -1
  130. package/dist/src/uploader/eventArgs/transferUploadModeChosenEventArgs.js.map +1 -1
  131. package/dist/src/uploader/eventArgs/transferUploadProgressedEventArgs.js.map +1 -1
  132. package/dist/src/uploader/export/transferUploadExportData.js.map +1 -1
  133. package/dist/src/uploader/export/transferUploadExportState.js.map +1 -1
  134. package/dist/src/uploader/export/transferUploadMetadata.js.map +1 -1
  135. package/dist/src/uploader/optimizer/optimizationValues.js.map +1 -1
  136. package/dist/src/uploader/optimizer/strategies/udpConcurrencyBasedOptimizationStrategy.js.map +1 -1
  137. package/dist/src/uploader/optimizer/strategies/udpSleepBasedOptimizationStrategy.js.map +1 -1
  138. package/dist/src/uploader/optimizer/transferUploadOptimizationStrategy.js.map +1 -1
  139. package/dist/src/uploader/optimizer/transferUploadOptimizer.js.map +1 -1
  140. package/dist/src/uploader/optimizer/uploadOptimizer.js.map +1 -1
  141. package/dist/src/uploader/options/transferUploadAppendInfo.js.map +1 -1
  142. package/dist/src/uploader/options/transferUploadConfig.js.map +1 -1
  143. package/dist/src/uploader/options/transferUploadInfo.js.map +1 -1
  144. package/dist/src/uploader/options/transferUploadInfoBase.js.map +1 -1
  145. package/dist/src/uploader/pauseController.js.map +1 -1
  146. package/dist/src/uploader/state/continuousChunksCalculator.js.map +1 -1
  147. package/dist/src/uploader/state/readonlyTransferUploadStateFile.js.map +1 -1
  148. package/dist/src/uploader/state/readonlyTransferUploadStateFiles.js.map +1 -1
  149. package/dist/src/uploader/state/transferUploadProgressCalculator.js.map +1 -1
  150. package/dist/src/uploader/state/transferUploadState.js.map +1 -1
  151. package/dist/src/uploader/state/transferUploadStateFile.js.map +1 -1
  152. package/dist/src/uploader/state/transferUploadStateFiles.js.map +1 -1
  153. package/dist/src/uploader/transferUpload.js.map +1 -1
  154. package/dist/src/uploader/transferUploadError.js.map +1 -1
  155. package/dist/src/uploader/transferUploadEvent.js.map +1 -1
  156. package/dist/src/utils/api/apiClient.js.map +1 -1
  157. package/dist/src/utils/api/apiClientBase.js.map +1 -1
  158. package/dist/src/utils/api/apiError.js.map +1 -1
  159. package/dist/src/utils/api/apiFilemail449Error.js.map +1 -1
  160. package/dist/src/utils/api/apiFilemailError.js.map +1 -1
  161. package/dist/src/utils/api/dtos/baseResponse.js.map +1 -1
  162. package/dist/src/utils/api/dtos/cancelTransferRequest.js.map +1 -1
  163. package/dist/src/utils/api/dtos/finalizeTransferRequest.js.map +1 -1
  164. package/dist/src/utils/api/dtos/finalizeTransferResponse.js.map +1 -1
  165. package/dist/src/utils/api/dtos/getCompanyResponse.js.map +1 -1
  166. package/dist/src/utils/api/dtos/getCompressedFileMetadataResponse.js.map +1 -1
  167. package/dist/src/utils/api/dtos/getInboxTransfersRequest.js.map +1 -1
  168. package/dist/src/utils/api/dtos/getInboxTransfersResponse.js.map +1 -1
  169. package/dist/src/utils/api/dtos/getRangehashResponse.js.map +1 -1
  170. package/dist/src/utils/api/dtos/getTransferRequest.js.map +1 -1
  171. package/dist/src/utils/api/dtos/getTransferResponse.js.map +1 -1
  172. package/dist/src/utils/api/dtos/initializeTransferRequest.js.map +1 -1
  173. package/dist/src/utils/api/dtos/initializeTransferResponse.js.map +1 -1
  174. package/dist/src/utils/api/dtos/loginRequest.js.map +1 -1
  175. package/dist/src/utils/api/dtos/loginResponse.js.map +1 -1
  176. package/dist/src/utils/api/dtos/registerFileDownloadRequest.js.map +1 -1
  177. package/dist/src/utils/api/dtos/registerTransferDownloadRequest.js.map +1 -1
  178. package/dist/src/utils/api/dtos/resetTransferRequest.js.map +1 -1
  179. package/dist/src/utils/api/dtos/sendFileChunkRequest.js.map +1 -1
  180. package/dist/src/utils/api/dtos/transferCustomFieldDto.js.map +1 -1
  181. package/dist/src/utils/api/dtos/transferFileDto.js.map +1 -1
  182. package/dist/src/utils/api/fileServerClientFactory.js.map +1 -1
  183. package/dist/src/utils/api/node/gotWorkarounds.js.map +1 -1
  184. package/dist/src/utils/api/node/nodeApiClient.js.map +1 -1
  185. package/dist/src/utils/api/node/nodeClientBase.js.map +1 -1
  186. package/dist/src/utils/api/node/nodeFileServerClientFactory.js.map +1 -1
  187. package/dist/src/utils/api/node/nodeFileserverClientBase.js.map +1 -1
  188. package/dist/src/utils/api/urlUtil.js.map +1 -1
  189. package/dist/src/utils/api/web/webApiClient.js.map +1 -1
  190. package/dist/src/utils/api/web/webClientBase.js.map +1 -1
  191. package/dist/src/utils/api/web/webFileServerClientFactory.js.map +1 -1
  192. package/dist/src/utils/api/web/webFileserverClientBase.js.map +1 -1
  193. package/dist/src/utils/concurrencyController/concurrencyController.js.map +1 -1
  194. package/dist/src/utils/concurrencyController/concurrencyReleaser.js.map +1 -1
  195. package/dist/src/utils/concurrencyController/transferConcurrencyController.js.map +1 -1
  196. package/dist/src/utils/crypto/cryptographyProvider.js.map +1 -1
  197. package/dist/src/utils/crypto/node/nodeCryptographyProvider.js.map +1 -1
  198. package/dist/src/utils/crypto/web/webCryptographyProvider.js.map +1 -1
  199. package/dist/src/utils/dateAndTime/simpleDateFormatter.js.map +1 -1
  200. package/dist/src/utils/events/chunkProgressEvent.js.map +1 -1
  201. package/dist/src/utils/events/eventsEngine.js.map +1 -1
  202. package/dist/src/utils/events/node/nodeEventsEngine.js.map +1 -1
  203. package/dist/src/utils/events/web/webEventsEngine.js.map +1 -1
  204. package/dist/src/utils/fileSystem/chunkStreamProvider.js.map +1 -1
  205. package/dist/src/utils/fileSystem/chunkStreamProviderFactory.js.map +1 -1
  206. package/dist/src/utils/fileSystem/fileDetails.js.map +1 -1
  207. package/dist/src/utils/fileSystem/fileSystemService.d.ts +2 -2
  208. package/dist/src/utils/fileSystem/fileSystemService.d.ts.map +1 -1
  209. package/dist/src/utils/fileSystem/fileSystemService.js.map +1 -1
  210. package/dist/src/utils/fileSystem/fsError.js.map +1 -1
  211. package/dist/src/utils/fileSystem/node/nodeChunkStreamProvider.js.map +1 -1
  212. package/dist/src/utils/fileSystem/node/nodeChunkStreamProviderFactory.js.map +1 -1
  213. package/dist/src/utils/fileSystem/node/nodeFileDetails.js.map +1 -1
  214. package/dist/src/utils/fileSystem/node/nodeFileSystemService.d.ts +2 -1
  215. package/dist/src/utils/fileSystem/node/nodeFileSystemService.d.ts.map +1 -1
  216. package/dist/src/utils/fileSystem/node/nodeFileSystemService.js +15 -4
  217. package/dist/src/utils/fileSystem/node/nodeFileSystemService.js.map +1 -1
  218. package/dist/src/utils/fileSystem/parsedPath.js.map +1 -1
  219. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamEncrypter.js.map +1 -1
  220. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.js.map +1 -1
  221. package/dist/src/utils/fileSystem/web/webChunkStreamProviderFactory.js.map +1 -1
  222. package/dist/src/utils/fileSystem/web/webFileDetails.js.map +1 -1
  223. package/dist/src/utils/jsonParsing.js.map +1 -1
  224. package/dist/src/utils/logging/logEventPropertyNames.js.map +1 -1
  225. package/dist/src/utils/mergeAbortAndPauseSignals.js.map +1 -1
  226. package/dist/src/utils/networking/throttlingOptions.js.map +1 -1
  227. package/dist/src/utils/promiseAll.js.map +1 -1
  228. package/dist/src/utils/types/transferStatus.js.map +1 -1
  229. package/dist/src/utils/uint8ArrayUtils.js.map +1 -1
  230. package/package.json +79 -79
  231. package/readme.md +18 -18
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploadOptimizer.js","sourceRoot":"","sources":["../../../../src/uploader/optimizer/transferUploadOptimizer.ts"],"names":[],"mappings":"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","sourcesContent":["import throttle from \"lodash.throttle\";\r\n\r\nimport TransferConcurrencyController from \"../../utils/concurrencyController/transferConcurrencyController.js\";\r\nimport TransferUploadEvent from \"../transferUploadEvent.js\";\r\nimport FsError from \"../../utils/fileSystem/fsError.js\";\r\n\r\nimport type OptimizationValues from \"./optimizationValues.js\";\r\nimport type ConcurrencyController from \"../../utils/concurrencyController/concurrencyController.js\";\r\nimport type ConcurrencyReleaser from \"../../utils/concurrencyController/concurrencyReleaser.js\";\r\nimport type UploadOptimizer from \"./uploadOptimizer.js\";\r\nimport type EventsEngine from \"../../utils/events/eventsEngine.js\";\r\nimport type FileChunkUploadFailedEventArgs from \"../eventArgs/fileChunkUploadFailedEventArgs.js\";\r\nimport type FileChunkUploadCompletedEventArgs from \"../eventArgs/fileChunkUploadCompletedEventArgs.js\";\r\nimport type FileChunkUploadCompletedPartiallyEventArgs from \"../eventArgs/fileChunkUploadCompletedPartiallyEventArgs.js\";\r\nimport type TransferUploadOptimizationStrategy from \"./transferUploadOptimizationStrategy.js\";\r\n\r\nexport default class TransferUploadOptimizer implements UploadOptimizer {\r\n readonly #tcpChunkSize: number;\r\n readonly #tcpChunksUploadInParallel: number;\r\n readonly #transferEventsEngine: EventsEngine;\r\n readonly #udpOptimizationStrategy: TransferUploadOptimizationStrategy;\r\n\r\n #concurrencyController: ConcurrencyController | undefined;\r\n\r\n #isUdp: boolean | undefined;\r\n\r\n #initialOptimizationValues: OptimizationValues | undefined;\r\n #currentOptimizationValues: OptimizationValues | undefined;\r\n\r\n #timeout: NodeJS.Timeout | undefined;\r\n\r\n #startedChunksTimeHistory: number[] = [];\r\n #ackedChunksHistory: { time: number, latencyInMs: number }[] = [];\r\n #failedChunksTimeHistory: number[] = [];\r\n\r\n #chunksStartedInThisMs = 0;\r\n\r\n #noBufsErrorHandler = throttle(() => {\r\n const result = this.#udpOptimizationStrategy.noBufsErrorHandler(this.#currentOptimizationValues!);\r\n\r\n this.#currentOptimizationValues!.maxParallelChunksAmount = result.maxParallelChunksAmount;\r\n this.#currentOptimizationValues!.minTimeBetweenChunksStartInMs = result.minTimeBetweenChunksStartInMs;\r\n\r\n this.#concurrencyController!.maxConcurrency = this.#currentOptimizationValues!.maxParallelChunksAmount;\r\n }, 500, { leading: true, trailing: false });\r\n\r\n #msgSizeErrorHandler = throttle(() => {\r\n const result = this.#udpOptimizationStrategy.msgSizeErrorHandler(this.#currentOptimizationValues!);\r\n\r\n this.#currentOptimizationValues!.chunkSize = result.chunkSize;\r\n }, 500, { leading: true, trailing: false });\r\n\r\n constructor(tcpChunkSize: number, tcpChunksUploadInParallel: number, transferEventsEngine: EventsEngine, udpOptimizationStrategy: TransferUploadOptimizationStrategy) {\r\n this.#tcpChunkSize = tcpChunkSize;\r\n this.#tcpChunksUploadInParallel = tcpChunksUploadInParallel;\r\n this.#transferEventsEngine = transferEventsEngine;\r\n this.#udpOptimizationStrategy = udpOptimizationStrategy;\r\n }\r\n\r\n get currentChunkSize(): number {\r\n this.throwIfNotStarted();\r\n\r\n return this.#currentOptimizationValues!.chunkSize;\r\n }\r\n\r\n get currentRequestTimeoutInMs(): number {\r\n this.throwIfNotStarted();\r\n\r\n return this.#currentOptimizationValues!.requestTimeoutInMs;\r\n }\r\n\r\n get currentSleepTimeInMs(): number {\r\n this.throwIfNotStarted();\r\n\r\n if (this.#startedChunksTimeHistory.length === 0)\r\n return 0;\r\n\r\n if (this.#currentOptimizationValues!.minTimeBetweenChunksStartInMs < 1) {\r\n const chunksToStartPerMs = Math.ceil(1 / this.#currentOptimizationValues!.minTimeBetweenChunksStartInMs);\r\n\r\n if (this.#chunksStartedInThisMs < chunksToStartPerMs) {\r\n this.#chunksStartedInThisMs += 1;\r\n return 0;\r\n }\r\n\r\n this.#chunksStartedInThisMs = 0;\r\n return 1;\r\n }\r\n\r\n const lastChunkStartTime = this.#startedChunksTimeHistory[this.#startedChunksTimeHistory.length - 1]!;\r\n const timeSinceLastStart = new Date().getTime() - lastChunkStartTime;\r\n\r\n if (timeSinceLastStart < this.#currentOptimizationValues!.minTimeBetweenChunksStartInMs)\r\n return this.#currentOptimizationValues!.minTimeBetweenChunksStartInMs - timeSinceLastStart;\r\n\r\n return 0;\r\n }\r\n\r\n async semaphoreAcquire(): Promise<ConcurrencyReleaser> {\r\n this.throwIfNotStarted();\r\n\r\n return await this.#concurrencyController!.acquire();\r\n }\r\n\r\n private throwIfNotStarted() {\r\n if (this.#isUdp === undefined)\r\n throw new Error(`Optimizer hasn't been started`);\r\n }\r\n\r\n start(isUdp: boolean, serverLatencyInMs: number) {\r\n this.#isUdp = isUdp;\r\n\r\n if (isUdp) {\r\n this.#initialOptimizationValues = this.#udpOptimizationStrategy.getInitialValues(serverLatencyInMs);\r\n this.#currentOptimizationValues = this.#initialOptimizationValues;\r\n\r\n this.#concurrencyController = new TransferConcurrencyController(this.#initialOptimizationValues.maxParallelChunksAmount);\r\n\r\n this.subscribeToTransferEvents();\r\n\r\n this.#timeout = setTimeout(() => this.optimize(), this.#initialOptimizationValues.optimizationIntervalInMs);\r\n }\r\n else {\r\n this.#timeout = undefined;\r\n\r\n this.#initialOptimizationValues = {\r\n chunkSize: this.#tcpChunkSize,\r\n maxParallelChunksAmount: this.#tcpChunksUploadInParallel,\r\n minTimeBetweenChunksStartInMs: 0,\r\n optimizationIntervalInMs: 0,\r\n requestTimeoutInMs: 0,\r\n };\r\n\r\n this.#currentOptimizationValues = this.#initialOptimizationValues;\r\n\r\n this.#concurrencyController = new TransferConcurrencyController(this.#tcpChunksUploadInParallel);\r\n }\r\n }\r\n\r\n stop() {\r\n if (!this.#isUdp)\r\n return;\r\n\r\n clearTimeout(this.#timeout);\r\n\r\n this.unsubscribeFromTransferEvents();\r\n }\r\n\r\n private subscribeToTransferEvents() {\r\n this.#transferEventsEngine.addEventListener(TransferUploadEvent.FileChunkUploadStarted, this.chunkUploadStarted);\r\n this.#transferEventsEngine.addEventListener(TransferUploadEvent.FileChunkUploadCompleted, this.chunkUploadSucceeded);\r\n this.#transferEventsEngine.addEventListener(TransferUploadEvent.FileChunkUploadCompletedPartially, this.chunkUploadSucceededPartially);\r\n this.#transferEventsEngine.addEventListener(TransferUploadEvent.FileChunkUploadFailed, this.chunkUploadFailed);\r\n }\r\n\r\n private unsubscribeFromTransferEvents() {\r\n this.#transferEventsEngine.removeEventListener(TransferUploadEvent.FileChunkUploadStarted, this.chunkUploadStarted);\r\n this.#transferEventsEngine.removeEventListener(TransferUploadEvent.FileChunkUploadCompleted, this.chunkUploadSucceeded);\r\n this.#transferEventsEngine.removeEventListener(TransferUploadEvent.FileChunkUploadCompletedPartially, this.chunkUploadSucceededPartially);\r\n this.#transferEventsEngine.removeEventListener(TransferUploadEvent.FileChunkUploadFailed, this.chunkUploadFailed);\r\n }\r\n\r\n private chunkUploadStarted = () => {\r\n this.#startedChunksTimeHistory.push(Date.now());\r\n };\r\n\r\n private chunkUploadSucceeded = (eventArgs: FileChunkUploadCompletedEventArgs) => {\r\n this.#ackedChunksHistory.push({ time: Date.now(), latencyInMs: eventArgs.latencyInMsIfUdp! });\r\n };\r\n\r\n private chunkUploadSucceededPartially = (eventArgs: FileChunkUploadCompletedPartiallyEventArgs) => {\r\n this.#ackedChunksHistory.push({ time: Date.now(), latencyInMs: eventArgs.latencyInMsIfUdp! });\r\n };\r\n\r\n private chunkUploadFailed = (eventArgs: FileChunkUploadFailedEventArgs) => {\r\n const isFileAccessError = eventArgs.error.cause instanceof FsError;\r\n\r\n if (isFileAccessError)\r\n return;\r\n\r\n if (this.isMsgSizeError(eventArgs.error)) {\r\n this.#msgSizeErrorHandler();\r\n return;\r\n }\r\n\r\n if (this.isNoBufsError(eventArgs.error)) {\r\n this.#noBufsErrorHandler();\r\n return;\r\n }\r\n\r\n this.#failedChunksTimeHistory.push(Date.now());\r\n };\r\n\r\n private isMsgSizeError(error: Error) {\r\n return this.isErrorContainingErrorCode(error, `EMSGSIZE`);\r\n }\r\n\r\n private isNoBufsError(error: Error) {\r\n return this.isErrorContainingErrorCode(error, `ENOBUFS`);\r\n }\r\n\r\n private isErrorContainingErrorCode(error: Error, errorCode: string): boolean {\r\n if (error.message.includes(errorCode))\r\n return true;\r\n\r\n if (error.cause)\r\n return this.isErrorContainingErrorCode(error.cause, errorCode);\r\n\r\n return false;\r\n }\r\n\r\n private optimize = async (): Promise<void> => {\r\n const optimizationResult = this.#udpOptimizationStrategy.getOptimizedValues(this.#startedChunksTimeHistory, this.#ackedChunksHistory, this.#failedChunksTimeHistory, this.#currentOptimizationValues!);\r\n\r\n this.#currentOptimizationValues = optimizationResult.optimizedValues;\r\n\r\n this.#concurrencyController!.maxConcurrency = this.#currentOptimizationValues.maxParallelChunksAmount;\r\n\r\n this.#timeout = setTimeout(() => this.optimize(), optimizationResult.optimizedValues.optimizationIntervalInMs);\r\n\r\n if (optimizationResult.clearChunksHistory === false)\r\n return;\r\n\r\n this.#startedChunksTimeHistory = [];\r\n this.#ackedChunksHistory = [];\r\n this.#failedChunksTimeHistory = [];\r\n };\r\n}"]}
1
+ {"version":3,"file":"transferUploadOptimizer.js","sourceRoot":"","sources":["../../../../src/uploader/optimizer/transferUploadOptimizer.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AAEvC,OAAO,6BAA6B,MAAM,oEAAoE,CAAC;AAC/G,OAAO,mBAAmB,MAAM,2BAA2B,CAAC;AAC5D,OAAO,OAAO,MAAM,mCAAmC,CAAC;AAYxD,MAAM,CAAC,OAAO,OAAO,uBAAuB;IAC/B,aAAa,CAAS;IACtB,0BAA0B,CAAS;IACnC,qBAAqB,CAAe;IACpC,wBAAwB,CAAqC;IAEtE,sBAAsB,CAAoC;IAE1D,MAAM,CAAsB;IAE5B,0BAA0B,CAAiC;IAC3D,0BAA0B,CAAiC;IAE3D,QAAQ,CAA6B;IAErC,yBAAyB,GAAa,EAAE,CAAC;IACzC,mBAAmB,GAA4C,EAAE,CAAC;IAClE,wBAAwB,GAAa,EAAE,CAAC;IAExC,sBAAsB,GAAG,CAAC,CAAC;IAE3B,mBAAmB,GAAG,QAAQ,CAAC,GAAG,EAAE;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,IAAI,CAAC,0BAA2B,CAAC,CAAC;QAElG,IAAI,CAAC,0BAA2B,CAAC,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,CAAC;QAC1F,IAAI,CAAC,0BAA2B,CAAC,6BAA6B,GAAG,MAAM,CAAC,6BAA6B,CAAC;QAEtG,IAAI,CAAC,sBAAuB,CAAC,cAAc,GAAG,IAAI,CAAC,0BAA2B,CAAC,uBAAuB,CAAC;IAC3G,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAE5C,oBAAoB,GAAG,QAAQ,CAAC,GAAG,EAAE;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,IAAI,CAAC,0BAA2B,CAAC,CAAC;QAEnG,IAAI,CAAC,0BAA2B,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAClE,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAE5C,YAAY,YAAoB,EAAE,yBAAiC,EAAE,oBAAkC,EAAE,uBAA2D;QAChK,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,0BAA0B,GAAG,yBAAyB,CAAC;QAC5D,IAAI,CAAC,qBAAqB,GAAG,oBAAoB,CAAC;QAClD,IAAI,CAAC,wBAAwB,GAAG,uBAAuB,CAAC;IAC5D,CAAC;IAED,IAAI,gBAAgB;QAChB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,OAAO,IAAI,CAAC,0BAA2B,CAAC,SAAS,CAAC;IACtD,CAAC;IAED,IAAI,yBAAyB;QACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,OAAO,IAAI,CAAC,0BAA2B,CAAC,kBAAkB,CAAC;IAC/D,CAAC;IAED,IAAI,oBAAoB;QACpB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,IAAI,CAAC,yBAAyB,CAAC,MAAM,KAAK,CAAC;YAC3C,OAAO,CAAC,CAAC;QAEb,IAAI,IAAI,CAAC,0BAA2B,CAAC,6BAA6B,GAAG,CAAC,EAAE,CAAC;YACrE,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,0BAA2B,CAAC,6BAA6B,CAAC,CAAC;YAEzG,IAAI,IAAI,CAAC,sBAAsB,GAAG,kBAAkB,EAAE,CAAC;gBACnD,IAAI,CAAC,sBAAsB,IAAI,CAAC,CAAC;gBACjC,OAAO,CAAC,CAAC;YACb,CAAC;YAED,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC;YAChC,OAAO,CAAC,CAAC;QACb,CAAC;QAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;QACtG,MAAM,kBAAkB,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,kBAAkB,CAAC;QAErE,IAAI,kBAAkB,GAAG,IAAI,CAAC,0BAA2B,CAAC,6BAA6B;YACnF,OAAO,IAAI,CAAC,0BAA2B,CAAC,6BAA6B,GAAG,kBAAkB,CAAC;QAE/F,OAAO,CAAC,CAAC;IACb,CAAC;IAED,KAAK,CAAC,gBAAgB;QAClB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,OAAO,MAAM,IAAI,CAAC,sBAAuB,CAAC,OAAO,EAAE,CAAC;IACxD,CAAC;IAEO,iBAAiB;QACrB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YACzB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,KAAc,EAAE,iBAAyB;QAC3C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,IAAI,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;YACpG,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,0BAA0B,CAAC;YAElE,IAAI,CAAC,sBAAsB,GAAG,IAAI,6BAA6B,CAAC,IAAI,CAAC,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;YAEzH,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAEjC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,0BAA0B,CAAC,wBAAwB,CAAC,CAAC;QAChH,CAAC;aACI,CAAC;YACF,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;YAE1B,IAAI,CAAC,0BAA0B,GAAG;gBAC9B,SAAS,EAAE,IAAI,CAAC,aAAa;gBAC7B,uBAAuB,EAAE,IAAI,CAAC,0BAA0B;gBACxD,6BAA6B,EAAE,CAAC;gBAChC,wBAAwB,EAAE,CAAC;gBAC3B,kBAAkB,EAAE,CAAC;aACxB,CAAC;YAEF,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,0BAA0B,CAAC;YAElE,IAAI,CAAC,sBAAsB,GAAG,IAAI,6BAA6B,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACrG,CAAC;IACL,CAAC;IAED,IAAI;QACA,IAAI,CAAC,IAAI,CAAC,MAAM;YACZ,OAAO;QAEX,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE5B,IAAI,CAAC,6BAA6B,EAAE,CAAC;IACzC,CAAC;IAEO,yBAAyB;QAC7B,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACjH,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,wBAAwB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACrH,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,iCAAiC,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACvI,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,qBAAqB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACnH,CAAC;IAEO,6BAA6B;QACjC,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACpH,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,wBAAwB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACxH,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,iCAAiC,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC1I,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,qBAAqB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACtH,CAAC;IAEO,kBAAkB,GAAG,GAAG,EAAE;QAC9B,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC;IAEM,oBAAoB,GAAG,CAAC,SAA4C,EAAE,EAAE;QAC5E,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,gBAAiB,EAAE,CAAC,CAAC;IAClG,CAAC,CAAC;IAEM,6BAA6B,GAAG,CAAC,SAAqD,EAAE,EAAE;QAC9F,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,gBAAiB,EAAE,CAAC,CAAC;IAClG,CAAC,CAAC;IAEM,iBAAiB,GAAG,CAAC,SAAyC,EAAE,EAAE;QACtE,MAAM,iBAAiB,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,YAAY,OAAO,CAAC;QAEnE,IAAI,iBAAiB;YACjB,OAAO;QAEX,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,OAAO;QACX,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC;IAEM,cAAc,CAAC,KAAY;QAC/B,OAAO,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC9D,CAAC;IAEO,aAAa,CAAC,KAAY;QAC9B,OAAO,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC;IAEO,0BAA0B,CAAC,KAAY,EAAE,SAAiB;QAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;YACjC,OAAO,IAAI,CAAC;QAEhB,IAAI,KAAK,CAAC,KAAK;YACX,OAAO,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAEnE,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,QAAQ,GAAG,KAAK,IAAmB,EAAE;QACzC,MAAM,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,IAAI,CAAC,yBAAyB,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,0BAA2B,CAAC,CAAC;QAEvM,IAAI,CAAC,0BAA0B,GAAG,kBAAkB,CAAC,eAAe,CAAC;QAErE,IAAI,CAAC,sBAAuB,CAAC,cAAc,GAAG,IAAI,CAAC,0BAA0B,CAAC,uBAAuB,CAAC;QAEtG,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,kBAAkB,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC;QAE/G,IAAI,kBAAkB,CAAC,kBAAkB,KAAK,KAAK;YAC/C,OAAO;QAEX,IAAI,CAAC,yBAAyB,GAAG,EAAE,CAAC;QACpC,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;IACvC,CAAC,CAAC;CACL","sourcesContent":["import throttle from \"lodash.throttle\";\n\nimport TransferConcurrencyController from \"../../utils/concurrencyController/transferConcurrencyController.js\";\nimport TransferUploadEvent from \"../transferUploadEvent.js\";\nimport FsError from \"../../utils/fileSystem/fsError.js\";\n\nimport type OptimizationValues from \"./optimizationValues.js\";\nimport type ConcurrencyController from \"../../utils/concurrencyController/concurrencyController.js\";\nimport type ConcurrencyReleaser from \"../../utils/concurrencyController/concurrencyReleaser.js\";\nimport type UploadOptimizer from \"./uploadOptimizer.js\";\nimport type EventsEngine from \"../../utils/events/eventsEngine.js\";\nimport type FileChunkUploadFailedEventArgs from \"../eventArgs/fileChunkUploadFailedEventArgs.js\";\nimport type FileChunkUploadCompletedEventArgs from \"../eventArgs/fileChunkUploadCompletedEventArgs.js\";\nimport type FileChunkUploadCompletedPartiallyEventArgs from \"../eventArgs/fileChunkUploadCompletedPartiallyEventArgs.js\";\nimport type TransferUploadOptimizationStrategy from \"./transferUploadOptimizationStrategy.js\";\n\nexport default class TransferUploadOptimizer implements UploadOptimizer {\n readonly #tcpChunkSize: number;\n readonly #tcpChunksUploadInParallel: number;\n readonly #transferEventsEngine: EventsEngine;\n readonly #udpOptimizationStrategy: TransferUploadOptimizationStrategy;\n\n #concurrencyController: ConcurrencyController | undefined;\n\n #isUdp: boolean | undefined;\n\n #initialOptimizationValues: OptimizationValues | undefined;\n #currentOptimizationValues: OptimizationValues | undefined;\n\n #timeout: NodeJS.Timeout | undefined;\n\n #startedChunksTimeHistory: number[] = [];\n #ackedChunksHistory: { time: number, latencyInMs: number }[] = [];\n #failedChunksTimeHistory: number[] = [];\n\n #chunksStartedInThisMs = 0;\n\n #noBufsErrorHandler = throttle(() => {\n const result = this.#udpOptimizationStrategy.noBufsErrorHandler(this.#currentOptimizationValues!);\n\n this.#currentOptimizationValues!.maxParallelChunksAmount = result.maxParallelChunksAmount;\n this.#currentOptimizationValues!.minTimeBetweenChunksStartInMs = result.minTimeBetweenChunksStartInMs;\n\n this.#concurrencyController!.maxConcurrency = this.#currentOptimizationValues!.maxParallelChunksAmount;\n }, 500, { leading: true, trailing: false });\n\n #msgSizeErrorHandler = throttle(() => {\n const result = this.#udpOptimizationStrategy.msgSizeErrorHandler(this.#currentOptimizationValues!);\n\n this.#currentOptimizationValues!.chunkSize = result.chunkSize;\n }, 500, { leading: true, trailing: false });\n\n constructor(tcpChunkSize: number, tcpChunksUploadInParallel: number, transferEventsEngine: EventsEngine, udpOptimizationStrategy: TransferUploadOptimizationStrategy) {\n this.#tcpChunkSize = tcpChunkSize;\n this.#tcpChunksUploadInParallel = tcpChunksUploadInParallel;\n this.#transferEventsEngine = transferEventsEngine;\n this.#udpOptimizationStrategy = udpOptimizationStrategy;\n }\n\n get currentChunkSize(): number {\n this.throwIfNotStarted();\n\n return this.#currentOptimizationValues!.chunkSize;\n }\n\n get currentRequestTimeoutInMs(): number {\n this.throwIfNotStarted();\n\n return this.#currentOptimizationValues!.requestTimeoutInMs;\n }\n\n get currentSleepTimeInMs(): number {\n this.throwIfNotStarted();\n\n if (this.#startedChunksTimeHistory.length === 0)\n return 0;\n\n if (this.#currentOptimizationValues!.minTimeBetweenChunksStartInMs < 1) {\n const chunksToStartPerMs = Math.ceil(1 / this.#currentOptimizationValues!.minTimeBetweenChunksStartInMs);\n\n if (this.#chunksStartedInThisMs < chunksToStartPerMs) {\n this.#chunksStartedInThisMs += 1;\n return 0;\n }\n\n this.#chunksStartedInThisMs = 0;\n return 1;\n }\n\n const lastChunkStartTime = this.#startedChunksTimeHistory[this.#startedChunksTimeHistory.length - 1]!;\n const timeSinceLastStart = new Date().getTime() - lastChunkStartTime;\n\n if (timeSinceLastStart < this.#currentOptimizationValues!.minTimeBetweenChunksStartInMs)\n return this.#currentOptimizationValues!.minTimeBetweenChunksStartInMs - timeSinceLastStart;\n\n return 0;\n }\n\n async semaphoreAcquire(): Promise<ConcurrencyReleaser> {\n this.throwIfNotStarted();\n\n return await this.#concurrencyController!.acquire();\n }\n\n private throwIfNotStarted() {\n if (this.#isUdp === undefined)\n throw new Error(`Optimizer hasn't been started`);\n }\n\n start(isUdp: boolean, serverLatencyInMs: number) {\n this.#isUdp = isUdp;\n\n if (isUdp) {\n this.#initialOptimizationValues = this.#udpOptimizationStrategy.getInitialValues(serverLatencyInMs);\n this.#currentOptimizationValues = this.#initialOptimizationValues;\n\n this.#concurrencyController = new TransferConcurrencyController(this.#initialOptimizationValues.maxParallelChunksAmount);\n\n this.subscribeToTransferEvents();\n\n this.#timeout = setTimeout(() => this.optimize(), this.#initialOptimizationValues.optimizationIntervalInMs);\n }\n else {\n this.#timeout = undefined;\n\n this.#initialOptimizationValues = {\n chunkSize: this.#tcpChunkSize,\n maxParallelChunksAmount: this.#tcpChunksUploadInParallel,\n minTimeBetweenChunksStartInMs: 0,\n optimizationIntervalInMs: 0,\n requestTimeoutInMs: 0,\n };\n\n this.#currentOptimizationValues = this.#initialOptimizationValues;\n\n this.#concurrencyController = new TransferConcurrencyController(this.#tcpChunksUploadInParallel);\n }\n }\n\n stop() {\n if (!this.#isUdp)\n return;\n\n clearTimeout(this.#timeout);\n\n this.unsubscribeFromTransferEvents();\n }\n\n private subscribeToTransferEvents() {\n this.#transferEventsEngine.addEventListener(TransferUploadEvent.FileChunkUploadStarted, this.chunkUploadStarted);\n this.#transferEventsEngine.addEventListener(TransferUploadEvent.FileChunkUploadCompleted, this.chunkUploadSucceeded);\n this.#transferEventsEngine.addEventListener(TransferUploadEvent.FileChunkUploadCompletedPartially, this.chunkUploadSucceededPartially);\n this.#transferEventsEngine.addEventListener(TransferUploadEvent.FileChunkUploadFailed, this.chunkUploadFailed);\n }\n\n private unsubscribeFromTransferEvents() {\n this.#transferEventsEngine.removeEventListener(TransferUploadEvent.FileChunkUploadStarted, this.chunkUploadStarted);\n this.#transferEventsEngine.removeEventListener(TransferUploadEvent.FileChunkUploadCompleted, this.chunkUploadSucceeded);\n this.#transferEventsEngine.removeEventListener(TransferUploadEvent.FileChunkUploadCompletedPartially, this.chunkUploadSucceededPartially);\n this.#transferEventsEngine.removeEventListener(TransferUploadEvent.FileChunkUploadFailed, this.chunkUploadFailed);\n }\n\n private chunkUploadStarted = () => {\n this.#startedChunksTimeHistory.push(Date.now());\n };\n\n private chunkUploadSucceeded = (eventArgs: FileChunkUploadCompletedEventArgs) => {\n this.#ackedChunksHistory.push({ time: Date.now(), latencyInMs: eventArgs.latencyInMsIfUdp! });\n };\n\n private chunkUploadSucceededPartially = (eventArgs: FileChunkUploadCompletedPartiallyEventArgs) => {\n this.#ackedChunksHistory.push({ time: Date.now(), latencyInMs: eventArgs.latencyInMsIfUdp! });\n };\n\n private chunkUploadFailed = (eventArgs: FileChunkUploadFailedEventArgs) => {\n const isFileAccessError = eventArgs.error.cause instanceof FsError;\n\n if (isFileAccessError)\n return;\n\n if (this.isMsgSizeError(eventArgs.error)) {\n this.#msgSizeErrorHandler();\n return;\n }\n\n if (this.isNoBufsError(eventArgs.error)) {\n this.#noBufsErrorHandler();\n return;\n }\n\n this.#failedChunksTimeHistory.push(Date.now());\n };\n\n private isMsgSizeError(error: Error) {\n return this.isErrorContainingErrorCode(error, `EMSGSIZE`);\n }\n\n private isNoBufsError(error: Error) {\n return this.isErrorContainingErrorCode(error, `ENOBUFS`);\n }\n\n private isErrorContainingErrorCode(error: Error, errorCode: string): boolean {\n if (error.message.includes(errorCode))\n return true;\n\n if (error.cause)\n return this.isErrorContainingErrorCode(error.cause, errorCode);\n\n return false;\n }\n\n private optimize = async (): Promise<void> => {\n const optimizationResult = this.#udpOptimizationStrategy.getOptimizedValues(this.#startedChunksTimeHistory, this.#ackedChunksHistory, this.#failedChunksTimeHistory, this.#currentOptimizationValues!);\n\n this.#currentOptimizationValues = optimizationResult.optimizedValues;\n\n this.#concurrencyController!.maxConcurrency = this.#currentOptimizationValues.maxParallelChunksAmount;\n\n this.#timeout = setTimeout(() => this.optimize(), optimizationResult.optimizedValues.optimizationIntervalInMs);\n\n if (optimizationResult.clearChunksHistory === false)\n return;\n\n this.#startedChunksTimeHistory = [];\n this.#ackedChunksHistory = [];\n this.#failedChunksTimeHistory = [];\n };\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"uploadOptimizer.js","sourceRoot":"","sources":["../../../../src/uploader/optimizer/uploadOptimizer.ts"],"names":[],"mappings":"","sourcesContent":["import type ConcurrencyReleaser from \"../../utils/concurrencyController/concurrencyReleaser.js\";\r\n\r\ninterface UploadOptimizer {\r\n get currentChunkSize(): number;\r\n get currentSleepTimeInMs(): number;\r\n get currentRequestTimeoutInMs(): number;\r\n semaphoreAcquire(): Promise<ConcurrencyReleaser>;\r\n start(isUdpMode: boolean, serverLatencyInMs: number): void;\r\n stop(): void;\r\n}\r\n\r\nexport default UploadOptimizer;"]}
1
+ {"version":3,"file":"uploadOptimizer.js","sourceRoot":"","sources":["../../../../src/uploader/optimizer/uploadOptimizer.ts"],"names":[],"mappings":"","sourcesContent":["import type ConcurrencyReleaser from \"../../utils/concurrencyController/concurrencyReleaser.js\";\n\ninterface UploadOptimizer {\n get currentChunkSize(): number;\n get currentSleepTimeInMs(): number;\n get currentRequestTimeoutInMs(): number;\n semaphoreAcquire(): Promise<ConcurrencyReleaser>;\n start(isUdpMode: boolean, serverLatencyInMs: number): void;\n stop(): void;\n}\n\nexport default UploadOptimizer;"]}
@@ -1 +1 @@
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
+ {"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 +1 @@
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 forceUdp?: boolean,\r\n turnOffUdp?: boolean,\r\n}\r\n\r\nexport default TransferUploadConfig;"]}
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 forceUdp?: boolean,\n turnOffUdp?: boolean,\n}\n\nexport default TransferUploadConfig;"]}
@@ -1 +1 @@
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 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;"]}
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 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;"]}
@@ -1 +1 @@
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}\r\n\r\nexport default TransferUploadInfoBase;"]}
1
+ {"version":3,"file":"transferUploadInfoBase.js","sourceRoot":"","sources":["../../../../src/uploader/options/transferUploadInfoBase.ts"],"names":[],"mappings":"","sourcesContent":["interface TransferUploadInfoBase<T> {\n files: T[];\n}\n\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 */\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
+ {"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 +1 @@
1
- {"version":3,"file":"continuousChunksCalculator.js","sourceRoot":"","sources":["../../../../src/uploader/state/continuousChunksCalculator.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,0BAA0B;IAC3C,YAAY,GAA4C,IAAI,GAAG,EAAE,CAAC;IAElE,MAAM;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,CAAC,aAA8C;QAClD,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/C,CAAC;IAED,SAAS,CAAC,MAAuB;QAC7B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC/C,CAAC;IAED,2BAA2B,CAAC,MAAuB;QAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACnG,CAAC;IAED,WAAW,CAAC,MAAuB,EAAE,QAAyB;QAC1D,IAAI,QAAQ,CAAC,WAAW,KAAK,CAAC;YAC1B,OAAO;QAEX,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACrD,OAAO;QACX,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAEO,6BAA6B,CAAC,MAAuB,EAAE,QAAyB;QACpF,MAAM,SAAS,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE7B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAEzC,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,eAAe,CAAC,MAAuB,EAAE,QAAyB;QACtE,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QAElD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;YAE7B,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;YACjC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAE9F,MAAM,0CAA0C,GAAG,SAAS,CAAC,aAAa,GAAG,SAAS,CAAC,WAAW,CAAC;YACnG,MAAM,yCAAyC,GAAG,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,WAAW,CAAC;YAEhG,MAAM,gCAAgC,GAAG,SAAS,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;YAE1F,MAAM,kBAAkB,GAAG,0CAA0C,KAAK,QAAQ,CAAC,aAAa,CAAC;YACjG,MAAM,oBAAoB,GAAG,SAAS,CAAC,aAAa,KAAK,yCAAyC,CAAC;YACnG,MAAM,oBAAoB,GAAG,SAAS,IAAI,SAAS,CAAC,aAAa,KAAK,yCAAyC,CAAC;YAEhH,IAAI,kBAAkB,IAAI,oBAAoB,EAAE,CAAC;gBAC7C,IAAI,CAAC,iCAAiC,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;gBAC5E,OAAO;YACX,CAAC;YAED,IAAI,kBAAkB,EAAE,CAAC;gBACrB,IAAI,CAAC,+BAA+B,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAC1D,OAAO;YACX,CAAC;YAED,IAAI,oBAAoB,EAAE,CAAC;gBACvB,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;gBACxD,OAAO;YACX,CAAC;YAED,IAAI,gCAAgC,EAAE,CAAC;gBACnC,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACrD,OAAO;YACX,CAAC;QACL,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAEO,iCAAiC,CAAC,MAAuB,EAAE,cAAsB,EAAE,QAAyB,EAAE,eAAuB;QACzI,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QAElD,MAAM,SAAS,GAAG,UAAU,CAAC,cAAc,CAAE,CAAC;QAC9C,MAAM,UAAU,GAAG,UAAU,CAAC,eAAe,CAAE,CAAC;QAEhD,SAAS,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;QAEvE,UAAU,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAEO,+BAA+B,CAAC,MAAuB,EAAE,kBAA0B,EAAE,QAAyB;QAClH,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QAClD,UAAU,CAAC,kBAAkB,CAAE,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC;IACxE,CAAC;IAEO,6BAA6B,CAAC,MAAuB,EAAE,QAAyB,EAAE,kBAA0B;QAChH,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QAClD,UAAU,CAAC,kBAAkB,CAAE,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;QACvE,UAAU,CAAC,kBAAkB,CAAE,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC;IACxE,CAAC;IAEO,0BAA0B,CAAC,MAAuB,EAAE,eAAuB,EAAE,QAAyB;QAC1G,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QAClD,UAAU,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;CACJ","sourcesContent":["export default class ContinuousChunksCalculator {\r\n #filesChunks: Map<string | number, ContinuousChunk[]> = new Map();\r\n\r\n export(): ContinuousChunksCalculatorState {\r\n return Array.from(this.#filesChunks.entries());\r\n }\r\n\r\n recover(exportedState: ContinuousChunksCalculatorState) {\r\n this.#filesChunks = new Map(exportedState);\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
+ {"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 return Array.from(this.#filesChunks.entries());\n }\n\n recover(exportedState: ContinuousChunksCalculatorState) {\n this.#filesChunks = new Map(exportedState);\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 +1 @@
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
+ {"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 +1 @@
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
+ {"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 +1 @@
1
- {"version":3,"file":"transferUploadProgressCalculator.js","sourceRoot":"","sources":["../../../../src/uploader/state/transferUploadProgressCalculator.ts"],"names":[],"mappings":"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","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
+ {"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 +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 */\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 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 } 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 #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.#ratesCalculator = new TransferUploadRatesCalculator(this.#totalBytesCount, this.#currentRatesTimespanInMs);\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 this.#continuousChunkCalculator.export();\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 file.uploadedBytesCount = this.#continuousChunkCalculator.getChunksUploadedBytesCount(file.externalId);\r\n\r\n this.#uploadedBytesCount += file.uploadedBytesCount;\r\n }\r\n }\r\n\r\n private recoverFromExportedState(exportedState: TransferUploadExportState) {\r\n this.#continuousChunkCalculator.recover(exportedState);\r\n\r\n for (const [, file] of Object.entries(this.#files)) {\r\n const fileChunks = this.#continuousChunkCalculator.getChunks(file.externalId);\r\n\r\n file.isCompleted = fileChunks.length === 1 && fileChunks[0]!.startPosition === 0 && fileChunks[0]!.sizeInBytes === file.fileSizeInBytes;\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 = new TransferUploadRatesCalculator(this.#totalBytesCount, this.#currentRatesTimespanInMs);\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) {\r\n this.#status = TransferStatus.Completed;\r\n\r\n this.#getRatesAndNotifyUploadProgressedThrottled.flush();\r\n\r\n const eventArgs: TransferUploadCompletedEventArgs = { transferId: transferMetadata.transferId, transferKey: transferMetadata.transferKey, transferDownloadUrl };\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) {\r\n file.isBeingUploaded = true;\r\n\r\n const eventArgs: FileUploadEventArgs = { fileStatus: file };\r\n this.#eventsEngine.emit(TransferUploadEvent.FileUploadStarted, eventArgs);\r\n }\r\n\r\n fileUploadCompleted(file: TransferUploadStateFile) {\r\n file.isBeingUploaded = false;\r\n file.isCompleted = true;\r\n\r\n this.#completedFilesCount += 1;\r\n\r\n const eventArgs: FileUploadEventArgs = { fileStatus: file };\r\n this.#eventsEngine.emit(TransferUploadEvent.FileUploadCompleted, eventArgs);\r\n }\r\n\r\n fileUploadFailed(file: TransferUploadStateFile) {\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, reason: file.failedReason };\r\n this.#eventsEngine.emit(TransferUploadEvent.FileUploadFailed, eventArgs);\r\n }\r\n\r\n chunkUploadStarted(externalFileId: string | number, chunkStartPosition: number, chunkSizeInBytes: number) {\r\n const file = this.getFileInternal(externalFileId);\r\n\r\n if (!file.isBeingUploaded)\r\n this.fileUploadStarted(file);\r\n\r\n file.runningChunksCount += 1;\r\n\r\n const eventArgs: FileChunkUploadEventArgs = { fileStatus: file, chunkStartPosition, chunkSizeInBytes };\r\n this.#eventsEngine.emit(TransferUploadEvent.FileChunkUploadStarted, eventArgs);\r\n }\r\n\r\n chunkUploadProgressed(externalFileId: string | number, 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, 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, startPosition: number, sizeInBytes: number, latencyInMsIfUdp: number | undefined) {\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, chunkStartPosition: startPosition, chunkSizeInBytes: sizeInBytes, latencyInMsIfUdp };\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);\r\n else if (file.uploadedBytesCount + file.failedBytesCount === file.fileSizeInBytes)\r\n this.fileUploadFailed(file);\r\n }\r\n\r\n chunkUploadCompletedPartially(externalFileId: string | number, startPosition: number, sizeInBytes: number, uploadedBytesCount: number, isPauseRequested: boolean, latencyInMsIfUdp?: number) {\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, chunkStartPosition: startPosition, chunkSizeInBytes: sizeInBytes, uploadedBytesCount, isPauseRequested, latencyInMsIfUdp };\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);\r\n }\r\n\r\n chunkUploadFailed(externalFileId: string | number, 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, 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);\r\n }\r\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 */\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 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 } 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 #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.#ratesCalculator = new TransferUploadRatesCalculator(this.#totalBytesCount, this.#currentRatesTimespanInMs);\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 this.#continuousChunkCalculator.export();\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 file.uploadedBytesCount = this.#continuousChunkCalculator.getChunksUploadedBytesCount(file.externalId);\n\n this.#uploadedBytesCount += file.uploadedBytesCount;\n }\n }\n\n private recoverFromExportedState(exportedState: TransferUploadExportState) {\n this.#continuousChunkCalculator.recover(exportedState);\n\n for (const [, file] of Object.entries(this.#files)) {\n const fileChunks = this.#continuousChunkCalculator.getChunks(file.externalId);\n\n file.isCompleted = fileChunks.length === 1 && fileChunks[0]!.startPosition === 0 && fileChunks[0]!.sizeInBytes === file.fileSizeInBytes;\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 = new TransferUploadRatesCalculator(this.#totalBytesCount, this.#currentRatesTimespanInMs);\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) {\n this.#status = TransferStatus.Completed;\n\n this.#getRatesAndNotifyUploadProgressedThrottled.flush();\n\n const eventArgs: TransferUploadCompletedEventArgs = { transferId: transferMetadata.transferId, transferKey: transferMetadata.transferKey, transferDownloadUrl };\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) {\n file.isBeingUploaded = true;\n\n const eventArgs: FileUploadEventArgs = { fileStatus: file };\n this.#eventsEngine.emit(TransferUploadEvent.FileUploadStarted, eventArgs);\n }\n\n fileUploadCompleted(file: TransferUploadStateFile) {\n file.isBeingUploaded = false;\n file.isCompleted = true;\n\n this.#completedFilesCount += 1;\n\n const eventArgs: FileUploadEventArgs = { fileStatus: file };\n this.#eventsEngine.emit(TransferUploadEvent.FileUploadCompleted, eventArgs);\n }\n\n fileUploadFailed(file: TransferUploadStateFile) {\n file.isBeingUploaded = false;\n file.isFailed = true;\n\n this.#failedFilesCount += 1;\n\n const eventArgs: FileUploadFailedEventArgs = { fileStatus: file, reason: file.failedReason };\n this.#eventsEngine.emit(TransferUploadEvent.FileUploadFailed, eventArgs);\n }\n\n chunkUploadStarted(externalFileId: string | number, chunkStartPosition: number, chunkSizeInBytes: number) {\n const file = this.getFileInternal(externalFileId);\n\n if (!file.isBeingUploaded)\n this.fileUploadStarted(file);\n\n file.runningChunksCount += 1;\n\n const eventArgs: FileChunkUploadEventArgs = { fileStatus: file, chunkStartPosition, chunkSizeInBytes };\n this.#eventsEngine.emit(TransferUploadEvent.FileChunkUploadStarted, eventArgs);\n }\n\n chunkUploadProgressed(externalFileId: string | number, 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, 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, startPosition: number, sizeInBytes: number, latencyInMsIfUdp: number | undefined) {\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, chunkStartPosition: startPosition, chunkSizeInBytes: sizeInBytes, latencyInMsIfUdp };\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);\n else if (file.uploadedBytesCount + file.failedBytesCount === file.fileSizeInBytes)\n this.fileUploadFailed(file);\n }\n\n chunkUploadCompletedPartially(externalFileId: string | number, startPosition: number, sizeInBytes: number, uploadedBytesCount: number, isPauseRequested: boolean, latencyInMsIfUdp?: number) {\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, chunkStartPosition: startPosition, chunkSizeInBytes: sizeInBytes, uploadedBytesCount, isPauseRequested, latencyInMsIfUdp };\n this.#eventsEngine.emit(TransferUploadEvent.FileChunkUploadCompletedPartially, eventArgs);\n\n if (file.runningChunksCount === 0 && file.uploadedBytesCount + file.failedBytesCount === file.fileSizeInBytes)\n this.fileUploadFailed(file);\n }\n\n chunkUploadFailed(externalFileId: string | number, 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, 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);\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploadStateFile.js","sourceRoot":"","sources":["../../../../src/uploader/state/transferUploadStateFile.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,uBAAuB;IAC/B,UAAU,CAAkB;IAC5B,eAAe,CAAS;IACxB,QAAQ,CAAS;IAC1B,eAAe,GAAG,KAAK,CAAC;IACxB,kBAAkB,GAAG,CAAC,CAAC;IACvB,WAAW,GAAG,KAAK,CAAC;IACpB,QAAQ,GAAG,KAAK,CAAC;IACjB,YAAY,GAAkB,IAAI,CAAC;IACnC,gBAAgB,GAAG,CAAC,CAAC;IACrB,kBAAkB,GAAG,CAAC,CAAC;IAEvB,YAAY,UAA2B,EAAE,eAAuB,EAAE,QAAgB;QAC9E,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;CACJ","sourcesContent":["export default class TransferUploadStateFile {\r\n readonly externalId: string | number;\r\n readonly fileSizeInBytes: number;\r\n readonly fileName: string;\r\n isBeingUploaded = false;\r\n runningChunksCount = 0;\r\n isCompleted = false;\r\n isFailed = false;\r\n failedReason: string | null = null;\r\n failedBytesCount = 0;\r\n uploadedBytesCount = 0;\r\n\r\n constructor(externalId: string | number, fileSizeInBytes: number, fileName: string) {\r\n this.externalId = externalId;\r\n this.fileSizeInBytes = fileSizeInBytes;\r\n this.fileName = fileName;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"transferUploadStateFile.js","sourceRoot":"","sources":["../../../../src/uploader/state/transferUploadStateFile.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,uBAAuB;IAC/B,UAAU,CAAkB;IAC5B,eAAe,CAAS;IACxB,QAAQ,CAAS;IAC1B,eAAe,GAAG,KAAK,CAAC;IACxB,kBAAkB,GAAG,CAAC,CAAC;IACvB,WAAW,GAAG,KAAK,CAAC;IACpB,QAAQ,GAAG,KAAK,CAAC;IACjB,YAAY,GAAkB,IAAI,CAAC;IACnC,gBAAgB,GAAG,CAAC,CAAC;IACrB,kBAAkB,GAAG,CAAC,CAAC;IAEvB,YAAY,UAA2B,EAAE,eAAuB,EAAE,QAAgB;QAC9E,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;CACJ","sourcesContent":["export default class TransferUploadStateFile {\n readonly externalId: string | number;\n readonly fileSizeInBytes: number;\n readonly fileName: string;\n isBeingUploaded = false;\n runningChunksCount = 0;\n isCompleted = false;\n isFailed = false;\n failedReason: string | null = null;\n failedBytesCount = 0;\n uploadedBytesCount = 0;\n\n constructor(externalId: string | number, fileSizeInBytes: number, fileName: string) {\n this.externalId = externalId;\n this.fileSizeInBytes = fileSizeInBytes;\n this.fileName = fileName;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploadStateFiles.js","sourceRoot":"","sources":["../../../../src/uploader/state/transferUploadStateFiles.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,wBAAwB;CAE5C","sourcesContent":["import type TransferUploadStateFile from \"./transferUploadStateFile.js\";\r\n\r\nexport default class TransferUploadStateFiles {\r\n [externalId: string | number]: TransferUploadStateFile;\r\n}\r\n"]}
1
+ {"version":3,"file":"transferUploadStateFiles.js","sourceRoot":"","sources":["../../../../src/uploader/state/transferUploadStateFiles.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,wBAAwB;CAE5C","sourcesContent":["import type TransferUploadStateFile from \"./transferUploadStateFile.js\";\n\nexport default class TransferUploadStateFiles {\n [externalId: string | number]: TransferUploadStateFile;\n}\n"]}