filemail-sdk 10.3.0 → 10.5.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 (370) hide show
  1. package/LICENSE +10 -10
  2. package/dist/src/autoDownloader/autoDownloader.js.map +1 -1
  3. package/dist/src/autoDownloader/autoDownloaderDestroyer.js.map +1 -1
  4. package/dist/src/autoDownloader/autoDownloaderError.js.map +1 -1
  5. package/dist/src/autoDownloader/autoDownloaderEvent.js.map +1 -1
  6. package/dist/src/autoDownloader/autoDownloaderOptions.js.map +1 -1
  7. package/dist/src/autoDownloader/autoDownloaderStateSerializer.js.map +1 -1
  8. package/dist/src/autoDownloader/eventArgs/autoDownloadEventArgs.js.map +1 -1
  9. package/dist/src/autoDownloader/eventArgs/autoDownloadFailedEventArgs.js.map +1 -1
  10. package/dist/src/autoDownloader/eventArgs/autoDownloadProgressedEventArgs.js.map +1 -1
  11. package/dist/src/autoDownloader/eventArgs/autoDownloadStartedEventArgs.js.map +1 -1
  12. package/dist/src/autoDownloader/eventArgs/autoDownloadStartingFailedEventArgs.js.map +1 -1
  13. package/dist/src/autoDownloader/eventArgs/autoDownloadUnhealthyEventArgs.js.map +1 -1
  14. package/dist/src/autoDownloader/eventArgs/checkingForNewTransfersStartedEventArgs.js.map +1 -1
  15. package/dist/src/autoDownloader/eventArgs/newTransfersCheckCompletedEventArgs.js.map +1 -1
  16. package/dist/src/autoDownloader/factory/nodeAutoDownloaderFactory.js.map +1 -1
  17. package/dist/src/autoDownloader/factory/nodeAutoDownloaderFactoryOptions.js.map +1 -1
  18. package/dist/src/autoDownloader/newInboxTransfersRetriever/newInboxTransfer.js.map +1 -1
  19. package/dist/src/autoDownloader/newInboxTransfersRetriever/newInboxTransfersRetriever.js.map +1 -1
  20. package/dist/src/autoDownloader/node/nodeAutoDownloaderStateSerializer.js.map +1 -1
  21. package/dist/src/autoDownloader/node/nodeTransferDownloaderFactory.js.map +1 -1
  22. package/dist/src/autoDownloader/state/autoDownloaderRecoverableState.js.map +1 -1
  23. package/dist/src/autoDownloader/state/autoDownloaderState.js.map +1 -1
  24. package/dist/src/autoDownloader/state/autoDownloaderStateRecoverableTransfer.js.map +1 -1
  25. package/dist/src/autoDownloader/state/autoDownloaderStateRunningTransfer.js.map +1 -1
  26. package/dist/src/autoDownloader/state/autoDownloaderStateSnapshot.js.map +1 -1
  27. package/dist/src/autoDownloader/transferDownloaderFactory.js.map +1 -1
  28. package/dist/src/autoDownloader/transferHandler/autoDownloaderNewTransferHandler.js.map +1 -1
  29. package/dist/src/autoDownloader/transferHandler/autoDownloaderRecoverableTransferHandler.js.map +1 -1
  30. package/dist/src/autoDownloader/transferHandler/autoDownloaderTransferHandlerBase.js.map +1 -1
  31. package/dist/src/client/downloader/downloaderCore.d.ts +2 -1
  32. package/dist/src/client/downloader/downloaderCore.d.ts.map +1 -1
  33. package/dist/src/client/downloader/downloaderCore.js +6 -4
  34. package/dist/src/client/downloader/downloaderCore.js.map +1 -1
  35. package/dist/src/client/downloader/node/nodeTransferDownloader.d.ts.map +1 -1
  36. package/dist/src/client/downloader/node/nodeTransferDownloader.js +4 -2
  37. package/dist/src/client/downloader/node/nodeTransferDownloader.js.map +1 -1
  38. package/dist/src/client/downloader/transferDownloader.js.map +1 -1
  39. package/dist/src/client/environmentVariables.js.map +1 -1
  40. package/dist/src/client/healthMonitor/events/eventArgs/healthMonitorHealthyEventArgs.js.map +1 -1
  41. package/dist/src/client/healthMonitor/events/eventArgs/healthMonitorUnhealthyEventArgs.js.map +1 -1
  42. package/dist/src/client/healthMonitor/events/transferHealthMonitorEvent.js.map +1 -1
  43. package/dist/src/client/healthMonitor/onlineChecker/nodeOnlineChecker.js.map +1 -1
  44. package/dist/src/client/healthMonitor/onlineChecker/onlineChecker.js.map +1 -1
  45. package/dist/src/client/healthMonitor/onlineChecker/webOnlineChecker.js.map +1 -1
  46. package/dist/src/client/healthMonitor/transferDownloaderHealthMonitor.js.map +1 -1
  47. package/dist/src/client/healthMonitor/transferHealthMonitorBase.js.map +1 -1
  48. package/dist/src/client/healthMonitor/transferUploaderHealthMonitor.js.map +1 -1
  49. package/dist/src/client/loggers/dummyLogger.js.map +1 -1
  50. package/dist/src/client/loggers/logger.js.map +1 -1
  51. package/dist/src/client/loggers/utils/logHealthyStatus.js.map +1 -1
  52. package/dist/src/client/node/nodeFileDetailsProvider.js.map +1 -1
  53. package/dist/src/client/uploader/node/nodeTransferUploader.d.ts.map +1 -1
  54. package/dist/src/client/uploader/node/nodeTransferUploader.js +10 -4
  55. package/dist/src/client/uploader/node/nodeTransferUploader.js.map +1 -1
  56. package/dist/src/client/uploader/transferUploader.js.map +1 -1
  57. package/dist/src/client/uploader/transferUploaderBase.js +1 -1
  58. package/dist/src/client/uploader/transferUploaderBase.js.map +1 -1
  59. package/dist/src/client/uploader/transferUploaderConfig.js.map +1 -1
  60. package/dist/src/client/uploader/utils/uploaderUtils.js.map +1 -1
  61. package/dist/src/client/uploader/web/webTransferUploader.d.ts +2 -2
  62. package/dist/src/client/uploader/web/webTransferUploader.d.ts.map +1 -1
  63. package/dist/src/client/uploader/web/webTransferUploader.js +7 -2
  64. package/dist/src/client/uploader/web/webTransferUploader.js.map +1 -1
  65. package/dist/src/client/uploader/web/webTransferUploaderConfig.d.ts +7 -0
  66. package/dist/src/client/uploader/web/webTransferUploaderConfig.d.ts.map +1 -0
  67. package/dist/src/client/uploader/web/webTransferUploaderConfig.js +2 -0
  68. package/dist/src/client/uploader/web/webTransferUploaderConfig.js.map +1 -0
  69. package/dist/src/downloader/api/fileServerDownloadClient.d.ts +2 -2
  70. package/dist/src/downloader/api/fileServerDownloadClient.d.ts.map +1 -1
  71. package/dist/src/downloader/api/fileServerDownloadClient.js.map +1 -1
  72. package/dist/src/downloader/api/node/nodeFileServerDownloadClient.js.map +1 -1
  73. package/dist/src/downloader/chunkDownloader.d.ts +3 -2
  74. package/dist/src/downloader/chunkDownloader.d.ts.map +1 -1
  75. package/dist/src/downloader/chunkDownloader.js +6 -3
  76. package/dist/src/downloader/chunkDownloader.js.map +1 -1
  77. package/dist/src/downloader/downloadFolderResolver.js.map +1 -1
  78. package/dist/src/downloader/downloadLogger.js.map +1 -1
  79. package/dist/src/downloader/downloadOptions.js.map +1 -1
  80. package/dist/src/downloader/downloadStatus/downloadFileChunkProgress.js.map +1 -1
  81. package/dist/src/downloader/downloadStatus/downloadFileProgress.js.map +1 -1
  82. package/dist/src/downloader/downloadStatus/downloadFilePromise.js.map +1 -1
  83. package/dist/src/downloader/downloadStatus/downloadState.js.map +1 -1
  84. package/dist/src/downloader/downloadTracker.js.map +1 -1
  85. package/dist/src/downloader/dtos/downloadCommand.js.map +1 -1
  86. package/dist/src/downloader/dtos/downloadError.js.map +1 -1
  87. package/dist/src/downloader/dtos/downloadErrorCode.js.map +1 -1
  88. package/dist/src/downloader/dtos/downloadEvent.js.map +1 -1
  89. package/dist/src/downloader/dtos/downloadFileChunkInfo.js.map +1 -1
  90. package/dist/src/downloader/dtos/downloadFileInfo.js.map +1 -1
  91. package/dist/src/downloader/dtos/downloadFilesCommand.js.map +1 -1
  92. package/dist/src/downloader/dtos/downloadInfo.js.map +1 -1
  93. package/dist/src/downloader/dtos/downloadRegistrationMode.js.map +1 -1
  94. package/dist/src/downloader/dtos/downloadTrackerFileInfo.js.map +1 -1
  95. package/dist/src/downloader/dtos/downloadTrackerFileProgressInfo.js.map +1 -1
  96. package/dist/src/downloader/dtos/downloadTrackerProgressInfo.js.map +1 -1
  97. package/dist/src/downloader/dtos/downloadTrackingMetadata.js.map +1 -1
  98. package/dist/src/downloader/dtos/downloaderRestoredState.js.map +1 -1
  99. package/dist/src/downloader/eventArgs/chunkDownloadEventArgs.js.map +1 -1
  100. package/dist/src/downloader/eventArgs/chunkDownloadFailedEventArgs.js.map +1 -1
  101. package/dist/src/downloader/eventArgs/downloadCompletedEventArgs.js.map +1 -1
  102. package/dist/src/downloader/eventArgs/downloadEventArgs.js.map +1 -1
  103. package/dist/src/downloader/eventArgs/downloadMetadataDeterminedEventArgs.js.map +1 -1
  104. package/dist/src/downloader/eventArgs/downloadPauseEventArgs.js.map +1 -1
  105. package/dist/src/downloader/eventArgs/downloadTrackingFailedEventArgs.js.map +1 -1
  106. package/dist/src/downloader/eventArgs/fileDownloadEventArgs.js.map +1 -1
  107. package/dist/src/downloader/eventArgs/fileDownloadFailedEventArgs.js.map +1 -1
  108. package/dist/src/downloader/filesDownloader.d.ts +2 -1
  109. package/dist/src/downloader/filesDownloader.d.ts.map +1 -1
  110. package/dist/src/downloader/filesDownloader.js +4 -2
  111. package/dist/src/downloader/filesDownloader.js.map +1 -1
  112. package/dist/src/downloader/filesPreparer.js.map +1 -1
  113. package/dist/src/downloader/md5Provider/downloaderChunkMD5Provider.d.ts +6 -0
  114. package/dist/src/downloader/md5Provider/downloaderChunkMD5Provider.d.ts.map +1 -0
  115. package/dist/src/downloader/md5Provider/downloaderChunkMD5Provider.js +2 -0
  116. package/dist/src/downloader/md5Provider/downloaderChunkMD5Provider.js.map +1 -0
  117. package/dist/src/downloader/md5Provider/downloaderChunkMD5ProviderFactory.d.ts +7 -0
  118. package/dist/src/downloader/md5Provider/downloaderChunkMD5ProviderFactory.d.ts.map +1 -0
  119. package/dist/src/downloader/md5Provider/downloaderChunkMD5ProviderFactory.js +2 -0
  120. package/dist/src/downloader/md5Provider/downloaderChunkMD5ProviderFactory.js.map +1 -0
  121. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5Provider.d.ts +10 -0
  122. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5Provider.d.ts.map +1 -0
  123. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5Provider.js +36 -0
  124. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5Provider.js.map +1 -0
  125. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5ProviderFactory.d.ts +10 -0
  126. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5ProviderFactory.d.ts.map +1 -0
  127. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5ProviderFactory.js +14 -0
  128. package/dist/src/downloader/md5Provider/node/nodeOnDemandMD5ProviderFactory.js.map +1 -0
  129. package/dist/src/index.d.ts +10 -0
  130. package/dist/src/index.d.ts.map +1 -1
  131. package/dist/src/index.js +1 -0
  132. package/dist/src/index.js.map +1 -1
  133. package/dist/src/index.node.d.ts +4 -0
  134. package/dist/src/index.node.d.ts.map +1 -1
  135. package/dist/src/index.node.js +4 -0
  136. package/dist/src/index.node.js.map +1 -1
  137. package/dist/src/index.web.d.ts +5 -0
  138. package/dist/src/index.web.d.ts.map +1 -1
  139. package/dist/src/index.web.js +4 -0
  140. package/dist/src/index.web.js.map +1 -1
  141. package/dist/src/uploader/api/fileServerUploadClient.js.map +1 -1
  142. package/dist/src/uploader/api/node/nodeFileServerUploadClient.d.ts.map +1 -1
  143. package/dist/src/uploader/api/node/nodeFileServerUploadClient.js +1 -2
  144. package/dist/src/uploader/api/node/nodeFileServerUploadClient.js.map +1 -1
  145. package/dist/src/uploader/api/web/utils/axiosIdleTimeoutManager.js.map +1 -1
  146. package/dist/src/uploader/api/web/webFileServerUploadClient.d.ts.map +1 -1
  147. package/dist/src/uploader/api/web/webFileServerUploadClient.js +1 -2
  148. package/dist/src/uploader/api/web/webFileServerUploadClient.js.map +1 -1
  149. package/dist/src/uploader/chunkStreamProviderFactory/node/nodeFileDetailsUploaderChunkStreamProviderFactory.d.ts +9 -0
  150. package/dist/src/uploader/chunkStreamProviderFactory/node/nodeFileDetailsUploaderChunkStreamProviderFactory.d.ts.map +1 -0
  151. package/dist/src/uploader/chunkStreamProviderFactory/{nodeFileDetailsUploaderChunkStreamProviderFactory.js → node/nodeFileDetailsUploaderChunkStreamProviderFactory.js} +1 -1
  152. package/dist/src/uploader/chunkStreamProviderFactory/node/nodeFileDetailsUploaderChunkStreamProviderFactory.js.map +1 -0
  153. package/dist/src/uploader/chunkStreamProviderFactory/uploaderChunkStreamProviderFactory.d.ts +2 -2
  154. package/dist/src/uploader/chunkStreamProviderFactory/uploaderChunkStreamProviderFactory.d.ts.map +1 -1
  155. package/dist/src/uploader/chunkStreamProviderFactory/uploaderChunkStreamProviderFactory.js.map +1 -1
  156. package/dist/src/uploader/chunkStreamProviderFactory/web/webFileDetailsUploaderChunkStreamProviderFactory.d.ts +9 -0
  157. package/dist/src/uploader/chunkStreamProviderFactory/web/webFileDetailsUploaderChunkStreamProviderFactory.d.ts.map +1 -0
  158. package/dist/src/uploader/chunkStreamProviderFactory/{webFileDetailsUploaderChunkStreamProviderFactory.js → web/webFileDetailsUploaderChunkStreamProviderFactory.js} +1 -1
  159. package/dist/src/uploader/chunkStreamProviderFactory/web/webFileDetailsUploaderChunkStreamProviderFactory.js.map +1 -0
  160. package/dist/src/uploader/chunksIterator/chunksIterator.js.map +1 -1
  161. package/dist/src/uploader/eventArgs/fileAckFailedEventArgs.js.map +1 -1
  162. package/dist/src/uploader/eventArgs/fileChunkUploadCompletedEventArgs.js.map +1 -1
  163. package/dist/src/uploader/eventArgs/fileChunkUploadCompletedPartiallyEventArgs.js.map +1 -1
  164. package/dist/src/uploader/eventArgs/fileChunkUploadEventArgs.js.map +1 -1
  165. package/dist/src/uploader/eventArgs/fileChunkUploadFailedEventArgs.js.map +1 -1
  166. package/dist/src/uploader/eventArgs/fileChunkUploadProgressedEventArgs.js.map +1 -1
  167. package/dist/src/uploader/eventArgs/fileUploadEventArgs.js.map +1 -1
  168. package/dist/src/uploader/eventArgs/fileUploadFailedEventArgs.js.map +1 -1
  169. package/dist/src/uploader/eventArgs/filesBatchAckFailedEventArgs.js.map +1 -1
  170. package/dist/src/uploader/eventArgs/filesRegistrationBatchFailedEventArgs.js.map +1 -1
  171. package/dist/src/uploader/eventArgs/transferMetadataDeterminedEventArgs.js.map +1 -1
  172. package/dist/src/uploader/eventArgs/transferUploadCompletedEventArgs.js.map +1 -1
  173. package/dist/src/uploader/eventArgs/transferUploadProgressedEventArgs.js.map +1 -1
  174. package/dist/src/uploader/export/transferUploadExportData.js.map +1 -1
  175. package/dist/src/uploader/export/transferUploadExportState.js.map +1 -1
  176. package/dist/src/uploader/export/transferUploadMetadata.js.map +1 -1
  177. package/dist/src/uploader/fileChunksPlan.d.ts +8 -0
  178. package/dist/src/uploader/fileChunksPlan.d.ts.map +1 -0
  179. package/dist/src/uploader/fileChunksPlan.js +2 -0
  180. package/dist/src/uploader/fileChunksPlan.js.map +1 -0
  181. package/dist/src/uploader/md5Provider/md5ComputationStrategies/defaultMD5ComputationStrategyFactory.d.ts +10 -0
  182. package/dist/src/uploader/md5Provider/md5ComputationStrategies/defaultMD5ComputationStrategyFactory.d.ts.map +1 -0
  183. package/dist/src/uploader/md5Provider/md5ComputationStrategies/defaultMD5ComputationStrategyFactory.js +12 -0
  184. package/dist/src/uploader/md5Provider/md5ComputationStrategies/defaultMD5ComputationStrategyFactory.js.map +1 -0
  185. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationSession.d.ts +7 -0
  186. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationSession.d.ts.map +1 -0
  187. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationSession.js +2 -0
  188. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationSession.js.map +1 -0
  189. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategy.d.ts +6 -0
  190. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategy.d.ts.map +1 -0
  191. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategy.js +2 -0
  192. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategy.js.map +1 -0
  193. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategyFactory.d.ts +6 -0
  194. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategyFactory.d.ts.map +1 -0
  195. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategyFactory.js +2 -0
  196. package/dist/src/uploader/md5Provider/md5ComputationStrategies/md5ComputationStrategyFactory.js.map +1 -0
  197. package/dist/src/uploader/md5Provider/md5ComputationStrategies/node/nodeAsyncMD5ComputationStrategy.d.ts +7 -0
  198. package/dist/src/uploader/md5Provider/md5ComputationStrategies/node/nodeAsyncMD5ComputationStrategy.d.ts.map +1 -0
  199. package/dist/src/uploader/md5Provider/md5ComputationStrategies/node/nodeAsyncMD5ComputationStrategy.js +14 -0
  200. package/dist/src/uploader/md5Provider/md5ComputationStrategies/node/nodeAsyncMD5ComputationStrategy.js.map +1 -0
  201. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/computeBlobMD5.d.ts +2 -0
  202. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/computeBlobMD5.d.ts.map +1 -0
  203. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/computeBlobMD5.js +27 -0
  204. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/computeBlobMD5.js.map +1 -0
  205. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5.worker.d.ts +2 -0
  206. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5.worker.d.ts.map +1 -0
  207. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5.worker.js +5 -0
  208. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5.worker.js.map +1 -0
  209. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkerMessages.d.ts +14 -0
  210. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkerMessages.d.ts.map +1 -0
  211. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkerMessages.js +2 -0
  212. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkerMessages.js.map +1 -0
  213. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkersManager.d.ts +17 -0
  214. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkersManager.d.ts.map +1 -0
  215. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkersManager.js +113 -0
  216. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/md5WorkersManager.js.map +1 -0
  217. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/registerMD5Worker.d.ts +7 -0
  218. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/registerMD5Worker.d.ts.map +1 -0
  219. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/registerMD5Worker.js +17 -0
  220. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/md5WebWorker/registerMD5Worker.js.map +1 -0
  221. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webAsyncWebWorkerMD5ComputationStrategy.d.ts +9 -0
  222. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webAsyncWebWorkerMD5ComputationStrategy.d.ts.map +1 -0
  223. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webAsyncWebWorkerMD5ComputationStrategy.js +62 -0
  224. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webAsyncWebWorkerMD5ComputationStrategy.js.map +1 -0
  225. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webMD5ComputationStrategyFactory.d.ts +9 -0
  226. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webMD5ComputationStrategyFactory.d.ts.map +1 -0
  227. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webMD5ComputationStrategyFactory.js +41 -0
  228. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webMD5ComputationStrategyFactory.js.map +1 -0
  229. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webSyncMD5ComputationStrategy.d.ts +6 -0
  230. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webSyncMD5ComputationStrategy.d.ts.map +1 -0
  231. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webSyncMD5ComputationStrategy.js +9 -0
  232. package/dist/src/uploader/md5Provider/md5ComputationStrategies/web/webSyncMD5ComputationStrategy.js.map +1 -0
  233. package/dist/src/uploader/md5Provider/precomputedMD5Provider.d.ts +27 -0
  234. package/dist/src/uploader/md5Provider/precomputedMD5Provider.d.ts.map +1 -0
  235. package/dist/src/uploader/md5Provider/precomputedMD5Provider.js +189 -0
  236. package/dist/src/uploader/md5Provider/precomputedMD5Provider.js.map +1 -0
  237. package/dist/src/uploader/md5Provider/uploaderMD5Provider.d.ts +28 -0
  238. package/dist/src/uploader/md5Provider/uploaderMD5Provider.d.ts.map +1 -0
  239. package/dist/src/uploader/md5Provider/uploaderMD5Provider.js +2 -0
  240. package/dist/src/uploader/md5Provider/uploaderMD5Provider.js.map +1 -0
  241. package/dist/src/uploader/options/transferUploadAppendInfo.js.map +1 -1
  242. package/dist/src/uploader/options/transferUploadConfig.js.map +1 -1
  243. package/dist/src/uploader/options/transferUploadInfo.d.ts +1 -0
  244. package/dist/src/uploader/options/transferUploadInfo.d.ts.map +1 -1
  245. package/dist/src/uploader/options/transferUploadInfo.js.map +1 -1
  246. package/dist/src/uploader/options/transferUploadInfoBase.js.map +1 -1
  247. package/dist/src/uploader/pauseController.js.map +1 -1
  248. package/dist/src/uploader/pendingFileAck.js.map +1 -1
  249. package/dist/src/uploader/registeredTransferFile.js.map +1 -1
  250. package/dist/src/uploader/state/continuousChunksCalculator.js.map +1 -1
  251. package/dist/src/uploader/state/readonlyTransferUploadStateFile.js.map +1 -1
  252. package/dist/src/uploader/state/readonlyTransferUploadStateFiles.js.map +1 -1
  253. package/dist/src/uploader/state/transferUploadProgressCalculator.js.map +1 -1
  254. package/dist/src/uploader/state/transferUploadState.js.map +1 -1
  255. package/dist/src/uploader/state/transferUploadStateFile.js.map +1 -1
  256. package/dist/src/uploader/state/transferUploadStateFiles.js.map +1 -1
  257. package/dist/src/uploader/transferFailureAbortReason.js.map +1 -1
  258. package/dist/src/uploader/transferFilesRegistrar.js.map +1 -1
  259. package/dist/src/uploader/transferUpload.d.ts +4 -2
  260. package/dist/src/uploader/transferUpload.d.ts.map +1 -1
  261. package/dist/src/uploader/transferUpload.js +28 -9
  262. package/dist/src/uploader/transferUpload.js.map +1 -1
  263. package/dist/src/uploader/transferUploadAcker.js.map +1 -1
  264. package/dist/src/uploader/transferUploadError.js.map +1 -1
  265. package/dist/src/uploader/transferUploadEvent.js.map +1 -1
  266. package/dist/src/utils/api/apiClient.js.map +1 -1
  267. package/dist/src/utils/api/apiClientBase.js.map +1 -1
  268. package/dist/src/utils/api/apiError.js.map +1 -1
  269. package/dist/src/utils/api/apiFilemail449Error.js.map +1 -1
  270. package/dist/src/utils/api/apiFilemailError.js.map +1 -1
  271. package/dist/src/utils/api/dtos/ackTransferFilesRequest.js.map +1 -1
  272. package/dist/src/utils/api/dtos/ackTransferFilesResponse.js.map +1 -1
  273. package/dist/src/utils/api/dtos/baseResponse.js.map +1 -1
  274. package/dist/src/utils/api/dtos/cancelTransferRequest.js.map +1 -1
  275. package/dist/src/utils/api/dtos/finalizeTransferRequest.js.map +1 -1
  276. package/dist/src/utils/api/dtos/finalizeTransferResponse.js.map +1 -1
  277. package/dist/src/utils/api/dtos/getCompanyResponse.js.map +1 -1
  278. package/dist/src/utils/api/dtos/getCompressedFileMetadataResponse.js.map +1 -1
  279. package/dist/src/utils/api/dtos/getInboxTransfersRequest.js.map +1 -1
  280. package/dist/src/utils/api/dtos/getInboxTransfersResponse.js.map +1 -1
  281. package/dist/src/utils/api/dtos/getRangehashResponse.js.map +1 -1
  282. package/dist/src/utils/api/dtos/getTransferRequest.js.map +1 -1
  283. package/dist/src/utils/api/dtos/getTransferResponse.js.map +1 -1
  284. package/dist/src/utils/api/dtos/initializeTransferRequest.d.ts +1 -0
  285. package/dist/src/utils/api/dtos/initializeTransferRequest.d.ts.map +1 -1
  286. package/dist/src/utils/api/dtos/initializeTransferRequest.js.map +1 -1
  287. package/dist/src/utils/api/dtos/initializeTransferResponse.js.map +1 -1
  288. package/dist/src/utils/api/dtos/loginRequest.js.map +1 -1
  289. package/dist/src/utils/api/dtos/loginResponse.js.map +1 -1
  290. package/dist/src/utils/api/dtos/registerFileDownloadRequest.js.map +1 -1
  291. package/dist/src/utils/api/dtos/registerTransferDownloadRequest.js.map +1 -1
  292. package/dist/src/utils/api/dtos/registerTransferFilesRequest.js.map +1 -1
  293. package/dist/src/utils/api/dtos/registerTransferFilesResponse.js.map +1 -1
  294. package/dist/src/utils/api/dtos/resetTransferRequest.js.map +1 -1
  295. package/dist/src/utils/api/dtos/sendFileChunkRequest.d.ts +1 -0
  296. package/dist/src/utils/api/dtos/sendFileChunkRequest.d.ts.map +1 -1
  297. package/dist/src/utils/api/dtos/sendFileChunkRequest.js.map +1 -1
  298. package/dist/src/utils/api/dtos/transferCustomFieldDto.js.map +1 -1
  299. package/dist/src/utils/api/dtos/transferFileDto.js.map +1 -1
  300. package/dist/src/utils/api/fileServerClientFactory.js.map +1 -1
  301. package/dist/src/utils/api/node/gotWorkarounds.js.map +1 -1
  302. package/dist/src/utils/api/node/nodeApiClient.js.map +1 -1
  303. package/dist/src/utils/api/node/nodeClientBase.js.map +1 -1
  304. package/dist/src/utils/api/node/nodeFileServerClientFactory.js.map +1 -1
  305. package/dist/src/utils/api/node/nodeFileserverClientBase.js.map +1 -1
  306. package/dist/src/utils/api/urlUtil.js.map +1 -1
  307. package/dist/src/utils/api/web/webApiClient.js.map +1 -1
  308. package/dist/src/utils/api/web/webClientBase.js.map +1 -1
  309. package/dist/src/utils/api/web/webFileServerClientFactory.js.map +1 -1
  310. package/dist/src/utils/api/web/webFileserverClientBase.js.map +1 -1
  311. package/dist/src/utils/concurrencyController/concurrencyController.js.map +1 -1
  312. package/dist/src/utils/concurrencyController/concurrencyReleaser.js.map +1 -1
  313. package/dist/src/utils/concurrencyController/transferConcurrencyController.js.map +1 -1
  314. package/dist/src/utils/crypto/cryptographyProvider.js.map +1 -1
  315. package/dist/src/utils/crypto/node/nodeCryptographyProvider.js.map +1 -1
  316. package/dist/src/utils/crypto/web/webCryptographyProvider.js.map +1 -1
  317. package/dist/src/utils/dateAndTime/simpleDateFormatter.js.map +1 -1
  318. package/dist/src/utils/events/chunkProgressEvent.js.map +1 -1
  319. package/dist/src/utils/events/eventsEngine.js.map +1 -1
  320. package/dist/src/utils/events/node/nodeEventsEngine.js.map +1 -1
  321. package/dist/src/utils/events/web/webEventsEngine.js.map +1 -1
  322. package/dist/src/utils/fileSystem/chunkStreamEncryptionData.d.ts +6 -0
  323. package/dist/src/utils/fileSystem/chunkStreamEncryptionData.d.ts.map +1 -0
  324. package/dist/src/utils/fileSystem/chunkStreamEncryptionData.js +2 -0
  325. package/dist/src/utils/fileSystem/chunkStreamEncryptionData.js.map +1 -0
  326. package/dist/src/utils/fileSystem/chunkStreamProvider.d.ts +0 -5
  327. package/dist/src/utils/fileSystem/chunkStreamProvider.d.ts.map +1 -1
  328. package/dist/src/utils/fileSystem/chunkStreamProvider.js.map +1 -1
  329. package/dist/src/utils/fileSystem/chunkStreamProviderFactory.d.ts +2 -2
  330. package/dist/src/utils/fileSystem/chunkStreamProviderFactory.d.ts.map +1 -1
  331. package/dist/src/utils/fileSystem/chunkStreamProviderFactory.js.map +1 -1
  332. package/dist/src/utils/fileSystem/fileDetails.js.map +1 -1
  333. package/dist/src/utils/fileSystem/fileSystemService.js.map +1 -1
  334. package/dist/src/utils/fileSystem/fsError.js.map +1 -1
  335. package/dist/src/utils/fileSystem/node/nodeChunkStreamProvider.d.ts +2 -3
  336. package/dist/src/utils/fileSystem/node/nodeChunkStreamProvider.d.ts.map +1 -1
  337. package/dist/src/utils/fileSystem/node/nodeChunkStreamProvider.js +9 -28
  338. package/dist/src/utils/fileSystem/node/nodeChunkStreamProvider.js.map +1 -1
  339. package/dist/src/utils/fileSystem/node/nodeChunkStreamProviderFactory.d.ts +2 -2
  340. package/dist/src/utils/fileSystem/node/nodeChunkStreamProviderFactory.d.ts.map +1 -1
  341. package/dist/src/utils/fileSystem/node/nodeChunkStreamProviderFactory.js +1 -1
  342. package/dist/src/utils/fileSystem/node/nodeChunkStreamProviderFactory.js.map +1 -1
  343. package/dist/src/utils/fileSystem/node/nodeFileDetails.js.map +1 -1
  344. package/dist/src/utils/fileSystem/node/nodeFileSystemService.js.map +1 -1
  345. package/dist/src/utils/fileSystem/parsedPath.js.map +1 -1
  346. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamEncrypter.js.map +1 -1
  347. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.d.ts +2 -3
  348. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.d.ts.map +1 -1
  349. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.js +0 -19
  350. package/dist/src/utils/fileSystem/web/chunkStreamProvider/webChunkStreamProvider.js.map +1 -1
  351. package/dist/src/utils/fileSystem/web/webChunkStreamProviderFactory.d.ts +2 -2
  352. package/dist/src/utils/fileSystem/web/webChunkStreamProviderFactory.d.ts.map +1 -1
  353. package/dist/src/utils/fileSystem/web/webChunkStreamProviderFactory.js +1 -1
  354. package/dist/src/utils/fileSystem/web/webChunkStreamProviderFactory.js.map +1 -1
  355. package/dist/src/utils/fileSystem/web/webFileDetails.js.map +1 -1
  356. package/dist/src/utils/jsonParsing.js.map +1 -1
  357. package/dist/src/utils/logging/logEventPropertyNames.js.map +1 -1
  358. package/dist/src/utils/mergeAbortAndPauseSignals.js.map +1 -1
  359. package/dist/src/utils/networking/throttlingOptions.js.map +1 -1
  360. package/dist/src/utils/promiseAll.js.map +1 -1
  361. package/dist/src/utils/types/transferStatus.js.map +1 -1
  362. package/dist/src/utils/uint8ArrayUtils.js.map +1 -1
  363. package/package.json +80 -78
  364. package/readme.md +27 -19
  365. package/dist/src/uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.d.ts +0 -9
  366. package/dist/src/uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.d.ts.map +0 -1
  367. package/dist/src/uploader/chunkStreamProviderFactory/nodeFileDetailsUploaderChunkStreamProviderFactory.js.map +0 -1
  368. package/dist/src/uploader/chunkStreamProviderFactory/webFileDetailsUploaderChunkStreamProviderFactory.d.ts +0 -9
  369. package/dist/src/uploader/chunkStreamProviderFactory/webFileDetailsUploaderChunkStreamProviderFactory.d.ts.map +0 -1
  370. package/dist/src/uploader/chunkStreamProviderFactory/webFileDetailsUploaderChunkStreamProviderFactory.js.map +0 -1
@@ -23,6 +23,7 @@ export default class TransferUpload {
23
23
  #concurrencyController;
24
24
  #cryptography;
25
25
  #acker;
26
+ #md5Provider;
26
27
  #transferState;
27
28
  #transferMetadata;
28
29
  #transferDownloadUrl;
@@ -64,7 +65,7 @@ export default class TransferUpload {
64
65
  get transferId() {
65
66
  return this.#transferMetadata?.transferId;
66
67
  }
67
- constructor(chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, info, config, concurrencyController, cryptography, acker) {
68
+ constructor(chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, info, config, concurrencyController, cryptography, acker, md5Provider) {
68
69
  if (info.files.length === 0)
69
70
  throw new TransferUploadError(`Files can't be empty`);
70
71
  this.#totalSizeInBytes = info.files.reduce((partialSum, file) => partialSum + file.fileSizeInBytes, 0);
@@ -78,6 +79,7 @@ export default class TransferUpload {
78
79
  this.#concurrencyController = concurrencyController;
79
80
  this.#cryptography = cryptography;
80
81
  this.#acker = acker;
82
+ this.#md5Provider = md5Provider;
81
83
  this.#filesRegistrar = this.#isLegacyTransfer
82
84
  ? undefined
83
85
  : new TransferFilesRegistrar(apiClient, eventsEngine, info.files);
@@ -118,9 +120,10 @@ export default class TransferUpload {
118
120
  else if (!this.#transferMetadata)
119
121
  await this.startApiTransferAndCreateMetadata();
120
122
  this.notifyMetadataDetermined();
121
- this.startBackgroundWorkers(transferPauseSignal, transferAbortSignal);
123
+ const chunksPlan = this.createChunksPlan();
124
+ this.startBackgroundWorkers(chunksPlan, transferPauseSignal, transferAbortSignal);
122
125
  const ongoingChunkUploads = new Set();
123
- for (const file of this.files) {
126
+ for (const { file, createChunksIterator } of chunksPlan) {
124
127
  const fileStatus = this.#transferState.getFile(file.externalId);
125
128
  if (fileStatus.isCompleted)
126
129
  continue;
@@ -131,9 +134,7 @@ export default class TransferUpload {
131
134
  this.enqueueFileAck(file);
132
135
  continue;
133
136
  }
134
- const alreadySentChunks = this.#transferState.getChunksForFile(file.externalId);
135
- const chunksIterator = new ChunksIterator(alreadySentChunks, file.fileSizeInBytes, this.#config.chunkSizeInBytes);
136
- for (const chunk of chunksIterator.getChunksIterator()) {
137
+ for (const chunk of createChunksIterator()) {
137
138
  const releaseSemaphore = await this.#concurrencyController.acquire();
138
139
  if (this.shouldStopProcessing()) {
139
140
  releaseSemaphore();
@@ -188,14 +189,29 @@ export default class TransferUpload {
188
189
  this.#isRunMethodRunning = false;
189
190
  }
190
191
  }
191
- startBackgroundWorkers(transferPauseSignal, transferAbortSignal) {
192
+ startBackgroundWorkers(chunksPlan, transferPauseSignal, transferAbortSignal) {
193
+ const filesToHash = chunksPlan.map(({ file, createChunksIterator }) => ({ file, chunksIterator: createChunksIterator() }));
192
194
  const fileAckSuccessfullCallback = (externalFileId, uploadItemId) => this.#transferState.fileCompleted(externalFileId, uploadItemId);
193
195
  const fileAckFailedCallback = (externalFileId, uploadItemId, reason, error) => this.#transferState.fileAckFailed(externalFileId, uploadItemId, reason, error);
196
+ this.#md5Provider.start(filesToHash, this.#transferMetadata?.encryptionData, this.#mergedPauseAndAbortController?.signal);
194
197
  this.#acker.start(this.#transferMetadata.transferId, this.#transferMetadata.transferKey, fileAckSuccessfullCallback, fileAckFailedCallback, transferPauseSignal, transferAbortSignal);
195
198
  this.#filesRegistrar?.start(this.#transferMetadata.transferId, this.#transferMetadata.transferKey, this.#mergedPauseAndAbortController?.signal);
196
199
  }
200
+ createChunksPlan() {
201
+ const chunkSizeInBytes = this.#config.chunkSizeInBytes;
202
+ return this.files.map(file => {
203
+ // Upload progress mutates these ranges, so both iterators need the same snapshot for this run.
204
+ const alreadySentChunks = this.#transferState.getChunksForFile(file.externalId).map(chunk => ({ ...chunk }));
205
+ const fileSizeInBytes = file.fileSizeInBytes;
206
+ return {
207
+ file,
208
+ createChunksIterator: () => new ChunksIterator(alreadySentChunks, fileSizeInBytes, chunkSizeInBytes).getChunksIterator(),
209
+ };
210
+ });
211
+ }
197
212
  async stopBackgroundWorkers() {
198
213
  await Promise.allSettled([
214
+ this.#md5Provider?.stop(),
199
215
  this.#filesRegistrar?.stop(),
200
216
  this.#acker.stop(),
201
217
  ]);
@@ -251,7 +267,9 @@ export default class TransferUpload {
251
267
  }
252
268
  }
253
269
  async sendChunk(file, fileId, chunkStreamProvider, progressEventHandler) {
270
+ const md5 = await this.#md5Provider.getMd5Checksum(file, chunkStreamProvider.chunkStartPosition);
254
271
  const request = {
272
+ md5,
255
273
  chunkLengthInBytes: chunkStreamProvider.chunkLengthInBytes,
256
274
  chunkStartPosition: chunkStreamProvider.chunkStartPosition,
257
275
  };
@@ -318,6 +336,7 @@ export default class TransferUpload {
318
336
  try {
319
337
  const encryptionDataAndIvSaltHex = await this.generateEncryptionDataAndIvSaltHmacHex(this.#info.e2eeKey);
320
338
  const request = {
339
+ dataRegion: this.#info.dataRegion,
321
340
  e2ee: Boolean(encryptionDataAndIvSaltHex),
322
341
  e2ee_keyhash: encryptionDataAndIvSaltHex?.ivSaltHmacHex,
323
342
  transfersize: this.totalSizeInBytes,
@@ -512,14 +531,14 @@ export default class TransferUpload {
512
531
  },
513
532
  };
514
533
  }
515
- static recreate(transferExportData, config, chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, concurrencyController, cryptography, acker) {
534
+ static recreate(transferExportData, config, chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, concurrencyController, cryptography, acker, md5Provider) {
516
535
  try {
517
536
  TransferUpload.validateRecreateParams(transferExportData);
518
537
  const recreatedInfo = {
519
538
  ...transferExportData.info,
520
539
  isLegacyTransfer: transferExportData.registeredFiles === undefined,
521
540
  };
522
- const transfer = new TransferUpload(chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, recreatedInfo, config, concurrencyController, cryptography, acker);
541
+ const transfer = new TransferUpload(chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, recreatedInfo, config, concurrencyController, cryptography, acker, md5Provider);
523
542
  transfer.#transferMetadata = this.recreateTransferMetadata(transferExportData.transferMetadata);
524
543
  transfer.#transferState = new TransferUploadState(transferExportData.info.files, eventsEngine, config.currentRatesTimespanInMs, config.progressEventThrottlingInMs, transferExportData.state);
525
544
  if (transfer.isUploadAppendInfo(transferExportData.info))
@@ -1 +1 @@
1
- {"version":3,"file":"transferUpload.js","sourceRoot":"","sources":["../../../src/uploader/transferUpload.ts"],"names":[],"mappings":"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","sourcesContent":["import TransferUploadState from \"./state/transferUploadState.js\";\r\nimport TransferUploadError from \"./transferUploadError.js\";\r\nimport TransferStatus from \"../utils/types/transferStatus.js\";\r\nimport TransferUploadEvent from './transferUploadEvent.js';\r\nimport ChunksIterator from './chunksIterator/chunksIterator.js';\r\nimport TransferFilesRegistrar, { type RegistrationResult } from './transferFilesRegistrar.js';\r\nimport mergeAbortAndPauseSignals, { type MergedAbortAndPauseController } from '../utils/mergeAbortAndPauseSignals.js';\r\nimport ApiError from '../utils/api/apiError.js';\r\nimport FsError from '../utils/fileSystem/fsError.js';\r\nimport ApiFilemail449Error from '../utils/api/apiFilemail449Error.js';\r\nimport { promiseAllSettled } from '../utils/promiseAll.js';\r\nimport { isTransferFailureAbortReason } from './transferFailureAbortReason.js';\r\nimport { concatUint8Arrays, hexToUint8Array, uint8ArrayToHex } from '../utils/uint8ArrayUtils.js';\r\n\r\nimport type ApiClient from \"../utils/api/apiClient.js\";\r\nimport type { InitializeTransferRequest } from \"../utils/api/dtos/initializeTransferRequest.js\";\r\nimport type SendFileChunkRequest from '../utils/api/dtos/sendFileChunkRequest.js';\r\nimport type FileServerClientFactory from '../utils/api/fileServerClientFactory.js';\r\nimport type FileDetails from \"../utils/fileSystem/fileDetails.js\";\r\nimport type TransferUploadMetadata from \"./export/transferUploadMetadata.js\";\r\nimport type TransferUploadInfo from \"./options/transferUploadInfo.js\";\r\nimport type { TransferUploadAppendInfo } from './options/transferUploadAppendInfo.js';\r\nimport type ResetTransferRequest from '../utils/api/dtos/resetTransferRequest.js';\r\nimport type EventsEngine from '../utils/events/eventsEngine.js';\r\nimport type FileChunkUploadEventArgs from './eventArgs/fileChunkUploadEventArgs.js';\r\nimport type FileChunkUploadFailedEventArgs from './eventArgs/fileChunkUploadFailedEventArgs.js';\r\nimport type ChunkProgressEvent from '../utils/events/chunkProgressEvent.js';\r\nimport type FinalizeTransferRequest from '../utils/api/dtos/finalizeTransferRequest.js';\r\nimport type FileUploadEventArgs from './eventArgs/fileUploadEventArgs.js';\r\nimport type TransferUploadCompletedEventArgs from './eventArgs/transferUploadCompletedEventArgs.js';\r\nimport type CancelTransferRequest from '../utils/api/dtos/cancelTransferRequest.js';\r\nimport type ConcurrencyReleaser from \"../utils/concurrencyController/concurrencyReleaser.js\";\r\nimport type FileUploadFailedEventArgs from './eventArgs/fileUploadFailedEventArgs.js';\r\nimport type FilesRegistrationBatchFailedEventArgs from './eventArgs/filesRegistrationBatchFailedEventArgs.js';\r\nimport type FileAckFailedEventArgs from './eventArgs/fileAckFailedEventArgs.js';\r\nimport type FilesBatchAckFailedEventArgs from './eventArgs/filesBatchAckFailedEventArgs.js';\r\nimport type TransferUploadAcker from './transferUploadAcker.js';\r\nimport type RegisteredTransferFile from './registeredTransferFile.js';\r\nimport type TransferUploadProgressedEventArgs from './eventArgs/transferUploadProgressedEventArgs.js';\r\nimport type FileChunkUploadProgressedEventArgs from './eventArgs/fileChunkUploadProgressedEventArgs.js';\r\nimport type UploaderChunkStreamProviderFactory from './chunkStreamProviderFactory/uploaderChunkStreamProviderFactory.js';\r\nimport type TransferUploadConfig from './options/transferUploadConfig.js';\r\nimport type { PauseSignal } from './pauseController.js';\r\nimport type ChunkStreamProvider from '../utils/fileSystem/chunkStreamProvider.js';\r\nimport type ConcurrencyController from '../utils/concurrencyController/concurrencyController.js';\r\nimport type FileChunkUploadCompletedPartiallyEventArgs from './eventArgs/fileChunkUploadCompletedPartiallyEventArgs.js';\r\nimport type FileChunkUploadCompletedEventArgs from './eventArgs/fileChunkUploadCompletedEventArgs.js';\r\nimport type TransferMetadataDeterminedEventArgs from './eventArgs/transferMetadataDeterminedEventArgs.js';\r\nimport type CryptographyProvider from '../utils/crypto/cryptographyProvider.js';\r\nimport type { TransferUploadExportData, TransferUploadExportDataAppendInfo, TransferUploadExportDataMetadata } from './export/transferUploadExportData.js';\r\n\r\nexport default class TransferUpload<T extends FileDetails> {\r\n #totalSizeInBytes: number;\r\n\r\n #chunkStreamProviderFactory: UploaderChunkStreamProviderFactory<T>;\r\n #apiClient: ApiClient;\r\n #fileServerClientFactory: FileServerClientFactory;\r\n #eventsEngine: EventsEngine;\r\n #info: TransferUploadInfo<T> | TransferUploadAppendInfo<T>;\r\n #isLegacyTransfer: boolean;\r\n #config: TransferUploadConfig;\r\n #concurrencyController: ConcurrencyController;\r\n #cryptography: CryptographyProvider;\r\n #acker: TransferUploadAcker;\r\n\r\n #transferState?: TransferUploadState;\r\n #transferMetadata?: TransferUploadMetadata;\r\n #transferDownloadUrl?: string;\r\n #transferConfirmationUrl?: string;\r\n #transferRecipientTrackingLinks?: TransferUploadCompletedEventArgs[`recipientTrackingLinks`];\r\n\r\n #pauseSignal: PauseSignal | undefined;\r\n #abortSignal: AbortSignal | undefined;\r\n #mergedPauseAndAbortController: MergedAbortAndPauseController | undefined;\r\n\r\n #filesRegistrar: TransferFilesRegistrar | undefined;\r\n\r\n pauseEventListener: (() => void) | undefined;\r\n abortEventListener: (() => void) | undefined;\r\n\r\n #isRunMethodRunning = false;\r\n\r\n get status(): TransferStatus {\r\n return this.#transferState?.status ?? TransferStatus.Initialized;\r\n }\r\n\r\n get completedFilesCount(): number {\r\n return this.#transferState?.completedFilesCount ?? 0;\r\n }\r\n\r\n get failedFilesCount(): number {\r\n return this.#transferState?.failedFilesCount ?? 0;\r\n }\r\n\r\n get uploadedBytesCount(): number {\r\n return this.#transferState?.uploadedBytesCount ?? 0;\r\n }\r\n\r\n get failedBytesCount(): number {\r\n return this.#transferState?.failedBytesCount ?? 0;\r\n }\r\n\r\n get progressInPercentage(): number {\r\n if (this.totalSizeInBytes === 0)\r\n return 0;\r\n\r\n return (this.uploadedBytesCount * 100) / this.totalSizeInBytes;\r\n }\r\n\r\n get files(): readonly Readonly<T>[] {\r\n return this.#info.files;\r\n }\r\n\r\n get totalSizeInBytes(): number {\r\n return this.#totalSizeInBytes;\r\n }\r\n\r\n get transferId(): string | undefined {\r\n return this.#transferMetadata?.transferId;\r\n }\r\n\r\n constructor(chunkStreamProviderFactory: UploaderChunkStreamProviderFactory<T>, apiClient: ApiClient, fileServerClientFactory: FileServerClientFactory, eventsEngine: EventsEngine, info: TransferUploadInfo<T> | TransferUploadAppendInfo<T>, config: TransferUploadConfig, concurrencyController: ConcurrencyController, cryptography: CryptographyProvider, acker: TransferUploadAcker) {\r\n if (info.files.length === 0)\r\n throw new TransferUploadError(`Files can't be empty`);\r\n\r\n this.#totalSizeInBytes = info.files.reduce((partialSum, file) => partialSum + file.fileSizeInBytes, 0);\r\n\r\n this.#chunkStreamProviderFactory = chunkStreamProviderFactory;\r\n this.#apiClient = apiClient;\r\n this.#fileServerClientFactory = fileServerClientFactory;\r\n this.#eventsEngine = eventsEngine;\r\n this.#info = info;\r\n this.#isLegacyTransfer = info.isLegacyTransfer ?? false;\r\n this.#config = config;\r\n this.#concurrencyController = concurrencyController;\r\n this.#cryptography = cryptography;\r\n this.#acker = acker;\r\n\r\n this.#filesRegistrar = this.#isLegacyTransfer\r\n ? undefined\r\n : new TransferFilesRegistrar(apiClient, eventsEngine, info.files);\r\n }\r\n\r\n private isUploadAppend(): boolean {\r\n return this.isUploadAppendInfo(this.#info);\r\n }\r\n\r\n private isUploadAppendInfo(info: TransferUploadInfo<T> | TransferUploadAppendInfo<T>): info is TransferUploadAppendInfo<T> {\r\n return (info as TransferUploadAppendInfo<T>).transferKey !== undefined;\r\n }\r\n\r\n private createTransferMetadataFromInfo() {\r\n if (!this.isUploadAppendInfo(this.#info))\r\n throw new TransferUploadError(`Options are not TransferUploadAppendOptions`);\r\n\r\n this.#transferDownloadUrl = this.#info.transferDownloadUrl;\r\n\r\n this.#transferMetadata = {\r\n transferId: this.#info.transferId,\r\n transferKey: this.#info.transferKey,\r\n transferFileServerUrl: this.#info.transferFileServerUrl,\r\n transferRegion: this.#info.transferRegion,\r\n encryptionData: this.#info.e2eeData,\r\n };\r\n }\r\n\r\n async run(transferPauseSignal: PauseSignal, transferAbortSignal: AbortSignal): Promise<void> {\r\n this.throwIfNotPossibleToRun(transferPauseSignal, transferAbortSignal);\r\n\r\n this.#isRunMethodRunning = true;\r\n\r\n try {\r\n this.#pauseSignal = transferPauseSignal;\r\n this.#abortSignal = transferAbortSignal;\r\n this.#mergedPauseAndAbortController = mergeAbortAndPauseSignals(transferPauseSignal, transferAbortSignal);\r\n\r\n if (!this.#transferState)\r\n this.#transferState = new TransferUploadState(this.files, this.#eventsEngine, this.#config.currentRatesTimespanInMs, this.#config.progressEventThrottlingInMs);\r\n else\r\n this.#transferState.recover();\r\n\r\n this.#transferState.transferRun();\r\n\r\n this.addPauseAndStopListeners();\r\n\r\n if (this.isUploadAppend() && !this.#transferMetadata)\r\n this.createTransferMetadataFromInfo();\r\n else if (!this.#transferMetadata)\r\n await this.startApiTransferAndCreateMetadata();\r\n\r\n this.notifyMetadataDetermined();\r\n\r\n this.startBackgroundWorkers(transferPauseSignal, transferAbortSignal);\r\n\r\n const ongoingChunkUploads = new Set<Promise<void>>();\r\n\r\n for (const file of this.files) {\r\n const fileStatus = this.#transferState.getFile(file.externalId);\r\n\r\n if (fileStatus.isCompleted)\r\n continue;\r\n\r\n const registrationResult = await this.waitUntilFileRegistered(file);\r\n\r\n if (!registrationResult.isRegisteredSuccessfully)\r\n continue;\r\n\r\n if (fileStatus.isUploadCompleted) {\r\n this.enqueueFileAck(file);\r\n continue;\r\n }\r\n\r\n const alreadySentChunks = this.#transferState.getChunksForFile(file.externalId);\r\n const chunksIterator = new ChunksIterator(alreadySentChunks, file.fileSizeInBytes, this.#config.chunkSizeInBytes);\r\n\r\n for (const chunk of chunksIterator.getChunksIterator()) {\r\n const releaseSemaphore = await this.#concurrencyController.acquire();\r\n\r\n if (this.shouldStopProcessing()) {\r\n releaseSemaphore();\r\n break;\r\n }\r\n\r\n const chunkUploadPromise = this.sendChunkAndKeepUpdatingState(file, chunk.startPosition, chunk.sizeInBytes, releaseSemaphore);\r\n\r\n const trackedChunkUploadPromise = chunkUploadPromise.finally(() => {\r\n ongoingChunkUploads.delete(trackedChunkUploadPromise);\r\n });\r\n\r\n ongoingChunkUploads.add(trackedChunkUploadPromise);\r\n\r\n if (this.shouldStopProcessing())\r\n break;\r\n }\r\n\r\n if (this.shouldStopProcessing())\r\n break;\r\n }\r\n\r\n await promiseAllSettled(Array.from(ongoingChunkUploads));\r\n\r\n await this.#acker.flush();\r\n\r\n if (this.#transferState.status === TransferStatus.Pausing)\r\n this.#transferState.transferPaused();\r\n else if (this.#transferState.status === TransferStatus.Aborting)\r\n this.#transferState.transferAborted();\r\n else if (this.uploadedBytesCount !== this.totalSizeInBytes || this.hasUnackedFiles())\r\n this.#transferState.transferFailed();\r\n else {\r\n await this.finalizeTransfer();\r\n this.#transferState.transferCompleted(this.#transferMetadata!, this.#transferDownloadUrl!, this.#transferConfirmationUrl, this.#transferRecipientTrackingLinks);\r\n }\r\n }\r\n catch (error) {\r\n // We can get here with pausing or aborting status if any API call fails (e.g., finalizeTransfer) so we need to check the status again\r\n if (!this.#transferState)\r\n this.#eventsEngine.emit(TransferUploadEvent.TransferFailed);\r\n else if (this.#transferState.status === TransferStatus.Pausing) {\r\n this.#transferState.transferPaused();\r\n return;\r\n }\r\n else if (this.#transferState.status === TransferStatus.Aborting) {\r\n this.#transferState.transferAborted();\r\n return;\r\n }\r\n else\r\n this.#transferState.transferFailed();\r\n\r\n if (error instanceof TransferUploadError)\r\n throw error;\r\n else\r\n throw new TransferUploadError(`Unhandled error occured. See 'cause' for more details`, { cause: error as Error });\r\n }\r\n finally {\r\n await this.stopBackgroundWorkers();\r\n\r\n this.removePauseAndStopListeners();\r\n this.#isRunMethodRunning = false;\r\n }\r\n }\r\n\r\n private startBackgroundWorkers(transferPauseSignal: PauseSignal, transferAbortSignal: AbortSignal) {\r\n const fileAckSuccessfullCallback = (externalFileId: string | number, uploadItemId: string) => this.#transferState!.fileCompleted(externalFileId, uploadItemId);\r\n const fileAckFailedCallback = (externalFileId: string | number, uploadItemId: string, reason: string, error: Error) => this.#transferState!.fileAckFailed(externalFileId, uploadItemId, reason, error);\r\n\r\n this.#acker.start(this.#transferMetadata!.transferId, this.#transferMetadata!.transferKey, fileAckSuccessfullCallback, fileAckFailedCallback, transferPauseSignal, transferAbortSignal);\r\n this.#filesRegistrar?.start(this.#transferMetadata!.transferId, this.#transferMetadata!.transferKey, this.#mergedPauseAndAbortController?.signal);\r\n }\r\n\r\n private async stopBackgroundWorkers() {\r\n await Promise.allSettled([\r\n this.#filesRegistrar?.stop(),\r\n this.#acker.stop(),\r\n ]);\r\n }\r\n\r\n private async waitUntilFileRegistered(file: Readonly<T>): Promise<RegistrationResult> {\r\n if (this.#isLegacyTransfer)\r\n return { isRegisteredSuccessfully: true };\r\n\r\n return await this.#filesRegistrar!.waitUntilFileRegistered(file.externalId);\r\n }\r\n\r\n private notifyMetadataDetermined() {\r\n const eventArgs: TransferMetadataDeterminedEventArgs = {\r\n transferId: this.#transferMetadata!.transferId,\r\n fileServerUrl: this.#transferMetadata!.transferFileServerUrl,\r\n region: this.#transferMetadata!.transferRegion,\r\n };\r\n\r\n this.#eventsEngine.emit(TransferUploadEvent.TransferMetadataDetermined, eventArgs);\r\n this.#eventsEngine.emit(TransferUploadEvent.RecreateDataUpdated);\r\n }\r\n\r\n private async sendChunkAndKeepUpdatingState(file: T, chunkStartPosition: number, chunkSizeInBytes: number, releaseSemaphore: ConcurrencyReleaser): Promise<void> {\r\n let uploadedBytesCount = 0;\r\n\r\n const registeredFile = this.getRegisteredFile(file.externalId);\r\n const uploadItemId = registeredFile?.uploadItemId;\r\n\r\n try {\r\n this.#transferState!.chunkUploadStarted(file.externalId, uploadItemId, chunkStartPosition, chunkSizeInBytes);\r\n\r\n const chunkStreamProvider = this.#chunkStreamProviderFactory.createChunkStreamProvider(file, chunkStartPosition, chunkSizeInBytes, this.#transferMetadata?.encryptionData);\r\n\r\n const progressEventHandler = (eventArgs: ChunkProgressEvent) => {\r\n uploadedBytesCount += eventArgs.transferredBytesSinceLastEvent;\r\n this.#transferState!.chunkUploadProgressed(file.externalId, uploadItemId, chunkStartPosition, chunkSizeInBytes, eventArgs);\r\n };\r\n\r\n await this.sendChunk(file, registeredFile?.fileId, chunkStreamProvider, progressEventHandler);\r\n\r\n if (uploadedBytesCount === chunkSizeInBytes)\r\n this.#transferState!.chunkUploadCompleted(file.externalId, uploadItemId, chunkStartPosition, chunkSizeInBytes);\r\n else\r\n this.#transferState!.chunkUploadCompletedPartially(file.externalId, uploadItemId, chunkStartPosition, chunkSizeInBytes, uploadedBytesCount, this.#pauseSignal!.paused);\r\n\r\n if (this.#transferState!.getFile(file.externalId).isUploadCompleted)\r\n this.enqueueFileAck(file);\r\n }\r\n catch (error) {\r\n const chunkError = error as Error;\r\n\r\n const isTcpPausingError = chunkError.cause !== undefined\r\n && chunkError.cause instanceof ApiFilemail449Error\r\n && chunkError.cause.message === `Wrong md5 hash`\r\n && this.#pauseSignal?.paused === true;\r\n\r\n if (isTcpPausingError)\r\n this.#transferState!.chunkUploadCompletedPartially(file.externalId, uploadItemId, chunkStartPosition, chunkSizeInBytes, uploadedBytesCount, this.#pauseSignal!.paused);\r\n else {\r\n const failedReason = this.getChunkFailedReason(error);\r\n this.#transferState!.chunkUploadFailed(file.externalId, uploadItemId, chunkStartPosition, chunkSizeInBytes, uploadedBytesCount, failedReason, error as Error);\r\n }\r\n }\r\n finally {\r\n releaseSemaphore();\r\n }\r\n }\r\n\r\n private async sendChunk(file: T, fileId: string | undefined, chunkStreamProvider: ChunkStreamProvider, progressEventHandler: (eventArgs: ChunkProgressEvent) => void): Promise<void> {\r\n const request: SendFileChunkRequest = {\r\n chunkLengthInBytes: chunkStreamProvider.chunkLengthInBytes,\r\n chunkStartPosition: chunkStreamProvider.chunkStartPosition,\r\n };\r\n\r\n const fileServerClient = this.#fileServerClientFactory.createFileServerUploadClient(this.#transferMetadata!.transferFileServerUrl, this.#transferMetadata!.transferId, this.#transferMetadata!.transferKey, file.fileName, file.fileDestinationPathInTransfer, file.fileSizeInBytes, fileId);\r\n\r\n const ongoingRequestPromise = fileServerClient.sendFileChunk(request, chunkStreamProvider, this.#pauseSignal!, this.#abortSignal!);\r\n\r\n fileServerClient.addEventListener(`progress`, progressEventHandler);\r\n\r\n await ongoingRequestPromise;\r\n }\r\n\r\n private getChunkFailedReason(error: unknown) {\r\n if (error instanceof FsError)\r\n return `Can't read file. ${error.message}`;\r\n\r\n if (error instanceof ApiError) {\r\n const baseMessage = error.cause?.message ? `${error.message}. ${error.cause.message}` : error.message;\r\n return error.requestUrl ? `${baseMessage}. Request URL: ${error.requestUrl}` : baseMessage;\r\n }\r\n\r\n return (error as Error)?.message;\r\n }\r\n\r\n private throwIfNotPossibleToRun(pauseSignal: PauseSignal, abortSignal: AbortSignal) {\r\n if (this.#isRunMethodRunning)\r\n throw new TransferUploadError(`This transfer is running and cannot be run`);\r\n\r\n if (this.#transferState\r\n && this.#transferState.status !== TransferStatus.Failed\r\n && this.#transferState.status !== TransferStatus.Aborted\r\n && this.#transferState.status !== TransferStatus.Initialized\r\n && this.#transferState.status !== TransferStatus.Paused)\r\n throw new TransferUploadError(`Transfer is in ${TransferStatus[this.#transferState!.status]} state and cannot be run`);\r\n\r\n if (this.files.length === 0)\r\n throw new TransferUploadError(`There are no files passed to the transfer`);\r\n\r\n if (pauseSignal.paused)\r\n throw new TransferUploadError(`Can't run transfer with already paused PauseController`);\r\n\r\n if (abortSignal.aborted)\r\n throw new TransferUploadError(`Can't run transfer with already aborted AbortController`);\r\n }\r\n\r\n private addPauseAndStopListeners() {\r\n this.pauseEventListener = () => {\r\n if (this.#transferState!.status !== TransferStatus.Running)\r\n throw new TransferUploadError(`Transfer is in ${TransferStatus[this.#transferState!.status]} state and cannot be paused`);\r\n\r\n this.#transferState!.transferPauseRequested();\r\n };\r\n\r\n this.abortEventListener = () => {\r\n if (this.isFailureAbortRequested())\r\n return;\r\n\r\n if (this.#transferState!.status !== TransferStatus.Running)\r\n throw new TransferUploadError(`Transfer is in ${TransferStatus[this.#transferState!.status]} state and cannot be stopped`);\r\n\r\n this.#transferState!.transferAbortRequested();\r\n };\r\n\r\n this.#pauseSignal!.addEventListener(`pause`, this.pauseEventListener);\r\n this.#abortSignal!.addEventListener(`abort`, this.abortEventListener);\r\n }\r\n\r\n private removePauseAndStopListeners() {\r\n this.#pauseSignal!.removeEventListener(`pause`, this.pauseEventListener!);\r\n this.#abortSignal!.removeEventListener(`abort`, this.abortEventListener!);\r\n\r\n this.#mergedPauseAndAbortController?.dispose();\r\n }\r\n\r\n private shouldStopProcessing() {\r\n return this.#transferState!.status !== TransferStatus.Running || this.#abortSignal?.aborted === true || this.#pauseSignal?.paused === true;\r\n }\r\n\r\n private isFailureAbortRequested() {\r\n return isTransferFailureAbortReason(this.#abortSignal?.reason);\r\n }\r\n\r\n private async startApiTransferAndCreateMetadata() {\r\n if (this.isUploadAppendInfo(this.#info))\r\n throw new TransferUploadError(`Options are not TransferUploadOptions`);\r\n\r\n try {\r\n const encryptionDataAndIvSaltHex = await this.generateEncryptionDataAndIvSaltHmacHex(this.#info.e2eeKey);\r\n\r\n const request: InitializeTransferRequest = {\r\n e2ee: Boolean(encryptionDataAndIvSaltHex),\r\n e2ee_keyhash: encryptionDataAndIvSaltHex?.ivSaltHmacHex,\r\n transfersize: this.totalSizeInBytes,\r\n to: this.#info.to,\r\n from: this.#info.from,\r\n subject: this.#info.subject,\r\n message: this.#info.message,\r\n notify: this.#info.notify,\r\n confirmation: this.#info.confirmation,\r\n days: this.#info.days,\r\n password: this.#info.uploadPassword,\r\n companyid: this.#info.companyId,\r\n incominglogintoken: this.#info.incomingLoginToken,\r\n incomingpageid: this.#info.incomingPageId,\r\n filerequestid: this.#info.fileRequestId,\r\n filerequestshareid: this.#info.fileRequestShareId,\r\n customfields: this.#info.customFields,\r\n filesdb: !this.#isLegacyTransfer,\r\n };\r\n\r\n const response = await this.#apiClient.initializeTransfer(request, this.#mergedPauseAndAbortController?.signal);\r\n\r\n this.#transferMetadata = {\r\n transferId: response.transferId,\r\n transferKey: response.transferKey,\r\n transferFileServerUrl: response.transferUrl,\r\n transferRegion: response.transferRegion,\r\n encryptionData: encryptionDataAndIvSaltHex?.encryptionData,\r\n };\r\n }\r\n catch (error) {\r\n throw new TransferUploadError(`Error initializing transfer through the API`, { cause: error as Error });\r\n }\r\n }\r\n\r\n private getRegisteredFile(externalFileId: string | number): RegisteredTransferFile | undefined {\r\n return this.#filesRegistrar?.getRegisteredFile(externalFileId);\r\n }\r\n\r\n private enqueueFileAck(file: Readonly<T>): void {\r\n if (this.#isLegacyTransfer) {\r\n this.#transferState!.fileCompleted(file.externalId, undefined);\r\n return;\r\n }\r\n\r\n const registeredFile = this.getRegisteredFile(file.externalId);\r\n\r\n if (!registeredFile)\r\n throw new TransferUploadError(`Can't ack file with external id = ${file.externalId} - no registered file found. The transfer state is malformed.`);\r\n\r\n this.#acker.enqueue({ externalFileId: file.externalId, uploadItemId: registeredFile.uploadItemId, sizeInBytes: file.fileSizeInBytes });\r\n }\r\n\r\n private hasUnackedFiles(): boolean {\r\n if (this.#isLegacyTransfer)\r\n return false;\r\n\r\n return this.files.some(file => !this.#transferState!.getFile(file.externalId).isCompleted);\r\n }\r\n\r\n private async generateEncryptionDataAndIvSaltHmacHex(e2eeKey?: string): Promise<{ encryptionData: { iv: Uint8Array, key: Uint8Array }, ivSaltHmacHex: string, salt: Uint8Array, hmac: Uint8Array } | undefined> {\r\n if (!e2eeKey)\r\n return undefined;\r\n\r\n const salt = this.#cryptography.generateRandomBytes(16);\r\n const key = await this.#cryptography.deriveKey(e2eeKey, salt);\r\n const hmac = await this.#cryptography.generateHmac(key);\r\n const iv = this.#cryptography.generateRandomBytes(16);\r\n\r\n const ivSaltHmac = concatUint8Arrays([iv, salt, hmac]);\r\n const ivSaltHmacHex = uint8ArrayToHex(ivSaltHmac);\r\n\r\n return {\r\n encryptionData: { iv, key },\r\n hmac,\r\n salt,\r\n ivSaltHmacHex,\r\n };\r\n }\r\n\r\n private async finalizeTransfer(): Promise<void> {\r\n this.#eventsEngine.emit(TransferUploadEvent.TransferFinalizing);\r\n\r\n if (this.isUploadAppend())\r\n await this.resetApiTransfer();\r\n else\r\n await this.finalizeApiTransfer();\r\n }\r\n\r\n private async resetApiTransfer(): Promise<void> {\r\n try {\r\n const request: ResetTransferRequest = {\r\n transferid: this.#transferMetadata!.transferId,\r\n };\r\n\r\n await this.#apiClient.resetTransfer(request, this.#mergedPauseAndAbortController?.signal);\r\n }\r\n catch (error) {\r\n throw new TransferUploadError(`Error resetting transfer through the API`, { cause: error as Error });\r\n }\r\n }\r\n\r\n private async finalizeApiTransfer(): Promise<void> {\r\n try {\r\n const request: FinalizeTransferRequest = {\r\n transferid: this.#transferMetadata!.transferId,\r\n transferkey: this.#transferMetadata!.transferKey,\r\n protocol: `tcp`,\r\n };\r\n\r\n const response = await this.#apiClient.finalizeTransfer(request, this.#mergedPauseAndAbortController?.signal);\r\n\r\n this.#transferDownloadUrl = response.downloadUrl;\r\n this.#transferConfirmationUrl = response.confirmationUrl;\r\n this.#transferRecipientTrackingLinks = response.recipientTrackingLinks;\r\n }\r\n catch (error) {\r\n throw new TransferUploadError(`Error finalizing transfer through the API`, { cause: error as Error });\r\n }\r\n }\r\n\r\n async cancel(abortSignal?: AbortSignal): Promise<void> {\r\n try {\r\n const isTransferApiInitialized = Boolean(this.#transferState) && (Boolean(this.#transferMetadata) || this.isUploadAppend());\r\n\r\n if (!isTransferApiInitialized) {\r\n this.emitCancelEvents();\r\n return;\r\n }\r\n\r\n this.throwIfInWrongStateToCancel();\r\n\r\n this.#transferState!.transferCancelRequested();\r\n\r\n if (this.isUploadAppend()) {\r\n // There is no possibility to cancel transfer upload append on API for now\r\n }\r\n else {\r\n try {\r\n await this.cancelApiTransfer(abortSignal);\r\n }\r\n catch {\r\n // If API cancel fails we still finalize local transfer state as canceled to avoid hanging in Canceling.\r\n }\r\n }\r\n\r\n this.#transferState!.transferCanceled();\r\n }\r\n catch (error) {\r\n if (error instanceof TransferUploadError)\r\n throw error;\r\n else\r\n throw new TransferUploadError(`Unhandled error occured. See 'cause' for more details`, { cause: error as Error });\r\n }\r\n }\r\n\r\n private emitCancelEvents() {\r\n this.#eventsEngine.emit(TransferUploadEvent.TransferCancelRequested);\r\n this.#eventsEngine.emit(TransferUploadEvent.TransferCanceled);\r\n }\r\n\r\n private throwIfInWrongStateToCancel() {\r\n if (!this.#transferState)\r\n return;\r\n\r\n if (this.#transferState.status !== TransferStatus.Failed\r\n && this.#transferState.status !== TransferStatus.Aborted\r\n && this.#transferState.status !== TransferStatus.Initialized\r\n && this.#transferState.status !== TransferStatus.Paused)\r\n throw new TransferUploadError(`Transfer is in ${TransferStatus[this.#transferState!.status]} state and cannot be canceled`);\r\n }\r\n\r\n private async cancelApiTransfer(abortSignal?: AbortSignal): Promise<void> {\r\n try {\r\n const request: CancelTransferRequest = {\r\n transferid: this.#transferMetadata!.transferId,\r\n transferkey: this.#transferMetadata!.transferKey,\r\n };\r\n\r\n await this.#apiClient.cancelTransfer(request, abortSignal);\r\n }\r\n catch (error) {\r\n throw new TransferUploadError(`Error canceling transfer through the API`, { cause: error as Error });\r\n }\r\n }\r\n\r\n addEventListener(eventName: TransferUploadEvent.TransferRun | TransferUploadEvent.TransferPauseRequested | TransferUploadEvent.TransferPaused | TransferUploadEvent.TransferAbortRequested | TransferUploadEvent.TransferAborted | TransferUploadEvent.TransferCancelRequested | TransferUploadEvent.TransferCanceled | TransferUploadEvent.TransferFailed, handler: () => void): void\r\n addEventListener(eventName: TransferUploadEvent.FileUploadStarted | TransferUploadEvent.FileUploadCompleted | TransferUploadEvent.FileCompleted, handler: (event: FileUploadEventArgs) => void): void\r\n addEventListener(eventName: TransferUploadEvent.FileUploadFailed, handler: (event: FileUploadFailedEventArgs) => void): void\r\n addEventListener(eventName: TransferUploadEvent.FilesRegistrationBatchFailed, handler: (event: FilesRegistrationBatchFailedEventArgs) => void): void\r\n addEventListener(eventName: TransferUploadEvent.FileAckFailed, handler: (event: FileAckFailedEventArgs) => void): void\r\n addEventListener(eventName: TransferUploadEvent.FilesBatchAckFailed, handler: (event: FilesBatchAckFailedEventArgs) => void): void\r\n addEventListener(eventName: TransferUploadEvent.FileChunkUploadProgressed, handler: (event: FileChunkUploadProgressedEventArgs) => void): void\r\n addEventListener(eventName: TransferUploadEvent.FileChunkUploadStarted, handler: (event: FileChunkUploadEventArgs) => void): void\r\n addEventListener(eventName: TransferUploadEvent.FileChunkUploadCompleted, handler: (event: FileChunkUploadCompletedEventArgs) => void): void\r\n addEventListener(eventName: TransferUploadEvent.FileChunkUploadCompletedPartially, handler: (event: FileChunkUploadCompletedPartiallyEventArgs) => void): void\r\n addEventListener(eventName: TransferUploadEvent.FileChunkUploadFailed, handler: (event: FileChunkUploadFailedEventArgs) => void): void\r\n addEventListener(eventName: TransferUploadEvent.TransferProgressed, handler: (event: TransferUploadProgressedEventArgs) => void): void\r\n addEventListener(eventName: TransferUploadEvent.TransferCompleted, handler: (event: TransferUploadCompletedEventArgs) => void): void\r\n addEventListener(eventName: TransferUploadEvent.TransferMetadataDetermined, handler: (event: TransferMetadataDeterminedEventArgs) => void): void\r\n addEventListener(eventName: string, handler: (arg?: any) => void): void\r\n addEventListener(eventName: string, handler: (arg?: any) => void): void {\r\n this.#eventsEngine.addEventListener(eventName, handler);\r\n }\r\n\r\n exportAsString(): string {\r\n const exportData = this.export();\r\n return JSON.stringify(exportData);\r\n }\r\n\r\n export(): TransferUploadExportData<T> {\r\n if (!this.#transferState?.files)\r\n throw new TransferUploadError(`Can't export not started Transfer`); // fileStatuses are not created yet and it really doesn't make any sens to export not started transfer\r\n\r\n return {\r\n transferMetadata: this.getTransferMetadataExportValue(),\r\n info: this.getInfoExportValue(),\r\n state: this.#transferState.export(),\r\n registeredFiles: this.#filesRegistrar ? Array.from(this.#filesRegistrar.export().entries()) : undefined,\r\n };\r\n }\r\n\r\n private getInfoExportValue(): Readonly<TransferUploadInfo<T> | TransferUploadExportDataAppendInfo<T>> {\r\n if (this.isUploadAppendInfo(this.#info)) {\r\n const { e2eeData, ...appendInfoWithoutE2eeData } = this.#info;\r\n\r\n return appendInfoWithoutE2eeData;\r\n }\r\n\r\n // Until the transfer is initialized the key is still needed - a resumed run re-initializes from the info.\r\n if (!this.#transferMetadata)\r\n return this.#info;\r\n\r\n const { e2eeKey, ...infoWithoutE2eeKey } = this.#info;\r\n\r\n return infoWithoutE2eeKey;\r\n }\r\n\r\n private getTransferMetadataExportValue(): TransferUploadExportDataMetadata | undefined {\r\n if (!this.#transferMetadata)\r\n return undefined;\r\n\r\n const { encryptionData, ...rest } = this.#transferMetadata;\r\n\r\n return {\r\n ...rest,\r\n encryptionData: !encryptionData ? undefined : {\r\n ivHex: uint8ArrayToHex(encryptionData.iv),\r\n keyHex: uint8ArrayToHex(encryptionData.key),\r\n },\r\n };\r\n }\r\n\r\n static recreate<T extends FileDetails>(transferExportData: TransferUploadExportData<T>, config: TransferUploadConfig, chunkStreamProviderFactory: UploaderChunkStreamProviderFactory<T>, apiClient: ApiClient, fileServerClientFactory: FileServerClientFactory, eventsEngine: EventsEngine, concurrencyController: ConcurrencyController, cryptography: CryptographyProvider, acker: TransferUploadAcker): TransferUpload<T> {\r\n try {\r\n TransferUpload.validateRecreateParams(transferExportData);\r\n\r\n const recreatedInfo = {\r\n ...transferExportData.info,\r\n isLegacyTransfer: transferExportData.registeredFiles === undefined,\r\n };\r\n\r\n const transfer = new TransferUpload<T>(chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, recreatedInfo, config, concurrencyController, cryptography, acker);\r\n\r\n transfer.#transferMetadata = this.recreateTransferMetadata(transferExportData.transferMetadata);\r\n transfer.#transferState = new TransferUploadState(transferExportData.info.files, eventsEngine, config.currentRatesTimespanInMs, config.progressEventThrottlingInMs, transferExportData.state);\r\n\r\n if (transfer.isUploadAppendInfo(transferExportData.info))\r\n transfer.#transferDownloadUrl = transferExportData.info.transferDownloadUrl;\r\n\r\n if (transferExportData.registeredFiles)\r\n transfer.#filesRegistrar!.recoverFromExportedState(transferExportData.registeredFiles);\r\n\r\n return transfer;\r\n }\r\n catch (error) {\r\n if (error instanceof TransferUploadError)\r\n throw error;\r\n else\r\n throw new TransferUploadError(`Unhandled error occured. See 'cause' for more details`, { cause: error as Error });\r\n }\r\n }\r\n\r\n private static recreateTransferMetadata(transferMetadata?: TransferUploadExportDataMetadata): TransferUploadMetadata | undefined {\r\n if (!transferMetadata)\r\n return undefined;\r\n\r\n const { encryptionData, ...rest } = transferMetadata;\r\n\r\n return {\r\n ...rest,\r\n encryptionData: !encryptionData ? undefined : {\r\n iv: hexToUint8Array(encryptionData.ivHex),\r\n key: hexToUint8Array(encryptionData.keyHex),\r\n },\r\n };\r\n }\r\n\r\n private static validateRecreateParams<T extends FileDetails>(transferExportData: TransferUploadExportData<T>) {\r\n if (!transferExportData.info)\r\n throw new TransferUploadError(`Info must be defined`);\r\n\r\n if (!transferExportData.state)\r\n throw new TransferUploadError(`State must be defined`);\r\n\r\n if (transferExportData.transferMetadata && (!transferExportData.transferMetadata.transferId || !transferExportData.transferMetadata.transferKey || !transferExportData.transferMetadata.transferFileServerUrl))\r\n throw new TransferUploadError(`Not all transfer metadata properties are defined`);\r\n\r\n if (transferExportData.transferMetadata?.encryptionData) {\r\n if (transferExportData.transferMetadata.encryptionData.ivHex.length !== 32)\r\n throw new TransferUploadError(`Encryption IV must be 16 bytes long`);\r\n if (transferExportData.transferMetadata.encryptionData.keyHex.length !== 64)\r\n throw new TransferUploadError(`Encryption key must be 32 bytes long`);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"transferUpload.js","sourceRoot":"","sources":["../../../src/uploader/transferUpload.ts"],"names":[],"mappings":"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","sourcesContent":["import TransferUploadState from \"./state/transferUploadState.js\";\nimport TransferUploadError from \"./transferUploadError.js\";\nimport TransferStatus from \"../utils/types/transferStatus.js\";\nimport TransferUploadEvent from './transferUploadEvent.js';\nimport ChunksIterator from './chunksIterator/chunksIterator.js';\nimport TransferFilesRegistrar, { type RegistrationResult } from './transferFilesRegistrar.js';\nimport mergeAbortAndPauseSignals, { type MergedAbortAndPauseController } from '../utils/mergeAbortAndPauseSignals.js';\nimport ApiError from '../utils/api/apiError.js';\nimport FsError from '../utils/fileSystem/fsError.js';\nimport ApiFilemail449Error from '../utils/api/apiFilemail449Error.js';\nimport { promiseAllSettled } from '../utils/promiseAll.js';\nimport { isTransferFailureAbortReason } from './transferFailureAbortReason.js';\nimport { concatUint8Arrays, hexToUint8Array, uint8ArrayToHex } from '../utils/uint8ArrayUtils.js';\n\nimport type ApiClient from \"../utils/api/apiClient.js\";\nimport type { InitializeTransferRequest } from \"../utils/api/dtos/initializeTransferRequest.js\";\nimport type SendFileChunkRequest from '../utils/api/dtos/sendFileChunkRequest.js';\nimport type FileServerClientFactory from '../utils/api/fileServerClientFactory.js';\nimport type FileDetails from \"../utils/fileSystem/fileDetails.js\";\nimport type TransferUploadMetadata from \"./export/transferUploadMetadata.js\";\nimport type TransferUploadInfo from \"./options/transferUploadInfo.js\";\nimport type { TransferUploadAppendInfo } from './options/transferUploadAppendInfo.js';\nimport type ResetTransferRequest from '../utils/api/dtos/resetTransferRequest.js';\nimport type EventsEngine from '../utils/events/eventsEngine.js';\nimport type FileChunkUploadEventArgs from './eventArgs/fileChunkUploadEventArgs.js';\nimport type FileChunkUploadFailedEventArgs from './eventArgs/fileChunkUploadFailedEventArgs.js';\nimport type ChunkProgressEvent from '../utils/events/chunkProgressEvent.js';\nimport type FinalizeTransferRequest from '../utils/api/dtos/finalizeTransferRequest.js';\nimport type FileUploadEventArgs from './eventArgs/fileUploadEventArgs.js';\nimport type TransferUploadCompletedEventArgs from './eventArgs/transferUploadCompletedEventArgs.js';\nimport type CancelTransferRequest from '../utils/api/dtos/cancelTransferRequest.js';\nimport type ConcurrencyReleaser from \"../utils/concurrencyController/concurrencyReleaser.js\";\nimport type FileUploadFailedEventArgs from './eventArgs/fileUploadFailedEventArgs.js';\nimport type FilesRegistrationBatchFailedEventArgs from './eventArgs/filesRegistrationBatchFailedEventArgs.js';\nimport type FileAckFailedEventArgs from './eventArgs/fileAckFailedEventArgs.js';\nimport type FilesBatchAckFailedEventArgs from './eventArgs/filesBatchAckFailedEventArgs.js';\nimport type TransferUploadAcker from './transferUploadAcker.js';\nimport type RegisteredTransferFile from './registeredTransferFile.js';\nimport type TransferUploadProgressedEventArgs from './eventArgs/transferUploadProgressedEventArgs.js';\nimport type FileChunkUploadProgressedEventArgs from './eventArgs/fileChunkUploadProgressedEventArgs.js';\nimport type UploaderChunkStreamProviderFactory from './chunkStreamProviderFactory/uploaderChunkStreamProviderFactory.js';\nimport type TransferUploadConfig from './options/transferUploadConfig.js';\nimport type { PauseSignal } from './pauseController.js';\nimport type ChunkStreamProvider from '../utils/fileSystem/chunkStreamProvider.js';\nimport type ConcurrencyController from '../utils/concurrencyController/concurrencyController.js';\nimport type FileChunkUploadCompletedPartiallyEventArgs from './eventArgs/fileChunkUploadCompletedPartiallyEventArgs.js';\nimport type FileChunkUploadCompletedEventArgs from './eventArgs/fileChunkUploadCompletedEventArgs.js';\nimport type TransferMetadataDeterminedEventArgs from './eventArgs/transferMetadataDeterminedEventArgs.js';\nimport type CryptographyProvider from '../utils/crypto/cryptographyProvider.js';\nimport type { TransferUploadExportData, TransferUploadExportDataAppendInfo, TransferUploadExportDataMetadata } from './export/transferUploadExportData.js';\nimport type UploaderMD5Provider from \"./md5Provider/uploaderMD5Provider.js\";\nimport type FileChunksPlan from \"./fileChunksPlan.js\";\n\nexport default class TransferUpload<T extends FileDetails> {\n #totalSizeInBytes: number;\n\n #chunkStreamProviderFactory: UploaderChunkStreamProviderFactory<T>;\n #apiClient: ApiClient;\n #fileServerClientFactory: FileServerClientFactory;\n #eventsEngine: EventsEngine;\n #info: TransferUploadInfo<T> | TransferUploadAppendInfo<T>;\n #isLegacyTransfer: boolean;\n #config: TransferUploadConfig;\n #concurrencyController: ConcurrencyController;\n #cryptography: CryptographyProvider;\n #acker: TransferUploadAcker;\n #md5Provider: UploaderMD5Provider<T>;\n\n #transferState?: TransferUploadState;\n #transferMetadata?: TransferUploadMetadata;\n #transferDownloadUrl?: string;\n #transferConfirmationUrl?: string;\n #transferRecipientTrackingLinks?: TransferUploadCompletedEventArgs[`recipientTrackingLinks`];\n\n #pauseSignal: PauseSignal | undefined;\n #abortSignal: AbortSignal | undefined;\n #mergedPauseAndAbortController: MergedAbortAndPauseController | undefined;\n\n #filesRegistrar: TransferFilesRegistrar | undefined;\n\n pauseEventListener: (() => void) | undefined;\n abortEventListener: (() => void) | undefined;\n\n #isRunMethodRunning = false;\n\n get status(): TransferStatus {\n return this.#transferState?.status ?? TransferStatus.Initialized;\n }\n\n get completedFilesCount(): number {\n return this.#transferState?.completedFilesCount ?? 0;\n }\n\n get failedFilesCount(): number {\n return this.#transferState?.failedFilesCount ?? 0;\n }\n\n get uploadedBytesCount(): number {\n return this.#transferState?.uploadedBytesCount ?? 0;\n }\n\n get failedBytesCount(): number {\n return this.#transferState?.failedBytesCount ?? 0;\n }\n\n get progressInPercentage(): number {\n if (this.totalSizeInBytes === 0)\n return 0;\n\n return (this.uploadedBytesCount * 100) / this.totalSizeInBytes;\n }\n\n get files(): readonly Readonly<T>[] {\n return this.#info.files;\n }\n\n get totalSizeInBytes(): number {\n return this.#totalSizeInBytes;\n }\n\n get transferId(): string | undefined {\n return this.#transferMetadata?.transferId;\n }\n\n constructor(chunkStreamProviderFactory: UploaderChunkStreamProviderFactory<T>, apiClient: ApiClient, fileServerClientFactory: FileServerClientFactory, eventsEngine: EventsEngine, info: TransferUploadInfo<T> | TransferUploadAppendInfo<T>, config: TransferUploadConfig, concurrencyController: ConcurrencyController, cryptography: CryptographyProvider, acker: TransferUploadAcker, md5Provider: UploaderMD5Provider<T>) {\n if (info.files.length === 0)\n throw new TransferUploadError(`Files can't be empty`);\n\n this.#totalSizeInBytes = info.files.reduce((partialSum, file) => partialSum + file.fileSizeInBytes, 0);\n\n this.#chunkStreamProviderFactory = chunkStreamProviderFactory;\n this.#apiClient = apiClient;\n this.#fileServerClientFactory = fileServerClientFactory;\n this.#eventsEngine = eventsEngine;\n this.#info = info;\n this.#isLegacyTransfer = info.isLegacyTransfer ?? false;\n this.#config = config;\n this.#concurrencyController = concurrencyController;\n this.#cryptography = cryptography;\n this.#acker = acker;\n this.#md5Provider = md5Provider;\n\n this.#filesRegistrar = this.#isLegacyTransfer\n ? undefined\n : new TransferFilesRegistrar(apiClient, eventsEngine, info.files);\n }\n\n private isUploadAppend(): boolean {\n return this.isUploadAppendInfo(this.#info);\n }\n\n private isUploadAppendInfo(info: TransferUploadInfo<T> | TransferUploadAppendInfo<T>): info is TransferUploadAppendInfo<T> {\n return (info as TransferUploadAppendInfo<T>).transferKey !== undefined;\n }\n\n private createTransferMetadataFromInfo() {\n if (!this.isUploadAppendInfo(this.#info))\n throw new TransferUploadError(`Options are not TransferUploadAppendOptions`);\n\n this.#transferDownloadUrl = this.#info.transferDownloadUrl;\n\n this.#transferMetadata = {\n transferId: this.#info.transferId,\n transferKey: this.#info.transferKey,\n transferFileServerUrl: this.#info.transferFileServerUrl,\n transferRegion: this.#info.transferRegion,\n encryptionData: this.#info.e2eeData,\n };\n }\n\n async run(transferPauseSignal: PauseSignal, transferAbortSignal: AbortSignal): Promise<void> {\n this.throwIfNotPossibleToRun(transferPauseSignal, transferAbortSignal);\n\n this.#isRunMethodRunning = true;\n\n try {\n this.#pauseSignal = transferPauseSignal;\n this.#abortSignal = transferAbortSignal;\n this.#mergedPauseAndAbortController = mergeAbortAndPauseSignals(transferPauseSignal, transferAbortSignal);\n\n if (!this.#transferState)\n this.#transferState = new TransferUploadState(this.files, this.#eventsEngine, this.#config.currentRatesTimespanInMs, this.#config.progressEventThrottlingInMs);\n else\n this.#transferState.recover();\n\n this.#transferState.transferRun();\n\n this.addPauseAndStopListeners();\n\n if (this.isUploadAppend() && !this.#transferMetadata)\n this.createTransferMetadataFromInfo();\n else if (!this.#transferMetadata)\n await this.startApiTransferAndCreateMetadata();\n\n this.notifyMetadataDetermined();\n\n const chunksPlan = this.createChunksPlan();\n\n this.startBackgroundWorkers(chunksPlan, transferPauseSignal, transferAbortSignal);\n\n const ongoingChunkUploads = new Set<Promise<void>>();\n\n for (const { file, createChunksIterator } of chunksPlan) {\n const fileStatus = this.#transferState.getFile(file.externalId);\n\n if (fileStatus.isCompleted)\n continue;\n\n const registrationResult = await this.waitUntilFileRegistered(file);\n\n if (!registrationResult.isRegisteredSuccessfully)\n continue;\n\n if (fileStatus.isUploadCompleted) {\n this.enqueueFileAck(file);\n continue;\n }\n\n for (const chunk of createChunksIterator()) {\n const releaseSemaphore = await this.#concurrencyController.acquire();\n\n if (this.shouldStopProcessing()) {\n releaseSemaphore();\n break;\n }\n\n const chunkUploadPromise = this.sendChunkAndKeepUpdatingState(file, chunk.startPosition, chunk.sizeInBytes, releaseSemaphore);\n\n const trackedChunkUploadPromise = chunkUploadPromise.finally(() => {\n ongoingChunkUploads.delete(trackedChunkUploadPromise);\n });\n\n ongoingChunkUploads.add(trackedChunkUploadPromise);\n\n if (this.shouldStopProcessing())\n break;\n }\n\n if (this.shouldStopProcessing())\n break;\n }\n\n await promiseAllSettled(Array.from(ongoingChunkUploads));\n\n await this.#acker.flush();\n\n if (this.#transferState.status === TransferStatus.Pausing)\n this.#transferState.transferPaused();\n else if (this.#transferState.status === TransferStatus.Aborting)\n this.#transferState.transferAborted();\n else if (this.uploadedBytesCount !== this.totalSizeInBytes || this.hasUnackedFiles())\n this.#transferState.transferFailed();\n else {\n await this.finalizeTransfer();\n this.#transferState.transferCompleted(this.#transferMetadata!, this.#transferDownloadUrl!, this.#transferConfirmationUrl, this.#transferRecipientTrackingLinks);\n }\n }\n catch (error) {\n // We can get here with pausing or aborting status if any API call fails (e.g., finalizeTransfer) so we need to check the status again\n if (!this.#transferState)\n this.#eventsEngine.emit(TransferUploadEvent.TransferFailed);\n else if (this.#transferState.status === TransferStatus.Pausing) {\n this.#transferState.transferPaused();\n return;\n }\n else if (this.#transferState.status === TransferStatus.Aborting) {\n this.#transferState.transferAborted();\n return;\n }\n else\n this.#transferState.transferFailed();\n\n if (error instanceof TransferUploadError)\n throw error;\n else\n throw new TransferUploadError(`Unhandled error occured. See 'cause' for more details`, { cause: error as Error });\n }\n finally {\n await this.stopBackgroundWorkers();\n\n this.removePauseAndStopListeners();\n this.#isRunMethodRunning = false;\n }\n }\n\n private startBackgroundWorkers(chunksPlan: readonly FileChunksPlan<T>[], transferPauseSignal: PauseSignal, transferAbortSignal: AbortSignal) {\n const filesToHash = chunksPlan.map(({ file, createChunksIterator }) => ({ file, chunksIterator: createChunksIterator() }));\n const fileAckSuccessfullCallback = (externalFileId: string | number, uploadItemId: string) => this.#transferState!.fileCompleted(externalFileId, uploadItemId);\n const fileAckFailedCallback = (externalFileId: string | number, uploadItemId: string, reason: string, error: Error) => this.#transferState!.fileAckFailed(externalFileId, uploadItemId, reason, error);\n\n this.#md5Provider.start(filesToHash, this.#transferMetadata?.encryptionData, this.#mergedPauseAndAbortController?.signal);\n this.#acker.start(this.#transferMetadata!.transferId, this.#transferMetadata!.transferKey, fileAckSuccessfullCallback, fileAckFailedCallback, transferPauseSignal, transferAbortSignal);\n this.#filesRegistrar?.start(this.#transferMetadata!.transferId, this.#transferMetadata!.transferKey, this.#mergedPauseAndAbortController?.signal);\n }\n\n private createChunksPlan(): FileChunksPlan<T>[] {\n const chunkSizeInBytes = this.#config.chunkSizeInBytes;\n\n return this.files.map(file => {\n // Upload progress mutates these ranges, so both iterators need the same snapshot for this run.\n const alreadySentChunks = this.#transferState!.getChunksForFile(file.externalId).map(chunk => ({ ...chunk }));\n const fileSizeInBytes = file.fileSizeInBytes;\n\n return {\n file,\n createChunksIterator: () => new ChunksIterator(alreadySentChunks, fileSizeInBytes, chunkSizeInBytes).getChunksIterator(),\n };\n });\n }\n\n private async stopBackgroundWorkers() {\n await Promise.allSettled([\n this.#md5Provider?.stop(),\n this.#filesRegistrar?.stop(),\n this.#acker.stop(),\n ]);\n }\n\n private async waitUntilFileRegistered(file: Readonly<T>): Promise<RegistrationResult> {\n if (this.#isLegacyTransfer)\n return { isRegisteredSuccessfully: true };\n\n return await this.#filesRegistrar!.waitUntilFileRegistered(file.externalId);\n }\n\n private notifyMetadataDetermined() {\n const eventArgs: TransferMetadataDeterminedEventArgs = {\n transferId: this.#transferMetadata!.transferId,\n fileServerUrl: this.#transferMetadata!.transferFileServerUrl,\n region: this.#transferMetadata!.transferRegion,\n };\n\n this.#eventsEngine.emit(TransferUploadEvent.TransferMetadataDetermined, eventArgs);\n this.#eventsEngine.emit(TransferUploadEvent.RecreateDataUpdated);\n }\n\n private async sendChunkAndKeepUpdatingState(file: T, chunkStartPosition: number, chunkSizeInBytes: number, releaseSemaphore: ConcurrencyReleaser): Promise<void> {\n let uploadedBytesCount = 0;\n\n const registeredFile = this.getRegisteredFile(file.externalId);\n const uploadItemId = registeredFile?.uploadItemId;\n\n try {\n this.#transferState!.chunkUploadStarted(file.externalId, uploadItemId, chunkStartPosition, chunkSizeInBytes);\n\n const chunkStreamProvider = this.#chunkStreamProviderFactory.createChunkStreamProvider(file, chunkStartPosition, chunkSizeInBytes, this.#transferMetadata?.encryptionData);\n\n const progressEventHandler = (eventArgs: ChunkProgressEvent) => {\n uploadedBytesCount += eventArgs.transferredBytesSinceLastEvent;\n this.#transferState!.chunkUploadProgressed(file.externalId, uploadItemId, chunkStartPosition, chunkSizeInBytes, eventArgs);\n };\n\n await this.sendChunk(file, registeredFile?.fileId, chunkStreamProvider, progressEventHandler);\n\n if (uploadedBytesCount === chunkSizeInBytes)\n this.#transferState!.chunkUploadCompleted(file.externalId, uploadItemId, chunkStartPosition, chunkSizeInBytes);\n else\n this.#transferState!.chunkUploadCompletedPartially(file.externalId, uploadItemId, chunkStartPosition, chunkSizeInBytes, uploadedBytesCount, this.#pauseSignal!.paused);\n\n if (this.#transferState!.getFile(file.externalId).isUploadCompleted)\n this.enqueueFileAck(file);\n }\n catch (error) {\n const chunkError = error as Error;\n\n const isTcpPausingError = chunkError.cause !== undefined\n && chunkError.cause instanceof ApiFilemail449Error\n && chunkError.cause.message === `Wrong md5 hash`\n && this.#pauseSignal?.paused === true;\n\n if (isTcpPausingError)\n this.#transferState!.chunkUploadCompletedPartially(file.externalId, uploadItemId, chunkStartPosition, chunkSizeInBytes, uploadedBytesCount, this.#pauseSignal!.paused);\n else {\n const failedReason = this.getChunkFailedReason(error);\n this.#transferState!.chunkUploadFailed(file.externalId, uploadItemId, chunkStartPosition, chunkSizeInBytes, uploadedBytesCount, failedReason, error as Error);\n }\n }\n finally {\n releaseSemaphore();\n }\n }\n\n private async sendChunk(file: T, fileId: string | undefined, chunkStreamProvider: ChunkStreamProvider, progressEventHandler: (eventArgs: ChunkProgressEvent) => void): Promise<void> {\n const md5 = await this.#md5Provider.getMd5Checksum(file, chunkStreamProvider.chunkStartPosition);\n\n const request: SendFileChunkRequest = {\n md5,\n chunkLengthInBytes: chunkStreamProvider.chunkLengthInBytes,\n chunkStartPosition: chunkStreamProvider.chunkStartPosition,\n };\n\n const fileServerClient = this.#fileServerClientFactory.createFileServerUploadClient(this.#transferMetadata!.transferFileServerUrl, this.#transferMetadata!.transferId, this.#transferMetadata!.transferKey, file.fileName, file.fileDestinationPathInTransfer, file.fileSizeInBytes, fileId);\n\n const ongoingRequestPromise = fileServerClient.sendFileChunk(request, chunkStreamProvider, this.#pauseSignal!, this.#abortSignal!);\n\n fileServerClient.addEventListener(`progress`, progressEventHandler);\n\n await ongoingRequestPromise;\n }\n\n private getChunkFailedReason(error: unknown) {\n if (error instanceof FsError)\n return `Can't read file. ${error.message}`;\n\n if (error instanceof ApiError) {\n const baseMessage = error.cause?.message ? `${error.message}. ${error.cause.message}` : error.message;\n return error.requestUrl ? `${baseMessage}. Request URL: ${error.requestUrl}` : baseMessage;\n }\n\n return (error as Error)?.message;\n }\n\n private throwIfNotPossibleToRun(pauseSignal: PauseSignal, abortSignal: AbortSignal) {\n if (this.#isRunMethodRunning)\n throw new TransferUploadError(`This transfer is running and cannot be run`);\n\n if (this.#transferState\n && this.#transferState.status !== TransferStatus.Failed\n && this.#transferState.status !== TransferStatus.Aborted\n && this.#transferState.status !== TransferStatus.Initialized\n && this.#transferState.status !== TransferStatus.Paused)\n throw new TransferUploadError(`Transfer is in ${TransferStatus[this.#transferState!.status]} state and cannot be run`);\n\n if (this.files.length === 0)\n throw new TransferUploadError(`There are no files passed to the transfer`);\n\n if (pauseSignal.paused)\n throw new TransferUploadError(`Can't run transfer with already paused PauseController`);\n\n if (abortSignal.aborted)\n throw new TransferUploadError(`Can't run transfer with already aborted AbortController`);\n }\n\n private addPauseAndStopListeners() {\n this.pauseEventListener = () => {\n if (this.#transferState!.status !== TransferStatus.Running)\n throw new TransferUploadError(`Transfer is in ${TransferStatus[this.#transferState!.status]} state and cannot be paused`);\n\n this.#transferState!.transferPauseRequested();\n };\n\n this.abortEventListener = () => {\n if (this.isFailureAbortRequested())\n return;\n\n if (this.#transferState!.status !== TransferStatus.Running)\n throw new TransferUploadError(`Transfer is in ${TransferStatus[this.#transferState!.status]} state and cannot be stopped`);\n\n this.#transferState!.transferAbortRequested();\n };\n\n this.#pauseSignal!.addEventListener(`pause`, this.pauseEventListener);\n this.#abortSignal!.addEventListener(`abort`, this.abortEventListener);\n }\n\n private removePauseAndStopListeners() {\n this.#pauseSignal!.removeEventListener(`pause`, this.pauseEventListener!);\n this.#abortSignal!.removeEventListener(`abort`, this.abortEventListener!);\n\n this.#mergedPauseAndAbortController?.dispose();\n }\n\n private shouldStopProcessing() {\n return this.#transferState!.status !== TransferStatus.Running || this.#abortSignal?.aborted === true || this.#pauseSignal?.paused === true;\n }\n\n private isFailureAbortRequested() {\n return isTransferFailureAbortReason(this.#abortSignal?.reason);\n }\n\n private async startApiTransferAndCreateMetadata() {\n if (this.isUploadAppendInfo(this.#info))\n throw new TransferUploadError(`Options are not TransferUploadOptions`);\n\n try {\n const encryptionDataAndIvSaltHex = await this.generateEncryptionDataAndIvSaltHmacHex(this.#info.e2eeKey);\n\n const request: InitializeTransferRequest = {\n dataRegion: this.#info.dataRegion,\n e2ee: Boolean(encryptionDataAndIvSaltHex),\n e2ee_keyhash: encryptionDataAndIvSaltHex?.ivSaltHmacHex,\n transfersize: this.totalSizeInBytes,\n to: this.#info.to,\n from: this.#info.from,\n subject: this.#info.subject,\n message: this.#info.message,\n notify: this.#info.notify,\n confirmation: this.#info.confirmation,\n days: this.#info.days,\n password: this.#info.uploadPassword,\n companyid: this.#info.companyId,\n incominglogintoken: this.#info.incomingLoginToken,\n incomingpageid: this.#info.incomingPageId,\n filerequestid: this.#info.fileRequestId,\n filerequestshareid: this.#info.fileRequestShareId,\n customfields: this.#info.customFields,\n filesdb: !this.#isLegacyTransfer,\n };\n\n const response = await this.#apiClient.initializeTransfer(request, this.#mergedPauseAndAbortController?.signal);\n\n this.#transferMetadata = {\n transferId: response.transferId,\n transferKey: response.transferKey,\n transferFileServerUrl: response.transferUrl,\n transferRegion: response.transferRegion,\n encryptionData: encryptionDataAndIvSaltHex?.encryptionData,\n };\n }\n catch (error) {\n throw new TransferUploadError(`Error initializing transfer through the API`, { cause: error as Error });\n }\n }\n\n private getRegisteredFile(externalFileId: string | number): RegisteredTransferFile | undefined {\n return this.#filesRegistrar?.getRegisteredFile(externalFileId);\n }\n\n private enqueueFileAck(file: Readonly<T>): void {\n if (this.#isLegacyTransfer) {\n this.#transferState!.fileCompleted(file.externalId, undefined);\n return;\n }\n\n const registeredFile = this.getRegisteredFile(file.externalId);\n\n if (!registeredFile)\n throw new TransferUploadError(`Can't ack file with external id = ${file.externalId} - no registered file found. The transfer state is malformed.`);\n\n this.#acker.enqueue({ externalFileId: file.externalId, uploadItemId: registeredFile.uploadItemId, sizeInBytes: file.fileSizeInBytes });\n }\n\n private hasUnackedFiles(): boolean {\n if (this.#isLegacyTransfer)\n return false;\n\n return this.files.some(file => !this.#transferState!.getFile(file.externalId).isCompleted);\n }\n\n private async generateEncryptionDataAndIvSaltHmacHex(e2eeKey?: string): Promise<{ encryptionData: { iv: Uint8Array, key: Uint8Array }, ivSaltHmacHex: string, salt: Uint8Array, hmac: Uint8Array } | undefined> {\n if (!e2eeKey)\n return undefined;\n\n const salt = this.#cryptography.generateRandomBytes(16);\n const key = await this.#cryptography.deriveKey(e2eeKey, salt);\n const hmac = await this.#cryptography.generateHmac(key);\n const iv = this.#cryptography.generateRandomBytes(16);\n\n const ivSaltHmac = concatUint8Arrays([iv, salt, hmac]);\n const ivSaltHmacHex = uint8ArrayToHex(ivSaltHmac);\n\n return {\n encryptionData: { iv, key },\n hmac,\n salt,\n ivSaltHmacHex,\n };\n }\n\n private async finalizeTransfer(): Promise<void> {\n this.#eventsEngine.emit(TransferUploadEvent.TransferFinalizing);\n\n if (this.isUploadAppend())\n await this.resetApiTransfer();\n else\n await this.finalizeApiTransfer();\n }\n\n private async resetApiTransfer(): Promise<void> {\n try {\n const request: ResetTransferRequest = {\n transferid: this.#transferMetadata!.transferId,\n };\n\n await this.#apiClient.resetTransfer(request, this.#mergedPauseAndAbortController?.signal);\n }\n catch (error) {\n throw new TransferUploadError(`Error resetting transfer through the API`, { cause: error as Error });\n }\n }\n\n private async finalizeApiTransfer(): Promise<void> {\n try {\n const request: FinalizeTransferRequest = {\n transferid: this.#transferMetadata!.transferId,\n transferkey: this.#transferMetadata!.transferKey,\n protocol: `tcp`,\n };\n\n const response = await this.#apiClient.finalizeTransfer(request, this.#mergedPauseAndAbortController?.signal);\n\n this.#transferDownloadUrl = response.downloadUrl;\n this.#transferConfirmationUrl = response.confirmationUrl;\n this.#transferRecipientTrackingLinks = response.recipientTrackingLinks;\n }\n catch (error) {\n throw new TransferUploadError(`Error finalizing transfer through the API`, { cause: error as Error });\n }\n }\n\n async cancel(abortSignal?: AbortSignal): Promise<void> {\n try {\n const isTransferApiInitialized = Boolean(this.#transferState) && (Boolean(this.#transferMetadata) || this.isUploadAppend());\n\n if (!isTransferApiInitialized) {\n this.emitCancelEvents();\n return;\n }\n\n this.throwIfInWrongStateToCancel();\n\n this.#transferState!.transferCancelRequested();\n\n if (this.isUploadAppend()) {\n // There is no possibility to cancel transfer upload append on API for now\n }\n else {\n try {\n await this.cancelApiTransfer(abortSignal);\n }\n catch {\n // If API cancel fails we still finalize local transfer state as canceled to avoid hanging in Canceling.\n }\n }\n\n this.#transferState!.transferCanceled();\n }\n catch (error) {\n if (error instanceof TransferUploadError)\n throw error;\n else\n throw new TransferUploadError(`Unhandled error occured. See 'cause' for more details`, { cause: error as Error });\n }\n }\n\n private emitCancelEvents() {\n this.#eventsEngine.emit(TransferUploadEvent.TransferCancelRequested);\n this.#eventsEngine.emit(TransferUploadEvent.TransferCanceled);\n }\n\n private throwIfInWrongStateToCancel() {\n if (!this.#transferState)\n return;\n\n if (this.#transferState.status !== TransferStatus.Failed\n && this.#transferState.status !== TransferStatus.Aborted\n && this.#transferState.status !== TransferStatus.Initialized\n && this.#transferState.status !== TransferStatus.Paused)\n throw new TransferUploadError(`Transfer is in ${TransferStatus[this.#transferState!.status]} state and cannot be canceled`);\n }\n\n private async cancelApiTransfer(abortSignal?: AbortSignal): Promise<void> {\n try {\n const request: CancelTransferRequest = {\n transferid: this.#transferMetadata!.transferId,\n transferkey: this.#transferMetadata!.transferKey,\n };\n\n await this.#apiClient.cancelTransfer(request, abortSignal);\n }\n catch (error) {\n throw new TransferUploadError(`Error canceling transfer through the API`, { cause: error as Error });\n }\n }\n\n addEventListener(eventName: TransferUploadEvent.TransferRun | TransferUploadEvent.TransferPauseRequested | TransferUploadEvent.TransferPaused | TransferUploadEvent.TransferAbortRequested | TransferUploadEvent.TransferAborted | TransferUploadEvent.TransferCancelRequested | TransferUploadEvent.TransferCanceled | TransferUploadEvent.TransferFailed, handler: () => void): void\n addEventListener(eventName: TransferUploadEvent.FileUploadStarted | TransferUploadEvent.FileUploadCompleted | TransferUploadEvent.FileCompleted, handler: (event: FileUploadEventArgs) => void): void\n addEventListener(eventName: TransferUploadEvent.FileUploadFailed, handler: (event: FileUploadFailedEventArgs) => void): void\n addEventListener(eventName: TransferUploadEvent.FilesRegistrationBatchFailed, handler: (event: FilesRegistrationBatchFailedEventArgs) => void): void\n addEventListener(eventName: TransferUploadEvent.FileAckFailed, handler: (event: FileAckFailedEventArgs) => void): void\n addEventListener(eventName: TransferUploadEvent.FilesBatchAckFailed, handler: (event: FilesBatchAckFailedEventArgs) => void): void\n addEventListener(eventName: TransferUploadEvent.FileChunkUploadProgressed, handler: (event: FileChunkUploadProgressedEventArgs) => void): void\n addEventListener(eventName: TransferUploadEvent.FileChunkUploadStarted, handler: (event: FileChunkUploadEventArgs) => void): void\n addEventListener(eventName: TransferUploadEvent.FileChunkUploadCompleted, handler: (event: FileChunkUploadCompletedEventArgs) => void): void\n addEventListener(eventName: TransferUploadEvent.FileChunkUploadCompletedPartially, handler: (event: FileChunkUploadCompletedPartiallyEventArgs) => void): void\n addEventListener(eventName: TransferUploadEvent.FileChunkUploadFailed, handler: (event: FileChunkUploadFailedEventArgs) => void): void\n addEventListener(eventName: TransferUploadEvent.TransferProgressed, handler: (event: TransferUploadProgressedEventArgs) => void): void\n addEventListener(eventName: TransferUploadEvent.TransferCompleted, handler: (event: TransferUploadCompletedEventArgs) => void): void\n addEventListener(eventName: TransferUploadEvent.TransferMetadataDetermined, handler: (event: TransferMetadataDeterminedEventArgs) => void): void\n addEventListener(eventName: string, handler: (arg?: any) => void): void\n addEventListener(eventName: string, handler: (arg?: any) => void): void {\n this.#eventsEngine.addEventListener(eventName, handler);\n }\n\n exportAsString(): string {\n const exportData = this.export();\n return JSON.stringify(exportData);\n }\n\n export(): TransferUploadExportData<T> {\n if (!this.#transferState?.files)\n throw new TransferUploadError(`Can't export not started Transfer`); // fileStatuses are not created yet and it really doesn't make any sens to export not started transfer\n\n return {\n transferMetadata: this.getTransferMetadataExportValue(),\n info: this.getInfoExportValue(),\n state: this.#transferState.export(),\n registeredFiles: this.#filesRegistrar ? Array.from(this.#filesRegistrar.export().entries()) : undefined,\n };\n }\n\n private getInfoExportValue(): Readonly<TransferUploadInfo<T> | TransferUploadExportDataAppendInfo<T>> {\n if (this.isUploadAppendInfo(this.#info)) {\n const { e2eeData, ...appendInfoWithoutE2eeData } = this.#info;\n\n return appendInfoWithoutE2eeData;\n }\n\n // Until the transfer is initialized the key is still needed - a resumed run re-initializes from the info.\n if (!this.#transferMetadata)\n return this.#info;\n\n const { e2eeKey, ...infoWithoutE2eeKey } = this.#info;\n\n return infoWithoutE2eeKey;\n }\n\n private getTransferMetadataExportValue(): TransferUploadExportDataMetadata | undefined {\n if (!this.#transferMetadata)\n return undefined;\n\n const { encryptionData, ...rest } = this.#transferMetadata;\n\n return {\n ...rest,\n encryptionData: !encryptionData ? undefined : {\n ivHex: uint8ArrayToHex(encryptionData.iv),\n keyHex: uint8ArrayToHex(encryptionData.key),\n },\n };\n }\n\n static recreate<T extends FileDetails>(transferExportData: TransferUploadExportData<T>, config: TransferUploadConfig, chunkStreamProviderFactory: UploaderChunkStreamProviderFactory<T>, apiClient: ApiClient, fileServerClientFactory: FileServerClientFactory, eventsEngine: EventsEngine, concurrencyController: ConcurrencyController, cryptography: CryptographyProvider, acker: TransferUploadAcker, md5Provider: UploaderMD5Provider<T>): TransferUpload<T> {\n try {\n TransferUpload.validateRecreateParams(transferExportData);\n\n const recreatedInfo = {\n ...transferExportData.info,\n isLegacyTransfer: transferExportData.registeredFiles === undefined,\n };\n\n const transfer = new TransferUpload<T>(chunkStreamProviderFactory, apiClient, fileServerClientFactory, eventsEngine, recreatedInfo, config, concurrencyController, cryptography, acker, md5Provider);\n\n transfer.#transferMetadata = this.recreateTransferMetadata(transferExportData.transferMetadata);\n transfer.#transferState = new TransferUploadState(transferExportData.info.files, eventsEngine, config.currentRatesTimespanInMs, config.progressEventThrottlingInMs, transferExportData.state);\n\n if (transfer.isUploadAppendInfo(transferExportData.info))\n transfer.#transferDownloadUrl = transferExportData.info.transferDownloadUrl;\n\n if (transferExportData.registeredFiles)\n transfer.#filesRegistrar!.recoverFromExportedState(transferExportData.registeredFiles);\n\n return transfer;\n }\n catch (error) {\n if (error instanceof TransferUploadError)\n throw error;\n else\n throw new TransferUploadError(`Unhandled error occured. See 'cause' for more details`, { cause: error as Error });\n }\n }\n\n private static recreateTransferMetadata(transferMetadata?: TransferUploadExportDataMetadata): TransferUploadMetadata | undefined {\n if (!transferMetadata)\n return undefined;\n\n const { encryptionData, ...rest } = transferMetadata;\n\n return {\n ...rest,\n encryptionData: !encryptionData ? undefined : {\n iv: hexToUint8Array(encryptionData.ivHex),\n key: hexToUint8Array(encryptionData.keyHex),\n },\n };\n }\n\n private static validateRecreateParams<T extends FileDetails>(transferExportData: TransferUploadExportData<T>) {\n if (!transferExportData.info)\n throw new TransferUploadError(`Info must be defined`);\n\n if (!transferExportData.state)\n throw new TransferUploadError(`State must be defined`);\n\n if (transferExportData.transferMetadata && (!transferExportData.transferMetadata.transferId || !transferExportData.transferMetadata.transferKey || !transferExportData.transferMetadata.transferFileServerUrl))\n throw new TransferUploadError(`Not all transfer metadata properties are defined`);\n\n if (transferExportData.transferMetadata?.encryptionData) {\n if (transferExportData.transferMetadata.encryptionData.ivHex.length !== 32)\n throw new TransferUploadError(`Encryption IV must be 16 bytes long`);\n if (transferExportData.transferMetadata.encryptionData.keyHex.length !== 64)\n throw new TransferUploadError(`Encryption key must be 32 bytes long`);\n }\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploadAcker.js","sourceRoot":"","sources":["../../../src/uploader/transferUploadAcker.ts"],"names":[],"mappings":"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","sourcesContent":["import TransferUploadError from \"./transferUploadError.js\";\r\nimport TransferUploadEvent from \"./transferUploadEvent.js\";\r\nimport ApiError from \"../utils/api/apiError.js\";\r\nimport mergeAbortAndPauseSignals, { type MergedAbortAndPauseController } from \"../utils/mergeAbortAndPauseSignals.js\";\r\n\r\nimport type ApiClient from \"../utils/api/apiClient.js\";\r\nimport type EventsEngine from \"../utils/events/eventsEngine.js\";\r\nimport type PendingFileAck from \"./pendingFileAck.js\";\r\nimport type { PauseSignal } from \"./pauseController.js\";\r\nimport type { AckTransferFilesResponse } from \"../utils/api/dtos/ackTransferFilesResponse.js\";\r\nimport type FilesBatchAckFailedEventArgs from \"./eventArgs/filesBatchAckFailedEventArgs.js\";\r\n\r\nconst ACK_ITEMS_BATCH_SIZE = 500;\r\n\r\nexport default class TransferUploadAcker {\r\n #apiClient: ApiClient;\r\n #eventsEngine: EventsEngine;\r\n #fileAckIntervalInMs: number;\r\n\r\n #pendingFileAcks: PendingFileAck[] = [];\r\n #ongoingFlush: Promise<void> | undefined;\r\n #flushTimer: ReturnType<typeof setInterval> | undefined;\r\n\r\n #ackCompletedCallback: ((externalFileId: string | number, uploadItemId: string) => void) | undefined;\r\n #ackFailedCallback: ((externalFileId: string | number, uploadItemId: string, reason: string, error: Error) => void) | undefined;\r\n\r\n #transferId: string | undefined;\r\n #transferKey: string | undefined;\r\n #pauseSignal: PauseSignal | undefined;\r\n #abortSignal: AbortSignal | undefined;\r\n #stopController: AbortController | undefined;\r\n #mergedPauseAndAbortController: MergedAbortAndPauseController | undefined;\r\n\r\n constructor(apiClient: ApiClient, eventsEngine: EventsEngine, fileAckIntervalInMs: number) {\r\n this.#apiClient = apiClient;\r\n this.#eventsEngine = eventsEngine;\r\n this.#fileAckIntervalInMs = fileAckIntervalInMs;\r\n }\r\n\r\n start(transferId: string, transferKey: string, ackCompletedCallback: (externalFileId: string | number, uploadItemId: string) => void, ackFailedCallback: (externalFileId: string | number, uploadItemId: string, reason: string, error: Error) => void, transferPauseSignal: PauseSignal, transferAbortSignal: AbortSignal): void {\r\n this.#transferId = transferId;\r\n this.#transferKey = transferKey;\r\n this.#ackCompletedCallback = ackCompletedCallback;\r\n this.#ackFailedCallback = ackFailedCallback;\r\n this.#pauseSignal = transferPauseSignal;\r\n this.#abortSignal = transferAbortSignal;\r\n\r\n const stopController = new AbortController();\r\n const mergedPauseAndAbortSignal = mergeAbortAndPauseSignals(transferPauseSignal, transferAbortSignal);\r\n\r\n this.#mergedPauseAndAbortController = mergedPauseAndAbortSignal;\r\n\r\n if (mergedPauseAndAbortSignal.signal.aborted)\r\n stopController.abort();\r\n else\r\n mergedPauseAndAbortSignal.signal.addEventListener(`abort`, () => stopController.abort(), { once: true });\r\n\r\n this.#stopController = stopController;\r\n\r\n this.#pendingFileAcks = [];\r\n\r\n this.#flushTimer = setInterval(() => {\r\n if (this.#pendingFileAcks.length > 0)\r\n this.flush();\r\n }, this.#fileAckIntervalInMs);\r\n }\r\n\r\n async stop(): Promise<void> {\r\n if (this.#flushTimer !== undefined) {\r\n clearInterval(this.#flushTimer);\r\n this.#flushTimer = undefined;\r\n }\r\n\r\n this.#stopController?.abort();\r\n this.#mergedPauseAndAbortController?.dispose();\r\n\r\n if (this.#ongoingFlush)\r\n await this.#ongoingFlush;\r\n }\r\n\r\n enqueue(pendingFileAck: PendingFileAck): void {\r\n this.#pendingFileAcks.push(pendingFileAck);\r\n\r\n if (this.#pendingFileAcks.length >= ACK_ITEMS_BATCH_SIZE)\r\n this.flush();\r\n }\r\n\r\n flush(): Promise<void> {\r\n this.#ongoingFlush ??= this.ackPendingFiles().finally(() => {\r\n this.#ongoingFlush = undefined;\r\n });\r\n\r\n return this.#ongoingFlush;\r\n }\r\n\r\n private async ackPendingFiles(): Promise<void> {\r\n try {\r\n while (this.#pendingFileAcks.length > 0 && !this.shouldStopAcking()) {\r\n const ackItemsBatch = this.#pendingFileAcks.splice(0, ACK_ITEMS_BATCH_SIZE);\r\n\r\n try {\r\n const response = await this.#apiClient.ackTransferFiles(this.#transferId!, {\r\n transferkey: this.#transferKey!,\r\n files: ackItemsBatch.map(item => ({ uploadItemId: item.uploadItemId, size: item.sizeInBytes })),\r\n }, this.#stopController?.signal);\r\n\r\n this.validateAckTransferFilesResponse(ackItemsBatch, response);\r\n }\r\n catch (error) {\r\n // The failed batch is not retried within the run - its files stay uncompleted and the next run acks them again.\r\n this.handleAckBatchError(ackItemsBatch, error as Error);\r\n\r\n continue;\r\n }\r\n\r\n for (const item of ackItemsBatch)\r\n this.#ackCompletedCallback!(item.externalFileId, item.uploadItemId);\r\n }\r\n }\r\n catch (error) {\r\n // The flush is fire-and-forget on the full-batch and timer triggers, so it must never reject.\r\n const eventArgs: FilesBatchAckFailedEventArgs = { reason: this.getAckFailedReason(error), error: error as Error };\r\n this.#eventsEngine.emit(TransferUploadEvent.FilesBatchAckFailed, eventArgs);\r\n }\r\n }\r\n\r\n private shouldStopAcking(): boolean {\r\n return this.#stopController?.signal.aborted === true;\r\n }\r\n\r\n private handleAckBatchError(ackItemsBatch: PendingFileAck[], error: Error): void {\r\n const reason = this.getAckFailedReason(error);\r\n\r\n for (const item of ackItemsBatch)\r\n this.#ackFailedCallback!(item.externalFileId, item.uploadItemId, reason, error);\r\n }\r\n\r\n private getAckFailedReason(error: unknown): string {\r\n if (this.#pauseSignal?.paused === true)\r\n return `Pause requested`;\r\n\r\n if (this.#abortSignal?.aborted === true)\r\n return `Aborted`;\r\n\r\n if (this.#stopController?.signal.aborted === true)\r\n return `Stopped`;\r\n\r\n if (error instanceof ApiError) {\r\n const baseMessage = error.cause?.message ? `${error.message}. ${error.cause.message}` : error.message;\r\n return error.requestUrl ? `${baseMessage}. Request URL: ${error.requestUrl}` : baseMessage;\r\n }\r\n\r\n return (error as Error)?.message;\r\n }\r\n\r\n private validateAckTransferFilesResponse(ackItemsBatch: PendingFileAck[], response: AckTransferFilesResponse): void {\r\n if (response.files.length !== ackItemsBatch.length)\r\n throw new TransferUploadError(`Invalid ack transfer files response`);\r\n\r\n const completedUploadItemIds = new Set(response.files.filter(file => file.status === `complete`).map(file => file.uploadItemId));\r\n\r\n if (ackItemsBatch.some(item => !completedUploadItemIds.has(item.uploadItemId)))\r\n throw new TransferUploadError(`Invalid ack transfer files response`);\r\n }\r\n}"]}
1
+ {"version":3,"file":"transferUploadAcker.js","sourceRoot":"","sources":["../../../src/uploader/transferUploadAcker.ts"],"names":[],"mappings":"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","sourcesContent":["import TransferUploadError from \"./transferUploadError.js\";\nimport TransferUploadEvent from \"./transferUploadEvent.js\";\nimport ApiError from \"../utils/api/apiError.js\";\nimport mergeAbortAndPauseSignals, { type MergedAbortAndPauseController } from \"../utils/mergeAbortAndPauseSignals.js\";\n\nimport type ApiClient from \"../utils/api/apiClient.js\";\nimport type EventsEngine from \"../utils/events/eventsEngine.js\";\nimport type PendingFileAck from \"./pendingFileAck.js\";\nimport type { PauseSignal } from \"./pauseController.js\";\nimport type { AckTransferFilesResponse } from \"../utils/api/dtos/ackTransferFilesResponse.js\";\nimport type FilesBatchAckFailedEventArgs from \"./eventArgs/filesBatchAckFailedEventArgs.js\";\n\nconst ACK_ITEMS_BATCH_SIZE = 500;\n\nexport default class TransferUploadAcker {\n #apiClient: ApiClient;\n #eventsEngine: EventsEngine;\n #fileAckIntervalInMs: number;\n\n #pendingFileAcks: PendingFileAck[] = [];\n #ongoingFlush: Promise<void> | undefined;\n #flushTimer: ReturnType<typeof setInterval> | undefined;\n\n #ackCompletedCallback: ((externalFileId: string | number, uploadItemId: string) => void) | undefined;\n #ackFailedCallback: ((externalFileId: string | number, uploadItemId: string, reason: string, error: Error) => void) | undefined;\n\n #transferId: string | undefined;\n #transferKey: string | undefined;\n #pauseSignal: PauseSignal | undefined;\n #abortSignal: AbortSignal | undefined;\n #stopController: AbortController | undefined;\n #mergedPauseAndAbortController: MergedAbortAndPauseController | undefined;\n\n constructor(apiClient: ApiClient, eventsEngine: EventsEngine, fileAckIntervalInMs: number) {\n this.#apiClient = apiClient;\n this.#eventsEngine = eventsEngine;\n this.#fileAckIntervalInMs = fileAckIntervalInMs;\n }\n\n start(transferId: string, transferKey: string, ackCompletedCallback: (externalFileId: string | number, uploadItemId: string) => void, ackFailedCallback: (externalFileId: string | number, uploadItemId: string, reason: string, error: Error) => void, transferPauseSignal: PauseSignal, transferAbortSignal: AbortSignal): void {\n this.#transferId = transferId;\n this.#transferKey = transferKey;\n this.#ackCompletedCallback = ackCompletedCallback;\n this.#ackFailedCallback = ackFailedCallback;\n this.#pauseSignal = transferPauseSignal;\n this.#abortSignal = transferAbortSignal;\n\n const stopController = new AbortController();\n const mergedPauseAndAbortSignal = mergeAbortAndPauseSignals(transferPauseSignal, transferAbortSignal);\n\n this.#mergedPauseAndAbortController = mergedPauseAndAbortSignal;\n\n if (mergedPauseAndAbortSignal.signal.aborted)\n stopController.abort();\n else\n mergedPauseAndAbortSignal.signal.addEventListener(`abort`, () => stopController.abort(), { once: true });\n\n this.#stopController = stopController;\n\n this.#pendingFileAcks = [];\n\n this.#flushTimer = setInterval(() => {\n if (this.#pendingFileAcks.length > 0)\n this.flush();\n }, this.#fileAckIntervalInMs);\n }\n\n async stop(): Promise<void> {\n if (this.#flushTimer !== undefined) {\n clearInterval(this.#flushTimer);\n this.#flushTimer = undefined;\n }\n\n this.#stopController?.abort();\n this.#mergedPauseAndAbortController?.dispose();\n\n if (this.#ongoingFlush)\n await this.#ongoingFlush;\n }\n\n enqueue(pendingFileAck: PendingFileAck): void {\n this.#pendingFileAcks.push(pendingFileAck);\n\n if (this.#pendingFileAcks.length >= ACK_ITEMS_BATCH_SIZE)\n this.flush();\n }\n\n flush(): Promise<void> {\n this.#ongoingFlush ??= this.ackPendingFiles().finally(() => {\n this.#ongoingFlush = undefined;\n });\n\n return this.#ongoingFlush;\n }\n\n private async ackPendingFiles(): Promise<void> {\n try {\n while (this.#pendingFileAcks.length > 0 && !this.shouldStopAcking()) {\n const ackItemsBatch = this.#pendingFileAcks.splice(0, ACK_ITEMS_BATCH_SIZE);\n\n try {\n const response = await this.#apiClient.ackTransferFiles(this.#transferId!, {\n transferkey: this.#transferKey!,\n files: ackItemsBatch.map(item => ({ uploadItemId: item.uploadItemId, size: item.sizeInBytes })),\n }, this.#stopController?.signal);\n\n this.validateAckTransferFilesResponse(ackItemsBatch, response);\n }\n catch (error) {\n // The failed batch is not retried within the run - its files stay uncompleted and the next run acks them again.\n this.handleAckBatchError(ackItemsBatch, error as Error);\n\n continue;\n }\n\n for (const item of ackItemsBatch)\n this.#ackCompletedCallback!(item.externalFileId, item.uploadItemId);\n }\n }\n catch (error) {\n // The flush is fire-and-forget on the full-batch and timer triggers, so it must never reject.\n const eventArgs: FilesBatchAckFailedEventArgs = { reason: this.getAckFailedReason(error), error: error as Error };\n this.#eventsEngine.emit(TransferUploadEvent.FilesBatchAckFailed, eventArgs);\n }\n }\n\n private shouldStopAcking(): boolean {\n return this.#stopController?.signal.aborted === true;\n }\n\n private handleAckBatchError(ackItemsBatch: PendingFileAck[], error: Error): void {\n const reason = this.getAckFailedReason(error);\n\n for (const item of ackItemsBatch)\n this.#ackFailedCallback!(item.externalFileId, item.uploadItemId, reason, error);\n }\n\n private getAckFailedReason(error: unknown): string {\n if (this.#pauseSignal?.paused === true)\n return `Pause requested`;\n\n if (this.#abortSignal?.aborted === true)\n return `Aborted`;\n\n if (this.#stopController?.signal.aborted === true)\n return `Stopped`;\n\n if (error instanceof ApiError) {\n const baseMessage = error.cause?.message ? `${error.message}. ${error.cause.message}` : error.message;\n return error.requestUrl ? `${baseMessage}. Request URL: ${error.requestUrl}` : baseMessage;\n }\n\n return (error as Error)?.message;\n }\n\n private validateAckTransferFilesResponse(ackItemsBatch: PendingFileAck[], response: AckTransferFilesResponse): void {\n if (response.files.length !== ackItemsBatch.length)\n throw new TransferUploadError(`Invalid ack transfer files response`);\n\n const completedUploadItemIds = new Set(response.files.filter(file => file.status === `complete`).map(file => file.uploadItemId));\n\n if (ackItemsBatch.some(item => !completedUploadItemIds.has(item.uploadItemId)))\n throw new TransferUploadError(`Invalid ack transfer files response`);\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploadError.js","sourceRoot":"","sources":["../../../src/uploader/transferUploadError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,KAAK;IAClD,YAAY,OAAgB,EAAE,OAAsB;QAChD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACtC,CAAC;CACJ","sourcesContent":["export default class TransferUploadError extends Error {\r\n constructor(message?: string, options?: ErrorOptions) {\r\n super(message, options);\r\n this.name = `TransferUploadError`;\r\n }\r\n}"]}
1
+ {"version":3,"file":"transferUploadError.js","sourceRoot":"","sources":["../../../src/uploader/transferUploadError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,KAAK;IAClD,YAAY,OAAgB,EAAE,OAAsB;QAChD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACtC,CAAC;CACJ","sourcesContent":["export default class TransferUploadError extends Error {\n constructor(message?: string, options?: ErrorOptions) {\n super(message, options);\n this.name = `TransferUploadError`;\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transferUploadEvent.js","sourceRoot":"","sources":["../../../src/uploader/transferUploadEvent.ts"],"names":[],"mappings":"AAAA,IAAK,mBA0BJ;AA1BD,WAAK,mBAAmB;IACpB,kDAA2B,CAAA;IAC3B,wEAAiD,CAAA;IACjD,wDAAiC,CAAA;IACjC,wEAAiD,CAAA;IACjD,0DAAmC,CAAA;IACnC,0EAAmD,CAAA;IACnD,4DAAqC,CAAA;IACrC,gEAAyC,CAAA;IACzC,8DAAuC,CAAA;IACvC,wDAAiC,CAAA;IACjC,gEAAyC,CAAA;IACzC,8EAAuD,CAAA;IACvD,8DAAuC,CAAA;IACvC,kEAA2C,CAAA;IAC3C,sDAA+B,CAAA;IAC/B,4DAAqC,CAAA;IACrC,oFAA6D,CAAA;IAC7D,sDAA+B,CAAA;IAC/B,kEAA2C,CAAA;IAC3C,wEAAiD,CAAA;IACjD,8EAAuD,CAAA;IACvD,4EAAqD,CAAA;IACrD,8FAAuE,CAAA;IACvE,sEAA+C,CAAA;IAC/C,kEAA2C,CAAA;AAC/C,CAAC,EA1BI,mBAAmB,KAAnB,mBAAmB,QA0BvB;AAED,eAAe,mBAAmB,CAAC","sourcesContent":["enum TransferUploadEvent {\r\n TransferRun = `TransferRun`,\r\n TransferPauseRequested = `TransferPauseRequested`,\r\n TransferPaused = `TransferPaused`,\r\n TransferAbortRequested = `TransferAbortRequested`,\r\n TransferAborted = `TransferAborted`,\r\n TransferCancelRequested = `TransferCancelRequested`,\r\n TransferCanceled = `TransferCanceled`,\r\n TransferProgressed = `TransferProgressed`,\r\n TransferCompleted = `TransferCompleted`,\r\n TransferFailed = `TransferFailed`,\r\n TransferFinalizing = `TransferFinalizing`,\r\n TransferMetadataDetermined = `TransferRegionDetermined`,\r\n FileUploadStarted = `FileUploadStarted`,\r\n FileUploadCompleted = `FileUploadCompleted`,\r\n FileCompleted = `FileCompleted`,\r\n FileUploadFailed = `FileUploadFailed`,\r\n FilesRegistrationBatchFailed = `FilesRegistrationBatchFailed`,\r\n FileAckFailed = `FileAckFailed`,\r\n FilesBatchAckFailed = `FilesBatchAckFailed`,\r\n FileChunkUploadStarted = `FileChunkUploadStarted`,\r\n FileChunkUploadProgressed = `FileChunkUploadProgressed`,\r\n FileChunkUploadCompleted = `FileChunkUploadCompleted`,\r\n FileChunkUploadCompletedPartially = `FileChunkUploadCompletedPartially`,\r\n FileChunkUploadFailed = `FileChunkUploadFailed`,\r\n RecreateDataUpdated = `RecreateDataUpdated`,\r\n}\r\n\r\nexport default TransferUploadEvent;"]}
1
+ {"version":3,"file":"transferUploadEvent.js","sourceRoot":"","sources":["../../../src/uploader/transferUploadEvent.ts"],"names":[],"mappings":"AAAA,IAAK,mBA0BJ;AA1BD,WAAK,mBAAmB;IACpB,kDAA2B,CAAA;IAC3B,wEAAiD,CAAA;IACjD,wDAAiC,CAAA;IACjC,wEAAiD,CAAA;IACjD,0DAAmC,CAAA;IACnC,0EAAmD,CAAA;IACnD,4DAAqC,CAAA;IACrC,gEAAyC,CAAA;IACzC,8DAAuC,CAAA;IACvC,wDAAiC,CAAA;IACjC,gEAAyC,CAAA;IACzC,8EAAuD,CAAA;IACvD,8DAAuC,CAAA;IACvC,kEAA2C,CAAA;IAC3C,sDAA+B,CAAA;IAC/B,4DAAqC,CAAA;IACrC,oFAA6D,CAAA;IAC7D,sDAA+B,CAAA;IAC/B,kEAA2C,CAAA;IAC3C,wEAAiD,CAAA;IACjD,8EAAuD,CAAA;IACvD,4EAAqD,CAAA;IACrD,8FAAuE,CAAA;IACvE,sEAA+C,CAAA;IAC/C,kEAA2C,CAAA;AAC/C,CAAC,EA1BI,mBAAmB,KAAnB,mBAAmB,QA0BvB;AAED,eAAe,mBAAmB,CAAC","sourcesContent":["enum TransferUploadEvent {\n TransferRun = `TransferRun`,\n TransferPauseRequested = `TransferPauseRequested`,\n TransferPaused = `TransferPaused`,\n TransferAbortRequested = `TransferAbortRequested`,\n TransferAborted = `TransferAborted`,\n TransferCancelRequested = `TransferCancelRequested`,\n TransferCanceled = `TransferCanceled`,\n TransferProgressed = `TransferProgressed`,\n TransferCompleted = `TransferCompleted`,\n TransferFailed = `TransferFailed`,\n TransferFinalizing = `TransferFinalizing`,\n TransferMetadataDetermined = `TransferRegionDetermined`,\n FileUploadStarted = `FileUploadStarted`,\n FileUploadCompleted = `FileUploadCompleted`,\n FileCompleted = `FileCompleted`,\n FileUploadFailed = `FileUploadFailed`,\n FilesRegistrationBatchFailed = `FilesRegistrationBatchFailed`,\n FileAckFailed = `FileAckFailed`,\n FilesBatchAckFailed = `FilesBatchAckFailed`,\n FileChunkUploadStarted = `FileChunkUploadStarted`,\n FileChunkUploadProgressed = `FileChunkUploadProgressed`,\n FileChunkUploadCompleted = `FileChunkUploadCompleted`,\n FileChunkUploadCompletedPartially = `FileChunkUploadCompletedPartially`,\n FileChunkUploadFailed = `FileChunkUploadFailed`,\n RecreateDataUpdated = `RecreateDataUpdated`,\n}\n\nexport default TransferUploadEvent;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"apiClient.js","sourceRoot":"","sources":["../../../../src/utils/api/apiClient.ts"],"names":[],"mappings":"","sourcesContent":["import type CancelTransferRequest from \"./dtos/cancelTransferRequest.js\";\r\nimport type FinalizeTransferRequest from \"./dtos/finalizeTransferRequest.js\";\r\nimport type FinalizeTransferResponse from \"./dtos/finalizeTransferResponse.js\";\r\nimport type GetInboxTransfersRequest from \"./dtos/getInboxTransfersRequest.js\";\r\nimport type GetInboxTransfersResponse from \"./dtos/getInboxTransfersResponse.js\";\r\nimport type GetTransferRequest from \"./dtos/getTransferRequest.js\";\r\nimport type GetTransferResponse from \"./dtos/getTransferResponse.js\";\r\nimport type { InitializeTransferRequest } from \"./dtos/initializeTransferRequest.js\";\r\nimport type InitializeTransferResponse from \"./dtos/initializeTransferResponse.js\";\r\nimport type LoginRequest from \"./dtos/loginRequest.js\";\r\nimport type LoginResponse from \"./dtos/loginResponse.js\";\r\nimport type RegisterFileDownloadRequest from \"./dtos/registerFileDownloadRequest.js\";\r\nimport type RegisterTransferDownloadRequest from \"./dtos/registerTransferDownloadRequest.js\";\r\nimport type ResetTransferRequest from \"./dtos/resetTransferRequest.js\";\r\nimport type { RegisterTransferFilesRequest } from \"./dtos/registerTransferFilesRequest.js\";\r\nimport type { RegisterTransferFilesResponse } from \"./dtos/registerTransferFilesResponse.js\";\r\nimport type { AckTransferFilesRequest } from \"./dtos/ackTransferFilesRequest.js\";\r\nimport type { AckTransferFilesResponse } from \"./dtos/ackTransferFilesResponse.js\";\r\n\r\ninterface ApiClient {\r\n login(request: LoginRequest, abortSignal?: AbortSignal): Promise<LoginResponse>,\r\n logout(abortSignal?: AbortSignal): Promise<void>,\r\n initializeTransfer(request: InitializeTransferRequest, abortSignal?: AbortSignal): Promise<InitializeTransferResponse>,\r\n registerTransferFiles(transferId: string, request: RegisterTransferFilesRequest, abortSignal?: AbortSignal): Promise<RegisterTransferFilesResponse>,\r\n ackTransferFiles(transferId: string, request: AckTransferFilesRequest, abortSignal?: AbortSignal): Promise<AckTransferFilesResponse>,\r\n finalizeTransfer(request: FinalizeTransferRequest, abortSignal?: AbortSignal): Promise<FinalizeTransferResponse>,\r\n resetTransfer(request: ResetTransferRequest, abortSignal?: AbortSignal): Promise<void>,\r\n cancelTransfer(request: CancelTransferRequest, abortSignal?: AbortSignal): Promise<void>,\r\n getTransfer(request: GetTransferRequest, abortSignal?: AbortSignal): Promise<GetTransferResponse>,\r\n getInboxTransfers(request: GetInboxTransfersRequest, abortSignal?: AbortSignal): Promise<GetInboxTransfersResponse>,\r\n setLoginToken(loginToken: string): void,\r\n clearLoginToken(): void,\r\n registerFileDownload(request: RegisterFileDownloadRequest, abortSignal?: AbortSignal): Promise<void>,\r\n registerTransferDownload(request: RegisterTransferDownloadRequest, abortSignal?: AbortSignal): Promise<void>,\r\n}\r\n\r\nexport default ApiClient;"]}
1
+ {"version":3,"file":"apiClient.js","sourceRoot":"","sources":["../../../../src/utils/api/apiClient.ts"],"names":[],"mappings":"","sourcesContent":["import type CancelTransferRequest from \"./dtos/cancelTransferRequest.js\";\nimport type FinalizeTransferRequest from \"./dtos/finalizeTransferRequest.js\";\nimport type FinalizeTransferResponse from \"./dtos/finalizeTransferResponse.js\";\nimport type GetInboxTransfersRequest from \"./dtos/getInboxTransfersRequest.js\";\nimport type GetInboxTransfersResponse from \"./dtos/getInboxTransfersResponse.js\";\nimport type GetTransferRequest from \"./dtos/getTransferRequest.js\";\nimport type GetTransferResponse from \"./dtos/getTransferResponse.js\";\nimport type { InitializeTransferRequest } from \"./dtos/initializeTransferRequest.js\";\nimport type InitializeTransferResponse from \"./dtos/initializeTransferResponse.js\";\nimport type LoginRequest from \"./dtos/loginRequest.js\";\nimport type LoginResponse from \"./dtos/loginResponse.js\";\nimport type RegisterFileDownloadRequest from \"./dtos/registerFileDownloadRequest.js\";\nimport type RegisterTransferDownloadRequest from \"./dtos/registerTransferDownloadRequest.js\";\nimport type ResetTransferRequest from \"./dtos/resetTransferRequest.js\";\nimport type { RegisterTransferFilesRequest } from \"./dtos/registerTransferFilesRequest.js\";\nimport type { RegisterTransferFilesResponse } from \"./dtos/registerTransferFilesResponse.js\";\nimport type { AckTransferFilesRequest } from \"./dtos/ackTransferFilesRequest.js\";\nimport type { AckTransferFilesResponse } from \"./dtos/ackTransferFilesResponse.js\";\n\ninterface ApiClient {\n login(request: LoginRequest, abortSignal?: AbortSignal): Promise<LoginResponse>,\n logout(abortSignal?: AbortSignal): Promise<void>,\n initializeTransfer(request: InitializeTransferRequest, abortSignal?: AbortSignal): Promise<InitializeTransferResponse>,\n registerTransferFiles(transferId: string, request: RegisterTransferFilesRequest, abortSignal?: AbortSignal): Promise<RegisterTransferFilesResponse>,\n ackTransferFiles(transferId: string, request: AckTransferFilesRequest, abortSignal?: AbortSignal): Promise<AckTransferFilesResponse>,\n finalizeTransfer(request: FinalizeTransferRequest, abortSignal?: AbortSignal): Promise<FinalizeTransferResponse>,\n resetTransfer(request: ResetTransferRequest, abortSignal?: AbortSignal): Promise<void>,\n cancelTransfer(request: CancelTransferRequest, abortSignal?: AbortSignal): Promise<void>,\n getTransfer(request: GetTransferRequest, abortSignal?: AbortSignal): Promise<GetTransferResponse>,\n getInboxTransfers(request: GetInboxTransfersRequest, abortSignal?: AbortSignal): Promise<GetInboxTransfersResponse>,\n setLoginToken(loginToken: string): void,\n clearLoginToken(): void,\n registerFileDownload(request: RegisterFileDownloadRequest, abortSignal?: AbortSignal): Promise<void>,\n registerTransferDownload(request: RegisterTransferDownloadRequest, abortSignal?: AbortSignal): Promise<void>,\n}\n\nexport default ApiClient;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"apiClientBase.js","sourceRoot":"","sources":["../../../../src/utils/api/apiClientBase.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAgB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAItE,MAAM,CAAC,OAAO,OAAO,aAAa;IACpB,6BAA6B,CAAC,OAAe,EAAE,MAAc,EAAE,aAAqB,EAAE,uBAA+B,EAAE,UAAkB;QAC/I,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC7C,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACrD,IAAI,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAAI,uBAAuB,GAAG,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAClD,CAAC;IAES,mBAAmB,CAAC,QAA+B,EAAE,eAAwB;QACnF,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAExE,IAAI,QAAQ,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,cAAc,CAAC;YACxH,MAAM,IAAI,gBAAgB,CAAC,GAAG,QAAQ,CAAC,cAAc,KAAK,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;QACzG,CAAC;QAED,IAAI,eAAe,IAAI,CAAC,QAAQ,CAAC,IAAI;YACjC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACjE,CAAC;IAES,gCAAgC,CAAC,OAAkC;QACzE,MAAM,EAAE,YAAY,EAAE,GAAG,6BAA6B,EAAE,GAAG,OAAO,CAAC;QAEnE,MAAM,sBAAsB,GAAG,IAAI,CAAC,uCAAuC,CAAC,YAAY,CAAC,CAAC;QAE1F,OAAO,EAAE,GAAG,6BAA6B,EAAE,YAAY,EAAE,sBAAsB,EAAE,CAAC;IACtF,CAAC;IAEO,uCAAuC,CAAC,YAAqD;QACjG,IAAI,CAAC,YAAY;YACb,OAAO,SAAS,CAAC;QAErB,MAAM,sBAAsB,GAA8C,EAAE,CAAC;QAE7E,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACtB,IAAI,CAAC,EAAE,CAAC,KAAK;gBACT,OAAO;YAEX,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC;gBACxB,sBAAsB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;iBAC3D,CAAC;gBACF,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBACrB,sBAAsB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBACtD,CAAC,CAAC,CAAC;YACP,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,sBAAsB,CAAC;IAClC,CAAC;CACJ","sourcesContent":["import ApiFilemailError from \"./apiFilemailError.js\";\r\nimport { BaseResponse, isBaseResponse } from \"./dtos/baseResponse.js\";\r\n\r\nimport type { InitializeTransferRequest, InitializeTransferRequestCustomField, InitializeTransferRequestCustomFieldRaw, InitializeTransferRequestRaw } from \"./dtos/initializeTransferRequest.js\";\r\n\r\nexport default class ApiClientBase {\r\n protected validateConstructorParameters(baseUrl: string, source: string, sourceDetails: string, totalRequestTimeoutInMs: number, retryLimit: number) {\r\n if (!baseUrl || baseUrl.length === 0)\r\n throw new Error(`Base url can't be empty`);\r\n if (!source || source.length === 0)\r\n throw new Error(`Source can't be empty`);\r\n if (!sourceDetails || sourceDetails.length === 0)\r\n throw new Error(`Source details can't be empty`);\r\n if (Number.isNaN(totalRequestTimeoutInMs) || totalRequestTimeoutInMs < 0)\r\n throw new Error(`Total request timeout is invalid`);\r\n if (Number.isNaN(retryLimit) || retryLimit < 0)\r\n throw new Error(`Retry limit is invalid`);\r\n }\r\n\r\n protected throwIfPayloadNotOk(response: BaseResponse<unknown>, shouldDataExist: boolean) {\r\n if (!isBaseResponse(response))\r\n throw new Error(`API response is not a valid base response object`);\r\n\r\n if (response.responsestatus !== `OK`) {\r\n const reason = response.errormessage || response.errorcode?.toString() || response.exception || response.responsestatus;\r\n throw new ApiFilemailError(`${response.responsestatus}: ${reason}`, reason, response.responsestatus);\r\n }\r\n\r\n if (shouldDataExist && !response.data)\r\n throw new Error(`Data object in response doesn't exist`);\r\n }\r\n\r\n protected mapInitializeRequestToApiRequest(request: InitializeTransferRequest): InitializeTransferRequestRaw {\r\n const { customfields, ...apiRequestWithoutCustomFields } = request;\r\n\r\n const apiRequestCustomFields = this.mapCustomFieldsToApiRequestCustomFields(customfields);\r\n\r\n return { ...apiRequestWithoutCustomFields, customfields: apiRequestCustomFields };\r\n }\r\n\r\n private mapCustomFieldsToApiRequestCustomFields(customfields?: InitializeTransferRequestCustomField[]): InitializeTransferRequestCustomFieldRaw[] | undefined {\r\n if (!customfields)\r\n return undefined;\r\n\r\n const apiRequestCustomFields: InitializeTransferRequestCustomFieldRaw[] = [];\r\n\r\n customfields.forEach(cf => {\r\n if (!cf.value)\r\n return;\r\n\r\n if (!Array.isArray(cf.value))\r\n apiRequestCustomFields.push({ id: cf.id, value: cf.value });\r\n else {\r\n cf.value.forEach(value => {\r\n apiRequestCustomFields.push({ id: cf.id, value });\r\n });\r\n }\r\n });\r\n\r\n return apiRequestCustomFields;\r\n }\r\n}"]}
1
+ {"version":3,"file":"apiClientBase.js","sourceRoot":"","sources":["../../../../src/utils/api/apiClientBase.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAgB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAItE,MAAM,CAAC,OAAO,OAAO,aAAa;IACpB,6BAA6B,CAAC,OAAe,EAAE,MAAc,EAAE,aAAqB,EAAE,uBAA+B,EAAE,UAAkB;QAC/I,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC7C,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACrD,IAAI,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAAI,uBAAuB,GAAG,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAClD,CAAC;IAES,mBAAmB,CAAC,QAA+B,EAAE,eAAwB;QACnF,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAExE,IAAI,QAAQ,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,cAAc,CAAC;YACxH,MAAM,IAAI,gBAAgB,CAAC,GAAG,QAAQ,CAAC,cAAc,KAAK,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;QACzG,CAAC;QAED,IAAI,eAAe,IAAI,CAAC,QAAQ,CAAC,IAAI;YACjC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACjE,CAAC;IAES,gCAAgC,CAAC,OAAkC;QACzE,MAAM,EAAE,YAAY,EAAE,GAAG,6BAA6B,EAAE,GAAG,OAAO,CAAC;QAEnE,MAAM,sBAAsB,GAAG,IAAI,CAAC,uCAAuC,CAAC,YAAY,CAAC,CAAC;QAE1F,OAAO,EAAE,GAAG,6BAA6B,EAAE,YAAY,EAAE,sBAAsB,EAAE,CAAC;IACtF,CAAC;IAEO,uCAAuC,CAAC,YAAqD;QACjG,IAAI,CAAC,YAAY;YACb,OAAO,SAAS,CAAC;QAErB,MAAM,sBAAsB,GAA8C,EAAE,CAAC;QAE7E,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACtB,IAAI,CAAC,EAAE,CAAC,KAAK;gBACT,OAAO;YAEX,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC;gBACxB,sBAAsB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;iBAC3D,CAAC;gBACF,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBACrB,sBAAsB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBACtD,CAAC,CAAC,CAAC;YACP,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,sBAAsB,CAAC;IAClC,CAAC;CACJ","sourcesContent":["import ApiFilemailError from \"./apiFilemailError.js\";\nimport { BaseResponse, isBaseResponse } from \"./dtos/baseResponse.js\";\n\nimport type { InitializeTransferRequest, InitializeTransferRequestCustomField, InitializeTransferRequestCustomFieldRaw, InitializeTransferRequestRaw } from \"./dtos/initializeTransferRequest.js\";\n\nexport default class ApiClientBase {\n protected validateConstructorParameters(baseUrl: string, source: string, sourceDetails: string, totalRequestTimeoutInMs: number, retryLimit: number) {\n if (!baseUrl || baseUrl.length === 0)\n throw new Error(`Base url can't be empty`);\n if (!source || source.length === 0)\n throw new Error(`Source can't be empty`);\n if (!sourceDetails || sourceDetails.length === 0)\n throw new Error(`Source details can't be empty`);\n if (Number.isNaN(totalRequestTimeoutInMs) || totalRequestTimeoutInMs < 0)\n throw new Error(`Total request timeout is invalid`);\n if (Number.isNaN(retryLimit) || retryLimit < 0)\n throw new Error(`Retry limit is invalid`);\n }\n\n protected throwIfPayloadNotOk(response: BaseResponse<unknown>, shouldDataExist: boolean) {\n if (!isBaseResponse(response))\n throw new Error(`API response is not a valid base response object`);\n\n if (response.responsestatus !== `OK`) {\n const reason = response.errormessage || response.errorcode?.toString() || response.exception || response.responsestatus;\n throw new ApiFilemailError(`${response.responsestatus}: ${reason}`, reason, response.responsestatus);\n }\n\n if (shouldDataExist && !response.data)\n throw new Error(`Data object in response doesn't exist`);\n }\n\n protected mapInitializeRequestToApiRequest(request: InitializeTransferRequest): InitializeTransferRequestRaw {\n const { customfields, ...apiRequestWithoutCustomFields } = request;\n\n const apiRequestCustomFields = this.mapCustomFieldsToApiRequestCustomFields(customfields);\n\n return { ...apiRequestWithoutCustomFields, customfields: apiRequestCustomFields };\n }\n\n private mapCustomFieldsToApiRequestCustomFields(customfields?: InitializeTransferRequestCustomField[]): InitializeTransferRequestCustomFieldRaw[] | undefined {\n if (!customfields)\n return undefined;\n\n const apiRequestCustomFields: InitializeTransferRequestCustomFieldRaw[] = [];\n\n customfields.forEach(cf => {\n if (!cf.value)\n return;\n\n if (!Array.isArray(cf.value))\n apiRequestCustomFields.push({ id: cf.id, value: cf.value });\n else {\n cf.value.forEach(value => {\n apiRequestCustomFields.push({ id: cf.id, value });\n });\n }\n });\n\n return apiRequestCustomFields;\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"apiError.js","sourceRoot":"","sources":["../../../../src/utils/api/apiError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,KAAK;IAC9B,UAAU,CAAqB;IAC/B,UAAU,CAAqB;IAExC,YAAY,OAAgB,EAAE,UAAmB,EAAE,OAAgD;QAC/F,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;IAC1C,CAAC;CACJ","sourcesContent":["export default class ApiError extends Error {\r\n readonly httpStatus: number | undefined;\r\n readonly requestUrl: string | undefined;\r\n\r\n constructor(message?: string, httpStatus?: number, options?: ErrorOptions & { requestUrl?: string }) {\r\n super(message, options);\r\n this.name = `ApiError`;\r\n this.httpStatus = httpStatus;\r\n this.requestUrl = options?.requestUrl;\r\n }\r\n}"]}
1
+ {"version":3,"file":"apiError.js","sourceRoot":"","sources":["../../../../src/utils/api/apiError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,KAAK;IAC9B,UAAU,CAAqB;IAC/B,UAAU,CAAqB;IAExC,YAAY,OAAgB,EAAE,UAAmB,EAAE,OAAgD;QAC/F,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;IAC1C,CAAC;CACJ","sourcesContent":["export default class ApiError extends Error {\n readonly httpStatus: number | undefined;\n readonly requestUrl: string | undefined;\n\n constructor(message?: string, httpStatus?: number, options?: ErrorOptions & { requestUrl?: string }) {\n super(message, options);\n this.name = `ApiError`;\n this.httpStatus = httpStatus;\n this.requestUrl = options?.requestUrl;\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"apiFilemail449Error.js","sourceRoot":"","sources":["../../../../src/utils/api/apiFilemail449Error.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,KAAK;IAClD,YAAY,OAAe,EAAE,OAAsB;QAC/C,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAExB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACtC,CAAC;CACJ","sourcesContent":["export default class ApiFilemail449Error extends Error {\r\n constructor(message: string, options?: ErrorOptions) {\r\n super(message, options);\r\n\r\n this.name = `ApiFilemail449Error`;\r\n }\r\n}"]}
1
+ {"version":3,"file":"apiFilemail449Error.js","sourceRoot":"","sources":["../../../../src/utils/api/apiFilemail449Error.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,KAAK;IAClD,YAAY,OAAe,EAAE,OAAsB;QAC/C,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAExB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACtC,CAAC;CACJ","sourcesContent":["export default class ApiFilemail449Error extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n\n this.name = `ApiFilemail449Error`;\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"apiFilemailError.js","sourceRoot":"","sources":["../../../../src/utils/api/apiFilemailError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,KAAK;IACtC,MAAM,CAAS;IACf,MAAM,CAAS;IAExB,YAAY,OAAe,EAAE,MAAc,EAAE,MAAc,EAAE,OAAsB;QAC/E,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAExB,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAE/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;CACJ","sourcesContent":["export default class ApiFilemailError extends Error {\r\n readonly reason: string;\r\n readonly status: string;\r\n\r\n constructor(message: string, reason: string, status: string, options?: ErrorOptions) {\r\n super(message, options);\r\n\r\n this.name = `ApiFilemailError`;\r\n\r\n this.reason = reason;\r\n this.status = status;\r\n }\r\n}"]}
1
+ {"version":3,"file":"apiFilemailError.js","sourceRoot":"","sources":["../../../../src/utils/api/apiFilemailError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,KAAK;IACtC,MAAM,CAAS;IACf,MAAM,CAAS;IAExB,YAAY,OAAe,EAAE,MAAc,EAAE,MAAc,EAAE,OAAsB;QAC/E,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAExB,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAE/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;CACJ","sourcesContent":["export default class ApiFilemailError extends Error {\n readonly reason: string;\n readonly status: string;\n\n constructor(message: string, reason: string, status: string, options?: ErrorOptions) {\n super(message, options);\n\n this.name = `ApiFilemailError`;\n\n this.reason = reason;\n this.status = status;\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ackTransferFilesRequest.js","sourceRoot":"","sources":["../../../../../src/utils/api/dtos/ackTransferFilesRequest.ts"],"names":[],"mappings":"","sourcesContent":["export type AckTransferFilesRequest = {\r\n transferkey: string,\r\n files: {\r\n uploadItemId: string,\r\n size: number,\r\n md5?: string,\r\n }[],\r\n}"]}
1
+ {"version":3,"file":"ackTransferFilesRequest.js","sourceRoot":"","sources":["../../../../../src/utils/api/dtos/ackTransferFilesRequest.ts"],"names":[],"mappings":"","sourcesContent":["export type AckTransferFilesRequest = {\n transferkey: string,\n files: {\n uploadItemId: string,\n size: number,\n md5?: string,\n }[],\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ackTransferFilesResponse.js","sourceRoot":"","sources":["../../../../../src/utils/api/dtos/ackTransferFilesResponse.ts"],"names":[],"mappings":"","sourcesContent":["export type AckTransferFilesResponse = {\r\n files: {\r\n uploadItemId: string,\r\n status: string,\r\n }[],\r\n}"]}
1
+ {"version":3,"file":"ackTransferFilesResponse.js","sourceRoot":"","sources":["../../../../../src/utils/api/dtos/ackTransferFilesResponse.ts"],"names":[],"mappings":"","sourcesContent":["export type AckTransferFilesResponse = {\n files: {\n uploadItemId: string,\n status: string,\n }[],\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"baseResponse.js","sourceRoot":"","sources":["../../../../../src/utils/api/dtos/baseResponse.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,cAAc,CAAC,GAAQ;IACnC,OAAO,GAAG,IAAI,gBAAgB,IAAI,GAAG,CAAC;AAC1C,CAAC","sourcesContent":["export interface BaseResponse<T> {\r\n responsestatus: string,\r\n errorcode?: number,\r\n errormessage?: string,\r\n errorlink?: string,\r\n url?: string,\r\n method?: string,\r\n exception?: string,\r\n data?: T\r\n}\r\n\r\nexport function isBaseResponse(obj: any): obj is BaseResponse<unknown> {\r\n return obj && `responsestatus` in obj;\r\n}"]}
1
+ {"version":3,"file":"baseResponse.js","sourceRoot":"","sources":["../../../../../src/utils/api/dtos/baseResponse.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,cAAc,CAAC,GAAQ;IACnC,OAAO,GAAG,IAAI,gBAAgB,IAAI,GAAG,CAAC;AAC1C,CAAC","sourcesContent":["export interface BaseResponse<T> {\n responsestatus: string,\n errorcode?: number,\n errormessage?: string,\n errorlink?: string,\n url?: string,\n method?: string,\n exception?: string,\n data?: T\n}\n\nexport function isBaseResponse(obj: any): obj is BaseResponse<unknown> {\n return obj && `responsestatus` in obj;\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"cancelTransferRequest.js","sourceRoot":"","sources":["../../../../../src/utils/api/dtos/cancelTransferRequest.ts"],"names":[],"mappings":"","sourcesContent":["interface CancelTransferRequest {\r\n transferid: string,\r\n transferkey: string\r\n}\r\n\r\nexport default CancelTransferRequest;"]}
1
+ {"version":3,"file":"cancelTransferRequest.js","sourceRoot":"","sources":["../../../../../src/utils/api/dtos/cancelTransferRequest.ts"],"names":[],"mappings":"","sourcesContent":["interface CancelTransferRequest {\n transferid: string,\n transferkey: string\n}\n\nexport default CancelTransferRequest;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"finalizeTransferRequest.js","sourceRoot":"","sources":["../../../../../src/utils/api/dtos/finalizeTransferRequest.ts"],"names":[],"mappings":"","sourcesContent":["interface FinalizeTransferRequest {\r\n transferid: string,\r\n transferkey: string\r\n protocol: `tcp`,\r\n}\r\n\r\nexport default FinalizeTransferRequest;"]}
1
+ {"version":3,"file":"finalizeTransferRequest.js","sourceRoot":"","sources":["../../../../../src/utils/api/dtos/finalizeTransferRequest.ts"],"names":[],"mappings":"","sourcesContent":["interface FinalizeTransferRequest {\n transferid: string,\n transferkey: string\n protocol: `tcp`,\n}\n\nexport default FinalizeTransferRequest;"]}