filemail-sdk 9.4.7 → 9.4.8

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 (218) 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.js.map +1 -1
  32. package/dist/src/client/downloader/node/nodeTransferDownloader.js.map +1 -1
  33. package/dist/src/client/downloader/transferDownloader.js.map +1 -1
  34. package/dist/src/client/environmentVariables.js.map +1 -1
  35. package/dist/src/client/healthMonitor/events/eventArgs/healthMonitorHealthyEventArgs.js.map +1 -1
  36. package/dist/src/client/healthMonitor/events/eventArgs/healthMonitorUnhealthyEventArgs.js.map +1 -1
  37. package/dist/src/client/healthMonitor/events/transferHealthMonitorEvent.js.map +1 -1
  38. package/dist/src/client/healthMonitor/onlineChecker/nodeOnlineChecker.js.map +1 -1
  39. package/dist/src/client/healthMonitor/onlineChecker/onlineChecker.js.map +1 -1
  40. package/dist/src/client/healthMonitor/onlineChecker/webOnlineChecker.js.map +1 -1
  41. package/dist/src/client/healthMonitor/transferDownloaderHealthMonitor.js.map +1 -1
  42. package/dist/src/client/healthMonitor/transferHealthMonitorBase.js.map +1 -1
  43. package/dist/src/client/healthMonitor/transferUploaderHealthMonitor.js.map +1 -1
  44. package/dist/src/client/loggers/dummyLogger.js.map +1 -1
  45. package/dist/src/client/loggers/logger.js.map +1 -1
  46. package/dist/src/client/loggers/utils/logHealthyStatus.js.map +1 -1
  47. package/dist/src/client/node/nodeFileDetailsProvider.js.map +1 -1
  48. package/dist/src/client/uploader/node/nodeTransferUploader.js.map +1 -1
  49. package/dist/src/client/uploader/transferUploader.js.map +1 -1
  50. package/dist/src/client/uploader/transferUploaderBase.js.map +1 -1
  51. package/dist/src/client/uploader/transferUploaderConfig.js.map +1 -1
  52. package/dist/src/client/uploader/utils/uploaderUtils.js.map +1 -1
  53. package/dist/src/client/uploader/web/webTransferUploader.js.map +1 -1
  54. package/dist/src/downloader/api/fileServerDownloadClient.js.map +1 -1
  55. package/dist/src/downloader/api/node/nodeFileServerDownloadClient.js.map +1 -1
  56. package/dist/src/downloader/chunkDownloader.js.map +1 -1
  57. package/dist/src/downloader/downloadFolderResolver.js.map +1 -1
  58. package/dist/src/downloader/downloadLogger.js.map +1 -1
  59. package/dist/src/downloader/downloadOptions.js.map +1 -1
  60. package/dist/src/downloader/downloadStatus/downloadFileChunkProgress.js.map +1 -1
  61. package/dist/src/downloader/downloadStatus/downloadFileProgress.js.map +1 -1
  62. package/dist/src/downloader/downloadStatus/downloadFilePromise.js.map +1 -1
  63. package/dist/src/downloader/downloadStatus/downloadState.js.map +1 -1
  64. package/dist/src/downloader/downloadTracker.js.map +1 -1
  65. package/dist/src/downloader/dtos/downloadCommand.js.map +1 -1
  66. package/dist/src/downloader/dtos/downloadError.js.map +1 -1
  67. package/dist/src/downloader/dtos/downloadErrorCode.js.map +1 -1
  68. package/dist/src/downloader/dtos/downloadEvent.js.map +1 -1
  69. package/dist/src/downloader/dtos/downloadFileChunkInfo.js.map +1 -1
  70. package/dist/src/downloader/dtos/downloadFileInfo.js.map +1 -1
  71. package/dist/src/downloader/dtos/downloadFilesCommand.js.map +1 -1
  72. package/dist/src/downloader/dtos/downloadInfo.js.map +1 -1
  73. package/dist/src/downloader/dtos/downloadRegistrationMode.js.map +1 -1
  74. package/dist/src/downloader/dtos/downloadTrackerFileInfo.js.map +1 -1
  75. package/dist/src/downloader/dtos/downloadTrackerFileProgressInfo.js.map +1 -1
  76. package/dist/src/downloader/dtos/downloadTrackerProgressInfo.js.map +1 -1
  77. package/dist/src/downloader/dtos/downloadTrackingMetadata.js.map +1 -1
  78. package/dist/src/downloader/dtos/downloaderRestoredState.js.map +1 -1
  79. package/dist/src/downloader/eventArgs/chunkDownloadEventArgs.js.map +1 -1
  80. package/dist/src/downloader/eventArgs/chunkDownloadFailedEventArgs.js.map +1 -1
  81. package/dist/src/downloader/eventArgs/downloadCompletedEventArgs.js.map +1 -1
  82. package/dist/src/downloader/eventArgs/downloadEventArgs.js.map +1 -1
  83. package/dist/src/downloader/eventArgs/downloadMetadataDeterminedEventArgs.js.map +1 -1
  84. package/dist/src/downloader/eventArgs/downloadPauseEventArgs.js.map +1 -1
  85. package/dist/src/downloader/eventArgs/downloadTrackingFailedEventArgs.js.map +1 -1
  86. package/dist/src/downloader/eventArgs/fileDownloadEventArgs.js.map +1 -1
  87. package/dist/src/downloader/eventArgs/fileDownloadFailedEventArgs.js.map +1 -1
  88. package/dist/src/downloader/filesDownloader.js.map +1 -1
  89. package/dist/src/downloader/filesPreparer.js.map +1 -1
  90. package/dist/src/index.js.map +1 -1
  91. package/dist/src/index.node.js.map +1 -1
  92. package/dist/src/index.web.js.map +1 -1
  93. package/dist/src/uploader/api/dtos/handshakeRequest.js.map +1 -1
  94. package/dist/src/uploader/api/dtos/handshakeResponse.js.map +1 -1
  95. package/dist/src/uploader/api/dtos/pingResponse.js.map +1 -1
  96. package/dist/src/uploader/api/dtos/sendChunkRequest.js.map +1 -1
  97. package/dist/src/uploader/api/fileServerUdpClient.js.map +1 -1
  98. package/dist/src/uploader/api/fileServerUploadClient.js.map +1 -1
  99. package/dist/src/uploader/api/node/nodeFileServerUdpClient.js +8 -8
  100. package/dist/src/uploader/api/node/nodeFileServerUdpClient.js.map +1 -1
  101. package/dist/src/uploader/api/node/nodeFileServerUploadClient.js.map +1 -1
  102. package/dist/src/uploader/api/web/utils/axiosIdleTimeoutManager.js.map +1 -1
  103. package/dist/src/uploader/api/web/webFileServerUploadClient.js.map +1 -1
  104. package/dist/src/uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.js.map +1 -1
  105. package/dist/src/uploader/chunkStreamProviderFactory/uploaderChunkStreamProviderFactory.js.map +1 -1
  106. package/dist/src/uploader/chunkStreamProviderFactory/webFileDetailsUploaderChunkStreamProviderFactory.js.map +1 -1
  107. package/dist/src/uploader/chunksIterator/chunksIterator.js.map +1 -1
  108. package/dist/src/uploader/eventArgs/fileChunkUploadCompletedEventArgs.js.map +1 -1
  109. package/dist/src/uploader/eventArgs/fileChunkUploadCompletedPartiallyEventArgs.js.map +1 -1
  110. package/dist/src/uploader/eventArgs/fileChunkUploadEventArgs.js.map +1 -1
  111. package/dist/src/uploader/eventArgs/fileChunkUploadFailedEventArgs.js.map +1 -1
  112. package/dist/src/uploader/eventArgs/fileChunkUploadProgressedEventArgs.js.map +1 -1
  113. package/dist/src/uploader/eventArgs/fileUploadEventArgs.js.map +1 -1
  114. package/dist/src/uploader/eventArgs/fileUploadFailedEventArgs.js.map +1 -1
  115. package/dist/src/uploader/eventArgs/transferMetadataDeterminedEventArgs.js.map +1 -1
  116. package/dist/src/uploader/eventArgs/transferUploadCompletedEventArgs.d.ts +2 -0
  117. package/dist/src/uploader/eventArgs/transferUploadCompletedEventArgs.d.ts.map +1 -1
  118. package/dist/src/uploader/eventArgs/transferUploadCompletedEventArgs.js.map +1 -1
  119. package/dist/src/uploader/eventArgs/transferUploadModeChosenEventArgs.js.map +1 -1
  120. package/dist/src/uploader/eventArgs/transferUploadProgressedEventArgs.js.map +1 -1
  121. package/dist/src/uploader/export/transferUploadExportData.js.map +1 -1
  122. package/dist/src/uploader/export/transferUploadExportState.js.map +1 -1
  123. package/dist/src/uploader/export/transferUploadMetadata.js.map +1 -1
  124. package/dist/src/uploader/optimizer/optimizationValues.js.map +1 -1
  125. package/dist/src/uploader/optimizer/strategies/udpConcurrencyBasedOptimizationStrategy.js.map +1 -1
  126. package/dist/src/uploader/optimizer/strategies/udpSleepBasedOptimizationStrategy.js.map +1 -1
  127. package/dist/src/uploader/optimizer/transferUploadOptimizationStrategy.js.map +1 -1
  128. package/dist/src/uploader/optimizer/transferUploadOptimizer.js.map +1 -1
  129. package/dist/src/uploader/optimizer/uploadOptimizer.js.map +1 -1
  130. package/dist/src/uploader/options/transferUploadAppendInfo.js.map +1 -1
  131. package/dist/src/uploader/options/transferUploadConfig.js.map +1 -1
  132. package/dist/src/uploader/options/transferUploadInfo.js.map +1 -1
  133. package/dist/src/uploader/options/transferUploadInfoBase.js.map +1 -1
  134. package/dist/src/uploader/pauseController.js.map +1 -1
  135. package/dist/src/uploader/state/continuousChunksCalculator.js.map +1 -1
  136. package/dist/src/uploader/state/readonlyTransferUploadStateFile.js.map +1 -1
  137. package/dist/src/uploader/state/readonlyTransferUploadStateFiles.js.map +1 -1
  138. package/dist/src/uploader/state/transferUploadProgressCalculator.js.map +1 -1
  139. package/dist/src/uploader/state/transferUploadState.d.ts.map +1 -1
  140. package/dist/src/uploader/state/transferUploadState.js +7 -1
  141. package/dist/src/uploader/state/transferUploadState.js.map +1 -1
  142. package/dist/src/uploader/state/transferUploadStateFile.js.map +1 -1
  143. package/dist/src/uploader/state/transferUploadStateFiles.js.map +1 -1
  144. package/dist/src/uploader/transferFailureAbortReason.js.map +1 -1
  145. package/dist/src/uploader/transferUpload.js.map +1 -1
  146. package/dist/src/uploader/transferUploadError.js.map +1 -1
  147. package/dist/src/uploader/transferUploadEvent.js.map +1 -1
  148. package/dist/src/utils/api/apiClient.js.map +1 -1
  149. package/dist/src/utils/api/apiClientBase.js.map +1 -1
  150. package/dist/src/utils/api/apiError.js.map +1 -1
  151. package/dist/src/utils/api/apiFilemail449Error.js.map +1 -1
  152. package/dist/src/utils/api/apiFilemailError.js.map +1 -1
  153. package/dist/src/utils/api/dtos/baseResponse.js.map +1 -1
  154. package/dist/src/utils/api/dtos/cancelTransferRequest.js.map +1 -1
  155. package/dist/src/utils/api/dtos/finalizeTransferRequest.js.map +1 -1
  156. package/dist/src/utils/api/dtos/finalizeTransferResponse.js.map +1 -1
  157. package/dist/src/utils/api/dtos/getCompanyResponse.js.map +1 -1
  158. package/dist/src/utils/api/dtos/getCompressedFileMetadataResponse.js.map +1 -1
  159. package/dist/src/utils/api/dtos/getInboxTransfersRequest.js.map +1 -1
  160. package/dist/src/utils/api/dtos/getInboxTransfersResponse.js.map +1 -1
  161. package/dist/src/utils/api/dtos/getRangehashResponse.js.map +1 -1
  162. package/dist/src/utils/api/dtos/getTransferRequest.js.map +1 -1
  163. package/dist/src/utils/api/dtos/getTransferResponse.js.map +1 -1
  164. package/dist/src/utils/api/dtos/initializeTransferRequest.js.map +1 -1
  165. package/dist/src/utils/api/dtos/initializeTransferResponse.js.map +1 -1
  166. package/dist/src/utils/api/dtos/loginRequest.js.map +1 -1
  167. package/dist/src/utils/api/dtos/loginResponse.js.map +1 -1
  168. package/dist/src/utils/api/dtos/registerFileDownloadRequest.js.map +1 -1
  169. package/dist/src/utils/api/dtos/registerTransferDownloadRequest.js.map +1 -1
  170. package/dist/src/utils/api/dtos/resetTransferRequest.js.map +1 -1
  171. package/dist/src/utils/api/dtos/sendFileChunkRequest.js.map +1 -1
  172. package/dist/src/utils/api/dtos/transferCustomFieldDto.js.map +1 -1
  173. package/dist/src/utils/api/dtos/transferFileDto.js.map +1 -1
  174. package/dist/src/utils/api/fileServerClientFactory.js.map +1 -1
  175. package/dist/src/utils/api/node/gotWorkarounds.js.map +1 -1
  176. package/dist/src/utils/api/node/nodeApiClient.js.map +1 -1
  177. package/dist/src/utils/api/node/nodeClientBase.js.map +1 -1
  178. package/dist/src/utils/api/node/nodeFileServerClientFactory.js.map +1 -1
  179. package/dist/src/utils/api/node/nodeFileserverClientBase.js.map +1 -1
  180. package/dist/src/utils/api/urlUtil.js.map +1 -1
  181. package/dist/src/utils/api/web/webApiClient.js.map +1 -1
  182. package/dist/src/utils/api/web/webClientBase.js.map +1 -1
  183. package/dist/src/utils/api/web/webFileServerClientFactory.js.map +1 -1
  184. package/dist/src/utils/api/web/webFileserverClientBase.js.map +1 -1
  185. package/dist/src/utils/concurrencyController/concurrencyController.js.map +1 -1
  186. package/dist/src/utils/concurrencyController/concurrencyReleaser.js.map +1 -1
  187. package/dist/src/utils/concurrencyController/transferConcurrencyController.js.map +1 -1
  188. package/dist/src/utils/crypto/cryptographyProvider.js.map +1 -1
  189. package/dist/src/utils/crypto/node/nodeCryptographyProvider.js.map +1 -1
  190. package/dist/src/utils/crypto/web/webCryptographyProvider.js.map +1 -1
  191. package/dist/src/utils/dateAndTime/simpleDateFormatter.js.map +1 -1
  192. package/dist/src/utils/events/chunkProgressEvent.js.map +1 -1
  193. package/dist/src/utils/events/eventsEngine.js.map +1 -1
  194. package/dist/src/utils/events/node/nodeEventsEngine.js.map +1 -1
  195. package/dist/src/utils/events/web/webEventsEngine.js.map +1 -1
  196. package/dist/src/utils/fileSystem/chunkStreamProvider.js.map +1 -1
  197. package/dist/src/utils/fileSystem/chunkStreamProviderFactory.js.map +1 -1
  198. package/dist/src/utils/fileSystem/fileDetails.js.map +1 -1
  199. package/dist/src/utils/fileSystem/fileSystemService.js.map +1 -1
  200. package/dist/src/utils/fileSystem/fsError.js.map +1 -1
  201. package/dist/src/utils/fileSystem/node/nodeChunkStreamProvider.js.map +1 -1
  202. package/dist/src/utils/fileSystem/node/nodeChunkStreamProviderFactory.js.map +1 -1
  203. package/dist/src/utils/fileSystem/node/nodeFileDetails.js.map +1 -1
  204. package/dist/src/utils/fileSystem/node/nodeFileSystemService.js.map +1 -1
  205. package/dist/src/utils/fileSystem/parsedPath.js.map +1 -1
  206. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamEncrypter.js.map +1 -1
  207. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.js.map +1 -1
  208. package/dist/src/utils/fileSystem/web/webChunkStreamProviderFactory.js.map +1 -1
  209. package/dist/src/utils/fileSystem/web/webFileDetails.js.map +1 -1
  210. package/dist/src/utils/jsonParsing.js.map +1 -1
  211. package/dist/src/utils/logging/logEventPropertyNames.js.map +1 -1
  212. package/dist/src/utils/mergeAbortAndPauseSignals.js.map +1 -1
  213. package/dist/src/utils/networking/throttlingOptions.js.map +1 -1
  214. package/dist/src/utils/promiseAll.js.map +1 -1
  215. package/dist/src/utils/types/transferStatus.js.map +1 -1
  216. package/dist/src/utils/uint8ArrayUtils.js.map +1 -1
  217. package/package.json +79 -79
  218. package/readme.md +18 -18
@@ -1 +1 @@
1
- {"version":3,"file":"nodeFileServerUploadClient.js","sourceRoot":"","sources":["../../../../../src/uploader/api/node/nodeFileServerUploadClient.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"path\";\r\nimport { Readable } from \"stream\";\r\n\r\nimport got, { Got, Response, CancelableRequest } from \"got\";\r\n\r\nimport type { ReadableStream } from \"stream/web\";\r\n\r\nimport NodeFileServerClientBase from \"../../../utils/api/node/nodeFileserverClientBase.js\";\r\n\r\nimport FsError from \"../../../utils/fileSystem/fsError.js\";\r\nimport { retryEconnresetWorkaround } from \"../../../utils/api/node/gotWorkarounds.js\";\r\n\r\nimport type ChunkStreamProvider from \"../../../utils/fileSystem/chunkStreamProvider.js\";\r\nimport type SendFileChunkRequest from \"../../../utils/api/dtos/sendFileChunkRequest.js\";\r\nimport type FileServerUploadClient from \"../fileServerUploadClient.js\";\r\nimport type { PauseSignal } from \"../../pauseController.js\";\r\n\r\n// This should be used as a transient object - a new instance for every chunk\r\nexport default class NodeFileServerUploadClient extends NodeFileServerClientBase implements FileServerUploadClient {\r\n readonly #uploadUrl: string;\r\n readonly #gotInstance: Got;\r\n\r\n constructor(uploadUrl: string, transferId: string, transferKey: string, fileName: string, fileDestinationPath: string, fileTotalSizeInBytes: number, source: string, sourceDetails: string, uploadIdleTimeoutInMs: number, retryLimit: number) {\r\n super();\r\n\r\n this.#uploadUrl = uploadUrl;\r\n\r\n const fullDestinationFileName = path.posix.join(fileDestinationPath, fileName);\r\n\r\n this.#gotInstance = this.createGotInstance(transferId, transferKey, fullDestinationFileName, fileTotalSizeInBytes, source, sourceDetails, uploadIdleTimeoutInMs, retryLimit);\r\n }\r\n\r\n private createGotInstance(transferId: string, transferKey: string, fullDestinationFileName: string, fileTotalSizeInBytes: number, source: string, sourceDetails: string, uploadIdleTimeoutInMs: number, retryLimit: number): Got {\r\n return got.extend({\r\n timeout: {\r\n socket: uploadIdleTimeoutInMs > 0 ? uploadIdleTimeoutInMs : undefined,\r\n },\r\n searchParams: {\r\n transferid: transferId,\r\n transferkey: transferKey,\r\n thefilename: fullDestinationFileName,\r\n totalsize: fileTotalSizeInBytes,\r\n source,\r\n sourcedetails: sourceDetails,\r\n },\r\n retry: {\r\n limit: retryLimit,\r\n methods: [`GET`, `POST`, `PUT`, `PATCH`, `HEAD`, `DELETE`, `OPTIONS`, `TRACE`],\r\n ...retryEconnresetWorkaround,\r\n },\r\n });\r\n }\r\n\r\n async sendFileChunk(request: SendFileChunkRequest, chunkStreamProvider: ChunkStreamProvider, pauseSignal: PauseSignal, abortSignal: AbortSignal): Promise<void> {\r\n let ongoingRequestPromise: CancelableRequest<Response<string>> | null = null;\r\n\r\n const uploadProgressHandler = this.getDataTransferProgressHandler();\r\n\r\n try {\r\n let isRetry = false;\r\n\r\n const gotChunkInstance = this.#gotInstance.extend({\r\n headers: {\r\n 'Transfer-Encoding': `chunked`,\r\n },\r\n hooks: {\r\n beforeRetry: [\r\n requestError => {\r\n isRetry = true;\r\n // eslint-disable-next-line no-param-reassign\r\n requestError.options.body = ``; // clearing the body to avoid `Cannot retry with consumed body stream` error\r\n },\r\n ],\r\n beforeRequest: [\r\n async options => {\r\n /* eslint-disable no-param-reassign */\r\n if (!isRetry)\r\n return;\r\n\r\n const readableStream = await chunkStreamProvider.getChunkReadStream(pauseSignal, abortSignal) as ReadableStream;\r\n options.body = Readable.fromWeb(readableStream);\r\n },\r\n ],\r\n },\r\n });\r\n\r\n const md5checksum = await chunkStreamProvider.getMd5Checksum(`base64`, pauseSignal, abortSignal);\r\n\r\n const readableStream = await chunkStreamProvider.getChunkReadStream(pauseSignal, abortSignal) as ReadableStream;\r\n const body = Readable.fromWeb(readableStream);\r\n\r\n ongoingRequestPromise = gotChunkInstance.post(this.#uploadUrl, {\r\n body,\r\n signal: abortSignal,\r\n searchParams: {\r\n chunkpos: request.chunkStartPosition,\r\n chunksize: request.chunkLengthInBytes,\r\n md5: md5checksum,\r\n },\r\n });\r\n\r\n ongoingRequestPromise.on(`uploadProgress`, uploadProgressHandler);\r\n\r\n await ongoingRequestPromise;\r\n }\r\n catch (error) {\r\n /* eslint-disable no-ex-assign */\r\n if (this.isWrappedCreatingFileReadStreamException(error as Error))\r\n error = new FsError((error as Error).message);\r\n\r\n throw this.createApiError(error, `Error sending file chunk`);\r\n }\r\n finally {\r\n if (!chunkStreamProvider.isReleased)\r\n await chunkStreamProvider.release();\r\n\r\n ongoingRequestPromise?.off(`uploadProgress`, uploadProgressHandler); // There is a bug in GOT that it fires this event once after the got promise was canceled https://github.com/sindresorhus/got/issues/2084\r\n }\r\n }\r\n\r\n private isWrappedCreatingFileReadStreamException(error: Error): boolean {\r\n return error.message === `CreatingFileReadStreamException`;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"nodeFileServerUploadClient.js","sourceRoot":"","sources":["../../../../../src/uploader/api/node/nodeFileServerUploadClient.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"path\";\nimport { Readable } from \"stream\";\n\nimport got, { Got, Response, CancelableRequest } from \"got\";\n\nimport type { ReadableStream } from \"stream/web\";\n\nimport NodeFileServerClientBase from \"../../../utils/api/node/nodeFileserverClientBase.js\";\n\nimport FsError from \"../../../utils/fileSystem/fsError.js\";\nimport { retryEconnresetWorkaround } from \"../../../utils/api/node/gotWorkarounds.js\";\n\nimport type ChunkStreamProvider from \"../../../utils/fileSystem/chunkStreamProvider.js\";\nimport type SendFileChunkRequest from \"../../../utils/api/dtos/sendFileChunkRequest.js\";\nimport type FileServerUploadClient from \"../fileServerUploadClient.js\";\nimport type { PauseSignal } from \"../../pauseController.js\";\n\n// This should be used as a transient object - a new instance for every chunk\nexport default class NodeFileServerUploadClient extends NodeFileServerClientBase implements FileServerUploadClient {\n readonly #uploadUrl: string;\n readonly #gotInstance: Got;\n\n constructor(uploadUrl: string, transferId: string, transferKey: string, fileName: string, fileDestinationPath: string, fileTotalSizeInBytes: number, source: string, sourceDetails: string, uploadIdleTimeoutInMs: number, retryLimit: number) {\n super();\n\n this.#uploadUrl = uploadUrl;\n\n const fullDestinationFileName = path.posix.join(fileDestinationPath, fileName);\n\n this.#gotInstance = this.createGotInstance(transferId, transferKey, fullDestinationFileName, fileTotalSizeInBytes, source, sourceDetails, uploadIdleTimeoutInMs, retryLimit);\n }\n\n private createGotInstance(transferId: string, transferKey: string, fullDestinationFileName: string, fileTotalSizeInBytes: number, source: string, sourceDetails: string, uploadIdleTimeoutInMs: number, retryLimit: number): Got {\n return got.extend({\n timeout: {\n socket: uploadIdleTimeoutInMs > 0 ? uploadIdleTimeoutInMs : undefined,\n },\n searchParams: {\n transferid: transferId,\n transferkey: transferKey,\n thefilename: fullDestinationFileName,\n totalsize: fileTotalSizeInBytes,\n source,\n sourcedetails: sourceDetails,\n },\n retry: {\n limit: retryLimit,\n methods: [`GET`, `POST`, `PUT`, `PATCH`, `HEAD`, `DELETE`, `OPTIONS`, `TRACE`],\n ...retryEconnresetWorkaround,\n },\n });\n }\n\n async sendFileChunk(request: SendFileChunkRequest, chunkStreamProvider: ChunkStreamProvider, pauseSignal: PauseSignal, abortSignal: AbortSignal): Promise<void> {\n let ongoingRequestPromise: CancelableRequest<Response<string>> | null = null;\n\n const uploadProgressHandler = this.getDataTransferProgressHandler();\n\n try {\n let isRetry = false;\n\n const gotChunkInstance = this.#gotInstance.extend({\n headers: {\n 'Transfer-Encoding': `chunked`,\n },\n hooks: {\n beforeRetry: [\n requestError => {\n isRetry = true;\n // eslint-disable-next-line no-param-reassign\n requestError.options.body = ``; // clearing the body to avoid `Cannot retry with consumed body stream` error\n },\n ],\n beforeRequest: [\n async options => {\n /* eslint-disable no-param-reassign */\n if (!isRetry)\n return;\n\n const readableStream = await chunkStreamProvider.getChunkReadStream(pauseSignal, abortSignal) as ReadableStream;\n options.body = Readable.fromWeb(readableStream);\n },\n ],\n },\n });\n\n const md5checksum = await chunkStreamProvider.getMd5Checksum(`base64`, pauseSignal, abortSignal);\n\n const readableStream = await chunkStreamProvider.getChunkReadStream(pauseSignal, abortSignal) as ReadableStream;\n const body = Readable.fromWeb(readableStream);\n\n ongoingRequestPromise = gotChunkInstance.post(this.#uploadUrl, {\n body,\n signal: abortSignal,\n searchParams: {\n chunkpos: request.chunkStartPosition,\n chunksize: request.chunkLengthInBytes,\n md5: md5checksum,\n },\n });\n\n ongoingRequestPromise.on(`uploadProgress`, uploadProgressHandler);\n\n await ongoingRequestPromise;\n }\n catch (error) {\n /* eslint-disable no-ex-assign */\n if (this.isWrappedCreatingFileReadStreamException(error as Error))\n error = new FsError((error as Error).message);\n\n throw this.createApiError(error, `Error sending file chunk`);\n }\n finally {\n if (!chunkStreamProvider.isReleased)\n await chunkStreamProvider.release();\n\n ongoingRequestPromise?.off(`uploadProgress`, uploadProgressHandler); // There is a bug in GOT that it fires this event once after the got promise was canceled https://github.com/sindresorhus/got/issues/2084\n }\n }\n\n private isWrappedCreatingFileReadStreamException(error: Error): boolean {\n return error.message === `CreatingFileReadStreamException`;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"axiosIdleTimeoutManager.js","sourceRoot":"","sources":["../../../../../../src/uploader/api/web/utils/axiosIdleTimeoutManager.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,uBAAuB;IACxC,sBAAsB,CAAS;IAC/B,YAAY,CAAc;IAE1B,eAAe,CAA+B;IAE9C,YAAY,qBAA6B,EAAE,WAAwB;QAC/D,IAAI,CAAC,sBAAsB,GAAG,qBAAqB,CAAC;QACpD,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IACpC,CAAC;IAED,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,uBAAuB;QACnB,IAAI,IAAI,CAAC,eAAe;YACpB,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC;QAE3C,MAAM,qBAAqB,GAAG,IAAI,eAAe,EAAE,CAAC;QACpD,IAAI,SAAS,GAAyC,IAAI,CAAC;QAE3D,MAAM,gBAAgB,GAAG,GAAG,EAAE;YAC1B,IAAI,SAAS;gBACT,YAAY,CAAC,SAAS,CAAC,CAAC;YAE5B,IAAI,IAAI,CAAC,sBAAsB,IAAI,CAAC;gBAChC,OAAO;YAEX,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBACxB,qBAAqB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,sBAAsB,IAAI,CAAC,CAAC,CAAC;YAC7F,CAAC,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpC,CAAC,CAAC;QAEF,MAAM,kBAAkB,GAAG,IAAI,eAAe,EAAE,CAAC;QAEjD,MAAM,UAAU,GAAG,GAAG,EAAE;YACpB,kBAAkB,CAAC,KAAK,EAAE,CAAC;YAC3B,eAAe,EAAE,CAAC;QACtB,CAAC,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACxD,qBAAqB,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAEnE,MAAM,eAAe,GAAG,GAAG,EAAE;YACzB,IAAI,SAAS,EAAE,CAAC;gBACZ,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,SAAS,GAAG,IAAI,CAAC;YACrB,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAC3D,qBAAqB,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC1E,CAAC,CAAC;QAEF,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO;YACzB,UAAU,EAAE,CAAC;QAEjB,IAAI,CAAC,eAAe,GAAG;YACnB,YAAY,EAAE,kBAAkB,CAAC,MAAM;YACvC,iBAAiB,EAAE,qBAAqB,CAAC,MAAM;YAC/C,gBAAgB;YAChB,eAAe;SAClB,CAAC;QAEF,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;CACJ","sourcesContent":["export type AxiosIdleTimeout = { mergedSignal: AbortSignal; idleTimeoutSignal: AbortSignal; resetIdleTimeout: () => void; stopIdleTimeout: () => void; }\r\n\r\nexport default class AxiosIdleTimeoutManager {\r\n #uploadIdleTimeoutInMs: number;\r\n #abortSignal: AbortSignal;\r\n\r\n #currentTimeout: AxiosIdleTimeout | undefined;\r\n\r\n constructor(uploadIdleTimeoutInMs: number, abortSignal: AbortSignal) {\r\n this.#uploadIdleTimeoutInMs = uploadIdleTimeoutInMs;\r\n this.#abortSignal = abortSignal;\r\n }\r\n\r\n get currentTimeout(): AxiosIdleTimeout | undefined {\r\n return this.#currentTimeout;\r\n }\r\n\r\n configureNewIdleTimeout(): AxiosIdleTimeout {\r\n if (this.#currentTimeout)\r\n this.#currentTimeout.stopIdleTimeout();\r\n\r\n const idleTimeoutController = new AbortController();\r\n let idleTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n const resetIdleTimeout = () => {\r\n if (idleTimer)\r\n clearTimeout(idleTimer);\r\n\r\n if (this.#uploadIdleTimeoutInMs <= 0)\r\n return;\r\n\r\n idleTimer = setTimeout(() => {\r\n idleTimeoutController.abort(new Error(`TIMEOUT: idle ${this.#uploadIdleTimeoutInMs}ms`));\r\n }, this.#uploadIdleTimeoutInMs);\r\n };\r\n\r\n const combinedController = new AbortController();\r\n\r\n const onAnyAbort = () => {\r\n combinedController.abort();\r\n stopIdleTimeout();\r\n };\r\n\r\n this.#abortSignal.addEventListener(`abort`, onAnyAbort);\r\n idleTimeoutController.signal.addEventListener(`abort`, onAnyAbort);\r\n\r\n const stopIdleTimeout = () => {\r\n if (idleTimer) {\r\n clearTimeout(idleTimer);\r\n idleTimer = null;\r\n }\r\n\r\n this.#abortSignal.removeEventListener(`abort`, onAnyAbort);\r\n idleTimeoutController.signal.removeEventListener(`abort`, onAnyAbort);\r\n };\r\n\r\n if (this.#abortSignal.aborted)\r\n onAnyAbort();\r\n\r\n this.#currentTimeout = {\r\n mergedSignal: combinedController.signal,\r\n idleTimeoutSignal: idleTimeoutController.signal,\r\n resetIdleTimeout,\r\n stopIdleTimeout,\r\n };\r\n\r\n return this.#currentTimeout;\r\n }\r\n}"]}
1
+ {"version":3,"file":"axiosIdleTimeoutManager.js","sourceRoot":"","sources":["../../../../../../src/uploader/api/web/utils/axiosIdleTimeoutManager.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,uBAAuB;IACxC,sBAAsB,CAAS;IAC/B,YAAY,CAAc;IAE1B,eAAe,CAA+B;IAE9C,YAAY,qBAA6B,EAAE,WAAwB;QAC/D,IAAI,CAAC,sBAAsB,GAAG,qBAAqB,CAAC;QACpD,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IACpC,CAAC;IAED,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,uBAAuB;QACnB,IAAI,IAAI,CAAC,eAAe;YACpB,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC;QAE3C,MAAM,qBAAqB,GAAG,IAAI,eAAe,EAAE,CAAC;QACpD,IAAI,SAAS,GAAyC,IAAI,CAAC;QAE3D,MAAM,gBAAgB,GAAG,GAAG,EAAE;YAC1B,IAAI,SAAS;gBACT,YAAY,CAAC,SAAS,CAAC,CAAC;YAE5B,IAAI,IAAI,CAAC,sBAAsB,IAAI,CAAC;gBAChC,OAAO;YAEX,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBACxB,qBAAqB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,sBAAsB,IAAI,CAAC,CAAC,CAAC;YAC7F,CAAC,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpC,CAAC,CAAC;QAEF,MAAM,kBAAkB,GAAG,IAAI,eAAe,EAAE,CAAC;QAEjD,MAAM,UAAU,GAAG,GAAG,EAAE;YACpB,kBAAkB,CAAC,KAAK,EAAE,CAAC;YAC3B,eAAe,EAAE,CAAC;QACtB,CAAC,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACxD,qBAAqB,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAEnE,MAAM,eAAe,GAAG,GAAG,EAAE;YACzB,IAAI,SAAS,EAAE,CAAC;gBACZ,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,SAAS,GAAG,IAAI,CAAC;YACrB,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAC3D,qBAAqB,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC1E,CAAC,CAAC;QAEF,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO;YACzB,UAAU,EAAE,CAAC;QAEjB,IAAI,CAAC,eAAe,GAAG;YACnB,YAAY,EAAE,kBAAkB,CAAC,MAAM;YACvC,iBAAiB,EAAE,qBAAqB,CAAC,MAAM;YAC/C,gBAAgB;YAChB,eAAe;SAClB,CAAC;QAEF,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;CACJ","sourcesContent":["export type AxiosIdleTimeout = { mergedSignal: AbortSignal; idleTimeoutSignal: AbortSignal; resetIdleTimeout: () => void; stopIdleTimeout: () => void; }\n\nexport default class AxiosIdleTimeoutManager {\n #uploadIdleTimeoutInMs: number;\n #abortSignal: AbortSignal;\n\n #currentTimeout: AxiosIdleTimeout | undefined;\n\n constructor(uploadIdleTimeoutInMs: number, abortSignal: AbortSignal) {\n this.#uploadIdleTimeoutInMs = uploadIdleTimeoutInMs;\n this.#abortSignal = abortSignal;\n }\n\n get currentTimeout(): AxiosIdleTimeout | undefined {\n return this.#currentTimeout;\n }\n\n configureNewIdleTimeout(): AxiosIdleTimeout {\n if (this.#currentTimeout)\n this.#currentTimeout.stopIdleTimeout();\n\n const idleTimeoutController = new AbortController();\n let idleTimer: ReturnType<typeof setTimeout> | null = null;\n\n const resetIdleTimeout = () => {\n if (idleTimer)\n clearTimeout(idleTimer);\n\n if (this.#uploadIdleTimeoutInMs <= 0)\n return;\n\n idleTimer = setTimeout(() => {\n idleTimeoutController.abort(new Error(`TIMEOUT: idle ${this.#uploadIdleTimeoutInMs}ms`));\n }, this.#uploadIdleTimeoutInMs);\n };\n\n const combinedController = new AbortController();\n\n const onAnyAbort = () => {\n combinedController.abort();\n stopIdleTimeout();\n };\n\n this.#abortSignal.addEventListener(`abort`, onAnyAbort);\n idleTimeoutController.signal.addEventListener(`abort`, onAnyAbort);\n\n const stopIdleTimeout = () => {\n if (idleTimer) {\n clearTimeout(idleTimer);\n idleTimer = null;\n }\n\n this.#abortSignal.removeEventListener(`abort`, onAnyAbort);\n idleTimeoutController.signal.removeEventListener(`abort`, onAnyAbort);\n };\n\n if (this.#abortSignal.aborted)\n onAnyAbort();\n\n this.#currentTimeout = {\n mergedSignal: combinedController.signal,\n idleTimeoutSignal: idleTimeoutController.signal,\n resetIdleTimeout,\n stopIdleTimeout,\n };\n\n return this.#currentTimeout;\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"webFileServerUploadClient.js","sourceRoot":"","sources":["../../../../../src/uploader/api/web/webFileServerUploadClient.ts"],"names":[],"mappings":"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","sourcesContent":["import axios, { AxiosInstance } from \"axios\";\r\nimport axiosRetry, { isNetworkOrIdempotentRequestError } from \"axios-retry\";\r\n\r\nimport WebFileServerClientBase from \"../../../utils/api/web/webFileserverClientBase.js\";\r\n\r\nimport FsError from \"../../../utils/fileSystem/fsError.js\";\r\nimport AxiosIdleTimeoutManager from \"./utils/axiosIdleTimeoutManager.js\";\r\n\r\nimport type ChunkStreamProvider from \"../../../utils/fileSystem/chunkStreamProvider.js\";\r\nimport type SendFileChunkRequest from \"../../../utils/api/dtos/sendFileChunkRequest.js\";\r\nimport type FileServerUploadClient from \"../fileServerUploadClient.js\";\r\nimport type { PauseSignal } from \"../../pauseController.js\";\r\n\r\n// This should be used as a transient object - a new instance for every chunk\r\nexport default class WebFileServerUploadClient extends WebFileServerClientBase implements FileServerUploadClient {\r\n readonly #uploadUrl: string;\r\n readonly #retryLimit: number;\r\n readonly #uploadIdleTimeoutInMs: number;\r\n\r\n readonly #axiosInstance: AxiosInstance;\r\n\r\n constructor(uploadUrl: string, transferId: string, transferKey: string, fileName: string, fileDestinationPath: string, fileTotalSizeInBytes: number, source: string, sourceDetails: string, uploadIdleTimeoutInMs: number, retryLimit: number) {\r\n super();\r\n\r\n this.#uploadUrl = uploadUrl;\r\n this.#retryLimit = retryLimit;\r\n this.#uploadIdleTimeoutInMs = uploadIdleTimeoutInMs;\r\n\r\n const fullDestinationFileName = this.joinDestinationPathAndFileName(fileDestinationPath, fileName);\r\n\r\n this.#axiosInstance = this.createAxiosInstance(transferId, transferKey, fullDestinationFileName, fileTotalSizeInBytes, source, sourceDetails);\r\n }\r\n\r\n private joinDestinationPathAndFileName(fileDestinationPath: string, fileName: string) {\r\n if (fileDestinationPath.endsWith(`/`))\r\n return `${fileDestinationPath}${fileName}`;\r\n\r\n return `${fileDestinationPath}/${fileName}`;\r\n }\r\n\r\n private createAxiosInstance(transferId: string, transferKey: string, fullDestinationFileName: string, fileTotalSizeInBytes: number, source: string, sourceDetails: string): AxiosInstance {\r\n return axios.create({\r\n params: {\r\n transferid: transferId,\r\n transferkey: transferKey,\r\n thefilename: fullDestinationFileName,\r\n totalsize: fileTotalSizeInBytes,\r\n source,\r\n sourcedetails: sourceDetails,\r\n },\r\n headers: {\r\n 'Content-Type': `application/octet-stream`,\r\n },\r\n });\r\n }\r\n\r\n async sendFileChunk(request: SendFileChunkRequest, chunkStreamProvider: ChunkStreamProvider, pauseSignal: PauseSignal, abortSignal: AbortSignal): Promise<void> {\r\n let isRequestFinished = false;\r\n\r\n const idleTimeoutManager = new AxiosIdleTimeoutManager(this.#uploadIdleTimeoutInMs, abortSignal);\r\n\r\n try {\r\n const md5checksum = await chunkStreamProvider.getMd5Checksum(`base64`, pauseSignal, abortSignal);\r\n const chunkBlob = await chunkStreamProvider.getChunkBlob();\r\n\r\n const idleTimeout = idleTimeoutManager.configureNewIdleTimeout();\r\n const uploadProgressHandler = this.getDataTransferProgressHandler();\r\n\r\n this.configureRetryMechanism(chunkStreamProvider, idleTimeoutManager);\r\n\r\n idleTimeoutManager.currentTimeout?.resetIdleTimeout();\r\n\r\n await this.#axiosInstance.post(this.#uploadUrl, chunkBlob, {\r\n maxBodyLength: Infinity,\r\n maxContentLength: Infinity,\r\n signal: idleTimeout.mergedSignal,\r\n onUploadProgress: progressEvent => {\r\n if (isRequestFinished)\r\n return; // Axios still sends events after abort signal was fired\r\n\r\n idleTimeoutManager.currentTimeout?.resetIdleTimeout();\r\n uploadProgressHandler(progressEvent);\r\n },\r\n params: {\r\n chunkpos: request.chunkStartPosition,\r\n chunksize: request.chunkLengthInBytes,\r\n md5: md5checksum,\r\n },\r\n });\r\n }\r\n catch (error) {\r\n /* eslint-disable no-ex-assign */\r\n if (this.isWrappedCreatingFileReadStreamException(error as Error))\r\n error = new FsError((error as Error).message);\r\n\r\n throw this.createApiError(error, `Error sending file chunk`, idleTimeoutManager.currentTimeout?.idleTimeoutSignal);\r\n }\r\n finally {\r\n isRequestFinished = true;\r\n\r\n idleTimeoutManager.currentTimeout?.stopIdleTimeout();\r\n\r\n if (!chunkStreamProvider.isReleased)\r\n await chunkStreamProvider.release();\r\n }\r\n }\r\n\r\n /* eslint-disable no-param-reassign */\r\n private configureRetryMechanism(chunkStreamProvider: ChunkStreamProvider, idleTimeoutManager: AxiosIdleTimeoutManager) {\r\n axiosRetry(this.#axiosInstance, {\r\n retries: this.#retryLimit,\r\n retryDelay: retryCount => retryCount * 1000,\r\n shouldResetTimeout: true,\r\n retryCondition: e => {\r\n const isIdleTimeouted = e.code === `ERR_CANCELED` && Boolean(idleTimeoutManager.currentTimeout?.idleTimeoutSignal.aborted);\r\n const isRetryablePost = e.config?.method === `post`;\r\n return isNetworkOrIdempotentRequestError(e) || isRetryablePost || isIdleTimeouted;\r\n },\r\n onRetry: async (_retryCount, _error, requestConfig) => {\r\n const newIdleTimeout = idleTimeoutManager.configureNewIdleTimeout();\r\n\r\n requestConfig.signal = newIdleTimeout.mergedSignal;\r\n requestConfig.data = await chunkStreamProvider.getChunkBlob();\r\n },\r\n });\r\n }\r\n\r\n private isWrappedCreatingFileReadStreamException(error: Error): boolean {\r\n return error.message === `CreatingFileReadStreamException`;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webFileServerUploadClient.js","sourceRoot":"","sources":["../../../../../src/uploader/api/web/webFileServerUploadClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,UAAU,EAAE,EAAE,iCAAiC,EAAE,MAAM,aAAa,CAAC;AAE5E,OAAO,uBAAuB,MAAM,mDAAmD,CAAC;AAExF,OAAO,OAAO,MAAM,sCAAsC,CAAC;AAC3D,OAAO,uBAAuB,MAAM,oCAAoC,CAAC;AAOzE,6EAA6E;AAC7E,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,uBAAuB;IACjE,UAAU,CAAS;IACnB,WAAW,CAAS;IACpB,sBAAsB,CAAS;IAE/B,cAAc,CAAgB;IAEvC,YAAY,SAAiB,EAAE,UAAkB,EAAE,WAAmB,EAAE,QAAgB,EAAE,mBAA2B,EAAE,oBAA4B,EAAE,MAAc,EAAE,aAAqB,EAAE,qBAA6B,EAAE,UAAkB;QACzO,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,sBAAsB,GAAG,qBAAqB,CAAC;QAEpD,MAAM,uBAAuB,GAAG,IAAI,CAAC,8BAA8B,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;QAEnG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,WAAW,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IAClJ,CAAC;IAEO,8BAA8B,CAAC,mBAA2B,EAAE,QAAgB;QAChF,IAAI,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC;YACjC,OAAO,GAAG,mBAAmB,GAAG,QAAQ,EAAE,CAAC;QAE/C,OAAO,GAAG,mBAAmB,IAAI,QAAQ,EAAE,CAAC;IAChD,CAAC;IAEO,mBAAmB,CAAC,UAAkB,EAAE,WAAmB,EAAE,uBAA+B,EAAE,oBAA4B,EAAE,MAAc,EAAE,aAAqB;QACrK,OAAO,KAAK,CAAC,MAAM,CAAC;YAChB,MAAM,EAAE;gBACJ,UAAU,EAAE,UAAU;gBACtB,WAAW,EAAE,WAAW;gBACxB,WAAW,EAAE,uBAAuB;gBACpC,SAAS,EAAE,oBAAoB;gBAC/B,MAAM;gBACN,aAAa,EAAE,aAAa;aAC/B;YACD,OAAO,EAAE;gBACL,cAAc,EAAE,0BAA0B;aAC7C;SACJ,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAA6B,EAAE,mBAAwC,EAAE,WAAwB,EAAE,WAAwB;QAC3I,IAAI,iBAAiB,GAAG,KAAK,CAAC;QAE9B,MAAM,kBAAkB,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,sBAAsB,EAAE,WAAW,CAAC,CAAC;QAEjG,IAAI,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,mBAAmB,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;YACjG,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,YAAY,EAAE,CAAC;YAE3D,MAAM,WAAW,GAAG,kBAAkB,CAAC,uBAAuB,EAAE,CAAC;YACjE,MAAM,qBAAqB,GAAG,IAAI,CAAC,8BAA8B,EAAE,CAAC;YAEpE,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;YAEtE,kBAAkB,CAAC,cAAc,EAAE,gBAAgB,EAAE,CAAC;YAEtD,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE;gBACvD,aAAa,EAAE,QAAQ;gBACvB,gBAAgB,EAAE,QAAQ;gBAC1B,MAAM,EAAE,WAAW,CAAC,YAAY;gBAChC,gBAAgB,EAAE,aAAa,CAAC,EAAE;oBAC9B,IAAI,iBAAiB;wBACjB,OAAO,CAAC,wDAAwD;oBAEpE,kBAAkB,CAAC,cAAc,EAAE,gBAAgB,EAAE,CAAC;oBACtD,qBAAqB,CAAC,aAAa,CAAC,CAAC;gBACzC,CAAC;gBACD,MAAM,EAAE;oBACJ,QAAQ,EAAE,OAAO,CAAC,kBAAkB;oBACpC,SAAS,EAAE,OAAO,CAAC,kBAAkB;oBACrC,GAAG,EAAE,WAAW;iBACnB;aACJ,CAAC,CAAC;QACP,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACX,iCAAiC;YACjC,IAAI,IAAI,CAAC,wCAAwC,CAAC,KAAc,CAAC;gBAC7D,KAAK,GAAG,IAAI,OAAO,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC;YAElD,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,0BAA0B,EAAE,kBAAkB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;QACvH,CAAC;gBACO,CAAC;YACL,iBAAiB,GAAG,IAAI,CAAC;YAEzB,kBAAkB,CAAC,cAAc,EAAE,eAAe,EAAE,CAAC;YAErD,IAAI,CAAC,mBAAmB,CAAC,UAAU;gBAC/B,MAAM,mBAAmB,CAAC,OAAO,EAAE,CAAC;QAC5C,CAAC;IACL,CAAC;IAED,sCAAsC;IAC9B,uBAAuB,CAAC,mBAAwC,EAAE,kBAA2C;QACjH,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE;YAC5B,OAAO,EAAE,IAAI,CAAC,WAAW;YACzB,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,GAAG,IAAI;YAC3C,kBAAkB,EAAE,IAAI;YACxB,cAAc,EAAE,CAAC,CAAC,EAAE;gBAChB,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,KAAK,cAAc,IAAI,OAAO,CAAC,kBAAkB,CAAC,cAAc,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBAC3H,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;gBACpD,OAAO,iCAAiC,CAAC,CAAC,CAAC,IAAI,eAAe,IAAI,eAAe,CAAC;YACtF,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE;gBAClD,MAAM,cAAc,GAAG,kBAAkB,CAAC,uBAAuB,EAAE,CAAC;gBAEpE,aAAa,CAAC,MAAM,GAAG,cAAc,CAAC,YAAY,CAAC;gBACnD,aAAa,CAAC,IAAI,GAAG,MAAM,mBAAmB,CAAC,YAAY,EAAE,CAAC;YAClE,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;IAEO,wCAAwC,CAAC,KAAY;QACzD,OAAO,KAAK,CAAC,OAAO,KAAK,iCAAiC,CAAC;IAC/D,CAAC;CACJ","sourcesContent":["import axios, { AxiosInstance } from \"axios\";\nimport axiosRetry, { isNetworkOrIdempotentRequestError } from \"axios-retry\";\n\nimport WebFileServerClientBase from \"../../../utils/api/web/webFileserverClientBase.js\";\n\nimport FsError from \"../../../utils/fileSystem/fsError.js\";\nimport AxiosIdleTimeoutManager from \"./utils/axiosIdleTimeoutManager.js\";\n\nimport type ChunkStreamProvider from \"../../../utils/fileSystem/chunkStreamProvider.js\";\nimport type SendFileChunkRequest from \"../../../utils/api/dtos/sendFileChunkRequest.js\";\nimport type FileServerUploadClient from \"../fileServerUploadClient.js\";\nimport type { PauseSignal } from \"../../pauseController.js\";\n\n// This should be used as a transient object - a new instance for every chunk\nexport default class WebFileServerUploadClient extends WebFileServerClientBase implements FileServerUploadClient {\n readonly #uploadUrl: string;\n readonly #retryLimit: number;\n readonly #uploadIdleTimeoutInMs: number;\n\n readonly #axiosInstance: AxiosInstance;\n\n constructor(uploadUrl: string, transferId: string, transferKey: string, fileName: string, fileDestinationPath: string, fileTotalSizeInBytes: number, source: string, sourceDetails: string, uploadIdleTimeoutInMs: number, retryLimit: number) {\n super();\n\n this.#uploadUrl = uploadUrl;\n this.#retryLimit = retryLimit;\n this.#uploadIdleTimeoutInMs = uploadIdleTimeoutInMs;\n\n const fullDestinationFileName = this.joinDestinationPathAndFileName(fileDestinationPath, fileName);\n\n this.#axiosInstance = this.createAxiosInstance(transferId, transferKey, fullDestinationFileName, fileTotalSizeInBytes, source, sourceDetails);\n }\n\n private joinDestinationPathAndFileName(fileDestinationPath: string, fileName: string) {\n if (fileDestinationPath.endsWith(`/`))\n return `${fileDestinationPath}${fileName}`;\n\n return `${fileDestinationPath}/${fileName}`;\n }\n\n private createAxiosInstance(transferId: string, transferKey: string, fullDestinationFileName: string, fileTotalSizeInBytes: number, source: string, sourceDetails: string): AxiosInstance {\n return axios.create({\n params: {\n transferid: transferId,\n transferkey: transferKey,\n thefilename: fullDestinationFileName,\n totalsize: fileTotalSizeInBytes,\n source,\n sourcedetails: sourceDetails,\n },\n headers: {\n 'Content-Type': `application/octet-stream`,\n },\n });\n }\n\n async sendFileChunk(request: SendFileChunkRequest, chunkStreamProvider: ChunkStreamProvider, pauseSignal: PauseSignal, abortSignal: AbortSignal): Promise<void> {\n let isRequestFinished = false;\n\n const idleTimeoutManager = new AxiosIdleTimeoutManager(this.#uploadIdleTimeoutInMs, abortSignal);\n\n try {\n const md5checksum = await chunkStreamProvider.getMd5Checksum(`base64`, pauseSignal, abortSignal);\n const chunkBlob = await chunkStreamProvider.getChunkBlob();\n\n const idleTimeout = idleTimeoutManager.configureNewIdleTimeout();\n const uploadProgressHandler = this.getDataTransferProgressHandler();\n\n this.configureRetryMechanism(chunkStreamProvider, idleTimeoutManager);\n\n idleTimeoutManager.currentTimeout?.resetIdleTimeout();\n\n await this.#axiosInstance.post(this.#uploadUrl, chunkBlob, {\n maxBodyLength: Infinity,\n maxContentLength: Infinity,\n signal: idleTimeout.mergedSignal,\n onUploadProgress: progressEvent => {\n if (isRequestFinished)\n return; // Axios still sends events after abort signal was fired\n\n idleTimeoutManager.currentTimeout?.resetIdleTimeout();\n uploadProgressHandler(progressEvent);\n },\n params: {\n chunkpos: request.chunkStartPosition,\n chunksize: request.chunkLengthInBytes,\n md5: md5checksum,\n },\n });\n }\n catch (error) {\n /* eslint-disable no-ex-assign */\n if (this.isWrappedCreatingFileReadStreamException(error as Error))\n error = new FsError((error as Error).message);\n\n throw this.createApiError(error, `Error sending file chunk`, idleTimeoutManager.currentTimeout?.idleTimeoutSignal);\n }\n finally {\n isRequestFinished = true;\n\n idleTimeoutManager.currentTimeout?.stopIdleTimeout();\n\n if (!chunkStreamProvider.isReleased)\n await chunkStreamProvider.release();\n }\n }\n\n /* eslint-disable no-param-reassign */\n private configureRetryMechanism(chunkStreamProvider: ChunkStreamProvider, idleTimeoutManager: AxiosIdleTimeoutManager) {\n axiosRetry(this.#axiosInstance, {\n retries: this.#retryLimit,\n retryDelay: retryCount => retryCount * 1000,\n shouldResetTimeout: true,\n retryCondition: e => {\n const isIdleTimeouted = e.code === `ERR_CANCELED` && Boolean(idleTimeoutManager.currentTimeout?.idleTimeoutSignal.aborted);\n const isRetryablePost = e.config?.method === `post`;\n return isNetworkOrIdempotentRequestError(e) || isRetryablePost || isIdleTimeouted;\n },\n onRetry: async (_retryCount, _error, requestConfig) => {\n const newIdleTimeout = idleTimeoutManager.configureNewIdleTimeout();\n\n requestConfig.signal = newIdleTimeout.mergedSignal;\n requestConfig.data = await chunkStreamProvider.getChunkBlob();\n },\n });\n }\n\n private isWrappedCreatingFileReadStreamException(error: Error): boolean {\n return error.message === `CreatingFileReadStreamException`;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"nodeFileDetailsUploaderChunkStreamProviderFactory.js","sourceRoot":"","sources":["../../../../src/uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,MAAM,wDAAwD,CAAC;AAO7F,MAAM,iDAAiD;IACnD,yBAAyB,CAAC,YAA6B,EAAE,kBAA0B,EAAE,gBAAwB,EAAE,cAA6D;QACxK,OAAO,IAAI,uBAAuB,CAAC,YAAY,CAAC,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;IACxH,CAAC;CACJ;AAED,eAAe,iDAAiD,CAAC","sourcesContent":["import NodeChunkStreamProvider from \"../../utils/fileSystem/node/nodeChunkStreamProvider.js\";\r\n\r\nimport type ChunkStreamProvider from \"../../utils/fileSystem/chunkStreamProvider.js\";\r\nimport type UploaderChunkStreamProviderFactory from \"./uploaderChunkStreamProviderFactory.js\";\r\nimport type NodeFileDetails from \"../../utils/fileSystem/node/nodeFileDetails.js\";\r\nimport type { ChunkStreamProviderEncryptionData } from \"../../utils/fileSystem/chunkStreamProvider.js\";\r\n\r\nclass NodeFileDetailsUploaderChunkStreamProviderFactory implements UploaderChunkStreamProviderFactory<NodeFileDetails> {\r\n createChunkStreamProvider(chunkDetails: NodeFileDetails, chunkStartPosition: number, chunkSizeInBytes: number, encryptionData: ChunkStreamProviderEncryptionData | undefined): ChunkStreamProvider {\r\n return new NodeChunkStreamProvider(chunkDetails.fileFullPath, chunkStartPosition, chunkSizeInBytes, encryptionData);\r\n }\r\n}\r\n\r\nexport default NodeFileDetailsUploaderChunkStreamProviderFactory;"]}
1
+ {"version":3,"file":"nodeFileDetailsUploaderChunkStreamProviderFactory.js","sourceRoot":"","sources":["../../../../src/uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,MAAM,wDAAwD,CAAC;AAO7F,MAAM,iDAAiD;IACnD,yBAAyB,CAAC,YAA6B,EAAE,kBAA0B,EAAE,gBAAwB,EAAE,cAA6D;QACxK,OAAO,IAAI,uBAAuB,CAAC,YAAY,CAAC,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;IACxH,CAAC;CACJ;AAED,eAAe,iDAAiD,CAAC","sourcesContent":["import NodeChunkStreamProvider from \"../../utils/fileSystem/node/nodeChunkStreamProvider.js\";\n\nimport type ChunkStreamProvider from \"../../utils/fileSystem/chunkStreamProvider.js\";\nimport type UploaderChunkStreamProviderFactory from \"./uploaderChunkStreamProviderFactory.js\";\nimport type NodeFileDetails from \"../../utils/fileSystem/node/nodeFileDetails.js\";\nimport type { ChunkStreamProviderEncryptionData } from \"../../utils/fileSystem/chunkStreamProvider.js\";\n\nclass NodeFileDetailsUploaderChunkStreamProviderFactory implements UploaderChunkStreamProviderFactory<NodeFileDetails> {\n createChunkStreamProvider(chunkDetails: NodeFileDetails, chunkStartPosition: number, chunkSizeInBytes: number, encryptionData: ChunkStreamProviderEncryptionData | undefined): ChunkStreamProvider {\n return new NodeChunkStreamProvider(chunkDetails.fileFullPath, chunkStartPosition, chunkSizeInBytes, encryptionData);\n }\n}\n\nexport default NodeFileDetailsUploaderChunkStreamProviderFactory;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"uploaderChunkStreamProviderFactory.js","sourceRoot":"","sources":["../../../../src/uploader/chunkStreamProviderFactory/uploaderChunkStreamProviderFactory.ts"],"names":[],"mappings":"","sourcesContent":["import type ChunkStreamProvider from \"../../utils/fileSystem/chunkStreamProvider.js\";\r\nimport type { ChunkStreamProviderEncryptionData } from \"../../utils/fileSystem/chunkStreamProvider.js\";\r\n\r\ninterface UploaderChunkStreamProviderFactory<T> {\r\n createChunkStreamProvider(fileDetails: T, chunkStartPosition: number, chunkSizeInBytes: number, encryptionData: ChunkStreamProviderEncryptionData | undefined): ChunkStreamProvider;\r\n}\r\n\r\nexport default UploaderChunkStreamProviderFactory;"]}
1
+ {"version":3,"file":"uploaderChunkStreamProviderFactory.js","sourceRoot":"","sources":["../../../../src/uploader/chunkStreamProviderFactory/uploaderChunkStreamProviderFactory.ts"],"names":[],"mappings":"","sourcesContent":["import type ChunkStreamProvider from \"../../utils/fileSystem/chunkStreamProvider.js\";\nimport type { ChunkStreamProviderEncryptionData } from \"../../utils/fileSystem/chunkStreamProvider.js\";\n\ninterface UploaderChunkStreamProviderFactory<T> {\n createChunkStreamProvider(fileDetails: T, chunkStartPosition: number, chunkSizeInBytes: number, encryptionData: ChunkStreamProviderEncryptionData | undefined): ChunkStreamProvider;\n}\n\nexport default UploaderChunkStreamProviderFactory;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"webFileDetailsUploaderChunkStreamProviderFactory.js","sourceRoot":"","sources":["../../../../src/uploader/chunkStreamProviderFactory/webFileDetailsUploaderChunkStreamProviderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,MAAM,0EAA0E,CAAC;AAO9G,MAAM,gDAAgD;IAClD,yBAAyB,CAAC,YAA4B,EAAE,kBAA0B,EAAE,gBAAwB,EAAE,cAA6D;QACvK,OAAO,IAAI,sBAAsB,CAAC,YAAY,CAAC,IAAI,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;IAC/G,CAAC;CACJ;AAED,eAAe,gDAAgD,CAAC","sourcesContent":["import WebChunkStreamProvider from \"../../utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.js\";\r\n\r\nimport type ChunkStreamProvider from \"../../utils/fileSystem/chunkStreamProvider.js\";\r\nimport type UploaderChunkStreamProviderFactory from \"./uploaderChunkStreamProviderFactory.js\";\r\nimport type { ChunkStreamProviderEncryptionData } from \"../../utils/fileSystem/chunkStreamProvider.js\";\r\nimport type WebFileDetails from \"../../utils/fileSystem/web/webFileDetails.js\";\r\n\r\nclass WebFileDetailsUploaderChunkStreamProviderFactory implements UploaderChunkStreamProviderFactory<WebFileDetails> {\r\n createChunkStreamProvider(chunkDetails: WebFileDetails, chunkStartPosition: number, chunkSizeInBytes: number, encryptionData: ChunkStreamProviderEncryptionData | undefined): ChunkStreamProvider {\r\n return new WebChunkStreamProvider(chunkDetails.file, chunkStartPosition, chunkSizeInBytes, encryptionData);\r\n }\r\n}\r\n\r\nexport default WebFileDetailsUploaderChunkStreamProviderFactory;"]}
1
+ {"version":3,"file":"webFileDetailsUploaderChunkStreamProviderFactory.js","sourceRoot":"","sources":["../../../../src/uploader/chunkStreamProviderFactory/webFileDetailsUploaderChunkStreamProviderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,MAAM,0EAA0E,CAAC;AAO9G,MAAM,gDAAgD;IAClD,yBAAyB,CAAC,YAA4B,EAAE,kBAA0B,EAAE,gBAAwB,EAAE,cAA6D;QACvK,OAAO,IAAI,sBAAsB,CAAC,YAAY,CAAC,IAAI,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;IAC/G,CAAC;CACJ;AAED,eAAe,gDAAgD,CAAC","sourcesContent":["import WebChunkStreamProvider from \"../../utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.js\";\n\nimport type ChunkStreamProvider from \"../../utils/fileSystem/chunkStreamProvider.js\";\nimport type UploaderChunkStreamProviderFactory from \"./uploaderChunkStreamProviderFactory.js\";\nimport type { ChunkStreamProviderEncryptionData } from \"../../utils/fileSystem/chunkStreamProvider.js\";\nimport type WebFileDetails from \"../../utils/fileSystem/web/webFileDetails.js\";\n\nclass WebFileDetailsUploaderChunkStreamProviderFactory implements UploaderChunkStreamProviderFactory<WebFileDetails> {\n createChunkStreamProvider(chunkDetails: WebFileDetails, chunkStartPosition: number, chunkSizeInBytes: number, encryptionData: ChunkStreamProviderEncryptionData | undefined): ChunkStreamProvider {\n return new WebChunkStreamProvider(chunkDetails.file, chunkStartPosition, chunkSizeInBytes, encryptionData);\n }\n}\n\nexport default WebFileDetailsUploaderChunkStreamProviderFactory;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"chunksIterator.js","sourceRoot":"","sources":["../../../../src/uploader/chunksIterator/chunksIterator.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ContinuousChunk } from \"../state/continuousChunksCalculator.js\";\r\n\r\nexport default class ChunksIterator {\r\n #alreadySentChunks: readonly Readonly<ContinuousChunk>[];\r\n #alreadySentChunksByStartPosition: ReadonlyMap<number, number>;\r\n #fileSizeInBytes: number;\r\n #currentChunkSizeProvider: { readonly currentChunkSize: number };\r\n\r\n #nextChunkStartPosition = 0;\r\n\r\n #isValueAlreadyReturnedForZeroBytesFile = false;\r\n\r\n constructor(alreadySentChunks: readonly Readonly<ContinuousChunk>[], fileSizeInBytes: number, currentChunkSizeProvider: { readonly currentChunkSize: number }) {\r\n this.#alreadySentChunks = this.sanitizeChunks(alreadySentChunks);\r\n this.#alreadySentChunksByStartPosition = this.createChunksByStartPositionMap(this.#alreadySentChunks);\r\n this.#fileSizeInBytes = fileSizeInBytes;\r\n this.#currentChunkSizeProvider = currentChunkSizeProvider;\r\n }\r\n\r\n // This is an anti corruption layer that can be removed after everybody migrates to desktop > 4.8.2\r\n private sanitizeChunks(alreadySentChunks: readonly Readonly<ContinuousChunk>[]): readonly Readonly<ContinuousChunk>[] {\r\n return this.removeZeroByteChunks(alreadySentChunks);\r\n }\r\n\r\n private removeZeroByteChunks(alreadySentChunks: readonly Readonly<ContinuousChunk>[]): readonly Readonly<ContinuousChunk>[] {\r\n return alreadySentChunks.filter(c => c.sizeInBytes > 0);\r\n }\r\n\r\n private createChunksByStartPositionMap(alreadySentChunks: readonly Readonly<ContinuousChunk>[]): ReadonlyMap<number, number> {\r\n return new Map(alreadySentChunks.map(chunk => [chunk.startPosition, chunk.sizeInBytes]));\r\n }\r\n\r\n getChunksIterator(): IterableIterator<ContinuousChunk> {\r\n return {\r\n [Symbol.iterator](): IterableIterator<ContinuousChunk> {\r\n return this;\r\n },\r\n next: (): IteratorResult<ContinuousChunk> => {\r\n if (this.isZeroBytesFilesCase())\r\n return this.getNextIteratorValueForZeroBytesFile();\r\n\r\n return this.getNextIteratorValue();\r\n },\r\n };\r\n }\r\n\r\n private isZeroBytesFilesCase(): boolean {\r\n return this.#fileSizeInBytes === 0;\r\n }\r\n\r\n private getNextIteratorValueForZeroBytesFile(): IteratorResult<ContinuousChunk> {\r\n if (this.#isValueAlreadyReturnedForZeroBytesFile)\r\n return { value: null, done: true };\r\n\r\n this.#isValueAlreadyReturnedForZeroBytesFile = true;\r\n\r\n return { value: { startPosition: 0, sizeInBytes: 0 }, done: false };\r\n }\r\n\r\n private getNextIteratorValue(): IteratorResult<ContinuousChunk> {\r\n const startPosition = this.getChunkStartPosition(this.#nextChunkStartPosition);\r\n\r\n if (startPosition === this.#fileSizeInBytes)\r\n return { value: null, done: true };\r\n\r\n const sizeInBytes = this.getChunkSizeInBytes(startPosition);\r\n\r\n this.#nextChunkStartPosition = startPosition + sizeInBytes;\r\n\r\n return { value: { startPosition, sizeInBytes }, done: false };\r\n }\r\n\r\n private getChunkStartPosition(nextChunkStartPosition: number): number {\r\n let chunkStartPosition = nextChunkStartPosition;\r\n\r\n while (true) {\r\n const alreadySentChunkSize = this.#alreadySentChunksByStartPosition.get(chunkStartPosition);\r\n\r\n if (!alreadySentChunkSize)\r\n return chunkStartPosition;\r\n\r\n chunkStartPosition += alreadySentChunkSize;\r\n }\r\n }\r\n\r\n private getChunkSizeInBytes(newChunkStartPosition: number) {\r\n const currentMaxChunkSize = this.#currentChunkSizeProvider.currentChunkSize;\r\n const newChunkEndPosition = newChunkStartPosition + currentMaxChunkSize - 1;\r\n\r\n const alreadySentChunkStartingInTheMiddle = this.#alreadySentChunks.find(c => newChunkStartPosition < c.startPosition && c.startPosition <= newChunkEndPosition);\r\n\r\n if (alreadySentChunkStartingInTheMiddle)\r\n return alreadySentChunkStartingInTheMiddle.startPosition - newChunkStartPosition;\r\n\r\n const chunkEndsBeyondFile = newChunkEndPosition >= this.#fileSizeInBytes;\r\n\r\n if (chunkEndsBeyondFile)\r\n return this.#fileSizeInBytes - newChunkStartPosition;\r\n\r\n return currentMaxChunkSize;\r\n }\r\n}"]}
1
+ {"version":3,"file":"chunksIterator.js","sourceRoot":"","sources":["../../../../src/uploader/chunksIterator/chunksIterator.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,cAAc;IAC/B,kBAAkB,CAAuC;IACzD,iCAAiC,CAA8B;IAC/D,gBAAgB,CAAS;IACzB,yBAAyB,CAAwC;IAEjE,uBAAuB,GAAG,CAAC,CAAC;IAE5B,uCAAuC,GAAG,KAAK,CAAC;IAEhD,YAAY,iBAAuD,EAAE,eAAuB,EAAE,wBAA+D;QACzJ,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACjE,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACtG,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,IAAI,CAAC,yBAAyB,GAAG,wBAAwB,CAAC;IAC9D,CAAC;IAED,mGAAmG;IAC3F,cAAc,CAAC,iBAAuD;QAC1E,OAAO,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;IACxD,CAAC;IAEO,oBAAoB,CAAC,iBAAuD;QAChF,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IAC5D,CAAC;IAEO,8BAA8B,CAAC,iBAAuD;QAC1F,OAAO,IAAI,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,iBAAiB;QACb,OAAO;YACH,CAAC,MAAM,CAAC,QAAQ,CAAC;gBACb,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,IAAI,EAAE,GAAoC,EAAE;gBACxC,IAAI,IAAI,CAAC,oBAAoB,EAAE;oBAC3B,OAAO,IAAI,CAAC,oCAAoC,EAAE,CAAC;gBAEvD,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACvC,CAAC;SACJ,CAAC;IACN,CAAC;IAEO,oBAAoB;QACxB,OAAO,IAAI,CAAC,gBAAgB,KAAK,CAAC,CAAC;IACvC,CAAC;IAEO,oCAAoC;QACxC,IAAI,IAAI,CAAC,uCAAuC;YAC5C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAEvC,IAAI,CAAC,uCAAuC,GAAG,IAAI,CAAC;QAEpD,OAAO,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACxE,CAAC;IAEO,oBAAoB;QACxB,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAE/E,IAAI,aAAa,KAAK,IAAI,CAAC,gBAAgB;YACvC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAEvC,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;QAE5D,IAAI,CAAC,uBAAuB,GAAG,aAAa,GAAG,WAAW,CAAC;QAE3D,OAAO,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAClE,CAAC;IAEO,qBAAqB,CAAC,sBAA8B;QACxD,IAAI,kBAAkB,GAAG,sBAAsB,CAAC;QAEhD,OAAO,IAAI,EAAE,CAAC;YACV,MAAM,oBAAoB,GAAG,IAAI,CAAC,iCAAiC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAE5F,IAAI,CAAC,oBAAoB;gBACrB,OAAO,kBAAkB,CAAC;YAE9B,kBAAkB,IAAI,oBAAoB,CAAC;QAC/C,CAAC;IACL,CAAC;IAEO,mBAAmB,CAAC,qBAA6B;QACrD,MAAM,mBAAmB,GAAG,IAAI,CAAC,yBAAyB,CAAC,gBAAgB,CAAC;QAC5E,MAAM,mBAAmB,GAAG,qBAAqB,GAAG,mBAAmB,GAAG,CAAC,CAAC;QAE5E,MAAM,mCAAmC,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,qBAAqB,GAAG,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,aAAa,IAAI,mBAAmB,CAAC,CAAC;QAEjK,IAAI,mCAAmC;YACnC,OAAO,mCAAmC,CAAC,aAAa,GAAG,qBAAqB,CAAC;QAErF,MAAM,mBAAmB,GAAG,mBAAmB,IAAI,IAAI,CAAC,gBAAgB,CAAC;QAEzE,IAAI,mBAAmB;YACnB,OAAO,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC;QAEzD,OAAO,mBAAmB,CAAC;IAC/B,CAAC;CACJ","sourcesContent":["import type { ContinuousChunk } from \"../state/continuousChunksCalculator.js\";\n\nexport default class ChunksIterator {\n #alreadySentChunks: readonly Readonly<ContinuousChunk>[];\n #alreadySentChunksByStartPosition: ReadonlyMap<number, number>;\n #fileSizeInBytes: number;\n #currentChunkSizeProvider: { readonly currentChunkSize: number };\n\n #nextChunkStartPosition = 0;\n\n #isValueAlreadyReturnedForZeroBytesFile = false;\n\n constructor(alreadySentChunks: readonly Readonly<ContinuousChunk>[], fileSizeInBytes: number, currentChunkSizeProvider: { readonly currentChunkSize: number }) {\n this.#alreadySentChunks = this.sanitizeChunks(alreadySentChunks);\n this.#alreadySentChunksByStartPosition = this.createChunksByStartPositionMap(this.#alreadySentChunks);\n this.#fileSizeInBytes = fileSizeInBytes;\n this.#currentChunkSizeProvider = currentChunkSizeProvider;\n }\n\n // This is an anti corruption layer that can be removed after everybody migrates to desktop > 4.8.2\n private sanitizeChunks(alreadySentChunks: readonly Readonly<ContinuousChunk>[]): readonly Readonly<ContinuousChunk>[] {\n return this.removeZeroByteChunks(alreadySentChunks);\n }\n\n private removeZeroByteChunks(alreadySentChunks: readonly Readonly<ContinuousChunk>[]): readonly Readonly<ContinuousChunk>[] {\n return alreadySentChunks.filter(c => c.sizeInBytes > 0);\n }\n\n private createChunksByStartPositionMap(alreadySentChunks: readonly Readonly<ContinuousChunk>[]): ReadonlyMap<number, number> {\n return new Map(alreadySentChunks.map(chunk => [chunk.startPosition, chunk.sizeInBytes]));\n }\n\n getChunksIterator(): IterableIterator<ContinuousChunk> {\n return {\n [Symbol.iterator](): IterableIterator<ContinuousChunk> {\n return this;\n },\n next: (): IteratorResult<ContinuousChunk> => {\n if (this.isZeroBytesFilesCase())\n return this.getNextIteratorValueForZeroBytesFile();\n\n return this.getNextIteratorValue();\n },\n };\n }\n\n private isZeroBytesFilesCase(): boolean {\n return this.#fileSizeInBytes === 0;\n }\n\n private getNextIteratorValueForZeroBytesFile(): IteratorResult<ContinuousChunk> {\n if (this.#isValueAlreadyReturnedForZeroBytesFile)\n return { value: null, done: true };\n\n this.#isValueAlreadyReturnedForZeroBytesFile = true;\n\n return { value: { startPosition: 0, sizeInBytes: 0 }, done: false };\n }\n\n private getNextIteratorValue(): IteratorResult<ContinuousChunk> {\n const startPosition = this.getChunkStartPosition(this.#nextChunkStartPosition);\n\n if (startPosition === this.#fileSizeInBytes)\n return { value: null, done: true };\n\n const sizeInBytes = this.getChunkSizeInBytes(startPosition);\n\n this.#nextChunkStartPosition = startPosition + sizeInBytes;\n\n return { value: { startPosition, sizeInBytes }, done: false };\n }\n\n private getChunkStartPosition(nextChunkStartPosition: number): number {\n let chunkStartPosition = nextChunkStartPosition;\n\n while (true) {\n const alreadySentChunkSize = this.#alreadySentChunksByStartPosition.get(chunkStartPosition);\n\n if (!alreadySentChunkSize)\n return chunkStartPosition;\n\n chunkStartPosition += alreadySentChunkSize;\n }\n }\n\n private getChunkSizeInBytes(newChunkStartPosition: number) {\n const currentMaxChunkSize = this.#currentChunkSizeProvider.currentChunkSize;\n const newChunkEndPosition = newChunkStartPosition + currentMaxChunkSize - 1;\n\n const alreadySentChunkStartingInTheMiddle = this.#alreadySentChunks.find(c => newChunkStartPosition < c.startPosition && c.startPosition <= newChunkEndPosition);\n\n if (alreadySentChunkStartingInTheMiddle)\n return alreadySentChunkStartingInTheMiddle.startPosition - newChunkStartPosition;\n\n const chunkEndsBeyondFile = newChunkEndPosition >= this.#fileSizeInBytes;\n\n if (chunkEndsBeyondFile)\n return this.#fileSizeInBytes - newChunkStartPosition;\n\n return currentMaxChunkSize;\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fileChunkUploadCompletedEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/fileChunkUploadCompletedEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["import type ReadonlyTransferUploadStateFile from \"../state/readonlyTransferUploadStateFile.js\";\r\n\r\ninterface FileChunkUploadCompletedEventArgs {\r\n fileStatus: ReadonlyTransferUploadStateFile,\r\n chunkStartPosition: number,\r\n chunkSizeInBytes: number,\r\n latencyInMsIfUdp: number | undefined,\r\n}\r\n\r\nexport default FileChunkUploadCompletedEventArgs;"]}
1
+ {"version":3,"file":"fileChunkUploadCompletedEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/fileChunkUploadCompletedEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["import type ReadonlyTransferUploadStateFile from \"../state/readonlyTransferUploadStateFile.js\";\n\ninterface FileChunkUploadCompletedEventArgs {\n fileStatus: ReadonlyTransferUploadStateFile,\n chunkStartPosition: number,\n chunkSizeInBytes: number,\n latencyInMsIfUdp: number | undefined,\n}\n\nexport default FileChunkUploadCompletedEventArgs;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fileChunkUploadCompletedPartiallyEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/fileChunkUploadCompletedPartiallyEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["import type FileChunkUploadCompletedEventArgs from \"./fileChunkUploadCompletedEventArgs.js\";\r\n\r\ninterface FileChunkUploadCompletedPartiallyEventArgs extends FileChunkUploadCompletedEventArgs {\r\n isPauseRequested: boolean,\r\n uploadedBytesCount: number,\r\n}\r\n\r\nexport default FileChunkUploadCompletedPartiallyEventArgs;"]}
1
+ {"version":3,"file":"fileChunkUploadCompletedPartiallyEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/fileChunkUploadCompletedPartiallyEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["import type FileChunkUploadCompletedEventArgs from \"./fileChunkUploadCompletedEventArgs.js\";\n\ninterface FileChunkUploadCompletedPartiallyEventArgs extends FileChunkUploadCompletedEventArgs {\n isPauseRequested: boolean,\n uploadedBytesCount: number,\n}\n\nexport default FileChunkUploadCompletedPartiallyEventArgs;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fileChunkUploadEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/fileChunkUploadEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["import type ReadonlyTransferUploadStateFile from \"../state/readonlyTransferUploadStateFile.js\";\r\n\r\ninterface FileChunkUploadEventArgs {\r\n fileStatus: ReadonlyTransferUploadStateFile,\r\n chunkStartPosition: number,\r\n chunkSizeInBytes: number,\r\n}\r\n\r\nexport default FileChunkUploadEventArgs;"]}
1
+ {"version":3,"file":"fileChunkUploadEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/fileChunkUploadEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["import type ReadonlyTransferUploadStateFile from \"../state/readonlyTransferUploadStateFile.js\";\n\ninterface FileChunkUploadEventArgs {\n fileStatus: ReadonlyTransferUploadStateFile,\n chunkStartPosition: number,\n chunkSizeInBytes: number,\n}\n\nexport default FileChunkUploadEventArgs;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fileChunkUploadFailedEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/fileChunkUploadFailedEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["import type FileChunkUploadEventArgs from \"./fileChunkUploadEventArgs.js\";\r\n\r\ninterface FileChunkUploadFailedEventArgs extends FileChunkUploadEventArgs {\r\n reason: string,\r\n error: Error,\r\n}\r\n\r\nexport default FileChunkUploadFailedEventArgs;"]}
1
+ {"version":3,"file":"fileChunkUploadFailedEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/fileChunkUploadFailedEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["import type FileChunkUploadEventArgs from \"./fileChunkUploadEventArgs.js\";\n\ninterface FileChunkUploadFailedEventArgs extends FileChunkUploadEventArgs {\n reason: string,\n error: Error,\n}\n\nexport default FileChunkUploadFailedEventArgs;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fileChunkUploadProgressedEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/fileChunkUploadProgressedEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["import type ReadonlyTransferUploadStateFile from \"../state/readonlyTransferUploadStateFile.js\";\r\n\r\ninterface FileChunkUploadProgressedEventArgs {\r\n fileStatus: ReadonlyTransferUploadStateFile,\r\n chunkStartPosition: number,\r\n chunkSizeInBytes: number,\r\n transferredBytesSinceLastEvent: number,\r\n}\r\n\r\nexport default FileChunkUploadProgressedEventArgs;"]}
1
+ {"version":3,"file":"fileChunkUploadProgressedEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/fileChunkUploadProgressedEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["import type ReadonlyTransferUploadStateFile from \"../state/readonlyTransferUploadStateFile.js\";\n\ninterface FileChunkUploadProgressedEventArgs {\n fileStatus: ReadonlyTransferUploadStateFile,\n chunkStartPosition: number,\n chunkSizeInBytes: number,\n transferredBytesSinceLastEvent: number,\n}\n\nexport default FileChunkUploadProgressedEventArgs;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fileUploadEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/fileUploadEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["import type ReadonlyTransferUploadStateFile from \"../state/readonlyTransferUploadStateFile.js\";\r\n\r\ninterface FileUploadEventArgs {\r\n fileStatus: ReadonlyTransferUploadStateFile\r\n}\r\n\r\nexport default FileUploadEventArgs;"]}
1
+ {"version":3,"file":"fileUploadEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/fileUploadEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["import type ReadonlyTransferUploadStateFile from \"../state/readonlyTransferUploadStateFile.js\";\n\ninterface FileUploadEventArgs {\n fileStatus: ReadonlyTransferUploadStateFile\n}\n\nexport default FileUploadEventArgs;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fileUploadFailedEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/fileUploadFailedEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["import type FileUploadEventArgs from \"./fileUploadEventArgs.js\";\r\n\r\ninterface FileUploadFailedEventArgs extends FileUploadEventArgs {\r\n reason: string | null\r\n}\r\n\r\nexport default FileUploadFailedEventArgs;"]}
1
+ {"version":3,"file":"fileUploadFailedEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/fileUploadFailedEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["import type FileUploadEventArgs from \"./fileUploadEventArgs.js\";\n\ninterface FileUploadFailedEventArgs extends FileUploadEventArgs {\n reason: string | null\n}\n\nexport default FileUploadFailedEventArgs;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferMetadataDeterminedEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/transferMetadataDeterminedEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["interface TransferMetadataDeterminedEventArgs {\r\n transferId: string,\r\n fileServerUrl: string,\r\n region?: string,\r\n}\r\n\r\nexport default TransferMetadataDeterminedEventArgs;"]}
1
+ {"version":3,"file":"transferMetadataDeterminedEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/transferMetadataDeterminedEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["interface TransferMetadataDeterminedEventArgs {\n transferId: string,\n fileServerUrl: string,\n region?: string,\n}\n\nexport default TransferMetadataDeterminedEventArgs;"]}
@@ -2,6 +2,8 @@ interface TransferUploadCompletedEventArgs {
2
2
  transferId: string;
3
3
  transferKey: string;
4
4
  transferDownloadUrl: string;
5
+ fileServerUrl: string;
6
+ region?: string;
5
7
  }
6
8
  export default TransferUploadCompletedEventArgs;
7
9
  //# sourceMappingURL=transferUploadCompletedEventArgs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploadCompletedEventArgs.d.ts","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/transferUploadCompletedEventArgs.ts"],"names":[],"mappings":"AAAA,UAAU,gCAAgC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAA;CAC9B;AAED,eAAe,gCAAgC,CAAC"}
1
+ {"version":3,"file":"transferUploadCompletedEventArgs.d.ts","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/transferUploadCompletedEventArgs.ts"],"names":[],"mappings":"AAAA,UAAU,gCAAgC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAe,gCAAgC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploadCompletedEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/transferUploadCompletedEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["interface TransferUploadCompletedEventArgs {\r\n transferId: string,\r\n transferKey: string,\r\n transferDownloadUrl: string\r\n}\r\n\r\nexport default TransferUploadCompletedEventArgs;"]}
1
+ {"version":3,"file":"transferUploadCompletedEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/transferUploadCompletedEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["interface TransferUploadCompletedEventArgs {\n transferId: string,\n transferKey: string,\n transferDownloadUrl: string,\n fileServerUrl: string,\n region?: string,\n}\n\nexport default TransferUploadCompletedEventArgs;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploadModeChosenEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/transferUploadModeChosenEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["interface TransferUploadModeChosenEventArgs {\r\n isUdpMode: boolean,\r\n latency?: number,\r\n error?: Error,\r\n}\r\n\r\nexport default TransferUploadModeChosenEventArgs;"]}
1
+ {"version":3,"file":"transferUploadModeChosenEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/transferUploadModeChosenEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["interface TransferUploadModeChosenEventArgs {\n isUdpMode: boolean,\n latency?: number,\n error?: Error,\n}\n\nexport default TransferUploadModeChosenEventArgs;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploadProgressedEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/transferUploadProgressedEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["interface TransferUploadProgressedEventArgs {\r\n uploadedBytesTotalCount: number;\r\n progressInPercentage: number;\r\n remainingSeconds: number;\r\n averageSpeedInBytesPerSecond: number;\r\n currentSpeedInBytesPerSecond: number;\r\n}\r\n\r\nexport default TransferUploadProgressedEventArgs;"]}
1
+ {"version":3,"file":"transferUploadProgressedEventArgs.js","sourceRoot":"","sources":["../../../../src/uploader/eventArgs/transferUploadProgressedEventArgs.ts"],"names":[],"mappings":"","sourcesContent":["interface TransferUploadProgressedEventArgs {\n uploadedBytesTotalCount: number;\n progressInPercentage: number;\n remainingSeconds: number;\n averageSpeedInBytesPerSecond: number;\n currentSpeedInBytesPerSecond: number;\n}\n\nexport default TransferUploadProgressedEventArgs;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploadExportData.js","sourceRoot":"","sources":["../../../../src/uploader/export/transferUploadExportData.ts"],"names":[],"mappings":"","sourcesContent":["import type FileDetails from \"../../utils/fileSystem/fileDetails.js\";\r\nimport type { TransferUploadAppendInfo } from \"../options/transferUploadAppendInfo.js\";\r\nimport type TransferUploadInfo from \"../options/transferUploadInfo.js\";\r\nimport type TransferUploadExportState from \"./transferUploadExportState.js\";\r\nimport type TransferUploadMetadata from \"./transferUploadMetadata.js\";\r\n\r\nexport interface TransferUploadExportData<T extends FileDetails> {\r\n transferMetadata?: TransferUploadExportDataMetadata,\r\n info: Readonly<TransferUploadInfo<T> | TransferUploadAppendInfo<T>>,\r\n state: TransferUploadExportState,\r\n}\r\n\r\nexport type TransferUploadExportDataMetadata = Readonly<Omit<TransferUploadMetadata, `encryptionData`> & {\r\n encryptionData?: {\r\n ivHex: string,\r\n keyHex: string,\r\n },\r\n}>;"]}
1
+ {"version":3,"file":"transferUploadExportData.js","sourceRoot":"","sources":["../../../../src/uploader/export/transferUploadExportData.ts"],"names":[],"mappings":"","sourcesContent":["import type FileDetails from \"../../utils/fileSystem/fileDetails.js\";\nimport type { TransferUploadAppendInfo } from \"../options/transferUploadAppendInfo.js\";\nimport type TransferUploadInfo from \"../options/transferUploadInfo.js\";\nimport type TransferUploadExportState from \"./transferUploadExportState.js\";\nimport type TransferUploadMetadata from \"./transferUploadMetadata.js\";\n\nexport interface TransferUploadExportData<T extends FileDetails> {\n transferMetadata?: TransferUploadExportDataMetadata,\n info: Readonly<TransferUploadInfo<T> | TransferUploadAppendInfo<T>>,\n state: TransferUploadExportState,\n}\n\nexport type TransferUploadExportDataMetadata = Readonly<Omit<TransferUploadMetadata, `encryptionData`> & {\n encryptionData?: {\n ivHex: string,\n keyHex: string,\n },\n}>;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploadExportState.js","sourceRoot":"","sources":["../../../../src/uploader/export/transferUploadExportState.ts"],"names":[],"mappings":"","sourcesContent":["import type { ContinuousChunksCalculatorState } from \"../state/continuousChunksCalculator.js\";\r\n\r\ntype TransferUploadExportState = ContinuousChunksCalculatorState;\r\n\r\nexport default TransferUploadExportState;\r\n"]}
1
+ {"version":3,"file":"transferUploadExportState.js","sourceRoot":"","sources":["../../../../src/uploader/export/transferUploadExportState.ts"],"names":[],"mappings":"","sourcesContent":["import type { ContinuousChunksCalculatorState } from \"../state/continuousChunksCalculator.js\";\n\ntype TransferUploadExportState = ContinuousChunksCalculatorState;\n\nexport default TransferUploadExportState;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploadMetadata.js","sourceRoot":"","sources":["../../../../src/uploader/export/transferUploadMetadata.ts"],"names":[],"mappings":"","sourcesContent":["interface TransferUploadMetadata {\r\n transferId: string,\r\n transferKey: string,\r\n transferFileServerUrl: string,\r\n transferRegion?: string,\r\n encryptionData?: {\r\n iv: Uint8Array,\r\n key: Uint8Array,\r\n },\r\n udpData?: {\r\n ip: string,\r\n port: number,\r\n threshold: number,\r\n handshakeData?: {\r\n sessionGuid: string,\r\n aesKey: Uint8Array,\r\n }\r\n }\r\n}\r\n\r\nexport default TransferUploadMetadata;"]}
1
+ {"version":3,"file":"transferUploadMetadata.js","sourceRoot":"","sources":["../../../../src/uploader/export/transferUploadMetadata.ts"],"names":[],"mappings":"","sourcesContent":["interface TransferUploadMetadata {\n transferId: string,\n transferKey: string,\n transferFileServerUrl: string,\n transferRegion?: string,\n encryptionData?: {\n iv: Uint8Array,\n key: Uint8Array,\n },\n udpData?: {\n ip: string,\n port: number,\n threshold: number,\n handshakeData?: {\n sessionGuid: string,\n aesKey: Uint8Array,\n }\n }\n}\n\nexport default TransferUploadMetadata;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"optimizationValues.js","sourceRoot":"","sources":["../../../../src/uploader/optimizer/optimizationValues.ts"],"names":[],"mappings":"","sourcesContent":["type OptimizationValues = {\r\n maxParallelChunksAmount: number,\r\n chunkSize: number,\r\n optimizationIntervalInMs: number,\r\n minTimeBetweenChunksStartInMs: number,\r\n requestTimeoutInMs: number,\r\n};\r\n\r\nexport default OptimizationValues;"]}
1
+ {"version":3,"file":"optimizationValues.js","sourceRoot":"","sources":["../../../../src/uploader/optimizer/optimizationValues.ts"],"names":[],"mappings":"","sourcesContent":["type OptimizationValues = {\n maxParallelChunksAmount: number,\n chunkSize: number,\n optimizationIntervalInMs: number,\n minTimeBetweenChunksStartInMs: number,\n requestTimeoutInMs: number,\n};\n\nexport default OptimizationValues;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"udpConcurrencyBasedOptimizationStrategy.js","sourceRoot":"","sources":["../../../../../src/uploader/optimizer/strategies/udpConcurrencyBasedOptimizationStrategy.ts"],"names":[],"mappings":"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","sourcesContent":["import type OptimizationValues from \"../optimizationValues.js\";\r\nimport type TransferUploadOptimizationStrategy from \"../transferUploadOptimizationStrategy.js\";\r\n\r\nexport default class UdpConcurrencyBasedOptimizationStrategy implements TransferUploadOptimizationStrategy {\r\n #values = {\r\n const: {\r\n sleep: 0.5,\r\n },\r\n step: {\r\n chunksCount: 4,\r\n chunkSize: 12244,\r\n optimizationInterval: 50,\r\n },\r\n min: {\r\n chunksCount: 4,\r\n chunkSize: 15424,\r\n optimizationInterval: 50,\r\n },\r\n max: {\r\n chunksCount: 125,\r\n chunkSize: 64400,\r\n optimizationInterval: 500,\r\n },\r\n };\r\n\r\n msgSizeErrorHandler(currentOptimizedValues: OptimizationValues): { chunkSize: number } {\r\n const chunkSize = currentOptimizedValues.chunkSize - 1000;\r\n\r\n this.#values.max.chunkSize = chunkSize;\r\n\r\n return { chunkSize };\r\n }\r\n\r\n noBufsErrorHandler(currentOptimizedValues: OptimizationValues): { maxParallelChunksAmount: number, minTimeBetweenChunksStartInMs: number } {\r\n return {\r\n maxParallelChunksAmount: this.#values.min.chunksCount,\r\n minTimeBetweenChunksStartInMs: currentOptimizedValues.minTimeBetweenChunksStartInMs,\r\n };\r\n }\r\n\r\n getInitialValues(serverLatencyInMs: number): OptimizationValues {\r\n return {\r\n chunkSize: this.#values.max.chunkSize,\r\n minTimeBetweenChunksStartInMs: this.#values.const.sleep,\r\n optimizationIntervalInMs: (this.#values.max.optimizationInterval + this.#values.min.optimizationInterval) / 3,\r\n maxParallelChunksAmount: this.#values.min.chunksCount,\r\n requestTimeoutInMs: serverLatencyInMs * 2,\r\n };\r\n }\r\n\r\n getOptimizedValues(_startedChunksTimeHistory: number[], ackedChunksHistory: { time: number, latencyInMs: number }[], failedChunksTimeHistory: number[], currentOptimizedValues: OptimizationValues): { optimizedValues: OptimizationValues, clearChunksHistory: boolean } {\r\n const finishedChunks = ackedChunksHistory.length + failedChunksTimeHistory.length;\r\n\r\n if (finishedChunks === 0 || ackedChunksHistory.length === 0)\r\n return { optimizedValues: currentOptimizedValues, clearChunksHistory: false };\r\n\r\n const failuresRate = failedChunksTimeHistory.length / finishedChunks;\r\n const acksRate = 1 - failuresRate;\r\n\r\n const optimizedChunkSizeAndChunksCount = this.getOptimizedChunkSizeAndChunksCount(acksRate, currentOptimizedValues.chunkSize, currentOptimizedValues.maxParallelChunksAmount);\r\n\r\n const optimizedValues: OptimizationValues = {\r\n ...currentOptimizedValues,\r\n maxParallelChunksAmount: optimizedChunkSizeAndChunksCount.optimizedChunksCount,\r\n chunkSize: optimizedChunkSizeAndChunksCount.optimizedChunkSize,\r\n optimizationIntervalInMs: this.getOptimizedOptimizationInterval(ackedChunksHistory.length, currentOptimizedValues.optimizationIntervalInMs),\r\n requestTimeoutInMs: this.getOptimizedRequestTimeout(ackedChunksHistory),\r\n };\r\n\r\n return { optimizedValues, clearChunksHistory: false };\r\n }\r\n\r\n private getOptimizedChunkSizeAndChunksCount(acksRate: number, currentChunkSize: number, currentChunksCount: number): { optimizedChunkSize: number, optimizedChunksCount: number } {\r\n if (acksRate < 0.7)\r\n return this.slowDown(currentChunkSize, currentChunksCount);\r\n\r\n if (acksRate > 0.9)\r\n return this.speedUp(currentChunkSize, currentChunksCount);\r\n\r\n return {\r\n optimizedChunkSize: currentChunkSize,\r\n optimizedChunksCount: currentChunksCount,\r\n };\r\n }\r\n\r\n private speedUp(currentChunkSize: number, currentChunksCount: number): { optimizedChunkSize: number, optimizedChunksCount: number } {\r\n if (currentChunkSize! < this.#values.max.chunkSize) {\r\n return {\r\n optimizedChunkSize: this.getIncreasedChunkSize(currentChunkSize),\r\n optimizedChunksCount: currentChunksCount,\r\n };\r\n }\r\n\r\n return {\r\n optimizedChunkSize: currentChunkSize,\r\n optimizedChunksCount: this.getIncreasedChunksCount(currentChunksCount),\r\n };\r\n }\r\n\r\n private slowDown(currentChunkSize: number, currentChunksCount: number): { optimizedChunkSize: number, optimizedChunksCount: number } {\r\n if (currentChunksCount > this.#values.min.chunksCount) {\r\n return {\r\n optimizedChunkSize: currentChunkSize,\r\n optimizedChunksCount: this.getDecreasedChunksCount(currentChunksCount),\r\n };\r\n }\r\n\r\n return {\r\n optimizedChunkSize: this.getDecreasedChunkSize(currentChunkSize),\r\n optimizedChunksCount: currentChunksCount,\r\n };\r\n }\r\n\r\n private getIncreasedChunkSize = (currentChunkSize: number) => {\r\n const newChunkSize = currentChunkSize + this.#values.step.chunkSize;\r\n\r\n return Math.min(newChunkSize, this.#values.max.chunkSize);\r\n };\r\n\r\n private getDecreasedChunkSize = (currentChunkSize: number) => {\r\n const newChunkSize = currentChunkSize - this.#values.step.chunkSize;\r\n\r\n return Math.max(newChunkSize, this.#values.min.chunkSize);\r\n };\r\n\r\n private getIncreasedChunksCount = (currentChunksCount: number) => {\r\n const newChunksCount = currentChunksCount + this.#values.step.chunksCount;\r\n\r\n return Math.min(newChunksCount, this.#values.max.chunksCount);\r\n };\r\n\r\n private getDecreasedChunksCount = (currentChunksCount: number) => {\r\n const newChunksCount = currentChunksCount - this.#values.step.chunksCount;\r\n\r\n return Math.max(newChunksCount, this.#values.min.chunksCount);\r\n };\r\n\r\n private getOptimizedRequestTimeout(ackedChunksHistory: { time: number; latencyInMs: number; }[]) {\r\n const averageLatency = ackedChunksHistory.reduce((sum, ack) => sum + ack.latencyInMs, 0) / ackedChunksHistory.length;\r\n const latencyPercentile = this.findLatencyPercentile(ackedChunksHistory);\r\n\r\n return Math.max(averageLatency * 4, latencyPercentile);\r\n }\r\n\r\n private findLatencyPercentile(ackedChunks: { time: number; latencyInMs: number; }[]): number {\r\n const latencies = ackedChunks.map(v => v.latencyInMs);\r\n const sortedLatencies = latencies.slice().sort((a, b) => a - b);\r\n const index = Math.ceil(0.90 * (sortedLatencies.length - 1));\r\n\r\n return sortedLatencies[index]!;\r\n }\r\n\r\n private getOptimizedOptimizationInterval(ackedChunksCount: number, currentOptimizationIntervalInMs: number): number {\r\n if (ackedChunksCount > 30)\r\n return this.getDecreasedOptimizationInterval(currentOptimizationIntervalInMs);\r\n\r\n if (ackedChunksCount < 15)\r\n return this.getIncreasedOptimizationInterval(currentOptimizationIntervalInMs);\r\n\r\n return currentOptimizationIntervalInMs;\r\n }\r\n\r\n private getIncreasedOptimizationInterval = (optimizationIntervalInMs: number) => {\r\n const interval = optimizationIntervalInMs + this.#values.step.optimizationInterval;\r\n\r\n return Math.min(interval, this.#values.max.optimizationInterval);\r\n };\r\n\r\n private getDecreasedOptimizationInterval = (optimizationIntervalInMs: number) => {\r\n const interval = optimizationIntervalInMs - this.#values.step.optimizationInterval;\r\n\r\n return Math.max(interval, this.#values.min.optimizationInterval);\r\n };\r\n}\r\n"]}
1
+ {"version":3,"file":"udpConcurrencyBasedOptimizationStrategy.js","sourceRoot":"","sources":["../../../../../src/uploader/optimizer/strategies/udpConcurrencyBasedOptimizationStrategy.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,OAAO,uCAAuC;IACxD,OAAO,GAAG;QACN,KAAK,EAAE;YACH,KAAK,EAAE,GAAG;SACb;QACD,IAAI,EAAE;YACF,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,KAAK;YAChB,oBAAoB,EAAE,EAAE;SAC3B;QACD,GAAG,EAAE;YACD,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,KAAK;YAChB,oBAAoB,EAAE,EAAE;SAC3B;QACD,GAAG,EAAE;YACD,WAAW,EAAE,GAAG;YAChB,SAAS,EAAE,KAAK;YAChB,oBAAoB,EAAE,GAAG;SAC5B;KACJ,CAAC;IAEF,mBAAmB,CAAC,sBAA0C;QAC1D,MAAM,SAAS,GAAG,sBAAsB,CAAC,SAAS,GAAG,IAAI,CAAC;QAE1D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;QAEvC,OAAO,EAAE,SAAS,EAAE,CAAC;IACzB,CAAC;IAED,kBAAkB,CAAC,sBAA0C;QACzD,OAAO;YACH,uBAAuB,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW;YACrD,6BAA6B,EAAE,sBAAsB,CAAC,6BAA6B;SACtF,CAAC;IACN,CAAC;IAED,gBAAgB,CAAC,iBAAyB;QACtC,OAAO;YACH,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS;YACrC,6BAA6B,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;YACvD,wBAAwB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC;YAC7G,uBAAuB,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW;YACrD,kBAAkB,EAAE,iBAAiB,GAAG,CAAC;SAC5C,CAAC;IACN,CAAC;IAED,kBAAkB,CAAC,yBAAmC,EAAE,kBAA2D,EAAE,uBAAiC,EAAE,sBAA0C;QAC9L,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC;QAElF,IAAI,cAAc,KAAK,CAAC,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC;YACvD,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;QAElF,MAAM,YAAY,GAAG,uBAAuB,CAAC,MAAM,GAAG,cAAc,CAAC;QACrE,MAAM,QAAQ,GAAG,CAAC,GAAG,YAAY,CAAC;QAElC,MAAM,gCAAgC,GAAG,IAAI,CAAC,mCAAmC,CAAC,QAAQ,EAAE,sBAAsB,CAAC,SAAS,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;QAE9K,MAAM,eAAe,GAAuB;YACxC,GAAG,sBAAsB;YACzB,uBAAuB,EAAE,gCAAgC,CAAC,oBAAoB;YAC9E,SAAS,EAAE,gCAAgC,CAAC,kBAAkB;YAC9D,wBAAwB,EAAE,IAAI,CAAC,gCAAgC,CAAC,kBAAkB,CAAC,MAAM,EAAE,sBAAsB,CAAC,wBAAwB,CAAC;YAC3I,kBAAkB,EAAE,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,CAAC;SAC1E,CAAC;QAEF,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;IAC1D,CAAC;IAEO,mCAAmC,CAAC,QAAgB,EAAE,gBAAwB,EAAE,kBAA0B;QAC9G,IAAI,QAAQ,GAAG,GAAG;YACd,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;QAE/D,IAAI,QAAQ,GAAG,GAAG;YACd,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;QAE9D,OAAO;YACH,kBAAkB,EAAE,gBAAgB;YACpC,oBAAoB,EAAE,kBAAkB;SAC3C,CAAC;IACN,CAAC;IAEO,OAAO,CAAC,gBAAwB,EAAE,kBAA0B;QAChE,IAAI,gBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACjD,OAAO;gBACH,kBAAkB,EAAE,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC;gBAChE,oBAAoB,EAAE,kBAAkB;aAC3C,CAAC;QACN,CAAC;QAED,OAAO;YACH,kBAAkB,EAAE,gBAAgB;YACpC,oBAAoB,EAAE,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC;SACzE,CAAC;IACN,CAAC;IAEO,QAAQ,CAAC,gBAAwB,EAAE,kBAA0B;QACjE,IAAI,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YACpD,OAAO;gBACH,kBAAkB,EAAE,gBAAgB;gBACpC,oBAAoB,EAAE,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC;aACzE,CAAC;QACN,CAAC;QAED,OAAO;YACH,kBAAkB,EAAE,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC;YAChE,oBAAoB,EAAE,kBAAkB;SAC3C,CAAC;IACN,CAAC;IAEO,qBAAqB,GAAG,CAAC,gBAAwB,EAAE,EAAE;QACzD,MAAM,YAAY,GAAG,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;QAEpE,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC,CAAC;IAEM,qBAAqB,GAAG,CAAC,gBAAwB,EAAE,EAAE;QACzD,MAAM,YAAY,GAAG,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;QAEpE,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC,CAAC;IAEM,uBAAuB,GAAG,CAAC,kBAA0B,EAAE,EAAE;QAC7D,MAAM,cAAc,GAAG,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;QAE1E,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAClE,CAAC,CAAC;IAEM,uBAAuB,GAAG,CAAC,kBAA0B,EAAE,EAAE;QAC7D,MAAM,cAAc,GAAG,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;QAE1E,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAClE,CAAC,CAAC;IAEM,0BAA0B,CAAC,kBAA4D;QAC3F,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC;QACrH,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;QAEzE,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAC3D,CAAC;IAEO,qBAAqB,CAAC,WAAqD;QAC/E,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,eAAe,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAE7D,OAAO,eAAe,CAAC,KAAK,CAAE,CAAC;IACnC,CAAC;IAEO,gCAAgC,CAAC,gBAAwB,EAAE,+BAAuC;QACtG,IAAI,gBAAgB,GAAG,EAAE;YACrB,OAAO,IAAI,CAAC,gCAAgC,CAAC,+BAA+B,CAAC,CAAC;QAElF,IAAI,gBAAgB,GAAG,EAAE;YACrB,OAAO,IAAI,CAAC,gCAAgC,CAAC,+BAA+B,CAAC,CAAC;QAElF,OAAO,+BAA+B,CAAC;IAC3C,CAAC;IAEO,gCAAgC,GAAG,CAAC,wBAAgC,EAAE,EAAE;QAC5E,MAAM,QAAQ,GAAG,wBAAwB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC;QAEnF,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACrE,CAAC,CAAC;IAEM,gCAAgC,GAAG,CAAC,wBAAgC,EAAE,EAAE;QAC5E,MAAM,QAAQ,GAAG,wBAAwB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC;QAEnF,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACrE,CAAC,CAAC;CACL","sourcesContent":["import type OptimizationValues from \"../optimizationValues.js\";\nimport type TransferUploadOptimizationStrategy from \"../transferUploadOptimizationStrategy.js\";\n\nexport default class UdpConcurrencyBasedOptimizationStrategy implements TransferUploadOptimizationStrategy {\n #values = {\n const: {\n sleep: 0.5,\n },\n step: {\n chunksCount: 4,\n chunkSize: 12244,\n optimizationInterval: 50,\n },\n min: {\n chunksCount: 4,\n chunkSize: 15424,\n optimizationInterval: 50,\n },\n max: {\n chunksCount: 125,\n chunkSize: 64400,\n optimizationInterval: 500,\n },\n };\n\n msgSizeErrorHandler(currentOptimizedValues: OptimizationValues): { chunkSize: number } {\n const chunkSize = currentOptimizedValues.chunkSize - 1000;\n\n this.#values.max.chunkSize = chunkSize;\n\n return { chunkSize };\n }\n\n noBufsErrorHandler(currentOptimizedValues: OptimizationValues): { maxParallelChunksAmount: number, minTimeBetweenChunksStartInMs: number } {\n return {\n maxParallelChunksAmount: this.#values.min.chunksCount,\n minTimeBetweenChunksStartInMs: currentOptimizedValues.minTimeBetweenChunksStartInMs,\n };\n }\n\n getInitialValues(serverLatencyInMs: number): OptimizationValues {\n return {\n chunkSize: this.#values.max.chunkSize,\n minTimeBetweenChunksStartInMs: this.#values.const.sleep,\n optimizationIntervalInMs: (this.#values.max.optimizationInterval + this.#values.min.optimizationInterval) / 3,\n maxParallelChunksAmount: this.#values.min.chunksCount,\n requestTimeoutInMs: serverLatencyInMs * 2,\n };\n }\n\n getOptimizedValues(_startedChunksTimeHistory: number[], ackedChunksHistory: { time: number, latencyInMs: number }[], failedChunksTimeHistory: number[], currentOptimizedValues: OptimizationValues): { optimizedValues: OptimizationValues, clearChunksHistory: boolean } {\n const finishedChunks = ackedChunksHistory.length + failedChunksTimeHistory.length;\n\n if (finishedChunks === 0 || ackedChunksHistory.length === 0)\n return { optimizedValues: currentOptimizedValues, clearChunksHistory: false };\n\n const failuresRate = failedChunksTimeHistory.length / finishedChunks;\n const acksRate = 1 - failuresRate;\n\n const optimizedChunkSizeAndChunksCount = this.getOptimizedChunkSizeAndChunksCount(acksRate, currentOptimizedValues.chunkSize, currentOptimizedValues.maxParallelChunksAmount);\n\n const optimizedValues: OptimizationValues = {\n ...currentOptimizedValues,\n maxParallelChunksAmount: optimizedChunkSizeAndChunksCount.optimizedChunksCount,\n chunkSize: optimizedChunkSizeAndChunksCount.optimizedChunkSize,\n optimizationIntervalInMs: this.getOptimizedOptimizationInterval(ackedChunksHistory.length, currentOptimizedValues.optimizationIntervalInMs),\n requestTimeoutInMs: this.getOptimizedRequestTimeout(ackedChunksHistory),\n };\n\n return { optimizedValues, clearChunksHistory: false };\n }\n\n private getOptimizedChunkSizeAndChunksCount(acksRate: number, currentChunkSize: number, currentChunksCount: number): { optimizedChunkSize: number, optimizedChunksCount: number } {\n if (acksRate < 0.7)\n return this.slowDown(currentChunkSize, currentChunksCount);\n\n if (acksRate > 0.9)\n return this.speedUp(currentChunkSize, currentChunksCount);\n\n return {\n optimizedChunkSize: currentChunkSize,\n optimizedChunksCount: currentChunksCount,\n };\n }\n\n private speedUp(currentChunkSize: number, currentChunksCount: number): { optimizedChunkSize: number, optimizedChunksCount: number } {\n if (currentChunkSize! < this.#values.max.chunkSize) {\n return {\n optimizedChunkSize: this.getIncreasedChunkSize(currentChunkSize),\n optimizedChunksCount: currentChunksCount,\n };\n }\n\n return {\n optimizedChunkSize: currentChunkSize,\n optimizedChunksCount: this.getIncreasedChunksCount(currentChunksCount),\n };\n }\n\n private slowDown(currentChunkSize: number, currentChunksCount: number): { optimizedChunkSize: number, optimizedChunksCount: number } {\n if (currentChunksCount > this.#values.min.chunksCount) {\n return {\n optimizedChunkSize: currentChunkSize,\n optimizedChunksCount: this.getDecreasedChunksCount(currentChunksCount),\n };\n }\n\n return {\n optimizedChunkSize: this.getDecreasedChunkSize(currentChunkSize),\n optimizedChunksCount: currentChunksCount,\n };\n }\n\n private getIncreasedChunkSize = (currentChunkSize: number) => {\n const newChunkSize = currentChunkSize + this.#values.step.chunkSize;\n\n return Math.min(newChunkSize, this.#values.max.chunkSize);\n };\n\n private getDecreasedChunkSize = (currentChunkSize: number) => {\n const newChunkSize = currentChunkSize - this.#values.step.chunkSize;\n\n return Math.max(newChunkSize, this.#values.min.chunkSize);\n };\n\n private getIncreasedChunksCount = (currentChunksCount: number) => {\n const newChunksCount = currentChunksCount + this.#values.step.chunksCount;\n\n return Math.min(newChunksCount, this.#values.max.chunksCount);\n };\n\n private getDecreasedChunksCount = (currentChunksCount: number) => {\n const newChunksCount = currentChunksCount - this.#values.step.chunksCount;\n\n return Math.max(newChunksCount, this.#values.min.chunksCount);\n };\n\n private getOptimizedRequestTimeout(ackedChunksHistory: { time: number; latencyInMs: number; }[]) {\n const averageLatency = ackedChunksHistory.reduce((sum, ack) => sum + ack.latencyInMs, 0) / ackedChunksHistory.length;\n const latencyPercentile = this.findLatencyPercentile(ackedChunksHistory);\n\n return Math.max(averageLatency * 4, latencyPercentile);\n }\n\n private findLatencyPercentile(ackedChunks: { time: number; latencyInMs: number; }[]): number {\n const latencies = ackedChunks.map(v => v.latencyInMs);\n const sortedLatencies = latencies.slice().sort((a, b) => a - b);\n const index = Math.ceil(0.90 * (sortedLatencies.length - 1));\n\n return sortedLatencies[index]!;\n }\n\n private getOptimizedOptimizationInterval(ackedChunksCount: number, currentOptimizationIntervalInMs: number): number {\n if (ackedChunksCount > 30)\n return this.getDecreasedOptimizationInterval(currentOptimizationIntervalInMs);\n\n if (ackedChunksCount < 15)\n return this.getIncreasedOptimizationInterval(currentOptimizationIntervalInMs);\n\n return currentOptimizationIntervalInMs;\n }\n\n private getIncreasedOptimizationInterval = (optimizationIntervalInMs: number) => {\n const interval = optimizationIntervalInMs + this.#values.step.optimizationInterval;\n\n return Math.min(interval, this.#values.max.optimizationInterval);\n };\n\n private getDecreasedOptimizationInterval = (optimizationIntervalInMs: number) => {\n const interval = optimizationIntervalInMs - this.#values.step.optimizationInterval;\n\n return Math.max(interval, this.#values.min.optimizationInterval);\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"udpSleepBasedOptimizationStrategy.js","sourceRoot":"","sources":["../../../../../src/uploader/optimizer/strategies/udpSleepBasedOptimizationStrategy.ts"],"names":[],"mappings":"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","sourcesContent":["import type OptimizationValues from \"../optimizationValues.js\";\r\nimport type TransferUploadOptimizationStrategy from \"../transferUploadOptimizationStrategy.js\";\r\n\r\nexport default class UdpSleepBasedOptimizationStrategy implements TransferUploadOptimizationStrategy {\r\n #values = {\r\n step: {\r\n chunksAmount: 4,\r\n chunkSize: 12244,\r\n optimizationInterval: 50,\r\n sleep: 1,\r\n },\r\n min: {\r\n chunksAmount: 4,\r\n chunkSize: 15424,\r\n optimizationInterval: 50,\r\n sleep: 0,\r\n },\r\n max: {\r\n chunksAmount: 150,\r\n chunkSize: 64400,\r\n optimizationInterval: 500,\r\n sleep: 50,\r\n },\r\n };\r\n\r\n msgSizeErrorHandler(currentOptimizedValues: OptimizationValues): { chunkSize: number } {\r\n const chunkSize = currentOptimizedValues.chunkSize - 1000;\r\n\r\n this.#values.max.chunkSize = chunkSize;\r\n\r\n return { chunkSize };\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n noBufsErrorHandler(_currentOptimizedValues: OptimizationValues): { maxParallelChunksAmount: number, minTimeBetweenChunksStartInMs: number } {\r\n return {\r\n maxParallelChunksAmount: this.#values.min.chunksAmount,\r\n minTimeBetweenChunksStartInMs: this.#values.max.sleep,\r\n };\r\n }\r\n\r\n getInitialValues(serverLatencyInMs: number): OptimizationValues {\r\n return {\r\n chunkSize: this.#values.max.chunkSize,\r\n minTimeBetweenChunksStartInMs: (this.#values.max.sleep + this.#values.min.sleep) / 3,\r\n optimizationIntervalInMs: (this.#values.max.optimizationInterval + this.#values.min.optimizationInterval) / 3,\r\n maxParallelChunksAmount: this.#values.max.chunksAmount,\r\n requestTimeoutInMs: serverLatencyInMs * 2,\r\n };\r\n }\r\n\r\n getOptimizedValues(_startedChunksTimeHistory: number[], ackedChunksHistory: { time: number, latencyInMs: number }[], failedChunksTimeHistory: number[], currentOptimizedValues: OptimizationValues): { optimizedValues: OptimizationValues, clearChunksHistory: boolean } {\r\n const finishedChunks = ackedChunksHistory.length + failedChunksTimeHistory.length;\r\n\r\n if (finishedChunks === 0 || ackedChunksHistory.length === 0)\r\n return { optimizedValues: currentOptimizedValues, clearChunksHistory: false };\r\n\r\n const failuresRate = failedChunksTimeHistory.length / finishedChunks;\r\n const acksRate = 1 - failuresRate;\r\n\r\n const optimizedChunkSize = this.getOptimizedChunkSize(acksRate, failuresRate, currentOptimizedValues.chunkSize);\r\n\r\n const optimizedValues: OptimizationValues = {\r\n ...currentOptimizedValues,\r\n chunkSize: optimizedChunkSize,\r\n optimizationIntervalInMs: this.getOptimizedOptimizationInterval(ackedChunksHistory.length, currentOptimizedValues.optimizationIntervalInMs),\r\n minTimeBetweenChunksStartInMs: this.getOptimizedMinTimeBetweenChunksStart(currentOptimizedValues.chunkSize, optimizedChunkSize, ackedChunksHistory.length, currentOptimizedValues.optimizationIntervalInMs),\r\n requestTimeoutInMs: this.getOptimizedRequestTimeout(ackedChunksHistory),\r\n };\r\n\r\n return { optimizedValues, clearChunksHistory: false };\r\n }\r\n\r\n private getOptimizedRequestTimeout(ackedChunksHistory: { time: number; latencyInMs: number; }[]) {\r\n const averageLatency = ackedChunksHistory.reduce((sum, ack) => sum + ack.latencyInMs, 0) / ackedChunksHistory.length;\r\n const latencyPercentile = this.findLatencyPercentile(ackedChunksHistory);\r\n\r\n return Math.max(averageLatency * 4, latencyPercentile);\r\n }\r\n\r\n private findLatencyPercentile(ackedChunks: { time: number; latencyInMs: number; }[]): number {\r\n const latencies = ackedChunks.map(v => v.latencyInMs);\r\n const sortedLatencies = latencies.slice().sort((a, b) => a - b);\r\n const index = Math.ceil(0.90 * (sortedLatencies.length - 1));\r\n\r\n return sortedLatencies[index]!;\r\n }\r\n\r\n private getOptimizedMinTimeBetweenChunksStart(currentChunkSize: number, optimizedChunkSize: number, ackedChunksCount: number, periodInMs: number): number {\r\n const currentBytesPerMs = (currentChunkSize * ackedChunksCount) / periodInMs;\r\n const wantedBytesPerMs = currentBytesPerMs * 1.4;\r\n\r\n return Math.min(optimizedChunkSize / wantedBytesPerMs, this.#values.max.sleep);\r\n }\r\n\r\n private getOptimizedOptimizationInterval(ackedChunksCount: number, currentOptimizationIntervalInMs: number): number {\r\n if (ackedChunksCount > 30)\r\n return this.getDecreasedOptimizationInterval(currentOptimizationIntervalInMs);\r\n\r\n if (ackedChunksCount < 15)\r\n return this.getIncreasedOptimizationInterval(currentOptimizationIntervalInMs);\r\n\r\n return currentOptimizationIntervalInMs;\r\n }\r\n\r\n private getIncreasedOptimizationInterval = (optimizationIntervalInMs: number) => {\r\n const interval = optimizationIntervalInMs + this.#values.step.optimizationInterval;\r\n\r\n return Math.min(interval, this.#values.max.optimizationInterval);\r\n };\r\n\r\n private getDecreasedOptimizationInterval = (optimizationIntervalInMs: number) => {\r\n const interval = optimizationIntervalInMs - this.#values.step.optimizationInterval;\r\n\r\n return Math.max(interval, this.#values.min.optimizationInterval);\r\n };\r\n\r\n private getOptimizedChunkSize(acksRate: number, failuresRate: number, currentChunkSize: number): number {\r\n if (failuresRate > 0.4 || acksRate < 0.4)\r\n return this.getDecreasedChunkSize(currentChunkSize);\r\n\r\n if (failuresRate < 0.15 && acksRate > 0.6)\r\n return this.getIncreasedChunkSize(currentChunkSize);\r\n\r\n return currentChunkSize;\r\n }\r\n\r\n private getIncreasedChunkSize = (currentChunkSize: number) => {\r\n const newChunkSize = currentChunkSize + this.#values.step.chunkSize;\r\n\r\n return Math.min(newChunkSize, this.#values.max.chunkSize);\r\n };\r\n\r\n private getDecreasedChunkSize = (currentChunkSize: number) => {\r\n const newChunkSize = currentChunkSize - this.#values.step.chunkSize;\r\n\r\n return Math.max(newChunkSize, this.#values.min.chunkSize);\r\n };\r\n}\r\n"]}
1
+ {"version":3,"file":"udpSleepBasedOptimizationStrategy.js","sourceRoot":"","sources":["../../../../../src/uploader/optimizer/strategies/udpSleepBasedOptimizationStrategy.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,OAAO,iCAAiC;IAClD,OAAO,GAAG;QACN,IAAI,EAAE;YACF,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,KAAK;YAChB,oBAAoB,EAAE,EAAE;YACxB,KAAK,EAAE,CAAC;SACX;QACD,GAAG,EAAE;YACD,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,KAAK;YAChB,oBAAoB,EAAE,EAAE;YACxB,KAAK,EAAE,CAAC;SACX;QACD,GAAG,EAAE;YACD,YAAY,EAAE,GAAG;YACjB,SAAS,EAAE,KAAK;YAChB,oBAAoB,EAAE,GAAG;YACzB,KAAK,EAAE,EAAE;SACZ;KACJ,CAAC;IAEF,mBAAmB,CAAC,sBAA0C;QAC1D,MAAM,SAAS,GAAG,sBAAsB,CAAC,SAAS,GAAG,IAAI,CAAC;QAE1D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;QAEvC,OAAO,EAAE,SAAS,EAAE,CAAC;IACzB,CAAC;IAED,6DAA6D;IAC7D,kBAAkB,CAAC,uBAA2C;QAC1D,OAAO;YACH,uBAAuB,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY;YACtD,6BAA6B,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK;SACxD,CAAC;IACN,CAAC;IAED,gBAAgB,CAAC,iBAAyB;QACtC,OAAO;YACH,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS;YACrC,6BAA6B,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;YACpF,wBAAwB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC;YAC7G,uBAAuB,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY;YACtD,kBAAkB,EAAE,iBAAiB,GAAG,CAAC;SAC5C,CAAC;IACN,CAAC;IAED,kBAAkB,CAAC,yBAAmC,EAAE,kBAA2D,EAAE,uBAAiC,EAAE,sBAA0C;QAC9L,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC;QAElF,IAAI,cAAc,KAAK,CAAC,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC;YACvD,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;QAElF,MAAM,YAAY,GAAG,uBAAuB,CAAC,MAAM,GAAG,cAAc,CAAC;QACrE,MAAM,QAAQ,GAAG,CAAC,GAAG,YAAY,CAAC;QAElC,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,YAAY,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAEhH,MAAM,eAAe,GAAuB;YACxC,GAAG,sBAAsB;YACzB,SAAS,EAAE,kBAAkB;YAC7B,wBAAwB,EAAE,IAAI,CAAC,gCAAgC,CAAC,kBAAkB,CAAC,MAAM,EAAE,sBAAsB,CAAC,wBAAwB,CAAC;YAC3I,6BAA6B,EAAE,IAAI,CAAC,qCAAqC,CAAC,sBAAsB,CAAC,SAAS,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,MAAM,EAAE,sBAAsB,CAAC,wBAAwB,CAAC;YAC3M,kBAAkB,EAAE,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,CAAC;SAC1E,CAAC;QAEF,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;IAC1D,CAAC;IAEO,0BAA0B,CAAC,kBAA4D;QAC3F,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC;QACrH,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;QAEzE,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAC3D,CAAC;IAEO,qBAAqB,CAAC,WAAqD;QAC/E,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,eAAe,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAE7D,OAAO,eAAe,CAAC,KAAK,CAAE,CAAC;IACnC,CAAC;IAEO,qCAAqC,CAAC,gBAAwB,EAAE,kBAA0B,EAAE,gBAAwB,EAAE,UAAkB;QAC5I,MAAM,iBAAiB,GAAG,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,UAAU,CAAC;QAC7E,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,GAAG,CAAC;QAEjD,OAAO,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnF,CAAC;IAEO,gCAAgC,CAAC,gBAAwB,EAAE,+BAAuC;QACtG,IAAI,gBAAgB,GAAG,EAAE;YACrB,OAAO,IAAI,CAAC,gCAAgC,CAAC,+BAA+B,CAAC,CAAC;QAElF,IAAI,gBAAgB,GAAG,EAAE;YACrB,OAAO,IAAI,CAAC,gCAAgC,CAAC,+BAA+B,CAAC,CAAC;QAElF,OAAO,+BAA+B,CAAC;IAC3C,CAAC;IAEO,gCAAgC,GAAG,CAAC,wBAAgC,EAAE,EAAE;QAC5E,MAAM,QAAQ,GAAG,wBAAwB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC;QAEnF,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACrE,CAAC,CAAC;IAEM,gCAAgC,GAAG,CAAC,wBAAgC,EAAE,EAAE;QAC5E,MAAM,QAAQ,GAAG,wBAAwB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC;QAEnF,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACrE,CAAC,CAAC;IAEM,qBAAqB,CAAC,QAAgB,EAAE,YAAoB,EAAE,gBAAwB;QAC1F,IAAI,YAAY,GAAG,GAAG,IAAI,QAAQ,GAAG,GAAG;YACpC,OAAO,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;QAExD,IAAI,YAAY,GAAG,IAAI,IAAI,QAAQ,GAAG,GAAG;YACrC,OAAO,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;QAExD,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAEO,qBAAqB,GAAG,CAAC,gBAAwB,EAAE,EAAE;QACzD,MAAM,YAAY,GAAG,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;QAEpE,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC,CAAC;IAEM,qBAAqB,GAAG,CAAC,gBAAwB,EAAE,EAAE;QACzD,MAAM,YAAY,GAAG,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;QAEpE,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC,CAAC;CACL","sourcesContent":["import type OptimizationValues from \"../optimizationValues.js\";\nimport type TransferUploadOptimizationStrategy from \"../transferUploadOptimizationStrategy.js\";\n\nexport default class UdpSleepBasedOptimizationStrategy implements TransferUploadOptimizationStrategy {\n #values = {\n step: {\n chunksAmount: 4,\n chunkSize: 12244,\n optimizationInterval: 50,\n sleep: 1,\n },\n min: {\n chunksAmount: 4,\n chunkSize: 15424,\n optimizationInterval: 50,\n sleep: 0,\n },\n max: {\n chunksAmount: 150,\n chunkSize: 64400,\n optimizationInterval: 500,\n sleep: 50,\n },\n };\n\n msgSizeErrorHandler(currentOptimizedValues: OptimizationValues): { chunkSize: number } {\n const chunkSize = currentOptimizedValues.chunkSize - 1000;\n\n this.#values.max.chunkSize = chunkSize;\n\n return { chunkSize };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n noBufsErrorHandler(_currentOptimizedValues: OptimizationValues): { maxParallelChunksAmount: number, minTimeBetweenChunksStartInMs: number } {\n return {\n maxParallelChunksAmount: this.#values.min.chunksAmount,\n minTimeBetweenChunksStartInMs: this.#values.max.sleep,\n };\n }\n\n getInitialValues(serverLatencyInMs: number): OptimizationValues {\n return {\n chunkSize: this.#values.max.chunkSize,\n minTimeBetweenChunksStartInMs: (this.#values.max.sleep + this.#values.min.sleep) / 3,\n optimizationIntervalInMs: (this.#values.max.optimizationInterval + this.#values.min.optimizationInterval) / 3,\n maxParallelChunksAmount: this.#values.max.chunksAmount,\n requestTimeoutInMs: serverLatencyInMs * 2,\n };\n }\n\n getOptimizedValues(_startedChunksTimeHistory: number[], ackedChunksHistory: { time: number, latencyInMs: number }[], failedChunksTimeHistory: number[], currentOptimizedValues: OptimizationValues): { optimizedValues: OptimizationValues, clearChunksHistory: boolean } {\n const finishedChunks = ackedChunksHistory.length + failedChunksTimeHistory.length;\n\n if (finishedChunks === 0 || ackedChunksHistory.length === 0)\n return { optimizedValues: currentOptimizedValues, clearChunksHistory: false };\n\n const failuresRate = failedChunksTimeHistory.length / finishedChunks;\n const acksRate = 1 - failuresRate;\n\n const optimizedChunkSize = this.getOptimizedChunkSize(acksRate, failuresRate, currentOptimizedValues.chunkSize);\n\n const optimizedValues: OptimizationValues = {\n ...currentOptimizedValues,\n chunkSize: optimizedChunkSize,\n optimizationIntervalInMs: this.getOptimizedOptimizationInterval(ackedChunksHistory.length, currentOptimizedValues.optimizationIntervalInMs),\n minTimeBetweenChunksStartInMs: this.getOptimizedMinTimeBetweenChunksStart(currentOptimizedValues.chunkSize, optimizedChunkSize, ackedChunksHistory.length, currentOptimizedValues.optimizationIntervalInMs),\n requestTimeoutInMs: this.getOptimizedRequestTimeout(ackedChunksHistory),\n };\n\n return { optimizedValues, clearChunksHistory: false };\n }\n\n private getOptimizedRequestTimeout(ackedChunksHistory: { time: number; latencyInMs: number; }[]) {\n const averageLatency = ackedChunksHistory.reduce((sum, ack) => sum + ack.latencyInMs, 0) / ackedChunksHistory.length;\n const latencyPercentile = this.findLatencyPercentile(ackedChunksHistory);\n\n return Math.max(averageLatency * 4, latencyPercentile);\n }\n\n private findLatencyPercentile(ackedChunks: { time: number; latencyInMs: number; }[]): number {\n const latencies = ackedChunks.map(v => v.latencyInMs);\n const sortedLatencies = latencies.slice().sort((a, b) => a - b);\n const index = Math.ceil(0.90 * (sortedLatencies.length - 1));\n\n return sortedLatencies[index]!;\n }\n\n private getOptimizedMinTimeBetweenChunksStart(currentChunkSize: number, optimizedChunkSize: number, ackedChunksCount: number, periodInMs: number): number {\n const currentBytesPerMs = (currentChunkSize * ackedChunksCount) / periodInMs;\n const wantedBytesPerMs = currentBytesPerMs * 1.4;\n\n return Math.min(optimizedChunkSize / wantedBytesPerMs, this.#values.max.sleep);\n }\n\n private getOptimizedOptimizationInterval(ackedChunksCount: number, currentOptimizationIntervalInMs: number): number {\n if (ackedChunksCount > 30)\n return this.getDecreasedOptimizationInterval(currentOptimizationIntervalInMs);\n\n if (ackedChunksCount < 15)\n return this.getIncreasedOptimizationInterval(currentOptimizationIntervalInMs);\n\n return currentOptimizationIntervalInMs;\n }\n\n private getIncreasedOptimizationInterval = (optimizationIntervalInMs: number) => {\n const interval = optimizationIntervalInMs + this.#values.step.optimizationInterval;\n\n return Math.min(interval, this.#values.max.optimizationInterval);\n };\n\n private getDecreasedOptimizationInterval = (optimizationIntervalInMs: number) => {\n const interval = optimizationIntervalInMs - this.#values.step.optimizationInterval;\n\n return Math.max(interval, this.#values.min.optimizationInterval);\n };\n\n private getOptimizedChunkSize(acksRate: number, failuresRate: number, currentChunkSize: number): number {\n if (failuresRate > 0.4 || acksRate < 0.4)\n return this.getDecreasedChunkSize(currentChunkSize);\n\n if (failuresRate < 0.15 && acksRate > 0.6)\n return this.getIncreasedChunkSize(currentChunkSize);\n\n return currentChunkSize;\n }\n\n private getIncreasedChunkSize = (currentChunkSize: number) => {\n const newChunkSize = currentChunkSize + this.#values.step.chunkSize;\n\n return Math.min(newChunkSize, this.#values.max.chunkSize);\n };\n\n private getDecreasedChunkSize = (currentChunkSize: number) => {\n const newChunkSize = currentChunkSize - this.#values.step.chunkSize;\n\n return Math.max(newChunkSize, this.#values.min.chunkSize);\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploadOptimizationStrategy.js","sourceRoot":"","sources":["../../../../src/uploader/optimizer/transferUploadOptimizationStrategy.ts"],"names":[],"mappings":"","sourcesContent":["import type OptimizationValues from \"./optimizationValues.js\";\r\n\r\ninterface TransferUploadOptimizationStrategy {\r\n msgSizeErrorHandler(currentOptimizedValues: OptimizationValues): { chunkSize: number };\r\n noBufsErrorHandler(currentOptimizedValues: OptimizationValues): { maxParallelChunksAmount: number, minTimeBetweenChunksStartInMs: number };\r\n getInitialValues(serverLatencyInMs: number): OptimizationValues;\r\n getOptimizedValues(startedChunksTimeHistory: number[], ackedChunksHistory: { time: number, latencyInMs: number }[], failedChunksTimeHistory: number[], currentOptimizedValues: OptimizationValues): { optimizedValues: OptimizationValues, clearChunksHistory?: boolean };\r\n}\r\n\r\nexport default TransferUploadOptimizationStrategy;"]}
1
+ {"version":3,"file":"transferUploadOptimizationStrategy.js","sourceRoot":"","sources":["../../../../src/uploader/optimizer/transferUploadOptimizationStrategy.ts"],"names":[],"mappings":"","sourcesContent":["import type OptimizationValues from \"./optimizationValues.js\";\n\ninterface TransferUploadOptimizationStrategy {\n msgSizeErrorHandler(currentOptimizedValues: OptimizationValues): { chunkSize: number };\n noBufsErrorHandler(currentOptimizedValues: OptimizationValues): { maxParallelChunksAmount: number, minTimeBetweenChunksStartInMs: number };\n getInitialValues(serverLatencyInMs: number): OptimizationValues;\n getOptimizedValues(startedChunksTimeHistory: number[], ackedChunksHistory: { time: number, latencyInMs: number }[], failedChunksTimeHistory: number[], currentOptimizedValues: OptimizationValues): { optimizedValues: OptimizationValues, clearChunksHistory?: boolean };\n}\n\nexport default TransferUploadOptimizationStrategy;"]}
@@ -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\nconst MAX_OPTIMIZER_HISTORY_ENTRIES = 10_000;\r\nconst OPTIMIZER_HISTORY_TRIM_THRESHOLD = 12_000;\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 this.#startedChunksTimeHistory = this.trimHistoryArrayToMaxEntries(this.#startedChunksTimeHistory);\r\n };\r\n\r\n private chunkUploadSucceeded = (eventArgs: FileChunkUploadCompletedEventArgs) => {\r\n this.#ackedChunksHistory.push({ time: Date.now(), latencyInMs: eventArgs.latencyInMsIfUdp! });\r\n this.#ackedChunksHistory = this.trimHistoryArrayToMaxEntries(this.#ackedChunksHistory);\r\n };\r\n\r\n private chunkUploadSucceededPartially = (eventArgs: FileChunkUploadCompletedPartiallyEventArgs) => {\r\n this.#ackedChunksHistory.push({ time: Date.now(), latencyInMs: eventArgs.latencyInMsIfUdp! });\r\n this.#ackedChunksHistory = this.trimHistoryArrayToMaxEntries(this.#ackedChunksHistory);\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 this.#failedChunksTimeHistory = this.trimHistoryArrayToMaxEntries(this.#failedChunksTimeHistory);\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 trimHistoryArrayToMaxEntries<T>(history: T[]): T[] {\r\n if (history.length <= OPTIMIZER_HISTORY_TRIM_THRESHOLD)\r\n return history;\r\n\r\n return history.slice(history.length - MAX_OPTIMIZER_HISTORY_ENTRIES);\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":"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","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\nconst MAX_OPTIMIZER_HISTORY_ENTRIES = 10_000;\nconst OPTIMIZER_HISTORY_TRIM_THRESHOLD = 12_000;\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 this.#startedChunksTimeHistory = this.trimHistoryArrayToMaxEntries(this.#startedChunksTimeHistory);\n };\n\n private chunkUploadSucceeded = (eventArgs: FileChunkUploadCompletedEventArgs) => {\n this.#ackedChunksHistory.push({ time: Date.now(), latencyInMs: eventArgs.latencyInMsIfUdp! });\n this.#ackedChunksHistory = this.trimHistoryArrayToMaxEntries(this.#ackedChunksHistory);\n };\n\n private chunkUploadSucceededPartially = (eventArgs: FileChunkUploadCompletedPartiallyEventArgs) => {\n this.#ackedChunksHistory.push({ time: Date.now(), latencyInMs: eventArgs.latencyInMsIfUdp! });\n this.#ackedChunksHistory = this.trimHistoryArrayToMaxEntries(this.#ackedChunksHistory);\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 this.#failedChunksTimeHistory = this.trimHistoryArrayToMaxEntries(this.#failedChunksTimeHistory);\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 trimHistoryArrayToMaxEntries<T>(history: T[]): T[] {\n if (history.length <= OPTIMIZER_HISTORY_TRIM_THRESHOLD)\n return history;\n\n return history.slice(history.length - MAX_OPTIMIZER_HISTORY_ENTRIES);\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;"]}