filemail-sdk 9.4.7 → 9.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/LICENSE +10 -10
  2. package/dist/src/autoDownloader/autoDownloader.js.map +1 -1
  3. package/dist/src/autoDownloader/autoDownloaderDestroyer.js.map +1 -1
  4. package/dist/src/autoDownloader/autoDownloaderError.js.map +1 -1
  5. package/dist/src/autoDownloader/autoDownloaderEvent.js.map +1 -1
  6. package/dist/src/autoDownloader/autoDownloaderOptions.js.map +1 -1
  7. package/dist/src/autoDownloader/autoDownloaderStateSerializer.js.map +1 -1
  8. package/dist/src/autoDownloader/eventArgs/autoDownloadEventArgs.js.map +1 -1
  9. package/dist/src/autoDownloader/eventArgs/autoDownloadFailedEventArgs.js.map +1 -1
  10. package/dist/src/autoDownloader/eventArgs/autoDownloadProgressedEventArgs.js.map +1 -1
  11. package/dist/src/autoDownloader/eventArgs/autoDownloadStartedEventArgs.js.map +1 -1
  12. package/dist/src/autoDownloader/eventArgs/autoDownloadStartingFailedEventArgs.js.map +1 -1
  13. package/dist/src/autoDownloader/eventArgs/autoDownloadUnhealthyEventArgs.js.map +1 -1
  14. package/dist/src/autoDownloader/eventArgs/checkingForNewTransfersStartedEventArgs.js.map +1 -1
  15. package/dist/src/autoDownloader/eventArgs/newTransfersCheckCompletedEventArgs.js.map +1 -1
  16. package/dist/src/autoDownloader/factory/nodeAutoDownloaderFactory.js.map +1 -1
  17. package/dist/src/autoDownloader/factory/nodeAutoDownloaderFactoryOptions.js.map +1 -1
  18. package/dist/src/autoDownloader/newInboxTransfersRetriever/newInboxTransfer.js.map +1 -1
  19. package/dist/src/autoDownloader/newInboxTransfersRetriever/newInboxTransfersRetriever.js.map +1 -1
  20. package/dist/src/autoDownloader/node/nodeAutoDownloaderStateSerializer.js.map +1 -1
  21. package/dist/src/autoDownloader/node/nodeTransferDownloaderFactory.js.map +1 -1
  22. package/dist/src/autoDownloader/state/autoDownloaderRecoverableState.js.map +1 -1
  23. package/dist/src/autoDownloader/state/autoDownloaderState.js.map +1 -1
  24. package/dist/src/autoDownloader/state/autoDownloaderStateRecoverableTransfer.js.map +1 -1
  25. package/dist/src/autoDownloader/state/autoDownloaderStateRunningTransfer.js.map +1 -1
  26. package/dist/src/autoDownloader/state/autoDownloaderStateSnapshot.js.map +1 -1
  27. package/dist/src/autoDownloader/transferDownloaderFactory.js.map +1 -1
  28. package/dist/src/autoDownloader/transferHandler/autoDownloaderNewTransferHandler.js.map +1 -1
  29. package/dist/src/autoDownloader/transferHandler/autoDownloaderRecoverableTransferHandler.js.map +1 -1
  30. package/dist/src/autoDownloader/transferHandler/autoDownloaderTransferHandlerBase.js.map +1 -1
  31. package/dist/src/client/downloader/downloaderCore.js.map +1 -1
  32. package/dist/src/client/downloader/node/nodeTransferDownloader.js.map +1 -1
  33. package/dist/src/client/downloader/transferDownloader.js.map +1 -1
  34. package/dist/src/client/environmentVariables.js.map +1 -1
  35. package/dist/src/client/healthMonitor/events/eventArgs/healthMonitorHealthyEventArgs.js.map +1 -1
  36. package/dist/src/client/healthMonitor/events/eventArgs/healthMonitorUnhealthyEventArgs.js.map +1 -1
  37. package/dist/src/client/healthMonitor/events/transferHealthMonitorEvent.js.map +1 -1
  38. package/dist/src/client/healthMonitor/onlineChecker/nodeOnlineChecker.js.map +1 -1
  39. package/dist/src/client/healthMonitor/onlineChecker/onlineChecker.js.map +1 -1
  40. package/dist/src/client/healthMonitor/onlineChecker/webOnlineChecker.js.map +1 -1
  41. package/dist/src/client/healthMonitor/transferDownloaderHealthMonitor.js.map +1 -1
  42. package/dist/src/client/healthMonitor/transferHealthMonitorBase.js.map +1 -1
  43. package/dist/src/client/healthMonitor/transferUploaderHealthMonitor.js.map +1 -1
  44. package/dist/src/client/loggers/dummyLogger.js.map +1 -1
  45. package/dist/src/client/loggers/logger.js.map +1 -1
  46. package/dist/src/client/loggers/utils/logHealthyStatus.js.map +1 -1
  47. package/dist/src/client/node/nodeFileDetailsProvider.js.map +1 -1
  48. package/dist/src/client/uploader/node/nodeTransferUploader.js.map +1 -1
  49. package/dist/src/client/uploader/transferUploader.js.map +1 -1
  50. package/dist/src/client/uploader/transferUploaderBase.js.map +1 -1
  51. package/dist/src/client/uploader/transferUploaderConfig.js.map +1 -1
  52. package/dist/src/client/uploader/utils/uploaderUtils.js.map +1 -1
  53. package/dist/src/client/uploader/web/webTransferUploader.js.map +1 -1
  54. package/dist/src/downloader/api/fileServerDownloadClient.js.map +1 -1
  55. package/dist/src/downloader/api/node/nodeFileServerDownloadClient.js.map +1 -1
  56. package/dist/src/downloader/chunkDownloader.js.map +1 -1
  57. package/dist/src/downloader/downloadFolderResolver.js.map +1 -1
  58. package/dist/src/downloader/downloadLogger.js.map +1 -1
  59. package/dist/src/downloader/downloadOptions.js.map +1 -1
  60. package/dist/src/downloader/downloadStatus/downloadFileChunkProgress.js.map +1 -1
  61. package/dist/src/downloader/downloadStatus/downloadFileProgress.js.map +1 -1
  62. package/dist/src/downloader/downloadStatus/downloadFilePromise.js.map +1 -1
  63. package/dist/src/downloader/downloadStatus/downloadState.js.map +1 -1
  64. package/dist/src/downloader/downloadTracker.js.map +1 -1
  65. package/dist/src/downloader/dtos/downloadCommand.js.map +1 -1
  66. package/dist/src/downloader/dtos/downloadError.js.map +1 -1
  67. package/dist/src/downloader/dtos/downloadErrorCode.js.map +1 -1
  68. package/dist/src/downloader/dtos/downloadEvent.js.map +1 -1
  69. package/dist/src/downloader/dtos/downloadFileChunkInfo.js.map +1 -1
  70. package/dist/src/downloader/dtos/downloadFileInfo.js.map +1 -1
  71. package/dist/src/downloader/dtos/downloadFilesCommand.js.map +1 -1
  72. package/dist/src/downloader/dtos/downloadInfo.js.map +1 -1
  73. package/dist/src/downloader/dtos/downloadRegistrationMode.js.map +1 -1
  74. package/dist/src/downloader/dtos/downloadTrackerFileInfo.js.map +1 -1
  75. package/dist/src/downloader/dtos/downloadTrackerFileProgressInfo.js.map +1 -1
  76. package/dist/src/downloader/dtos/downloadTrackerProgressInfo.js.map +1 -1
  77. package/dist/src/downloader/dtos/downloadTrackingMetadata.js.map +1 -1
  78. package/dist/src/downloader/dtos/downloaderRestoredState.js.map +1 -1
  79. package/dist/src/downloader/eventArgs/chunkDownloadEventArgs.js.map +1 -1
  80. package/dist/src/downloader/eventArgs/chunkDownloadFailedEventArgs.js.map +1 -1
  81. package/dist/src/downloader/eventArgs/downloadCompletedEventArgs.js.map +1 -1
  82. package/dist/src/downloader/eventArgs/downloadEventArgs.js.map +1 -1
  83. package/dist/src/downloader/eventArgs/downloadMetadataDeterminedEventArgs.js.map +1 -1
  84. package/dist/src/downloader/eventArgs/downloadPauseEventArgs.js.map +1 -1
  85. package/dist/src/downloader/eventArgs/downloadTrackingFailedEventArgs.js.map +1 -1
  86. package/dist/src/downloader/eventArgs/fileDownloadEventArgs.js.map +1 -1
  87. package/dist/src/downloader/eventArgs/fileDownloadFailedEventArgs.js.map +1 -1
  88. package/dist/src/downloader/filesDownloader.js.map +1 -1
  89. package/dist/src/downloader/filesPreparer.js.map +1 -1
  90. package/dist/src/index.js.map +1 -1
  91. package/dist/src/index.node.js.map +1 -1
  92. package/dist/src/index.web.js.map +1 -1
  93. package/dist/src/uploader/api/dtos/handshakeRequest.js.map +1 -1
  94. package/dist/src/uploader/api/dtos/handshakeResponse.js.map +1 -1
  95. package/dist/src/uploader/api/dtos/pingResponse.js.map +1 -1
  96. package/dist/src/uploader/api/dtos/sendChunkRequest.js.map +1 -1
  97. package/dist/src/uploader/api/fileServerUdpClient.js.map +1 -1
  98. package/dist/src/uploader/api/fileServerUploadClient.js.map +1 -1
  99. package/dist/src/uploader/api/node/nodeFileServerUdpClient.js +8 -8
  100. package/dist/src/uploader/api/node/nodeFileServerUdpClient.js.map +1 -1
  101. package/dist/src/uploader/api/node/nodeFileServerUploadClient.js.map +1 -1
  102. package/dist/src/uploader/api/web/utils/axiosIdleTimeoutManager.js.map +1 -1
  103. package/dist/src/uploader/api/web/webFileServerUploadClient.js.map +1 -1
  104. package/dist/src/uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.js.map +1 -1
  105. package/dist/src/uploader/chunkStreamProviderFactory/uploaderChunkStreamProviderFactory.js.map +1 -1
  106. package/dist/src/uploader/chunkStreamProviderFactory/webFileDetailsUploaderChunkStreamProviderFactory.js.map +1 -1
  107. package/dist/src/uploader/chunksIterator/chunksIterator.js.map +1 -1
  108. package/dist/src/uploader/eventArgs/fileChunkUploadCompletedEventArgs.js.map +1 -1
  109. package/dist/src/uploader/eventArgs/fileChunkUploadCompletedPartiallyEventArgs.js.map +1 -1
  110. package/dist/src/uploader/eventArgs/fileChunkUploadEventArgs.js.map +1 -1
  111. package/dist/src/uploader/eventArgs/fileChunkUploadFailedEventArgs.js.map +1 -1
  112. package/dist/src/uploader/eventArgs/fileChunkUploadProgressedEventArgs.js.map +1 -1
  113. package/dist/src/uploader/eventArgs/fileUploadEventArgs.js.map +1 -1
  114. package/dist/src/uploader/eventArgs/fileUploadFailedEventArgs.js.map +1 -1
  115. package/dist/src/uploader/eventArgs/transferMetadataDeterminedEventArgs.js.map +1 -1
  116. package/dist/src/uploader/eventArgs/transferUploadCompletedEventArgs.d.ts +2 -0
  117. package/dist/src/uploader/eventArgs/transferUploadCompletedEventArgs.d.ts.map +1 -1
  118. package/dist/src/uploader/eventArgs/transferUploadCompletedEventArgs.js.map +1 -1
  119. package/dist/src/uploader/eventArgs/transferUploadModeChosenEventArgs.js.map +1 -1
  120. package/dist/src/uploader/eventArgs/transferUploadProgressedEventArgs.js.map +1 -1
  121. package/dist/src/uploader/export/transferUploadExportData.js.map +1 -1
  122. package/dist/src/uploader/export/transferUploadExportState.js.map +1 -1
  123. package/dist/src/uploader/export/transferUploadMetadata.js.map +1 -1
  124. package/dist/src/uploader/optimizer/optimizationValues.js.map +1 -1
  125. package/dist/src/uploader/optimizer/strategies/udpConcurrencyBasedOptimizationStrategy.js.map +1 -1
  126. package/dist/src/uploader/optimizer/strategies/udpSleepBasedOptimizationStrategy.js.map +1 -1
  127. package/dist/src/uploader/optimizer/transferUploadOptimizationStrategy.js.map +1 -1
  128. package/dist/src/uploader/optimizer/transferUploadOptimizer.js.map +1 -1
  129. package/dist/src/uploader/optimizer/uploadOptimizer.js.map +1 -1
  130. package/dist/src/uploader/options/transferUploadAppendInfo.js.map +1 -1
  131. package/dist/src/uploader/options/transferUploadConfig.js.map +1 -1
  132. package/dist/src/uploader/options/transferUploadInfo.js.map +1 -1
  133. package/dist/src/uploader/options/transferUploadInfoBase.js.map +1 -1
  134. package/dist/src/uploader/pauseController.js.map +1 -1
  135. package/dist/src/uploader/state/continuousChunksCalculator.js.map +1 -1
  136. package/dist/src/uploader/state/readonlyTransferUploadStateFile.js.map +1 -1
  137. package/dist/src/uploader/state/readonlyTransferUploadStateFiles.js.map +1 -1
  138. package/dist/src/uploader/state/transferUploadProgressCalculator.js.map +1 -1
  139. package/dist/src/uploader/state/transferUploadState.d.ts.map +1 -1
  140. package/dist/src/uploader/state/transferUploadState.js +7 -1
  141. package/dist/src/uploader/state/transferUploadState.js.map +1 -1
  142. package/dist/src/uploader/state/transferUploadStateFile.js.map +1 -1
  143. package/dist/src/uploader/state/transferUploadStateFiles.js.map +1 -1
  144. package/dist/src/uploader/transferFailureAbortReason.js.map +1 -1
  145. package/dist/src/uploader/transferUpload.js.map +1 -1
  146. package/dist/src/uploader/transferUploadError.js.map +1 -1
  147. package/dist/src/uploader/transferUploadEvent.js.map +1 -1
  148. package/dist/src/utils/api/apiClient.js.map +1 -1
  149. package/dist/src/utils/api/apiClientBase.js.map +1 -1
  150. package/dist/src/utils/api/apiError.js.map +1 -1
  151. package/dist/src/utils/api/apiFilemail449Error.js.map +1 -1
  152. package/dist/src/utils/api/apiFilemailError.js.map +1 -1
  153. package/dist/src/utils/api/dtos/baseResponse.js.map +1 -1
  154. package/dist/src/utils/api/dtos/cancelTransferRequest.js.map +1 -1
  155. package/dist/src/utils/api/dtos/finalizeTransferRequest.js.map +1 -1
  156. package/dist/src/utils/api/dtos/finalizeTransferResponse.js.map +1 -1
  157. package/dist/src/utils/api/dtos/getCompanyResponse.js.map +1 -1
  158. package/dist/src/utils/api/dtos/getCompressedFileMetadataResponse.js.map +1 -1
  159. package/dist/src/utils/api/dtos/getInboxTransfersRequest.js.map +1 -1
  160. package/dist/src/utils/api/dtos/getInboxTransfersResponse.js.map +1 -1
  161. package/dist/src/utils/api/dtos/getRangehashResponse.js.map +1 -1
  162. package/dist/src/utils/api/dtos/getTransferRequest.js.map +1 -1
  163. package/dist/src/utils/api/dtos/getTransferResponse.js.map +1 -1
  164. package/dist/src/utils/api/dtos/initializeTransferRequest.js.map +1 -1
  165. package/dist/src/utils/api/dtos/initializeTransferResponse.js.map +1 -1
  166. package/dist/src/utils/api/dtos/loginRequest.js.map +1 -1
  167. package/dist/src/utils/api/dtos/loginResponse.js.map +1 -1
  168. package/dist/src/utils/api/dtos/registerFileDownloadRequest.js.map +1 -1
  169. package/dist/src/utils/api/dtos/registerTransferDownloadRequest.js.map +1 -1
  170. package/dist/src/utils/api/dtos/resetTransferRequest.js.map +1 -1
  171. package/dist/src/utils/api/dtos/sendFileChunkRequest.js.map +1 -1
  172. package/dist/src/utils/api/dtos/transferCustomFieldDto.js.map +1 -1
  173. package/dist/src/utils/api/dtos/transferFileDto.js.map +1 -1
  174. package/dist/src/utils/api/fileServerClientFactory.js.map +1 -1
  175. package/dist/src/utils/api/node/gotWorkarounds.js.map +1 -1
  176. package/dist/src/utils/api/node/nodeApiClient.js.map +1 -1
  177. package/dist/src/utils/api/node/nodeClientBase.js.map +1 -1
  178. package/dist/src/utils/api/node/nodeFileServerClientFactory.js.map +1 -1
  179. package/dist/src/utils/api/node/nodeFileserverClientBase.js.map +1 -1
  180. package/dist/src/utils/api/urlUtil.js.map +1 -1
  181. package/dist/src/utils/api/web/webApiClient.js.map +1 -1
  182. package/dist/src/utils/api/web/webClientBase.js.map +1 -1
  183. package/dist/src/utils/api/web/webFileServerClientFactory.js.map +1 -1
  184. package/dist/src/utils/api/web/webFileserverClientBase.js.map +1 -1
  185. package/dist/src/utils/concurrencyController/concurrencyController.js.map +1 -1
  186. package/dist/src/utils/concurrencyController/concurrencyReleaser.js.map +1 -1
  187. package/dist/src/utils/concurrencyController/transferConcurrencyController.js.map +1 -1
  188. package/dist/src/utils/crypto/cryptographyProvider.js.map +1 -1
  189. package/dist/src/utils/crypto/node/nodeCryptographyProvider.js.map +1 -1
  190. package/dist/src/utils/crypto/web/webCryptographyProvider.js.map +1 -1
  191. package/dist/src/utils/dateAndTime/simpleDateFormatter.js.map +1 -1
  192. package/dist/src/utils/events/chunkProgressEvent.js.map +1 -1
  193. package/dist/src/utils/events/eventsEngine.js.map +1 -1
  194. package/dist/src/utils/events/node/nodeEventsEngine.js.map +1 -1
  195. package/dist/src/utils/events/web/webEventsEngine.js.map +1 -1
  196. package/dist/src/utils/fileSystem/chunkStreamProvider.js.map +1 -1
  197. package/dist/src/utils/fileSystem/chunkStreamProviderFactory.js.map +1 -1
  198. package/dist/src/utils/fileSystem/fileDetails.js.map +1 -1
  199. package/dist/src/utils/fileSystem/fileSystemService.js.map +1 -1
  200. package/dist/src/utils/fileSystem/fsError.js.map +1 -1
  201. package/dist/src/utils/fileSystem/node/nodeChunkStreamProvider.js.map +1 -1
  202. package/dist/src/utils/fileSystem/node/nodeChunkStreamProviderFactory.js.map +1 -1
  203. package/dist/src/utils/fileSystem/node/nodeFileDetails.js.map +1 -1
  204. package/dist/src/utils/fileSystem/node/nodeFileSystemService.js.map +1 -1
  205. package/dist/src/utils/fileSystem/parsedPath.js.map +1 -1
  206. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamEncrypter.js.map +1 -1
  207. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.js.map +1 -1
  208. package/dist/src/utils/fileSystem/web/webChunkStreamProviderFactory.js.map +1 -1
  209. package/dist/src/utils/fileSystem/web/webFileDetails.js.map +1 -1
  210. package/dist/src/utils/jsonParsing.js.map +1 -1
  211. package/dist/src/utils/logging/logEventPropertyNames.js.map +1 -1
  212. package/dist/src/utils/mergeAbortAndPauseSignals.js.map +1 -1
  213. package/dist/src/utils/networking/throttlingOptions.js.map +1 -1
  214. package/dist/src/utils/promiseAll.js.map +1 -1
  215. package/dist/src/utils/types/transferStatus.js.map +1 -1
  216. package/dist/src/utils/uint8ArrayUtils.js.map +1 -1
  217. package/package.json +79 -79
  218. package/readme.md +18 -18
@@ -1 +1 @@
1
- {"version":3,"file":"webClientBase.js","sourceRoot":"","sources":["../../../../../src/utils/api/web/webClientBase.ts"],"names":[],"mappings":"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","sourcesContent":["import axios, { AxiosError } from \"axios\";\r\n\r\nimport ApiError from \"../apiError.js\";\r\nimport ApiFilemailError from \"../apiFilemailError.js\";\r\nimport ApiFilemail449Error from \"../apiFilemail449Error.js\";\r\nimport { isBaseResponse } from \"../dtos/baseResponse.js\";\r\nimport WebEventsEngine from \"../../events/web/webEventsEngine.js\";\r\nimport ApiClientBase from \"../apiClientBase.js\";\r\n\r\nimport type EventsEngine from \"../../events/eventsEngine.js\";\r\nimport type { BaseResponse } from \"../dtos/baseResponse.js\";\r\n\r\nexport default class WebClientBase extends ApiClientBase {\r\n protected readonly eventsEngine: EventsEngine;\r\n\r\n constructor() {\r\n super();\r\n this.eventsEngine = new WebEventsEngine();\r\n }\r\n\r\n public addEventListener(eventName: string, handler: (event: any) => void): void {\r\n this.eventsEngine.addEventListener(eventName, handler);\r\n }\r\n\r\n public removeEventListener(eventName: string, handler: (event: any) => void): void {\r\n this.eventsEngine.removeEventListener(eventName, handler);\r\n }\r\n\r\n protected createApiError(error: unknown, errorMessage: string, idleTimeoutSignal?: AbortSignal) {\r\n const cause = this.getErrorCause(error, idleTimeoutSignal);\r\n const httpStatus = this.getErrorHttpStatus(error);\r\n const requestUrl = this.getErrorRequestUrl(error);\r\n\r\n return new ApiError(errorMessage, httpStatus, { cause, requestUrl });\r\n }\r\n\r\n private getErrorRequestUrl(error: unknown): string | undefined {\r\n if (axios.isAxiosError(error) && error.config?.url)\r\n return axios.getUri(error.config);\r\n\r\n return undefined;\r\n }\r\n\r\n private getErrorHttpStatus(error: unknown): number | undefined {\r\n if (axios.isAxiosError(error))\r\n return error.response?.status;\r\n\r\n return undefined;\r\n }\r\n\r\n private getErrorCause(error: unknown, idleTimeoutSignal?: AbortSignal): Error {\r\n if (!axios.isAxiosError(error))\r\n return error as Error;\r\n\r\n const filemailErrorResponse = this.tryGetErrorResponse(error);\r\n\r\n if (filemailErrorResponse) {\r\n const filemailErrorReason = filemailErrorResponse.errormessage || filemailErrorResponse.errorcode?.toString() || filemailErrorResponse.exception || `UNKNOWN`;\r\n const errorText = `${filemailErrorResponse.responsestatus}: ${filemailErrorReason}`;\r\n\r\n return new ApiFilemailError(errorText, filemailErrorReason, filemailErrorResponse.responsestatus, { cause: error as Error });\r\n }\r\n\r\n const response449Message = this.tryGet449Response(error);\r\n\r\n if (response449Message)\r\n return new ApiFilemail449Error(response449Message);\r\n\r\n const errorReasonText = this.getErrorReasonText(error, idleTimeoutSignal);\r\n\r\n return new Error(errorReasonText, { cause: error as Error });\r\n }\r\n\r\n private tryGetErrorResponse(error: AxiosError<any, any>): BaseResponse<unknown> | null {\r\n try {\r\n if (this.isBaseNotOkResponse(error.response?.data))\r\n return error.response.data;\r\n\r\n if (typeof error.response?.data !== `string`)\r\n return null;\r\n\r\n const response = JSON.parse(error.response?.data);\r\n\r\n if (this.isBaseNotOkResponse(response))\r\n return response;\r\n\r\n return null;\r\n }\r\n catch {\r\n return null;\r\n }\r\n }\r\n\r\n private isBaseNotOkResponse(obj: any): obj is BaseResponse<unknown> {\r\n return isBaseResponse(obj) && obj.responsestatus !== `OK`;\r\n }\r\n\r\n private tryGet449Response(error: AxiosError<any, any>): string | null {\r\n try {\r\n if (error.response?.status !== 449)\r\n return null;\r\n\r\n if (typeof error.response?.data !== `string`)\r\n return null;\r\n\r\n return error.response?.data;\r\n }\r\n catch {\r\n return null;\r\n }\r\n }\r\n\r\n private getErrorReasonText(error: AxiosError<any, any>, idleTimeoutSignal?: AbortSignal): string {\r\n const isIdleTimeout = error.code === `ERR_CANCELED` && idleTimeoutSignal?.aborted;\r\n const isRequestTimeout = error.code === `ECONNABORTED` && error.message.startsWith(`timeout`);\r\n\r\n if (isIdleTimeout || isRequestTimeout)\r\n return `Timeout`;\r\n\r\n if (error.response?.status)\r\n return `${error.response.status}: ${error.response.statusText || error.code || error.message}`;\r\n\r\n if (error.code)\r\n return error.code;\r\n\r\n if (error.message)\r\n return error.message;\r\n\r\n return `UKNOWN API ERROR`;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webClientBase.js","sourceRoot":"","sources":["../../../../../src/utils/api/web/webClientBase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAE1C,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,gBAAgB,MAAM,wBAAwB,CAAC;AACtD,OAAO,mBAAmB,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,eAAe,MAAM,qCAAqC,CAAC;AAClE,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAKhD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,aAAa;IACjC,YAAY,CAAe;IAE9C;QACI,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,CAAC;IAEM,gBAAgB,CAAC,SAAiB,EAAE,OAA6B;QACpE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAEM,mBAAmB,CAAC,SAAiB,EAAE,OAA6B;QACvE,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAES,cAAc,CAAC,KAAc,EAAE,YAAoB,EAAE,iBAA+B;QAC1F,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAElD,OAAO,IAAI,QAAQ,CAAC,YAAY,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IACzE,CAAC;IAEO,kBAAkB,CAAC,KAAc;QACrC,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,GAAG;YAC9C,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEtC,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,kBAAkB,CAAC,KAAc;QACrC,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;YACzB,OAAO,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;QAElC,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,aAAa,CAAC,KAAc,EAAE,iBAA+B;QACjE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;YAC1B,OAAO,KAAc,CAAC;QAE1B,MAAM,qBAAqB,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAE9D,IAAI,qBAAqB,EAAE,CAAC;YACxB,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,YAAY,IAAI,qBAAqB,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,qBAAqB,CAAC,SAAS,IAAI,SAAS,CAAC;YAC9J,MAAM,SAAS,GAAG,GAAG,qBAAqB,CAAC,cAAc,KAAK,mBAAmB,EAAE,CAAC;YAEpF,OAAO,IAAI,gBAAgB,CAAC,SAAS,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC,CAAC;QACjI,CAAC;QAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAEzD,IAAI,kBAAkB;YAClB,OAAO,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;QAEvD,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAE1E,OAAO,IAAI,KAAK,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC,CAAC;IACjE,CAAC;IAEO,mBAAmB,CAAC,KAA2B;QACnD,IAAI,CAAC;YACD,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;gBAC9C,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YAE/B,IAAI,OAAO,KAAK,CAAC,QAAQ,EAAE,IAAI,KAAK,QAAQ;gBACxC,OAAO,IAAI,CAAC;YAEhB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAElD,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;gBAClC,OAAO,QAAQ,CAAC;YAEpB,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,CAAC;YACH,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAEO,mBAAmB,CAAC,GAAQ;QAChC,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,cAAc,KAAK,IAAI,CAAC;IAC9D,CAAC;IAEO,iBAAiB,CAAC,KAA2B;QACjD,IAAI,CAAC;YACD,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG;gBAC9B,OAAO,IAAI,CAAC;YAEhB,IAAI,OAAO,KAAK,CAAC,QAAQ,EAAE,IAAI,KAAK,QAAQ;gBACxC,OAAO,IAAI,CAAC;YAEhB,OAAO,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;QAChC,CAAC;QACD,MAAM,CAAC;YACH,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAEO,kBAAkB,CAAC,KAA2B,EAAE,iBAA+B;QACnF,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,iBAAiB,EAAE,OAAO,CAAC;QAClF,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAE9F,IAAI,aAAa,IAAI,gBAAgB;YACjC,OAAO,SAAS,CAAC;QAErB,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM;YACtB,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,QAAQ,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAEnG,IAAI,KAAK,CAAC,IAAI;YACV,OAAO,KAAK,CAAC,IAAI,CAAC;QAEtB,IAAI,KAAK,CAAC,OAAO;YACb,OAAO,KAAK,CAAC,OAAO,CAAC;QAEzB,OAAO,kBAAkB,CAAC;IAC9B,CAAC;CACJ","sourcesContent":["import axios, { AxiosError } from \"axios\";\n\nimport ApiError from \"../apiError.js\";\nimport ApiFilemailError from \"../apiFilemailError.js\";\nimport ApiFilemail449Error from \"../apiFilemail449Error.js\";\nimport { isBaseResponse } from \"../dtos/baseResponse.js\";\nimport WebEventsEngine from \"../../events/web/webEventsEngine.js\";\nimport ApiClientBase from \"../apiClientBase.js\";\n\nimport type EventsEngine from \"../../events/eventsEngine.js\";\nimport type { BaseResponse } from \"../dtos/baseResponse.js\";\n\nexport default class WebClientBase extends ApiClientBase {\n protected readonly eventsEngine: EventsEngine;\n\n constructor() {\n super();\n this.eventsEngine = new WebEventsEngine();\n }\n\n public addEventListener(eventName: string, handler: (event: any) => void): void {\n this.eventsEngine.addEventListener(eventName, handler);\n }\n\n public removeEventListener(eventName: string, handler: (event: any) => void): void {\n this.eventsEngine.removeEventListener(eventName, handler);\n }\n\n protected createApiError(error: unknown, errorMessage: string, idleTimeoutSignal?: AbortSignal) {\n const cause = this.getErrorCause(error, idleTimeoutSignal);\n const httpStatus = this.getErrorHttpStatus(error);\n const requestUrl = this.getErrorRequestUrl(error);\n\n return new ApiError(errorMessage, httpStatus, { cause, requestUrl });\n }\n\n private getErrorRequestUrl(error: unknown): string | undefined {\n if (axios.isAxiosError(error) && error.config?.url)\n return axios.getUri(error.config);\n\n return undefined;\n }\n\n private getErrorHttpStatus(error: unknown): number | undefined {\n if (axios.isAxiosError(error))\n return error.response?.status;\n\n return undefined;\n }\n\n private getErrorCause(error: unknown, idleTimeoutSignal?: AbortSignal): Error {\n if (!axios.isAxiosError(error))\n return error as Error;\n\n const filemailErrorResponse = this.tryGetErrorResponse(error);\n\n if (filemailErrorResponse) {\n const filemailErrorReason = filemailErrorResponse.errormessage || filemailErrorResponse.errorcode?.toString() || filemailErrorResponse.exception || `UNKNOWN`;\n const errorText = `${filemailErrorResponse.responsestatus}: ${filemailErrorReason}`;\n\n return new ApiFilemailError(errorText, filemailErrorReason, filemailErrorResponse.responsestatus, { cause: error as Error });\n }\n\n const response449Message = this.tryGet449Response(error);\n\n if (response449Message)\n return new ApiFilemail449Error(response449Message);\n\n const errorReasonText = this.getErrorReasonText(error, idleTimeoutSignal);\n\n return new Error(errorReasonText, { cause: error as Error });\n }\n\n private tryGetErrorResponse(error: AxiosError<any, any>): BaseResponse<unknown> | null {\n try {\n if (this.isBaseNotOkResponse(error.response?.data))\n return error.response.data;\n\n if (typeof error.response?.data !== `string`)\n return null;\n\n const response = JSON.parse(error.response?.data);\n\n if (this.isBaseNotOkResponse(response))\n return response;\n\n return null;\n }\n catch {\n return null;\n }\n }\n\n private isBaseNotOkResponse(obj: any): obj is BaseResponse<unknown> {\n return isBaseResponse(obj) && obj.responsestatus !== `OK`;\n }\n\n private tryGet449Response(error: AxiosError<any, any>): string | null {\n try {\n if (error.response?.status !== 449)\n return null;\n\n if (typeof error.response?.data !== `string`)\n return null;\n\n return error.response?.data;\n }\n catch {\n return null;\n }\n }\n\n private getErrorReasonText(error: AxiosError<any, any>, idleTimeoutSignal?: AbortSignal): string {\n const isIdleTimeout = error.code === `ERR_CANCELED` && idleTimeoutSignal?.aborted;\n const isRequestTimeout = error.code === `ECONNABORTED` && error.message.startsWith(`timeout`);\n\n if (isIdleTimeout || isRequestTimeout)\n return `Timeout`;\n\n if (error.response?.status)\n return `${error.response.status}: ${error.response.statusText || error.code || error.message}`;\n\n if (error.code)\n return error.code;\n\n if (error.message)\n return error.message;\n\n return `UKNOWN API ERROR`;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"webFileServerClientFactory.js","sourceRoot":"","sources":["../../../../../src/utils/api/web/webFileServerClientFactory.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,OAAO,yBAAyB,MAAM,wDAAwD,CAAC;AAQ/F,MAAM,CAAC,OAAO,OAAO,0BAA0B;IAC3C,OAAO,CAAS;IAChB,cAAc,CAAS;IACvB,gBAAgB,CAAS;IACzB,WAAW,CAAS;IAEpB,YAAY,MAAc,EAAE,aAAqB,EAAE,eAAuB,EAAE,UAAkB;QAC1F,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IAEM,+BAA+B,CAAC,cAAsB,EAAE,WAAmB,EAAE,mBAA2B,EAAE,YAA0B,EAAE,WAAoB,EAAE,kBAA0B,CAAC;QAC1L,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACtD,CAAC;IAEM,iCAAiC,CAAC,YAAoB,EAAE,MAAqB,EAAE,IAAmB,EAAE,WAAmB,EAAE,SAAiB,EAAE,QAAyB;QACxK,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC7D,CAAC;IAEM,+BAA+B,CAAC,aAAqB,EAAE,UAAkB,EAAE,WAAmB,EAAE,QAAgB,EAAE,mBAA2B,EAAE,aAAqB;QACvK,OAAO,IAAI,yBAAyB,CAAC,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,mBAAmB,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3M,CAAC;CACJ","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport WebFileServerUploadClient from \"../../../uploader/api/web/webFileServerUploadClient.js\";\r\n\r\nimport type FileServerUploadClient from \"../../../uploader/api/fileServerUploadClient.js\";\r\nimport type FileServerClientFactory from \"../fileServerClientFactory.js\";\r\nimport type FileServerDownloadClient from \"../../../downloader/api/fileServerDownloadClient.js\";\r\nimport type DownloadOptions from \"../../../downloader/downloadOptions.js\";\r\nimport type FileServerUdpClient from \"../../../uploader/api/fileServerUdpClient.js\";\r\n\r\nexport default class WebFileServerClientFactory implements FileServerClientFactory {\r\n #source: string;\r\n #sourceDetails: string;\r\n #idleTimeoutInMs: number;\r\n #retryLimit: number;\r\n\r\n constructor(source: string, sourceDetails: string, idleTimeoutInMs: number, retryLimit: number) {\r\n this.#source = source;\r\n this.#sourceDetails = sourceDetails;\r\n this.#idleTimeoutInMs = idleTimeoutInMs;\r\n this.#retryLimit = retryLimit;\r\n }\r\n\r\n public createFileServerUdpUploadClient(_serverAddress: string, _serverPort: number, _requestTimeoutInMs: number, _abortSignal?: AbortSignal, _retryLimit?: number, _retryDelayInMs: number = 0): FileServerUdpClient {\r\n throw new Error(`UDP is not implemented for WEB`);\r\n }\r\n\r\n public createFileServerTcpDownloadClient(_downloadUrl: string, _start: number | null, _end: number | null, _transferId: string, _fileName: string, _options: DownloadOptions): FileServerDownloadClient {\r\n throw new Error(`Downloader is not implemented for WEB`);\r\n }\r\n\r\n public createFileServerTcpUploadClient(baseUploadUrl: string, transferId: string, transferKey: string, fileName: string, fileDestinationPath: string, fileTotalSize: number): FileServerUploadClient {\r\n return new WebFileServerUploadClient(baseUploadUrl, transferId, transferKey, fileName, fileDestinationPath, fileTotalSize, this.#source, this.#sourceDetails, this.#idleTimeoutInMs, this.#retryLimit);\r\n }\r\n}"]}
1
+ {"version":3,"file":"webFileServerClientFactory.js","sourceRoot":"","sources":["../../../../../src/utils/api/web/webFileServerClientFactory.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,OAAO,yBAAyB,MAAM,wDAAwD,CAAC;AAQ/F,MAAM,CAAC,OAAO,OAAO,0BAA0B;IAC3C,OAAO,CAAS;IAChB,cAAc,CAAS;IACvB,gBAAgB,CAAS;IACzB,WAAW,CAAS;IAEpB,YAAY,MAAc,EAAE,aAAqB,EAAE,eAAuB,EAAE,UAAkB;QAC1F,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IAEM,+BAA+B,CAAC,cAAsB,EAAE,WAAmB,EAAE,mBAA2B,EAAE,YAA0B,EAAE,WAAoB,EAAE,kBAA0B,CAAC;QAC1L,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACtD,CAAC;IAEM,iCAAiC,CAAC,YAAoB,EAAE,MAAqB,EAAE,IAAmB,EAAE,WAAmB,EAAE,SAAiB,EAAE,QAAyB;QACxK,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC7D,CAAC;IAEM,+BAA+B,CAAC,aAAqB,EAAE,UAAkB,EAAE,WAAmB,EAAE,QAAgB,EAAE,mBAA2B,EAAE,aAAqB;QACvK,OAAO,IAAI,yBAAyB,CAAC,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,mBAAmB,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3M,CAAC;CACJ","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport WebFileServerUploadClient from \"../../../uploader/api/web/webFileServerUploadClient.js\";\n\nimport type FileServerUploadClient from \"../../../uploader/api/fileServerUploadClient.js\";\nimport type FileServerClientFactory from \"../fileServerClientFactory.js\";\nimport type FileServerDownloadClient from \"../../../downloader/api/fileServerDownloadClient.js\";\nimport type DownloadOptions from \"../../../downloader/downloadOptions.js\";\nimport type FileServerUdpClient from \"../../../uploader/api/fileServerUdpClient.js\";\n\nexport default class WebFileServerClientFactory implements FileServerClientFactory {\n #source: string;\n #sourceDetails: string;\n #idleTimeoutInMs: number;\n #retryLimit: number;\n\n constructor(source: string, sourceDetails: string, idleTimeoutInMs: number, retryLimit: number) {\n this.#source = source;\n this.#sourceDetails = sourceDetails;\n this.#idleTimeoutInMs = idleTimeoutInMs;\n this.#retryLimit = retryLimit;\n }\n\n public createFileServerUdpUploadClient(_serverAddress: string, _serverPort: number, _requestTimeoutInMs: number, _abortSignal?: AbortSignal, _retryLimit?: number, _retryDelayInMs: number = 0): FileServerUdpClient {\n throw new Error(`UDP is not implemented for WEB`);\n }\n\n public createFileServerTcpDownloadClient(_downloadUrl: string, _start: number | null, _end: number | null, _transferId: string, _fileName: string, _options: DownloadOptions): FileServerDownloadClient {\n throw new Error(`Downloader is not implemented for WEB`);\n }\n\n public createFileServerTcpUploadClient(baseUploadUrl: string, transferId: string, transferKey: string, fileName: string, fileDestinationPath: string, fileTotalSize: number): FileServerUploadClient {\n return new WebFileServerUploadClient(baseUploadUrl, transferId, transferKey, fileName, fileDestinationPath, fileTotalSize, this.#source, this.#sourceDetails, this.#idleTimeoutInMs, this.#retryLimit);\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"webFileserverClientBase.js","sourceRoot":"","sources":["../../../../../src/utils/api/web/webFileserverClientBase.ts"],"names":[],"mappings":"AAGA,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAE/C,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,aAAa;IACpD,8BAA8B;QACpC,IAAI,iCAAiC,GAAG,CAAC,CAAC;QAE1C,OAAO,CAAC,QAA4B,EAAE,EAAE;YACpC,MAAM,8BAA8B,GAAG,QAAQ,CAAC,MAAM,GAAG,iCAAiC,CAAC;YAE3F,IAAI,8BAA8B,KAAK,CAAC;gBACpC,OAAO;YAEX,MAAM,SAAS,GAAuB;gBAClC,qBAAqB,EAAE,QAAQ,CAAC,MAAM;gBACtC,8BAA8B;aACjC,CAAC;YAEF,iCAAiC,GAAG,QAAQ,CAAC,MAAM,CAAC;YAEpD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAClD,CAAC,CAAC;IACN,CAAC;CACJ","sourcesContent":["import { AxiosProgressEvent } from \"axios\";\r\n\r\nimport type ChunkProgressEvent from \"../../events/chunkProgressEvent.js\";\r\nimport WebClientBase from \"./webClientBase.js\";\r\n\r\nexport default class WebFileServerClientBase extends WebClientBase {\r\n protected getDataTransferProgressHandler() {\r\n let lastProgressTransferredTotalBytes = 0;\r\n\r\n return (progress: AxiosProgressEvent) => {\r\n const transferredBytesSinceLastEvent = progress.loaded - lastProgressTransferredTotalBytes;\r\n\r\n if (transferredBytesSinceLastEvent === 0)\r\n return;\r\n\r\n const eventArgs: ChunkProgressEvent = {\r\n transferredBytesTotal: progress.loaded,\r\n transferredBytesSinceLastEvent,\r\n };\r\n\r\n lastProgressTransferredTotalBytes = progress.loaded;\r\n\r\n this.eventsEngine.emit(`progress`, eventArgs);\r\n };\r\n }\r\n}"]}
1
+ {"version":3,"file":"webFileserverClientBase.js","sourceRoot":"","sources":["../../../../../src/utils/api/web/webFileserverClientBase.ts"],"names":[],"mappings":"AAGA,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAE/C,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,aAAa;IACpD,8BAA8B;QACpC,IAAI,iCAAiC,GAAG,CAAC,CAAC;QAE1C,OAAO,CAAC,QAA4B,EAAE,EAAE;YACpC,MAAM,8BAA8B,GAAG,QAAQ,CAAC,MAAM,GAAG,iCAAiC,CAAC;YAE3F,IAAI,8BAA8B,KAAK,CAAC;gBACpC,OAAO;YAEX,MAAM,SAAS,GAAuB;gBAClC,qBAAqB,EAAE,QAAQ,CAAC,MAAM;gBACtC,8BAA8B;aACjC,CAAC;YAEF,iCAAiC,GAAG,QAAQ,CAAC,MAAM,CAAC;YAEpD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAClD,CAAC,CAAC;IACN,CAAC;CACJ","sourcesContent":["import { AxiosProgressEvent } from \"axios\";\n\nimport type ChunkProgressEvent from \"../../events/chunkProgressEvent.js\";\nimport WebClientBase from \"./webClientBase.js\";\n\nexport default class WebFileServerClientBase extends WebClientBase {\n protected getDataTransferProgressHandler() {\n let lastProgressTransferredTotalBytes = 0;\n\n return (progress: AxiosProgressEvent) => {\n const transferredBytesSinceLastEvent = progress.loaded - lastProgressTransferredTotalBytes;\n\n if (transferredBytesSinceLastEvent === 0)\n return;\n\n const eventArgs: ChunkProgressEvent = {\n transferredBytesTotal: progress.loaded,\n transferredBytesSinceLastEvent,\n };\n\n lastProgressTransferredTotalBytes = progress.loaded;\n\n this.eventsEngine.emit(`progress`, eventArgs);\n };\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"concurrencyController.js","sourceRoot":"","sources":["../../../../src/utils/concurrencyController/concurrencyController.ts"],"names":[],"mappings":"","sourcesContent":["import type ConcurrencyReleaser from \"./concurrencyReleaser.js\";\r\n\r\ninterface ConcurrencyController {\r\n acquire(): Promise<ConcurrencyReleaser>,\r\n get currentValue(): number,\r\n set maxConcurrency(maxConcurrency: number),\r\n get maxConcurrency(): number,\r\n}\r\n\r\nexport default ConcurrencyController;"]}
1
+ {"version":3,"file":"concurrencyController.js","sourceRoot":"","sources":["../../../../src/utils/concurrencyController/concurrencyController.ts"],"names":[],"mappings":"","sourcesContent":["import type ConcurrencyReleaser from \"./concurrencyReleaser.js\";\n\ninterface ConcurrencyController {\n acquire(): Promise<ConcurrencyReleaser>,\n get currentValue(): number,\n set maxConcurrency(maxConcurrency: number),\n get maxConcurrency(): number,\n}\n\nexport default ConcurrencyController;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"concurrencyReleaser.js","sourceRoot":"","sources":["../../../../src/utils/concurrencyController/concurrencyReleaser.ts"],"names":[],"mappings":"","sourcesContent":["type ConcurrencyReleaser = () => void;\r\n\r\nexport default ConcurrencyReleaser;"]}
1
+ {"version":3,"file":"concurrencyReleaser.js","sourceRoot":"","sources":["../../../../src/utils/concurrencyController/concurrencyReleaser.ts"],"names":[],"mappings":"","sourcesContent":["type ConcurrencyReleaser = () => void;\n\nexport default ConcurrencyReleaser;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferConcurrencyController.js","sourceRoot":"","sources":["../../../../src/utils/concurrencyController/transferConcurrencyController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAK/D,MAAM,6BAA6B;IAC/B,eAAe,CAAS;IACxB,UAAU,CAAsB;IAEhC,YAAY,cAAsB;QAC9B,IAAI,cAAc,GAAG,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAEjE,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,IAAI,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IACtC,CAAC;IAED,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,IAAI,cAAc,CAAC,iBAAyB;QACxC,IAAI,iBAAiB,GAAG,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAEjE,MAAM,mBAAmB,GAAG,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC;QACrE,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,mBAAmB,CAAC;QAE3E,IAAI,CAAC,eAAe,GAAG,iBAAiB,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,OAAO;QACT,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACrD,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ;AAED,eAAe,6BAA6B,CAAC","sourcesContent":["import { Semaphore as AsyncMutexSemaphore } from \"async-mutex\";\r\n\r\nimport type ConcurrencyController from \"./concurrencyController.js\";\r\nimport type ConcurrencyReleaser from \"./concurrencyReleaser.js\";\r\n\r\nclass TransferConcurrencyController implements ConcurrencyController {\r\n #maxConcurrency: number;\r\n #semaphore: AsyncMutexSemaphore;\r\n\r\n constructor(maxConcurrency: number) {\r\n if (maxConcurrency < 0)\r\n throw new Error(`Max concurrency can't be a negative value`);\r\n\r\n this.#maxConcurrency = maxConcurrency;\r\n this.#semaphore = new AsyncMutexSemaphore(maxConcurrency);\r\n }\r\n\r\n get currentValue(): number {\r\n return this.#semaphore.getValue();\r\n }\r\n\r\n get maxConcurrency(): number {\r\n return this.#maxConcurrency;\r\n }\r\n\r\n set maxConcurrency(newMaxConcurrency: number) {\r\n if (newMaxConcurrency < 0)\r\n throw new Error(`Max concurrency can't be a negative value`);\r\n\r\n const maxConcurrencyDelta = newMaxConcurrency - this.#maxConcurrency;\r\n const newSemaphoreValue = this.#semaphore.getValue() + maxConcurrencyDelta;\r\n\r\n this.#maxConcurrency = newMaxConcurrency;\r\n this.#semaphore.setValue(newSemaphoreValue);\r\n }\r\n\r\n async acquire(): Promise<ConcurrencyReleaser> {\r\n const [, releaser] = await this.#semaphore.acquire();\r\n return releaser;\r\n }\r\n}\r\n\r\nexport default TransferConcurrencyController;"]}
1
+ {"version":3,"file":"transferConcurrencyController.js","sourceRoot":"","sources":["../../../../src/utils/concurrencyController/transferConcurrencyController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAK/D,MAAM,6BAA6B;IAC/B,eAAe,CAAS;IACxB,UAAU,CAAsB;IAEhC,YAAY,cAAsB;QAC9B,IAAI,cAAc,GAAG,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAEjE,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,IAAI,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IACtC,CAAC;IAED,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,IAAI,cAAc,CAAC,iBAAyB;QACxC,IAAI,iBAAiB,GAAG,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAEjE,MAAM,mBAAmB,GAAG,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC;QACrE,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,mBAAmB,CAAC;QAE3E,IAAI,CAAC,eAAe,GAAG,iBAAiB,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,OAAO;QACT,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACrD,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ;AAED,eAAe,6BAA6B,CAAC","sourcesContent":["import { Semaphore as AsyncMutexSemaphore } from \"async-mutex\";\n\nimport type ConcurrencyController from \"./concurrencyController.js\";\nimport type ConcurrencyReleaser from \"./concurrencyReleaser.js\";\n\nclass TransferConcurrencyController implements ConcurrencyController {\n #maxConcurrency: number;\n #semaphore: AsyncMutexSemaphore;\n\n constructor(maxConcurrency: number) {\n if (maxConcurrency < 0)\n throw new Error(`Max concurrency can't be a negative value`);\n\n this.#maxConcurrency = maxConcurrency;\n this.#semaphore = new AsyncMutexSemaphore(maxConcurrency);\n }\n\n get currentValue(): number {\n return this.#semaphore.getValue();\n }\n\n get maxConcurrency(): number {\n return this.#maxConcurrency;\n }\n\n set maxConcurrency(newMaxConcurrency: number) {\n if (newMaxConcurrency < 0)\n throw new Error(`Max concurrency can't be a negative value`);\n\n const maxConcurrencyDelta = newMaxConcurrency - this.#maxConcurrency;\n const newSemaphoreValue = this.#semaphore.getValue() + maxConcurrencyDelta;\n\n this.#maxConcurrency = newMaxConcurrency;\n this.#semaphore.setValue(newSemaphoreValue);\n }\n\n async acquire(): Promise<ConcurrencyReleaser> {\n const [, releaser] = await this.#semaphore.acquire();\n return releaser;\n }\n}\n\nexport default TransferConcurrencyController;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"cryptographyProvider.js","sourceRoot":"","sources":["../../../../src/utils/crypto/cryptographyProvider.ts"],"names":[],"mappings":"","sourcesContent":["interface CryptographyProvider {\r\n deriveKey(userInputKey: string, salt: Uint8Array): Promise<Uint8Array>;\r\n generateHmac(encryptionKey: Uint8Array): Promise<Uint8Array>;\r\n generateRandomString(length: number): string;\r\n generateRandomInteger(min: number, max: number): number;\r\n generateRandomBytes(length: number): Uint8Array;\r\n}\r\n\r\nexport default CryptographyProvider;"]}
1
+ {"version":3,"file":"cryptographyProvider.js","sourceRoot":"","sources":["../../../../src/utils/crypto/cryptographyProvider.ts"],"names":[],"mappings":"","sourcesContent":["interface CryptographyProvider {\n deriveKey(userInputKey: string, salt: Uint8Array): Promise<Uint8Array>;\n generateHmac(encryptionKey: Uint8Array): Promise<Uint8Array>;\n generateRandomString(length: number): string;\n generateRandomInteger(min: number, max: number): number;\n generateRandomBytes(length: number): Uint8Array;\n}\n\nexport default CryptographyProvider;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"nodeCryptographyProvider.js","sourceRoot":"","sources":["../../../../../src/utils/crypto/node/nodeCryptographyProvider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B,MAAM,CAAC,OAAO,OAAO,wBAAwB;IACzC,6BAA6B,GAAG,sCAAsC,CAAC;IAEvE,SAAS,CAAC,YAAoB,EAAE,IAAgB;QAC5C,MAAM,UAAU,GAAG,MAAM,CAAC;QAE1B,OAAO,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC/C,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBACrE,IAAI,GAAG;oBACH,MAAM,CAAC,GAAG,CAAC,CAAC;;oBAEZ,OAAO,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,aAAyB;QACxC,MAAM,SAAS,GAAG,sBAAsB,CAAC;QAEzC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEvB,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAEhD,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,oBAAoB,CAAC,MAAc;QAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,IAAI,CAAC,6BAA6B,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC/F,OAAO,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IAED,qBAAqB,CAAC,GAAW,EAAE,GAAW;QAC1C,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,mBAAmB,CAAC,MAAc;QAC9B,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;CACJ","sourcesContent":["import crypto from \"crypto\";\r\nimport CryptographyProvider from \"../cryptographyProvider.js\";\r\n\r\nexport default class NodeCryptographyProvider implements CryptographyProvider {\r\n #randomStringGeneratorCharSet = `abcdefghijklmnopqrstuvwxyz0123456789`;\r\n\r\n deriveKey(userInputKey: string, salt: Uint8Array): Promise<Uint8Array> {\r\n const iterations = 10_000;\r\n\r\n return new Promise<Uint8Array>((resolve, reject) => {\r\n crypto.pbkdf2(userInputKey, salt, iterations, 32, `sha256`, (err, key) => {\r\n if (err)\r\n reject(err);\r\n else\r\n resolve(new Uint8Array(key));\r\n });\r\n });\r\n }\r\n\r\n async generateHmac(encryptionKey: Uint8Array): Promise<Uint8Array> {\r\n const knownData = `filemail-known-value`;\r\n\r\n const hmac = crypto.createHmac(`sha256`, encryptionKey);\r\n hmac.update(knownData);\r\n\r\n const hmacBytes = new Uint8Array(hmac.digest());\r\n\r\n return Promise.resolve(hmacBytes);\r\n }\r\n\r\n generateRandomString(length: number): string {\r\n return Array.from({ length }, () => {\r\n const randomInt = this.generateRandomInteger(0, this.#randomStringGeneratorCharSet.length - 1);\r\n return this.#randomStringGeneratorCharSet.charAt(randomInt);\r\n }).join(``);\r\n }\r\n\r\n generateRandomInteger(min: number, max: number): number {\r\n return crypto.randomInt(min, max + 1);\r\n }\r\n\r\n generateRandomBytes(length: number): Uint8Array {\r\n return new Uint8Array(crypto.randomBytes(length));\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"nodeCryptographyProvider.js","sourceRoot":"","sources":["../../../../../src/utils/crypto/node/nodeCryptographyProvider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B,MAAM,CAAC,OAAO,OAAO,wBAAwB;IACzC,6BAA6B,GAAG,sCAAsC,CAAC;IAEvE,SAAS,CAAC,YAAoB,EAAE,IAAgB;QAC5C,MAAM,UAAU,GAAG,MAAM,CAAC;QAE1B,OAAO,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC/C,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBACrE,IAAI,GAAG;oBACH,MAAM,CAAC,GAAG,CAAC,CAAC;;oBAEZ,OAAO,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,aAAyB;QACxC,MAAM,SAAS,GAAG,sBAAsB,CAAC;QAEzC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEvB,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAEhD,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,oBAAoB,CAAC,MAAc;QAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,IAAI,CAAC,6BAA6B,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC/F,OAAO,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IAED,qBAAqB,CAAC,GAAW,EAAE,GAAW;QAC1C,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,mBAAmB,CAAC,MAAc;QAC9B,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;CACJ","sourcesContent":["import crypto from \"crypto\";\nimport CryptographyProvider from \"../cryptographyProvider.js\";\n\nexport default class NodeCryptographyProvider implements CryptographyProvider {\n #randomStringGeneratorCharSet = `abcdefghijklmnopqrstuvwxyz0123456789`;\n\n deriveKey(userInputKey: string, salt: Uint8Array): Promise<Uint8Array> {\n const iterations = 10_000;\n\n return new Promise<Uint8Array>((resolve, reject) => {\n crypto.pbkdf2(userInputKey, salt, iterations, 32, `sha256`, (err, key) => {\n if (err)\n reject(err);\n else\n resolve(new Uint8Array(key));\n });\n });\n }\n\n async generateHmac(encryptionKey: Uint8Array): Promise<Uint8Array> {\n const knownData = `filemail-known-value`;\n\n const hmac = crypto.createHmac(`sha256`, encryptionKey);\n hmac.update(knownData);\n\n const hmacBytes = new Uint8Array(hmac.digest());\n\n return Promise.resolve(hmacBytes);\n }\n\n generateRandomString(length: number): string {\n return Array.from({ length }, () => {\n const randomInt = this.generateRandomInteger(0, this.#randomStringGeneratorCharSet.length - 1);\n return this.#randomStringGeneratorCharSet.charAt(randomInt);\n }).join(``);\n }\n\n generateRandomInteger(min: number, max: number): number {\n return crypto.randomInt(min, max + 1);\n }\n\n generateRandomBytes(length: number): Uint8Array {\n return new Uint8Array(crypto.randomBytes(length));\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"webCryptographyProvider.js","sourceRoot":"","sources":["../../../../../src/utils/crypto/web/webCryptographyProvider.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,uBAAuB;IACxC,6BAA6B,GAAG,sCAAsC,CAAC;IAEvE,KAAK,CAAC,SAAS,CAAC,YAAoB,EAAE,IAAgB;QAClD,MAAM,UAAU,GAAG,MAAM,CAAC;QAE1B,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAE/C,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAC7C,KAAK,EACL,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAC5B,EAAE,IAAI,EAAE,QAAQ,EAAE,EAClB,KAAK,EACL,CAAC,YAAY,CAAC,CACjB,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,CAC9C;YACI,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,SAAS;YACf,UAAU;YACV,IAAI,EAAE,SAAS;SAClB,EACD,WAAW,EACX,GAAG,CACN,CAAC;QAEF,OAAO,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,aAAyB;QACxC,MAAM,SAAS,GAAG,sBAAsB,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAEvD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CACrC,KAAK,EACL,QAAQ,EACR,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EACjC,KAAK,EACL,CAAC,MAAM,CAAC,CACX,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEvC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAE9D,OAAO,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAEO,iBAAiB,CAAC,KAAiB;QACvC,IAAI,KAAK,CAAC,MAAM,YAAY,WAAW;YACnC,OAAO,KAAgC,CAAC;QAE5C,OAAO,IAAI,UAAU,CAAC,KAAK,CAA4B,CAAC;IAC5D,CAAC;IAED,oBAAoB,CAAC,MAAc;QAC/B,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;aAC1B,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;aACtG,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,qBAAqB,CAAC,GAAW,EAAE,GAAW;QAC1C,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QACrC,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,mBAAmB,CAAC,MAAc;QAC9B,OAAO,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,CAAC;CACJ","sourcesContent":["import CryptographyProvider from \"../cryptographyProvider.js\";\r\n\r\nexport default class WebCryptographyProvider implements CryptographyProvider {\r\n #randomStringGeneratorCharSet = `abcdefghijklmnopqrstuvwxyz0123456789`;\r\n\r\n async deriveKey(userInputKey: string, salt: Uint8Array): Promise<Uint8Array> {\r\n const iterations = 10_000;\r\n\r\n const encoder = new TextEncoder();\r\n const saltBytes = this.ensureArrayBuffer(salt);\r\n\r\n const keyMaterial = await crypto.subtle.importKey(\r\n `raw`,\r\n encoder.encode(userInputKey),\r\n { name: `PBKDF2` },\r\n false,\r\n [`deriveBits`],\r\n );\r\n\r\n const derivedBits = await crypto.subtle.deriveBits(\r\n {\r\n name: `PBKDF2`,\r\n salt: saltBytes,\r\n iterations,\r\n hash: `SHA-256`,\r\n },\r\n keyMaterial,\r\n 256,\r\n );\r\n\r\n return new Uint8Array(derivedBits);\r\n }\r\n\r\n async generateHmac(encryptionKey: Uint8Array): Promise<Uint8Array> {\r\n const knownData = `filemail-known-value`;\r\n const keyBytes = this.ensureArrayBuffer(encryptionKey);\r\n\r\n const key = await crypto.subtle.importKey(\r\n `raw`,\r\n keyBytes,\r\n { name: `HMAC`, hash: `SHA-256` },\r\n false,\r\n [`sign`],\r\n );\r\n\r\n const encoder = new TextEncoder();\r\n const data = encoder.encode(knownData);\r\n\r\n const signature = await crypto.subtle.sign(`HMAC`, key, data);\r\n\r\n return new Uint8Array(signature);\r\n }\r\n\r\n private ensureArrayBuffer(value: Uint8Array): Uint8Array<ArrayBuffer> {\r\n if (value.buffer instanceof ArrayBuffer)\r\n return value as Uint8Array<ArrayBuffer>;\r\n\r\n return new Uint8Array(value) as Uint8Array<ArrayBuffer>;\r\n }\r\n\r\n generateRandomString(length: number): string {\r\n const randomValues = crypto.getRandomValues(new Uint32Array(length));\r\n return Array.from(randomValues)\r\n .map(val => this.#randomStringGeneratorCharSet.charAt(val % this.#randomStringGeneratorCharSet.length))\r\n .join(``);\r\n }\r\n\r\n generateRandomInteger(min: number, max: number): number {\r\n const randomBuffer = new Uint32Array(1);\r\n crypto.getRandomValues(randomBuffer);\r\n return min + (randomBuffer[0] % (max - min + 1));\r\n }\r\n\r\n generateRandomBytes(length: number): Uint8Array {\r\n return crypto.getRandomValues(new Uint8Array(length));\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webCryptographyProvider.js","sourceRoot":"","sources":["../../../../../src/utils/crypto/web/webCryptographyProvider.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,uBAAuB;IACxC,6BAA6B,GAAG,sCAAsC,CAAC;IAEvE,KAAK,CAAC,SAAS,CAAC,YAAoB,EAAE,IAAgB;QAClD,MAAM,UAAU,GAAG,MAAM,CAAC;QAE1B,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAE/C,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAC7C,KAAK,EACL,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAC5B,EAAE,IAAI,EAAE,QAAQ,EAAE,EAClB,KAAK,EACL,CAAC,YAAY,CAAC,CACjB,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,CAC9C;YACI,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,SAAS;YACf,UAAU;YACV,IAAI,EAAE,SAAS;SAClB,EACD,WAAW,EACX,GAAG,CACN,CAAC;QAEF,OAAO,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,aAAyB;QACxC,MAAM,SAAS,GAAG,sBAAsB,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAEvD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CACrC,KAAK,EACL,QAAQ,EACR,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EACjC,KAAK,EACL,CAAC,MAAM,CAAC,CACX,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEvC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAE9D,OAAO,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAEO,iBAAiB,CAAC,KAAiB;QACvC,IAAI,KAAK,CAAC,MAAM,YAAY,WAAW;YACnC,OAAO,KAAgC,CAAC;QAE5C,OAAO,IAAI,UAAU,CAAC,KAAK,CAA4B,CAAC;IAC5D,CAAC;IAED,oBAAoB,CAAC,MAAc;QAC/B,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;aAC1B,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;aACtG,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,qBAAqB,CAAC,GAAW,EAAE,GAAW;QAC1C,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QACrC,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,mBAAmB,CAAC,MAAc;QAC9B,OAAO,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,CAAC;CACJ","sourcesContent":["import CryptographyProvider from \"../cryptographyProvider.js\";\n\nexport default class WebCryptographyProvider implements CryptographyProvider {\n #randomStringGeneratorCharSet = `abcdefghijklmnopqrstuvwxyz0123456789`;\n\n async deriveKey(userInputKey: string, salt: Uint8Array): Promise<Uint8Array> {\n const iterations = 10_000;\n\n const encoder = new TextEncoder();\n const saltBytes = this.ensureArrayBuffer(salt);\n\n const keyMaterial = await crypto.subtle.importKey(\n `raw`,\n encoder.encode(userInputKey),\n { name: `PBKDF2` },\n false,\n [`deriveBits`],\n );\n\n const derivedBits = await crypto.subtle.deriveBits(\n {\n name: `PBKDF2`,\n salt: saltBytes,\n iterations,\n hash: `SHA-256`,\n },\n keyMaterial,\n 256,\n );\n\n return new Uint8Array(derivedBits);\n }\n\n async generateHmac(encryptionKey: Uint8Array): Promise<Uint8Array> {\n const knownData = `filemail-known-value`;\n const keyBytes = this.ensureArrayBuffer(encryptionKey);\n\n const key = await crypto.subtle.importKey(\n `raw`,\n keyBytes,\n { name: `HMAC`, hash: `SHA-256` },\n false,\n [`sign`],\n );\n\n const encoder = new TextEncoder();\n const data = encoder.encode(knownData);\n\n const signature = await crypto.subtle.sign(`HMAC`, key, data);\n\n return new Uint8Array(signature);\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 generateRandomString(length: number): string {\n const randomValues = crypto.getRandomValues(new Uint32Array(length));\n return Array.from(randomValues)\n .map(val => this.#randomStringGeneratorCharSet.charAt(val % this.#randomStringGeneratorCharSet.length))\n .join(``);\n }\n\n generateRandomInteger(min: number, max: number): number {\n const randomBuffer = new Uint32Array(1);\n crypto.getRandomValues(randomBuffer);\n return min + (randomBuffer[0] % (max - min + 1));\n }\n\n generateRandomBytes(length: number): Uint8Array {\n return crypto.getRandomValues(new Uint8Array(length));\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"simpleDateFormatter.js","sourceRoot":"","sources":["../../../../src/utils/dateAndTime/simpleDateFormatter.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACpC,MAAM,CAAC,sBAAsB,CAAC,IAAmB,EAAE,YAAgC;QAC/E,MAAM,YAAY,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEtE,OAAO,CAAC,YAAY,IAAI,kBAAkB,CAAC;aACtC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC;aACtD,OAAO,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aACxE,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aACjE,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aAClE,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9E,CAAC;CACJ","sourcesContent":["export default class SimpleDateFormatter {\r\n static formatDateAndTimeLocal(date: number | Date, formatString: string | undefined): string {\r\n const dateInstance = typeof date === `number` ? new Date(date) : date;\r\n\r\n return (formatString || `YYYY-MM-DD-hh-mm`)\r\n .replace(/YYYY/, dateInstance.getFullYear().toString())\r\n .replace(/MM/, (dateInstance.getMonth() + 1).toString().padStart(2, `0`))\r\n .replace(/DD/, dateInstance.getDate().toString().padStart(2, `0`))\r\n .replace(/hh/, dateInstance.getHours().toString().padStart(2, `0`))\r\n .replace(/mm/, dateInstance.getMinutes().toString().padStart(2, `0`));\r\n }\r\n}"]}
1
+ {"version":3,"file":"simpleDateFormatter.js","sourceRoot":"","sources":["../../../../src/utils/dateAndTime/simpleDateFormatter.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACpC,MAAM,CAAC,sBAAsB,CAAC,IAAmB,EAAE,YAAgC;QAC/E,MAAM,YAAY,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEtE,OAAO,CAAC,YAAY,IAAI,kBAAkB,CAAC;aACtC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC;aACtD,OAAO,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aACxE,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aACjE,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aAClE,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9E,CAAC;CACJ","sourcesContent":["export default class SimpleDateFormatter {\n static formatDateAndTimeLocal(date: number | Date, formatString: string | undefined): string {\n const dateInstance = typeof date === `number` ? new Date(date) : date;\n\n return (formatString || `YYYY-MM-DD-hh-mm`)\n .replace(/YYYY/, dateInstance.getFullYear().toString())\n .replace(/MM/, (dateInstance.getMonth() + 1).toString().padStart(2, `0`))\n .replace(/DD/, dateInstance.getDate().toString().padStart(2, `0`))\n .replace(/hh/, dateInstance.getHours().toString().padStart(2, `0`))\n .replace(/mm/, dateInstance.getMinutes().toString().padStart(2, `0`));\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"chunkProgressEvent.js","sourceRoot":"","sources":["../../../../src/utils/events/chunkProgressEvent.ts"],"names":[],"mappings":"","sourcesContent":["interface ChunkProgressEvent {\r\n transferredBytesTotal: number,\r\n transferredBytesSinceLastEvent: number\r\n}\r\n\r\nexport default ChunkProgressEvent;"]}
1
+ {"version":3,"file":"chunkProgressEvent.js","sourceRoot":"","sources":["../../../../src/utils/events/chunkProgressEvent.ts"],"names":[],"mappings":"","sourcesContent":["interface ChunkProgressEvent {\n transferredBytesTotal: number,\n transferredBytesSinceLastEvent: number\n}\n\nexport default ChunkProgressEvent;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"eventsEngine.js","sourceRoot":"","sources":["../../../../src/utils/events/eventsEngine.ts"],"names":[],"mappings":"","sourcesContent":["interface EventsEngine {\r\n addEventListener(eventName: string, handler: EventsEngineEventHandler): void,\r\n removeEventListener(eventName: string, handler: EventsEngineEventHandler): void,\r\n emit(eventName: string, arg?: any): void\r\n}\r\n\r\nexport type EventsEngineEventHandler = (arg?: any) => void;\r\n\r\nexport default EventsEngine;"]}
1
+ {"version":3,"file":"eventsEngine.js","sourceRoot":"","sources":["../../../../src/utils/events/eventsEngine.ts"],"names":[],"mappings":"","sourcesContent":["interface EventsEngine {\n addEventListener(eventName: string, handler: EventsEngineEventHandler): void,\n removeEventListener(eventName: string, handler: EventsEngineEventHandler): void,\n emit(eventName: string, arg?: any): void\n}\n\nexport type EventsEngineEventHandler = (arg?: any) => void;\n\nexport default EventsEngine;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"nodeEventsEngine.js","sourceRoot":"","sources":["../../../../../src/utils/events/node/nodeEventsEngine.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAKlC,MAAM,CAAC,OAAO,OAAO,gBAAgB;IAChB,YAAY,GAAiB,IAAI,YAAY,EAAE,CAAC;IAEjE,gBAAgB,CAAC,SAAiB,EAAE,OAAiC;QACjE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,mBAAmB,CAAC,SAAiB,EAAE,OAAiC;QACpE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,SAAiB,EAAE,GAAS;QAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;CACJ","sourcesContent":["import EventEmitter from \"events\";\r\n\r\nimport type EventsEngine from \"../eventsEngine.js\";\r\nimport type { EventsEngineEventHandler } from \"../eventsEngine.js\";\r\n\r\nexport default class NodeEventsEngine implements EventsEngine {\r\n private readonly eventEmitter: EventEmitter = new EventEmitter();\r\n\r\n addEventListener(eventName: string, handler: EventsEngineEventHandler): void {\r\n this.eventEmitter.on(eventName, handler);\r\n }\r\n\r\n removeEventListener(eventName: string, handler: EventsEngineEventHandler): void {\r\n this.eventEmitter.off(eventName, handler);\r\n }\r\n\r\n emit(eventName: string, arg?: any): void {\r\n this.eventEmitter.emit(eventName, arg);\r\n }\r\n}"]}
1
+ {"version":3,"file":"nodeEventsEngine.js","sourceRoot":"","sources":["../../../../../src/utils/events/node/nodeEventsEngine.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAKlC,MAAM,CAAC,OAAO,OAAO,gBAAgB;IAChB,YAAY,GAAiB,IAAI,YAAY,EAAE,CAAC;IAEjE,gBAAgB,CAAC,SAAiB,EAAE,OAAiC;QACjE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,mBAAmB,CAAC,SAAiB,EAAE,OAAiC;QACpE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,SAAiB,EAAE,GAAS;QAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;CACJ","sourcesContent":["import EventEmitter from \"events\";\n\nimport type EventsEngine from \"../eventsEngine.js\";\nimport type { EventsEngineEventHandler } from \"../eventsEngine.js\";\n\nexport default class NodeEventsEngine implements EventsEngine {\n private readonly eventEmitter: EventEmitter = new EventEmitter();\n\n addEventListener(eventName: string, handler: EventsEngineEventHandler): void {\n this.eventEmitter.on(eventName, handler);\n }\n\n removeEventListener(eventName: string, handler: EventsEngineEventHandler): void {\n this.eventEmitter.off(eventName, handler);\n }\n\n emit(eventName: string, arg?: any): void {\n this.eventEmitter.emit(eventName, arg);\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"webEventsEngine.js","sourceRoot":"","sources":["../../../../../src/utils/events/web/webEventsEngine.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,OAAO,OAAO,eAAe;IACf,SAAS,GAAG,IAAI,GAAG,EAAyC,CAAC;IAE9E,gBAAgB,CAAC,SAAiB,EAAE,OAAiC;QACjE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAE7C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,mBAAmB,CAAC,SAAiB,EAAE,OAAiC;QACpE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChD,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,SAAiB,EAAE,GAAS;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChD,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC;CACJ","sourcesContent":["import type EventsEngine from \"../eventsEngine.js\";\r\n\r\nimport type { EventsEngineEventHandler } from \"../eventsEngine.js\";\r\n\r\nexport default class WebEventsEngine implements EventsEngine {\r\n private readonly listeners = new Map<string, Set<EventsEngineEventHandler>>();\r\n\r\n addEventListener(eventName: string, handler: EventsEngineEventHandler): void {\r\n if (!this.listeners.has(eventName))\r\n this.listeners.set(eventName, new Set());\r\n\r\n this.listeners.get(eventName)!.add(handler);\r\n }\r\n\r\n removeEventListener(eventName: string, handler: EventsEngineEventHandler): void {\r\n const listeners = this.listeners.get(eventName);\r\n listeners?.delete(handler);\r\n }\r\n\r\n emit(eventName: string, arg?: any): void {\r\n const listeners = this.listeners.get(eventName);\r\n listeners?.forEach(listener => listener(arg));\r\n }\r\n}"]}
1
+ {"version":3,"file":"webEventsEngine.js","sourceRoot":"","sources":["../../../../../src/utils/events/web/webEventsEngine.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,OAAO,OAAO,eAAe;IACf,SAAS,GAAG,IAAI,GAAG,EAAyC,CAAC;IAE9E,gBAAgB,CAAC,SAAiB,EAAE,OAAiC;QACjE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAE7C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,mBAAmB,CAAC,SAAiB,EAAE,OAAiC;QACpE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChD,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,SAAiB,EAAE,GAAS;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChD,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC;CACJ","sourcesContent":["import type EventsEngine from \"../eventsEngine.js\";\n\nimport type { EventsEngineEventHandler } from \"../eventsEngine.js\";\n\nexport default class WebEventsEngine implements EventsEngine {\n private readonly listeners = new Map<string, Set<EventsEngineEventHandler>>();\n\n addEventListener(eventName: string, handler: EventsEngineEventHandler): void {\n if (!this.listeners.has(eventName))\n this.listeners.set(eventName, new Set());\n\n this.listeners.get(eventName)!.add(handler);\n }\n\n removeEventListener(eventName: string, handler: EventsEngineEventHandler): void {\n const listeners = this.listeners.get(eventName);\n listeners?.delete(handler);\n }\n\n emit(eventName: string, arg?: any): void {\n const listeners = this.listeners.get(eventName);\n listeners?.forEach(listener => listener(arg));\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"chunkStreamProvider.js","sourceRoot":"","sources":["../../../../src/utils/fileSystem/chunkStreamProvider.ts"],"names":[],"mappings":"","sourcesContent":["import type { Writable } from \"stream\";\r\nimport type { ReadableStream as NodeReadableStream } from \"stream/web\";\r\nimport type { PauseSignal } from \"../../uploader/pauseController.js\";\r\n\r\ninterface ChunkStreamProvider {\r\n readonly isReleased: boolean;\r\n readonly chunkStartPosition: number;\r\n readonly chunkLengthInBytes: number;\r\n\r\n getMd5Checksum(format: `hex` | `base64`, pauseSignal?: PauseSignal, abortSignal?: AbortSignal): Promise<string>;\r\n getChunkReadStream(pauseSignal?: PauseSignal, abortSignal?: AbortSignal): Promise<ReadableStream | NodeReadableStream>;\r\n getChunkBlob(): Promise<Blob>;\r\n getChunkWriteStream(): Promise<{ fileStream: Writable, decipherStream?: Writable }>;\r\n release(): Promise<void>;\r\n}\r\n\r\nexport type ChunkStreamProviderEncryptionData = {\r\n iv: Uint8Array,\r\n key: Uint8Array,\r\n}\r\n\r\nexport default ChunkStreamProvider;"]}
1
+ {"version":3,"file":"chunkStreamProvider.js","sourceRoot":"","sources":["../../../../src/utils/fileSystem/chunkStreamProvider.ts"],"names":[],"mappings":"","sourcesContent":["import type { Writable } from \"stream\";\nimport type { ReadableStream as NodeReadableStream } from \"stream/web\";\nimport type { PauseSignal } from \"../../uploader/pauseController.js\";\n\ninterface ChunkStreamProvider {\n readonly isReleased: boolean;\n readonly chunkStartPosition: number;\n readonly chunkLengthInBytes: number;\n\n getMd5Checksum(format: `hex` | `base64`, pauseSignal?: PauseSignal, abortSignal?: AbortSignal): Promise<string>;\n getChunkReadStream(pauseSignal?: PauseSignal, abortSignal?: AbortSignal): Promise<ReadableStream | NodeReadableStream>;\n getChunkBlob(): Promise<Blob>;\n getChunkWriteStream(): Promise<{ fileStream: Writable, decipherStream?: Writable }>;\n release(): Promise<void>;\n}\n\nexport type ChunkStreamProviderEncryptionData = {\n iv: Uint8Array,\n key: Uint8Array,\n}\n\nexport default ChunkStreamProvider;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"chunkStreamProviderFactory.js","sourceRoot":"","sources":["../../../../src/utils/fileSystem/chunkStreamProviderFactory.ts"],"names":[],"mappings":"","sourcesContent":["import type ChunkStreamProvider from \"./chunkStreamProvider.js\";\r\nimport type { ChunkStreamProviderEncryptionData } from \"./chunkStreamProvider.js\";\r\n\r\ninterface ChunkStreamProviderFactory<T extends string | File> {\r\n provide(file: T, start: number, size: number, encryptionData?: ChunkStreamProviderEncryptionData): ChunkStreamProvider;\r\n}\r\n\r\nexport default ChunkStreamProviderFactory;"]}
1
+ {"version":3,"file":"chunkStreamProviderFactory.js","sourceRoot":"","sources":["../../../../src/utils/fileSystem/chunkStreamProviderFactory.ts"],"names":[],"mappings":"","sourcesContent":["import type ChunkStreamProvider from \"./chunkStreamProvider.js\";\nimport type { ChunkStreamProviderEncryptionData } from \"./chunkStreamProvider.js\";\n\ninterface ChunkStreamProviderFactory<T extends string | File> {\n provide(file: T, start: number, size: number, encryptionData?: ChunkStreamProviderEncryptionData): ChunkStreamProvider;\n}\n\nexport default ChunkStreamProviderFactory;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fileDetails.js","sourceRoot":"","sources":["../../../../src/utils/fileSystem/fileDetails.ts"],"names":[],"mappings":"","sourcesContent":["interface FileDetails {\r\n readonly externalId: string | number;\r\n readonly fileSizeInBytes: number;\r\n readonly fileName: string;\r\n readonly fileDestinationPathInTransfer: string;\r\n}\r\n\r\nexport default FileDetails;"]}
1
+ {"version":3,"file":"fileDetails.js","sourceRoot":"","sources":["../../../../src/utils/fileSystem/fileDetails.ts"],"names":[],"mappings":"","sourcesContent":["interface FileDetails {\n readonly externalId: string | number;\n readonly fileSizeInBytes: number;\n readonly fileName: string;\n readonly fileDestinationPathInTransfer: string;\n}\n\nexport default FileDetails;"]}
@@ -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\";\r\nimport type ParsedPath from \"./parsedPath.js\";\r\n\r\ninterface FileSystemService {\r\n writeFile(filePath: string, data: string, encoding?: BufferEncoding, abort?: AbortSignal): unknown;\r\n createFolder(folderPath: string): Promise<void>;\r\n getAllFilePaths(folderPath: string): Promise<Array<string>>;\r\n getAllFilePathsRecursive(folderPath: string): Promise<Array<string>>;\r\n readFileAsString(filePath: string, encoding?: BufferEncoding, abort?: AbortSignal): Promise<string>;\r\n pathJoin(...paths: Array<string>): string;\r\n deleteFolder(folderPath: string): Promise<boolean>;\r\n folderIsEmpty(folderPath: string): Promise<boolean>;\r\n deleteFile(filePath: string): Promise<boolean>;\r\n /**\r\n * Creates the file specified by **filePath**. Returns a bool flag whether the file was physically created or overwritten.\r\n * @param filePath - full path of the file to create\r\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.\r\n */\r\n createFile(filePath: string, overwriteExisting: boolean): Promise<boolean>;\r\n pathExists(thePath: string, checkReadWriteAccess?: boolean): Promise<boolean>;\r\n getFileSize(filePath: string): Promise<number>;\r\n truncateFile(filePath: string, newSize: number): Promise<void>;\r\n renameFile(filePath: string, newPath: string): Promise<void>;\r\n getAvailableDiskSpace(path: string): Promise<bigint>;\r\n parseFilePath(filePath: string): ParsedPath;\r\n formatFilePath(parsedPath: ParsedPath): string;\r\n replaceFilenameInPath(filePath: string, newFileName: string): string;\r\n\r\n fileErrorToDownloadErrorCode(error: Error): DownloadErrorCode | undefined;\r\n}\r\n\r\nexport default FileSystemService;\r\n"]}
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 {\r\n constructor(message?: string, options?: ErrorOptions) {\r\n super(message, options);\r\n this.name = `FsError`;\r\n }\r\n}"]}
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\";\r\n\r\nimport type ChunkStreamProvider from \"../chunkStreamProvider.js\";\r\nimport type ChunkStreamProviderFactory from \"../chunkStreamProviderFactory.js\";\r\nimport type { ChunkStreamProviderEncryptionData } from \"../chunkStreamProvider.js\";\r\n\r\nexport default class NodeChunkStreamProviderFactory implements ChunkStreamProviderFactory<string> {\r\n provide(file: string, start: number, size: number, encryptionData: ChunkStreamProviderEncryptionData | undefined): ChunkStreamProvider {\r\n return new NodeChunkStreamProvider(file, start, size, encryptionData);\r\n }\r\n}"]}
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';\r\nimport fs from 'fs/promises';\r\nimport { constants as fsConsts } from 'fs';\r\n\r\nimport FsError from '../fsError.js';\r\nimport NodeChunkStreamProvider from './nodeChunkStreamProvider.js';\r\n\r\nimport type FileDetails from \"../fileDetails.js\";\r\nimport type ChunkStreamProvider from '../chunkStreamProvider.js';\r\n\r\nexport default class NodeFileDetails implements FileDetails {\r\n readonly externalId: string | number;\r\n readonly fileFullPath: string;\r\n readonly fileSizeInBytes: number;\r\n readonly fileName: string;\r\n readonly fileDestinationPathInTransfer: string;\r\n\r\n private constructor(externalId: string | number, fileFullPath: string, fileDestinationPathInTransfer: string, fileSize: number) {\r\n this.externalId = externalId;\r\n this.fileFullPath = fileFullPath;\r\n this.fileSizeInBytes = fileSize;\r\n this.fileName = path.basename(fileFullPath);\r\n this.fileDestinationPathInTransfer = fileDestinationPathInTransfer;\r\n }\r\n\r\n static async create(externalId: string | number, fileFullPath: string, fileDestinationPathInTransfer: string): Promise<NodeFileDetails> {\r\n const fileSize = await this.getFileSize(fileFullPath);\r\n\r\n return new NodeFileDetails(externalId, fileFullPath, fileDestinationPathInTransfer, fileSize);\r\n }\r\n\r\n private static async getFileSize(fullFilePath: string): Promise<number> {\r\n let fileHandle: fs.FileHandle | null = null;\r\n\r\n try {\r\n fileHandle = await fs.open(fullFilePath, fsConsts.O_RDONLY);\r\n\r\n const fileStats = await fileHandle.stat();\r\n\r\n return fileStats.size;\r\n }\r\n catch (error) {\r\n throw new FsError(`Can't read file: ${fullFilePath}`, { cause: error as Error });\r\n }\r\n finally {\r\n fileHandle?.close();\r\n }\r\n }\r\n\r\n createChunkStreamProvider(startPosition: number, sizeInBytes: number): ChunkStreamProvider { // TODO: Remove this after all customers moved to >= 4.7.2\r\n return new NodeChunkStreamProvider(this.fileFullPath, startPosition, sizeInBytes, undefined);\r\n }\r\n}"]}
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":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,iBAAiB,MAAM,+CAA+C,CAAC;AAI9E,MAAM,CAAC,OAAO,OAAO,qBAAqB;IACtC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAc,EAAE,WAA0B;QACrE,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACxC,4CAA4C;YAC5C,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE;gBAClC,4CAA4C;gBAC5C,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;;gBAE/C,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;IACL,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,MAAc;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACtC,OAAO,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,UAAkB;QAC7C,MAAM,KAAK,GAAG,IAAI,KAAK,EAAU,CAAC;QAClC,MAAM,qBAAqB,CAAC,iBAAiB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACjE,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,IAAY,EAAE,WAA2B,MAAM,EAAE,QAAiC,SAAS;QACzH,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,UAAkB;QACpC,OAAO,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,QAAgB,EAAE,WAA2B,MAAM,EAAE,QAAiC,SAAS;QAClH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,oBAA8B;QAC5D,IAAI,CAAC;YACD,sCAAsC;YACtC,MAAM,IAAI,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;YAChG,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC/B,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,CAAC;YACH,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,UAAkB;QACjC,IAAI,qBAAqB,CAAC,gBAAgB,CAAC,UAAU,CAAC;YAClD,wFAAwF;YACxF,OAAO;QAEX,IAAI,CAAC;YACD,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,GAAG,EAAE,CAAC;YACT,MAAM,MAAM,GAAG,GAAY,CAAC;YAE5B,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;gBAClC,8DAA8D;gBAC9D,OAAO;YAEX,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,MAAc;QAC3C,MAAM,YAAY,GAAa,EAAE,CAAC;QAElC,IAAI,aAAa,GAAG,MAAM,CAAC;QAE3B,OAAO,IAAI,EAAE,CAAC;YACV,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAEjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAE3C,IAAI,MAAM,KAAK,aAAa;gBACxB,MAAM;YAEV,aAAa,GAAG,MAAM,CAAC;QAC3B,CAAC;QAED,YAAY,CAAC,OAAO,EAAE,CAAC;QAEvB,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC7B,IAAI,qBAAqB,CAAC,gBAAgB,CAAC,GAAG,CAAC;gBAC3C,SAAS,CAAC,wFAAwF;YACtG,IAAI,CAAC;gBACD,4CAA4C;gBAC5C,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;YACD,OAAO,GAAQ,EAAE,CAAC;gBACd,IAAI,GAAG,EAAE,IAAI,KAAK,QAAQ,EAAE,8DAA8D;oBACtF,MAAM,GAAG,CAAC;YAClB,CAAC;QACL,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAgB,EAAE,iBAA0B;QACzD,uDAAuD;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAEhC,4BAA4B;QAC5B,2GAA2G;QAC3G,sGAAsG;QACtG,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAChD,IAAI,MAAM,GAAyB,IAAI,CAAC;QACxC,IAAI,CAAC;YACD,IAAI,CAAC;gBACD,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC/C,CAAC;YACD,OAAO,GAAG,EAAE,CAAC;gBACT,MAAM,OAAO,GAAG,GAAY,CAAC;gBAC7B,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ;oBACpC,OAAO,KAAK,CAAC;gBAEjB,MAAM,GAAG,CAAC;YACd,CAAC;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;gBACO,CAAC;YACL,IAAI,MAAM,KAAK,IAAI;gBACf,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC7B,IAAI,CAAC;YACD,MAAM,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;YACtB,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,CAAC;YACH,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,UAAkB;QAClC,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9C,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,UAAkB;QACjC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,QAAgB;QAC9B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAgB,EAAE,IAAY;QAC7C,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,OAAe;QAC7C,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,WAAmB;QAC3C,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;IACtC,CAAC;IAED,QAAQ,CAAC,GAAG,KAAoB;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,4BAA4B,CAAC,KAAY;QACrC,IAAI,qBAAqB,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,QAAQ;YAC3D,OAAO,iBAAiB,CAAC,QAAQ,CAAC;QAEtC,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,KAAc;QACnC,IAAI,OAAO,GAAG,KAAuD,CAAC;QAEtE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;YAChD,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;gBAChC,OAAO,OAAO,CAAC,IAAI,CAAC;YAExB,OAAO,GAAG,OAAO,CAAC,KAAuD,CAAC;QAC9E,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,aAAa,CAAC,QAAgB;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,cAAc,CAAC,UAAsB;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAED,qBAAqB,CAAC,QAAgB,EAAE,WAAmB;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,MAAM,CAAC;YACf,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,IAAI,EAAE,WAAW;SACpB,CAAC,CAAC;IACP,CAAC;CACJ","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 {\r\n root?: string | undefined,\r\n dir?: string | undefined,\r\n base?: string | undefined,\r\n ext?: string | undefined,\r\n name?: string | undefined,\r\n}\r\n\r\nexport default ParsedPath;\r\n"]}
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":"AAAA,MAAM,uBAAuB,GAAG,GAAG,CAAC;AACpC,MAAM,MAAM,GAAG,mCAAmC,CAAC;AACnD,MAAM,kBAAkB,GAAG,MAAM,GAAG,EAAE,CAAC;AAEvC,MAAM,CAAC,OAAO,OAAO,uBAAuB;IACxC,kBAAkB,CAAS;IAC3B,EAAE,CAAa;IACf,GAAG,CAAa;IAChB,SAAS,CAAO;IAEhB,YAAY,kBAA0B,EAAE,EAAc,EAAE,GAAe,EAAE,SAAe;QACpF,IAAI,kBAAkB,GAAG,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC9D,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAChD,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACjD,IAAI,CAAC,SAAS;YACV,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAEpD,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,WAAW;QACb,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QACvD,MAAM,eAAe,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;QAEpD,MAAM,sBAAsB,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,uBAAuB,CAAC;QACzF,MAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,EAAE,sBAAsB,CAAC,CAAC;QACpF,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAE3D,2FAA2F;QAC3F,sFAAsF;QACtF,6CAA6C;QAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAEjF,MAAM,0BAA0B,GAAG,IAAI,UAAU,CAAC,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3F,0BAA0B,CAAC,GAAG,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;QAEhE,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QAE1G,MAAM,mBAAmB,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CACnD,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,EACvD,SAAS,EACT,0BAA0B,CAAC,MAAM,CACpC,CAAC;QAEF,iCAAiC;QACjC,MAAM,cAAc,GAAG,mBAAmB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAEjE,OAAO,IAAI,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IACtC,CAAC;IAEO,iBAAiB,CAAC,KAAiB;QACvC,IAAI,KAAK,CAAC,MAAM,YAAY,WAAW;YACnC,OAAO,KAAgC,CAAC;QAE5C,OAAO,IAAI,UAAU,CAAC,KAAK,CAA4B,CAAC;IAC5D,CAAC;IAEO,uBAAuB,CAAC,UAAsB,EAAE,qBAA6B;QACjF,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAE3C,QAAQ,IAAI,qBAAqB,CAAC;QAElC,IAAI,QAAQ,GAAG,MAAM;YACjB,QAAQ,IAAI,kBAAkB,CAAC;QAEnC,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAEO,UAAU,CAAC,EAAc;QAC7B,IAAI,GAAG,GAAG,EAAE,CAAC;QAEb,KAAK,MAAM,IAAI,IAAI,EAAE;YACjB,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAE9C,OAAO,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IAC9B,CAAC;IAEO,UAAU,CAAC,GAAW;QAC1B,MAAM,QAAQ,GAAG,EAAE,CAAC;QAEpB,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACzD,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;QAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE;YAC7B,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEtD,OAAO,EAAE,CAAC;IACd,CAAC;CACJ","sourcesContent":["const AES_BLOCK_SIZE_IN_BYTES = 16n;\r\nconst IV_MAX = 0xffffffffffffffffffffffffffffffffn;\r\nconst IV_OVERFLOW_MODULO = IV_MAX + 1n;\r\n\r\nexport default class WebChunkStreamEncrypter {\r\n chunkStartPosition: number;\r\n iv: Uint8Array;\r\n key: Uint8Array;\r\n chunkBlob: Blob;\r\n\r\n constructor(chunkStartPosition: number, iv: Uint8Array, key: Uint8Array, chunkBlob: Blob) {\r\n if (chunkStartPosition < 0)\r\n throw new Error(`Chunk start position can't be negative`);\r\n if (iv.length !== 16)\r\n throw new Error(`IV must be 16 bytes long`);\r\n if (key.length !== 32)\r\n throw new Error(`Key must be 32 bytes long`);\r\n if (!chunkBlob)\r\n throw new Error(`Chunk blob has to be defined`);\r\n\r\n this.chunkStartPosition = chunkStartPosition;\r\n this.iv = iv;\r\n this.key = key;\r\n this.chunkBlob = chunkBlob;\r\n }\r\n\r\n async encryptBlob() {\r\n const chunkBuffer = await this.chunkBlob.arrayBuffer();\r\n const chunkBytesArray = new Uint8Array(chunkBuffer);\r\n\r\n const fullAesBlocksIncrement = BigInt(this.chunkStartPosition) / AES_BLOCK_SIZE_IN_BYTES;\r\n const incrementedIv = this.incrementIvByFullBlocks(this.iv, fullAesBlocksIncrement);\r\n const keyBytes = this.ensureArrayBuffer(this.key);\r\n const counterBytes = this.ensureArrayBuffer(incrementedIv);\r\n\r\n // AES works on blocks but it might happen that our chunk starts within an encryption block\r\n // so we need to append some zeros at the beginning of the block and do the encryption\r\n // and then discard these leading extra bytes\r\n const aesBlockOffset = this.chunkStartPosition % Number(AES_BLOCK_SIZE_IN_BYTES);\r\n\r\n const chunkDataPrefixedWithZeros = new Uint8Array(aesBlockOffset + chunkBytesArray.length);\r\n chunkDataPrefixedWithZeros.set(chunkBytesArray, aesBlockOffset);\r\n\r\n const cryptoKey = await crypto.subtle.importKey(`raw`, keyBytes, { name: `AES-CTR` }, false, [`encrypt`]);\r\n\r\n const encryptedDataBuffer = await crypto.subtle.encrypt(\r\n { name: `AES-CTR`, counter: counterBytes, length: 128 },\r\n cryptoKey,\r\n chunkDataPrefixedWithZeros.buffer,\r\n );\r\n\r\n // Remove the leading extra bytes\r\n const encryptedChunk = encryptedDataBuffer.slice(aesBlockOffset);\r\n\r\n return new Blob([encryptedChunk]);\r\n }\r\n\r\n private ensureArrayBuffer(value: Uint8Array): Uint8Array<ArrayBuffer> {\r\n if (value.buffer instanceof ArrayBuffer)\r\n return value as Uint8Array<ArrayBuffer>;\r\n\r\n return new Uint8Array(value) as Uint8Array<ArrayBuffer>;\r\n }\r\n\r\n private incrementIvByFullBlocks(originalIv: Uint8Array, fullBlocksToIncrement: bigint): Uint8Array {\r\n let ivBigInt = this.ivToBigInt(originalIv);\r\n\r\n ivBigInt += fullBlocksToIncrement;\r\n\r\n if (ivBigInt > IV_MAX)\r\n ivBigInt %= IV_OVERFLOW_MODULO;\r\n\r\n return this.bigIntToIV(ivBigInt);\r\n }\r\n\r\n private ivToBigInt(iv: Uint8Array): bigint {\r\n let hex = ``;\r\n\r\n for (const byte of iv)\r\n hex += byte.toString(16).padStart(2, `0`);\r\n\r\n return BigInt(`0x${hex}`);\r\n }\r\n\r\n private bigIntToIV(num: bigint): Uint8Array {\r\n const ivLength = 16;\r\n\r\n const hex = num.toString(16).padStart(ivLength * 2, `0`);\r\n const iv = new Uint8Array(ivLength);\r\n\r\n for (let i = 0; i < ivLength; i++)\r\n iv[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);\r\n\r\n return iv;\r\n }\r\n}"]}
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\";\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\nimport WebChunkStreamEncrypter from \"./webChunkStreamEncrypter.js\";\r\n\r\nexport default class WebChunkStreamProvider implements ChunkStreamProvider {\r\n readonly chunkStartPosition: number;\r\n readonly chunkLengthInBytes: number;\r\n\r\n readonly #encryptionData?: ChunkStreamProviderEncryptionData;\r\n readonly #file: File;\r\n\r\n get isReleased(): boolean {\r\n return true;\r\n }\r\n\r\n constructor(file: File, chunkStartPosition: number, chunkLengthInBytes: number, encryptionData: ChunkStreamProviderEncryptionData | undefined) {\r\n this.throwIfEncryptionDataIsNotValid(encryptionData);\r\n\r\n this.#file = file;\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n async getMd5Checksum(format: `hex` | `base64`, _pauseSignal?: PauseSignal, _abortSignal?: AbortSignal): Promise<string> {\r\n try {\r\n const blob = await this.getChunkBlob();\r\n const buffer = await blob.arrayBuffer();\r\n\r\n const hashHex = SparkMD5.ArrayBuffer.hash(buffer);\r\n\r\n if (format === `hex`)\r\n return hashHex;\r\n\r\n return btoa(hashHex.match(/\\w{2}/g)!.map(byte => String.fromCharCode(parseInt(byte, 16))).join(``));\r\n }\r\n catch (error) {\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n async getChunkReadStream(_pauseSignal?: PauseSignal, _abortSignal?: AbortSignal): Promise<ReadableStream> {\r\n throw new Error(`This is not implemented for Web`);\r\n }\r\n\r\n async getChunkBlob(): Promise<Blob> {\r\n try {\r\n if (!this.isReleased)\r\n await this.release();\r\n\r\n const chunkBlob = this.#file.slice(this.chunkStartPosition, this.getChunkEndPosition() + 1);\r\n\r\n if (!this.#encryptionData || chunkBlob.size === 0)\r\n return chunkBlob;\r\n\r\n return await new WebChunkStreamEncrypter(this.chunkStartPosition, this.#encryptionData.iv, this.#encryptionData.key, chunkBlob).encryptBlob();\r\n }\r\n catch (error) {\r\n if (!this.isReleased)\r\n await this.release();\r\n\r\n throw new FsError(`CreatingFileChunkBlobException`, { cause: error as Error });\r\n }\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<any> {\r\n throw new Error(`This is not implemented for Web`);\r\n }\r\n\r\n async release(): Promise<void> {\r\n try {\r\n if (this.isReleased)\r\n // eslint-disable-next-line no-useless-return\r\n return;\r\n }\r\n catch {\r\n // ignore\r\n }\r\n }\r\n}"]}
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\";\r\n\r\nimport type ChunkStreamProvider from \"../chunkStreamProvider.js\";\r\nimport type ChunkStreamProviderFactory from \"../chunkStreamProviderFactory.js\";\r\nimport type { ChunkStreamProviderEncryptionData } from \"../chunkStreamProvider.js\";\r\n\r\nexport default class WebChunkStreamProviderFactory implements ChunkStreamProviderFactory<File> {\r\n provide(file: File, start: number, size: number, encryptionData: ChunkStreamProviderEncryptionData | undefined): ChunkStreamProvider {\r\n return new WebChunkStreamProvider(file, start, size, encryptionData);\r\n }\r\n}"]}
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\";\r\n\r\nexport default class WebFileDetails implements FileDetails {\r\n readonly externalId: string | number;\r\n readonly file: File;\r\n readonly fileSizeInBytes: number;\r\n readonly fileName: string;\r\n readonly fileDestinationPathInTransfer: string;\r\n\r\n constructor(externalId: string | number, file: File, fileDestinationPathInTransfer: string) {\r\n this.externalId = externalId;\r\n this.file = file;\r\n this.fileSizeInBytes = file.size;\r\n this.fileName = file.name;\r\n this.fileDestinationPathInTransfer = fileDestinationPathInTransfer;\r\n }\r\n}"]}
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}"]}