filemail-sdk 10.4.0 → 10.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) 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.d.ts.map +1 -1
  17. package/dist/src/autoDownloader/factory/nodeAutoDownloaderFactory.js +1 -0
  18. package/dist/src/autoDownloader/factory/nodeAutoDownloaderFactory.js.map +1 -1
  19. package/dist/src/autoDownloader/factory/nodeAutoDownloaderFactoryOptions.d.ts +1 -0
  20. package/dist/src/autoDownloader/factory/nodeAutoDownloaderFactoryOptions.d.ts.map +1 -1
  21. package/dist/src/autoDownloader/factory/nodeAutoDownloaderFactoryOptions.js.map +1 -1
  22. package/dist/src/autoDownloader/newInboxTransfersRetriever/newInboxTransfer.js.map +1 -1
  23. package/dist/src/autoDownloader/newInboxTransfersRetriever/newInboxTransfersRetriever.js.map +1 -1
  24. package/dist/src/autoDownloader/node/nodeAutoDownloaderStateSerializer.js.map +1 -1
  25. package/dist/src/autoDownloader/node/nodeTransferDownloaderFactory.js.map +1 -1
  26. package/dist/src/autoDownloader/state/autoDownloaderRecoverableState.js.map +1 -1
  27. package/dist/src/autoDownloader/state/autoDownloaderState.js.map +1 -1
  28. package/dist/src/autoDownloader/state/autoDownloaderStateRecoverableTransfer.js.map +1 -1
  29. package/dist/src/autoDownloader/state/autoDownloaderStateRunningTransfer.js.map +1 -1
  30. package/dist/src/autoDownloader/state/autoDownloaderStateSnapshot.js.map +1 -1
  31. package/dist/src/autoDownloader/transferDownloaderFactory.js.map +1 -1
  32. package/dist/src/autoDownloader/transferHandler/autoDownloaderNewTransferHandler.js.map +1 -1
  33. package/dist/src/autoDownloader/transferHandler/autoDownloaderRecoverableTransferHandler.js.map +1 -1
  34. package/dist/src/autoDownloader/transferHandler/autoDownloaderTransferHandlerBase.js.map +1 -1
  35. package/dist/src/client/downloader/downloaderCore.d.ts +2 -1
  36. package/dist/src/client/downloader/downloaderCore.d.ts.map +1 -1
  37. package/dist/src/client/downloader/downloaderCore.js +19 -9
  38. package/dist/src/client/downloader/downloaderCore.js.map +1 -1
  39. package/dist/src/client/downloader/node/nodeTransferDownloader.d.ts.map +1 -1
  40. package/dist/src/client/downloader/node/nodeTransferDownloader.js +4 -2
  41. package/dist/src/client/downloader/node/nodeTransferDownloader.js.map +1 -1
  42. package/dist/src/client/downloader/transferDownloader.js.map +1 -1
  43. package/dist/src/client/environmentVariables.js.map +1 -1
  44. package/dist/src/client/healthMonitor/events/eventArgs/healthMonitorHealthyEventArgs.js.map +1 -1
  45. package/dist/src/client/healthMonitor/events/eventArgs/healthMonitorUnhealthyEventArgs.js.map +1 -1
  46. package/dist/src/client/healthMonitor/events/transferHealthMonitorEvent.js.map +1 -1
  47. package/dist/src/client/healthMonitor/onlineChecker/nodeOnlineChecker.js.map +1 -1
  48. package/dist/src/client/healthMonitor/onlineChecker/onlineChecker.js.map +1 -1
  49. package/dist/src/client/healthMonitor/onlineChecker/webOnlineChecker.js.map +1 -1
  50. package/dist/src/client/healthMonitor/transferDownloaderHealthMonitor.js.map +1 -1
  51. package/dist/src/client/healthMonitor/transferHealthMonitorBase.js.map +1 -1
  52. package/dist/src/client/healthMonitor/transferUploaderHealthMonitor.js.map +1 -1
  53. package/dist/src/client/loggers/dummyLogger.js.map +1 -1
  54. package/dist/src/client/loggers/logger.js.map +1 -1
  55. package/dist/src/client/loggers/utils/logHealthyStatus.js.map +1 -1
  56. package/dist/src/client/node/nodeFileDetailsProvider.js.map +1 -1
  57. package/dist/src/client/uploader/node/nodeTransferUploader.d.ts.map +1 -1
  58. package/dist/src/client/uploader/node/nodeTransferUploader.js +10 -4
  59. package/dist/src/client/uploader/node/nodeTransferUploader.js.map +1 -1
  60. package/dist/src/client/uploader/transferUploader.js.map +1 -1
  61. package/dist/src/client/uploader/transferUploaderBase.js +1 -1
  62. package/dist/src/client/uploader/transferUploaderBase.js.map +1 -1
  63. package/dist/src/client/uploader/transferUploaderConfig.js.map +1 -1
  64. package/dist/src/client/uploader/utils/uploaderUtils.js.map +1 -1
  65. package/dist/src/client/uploader/web/webTransferUploader.d.ts +2 -2
  66. package/dist/src/client/uploader/web/webTransferUploader.d.ts.map +1 -1
  67. package/dist/src/client/uploader/web/webTransferUploader.js +7 -2
  68. package/dist/src/client/uploader/web/webTransferUploader.js.map +1 -1
  69. package/dist/src/client/uploader/web/webTransferUploaderConfig.d.ts +7 -0
  70. package/dist/src/client/uploader/web/webTransferUploaderConfig.d.ts.map +1 -0
  71. package/dist/src/client/uploader/web/webTransferUploaderConfig.js +2 -0
  72. package/dist/src/client/uploader/web/webTransferUploaderConfig.js.map +1 -0
  73. package/dist/src/downloader/api/fileServerDownloadClient.d.ts +2 -2
  74. package/dist/src/downloader/api/fileServerDownloadClient.d.ts.map +1 -1
  75. package/dist/src/downloader/api/fileServerDownloadClient.js.map +1 -1
  76. package/dist/src/downloader/api/fileServerDownloadStatusClient.d.ts +6 -0
  77. package/dist/src/downloader/api/fileServerDownloadStatusClient.d.ts.map +1 -0
  78. package/dist/src/downloader/api/fileServerDownloadStatusClient.js +2 -0
  79. package/dist/src/downloader/api/fileServerDownloadStatusClient.js.map +1 -0
  80. package/dist/src/downloader/api/node/nodeFileServerDownloadClient.d.ts.map +1 -1
  81. package/dist/src/downloader/api/node/nodeFileServerDownloadClient.js +8 -6
  82. package/dist/src/downloader/api/node/nodeFileServerDownloadClient.js.map +1 -1
  83. package/dist/src/downloader/api/node/nodeFileServerDownloadStatusClient.d.ts +10 -0
  84. package/dist/src/downloader/api/node/nodeFileServerDownloadStatusClient.d.ts.map +1 -0
  85. package/dist/src/downloader/api/node/nodeFileServerDownloadStatusClient.js +39 -0
  86. package/dist/src/downloader/api/node/nodeFileServerDownloadStatusClient.js.map +1 -0
  87. package/dist/src/downloader/chunkDownloader.d.ts +3 -2
  88. package/dist/src/downloader/chunkDownloader.d.ts.map +1 -1
  89. package/dist/src/downloader/chunkDownloader.js +6 -3
  90. package/dist/src/downloader/chunkDownloader.js.map +1 -1
  91. package/dist/src/downloader/downloadFolderResolver.js.map +1 -1
  92. package/dist/src/downloader/downloadLogger.js.map +1 -1
  93. package/dist/src/downloader/downloadOptions.d.ts +5 -0
  94. package/dist/src/downloader/downloadOptions.d.ts.map +1 -1
  95. package/dist/src/downloader/downloadOptions.js +5 -0
  96. package/dist/src/downloader/downloadOptions.js.map +1 -1
  97. package/dist/src/downloader/downloadStatus/downloadFileChunkProgress.js.map +1 -1
  98. package/dist/src/downloader/downloadStatus/downloadFileProgress.js.map +1 -1
  99. package/dist/src/downloader/downloadStatus/downloadFilePromise.js.map +1 -1
  100. package/dist/src/downloader/downloadStatus/downloadState.js.map +1 -1
  101. package/dist/src/downloader/downloadTracker.d.ts +2 -1
  102. package/dist/src/downloader/downloadTracker.d.ts.map +1 -1
  103. package/dist/src/downloader/downloadTracker.js +5 -4
  104. package/dist/src/downloader/downloadTracker.js.map +1 -1
  105. package/dist/src/downloader/dtos/downloadCommand.js.map +1 -1
  106. package/dist/src/downloader/dtos/downloadError.js.map +1 -1
  107. package/dist/src/downloader/dtos/downloadErrorCode.js.map +1 -1
  108. package/dist/src/downloader/dtos/downloadEvent.js.map +1 -1
  109. package/dist/src/downloader/dtos/downloadFileChunkInfo.js.map +1 -1
  110. package/dist/src/downloader/dtos/downloadFileInfo.js.map +1 -1
  111. package/dist/src/downloader/dtos/downloadFilesCommand.js.map +1 -1
  112. package/dist/src/downloader/dtos/downloadInfo.js.map +1 -1
  113. package/dist/src/downloader/dtos/downloadRegistrationMode.d.ts +2 -1
  114. package/dist/src/downloader/dtos/downloadRegistrationMode.d.ts.map +1 -1
  115. package/dist/src/downloader/dtos/downloadRegistrationMode.js +1 -0
  116. package/dist/src/downloader/dtos/downloadRegistrationMode.js.map +1 -1
  117. package/dist/src/downloader/dtos/downloadTrackerFileInfo.js.map +1 -1
  118. package/dist/src/downloader/dtos/downloadTrackerFileProgressInfo.js.map +1 -1
  119. package/dist/src/downloader/dtos/downloadTrackerProgressInfo.js.map +1 -1
  120. package/dist/src/downloader/dtos/downloadTrackingMetadata.d.ts +2 -0
  121. package/dist/src/downloader/dtos/downloadTrackingMetadata.d.ts.map +1 -1
  122. package/dist/src/downloader/dtos/downloadTrackingMetadata.js.map +1 -1
  123. package/dist/src/downloader/dtos/downloaderRestoredState.js.map +1 -1
  124. package/dist/src/downloader/eventArgs/chunkDownloadEventArgs.js.map +1 -1
  125. package/dist/src/downloader/eventArgs/chunkDownloadFailedEventArgs.js.map +1 -1
  126. package/dist/src/downloader/eventArgs/downloadCompletedEventArgs.js.map +1 -1
  127. package/dist/src/downloader/eventArgs/downloadEventArgs.js.map +1 -1
  128. package/dist/src/downloader/eventArgs/downloadMetadataDeterminedEventArgs.js.map +1 -1
  129. package/dist/src/downloader/eventArgs/downloadPauseEventArgs.js.map +1 -1
  130. package/dist/src/downloader/eventArgs/downloadTrackingFailedEventArgs.js.map +1 -1
  131. package/dist/src/downloader/eventArgs/fileDownloadEventArgs.js.map +1 -1
  132. package/dist/src/downloader/eventArgs/fileDownloadFailedEventArgs.js.map +1 -1
  133. package/dist/src/downloader/filesDownloader.d.ts +2 -1
  134. package/dist/src/downloader/filesDownloader.d.ts.map +1 -1
  135. package/dist/src/downloader/filesDownloader.js +30 -2
  136. package/dist/src/downloader/filesDownloader.js.map +1 -1
  137. package/dist/src/downloader/filesPreparer.js.map +1 -1
  138. package/dist/src/downloader/md5Provider/downloaderChunkMD5Provider.d.ts +6 -0
  139. package/dist/src/downloader/md5Provider/downloaderChunkMD5Provider.d.ts.map +1 -0
  140. package/dist/src/downloader/md5Provider/downloaderChunkMD5Provider.js +2 -0
  141. package/dist/src/downloader/md5Provider/downloaderChunkMD5Provider.js.map +1 -0
  142. package/dist/src/downloader/md5Provider/downloaderChunkMD5ProviderFactory.d.ts +7 -0
  143. package/dist/src/downloader/md5Provider/downloaderChunkMD5ProviderFactory.d.ts.map +1 -0
  144. package/dist/src/downloader/md5Provider/downloaderChunkMD5ProviderFactory.js +2 -0
  145. package/dist/src/downloader/md5Provider/downloaderChunkMD5ProviderFactory.js.map +1 -0
  146. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5Provider.d.ts +10 -0
  147. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5Provider.d.ts.map +1 -0
  148. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5Provider.js +36 -0
  149. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5Provider.js.map +1 -0
  150. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5ProviderFactory.d.ts +10 -0
  151. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5ProviderFactory.d.ts.map +1 -0
  152. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5ProviderFactory.js +14 -0
  153. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5ProviderFactory.js.map +1 -0
  154. package/dist/src/index.d.ts +11 -0
  155. package/dist/src/index.d.ts.map +1 -1
  156. package/dist/src/index.js +1 -0
  157. package/dist/src/index.js.map +1 -1
  158. package/dist/src/index.node.d.ts +5 -0
  159. package/dist/src/index.node.d.ts.map +1 -1
  160. package/dist/src/index.node.js +5 -0
  161. package/dist/src/index.node.js.map +1 -1
  162. package/dist/src/index.web.d.ts +5 -0
  163. package/dist/src/index.web.d.ts.map +1 -1
  164. package/dist/src/index.web.js +4 -0
  165. package/dist/src/index.web.js.map +1 -1
  166. package/dist/src/uploader/api/fileServerUploadClient.js.map +1 -1
  167. package/dist/src/uploader/api/node/nodeFileServerUploadClient.d.ts.map +1 -1
  168. package/dist/src/uploader/api/node/nodeFileServerUploadClient.js +1 -2
  169. package/dist/src/uploader/api/node/nodeFileServerUploadClient.js.map +1 -1
  170. package/dist/src/uploader/api/web/utils/axiosIdleTimeoutManager.js.map +1 -1
  171. package/dist/src/uploader/api/web/webFileServerUploadClient.d.ts.map +1 -1
  172. package/dist/src/uploader/api/web/webFileServerUploadClient.js +1 -2
  173. package/dist/src/uploader/api/web/webFileServerUploadClient.js.map +1 -1
  174. package/dist/src/uploader/chunkStreamProviderFactory/node/nodeFileDetailsUploaderChunkStreamProviderFactory.d.ts +9 -0
  175. package/dist/src/uploader/chunkStreamProviderFactory/node/nodeFileDetailsUploaderChunkStreamProviderFactory.d.ts.map +1 -0
  176. package/dist/src/uploader/chunkStreamProviderFactory/{nodeFileDetailsUploaderChunkStreamProviderFactory.js → node/nodeFileDetailsUploaderChunkStreamProviderFactory.js} +1 -1
  177. package/dist/src/uploader/chunkStreamProviderFactory/node/nodeFileDetailsUploaderChunkStreamProviderFactory.js.map +1 -0
  178. package/dist/src/uploader/chunkStreamProviderFactory/uploaderChunkStreamProviderFactory.d.ts +2 -2
  179. package/dist/src/uploader/chunkStreamProviderFactory/uploaderChunkStreamProviderFactory.d.ts.map +1 -1
  180. package/dist/src/uploader/chunkStreamProviderFactory/uploaderChunkStreamProviderFactory.js.map +1 -1
  181. package/dist/src/uploader/chunkStreamProviderFactory/web/webFileDetailsUploaderChunkStreamProviderFactory.d.ts +9 -0
  182. package/dist/src/uploader/chunkStreamProviderFactory/web/webFileDetailsUploaderChunkStreamProviderFactory.d.ts.map +1 -0
  183. package/dist/src/uploader/chunkStreamProviderFactory/{webFileDetailsUploaderChunkStreamProviderFactory.js → web/webFileDetailsUploaderChunkStreamProviderFactory.js} +1 -1
  184. package/dist/src/uploader/chunkStreamProviderFactory/web/webFileDetailsUploaderChunkStreamProviderFactory.js.map +1 -0
  185. package/dist/src/uploader/chunksIterator/chunksIterator.js.map +1 -1
  186. package/dist/src/uploader/eventArgs/fileAckFailedEventArgs.js.map +1 -1
  187. package/dist/src/uploader/eventArgs/fileChunkUploadCompletedEventArgs.js.map +1 -1
  188. package/dist/src/uploader/eventArgs/fileChunkUploadCompletedPartiallyEventArgs.js.map +1 -1
  189. package/dist/src/uploader/eventArgs/fileChunkUploadEventArgs.js.map +1 -1
  190. package/dist/src/uploader/eventArgs/fileChunkUploadFailedEventArgs.js.map +1 -1
  191. package/dist/src/uploader/eventArgs/fileChunkUploadProgressedEventArgs.js.map +1 -1
  192. package/dist/src/uploader/eventArgs/fileUploadEventArgs.js.map +1 -1
  193. package/dist/src/uploader/eventArgs/fileUploadFailedEventArgs.js.map +1 -1
  194. package/dist/src/uploader/eventArgs/filesBatchAckFailedEventArgs.js.map +1 -1
  195. package/dist/src/uploader/eventArgs/filesRegistrationBatchFailedEventArgs.js.map +1 -1
  196. package/dist/src/uploader/eventArgs/transferMetadataDeterminedEventArgs.js.map +1 -1
  197. package/dist/src/uploader/eventArgs/transferUploadCompletedEventArgs.js.map +1 -1
  198. package/dist/src/uploader/eventArgs/transferUploadProgressedEventArgs.js.map +1 -1
  199. package/dist/src/uploader/export/transferUploadExportData.js.map +1 -1
  200. package/dist/src/uploader/export/transferUploadExportState.js.map +1 -1
  201. package/dist/src/uploader/export/transferUploadMetadata.js.map +1 -1
  202. package/dist/src/uploader/fileChunksPlan.d.ts +8 -0
  203. package/dist/src/uploader/fileChunksPlan.d.ts.map +1 -0
  204. package/dist/src/uploader/fileChunksPlan.js +2 -0
  205. package/dist/src/uploader/fileChunksPlan.js.map +1 -0
  206. package/dist/src/uploader/md5Provider/md5ComputationStrategies/defaultMD5ComputationStrategyFactory.d.ts +10 -0
  207. package/dist/src/uploader/md5Provider/md5ComputationStrategies/defaultMD5ComputationStrategyFactory.d.ts.map +1 -0
  208. package/dist/src/uploader/md5Provider/md5ComputationStrategies/defaultMD5ComputationStrategyFactory.js +12 -0
  209. package/dist/src/uploader/md5Provider/md5ComputationStrategies/defaultMD5ComputationStrategyFactory.js.map +1 -0
  210. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationSession.d.ts +7 -0
  211. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationSession.d.ts.map +1 -0
  212. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationSession.js +2 -0
  213. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationSession.js.map +1 -0
  214. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategy.d.ts +6 -0
  215. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategy.d.ts.map +1 -0
  216. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategy.js +2 -0
  217. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategy.js.map +1 -0
  218. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategyFactory.d.ts +6 -0
  219. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategyFactory.d.ts.map +1 -0
  220. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategyFactory.js +2 -0
  221. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategyFactory.js.map +1 -0
  222. package/dist/src/uploader/md5Provider/md5ComputationStrategies/node/nodeAsyncMD5ComputationStrategy.d.ts +7 -0
  223. package/dist/src/uploader/md5Provider/md5ComputationStrategies/node/nodeAsyncMD5ComputationStrategy.d.ts.map +1 -0
  224. package/dist/src/uploader/md5Provider/md5ComputationStrategies/node/nodeAsyncMD5ComputationStrategy.js +14 -0
  225. package/dist/src/uploader/md5Provider/md5ComputationStrategies/node/nodeAsyncMD5ComputationStrategy.js.map +1 -0
  226. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/computeBlobMD5.d.ts +2 -0
  227. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/computeBlobMD5.d.ts.map +1 -0
  228. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/computeBlobMD5.js +27 -0
  229. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/computeBlobMD5.js.map +1 -0
  230. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5.worker.d.ts +2 -0
  231. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5.worker.d.ts.map +1 -0
  232. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5.worker.js +5 -0
  233. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5.worker.js.map +1 -0
  234. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkerMessages.d.ts +14 -0
  235. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkerMessages.d.ts.map +1 -0
  236. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkerMessages.js +2 -0
  237. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkerMessages.js.map +1 -0
  238. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkersManager.d.ts +17 -0
  239. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkersManager.d.ts.map +1 -0
  240. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkersManager.js +113 -0
  241. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkersManager.js.map +1 -0
  242. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/registerMD5Worker.d.ts +7 -0
  243. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/registerMD5Worker.d.ts.map +1 -0
  244. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/registerMD5Worker.js +17 -0
  245. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/registerMD5Worker.js.map +1 -0
  246. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webAsyncWebWorkerMD5ComputationStrategy.d.ts +9 -0
  247. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webAsyncWebWorkerMD5ComputationStrategy.d.ts.map +1 -0
  248. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webAsyncWebWorkerMD5ComputationStrategy.js +62 -0
  249. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webAsyncWebWorkerMD5ComputationStrategy.js.map +1 -0
  250. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webMD5ComputationStrategyFactory.d.ts +9 -0
  251. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webMD5ComputationStrategyFactory.d.ts.map +1 -0
  252. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webMD5ComputationStrategyFactory.js +41 -0
  253. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webMD5ComputationStrategyFactory.js.map +1 -0
  254. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webSyncMD5ComputationStrategy.d.ts +6 -0
  255. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webSyncMD5ComputationStrategy.d.ts.map +1 -0
  256. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webSyncMD5ComputationStrategy.js +9 -0
  257. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webSyncMD5ComputationStrategy.js.map +1 -0
  258. package/dist/src/uploader/md5Provider/precomputedMD5Provider.d.ts +27 -0
  259. package/dist/src/uploader/md5Provider/precomputedMD5Provider.d.ts.map +1 -0
  260. package/dist/src/uploader/md5Provider/precomputedMD5Provider.js +189 -0
  261. package/dist/src/uploader/md5Provider/precomputedMD5Provider.js.map +1 -0
  262. package/dist/src/uploader/md5Provider/uploaderMD5Provider.d.ts +28 -0
  263. package/dist/src/uploader/md5Provider/uploaderMD5Provider.d.ts.map +1 -0
  264. package/dist/src/uploader/md5Provider/uploaderMD5Provider.js +2 -0
  265. package/dist/src/uploader/md5Provider/uploaderMD5Provider.js.map +1 -0
  266. package/dist/src/uploader/options/transferUploadAppendInfo.js.map +1 -1
  267. package/dist/src/uploader/options/transferUploadConfig.js.map +1 -1
  268. package/dist/src/uploader/options/transferUploadInfo.js.map +1 -1
  269. package/dist/src/uploader/options/transferUploadInfoBase.js.map +1 -1
  270. package/dist/src/uploader/pauseController.js.map +1 -1
  271. package/dist/src/uploader/pendingFileAck.js.map +1 -1
  272. package/dist/src/uploader/registeredTransferFile.js.map +1 -1
  273. package/dist/src/uploader/state/continuousChunksCalculator.js.map +1 -1
  274. package/dist/src/uploader/state/readonlyTransferUploadStateFile.js.map +1 -1
  275. package/dist/src/uploader/state/readonlyTransferUploadStateFiles.js.map +1 -1
  276. package/dist/src/uploader/state/transferUploadProgressCalculator.js.map +1 -1
  277. package/dist/src/uploader/state/transferUploadState.js.map +1 -1
  278. package/dist/src/uploader/state/transferUploadStateFile.js.map +1 -1
  279. package/dist/src/uploader/state/transferUploadStateFiles.js.map +1 -1
  280. package/dist/src/uploader/transferFailureAbortReason.js.map +1 -1
  281. package/dist/src/uploader/transferFilesRegistrar.js.map +1 -1
  282. package/dist/src/uploader/transferUpload.d.ts +4 -2
  283. package/dist/src/uploader/transferUpload.d.ts.map +1 -1
  284. package/dist/src/uploader/transferUpload.js +27 -9
  285. package/dist/src/uploader/transferUpload.js.map +1 -1
  286. package/dist/src/uploader/transferUploadAcker.js.map +1 -1
  287. package/dist/src/uploader/transferUploadError.js.map +1 -1
  288. package/dist/src/uploader/transferUploadEvent.js.map +1 -1
  289. package/dist/src/utils/api/apiClient.js.map +1 -1
  290. package/dist/src/utils/api/apiClientBase.js.map +1 -1
  291. package/dist/src/utils/api/apiError.js.map +1 -1
  292. package/dist/src/utils/api/apiFilemail449Error.js.map +1 -1
  293. package/dist/src/utils/api/apiFilemailError.js.map +1 -1
  294. package/dist/src/utils/api/dtos/ackTransferFilesRequest.js.map +1 -1
  295. package/dist/src/utils/api/dtos/ackTransferFilesResponse.js.map +1 -1
  296. package/dist/src/utils/api/dtos/baseResponse.js.map +1 -1
  297. package/dist/src/utils/api/dtos/cancelTransferRequest.js.map +1 -1
  298. package/dist/src/utils/api/dtos/finalizeTransferRequest.js.map +1 -1
  299. package/dist/src/utils/api/dtos/finalizeTransferResponse.js.map +1 -1
  300. package/dist/src/utils/api/dtos/getCompanyResponse.js.map +1 -1
  301. package/dist/src/utils/api/dtos/getCompressedFileMetadataResponse.js.map +1 -1
  302. package/dist/src/utils/api/dtos/getInboxTransfersRequest.js.map +1 -1
  303. package/dist/src/utils/api/dtos/getInboxTransfersResponse.js.map +1 -1
  304. package/dist/src/utils/api/dtos/getRangehashResponse.js.map +1 -1
  305. package/dist/src/utils/api/dtos/getTransferRequest.js.map +1 -1
  306. package/dist/src/utils/api/dtos/getTransferResponse.d.ts +1 -0
  307. package/dist/src/utils/api/dtos/getTransferResponse.d.ts.map +1 -1
  308. package/dist/src/utils/api/dtos/getTransferResponse.js.map +1 -1
  309. package/dist/src/utils/api/dtos/initializeTransferRequest.js.map +1 -1
  310. package/dist/src/utils/api/dtos/initializeTransferResponse.js.map +1 -1
  311. package/dist/src/utils/api/dtos/loginRequest.js.map +1 -1
  312. package/dist/src/utils/api/dtos/loginResponse.js.map +1 -1
  313. package/dist/src/utils/api/dtos/registerFileDownloadRequest.js.map +1 -1
  314. package/dist/src/utils/api/dtos/registerTransferDownloadRequest.js.map +1 -1
  315. package/dist/src/utils/api/dtos/registerTransferFilesRequest.js.map +1 -1
  316. package/dist/src/utils/api/dtos/registerTransferFilesResponse.js.map +1 -1
  317. package/dist/src/utils/api/dtos/resetTransferRequest.js.map +1 -1
  318. package/dist/src/utils/api/dtos/sendFileChunkRequest.d.ts +1 -0
  319. package/dist/src/utils/api/dtos/sendFileChunkRequest.d.ts.map +1 -1
  320. package/dist/src/utils/api/dtos/sendFileChunkRequest.js.map +1 -1
  321. package/dist/src/utils/api/dtos/transferCustomFieldDto.js.map +1 -1
  322. package/dist/src/utils/api/dtos/transferFileDto.js.map +1 -1
  323. package/dist/src/utils/api/fileServerClientFactory.d.ts +2 -0
  324. package/dist/src/utils/api/fileServerClientFactory.d.ts.map +1 -1
  325. package/dist/src/utils/api/fileServerClientFactory.js.map +1 -1
  326. package/dist/src/utils/api/node/gotWorkarounds.js.map +1 -1
  327. package/dist/src/utils/api/node/nodeApiClient.js.map +1 -1
  328. package/dist/src/utils/api/node/nodeClientBase.js.map +1 -1
  329. package/dist/src/utils/api/node/nodeFileServerClientFactory.d.ts +2 -0
  330. package/dist/src/utils/api/node/nodeFileServerClientFactory.d.ts.map +1 -1
  331. package/dist/src/utils/api/node/nodeFileServerClientFactory.js +4 -0
  332. package/dist/src/utils/api/node/nodeFileServerClientFactory.js.map +1 -1
  333. package/dist/src/utils/api/node/nodeFileserverClientBase.js.map +1 -1
  334. package/dist/src/utils/api/urlUtil.js.map +1 -1
  335. package/dist/src/utils/api/web/webApiClient.js.map +1 -1
  336. package/dist/src/utils/api/web/webClientBase.js.map +1 -1
  337. package/dist/src/utils/api/web/webFileServerClientFactory.d.ts +2 -0
  338. package/dist/src/utils/api/web/webFileServerClientFactory.d.ts.map +1 -1
  339. package/dist/src/utils/api/web/webFileServerClientFactory.js +3 -0
  340. package/dist/src/utils/api/web/webFileServerClientFactory.js.map +1 -1
  341. package/dist/src/utils/api/web/webFileserverClientBase.js.map +1 -1
  342. package/dist/src/utils/concurrencyController/concurrencyController.js.map +1 -1
  343. package/dist/src/utils/concurrencyController/concurrencyReleaser.js.map +1 -1
  344. package/dist/src/utils/concurrencyController/transferConcurrencyController.js.map +1 -1
  345. package/dist/src/utils/crypto/cryptographyProvider.js.map +1 -1
  346. package/dist/src/utils/crypto/node/nodeCryptographyProvider.js.map +1 -1
  347. package/dist/src/utils/crypto/web/webCryptographyProvider.js.map +1 -1
  348. package/dist/src/utils/dateAndTime/simpleDateFormatter.js.map +1 -1
  349. package/dist/src/utils/events/chunkProgressEvent.js.map +1 -1
  350. package/dist/src/utils/events/eventsEngine.js.map +1 -1
  351. package/dist/src/utils/events/node/nodeEventsEngine.js.map +1 -1
  352. package/dist/src/utils/events/web/webEventsEngine.js.map +1 -1
  353. package/dist/src/utils/fileSystem/chunkStreamEncryptionData.d.ts +6 -0
  354. package/dist/src/utils/fileSystem/chunkStreamEncryptionData.d.ts.map +1 -0
  355. package/dist/src/utils/fileSystem/chunkStreamEncryptionData.js +2 -0
  356. package/dist/src/utils/fileSystem/chunkStreamEncryptionData.js.map +1 -0
  357. package/dist/src/utils/fileSystem/chunkStreamProvider.d.ts +0 -5
  358. package/dist/src/utils/fileSystem/chunkStreamProvider.d.ts.map +1 -1
  359. package/dist/src/utils/fileSystem/chunkStreamProvider.js.map +1 -1
  360. package/dist/src/utils/fileSystem/chunkStreamProviderFactory.d.ts +2 -2
  361. package/dist/src/utils/fileSystem/chunkStreamProviderFactory.d.ts.map +1 -1
  362. package/dist/src/utils/fileSystem/chunkStreamProviderFactory.js.map +1 -1
  363. package/dist/src/utils/fileSystem/fileDetails.js.map +1 -1
  364. package/dist/src/utils/fileSystem/fileSystemService.js.map +1 -1
  365. package/dist/src/utils/fileSystem/fsError.js.map +1 -1
  366. package/dist/src/utils/fileSystem/node/nodeChunkStreamProvider.d.ts +2 -3
  367. package/dist/src/utils/fileSystem/node/nodeChunkStreamProvider.d.ts.map +1 -1
  368. package/dist/src/utils/fileSystem/node/nodeChunkStreamProvider.js +9 -28
  369. package/dist/src/utils/fileSystem/node/nodeChunkStreamProvider.js.map +1 -1
  370. package/dist/src/utils/fileSystem/node/nodeChunkStreamProviderFactory.d.ts +2 -2
  371. package/dist/src/utils/fileSystem/node/nodeChunkStreamProviderFactory.d.ts.map +1 -1
  372. package/dist/src/utils/fileSystem/node/nodeChunkStreamProviderFactory.js +1 -1
  373. package/dist/src/utils/fileSystem/node/nodeChunkStreamProviderFactory.js.map +1 -1
  374. package/dist/src/utils/fileSystem/node/nodeFileDetails.js.map +1 -1
  375. package/dist/src/utils/fileSystem/node/nodeFileSystemService.js.map +1 -1
  376. package/dist/src/utils/fileSystem/parsedPath.js.map +1 -1
  377. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamEncrypter.js.map +1 -1
  378. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.d.ts +2 -3
  379. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.d.ts.map +1 -1
  380. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.js +0 -19
  381. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.js.map +1 -1
  382. package/dist/src/utils/fileSystem/web/webChunkStreamProviderFactory.d.ts +2 -2
  383. package/dist/src/utils/fileSystem/web/webChunkStreamProviderFactory.d.ts.map +1 -1
  384. package/dist/src/utils/fileSystem/web/webChunkStreamProviderFactory.js +1 -1
  385. package/dist/src/utils/fileSystem/web/webChunkStreamProviderFactory.js.map +1 -1
  386. package/dist/src/utils/fileSystem/web/webFileDetails.js.map +1 -1
  387. package/dist/src/utils/jsonParsing.js.map +1 -1
  388. package/dist/src/utils/logging/logEventPropertyNames.js.map +1 -1
  389. package/dist/src/utils/mergeAbortAndPauseSignals.js.map +1 -1
  390. package/dist/src/utils/networking/throttlingOptions.js.map +1 -1
  391. package/dist/src/utils/promiseAll.js.map +1 -1
  392. package/dist/src/utils/types/transferStatus.js.map +1 -1
  393. package/dist/src/utils/uint8ArrayUtils.js.map +1 -1
  394. package/package.json +80 -79
  395. package/readme.md +27 -27
  396. package/dist/src/uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.d.ts +0 -9
  397. package/dist/src/uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.d.ts.map +0 -1
  398. package/dist/src/uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.js.map +0 -1
  399. package/dist/src/uploader/chunkStreamProviderFactory/webFileDetailsUploaderChunkStreamProviderFactory.d.ts +0 -9
  400. package/dist/src/uploader/chunkStreamProviderFactory/webFileDetailsUploaderChunkStreamProviderFactory.d.ts.map +0 -1
  401. package/dist/src/uploader/chunkStreamProviderFactory/webFileDetailsUploaderChunkStreamProviderFactory.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"concurrencyReleaser.js","sourceRoot":"","sources":["../../../../src/utils/concurrencyController/concurrencyReleaser.ts"],"names":[],"mappings":"","sourcesContent":["type ConcurrencyReleaser = () => void;\n\nexport default ConcurrencyReleaser;"]}
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 +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\";\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
+ {"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 +1 @@
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
+ {"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 +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\";\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
+ {"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 +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\";\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
+ {"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 +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 {\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
+ {"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 +1 @@
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
+ {"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 +1 @@
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
+ {"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 +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\";\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
+ {"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 +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\";\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
+ {"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}"]}
@@ -0,0 +1,6 @@
1
+ type ChunkStreamEncryptionData = {
2
+ iv: Uint8Array;
3
+ key: Uint8Array;
4
+ };
5
+ export default ChunkStreamEncryptionData;
6
+ //# sourceMappingURL=chunkStreamEncryptionData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunkStreamEncryptionData.d.ts","sourceRoot":"","sources":["../../../../src/utils/fileSystem/chunkStreamEncryptionData.ts"],"names":[],"mappings":"AAAA,KAAK,yBAAyB,GAAG;IAC7B,EAAE,EAAE,UAAU,CAAC;IACf,GAAG,EAAE,UAAU,CAAC;CACnB,CAAC;AAEF,eAAe,yBAAyB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chunkStreamEncryptionData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunkStreamEncryptionData.js","sourceRoot":"","sources":["../../../../src/utils/fileSystem/chunkStreamEncryptionData.ts"],"names":[],"mappings":"","sourcesContent":["type ChunkStreamEncryptionData = {\r\n iv: Uint8Array;\r\n key: Uint8Array;\r\n};\r\n\r\nexport default ChunkStreamEncryptionData;"]}
@@ -5,7 +5,6 @@ interface ChunkStreamProvider {
5
5
  readonly isReleased: boolean;
6
6
  readonly chunkStartPosition: number;
7
7
  readonly chunkLengthInBytes: number;
8
- getMd5Checksum(format: `hex` | `base64`, pauseSignal?: PauseSignal, abortSignal?: AbortSignal): Promise<string>;
9
8
  getChunkReadStream(pauseSignal?: PauseSignal, abortSignal?: AbortSignal): Promise<ReadableStream | NodeReadableStream>;
10
9
  getChunkBlob(): Promise<Blob>;
11
10
  getChunkWriteStream(): Promise<{
@@ -14,9 +13,5 @@ interface ChunkStreamProvider {
14
13
  }>;
15
14
  release(): Promise<void>;
16
15
  }
17
- export type ChunkStreamProviderEncryptionData = {
18
- iv: Uint8Array;
19
- key: Uint8Array;
20
- };
21
16
  export default ChunkStreamProvider;
22
17
  //# sourceMappingURL=chunkStreamProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunkStreamProvider.d.ts","sourceRoot":"","sources":["../../../../src/utils/fileSystem/chunkStreamProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAErE,UAAU,mBAAmB;IACzB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAEpC,cAAc,CAAC,MAAM,EAAE,KAAK,GAAG,QAAQ,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChH,kBAAkB,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,GAAG,kBAAkB,CAAC,CAAC;IACvH,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,mBAAmB,IAAI,OAAO,CAAC;QAAE,UAAU,EAAE,QAAQ,CAAC;QAAC,cAAc,CAAC,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;IACpF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,MAAM,MAAM,iCAAiC,GAAG;IAC5C,EAAE,EAAE,UAAU,CAAC;IACf,GAAG,EAAE,UAAU,CAAC;CACnB,CAAA;AAED,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"chunkStreamProvider.d.ts","sourceRoot":"","sources":["../../../../src/utils/fileSystem/chunkStreamProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAErE,UAAU,mBAAmB;IACzB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAEpC,kBAAkB,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,GAAG,kBAAkB,CAAC,CAAC;IACvH,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,mBAAmB,IAAI,OAAO,CAAC;QAAE,UAAU,EAAE,QAAQ,CAAC;QAAC,cAAc,CAAC,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;IACpF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,eAAe,mBAAmB,CAAC"}
@@ -1 +1 @@
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
+ {"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 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 default ChunkStreamProvider;"]}
@@ -1,7 +1,7 @@
1
+ import type ChunkStreamEncryptionData from "./chunkStreamEncryptionData.js";
1
2
  import type ChunkStreamProvider from "./chunkStreamProvider.js";
2
- import type { ChunkStreamProviderEncryptionData } from "./chunkStreamProvider.js";
3
3
  interface ChunkStreamProviderFactory<T extends string | File> {
4
- provide(file: T, start: number, size: number, encryptionData?: ChunkStreamProviderEncryptionData): ChunkStreamProvider;
4
+ create(file: T, start: number, size: number, encryptionData?: ChunkStreamEncryptionData): ChunkStreamProvider;
5
5
  }
6
6
  export default ChunkStreamProviderFactory;
7
7
  //# sourceMappingURL=chunkStreamProviderFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunkStreamProviderFactory.d.ts","sourceRoot":"","sources":["../../../../src/utils/fileSystem/chunkStreamProviderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,mBAAmB,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,0BAA0B,CAAC;AAElF,UAAU,0BAA0B,CAAC,CAAC,SAAS,MAAM,GAAG,IAAI;IACxD,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,iCAAiC,GAAG,mBAAmB,CAAC;CAC1H;AAED,eAAe,0BAA0B,CAAC"}
1
+ {"version":3,"file":"chunkStreamProviderFactory.d.ts","sourceRoot":"","sources":["../../../../src/utils/fileSystem/chunkStreamProviderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,yBAAyB,MAAM,gCAAgC,CAAC;AAC5E,OAAO,KAAK,mBAAmB,MAAM,0BAA0B,CAAC;AAEhE,UAAU,0BAA0B,CAAC,CAAC,SAAS,MAAM,GAAG,IAAI;IACxD,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,yBAAyB,GAAG,mBAAmB,CAAC;CACjH;AAED,eAAe,0BAA0B,CAAC"}
@@ -1 +1 @@
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
+ {"version":3,"file":"chunkStreamProviderFactory.js","sourceRoot":"","sources":["../../../../src/utils/fileSystem/chunkStreamProviderFactory.ts"],"names":[],"mappings":"","sourcesContent":["import type ChunkStreamEncryptionData from \"./chunkStreamEncryptionData.js\";\r\nimport type ChunkStreamProvider from \"./chunkStreamProvider.js\";\r\n\r\ninterface ChunkStreamProviderFactory<T extends string | File> {\r\n create(file: T, start: number, size: number, encryptionData?: ChunkStreamEncryptionData): ChunkStreamProvider;\r\n}\r\n\r\nexport default ChunkStreamProviderFactory;"]}
@@ -1 +1 @@
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
+ {"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 +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\";\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
+ {"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 +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 {\n constructor(message?: string, options?: ErrorOptions) {\n super(message, options);\n this.name = `FsError`;\n }\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 {\r\n constructor(message?: string, options?: ErrorOptions) {\r\n super(message, options);\r\n this.name = `FsError`;\r\n }\r\n}"]}
@@ -2,15 +2,14 @@ import { ReadableStream } from "stream/web";
2
2
  import type { Writable } from "stream";
3
3
  import type ChunkStreamProvider from "../chunkStreamProvider.js";
4
4
  import type { PauseSignal } from "../../../uploader/pauseController.js";
5
- import type { ChunkStreamProviderEncryptionData } from "../chunkStreamProvider.js";
5
+ import ChunkStreamEncryptionData from "../chunkStreamEncryptionData.js";
6
6
  export default class NodeChunkStreamProvider implements ChunkStreamProvider {
7
7
  #private;
8
8
  readonly chunkStartPosition: number;
9
9
  readonly chunkLengthInBytes: number;
10
10
  get isReleased(): boolean;
11
- constructor(fullFilePath: string, chunkStartPosition: number, chunkLengthInBytes: number, encryptionData: ChunkStreamProviderEncryptionData | undefined);
11
+ constructor(fullFilePath: string, chunkStartPosition: number, chunkLengthInBytes: number, encryptionData: ChunkStreamEncryptionData | undefined);
12
12
  private throwIfEncryptionDataIsNotValid;
13
- getMd5Checksum(format: `hex` | `base64`, pauseSignal?: PauseSignal, abortSignal?: AbortSignal): Promise<string>;
14
13
  getChunkReadStream(pauseSignal?: PauseSignal, abortSignal?: AbortSignal): Promise<ReadableStream>;
15
14
  getChunkBlob(): Promise<Blob>;
16
15
  private getChunkEndPosition;
@@ -1 +1 @@
1
- {"version":3,"file":"nodeChunkStreamProvider.d.ts","sourceRoot":"","sources":["../../../../../src/utils/fileSystem/node/nodeChunkStreamProvider.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAMvC,OAAO,KAAK,mBAAmB,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAEnF,MAAM,CAAC,OAAO,OAAO,uBAAwB,YAAW,mBAAmB;;IACvE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAkBpC,IAAI,UAAU,IAAI,OAAO,CAWxB;gBAEW,YAAY,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,cAAc,EAAE,iCAAiC,GAAG,SAAS;IAavJ,OAAO,CAAC,+BAA+B;IAUjC,cAAc,CAAC,MAAM,EAAE,KAAK,GAAG,QAAQ,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAyB/G,kBAAkB,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;IA4CvG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,OAAO,CAAC,mBAAmB;IAOrB,mBAAmB,IAAI,OAAO,CAAC;QAAE,UAAU,EAAE,QAAQ,CAAC;QAAC,cAAc,CAAC,EAAE,QAAQ,CAAA;KAAE,CAAC;IA8BnF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB9B,OAAO,CAAC,0BAA0B;IAsBlC,OAAO,CAAC,yBAAyB;IAajC,OAAO,CAAC,0BAA0B;IAuBlC,OAAO,CAAC,yBAAyB;YAWnB,uBAAuB;YAWvB,cAAc;IA4C5B,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,WAAW,CAQjB;IAEF,OAAO,CAAC,aAAa,CAQnB;CACL"}
1
+ {"version":3,"file":"nodeChunkStreamProvider.d.ts","sourceRoot":"","sources":["../../../../../src/utils/fileSystem/node/nodeChunkStreamProvider.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAMvC,OAAO,KAAK,mBAAmB,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,yBAAyB,MAAM,iCAAiC,CAAC;AAExE,MAAM,CAAC,OAAO,OAAO,uBAAwB,YAAW,mBAAmB;;IACvE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAkBpC,IAAI,UAAU,IAAI,OAAO,CAWxB;gBAEW,YAAY,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,cAAc,EAAE,yBAAyB,GAAG,SAAS;IAa/I,OAAO,CAAC,+BAA+B;IAUjC,kBAAkB,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;IA4CvG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,OAAO,CAAC,mBAAmB;IAOrB,mBAAmB,IAAI,OAAO,CAAC;QAAE,UAAU,EAAE,QAAQ,CAAC;QAAC,cAAc,CAAC,EAAE,QAAQ,CAAA;KAAE,CAAC;IA8BnF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB9B,OAAO,CAAC,0BAA0B;IAsBlC,OAAO,CAAC,yBAAyB;IAajC,OAAO,CAAC,0BAA0B;IAuBlC,OAAO,CAAC,yBAAyB;YAWnB,uBAAuB;YAWvB,cAAc;IA4C5B,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,WAAW,CAQjB;IAEF,OAAO,CAAC,aAAa,CAWnB;CACL"}
@@ -1,7 +1,6 @@
1
1
  import fs from "fs/promises";
2
2
  import fsSync, { constants as fsConsts } from "fs";
3
- import crypto from "crypto";
4
- import { pipeline, finished } from "stream/promises";
3
+ import { finished } from "stream/promises";
5
4
  import { PassThrough } from "stream";
6
5
  import { ReadableStream } from "stream/web";
7
6
  import { createCipher, createDecipher } from 'aes-ctr-concurrent';
@@ -24,12 +23,12 @@ export default class NodeChunkStreamProvider {
24
23
  #abortSignal;
25
24
  #abortListener;
26
25
  get isReleased() {
27
- const isFileReadStreamReleased = this.#fileReadStream?.destroyed ?? true;
28
- const isFileReadCipherStreamReleased = this.#fileReadCipherStream?.destroyed ?? true;
29
- const isFileReadPassThroughStreamReleased = this.#fileReadPassThroughStream?.destroyed ?? true;
26
+ const isFileReadStreamReleased = this.#fileReadStream?.closed ?? true;
27
+ const isFileReadCipherStreamReleased = this.#fileReadCipherStream?.closed ?? true;
28
+ const isFileReadPassThroughStreamReleased = this.#fileReadPassThroughStream?.closed ?? true;
30
29
  const isFileWriteHandleReleased = this.#fileWriteHandle === null;
31
- const isFileWriteStreamReleased = this.#fileWriteStream?.destroyed ?? true;
32
- const isFileWriteDecipherStreamReleased = this.#fileWriteDecipherStream?.destroyed ?? true;
30
+ const isFileWriteStreamReleased = this.#fileWriteStream?.closed ?? true;
31
+ const isFileWriteDecipherStreamReleased = this.#fileWriteDecipherStream?.closed ?? true;
33
32
  return isFileReadStreamReleased && isFileReadCipherStreamReleased
34
33
  && isFileReadPassThroughStreamReleased && isFileWriteStreamReleased && isFileWriteDecipherStreamReleased
35
34
  && isFileWriteHandleReleased;
@@ -51,25 +50,6 @@ export default class NodeChunkStreamProvider {
51
50
  if (encryptionData.key.length !== 32)
52
51
  throw new FsError(`Encryption key must be 32 bytes long`);
53
52
  }
54
- async getMd5Checksum(format, pauseSignal, abortSignal) {
55
- try {
56
- const fileStream = await this.getChunkReadStream(pauseSignal, abortSignal);
57
- const hash = crypto.createHash(`md5`);
58
- await pipeline(fileStream, hash);
59
- return hash.digest(format);
60
- }
61
- catch (error) {
62
- if (abortSignal?.aborted)
63
- throw this.createAbortError(abortSignal);
64
- if (error instanceof FsError)
65
- throw error;
66
- throw new FsError(`ComputingFileMd5ChecksumException`, { cause: error });
67
- }
68
- finally {
69
- if (!this.isReleased)
70
- await this.release();
71
- }
72
- }
73
53
  async getChunkReadStream(pauseSignal, abortSignal) {
74
54
  try {
75
55
  if (!this.isReleased)
@@ -254,11 +234,12 @@ export default class NodeChunkStreamProvider {
254
234
  catch { /* ignore errors during handle closing */ }
255
235
  };
256
236
  destroyStream = async (stream) => {
257
- if (!stream || stream.destroyed)
237
+ if (!stream || stream.closed)
258
238
  return;
259
239
  stream.once(`error`, () => { });
260
240
  const finishPromise = finished(stream).catch(() => { });
261
- stream.destroy();
241
+ if (!stream.destroyed)
242
+ stream.destroy();
262
243
  await finishPromise;
263
244
  };
264
245
  }
@@ -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\";\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
+ {"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 { 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 ChunkStreamEncryptionData from \"../chunkStreamEncryptionData.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?: ChunkStreamEncryptionData;\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?.closed ?? true;\r\n const isFileReadCipherStreamReleased = this.#fileReadCipherStream?.closed ?? true;\r\n const isFileReadPassThroughStreamReleased = this.#fileReadPassThroughStream?.closed ?? true;\r\n const isFileWriteHandleReleased = this.#fileWriteHandle === null;\r\n const isFileWriteStreamReleased = this.#fileWriteStream?.closed ?? true;\r\n const isFileWriteDecipherStreamReleased = this.#fileWriteDecipherStream?.closed ?? 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: ChunkStreamEncryptionData | 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: ChunkStreamEncryptionData | 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 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.closed)\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\r\n if (!stream.destroyed)\r\n stream.destroy();\r\n\r\n await finishPromise;\r\n };\r\n}\r\n"]}
@@ -1,7 +1,7 @@
1
1
  import type ChunkStreamProvider from "../chunkStreamProvider.js";
2
2
  import type ChunkStreamProviderFactory from "../chunkStreamProviderFactory.js";
3
- import type { ChunkStreamProviderEncryptionData } from "../chunkStreamProvider.js";
3
+ import ChunkStreamEncryptionData from "../chunkStreamEncryptionData.js";
4
4
  export default class NodeChunkStreamProviderFactory implements ChunkStreamProviderFactory<string> {
5
- provide(file: string, start: number, size: number, encryptionData: ChunkStreamProviderEncryptionData | undefined): ChunkStreamProvider;
5
+ create(file: string, start: number, size: number, encryptionData: ChunkStreamEncryptionData | undefined): ChunkStreamProvider;
6
6
  }
7
7
  //# sourceMappingURL=nodeChunkStreamProviderFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodeChunkStreamProviderFactory.d.ts","sourceRoot":"","sources":["../../../../../src/utils/fileSystem/node/nodeChunkStreamProviderFactory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,mBAAmB,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,0BAA0B,MAAM,kCAAkC,CAAC;AAC/E,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAEnF,MAAM,CAAC,OAAO,OAAO,8BAA+B,YAAW,0BAA0B,CAAC,MAAM,CAAC;IAC7F,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,iCAAiC,GAAG,SAAS,GAAG,mBAAmB;CAGzI"}
1
+ {"version":3,"file":"nodeChunkStreamProviderFactory.d.ts","sourceRoot":"","sources":["../../../../../src/utils/fileSystem/node/nodeChunkStreamProviderFactory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,mBAAmB,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,0BAA0B,MAAM,kCAAkC,CAAC;AAC/E,OAAO,yBAAyB,MAAM,iCAAiC,CAAC;AAExE,MAAM,CAAC,OAAO,OAAO,8BAA+B,YAAW,0BAA0B,CAAC,MAAM,CAAC;IAC7F,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,yBAAyB,GAAG,SAAS,GAAG,mBAAmB;CAGhI"}
@@ -1,6 +1,6 @@
1
1
  import NodeChunkStreamProvider from "./nodeChunkStreamProvider.js";
2
2
  export default class NodeChunkStreamProviderFactory {
3
- provide(file, start, size, encryptionData) {
3
+ create(file, start, size, encryptionData) {
4
4
  return new NodeChunkStreamProvider(file, start, size, encryptionData);
5
5
  }
6
6
  }
@@ -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\";\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
+ {"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,MAAM,CAAC,IAAY,EAAE,KAAa,EAAE,IAAY,EAAE,cAAqD;QACnG,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 ChunkStreamEncryptionData from \"../chunkStreamEncryptionData.js\";\r\n\r\nexport default class NodeChunkStreamProviderFactory implements ChunkStreamProviderFactory<string> {\r\n create(file: string, start: number, size: number, encryptionData: ChunkStreamEncryptionData | undefined): ChunkStreamProvider {\r\n return new NodeChunkStreamProvider(file, start, size, encryptionData);\r\n }\r\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';\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
+ {"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 +1 @@
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,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE;gBAClC,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,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 if ((await fs.stat(abs)).isDirectory())\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 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
+ {"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 if ((await fs.stat(abs)).isDirectory())\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 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 +1 @@
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
+ {"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"]}