filemail-sdk 3.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +11 -0
- package/dist/src/client/downloaderCore.d.ts +23 -0
- package/dist/src/client/downloaderCore.js +199 -0
- package/dist/src/client/downloaderCore.js.map +1 -0
- package/dist/src/client/environmentVariables.d.ts +6 -0
- package/dist/src/client/environmentVariables.js +2 -0
- package/dist/src/client/environmentVariables.js.map +1 -0
- package/dist/src/client/loggers/dummyLogger.d.ts +8 -0
- package/dist/src/client/loggers/dummyLogger.js +10 -0
- package/dist/src/client/loggers/dummyLogger.js.map +1 -0
- package/dist/src/client/loggers/logger.d.ts +7 -0
- package/dist/src/client/loggers/logger.js +2 -0
- package/dist/src/client/loggers/logger.js.map +1 -0
- package/dist/src/client/node/nodeFileDetailsProvider.d.ts +16 -0
- package/dist/src/client/node/nodeFileDetailsProvider.js +74 -0
- package/dist/src/client/node/nodeFileDetailsProvider.js.map +1 -0
- package/dist/src/client/node/nodeTransferDownloader.d.ts +35 -0
- package/dist/src/client/node/nodeTransferDownloader.js +78 -0
- package/dist/src/client/node/nodeTransferDownloader.js.map +1 -0
- package/dist/src/client/node/nodeTransferUploader.d.ts +21 -0
- package/dist/src/client/node/nodeTransferUploader.js +160 -0
- package/dist/src/client/node/nodeTransferUploader.js.map +1 -0
- package/dist/src/client/transferDownloader.d.ts +21 -0
- package/dist/src/client/transferDownloader.js +2 -0
- package/dist/src/client/transferDownloader.js.map +1 -0
- package/dist/src/client/transferUploader.d.ts +9 -0
- package/dist/src/client/transferUploader.js +2 -0
- package/dist/src/client/transferUploader.js.map +1 -0
- package/dist/src/client/transferUploaderOptions.d.ts +18 -0
- package/dist/src/client/transferUploaderOptions.js +2 -0
- package/dist/src/client/transferUploaderOptions.js.map +1 -0
- package/dist/src/downloader/api/fileServerDownloadClient.d.ts +10 -0
- package/dist/src/downloader/api/fileServerDownloadClient.js +2 -0
- package/dist/src/downloader/api/fileServerDownloadClient.js.map +1 -0
- package/dist/src/downloader/api/node/nodeFileServerDownloadClient.d.ts +11 -0
- package/dist/src/downloader/api/node/nodeFileServerDownloadClient.js +120 -0
- package/dist/src/downloader/api/node/nodeFileServerDownloadClient.js.map +1 -0
- package/dist/src/downloader/chunkDownloader.d.ts +12 -0
- package/dist/src/downloader/chunkDownloader.js +172 -0
- package/dist/src/downloader/chunkDownloader.js.map +1 -0
- package/dist/src/downloader/downloadFolderResolver.d.ts +6 -0
- package/dist/src/downloader/downloadFolderResolver.js +72 -0
- package/dist/src/downloader/downloadFolderResolver.js.map +1 -0
- package/dist/src/downloader/downloadOptions.d.ts +147 -0
- package/dist/src/downloader/downloadOptions.js +150 -0
- package/dist/src/downloader/downloadOptions.js.map +1 -0
- package/dist/src/downloader/downloadStatus/downloadFileChunkProgress.d.ts +12 -0
- package/dist/src/downloader/downloadStatus/downloadFileChunkProgress.js +14 -0
- package/dist/src/downloader/downloadStatus/downloadFileChunkProgress.js.map +1 -0
- package/dist/src/downloader/downloadStatus/downloadFileProgress.d.ts +16 -0
- package/dist/src/downloader/downloadStatus/downloadFileProgress.js +19 -0
- package/dist/src/downloader/downloadStatus/downloadFileProgress.js.map +1 -0
- package/dist/src/downloader/downloadStatus/downloadState.d.ts +40 -0
- package/dist/src/downloader/downloadStatus/downloadState.js +352 -0
- package/dist/src/downloader/downloadStatus/downloadState.js.map +1 -0
- package/dist/src/downloader/downloadTracker.d.ts +16 -0
- package/dist/src/downloader/downloadTracker.js +236 -0
- package/dist/src/downloader/downloadTracker.js.map +1 -0
- package/dist/src/downloader/dtos/downloadCommand.d.ts +9 -0
- package/dist/src/downloader/dtos/downloadCommand.js +2 -0
- package/dist/src/downloader/dtos/downloadCommand.js.map +1 -0
- package/dist/src/downloader/dtos/downloadError.d.ts +5 -0
- package/dist/src/downloader/dtos/downloadError.js +8 -0
- package/dist/src/downloader/dtos/downloadError.js.map +1 -0
- package/dist/src/downloader/dtos/downloadErrorCode.d.ts +11 -0
- package/dist/src/downloader/dtos/downloadErrorCode.js +13 -0
- package/dist/src/downloader/dtos/downloadErrorCode.js.map +1 -0
- package/dist/src/downloader/dtos/downloadEvent.d.ts +27 -0
- package/dist/src/downloader/dtos/downloadEvent.js +29 -0
- package/dist/src/downloader/dtos/downloadEvent.js.map +1 -0
- package/dist/src/downloader/dtos/downloadFileChunkInfo.d.ts +19 -0
- package/dist/src/downloader/dtos/downloadFileChunkInfo.js +39 -0
- package/dist/src/downloader/dtos/downloadFileChunkInfo.js.map +1 -0
- package/dist/src/downloader/dtos/downloadFileInfo.d.ts +44 -0
- package/dist/src/downloader/dtos/downloadFileInfo.js +114 -0
- package/dist/src/downloader/dtos/downloadFileInfo.js.map +1 -0
- package/dist/src/downloader/dtos/downloadInfo.d.ts +7 -0
- package/dist/src/downloader/dtos/downloadInfo.js +2 -0
- package/dist/src/downloader/dtos/downloadInfo.js.map +1 -0
- package/dist/src/downloader/dtos/downloadTrackerFileInfo.d.ts +27 -0
- package/dist/src/downloader/dtos/downloadTrackerFileInfo.js +2 -0
- package/dist/src/downloader/dtos/downloadTrackerFileInfo.js.map +1 -0
- package/dist/src/downloader/dtos/downloadTrackerProgressInfo.d.ts +6 -0
- package/dist/src/downloader/dtos/downloadTrackerProgressInfo.js +2 -0
- package/dist/src/downloader/dtos/downloadTrackerProgressInfo.js.map +1 -0
- package/dist/src/downloader/dtos/downloaderRestoredState.d.ts +4 -0
- package/dist/src/downloader/dtos/downloaderRestoredState.js +2 -0
- package/dist/src/downloader/dtos/downloaderRestoredState.js.map +1 -0
- package/dist/src/downloader/eventArgs/chunkDownloadEventArgs.d.ts +9 -0
- package/dist/src/downloader/eventArgs/chunkDownloadEventArgs.js +2 -0
- package/dist/src/downloader/eventArgs/chunkDownloadEventArgs.js.map +1 -0
- package/dist/src/downloader/eventArgs/chunkDownloadFailedEventArgs.d.ts +6 -0
- package/dist/src/downloader/eventArgs/chunkDownloadFailedEventArgs.js +2 -0
- package/dist/src/downloader/eventArgs/chunkDownloadFailedEventArgs.js.map +1 -0
- package/dist/src/downloader/eventArgs/downloadCompletedEventArgs.d.ts +6 -0
- package/dist/src/downloader/eventArgs/downloadCompletedEventArgs.js +2 -0
- package/dist/src/downloader/eventArgs/downloadCompletedEventArgs.js.map +1 -0
- package/dist/src/downloader/eventArgs/downloadEventArgs.d.ts +18 -0
- package/dist/src/downloader/eventArgs/downloadEventArgs.js +2 -0
- package/dist/src/downloader/eventArgs/downloadEventArgs.js.map +1 -0
- package/dist/src/downloader/eventArgs/fileDownloadEventArgs.d.ts +7 -0
- package/dist/src/downloader/eventArgs/fileDownloadEventArgs.js +2 -0
- package/dist/src/downloader/eventArgs/fileDownloadEventArgs.js.map +1 -0
- package/dist/src/downloader/eventArgs/fileDownloadFailedEventArgs.d.ts +6 -0
- package/dist/src/downloader/eventArgs/fileDownloadFailedEventArgs.js +2 -0
- package/dist/src/downloader/eventArgs/fileDownloadFailedEventArgs.js.map +1 -0
- package/dist/src/downloader/filesDownloader.d.ts +20 -0
- package/dist/src/downloader/filesDownloader.js +199 -0
- package/dist/src/downloader/filesDownloader.js.map +1 -0
- package/dist/src/downloader/filesPreparer.d.ts +7 -0
- package/dist/src/downloader/filesPreparer.js +55 -0
- package/dist/src/downloader/filesPreparer.js.map +1 -0
- package/dist/src/index.d.ts +69 -0
- package/dist/src/index.js +70 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/uploader/api/fileServerUploadClient.d.ts +8 -0
- package/dist/src/uploader/api/fileServerUploadClient.js +2 -0
- package/dist/src/uploader/api/fileServerUploadClient.js.map +1 -0
- package/dist/src/uploader/api/node/nodeFileServerUploadClient.d.ts +16 -0
- package/dist/src/uploader/api/node/nodeFileServerUploadClient.js +145 -0
- package/dist/src/uploader/api/node/nodeFileServerUploadClient.js.map +1 -0
- package/dist/src/uploader/eventArgs/fileChunkEventArgs.d.ts +8 -0
- package/dist/src/uploader/eventArgs/fileChunkEventArgs.js +2 -0
- package/dist/src/uploader/eventArgs/fileChunkEventArgs.js.map +1 -0
- package/dist/src/uploader/eventArgs/fileChunkUploadFailedEventArgs.d.ts +5 -0
- package/dist/src/uploader/eventArgs/fileChunkUploadFailedEventArgs.js +2 -0
- package/dist/src/uploader/eventArgs/fileChunkUploadFailedEventArgs.js.map +1 -0
- package/dist/src/uploader/eventArgs/fileEventArgs.d.ts +5 -0
- package/dist/src/uploader/eventArgs/fileEventArgs.js +2 -0
- package/dist/src/uploader/eventArgs/fileEventArgs.js.map +1 -0
- package/dist/src/uploader/eventArgs/fileUploadFailedEventArgs.d.ts +5 -0
- package/dist/src/uploader/eventArgs/fileUploadFailedEventArgs.js +2 -0
- package/dist/src/uploader/eventArgs/fileUploadFailedEventArgs.js.map +1 -0
- package/dist/src/uploader/eventArgs/transferCompletedEventArgs.d.ts +4 -0
- package/dist/src/uploader/eventArgs/transferCompletedEventArgs.js +2 -0
- package/dist/src/uploader/eventArgs/transferCompletedEventArgs.js.map +1 -0
- package/dist/src/uploader/export/transferExportData.d.ts +9 -0
- package/dist/src/uploader/export/transferExportData.js +2 -0
- package/dist/src/uploader/export/transferExportData.js.map +1 -0
- package/dist/src/uploader/export/transferExportFileChunk.d.ts +4 -0
- package/dist/src/uploader/export/transferExportFileChunk.js +2 -0
- package/dist/src/uploader/export/transferExportFileChunk.js.map +1 -0
- package/dist/src/uploader/export/transferExportFileStatus.d.ts +7 -0
- package/dist/src/uploader/export/transferExportFileStatus.js +2 -0
- package/dist/src/uploader/export/transferExportFileStatus.js.map +1 -0
- package/dist/src/uploader/export/transferExportFileStatuses.d.ts +3 -0
- package/dist/src/uploader/export/transferExportFileStatuses.js +2 -0
- package/dist/src/uploader/export/transferExportFileStatuses.js.map +1 -0
- package/dist/src/uploader/export/transferMetadata.d.ts +6 -0
- package/dist/src/uploader/export/transferMetadata.js +2 -0
- package/dist/src/uploader/export/transferMetadata.js.map +1 -0
- package/dist/src/uploader/fileDetailsContainer.d.ts +10 -0
- package/dist/src/uploader/fileDetailsContainer.js +51 -0
- package/dist/src/uploader/fileDetailsContainer.js.map +1 -0
- package/dist/src/uploader/pauseController.d.ts +7 -0
- package/dist/src/uploader/pauseController.js +26 -0
- package/dist/src/uploader/pauseController.js.map +1 -0
- package/dist/src/uploader/transfer.d.ts +55 -0
- package/dist/src/uploader/transfer.js +352 -0
- package/dist/src/uploader/transfer.js.map +1 -0
- package/dist/src/uploader/transferError.d.ts +3 -0
- package/dist/src/uploader/transferError.js +7 -0
- package/dist/src/uploader/transferError.js.map +1 -0
- package/dist/src/uploader/transferEvent.d.ts +19 -0
- package/dist/src/uploader/transferEvent.js +21 -0
- package/dist/src/uploader/transferEvent.js.map +1 -0
- package/dist/src/uploader/transferOptions.d.ts +11 -0
- package/dist/src/uploader/transferOptions.js +2 -0
- package/dist/src/uploader/transferOptions.js.map +1 -0
- package/dist/src/uploader/transferState.d.ts +41 -0
- package/dist/src/uploader/transferState.js +256 -0
- package/dist/src/uploader/transferState.js.map +1 -0
- package/dist/src/uploader/transferStatus/readonlyTransferStatusFile.d.ts +6 -0
- package/dist/src/uploader/transferStatus/readonlyTransferStatusFile.js +2 -0
- package/dist/src/uploader/transferStatus/readonlyTransferStatusFile.js.map +1 -0
- package/dist/src/uploader/transferStatus/readonlyTransferStatusFiles.d.ts +5 -0
- package/dist/src/uploader/transferStatus/readonlyTransferStatusFiles.js +2 -0
- package/dist/src/uploader/transferStatus/readonlyTransferStatusFiles.js.map +1 -0
- package/dist/src/uploader/transferStatus/transferStatusFile.d.ts +16 -0
- package/dist/src/uploader/transferStatus/transferStatusFile.js +17 -0
- package/dist/src/uploader/transferStatus/transferStatusFile.js.map +1 -0
- package/dist/src/uploader/transferStatus/transferStatusFileChunk.d.ts +8 -0
- package/dist/src/uploader/transferStatus/transferStatusFileChunk.js +11 -0
- package/dist/src/uploader/transferStatus/transferStatusFileChunk.js.map +1 -0
- package/dist/src/uploader/transferStatus/transferStatusFiles.d.ts +4 -0
- package/dist/src/uploader/transferStatus/transferStatusFiles.js +3 -0
- package/dist/src/uploader/transferStatus/transferStatusFiles.js.map +1 -0
- package/dist/src/utils/api/apiClient.d.ts +21 -0
- package/dist/src/utils/api/apiClient.js +2 -0
- package/dist/src/utils/api/apiClient.js.map +1 -0
- package/dist/src/utils/api/apiError.d.ts +4 -0
- package/dist/src/utils/api/apiError.js +8 -0
- package/dist/src/utils/api/apiError.js.map +1 -0
- package/dist/src/utils/api/apiInternalErrorCode.d.ts +4 -0
- package/dist/src/utils/api/apiInternalErrorCode.js +6 -0
- package/dist/src/utils/api/apiInternalErrorCode.js.map +1 -0
- package/dist/src/utils/api/dtos/TransferCustomFieldDto.d.ts +8 -0
- package/dist/src/utils/api/dtos/TransferCustomFieldDto.js +2 -0
- package/dist/src/utils/api/dtos/TransferCustomFieldDto.js.map +1 -0
- package/dist/src/utils/api/dtos/TransferFileDto.d.ts +9 -0
- package/dist/src/utils/api/dtos/TransferFileDto.js +2 -0
- package/dist/src/utils/api/dtos/TransferFileDto.js.map +1 -0
- package/dist/src/utils/api/dtos/baseResponse.d.ts +11 -0
- package/dist/src/utils/api/dtos/baseResponse.js +4 -0
- package/dist/src/utils/api/dtos/baseResponse.js.map +1 -0
- package/dist/src/utils/api/dtos/cancelTransferRequest.d.ts +5 -0
- package/dist/src/utils/api/dtos/cancelTransferRequest.js +2 -0
- package/dist/src/utils/api/dtos/cancelTransferRequest.js.map +1 -0
- package/dist/src/utils/api/dtos/finalizeTransferRequest.d.ts +5 -0
- package/dist/src/utils/api/dtos/finalizeTransferRequest.js +2 -0
- package/dist/src/utils/api/dtos/finalizeTransferRequest.js.map +1 -0
- package/dist/src/utils/api/dtos/finalizeTransferResponse.d.ts +4 -0
- package/dist/src/utils/api/dtos/finalizeTransferResponse.js +2 -0
- package/dist/src/utils/api/dtos/finalizeTransferResponse.js.map +1 -0
- package/dist/src/utils/api/dtos/getCompanyResponse.d.ts +6 -0
- package/dist/src/utils/api/dtos/getCompanyResponse.js +2 -0
- package/dist/src/utils/api/dtos/getCompanyResponse.js.map +1 -0
- package/dist/src/utils/api/dtos/getRangehashResponse.d.ts +5 -0
- package/dist/src/utils/api/dtos/getRangehashResponse.js +2 -0
- package/dist/src/utils/api/dtos/getRangehashResponse.js.map +1 -0
- package/dist/src/utils/api/dtos/getTransferRequest.d.ts +7 -0
- package/dist/src/utils/api/dtos/getTransferRequest.js +2 -0
- package/dist/src/utils/api/dtos/getTransferRequest.js.map +1 -0
- package/dist/src/utils/api/dtos/getTransferResponse.d.ts +20 -0
- package/dist/src/utils/api/dtos/getTransferResponse.js +2 -0
- package/dist/src/utils/api/dtos/getTransferResponse.js.map +1 -0
- package/dist/src/utils/api/dtos/initializeTransferRequest.d.ts +12 -0
- package/dist/src/utils/api/dtos/initializeTransferRequest.js +2 -0
- package/dist/src/utils/api/dtos/initializeTransferRequest.js.map +1 -0
- package/dist/src/utils/api/dtos/initializeTransferResponse.d.ts +6 -0
- package/dist/src/utils/api/dtos/initializeTransferResponse.js +2 -0
- package/dist/src/utils/api/dtos/initializeTransferResponse.js.map +1 -0
- package/dist/src/utils/api/dtos/loginRequest.d.ts +5 -0
- package/dist/src/utils/api/dtos/loginRequest.js +2 -0
- package/dist/src/utils/api/dtos/loginRequest.js.map +1 -0
- package/dist/src/utils/api/dtos/loginResponse.d.ts +4 -0
- package/dist/src/utils/api/dtos/loginResponse.js +2 -0
- package/dist/src/utils/api/dtos/loginResponse.js.map +1 -0
- package/dist/src/utils/api/dtos/registerTransferDownloadRequest.d.ts +8 -0
- package/dist/src/utils/api/dtos/registerTransferDownloadRequest.js +2 -0
- package/dist/src/utils/api/dtos/registerTransferDownloadRequest.js.map +1 -0
- package/dist/src/utils/api/dtos/sendFileChunkRequest.d.ts +6 -0
- package/dist/src/utils/api/dtos/sendFileChunkRequest.js +2 -0
- package/dist/src/utils/api/dtos/sendFileChunkRequest.js.map +1 -0
- package/dist/src/utils/api/fileServerClientFactory.d.ts +8 -0
- package/dist/src/utils/api/fileServerClientFactory.js +2 -0
- package/dist/src/utils/api/fileServerClientFactory.js.map +1 -0
- package/dist/src/utils/api/node/nodeApiClient.d.ts +28 -0
- package/dist/src/utils/api/node/nodeApiClient.js +186 -0
- package/dist/src/utils/api/node/nodeApiClient.js.map +1 -0
- package/dist/src/utils/api/node/nodeClientBase.d.ts +17 -0
- package/dist/src/utils/api/node/nodeClientBase.js +83 -0
- package/dist/src/utils/api/node/nodeClientBase.js.map +1 -0
- package/dist/src/utils/api/node/nodeFileServerClientFactory.d.ts +10 -0
- package/dist/src/utils/api/node/nodeFileServerClientFactory.js +35 -0
- package/dist/src/utils/api/node/nodeFileServerClientFactory.js.map +1 -0
- package/dist/src/utils/api/node/nodeFileserverClientBase.d.ts +5 -0
- package/dist/src/utils/api/node/nodeFileserverClientBase.js +18 -0
- package/dist/src/utils/api/node/nodeFileserverClientBase.js.map +1 -0
- package/dist/src/utils/dateAndTime/simpleDateFormatter.d.ts +9 -0
- package/dist/src/utils/dateAndTime/simpleDateFormatter.js +31 -0
- package/dist/src/utils/dateAndTime/simpleDateFormatter.js.map +1 -0
- package/dist/src/utils/events/chunkProgressEvent.d.ts +5 -0
- package/dist/src/utils/events/chunkProgressEvent.js +2 -0
- package/dist/src/utils/events/chunkProgressEvent.js.map +1 -0
- package/dist/src/utils/events/eventsEngine.d.ts +6 -0
- package/dist/src/utils/events/eventsEngine.js +2 -0
- package/dist/src/utils/events/eventsEngine.js.map +1 -0
- package/dist/src/utils/events/node/nodeEventsEngine.d.ts +7 -0
- package/dist/src/utils/events/node/nodeEventsEngine.js +16 -0
- package/dist/src/utils/events/node/nodeEventsEngine.js.map +1 -0
- package/dist/src/utils/fileSystem/chunkStreamProvider.d.ts +12 -0
- package/dist/src/utils/fileSystem/chunkStreamProvider.js +2 -0
- package/dist/src/utils/fileSystem/chunkStreamProvider.js.map +1 -0
- package/dist/src/utils/fileSystem/chunkStreamProviderFactory.d.ts +5 -0
- package/dist/src/utils/fileSystem/chunkStreamProviderFactory.js +2 -0
- package/dist/src/utils/fileSystem/chunkStreamProviderFactory.js.map +1 -0
- package/dist/src/utils/fileSystem/fileDetails.d.ts +15 -0
- package/dist/src/utils/fileSystem/fileDetails.js +2 -0
- package/dist/src/utils/fileSystem/fileDetails.js.map +1 -0
- package/dist/src/utils/fileSystem/fileSystemService.d.ts +19 -0
- package/dist/src/utils/fileSystem/fileSystemService.js +2 -0
- package/dist/src/utils/fileSystem/fileSystemService.js.map +1 -0
- package/dist/src/utils/fileSystem/fsError.d.ts +3 -0
- package/dist/src/utils/fileSystem/fsError.js +7 -0
- package/dist/src/utils/fileSystem/fsError.js.map +1 -0
- package/dist/src/utils/fileSystem/node/nodeChunkStreamProvider.d.ts +15 -0
- package/dist/src/utils/fileSystem/node/nodeChunkStreamProvider.js +105 -0
- package/dist/src/utils/fileSystem/node/nodeChunkStreamProvider.js.map +1 -0
- package/dist/src/utils/fileSystem/node/nodeChunkStreamProviderFactory.d.ts +5 -0
- package/dist/src/utils/fileSystem/node/nodeChunkStreamProviderFactory.js +7 -0
- package/dist/src/utils/fileSystem/node/nodeChunkStreamProviderFactory.js.map +1 -0
- package/dist/src/utils/fileSystem/node/nodeFileDetails.d.ts +20 -0
- package/dist/src/utils/fileSystem/node/nodeFileDetails.js +50 -0
- package/dist/src/utils/fileSystem/node/nodeFileDetails.js.map +1 -0
- package/dist/src/utils/fileSystem/node/nodeFileSystemService.d.ts +20 -0
- package/dist/src/utils/fileSystem/node/nodeFileSystemService.js +106 -0
- package/dist/src/utils/fileSystem/node/nodeFileSystemService.js.map +1 -0
- package/dist/src/utils/networking/throttlingOptions.d.ts +4 -0
- package/dist/src/utils/networking/throttlingOptions.js +2 -0
- package/dist/src/utils/networking/throttlingOptions.js.map +1 -0
- package/dist/src/utils/pseudoRandom.d.ts +3 -0
- package/dist/src/utils/pseudoRandom.js +7 -0
- package/dist/src/utils/pseudoRandom.js.map +1 -0
- package/dist/src/utils/semaphore/semaphore.d.ts +5 -0
- package/dist/src/utils/semaphore/semaphore.js +2 -0
- package/dist/src/utils/semaphore/semaphore.js.map +1 -0
- package/dist/src/utils/semaphore/semaphoreReleaser.d.ts +2 -0
- package/dist/src/utils/semaphore/semaphoreReleaser.js +2 -0
- package/dist/src/utils/semaphore/semaphoreReleaser.js.map +1 -0
- package/dist/src/utils/semaphore/transferSemaphore.d.ts +8 -0
- package/dist/src/utils/semaphore/transferSemaphore.js +28 -0
- package/dist/src/utils/semaphore/transferSemaphore.js.map +1 -0
- package/dist/src/utils/sleep.d.ts +1 -0
- package/dist/src/utils/sleep.js +6 -0
- package/dist/src/utils/sleep.js.map +1 -0
- package/dist/src/utils/types/transferStatus.d.ts +13 -0
- package/dist/src/utils/types/transferStatus.js +15 -0
- package/dist/src/utils/types/transferStatus.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
+
};
|
|
12
|
+
var _ChunkDownloader_instances, _ChunkDownloader_transferId, _ChunkDownloader_chunk, _ChunkDownloader_file, _ChunkDownloader_downloadState, _ChunkDownloader_options, _ChunkDownloader_fileServerClientFactory, _ChunkDownloader_chunkStreamProviderFactory, _ChunkDownloader_eventsEngine, _ChunkDownloader_chunkDownloadClient, _ChunkDownloader_bytesTransferred, _ChunkDownloader_running, _ChunkDownloader_throwIfRunning, _ChunkDownloader_addEventListeners, _ChunkDownloader_removeEventListeners, _ChunkDownloader_canRetry, _ChunkDownloader_onAbortRequested, _ChunkDownloader_onFileFailed, _ChunkDownloader_onProgress;
|
|
13
|
+
/* eslint-disable no-await-in-loop */
|
|
14
|
+
import { RequestError } from "got";
|
|
15
|
+
import TransferStatus from "../utils/types/transferStatus.js";
|
|
16
|
+
import DownloadError from "./dtos/downloadError.js";
|
|
17
|
+
import DownloadEvent from "./dtos/downloadEvent.js";
|
|
18
|
+
import sleep from "../utils/sleep.js";
|
|
19
|
+
class ChunkDownloader {
|
|
20
|
+
constructor(transferId, file, chunk, downloadState, options, fileServerClientFactory, chunkStreamProviderFactory, eventsEngine) {
|
|
21
|
+
_ChunkDownloader_instances.add(this);
|
|
22
|
+
_ChunkDownloader_transferId.set(this, void 0);
|
|
23
|
+
_ChunkDownloader_chunk.set(this, void 0);
|
|
24
|
+
_ChunkDownloader_file.set(this, void 0);
|
|
25
|
+
_ChunkDownloader_downloadState.set(this, void 0);
|
|
26
|
+
_ChunkDownloader_options.set(this, void 0);
|
|
27
|
+
_ChunkDownloader_fileServerClientFactory.set(this, void 0);
|
|
28
|
+
_ChunkDownloader_chunkStreamProviderFactory.set(this, void 0);
|
|
29
|
+
_ChunkDownloader_eventsEngine.set(this, void 0);
|
|
30
|
+
_ChunkDownloader_chunkDownloadClient.set(this, void 0);
|
|
31
|
+
_ChunkDownloader_bytesTransferred.set(this, 0);
|
|
32
|
+
_ChunkDownloader_running.set(this, false);
|
|
33
|
+
_ChunkDownloader_onAbortRequested.set(this, () => {
|
|
34
|
+
__classPrivateFieldGet(this, _ChunkDownloader_chunkDownloadClient, "f")?.release();
|
|
35
|
+
});
|
|
36
|
+
_ChunkDownloader_onFileFailed.set(this, (args) => {
|
|
37
|
+
if (__classPrivateFieldGet(this, _ChunkDownloader_file, "f").externalId === args.file.id)
|
|
38
|
+
__classPrivateFieldGet(this, _ChunkDownloader_chunkDownloadClient, "f")?.release();
|
|
39
|
+
});
|
|
40
|
+
_ChunkDownloader_onProgress.set(this, (args) => {
|
|
41
|
+
__classPrivateFieldSet(this, _ChunkDownloader_bytesTransferred, args.transferredBytesTotal, "f");
|
|
42
|
+
__classPrivateFieldGet(this, _ChunkDownloader_downloadState, "f").chunkDownloadProgressed(__classPrivateFieldGet(this, _ChunkDownloader_file, "f"), __classPrivateFieldGet(this, _ChunkDownloader_chunk, "f"), args);
|
|
43
|
+
});
|
|
44
|
+
__classPrivateFieldSet(this, _ChunkDownloader_transferId, transferId, "f");
|
|
45
|
+
__classPrivateFieldSet(this, _ChunkDownloader_options, options, "f");
|
|
46
|
+
__classPrivateFieldSet(this, _ChunkDownloader_file, file, "f");
|
|
47
|
+
__classPrivateFieldSet(this, _ChunkDownloader_chunk, chunk, "f");
|
|
48
|
+
__classPrivateFieldSet(this, _ChunkDownloader_downloadState, downloadState, "f");
|
|
49
|
+
__classPrivateFieldSet(this, _ChunkDownloader_fileServerClientFactory, fileServerClientFactory, "f");
|
|
50
|
+
__classPrivateFieldSet(this, _ChunkDownloader_chunkStreamProviderFactory, chunkStreamProviderFactory, "f");
|
|
51
|
+
__classPrivateFieldSet(this, _ChunkDownloader_eventsEngine, eventsEngine, "f");
|
|
52
|
+
__classPrivateFieldSet(this, _ChunkDownloader_chunkDownloadClient, __classPrivateFieldGet(this, _ChunkDownloader_fileServerClientFactory, "f").createFileServerDownloadClient(__classPrivateFieldGet(this, _ChunkDownloader_file, "f").url, __classPrivateFieldGet(this, _ChunkDownloader_chunk, "f").start, __classPrivateFieldGet(this, _ChunkDownloader_chunk, "f").end, __classPrivateFieldGet(this, _ChunkDownloader_transferId, "f"), __classPrivateFieldGet(this, _ChunkDownloader_file, "f").name, __classPrivateFieldGet(this, _ChunkDownloader_options, "f")), "f");
|
|
53
|
+
}
|
|
54
|
+
async download() {
|
|
55
|
+
__classPrivateFieldGet(this, _ChunkDownloader_instances, "m", _ChunkDownloader_throwIfRunning).call(this);
|
|
56
|
+
__classPrivateFieldSet(this, _ChunkDownloader_running, true, "f");
|
|
57
|
+
let writtenCorrectly = false;
|
|
58
|
+
let attempts = 0;
|
|
59
|
+
let writeErrors = 0;
|
|
60
|
+
let networkErrors = 0;
|
|
61
|
+
let lastError = null;
|
|
62
|
+
let unhandledError = null;
|
|
63
|
+
try {
|
|
64
|
+
__classPrivateFieldGet(this, _ChunkDownloader_downloadState, "f").chunkDownloadStarted(__classPrivateFieldGet(this, _ChunkDownloader_file, "f"), __classPrivateFieldGet(this, _ChunkDownloader_chunk, "f"));
|
|
65
|
+
__classPrivateFieldGet(this, _ChunkDownloader_instances, "m", _ChunkDownloader_addEventListeners).call(this);
|
|
66
|
+
const fileserverMd5Promise = __classPrivateFieldGet(this, _ChunkDownloader_options, "f").checkChunksMd5
|
|
67
|
+
? __classPrivateFieldGet(this, _ChunkDownloader_chunkDownloadClient, "f").getMd5Checksum()
|
|
68
|
+
: null;
|
|
69
|
+
while (writtenCorrectly === false && __classPrivateFieldGet(this, _ChunkDownloader_instances, "m", _ChunkDownloader_canRetry).call(this, lastError, writeErrors, networkErrors)) {
|
|
70
|
+
attempts += 1;
|
|
71
|
+
__classPrivateFieldSet(this, _ChunkDownloader_bytesTransferred, 0, "f");
|
|
72
|
+
const chunkWriter = __classPrivateFieldGet(this, _ChunkDownloader_chunkStreamProviderFactory, "f").provide(__classPrivateFieldGet(this, _ChunkDownloader_file, "f").downloadPath, __classPrivateFieldGet(this, _ChunkDownloader_chunk, "f").start ?? 0, __classPrivateFieldGet(this, _ChunkDownloader_chunk, "f").chunkSize);
|
|
73
|
+
try {
|
|
74
|
+
await __classPrivateFieldGet(this, _ChunkDownloader_chunkDownloadClient, "f").download(chunkWriter);
|
|
75
|
+
if (__classPrivateFieldGet(this, _ChunkDownloader_bytesTransferred, "f") !== __classPrivateFieldGet(this, _ChunkDownloader_chunk, "f").chunkSize) {
|
|
76
|
+
if (__classPrivateFieldGet(this, _ChunkDownloader_bytesTransferred, "f") > __classPrivateFieldGet(this, _ChunkDownloader_chunk, "f").chunkSize)
|
|
77
|
+
__classPrivateFieldGet(this, _ChunkDownloader_downloadState, "f").possibleSupersizedFile(__classPrivateFieldGet(this, _ChunkDownloader_file, "f"));
|
|
78
|
+
throw new DownloadError(`Download request returned incorrect amount of data. Expected=${__classPrivateFieldGet(this, _ChunkDownloader_chunk, "f").chunkSize} Received=${__classPrivateFieldGet(this, _ChunkDownloader_bytesTransferred, "f")}`);
|
|
79
|
+
}
|
|
80
|
+
networkErrors = 0;
|
|
81
|
+
__classPrivateFieldGet(this, _ChunkDownloader_downloadState, "f").networkOk();
|
|
82
|
+
if (__classPrivateFieldGet(this, _ChunkDownloader_downloadState, "f").status !== TransferStatus.Aborting) {
|
|
83
|
+
if (fileserverMd5Promise !== null) {
|
|
84
|
+
const remoteMd5 = await fileserverMd5Promise;
|
|
85
|
+
const localMd5 = await chunkWriter.getMd5Checksum(`hex`);
|
|
86
|
+
if (remoteMd5.toLowerCase() === localMd5.toLowerCase())
|
|
87
|
+
writtenCorrectly = true;
|
|
88
|
+
else {
|
|
89
|
+
writeErrors += 1;
|
|
90
|
+
lastError = new DownloadError(`MD5 checksum incorrect: fileserver=${remoteMd5} local=${localMd5}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else
|
|
94
|
+
writtenCorrectly = true;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
lastError = error;
|
|
99
|
+
if (lastError instanceof RequestError) {
|
|
100
|
+
networkErrors += 1;
|
|
101
|
+
__classPrivateFieldGet(this, _ChunkDownloader_downloadState, "f").networkFailure();
|
|
102
|
+
}
|
|
103
|
+
else
|
|
104
|
+
writeErrors += 1;
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
chunkWriter?.release();
|
|
108
|
+
__classPrivateFieldGet(this, _ChunkDownloader_chunkDownloadClient, "f")?.release();
|
|
109
|
+
let sleepTime = 0;
|
|
110
|
+
if (__classPrivateFieldGet(this, _ChunkDownloader_downloadState, "f").isThereNetworkProblem)
|
|
111
|
+
sleepTime = __classPrivateFieldGet(this, _ChunkDownloader_options, "f").fileserverOfflineCheckIntervalMillis;
|
|
112
|
+
else if (networkErrors > 0) {
|
|
113
|
+
const pow = Math.min(networkErrors, __classPrivateFieldGet(this, _ChunkDownloader_options, "f").fileserverOfflineAfterConsecutiveAttempts);
|
|
114
|
+
sleepTime = __classPrivateFieldGet(this, _ChunkDownloader_options, "f").fileserverOfflineCheckIntervalMillis * (2 ** (pow - __classPrivateFieldGet(this, _ChunkDownloader_options, "f").fileserverOfflineAfterConsecutiveAttempts));
|
|
115
|
+
}
|
|
116
|
+
if (sleepTime > 0)
|
|
117
|
+
await sleep(sleepTime);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
unhandledError = error;
|
|
123
|
+
}
|
|
124
|
+
finally {
|
|
125
|
+
__classPrivateFieldGet(this, _ChunkDownloader_instances, "m", _ChunkDownloader_removeEventListeners).call(this);
|
|
126
|
+
}
|
|
127
|
+
let downloadError = null;
|
|
128
|
+
if (unhandledError)
|
|
129
|
+
downloadError = new DownloadError(`Unhandled chunk download error for file ${__classPrivateFieldGet(this, _ChunkDownloader_file, "f").url} chunk ${__classPrivateFieldGet(this, _ChunkDownloader_chunk, "f").chunkNumber}`, { cause: unhandledError });
|
|
130
|
+
else if (__classPrivateFieldGet(this, _ChunkDownloader_downloadState, "f").status === TransferStatus.Aborting)
|
|
131
|
+
downloadError = new DownloadError(`Chunk download aborted for file ${__classPrivateFieldGet(this, _ChunkDownloader_file, "f").url} chunk ${__classPrivateFieldGet(this, _ChunkDownloader_chunk, "f").chunkNumber} attempt ${attempts}.`);
|
|
132
|
+
else if (!writtenCorrectly) {
|
|
133
|
+
downloadError = new DownloadError(`Chunk download failed for file ${__classPrivateFieldGet(this, _ChunkDownloader_file, "f").url} chunk ${__classPrivateFieldGet(this, _ChunkDownloader_chunk, "f").chunkNumber} attempt ${attempts}.`);
|
|
134
|
+
if (lastError) {
|
|
135
|
+
downloadError.message += ` See "cause" for more information.`;
|
|
136
|
+
downloadError.cause = lastError;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (downloadError) {
|
|
140
|
+
if (__classPrivateFieldGet(this, _ChunkDownloader_downloadState, "f").status !== TransferStatus.Aborting) {
|
|
141
|
+
// once abort has been called we are not really interested in files or chunks state - just cancel the entire download
|
|
142
|
+
// so fail the chunk only if we are not aborting
|
|
143
|
+
__classPrivateFieldGet(this, _ChunkDownloader_downloadState, "f").chunkDownloadFailed(__classPrivateFieldGet(this, _ChunkDownloader_file, "f"), __classPrivateFieldGet(this, _ChunkDownloader_chunk, "f"), downloadError);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else
|
|
147
|
+
__classPrivateFieldGet(this, _ChunkDownloader_downloadState, "f").chunkDownloadCompleted(__classPrivateFieldGet(this, _ChunkDownloader_file, "f"), __classPrivateFieldGet(this, _ChunkDownloader_chunk, "f"));
|
|
148
|
+
__classPrivateFieldSet(this, _ChunkDownloader_running, false, "f");
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
_ChunkDownloader_transferId = new WeakMap(), _ChunkDownloader_chunk = new WeakMap(), _ChunkDownloader_file = new WeakMap(), _ChunkDownloader_downloadState = new WeakMap(), _ChunkDownloader_options = new WeakMap(), _ChunkDownloader_fileServerClientFactory = new WeakMap(), _ChunkDownloader_chunkStreamProviderFactory = new WeakMap(), _ChunkDownloader_eventsEngine = new WeakMap(), _ChunkDownloader_chunkDownloadClient = new WeakMap(), _ChunkDownloader_bytesTransferred = new WeakMap(), _ChunkDownloader_running = new WeakMap(), _ChunkDownloader_onAbortRequested = new WeakMap(), _ChunkDownloader_onFileFailed = new WeakMap(), _ChunkDownloader_onProgress = new WeakMap(), _ChunkDownloader_instances = new WeakSet(), _ChunkDownloader_throwIfRunning = function _ChunkDownloader_throwIfRunning() {
|
|
152
|
+
if (__classPrivateFieldGet(this, _ChunkDownloader_running, "f"))
|
|
153
|
+
throw new DownloadError(`Thist instance of chunk downloader is already in use. Please create a new one.`);
|
|
154
|
+
}, _ChunkDownloader_addEventListeners = function _ChunkDownloader_addEventListeners() {
|
|
155
|
+
__classPrivateFieldGet(this, _ChunkDownloader_eventsEngine, "f").addEventListener(DownloadEvent.Aborting, __classPrivateFieldGet(this, _ChunkDownloader_onAbortRequested, "f"));
|
|
156
|
+
__classPrivateFieldGet(this, _ChunkDownloader_eventsEngine, "f").addEventListener(DownloadEvent.FileDownloadFailed, __classPrivateFieldGet(this, _ChunkDownloader_onFileFailed, "f"));
|
|
157
|
+
__classPrivateFieldGet(this, _ChunkDownloader_chunkDownloadClient, "f").addEventListener(`progress`, __classPrivateFieldGet(this, _ChunkDownloader_onProgress, "f"));
|
|
158
|
+
}, _ChunkDownloader_removeEventListeners = function _ChunkDownloader_removeEventListeners() {
|
|
159
|
+
__classPrivateFieldGet(this, _ChunkDownloader_eventsEngine, "f").removeEventListener(DownloadEvent.Aborting, __classPrivateFieldGet(this, _ChunkDownloader_onAbortRequested, "f"));
|
|
160
|
+
__classPrivateFieldGet(this, _ChunkDownloader_eventsEngine, "f").removeEventListener(DownloadEvent.FileDownloadFailed, __classPrivateFieldGet(this, _ChunkDownloader_onFileFailed, "f"));
|
|
161
|
+
__classPrivateFieldGet(this, _ChunkDownloader_chunkDownloadClient, "f").removeEventListener(`progress`, __classPrivateFieldGet(this, _ChunkDownloader_onProgress, "f"));
|
|
162
|
+
}, _ChunkDownloader_canRetry = function _ChunkDownloader_canRetry(error, writeErrors, networkErrors) {
|
|
163
|
+
if (__classPrivateFieldGet(this, _ChunkDownloader_downloadState, "f").status === TransferStatus.Aborting)
|
|
164
|
+
return false;
|
|
165
|
+
if (__classPrivateFieldGet(this, _ChunkDownloader_file, "f").isFailed)
|
|
166
|
+
return false;
|
|
167
|
+
if (error && error instanceof RequestError)
|
|
168
|
+
return __classPrivateFieldGet(this, _ChunkDownloader_options, "f").fileserverAttemptLimit <= 0 || networkErrors < __classPrivateFieldGet(this, _ChunkDownloader_options, "f").fileserverAttemptLimit;
|
|
169
|
+
return __classPrivateFieldGet(this, _ChunkDownloader_options, "f").maxWriteAttempts < 0 || writeErrors < __classPrivateFieldGet(this, _ChunkDownloader_options, "f").maxWriteAttempts;
|
|
170
|
+
};
|
|
171
|
+
export default ChunkDownloader;
|
|
172
|
+
//# sourceMappingURL=chunkDownloader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunkDownloader.js","sourceRoot":"","sources":["../../../src/downloader/chunkDownloader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type GetCompanyResponse from "../utils/api/dtos/getCompanyResponse";
|
|
2
|
+
import type GetTransferResponse from "../utils/api/dtos/getTransferResponse";
|
|
3
|
+
export default class DownloadFolderResolver {
|
|
4
|
+
#private;
|
|
5
|
+
static prepareDownloadFolder(template: string, transfer: GetTransferResponse, company?: GetCompanyResponse): string;
|
|
6
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
2
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
3
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
4
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
|
+
};
|
|
6
|
+
var _a, _DownloadFolderResolver_pathFriendlyDate, _DownloadFolderResolver_sanitizePathElement, _DownloadFolderResolver_getDomain;
|
|
7
|
+
import SimpleDateFormatter from "../utils/dateAndTime/simpleDateFormatter.js";
|
|
8
|
+
class DownloadFolderResolver {
|
|
9
|
+
static prepareDownloadFolder(template, transfer, company) {
|
|
10
|
+
let result = template;
|
|
11
|
+
if (transfer.from) {
|
|
12
|
+
const domain = __classPrivateFieldGet(DownloadFolderResolver, _a, "m", _DownloadFolderResolver_getDomain).call(DownloadFolderResolver, transfer.from);
|
|
13
|
+
result = result
|
|
14
|
+
.replaceAll(`<domain>`, __classPrivateFieldGet(DownloadFolderResolver, _a, "m", _DownloadFolderResolver_sanitizePathElement).call(DownloadFolderResolver, domain))
|
|
15
|
+
.replaceAll(`<emailfrom>`, __classPrivateFieldGet(DownloadFolderResolver, _a, "m", _DownloadFolderResolver_sanitizePathElement).call(DownloadFolderResolver, transfer.from));
|
|
16
|
+
}
|
|
17
|
+
result = result.replaceAll(`<id>`, transfer.id);
|
|
18
|
+
const rx = /<datesent(:(.*?))?>/ig;
|
|
19
|
+
result = result.replace(rx, (_0, _1, dateFormatString) => {
|
|
20
|
+
let dateFormatted = ``;
|
|
21
|
+
if (dateFormatString)
|
|
22
|
+
dateFormatted = SimpleDateFormatter.formatDateAndTimeLocal(transfer.sentdate, dateFormatString);
|
|
23
|
+
else
|
|
24
|
+
dateFormatted = SimpleDateFormatter.defaultFormat(transfer.sentdate);
|
|
25
|
+
return __classPrivateFieldGet(DownloadFolderResolver, _a, "m", _DownloadFolderResolver_sanitizePathElement).call(DownloadFolderResolver, __classPrivateFieldGet(DownloadFolderResolver, _a, "m", _DownloadFolderResolver_pathFriendlyDate).call(DownloadFolderResolver, dateFormatted));
|
|
26
|
+
});
|
|
27
|
+
if (transfer.message)
|
|
28
|
+
result = result.replaceAll(`<description>`, __classPrivateFieldGet(DownloadFolderResolver, _a, "m", _DownloadFolderResolver_sanitizePathElement).call(DownloadFolderResolver, transfer.message).substring(0, 30));
|
|
29
|
+
if (transfer.subject)
|
|
30
|
+
result = result.replaceAll(`<subject>`, __classPrivateFieldGet(DownloadFolderResolver, _a, "m", _DownloadFolderResolver_sanitizePathElement).call(DownloadFolderResolver, transfer.subject).substring(0, 30));
|
|
31
|
+
if (transfer.to && transfer.to.length)
|
|
32
|
+
result = result.replaceAll(`<emailto>`, __classPrivateFieldGet(DownloadFolderResolver, _a, "m", _DownloadFolderResolver_sanitizePathElement).call(DownloadFolderResolver, transfer.to.join(`,`)));
|
|
33
|
+
if (transfer.customfields && transfer.customfields.length) {
|
|
34
|
+
for (const cf of transfer.customfields) {
|
|
35
|
+
if (cf.label && cf.value)
|
|
36
|
+
result = result.replace(new RegExp(`<${cf.label}>`, `ig`), __classPrivateFieldGet(DownloadFolderResolver, _a, "m", _DownloadFolderResolver_sanitizePathElement).call(DownloadFolderResolver, cf.value));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// remaining custom fields which have not bee replaced from transfer - remove them
|
|
40
|
+
if (company && company.customfields && company.customfields.length) {
|
|
41
|
+
for (const cf of company.customfields)
|
|
42
|
+
result = result.replace(new RegExp(`<${cf.label}>`, `ig`), ``);
|
|
43
|
+
}
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
_a = DownloadFolderResolver, _DownloadFolderResolver_pathFriendlyDate = function _DownloadFolderResolver_pathFriendlyDate(date) {
|
|
48
|
+
return date
|
|
49
|
+
.replace(/(\s+|:+|,+|Z+|T+)/g, `-`)
|
|
50
|
+
.replace(/-+/g, `-`);
|
|
51
|
+
}, _DownloadFolderResolver_sanitizePathElement = function _DownloadFolderResolver_sanitizePathElement(value) {
|
|
52
|
+
if (!value)
|
|
53
|
+
return ``;
|
|
54
|
+
return value
|
|
55
|
+
?.replaceAll(`..\\`, ``)
|
|
56
|
+
.replaceAll(`../`, ``)
|
|
57
|
+
.replaceAll(`..`, ``)
|
|
58
|
+
.replaceAll(`:`, ``)
|
|
59
|
+
.replaceAll(`<`, ``)
|
|
60
|
+
.replaceAll(`>`, ``)
|
|
61
|
+
.replaceAll(`\\`, ``)
|
|
62
|
+
.replaceAll(`/`, ``);
|
|
63
|
+
}, _DownloadFolderResolver_getDomain = function _DownloadFolderResolver_getDomain(fromEmail) {
|
|
64
|
+
if (fromEmail) {
|
|
65
|
+
const idx = fromEmail.indexOf(`@`);
|
|
66
|
+
if (idx > -1)
|
|
67
|
+
return fromEmail.substring(idx + 1);
|
|
68
|
+
}
|
|
69
|
+
return ``;
|
|
70
|
+
};
|
|
71
|
+
export default DownloadFolderResolver;
|
|
72
|
+
//# sourceMappingURL=downloadFolderResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downloadFolderResolver.js","sourceRoot":"","sources":["../../../src/downloader/downloadFolderResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
declare class DownloadOptions {
|
|
2
|
+
/**
|
|
3
|
+
* logintoken of the current user - used to fetch company setup, register download
|
|
4
|
+
* @default null
|
|
5
|
+
*/
|
|
6
|
+
logintoken: string | null;
|
|
7
|
+
/**
|
|
8
|
+
* Path template where files should be downloaded. Provide this OR {@link downloadFolder}. Supports placeholders:
|
|
9
|
+
* <id> - transferId
|
|
10
|
+
* <subject>
|
|
11
|
+
* <description>
|
|
12
|
+
* <domain> - domain based on "from" email (e.g. user@example.com --> example.com)
|
|
13
|
+
* <emailfrom>
|
|
14
|
+
* <datesent> - will be formatted as "YYYY-MM-DD-hh-mm"
|
|
15
|
+
* <datesent:format> - will be formatted according to "format"; supported placeholders in "format": YYYY, MM, DD, hh, mm
|
|
16
|
+
* <emailto> - all recipients emails comma-separated
|
|
17
|
+
* <{custom_field_label}> - specified custom field named by label will replaced with that custom field's value
|
|
18
|
+
* @default null
|
|
19
|
+
*/
|
|
20
|
+
downloadFolderTemplate: string | null;
|
|
21
|
+
/**
|
|
22
|
+
* The path where files should be downloaded. No placeholders. Provide this OR {@link downloadFolderTemplate}.
|
|
23
|
+
* When {@link downloadFolderTemplate} is specified this value will be overwritten with the resolved (final) path.
|
|
24
|
+
* @default null
|
|
25
|
+
*/
|
|
26
|
+
downloadFolder: string | null;
|
|
27
|
+
/**
|
|
28
|
+
* HTTP request timeout for web api (not Fileserver) in milliseconds.
|
|
29
|
+
* @default 30000
|
|
30
|
+
*/
|
|
31
|
+
apiRequestTotalTimeoutInMs: number;
|
|
32
|
+
/**
|
|
33
|
+
* How many times to attempt HTTP requests towards web API (not Fileserver) e.g. when getting a transfer from the API.
|
|
34
|
+
* @see https://github.com/sindresorhus/got#documentation
|
|
35
|
+
* @default 3
|
|
36
|
+
*/
|
|
37
|
+
apiRetryLimit: number;
|
|
38
|
+
/**
|
|
39
|
+
* Maximum number (N) of chunks that can be downloaded in parallel. As soon as any single chunk is complete then next available chunk is started (to keep parallel chunks always at N).
|
|
40
|
+
* - If there is one huge file with X chunks (X>N) - first N chunks will be picked up.
|
|
41
|
+
* - If there are 2 files, each with 3 chunks and N=4 - both files will be started (all 3 chunks of first file and only 1st chunk of the 2nd file).
|
|
42
|
+
* @default 8
|
|
43
|
+
*/
|
|
44
|
+
parallelChunks: number;
|
|
45
|
+
/**
|
|
46
|
+
* How many times to try write downloaded bytes of a chunk and optionally verify its MD5. Set to -1 to keep trying forever.
|
|
47
|
+
* @default 20
|
|
48
|
+
*/
|
|
49
|
+
maxWriteAttempts: number;
|
|
50
|
+
/**
|
|
51
|
+
* The user-agent header that will be used for all fileserver GetFile requests.
|
|
52
|
+
* @default null
|
|
53
|
+
*/
|
|
54
|
+
userAgent: string | null;
|
|
55
|
+
/**
|
|
56
|
+
* Maximum size (S) of a chunk in bytes. When set to a number - downloader will split files into chunks of this size (size of last chunk) <= S. Set to null to download every file in one HTTPS request.
|
|
57
|
+
* @default 5000000 (5MB)
|
|
58
|
+
*/
|
|
59
|
+
maxChunkSize: number | null;
|
|
60
|
+
/**
|
|
61
|
+
* When set to **true** downloader will verify MD5 after every chunk.
|
|
62
|
+
* @efault true
|
|
63
|
+
*/
|
|
64
|
+
checkChunksMd5: boolean;
|
|
65
|
+
/**
|
|
66
|
+
* When set to **true** downloader will verify MD5 for every completed file (entire file). To use this feature provided the MD5 value in DownloadFileInfo passed to the downloader.
|
|
67
|
+
* @note NOT SUPPORTED (YET)
|
|
68
|
+
*/
|
|
69
|
+
checkFileMd5: boolean;
|
|
70
|
+
/**
|
|
71
|
+
* How long should it take for HTTP library to throw error when no download data is pumped to response (milliseconds).
|
|
72
|
+
* @default 30000
|
|
73
|
+
*/
|
|
74
|
+
fileserverDownloadIdleTimeMs: number;
|
|
75
|
+
/**
|
|
76
|
+
* How many times to attempt a single HTTP download request against Fileserver's GetFile. Set this options to 0 to keep trying forever.
|
|
77
|
+
* When set to 0 (retring forever) the downloader will report "network problem" after 10 failed attempts (via event and a status field).
|
|
78
|
+
* When connectivity is back it will be reported with an event as well.
|
|
79
|
+
* @default 0
|
|
80
|
+
*/
|
|
81
|
+
fileserverAttemptLimit: number;
|
|
82
|
+
/**
|
|
83
|
+
* Downloader will assume there is a "network problem" after this many consecutive network errors without any successful progress.
|
|
84
|
+
* Set to -1 to disable this feature.
|
|
85
|
+
* @default 10;
|
|
86
|
+
*/
|
|
87
|
+
fileserverOfflineAfterConsecutiveAttempts: number;
|
|
88
|
+
/**
|
|
89
|
+
* Once downloader sees a "network problem" it will retry every pending chunk with this interval (in milliseconds).
|
|
90
|
+
* This interval will be also used to calculate exponential backoff between first network error and getting into "network problem" state
|
|
91
|
+
* and also is the maximum interval of the exponential backoff.
|
|
92
|
+
* @default 5000;
|
|
93
|
+
*/
|
|
94
|
+
fileserverOfflineCheckIntervalMillis: number;
|
|
95
|
+
/**
|
|
96
|
+
* When set to **true** the downloader will fail or skip (see {@link this.failFileWhenPreventingOverwrite}) a file when attempting to download to a location which already exists (no matter its size).
|
|
97
|
+
* When set to **false** downloader will just re-download the file and overwrite existing file on disk.
|
|
98
|
+
* @default false
|
|
99
|
+
*/
|
|
100
|
+
preventOverwrites: boolean;
|
|
101
|
+
/**
|
|
102
|
+
* When set to **true** downloader will fail a file when attempting to download to location which already exists (no matter its size).
|
|
103
|
+
* When set to **false** downloader will skip the file and advance the total progress as if it downloaded that file.
|
|
104
|
+
* Applies only when {@link preventOverwrites} is set to **true**.
|
|
105
|
+
* @default false
|
|
106
|
+
*/
|
|
107
|
+
failFileWhenPreventingOverwrite: boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Number of milliseconds between progress events emitted by the downloader (throttling - they won't be emitted more often that this amount of time).
|
|
110
|
+
* @default 100
|
|
111
|
+
*/
|
|
112
|
+
progressTickMillis: number;
|
|
113
|
+
/**
|
|
114
|
+
* If set to **true** ==> the downloader will delete those files which were being downloaded, but failed.
|
|
115
|
+
* @default true
|
|
116
|
+
*/
|
|
117
|
+
deleteFailedFilesFromDisk: boolean;
|
|
118
|
+
/**
|
|
119
|
+
* When set to **true* ==> after user requests download abort - the downloader will delete all files which it tried to download, no matter their size and status.
|
|
120
|
+
* @default true
|
|
121
|
+
*/
|
|
122
|
+
deleteAbortedDownloadsFromDisk: boolean;
|
|
123
|
+
/**
|
|
124
|
+
* When set to **true** ==> after download completes or is aborted - the downloader will delete the main download folder if it is empty (no files have been downloaded and there are no other files left over).
|
|
125
|
+
* @default true
|
|
126
|
+
*/
|
|
127
|
+
deleteEmptyDownloadFoldersAfterDownload: boolean;
|
|
128
|
+
/**
|
|
129
|
+
* When set to **true** ==> after download completes with at least one successful file - the downloader will report the download to api.
|
|
130
|
+
* @default true
|
|
131
|
+
*/
|
|
132
|
+
registerDownloadsToApi: boolean;
|
|
133
|
+
/**
|
|
134
|
+
* When this path is specified (not null) then downloader will track download progress of each file within this folder.
|
|
135
|
+
* Every download gets own subfolder (transferID_downloadID) with dumped options of the download (options.json) and files.json
|
|
136
|
+
* which tracks all pending files. It will not contain completed files or those that have not started yet. Tracking is performed with
|
|
137
|
+
* chunk-precision (not byte-precision). Worst case the download tracker may lose N chunks (N being the number of {@link parallelChunks}).
|
|
138
|
+
* @default null
|
|
139
|
+
*/
|
|
140
|
+
downloadTrackingBaseFolder: string | null;
|
|
141
|
+
/**
|
|
142
|
+
* Minimum time interval (in milliseconds) between consecutive dumps of downloader state to disk.
|
|
143
|
+
* @default 5000
|
|
144
|
+
*/
|
|
145
|
+
downloadTrackingIntervalMillis: number;
|
|
146
|
+
}
|
|
147
|
+
export default DownloadOptions;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
class DownloadOptions {
|
|
2
|
+
constructor() {
|
|
3
|
+
/**
|
|
4
|
+
* logintoken of the current user - used to fetch company setup, register download
|
|
5
|
+
* @default null
|
|
6
|
+
*/
|
|
7
|
+
this.logintoken = null;
|
|
8
|
+
/**
|
|
9
|
+
* Path template where files should be downloaded. Provide this OR {@link downloadFolder}. Supports placeholders:
|
|
10
|
+
* <id> - transferId
|
|
11
|
+
* <subject>
|
|
12
|
+
* <description>
|
|
13
|
+
* <domain> - domain based on "from" email (e.g. user@example.com --> example.com)
|
|
14
|
+
* <emailfrom>
|
|
15
|
+
* <datesent> - will be formatted as "YYYY-MM-DD-hh-mm"
|
|
16
|
+
* <datesent:format> - will be formatted according to "format"; supported placeholders in "format": YYYY, MM, DD, hh, mm
|
|
17
|
+
* <emailto> - all recipients emails comma-separated
|
|
18
|
+
* <{custom_field_label}> - specified custom field named by label will replaced with that custom field's value
|
|
19
|
+
* @default null
|
|
20
|
+
*/
|
|
21
|
+
this.downloadFolderTemplate = null;
|
|
22
|
+
/**
|
|
23
|
+
* The path where files should be downloaded. No placeholders. Provide this OR {@link downloadFolderTemplate}.
|
|
24
|
+
* When {@link downloadFolderTemplate} is specified this value will be overwritten with the resolved (final) path.
|
|
25
|
+
* @default null
|
|
26
|
+
*/
|
|
27
|
+
this.downloadFolder = null;
|
|
28
|
+
/**
|
|
29
|
+
* HTTP request timeout for web api (not Fileserver) in milliseconds.
|
|
30
|
+
* @default 30000
|
|
31
|
+
*/
|
|
32
|
+
this.apiRequestTotalTimeoutInMs = 30000;
|
|
33
|
+
/**
|
|
34
|
+
* How many times to attempt HTTP requests towards web API (not Fileserver) e.g. when getting a transfer from the API.
|
|
35
|
+
* @see https://github.com/sindresorhus/got#documentation
|
|
36
|
+
* @default 3
|
|
37
|
+
*/
|
|
38
|
+
this.apiRetryLimit = 3;
|
|
39
|
+
/**
|
|
40
|
+
* Maximum number (N) of chunks that can be downloaded in parallel. As soon as any single chunk is complete then next available chunk is started (to keep parallel chunks always at N).
|
|
41
|
+
* - If there is one huge file with X chunks (X>N) - first N chunks will be picked up.
|
|
42
|
+
* - If there are 2 files, each with 3 chunks and N=4 - both files will be started (all 3 chunks of first file and only 1st chunk of the 2nd file).
|
|
43
|
+
* @default 8
|
|
44
|
+
*/
|
|
45
|
+
this.parallelChunks = 8;
|
|
46
|
+
/**
|
|
47
|
+
* How many times to try write downloaded bytes of a chunk and optionally verify its MD5. Set to -1 to keep trying forever.
|
|
48
|
+
* @default 20
|
|
49
|
+
*/
|
|
50
|
+
this.maxWriteAttempts = 20;
|
|
51
|
+
/**
|
|
52
|
+
* The user-agent header that will be used for all fileserver GetFile requests.
|
|
53
|
+
* @default null
|
|
54
|
+
*/
|
|
55
|
+
this.userAgent = null;
|
|
56
|
+
/**
|
|
57
|
+
* Maximum size (S) of a chunk in bytes. When set to a number - downloader will split files into chunks of this size (size of last chunk) <= S. Set to null to download every file in one HTTPS request.
|
|
58
|
+
* @default 5000000 (5MB)
|
|
59
|
+
*/
|
|
60
|
+
this.maxChunkSize = 5000000;
|
|
61
|
+
/**
|
|
62
|
+
* When set to **true** downloader will verify MD5 after every chunk.
|
|
63
|
+
* @efault true
|
|
64
|
+
*/
|
|
65
|
+
this.checkChunksMd5 = true;
|
|
66
|
+
/**
|
|
67
|
+
* When set to **true** downloader will verify MD5 for every completed file (entire file). To use this feature provided the MD5 value in DownloadFileInfo passed to the downloader.
|
|
68
|
+
* @note NOT SUPPORTED (YET)
|
|
69
|
+
*/
|
|
70
|
+
this.checkFileMd5 = false;
|
|
71
|
+
/**
|
|
72
|
+
* How long should it take for HTTP library to throw error when no download data is pumped to response (milliseconds).
|
|
73
|
+
* @default 30000
|
|
74
|
+
*/
|
|
75
|
+
this.fileserverDownloadIdleTimeMs = 30000;
|
|
76
|
+
/**
|
|
77
|
+
* How many times to attempt a single HTTP download request against Fileserver's GetFile. Set this options to 0 to keep trying forever.
|
|
78
|
+
* When set to 0 (retring forever) the downloader will report "network problem" after 10 failed attempts (via event and a status field).
|
|
79
|
+
* When connectivity is back it will be reported with an event as well.
|
|
80
|
+
* @default 0
|
|
81
|
+
*/
|
|
82
|
+
this.fileserverAttemptLimit = 0;
|
|
83
|
+
/**
|
|
84
|
+
* Downloader will assume there is a "network problem" after this many consecutive network errors without any successful progress.
|
|
85
|
+
* Set to -1 to disable this feature.
|
|
86
|
+
* @default 10;
|
|
87
|
+
*/
|
|
88
|
+
this.fileserverOfflineAfterConsecutiveAttempts = 10;
|
|
89
|
+
/**
|
|
90
|
+
* Once downloader sees a "network problem" it will retry every pending chunk with this interval (in milliseconds).
|
|
91
|
+
* This interval will be also used to calculate exponential backoff between first network error and getting into "network problem" state
|
|
92
|
+
* and also is the maximum interval of the exponential backoff.
|
|
93
|
+
* @default 5000;
|
|
94
|
+
*/
|
|
95
|
+
this.fileserverOfflineCheckIntervalMillis = 5000;
|
|
96
|
+
/**
|
|
97
|
+
* When set to **true** the downloader will fail or skip (see {@link this.failFileWhenPreventingOverwrite}) a file when attempting to download to a location which already exists (no matter its size).
|
|
98
|
+
* When set to **false** downloader will just re-download the file and overwrite existing file on disk.
|
|
99
|
+
* @default false
|
|
100
|
+
*/
|
|
101
|
+
this.preventOverwrites = false;
|
|
102
|
+
/**
|
|
103
|
+
* When set to **true** downloader will fail a file when attempting to download to location which already exists (no matter its size).
|
|
104
|
+
* When set to **false** downloader will skip the file and advance the total progress as if it downloaded that file.
|
|
105
|
+
* Applies only when {@link preventOverwrites} is set to **true**.
|
|
106
|
+
* @default false
|
|
107
|
+
*/
|
|
108
|
+
this.failFileWhenPreventingOverwrite = false;
|
|
109
|
+
/**
|
|
110
|
+
* Number of milliseconds between progress events emitted by the downloader (throttling - they won't be emitted more often that this amount of time).
|
|
111
|
+
* @default 100
|
|
112
|
+
*/
|
|
113
|
+
this.progressTickMillis = 100;
|
|
114
|
+
/**
|
|
115
|
+
* If set to **true** ==> the downloader will delete those files which were being downloaded, but failed.
|
|
116
|
+
* @default true
|
|
117
|
+
*/
|
|
118
|
+
this.deleteFailedFilesFromDisk = true;
|
|
119
|
+
/**
|
|
120
|
+
* When set to **true* ==> after user requests download abort - the downloader will delete all files which it tried to download, no matter their size and status.
|
|
121
|
+
* @default true
|
|
122
|
+
*/
|
|
123
|
+
this.deleteAbortedDownloadsFromDisk = true;
|
|
124
|
+
/**
|
|
125
|
+
* When set to **true** ==> after download completes or is aborted - the downloader will delete the main download folder if it is empty (no files have been downloaded and there are no other files left over).
|
|
126
|
+
* @default true
|
|
127
|
+
*/
|
|
128
|
+
this.deleteEmptyDownloadFoldersAfterDownload = true;
|
|
129
|
+
/**
|
|
130
|
+
* When set to **true** ==> after download completes with at least one successful file - the downloader will report the download to api.
|
|
131
|
+
* @default true
|
|
132
|
+
*/
|
|
133
|
+
this.registerDownloadsToApi = true;
|
|
134
|
+
/**
|
|
135
|
+
* When this path is specified (not null) then downloader will track download progress of each file within this folder.
|
|
136
|
+
* Every download gets own subfolder (transferID_downloadID) with dumped options of the download (options.json) and files.json
|
|
137
|
+
* which tracks all pending files. It will not contain completed files or those that have not started yet. Tracking is performed with
|
|
138
|
+
* chunk-precision (not byte-precision). Worst case the download tracker may lose N chunks (N being the number of {@link parallelChunks}).
|
|
139
|
+
* @default null
|
|
140
|
+
*/
|
|
141
|
+
this.downloadTrackingBaseFolder = null;
|
|
142
|
+
/**
|
|
143
|
+
* Minimum time interval (in milliseconds) between consecutive dumps of downloader state to disk.
|
|
144
|
+
* @default 5000
|
|
145
|
+
*/
|
|
146
|
+
this.downloadTrackingIntervalMillis = 5000;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
export default DownloadOptions;
|
|
150
|
+
//# sourceMappingURL=downloadOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downloadOptions.js","sourceRoot":"","sources":["../../../src/downloader/downloadOptions.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe;IAArB;QACI;;;WAGG;QACH,eAAU,GAAkB,IAAI,CAAC;QACjC;;;;;;;;;;;;WAYG;QACH,2BAAsB,GAAkB,IAAI,CAAC;QAC7C;;;;WAIG;QACH,mBAAc,GAAkB,IAAI,CAAC;QACrC;;;WAGG;QACH,+BAA0B,GAAG,KAAK,CAAC;QACnC;;;;WAIG;QACH,kBAAa,GAAG,CAAC,CAAC;QAClB;;;;;WAKG;QACH,mBAAc,GAAG,CAAC,CAAC;QACnB;;;WAGG;QACH,qBAAgB,GAAG,EAAE,CAAC;QACtB;;;WAGG;QACH,cAAS,GAAkB,IAAI,CAAC;QAChC;;;WAGG;QACH,iBAAY,GAAkB,OAAO,CAAC;QACtC;;;WAGG;QACH,mBAAc,GAAG,IAAI,CAAC;QACtB;;;WAGG;QACH,iBAAY,GAAG,KAAK,CAAC;QACrB;;;WAGG;QACH,iCAA4B,GAAG,KAAK,CAAC;QACrC;;;;;WAKG;QACH,2BAAsB,GAAG,CAAC,CAAC;QAC3B;;;;WAIG;QACH,8CAAyC,GAAG,EAAE,CAAC;QAC/C;;;;;WAKG;QACH,yCAAoC,GAAG,IAAI,CAAC;QAC5C;;;;WAIG;QACH,sBAAiB,GAAG,KAAK,CAAC;QAC1B;;;;;WAKG;QACH,oCAA+B,GAAG,KAAK,CAAC;QACxC;;;WAGG;QACH,uBAAkB,GAAG,GAAG,CAAC;QACzB;;;WAGG;QACH,8BAAyB,GAAG,IAAI,CAAC;QACjC;;;WAGG;QACH,mCAA8B,GAAG,IAAI,CAAC;QACtC;;;WAGG;QACH,4CAAuC,GAAG,IAAI,CAAC;QAC/C;;;WAGG;QACH,2BAAsB,GAAG,IAAI,CAAC;QAC9B;;;;;;WAMG;QACH,+BAA0B,GAAkB,IAAI,CAAC;QACjD;;;WAGG;QACH,mCAA8B,GAAG,IAAI,CAAC;IAC1C,CAAC;CAAA;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export default class DownloadFileChunkProgress {
|
|
2
|
+
id: string;
|
|
3
|
+
chunkNumber: number;
|
|
4
|
+
start: number | null;
|
|
5
|
+
end: number | null;
|
|
6
|
+
size: number;
|
|
7
|
+
downloaded: number;
|
|
8
|
+
percent: number;
|
|
9
|
+
completed: boolean;
|
|
10
|
+
failed: boolean;
|
|
11
|
+
constructor(id: string, chunkNumber: number, start: number | null, end: number | null, size: number, downloaded: number, percent: number, completed: boolean, failed: boolean);
|
|
12
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export default class DownloadFileChunkProgress {
|
|
2
|
+
constructor(id, chunkNumber, start, end, size, downloaded, percent, completed, failed) {
|
|
3
|
+
this.id = id;
|
|
4
|
+
this.chunkNumber = chunkNumber;
|
|
5
|
+
this.start = start;
|
|
6
|
+
this.end = end;
|
|
7
|
+
this.size = size;
|
|
8
|
+
this.downloaded = downloaded;
|
|
9
|
+
this.percent = percent;
|
|
10
|
+
this.completed = completed;
|
|
11
|
+
this.failed = failed;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=downloadFileChunkProgress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downloadFileChunkProgress.js","sourceRoot":"","sources":["../../../../src/downloader/downloadStatus/downloadFileChunkProgress.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,yBAAyB;IAW1C,YAAY,EAAU,EAAE,WAAmB,EAAE,KAAoB,EAAE,GAAkB,EAAE,IAAY,EAAE,UAAkB,EAAE,OAAe,EAAE,SAAkB,EAAE,MAAe;QACzK,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;CACJ"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type DownloadError from "../dtos/downloadError";
|
|
2
|
+
export default class DownloadFileProgress {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
url: string;
|
|
6
|
+
downloadPath: string;
|
|
7
|
+
percent: number;
|
|
8
|
+
downloaded: number;
|
|
9
|
+
size: number;
|
|
10
|
+
completed: boolean;
|
|
11
|
+
failed: boolean;
|
|
12
|
+
failures: Array<DownloadError>;
|
|
13
|
+
chunks: number;
|
|
14
|
+
lastOkChunk: number | null;
|
|
15
|
+
constructor(externalId: string, name: string, url: string, downloadPath: string, size: number, downloaded: number, percent: number, completed: boolean, failed: boolean, failures: Array<DownloadError> | null, numberOfChunks: number, lastSuccessfulChunk: number | null);
|
|
16
|
+
}
|