filemail-sdk 9.4.10 → 10.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/autoDownloader/autoDownloader.d.ts.map +1 -1
- package/dist/src/autoDownloader/autoDownloader.js +0 -1
- package/dist/src/autoDownloader/autoDownloader.js.map +1 -1
- package/dist/src/client/downloader/downloaderCore.js +1 -1
- package/dist/src/client/downloader/downloaderCore.js.map +1 -1
- package/dist/src/client/downloader/node/nodeTransferDownloader.d.ts.map +1 -1
- package/dist/src/client/downloader/node/nodeTransferDownloader.js +0 -2
- package/dist/src/client/downloader/node/nodeTransferDownloader.js.map +1 -1
- package/dist/src/client/uploader/node/nodeTransferUploader.d.ts.map +1 -1
- package/dist/src/client/uploader/node/nodeTransferUploader.js +6 -5
- package/dist/src/client/uploader/node/nodeTransferUploader.js.map +1 -1
- package/dist/src/client/uploader/transferUploaderBase.d.ts +2 -0
- package/dist/src/client/uploader/transferUploaderBase.d.ts.map +1 -1
- package/dist/src/client/uploader/transferUploaderBase.js +45 -31
- package/dist/src/client/uploader/transferUploaderBase.js.map +1 -1
- package/dist/src/client/uploader/transferUploaderConfig.d.ts +3 -4
- package/dist/src/client/uploader/transferUploaderConfig.d.ts.map +1 -1
- package/dist/src/client/uploader/transferUploaderConfig.js.map +1 -1
- package/dist/src/client/uploader/utils/uploaderUtils.d.ts.map +1 -1
- package/dist/src/client/uploader/utils/uploaderUtils.js +1 -2
- package/dist/src/client/uploader/utils/uploaderUtils.js.map +1 -1
- package/dist/src/client/uploader/web/webTransferUploader.d.ts.map +1 -1
- package/dist/src/client/uploader/web/webTransferUploader.js +5 -4
- package/dist/src/client/uploader/web/webTransferUploader.js.map +1 -1
- package/dist/src/downloader/api/node/nodeFileServerDownloadClient.d.ts.map +1 -1
- package/dist/src/downloader/api/node/nodeFileServerDownloadClient.js +6 -2
- package/dist/src/downloader/api/node/nodeFileServerDownloadClient.js.map +1 -1
- package/dist/src/downloader/chunkDownloader.d.ts.map +1 -1
- package/dist/src/downloader/chunkDownloader.js +2 -3
- package/dist/src/downloader/chunkDownloader.js.map +1 -1
- package/dist/src/downloader/downloadTracker.d.ts.map +1 -1
- package/dist/src/downloader/downloadTracker.js +0 -1
- package/dist/src/downloader/downloadTracker.js.map +1 -1
- package/dist/src/downloader/filesDownloader.d.ts.map +1 -1
- package/dist/src/downloader/filesDownloader.js +0 -1
- package/dist/src/downloader/filesDownloader.js.map +1 -1
- package/dist/src/index.d.ts +5 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/uploader/api/node/nodeFileServerUploadClient.d.ts +1 -1
- package/dist/src/uploader/api/node/nodeFileServerUploadClient.d.ts.map +1 -1
- package/dist/src/uploader/api/node/nodeFileServerUploadClient.js +5 -4
- package/dist/src/uploader/api/node/nodeFileServerUploadClient.js.map +1 -1
- package/dist/src/uploader/api/web/webFileServerUploadClient.d.ts +1 -1
- package/dist/src/uploader/api/web/webFileServerUploadClient.d.ts.map +1 -1
- package/dist/src/uploader/api/web/webFileServerUploadClient.js +5 -4
- package/dist/src/uploader/api/web/webFileServerUploadClient.js.map +1 -1
- package/dist/src/uploader/chunksIterator/chunksIterator.d.ts +1 -3
- package/dist/src/uploader/chunksIterator/chunksIterator.d.ts.map +1 -1
- package/dist/src/uploader/chunksIterator/chunksIterator.js +4 -4
- package/dist/src/uploader/chunksIterator/chunksIterator.js.map +1 -1
- package/dist/src/uploader/eventArgs/fileAckFailedEventArgs.d.ts +8 -0
- package/dist/src/uploader/eventArgs/fileAckFailedEventArgs.d.ts.map +1 -0
- package/dist/src/uploader/eventArgs/fileAckFailedEventArgs.js +2 -0
- package/dist/src/uploader/eventArgs/fileAckFailedEventArgs.js.map +1 -0
- package/dist/src/uploader/eventArgs/fileChunkUploadCompletedEventArgs.d.ts +1 -1
- package/dist/src/uploader/eventArgs/fileChunkUploadCompletedEventArgs.d.ts.map +1 -1
- package/dist/src/uploader/eventArgs/fileChunkUploadCompletedEventArgs.js.map +1 -1
- package/dist/src/uploader/eventArgs/fileChunkUploadEventArgs.d.ts +1 -0
- package/dist/src/uploader/eventArgs/fileChunkUploadEventArgs.d.ts.map +1 -1
- package/dist/src/uploader/eventArgs/fileChunkUploadEventArgs.js.map +1 -1
- package/dist/src/uploader/eventArgs/fileChunkUploadProgressedEventArgs.d.ts +1 -0
- package/dist/src/uploader/eventArgs/fileChunkUploadProgressedEventArgs.d.ts.map +1 -1
- package/dist/src/uploader/eventArgs/fileChunkUploadProgressedEventArgs.js.map +1 -1
- package/dist/src/uploader/eventArgs/fileUploadEventArgs.d.ts +1 -0
- package/dist/src/uploader/eventArgs/fileUploadEventArgs.d.ts.map +1 -1
- package/dist/src/uploader/eventArgs/fileUploadEventArgs.js.map +1 -1
- package/dist/src/uploader/eventArgs/filesBatchAckFailedEventArgs.d.ts +6 -0
- package/dist/src/uploader/eventArgs/filesBatchAckFailedEventArgs.d.ts.map +1 -0
- package/dist/src/uploader/eventArgs/filesBatchAckFailedEventArgs.js +2 -0
- package/dist/src/uploader/eventArgs/filesBatchAckFailedEventArgs.js.map +1 -0
- package/dist/src/uploader/eventArgs/filesRegistrationBatchFailedEventArgs.d.ts +6 -0
- package/dist/src/uploader/eventArgs/filesRegistrationBatchFailedEventArgs.d.ts.map +1 -0
- package/dist/src/uploader/eventArgs/filesRegistrationBatchFailedEventArgs.js +2 -0
- package/dist/src/uploader/eventArgs/filesRegistrationBatchFailedEventArgs.js.map +1 -0
- package/dist/src/uploader/export/transferUploadExportData.d.ts +4 -1
- package/dist/src/uploader/export/transferUploadExportData.d.ts.map +1 -1
- package/dist/src/uploader/export/transferUploadExportData.js.map +1 -1
- package/dist/src/uploader/export/transferUploadExportState.d.ts +4 -1
- package/dist/src/uploader/export/transferUploadExportState.d.ts.map +1 -1
- package/dist/src/uploader/export/transferUploadExportState.js.map +1 -1
- package/dist/src/uploader/export/transferUploadMetadata.d.ts +0 -9
- package/dist/src/uploader/export/transferUploadMetadata.d.ts.map +1 -1
- package/dist/src/uploader/export/transferUploadMetadata.js.map +1 -1
- package/dist/src/uploader/options/transferUploadAppendInfo.d.ts +1 -0
- package/dist/src/uploader/options/transferUploadAppendInfo.d.ts.map +1 -1
- package/dist/src/uploader/options/transferUploadAppendInfo.js.map +1 -1
- package/dist/src/uploader/options/transferUploadConfig.d.ts +1 -2
- package/dist/src/uploader/options/transferUploadConfig.d.ts.map +1 -1
- package/dist/src/uploader/options/transferUploadConfig.js.map +1 -1
- package/dist/src/uploader/pendingFileAck.d.ts +7 -0
- package/dist/src/uploader/pendingFileAck.d.ts.map +1 -0
- package/dist/src/uploader/pendingFileAck.js +2 -0
- package/dist/src/uploader/pendingFileAck.js.map +1 -0
- package/dist/src/uploader/registeredTransferFile.d.ts +6 -0
- package/dist/src/uploader/registeredTransferFile.d.ts.map +1 -0
- package/dist/src/uploader/registeredTransferFile.js +2 -0
- package/dist/src/uploader/registeredTransferFile.js.map +1 -0
- package/dist/src/uploader/state/continuousChunksCalculator.d.ts +1 -0
- package/dist/src/uploader/state/continuousChunksCalculator.d.ts.map +1 -1
- package/dist/src/uploader/state/continuousChunksCalculator.js +8 -2
- package/dist/src/uploader/state/continuousChunksCalculator.js.map +1 -1
- package/dist/src/uploader/state/transferUploadState.d.ts +11 -8
- package/dist/src/uploader/state/transferUploadState.d.ts.map +1 -1
- package/dist/src/uploader/state/transferUploadState.js +57 -28
- package/dist/src/uploader/state/transferUploadState.js.map +1 -1
- package/dist/src/uploader/state/transferUploadStateFile.d.ts +1 -0
- package/dist/src/uploader/state/transferUploadStateFile.d.ts.map +1 -1
- package/dist/src/uploader/state/transferUploadStateFile.js +1 -0
- package/dist/src/uploader/state/transferUploadStateFile.js.map +1 -1
- package/dist/src/uploader/transferFilesRegistrar.d.ts +30 -0
- package/dist/src/uploader/transferFilesRegistrar.d.ts.map +1 -0
- package/dist/src/uploader/transferFilesRegistrar.js +158 -0
- package/dist/src/uploader/transferFilesRegistrar.js.map +1 -0
- package/dist/src/uploader/transferUpload.d.ts +21 -14
- package/dist/src/uploader/transferUpload.d.ts.map +1 -1
- package/dist/src/uploader/transferUpload.js +122 -142
- package/dist/src/uploader/transferUpload.js.map +1 -1
- package/dist/src/uploader/transferUploadAcker.d.ts +18 -0
- package/dist/src/uploader/transferUploadAcker.d.ts.map +1 -0
- package/dist/src/uploader/transferUploadAcker.js +123 -0
- package/dist/src/uploader/transferUploadAcker.js.map +1 -0
- package/dist/src/uploader/transferUploadEvent.d.ts +4 -1
- package/dist/src/uploader/transferUploadEvent.d.ts.map +1 -1
- package/dist/src/uploader/transferUploadEvent.js +4 -1
- package/dist/src/uploader/transferUploadEvent.js.map +1 -1
- package/dist/src/utils/api/apiClient.d.ts +6 -0
- package/dist/src/utils/api/apiClient.d.ts.map +1 -1
- package/dist/src/utils/api/apiClient.js.map +1 -1
- package/dist/src/utils/api/apiClientBase.d.ts +0 -2
- package/dist/src/utils/api/apiClientBase.d.ts.map +1 -1
- package/dist/src/utils/api/apiClientBase.js +6 -13
- package/dist/src/utils/api/apiClientBase.js.map +1 -1
- package/dist/src/utils/api/dtos/ackTransferFilesRequest.d.ts +9 -0
- package/dist/src/utils/api/dtos/ackTransferFilesRequest.d.ts.map +1 -0
- package/dist/src/utils/api/dtos/ackTransferFilesRequest.js +2 -0
- package/dist/src/utils/api/dtos/ackTransferFilesRequest.js.map +1 -0
- package/dist/src/utils/api/dtos/ackTransferFilesResponse.d.ts +7 -0
- package/dist/src/utils/api/dtos/ackTransferFilesResponse.d.ts.map +1 -0
- package/dist/src/utils/api/dtos/ackTransferFilesResponse.js +2 -0
- package/dist/src/utils/api/dtos/ackTransferFilesResponse.js.map +1 -0
- package/dist/src/utils/api/dtos/finalizeTransferRequest.d.ts +1 -1
- package/dist/src/utils/api/dtos/finalizeTransferRequest.d.ts.map +1 -1
- package/dist/src/utils/api/dtos/finalizeTransferRequest.js.map +1 -1
- package/dist/src/utils/api/dtos/initializeTransferRequest.d.ts +1 -0
- package/dist/src/utils/api/dtos/initializeTransferRequest.d.ts.map +1 -1
- package/dist/src/utils/api/dtos/initializeTransferRequest.js.map +1 -1
- package/dist/src/utils/api/dtos/initializeTransferResponse.d.ts +0 -9
- package/dist/src/utils/api/dtos/initializeTransferResponse.d.ts.map +1 -1
- package/dist/src/utils/api/dtos/initializeTransferResponse.js.map +1 -1
- package/dist/src/utils/api/dtos/registerTransferFilesRequest.d.ts +18 -0
- package/dist/src/utils/api/dtos/registerTransferFilesRequest.d.ts.map +1 -0
- package/dist/src/utils/api/dtos/registerTransferFilesRequest.js +2 -0
- package/dist/src/utils/api/dtos/registerTransferFilesRequest.js.map +1 -0
- package/dist/src/utils/api/dtos/registerTransferFilesResponse.d.ts +9 -0
- package/dist/src/utils/api/dtos/registerTransferFilesResponse.d.ts.map +1 -0
- package/dist/src/utils/api/dtos/registerTransferFilesResponse.js +2 -0
- package/dist/src/utils/api/dtos/registerTransferFilesResponse.js.map +1 -0
- package/dist/src/utils/api/fileServerClientFactory.d.ts +2 -4
- package/dist/src/utils/api/fileServerClientFactory.d.ts.map +1 -1
- package/dist/src/utils/api/fileServerClientFactory.js.map +1 -1
- package/dist/src/utils/api/node/nodeApiClient.d.ts +6 -0
- package/dist/src/utils/api/node/nodeApiClient.d.ts.map +1 -1
- package/dist/src/utils/api/node/nodeApiClient.js +26 -2
- package/dist/src/utils/api/node/nodeApiClient.js.map +1 -1
- package/dist/src/utils/api/node/nodeFileServerClientFactory.d.ts +2 -4
- package/dist/src/utils/api/node/nodeFileServerClientFactory.d.ts.map +1 -1
- package/dist/src/utils/api/node/nodeFileServerClientFactory.js +3 -7
- package/dist/src/utils/api/node/nodeFileServerClientFactory.js.map +1 -1
- package/dist/src/utils/api/web/webApiClient.d.ts +6 -0
- package/dist/src/utils/api/web/webApiClient.d.ts.map +1 -1
- package/dist/src/utils/api/web/webApiClient.js +24 -2
- package/dist/src/utils/api/web/webApiClient.js.map +1 -1
- package/dist/src/utils/api/web/webFileServerClientFactory.d.ts +2 -4
- package/dist/src/utils/api/web/webFileServerClientFactory.d.ts.map +1 -1
- package/dist/src/utils/api/web/webFileServerClientFactory.js +3 -6
- package/dist/src/utils/api/web/webFileServerClientFactory.js.map +1 -1
- package/dist/src/utils/fileSystem/node/nodeFileSystemService.d.ts.map +1 -1
- package/dist/src/utils/fileSystem/node/nodeFileSystemService.js +0 -3
- package/dist/src/utils/fileSystem/node/nodeFileSystemService.js.map +1 -1
- package/dist/src/utils/mergeAbortAndPauseSignals.d.ts +6 -1
- package/dist/src/utils/mergeAbortAndPauseSignals.d.ts.map +1 -1
- package/dist/src/utils/mergeAbortAndPauseSignals.js +14 -7
- package/dist/src/utils/mergeAbortAndPauseSignals.js.map +1 -1
- package/dist/src/utils/promiseAll.d.ts.map +1 -1
- package/dist/src/utils/promiseAll.js +0 -1
- package/dist/src/utils/promiseAll.js.map +1 -1
- package/package.json +1 -2
- package/dist/src/uploader/api/dtos/handshakeRequest.d.ts +0 -6
- package/dist/src/uploader/api/dtos/handshakeRequest.d.ts.map +0 -1
- package/dist/src/uploader/api/dtos/handshakeRequest.js +0 -2
- package/dist/src/uploader/api/dtos/handshakeRequest.js.map +0 -1
- package/dist/src/uploader/api/dtos/handshakeResponse.d.ts +0 -6
- package/dist/src/uploader/api/dtos/handshakeResponse.d.ts.map +0 -1
- package/dist/src/uploader/api/dtos/handshakeResponse.js +0 -2
- package/dist/src/uploader/api/dtos/handshakeResponse.js.map +0 -1
- package/dist/src/uploader/api/dtos/pingResponse.d.ts +0 -5
- package/dist/src/uploader/api/dtos/pingResponse.d.ts.map +0 -1
- package/dist/src/uploader/api/dtos/pingResponse.js +0 -2
- package/dist/src/uploader/api/dtos/pingResponse.js.map +0 -1
- package/dist/src/uploader/api/dtos/sendChunkRequest.d.ts +0 -10
- package/dist/src/uploader/api/dtos/sendChunkRequest.d.ts.map +0 -1
- package/dist/src/uploader/api/dtos/sendChunkRequest.js +0 -2
- package/dist/src/uploader/api/dtos/sendChunkRequest.js.map +0 -1
- package/dist/src/uploader/api/fileServerUdpClient.d.ts +0 -19
- package/dist/src/uploader/api/fileServerUdpClient.d.ts.map +0 -1
- package/dist/src/uploader/api/fileServerUdpClient.js +0 -2
- package/dist/src/uploader/api/fileServerUdpClient.js.map +0 -1
- package/dist/src/uploader/api/node/nodeFileServerUdpClient.d.ts +0 -39
- package/dist/src/uploader/api/node/nodeFileServerUdpClient.d.ts.map +0 -1
- package/dist/src/uploader/api/node/nodeFileServerUdpClient.js +0 -264
- package/dist/src/uploader/api/node/nodeFileServerUdpClient.js.map +0 -1
- package/dist/src/uploader/eventArgs/transferUploadModeChosenEventArgs.d.ts +0 -7
- package/dist/src/uploader/eventArgs/transferUploadModeChosenEventArgs.d.ts.map +0 -1
- package/dist/src/uploader/eventArgs/transferUploadModeChosenEventArgs.js +0 -2
- package/dist/src/uploader/eventArgs/transferUploadModeChosenEventArgs.js.map +0 -1
- package/dist/src/uploader/optimizer/optimizationValues.d.ts +0 -9
- package/dist/src/uploader/optimizer/optimizationValues.d.ts.map +0 -1
- package/dist/src/uploader/optimizer/optimizationValues.js +0 -2
- package/dist/src/uploader/optimizer/optimizationValues.js.map +0 -1
- package/dist/src/uploader/optimizer/strategies/udpConcurrencyBasedOptimizationStrategy.d.ts +0 -33
- package/dist/src/uploader/optimizer/strategies/udpConcurrencyBasedOptimizationStrategy.d.ts.map +0 -1
- package/dist/src/uploader/optimizer/strategies/udpConcurrencyBasedOptimizationStrategy.js +0 -135
- package/dist/src/uploader/optimizer/strategies/udpConcurrencyBasedOptimizationStrategy.js.map +0 -1
- package/dist/src/uploader/optimizer/strategies/udpSleepBasedOptimizationStrategy.d.ts +0 -30
- package/dist/src/uploader/optimizer/strategies/udpSleepBasedOptimizationStrategy.d.ts.map +0 -1
- package/dist/src/uploader/optimizer/strategies/udpSleepBasedOptimizationStrategy.js +0 -106
- package/dist/src/uploader/optimizer/strategies/udpSleepBasedOptimizationStrategy.js.map +0 -1
- package/dist/src/uploader/optimizer/transferUploadOptimizationStrategy.d.ts +0 -20
- package/dist/src/uploader/optimizer/transferUploadOptimizationStrategy.d.ts.map +0 -1
- package/dist/src/uploader/optimizer/transferUploadOptimizationStrategy.js +0 -2
- package/dist/src/uploader/optimizer/transferUploadOptimizationStrategy.js.map +0 -1
- package/dist/src/uploader/optimizer/transferUploadOptimizer.d.ts +0 -27
- package/dist/src/uploader/optimizer/transferUploadOptimizer.d.ts.map +0 -1
- package/dist/src/uploader/optimizer/transferUploadOptimizer.js +0 -169
- package/dist/src/uploader/optimizer/transferUploadOptimizer.js.map +0 -1
- package/dist/src/uploader/optimizer/uploadOptimizer.d.ts +0 -11
- package/dist/src/uploader/optimizer/uploadOptimizer.d.ts.map +0 -1
- package/dist/src/uploader/optimizer/uploadOptimizer.js +0 -2
- package/dist/src/uploader/optimizer/uploadOptimizer.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autoDownloader.d.ts","sourceRoot":"","sources":["../../../src/autoDownloader/autoDownloader.ts"],"names":[],"mappings":"AAMA,OAAO,mBAAmB,MAAM,0BAA0B,CAAC;AAI3D,OAAO,KAAK,MAAM,MAAM,6BAA6B,CAAC;AACtD,OAAO,KAAK,qBAAqB,MAAM,yDAAyD,CAAC;AACjG,OAAO,KAAK,qBAAqB,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,yBAAyB,MAAM,gCAAgC,CAAC;AAC5E,OAAO,KAAK,2BAA2B,MAAM,wCAAwC,CAAC;AACtF,OAAO,KAAK,8BAA8B,MAAM,2CAA2C,CAAC;AAC5F,OAAO,KAAK,YAAY,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,6BAA6B,MAAM,oCAAoC,CAAC;AAEpF,OAAO,KAAK,0BAA0B,MAAM,4DAA4D,CAAC;AAGzG,OAAO,KAAK,mCAAmC,MAAM,oDAAoD,CAAC;AAC1G,OAAO,KAAK,4BAA4B,MAAM,6CAA6C,CAAC;AAC5F,OAAO,KAAK,2BAA2B,MAAM,4CAA4C,CAAC;AAC1F,OAAO,KAAK,+BAA+B,MAAM,gDAAgD,CAAC;AAClG,OAAO,KAAK,qBAAqB,MAAM,sCAAsC,CAAC;AAC9E,OAAO,KAAK,mCAAmC,MAAM,oDAAoD,CAAC;AAC1G,OAAO,KAAK,uCAAuC,MAAM,wDAAwD,CAAC;AAClH,OAAO,KAAK,8BAA8B,MAAM,+CAA+C,CAAC;AAEhG,cAAM,cAAc;;gBAcJ,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,YAAY,EAAE,YAAY,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,eAAe,EAAE,6BAA6B,EAAE,gBAAgB,EAAE,8BAA8B,GAAG,IAAI;IAmB3V,IAAI,KAAK,IAAI,2BAA2B,CAQvC;IAED,IAAI,oBAAoB,IAAI,OAAO,CAElC;IAED,IAAI,yBAAyB,IAAI,OAAO,CAEvC;IAED,IAAI,UAAU,CAAC,UAAU,EAAE,MAAM,EAGhC;IAED,IAAI,8BAA8B,CAAC,8BAA8B,EAAE,MAAM,EAGxE;IAED,IAAI,kCAAkC,CAAC,kCAAkC,EAAE,MAAM,EAGhF;IAED,IAAI,gCAAgC,CAAC,gCAAgC,EAAE,MAAM,EAG5E;IAED,IAAI,mBAAmB,CAAC,mBAAmB,EAAE,OAAO,EAGnD;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAG5B;IAED,IAAI,sBAAsB,CAAC,sBAAsB,EAAE,MAAM,EAGxD;IAEK,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"autoDownloader.d.ts","sourceRoot":"","sources":["../../../src/autoDownloader/autoDownloader.ts"],"names":[],"mappings":"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"}
|
|
@@ -84,7 +84,6 @@ class AutoDownloader {
|
|
|
84
84
|
const eventArgs = { lastCompletedNewTransfersCheck: this.#state.lastCompletedNewTransfersCheck };
|
|
85
85
|
this.#eventsEngine.emit(AutoDownloaderEvent.CheckingForNewTransfersStarted, eventArgs);
|
|
86
86
|
while (!this.#abortController.signal.aborted) {
|
|
87
|
-
/* eslint-disable no-await-in-loop */
|
|
88
87
|
try {
|
|
89
88
|
this.#logger.logDebug(`AutoDownloader main loop iteration started`);
|
|
90
89
|
const newTransfers = await this.#newInboxTransfersRetriever.getNewTransfers(transferId => this.#state.isTransferHandled(transferId), this.#abortController.signal);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autoDownloader.js","sourceRoot":"","sources":["../../../src/autoDownloader/autoDownloader.ts"],"names":[],"mappings":"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","sourcesContent":["import sleep from \"abortable-sleep\";\n\nimport AutoDownloaderError from \"./autoDownloaderError.js\";\nimport AutoDownloaderState from \"./state/autoDownloaderState.js\";\nimport AutoDownloaderNewTransferHandler from \"./transferHandler/autoDownloaderNewTransferHandler.js\";\nimport AutoDownloaderRecoverableTransferHandler from \"./transferHandler/autoDownloaderRecoverableTransferHandler.js\";\nimport AutoDownloaderEvent from \"./autoDownloaderEvent.js\";\nimport TransferStatus from \"../utils/types/transferStatus.js\";\nimport AutoDownloaderDestroyer from \"./autoDownloaderDestroyer.js\";\n\nimport type Logger from \"../client/loggers/logger.js\";\nimport type ConcurrencyController from \"../utils/concurrencyController/concurrencyController.js\";\nimport type AutoDownloaderOptions from \"./autoDownloaderOptions.js\";\nimport type TransferDownloaderFactory from './transferDownloaderFactory.js';\nimport type AutoDownloaderStateSnapshot from './state/autoDownloaderStateSnapshot.js';\nimport type AutoDownloaderRecoverableState from './state/autoDownloaderRecoverableState.js';\nimport type EventsEngine from '../utils/events/eventsEngine.js';\nimport type AutoDownloaderStateSerializer from './autoDownloaderStateSerializer.js';\nimport type AutoDownloaderTransferHandlerBase from \"./transferHandler/autoDownloaderTransferHandlerBase.js\";\nimport type NewInboxTransfersRetriever from \"./newInboxTransfersRetriever/newInboxTransfersRetriever.js\";\nimport type NewInboxTransfer from \"./newInboxTransfersRetriever/newInboxTransfer.js\";\nimport type AutoDownloaderStateRecoverableTransfer from \"./state/autoDownloaderStateRecoverableTransfer.js\";\nimport type NewTransfersCheckCompletedEventArgs from \"./eventArgs/newTransfersCheckCompletedEventArgs.js\";\nimport type AutoDownloadStartedEventArgs from \"./eventArgs/autoDownloadStartedEventArgs.js\";\nimport type AutoDownloadFailedEventArgs from \"./eventArgs/autoDownloadFailedEventArgs.js\";\nimport type AutoDownloadProgressedEventArgs from \"./eventArgs/autoDownloadProgressedEventArgs.js\";\nimport type AutoDownloadEventArgs from \"./eventArgs/autoDownloadEventArgs.js\";\nimport type AutoDownloadStartingFailedEventArgs from \"./eventArgs/autoDownloadStartingFailedEventArgs.js\";\nimport type CheckingForNewTransfersStartedEventArgs from \"./eventArgs/checkingForNewTransfersStartedEventArgs.js\";\nimport type AutoDownloadUnhealthyEventArgs from \"./eventArgs/autoDownloadUnhealthyEventArgs.js\";\n\nclass AutoDownloader {\n #newTransfersCheckIntervalInSeconds: number;\n\n #logger: Logger;\n #eventsEngine: EventsEngine;\n #state: AutoDownloaderState;\n #newInboxTransfersRetriever: NewInboxTransfersRetriever;\n #concurrencyController: ConcurrencyController;\n #transferDownloaderFactory: TransferDownloaderFactory;\n #destroyer: AutoDownloaderDestroyer;\n\n #isCheckingForNewTransfers: boolean = false;\n #abortController: AbortController = new AbortController();\n\n constructor(options: AutoDownloaderOptions, logger: Logger, newInboxTransfersRetriever: NewInboxTransfersRetriever, concurrencyController: ConcurrencyController, eventsEngine: EventsEngine, transferDownloaderFactory: TransferDownloaderFactory, stateSerializer: AutoDownloaderStateSerializer, recoverableState: AutoDownloaderRecoverableState | null) {\n this.#newTransfersCheckIntervalInSeconds = options.newTransfersCheckIntervalInSeconds;\n\n this.#logger = logger;\n this.#eventsEngine = eventsEngine;\n this.#newInboxTransfersRetriever = newInboxTransfersRetriever;\n this.#concurrencyController = concurrencyController;\n this.#transferDownloaderFactory = transferDownloaderFactory;\n\n this.#state = new AutoDownloaderState(eventsEngine);\n\n if (recoverableState)\n this.#state.recover(recoverableState);\n\n this.#state.addRecoverableStateObserver(eventArgs => stateSerializer.serialize(eventArgs));\n\n this.#destroyer = new AutoDownloaderDestroyer(this.#state, stateSerializer, transferDownloaderFactory, logger);\n }\n\n get state(): AutoDownloaderStateSnapshot {\n return {\n lastCompletedNewTransfersCheck: this.#state.lastCompletedNewTransfersCheck,\n runningTransfers: this.#state.runningTransfers,\n completedTransfers: this.#state.completedTransfers,\n failedTransfers: new Set(this.#state.failedTransfers.keys()),\n canceledTransfers: this.#state.canceledTransfers,\n };\n }\n\n get isAnyTransferRunning(): boolean {\n return this.#state.isAnyTransferRunning;\n }\n\n get isCheckingForNewTransfers(): boolean {\n return this.#isCheckingForNewTransfers;\n }\n\n set loginToken(loginToken: string) {\n this.#logger.logInfo(`AutoDownloader set loginToken called`);\n this.#newInboxTransfersRetriever.loginToken = loginToken;\n }\n\n set maxNumberOfConcurrentDownloads(maxNumberOfConcurrentDownloads: number) {\n this.#logger.logInfo(`AutoDownloader set maxNumberOfConcurrentDownloads = ${maxNumberOfConcurrentDownloads} called`);\n this.#concurrencyController.maxConcurrency = maxNumberOfConcurrentDownloads;\n }\n\n set newTransfersCheckIntervalInSeconds(newTransfersCheckIntervalInSeconds: number) {\n this.#logger.logInfo(`AutoDownloader set newTransfersCheckIntervalInSeconds = ${newTransfersCheckIntervalInSeconds} called`);\n this.#newTransfersCheckIntervalInSeconds = newTransfersCheckIntervalInSeconds;\n }\n\n set periodToRetrieveTransfersInHours(periodToRetrieveTransfersInHours: number) {\n this.#logger.logInfo(`AutoDownloader set periodToRetrieveTransfersInHours = ${periodToRetrieveTransfersInHours} called`);\n this.#newInboxTransfersRetriever.periodToRetrieveTransfersInHours = periodToRetrieveTransfersInHours;\n }\n\n set downloadForAllUsers(downloadForAllUsers: boolean) {\n this.#logger.logInfo(`AutoDownloader set downloadForAllUsers = ${downloadForAllUsers} called`);\n this.#newInboxTransfersRetriever.downloadForAllUsers = downloadForAllUsers;\n }\n\n set portals(portals: string[]) {\n this.#logger.logInfo(`AutoDownloader set portals = ${portals.join(`, `)} called`);\n this.#newInboxTransfersRetriever.portals = portals;\n }\n\n set downloadFolderTemplate(downloadFolderTemplate: string) {\n this.#logger.logInfo(`AutoDownloader set downloadFolderTemplate = ${downloadFolderTemplate} called`);\n this.#transferDownloaderFactory.downloadFolderTemplate = downloadFolderTemplate;\n }\n\n async startCheckingForNewTransfers(): Promise<void> {\n this.#logger.logInfo(`AutoDownloader startCheckingForNewTransfers called`);\n\n if (this.#destroyer.isDestroyed)\n throw new AutoDownloaderError(`Auto-downloader has been destroyed`);\n\n if (this.#isCheckingForNewTransfers)\n throw new AutoDownloaderError(`Auto-downloader is already checking for new transfers`);\n\n this.#isCheckingForNewTransfers = true;\n this.#abortController = new AbortController();\n\n const eventArgs: CheckingForNewTransfersStartedEventArgs = { lastCompletedNewTransfersCheck: this.#state.lastCompletedNewTransfersCheck };\n this.#eventsEngine.emit(AutoDownloaderEvent.CheckingForNewTransfersStarted, eventArgs);\n\n while (!this.#abortController.signal.aborted) {\n /* eslint-disable no-await-in-loop */\n try {\n this.#logger.logDebug(`AutoDownloader main loop iteration started`);\n\n const newTransfers = await this.#newInboxTransfersRetriever.getNewTransfers(transferId => this.#state.isTransferHandled(transferId), this.#abortController.signal);\n\n this.#logger.logDebug(`AutoDownloader retrieved new transfers to start: [${newTransfers.map(t => t.transferId).join(`, `)}]`);\n\n if (this.#abortController.signal.aborted)\n break;\n\n await this.startNewTransfers(newTransfers);\n\n this.#state.newTransfersCheckCompleted();\n\n this.#logger.logDebug(`AutoDownloader main loop iteration finished`);\n }\n catch (error) {\n this.#logger.logError(error as Error, `AutoDownloader main loop error occured`, { isAborted: this.#abortController.signal.aborted });\n }\n\n await sleep(this.#newTransfersCheckIntervalInSeconds * 1000, this.#abortController.signal);\n }\n\n this.#isCheckingForNewTransfers = false;\n\n this.#logger.logInfo(`AutoDownloader stopped`);\n\n this.#eventsEngine.emit(AutoDownloaderEvent.CheckingForNewTransfersStopped);\n }\n\n async recoverTransfers(): Promise<void> {\n this.#logger.logInfo(`AutoDownloader recoverTransfers called`);\n\n if (this.#destroyer.isDestroyed)\n throw new AutoDownloaderError(`Auto-downloader has been destroyed`);\n\n const recoverableTransferHandlerFactory = (transfer: [string, AutoDownloaderStateRecoverableTransfer]) => new AutoDownloaderRecoverableTransferHandler(transfer[1].data, transfer[1].downloadId, this.#state, this.#transferDownloaderFactory, this.#logger);\n await this.startTransfers(this.#state.toBeRecoveredTransfers, recoverableTransferHandlerFactory);\n }\n\n private async startNewTransfers(newTransfers: NewInboxTransfer[]) {\n const newTransferHandlerFactory = (transfer: NewInboxTransfer) => new AutoDownloaderNewTransferHandler(transfer, this.#state, this.#transferDownloaderFactory, this.#logger);\n await this.startTransfers(newTransfers, newTransferHandlerFactory);\n }\n\n private async startTransfers<T>(transfers: Iterable<T>, transferHandlerFactory: (transfer: T) => AutoDownloaderTransferHandlerBase) {\n for (const transfer of transfers) {\n const releaseSemaphore = await this.#concurrencyController.acquire();\n\n if (this.#abortController.signal.aborted) {\n releaseSemaphore();\n return;\n }\n\n const transferHandler = transferHandlerFactory(transfer);\n\n this.#logger.logInfo(`AutoDownloader starting transfer having id ${transferHandler.transferId}`);\n\n transferHandler.startTransfer(releaseSemaphore);\n }\n }\n\n destroy() {\n this.#logger.logInfo(`AutoDownloader destroy called`);\n\n if (this.#isCheckingForNewTransfers)\n this.pauseCheckingForNewTransfers();\n\n this.#destroyer.destroy();\n }\n\n pauseCheckingForNewTransfers() {\n this.#logger.logInfo(`AutoDownloader pauseCheckingForNewTransfers called`);\n\n if (!this.#isCheckingForNewTransfers)\n throw new AutoDownloaderError(`Auto-downloader is not checking for new transfers, so it cannot be paused`);\n\n this.#eventsEngine.emit(AutoDownloaderEvent.CheckingForNewTransfersStopping);\n this.#abortController.abort();\n }\n\n pauseTransfer(transferId: string) {\n this.#logger.logInfo(`AutoDownloader pauseTransfer ${transferId} called`);\n\n const transferDownloader = this.#state.getRunningTransferDownloader(transferId);\n transferDownloader.pause();\n }\n\n resumeTransfer(transferId: string) {\n this.#logger.logInfo(`AutoDownloader resumeTransfer ${transferId} called`);\n\n const transferDownloader = this.#state.getRunningTransferDownloader(transferId);\n transferDownloader.resume();\n }\n\n stopTransfer(transferId: string) {\n this.#logger.logInfo(`AutoDownloader stopTransfer ${transferId} called`);\n\n const transferDownloader = this.#state.getRunningTransferDownloader(transferId);\n\n if (transferDownloader.status !== TransferStatus.Running)\n return;\n\n transferDownloader.stop();\n }\n\n stopAllTransfers() {\n this.#logger.logInfo(`AutoDownloader stopAllTransfers called`);\n\n this.#state.runningTransfers.forEach(t => this.stopTransfer(t));\n }\n\n cancelTransfer(transferId: string) {\n this.#logger.logInfo(`AutoDownloader cancelTransfer ${transferId} called`);\n\n if (this.#state.runningTransfers.has(transferId)) {\n this.cancelRunningTransfer(transferId);\n return;\n }\n\n if (this.#state.failedTransfers.has(transferId)) {\n this.cancelFailedTransfer(transferId);\n return;\n }\n\n throw new AutoDownloaderError(`Transfer not found (TransferId = ${transferId})`);\n }\n\n private cancelRunningTransfer(transferId: string) {\n this.#destroyer.abortRunningTransfer(transferId);\n }\n\n private cancelFailedTransfer(transferId: string) {\n this.#state.transferAborting(transferId);\n\n const transfer = this.#state.failedTransfers.get(transferId)!;\n\n if (transfer.downloadId)\n this.#destroyer.cleanupTransfer(transfer.downloadId);\n\n this.#state.transferAborted(transferId);\n }\n\n addEventListener(eventName: AutoDownloaderEvent.DownloadAborted | AutoDownloaderEvent.DownloadCompleted | AutoDownloaderEvent.DownloadResumed | AutoDownloaderEvent.DownloadAborting | AutoDownloaderEvent.DownloadPaused | AutoDownloaderEvent.DownloadPausing | AutoDownloaderEvent.DownloadStopped | AutoDownloaderEvent.DownloadStopping | AutoDownloaderEvent.DownloadHealthy, handler: (event: AutoDownloadEventArgs) => void): void\n addEventListener(eventName: AutoDownloaderEvent.DownloadUnealthy, handler: (event: AutoDownloadUnhealthyEventArgs) => void): void\n addEventListener(eventName: AutoDownloaderEvent.DownloadProgressed, handler: (event: AutoDownloadProgressedEventArgs) => void): void\n addEventListener(eventName: AutoDownloaderEvent.DownloadFailed, handler: (event: AutoDownloadFailedEventArgs) => void): void\n addEventListener(eventName: AutoDownloaderEvent.DownloadStarted, handler: (event: AutoDownloadStartedEventArgs) => void): void\n addEventListener(eventName: AutoDownloaderEvent.DownloadStartingFailed, handler: (event: AutoDownloadStartingFailedEventArgs) => void): void\n addEventListener(eventName: AutoDownloaderEvent.NewTransfersCheckCompleted, handler: (event: NewTransfersCheckCompletedEventArgs) => void): void\n addEventListener(eventName: AutoDownloaderEvent.CheckingForNewTransfersStarted, handler: (event: CheckingForNewTransfersStartedEventArgs) => void): void\n addEventListener(eventName: AutoDownloaderEvent.CheckingForNewTransfersStopped | AutoDownloaderEvent.CheckingForNewTransfersStopping, handler: () => void): void\n addEventListener(eventName: string, handler: (arg?: any) => void): void\n addEventListener(eventName: string, handler: (arg?: any) => void): void {\n this.#eventsEngine.addEventListener(eventName, handler);\n }\n}\n\nexport default AutoDownloader;"]}
|
|
1
|
+
{"version":3,"file":"autoDownloader.js","sourceRoot":"","sources":["../../../src/autoDownloader/autoDownloader.ts"],"names":[],"mappings":"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","sourcesContent":["import sleep from \"abortable-sleep\";\n\nimport AutoDownloaderError from \"./autoDownloaderError.js\";\nimport AutoDownloaderState from \"./state/autoDownloaderState.js\";\nimport AutoDownloaderNewTransferHandler from \"./transferHandler/autoDownloaderNewTransferHandler.js\";\nimport AutoDownloaderRecoverableTransferHandler from \"./transferHandler/autoDownloaderRecoverableTransferHandler.js\";\nimport AutoDownloaderEvent from \"./autoDownloaderEvent.js\";\nimport TransferStatus from \"../utils/types/transferStatus.js\";\nimport AutoDownloaderDestroyer from \"./autoDownloaderDestroyer.js\";\n\nimport type Logger from \"../client/loggers/logger.js\";\nimport type ConcurrencyController from \"../utils/concurrencyController/concurrencyController.js\";\nimport type AutoDownloaderOptions from \"./autoDownloaderOptions.js\";\nimport type TransferDownloaderFactory from './transferDownloaderFactory.js';\nimport type AutoDownloaderStateSnapshot from './state/autoDownloaderStateSnapshot.js';\nimport type AutoDownloaderRecoverableState from './state/autoDownloaderRecoverableState.js';\nimport type EventsEngine from '../utils/events/eventsEngine.js';\nimport type AutoDownloaderStateSerializer from './autoDownloaderStateSerializer.js';\nimport type AutoDownloaderTransferHandlerBase from \"./transferHandler/autoDownloaderTransferHandlerBase.js\";\nimport type NewInboxTransfersRetriever from \"./newInboxTransfersRetriever/newInboxTransfersRetriever.js\";\nimport type NewInboxTransfer from \"./newInboxTransfersRetriever/newInboxTransfer.js\";\nimport type AutoDownloaderStateRecoverableTransfer from \"./state/autoDownloaderStateRecoverableTransfer.js\";\nimport type NewTransfersCheckCompletedEventArgs from \"./eventArgs/newTransfersCheckCompletedEventArgs.js\";\nimport type AutoDownloadStartedEventArgs from \"./eventArgs/autoDownloadStartedEventArgs.js\";\nimport type AutoDownloadFailedEventArgs from \"./eventArgs/autoDownloadFailedEventArgs.js\";\nimport type AutoDownloadProgressedEventArgs from \"./eventArgs/autoDownloadProgressedEventArgs.js\";\nimport type AutoDownloadEventArgs from \"./eventArgs/autoDownloadEventArgs.js\";\nimport type AutoDownloadStartingFailedEventArgs from \"./eventArgs/autoDownloadStartingFailedEventArgs.js\";\nimport type CheckingForNewTransfersStartedEventArgs from \"./eventArgs/checkingForNewTransfersStartedEventArgs.js\";\nimport type AutoDownloadUnhealthyEventArgs from \"./eventArgs/autoDownloadUnhealthyEventArgs.js\";\n\nclass AutoDownloader {\n #newTransfersCheckIntervalInSeconds: number;\n\n #logger: Logger;\n #eventsEngine: EventsEngine;\n #state: AutoDownloaderState;\n #newInboxTransfersRetriever: NewInboxTransfersRetriever;\n #concurrencyController: ConcurrencyController;\n #transferDownloaderFactory: TransferDownloaderFactory;\n #destroyer: AutoDownloaderDestroyer;\n\n #isCheckingForNewTransfers: boolean = false;\n #abortController: AbortController = new AbortController();\n\n constructor(options: AutoDownloaderOptions, logger: Logger, newInboxTransfersRetriever: NewInboxTransfersRetriever, concurrencyController: ConcurrencyController, eventsEngine: EventsEngine, transferDownloaderFactory: TransferDownloaderFactory, stateSerializer: AutoDownloaderStateSerializer, recoverableState: AutoDownloaderRecoverableState | null) {\n this.#newTransfersCheckIntervalInSeconds = options.newTransfersCheckIntervalInSeconds;\n\n this.#logger = logger;\n this.#eventsEngine = eventsEngine;\n this.#newInboxTransfersRetriever = newInboxTransfersRetriever;\n this.#concurrencyController = concurrencyController;\n this.#transferDownloaderFactory = transferDownloaderFactory;\n\n this.#state = new AutoDownloaderState(eventsEngine);\n\n if (recoverableState)\n this.#state.recover(recoverableState);\n\n this.#state.addRecoverableStateObserver(eventArgs => stateSerializer.serialize(eventArgs));\n\n this.#destroyer = new AutoDownloaderDestroyer(this.#state, stateSerializer, transferDownloaderFactory, logger);\n }\n\n get state(): AutoDownloaderStateSnapshot {\n return {\n lastCompletedNewTransfersCheck: this.#state.lastCompletedNewTransfersCheck,\n runningTransfers: this.#state.runningTransfers,\n completedTransfers: this.#state.completedTransfers,\n failedTransfers: new Set(this.#state.failedTransfers.keys()),\n canceledTransfers: this.#state.canceledTransfers,\n };\n }\n\n get isAnyTransferRunning(): boolean {\n return this.#state.isAnyTransferRunning;\n }\n\n get isCheckingForNewTransfers(): boolean {\n return this.#isCheckingForNewTransfers;\n }\n\n set loginToken(loginToken: string) {\n this.#logger.logInfo(`AutoDownloader set loginToken called`);\n this.#newInboxTransfersRetriever.loginToken = loginToken;\n }\n\n set maxNumberOfConcurrentDownloads(maxNumberOfConcurrentDownloads: number) {\n this.#logger.logInfo(`AutoDownloader set maxNumberOfConcurrentDownloads = ${maxNumberOfConcurrentDownloads} called`);\n this.#concurrencyController.maxConcurrency = maxNumberOfConcurrentDownloads;\n }\n\n set newTransfersCheckIntervalInSeconds(newTransfersCheckIntervalInSeconds: number) {\n this.#logger.logInfo(`AutoDownloader set newTransfersCheckIntervalInSeconds = ${newTransfersCheckIntervalInSeconds} called`);\n this.#newTransfersCheckIntervalInSeconds = newTransfersCheckIntervalInSeconds;\n }\n\n set periodToRetrieveTransfersInHours(periodToRetrieveTransfersInHours: number) {\n this.#logger.logInfo(`AutoDownloader set periodToRetrieveTransfersInHours = ${periodToRetrieveTransfersInHours} called`);\n this.#newInboxTransfersRetriever.periodToRetrieveTransfersInHours = periodToRetrieveTransfersInHours;\n }\n\n set downloadForAllUsers(downloadForAllUsers: boolean) {\n this.#logger.logInfo(`AutoDownloader set downloadForAllUsers = ${downloadForAllUsers} called`);\n this.#newInboxTransfersRetriever.downloadForAllUsers = downloadForAllUsers;\n }\n\n set portals(portals: string[]) {\n this.#logger.logInfo(`AutoDownloader set portals = ${portals.join(`, `)} called`);\n this.#newInboxTransfersRetriever.portals = portals;\n }\n\n set downloadFolderTemplate(downloadFolderTemplate: string) {\n this.#logger.logInfo(`AutoDownloader set downloadFolderTemplate = ${downloadFolderTemplate} called`);\n this.#transferDownloaderFactory.downloadFolderTemplate = downloadFolderTemplate;\n }\n\n async startCheckingForNewTransfers(): Promise<void> {\n this.#logger.logInfo(`AutoDownloader startCheckingForNewTransfers called`);\n\n if (this.#destroyer.isDestroyed)\n throw new AutoDownloaderError(`Auto-downloader has been destroyed`);\n\n if (this.#isCheckingForNewTransfers)\n throw new AutoDownloaderError(`Auto-downloader is already checking for new transfers`);\n\n this.#isCheckingForNewTransfers = true;\n this.#abortController = new AbortController();\n\n const eventArgs: CheckingForNewTransfersStartedEventArgs = { lastCompletedNewTransfersCheck: this.#state.lastCompletedNewTransfersCheck };\n this.#eventsEngine.emit(AutoDownloaderEvent.CheckingForNewTransfersStarted, eventArgs);\n\n while (!this.#abortController.signal.aborted) {\n try {\n this.#logger.logDebug(`AutoDownloader main loop iteration started`);\n\n const newTransfers = await this.#newInboxTransfersRetriever.getNewTransfers(transferId => this.#state.isTransferHandled(transferId), this.#abortController.signal);\n\n this.#logger.logDebug(`AutoDownloader retrieved new transfers to start: [${newTransfers.map(t => t.transferId).join(`, `)}]`);\n\n if (this.#abortController.signal.aborted)\n break;\n\n await this.startNewTransfers(newTransfers);\n\n this.#state.newTransfersCheckCompleted();\n\n this.#logger.logDebug(`AutoDownloader main loop iteration finished`);\n }\n catch (error) {\n this.#logger.logError(error as Error, `AutoDownloader main loop error occured`, { isAborted: this.#abortController.signal.aborted });\n }\n\n await sleep(this.#newTransfersCheckIntervalInSeconds * 1000, this.#abortController.signal);\n }\n\n this.#isCheckingForNewTransfers = false;\n\n this.#logger.logInfo(`AutoDownloader stopped`);\n\n this.#eventsEngine.emit(AutoDownloaderEvent.CheckingForNewTransfersStopped);\n }\n\n async recoverTransfers(): Promise<void> {\n this.#logger.logInfo(`AutoDownloader recoverTransfers called`);\n\n if (this.#destroyer.isDestroyed)\n throw new AutoDownloaderError(`Auto-downloader has been destroyed`);\n\n const recoverableTransferHandlerFactory = (transfer: [string, AutoDownloaderStateRecoverableTransfer]) => new AutoDownloaderRecoverableTransferHandler(transfer[1].data, transfer[1].downloadId, this.#state, this.#transferDownloaderFactory, this.#logger);\n await this.startTransfers(this.#state.toBeRecoveredTransfers, recoverableTransferHandlerFactory);\n }\n\n private async startNewTransfers(newTransfers: NewInboxTransfer[]) {\n const newTransferHandlerFactory = (transfer: NewInboxTransfer) => new AutoDownloaderNewTransferHandler(transfer, this.#state, this.#transferDownloaderFactory, this.#logger);\n await this.startTransfers(newTransfers, newTransferHandlerFactory);\n }\n\n private async startTransfers<T>(transfers: Iterable<T>, transferHandlerFactory: (transfer: T) => AutoDownloaderTransferHandlerBase) {\n for (const transfer of transfers) {\n const releaseSemaphore = await this.#concurrencyController.acquire();\n\n if (this.#abortController.signal.aborted) {\n releaseSemaphore();\n return;\n }\n\n const transferHandler = transferHandlerFactory(transfer);\n\n this.#logger.logInfo(`AutoDownloader starting transfer having id ${transferHandler.transferId}`);\n\n transferHandler.startTransfer(releaseSemaphore);\n }\n }\n\n destroy() {\n this.#logger.logInfo(`AutoDownloader destroy called`);\n\n if (this.#isCheckingForNewTransfers)\n this.pauseCheckingForNewTransfers();\n\n this.#destroyer.destroy();\n }\n\n pauseCheckingForNewTransfers() {\n this.#logger.logInfo(`AutoDownloader pauseCheckingForNewTransfers called`);\n\n if (!this.#isCheckingForNewTransfers)\n throw new AutoDownloaderError(`Auto-downloader is not checking for new transfers, so it cannot be paused`);\n\n this.#eventsEngine.emit(AutoDownloaderEvent.CheckingForNewTransfersStopping);\n this.#abortController.abort();\n }\n\n pauseTransfer(transferId: string) {\n this.#logger.logInfo(`AutoDownloader pauseTransfer ${transferId} called`);\n\n const transferDownloader = this.#state.getRunningTransferDownloader(transferId);\n transferDownloader.pause();\n }\n\n resumeTransfer(transferId: string) {\n this.#logger.logInfo(`AutoDownloader resumeTransfer ${transferId} called`);\n\n const transferDownloader = this.#state.getRunningTransferDownloader(transferId);\n transferDownloader.resume();\n }\n\n stopTransfer(transferId: string) {\n this.#logger.logInfo(`AutoDownloader stopTransfer ${transferId} called`);\n\n const transferDownloader = this.#state.getRunningTransferDownloader(transferId);\n\n if (transferDownloader.status !== TransferStatus.Running)\n return;\n\n transferDownloader.stop();\n }\n\n stopAllTransfers() {\n this.#logger.logInfo(`AutoDownloader stopAllTransfers called`);\n\n this.#state.runningTransfers.forEach(t => this.stopTransfer(t));\n }\n\n cancelTransfer(transferId: string) {\n this.#logger.logInfo(`AutoDownloader cancelTransfer ${transferId} called`);\n\n if (this.#state.runningTransfers.has(transferId)) {\n this.cancelRunningTransfer(transferId);\n return;\n }\n\n if (this.#state.failedTransfers.has(transferId)) {\n this.cancelFailedTransfer(transferId);\n return;\n }\n\n throw new AutoDownloaderError(`Transfer not found (TransferId = ${transferId})`);\n }\n\n private cancelRunningTransfer(transferId: string) {\n this.#destroyer.abortRunningTransfer(transferId);\n }\n\n private cancelFailedTransfer(transferId: string) {\n this.#state.transferAborting(transferId);\n\n const transfer = this.#state.failedTransfers.get(transferId)!;\n\n if (transfer.downloadId)\n this.#destroyer.cleanupTransfer(transfer.downloadId);\n\n this.#state.transferAborted(transferId);\n }\n\n addEventListener(eventName: AutoDownloaderEvent.DownloadAborted | AutoDownloaderEvent.DownloadCompleted | AutoDownloaderEvent.DownloadResumed | AutoDownloaderEvent.DownloadAborting | AutoDownloaderEvent.DownloadPaused | AutoDownloaderEvent.DownloadPausing | AutoDownloaderEvent.DownloadStopped | AutoDownloaderEvent.DownloadStopping | AutoDownloaderEvent.DownloadHealthy, handler: (event: AutoDownloadEventArgs) => void): void\n addEventListener(eventName: AutoDownloaderEvent.DownloadUnealthy, handler: (event: AutoDownloadUnhealthyEventArgs) => void): void\n addEventListener(eventName: AutoDownloaderEvent.DownloadProgressed, handler: (event: AutoDownloadProgressedEventArgs) => void): void\n addEventListener(eventName: AutoDownloaderEvent.DownloadFailed, handler: (event: AutoDownloadFailedEventArgs) => void): void\n addEventListener(eventName: AutoDownloaderEvent.DownloadStarted, handler: (event: AutoDownloadStartedEventArgs) => void): void\n addEventListener(eventName: AutoDownloaderEvent.DownloadStartingFailed, handler: (event: AutoDownloadStartingFailedEventArgs) => void): void\n addEventListener(eventName: AutoDownloaderEvent.NewTransfersCheckCompleted, handler: (event: NewTransfersCheckCompletedEventArgs) => void): void\n addEventListener(eventName: AutoDownloaderEvent.CheckingForNewTransfersStarted, handler: (event: CheckingForNewTransfersStartedEventArgs) => void): void\n addEventListener(eventName: AutoDownloaderEvent.CheckingForNewTransfersStopped | AutoDownloaderEvent.CheckingForNewTransfersStopping, handler: () => void): void\n addEventListener(eventName: string, handler: (arg?: any) => void): void\n addEventListener(eventName: string, handler: (arg?: any) => void): void {\n this.#eventsEngine.addEventListener(eventName, handler);\n }\n}\n\nexport default AutoDownloader;"]}
|
|
@@ -175,7 +175,7 @@ export default class DownloaderCore {
|
|
|
175
175
|
await DownloadTracker.removeDownloadTrackingFolder(cleanupDownloadId, this.#options.downloadTrackingBaseFolder, this.#fileSystem);
|
|
176
176
|
}
|
|
177
177
|
async #downloadZipped(transfer, e2eeDataOrTextKey) {
|
|
178
|
-
const fsClient = this.#fileserverClientFactory.
|
|
178
|
+
const fsClient = this.#fileserverClientFactory.createFileServerDownloadClient(transfer.compressedfileurl, null, null, transfer.id, ``, this.#options);
|
|
179
179
|
const metaData = await fsClient.getCompressedFileMetadata();
|
|
180
180
|
// for now fileservers are not able to validate md5 for chunks of the zip
|
|
181
181
|
// note: this should be rather handled in files downloader logic
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"downloaderCore.js","sourceRoot":"","sources":["../../../../src/client/downloader/downloaderCore.ts"],"names":[],"mappings":"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","sourcesContent":["import ApiError from \"../../utils/api/apiError.js\";\nimport DownloadErrorCode from \"../../downloader/dtos/downloadErrorCode.js\";\nimport TransferDownloadEvent from \"../../downloader/dtos/downloadEvent.js\";\nimport FilesDownloader from \"../../downloader/filesDownloader.js\";\nimport DownloadFileInfo from \"../../downloader/dtos/downloadFileInfo.js\";\nimport TransferConcurrencyController from \"../../utils/concurrencyController/transferConcurrencyController.js\";\nimport DownloadError from '../../downloader/dtos/downloadError.js';\nimport UrlUtil from \"../../utils/api/urlUtil.js\";\nimport DownloadTracker from \"../../downloader/downloadTracker.js\";\nimport FilesPreparer from \"../../downloader/filesPreparer.js\";\nimport DownloadFolderResolver from \"../../downloader/downloadFolderResolver.js\";\nimport DownloadRegistrationMode from \"../../downloader/dtos/downloadRegistrationMode.js\";\n\nimport type DownloadOptions from \"../../downloader/downloadOptions.js\";\nimport type ApiClient from \"../../utils/api/apiClient.js\";\nimport type ThrottlingOptions from '../../utils/networking/throttlingOptions.js';\nimport TransferStatus from '../../utils/types/transferStatus.js';\nimport type GetTransferResponse from \"../../utils/api/dtos/getTransferResponse.js\";\nimport type DownloadInfo from \"../../downloader/dtos/downloadInfo.js\";\nimport type TransferFileDto from \"../../utils/api/dtos/transferFileDto.js\";\nimport type GetTransferRequest from \"../../utils/api/dtos/getTransferRequest.js\";\nimport type DownloadCommand from \"../../downloader/dtos/downloadCommand.js\";\nimport type DownloadFilesCommand from \"../../downloader/dtos/downloadFilesCommand.js\";\nimport type DownloaderRestoredState from \"../../downloader/dtos/downloaderRestoredState.js\";\nimport type ChunkStreamProviderFactory from \"../../utils/fileSystem/chunkStreamProviderFactory.js\";\nimport type FileServerClientFactory from \"../../utils/api/fileServerClientFactory.js\";\nimport type EventsEngine from \"../../utils/events/eventsEngine.js\";\nimport type FileSystemService from \"../../utils/fileSystem/fileSystemService.js\";\nimport type DownloadLogger from \"../../downloader/downloadLogger.js\";\nimport type DownloadEventArgs from \"../../downloader/eventArgs/downloadEventArgs.js\";\nimport type { DownloadCommandE2eeData } from \"../../downloader/dtos/downloadCommand.js\";\nimport type { DownloadTrackingMetadataE2eeData } from \"../../downloader/dtos/downloadTrackingMetadata.js\";\nimport type CryptographyProvider from \"../../utils/crypto/cryptographyProvider.js\";\nimport type TransferDownloaderHealthMonitor from \"../healthMonitor/transferDownloaderHealthMonitor.js\";\n\nexport default class DownloaderCore {\n readonly #apiClient: ApiClient;\n readonly #options: DownloadOptions;\n readonly #chunkProviderFactory: ChunkStreamProviderFactory<string>;\n readonly #fileserverClientFactory: FileServerClientFactory;\n readonly #fileSystem: FileSystemService;\n readonly #eventsEngine: EventsEngine;\n readonly #logger: DownloadLogger;\n readonly #cryptography: CryptographyProvider;\n readonly #healthMonitor: TransferDownloaderHealthMonitor;\n\n #downloadId?: string;\n #transferId?: string;\n #trackId?: string;\n #filesDownloader: FilesDownloader | null = null;\n #downloadTracker: DownloadTracker | null = null;\n #downloadRegistrationMode: DownloadRegistrationMode = DownloadRegistrationMode.Transfer;\n\n constructor(options: DownloadOptions, logger: DownloadLogger, apiClient: ApiClient, chunkProviderFactory: ChunkStreamProviderFactory<string>, fileserverClientFactory: FileServerClientFactory, fileSystem: FileSystemService, eventsEngine: EventsEngine, cryptography: CryptographyProvider, healthMonitor: TransferDownloaderHealthMonitor) {\n this.#options = options;\n this.#logger = logger;\n this.#apiClient = apiClient;\n this.#chunkProviderFactory = chunkProviderFactory;\n this.#fileserverClientFactory = fileserverClientFactory;\n this.#fileSystem = fileSystem;\n this.#eventsEngine = eventsEngine;\n this.#cryptography = cryptography;\n this.#healthMonitor = healthMonitor;\n }\n\n get status(): TransferStatus | null {\n if (this.#filesDownloader === null)\n return null;\n\n return this.#filesDownloader.status;\n }\n\n get state(): DownloadEventArgs | null {\n if (this.#filesDownloader === null)\n return null;\n\n return this.#filesDownloader.getCurrentState(true);\n }\n\n get downloadId(): string | undefined {\n return this.#downloadId;\n }\n\n async pause(options: { interruptPendingChunks: boolean }): Promise<boolean> {\n this.#throwIfNotRunning();\n\n const paused = await new Promise<boolean>(resolve => {\n const pauseOptions = { ...options, pausedTrigger: resolve };\n this.#filesDownloader!.requestPause(pauseOptions);\n });\n\n if (paused)\n this.#healthMonitor.stop();\n\n if (paused)\n await this.#downloadTracker?.saveState();\n\n return paused;\n }\n\n resume(): boolean {\n this.#throwIfNotRunning();\n const result = this.#filesDownloader!.resume();\n if (result)\n this.#healthMonitor.start();\n return result;\n }\n\n abort(): boolean {\n this.#throwIfNotRunning();\n const aborted = this.#filesDownloader!.requestAbort();\n if (aborted)\n this.#healthMonitor.stop();\n return aborted;\n }\n\n configureThrottling(options: ThrottlingOptions): void {\n this.#eventsEngine.emit(TransferDownloadEvent.ConfigureThrottling, options);\n }\n\n async downloadAllFilesZipped(command: DownloadCommand): Promise<DownloadInfo> {\n this.#throwIfRunning();\n this.#validateOptions();\n\n this.#trackId = command.trackId;\n const transfer = await this.#getEffectiveTransfer(command, 0);\n\n this.#downloadRegistrationMode = DownloadRegistrationMode.Transfer;\n\n return this.#downloadZipped(transfer, command.e2eeDataOrTextKey);\n }\n\n async downloadAllFiles(command: DownloadCommand): Promise<DownloadInfo> {\n this.#throwIfRunning();\n this.#validateOptions();\n\n this.#trackId = command.trackId;\n const transfer = await this.#getEffectiveTransfer(command, -1);\n\n this.#downloadRegistrationMode = DownloadRegistrationMode.Transfer;\n\n return this.#download(transfer, transfer.files, command.e2eeDataOrTextKey);\n }\n\n async downloadSpecificFiles(command: DownloadFilesCommand) {\n this.#throwIfRunning();\n this.#validateOptions();\n\n this.#trackId = command.trackId;\n const transfer = await this.#getEffectiveTransfer(command, 0);\n\n this.#downloadRegistrationMode = typeof transfer.numberoffiles === `number` && command.files.length === transfer.numberoffiles\n ? DownloadRegistrationMode.Transfer\n : DownloadRegistrationMode.EverySingleFile;\n\n return this.#download(transfer, command.files, command.e2eeDataOrTextKey);\n }\n\n async restartFailedDownloader() {\n if (!this.#downloadTracker)\n throw new Error(`Download tracker hasn't been initialized`);\n if (!this.#options.downloadTrackingBaseFolder)\n throw new Error(`Download tracking base folder hasn't been populated`);\n if (this.#filesDownloader?.status !== TransferStatus.Failed && this.#filesDownloader?.status !== TransferStatus.Aborted)\n throw new Error(`Downloader has to be in Failed or Aborted stated`);\n\n const downloadMetadata = await DownloadTracker.restoreDownloadMetadata(this.#downloadId!, this.#options.downloadTrackingBaseFolder, this.#fileSystem);\n const downloadCommandE2eeData = this.createDownloadCommandE2eeDataFromMetadata(downloadMetadata.e2eeData);\n const restoredOptions = await this.#downloadTracker.restoreDownloadOptions();\n\n // keep restart behavior deterministic by reusing the exact options used in the original run\n this.#options.downloadFolder = restoredOptions.downloadFolder;\n this.#options.downloadTrackingBaseFolder = restoredOptions.downloadTrackingBaseFolder;\n this.#options.maxChunkSize = restoredOptions.maxChunkSize;\n this.#options.checkChunksMd5 = restoredOptions.checkChunksMd5;\n\n // find out from disk the entire list of files, which were in progress and how many chunks have completed already\n const downloaderState = await this.#downloadTracker.restoreDownloaderState();\n\n // restart from where we left off\n const runningInfo = this.#run(downloaderState.files, downloadCommandE2eeData, downloadMetadata.region, downloaderState.state);\n runningInfo.then((di: DownloadInfo) => {\n this.#eventsEngine.emit(TransferDownloadEvent.RecoveredInterruptedDownload, di.initialState);\n });\n return runningInfo;\n }\n\n async recoverInterruptedDownload(downloadId: string): Promise<DownloadInfo> {\n this.#logger.applyDownloadId(downloadId);\n this.#logger.logInfo(`Download recovery requested for ${downloadId}`);\n\n this.#throwIfRunning();\n\n if (!this.#options.downloadTrackingBaseFolder)\n throw new DownloadError(`The download tracking folder is not specified for ${downloadId}`, undefined, DownloadErrorCode.TrackingNotAvailable);\n\n this.#downloadId = downloadId;\n this.#transferId = downloadId.split(`_`)[0]!;\n this.#logger.applyTransferId(this.#transferId);\n\n const downloadMetadata = await DownloadTracker.restoreDownloadMetadata(this.#downloadId!, this.#options.downloadTrackingBaseFolder, this.#fileSystem);\n\n const downloadCommandE2eeData = this.createDownloadCommandE2eeDataFromMetadata(downloadMetadata.e2eeData);\n\n this.#downloadTracker = new DownloadTracker(this.#downloadId!, this.#options, this.#fileSystem, this.#eventsEngine, downloadCommandE2eeData, downloadMetadata.region);\n const restoredOptions = await this.#downloadTracker.restoreDownloadOptions();\n\n // just make sure we are running the same config as when the download was last dumped to disk - otherwise things could get out of sync\n this.#options.downloadFolder = restoredOptions.downloadFolder;\n this.#options.downloadTrackingBaseFolder = restoredOptions.downloadTrackingBaseFolder;\n this.#options.maxChunkSize = restoredOptions.maxChunkSize;\n this.#options.checkChunksMd5 = restoredOptions.checkChunksMd5;\n\n // find out from disk the entire list of files, which were in progress and how many chunks have completed already\n const downloaderState = await this.#downloadTracker.restoreDownloaderState();\n\n // restart from where we left off\n const runningInfo = this.#run(downloaderState.files, downloadCommandE2eeData, downloadMetadata.region, downloaderState.state);\n runningInfo.then((di: DownloadInfo) => {\n this.#eventsEngine.emit(TransferDownloadEvent.RecoveredInterruptedDownload, di.initialState);\n });\n return runningInfo;\n }\n\n private createDownloadCommandE2eeDataFromMetadata(metadataE2eeData?: DownloadTrackingMetadataE2eeData): DownloadCommandE2eeData | undefined {\n if (!metadataE2eeData)\n return undefined;\n\n return {\n iv: Buffer.from(metadataE2eeData.ivAsHex, `hex`),\n key: Buffer.from(metadataE2eeData.keyAsHex, `hex`),\n };\n }\n\n async cleanupDownload(downloadId: string | null = null) {\n const cleanupDownloadId = downloadId ?? this.#downloadId;\n\n if (!cleanupDownloadId)\n throw new DownloadError(`Cannot cleanup unknown download`);\n\n if (!this.#options.downloadTrackingBaseFolder)\n throw new DownloadError(`The download tracking folder is not specified for download ${cleanupDownloadId}`);\n\n this.#logger.applyDownloadId(cleanupDownloadId);\n\n await DownloadTracker.removeDownloadTrackingFolder(cleanupDownloadId, this.#options.downloadTrackingBaseFolder, this.#fileSystem);\n }\n\n async #downloadZipped(transfer: GetTransferResponse, e2eeDataOrTextKey?: DownloadCommandE2eeData | string): Promise<DownloadInfo> {\n const fsClient = this.#fileserverClientFactory.createFileServerTcpDownloadClient(transfer.compressedfileurl!, null, null, transfer.id, ``, this.#options);\n const metaData = await fsClient.getCompressedFileMetadata();\n\n // for now fileservers are not able to validate md5 for chunks of the zip\n // note: this should be rather handled in files downloader logic\n this.#options.checkChunksMd5 = false;\n\n const zipFile: TransferFileDto = {\n downloadurl: transfer.compressedfileurl!,\n fileid: UrlUtil.getQueryStringFromUrl(transfer.compressedfileurl!).compressedfilekey!,\n filename: metaData.fileName,\n filesize: metaData.fileSize,\n compressed: true,\n };\n\n return this.#download(transfer, [zipFile], e2eeDataOrTextKey);\n }\n\n async #download(transfer: GetTransferResponse, files: Array<TransferFileDto>, e2eeDataOrTextKey?: DownloadCommandE2eeData | string): Promise<DownloadInfo> {\n this.#transferId = transfer.id;\n this.#downloadId = this.#generateDownloadId();\n\n this.#logger.applyDownloadId(this.#downloadId);\n this.#logger.applyTransferId(this.#transferId);\n\n if (this.#options.downloadFolderTemplate)\n this.#options.downloadFolder = DownloadFolderResolver.prepareDownloadFolder(this.#options.downloadFolderTemplate!, transfer);\n\n const e2eeData = await this.#getE2eeDataOrThrow(transfer, e2eeDataOrTextKey);\n\n const downloadFiles = this.#mapTransferFilesDtosToFileInfos(files);\n const preparer = new FilesPreparer(this.#options.downloadFolder!, this.#options.maxChunkSize, this.#fileSystem);\n preparer.prepareFiles(downloadFiles);\n\n return this.#run(downloadFiles, e2eeData, transfer.region);\n }\n\n async #getE2eeDataOrThrow(transfer: GetTransferResponse, e2eeDataOrTextKey?: string | DownloadCommandE2eeData): Promise<DownloadCommandE2eeData | undefined> {\n if (!transfer.e2ee)\n return undefined;\n\n if (!e2eeDataOrTextKey)\n throw new DownloadError(`No E2EE data or text key available to decrypt the transfer`);\n\n if (typeof e2eeDataOrTextKey === `object`)\n return e2eeDataOrTextKey;\n\n if (!transfer.e2ee_keyhash)\n throw new DownloadError(`No E2EE db data available to decrypt the transfer`);\n\n const e2eeDbDataBuffer = Buffer.from(transfer.e2ee_keyhash, `hex`);\n\n const iv = e2eeDbDataBuffer.subarray(0, 16);\n const salt = e2eeDbDataBuffer.subarray(16, 32);\n const key = await this.#cryptography.deriveKey(e2eeDataOrTextKey, salt);\n\n return { iv, key: Buffer.from(key) };\n }\n\n async #run(downloadFiles: Array<DownloadFileInfo>, e2eeData?: DownloadCommandE2eeData, region?: string, restoredState?: DownloaderRestoredState): Promise<DownloadInfo> {\n if (!this.#transferId)\n throw new DownloadError(`This downloader has no transfer ID specified`);\n\n if (!this.#downloadId)\n throw new DownloadError(`This downloader has no download ID initialized`);\n\n this.#filesDownloader = new FilesDownloader(\n this.#logger,\n this.#transferId!,\n this.#trackId,\n this.#downloadId!,\n region,\n downloadFiles,\n restoredState,\n this.#fileSystem,\n new TransferConcurrencyController(this.#options.parallelChunks!),\n this.#eventsEngine,\n this.#cryptography,\n this.#options,\n this.#apiClient,\n this.#fileserverClientFactory,\n this.#chunkProviderFactory,\n this.#downloadRegistrationMode,\n e2eeData,\n );\n\n if (this.#options.downloadTrackingBaseFolder) {\n if (!this.#downloadTracker)\n this.#downloadTracker = new DownloadTracker(this.#downloadId!, this.#options, this.#fileSystem, this.#eventsEngine, e2eeData, region);\n\n await this.#downloadTracker.start(downloadFiles);\n }\n\n const initialState = this.#filesDownloader.getCurrentState(false);\n\n this.#healthMonitor.start();\n\n const completion = this.#filesDownloader.start();\n\n completion.finally(() => {\n this.#healthMonitor.stop();\n });\n\n return { downloadId: this.#downloadId!, transferId: this.#transferId!, completion, initialState };\n }\n\n async #getEffectiveTransfer(command: DownloadCommand, fileslimit: number) {\n let effectiveTransfer: GetTransferResponse | null = null;\n\n if (command.transfer)\n effectiveTransfer = await this.#fetchTransfer(command.transfer, undefined, command.password, fileslimit, command.checkLogintoken);\n\n if (!effectiveTransfer) {\n // still don't know the transfer - must use track ID to fetch it\n if (!this.#trackId)\n throw new DownloadError(`Could not resolve transfer to be downloaded - missing transfer info and missing track id`);\n\n effectiveTransfer = await this.#fetchTransfer(undefined, this.#trackId!, command.password, fileslimit, command.checkLogintoken);\n }\n\n if (!effectiveTransfer)\n throw new DownloadError(`Could not resolve transfer to be downloaded - transfer=${command.transfer} track=${command.trackId}`);\n\n if (effectiveTransfer.isexpired === true)\n throw new DownloadError(`Transfer is expired transfer=${effectiveTransfer.id}`, undefined, DownloadErrorCode.TransferExpired);\n\n if (effectiveTransfer.blockdownloads === true)\n throw new DownloadError(`Transfer has downloads disabled transfer=${effectiveTransfer.id}`, undefined, DownloadErrorCode.DownloadsDisabled);\n\n if (fileslimit !== 0 && (!effectiveTransfer.files || effectiveTransfer.files.length === 0))\n throw new DownloadError(`Transfer has no files to download transfer=${effectiveTransfer.id}`, undefined, DownloadErrorCode.NoFilesToDownload);\n\n return effectiveTransfer;\n }\n\n async #fetchTransfer(\n transferid?: string | undefined,\n trackid?: string | undefined,\n password?: string | undefined,\n fileslimit?: number | undefined,\n checkLogintoken?: boolean,\n ): Promise<GetTransferResponse> {\n try {\n // specifying which file properties we want to get from API\n // reason: api adds lots of other unnecessary properties - downloader doesn't need them and if a transfer has lots of files (some can be up to 100k)\n // it makes the response much smaller (up to 80% size reduction)\n const request: GetTransferRequest = { fileslimit, transferid, trackid, password, fprops: [`fileid`, `filesize`, `filename`, `downloadurl`], checkLogintoken };\n return await this.#apiClient.getTransfer(request);\n }\n catch (error) {\n const code = this.#apiErrorToDownloadErrorCode(error);\n const downloadError = new DownloadError(`Could not fetch transfer by id=${transferid ?? `---`} track=${trackid ?? `---`}`, { cause: error as Error }, code);\n throw downloadError;\n }\n }\n\n #apiErrorToDownloadErrorCode(error: unknown) {\n if (error instanceof ApiError) {\n switch (error.httpStatus) {\n case 401: return DownloadErrorCode.InvalidTransferPassword;\n case 404: return DownloadErrorCode.TransferNotFound;\n case 409: return DownloadErrorCode.TransferInvalidState;\n default: break;\n }\n }\n return undefined;\n }\n\n #throwIfRunning() {\n if (this.#filesDownloader)\n throw new DownloadError(`This instance of downloader is already in use. Please create a new one.`);\n }\n\n #throwIfNotRunning() {\n if (!this.#filesDownloader)\n throw new DownloadError(`This instance of downloader is not running yet. Please start the download first.`);\n }\n\n #generateDownloadId(): string {\n return `${this.#transferId}_${this.#cryptography.generateRandomString(10)}`;\n }\n\n #mapTransferFilesDtosToFileInfos(files: Array<TransferFileDto>) {\n return files.map(file => new DownloadFileInfo(\n file.fileid,\n file.downloadurl,\n file.filename,\n file.filesize,\n ));\n }\n\n #validateOptions() {\n if (!this.#options.downloadFolder && !this.#options.downloadFolderTemplate)\n throw new DownloadError(`downloadFolder OR downloadFolderTemplate is required`);\n\n if (this.#options.maxChunkSize !== null && this.#options.maxChunkSize! <= 0)\n throw new DownloadError(`maxChunkSize must be greater than 0. Provide \"null\" if you want to download without chunking.`);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"downloaderCore.js","sourceRoot":"","sources":["../../../../src/client/downloader/downloaderCore.ts"],"names":[],"mappings":"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","sourcesContent":["import ApiError from \"../../utils/api/apiError.js\";\nimport DownloadErrorCode from \"../../downloader/dtos/downloadErrorCode.js\";\nimport TransferDownloadEvent from \"../../downloader/dtos/downloadEvent.js\";\nimport FilesDownloader from \"../../downloader/filesDownloader.js\";\nimport DownloadFileInfo from \"../../downloader/dtos/downloadFileInfo.js\";\nimport TransferConcurrencyController from \"../../utils/concurrencyController/transferConcurrencyController.js\";\nimport DownloadError from '../../downloader/dtos/downloadError.js';\nimport UrlUtil from \"../../utils/api/urlUtil.js\";\nimport DownloadTracker from \"../../downloader/downloadTracker.js\";\nimport FilesPreparer from \"../../downloader/filesPreparer.js\";\nimport DownloadFolderResolver from \"../../downloader/downloadFolderResolver.js\";\nimport DownloadRegistrationMode from \"../../downloader/dtos/downloadRegistrationMode.js\";\n\nimport type DownloadOptions from \"../../downloader/downloadOptions.js\";\nimport type ApiClient from \"../../utils/api/apiClient.js\";\nimport type ThrottlingOptions from '../../utils/networking/throttlingOptions.js';\nimport TransferStatus from '../../utils/types/transferStatus.js';\nimport type GetTransferResponse from \"../../utils/api/dtos/getTransferResponse.js\";\nimport type DownloadInfo from \"../../downloader/dtos/downloadInfo.js\";\nimport type TransferFileDto from \"../../utils/api/dtos/transferFileDto.js\";\nimport type GetTransferRequest from \"../../utils/api/dtos/getTransferRequest.js\";\nimport type DownloadCommand from \"../../downloader/dtos/downloadCommand.js\";\nimport type DownloadFilesCommand from \"../../downloader/dtos/downloadFilesCommand.js\";\nimport type DownloaderRestoredState from \"../../downloader/dtos/downloaderRestoredState.js\";\nimport type ChunkStreamProviderFactory from \"../../utils/fileSystem/chunkStreamProviderFactory.js\";\nimport type FileServerClientFactory from \"../../utils/api/fileServerClientFactory.js\";\nimport type EventsEngine from \"../../utils/events/eventsEngine.js\";\nimport type FileSystemService from \"../../utils/fileSystem/fileSystemService.js\";\nimport type DownloadLogger from \"../../downloader/downloadLogger.js\";\nimport type DownloadEventArgs from \"../../downloader/eventArgs/downloadEventArgs.js\";\nimport type { DownloadCommandE2eeData } from \"../../downloader/dtos/downloadCommand.js\";\nimport type { DownloadTrackingMetadataE2eeData } from \"../../downloader/dtos/downloadTrackingMetadata.js\";\nimport type CryptographyProvider from \"../../utils/crypto/cryptographyProvider.js\";\nimport type TransferDownloaderHealthMonitor from \"../healthMonitor/transferDownloaderHealthMonitor.js\";\n\nexport default class DownloaderCore {\n readonly #apiClient: ApiClient;\n readonly #options: DownloadOptions;\n readonly #chunkProviderFactory: ChunkStreamProviderFactory<string>;\n readonly #fileserverClientFactory: FileServerClientFactory;\n readonly #fileSystem: FileSystemService;\n readonly #eventsEngine: EventsEngine;\n readonly #logger: DownloadLogger;\n readonly #cryptography: CryptographyProvider;\n readonly #healthMonitor: TransferDownloaderHealthMonitor;\n\n #downloadId?: string;\n #transferId?: string;\n #trackId?: string;\n #filesDownloader: FilesDownloader | null = null;\n #downloadTracker: DownloadTracker | null = null;\n #downloadRegistrationMode: DownloadRegistrationMode = DownloadRegistrationMode.Transfer;\n\n constructor(options: DownloadOptions, logger: DownloadLogger, apiClient: ApiClient, chunkProviderFactory: ChunkStreamProviderFactory<string>, fileserverClientFactory: FileServerClientFactory, fileSystem: FileSystemService, eventsEngine: EventsEngine, cryptography: CryptographyProvider, healthMonitor: TransferDownloaderHealthMonitor) {\n this.#options = options;\n this.#logger = logger;\n this.#apiClient = apiClient;\n this.#chunkProviderFactory = chunkProviderFactory;\n this.#fileserverClientFactory = fileserverClientFactory;\n this.#fileSystem = fileSystem;\n this.#eventsEngine = eventsEngine;\n this.#cryptography = cryptography;\n this.#healthMonitor = healthMonitor;\n }\n\n get status(): TransferStatus | null {\n if (this.#filesDownloader === null)\n return null;\n\n return this.#filesDownloader.status;\n }\n\n get state(): DownloadEventArgs | null {\n if (this.#filesDownloader === null)\n return null;\n\n return this.#filesDownloader.getCurrentState(true);\n }\n\n get downloadId(): string | undefined {\n return this.#downloadId;\n }\n\n async pause(options: { interruptPendingChunks: boolean }): Promise<boolean> {\n this.#throwIfNotRunning();\n\n const paused = await new Promise<boolean>(resolve => {\n const pauseOptions = { ...options, pausedTrigger: resolve };\n this.#filesDownloader!.requestPause(pauseOptions);\n });\n\n if (paused)\n this.#healthMonitor.stop();\n\n if (paused)\n await this.#downloadTracker?.saveState();\n\n return paused;\n }\n\n resume(): boolean {\n this.#throwIfNotRunning();\n const result = this.#filesDownloader!.resume();\n if (result)\n this.#healthMonitor.start();\n return result;\n }\n\n abort(): boolean {\n this.#throwIfNotRunning();\n const aborted = this.#filesDownloader!.requestAbort();\n if (aborted)\n this.#healthMonitor.stop();\n return aborted;\n }\n\n configureThrottling(options: ThrottlingOptions): void {\n this.#eventsEngine.emit(TransferDownloadEvent.ConfigureThrottling, options);\n }\n\n async downloadAllFilesZipped(command: DownloadCommand): Promise<DownloadInfo> {\n this.#throwIfRunning();\n this.#validateOptions();\n\n this.#trackId = command.trackId;\n const transfer = await this.#getEffectiveTransfer(command, 0);\n\n this.#downloadRegistrationMode = DownloadRegistrationMode.Transfer;\n\n return this.#downloadZipped(transfer, command.e2eeDataOrTextKey);\n }\n\n async downloadAllFiles(command: DownloadCommand): Promise<DownloadInfo> {\n this.#throwIfRunning();\n this.#validateOptions();\n\n this.#trackId = command.trackId;\n const transfer = await this.#getEffectiveTransfer(command, -1);\n\n this.#downloadRegistrationMode = DownloadRegistrationMode.Transfer;\n\n return this.#download(transfer, transfer.files, command.e2eeDataOrTextKey);\n }\n\n async downloadSpecificFiles(command: DownloadFilesCommand) {\n this.#throwIfRunning();\n this.#validateOptions();\n\n this.#trackId = command.trackId;\n const transfer = await this.#getEffectiveTransfer(command, 0);\n\n this.#downloadRegistrationMode = typeof transfer.numberoffiles === `number` && command.files.length === transfer.numberoffiles\n ? DownloadRegistrationMode.Transfer\n : DownloadRegistrationMode.EverySingleFile;\n\n return this.#download(transfer, command.files, command.e2eeDataOrTextKey);\n }\n\n async restartFailedDownloader() {\n if (!this.#downloadTracker)\n throw new Error(`Download tracker hasn't been initialized`);\n if (!this.#options.downloadTrackingBaseFolder)\n throw new Error(`Download tracking base folder hasn't been populated`);\n if (this.#filesDownloader?.status !== TransferStatus.Failed && this.#filesDownloader?.status !== TransferStatus.Aborted)\n throw new Error(`Downloader has to be in Failed or Aborted stated`);\n\n const downloadMetadata = await DownloadTracker.restoreDownloadMetadata(this.#downloadId!, this.#options.downloadTrackingBaseFolder, this.#fileSystem);\n const downloadCommandE2eeData = this.createDownloadCommandE2eeDataFromMetadata(downloadMetadata.e2eeData);\n const restoredOptions = await this.#downloadTracker.restoreDownloadOptions();\n\n // keep restart behavior deterministic by reusing the exact options used in the original run\n this.#options.downloadFolder = restoredOptions.downloadFolder;\n this.#options.downloadTrackingBaseFolder = restoredOptions.downloadTrackingBaseFolder;\n this.#options.maxChunkSize = restoredOptions.maxChunkSize;\n this.#options.checkChunksMd5 = restoredOptions.checkChunksMd5;\n\n // find out from disk the entire list of files, which were in progress and how many chunks have completed already\n const downloaderState = await this.#downloadTracker.restoreDownloaderState();\n\n // restart from where we left off\n const runningInfo = this.#run(downloaderState.files, downloadCommandE2eeData, downloadMetadata.region, downloaderState.state);\n runningInfo.then((di: DownloadInfo) => {\n this.#eventsEngine.emit(TransferDownloadEvent.RecoveredInterruptedDownload, di.initialState);\n });\n return runningInfo;\n }\n\n async recoverInterruptedDownload(downloadId: string): Promise<DownloadInfo> {\n this.#logger.applyDownloadId(downloadId);\n this.#logger.logInfo(`Download recovery requested for ${downloadId}`);\n\n this.#throwIfRunning();\n\n if (!this.#options.downloadTrackingBaseFolder)\n throw new DownloadError(`The download tracking folder is not specified for ${downloadId}`, undefined, DownloadErrorCode.TrackingNotAvailable);\n\n this.#downloadId = downloadId;\n this.#transferId = downloadId.split(`_`)[0]!;\n this.#logger.applyTransferId(this.#transferId);\n\n const downloadMetadata = await DownloadTracker.restoreDownloadMetadata(this.#downloadId!, this.#options.downloadTrackingBaseFolder, this.#fileSystem);\n\n const downloadCommandE2eeData = this.createDownloadCommandE2eeDataFromMetadata(downloadMetadata.e2eeData);\n\n this.#downloadTracker = new DownloadTracker(this.#downloadId!, this.#options, this.#fileSystem, this.#eventsEngine, downloadCommandE2eeData, downloadMetadata.region);\n const restoredOptions = await this.#downloadTracker.restoreDownloadOptions();\n\n // just make sure we are running the same config as when the download was last dumped to disk - otherwise things could get out of sync\n this.#options.downloadFolder = restoredOptions.downloadFolder;\n this.#options.downloadTrackingBaseFolder = restoredOptions.downloadTrackingBaseFolder;\n this.#options.maxChunkSize = restoredOptions.maxChunkSize;\n this.#options.checkChunksMd5 = restoredOptions.checkChunksMd5;\n\n // find out from disk the entire list of files, which were in progress and how many chunks have completed already\n const downloaderState = await this.#downloadTracker.restoreDownloaderState();\n\n // restart from where we left off\n const runningInfo = this.#run(downloaderState.files, downloadCommandE2eeData, downloadMetadata.region, downloaderState.state);\n runningInfo.then((di: DownloadInfo) => {\n this.#eventsEngine.emit(TransferDownloadEvent.RecoveredInterruptedDownload, di.initialState);\n });\n return runningInfo;\n }\n\n private createDownloadCommandE2eeDataFromMetadata(metadataE2eeData?: DownloadTrackingMetadataE2eeData): DownloadCommandE2eeData | undefined {\n if (!metadataE2eeData)\n return undefined;\n\n return {\n iv: Buffer.from(metadataE2eeData.ivAsHex, `hex`),\n key: Buffer.from(metadataE2eeData.keyAsHex, `hex`),\n };\n }\n\n async cleanupDownload(downloadId: string | null = null) {\n const cleanupDownloadId = downloadId ?? this.#downloadId;\n\n if (!cleanupDownloadId)\n throw new DownloadError(`Cannot cleanup unknown download`);\n\n if (!this.#options.downloadTrackingBaseFolder)\n throw new DownloadError(`The download tracking folder is not specified for download ${cleanupDownloadId}`);\n\n this.#logger.applyDownloadId(cleanupDownloadId);\n\n await DownloadTracker.removeDownloadTrackingFolder(cleanupDownloadId, this.#options.downloadTrackingBaseFolder, this.#fileSystem);\n }\n\n async #downloadZipped(transfer: GetTransferResponse, e2eeDataOrTextKey?: DownloadCommandE2eeData | string): Promise<DownloadInfo> {\n const fsClient = this.#fileserverClientFactory.createFileServerDownloadClient(transfer.compressedfileurl!, null, null, transfer.id, ``, this.#options);\n const metaData = await fsClient.getCompressedFileMetadata();\n\n // for now fileservers are not able to validate md5 for chunks of the zip\n // note: this should be rather handled in files downloader logic\n this.#options.checkChunksMd5 = false;\n\n const zipFile: TransferFileDto = {\n downloadurl: transfer.compressedfileurl!,\n fileid: UrlUtil.getQueryStringFromUrl(transfer.compressedfileurl!).compressedfilekey!,\n filename: metaData.fileName,\n filesize: metaData.fileSize,\n compressed: true,\n };\n\n return this.#download(transfer, [zipFile], e2eeDataOrTextKey);\n }\n\n async #download(transfer: GetTransferResponse, files: Array<TransferFileDto>, e2eeDataOrTextKey?: DownloadCommandE2eeData | string): Promise<DownloadInfo> {\n this.#transferId = transfer.id;\n this.#downloadId = this.#generateDownloadId();\n\n this.#logger.applyDownloadId(this.#downloadId);\n this.#logger.applyTransferId(this.#transferId);\n\n if (this.#options.downloadFolderTemplate)\n this.#options.downloadFolder = DownloadFolderResolver.prepareDownloadFolder(this.#options.downloadFolderTemplate!, transfer);\n\n const e2eeData = await this.#getE2eeDataOrThrow(transfer, e2eeDataOrTextKey);\n\n const downloadFiles = this.#mapTransferFilesDtosToFileInfos(files);\n const preparer = new FilesPreparer(this.#options.downloadFolder!, this.#options.maxChunkSize, this.#fileSystem);\n preparer.prepareFiles(downloadFiles);\n\n return this.#run(downloadFiles, e2eeData, transfer.region);\n }\n\n async #getE2eeDataOrThrow(transfer: GetTransferResponse, e2eeDataOrTextKey?: string | DownloadCommandE2eeData): Promise<DownloadCommandE2eeData | undefined> {\n if (!transfer.e2ee)\n return undefined;\n\n if (!e2eeDataOrTextKey)\n throw new DownloadError(`No E2EE data or text key available to decrypt the transfer`);\n\n if (typeof e2eeDataOrTextKey === `object`)\n return e2eeDataOrTextKey;\n\n if (!transfer.e2ee_keyhash)\n throw new DownloadError(`No E2EE db data available to decrypt the transfer`);\n\n const e2eeDbDataBuffer = Buffer.from(transfer.e2ee_keyhash, `hex`);\n\n const iv = e2eeDbDataBuffer.subarray(0, 16);\n const salt = e2eeDbDataBuffer.subarray(16, 32);\n const key = await this.#cryptography.deriveKey(e2eeDataOrTextKey, salt);\n\n return { iv, key: Buffer.from(key) };\n }\n\n async #run(downloadFiles: Array<DownloadFileInfo>, e2eeData?: DownloadCommandE2eeData, region?: string, restoredState?: DownloaderRestoredState): Promise<DownloadInfo> {\n if (!this.#transferId)\n throw new DownloadError(`This downloader has no transfer ID specified`);\n\n if (!this.#downloadId)\n throw new DownloadError(`This downloader has no download ID initialized`);\n\n this.#filesDownloader = new FilesDownloader(\n this.#logger,\n this.#transferId!,\n this.#trackId,\n this.#downloadId!,\n region,\n downloadFiles,\n restoredState,\n this.#fileSystem,\n new TransferConcurrencyController(this.#options.parallelChunks!),\n this.#eventsEngine,\n this.#cryptography,\n this.#options,\n this.#apiClient,\n this.#fileserverClientFactory,\n this.#chunkProviderFactory,\n this.#downloadRegistrationMode,\n e2eeData,\n );\n\n if (this.#options.downloadTrackingBaseFolder) {\n if (!this.#downloadTracker)\n this.#downloadTracker = new DownloadTracker(this.#downloadId!, this.#options, this.#fileSystem, this.#eventsEngine, e2eeData, region);\n\n await this.#downloadTracker.start(downloadFiles);\n }\n\n const initialState = this.#filesDownloader.getCurrentState(false);\n\n this.#healthMonitor.start();\n\n const completion = this.#filesDownloader.start();\n\n completion.finally(() => {\n this.#healthMonitor.stop();\n });\n\n return { downloadId: this.#downloadId!, transferId: this.#transferId!, completion, initialState };\n }\n\n async #getEffectiveTransfer(command: DownloadCommand, fileslimit: number) {\n let effectiveTransfer: GetTransferResponse | null = null;\n\n if (command.transfer)\n effectiveTransfer = await this.#fetchTransfer(command.transfer, undefined, command.password, fileslimit, command.checkLogintoken);\n\n if (!effectiveTransfer) {\n // still don't know the transfer - must use track ID to fetch it\n if (!this.#trackId)\n throw new DownloadError(`Could not resolve transfer to be downloaded - missing transfer info and missing track id`);\n\n effectiveTransfer = await this.#fetchTransfer(undefined, this.#trackId!, command.password, fileslimit, command.checkLogintoken);\n }\n\n if (!effectiveTransfer)\n throw new DownloadError(`Could not resolve transfer to be downloaded - transfer=${command.transfer} track=${command.trackId}`);\n\n if (effectiveTransfer.isexpired === true)\n throw new DownloadError(`Transfer is expired transfer=${effectiveTransfer.id}`, undefined, DownloadErrorCode.TransferExpired);\n\n if (effectiveTransfer.blockdownloads === true)\n throw new DownloadError(`Transfer has downloads disabled transfer=${effectiveTransfer.id}`, undefined, DownloadErrorCode.DownloadsDisabled);\n\n if (fileslimit !== 0 && (!effectiveTransfer.files || effectiveTransfer.files.length === 0))\n throw new DownloadError(`Transfer has no files to download transfer=${effectiveTransfer.id}`, undefined, DownloadErrorCode.NoFilesToDownload);\n\n return effectiveTransfer;\n }\n\n async #fetchTransfer(\n transferid?: string | undefined,\n trackid?: string | undefined,\n password?: string | undefined,\n fileslimit?: number | undefined,\n checkLogintoken?: boolean,\n ): Promise<GetTransferResponse> {\n try {\n // specifying which file properties we want to get from API\n // reason: api adds lots of other unnecessary properties - downloader doesn't need them and if a transfer has lots of files (some can be up to 100k)\n // it makes the response much smaller (up to 80% size reduction)\n const request: GetTransferRequest = { fileslimit, transferid, trackid, password, fprops: [`fileid`, `filesize`, `filename`, `downloadurl`], checkLogintoken };\n return await this.#apiClient.getTransfer(request);\n }\n catch (error) {\n const code = this.#apiErrorToDownloadErrorCode(error);\n const downloadError = new DownloadError(`Could not fetch transfer by id=${transferid ?? `---`} track=${trackid ?? `---`}`, { cause: error as Error }, code);\n throw downloadError;\n }\n }\n\n #apiErrorToDownloadErrorCode(error: unknown) {\n if (error instanceof ApiError) {\n switch (error.httpStatus) {\n case 401: return DownloadErrorCode.InvalidTransferPassword;\n case 404: return DownloadErrorCode.TransferNotFound;\n case 409: return DownloadErrorCode.TransferInvalidState;\n default: break;\n }\n }\n return undefined;\n }\n\n #throwIfRunning() {\n if (this.#filesDownloader)\n throw new DownloadError(`This instance of downloader is already in use. Please create a new one.`);\n }\n\n #throwIfNotRunning() {\n if (!this.#filesDownloader)\n throw new DownloadError(`This instance of downloader is not running yet. Please start the download first.`);\n }\n\n #generateDownloadId(): string {\n return `${this.#transferId}_${this.#cryptography.generateRandomString(10)}`;\n }\n\n #mapTransferFilesDtosToFileInfos(files: Array<TransferFileDto>) {\n return files.map(file => new DownloadFileInfo(\n file.fileid,\n file.downloadurl,\n file.filename,\n file.filesize,\n ));\n }\n\n #validateOptions() {\n if (!this.#options.downloadFolder && !this.#options.downloadFolderTemplate)\n throw new DownloadError(`downloadFolder OR downloadFolderTemplate is required`);\n\n if (this.#options.maxChunkSize !== null && this.#options.maxChunkSize! <= 0)\n throw new DownloadError(`maxChunkSize must be greater than 0. Provide \"null\" if you want to download without chunking.`);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeTransferDownloader.d.ts","sourceRoot":"","sources":["../../../../../src/client/downloader/node/nodeTransferDownloader.ts"],"names":[],"mappings":"AAGA,OAAO,eAAe,MAAM,wCAAwC,CAAC;AAErE,OAAO,qBAAqB,MAAM,2CAA2C,CAAC;AAQ9E,OAAO,+BAA+B,MAAM,wDAAwD,CAAC;AAMrG,OAAO,KAAK,oBAAoB,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,kBAAkB,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,iBAAiB,MAAM,oDAAoD,CAAC;AACxF,OAAO,KAAK,qBAAqB,MAAM,wDAAwD,CAAC;AAChG,OAAO,KAAK,2BAA2B,MAAM,8DAA8D,CAAC;AAC5G,OAAO,KAAK,cAAc,MAAM,wCAAwC,CAAC;AACzE,OAAO,KAAK,sBAAsB,MAAM,yDAAyD,CAAC;AAClG,OAAO,KAAK,4BAA4B,MAAM,+DAA+D,CAAC;AAC9G,OAAO,KAAK,0BAA0B,MAAM,6DAA6D,CAAC;AAC1G,OAAO,KAAK,sBAAsB,MAAM,yDAAyD,CAAC;AAClG,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAC;AAClD,OAAO,KAAK,YAAY,MAAM,0CAA0C,CAAC;AACzE,OAAO,KAAK,eAAe,MAAM,6CAA6C,CAAC;AAC/E,OAAO,KAAK,oBAAoB,MAAM,kDAAkD,CAAC;AACzF,OAAO,KAAK,+BAA+B,MAAM,kEAAkE,CAAC;AACpH,OAAO,KAAK,mCAAmC,MAAM,sEAAsE,CAAC;AAE5H,MAAM,CAAC,OAAO,OAAO,sBAAuB,YAAW,kBAAkB;;gBAUzD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;IAyBrF,OAAO,CAAC,8BAA8B;IA2BtC,OAAO,CAAC,+BAA+B;IAgBvC,OAAO,CAAC,yBAAyB;
|
|
1
|
+
{"version":3,"file":"nodeTransferDownloader.d.ts","sourceRoot":"","sources":["../../../../../src/client/downloader/node/nodeTransferDownloader.ts"],"names":[],"mappings":"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"}
|
|
@@ -72,7 +72,6 @@ export default class NodeTransferDownloader {
|
|
|
72
72
|
}
|
|
73
73
|
addTransferEventListeners() {
|
|
74
74
|
this.addEventListener(TransferDownloadEvent.DownloadStarted, args => {
|
|
75
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
76
75
|
const { files, ...downloadInfoWithoutFiles } = args;
|
|
77
76
|
this.#logger.logInfo(`Download started`, downloadInfoWithoutFiles);
|
|
78
77
|
});
|
|
@@ -82,7 +81,6 @@ export default class NodeTransferDownloader {
|
|
|
82
81
|
this.addEventListener(TransferDownloadEvent.Paused, args => this.#logger.logInfo(`Download paused ${args.transferId} / ${args.downloadId} / interrupt:${args.interruptPendingChunks}`));
|
|
83
82
|
this.addEventListener(TransferDownloadEvent.RecoveredInterruptedDownload, args => this.#logger.logInfo(`Download recovered ${args.transferId} / ${args.downloadId}`));
|
|
84
83
|
this.addEventListener(TransferDownloadEvent.DownloadCompleted, args => {
|
|
85
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
86
84
|
const { files, ...downloadInfoWithoutFiles } = args;
|
|
87
85
|
this.#logger.logInfo(`Download completed`, downloadInfoWithoutFiles);
|
|
88
86
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeTransferDownloader.js","sourceRoot":"","sources":["../../../../../src/client/downloader/node/nodeTransferDownloader.ts"],"names":[],"mappings":"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","sourcesContent":["import { v4 as guid } from 'uuid';\nimport throttle from \"lodash.throttle\";\n\nimport DownloadOptions from \"../../../downloader/downloadOptions.js\";\nimport DownloaderCore from \"../downloaderCore.js\";\nimport TransferDownloadEvent from \"../../../downloader/dtos/downloadEvent.js\";\nimport NodeFileServerClientFactory from \"../../../utils/api/node/nodeFileServerClientFactory.js\";\nimport NodeChunkStreamProviderFactory from \"../../../utils/fileSystem/node/nodeChunkStreamProviderFactory.js\";\nimport NodeFileSystemService from \"../../../utils/fileSystem/node/nodeFileSystemService.js\";\nimport NodeApiClient from \"../../../utils/api/node/nodeApiClient.js\";\nimport NodeEventsEngine from '../../../utils/events/node/nodeEventsEngine.js';\nimport DownloadLogger from \"../../../downloader/downloadLogger.js\";\nimport NodeCryptographyProvider from '../../../utils/crypto/node/nodeCryptographyProvider.js';\nimport TransferDownloaderHealthMonitor from '../../healthMonitor/transferDownloaderHealthMonitor.js';\nimport logHealthyStatus from '../../loggers/utils/logHealthyStatus.js';\nimport NodeOnlineChecker from '../../healthMonitor/onlineChecker/nodeOnlineChecker.js';\nimport TransferHealthMonitorEvent from '../../healthMonitor/events/transferHealthMonitorEvent.js';\nimport logEventPropertyName from '../../../utils/logging/logEventPropertyNames.js';\n\nimport type EnvironmentVariables from \"../../environmentVariables.js\";\nimport type TransferDownloader from \"../transferDownloader.js\";\nimport type DownloadEventArgs from '../../../downloader/eventArgs/downloadEventArgs.js';\nimport type FileDownloadEventArgs from '../../../downloader/eventArgs/fileDownloadEventArgs.js';\nimport type FileDownloadFailedEventArgs from '../../../downloader/eventArgs/fileDownloadFailedEventArgs.js';\nimport type TransferStatus from '../../../utils/types/transferStatus.js';\nimport type ChunkDownloadEventArgs from '../../../downloader/eventArgs/chunkDownloadEventArgs.js';\nimport type ChunkDownloadFailedEventArgs from '../../../downloader/eventArgs/chunkDownloadFailedEventArgs.js';\nimport type DownloadCompletedEventArgs from '../../../downloader/eventArgs/downloadCompletedEventArgs.js';\nimport type DownloadPauseEventArgs from \"../../../downloader/eventArgs/downloadPauseEventArgs.js\";\nimport type Logger from \"../../loggers/logger.js\";\nimport type DownloadInfo from \"../../../downloader/dtos/downloadInfo.js\";\nimport type DownloadCommand from \"../../../downloader/dtos/downloadCommand.js\";\nimport type DownloadFilesCommand from \"../../../downloader/dtos/downloadFilesCommand.js\";\nimport type DownloadTrackingFailedEventArgs from \"../../../downloader/eventArgs/downloadTrackingFailedEventArgs.js\";\nimport type DownloadMetadataDeterminedEventArgs from '../../../downloader/eventArgs/downloadMetadataDeterminedEventArgs.js';\n\nexport default class NodeTransferDownloader implements TransferDownloader {\n readonly #eventsEngine: NodeEventsEngine;\n readonly #downloader: DownloaderCore;\n readonly #logger: DownloadLogger;\n readonly #healthMonitor: TransferDownloaderHealthMonitor;\n readonly #trackingId: string | number;\n\n #isHealthy = true;\n #logHealthyStatusThrottled: ReturnType<typeof throttle>;\n\n constructor(options: DownloadOptions, envValues: EnvironmentVariables, logger: Logger) {\n const optionsResolved = this.#buildOptions(options);\n\n const apiClient = new NodeApiClient(envValues.apiBaseUrl, envValues.source, envValues.sourceDetails, optionsResolved.apiRequestTotalTimeoutInMs, optionsResolved.apiRetryLimit);\n if (optionsResolved.logintoken)\n apiClient.setLoginToken(optionsResolved.logintoken);\n\n const chunkProvider = new NodeChunkStreamProviderFactory();\n const fileserverClientFactory = new NodeFileServerClientFactory(envValues.source, envValues.sourceDetails, optionsResolved.fileserverDownloadIdleTimeMs!, optionsResolved.fileserverAttemptLimit!);\n const fileSystem = new NodeFileSystemService();\n const cryptography = new NodeCryptographyProvider();\n\n this.#logger = new DownloadLogger(logger, optionsResolved.trackingId!);\n this.#eventsEngine = new NodeEventsEngine();\n this.#healthMonitor = new TransferDownloaderHealthMonitor(new NodeOnlineChecker(envValues.apiBaseUrl), this.#eventsEngine);\n this.#trackingId = optionsResolved.trackingId!;\n\n this.#downloader = new DownloaderCore(optionsResolved, this.#logger, apiClient, chunkProvider, fileserverClientFactory, fileSystem, this.#eventsEngine, cryptography, this.#healthMonitor);\n\n this.#logHealthyStatusThrottled = throttle(logHealthyStatus, 20_000);\n\n this.addHealthMonitorEventListeners();\n this.addTransferEventListeners();\n }\n\n private addHealthMonitorEventListeners() {\n this.#healthMonitor.addEventListener(TransferHealthMonitorEvent.Healthy, eventArgs => {\n const logEntryMetadata = this.getHealthStatusLogEntryMetadata();\n\n this.#logHealthyStatusThrottled(this.#logger, true, eventArgs, logEntryMetadata);\n\n if (!this.#isHealthy)\n logHealthyStatus(this.#logger, true, eventArgs, logEntryMetadata);\n\n this.#isHealthy = true;\n });\n\n this.#healthMonitor.addEventListener(TransferHealthMonitorEvent.Unhealthy, eventArgs => {\n if (eventArgs.reason.api.status === `Checking` || eventArgs.reason.fileServer.status === `Checking` || eventArgs.reason.internet.status === `Checking`)\n return;\n\n const logEntryMetadata = this.getHealthStatusLogEntryMetadata();\n\n this.#logHealthyStatusThrottled(this.#logger, false, eventArgs, logEntryMetadata);\n\n if (this.#isHealthy)\n logHealthyStatus(this.#logger, false, eventArgs, logEntryMetadata);\n\n this.#isHealthy = false;\n });\n }\n\n private getHealthStatusLogEntryMetadata(): Record<string, unknown> {\n const metadata: Record<string, unknown> = {\n [logEventPropertyName.TrackingIdPropertyName]: this.#trackingId,\n };\n\n const state = this.#downloader.state;\n\n if (state?.transferId)\n metadata[logEventPropertyName.TransferIdPropertyName] = state.transferId;\n\n if (state?.downloadId)\n metadata[logEventPropertyName.DownloadIdPropertyName] = state.downloadId;\n\n return metadata;\n }\n\n private addTransferEventListeners() {\n this.addEventListener(TransferDownloadEvent.DownloadStarted, args => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { files, ...downloadInfoWithoutFiles } = args;\n this.#logger.logInfo(`Download started`, downloadInfoWithoutFiles);\n });\n this.addEventListener(TransferDownloadEvent.Aborting, args => this.#logger.logInfo(`Download aborting ${args.transferId} / ${args.downloadId}`));\n this.addEventListener(TransferDownloadEvent.Aborted, args => this.#logger.logInfo(`Download aborted ${args.transferId} / ${args.downloadId}`));\n this.addEventListener(TransferDownloadEvent.Pausing, args => this.#logger.logInfo(`Download pausing ${args.transferId} / ${args.downloadId} / interrupt:${args.interruptPendingChunks}`));\n this.addEventListener(TransferDownloadEvent.Paused, args => this.#logger.logInfo(`Download paused ${args.transferId} / ${args.downloadId} / interrupt:${args.interruptPendingChunks}`));\n this.addEventListener(TransferDownloadEvent.RecoveredInterruptedDownload, args => this.#logger.logInfo(`Download recovered ${args.transferId} / ${args.downloadId}`));\n this.addEventListener(TransferDownloadEvent.DownloadCompleted, args => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { files, ...downloadInfoWithoutFiles } = args;\n this.#logger.logInfo(`Download completed`, downloadInfoWithoutFiles);\n });\n this.addEventListener(TransferDownloadEvent.FileDownloadStarted, args => this.#logger.logDebug(`File download started`, args));\n this.addEventListener(TransferDownloadEvent.FileDownloadCompleted, args => this.#logger.logDebug(`File download completed`, args));\n this.addEventListener(TransferDownloadEvent.FileDownloadFailed, args => {\n const { reason, ...errorInfoWithoutException } = args;\n this.#logger.logError(reason, `File download failed`, errorInfoWithoutException);\n });\n this.addEventListener(TransferDownloadEvent.DownloadTrackingFailed, args => {\n const { error, ...errorInfoWithoutException } = args;\n if (error)\n this.#logger.logError(error, `Progress tracking failed`, errorInfoWithoutException);\n else\n this.#logger.logWarning(`Progress tracking failed`, errorInfoWithoutException);\n });\n }\n\n #buildOptions(options: DownloadOptions) {\n const opts = { ...new DownloadOptions(), ...options };\n if (!opts.trackingId)\n opts.trackingId = guid();\n return opts;\n }\n\n get status(): TransferStatus | null {\n return this.#downloader.status;\n }\n\n get state(): DownloadEventArgs | null {\n return this.#downloader.state;\n }\n\n get downloadId(): string | undefined {\n return this.#downloader.downloadId;\n }\n\n get healthMonitor(): TransferDownloaderHealthMonitor {\n return this.#healthMonitor;\n }\n\n async pause(): Promise<boolean> {\n return await this.#downloader.pause({ interruptPendingChunks: false });\n }\n\n async stop(): Promise<boolean> {\n return await this.#downloader.pause({ interruptPendingChunks: true });\n }\n\n resume(): boolean {\n return this.#downloader.resume();\n }\n\n abort(): boolean {\n return this.#downloader.abort();\n }\n\n addEventListener(eventName:\n TransferDownloadEvent.Aborting |\n TransferDownloadEvent.Aborted |\n TransferDownloadEvent.Resumed |\n TransferDownloadEvent.RecoveredInterruptedDownload |\n TransferDownloadEvent.DownloadStarted |\n TransferDownloadEvent.DownloadProgressed, handler: (args: DownloadEventArgs) => void): void\n\n addEventListener(eventName: TransferDownloadEvent.DownloadCompleted, handler: (args: DownloadCompletedEventArgs) => void): void\n addEventListener(eventName: TransferDownloadEvent.Pausing | TransferDownloadEvent.Paused, handler: (args: DownloadPauseEventArgs) => void): void\n addEventListener(eventName: TransferDownloadEvent.NetworkFailure | TransferDownloadEvent.NetworkOk, handler: () => void): void\n addEventListener(eventName: TransferDownloadEvent.TransferMetadataDetermined, handler: (args: DownloadMetadataDeterminedEventArgs) => void): void\n\n addEventListener(eventName:\n TransferDownloadEvent.ChunkDownloadStarted |\n TransferDownloadEvent.ChunkDownloadProgressed |\n TransferDownloadEvent.ChunkDownloadCompleted, handler: (args: ChunkDownloadEventArgs) => void): void;\n\n addEventListener(eventName: TransferDownloadEvent.ChunkDownloadFailed, handler: (args: ChunkDownloadFailedEventArgs) => void): void\n\n addEventListener(eventName:\n TransferDownloadEvent.PossibleSupersizedFile |\n TransferDownloadEvent.FileDownloadStarted |\n TransferDownloadEvent.FileDownloadProgressed |\n TransferDownloadEvent.FileDownloadCompleting |\n TransferDownloadEvent.FileDownloadCompleted, handler: (args: FileDownloadEventArgs) => void): void\n\n addEventListener(eventName: TransferDownloadEvent.FileDownloadFailed, handler: (args: FileDownloadFailedEventArgs) => void): void\n addEventListener(eventName: TransferDownloadEvent.DownloadTrackingFailed, handler: (args: DownloadTrackingFailedEventArgs) => void): void\n\n addEventListener(eventName: string, handler: (args?: any) => void): void {\n this.#eventsEngine.addEventListener(eventName, handler);\n }\n\n private cancelHealthyStatusThrottledMethod(promise: Promise<DownloadInfo>) {\n promise.then(downloadInfo => downloadInfo.completion.finally(() => this.#logHealthyStatusThrottled.cancel()));\n }\n\n async downloadAllFiles(command: DownloadCommand): Promise<DownloadInfo> {\n const promise = this.#downloader.downloadAllFiles(command);\n\n this.cancelHealthyStatusThrottledMethod(promise);\n\n return promise;\n }\n\n async downloadAllFilesZipped(command: DownloadCommand): Promise<DownloadInfo> {\n const promise = this.#downloader.downloadAllFilesZipped(command);\n\n this.cancelHealthyStatusThrottledMethod(promise);\n\n return promise;\n }\n\n async downloadSpecificFiles(command: DownloadFilesCommand): Promise<DownloadInfo> {\n const promise = this.#downloader.downloadSpecificFiles(command);\n\n this.cancelHealthyStatusThrottledMethod(promise);\n\n return promise;\n }\n\n async restartFailedDownloader(): Promise<DownloadInfo> {\n const promise = this.#downloader.restartFailedDownloader();\n\n this.cancelHealthyStatusThrottledMethod(promise);\n\n return promise;\n }\n\n async recoverInterruptedDownload(downloadId: string): Promise<DownloadInfo> {\n const promise = this.#downloader.recoverInterruptedDownload(downloadId);\n\n this.cancelHealthyStatusThrottledMethod(promise);\n\n return promise;\n }\n\n async cleanupDownload(downloadId: string | null = null) {\n await this.#downloader.cleanupDownload(downloadId);\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"nodeTransferDownloader.js","sourceRoot":"","sources":["../../../../../src/client/downloader/node/nodeTransferDownloader.ts"],"names":[],"mappings":"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","sourcesContent":["import { v4 as guid } from 'uuid';\nimport throttle from \"lodash.throttle\";\n\nimport DownloadOptions from \"../../../downloader/downloadOptions.js\";\nimport DownloaderCore from \"../downloaderCore.js\";\nimport TransferDownloadEvent from \"../../../downloader/dtos/downloadEvent.js\";\nimport NodeFileServerClientFactory from \"../../../utils/api/node/nodeFileServerClientFactory.js\";\nimport NodeChunkStreamProviderFactory from \"../../../utils/fileSystem/node/nodeChunkStreamProviderFactory.js\";\nimport NodeFileSystemService from \"../../../utils/fileSystem/node/nodeFileSystemService.js\";\nimport NodeApiClient from \"../../../utils/api/node/nodeApiClient.js\";\nimport NodeEventsEngine from '../../../utils/events/node/nodeEventsEngine.js';\nimport DownloadLogger from \"../../../downloader/downloadLogger.js\";\nimport NodeCryptographyProvider from '../../../utils/crypto/node/nodeCryptographyProvider.js';\nimport TransferDownloaderHealthMonitor from '../../healthMonitor/transferDownloaderHealthMonitor.js';\nimport logHealthyStatus from '../../loggers/utils/logHealthyStatus.js';\nimport NodeOnlineChecker from '../../healthMonitor/onlineChecker/nodeOnlineChecker.js';\nimport TransferHealthMonitorEvent from '../../healthMonitor/events/transferHealthMonitorEvent.js';\nimport logEventPropertyName from '../../../utils/logging/logEventPropertyNames.js';\n\nimport type EnvironmentVariables from \"../../environmentVariables.js\";\nimport type TransferDownloader from \"../transferDownloader.js\";\nimport type DownloadEventArgs from '../../../downloader/eventArgs/downloadEventArgs.js';\nimport type FileDownloadEventArgs from '../../../downloader/eventArgs/fileDownloadEventArgs.js';\nimport type FileDownloadFailedEventArgs from '../../../downloader/eventArgs/fileDownloadFailedEventArgs.js';\nimport type TransferStatus from '../../../utils/types/transferStatus.js';\nimport type ChunkDownloadEventArgs from '../../../downloader/eventArgs/chunkDownloadEventArgs.js';\nimport type ChunkDownloadFailedEventArgs from '../../../downloader/eventArgs/chunkDownloadFailedEventArgs.js';\nimport type DownloadCompletedEventArgs from '../../../downloader/eventArgs/downloadCompletedEventArgs.js';\nimport type DownloadPauseEventArgs from \"../../../downloader/eventArgs/downloadPauseEventArgs.js\";\nimport type Logger from \"../../loggers/logger.js\";\nimport type DownloadInfo from \"../../../downloader/dtos/downloadInfo.js\";\nimport type DownloadCommand from \"../../../downloader/dtos/downloadCommand.js\";\nimport type DownloadFilesCommand from \"../../../downloader/dtos/downloadFilesCommand.js\";\nimport type DownloadTrackingFailedEventArgs from \"../../../downloader/eventArgs/downloadTrackingFailedEventArgs.js\";\nimport type DownloadMetadataDeterminedEventArgs from '../../../downloader/eventArgs/downloadMetadataDeterminedEventArgs.js';\n\nexport default class NodeTransferDownloader implements TransferDownloader {\n readonly #eventsEngine: NodeEventsEngine;\n readonly #downloader: DownloaderCore;\n readonly #logger: DownloadLogger;\n readonly #healthMonitor: TransferDownloaderHealthMonitor;\n readonly #trackingId: string | number;\n\n #isHealthy = true;\n #logHealthyStatusThrottled: ReturnType<typeof throttle>;\n\n constructor(options: DownloadOptions, envValues: EnvironmentVariables, logger: Logger) {\n const optionsResolved = this.#buildOptions(options);\n\n const apiClient = new NodeApiClient(envValues.apiBaseUrl, envValues.source, envValues.sourceDetails, optionsResolved.apiRequestTotalTimeoutInMs, optionsResolved.apiRetryLimit);\n if (optionsResolved.logintoken)\n apiClient.setLoginToken(optionsResolved.logintoken);\n\n const chunkProvider = new NodeChunkStreamProviderFactory();\n const fileserverClientFactory = new NodeFileServerClientFactory(envValues.source, envValues.sourceDetails, optionsResolved.fileserverDownloadIdleTimeMs!, optionsResolved.fileserverAttemptLimit!);\n const fileSystem = new NodeFileSystemService();\n const cryptography = new NodeCryptographyProvider();\n\n this.#logger = new DownloadLogger(logger, optionsResolved.trackingId!);\n this.#eventsEngine = new NodeEventsEngine();\n this.#healthMonitor = new TransferDownloaderHealthMonitor(new NodeOnlineChecker(envValues.apiBaseUrl), this.#eventsEngine);\n this.#trackingId = optionsResolved.trackingId!;\n\n this.#downloader = new DownloaderCore(optionsResolved, this.#logger, apiClient, chunkProvider, fileserverClientFactory, fileSystem, this.#eventsEngine, cryptography, this.#healthMonitor);\n\n this.#logHealthyStatusThrottled = throttle(logHealthyStatus, 20_000);\n\n this.addHealthMonitorEventListeners();\n this.addTransferEventListeners();\n }\n\n private addHealthMonitorEventListeners() {\n this.#healthMonitor.addEventListener(TransferHealthMonitorEvent.Healthy, eventArgs => {\n const logEntryMetadata = this.getHealthStatusLogEntryMetadata();\n\n this.#logHealthyStatusThrottled(this.#logger, true, eventArgs, logEntryMetadata);\n\n if (!this.#isHealthy)\n logHealthyStatus(this.#logger, true, eventArgs, logEntryMetadata);\n\n this.#isHealthy = true;\n });\n\n this.#healthMonitor.addEventListener(TransferHealthMonitorEvent.Unhealthy, eventArgs => {\n if (eventArgs.reason.api.status === `Checking` || eventArgs.reason.fileServer.status === `Checking` || eventArgs.reason.internet.status === `Checking`)\n return;\n\n const logEntryMetadata = this.getHealthStatusLogEntryMetadata();\n\n this.#logHealthyStatusThrottled(this.#logger, false, eventArgs, logEntryMetadata);\n\n if (this.#isHealthy)\n logHealthyStatus(this.#logger, false, eventArgs, logEntryMetadata);\n\n this.#isHealthy = false;\n });\n }\n\n private getHealthStatusLogEntryMetadata(): Record<string, unknown> {\n const metadata: Record<string, unknown> = {\n [logEventPropertyName.TrackingIdPropertyName]: this.#trackingId,\n };\n\n const state = this.#downloader.state;\n\n if (state?.transferId)\n metadata[logEventPropertyName.TransferIdPropertyName] = state.transferId;\n\n if (state?.downloadId)\n metadata[logEventPropertyName.DownloadIdPropertyName] = state.downloadId;\n\n return metadata;\n }\n\n private addTransferEventListeners() {\n this.addEventListener(TransferDownloadEvent.DownloadStarted, args => {\n const { files, ...downloadInfoWithoutFiles } = args;\n this.#logger.logInfo(`Download started`, downloadInfoWithoutFiles);\n });\n this.addEventListener(TransferDownloadEvent.Aborting, args => this.#logger.logInfo(`Download aborting ${args.transferId} / ${args.downloadId}`));\n this.addEventListener(TransferDownloadEvent.Aborted, args => this.#logger.logInfo(`Download aborted ${args.transferId} / ${args.downloadId}`));\n this.addEventListener(TransferDownloadEvent.Pausing, args => this.#logger.logInfo(`Download pausing ${args.transferId} / ${args.downloadId} / interrupt:${args.interruptPendingChunks}`));\n this.addEventListener(TransferDownloadEvent.Paused, args => this.#logger.logInfo(`Download paused ${args.transferId} / ${args.downloadId} / interrupt:${args.interruptPendingChunks}`));\n this.addEventListener(TransferDownloadEvent.RecoveredInterruptedDownload, args => this.#logger.logInfo(`Download recovered ${args.transferId} / ${args.downloadId}`));\n this.addEventListener(TransferDownloadEvent.DownloadCompleted, args => {\n const { files, ...downloadInfoWithoutFiles } = args;\n this.#logger.logInfo(`Download completed`, downloadInfoWithoutFiles);\n });\n this.addEventListener(TransferDownloadEvent.FileDownloadStarted, args => this.#logger.logDebug(`File download started`, args));\n this.addEventListener(TransferDownloadEvent.FileDownloadCompleted, args => this.#logger.logDebug(`File download completed`, args));\n this.addEventListener(TransferDownloadEvent.FileDownloadFailed, args => {\n const { reason, ...errorInfoWithoutException } = args;\n this.#logger.logError(reason, `File download failed`, errorInfoWithoutException);\n });\n this.addEventListener(TransferDownloadEvent.DownloadTrackingFailed, args => {\n const { error, ...errorInfoWithoutException } = args;\n if (error)\n this.#logger.logError(error, `Progress tracking failed`, errorInfoWithoutException);\n else\n this.#logger.logWarning(`Progress tracking failed`, errorInfoWithoutException);\n });\n }\n\n #buildOptions(options: DownloadOptions) {\n const opts = { ...new DownloadOptions(), ...options };\n if (!opts.trackingId)\n opts.trackingId = guid();\n return opts;\n }\n\n get status(): TransferStatus | null {\n return this.#downloader.status;\n }\n\n get state(): DownloadEventArgs | null {\n return this.#downloader.state;\n }\n\n get downloadId(): string | undefined {\n return this.#downloader.downloadId;\n }\n\n get healthMonitor(): TransferDownloaderHealthMonitor {\n return this.#healthMonitor;\n }\n\n async pause(): Promise<boolean> {\n return await this.#downloader.pause({ interruptPendingChunks: false });\n }\n\n async stop(): Promise<boolean> {\n return await this.#downloader.pause({ interruptPendingChunks: true });\n }\n\n resume(): boolean {\n return this.#downloader.resume();\n }\n\n abort(): boolean {\n return this.#downloader.abort();\n }\n\n addEventListener(eventName:\n TransferDownloadEvent.Aborting |\n TransferDownloadEvent.Aborted |\n TransferDownloadEvent.Resumed |\n TransferDownloadEvent.RecoveredInterruptedDownload |\n TransferDownloadEvent.DownloadStarted |\n TransferDownloadEvent.DownloadProgressed, handler: (args: DownloadEventArgs) => void): void\n\n addEventListener(eventName: TransferDownloadEvent.DownloadCompleted, handler: (args: DownloadCompletedEventArgs) => void): void\n addEventListener(eventName: TransferDownloadEvent.Pausing | TransferDownloadEvent.Paused, handler: (args: DownloadPauseEventArgs) => void): void\n addEventListener(eventName: TransferDownloadEvent.NetworkFailure | TransferDownloadEvent.NetworkOk, handler: () => void): void\n addEventListener(eventName: TransferDownloadEvent.TransferMetadataDetermined, handler: (args: DownloadMetadataDeterminedEventArgs) => void): void\n\n addEventListener(eventName:\n TransferDownloadEvent.ChunkDownloadStarted |\n TransferDownloadEvent.ChunkDownloadProgressed |\n TransferDownloadEvent.ChunkDownloadCompleted, handler: (args: ChunkDownloadEventArgs) => void): void;\n\n addEventListener(eventName: TransferDownloadEvent.ChunkDownloadFailed, handler: (args: ChunkDownloadFailedEventArgs) => void): void\n\n addEventListener(eventName:\n TransferDownloadEvent.PossibleSupersizedFile |\n TransferDownloadEvent.FileDownloadStarted |\n TransferDownloadEvent.FileDownloadProgressed |\n TransferDownloadEvent.FileDownloadCompleting |\n TransferDownloadEvent.FileDownloadCompleted, handler: (args: FileDownloadEventArgs) => void): void\n\n addEventListener(eventName: TransferDownloadEvent.FileDownloadFailed, handler: (args: FileDownloadFailedEventArgs) => void): void\n addEventListener(eventName: TransferDownloadEvent.DownloadTrackingFailed, handler: (args: DownloadTrackingFailedEventArgs) => void): void\n\n addEventListener(eventName: string, handler: (args?: any) => void): void {\n this.#eventsEngine.addEventListener(eventName, handler);\n }\n\n private cancelHealthyStatusThrottledMethod(promise: Promise<DownloadInfo>) {\n promise.then(downloadInfo => downloadInfo.completion.finally(() => this.#logHealthyStatusThrottled.cancel()));\n }\n\n async downloadAllFiles(command: DownloadCommand): Promise<DownloadInfo> {\n const promise = this.#downloader.downloadAllFiles(command);\n\n this.cancelHealthyStatusThrottledMethod(promise);\n\n return promise;\n }\n\n async downloadAllFilesZipped(command: DownloadCommand): Promise<DownloadInfo> {\n const promise = this.#downloader.downloadAllFilesZipped(command);\n\n this.cancelHealthyStatusThrottledMethod(promise);\n\n return promise;\n }\n\n async downloadSpecificFiles(command: DownloadFilesCommand): Promise<DownloadInfo> {\n const promise = this.#downloader.downloadSpecificFiles(command);\n\n this.cancelHealthyStatusThrottledMethod(promise);\n\n return promise;\n }\n\n async restartFailedDownloader(): Promise<DownloadInfo> {\n const promise = this.#downloader.restartFailedDownloader();\n\n this.cancelHealthyStatusThrottledMethod(promise);\n\n return promise;\n }\n\n async recoverInterruptedDownload(downloadId: string): Promise<DownloadInfo> {\n const promise = this.#downloader.recoverInterruptedDownload(downloadId);\n\n this.cancelHealthyStatusThrottledMethod(promise);\n\n return promise;\n }\n\n async cleanupDownload(downloadId: string | null = null) {\n await this.#downloader.cleanupDownload(downloadId);\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeTransferUploader.d.ts","sourceRoot":"","sources":["../../../../../src/client/uploader/node/nodeTransferUploader.ts"],"names":[],"mappings":"AAUA,OAAO,oBAAoB,MAAM,4BAA4B,CAAC;AAK9D,OAAO,KAAK,eAAe,MAAM,mDAAmD,CAAC;AACrF,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAC;AAClD,OAAO,KAAK,oBAAoB,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,kBAAkB,MAAM,iDAAiD,CAAC;AACtF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAC;AACrG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uDAAuD,CAAC;AACtG,OAAO,KAAK,sBAAsB,MAAM,8BAA8B,CAAC;AAEvE,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,oBAAoB,CAAC,eAAe,CAAC;gBACvE,YAAY,EAAE,kBAAkB,CAAC,eAAe,CAAC,GAAG,wBAAwB,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;gBAC9K,UAAU,EAAE,wBAAwB,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"nodeTransferUploader.d.ts","sourceRoot":"","sources":["../../../../../src/client/uploader/node/nodeTransferUploader.ts"],"names":[],"mappings":"AAUA,OAAO,oBAAoB,MAAM,4BAA4B,CAAC;AAK9D,OAAO,KAAK,eAAe,MAAM,mDAAmD,CAAC;AACrF,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAC;AAClD,OAAO,KAAK,oBAAoB,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,kBAAkB,MAAM,iDAAiD,CAAC;AACtF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAC;AACrG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uDAAuD,CAAC;AACtG,OAAO,KAAK,sBAAsB,MAAM,8BAA8B,CAAC;AAEvE,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,oBAAoB,CAAC,eAAe,CAAC;gBACvE,YAAY,EAAE,kBAAkB,CAAC,eAAe,CAAC,GAAG,wBAAwB,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;gBAC9K,UAAU,EAAE,wBAAwB,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;CAqCrJ"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { v4 as guid } from 'uuid';
|
|
2
2
|
import TransferUpload from "../../../uploader/transferUpload.js";
|
|
3
|
+
import TransferUploadAcker from "../../../uploader/transferUploadAcker.js";
|
|
3
4
|
import NodeApiClient from "../../../utils/api/node/nodeApiClient.js";
|
|
4
5
|
import NodeEventsEngine from "../../../utils/events/node/nodeEventsEngine.js";
|
|
5
6
|
import NodeFileServerClientFactory from "../../../utils/api/node/nodeFileServerClientFactory.js";
|
|
6
7
|
import NodeFileDetailsUploaderChunkStreamProviderFactory from "../../../uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.js";
|
|
7
|
-
import
|
|
8
|
-
import UdpConcurrencyBasedOptimizationStrategy from "../../../uploader/optimizer/strategies/udpConcurrencyBasedOptimizationStrategy.js";
|
|
8
|
+
import TransferConcurrencyController from "../../../utils/concurrencyController/transferConcurrencyController.js";
|
|
9
9
|
import NodeCryptographyProvider from "../../../utils/crypto/node/nodeCryptographyProvider.js";
|
|
10
10
|
import TransferUploaderBase from "../transferUploaderBase.js";
|
|
11
11
|
import { buildUploadConfig, isTransferInfo, fixTransferInfo } from "../utils/uploaderUtils.js";
|
|
@@ -16,7 +16,7 @@ export default class NodeTransferUploader extends TransferUploaderBase {
|
|
|
16
16
|
const trackingId = config.trackingId || guid();
|
|
17
17
|
const eventsEngine = new NodeEventsEngine();
|
|
18
18
|
const chunkStreamProviderFactory = new NodeFileDetailsUploaderChunkStreamProviderFactory();
|
|
19
|
-
const
|
|
19
|
+
const concurrencyController = new TransferConcurrencyController(config.chunksUploadInParallel);
|
|
20
20
|
const fileServerClientFactory = new NodeFileServerClientFactory(envValues.source, envValues.sourceDetails, config.uploadIdleTimeoutInMs, config.chunkUploadRetryLimit);
|
|
21
21
|
const cryptography = new NodeCryptographyProvider();
|
|
22
22
|
const uploadConfig = buildUploadConfig(config);
|
|
@@ -24,16 +24,17 @@ export default class NodeTransferUploader extends TransferUploaderBase {
|
|
|
24
24
|
const apiClient = new NodeApiClient(envValues.apiBaseUrl, envValues.source, envValues.sourceDetails, config.apiRequestTotalTimeoutInMs, config.apiRetryLimit);
|
|
25
25
|
if (config.logintoken)
|
|
26
26
|
apiClient.setLoginToken(config.logintoken);
|
|
27
|
+
const acker = new TransferUploadAcker(apiClient, eventsEngine, config.fileAckIntervalInMs);
|
|
27
28
|
let fileDetails;
|
|
28
29
|
let transfer;
|
|
29
30
|
if (isTransferInfo(transferInfoOrExportData)) {
|
|
30
31
|
fixTransferInfo(transferInfoOrExportData);
|
|
31
32
|
fileDetails = transferInfoOrExportData.files;
|
|
32
|
-
transfer = new TransferUpload(chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, transferInfoOrExportData, uploadConfig,
|
|
33
|
+
transfer = new TransferUpload(chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, transferInfoOrExportData, uploadConfig, concurrencyController, cryptography, acker);
|
|
33
34
|
}
|
|
34
35
|
else {
|
|
35
36
|
fileDetails = transferInfoOrExportData.info.files;
|
|
36
|
-
transfer = TransferUpload.recreate(transferInfoOrExportData, uploadConfig, chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine,
|
|
37
|
+
transfer = TransferUpload.recreate(transferInfoOrExportData, uploadConfig, chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, concurrencyController, cryptography, acker);
|
|
37
38
|
}
|
|
38
39
|
super(transfer, fileDetails, config, envValues, logger, healthMonitor, trackingId);
|
|
39
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeTransferUploader.js","sourceRoot":"","sources":["../../../../../src/client/uploader/node/nodeTransferUploader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAElC,OAAO,cAAc,MAAM,qCAAqC,CAAC;AACjE,OAAO,aAAa,MAAM,0CAA0C,CAAC;AACrE,OAAO,gBAAgB,MAAM,gDAAgD,CAAC;AAC9E,OAAO,2BAA2B,MAAM,wDAAwD,CAAC;AACjG,OAAO,iDAAiD,MAAM,mGAAmG,CAAC;AAClK,OAAO,
|
|
1
|
+
{"version":3,"file":"nodeTransferUploader.js","sourceRoot":"","sources":["../../../../../src/client/uploader/node/nodeTransferUploader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAElC,OAAO,cAAc,MAAM,qCAAqC,CAAC;AACjE,OAAO,mBAAmB,MAAM,0CAA0C,CAAC;AAC3E,OAAO,aAAa,MAAM,0CAA0C,CAAC;AACrE,OAAO,gBAAgB,MAAM,gDAAgD,CAAC;AAC9E,OAAO,2BAA2B,MAAM,wDAAwD,CAAC;AACjG,OAAO,iDAAiD,MAAM,mGAAmG,CAAC;AAClK,OAAO,6BAA6B,MAAM,uEAAuE,CAAC;AAClH,OAAO,wBAAwB,MAAM,wDAAwD,CAAC;AAC9F,OAAO,oBAAoB,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC/F,OAAO,6BAA6B,MAAM,sDAAsD,CAAC;AACjG,OAAO,iBAAiB,MAAM,wDAAwD,CAAC;AAUvF,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,oBAAqC;IAGnF,YAAY,wBAAuJ,EAAE,MAA8B,EAAE,SAA+B,EAAE,MAAc;QAChP,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QAE/C,MAAM,YAAY,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAC5C,MAAM,0BAA0B,GAAG,IAAI,iDAAiD,EAAE,CAAC;QAC3F,MAAM,qBAAqB,GAAG,IAAI,6BAA6B,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC/F,MAAM,uBAAuB,GAAG,IAAI,2BAA2B,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACvK,MAAM,YAAY,GAAG,IAAI,wBAAwB,EAAE,CAAC;QACpD,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,aAAa,GAAG,IAAI,6BAA6B,CAAC,IAAI,iBAAiB,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;QAEnH,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QAE9J,IAAI,MAAM,CAAC,UAAU;YACjB,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAE/C,MAAM,KAAK,GAAG,IAAI,mBAAmB,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAE3F,IAAI,WAA0C,CAAC;QAC/C,IAAI,QAAyC,CAAC;QAE9C,IAAI,cAAc,CAAC,wBAAwB,CAAC,EAAE,CAAC;YAC3C,eAAe,CAAC,wBAAwB,CAAC,CAAC;YAE1C,WAAW,GAAG,wBAAwB,CAAC,KAAK,CAAC;YAE7C,QAAQ,GAAG,IAAI,cAAc,CAAC,0BAA0B,EAAE,SAAS,EAAE,uBAAuB,EAAE,YAAY,EAAE,wBAAwB,EAAE,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QACpM,CAAC;aACI,CAAC;YACF,WAAW,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;YAElD,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,wBAAwB,EAAE,YAAY,EAAE,0BAA0B,EAAE,SAAS,EAAE,uBAAuB,EAAE,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QACzM,CAAC;QAED,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IACvF,CAAC;CACJ","sourcesContent":["import { v4 as guid } from 'uuid';\n\nimport TransferUpload from \"../../../uploader/transferUpload.js\";\nimport TransferUploadAcker from \"../../../uploader/transferUploadAcker.js\";\nimport NodeApiClient from \"../../../utils/api/node/nodeApiClient.js\";\nimport NodeEventsEngine from \"../../../utils/events/node/nodeEventsEngine.js\";\nimport NodeFileServerClientFactory from \"../../../utils/api/node/nodeFileServerClientFactory.js\";\nimport NodeFileDetailsUploaderChunkStreamProviderFactory from \"../../../uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.js\";\nimport TransferConcurrencyController from \"../../../utils/concurrencyController/transferConcurrencyController.js\";\nimport NodeCryptographyProvider from \"../../../utils/crypto/node/nodeCryptographyProvider.js\";\nimport TransferUploaderBase from \"../transferUploaderBase.js\";\nimport { buildUploadConfig, isTransferInfo, fixTransferInfo } from \"../utils/uploaderUtils.js\";\nimport TransferUploaderHealthMonitor from '../../healthMonitor/transferUploaderHealthMonitor.js';\nimport NodeOnlineChecker from '../../healthMonitor/onlineChecker/nodeOnlineChecker.js';\n\nimport type NodeFileDetails from \"../../../utils/fileSystem/node/nodeFileDetails.js\";\nimport type Logger from \"../../loggers/logger.js\";\nimport type EnvironmentVariables from \"../../environmentVariables.js\";\nimport type TransferUploadInfo from \"../../../uploader/options/transferUploadInfo.js\";\nimport type { TransferUploadExportData } from \"../../../uploader/export/transferUploadExportData.js\";\nimport type { TransferUploadAppendInfo } from \"../../../uploader/options/transferUploadAppendInfo.js\";\nimport type TransferUploaderConfig from \"../transferUploaderConfig.js\";\n\nexport default class NodeTransferUploader extends TransferUploaderBase<NodeFileDetails> {\n constructor(transferInfo: TransferUploadInfo<NodeFileDetails> | TransferUploadAppendInfo<NodeFileDetails>, config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger)\n constructor(exportData: TransferUploadExportData<NodeFileDetails>, config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger)\n constructor(transferInfoOrExportData: (TransferUploadInfo<NodeFileDetails> | TransferUploadAppendInfo<NodeFileDetails>) | TransferUploadExportData<NodeFileDetails>, config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger) {\n const trackingId = config.trackingId || guid();\n\n const eventsEngine = new NodeEventsEngine();\n const chunkStreamProviderFactory = new NodeFileDetailsUploaderChunkStreamProviderFactory();\n const concurrencyController = new TransferConcurrencyController(config.chunksUploadInParallel);\n const fileServerClientFactory = new NodeFileServerClientFactory(envValues.source, envValues.sourceDetails, config.uploadIdleTimeoutInMs, config.chunkUploadRetryLimit);\n const cryptography = new NodeCryptographyProvider();\n const uploadConfig = buildUploadConfig(config);\n const healthMonitor = new TransferUploaderHealthMonitor(new NodeOnlineChecker(envValues.apiBaseUrl), eventsEngine);\n\n const apiClient = new NodeApiClient(envValues.apiBaseUrl, envValues.source, envValues.sourceDetails, config.apiRequestTotalTimeoutInMs, config.apiRetryLimit);\n\n if (config.logintoken)\n apiClient.setLoginToken(config.logintoken);\n\n const acker = new TransferUploadAcker(apiClient, eventsEngine, config.fileAckIntervalInMs);\n\n let fileDetails: NodeFileDetails[] | undefined;\n let transfer: TransferUpload<NodeFileDetails>;\n\n if (isTransferInfo(transferInfoOrExportData)) {\n fixTransferInfo(transferInfoOrExportData);\n\n fileDetails = transferInfoOrExportData.files;\n\n transfer = new TransferUpload(chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, transferInfoOrExportData, uploadConfig, concurrencyController, cryptography, acker);\n }\n else {\n fileDetails = transferInfoOrExportData.info.files;\n\n transfer = TransferUpload.recreate(transferInfoOrExportData, uploadConfig, chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, concurrencyController, cryptography, acker);\n }\n\n super(transfer, fileDetails, config, envValues, logger, healthMonitor, trackingId);\n }\n}"]}
|
|
@@ -16,7 +16,9 @@ export default abstract class TransferUploaderBase<T extends NodeFileDetails | W
|
|
|
16
16
|
stop(): void;
|
|
17
17
|
cancel(abortSignal?: AbortSignal): Promise<void>;
|
|
18
18
|
start(): Promise<void>;
|
|
19
|
+
private throwIfCannotStart;
|
|
19
20
|
private setFailedReasonFromError;
|
|
21
|
+
private tryGetPermanentAckError;
|
|
20
22
|
private tryGetApiFilemailError;
|
|
21
23
|
private addHealthMonitorEventListeners;
|
|
22
24
|
private addTransferEventListeners;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transferUploaderBase.d.ts","sourceRoot":"","sources":["../../../../src/client/uploader/transferUploaderBase.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transferUploaderBase.d.ts","sourceRoot":"","sources":["../../../../src/client/uploader/transferUploaderBase.ts"],"names":[],"mappings":"AAGA,OAAO,cAAc,MAAM,kCAAkC,CAAC;AAW9D,OAAO,KAAK,eAAe,MAAM,gDAAgD,CAAC;AAClF,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAC;AAC/C,OAAO,KAAK,oBAAoB,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,sBAAsB,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,cAAc,MAAM,8CAA8C,CAAC;AAE/E,OAAO,KAAK,6BAA6B,MAAM,mDAAmD,CAAC;AAInG,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,oBAAoB,CAAC,CAAC,SAAS,eAAe,GAAG,cAAc,CAAE,YAAW,gBAAgB,CAAC,CAAC,CAAC;;gBAsB7G,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,6BAA6B,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAiBrN,IAAI,QAAQ,IAAI,cAAc,CAAC,CAAC,CAAC,CAEhC;IAED,IAAI,aAAa,IAAI,6BAA6B,CAEjD;IAED,IAAI,YAAY,IAAI,MAAM,GAAG,SAAS,CAErC;IAEM,KAAK;IAWL,IAAI;IAWE,MAAM,CAAC,WAAW,CAAC,EAAE,WAAW;IAMvC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA4C5B,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,wBAAwB;IAgBhC,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,8BAA8B;IAuBtC,OAAO,CAAC,yBAAyB;IA4EjC,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,yBAAyB;IAYjC,OAAO,CAAC,iBAAiB;CAG5B"}
|