filemail-sdk 10.0.0 → 10.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/src/autoDownloader/autoDownloader.d.ts.map +1 -1
  2. package/dist/src/autoDownloader/autoDownloader.js +0 -1
  3. package/dist/src/autoDownloader/autoDownloader.js.map +1 -1
  4. package/dist/src/client/downloader/node/nodeTransferDownloader.d.ts.map +1 -1
  5. package/dist/src/client/downloader/node/nodeTransferDownloader.js +0 -2
  6. package/dist/src/client/downloader/node/nodeTransferDownloader.js.map +1 -1
  7. package/dist/src/client/uploader/transferUploaderBase.d.ts +1 -0
  8. package/dist/src/client/uploader/transferUploaderBase.d.ts.map +1 -1
  9. package/dist/src/client/uploader/transferUploaderBase.js +22 -3
  10. package/dist/src/client/uploader/transferUploaderBase.js.map +1 -1
  11. package/dist/src/downloader/api/node/nodeFileServerDownloadClient.d.ts.map +1 -1
  12. package/dist/src/downloader/api/node/nodeFileServerDownloadClient.js +6 -2
  13. package/dist/src/downloader/api/node/nodeFileServerDownloadClient.js.map +1 -1
  14. package/dist/src/downloader/chunkDownloader.d.ts.map +1 -1
  15. package/dist/src/downloader/chunkDownloader.js +0 -1
  16. package/dist/src/downloader/chunkDownloader.js.map +1 -1
  17. package/dist/src/downloader/downloadTracker.d.ts.map +1 -1
  18. package/dist/src/downloader/downloadTracker.js +0 -1
  19. package/dist/src/downloader/downloadTracker.js.map +1 -1
  20. package/dist/src/downloader/filesDownloader.d.ts.map +1 -1
  21. package/dist/src/downloader/filesDownloader.js +0 -1
  22. package/dist/src/downloader/filesDownloader.js.map +1 -1
  23. package/dist/src/index.d.ts +3 -1
  24. package/dist/src/index.d.ts.map +1 -1
  25. package/dist/src/index.js.map +1 -1
  26. package/dist/src/uploader/eventArgs/filesRegistrationBatchFailedEventArgs.d.ts +6 -0
  27. package/dist/src/uploader/eventArgs/filesRegistrationBatchFailedEventArgs.d.ts.map +1 -0
  28. package/dist/src/uploader/eventArgs/filesRegistrationBatchFailedEventArgs.js +2 -0
  29. package/dist/src/uploader/eventArgs/filesRegistrationBatchFailedEventArgs.js.map +1 -0
  30. package/dist/src/uploader/export/transferUploadExportData.d.ts +4 -3
  31. package/dist/src/uploader/export/transferUploadExportData.d.ts.map +1 -1
  32. package/dist/src/uploader/export/transferUploadExportData.js.map +1 -1
  33. package/dist/src/uploader/export/transferUploadMetadata.d.ts +0 -2
  34. package/dist/src/uploader/export/transferUploadMetadata.d.ts.map +1 -1
  35. package/dist/src/uploader/export/transferUploadMetadata.js.map +1 -1
  36. package/dist/src/uploader/options/transferUploadAppendInfo.d.ts +1 -0
  37. package/dist/src/uploader/options/transferUploadAppendInfo.d.ts.map +1 -1
  38. package/dist/src/uploader/options/transferUploadAppendInfo.js.map +1 -1
  39. package/dist/src/uploader/state/continuousChunksCalculator.d.ts +1 -0
  40. package/dist/src/uploader/state/continuousChunksCalculator.d.ts.map +1 -1
  41. package/dist/src/uploader/state/continuousChunksCalculator.js +8 -2
  42. package/dist/src/uploader/state/continuousChunksCalculator.js.map +1 -1
  43. package/dist/src/uploader/state/transferUploadState.d.ts.map +1 -1
  44. package/dist/src/uploader/state/transferUploadState.js +3 -2
  45. package/dist/src/uploader/state/transferUploadState.js.map +1 -1
  46. package/dist/src/uploader/transferFilesRegistrar.d.ts +30 -0
  47. package/dist/src/uploader/transferFilesRegistrar.d.ts.map +1 -0
  48. package/dist/src/uploader/transferFilesRegistrar.js +160 -0
  49. package/dist/src/uploader/transferFilesRegistrar.js.map +1 -0
  50. package/dist/src/uploader/transferUpload.d.ts +7 -3
  51. package/dist/src/uploader/transferUpload.d.ts.map +1 -1
  52. package/dist/src/uploader/transferUpload.js +67 -73
  53. package/dist/src/uploader/transferUpload.js.map +1 -1
  54. package/dist/src/uploader/transferUploadAcker.d.ts +1 -2
  55. package/dist/src/uploader/transferUploadAcker.d.ts.map +1 -1
  56. package/dist/src/uploader/transferUploadAcker.js +12 -8
  57. package/dist/src/uploader/transferUploadAcker.js.map +1 -1
  58. package/dist/src/uploader/transferUploadEvent.d.ts +1 -0
  59. package/dist/src/uploader/transferUploadEvent.d.ts.map +1 -1
  60. package/dist/src/uploader/transferUploadEvent.js +1 -0
  61. package/dist/src/uploader/transferUploadEvent.js.map +1 -1
  62. package/dist/src/utils/api/dtos/registerTransferFilesRequest.d.ts +1 -0
  63. package/dist/src/utils/api/dtos/registerTransferFilesRequest.d.ts.map +1 -1
  64. package/dist/src/utils/api/dtos/registerTransferFilesRequest.js.map +1 -1
  65. package/dist/src/utils/api/dtos/registerTransferFilesResponse.d.ts +6 -2
  66. package/dist/src/utils/api/dtos/registerTransferFilesResponse.d.ts.map +1 -1
  67. package/dist/src/utils/api/dtos/registerTransferFilesResponse.js.map +1 -1
  68. package/dist/src/utils/api/node/nodeApiClient.d.ts.map +1 -1
  69. package/dist/src/utils/api/node/nodeApiClient.js +1 -0
  70. package/dist/src/utils/api/node/nodeApiClient.js.map +1 -1
  71. package/dist/src/utils/fileSystem/node/nodeFileSystemService.d.ts.map +1 -1
  72. package/dist/src/utils/fileSystem/node/nodeFileSystemService.js +0 -3
  73. package/dist/src/utils/fileSystem/node/nodeFileSystemService.js.map +1 -1
  74. package/dist/src/utils/mergeAbortAndPauseSignals.d.ts +6 -1
  75. package/dist/src/utils/mergeAbortAndPauseSignals.d.ts.map +1 -1
  76. package/dist/src/utils/mergeAbortAndPauseSignals.js +14 -7
  77. package/dist/src/utils/mergeAbortAndPauseSignals.js.map +1 -1
  78. package/dist/src/utils/promiseAll.d.ts.map +1 -1
  79. package/dist/src/utils/promiseAll.js +0 -1
  80. package/dist/src/utils/promiseAll.js.map +1 -1
  81. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"autoDownloader.d.ts","sourceRoot":"","sources":["../../../src/autoDownloader/autoDownloader.ts"],"names":[],"mappings":"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"}
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;"]}
@@ -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;IAsCjC,IAAI,MAAM,IAAI,cAAc,GAAG,IAAI,CAElC;IAED,IAAI,KAAK,IAAI,iBAAiB,GAAG,IAAI,CAEpC;IAED,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAEnC;IAED,IAAI,aAAa,IAAI,+BAA+B,CAEnD;IAEK,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAIzB,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAI9B,MAAM,IAAI,OAAO;IAIjB,KAAK,IAAI,OAAO;IAIhB,gBAAgB,CAAC,SAAS,EACtB,qBAAqB,CAAC,QAAQ,GAC9B,qBAAqB,CAAC,OAAO,GAC7B,qBAAqB,CAAC,OAAO,GAC7B,qBAAqB,CAAC,4BAA4B,GAClD,qBAAqB,CAAC,eAAe,GACrC,qBAAqB,CAAC,kBAAkB,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,GAAG,IAAI;IAE/F,gBAAgB,CAAC,SAAS,EAAE,qBAAqB,CAAC,iBAAiB,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,0BAA0B,KAAK,IAAI,GAAG,IAAI;IAC/H,gBAAgB,CAAC,SAAS,EAAE,qBAAqB,CAAC,OAAO,GAAG,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,GAAG,IAAI;IAChJ,gBAAgB,CAAC,SAAS,EAAE,qBAAqB,CAAC,cAAc,GAAG,qBAAqB,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAC9H,gBAAgB,CAAC,SAAS,EAAE,qBAAqB,CAAC,0BAA0B,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,mCAAmC,KAAK,IAAI,GAAG,IAAI;IAEjJ,gBAAgB,CAAC,SAAS,EACtB,qBAAqB,CAAC,oBAAoB,GAC1C,qBAAqB,CAAC,uBAAuB,GAC7C,qBAAqB,CAAC,sBAAsB,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,GAAG,IAAI;IAExG,gBAAgB,CAAC,SAAS,EAAE,qBAAqB,CAAC,mBAAmB,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,4BAA4B,KAAK,IAAI,GAAG,IAAI;IAEnI,gBAAgB,CAAC,SAAS,EACtB,qBAAqB,CAAC,sBAAsB,GAC5C,qBAAqB,CAAC,mBAAmB,GACzC,qBAAqB,CAAC,sBAAsB,GAC5C,qBAAqB,CAAC,sBAAsB,GAC5C,qBAAqB,CAAC,qBAAqB,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,GAAG,IAAI;IAEtG,gBAAgB,CAAC,SAAS,EAAE,qBAAqB,CAAC,kBAAkB,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,2BAA2B,KAAK,IAAI,GAAG,IAAI;IACjI,gBAAgB,CAAC,SAAS,EAAE,qBAAqB,CAAC,sBAAsB,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,+BAA+B,KAAK,IAAI,GAAG,IAAI;IAMzI,OAAO,CAAC,kCAAkC;IAIpC,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC;IAQjE,sBAAsB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC;IAQvE,qBAAqB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC;IAQ3E,uBAAuB,IAAI,OAAO,CAAC,YAAY,CAAC;IAQhD,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAQrE,eAAe,CAAC,UAAU,GAAE,MAAM,GAAG,IAAW;CAGzD"}
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}"]}
@@ -18,6 +18,7 @@ export default abstract class TransferUploaderBase<T extends NodeFileDetails | W
18
18
  start(): Promise<void>;
19
19
  private throwIfCannotStart;
20
20
  private setFailedReasonFromError;
21
+ private tryGetPermanentAckError;
21
22
  private tryGetApiFilemailError;
22
23
  private addHealthMonitorEventListeners;
23
24
  private addTransferEventListeners;
@@ -1 +1 @@
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;IA6C5B,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,wBAAwB;IAgBhC,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,8BAA8B;IAuBtC,OAAO,CAAC,yBAAyB;IAwDjC,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"}
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"}
@@ -75,7 +75,6 @@ export default class TransferUploaderBase {
75
75
  this.#abortController = new AbortController();
76
76
  this.#healthMonitor.start();
77
77
  do {
78
- /* eslint-disable no-await-in-loop */
79
78
  try {
80
79
  await this.#transfer.run(this.#pauseController.signal, this.#abortController.signal);
81
80
  }
@@ -112,6 +111,12 @@ export default class TransferUploaderBase {
112
111
  }
113
112
  this.#failedReason = error.message;
114
113
  }
114
+ tryGetPermanentAckError(error) {
115
+ const apiFilemailError = this.tryGetApiFilemailError(error);
116
+ if (apiFilemailError?.status === `InvalidParameter`)
117
+ return apiFilemailError;
118
+ return null;
119
+ }
115
120
  tryGetApiFilemailError(error) {
116
121
  if (error instanceof ApiFilemailError)
117
122
  return error;
@@ -156,8 +161,22 @@ export default class TransferUploaderBase {
156
161
  const errorMessage = `File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} and uploadItemId = ${eventArgs.uploadItemId ?? `<unknown>`} - upload failed: ${eventArgs.reason}`;
157
162
  this.logError(new Error(errorMessage));
158
163
  });
164
+ this.#transfer.addEventListener(TransferUploadEvent.FilesRegistrationBatchFailed, eventArgs => {
165
+ this.logError(eventArgs.error, `Registering a batch of files failed: ${eventArgs.error.message}`, { externalFileIds: eventArgs.externalFileIds });
166
+ if (!this.#config.infiniteRetries && !this.#isShuttingDown) {
167
+ this.#failedReason = `Registering a batch of ${eventArgs.externalFileIds.length} files failed`;
168
+ this.logWarning(`${this.#failedReason}. Failing transfer...`);
169
+ this.failTransfer();
170
+ }
171
+ });
159
172
  this.#transfer.addEventListener(TransferUploadEvent.FileAckFailed, eventArgs => {
160
173
  this.logError(eventArgs.error, `File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} - file ack failed (uploadItemId = ${eventArgs.uploadItemId}): ${eventArgs.reason}`);
174
+ const permanentAckError = this.tryGetPermanentAckError(eventArgs.error);
175
+ if (permanentAckError && !this.#isShuttingDown) {
176
+ this.#failedReason = permanentAckError.reason;
177
+ this.logWarning(`${this.#failedReason}. Failing transfer...`);
178
+ this.failTransfer();
179
+ }
161
180
  });
162
181
  this.#transfer.addEventListener(TransferUploadEvent.FilesBatchAckFailed, eventArgs => {
163
182
  this.logError(eventArgs.error, `Acking a batch of files failed: ${eventArgs.reason}`);
@@ -199,8 +218,8 @@ export default class TransferUploaderBase {
199
218
  const logEntryMetadata = this.getLogEntryMetadata();
200
219
  this.#logger.logWarning(message, logEntryMetadata);
201
220
  }
202
- logError(error, message) {
203
- const logEntryMetadata = this.getLogEntryMetadata();
221
+ logError(error, message, additionalData) {
222
+ const logEntryMetadata = { ...additionalData, ...this.getLogEntryMetadata() };
204
223
  this.#logger.logError(error, message, logEntryMetadata);
205
224
  }
206
225
  getLogEntryMetadata() {
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploaderBase.js","sourceRoot":"","sources":["../../../../src/client/uploader/transferUploaderBase.ts"],"names":[],"mappings":"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","sourcesContent":["import sleep from \"abortable-sleep\";\nimport throttle from \"lodash.throttle\";\n\nimport TransferUpload from \"../../uploader/transferUpload.js\";\nimport PauseController from \"../../uploader/pauseController.js\";\nimport TransferStatus from \"../../utils/types/transferStatus.js\";\nimport TransferUploadEvent from \"../../uploader/transferUploadEvent.js\";\nimport FsError from \"../../utils/fileSystem/fsError.js\";\nimport TransferUploadError from \"../../uploader/transferUploadError.js\";\nimport { createTransferFailureAbortReason } from \"../../uploader/transferFailureAbortReason.js\";\nimport logEventPropertyName from \"../../utils/logging/logEventPropertyNames.js\";\nimport ApiFilemailError from \"../../utils/api/apiFilemailError.js\";\nimport logHealthyStatus from \"../loggers/utils/logHealthyStatus.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 TransferUploader from \"./transferUploader.js\";\nimport type ReadonlyTransferUploadStateFile from \"../../uploader/state/readonlyTransferUploadStateFile.js\";\nimport type TransferUploaderConfig from \"./transferUploaderConfig.js\";\nimport type WebFileDetails from \"../../utils/fileSystem/web/webFileDetails.js\";\nimport TransferHealthMonitorEvent from \"../healthMonitor/events/transferHealthMonitorEvent.js\";\nimport type TransferUploaderHealthMonitor from \"../healthMonitor/transferUploaderHealthMonitor.js\";\n\nconst TransferFailedSleepInMs = 500;\n\nexport default abstract class TransferUploaderBase<T extends NodeFileDetails | WebFileDetails> implements TransferUploader<T> {\n #logger: Logger;\n #trackingId: number | string;\n\n #fileDetails: T[];\n\n #config: TransferUploaderConfig;\n #envValues: EnvironmentVariables;\n\n #pauseController?: PauseController;\n #abortController?: AbortController;\n\n #transfer: TransferUpload<T>;\n #healthMonitor: TransferUploaderHealthMonitor;\n\n #isShuttingDown = false;\n\n #failedReason?: string;\n\n #isHealthy = true;\n #logHealthyStatusThrottled: ReturnType<typeof throttle>;\n\n constructor(transfer: TransferUpload<T>, fileDetails: T[], config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger, healthMonitor: TransferUploaderHealthMonitor, trackingId: number | string) {\n this.#logger = logger;\n this.#trackingId = trackingId;\n\n this.#config = config;\n this.#envValues = envValues;\n\n this.#fileDetails = fileDetails;\n this.#transfer = transfer;\n this.#healthMonitor = healthMonitor;\n\n this.#logHealthyStatusThrottled = throttle(logHealthyStatus, 20_000);\n\n this.addHealthMonitorEventListeners();\n this.addTransferEventListeners();\n }\n\n get transfer(): TransferUpload<T> {\n return this.#transfer;\n }\n\n get healthMonitor(): TransferUploaderHealthMonitor {\n return this.#healthMonitor;\n }\n\n get failedReason(): string | undefined {\n return this.#failedReason;\n }\n\n public pause() {\n this.logInfo(`Pause called on uploader client`);\n\n if (!this.#pauseController)\n throw new TransferUploadError(`Can't pause not started transfer`);\n\n this.#isShuttingDown = true;\n\n this.#pauseController.pause();\n }\n\n public stop() {\n this.logInfo(`Stop called on uploader client`);\n\n if (!this.#abortController)\n throw new TransferUploadError(`Can't stop not started transfer`);\n\n this.#isShuttingDown = true;\n\n this.#abortController.abort(new Error(`Transfer stop requested`));\n }\n\n public async cancel(abortSignal?: AbortSignal) {\n this.logInfo(`Cancel called on uploader client`);\n\n await this.#transfer.cancel(abortSignal);\n }\n\n async start(): Promise<void> {\n this.throwIfCannotStart();\n\n this.logInfo(`Starting upload. Already uploaded bytes: ${this.transfer.uploadedBytesCount}/${this.#transfer.totalSizeInBytes}B, completed files: ${this.transfer.completedFilesCount}.`);\n\n const logMessageEntries = this.#transfer.files.map(f => `'Sending ${f.fileName}' with id = ${f.externalId}. It will be put into '${f.fileDestinationPathInTransfer}' folder.`);\n this.logInfo(`Transfer file details:\\n${logMessageEntries.join(`\\n`)}`);\n\n this.#failedReason = undefined;\n this.#isShuttingDown = false;\n\n this.#pauseController = new PauseController();\n this.#abortController = new AbortController();\n\n this.#healthMonitor.start();\n\n do {\n /* eslint-disable no-await-in-loop */\n try {\n await this.#transfer.run(this.#pauseController.signal, this.#abortController.signal);\n }\n catch (error) {\n this.logError(error as TransferUploadError, `Transfer upload run method exception`);\n\n this.setFailedReasonFromError(error as TransferUploadError);\n this.#isShuttingDown = true;\n\n break;\n }\n finally {\n if (this.#transfer.status !== TransferStatus.Completed && !this.#isShuttingDown) {\n this.logWarning(`Retrying transfer in ${TransferFailedSleepInMs}ms.`);\n\n await sleep(TransferFailedSleepInMs);\n }\n }\n }\n while (this.#transfer.status !== TransferStatus.Completed && !this.#isShuttingDown);\n\n this.#healthMonitor.stop();\n this.#logHealthyStatusThrottled.cancel();\n\n this.logInfo(`Upload finished in status ${TransferStatus[this.#transfer.status]} having ${this.#transfer.progressInPercentage}% completed`);\n }\n\n private throwIfCannotStart() {\n if (this.#transfer.status !== TransferStatus.Failed && this.#transfer.status !== TransferStatus.Aborted && this.#transfer.status !== TransferStatus.Initialized && this.#transfer.status !== TransferStatus.Paused)\n throw new TransferUploadError(`Transfer is in ${TransferStatus[this.#transfer.status]} state and cannot be run`);\n }\n\n private setFailedReasonFromError(error: TransferUploadError) {\n const apiFilemailError = this.tryGetApiFilemailError(error);\n\n if (apiFilemailError) {\n this.#failedReason = apiFilemailError.reason;\n return;\n }\n\n if (error.message.startsWith(`Unhandled error occured`) && error.cause) {\n this.#failedReason = error.cause.message;\n return;\n }\n\n this.#failedReason = error.message;\n }\n\n private tryGetApiFilemailError(error: Error): ApiFilemailError | null {\n if (error instanceof ApiFilemailError)\n return error;\n\n if (error.cause)\n return this.tryGetApiFilemailError(error.cause);\n\n return null;\n }\n\n private addHealthMonitorEventListeners() {\n this.#healthMonitor.addEventListener(TransferHealthMonitorEvent.Healthy, eventArgs => {\n this.#logHealthyStatusThrottled(this.#logger, true, eventArgs, this.getLogEntryMetadata());\n\n if (!this.#isHealthy)\n logHealthyStatus(this.#logger, true, eventArgs, this.getLogEntryMetadata());\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 this.#logHealthyStatusThrottled(this.#logger, false, eventArgs, this.getLogEntryMetadata());\n\n if (this.#isHealthy)\n logHealthyStatus(this.#logger, false, eventArgs, this.getLogEntryMetadata());\n\n this.#isHealthy = false;\n });\n }\n\n private addTransferEventListeners() {\n this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadFailed, eventArgs => {\n const errorMessage = `File ${eventArgs.fileStatus.externalId} having uploadItemId = ${eventArgs.uploadItemId ?? `<unknown>`}, chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} upload failed: ${eventArgs.reason}`;\n\n this.logError(eventArgs.error, errorMessage);\n\n const isFileAccessError = eventArgs.error.cause instanceof FsError;\n const fullFilePathOrName = this.getFullFilePathOrFileName(eventArgs.fileStatus);\n\n if (isFileAccessError && !this.#isShuttingDown) {\n this.#failedReason = `Can't read ${fullFilePathOrName} anymore`;\n\n this.logWarning(`${this.#failedReason}. Failing transfer...`);\n this.failTransfer();\n }\n\n if (!this.#config.infiniteRetries && !this.#isShuttingDown) {\n this.#failedReason = `Uploading ${fullFilePathOrName} failed after ${this.#config.chunkUploadRetryLimit} retries`;\n\n this.logWarning(`${this.#failedReason}. Failing transfer...`);\n this.failTransfer();\n }\n });\n\n this.#transfer.addEventListener(TransferUploadEvent.FileUploadFailed, eventArgs => {\n const errorMessage = `File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} and uploadItemId = ${eventArgs.uploadItemId ?? `<unknown>`} - upload failed: ${eventArgs.reason}`;\n\n this.logError(new Error(errorMessage));\n });\n\n this.#transfer.addEventListener(TransferUploadEvent.FileAckFailed, eventArgs => {\n this.logError(eventArgs.error, `File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} - file ack failed (uploadItemId = ${eventArgs.uploadItemId}): ${eventArgs.reason}`);\n });\n\n this.#transfer.addEventListener(TransferUploadEvent.FilesBatchAckFailed, eventArgs => {\n this.logError(eventArgs.error, `Acking a batch of files failed: ${eventArgs.reason}`);\n });\n\n this.#transfer.addEventListener(TransferUploadEvent.TransferRun, () => this.logInfo(`Transfer run.`));\n this.#transfer.addEventListener(TransferUploadEvent.TransferAbortRequested, () => this.logInfo(`Transfer abort requested`));\n this.#transfer.addEventListener(TransferUploadEvent.TransferAborted, async () => this.logInfo(`Transfer aborted.`));\n this.#transfer.addEventListener(TransferUploadEvent.TransferCancelRequested, () => this.logInfo(`Transfer cancel requested.`));\n this.#transfer.addEventListener(TransferUploadEvent.TransferCanceled, () => this.logInfo(`Transfer canceled.`));\n this.#transfer.addEventListener(TransferUploadEvent.TransferFailed, () => this.logError(new Error(`Transfer failed.`)));\n\n this.#transfer.addEventListener(TransferUploadEvent.TransferCompleted, eventArgs => this.logInfo(`Transfer completed successfully. ID: ${eventArgs.transferId}, URL: ${eventArgs.transferDownloadUrl}`));\n this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadProgressed, eventArgs => this.logTrace(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} and uploadItemId = ${eventArgs.uploadItemId ?? `<unknown>`}, chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} progressed: ${eventArgs.transferredBytesSinceLastEvent} bytes sinc last event. Total progress: ${this.#transfer?.progressInPercentage}%.`));\n\n this.#transfer.addEventListener(TransferUploadEvent.FileUploadStarted, eventArgs => this.logDebug(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} and uploadItemId = ${eventArgs.uploadItemId ?? `<unknown>`} - upload started.`));\n this.#transfer.addEventListener(TransferUploadEvent.FileUploadCompleted, eventArgs => this.logDebug(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} and uploadItemId = ${eventArgs.uploadItemId ?? `<unknown>`} - upload completed.`));\n this.#transfer.addEventListener(TransferUploadEvent.FileCompleted, eventArgs => this.logDebug(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} and uploadItemId = ${eventArgs.uploadItemId ?? `<unknown>`} - completed.`));\n this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadStarted, eventArgs => this.logTrace(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} and uploadItemId = ${eventArgs.uploadItemId ?? `<unknown>`}, chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} - upload started`));\n this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadCompleted, eventArgs => this.logTrace(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} and uploadItemId = ${eventArgs.uploadItemId ?? `<unknown>`}, chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} - upload completed`));\n this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadCompletedPartially, eventArgs => this.logWarning(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} and uploadItemId = ${eventArgs.uploadItemId ?? `<unknown>`}, chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} - uploaded partially - only ${eventArgs.uploadedBytesCount} bytes uploaded`));\n }\n\n private failTransfer() {\n if (!this.#abortController)\n throw new TransferUploadError(`Can't fail not started transfer`);\n\n this.#isShuttingDown = true;\n\n this.#abortController.abort(createTransferFailureAbortReason());\n }\n\n private logTrace(message: string) {\n const logEntryMetadata = this.getLogEntryMetadata();\n this.#logger.logTrace(message, logEntryMetadata);\n }\n\n private logDebug(message: string) {\n const logEntryMetadata = this.getLogEntryMetadata();\n this.#logger.logDebug(message, logEntryMetadata);\n }\n\n private logInfo(message: string) {\n const logEntryMetadata = this.getLogEntryMetadata();\n this.#logger.logInfo(message, logEntryMetadata);\n }\n\n private logWarning(message: string) {\n const logEntryMetadata = this.getLogEntryMetadata();\n this.#logger.logWarning(message, logEntryMetadata);\n }\n\n private logError(error: Error, message?: string) {\n const logEntryMetadata = this.getLogEntryMetadata();\n this.#logger.logError(error, message, logEntryMetadata);\n }\n\n private getLogEntryMetadata() {\n return {\n [logEventPropertyName.TrackingIdPropertyName]: this.#trackingId,\n [logEventPropertyName.TransferIdPropertyName]: this.#transfer.transferId,\n };\n }\n\n private getFullFilePathOrFileName(fileStatus: ReadonlyTransferUploadStateFile): string {\n const fileDetails = this.#fileDetails.find(f => f.externalId === fileStatus.externalId);\n\n if (!fileDetails)\n return fileStatus.fileName;\n\n if (this.isNodeFileDetails(fileDetails))\n return fileDetails.fileFullPath;\n\n return fileDetails.file.name;\n }\n\n private isNodeFileDetails(fileDetails: NodeFileDetails | WebFileDetails): fileDetails is NodeFileDetails {\n return typeof (fileDetails as NodeFileDetails).fileFullPath === `string`;\n }\n}"]}
1
+ {"version":3,"file":"transferUploaderBase.js","sourceRoot":"","sources":["../../../../src/client/uploader/transferUploaderBase.ts"],"names":[],"mappings":"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","sourcesContent":["import sleep from \"abortable-sleep\";\nimport throttle from \"lodash.throttle\";\n\nimport TransferUpload from \"../../uploader/transferUpload.js\";\nimport PauseController from \"../../uploader/pauseController.js\";\nimport TransferStatus from \"../../utils/types/transferStatus.js\";\nimport TransferUploadEvent from \"../../uploader/transferUploadEvent.js\";\nimport FsError from \"../../utils/fileSystem/fsError.js\";\nimport TransferUploadError from \"../../uploader/transferUploadError.js\";\nimport { createTransferFailureAbortReason } from \"../../uploader/transferFailureAbortReason.js\";\nimport logEventPropertyName from \"../../utils/logging/logEventPropertyNames.js\";\nimport ApiFilemailError from \"../../utils/api/apiFilemailError.js\";\nimport logHealthyStatus from \"../loggers/utils/logHealthyStatus.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 TransferUploader from \"./transferUploader.js\";\nimport type ReadonlyTransferUploadStateFile from \"../../uploader/state/readonlyTransferUploadStateFile.js\";\nimport type TransferUploaderConfig from \"./transferUploaderConfig.js\";\nimport type WebFileDetails from \"../../utils/fileSystem/web/webFileDetails.js\";\nimport TransferHealthMonitorEvent from \"../healthMonitor/events/transferHealthMonitorEvent.js\";\nimport type TransferUploaderHealthMonitor from \"../healthMonitor/transferUploaderHealthMonitor.js\";\n\nconst TransferFailedSleepInMs = 500;\n\nexport default abstract class TransferUploaderBase<T extends NodeFileDetails | WebFileDetails> implements TransferUploader<T> {\n #logger: Logger;\n #trackingId: number | string;\n\n #fileDetails: T[];\n\n #config: TransferUploaderConfig;\n #envValues: EnvironmentVariables;\n\n #pauseController?: PauseController;\n #abortController?: AbortController;\n\n #transfer: TransferUpload<T>;\n #healthMonitor: TransferUploaderHealthMonitor;\n\n #isShuttingDown = false;\n\n #failedReason?: string;\n\n #isHealthy = true;\n #logHealthyStatusThrottled: ReturnType<typeof throttle>;\n\n constructor(transfer: TransferUpload<T>, fileDetails: T[], config: TransferUploaderConfig, envValues: EnvironmentVariables, logger: Logger, healthMonitor: TransferUploaderHealthMonitor, trackingId: number | string) {\n this.#logger = logger;\n this.#trackingId = trackingId;\n\n this.#config = config;\n this.#envValues = envValues;\n\n this.#fileDetails = fileDetails;\n this.#transfer = transfer;\n this.#healthMonitor = healthMonitor;\n\n this.#logHealthyStatusThrottled = throttle(logHealthyStatus, 20_000);\n\n this.addHealthMonitorEventListeners();\n this.addTransferEventListeners();\n }\n\n get transfer(): TransferUpload<T> {\n return this.#transfer;\n }\n\n get healthMonitor(): TransferUploaderHealthMonitor {\n return this.#healthMonitor;\n }\n\n get failedReason(): string | undefined {\n return this.#failedReason;\n }\n\n public pause() {\n this.logInfo(`Pause called on uploader client`);\n\n if (!this.#pauseController)\n throw new TransferUploadError(`Can't pause not started transfer`);\n\n this.#isShuttingDown = true;\n\n this.#pauseController.pause();\n }\n\n public stop() {\n this.logInfo(`Stop called on uploader client`);\n\n if (!this.#abortController)\n throw new TransferUploadError(`Can't stop not started transfer`);\n\n this.#isShuttingDown = true;\n\n this.#abortController.abort(new Error(`Transfer stop requested`));\n }\n\n public async cancel(abortSignal?: AbortSignal) {\n this.logInfo(`Cancel called on uploader client`);\n\n await this.#transfer.cancel(abortSignal);\n }\n\n async start(): Promise<void> {\n this.throwIfCannotStart();\n\n this.logInfo(`Starting upload. Already uploaded bytes: ${this.transfer.uploadedBytesCount}/${this.#transfer.totalSizeInBytes}B, completed files: ${this.transfer.completedFilesCount}.`);\n\n const logMessageEntries = this.#transfer.files.map(f => `'Sending ${f.fileName}' with id = ${f.externalId}. It will be put into '${f.fileDestinationPathInTransfer}' folder.`);\n this.logInfo(`Transfer file details:\\n${logMessageEntries.join(`\\n`)}`);\n\n this.#failedReason = undefined;\n this.#isShuttingDown = false;\n\n this.#pauseController = new PauseController();\n this.#abortController = new AbortController();\n\n this.#healthMonitor.start();\n\n do {\n try {\n await this.#transfer.run(this.#pauseController.signal, this.#abortController.signal);\n }\n catch (error) {\n this.logError(error as TransferUploadError, `Transfer upload run method exception`);\n\n this.setFailedReasonFromError(error as TransferUploadError);\n this.#isShuttingDown = true;\n\n break;\n }\n finally {\n if (this.#transfer.status !== TransferStatus.Completed && !this.#isShuttingDown) {\n this.logWarning(`Retrying transfer in ${TransferFailedSleepInMs}ms.`);\n\n await sleep(TransferFailedSleepInMs);\n }\n }\n }\n while (this.#transfer.status !== TransferStatus.Completed && !this.#isShuttingDown);\n\n this.#healthMonitor.stop();\n this.#logHealthyStatusThrottled.cancel();\n\n this.logInfo(`Upload finished in status ${TransferStatus[this.#transfer.status]} having ${this.#transfer.progressInPercentage}% completed`);\n }\n\n private throwIfCannotStart() {\n if (this.#transfer.status !== TransferStatus.Failed && this.#transfer.status !== TransferStatus.Aborted && this.#transfer.status !== TransferStatus.Initialized && this.#transfer.status !== TransferStatus.Paused)\n throw new TransferUploadError(`Transfer is in ${TransferStatus[this.#transfer.status]} state and cannot be run`);\n }\n\n private setFailedReasonFromError(error: TransferUploadError) {\n const apiFilemailError = this.tryGetApiFilemailError(error);\n\n if (apiFilemailError) {\n this.#failedReason = apiFilemailError.reason;\n return;\n }\n\n if (error.message.startsWith(`Unhandled error occured`) && error.cause) {\n this.#failedReason = error.cause.message;\n return;\n }\n\n this.#failedReason = error.message;\n }\n\n private tryGetPermanentAckError(error: Error): ApiFilemailError | null {\n const apiFilemailError = this.tryGetApiFilemailError(error);\n\n if (apiFilemailError?.status === `InvalidParameter`)\n return apiFilemailError;\n\n return null;\n }\n\n private tryGetApiFilemailError(error: Error): ApiFilemailError | null {\n if (error instanceof ApiFilemailError)\n return error;\n\n if (error.cause)\n return this.tryGetApiFilemailError(error.cause);\n\n return null;\n }\n\n private addHealthMonitorEventListeners() {\n this.#healthMonitor.addEventListener(TransferHealthMonitorEvent.Healthy, eventArgs => {\n this.#logHealthyStatusThrottled(this.#logger, true, eventArgs, this.getLogEntryMetadata());\n\n if (!this.#isHealthy)\n logHealthyStatus(this.#logger, true, eventArgs, this.getLogEntryMetadata());\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 this.#logHealthyStatusThrottled(this.#logger, false, eventArgs, this.getLogEntryMetadata());\n\n if (this.#isHealthy)\n logHealthyStatus(this.#logger, false, eventArgs, this.getLogEntryMetadata());\n\n this.#isHealthy = false;\n });\n }\n\n private addTransferEventListeners() {\n this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadFailed, eventArgs => {\n const errorMessage = `File ${eventArgs.fileStatus.externalId} having uploadItemId = ${eventArgs.uploadItemId ?? `<unknown>`}, chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} upload failed: ${eventArgs.reason}`;\n\n this.logError(eventArgs.error, errorMessage);\n\n const isFileAccessError = eventArgs.error.cause instanceof FsError;\n const fullFilePathOrName = this.getFullFilePathOrFileName(eventArgs.fileStatus);\n\n if (isFileAccessError && !this.#isShuttingDown) {\n this.#failedReason = `Can't read ${fullFilePathOrName} anymore`;\n\n this.logWarning(`${this.#failedReason}. Failing transfer...`);\n this.failTransfer();\n }\n\n if (!this.#config.infiniteRetries && !this.#isShuttingDown) {\n this.#failedReason = `Uploading ${fullFilePathOrName} failed after ${this.#config.chunkUploadRetryLimit} retries`;\n\n this.logWarning(`${this.#failedReason}. Failing transfer...`);\n this.failTransfer();\n }\n });\n\n this.#transfer.addEventListener(TransferUploadEvent.FileUploadFailed, eventArgs => {\n const errorMessage = `File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} and uploadItemId = ${eventArgs.uploadItemId ?? `<unknown>`} - upload failed: ${eventArgs.reason}`;\n\n this.logError(new Error(errorMessage));\n });\n\n this.#transfer.addEventListener(TransferUploadEvent.FilesRegistrationBatchFailed, eventArgs => {\n this.logError(eventArgs.error, `Registering a batch of files failed: ${eventArgs.error.message}`, { externalFileIds: eventArgs.externalFileIds });\n\n if (!this.#config.infiniteRetries && !this.#isShuttingDown) {\n this.#failedReason = `Registering a batch of ${eventArgs.externalFileIds.length} files failed`;\n\n this.logWarning(`${this.#failedReason}. Failing transfer...`);\n this.failTransfer();\n }\n });\n\n this.#transfer.addEventListener(TransferUploadEvent.FileAckFailed, eventArgs => {\n this.logError(eventArgs.error, `File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} - file ack failed (uploadItemId = ${eventArgs.uploadItemId}): ${eventArgs.reason}`);\n\n const permanentAckError = this.tryGetPermanentAckError(eventArgs.error);\n\n if (permanentAckError && !this.#isShuttingDown) {\n this.#failedReason = permanentAckError.reason;\n\n this.logWarning(`${this.#failedReason}. Failing transfer...`);\n this.failTransfer();\n }\n });\n\n this.#transfer.addEventListener(TransferUploadEvent.FilesBatchAckFailed, eventArgs => {\n this.logError(eventArgs.error, `Acking a batch of files failed: ${eventArgs.reason}`);\n });\n\n this.#transfer.addEventListener(TransferUploadEvent.TransferRun, () => this.logInfo(`Transfer run.`));\n this.#transfer.addEventListener(TransferUploadEvent.TransferAbortRequested, () => this.logInfo(`Transfer abort requested`));\n this.#transfer.addEventListener(TransferUploadEvent.TransferAborted, async () => this.logInfo(`Transfer aborted.`));\n this.#transfer.addEventListener(TransferUploadEvent.TransferCancelRequested, () => this.logInfo(`Transfer cancel requested.`));\n this.#transfer.addEventListener(TransferUploadEvent.TransferCanceled, () => this.logInfo(`Transfer canceled.`));\n this.#transfer.addEventListener(TransferUploadEvent.TransferFailed, () => this.logError(new Error(`Transfer failed.`)));\n\n this.#transfer.addEventListener(TransferUploadEvent.TransferCompleted, eventArgs => this.logInfo(`Transfer completed successfully. ID: ${eventArgs.transferId}, URL: ${eventArgs.transferDownloadUrl}`));\n this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadProgressed, eventArgs => this.logTrace(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} and uploadItemId = ${eventArgs.uploadItemId ?? `<unknown>`}, chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} progressed: ${eventArgs.transferredBytesSinceLastEvent} bytes sinc last event. Total progress: ${this.#transfer?.progressInPercentage}%.`));\n\n this.#transfer.addEventListener(TransferUploadEvent.FileUploadStarted, eventArgs => this.logDebug(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} and uploadItemId = ${eventArgs.uploadItemId ?? `<unknown>`} - upload started.`));\n this.#transfer.addEventListener(TransferUploadEvent.FileUploadCompleted, eventArgs => this.logDebug(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} and uploadItemId = ${eventArgs.uploadItemId ?? `<unknown>`} - upload completed.`));\n this.#transfer.addEventListener(TransferUploadEvent.FileCompleted, eventArgs => this.logDebug(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} and uploadItemId = ${eventArgs.uploadItemId ?? `<unknown>`} - completed.`));\n this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadStarted, eventArgs => this.logTrace(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} and uploadItemId = ${eventArgs.uploadItemId ?? `<unknown>`}, chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} - upload started`));\n this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadCompleted, eventArgs => this.logTrace(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} and uploadItemId = ${eventArgs.uploadItemId ?? `<unknown>`}, chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} - upload completed`));\n this.#transfer.addEventListener(TransferUploadEvent.FileChunkUploadCompletedPartially, eventArgs => this.logWarning(`File ${eventArgs.fileStatus.fileName} having external id = ${eventArgs.fileStatus.externalId} and uploadItemId = ${eventArgs.uploadItemId ?? `<unknown>`}, chunk starting at ${eventArgs.chunkStartPosition} having size ${eventArgs.chunkSizeInBytes} - uploaded partially - only ${eventArgs.uploadedBytesCount} bytes uploaded`));\n }\n\n private failTransfer() {\n if (!this.#abortController)\n throw new TransferUploadError(`Can't fail not started transfer`);\n\n this.#isShuttingDown = true;\n\n this.#abortController.abort(createTransferFailureAbortReason());\n }\n\n private logTrace(message: string) {\n const logEntryMetadata = this.getLogEntryMetadata();\n this.#logger.logTrace(message, logEntryMetadata);\n }\n\n private logDebug(message: string) {\n const logEntryMetadata = this.getLogEntryMetadata();\n this.#logger.logDebug(message, logEntryMetadata);\n }\n\n private logInfo(message: string) {\n const logEntryMetadata = this.getLogEntryMetadata();\n this.#logger.logInfo(message, logEntryMetadata);\n }\n\n private logWarning(message: string) {\n const logEntryMetadata = this.getLogEntryMetadata();\n this.#logger.logWarning(message, logEntryMetadata);\n }\n\n private logError(error: Error, message?: string, additionalData?: Record<string, unknown>) {\n const logEntryMetadata = { ...additionalData, ...this.getLogEntryMetadata() };\n this.#logger.logError(error, message, logEntryMetadata);\n }\n\n private getLogEntryMetadata() {\n return {\n [logEventPropertyName.TrackingIdPropertyName]: this.#trackingId,\n [logEventPropertyName.TransferIdPropertyName]: this.#transfer.transferId,\n };\n }\n\n private getFullFilePathOrFileName(fileStatus: ReadonlyTransferUploadStateFile): string {\n const fileDetails = this.#fileDetails.find(f => f.externalId === fileStatus.externalId);\n\n if (!fileDetails)\n return fileStatus.fileName;\n\n if (this.isNodeFileDetails(fileDetails))\n return fileDetails.fileFullPath;\n\n return fileDetails.file.name;\n }\n\n private isNodeFileDetails(fileDetails: NodeFileDetails | WebFileDetails): fileDetails is NodeFileDetails {\n return typeof (fileDetails as NodeFileDetails).fileFullPath === `string`;\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"nodeFileServerDownloadClient.d.ts","sourceRoot":"","sources":["../../../../../src/downloader/api/node/nodeFileServerDownloadClient.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,eAAe,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,mBAAmB,MAAM,kDAAkD,CAAC;AAGxF,OAAO,KAAK,iCAAiC,MAAM,8DAA8D,CAAC;AAClH,OAAO,KAAK,wBAAwB,MAAM,gCAAgC,CAAC;AAC3E,OAAO,wBAAwB,MAAM,qDAAqD,CAAC;AAI3F,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,wBAAyB,YAAW,wBAAwB;;gBAWtG,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM;IAapK,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBvE,OAAO,IAAI,IAAI;IAKT,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAejC,yBAAyB,IAAI,OAAO,CAAC,iCAAiC,CAAC;CAuFhF"}
1
+ {"version":3,"file":"nodeFileServerDownloadClient.d.ts","sourceRoot":"","sources":["../../../../../src/downloader/api/node/nodeFileServerDownloadClient.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,eAAe,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,mBAAmB,MAAM,kDAAkD,CAAC;AAGxF,OAAO,KAAK,iCAAiC,MAAM,8DAA8D,CAAC;AAClH,OAAO,KAAK,wBAAwB,MAAM,gCAAgC,CAAC;AAC3E,OAAO,wBAAwB,MAAM,qDAAqD,CAAC;AAI3F,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,wBAAyB,YAAW,wBAAwB;;gBAWtG,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM;IAapK,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBvE,OAAO,IAAI,IAAI;IAKT,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAejC,yBAAyB,IAAI,OAAO,CAAC,iCAAiC,CAAC;CA4FhF"}
@@ -80,10 +80,14 @@ export default class NodeFileServerDownloadClient extends NodeFileServerClientBa
80
80
  throw new Error(`${response.responsestatus}: ${response.errormessage}`);
81
81
  }
82
82
  #crateGotRangeHashOptions() {
83
+ // FilesDB transfers cannot be resolved by transferid+thefilename on the fileserver - the filetoken from the download url must be used instead
84
+ const { filetoken } = UrlUtil.getQueryStringFromUrl(this.#downloadUrl);
85
+ const fileIdentification = filetoken
86
+ ? { filetoken }
87
+ : { transferid: this.#transferId, thefilename: this.#fileName };
83
88
  return {
84
89
  searchParams: {
85
- transferid: this.#transferId,
86
- thefilename: this.#fileName,
90
+ ...fileIdentification,
87
91
  position: this.#start,
88
92
  length: 1 + this.#end - this.#start,
89
93
  },
@@ -1 +1 @@
1
- {"version":3,"file":"nodeFileServerDownloadClient.js","sourceRoot":"","sources":["../../../../../src/downloader/api/node/nodeFileServerDownloadClient.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,EAAE,EAA8B,OAAO,IAAI,UAAU,EAAyB,MAAM,KAAK,CAAC;AACpG,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAI3C,OAAO,EAAqB,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAI5F,OAAO,wBAAwB,MAAM,qDAAqD,CAAC;AAC3F,OAAO,OAAO,MAAM,+BAA+B,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AAEtF,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,wBAAwB;IAC9E,YAAY,CAAS;IACrB,MAAM,CAAgB;IACtB,IAAI,CAAgB;IACpB,QAAQ,CAAkB;IAC1B,SAAS,CAAS;IAClB,WAAW,CAAS;IACpB,iBAAiB,CAAM;IACvB,eAAe,GAAsB,IAAI,CAAC;IAC1C,wBAAwB,CAAS;IAEjC,YAAY,WAAmB,EAAE,KAAoB,EAAE,GAAkB,EAAE,UAAkB,EAAE,QAAgB,EAAE,OAAwB,EAAE,uBAA+B;QACtK,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACvD,IAAI,CAAC,wBAAwB,GAAG,uBAAuB,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,mBAAwC;QACnD,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,MAAM,eAAe,GAAG,IAAI,CAAC,8BAA8B,EAAE,CAAC;QAC9D,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,eAAe,EAAE,CAAC,CAAC;QAC7E,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,MAAM,mBAAmB,CAAC,mBAAmB,EAAE,CAAC;QAEvF,MAAM,eAAe,GAAG,IAAI,CAAC,8BAA8B,EAAE,CAAC;QAC9D,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC;QAE7D,IAAI,cAAc,EAAE,CAAC;YACjB,OAAO,MAAM,QAAQ,CACjB,IAAI,CAAC,eAAe,EACpB,cAAmD,EACnD,UAAU,CACb,CAAC;QACN,CAAC;QAED,OAAO,QAAQ,CACX,IAAI,CAAC,eAAe,EACpB,UAAU,CACb,CAAC;IACN,CAAC;IAED,OAAO;QACH,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC;QAChC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,cAAc;QAChB,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;YAC1C,MAAM,IAAI,KAAK,CAAC,0EAA0E,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAE/I,MAAM,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC1D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC,IAAI,EAAwB,CAAC;QAErH,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAExC,IAAI,CAAC,WAAW,CAAC,IAAI;YACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAEhG,OAAO,WAAW,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,yBAAyB;QAC3B,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,MAAM,gBAAgB,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE3D,IAAI,gBAAgB,CAAC,UAAU,KAAK,GAAG;YACnC,MAAM,IAAI,KAAK,CAAC,QAAQ,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC;QAE3D,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACpE,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,WAAW,IAAI,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1D,MAAM,aAAa,GAAG,uDAAuD,CAAC;YAC9E,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAChD,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;gBAC3C,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO;YACH,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,CAAE,EAAE,EAAE,CAAC;YACnE,QAAQ;SACX,CAAC;IACN,CAAC;IAED,eAAe;QACX,IAAI,IAAI,CAAC,eAAe;YACpB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACzF,CAAC;IAED,qBAAqB,CAAC,QAA+B;QACjD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,uDAAuD,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAE5H,IAAI,QAAQ,CAAC,cAAc,KAAK,IAAI;YAChC,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,cAAc,KAAK,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,yBAAyB;QACrB,OAAO;YACH,YAAY,EAAE;gBACV,UAAU,EAAE,IAAI,CAAC,WAAW;gBAC5B,WAAW,EAAE,IAAI,CAAC,SAAS;gBAC3B,QAAQ,EAAE,IAAI,CAAC,MAAO;gBACtB,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,IAAK,GAAG,IAAI,CAAC,MAAO;aACxC;YACD,KAAK,EAAE;gBACH,KAAK,EAAE,CAAC;gBACR,YAAY,EAAE,KAAK;aACtB;SACJ,CAAC;IACN,CAAC;IAED,8BAA8B;QAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAe,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS;YACvB,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAEpD,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;YAC1C,OAAO,CAAC,KAAK,GAAG,SAAS,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAExD,OAAO,IAAI,UAAU,CAAC;YAClB,OAAO;YACP,YAAY,EAAE;gBACV,GAAG,KAAK,EAAE,kIAAkI;gBAC5I,OAAO,EAAE,IAAI,EAAE,4IAA4I;gBAC3J,SAAS,EAAE,IAAI;aAClB;YACD,OAAO,EAAE;gBACL,MAAM,EAAE,IAAI,CAAC,wBAAwB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,SAAS;aACxF;SACJ,CAAC,CAAC;IACP,CAAC;IAED,sBAAsB;QAClB,MAAM,OAAO,GAAe,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS;YACvB,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAEpD,OAAO,GAAG,CAAC,MAAM,CAAC;YACd,SAAS,EAAE,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;YACpD,OAAO;YACP,KAAK,EAAE;gBACH,GAAG,yBAAyB;aAC/B;SACJ,CAAC,CAAC;IACP,CAAC;CACJ","sourcesContent":["import got, { Got, Headers as GotHeaders, Options as GotOptions, Request as GotRequest } from \"got\";\nimport { pipeline } from \"stream/promises\";\n\nimport type DownloadOptions from \"../../downloadOptions.js\";\nimport type ChunkStreamProvider from \"../../../utils/fileSystem/chunkStreamProvider.js\";\nimport { type BaseResponse, isBaseResponse } from \"../../../utils/api/dtos/baseResponse.js\";\nimport type GetRangehashResponse from \"../../../utils/api/dtos/getRangehashResponse.js\";\nimport type GetCompressedFileMetadataResponse from \"../../../utils/api/dtos/getCompressedFileMetadataResponse.js\";\nimport type FileServerDownloadClient from \"../fileServerDownloadClient.js\";\nimport NodeFileServerClientBase from \"../../../utils/api/node/nodeFileserverClientBase.js\";\nimport UrlUtil from \"../../../utils/api/urlUtil.js\";\nimport { retryEconnresetWorkaround } from \"../../../utils/api/node/gotWorkarounds.js\";\n\nexport default class NodeFileServerDownloadClient extends NodeFileServerClientBase implements FileServerDownloadClient {\n #downloadUrl: string;\n #start: number | null;\n #end: number | null;\n #options: DownloadOptions;\n #fileName: string;\n #transferId: string;\n #fileserverClient: Got;\n #downloadStream: GotRequest | null = null;\n #downloadIdleTimeoutInMs: number;\n\n constructor(downloadUrl: string, start: number | null, end: number | null, transferId: string, fileName: string, options: DownloadOptions, downloadIdleTimeoutInMs: number) {\n super();\n\n this.#downloadUrl = downloadUrl;\n this.#start = start;\n this.#end = end;\n this.#options = options;\n this.#transferId = transferId;\n this.#fileName = fileName;\n this.#fileserverClient = this.#createBaseGotInstance();\n this.#downloadIdleTimeoutInMs = downloadIdleTimeoutInMs;\n }\n\n async download(chunkStreamProvider: ChunkStreamProvider): Promise<void> {\n this.#throwIfRunning();\n\n const downloadRequest = this.#createGotChunkDownloadOptions();\n this.#downloadStream = got.stream(this.#downloadUrl, { ...downloadRequest });\n const { fileStream, decipherStream } = await chunkStreamProvider.getChunkWriteStream();\n\n const progressHandler = this.getDataTransferProgressHandler();\n this.#downloadStream.on(`downloadProgress`, progressHandler);\n\n if (decipherStream) {\n return await pipeline(\n this.#downloadStream,\n decipherStream as unknown as NodeJS.ReadWriteStream,\n fileStream,\n );\n }\n\n return pipeline(\n this.#downloadStream,\n fileStream,\n );\n }\n\n release(): void {\n this.#downloadStream?.destroy();\n this.#downloadStream = null;\n }\n\n async getMd5Checksum(): Promise<string> {\n if (this.#start === null || this.#end === null)\n throw new Error(`MD5 checksum cannot be calculated if the start or end is not known --> ${this.#downloadUrl}:${this.#start}:${this.#end}`);\n\n const rangeHashOptions = this.#crateGotRangeHashOptions();\n const md5response = await this.#fileserverClient(`GetRangehash.ashx`, rangeHashOptions).json<GetRangehashResponse>();\n\n this.#throwIfResponseNotOk(md5response);\n\n if (!md5response.hash)\n throw new Error(`Range hash is empty --> ${this.#downloadUrl}:${this.#start}:${this.#end}`);\n\n return md5response.hash;\n }\n\n async getCompressedFileMetadata(): Promise<GetCompressedFileMetadataResponse> {\n this.#throwIfRunning();\n\n const metadataResponse = await got.head(this.#downloadUrl);\n\n if (metadataResponse.statusCode !== 200)\n throw new Error(`HTTP ${metadataResponse.statusCode}`);\n\n const disposition = metadataResponse.headers[`content-disposition`];\n let fileName = ``;\n if (disposition && disposition.indexOf(`attachment;`) === 0) {\n const filenameRegex = /filename\\*?=['\"]?(?:UTF-\\d['\"]*)?([^;\\r\\n\"']*)['\"]?;?/;\n const matches = filenameRegex.exec(disposition);\n if (matches && matches.length > 1 && matches[1])\n fileName = matches[1];\n }\n return {\n fileSize: parseInt(metadataResponse.headers[`content-length`]!, 10),\n fileName,\n };\n }\n\n #throwIfRunning() {\n if (this.#downloadStream)\n throw new Error(`Attempted to run a chunk download while it is already running`);\n }\n\n #throwIfResponseNotOk(response: BaseResponse<unknown>) {\n if (!isBaseResponse(response))\n throw new Error(`FS response is not a valid base response object --> ${this.#downloadUrl}:${this.#start}:${this.#end}`);\n\n if (response.responsestatus !== `OK`)\n throw new Error(`${response.responsestatus}: ${response.errormessage}`);\n }\n\n #crateGotRangeHashOptions() {\n return {\n searchParams: {\n transferid: this.#transferId,\n thefilename: this.#fileName,\n position: this.#start!,\n length: 1 + this.#end! - this.#start!,\n },\n retry: {\n limit: 5,\n backoffLimit: 10000,\n },\n };\n }\n\n #createGotChunkDownloadOptions(): GotOptions {\n const query = UrlUtil.getQueryStringFromUrl(this.#downloadUrl);\n const headers: GotHeaders = {};\n\n if (this.#options.userAgent)\n headers[`User-Agent`] = this.#options.userAgent;\n\n if (this.#start !== null && this.#end !== null)\n headers.Range = `bytes=${this.#start}-${this.#end}`;\n\n return new GotOptions({\n headers,\n searchParams: {\n ...query, // need to unfold original query - when using url with query included got will replace the query with provided searchParams option\n skipreg: true, // make sure to implement download registrations - figure out a good way for file-by-file scenarios (current desktop v2 is a bit verbose...)\n skipcheck: true,\n },\n timeout: {\n socket: this.#downloadIdleTimeoutInMs > 0 ? this.#downloadIdleTimeoutInMs : undefined,\n },\n });\n }\n\n #createBaseGotInstance(): Got {\n const headers: GotHeaders = {};\n\n if (this.#options.userAgent)\n headers[`User-Agent`] = this.#options.userAgent;\n\n return got.extend({\n prefixUrl: UrlUtil.getHostFromUrl(this.#downloadUrl),\n headers,\n retry: {\n ...retryEconnresetWorkaround,\n },\n });\n }\n}"]}
1
+ {"version":3,"file":"nodeFileServerDownloadClient.js","sourceRoot":"","sources":["../../../../../src/downloader/api/node/nodeFileServerDownloadClient.ts"],"names":[],"mappings":"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","sourcesContent":["import got, { Got, Headers as GotHeaders, Options as GotOptions, Request as GotRequest } from \"got\";\nimport { pipeline } from \"stream/promises\";\n\nimport type DownloadOptions from \"../../downloadOptions.js\";\nimport type ChunkStreamProvider from \"../../../utils/fileSystem/chunkStreamProvider.js\";\nimport { type BaseResponse, isBaseResponse } from \"../../../utils/api/dtos/baseResponse.js\";\nimport type GetRangehashResponse from \"../../../utils/api/dtos/getRangehashResponse.js\";\nimport type GetCompressedFileMetadataResponse from \"../../../utils/api/dtos/getCompressedFileMetadataResponse.js\";\nimport type FileServerDownloadClient from \"../fileServerDownloadClient.js\";\nimport NodeFileServerClientBase from \"../../../utils/api/node/nodeFileserverClientBase.js\";\nimport UrlUtil from \"../../../utils/api/urlUtil.js\";\nimport { retryEconnresetWorkaround } from \"../../../utils/api/node/gotWorkarounds.js\";\n\nexport default class NodeFileServerDownloadClient extends NodeFileServerClientBase implements FileServerDownloadClient {\n #downloadUrl: string;\n #start: number | null;\n #end: number | null;\n #options: DownloadOptions;\n #fileName: string;\n #transferId: string;\n #fileserverClient: Got;\n #downloadStream: GotRequest | null = null;\n #downloadIdleTimeoutInMs: number;\n\n constructor(downloadUrl: string, start: number | null, end: number | null, transferId: string, fileName: string, options: DownloadOptions, downloadIdleTimeoutInMs: number) {\n super();\n\n this.#downloadUrl = downloadUrl;\n this.#start = start;\n this.#end = end;\n this.#options = options;\n this.#transferId = transferId;\n this.#fileName = fileName;\n this.#fileserverClient = this.#createBaseGotInstance();\n this.#downloadIdleTimeoutInMs = downloadIdleTimeoutInMs;\n }\n\n async download(chunkStreamProvider: ChunkStreamProvider): Promise<void> {\n this.#throwIfRunning();\n\n const downloadRequest = this.#createGotChunkDownloadOptions();\n this.#downloadStream = got.stream(this.#downloadUrl, { ...downloadRequest });\n const { fileStream, decipherStream } = await chunkStreamProvider.getChunkWriteStream();\n\n const progressHandler = this.getDataTransferProgressHandler();\n this.#downloadStream.on(`downloadProgress`, progressHandler);\n\n if (decipherStream) {\n return await pipeline(\n this.#downloadStream,\n decipherStream as unknown as NodeJS.ReadWriteStream,\n fileStream,\n );\n }\n\n return pipeline(\n this.#downloadStream,\n fileStream,\n );\n }\n\n release(): void {\n this.#downloadStream?.destroy();\n this.#downloadStream = null;\n }\n\n async getMd5Checksum(): Promise<string> {\n if (this.#start === null || this.#end === null)\n throw new Error(`MD5 checksum cannot be calculated if the start or end is not known --> ${this.#downloadUrl}:${this.#start}:${this.#end}`);\n\n const rangeHashOptions = this.#crateGotRangeHashOptions();\n const md5response = await this.#fileserverClient(`GetRangehash.ashx`, rangeHashOptions).json<GetRangehashResponse>();\n\n this.#throwIfResponseNotOk(md5response);\n\n if (!md5response.hash)\n throw new Error(`Range hash is empty --> ${this.#downloadUrl}:${this.#start}:${this.#end}`);\n\n return md5response.hash;\n }\n\n async getCompressedFileMetadata(): Promise<GetCompressedFileMetadataResponse> {\n this.#throwIfRunning();\n\n const metadataResponse = await got.head(this.#downloadUrl);\n\n if (metadataResponse.statusCode !== 200)\n throw new Error(`HTTP ${metadataResponse.statusCode}`);\n\n const disposition = metadataResponse.headers[`content-disposition`];\n let fileName = ``;\n if (disposition && disposition.indexOf(`attachment;`) === 0) {\n const filenameRegex = /filename\\*?=['\"]?(?:UTF-\\d['\"]*)?([^;\\r\\n\"']*)['\"]?;?/;\n const matches = filenameRegex.exec(disposition);\n if (matches && matches.length > 1 && matches[1])\n fileName = matches[1];\n }\n return {\n fileSize: parseInt(metadataResponse.headers[`content-length`]!, 10),\n fileName,\n };\n }\n\n #throwIfRunning() {\n if (this.#downloadStream)\n throw new Error(`Attempted to run a chunk download while it is already running`);\n }\n\n #throwIfResponseNotOk(response: BaseResponse<unknown>) {\n if (!isBaseResponse(response))\n throw new Error(`FS response is not a valid base response object --> ${this.#downloadUrl}:${this.#start}:${this.#end}`);\n\n if (response.responsestatus !== `OK`)\n throw new Error(`${response.responsestatus}: ${response.errormessage}`);\n }\n\n #crateGotRangeHashOptions() {\n // FilesDB transfers cannot be resolved by transferid+thefilename on the fileserver - the filetoken from the download url must be used instead\n const { filetoken } = UrlUtil.getQueryStringFromUrl(this.#downloadUrl);\n const fileIdentification = filetoken\n ? { filetoken }\n : { transferid: this.#transferId, thefilename: this.#fileName };\n\n return {\n searchParams: {\n ...fileIdentification,\n position: this.#start!,\n length: 1 + this.#end! - this.#start!,\n },\n retry: {\n limit: 5,\n backoffLimit: 10000,\n },\n };\n }\n\n #createGotChunkDownloadOptions(): GotOptions {\n const query = UrlUtil.getQueryStringFromUrl(this.#downloadUrl);\n const headers: GotHeaders = {};\n\n if (this.#options.userAgent)\n headers[`User-Agent`] = this.#options.userAgent;\n\n if (this.#start !== null && this.#end !== null)\n headers.Range = `bytes=${this.#start}-${this.#end}`;\n\n return new GotOptions({\n headers,\n searchParams: {\n ...query, // need to unfold original query - when using url with query included got will replace the query with provided searchParams option\n skipreg: true, // make sure to implement download registrations - figure out a good way for file-by-file scenarios (current desktop v2 is a bit verbose...)\n skipcheck: true,\n },\n timeout: {\n socket: this.#downloadIdleTimeoutInMs > 0 ? this.#downloadIdleTimeoutInMs : undefined,\n },\n });\n }\n\n #createBaseGotInstance(): Got {\n const headers: GotHeaders = {};\n\n if (this.#options.userAgent)\n headers[`User-Agent`] = this.#options.userAgent;\n\n return got.extend({\n prefixUrl: UrlUtil.getHostFromUrl(this.#downloadUrl),\n headers,\n retry: {\n ...retryEconnresetWorkaround,\n },\n });\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"chunkDownloader.d.ts","sourceRoot":"","sources":["../../../src/downloader/chunkDownloader.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,qBAAqB,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,gBAAgB,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,aAAa,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,uBAAuB,MAAM,yCAAyC,CAAC;AACnF,OAAO,KAAK,0BAA0B,MAAM,mDAAmD,CAAC;AAChG,OAAO,KAAK,YAAY,MAAM,iCAAiC,CAAC;AAIhE,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,4CAA4C,CAAC;AAEpG,MAAM,CAAC,OAAO,OAAO,eAAe;;gBAiB5B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,qBAAqB,EAC5B,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,eAAe,EACxB,uBAAuB,EAAE,uBAAuB,EAChD,0BAA0B,EAAE,0BAA0B,CAAC,MAAM,CAAC,EAC9D,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,cAAc,EACtB,cAAc,CAAC,EAAE,iCAAiC;IAehD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CA8QlC"}
1
+ {"version":3,"file":"chunkDownloader.d.ts","sourceRoot":"","sources":["../../../src/downloader/chunkDownloader.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,qBAAqB,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,gBAAgB,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,aAAa,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,uBAAuB,MAAM,yCAAyC,CAAC;AACnF,OAAO,KAAK,0BAA0B,MAAM,mDAAmD,CAAC;AAChG,OAAO,KAAK,YAAY,MAAM,iCAAiC,CAAC;AAIhE,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,4CAA4C,CAAC;AAEpG,MAAM,CAAC,OAAO,OAAO,eAAe;;gBAiB5B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,qBAAqB,EAC5B,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,eAAe,EACxB,uBAAuB,EAAE,uBAAuB,EAChD,0BAA0B,EAAE,0BAA0B,CAAC,MAAM,CAAC,EAC9D,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,cAAc,EACtB,cAAc,CAAC,EAAE,iCAAiC;IAehD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CA8QlC"}
@@ -1,4 +1,3 @@
1
- /* eslint-disable no-await-in-loop */
2
1
  import { RequestError } from "got";
3
2
  import sleep from "abortable-sleep";
4
3
  import TransferStatus from "../utils/types/transferStatus.js";