filemail-sdk 9.4.7 → 9.4.9
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 +10 -10
- package/dist/src/autoDownloader/autoDownloader.js.map +1 -1
- package/dist/src/autoDownloader/autoDownloaderDestroyer.js.map +1 -1
- package/dist/src/autoDownloader/autoDownloaderError.js.map +1 -1
- package/dist/src/autoDownloader/autoDownloaderEvent.js.map +1 -1
- package/dist/src/autoDownloader/autoDownloaderOptions.js.map +1 -1
- package/dist/src/autoDownloader/autoDownloaderStateSerializer.js.map +1 -1
- package/dist/src/autoDownloader/eventArgs/autoDownloadEventArgs.js.map +1 -1
- package/dist/src/autoDownloader/eventArgs/autoDownloadFailedEventArgs.js.map +1 -1
- package/dist/src/autoDownloader/eventArgs/autoDownloadProgressedEventArgs.js.map +1 -1
- package/dist/src/autoDownloader/eventArgs/autoDownloadStartedEventArgs.js.map +1 -1
- package/dist/src/autoDownloader/eventArgs/autoDownloadStartingFailedEventArgs.js.map +1 -1
- package/dist/src/autoDownloader/eventArgs/autoDownloadUnhealthyEventArgs.js.map +1 -1
- package/dist/src/autoDownloader/eventArgs/checkingForNewTransfersStartedEventArgs.js.map +1 -1
- package/dist/src/autoDownloader/eventArgs/newTransfersCheckCompletedEventArgs.js.map +1 -1
- package/dist/src/autoDownloader/factory/nodeAutoDownloaderFactory.js.map +1 -1
- package/dist/src/autoDownloader/factory/nodeAutoDownloaderFactoryOptions.js.map +1 -1
- package/dist/src/autoDownloader/newInboxTransfersRetriever/newInboxTransfer.js.map +1 -1
- package/dist/src/autoDownloader/newInboxTransfersRetriever/newInboxTransfersRetriever.js.map +1 -1
- package/dist/src/autoDownloader/node/nodeAutoDownloaderStateSerializer.js.map +1 -1
- package/dist/src/autoDownloader/node/nodeTransferDownloaderFactory.js.map +1 -1
- package/dist/src/autoDownloader/state/autoDownloaderRecoverableState.js.map +1 -1
- package/dist/src/autoDownloader/state/autoDownloaderState.js.map +1 -1
- package/dist/src/autoDownloader/state/autoDownloaderStateRecoverableTransfer.js.map +1 -1
- package/dist/src/autoDownloader/state/autoDownloaderStateRunningTransfer.js.map +1 -1
- package/dist/src/autoDownloader/state/autoDownloaderStateSnapshot.js.map +1 -1
- package/dist/src/autoDownloader/transferDownloaderFactory.js.map +1 -1
- package/dist/src/autoDownloader/transferHandler/autoDownloaderNewTransferHandler.js.map +1 -1
- package/dist/src/autoDownloader/transferHandler/autoDownloaderRecoverableTransferHandler.js.map +1 -1
- package/dist/src/autoDownloader/transferHandler/autoDownloaderTransferHandlerBase.js.map +1 -1
- package/dist/src/client/downloader/downloaderCore.js.map +1 -1
- package/dist/src/client/downloader/node/nodeTransferDownloader.js.map +1 -1
- package/dist/src/client/downloader/transferDownloader.js.map +1 -1
- package/dist/src/client/environmentVariables.js.map +1 -1
- package/dist/src/client/healthMonitor/events/eventArgs/healthMonitorHealthyEventArgs.js.map +1 -1
- package/dist/src/client/healthMonitor/events/eventArgs/healthMonitorUnhealthyEventArgs.js.map +1 -1
- package/dist/src/client/healthMonitor/events/transferHealthMonitorEvent.js.map +1 -1
- package/dist/src/client/healthMonitor/onlineChecker/nodeOnlineChecker.js.map +1 -1
- package/dist/src/client/healthMonitor/onlineChecker/onlineChecker.js.map +1 -1
- package/dist/src/client/healthMonitor/onlineChecker/webOnlineChecker.js.map +1 -1
- package/dist/src/client/healthMonitor/transferDownloaderHealthMonitor.js.map +1 -1
- package/dist/src/client/healthMonitor/transferHealthMonitorBase.js.map +1 -1
- package/dist/src/client/healthMonitor/transferUploaderHealthMonitor.js.map +1 -1
- package/dist/src/client/loggers/dummyLogger.js.map +1 -1
- package/dist/src/client/loggers/logger.js.map +1 -1
- package/dist/src/client/loggers/utils/logHealthyStatus.js.map +1 -1
- package/dist/src/client/node/nodeFileDetailsProvider.js.map +1 -1
- package/dist/src/client/uploader/node/nodeTransferUploader.js.map +1 -1
- package/dist/src/client/uploader/transferUploader.js.map +1 -1
- package/dist/src/client/uploader/transferUploaderBase.js.map +1 -1
- package/dist/src/client/uploader/transferUploaderConfig.js.map +1 -1
- package/dist/src/client/uploader/utils/uploaderUtils.js.map +1 -1
- package/dist/src/client/uploader/web/webTransferUploader.js.map +1 -1
- package/dist/src/downloader/api/fileServerDownloadClient.js.map +1 -1
- package/dist/src/downloader/api/node/nodeFileServerDownloadClient.js.map +1 -1
- package/dist/src/downloader/chunkDownloader.js.map +1 -1
- package/dist/src/downloader/downloadFolderResolver.js.map +1 -1
- package/dist/src/downloader/downloadLogger.js.map +1 -1
- package/dist/src/downloader/downloadOptions.js.map +1 -1
- package/dist/src/downloader/downloadStatus/downloadFileChunkProgress.js.map +1 -1
- package/dist/src/downloader/downloadStatus/downloadFileProgress.js.map +1 -1
- package/dist/src/downloader/downloadStatus/downloadFilePromise.js.map +1 -1
- package/dist/src/downloader/downloadStatus/downloadState.js.map +1 -1
- package/dist/src/downloader/downloadTracker.js.map +1 -1
- package/dist/src/downloader/dtos/downloadCommand.js.map +1 -1
- package/dist/src/downloader/dtos/downloadError.js.map +1 -1
- package/dist/src/downloader/dtos/downloadErrorCode.js.map +1 -1
- package/dist/src/downloader/dtos/downloadEvent.js.map +1 -1
- package/dist/src/downloader/dtos/downloadFileChunkInfo.js.map +1 -1
- package/dist/src/downloader/dtos/downloadFileInfo.js.map +1 -1
- package/dist/src/downloader/dtos/downloadFilesCommand.js.map +1 -1
- package/dist/src/downloader/dtos/downloadInfo.js.map +1 -1
- package/dist/src/downloader/dtos/downloadRegistrationMode.js.map +1 -1
- package/dist/src/downloader/dtos/downloadTrackerFileInfo.js.map +1 -1
- package/dist/src/downloader/dtos/downloadTrackerFileProgressInfo.js.map +1 -1
- package/dist/src/downloader/dtos/downloadTrackerProgressInfo.js.map +1 -1
- package/dist/src/downloader/dtos/downloadTrackingMetadata.js.map +1 -1
- package/dist/src/downloader/dtos/downloaderRestoredState.js.map +1 -1
- package/dist/src/downloader/eventArgs/chunkDownloadEventArgs.js.map +1 -1
- package/dist/src/downloader/eventArgs/chunkDownloadFailedEventArgs.js.map +1 -1
- package/dist/src/downloader/eventArgs/downloadCompletedEventArgs.js.map +1 -1
- package/dist/src/downloader/eventArgs/downloadEventArgs.js.map +1 -1
- package/dist/src/downloader/eventArgs/downloadMetadataDeterminedEventArgs.js.map +1 -1
- package/dist/src/downloader/eventArgs/downloadPauseEventArgs.js.map +1 -1
- package/dist/src/downloader/eventArgs/downloadTrackingFailedEventArgs.js.map +1 -1
- package/dist/src/downloader/eventArgs/fileDownloadEventArgs.js.map +1 -1
- package/dist/src/downloader/eventArgs/fileDownloadFailedEventArgs.js.map +1 -1
- package/dist/src/downloader/filesDownloader.js.map +1 -1
- package/dist/src/downloader/filesPreparer.js.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/index.node.js.map +1 -1
- package/dist/src/index.web.js.map +1 -1
- package/dist/src/uploader/api/dtos/handshakeRequest.js.map +1 -1
- package/dist/src/uploader/api/dtos/handshakeResponse.js.map +1 -1
- package/dist/src/uploader/api/dtos/pingResponse.js.map +1 -1
- package/dist/src/uploader/api/dtos/sendChunkRequest.js.map +1 -1
- package/dist/src/uploader/api/fileServerUdpClient.js.map +1 -1
- package/dist/src/uploader/api/fileServerUploadClient.js.map +1 -1
- package/dist/src/uploader/api/node/nodeFileServerUdpClient.js +8 -8
- package/dist/src/uploader/api/node/nodeFileServerUdpClient.js.map +1 -1
- package/dist/src/uploader/api/node/nodeFileServerUploadClient.js.map +1 -1
- package/dist/src/uploader/api/web/utils/axiosIdleTimeoutManager.js.map +1 -1
- package/dist/src/uploader/api/web/webFileServerUploadClient.js.map +1 -1
- package/dist/src/uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.js.map +1 -1
- package/dist/src/uploader/chunkStreamProviderFactory/uploaderChunkStreamProviderFactory.js.map +1 -1
- package/dist/src/uploader/chunkStreamProviderFactory/webFileDetailsUploaderChunkStreamProviderFactory.js.map +1 -1
- package/dist/src/uploader/chunksIterator/chunksIterator.js.map +1 -1
- package/dist/src/uploader/eventArgs/fileChunkUploadCompletedEventArgs.js.map +1 -1
- package/dist/src/uploader/eventArgs/fileChunkUploadCompletedPartiallyEventArgs.js.map +1 -1
- package/dist/src/uploader/eventArgs/fileChunkUploadEventArgs.js.map +1 -1
- package/dist/src/uploader/eventArgs/fileChunkUploadFailedEventArgs.js.map +1 -1
- package/dist/src/uploader/eventArgs/fileChunkUploadProgressedEventArgs.js.map +1 -1
- package/dist/src/uploader/eventArgs/fileUploadEventArgs.js.map +1 -1
- package/dist/src/uploader/eventArgs/fileUploadFailedEventArgs.js.map +1 -1
- package/dist/src/uploader/eventArgs/transferMetadataDeterminedEventArgs.js.map +1 -1
- package/dist/src/uploader/eventArgs/transferUploadCompletedEventArgs.d.ts +7 -0
- package/dist/src/uploader/eventArgs/transferUploadCompletedEventArgs.d.ts.map +1 -1
- package/dist/src/uploader/eventArgs/transferUploadCompletedEventArgs.js.map +1 -1
- package/dist/src/uploader/eventArgs/transferUploadModeChosenEventArgs.js.map +1 -1
- package/dist/src/uploader/eventArgs/transferUploadProgressedEventArgs.js.map +1 -1
- package/dist/src/uploader/export/transferUploadExportData.js.map +1 -1
- package/dist/src/uploader/export/transferUploadExportState.js.map +1 -1
- package/dist/src/uploader/export/transferUploadMetadata.js.map +1 -1
- package/dist/src/uploader/optimizer/optimizationValues.js.map +1 -1
- package/dist/src/uploader/optimizer/strategies/udpConcurrencyBasedOptimizationStrategy.js.map +1 -1
- package/dist/src/uploader/optimizer/strategies/udpSleepBasedOptimizationStrategy.js.map +1 -1
- package/dist/src/uploader/optimizer/transferUploadOptimizationStrategy.js.map +1 -1
- package/dist/src/uploader/optimizer/transferUploadOptimizer.js.map +1 -1
- package/dist/src/uploader/optimizer/uploadOptimizer.js.map +1 -1
- package/dist/src/uploader/options/transferUploadAppendInfo.js.map +1 -1
- package/dist/src/uploader/options/transferUploadConfig.js.map +1 -1
- package/dist/src/uploader/options/transferUploadInfo.js.map +1 -1
- package/dist/src/uploader/options/transferUploadInfoBase.js.map +1 -1
- package/dist/src/uploader/pauseController.js.map +1 -1
- package/dist/src/uploader/state/continuousChunksCalculator.js.map +1 -1
- package/dist/src/uploader/state/readonlyTransferUploadStateFile.js.map +1 -1
- package/dist/src/uploader/state/readonlyTransferUploadStateFiles.js.map +1 -1
- package/dist/src/uploader/state/transferUploadProgressCalculator.js.map +1 -1
- package/dist/src/uploader/state/transferUploadState.d.ts +2 -1
- package/dist/src/uploader/state/transferUploadState.d.ts.map +1 -1
- package/dist/src/uploader/state/transferUploadState.js +9 -2
- package/dist/src/uploader/state/transferUploadState.js.map +1 -1
- package/dist/src/uploader/state/transferUploadStateFile.js.map +1 -1
- package/dist/src/uploader/state/transferUploadStateFiles.js.map +1 -1
- package/dist/src/uploader/transferFailureAbortReason.js.map +1 -1
- package/dist/src/uploader/transferUpload.d.ts.map +1 -1
- package/dist/src/uploader/transferUpload.js +3 -1
- package/dist/src/uploader/transferUpload.js.map +1 -1
- package/dist/src/uploader/transferUploadError.js.map +1 -1
- package/dist/src/uploader/transferUploadEvent.js.map +1 -1
- package/dist/src/utils/api/apiClient.js.map +1 -1
- package/dist/src/utils/api/apiClientBase.js.map +1 -1
- package/dist/src/utils/api/apiError.js.map +1 -1
- package/dist/src/utils/api/apiFilemail449Error.js.map +1 -1
- package/dist/src/utils/api/apiFilemailError.js.map +1 -1
- package/dist/src/utils/api/dtos/baseResponse.js.map +1 -1
- package/dist/src/utils/api/dtos/cancelTransferRequest.js.map +1 -1
- package/dist/src/utils/api/dtos/finalizeTransferRequest.js.map +1 -1
- package/dist/src/utils/api/dtos/finalizeTransferResponse.d.ts +13 -0
- package/dist/src/utils/api/dtos/finalizeTransferResponse.d.ts.map +1 -1
- package/dist/src/utils/api/dtos/finalizeTransferResponse.js.map +1 -1
- package/dist/src/utils/api/dtos/getCompanyResponse.js.map +1 -1
- package/dist/src/utils/api/dtos/getCompressedFileMetadataResponse.js.map +1 -1
- package/dist/src/utils/api/dtos/getInboxTransfersRequest.js.map +1 -1
- package/dist/src/utils/api/dtos/getInboxTransfersResponse.js.map +1 -1
- package/dist/src/utils/api/dtos/getRangehashResponse.js.map +1 -1
- package/dist/src/utils/api/dtos/getTransferRequest.js.map +1 -1
- package/dist/src/utils/api/dtos/getTransferResponse.js.map +1 -1
- package/dist/src/utils/api/dtos/initializeTransferRequest.js.map +1 -1
- package/dist/src/utils/api/dtos/initializeTransferResponse.js.map +1 -1
- package/dist/src/utils/api/dtos/loginRequest.js.map +1 -1
- package/dist/src/utils/api/dtos/loginResponse.js.map +1 -1
- package/dist/src/utils/api/dtos/registerFileDownloadRequest.js.map +1 -1
- package/dist/src/utils/api/dtos/registerTransferDownloadRequest.js.map +1 -1
- package/dist/src/utils/api/dtos/resetTransferRequest.js.map +1 -1
- package/dist/src/utils/api/dtos/sendFileChunkRequest.js.map +1 -1
- package/dist/src/utils/api/dtos/transferCustomFieldDto.js.map +1 -1
- package/dist/src/utils/api/dtos/transferFileDto.js.map +1 -1
- package/dist/src/utils/api/fileServerClientFactory.js.map +1 -1
- package/dist/src/utils/api/node/gotWorkarounds.js.map +1 -1
- package/dist/src/utils/api/node/nodeApiClient.d.ts.map +1 -1
- package/dist/src/utils/api/node/nodeApiClient.js +4 -0
- package/dist/src/utils/api/node/nodeApiClient.js.map +1 -1
- package/dist/src/utils/api/node/nodeClientBase.js.map +1 -1
- package/dist/src/utils/api/node/nodeFileServerClientFactory.js.map +1 -1
- package/dist/src/utils/api/node/nodeFileserverClientBase.js.map +1 -1
- package/dist/src/utils/api/urlUtil.js.map +1 -1
- package/dist/src/utils/api/web/webApiClient.d.ts.map +1 -1
- package/dist/src/utils/api/web/webApiClient.js +4 -0
- package/dist/src/utils/api/web/webApiClient.js.map +1 -1
- package/dist/src/utils/api/web/webClientBase.js.map +1 -1
- package/dist/src/utils/api/web/webFileServerClientFactory.js.map +1 -1
- package/dist/src/utils/api/web/webFileserverClientBase.js.map +1 -1
- package/dist/src/utils/concurrencyController/concurrencyController.js.map +1 -1
- package/dist/src/utils/concurrencyController/concurrencyReleaser.js.map +1 -1
- package/dist/src/utils/concurrencyController/transferConcurrencyController.js.map +1 -1
- package/dist/src/utils/crypto/cryptographyProvider.js.map +1 -1
- package/dist/src/utils/crypto/node/nodeCryptographyProvider.js.map +1 -1
- package/dist/src/utils/crypto/web/webCryptographyProvider.js.map +1 -1
- package/dist/src/utils/dateAndTime/simpleDateFormatter.js.map +1 -1
- package/dist/src/utils/events/chunkProgressEvent.js.map +1 -1
- package/dist/src/utils/events/eventsEngine.js.map +1 -1
- package/dist/src/utils/events/node/nodeEventsEngine.js.map +1 -1
- package/dist/src/utils/events/web/webEventsEngine.js.map +1 -1
- package/dist/src/utils/fileSystem/chunkStreamProvider.js.map +1 -1
- package/dist/src/utils/fileSystem/chunkStreamProviderFactory.js.map +1 -1
- package/dist/src/utils/fileSystem/fileDetails.js.map +1 -1
- package/dist/src/utils/fileSystem/fileSystemService.js.map +1 -1
- package/dist/src/utils/fileSystem/fsError.js.map +1 -1
- package/dist/src/utils/fileSystem/node/nodeChunkStreamProvider.js.map +1 -1
- package/dist/src/utils/fileSystem/node/nodeChunkStreamProviderFactory.js.map +1 -1
- package/dist/src/utils/fileSystem/node/nodeFileDetails.js.map +1 -1
- package/dist/src/utils/fileSystem/node/nodeFileSystemService.js.map +1 -1
- package/dist/src/utils/fileSystem/parsedPath.js.map +1 -1
- package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamEncrypter.js.map +1 -1
- package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.js.map +1 -1
- package/dist/src/utils/fileSystem/web/webChunkStreamProviderFactory.js.map +1 -1
- package/dist/src/utils/fileSystem/web/webFileDetails.js.map +1 -1
- package/dist/src/utils/jsonParsing.js.map +1 -1
- package/dist/src/utils/logging/logEventPropertyNames.js.map +1 -1
- package/dist/src/utils/mergeAbortAndPauseSignals.js.map +1 -1
- package/dist/src/utils/networking/throttlingOptions.js.map +1 -1
- package/dist/src/utils/promiseAll.js.map +1 -1
- package/dist/src/utils/types/transferStatus.js.map +1 -1
- package/dist/src/utils/uint8ArrayUtils.js.map +1 -1
- package/package.json +79 -79
- package/readme.md +18 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileSystemService.js","sourceRoot":"","sources":["../../../../src/utils/fileSystem/fileSystemService.ts"],"names":[],"mappings":"","sourcesContent":["import type DownloadErrorCode from \"../../downloader/dtos/downloadErrorCode.js\";\
|
|
1
|
+
{"version":3,"file":"fileSystemService.js","sourceRoot":"","sources":["../../../../src/utils/fileSystem/fileSystemService.ts"],"names":[],"mappings":"","sourcesContent":["import type DownloadErrorCode from \"../../downloader/dtos/downloadErrorCode.js\";\nimport type ParsedPath from \"./parsedPath.js\";\n\ninterface FileSystemService {\n writeFile(filePath: string, data: string, encoding?: BufferEncoding, abort?: AbortSignal): unknown;\n createFolder(folderPath: string): Promise<void>;\n getAllFilePaths(folderPath: string): Promise<Array<string>>;\n getAllFilePathsRecursive(folderPath: string): Promise<Array<string>>;\n readFileAsString(filePath: string, encoding?: BufferEncoding, abort?: AbortSignal): Promise<string>;\n pathJoin(...paths: Array<string>): string;\n deleteFolder(folderPath: string): Promise<boolean>;\n folderIsEmpty(folderPath: string): Promise<boolean>;\n deleteFile(filePath: string): Promise<boolean>;\n /**\n * Creates the file specified by **filePath**. Returns a bool flag whether the file was physically created or overwritten.\n * @param filePath - full path of the file to create\n * @param overwriteExisting - when **true** this method will create or overwrite the file (if exists) and return true. If **false** this method will create the file only if it does not exist and in such case it will return true. It will return false if the file already exists.\n */\n createFile(filePath: string, overwriteExisting: boolean): Promise<boolean>;\n pathExists(thePath: string, checkReadWriteAccess?: boolean): Promise<boolean>;\n getFileSize(filePath: string): Promise<number>;\n truncateFile(filePath: string, newSize: number): Promise<void>;\n renameFile(filePath: string, newPath: string): Promise<void>;\n getAvailableDiskSpace(path: string): Promise<bigint>;\n parseFilePath(filePath: string): ParsedPath;\n formatFilePath(parsedPath: ParsedPath): string;\n replaceFilenameInPath(filePath: string, newFileName: string): string;\n\n fileErrorToDownloadErrorCode(error: Error): DownloadErrorCode | undefined;\n}\n\nexport default FileSystemService;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fsError.js","sourceRoot":"","sources":["../../../../src/utils/fileSystem/fsError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,KAAK;IACtC,YAAY,OAAgB,EAAE,OAAsB;QAChD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;IAC1B,CAAC;CACJ","sourcesContent":["export default class FsError extends Error {\
|
|
1
|
+
{"version":3,"file":"fsError.js","sourceRoot":"","sources":["../../../../src/utils/fileSystem/fsError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,KAAK;IACtC,YAAY,OAAgB,EAAE,OAAsB;QAChD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;IAC1B,CAAC;CACJ","sourcesContent":["export default class FsError extends Error {\n constructor(message?: string, options?: ErrorOptions) {\n super(message, options);\n this.name = `FsError`;\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeChunkStreamProvider.js","sourceRoot":"","sources":["../../../../../src/utils/fileSystem/node/nodeChunkStreamProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"fs/promises\";\r\nimport fsSync, { ReadStream, WriteStream, constants as fsConsts } from \"fs\";\r\nimport crypto from \"crypto\";\r\nimport { pipeline, finished } from \"stream/promises\";\r\nimport { PassThrough, Transform } from \"stream\";\r\n\r\nimport { ReadableStream } from \"stream/web\";\r\nimport type { Writable } from \"stream\";\r\n\r\nimport { createCipher, createDecipher } from 'aes-ctr-concurrent';\r\n\r\nimport FsError from '../fsError.js';\r\n\r\nimport type ChunkStreamProvider from \"../chunkStreamProvider.js\";\r\nimport type { PauseSignal } from \"../../../uploader/pauseController.js\";\r\nimport type { ChunkStreamProviderEncryptionData } from \"../chunkStreamProvider.js\";\r\n\r\nexport default class NodeChunkStreamProvider implements ChunkStreamProvider {\r\n readonly chunkStartPosition: number;\r\n readonly chunkLengthInBytes: number;\r\n\r\n readonly #encryptionData?: ChunkStreamProviderEncryptionData;\r\n readonly #fullFilePath: string;\r\n\r\n #fileReadStream: ReadStream | null = null;\r\n #fileReadCipherStream: Transform | null = null;\r\n #fileReadPassThroughStream: PassThrough | null = null;\r\n #fileWriteHandle: fs.FileHandle | null = null;\r\n #fileWriteStream: WriteStream | null = null;\r\n #fileWriteDecipherStream: Transform | null = null;\r\n #fileReadStreamErrorListener: ((error: Error) => void) | undefined;\r\n #fileReadCipherStreamErrorListener: ((error: Error) => void) | undefined;\r\n #pauseSignal: PauseSignal | undefined;\r\n #pauseListener: (() => void) | undefined;\r\n #abortSignal: AbortSignal | undefined;\r\n #abortListener: (() => void) | undefined;\r\n\r\n get isReleased(): boolean {\r\n const isFileReadStreamReleased = this.#fileReadStream?.destroyed ?? true;\r\n const isFileReadCipherStreamReleased = this.#fileReadCipherStream?.destroyed ?? true;\r\n const isFileReadPassThroughStreamReleased = this.#fileReadPassThroughStream?.destroyed ?? true;\r\n const isFileWriteHandleReleased = this.#fileWriteHandle === null;\r\n const isFileWriteStreamReleased = this.#fileWriteStream?.destroyed ?? true;\r\n const isFileWriteDecipherStreamReleased = this.#fileWriteDecipherStream?.destroyed ?? true;\r\n\r\n return isFileReadStreamReleased && isFileReadCipherStreamReleased\r\n && isFileReadPassThroughStreamReleased && isFileWriteStreamReleased && isFileWriteDecipherStreamReleased\r\n && isFileWriteHandleReleased;\r\n }\r\n\r\n constructor(fullFilePath: string, chunkStartPosition: number, chunkLengthInBytes: number, encryptionData: ChunkStreamProviderEncryptionData | undefined) {\r\n this.throwIfEncryptionDataIsNotValid(encryptionData);\r\n\r\n this.#fullFilePath = fullFilePath;\r\n this.#encryptionData = encryptionData;\r\n this.chunkStartPosition = chunkStartPosition;\r\n\r\n if (chunkLengthInBytes < 0)\r\n throw new FsError(`chunkLengthInBytes can't be a negative value`);\r\n\r\n this.chunkLengthInBytes = chunkLengthInBytes;\r\n }\r\n\r\n private throwIfEncryptionDataIsNotValid(encryptionData: ChunkStreamProviderEncryptionData | undefined) {\r\n if (!encryptionData)\r\n return;\r\n\r\n if (encryptionData.iv.length !== 16)\r\n throw new FsError(`Encryption IV must be 16 bytes long`);\r\n if (encryptionData.key.length !== 32)\r\n throw new FsError(`Encryption key must be 32 bytes long`);\r\n }\r\n\r\n async getMd5Checksum(format: `hex` | `base64`, pauseSignal?: PauseSignal, abortSignal?: AbortSignal): Promise<string> {\r\n try {\r\n const fileStream = await this.getChunkReadStream(pauseSignal, abortSignal);\r\n\r\n const hash = crypto.createHash(`md5`);\r\n\r\n await pipeline(fileStream, hash);\r\n\r\n return hash.digest(format);\r\n }\r\n catch (error) {\r\n if (abortSignal?.aborted)\r\n throw this.createAbortError(abortSignal);\r\n\r\n if (error instanceof FsError)\r\n throw error;\r\n\r\n throw new FsError(`ComputingFileMd5ChecksumException`, { cause: error as Error });\r\n }\r\n finally {\r\n if (!this.isReleased)\r\n await this.release();\r\n }\r\n }\r\n\r\n async getChunkReadStream(pauseSignal?: PauseSignal, abortSignal?: AbortSignal): Promise<ReadableStream> {\r\n try {\r\n if (!this.isReleased)\r\n await this.release();\r\n\r\n await this.throwIfFileDoesNotExist(abortSignal);\r\n\r\n this.#fileReadStream = fsSync.createReadStream(this.#fullFilePath, {\r\n start: this.chunkStartPosition,\r\n end: this.getChunkEndPosition(),\r\n });\r\n\r\n this.#fileReadPassThroughStream = new PassThrough();\r\n\r\n if (this.#encryptionData) {\r\n this.#fileReadCipherStream = createCipher(\r\n Buffer.from(this.#encryptionData.key),\r\n Buffer.from(this.#encryptionData.iv),\r\n this.chunkStartPosition,\r\n ) as Transform;\r\n }\r\n\r\n this.registerReadErrorListeners();\r\n\r\n if (this.#fileReadCipherStream)\r\n this.#fileReadStream.pipe(this.#fileReadCipherStream).pipe(this.#fileReadPassThroughStream);\r\n else\r\n this.#fileReadStream.pipe(this.#fileReadPassThroughStream);\r\n\r\n this.registerInterruptListeners(pauseSignal, abortSignal);\r\n\r\n return ReadableStream.from(this.#fileReadPassThroughStream);\r\n }\r\n catch (error) {\r\n if (!this.isReleased)\r\n await this.release();\r\n\r\n if (abortSignal?.aborted)\r\n throw this.createAbortError(abortSignal);\r\n\r\n throw new FsError(`CreatingFileReadStreamException`, { cause: error as Error });\r\n }\r\n }\r\n\r\n getChunkBlob(): Promise<Blob> {\r\n throw new Error(`Not implemented for NodeJS`);\r\n }\r\n\r\n private getChunkEndPosition() {\r\n if (this.chunkLengthInBytes === 0)\r\n return this.chunkStartPosition;\r\n\r\n return this.chunkStartPosition + this.chunkLengthInBytes - 1;\r\n }\r\n\r\n async getChunkWriteStream(): Promise<{ fileStream: Writable, decipherStream?: Writable }> {\r\n try {\r\n if (!this.isReleased)\r\n await this.release();\r\n\r\n this.#fileWriteHandle = await fs.open(this.#fullFilePath, fsConsts.O_WRONLY);\r\n\r\n this.#fileWriteStream = this.#fileWriteHandle.createWriteStream({\r\n start: this.chunkStartPosition,\r\n });\r\n\r\n if (!this.#encryptionData)\r\n return { fileStream: this.#fileWriteStream };\r\n\r\n this.#fileWriteDecipherStream = createDecipher(\r\n Buffer.from(this.#encryptionData.key),\r\n Buffer.from(this.#encryptionData.iv),\r\n this.chunkStartPosition,\r\n ) as Transform;\r\n\r\n return { fileStream: this.#fileWriteStream, decipherStream: this.#fileWriteDecipherStream };\r\n }\r\n catch (error) {\r\n if (!this.isReleased)\r\n await this.release();\r\n\r\n throw new FsError(`CreatingFileWriteStreamException`, { cause: error as Error });\r\n }\r\n }\r\n\r\n async release(): Promise<void> {\r\n this.cleanupInterruptListeners();\r\n this.cleanupReadErrorListeners();\r\n\r\n await Promise.allSettled([\r\n this.destroyStream(this.#fileReadStream),\r\n this.destroyStream(this.#fileReadCipherStream),\r\n this.destroyStream(this.#fileReadPassThroughStream),\r\n this.closeHandle(this.#fileWriteHandle),\r\n this.destroyStream(this.#fileWriteStream),\r\n this.destroyStream(this.#fileWriteDecipherStream),\r\n ]);\r\n\r\n this.#fileReadStream = null;\r\n this.#fileReadCipherStream = null;\r\n this.#fileReadPassThroughStream = null;\r\n this.#fileWriteHandle = null;\r\n this.#fileWriteStream = null;\r\n this.#fileWriteDecipherStream = null;\r\n }\r\n\r\n private registerInterruptListeners(pauseSignal?: PauseSignal, abortSignal?: AbortSignal) {\r\n this.cleanupInterruptListeners();\r\n\r\n const interruptReadStream = (error?: Error) => {\r\n this.#fileReadStream?.destroy();\r\n this.#fileReadCipherStream?.destroy();\r\n this.#fileReadPassThroughStream?.destroy(error);\r\n };\r\n\r\n if (pauseSignal) {\r\n this.#pauseSignal = pauseSignal;\r\n this.#pauseListener = () => interruptReadStream();\r\n this.#pauseSignal.addEventListener(`pause`, this.#pauseListener);\r\n }\r\n\r\n if (abortSignal) {\r\n this.#abortSignal = abortSignal;\r\n this.#abortListener = () => interruptReadStream(this.createAbortError(abortSignal));\r\n this.#abortSignal.addEventListener(`abort`, this.#abortListener);\r\n }\r\n }\r\n\r\n private cleanupInterruptListeners() {\r\n if (this.#pauseSignal && this.#pauseListener)\r\n this.#pauseSignal.removeEventListener(`pause`, this.#pauseListener);\r\n\r\n if (this.#abortSignal && this.#abortListener)\r\n this.#abortSignal.removeEventListener(`abort`, this.#abortListener);\r\n\r\n this.#pauseSignal = undefined;\r\n this.#pauseListener = undefined;\r\n this.#abortSignal = undefined;\r\n this.#abortListener = undefined;\r\n }\r\n\r\n private registerReadErrorListeners() {\r\n this.cleanupReadErrorListeners();\r\n\r\n const propagateReadError = (error: Error) => {\r\n if (this.#abortSignal?.aborted) {\r\n this.#fileReadPassThroughStream?.destroy(this.createAbortError(this.#abortSignal));\r\n return;\r\n }\r\n\r\n this.#fileReadPassThroughStream?.destroy(new FsError(`CreatingFileReadStreamException`, { cause: error }));\r\n };\r\n\r\n if (this.#fileReadStream) {\r\n this.#fileReadStreamErrorListener = propagateReadError;\r\n this.#fileReadStream.on(`error`, this.#fileReadStreamErrorListener);\r\n }\r\n\r\n if (this.#fileReadCipherStream) {\r\n this.#fileReadCipherStreamErrorListener = propagateReadError;\r\n this.#fileReadCipherStream.on(`error`, this.#fileReadCipherStreamErrorListener);\r\n }\r\n }\r\n\r\n private cleanupReadErrorListeners() {\r\n if (this.#fileReadStream && this.#fileReadStreamErrorListener)\r\n this.#fileReadStream.removeListener(`error`, this.#fileReadStreamErrorListener);\r\n\r\n if (this.#fileReadCipherStream && this.#fileReadCipherStreamErrorListener)\r\n this.#fileReadCipherStream.removeListener(`error`, this.#fileReadCipherStreamErrorListener);\r\n\r\n this.#fileReadStreamErrorListener = undefined;\r\n this.#fileReadCipherStreamErrorListener = undefined;\r\n }\r\n\r\n private async throwIfFileDoesNotExist(abortSignal?: AbortSignal) {\r\n let fileReadHandle: fs.FileHandle | null = null;\r\n\r\n try {\r\n fileReadHandle = await this.awaitAbortable(fs.open(this.#fullFilePath, fsConsts.O_RDONLY), abortSignal);\r\n }\r\n finally {\r\n await this.closeHandle(fileReadHandle);\r\n }\r\n }\r\n\r\n private async awaitAbortable<T>(promise: Promise<T>, abortSignal?: AbortSignal): Promise<T> {\r\n if (!abortSignal)\r\n return await promise;\r\n\r\n if (abortSignal.aborted)\r\n throw this.createAbortError(abortSignal);\r\n\r\n return await new Promise<T>((resolve, reject) => {\r\n let isSettled = false;\r\n\r\n const cleanup = () => {\r\n abortSignal.removeEventListener(`abort`, abortListener);\r\n };\r\n\r\n const resolveOnce = (value: T) => {\r\n if (isSettled)\r\n return;\r\n\r\n isSettled = true;\r\n cleanup();\r\n resolve(value);\r\n };\r\n\r\n const rejectOnce = (error: unknown) => {\r\n if (isSettled)\r\n return;\r\n\r\n isSettled = true;\r\n cleanup();\r\n reject(error);\r\n };\r\n\r\n const abortListener = () => {\r\n rejectOnce(this.createAbortError(abortSignal));\r\n };\r\n\r\n abortSignal.addEventListener(`abort`, abortListener);\r\n\r\n promise\r\n .then(resolveOnce)\r\n .catch(rejectOnce);\r\n });\r\n }\r\n\r\n private createAbortError(abortSignal: AbortSignal) {\r\n if (abortSignal.reason instanceof Error)\r\n return abortSignal.reason;\r\n\r\n return new Error(`Aborted`);\r\n }\r\n\r\n private closeHandle = async (handle: fs.FileHandle | null): Promise<void> => {\r\n if (!handle)\r\n return;\r\n\r\n try {\r\n await handle.close();\r\n }\r\n catch { /* ignore errors during handle closing */ }\r\n };\r\n\r\n private destroyStream = async (stream: ReadStream | Writable | Transform | PassThrough | null): Promise<void> => {\r\n if (!stream || stream.destroyed)\r\n return;\r\n\r\n stream.once(`error`, () => { /* absorb premature close errors */ });\r\n const finishPromise = finished(stream).catch(() => { /* safely ignore */ });\r\n stream.destroy();\r\n await finishPromise;\r\n };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"nodeChunkStreamProvider.js","sourceRoot":"","sources":["../../../../../src/utils/fileSystem/node/nodeChunkStreamProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"fs/promises\";\nimport fsSync, { ReadStream, WriteStream, constants as fsConsts } from \"fs\";\nimport crypto from \"crypto\";\nimport { pipeline, finished } from \"stream/promises\";\nimport { PassThrough, Transform } from \"stream\";\n\nimport { ReadableStream } from \"stream/web\";\nimport type { Writable } from \"stream\";\n\nimport { createCipher, createDecipher } from 'aes-ctr-concurrent';\n\nimport FsError from '../fsError.js';\n\nimport type ChunkStreamProvider from \"../chunkStreamProvider.js\";\nimport type { PauseSignal } from \"../../../uploader/pauseController.js\";\nimport type { ChunkStreamProviderEncryptionData } from \"../chunkStreamProvider.js\";\n\nexport default class NodeChunkStreamProvider implements ChunkStreamProvider {\n readonly chunkStartPosition: number;\n readonly chunkLengthInBytes: number;\n\n readonly #encryptionData?: ChunkStreamProviderEncryptionData;\n readonly #fullFilePath: string;\n\n #fileReadStream: ReadStream | null = null;\n #fileReadCipherStream: Transform | null = null;\n #fileReadPassThroughStream: PassThrough | null = null;\n #fileWriteHandle: fs.FileHandle | null = null;\n #fileWriteStream: WriteStream | null = null;\n #fileWriteDecipherStream: Transform | null = null;\n #fileReadStreamErrorListener: ((error: Error) => void) | undefined;\n #fileReadCipherStreamErrorListener: ((error: Error) => void) | undefined;\n #pauseSignal: PauseSignal | undefined;\n #pauseListener: (() => void) | undefined;\n #abortSignal: AbortSignal | undefined;\n #abortListener: (() => void) | undefined;\n\n get isReleased(): boolean {\n const isFileReadStreamReleased = this.#fileReadStream?.destroyed ?? true;\n const isFileReadCipherStreamReleased = this.#fileReadCipherStream?.destroyed ?? true;\n const isFileReadPassThroughStreamReleased = this.#fileReadPassThroughStream?.destroyed ?? true;\n const isFileWriteHandleReleased = this.#fileWriteHandle === null;\n const isFileWriteStreamReleased = this.#fileWriteStream?.destroyed ?? true;\n const isFileWriteDecipherStreamReleased = this.#fileWriteDecipherStream?.destroyed ?? true;\n\n return isFileReadStreamReleased && isFileReadCipherStreamReleased\n && isFileReadPassThroughStreamReleased && isFileWriteStreamReleased && isFileWriteDecipherStreamReleased\n && isFileWriteHandleReleased;\n }\n\n constructor(fullFilePath: string, chunkStartPosition: number, chunkLengthInBytes: number, encryptionData: ChunkStreamProviderEncryptionData | undefined) {\n this.throwIfEncryptionDataIsNotValid(encryptionData);\n\n this.#fullFilePath = fullFilePath;\n this.#encryptionData = encryptionData;\n this.chunkStartPosition = chunkStartPosition;\n\n if (chunkLengthInBytes < 0)\n throw new FsError(`chunkLengthInBytes can't be a negative value`);\n\n this.chunkLengthInBytes = chunkLengthInBytes;\n }\n\n private throwIfEncryptionDataIsNotValid(encryptionData: ChunkStreamProviderEncryptionData | undefined) {\n if (!encryptionData)\n return;\n\n if (encryptionData.iv.length !== 16)\n throw new FsError(`Encryption IV must be 16 bytes long`);\n if (encryptionData.key.length !== 32)\n throw new FsError(`Encryption key must be 32 bytes long`);\n }\n\n async getMd5Checksum(format: `hex` | `base64`, pauseSignal?: PauseSignal, abortSignal?: AbortSignal): Promise<string> {\n try {\n const fileStream = await this.getChunkReadStream(pauseSignal, abortSignal);\n\n const hash = crypto.createHash(`md5`);\n\n await pipeline(fileStream, hash);\n\n return hash.digest(format);\n }\n catch (error) {\n if (abortSignal?.aborted)\n throw this.createAbortError(abortSignal);\n\n if (error instanceof FsError)\n throw error;\n\n throw new FsError(`ComputingFileMd5ChecksumException`, { cause: error as Error });\n }\n finally {\n if (!this.isReleased)\n await this.release();\n }\n }\n\n async getChunkReadStream(pauseSignal?: PauseSignal, abortSignal?: AbortSignal): Promise<ReadableStream> {\n try {\n if (!this.isReleased)\n await this.release();\n\n await this.throwIfFileDoesNotExist(abortSignal);\n\n this.#fileReadStream = fsSync.createReadStream(this.#fullFilePath, {\n start: this.chunkStartPosition,\n end: this.getChunkEndPosition(),\n });\n\n this.#fileReadPassThroughStream = new PassThrough();\n\n if (this.#encryptionData) {\n this.#fileReadCipherStream = createCipher(\n Buffer.from(this.#encryptionData.key),\n Buffer.from(this.#encryptionData.iv),\n this.chunkStartPosition,\n ) as Transform;\n }\n\n this.registerReadErrorListeners();\n\n if (this.#fileReadCipherStream)\n this.#fileReadStream.pipe(this.#fileReadCipherStream).pipe(this.#fileReadPassThroughStream);\n else\n this.#fileReadStream.pipe(this.#fileReadPassThroughStream);\n\n this.registerInterruptListeners(pauseSignal, abortSignal);\n\n return ReadableStream.from(this.#fileReadPassThroughStream);\n }\n catch (error) {\n if (!this.isReleased)\n await this.release();\n\n if (abortSignal?.aborted)\n throw this.createAbortError(abortSignal);\n\n throw new FsError(`CreatingFileReadStreamException`, { cause: error as Error });\n }\n }\n\n getChunkBlob(): Promise<Blob> {\n throw new Error(`Not implemented for NodeJS`);\n }\n\n private getChunkEndPosition() {\n if (this.chunkLengthInBytes === 0)\n return this.chunkStartPosition;\n\n return this.chunkStartPosition + this.chunkLengthInBytes - 1;\n }\n\n async getChunkWriteStream(): Promise<{ fileStream: Writable, decipherStream?: Writable }> {\n try {\n if (!this.isReleased)\n await this.release();\n\n this.#fileWriteHandle = await fs.open(this.#fullFilePath, fsConsts.O_WRONLY);\n\n this.#fileWriteStream = this.#fileWriteHandle.createWriteStream({\n start: this.chunkStartPosition,\n });\n\n if (!this.#encryptionData)\n return { fileStream: this.#fileWriteStream };\n\n this.#fileWriteDecipherStream = createDecipher(\n Buffer.from(this.#encryptionData.key),\n Buffer.from(this.#encryptionData.iv),\n this.chunkStartPosition,\n ) as Transform;\n\n return { fileStream: this.#fileWriteStream, decipherStream: this.#fileWriteDecipherStream };\n }\n catch (error) {\n if (!this.isReleased)\n await this.release();\n\n throw new FsError(`CreatingFileWriteStreamException`, { cause: error as Error });\n }\n }\n\n async release(): Promise<void> {\n this.cleanupInterruptListeners();\n this.cleanupReadErrorListeners();\n\n await Promise.allSettled([\n this.destroyStream(this.#fileReadStream),\n this.destroyStream(this.#fileReadCipherStream),\n this.destroyStream(this.#fileReadPassThroughStream),\n this.closeHandle(this.#fileWriteHandle),\n this.destroyStream(this.#fileWriteStream),\n this.destroyStream(this.#fileWriteDecipherStream),\n ]);\n\n this.#fileReadStream = null;\n this.#fileReadCipherStream = null;\n this.#fileReadPassThroughStream = null;\n this.#fileWriteHandle = null;\n this.#fileWriteStream = null;\n this.#fileWriteDecipherStream = null;\n }\n\n private registerInterruptListeners(pauseSignal?: PauseSignal, abortSignal?: AbortSignal) {\n this.cleanupInterruptListeners();\n\n const interruptReadStream = (error?: Error) => {\n this.#fileReadStream?.destroy();\n this.#fileReadCipherStream?.destroy();\n this.#fileReadPassThroughStream?.destroy(error);\n };\n\n if (pauseSignal) {\n this.#pauseSignal = pauseSignal;\n this.#pauseListener = () => interruptReadStream();\n this.#pauseSignal.addEventListener(`pause`, this.#pauseListener);\n }\n\n if (abortSignal) {\n this.#abortSignal = abortSignal;\n this.#abortListener = () => interruptReadStream(this.createAbortError(abortSignal));\n this.#abortSignal.addEventListener(`abort`, this.#abortListener);\n }\n }\n\n private cleanupInterruptListeners() {\n if (this.#pauseSignal && this.#pauseListener)\n this.#pauseSignal.removeEventListener(`pause`, this.#pauseListener);\n\n if (this.#abortSignal && this.#abortListener)\n this.#abortSignal.removeEventListener(`abort`, this.#abortListener);\n\n this.#pauseSignal = undefined;\n this.#pauseListener = undefined;\n this.#abortSignal = undefined;\n this.#abortListener = undefined;\n }\n\n private registerReadErrorListeners() {\n this.cleanupReadErrorListeners();\n\n const propagateReadError = (error: Error) => {\n if (this.#abortSignal?.aborted) {\n this.#fileReadPassThroughStream?.destroy(this.createAbortError(this.#abortSignal));\n return;\n }\n\n this.#fileReadPassThroughStream?.destroy(new FsError(`CreatingFileReadStreamException`, { cause: error }));\n };\n\n if (this.#fileReadStream) {\n this.#fileReadStreamErrorListener = propagateReadError;\n this.#fileReadStream.on(`error`, this.#fileReadStreamErrorListener);\n }\n\n if (this.#fileReadCipherStream) {\n this.#fileReadCipherStreamErrorListener = propagateReadError;\n this.#fileReadCipherStream.on(`error`, this.#fileReadCipherStreamErrorListener);\n }\n }\n\n private cleanupReadErrorListeners() {\n if (this.#fileReadStream && this.#fileReadStreamErrorListener)\n this.#fileReadStream.removeListener(`error`, this.#fileReadStreamErrorListener);\n\n if (this.#fileReadCipherStream && this.#fileReadCipherStreamErrorListener)\n this.#fileReadCipherStream.removeListener(`error`, this.#fileReadCipherStreamErrorListener);\n\n this.#fileReadStreamErrorListener = undefined;\n this.#fileReadCipherStreamErrorListener = undefined;\n }\n\n private async throwIfFileDoesNotExist(abortSignal?: AbortSignal) {\n let fileReadHandle: fs.FileHandle | null = null;\n\n try {\n fileReadHandle = await this.awaitAbortable(fs.open(this.#fullFilePath, fsConsts.O_RDONLY), abortSignal);\n }\n finally {\n await this.closeHandle(fileReadHandle);\n }\n }\n\n private async awaitAbortable<T>(promise: Promise<T>, abortSignal?: AbortSignal): Promise<T> {\n if (!abortSignal)\n return await promise;\n\n if (abortSignal.aborted)\n throw this.createAbortError(abortSignal);\n\n return await new Promise<T>((resolve, reject) => {\n let isSettled = false;\n\n const cleanup = () => {\n abortSignal.removeEventListener(`abort`, abortListener);\n };\n\n const resolveOnce = (value: T) => {\n if (isSettled)\n return;\n\n isSettled = true;\n cleanup();\n resolve(value);\n };\n\n const rejectOnce = (error: unknown) => {\n if (isSettled)\n return;\n\n isSettled = true;\n cleanup();\n reject(error);\n };\n\n const abortListener = () => {\n rejectOnce(this.createAbortError(abortSignal));\n };\n\n abortSignal.addEventListener(`abort`, abortListener);\n\n promise\n .then(resolveOnce)\n .catch(rejectOnce);\n });\n }\n\n private createAbortError(abortSignal: AbortSignal) {\n if (abortSignal.reason instanceof Error)\n return abortSignal.reason;\n\n return new Error(`Aborted`);\n }\n\n private closeHandle = async (handle: fs.FileHandle | null): Promise<void> => {\n if (!handle)\n return;\n\n try {\n await handle.close();\n }\n catch { /* ignore errors during handle closing */ }\n };\n\n private destroyStream = async (stream: ReadStream | Writable | Transform | PassThrough | null): Promise<void> => {\n if (!stream || stream.destroyed)\n return;\n\n stream.once(`error`, () => { /* absorb premature close errors */ });\n const finishPromise = finished(stream).catch(() => { /* safely ignore */ });\n stream.destroy();\n await finishPromise;\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeChunkStreamProviderFactory.js","sourceRoot":"","sources":["../../../../../src/utils/fileSystem/node/nodeChunkStreamProviderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,MAAM,8BAA8B,CAAC;AAMnE,MAAM,CAAC,OAAO,OAAO,8BAA8B;IAC/C,OAAO,CAAC,IAAY,EAAE,KAAa,EAAE,IAAY,EAAE,cAA6D;QAC5G,OAAO,IAAI,uBAAuB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IAC1E,CAAC;CACJ","sourcesContent":["import NodeChunkStreamProvider from \"./nodeChunkStreamProvider.js\";\
|
|
1
|
+
{"version":3,"file":"nodeChunkStreamProviderFactory.js","sourceRoot":"","sources":["../../../../../src/utils/fileSystem/node/nodeChunkStreamProviderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,MAAM,8BAA8B,CAAC;AAMnE,MAAM,CAAC,OAAO,OAAO,8BAA8B;IAC/C,OAAO,CAAC,IAAY,EAAE,KAAa,EAAE,IAAY,EAAE,cAA6D;QAC5G,OAAO,IAAI,uBAAuB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IAC1E,CAAC;CACJ","sourcesContent":["import NodeChunkStreamProvider from \"./nodeChunkStreamProvider.js\";\n\nimport type ChunkStreamProvider from \"../chunkStreamProvider.js\";\nimport type ChunkStreamProviderFactory from \"../chunkStreamProviderFactory.js\";\nimport type { ChunkStreamProviderEncryptionData } from \"../chunkStreamProvider.js\";\n\nexport default class NodeChunkStreamProviderFactory implements ChunkStreamProviderFactory<string> {\n provide(file: string, start: number, size: number, encryptionData: ChunkStreamProviderEncryptionData | undefined): ChunkStreamProvider {\n return new NodeChunkStreamProvider(file, start, size, encryptionData);\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeFileDetails.js","sourceRoot":"","sources":["../../../../../src/utils/fileSystem/node/nodeFileDetails.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,SAAS,IAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAE3C,OAAO,OAAO,MAAM,eAAe,CAAC;AACpC,OAAO,uBAAuB,MAAM,8BAA8B,CAAC;AAKnE,MAAM,CAAC,OAAO,OAAO,eAAe;IACvB,UAAU,CAAkB;IAC5B,YAAY,CAAS;IACrB,eAAe,CAAS;IACxB,QAAQ,CAAS;IACjB,6BAA6B,CAAS;IAE/C,YAAoB,UAA2B,EAAE,YAAoB,EAAE,6BAAqC,EAAE,QAAgB;QAC1H,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,CAAC,6BAA6B,GAAG,6BAA6B,CAAC;IACvE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAA2B,EAAE,YAAoB,EAAE,6BAAqC;QACxG,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAEtD,OAAO,IAAI,eAAe,CAAC,UAAU,EAAE,YAAY,EAAE,6BAA6B,EAAE,QAAQ,CAAC,CAAC;IAClG,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,YAAoB;QACjD,IAAI,UAAU,GAAyB,IAAI,CAAC;QAE5C,IAAI,CAAC;YACD,UAAU,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAE5D,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;YAE1C,OAAO,SAAS,CAAC,IAAI,CAAC;QAC1B,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,OAAO,CAAC,oBAAoB,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC,CAAC;QACrF,CAAC;gBACO,CAAC;YACL,UAAU,EAAE,KAAK,EAAE,CAAC;QACxB,CAAC;IACL,CAAC;IAED,yBAAyB,CAAC,aAAqB,EAAE,WAAmB;QAChE,OAAO,IAAI,uBAAuB,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IACjG,CAAC;CACJ","sourcesContent":["import path from 'path';\
|
|
1
|
+
{"version":3,"file":"nodeFileDetails.js","sourceRoot":"","sources":["../../../../../src/utils/fileSystem/node/nodeFileDetails.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,SAAS,IAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAE3C,OAAO,OAAO,MAAM,eAAe,CAAC;AACpC,OAAO,uBAAuB,MAAM,8BAA8B,CAAC;AAKnE,MAAM,CAAC,OAAO,OAAO,eAAe;IACvB,UAAU,CAAkB;IAC5B,YAAY,CAAS;IACrB,eAAe,CAAS;IACxB,QAAQ,CAAS;IACjB,6BAA6B,CAAS;IAE/C,YAAoB,UAA2B,EAAE,YAAoB,EAAE,6BAAqC,EAAE,QAAgB;QAC1H,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,CAAC,6BAA6B,GAAG,6BAA6B,CAAC;IACvE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAA2B,EAAE,YAAoB,EAAE,6BAAqC;QACxG,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAEtD,OAAO,IAAI,eAAe,CAAC,UAAU,EAAE,YAAY,EAAE,6BAA6B,EAAE,QAAQ,CAAC,CAAC;IAClG,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,YAAoB;QACjD,IAAI,UAAU,GAAyB,IAAI,CAAC;QAE5C,IAAI,CAAC;YACD,UAAU,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAE5D,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;YAE1C,OAAO,SAAS,CAAC,IAAI,CAAC;QAC1B,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,OAAO,CAAC,oBAAoB,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC,CAAC;QACrF,CAAC;gBACO,CAAC;YACL,UAAU,EAAE,KAAK,EAAE,CAAC;QACxB,CAAC;IACL,CAAC;IAED,yBAAyB,CAAC,aAAqB,EAAE,WAAmB;QAChE,OAAO,IAAI,uBAAuB,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IACjG,CAAC;CACJ","sourcesContent":["import path from 'path';\nimport fs from 'fs/promises';\nimport { constants as fsConsts } from 'fs';\n\nimport FsError from '../fsError.js';\nimport NodeChunkStreamProvider from './nodeChunkStreamProvider.js';\n\nimport type FileDetails from \"../fileDetails.js\";\nimport type ChunkStreamProvider from '../chunkStreamProvider.js';\n\nexport default class NodeFileDetails implements FileDetails {\n readonly externalId: string | number;\n readonly fileFullPath: string;\n readonly fileSizeInBytes: number;\n readonly fileName: string;\n readonly fileDestinationPathInTransfer: string;\n\n private constructor(externalId: string | number, fileFullPath: string, fileDestinationPathInTransfer: string, fileSize: number) {\n this.externalId = externalId;\n this.fileFullPath = fileFullPath;\n this.fileSizeInBytes = fileSize;\n this.fileName = path.basename(fileFullPath);\n this.fileDestinationPathInTransfer = fileDestinationPathInTransfer;\n }\n\n static async create(externalId: string | number, fileFullPath: string, fileDestinationPathInTransfer: string): Promise<NodeFileDetails> {\n const fileSize = await this.getFileSize(fileFullPath);\n\n return new NodeFileDetails(externalId, fileFullPath, fileDestinationPathInTransfer, fileSize);\n }\n\n private static async getFileSize(fullFilePath: string): Promise<number> {\n let fileHandle: fs.FileHandle | null = null;\n\n try {\n fileHandle = await fs.open(fullFilePath, fsConsts.O_RDONLY);\n\n const fileStats = await fileHandle.stat();\n\n return fileStats.size;\n }\n catch (error) {\n throw new FsError(`Can't read file: ${fullFilePath}`, { cause: error as Error });\n }\n finally {\n fileHandle?.close();\n }\n }\n\n createChunkStreamProvider(startPosition: number, sizeInBytes: number): ChunkStreamProvider { // TODO: Remove this after all customers moved to >= 4.7.2\n return new NodeChunkStreamProvider(this.fileFullPath, startPosition, sizeInBytes, undefined);\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeFileSystemService.js","sourceRoot":"","sources":["../../../../../src/utils/fileSystem/node/nodeFileSystemService.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs/promises';\r\nimport path from 'path';\r\nimport DownloadErrorCode from '../../../downloader/dtos/downloadErrorCode.js';\r\nimport type FileSystemService from \"../fileSystemService.js\";\r\nimport type ParsedPath from '../parsedPath.js';\r\n\r\nexport default class NodeFileSystemService implements FileSystemService {\r\n static async #readDirRecursive(folder: string, accumulator: Array<string>) {\r\n const paths = await fs.readdir(folder);\r\n for (const itemPath of paths) {\r\n const abs = path.join(folder, itemPath);\r\n // eslint-disable-next-line no-await-in-loop\r\n if ((await fs.stat(abs)).isDirectory())\r\n // eslint-disable-next-line no-await-in-loop\r\n await this.#readDirRecursive(abs, accumulator);\r\n else\r\n accumulator.push(abs);\r\n }\r\n }\r\n\r\n static #isFolderTheRoot(folder: string): boolean {\r\n const thisOne = path.normalize(folder);\r\n const oneUp = path.join(folder, `..`);\r\n return oneUp === thisOne || oneUp === path.sep;\r\n }\r\n\r\n async getAllFilePathsRecursive(folderPath: string): Promise<string[]> {\r\n const files = new Array<string>();\r\n await NodeFileSystemService.#readDirRecursive(folderPath, files);\r\n return files;\r\n }\r\n\r\n async writeFile(filePath: string, data: string, encoding: BufferEncoding = `utf8`, abort: AbortSignal | undefined = undefined): Promise<void> {\r\n await fs.writeFile(filePath, data, { encoding, flag: `w`, signal: abort });\r\n }\r\n\r\n async getAllFilePaths(folderPath: string): Promise<Array<string>> {\r\n return await fs.readdir(folderPath);\r\n }\r\n\r\n async readFileAsString(filePath: string, encoding: BufferEncoding = `utf8`, abort: AbortSignal | undefined = undefined): Promise<string> {\r\n return await fs.readFile(filePath, { encoding, flag: `r`, signal: abort });\r\n }\r\n\r\n async pathExists(thePath: string, checkReadWriteAccess?: boolean): Promise<boolean> {\r\n try {\r\n // eslint-disable-next-line no-bitwise\r\n const mode = checkReadWriteAccess ? (fs.constants.W_OK | fs.constants.R_OK) : fs.constants.F_OK;\r\n await fs.access(thePath, mode);\r\n return true;\r\n }\r\n catch {\r\n return false;\r\n }\r\n }\r\n\r\n async createFolder(folderPath: string): Promise<void> {\r\n if (NodeFileSystemService.#isFolderTheRoot(folderPath))\r\n // the requested directory is a root directory (e.g. F:\\ or /) - consider it as existing\r\n return;\r\n\r\n try {\r\n await fs.mkdir(folderPath, { recursive: true });\r\n }\r\n catch (err) {\r\n const dirErr = err as Error;\r\n\r\n if (dirErr && dirErr.code === `EEXIST`)\r\n // EEXIST error is OK - the requested directory already exists\r\n return;\r\n\r\n await this.mkdirRecursiveSafe(folderPath);\r\n }\r\n }\r\n\r\n private async mkdirRecursiveSafe(target: string): Promise<void> {\r\n const foldersChain: string[] = [];\r\n\r\n let currentFolder = target;\r\n\r\n while (true) {\r\n foldersChain.push(currentFolder);\r\n\r\n const parent = path.dirname(currentFolder);\r\n\r\n if (parent === currentFolder)\r\n break;\r\n\r\n currentFolder = parent;\r\n }\r\n\r\n foldersChain.reverse();\r\n\r\n for (const dir of foldersChain) {\r\n if (NodeFileSystemService.#isFolderTheRoot(dir))\r\n continue; // the requested directory is a root directory (e.g. F:\\ or /) - consider it as existing\r\n try {\r\n // eslint-disable-next-line no-await-in-loop\r\n await fs.mkdir(dir);\r\n }\r\n catch (err: any) {\r\n if (err?.code !== `EEXIST`) // EEXIST error is OK - the requested directory already exists\r\n throw err;\r\n }\r\n }\r\n }\r\n\r\n async createFile(filePath: string, overwriteExisting: boolean): Promise<boolean> {\r\n // Check if file folder exists and create if it doesn't\r\n const folder = path.dirname(filePath);\r\n await this.createFolder(folder);\r\n\r\n // Open the file for writing\r\n // overwriteExisting === true --> 'w' creates the file (if it doesn't exist) or truncates it (if it exists)\r\n // overwriteExisting === false --> 'wx' creates the file (if it doesn't exist) or fails (if it exists)\r\n const openMode = overwriteExisting ? `w` : `wx`;\r\n let handle: fs.FileHandle | null = null;\r\n try {\r\n try {\r\n handle = await fs.open(filePath, openMode);\r\n }\r\n catch (err) {\r\n const fileErr = err as Error;\r\n if (fileErr && fileErr.code === `EEXIST`)\r\n return false;\r\n\r\n throw err;\r\n }\r\n\r\n return true;\r\n }\r\n finally {\r\n if (handle !== null)\r\n await handle.close();\r\n }\r\n }\r\n\r\n async deleteFile(filePath: string): Promise<boolean> {\r\n try {\r\n await fs.rm(filePath);\r\n return true;\r\n }\r\n catch {\r\n return false;\r\n }\r\n }\r\n\r\n async folderIsEmpty(folderPath: string): Promise<boolean> {\r\n const contents = await fs.readdir(folderPath);\r\n return contents.length === 0;\r\n }\r\n\r\n async deleteFolder(folderPath: string): Promise<boolean> {\r\n return (await fs.rm(folderPath, { recursive: true, force: true })) === undefined;\r\n }\r\n\r\n async getFileSize(filePath: string): Promise<number> {\r\n const stat = await fs.stat(filePath);\r\n return stat.size;\r\n }\r\n\r\n async truncateFile(filePath: string, size: number): Promise<void> {\r\n await fs.truncate(filePath, size);\r\n }\r\n\r\n async renameFile(oldPath: string, newPath: string): Promise<void> {\r\n await fs.rename(oldPath, newPath);\r\n }\r\n\r\n async getAvailableDiskSpace(pathToCheck: string): Promise<bigint> {\r\n const stats = await fs.statfs(pathToCheck, { bigint: true });\r\n return stats.bavail * stats.bsize;\r\n }\r\n\r\n pathJoin(...paths: Array<string>): string {\r\n return path.join(...paths);\r\n }\r\n\r\n fileErrorToDownloadErrorCode(error: Error): DownloadErrorCode | undefined {\r\n if (NodeFileSystemService.#extractErrorCode(error) === `ENOSPC`)\r\n return DownloadErrorCode.DiskFull;\r\n\r\n return undefined;\r\n }\r\n\r\n static #extractErrorCode(error: unknown): string | undefined {\r\n let current = error as { code?: string, cause?: unknown } | undefined;\r\n\r\n for (let depth = 0; depth < 8 && current; depth++) {\r\n if (typeof current.code === `string`)\r\n return current.code;\r\n\r\n current = current.cause as { code?: string, cause?: unknown } | undefined;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n parseFilePath(filePath: string): ParsedPath {\r\n return path.parse(filePath);\r\n }\r\n\r\n formatFilePath(parsedPath: ParsedPath): string {\r\n return path.format(parsedPath);\r\n }\r\n\r\n replaceFilenameInPath(filePath: string, newFileName: string): string {\r\n const parsed = path.parse(filePath);\r\n return path.format({\r\n dir: parsed.dir,\r\n base: newFileName,\r\n });\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"nodeFileSystemService.js","sourceRoot":"","sources":["../../../../../src/utils/fileSystem/node/nodeFileSystemService.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs/promises';\nimport path from 'path';\nimport DownloadErrorCode from '../../../downloader/dtos/downloadErrorCode.js';\nimport type FileSystemService from \"../fileSystemService.js\";\nimport type ParsedPath from '../parsedPath.js';\n\nexport default class NodeFileSystemService implements FileSystemService {\n static async #readDirRecursive(folder: string, accumulator: Array<string>) {\n const paths = await fs.readdir(folder);\n for (const itemPath of paths) {\n const abs = path.join(folder, itemPath);\n // eslint-disable-next-line no-await-in-loop\n if ((await fs.stat(abs)).isDirectory())\n // eslint-disable-next-line no-await-in-loop\n await this.#readDirRecursive(abs, accumulator);\n else\n accumulator.push(abs);\n }\n }\n\n static #isFolderTheRoot(folder: string): boolean {\n const thisOne = path.normalize(folder);\n const oneUp = path.join(folder, `..`);\n return oneUp === thisOne || oneUp === path.sep;\n }\n\n async getAllFilePathsRecursive(folderPath: string): Promise<string[]> {\n const files = new Array<string>();\n await NodeFileSystemService.#readDirRecursive(folderPath, files);\n return files;\n }\n\n async writeFile(filePath: string, data: string, encoding: BufferEncoding = `utf8`, abort: AbortSignal | undefined = undefined): Promise<void> {\n await fs.writeFile(filePath, data, { encoding, flag: `w`, signal: abort });\n }\n\n async getAllFilePaths(folderPath: string): Promise<Array<string>> {\n return await fs.readdir(folderPath);\n }\n\n async readFileAsString(filePath: string, encoding: BufferEncoding = `utf8`, abort: AbortSignal | undefined = undefined): Promise<string> {\n return await fs.readFile(filePath, { encoding, flag: `r`, signal: abort });\n }\n\n async pathExists(thePath: string, checkReadWriteAccess?: boolean): Promise<boolean> {\n try {\n // eslint-disable-next-line no-bitwise\n const mode = checkReadWriteAccess ? (fs.constants.W_OK | fs.constants.R_OK) : fs.constants.F_OK;\n await fs.access(thePath, mode);\n return true;\n }\n catch {\n return false;\n }\n }\n\n async createFolder(folderPath: string): Promise<void> {\n if (NodeFileSystemService.#isFolderTheRoot(folderPath))\n // the requested directory is a root directory (e.g. F:\\ or /) - consider it as existing\n return;\n\n try {\n await fs.mkdir(folderPath, { recursive: true });\n }\n catch (err) {\n const dirErr = err as Error;\n\n if (dirErr && dirErr.code === `EEXIST`)\n // EEXIST error is OK - the requested directory already exists\n return;\n\n await this.mkdirRecursiveSafe(folderPath);\n }\n }\n\n private async mkdirRecursiveSafe(target: string): Promise<void> {\n const foldersChain: string[] = [];\n\n let currentFolder = target;\n\n while (true) {\n foldersChain.push(currentFolder);\n\n const parent = path.dirname(currentFolder);\n\n if (parent === currentFolder)\n break;\n\n currentFolder = parent;\n }\n\n foldersChain.reverse();\n\n for (const dir of foldersChain) {\n if (NodeFileSystemService.#isFolderTheRoot(dir))\n continue; // the requested directory is a root directory (e.g. F:\\ or /) - consider it as existing\n try {\n // eslint-disable-next-line no-await-in-loop\n await fs.mkdir(dir);\n }\n catch (err: any) {\n if (err?.code !== `EEXIST`) // EEXIST error is OK - the requested directory already exists\n throw err;\n }\n }\n }\n\n async createFile(filePath: string, overwriteExisting: boolean): Promise<boolean> {\n // Check if file folder exists and create if it doesn't\n const folder = path.dirname(filePath);\n await this.createFolder(folder);\n\n // Open the file for writing\n // overwriteExisting === true --> 'w' creates the file (if it doesn't exist) or truncates it (if it exists)\n // overwriteExisting === false --> 'wx' creates the file (if it doesn't exist) or fails (if it exists)\n const openMode = overwriteExisting ? `w` : `wx`;\n let handle: fs.FileHandle | null = null;\n try {\n try {\n handle = await fs.open(filePath, openMode);\n }\n catch (err) {\n const fileErr = err as Error;\n if (fileErr && fileErr.code === `EEXIST`)\n return false;\n\n throw err;\n }\n\n return true;\n }\n finally {\n if (handle !== null)\n await handle.close();\n }\n }\n\n async deleteFile(filePath: string): Promise<boolean> {\n try {\n await fs.rm(filePath);\n return true;\n }\n catch {\n return false;\n }\n }\n\n async folderIsEmpty(folderPath: string): Promise<boolean> {\n const contents = await fs.readdir(folderPath);\n return contents.length === 0;\n }\n\n async deleteFolder(folderPath: string): Promise<boolean> {\n return (await fs.rm(folderPath, { recursive: true, force: true })) === undefined;\n }\n\n async getFileSize(filePath: string): Promise<number> {\n const stat = await fs.stat(filePath);\n return stat.size;\n }\n\n async truncateFile(filePath: string, size: number): Promise<void> {\n await fs.truncate(filePath, size);\n }\n\n async renameFile(oldPath: string, newPath: string): Promise<void> {\n await fs.rename(oldPath, newPath);\n }\n\n async getAvailableDiskSpace(pathToCheck: string): Promise<bigint> {\n const stats = await fs.statfs(pathToCheck, { bigint: true });\n return stats.bavail * stats.bsize;\n }\n\n pathJoin(...paths: Array<string>): string {\n return path.join(...paths);\n }\n\n fileErrorToDownloadErrorCode(error: Error): DownloadErrorCode | undefined {\n if (NodeFileSystemService.#extractErrorCode(error) === `ENOSPC`)\n return DownloadErrorCode.DiskFull;\n\n return undefined;\n }\n\n static #extractErrorCode(error: unknown): string | undefined {\n let current = error as { code?: string, cause?: unknown } | undefined;\n\n for (let depth = 0; depth < 8 && current; depth++) {\n if (typeof current.code === `string`)\n return current.code;\n\n current = current.cause as { code?: string, cause?: unknown } | undefined;\n }\n\n return undefined;\n }\n\n parseFilePath(filePath: string): ParsedPath {\n return path.parse(filePath);\n }\n\n formatFilePath(parsedPath: ParsedPath): string {\n return path.format(parsedPath);\n }\n\n replaceFilenameInPath(filePath: string, newFileName: string): string {\n const parsed = path.parse(filePath);\n return path.format({\n dir: parsed.dir,\n base: newFileName,\n });\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parsedPath.js","sourceRoot":"","sources":["../../../../src/utils/fileSystem/parsedPath.ts"],"names":[],"mappings":"","sourcesContent":["interface ParsedPath {\
|
|
1
|
+
{"version":3,"file":"parsedPath.js","sourceRoot":"","sources":["../../../../src/utils/fileSystem/parsedPath.ts"],"names":[],"mappings":"","sourcesContent":["interface ParsedPath {\n root?: string | undefined,\n dir?: string | undefined,\n base?: string | undefined,\n ext?: string | undefined,\n name?: string | undefined,\n}\n\nexport default ParsedPath;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webChunkStreamEncrypter.js","sourceRoot":"","sources":["../../../../../../src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamEncrypter.ts"],"names":[],"mappings":"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","sourcesContent":["const AES_BLOCK_SIZE_IN_BYTES = 16n;\
|
|
1
|
+
{"version":3,"file":"webChunkStreamEncrypter.js","sourceRoot":"","sources":["../../../../../../src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamEncrypter.ts"],"names":[],"mappings":"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","sourcesContent":["const AES_BLOCK_SIZE_IN_BYTES = 16n;\nconst IV_MAX = 0xffffffffffffffffffffffffffffffffn;\nconst IV_OVERFLOW_MODULO = IV_MAX + 1n;\n\nexport default class WebChunkStreamEncrypter {\n chunkStartPosition: number;\n iv: Uint8Array;\n key: Uint8Array;\n chunkBlob: Blob;\n\n constructor(chunkStartPosition: number, iv: Uint8Array, key: Uint8Array, chunkBlob: Blob) {\n if (chunkStartPosition < 0)\n throw new Error(`Chunk start position can't be negative`);\n if (iv.length !== 16)\n throw new Error(`IV must be 16 bytes long`);\n if (key.length !== 32)\n throw new Error(`Key must be 32 bytes long`);\n if (!chunkBlob)\n throw new Error(`Chunk blob has to be defined`);\n\n this.chunkStartPosition = chunkStartPosition;\n this.iv = iv;\n this.key = key;\n this.chunkBlob = chunkBlob;\n }\n\n async encryptBlob() {\n const chunkBuffer = await this.chunkBlob.arrayBuffer();\n const chunkBytesArray = new Uint8Array(chunkBuffer);\n\n const fullAesBlocksIncrement = BigInt(this.chunkStartPosition) / AES_BLOCK_SIZE_IN_BYTES;\n const incrementedIv = this.incrementIvByFullBlocks(this.iv, fullAesBlocksIncrement);\n const keyBytes = this.ensureArrayBuffer(this.key);\n const counterBytes = this.ensureArrayBuffer(incrementedIv);\n\n // AES works on blocks but it might happen that our chunk starts within an encryption block\n // so we need to append some zeros at the beginning of the block and do the encryption\n // and then discard these leading extra bytes\n const aesBlockOffset = this.chunkStartPosition % Number(AES_BLOCK_SIZE_IN_BYTES);\n\n const chunkDataPrefixedWithZeros = new Uint8Array(aesBlockOffset + chunkBytesArray.length);\n chunkDataPrefixedWithZeros.set(chunkBytesArray, aesBlockOffset);\n\n const cryptoKey = await crypto.subtle.importKey(`raw`, keyBytes, { name: `AES-CTR` }, false, [`encrypt`]);\n\n const encryptedDataBuffer = await crypto.subtle.encrypt(\n { name: `AES-CTR`, counter: counterBytes, length: 128 },\n cryptoKey,\n chunkDataPrefixedWithZeros.buffer,\n );\n\n // Remove the leading extra bytes\n const encryptedChunk = encryptedDataBuffer.slice(aesBlockOffset);\n\n return new Blob([encryptedChunk]);\n }\n\n private ensureArrayBuffer(value: Uint8Array): Uint8Array<ArrayBuffer> {\n if (value.buffer instanceof ArrayBuffer)\n return value as Uint8Array<ArrayBuffer>;\n\n return new Uint8Array(value) as Uint8Array<ArrayBuffer>;\n }\n\n private incrementIvByFullBlocks(originalIv: Uint8Array, fullBlocksToIncrement: bigint): Uint8Array {\n let ivBigInt = this.ivToBigInt(originalIv);\n\n ivBigInt += fullBlocksToIncrement;\n\n if (ivBigInt > IV_MAX)\n ivBigInt %= IV_OVERFLOW_MODULO;\n\n return this.bigIntToIV(ivBigInt);\n }\n\n private ivToBigInt(iv: Uint8Array): bigint {\n let hex = ``;\n\n for (const byte of iv)\n hex += byte.toString(16).padStart(2, `0`);\n\n return BigInt(`0x${hex}`);\n }\n\n private bigIntToIV(num: bigint): Uint8Array {\n const ivLength = 16;\n\n const hex = num.toString(16).padStart(ivLength * 2, `0`);\n const iv = new Uint8Array(ivLength);\n\n for (let i = 0; i < ivLength; i++)\n iv[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);\n\n return iv;\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webChunkStreamProvider.js","sourceRoot":"","sources":["../../../../../../src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import SparkMD5 from \"spark-md5\";\
|
|
1
|
+
{"version":3,"file":"webChunkStreamProvider.js","sourceRoot":"","sources":["../../../../../../src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import SparkMD5 from \"spark-md5\";\n\nimport FsError from '../../fsError.js';\n\nimport type ChunkStreamProvider from \"../../chunkStreamProvider.js\";\nimport type { PauseSignal } from \"../../../../uploader/pauseController.js\";\nimport type { ChunkStreamProviderEncryptionData } from \"../../chunkStreamProvider.js\";\nimport WebChunkStreamEncrypter from \"./webChunkStreamEncrypter.js\";\n\nexport default class WebChunkStreamProvider implements ChunkStreamProvider {\n readonly chunkStartPosition: number;\n readonly chunkLengthInBytes: number;\n\n readonly #encryptionData?: ChunkStreamProviderEncryptionData;\n readonly #file: File;\n\n get isReleased(): boolean {\n return true;\n }\n\n constructor(file: File, chunkStartPosition: number, chunkLengthInBytes: number, encryptionData: ChunkStreamProviderEncryptionData | undefined) {\n this.throwIfEncryptionDataIsNotValid(encryptionData);\n\n this.#file = file;\n this.#encryptionData = encryptionData;\n this.chunkStartPosition = chunkStartPosition;\n\n if (chunkLengthInBytes < 0)\n throw new FsError(`chunkLengthInBytes can't be a negative value`);\n\n this.chunkLengthInBytes = chunkLengthInBytes;\n }\n\n private throwIfEncryptionDataIsNotValid(encryptionData: ChunkStreamProviderEncryptionData | undefined) {\n if (!encryptionData)\n return;\n\n if (encryptionData.iv.length !== 16)\n throw new FsError(`Encryption IV must be 16 bytes long`);\n if (encryptionData.key.length !== 32)\n throw new FsError(`Encryption key must be 32 bytes long`);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async getMd5Checksum(format: `hex` | `base64`, _pauseSignal?: PauseSignal, _abortSignal?: AbortSignal): Promise<string> {\n try {\n const blob = await this.getChunkBlob();\n const buffer = await blob.arrayBuffer();\n\n const hashHex = SparkMD5.ArrayBuffer.hash(buffer);\n\n if (format === `hex`)\n return hashHex;\n\n return btoa(hashHex.match(/\\w{2}/g)!.map(byte => String.fromCharCode(parseInt(byte, 16))).join(``));\n }\n catch (error) {\n throw new FsError(`ComputingFileMd5ChecksumException`, { cause: error as Error });\n }\n finally {\n if (!this.isReleased)\n await this.release();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async getChunkReadStream(_pauseSignal?: PauseSignal, _abortSignal?: AbortSignal): Promise<ReadableStream> {\n throw new Error(`This is not implemented for Web`);\n }\n\n async getChunkBlob(): Promise<Blob> {\n try {\n if (!this.isReleased)\n await this.release();\n\n const chunkBlob = this.#file.slice(this.chunkStartPosition, this.getChunkEndPosition() + 1);\n\n if (!this.#encryptionData || chunkBlob.size === 0)\n return chunkBlob;\n\n return await new WebChunkStreamEncrypter(this.chunkStartPosition, this.#encryptionData.iv, this.#encryptionData.key, chunkBlob).encryptBlob();\n }\n catch (error) {\n if (!this.isReleased)\n await this.release();\n\n throw new FsError(`CreatingFileChunkBlobException`, { cause: error as Error });\n }\n }\n\n private getChunkEndPosition() {\n if (this.chunkLengthInBytes === 0)\n return this.chunkStartPosition;\n\n return this.chunkStartPosition + this.chunkLengthInBytes - 1;\n }\n\n async getChunkWriteStream(): Promise<any> {\n throw new Error(`This is not implemented for Web`);\n }\n\n async release(): Promise<void> {\n try {\n if (this.isReleased)\n // eslint-disable-next-line no-useless-return\n return;\n }\n catch {\n // ignore\n }\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webChunkStreamProviderFactory.js","sourceRoot":"","sources":["../../../../../src/utils/fileSystem/web/webChunkStreamProviderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,MAAM,iDAAiD,CAAC;AAMrF,MAAM,CAAC,OAAO,OAAO,6BAA6B;IAC9C,OAAO,CAAC,IAAU,EAAE,KAAa,EAAE,IAAY,EAAE,cAA6D;QAC1G,OAAO,IAAI,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACzE,CAAC;CACJ","sourcesContent":["import WebChunkStreamProvider from \"./chunkStreamProvider/webChunkStreamProvider.js\";\
|
|
1
|
+
{"version":3,"file":"webChunkStreamProviderFactory.js","sourceRoot":"","sources":["../../../../../src/utils/fileSystem/web/webChunkStreamProviderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,MAAM,iDAAiD,CAAC;AAMrF,MAAM,CAAC,OAAO,OAAO,6BAA6B;IAC9C,OAAO,CAAC,IAAU,EAAE,KAAa,EAAE,IAAY,EAAE,cAA6D;QAC1G,OAAO,IAAI,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACzE,CAAC;CACJ","sourcesContent":["import WebChunkStreamProvider from \"./chunkStreamProvider/webChunkStreamProvider.js\";\n\nimport type ChunkStreamProvider from \"../chunkStreamProvider.js\";\nimport type ChunkStreamProviderFactory from \"../chunkStreamProviderFactory.js\";\nimport type { ChunkStreamProviderEncryptionData } from \"../chunkStreamProvider.js\";\n\nexport default class WebChunkStreamProviderFactory implements ChunkStreamProviderFactory<File> {\n provide(file: File, start: number, size: number, encryptionData: ChunkStreamProviderEncryptionData | undefined): ChunkStreamProvider {\n return new WebChunkStreamProvider(file, start, size, encryptionData);\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webFileDetails.js","sourceRoot":"","sources":["../../../../../src/utils/fileSystem/web/webFileDetails.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,cAAc;IACtB,UAAU,CAAkB;IAC5B,IAAI,CAAO;IACX,eAAe,CAAS;IACxB,QAAQ,CAAS;IACjB,6BAA6B,CAAS;IAE/C,YAAY,UAA2B,EAAE,IAAU,EAAE,6BAAqC;QACtF,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,6BAA6B,GAAG,6BAA6B,CAAC;IACvE,CAAC;CACJ","sourcesContent":["import type FileDetails from \"../fileDetails.js\";\
|
|
1
|
+
{"version":3,"file":"webFileDetails.js","sourceRoot":"","sources":["../../../../../src/utils/fileSystem/web/webFileDetails.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,cAAc;IACtB,UAAU,CAAkB;IAC5B,IAAI,CAAO;IACX,eAAe,CAAS;IACxB,QAAQ,CAAS;IACjB,6BAA6B,CAAS;IAE/C,YAAY,UAA2B,EAAE,IAAU,EAAE,6BAAqC;QACtF,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,6BAA6B,GAAG,6BAA6B,CAAC;IACvE,CAAC;CACJ","sourcesContent":["import type FileDetails from \"../fileDetails.js\";\n\nexport default class WebFileDetails implements FileDetails {\n readonly externalId: string | number;\n readonly file: File;\n readonly fileSizeInBytes: number;\n readonly fileName: string;\n readonly fileDestinationPathInTransfer: string;\n\n constructor(externalId: string | number, file: File, fileDestinationPathInTransfer: string) {\n this.externalId = externalId;\n this.file = file;\n this.fileSizeInBytes = file.size;\n this.fileName = file.name;\n this.fileDestinationPathInTransfer = fileDestinationPathInTransfer;\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonParsing.js","sourceRoot":"","sources":["../../../src/utils/jsonParsing.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAU;IACpD,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACvB,OAAO;YACH,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;SACpB,CAAC;IACN,CAAC;IACD,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACvB,OAAO;YACH,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;SACpB,CAAC;IACN,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,KAAU;IACnD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QACnC,OAAO,KAAK,CAAC;IAEjB,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK;QACxB,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEhC,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK;QACxB,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEhC,OAAO,KAAK,CAAC;AACjB,CAAC","sourcesContent":["export function jsonMapReplacer(_key: string, value: any) {\
|
|
1
|
+
{"version":3,"file":"jsonParsing.js","sourceRoot":"","sources":["../../../src/utils/jsonParsing.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAU;IACpD,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACvB,OAAO;YACH,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;SACpB,CAAC;IACN,CAAC;IACD,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACvB,OAAO;YACH,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;SACpB,CAAC;IACN,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,KAAU;IACnD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QACnC,OAAO,KAAK,CAAC;IAEjB,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK;QACxB,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEhC,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK;QACxB,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEhC,OAAO,KAAK,CAAC;AACjB,CAAC","sourcesContent":["export function jsonMapReplacer(_key: string, value: any) {\n if (value instanceof Map) {\n return {\n dataType: `Map`,\n value: [...value],\n };\n }\n if (value instanceof Set) {\n return {\n dataType: `Set`,\n value: [...value],\n };\n }\n\n return value;\n}\n\nexport function jsonMapReviver(_key: string, value: any) {\n if (!value || typeof value !== `object`)\n return value;\n\n if (value.dataType === `Map`)\n return new Map(value.value);\n\n if (value.dataType === `Set`)\n return new Set(value.value);\n\n return value;\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logEventPropertyNames.js","sourceRoot":"","sources":["../../../../src/utils/logging/logEventPropertyNames.ts"],"names":[],"mappings":"AAAA,eAAe;IACX,sBAAsB,EAAE,YAAY;IACpC,sBAAsB,EAAE,YAAY;IACpC,sBAAsB,EAAE,YAAY;CACvC,CAAC","sourcesContent":["export default {\
|
|
1
|
+
{"version":3,"file":"logEventPropertyNames.js","sourceRoot":"","sources":["../../../../src/utils/logging/logEventPropertyNames.ts"],"names":[],"mappings":"AAAA,eAAe;IACX,sBAAsB,EAAE,YAAY;IACpC,sBAAsB,EAAE,YAAY;IACpC,sBAAsB,EAAE,YAAY;CACvC,CAAC","sourcesContent":["export default {\n TrackingIdPropertyName: `TrackingId`,\n TransferIdPropertyName: `TransferId`,\n DownloadIdPropertyName: `DownloadId`,\n};"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeAbortAndPauseSignals.js","sourceRoot":"","sources":["../../../src/utils/mergeAbortAndPauseSignals.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAAC,WAAwB,EAAE,WAAwB;IAChG,IAAI,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,OAAO;QACzC,OAAO,WAAW,CAAC,KAAK,EAAE,CAAC;IAE/B,MAAM,gBAAgB,GAAG,IAAI,eAAe,EAAE,CAAC;IAE/C,MAAM,qBAAqB,GAAG,GAAG,EAAE;QAC/B,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC,CAAC;IAEF,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IAC7D,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IAE7D,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;QACnD,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;QAChE,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC,MAAM,CAAC;AACnC,CAAC","sourcesContent":["import type { PauseSignal } from \"../uploader/pauseController.js\";\
|
|
1
|
+
{"version":3,"file":"mergeAbortAndPauseSignals.js","sourceRoot":"","sources":["../../../src/utils/mergeAbortAndPauseSignals.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAAC,WAAwB,EAAE,WAAwB;IAChG,IAAI,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,OAAO;QACzC,OAAO,WAAW,CAAC,KAAK,EAAE,CAAC;IAE/B,MAAM,gBAAgB,GAAG,IAAI,eAAe,EAAE,CAAC;IAE/C,MAAM,qBAAqB,GAAG,GAAG,EAAE;QAC/B,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC,CAAC;IAEF,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IAC7D,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IAE7D,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;QACnD,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;QAChE,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC,MAAM,CAAC;AACnC,CAAC","sourcesContent":["import type { PauseSignal } from \"../uploader/pauseController.js\";\n\nexport default function mergeAbortAndPauseSignals(pauseSignal: PauseSignal, abortSignal: AbortSignal): AbortSignal {\n if (pauseSignal.paused || abortSignal.aborted)\n return AbortSignal.abort();\n\n const mergedController = new AbortController();\n\n const abortMergedController = () => {\n mergedController.abort();\n };\n\n pauseSignal.addEventListener(`pause`, abortMergedController);\n abortSignal.addEventListener(`abort`, abortMergedController);\n\n mergedController.signal.addEventListener(`abort`, () => {\n pauseSignal.removeEventListener(`pause`, abortMergedController);\n abortSignal.removeEventListener(`abort`, abortMergedController);\n });\n\n return mergedController.signal;\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"throttlingOptions.js","sourceRoot":"","sources":["../../../../src/utils/networking/throttlingOptions.ts"],"names":[],"mappings":"","sourcesContent":["interface ThrottlingOptions {\
|
|
1
|
+
{"version":3,"file":"throttlingOptions.js","sourceRoot":"","sources":["../../../../src/utils/networking/throttlingOptions.ts"],"names":[],"mappings":"","sourcesContent":["interface ThrottlingOptions {\n maxBytesPerSecond: number\n}\n\nexport default ThrottlingOptions;"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promiseAll.js","sourceRoot":"","sources":["../../../src/utils/promiseAll.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AACrC,MAAM,uBAAuB,GAAG,kBAAkB,GAAG,CAAC,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAI,QAAsB;IAC7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,uBAAuB,EAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,uBAAuB,CAAC,CAAC;QAChE,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAI,QAAsB;IACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,uBAAuB,EAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,uBAAuB,CAAC,CAAC;QAChE,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAI,QAAsB;IAChE,MAAM,OAAO,GAAQ,EAAE,CAAC;IAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,uBAAuB,EAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,uBAAuB,CAAC,CAAC;QAChE,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE;YAC3C,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC","sourcesContent":["/* eslint-disable no-await-in-loop */\
|
|
1
|
+
{"version":3,"file":"promiseAll.js","sourceRoot":"","sources":["../../../src/utils/promiseAll.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AACrC,MAAM,uBAAuB,GAAG,kBAAkB,GAAG,CAAC,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAI,QAAsB;IAC7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,uBAAuB,EAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,uBAAuB,CAAC,CAAC;QAChE,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAI,QAAsB;IACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,uBAAuB,EAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,uBAAuB,CAAC,CAAC;QAChE,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAI,QAAsB;IAChE,MAAM,OAAO,GAAQ,EAAE,CAAC;IAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,uBAAuB,EAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,uBAAuB,CAAC,CAAC;QAChE,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE;YAC3C,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC","sourcesContent":["/* eslint-disable no-await-in-loop */\nconst MAX_PROMISES_COUNT = 2_000_000;\nconst SAFE_MAX_PROMISES_COUNT = MAX_PROMISES_COUNT / 3;\n\nexport async function promiseAllSettled<T>(promises: Promise<T>[]): Promise<void> {\n for (let i = 0; i < promises.length; i += SAFE_MAX_PROMISES_COUNT) {\n const subArray = promises.slice(i, i + SAFE_MAX_PROMISES_COUNT);\n await Promise.allSettled(subArray);\n }\n}\n\nexport async function promiseAll<T>(promises: Promise<T>[]): Promise<void> {\n for (let i = 0; i < promises.length; i += SAFE_MAX_PROMISES_COUNT) {\n const subArray = promises.slice(i, i + SAFE_MAX_PROMISES_COUNT);\n await Promise.all(subArray);\n }\n}\n\nexport async function promiseAllDeprecated<T>(promises: Promise<T>[]): Promise<T[]> {\n const results: T[] = [];\n\n for (let i = 0; i < promises.length; i += SAFE_MAX_PROMISES_COUNT) {\n const subArray = promises.slice(i, i + SAFE_MAX_PROMISES_COUNT);\n const subArrayResults = await Promise.all(subArray);\n\n for (let j = 0; j < subArrayResults.length; j++)\n results.push(subArrayResults[j]);\n }\n\n return results;\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transferStatus.js","sourceRoot":"","sources":["../../../../src/utils/types/transferStatus.ts"],"names":[],"mappings":"AAAA,IAAK,cAWJ;AAXD,WAAK,cAAc;IACf,iEAAW,CAAA;IACX,yDAAO,CAAA;IACP,yDAAO,CAAA;IACP,uDAAM,CAAA;IACN,2DAAQ,CAAA;IACR,yDAAO,CAAA;IACP,6DAAS,CAAA;IACT,2DAAQ,CAAA;IACR,uDAAM,CAAA;IACN,6DAAS,CAAA;AACb,CAAC,EAXI,cAAc,KAAd,cAAc,QAWlB;AAED,eAAe,cAAc,CAAC","sourcesContent":["enum TransferStatus {\
|
|
1
|
+
{"version":3,"file":"transferStatus.js","sourceRoot":"","sources":["../../../../src/utils/types/transferStatus.ts"],"names":[],"mappings":"AAAA,IAAK,cAWJ;AAXD,WAAK,cAAc;IACf,iEAAW,CAAA;IACX,yDAAO,CAAA;IACP,yDAAO,CAAA;IACP,uDAAM,CAAA;IACN,2DAAQ,CAAA;IACR,yDAAO,CAAA;IACP,6DAAS,CAAA;IACT,2DAAQ,CAAA;IACR,uDAAM,CAAA;IACN,6DAAS,CAAA;AACb,CAAC,EAXI,cAAc,KAAd,cAAc,QAWlB;AAED,eAAe,cAAc,CAAC","sourcesContent":["enum TransferStatus {\n Initialized,\n Running,\n Pausing,\n Paused,\n Aborting,\n Aborted,\n Canceling,\n Canceled,\n Failed,\n Completed,\n}\n\nexport default TransferStatus;"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uint8ArrayUtils.js","sourceRoot":"","sources":["../../../src/utils/uint8ArrayUtils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IAClD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IAE3C,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC7C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SACnB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SACzC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW;IACvC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAE1C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC","sourcesContent":["export function concatUint8Arrays(arrays: Uint8Array[]): Uint8Array {\
|
|
1
|
+
{"version":3,"file":"uint8ArrayUtils.js","sourceRoot":"","sources":["../../../src/utils/uint8ArrayUtils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IAClD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IAE3C,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC7C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SACnB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SACzC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW;IACvC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAE1C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC","sourcesContent":["export function concatUint8Arrays(arrays: Uint8Array[]): Uint8Array {\n const totalLength = arrays.reduce((acc, curr) => acc + curr.length, 0);\n const result = new Uint8Array(totalLength);\n\n let offset = 0;\n\n for (const arr of arrays) {\n result.set(arr, offset);\n offset += arr.length;\n }\n\n return result;\n}\n\nexport function uint8ArrayToHex(array: Uint8Array): string {\n return Array.from(array)\n .map(b => b.toString(16).padStart(2, `0`))\n .join(``);\n}\n\nexport function hexToUint8Array(hex: string): Uint8Array {\n if (hex.length % 2 !== 0)\n throw new Error(`Invalid hex string`);\n\n const result = new Uint8Array(hex.length / 2);\n\n for (let i = 0; i < hex.length; i += 2) {\n const byteHex = hex.slice(i, i + 2);\n result[i / 2] = parseInt(byteHex, 16);\n }\n\n return result;\n}"]}
|
package/package.json
CHANGED
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "filemail-sdk",
|
|
3
|
-
"version": "9.4.
|
|
4
|
-
"description": "Library for transferring files to and from Filemail.com",
|
|
5
|
-
"author": "Filemail AS",
|
|
6
|
-
"license": "BSD-3-Clause",
|
|
7
|
-
"main": "dist/src/index.node.js",
|
|
8
|
-
"module": "dist/src/index.node.js",
|
|
9
|
-
"browser": "dist/src/index.web.js",
|
|
10
|
-
"exports": {
|
|
11
|
-
".": {
|
|
12
|
-
"browser": "./dist/src/index.web.js",
|
|
13
|
-
"import": "./dist/src/index.node.js",
|
|
14
|
-
"require": "./dist/src/index.node.js"
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
"type": "module",
|
|
18
|
-
"files": [
|
|
19
|
-
"dist/src"
|
|
20
|
-
],
|
|
21
|
-
"publishConfig": {
|
|
22
|
-
"registry": "https://registry.npmjs.org/"
|
|
23
|
-
},
|
|
24
|
-
"scripts": {
|
|
25
|
-
"test": "yarn build && ava",
|
|
26
|
-
"test:ci": "ava --tap",
|
|
27
|
-
"eslint": "eslint src test",
|
|
28
|
-
"eslint:ci": "yarn eslint",
|
|
29
|
-
"watch": "tsc -w",
|
|
30
|
-
"clean": "del-cli --force dist",
|
|
31
|
-
"build": "yarn clean && eslint && tsc",
|
|
32
|
-
"build:ci": "yarn build"
|
|
33
|
-
},
|
|
34
|
-
"devDependencies": {
|
|
35
|
-
"@eslint/eslintrc": "^3.2.0",
|
|
36
|
-
"@eslint/js": "^9.17.0",
|
|
37
|
-
"@tsconfig/node20": "^20.1.4",
|
|
38
|
-
"@types/lodash.throttle": "^4.1.7",
|
|
39
|
-
"@types/mock-fs": "^4.13.1",
|
|
40
|
-
"@types/sinon": "^21.0.0",
|
|
41
|
-
"@types/spark-md5": "^3.0.5",
|
|
42
|
-
"@types/uuid": "^11.0.0",
|
|
43
|
-
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
44
|
-
"@typescript-eslint/parser": "^8.0.0",
|
|
45
|
-
"ava": "^6.0.0",
|
|
46
|
-
"console-gui-tools": "^3.0.2",
|
|
47
|
-
"del-cli": "^7.0.0",
|
|
48
|
-
"eslint": "^9.0.0",
|
|
49
|
-
"eslint-config-airbnb-base": "^15.0.0",
|
|
50
|
-
"eslint-plugin-import": "^2.26.0",
|
|
51
|
-
"fetch-mock": "^12.5.4",
|
|
52
|
-
"globals": "^16.5.0",
|
|
53
|
-
"mock-fs": "^5.5.0",
|
|
54
|
-
"nock": "^14.0.10",
|
|
55
|
-
"sinon": "^21.0.1",
|
|
56
|
-
"typescript": "^5.0.4"
|
|
57
|
-
},
|
|
58
|
-
"dependencies": {
|
|
59
|
-
"abortable-sleep": "^1.0.0",
|
|
60
|
-
"aes-ctr-concurrent": "^1.0.0",
|
|
61
|
-
"async-mutex": "^0.5.0",
|
|
62
|
-
"axios": "^1.8.4",
|
|
63
|
-
"axios-retry": "^4.5.0",
|
|
64
|
-
"got": "^14.0.0",
|
|
65
|
-
"lodash.throttle": "^4.1.1",
|
|
66
|
-
"promisified-udp-client": "^1.0.0",
|
|
67
|
-
"spark-md5": "^3.0.2",
|
|
68
|
-
"tap-tc": "^4.4.4",
|
|
69
|
-
"uuid": "^13.0.0"
|
|
70
|
-
},
|
|
71
|
-
"ava": {
|
|
72
|
-
"files": [
|
|
73
|
-
"dist/test/**/*.spec.js"
|
|
74
|
-
]
|
|
75
|
-
},
|
|
76
|
-
"engines": {
|
|
77
|
-
"node": "<=20.9.0"
|
|
78
|
-
}
|
|
79
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "filemail-sdk",
|
|
3
|
+
"version": "9.4.9",
|
|
4
|
+
"description": "Library for transferring files to and from Filemail.com",
|
|
5
|
+
"author": "Filemail AS",
|
|
6
|
+
"license": "BSD-3-Clause",
|
|
7
|
+
"main": "dist/src/index.node.js",
|
|
8
|
+
"module": "dist/src/index.node.js",
|
|
9
|
+
"browser": "dist/src/index.web.js",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"browser": "./dist/src/index.web.js",
|
|
13
|
+
"import": "./dist/src/index.node.js",
|
|
14
|
+
"require": "./dist/src/index.node.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"type": "module",
|
|
18
|
+
"files": [
|
|
19
|
+
"dist/src"
|
|
20
|
+
],
|
|
21
|
+
"publishConfig": {
|
|
22
|
+
"registry": "https://registry.npmjs.org/"
|
|
23
|
+
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"test": "yarn build && ava",
|
|
26
|
+
"test:ci": "ava --tap",
|
|
27
|
+
"eslint": "eslint src test",
|
|
28
|
+
"eslint:ci": "yarn eslint",
|
|
29
|
+
"watch": "tsc -w",
|
|
30
|
+
"clean": "del-cli --force dist",
|
|
31
|
+
"build": "yarn clean && eslint && tsc",
|
|
32
|
+
"build:ci": "yarn build"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@eslint/eslintrc": "^3.2.0",
|
|
36
|
+
"@eslint/js": "^9.17.0",
|
|
37
|
+
"@tsconfig/node20": "^20.1.4",
|
|
38
|
+
"@types/lodash.throttle": "^4.1.7",
|
|
39
|
+
"@types/mock-fs": "^4.13.1",
|
|
40
|
+
"@types/sinon": "^21.0.0",
|
|
41
|
+
"@types/spark-md5": "^3.0.5",
|
|
42
|
+
"@types/uuid": "^11.0.0",
|
|
43
|
+
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
44
|
+
"@typescript-eslint/parser": "^8.0.0",
|
|
45
|
+
"ava": "^6.0.0",
|
|
46
|
+
"console-gui-tools": "^3.0.2",
|
|
47
|
+
"del-cli": "^7.0.0",
|
|
48
|
+
"eslint": "^9.0.0",
|
|
49
|
+
"eslint-config-airbnb-base": "^15.0.0",
|
|
50
|
+
"eslint-plugin-import": "^2.26.0",
|
|
51
|
+
"fetch-mock": "^12.5.4",
|
|
52
|
+
"globals": "^16.5.0",
|
|
53
|
+
"mock-fs": "^5.5.0",
|
|
54
|
+
"nock": "^14.0.10",
|
|
55
|
+
"sinon": "^21.0.1",
|
|
56
|
+
"typescript": "^5.0.4"
|
|
57
|
+
},
|
|
58
|
+
"dependencies": {
|
|
59
|
+
"abortable-sleep": "^1.0.0",
|
|
60
|
+
"aes-ctr-concurrent": "^1.0.0",
|
|
61
|
+
"async-mutex": "^0.5.0",
|
|
62
|
+
"axios": "^1.8.4",
|
|
63
|
+
"axios-retry": "^4.5.0",
|
|
64
|
+
"got": "^14.0.0",
|
|
65
|
+
"lodash.throttle": "^4.1.1",
|
|
66
|
+
"promisified-udp-client": "^1.0.0",
|
|
67
|
+
"spark-md5": "^3.0.2",
|
|
68
|
+
"tap-tc": "^4.4.4",
|
|
69
|
+
"uuid": "^13.0.0"
|
|
70
|
+
},
|
|
71
|
+
"ava": {
|
|
72
|
+
"files": [
|
|
73
|
+
"dist/test/**/*.spec.js"
|
|
74
|
+
]
|
|
75
|
+
},
|
|
76
|
+
"engines": {
|
|
77
|
+
"node": "<=20.9.0"
|
|
78
|
+
}
|
|
79
|
+
}
|