@sync-in/server 1.10.1 → 2.0.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 (1057) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/LICENSE +1 -1
  3. package/README.md +3 -11
  4. package/environment/environment.dist.min.yaml +1 -1
  5. package/environment/environment.dist.yaml +173 -28
  6. package/package.json +18 -17
  7. package/server/app.bootstrap.js +1 -5
  8. package/server/app.bootstrap.js.map +1 -1
  9. package/server/app.constants.js +1 -5
  10. package/server/app.constants.js.map +1 -1
  11. package/server/app.e2e-spec.js +1 -5
  12. package/server/app.e2e-spec.js.map +1 -1
  13. package/server/app.functions.js +1 -5
  14. package/server/app.functions.js.map +1 -1
  15. package/server/app.module.js +1 -5
  16. package/server/app.module.js.map +1 -1
  17. package/server/app.service.js +1 -5
  18. package/server/app.service.js.map +1 -1
  19. package/server/app.service.spec.js +2 -6
  20. package/server/app.service.spec.js.map +1 -1
  21. package/server/applications/admin/admin.module.js +1 -5
  22. package/server/applications/admin/admin.module.js.map +1 -1
  23. package/server/applications/admin/constants/routes.js +1 -5
  24. package/server/applications/admin/constants/routes.js.map +1 -1
  25. package/server/applications/admin/interfaces/check-update.interfaces.js +1 -5
  26. package/server/applications/admin/interfaces/check-update.interfaces.js.map +1 -1
  27. package/server/applications/admin/services/admin-scheduler.service.js +1 -5
  28. package/server/applications/admin/services/admin-scheduler.service.js.map +1 -1
  29. package/server/applications/admin/services/admin.service.js +13 -8
  30. package/server/applications/admin/services/admin.service.js.map +1 -1
  31. package/server/applications/admin/services/admin.service.spec.js +1 -5
  32. package/server/applications/admin/services/admin.service.spec.js.map +1 -1
  33. package/server/applications/admin/utils/check-update.js +1 -5
  34. package/server/applications/admin/utils/check-update.js.map +1 -1
  35. package/server/applications/applications.config.js +1 -5
  36. package/server/applications/applications.config.js.map +1 -1
  37. package/server/applications/applications.constants.js +5 -5
  38. package/server/applications/applications.constants.js.map +1 -1
  39. package/server/applications/applications.module.js +1 -5
  40. package/server/applications/applications.module.js.map +1 -1
  41. package/server/applications/comments/comments.controller.js +1 -5
  42. package/server/applications/comments/comments.controller.js.map +1 -1
  43. package/server/applications/comments/comments.controller.spec.js +1 -5
  44. package/server/applications/comments/comments.controller.spec.js.map +1 -1
  45. package/server/applications/comments/comments.module.js +1 -5
  46. package/server/applications/comments/comments.module.js.map +1 -1
  47. package/server/applications/comments/constants/routes.js +1 -5
  48. package/server/applications/comments/constants/routes.js.map +1 -1
  49. package/server/applications/comments/dto/comment.dto.js +1 -5
  50. package/server/applications/comments/dto/comment.dto.js.map +1 -1
  51. package/server/applications/comments/interfaces/comment-recent.interface.js +1 -5
  52. package/server/applications/comments/interfaces/comment-recent.interface.js.map +1 -1
  53. package/server/applications/comments/schemas/comment.interface.js +1 -5
  54. package/server/applications/comments/schemas/comment.interface.js.map +1 -1
  55. package/server/applications/comments/schemas/comments.schema.js +1 -5
  56. package/server/applications/comments/schemas/comments.schema.js.map +1 -1
  57. package/server/applications/comments/services/comments-manager.service.js +9 -7
  58. package/server/applications/comments/services/comments-manager.service.js.map +1 -1
  59. package/server/applications/comments/services/comments-manager.service.spec.js +10 -8
  60. package/server/applications/comments/services/comments-manager.service.spec.js.map +1 -1
  61. package/server/applications/comments/services/comments-queries.service.js +1 -5
  62. package/server/applications/comments/services/comments-queries.service.js.map +1 -1
  63. package/server/applications/files/adapters/files-indexer-mysql.service.js +29 -12
  64. package/server/applications/files/adapters/files-indexer-mysql.service.js.map +1 -1
  65. package/server/applications/files/adapters/files-indexer-mysql.service.spec.js +1 -5
  66. package/server/applications/files/adapters/files-indexer-mysql.service.spec.js.map +1 -1
  67. package/server/applications/files/constants/cache.js +1 -5
  68. package/server/applications/files/constants/cache.js.map +1 -1
  69. package/server/applications/files/constants/compress.js +1 -5
  70. package/server/applications/files/constants/compress.js.map +1 -1
  71. package/server/applications/files/constants/files.js +1 -5
  72. package/server/applications/files/constants/files.js.map +1 -1
  73. package/server/applications/files/constants/indexing.js +1 -5
  74. package/server/applications/files/constants/indexing.js.map +1 -1
  75. package/server/applications/files/constants/operations.js +1 -5
  76. package/server/applications/files/constants/operations.js.map +1 -1
  77. package/server/applications/files/constants/routes.js +1 -5
  78. package/server/applications/files/constants/routes.js.map +1 -1
  79. package/server/applications/files/constants/samples.js +1 -5
  80. package/server/applications/files/constants/samples.js.map +1 -1
  81. package/server/applications/files/dto/file-operations.dto.js +1 -5
  82. package/server/applications/files/dto/file-operations.dto.js.map +1 -1
  83. package/server/applications/files/events/file-task-event.js +1 -5
  84. package/server/applications/files/events/file-task-event.js.map +1 -1
  85. package/server/applications/files/files-tasks.controller.js +1 -5
  86. package/server/applications/files/files-tasks.controller.js.map +1 -1
  87. package/server/applications/files/files-tasks.controller.spec.js +1 -5
  88. package/server/applications/files/files-tasks.controller.spec.js.map +1 -1
  89. package/server/applications/files/files.config.js +1 -5
  90. package/server/applications/files/files.config.js.map +1 -1
  91. package/server/applications/files/files.controller.js +1 -5
  92. package/server/applications/files/files.controller.js.map +1 -1
  93. package/server/applications/files/files.controller.spec.js +1 -5
  94. package/server/applications/files/files.controller.spec.js.map +1 -1
  95. package/server/applications/files/files.module.js +1 -5
  96. package/server/applications/files/files.module.js.map +1 -1
  97. package/server/applications/files/interfaces/file-db-props.interface.js +1 -5
  98. package/server/applications/files/interfaces/file-db-props.interface.js.map +1 -1
  99. package/server/applications/files/interfaces/file-lock.interface.js +1 -5
  100. package/server/applications/files/interfaces/file-lock.interface.js.map +1 -1
  101. package/server/applications/files/interfaces/file-parse-index.js +1 -5
  102. package/server/applications/files/interfaces/file-parse-index.js.map +1 -1
  103. package/server/applications/files/interfaces/file-props.interface.js +1 -5
  104. package/server/applications/files/interfaces/file-props.interface.js.map +1 -1
  105. package/server/applications/files/interfaces/file-recent-location.interface.js +1 -5
  106. package/server/applications/files/interfaces/file-recent-location.interface.js.map +1 -1
  107. package/server/applications/files/interfaces/file-space.interface.js +1 -5
  108. package/server/applications/files/interfaces/file-space.interface.js.map +1 -1
  109. package/server/applications/files/interfaces/file-tree.interface.js +1 -5
  110. package/server/applications/files/interfaces/file-tree.interface.js.map +1 -1
  111. package/server/applications/files/models/file-error.js +1 -5
  112. package/server/applications/files/models/file-error.js.map +1 -1
  113. package/server/applications/files/models/file-lock-error.js +1 -5
  114. package/server/applications/files/models/file-lock-error.js.map +1 -1
  115. package/server/applications/files/models/file-task.js +1 -5
  116. package/server/applications/files/models/file-task.js.map +1 -1
  117. package/server/applications/files/models/files-indexer.js +1 -5
  118. package/server/applications/files/models/files-indexer.js.map +1 -1
  119. package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js +1 -5
  120. package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js.map +1 -1
  121. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js +21 -10
  122. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js.map +1 -1
  123. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js +1 -5
  124. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js.map +1 -1
  125. package/server/applications/files/modules/collabora-online/collabora-online.config.js +1 -5
  126. package/server/applications/files/modules/collabora-online/collabora-online.config.js.map +1 -1
  127. package/server/applications/files/modules/collabora-online/collabora-online.constants.js +1 -5
  128. package/server/applications/files/modules/collabora-online/collabora-online.constants.js.map +1 -1
  129. package/server/applications/files/modules/collabora-online/collabora-online.controller.js +1 -5
  130. package/server/applications/files/modules/collabora-online/collabora-online.controller.js.map +1 -1
  131. package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js +1 -5
  132. package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js.map +1 -1
  133. package/server/applications/files/modules/collabora-online/collabora-online.dtos.js +1 -5
  134. package/server/applications/files/modules/collabora-online/collabora-online.dtos.js.map +1 -1
  135. package/server/applications/files/modules/collabora-online/collabora-online.guard.js +1 -5
  136. package/server/applications/files/modules/collabora-online/collabora-online.guard.js.map +1 -1
  137. package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js +1 -5
  138. package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js.map +1 -1
  139. package/server/applications/files/modules/collabora-online/collabora-online.interface.js +1 -5
  140. package/server/applications/files/modules/collabora-online/collabora-online.interface.js.map +1 -1
  141. package/server/applications/files/modules/collabora-online/collabora-online.module.js +1 -5
  142. package/server/applications/files/modules/collabora-online/collabora-online.module.js.map +1 -1
  143. package/server/applications/files/modules/collabora-online/collabora-online.routes.js +1 -5
  144. package/server/applications/files/modules/collabora-online/collabora-online.routes.js.map +1 -1
  145. package/server/applications/files/modules/collabora-online/collabora-online.strategy.js +1 -5
  146. package/server/applications/files/modules/collabora-online/collabora-online.strategy.js.map +1 -1
  147. package/server/applications/files/modules/collabora-online/collabora-online.utils.js +1 -5
  148. package/server/applications/files/modules/collabora-online/collabora-online.utils.js.map +1 -1
  149. package/server/applications/files/modules/file-editor-providers.interface.js +6 -0
  150. package/server/applications/files/modules/file-editor-providers.interface.js.map +1 -0
  151. package/server/applications/files/modules/only-office/only-office-environment.decorator.js +1 -5
  152. package/server/applications/files/modules/only-office/only-office-environment.decorator.js.map +1 -1
  153. package/server/applications/files/modules/only-office/only-office-manager.service.js +57 -19
  154. package/server/applications/files/modules/only-office/only-office-manager.service.js.map +1 -1
  155. package/server/applications/files/modules/only-office/only-office-manager.service.spec.js +1 -5
  156. package/server/applications/files/modules/only-office/only-office-manager.service.spec.js.map +1 -1
  157. package/server/applications/files/modules/only-office/only-office.config.js +1 -5
  158. package/server/applications/files/modules/only-office/only-office.config.js.map +1 -1
  159. package/server/applications/files/modules/only-office/only-office.constants.js +1 -5
  160. package/server/applications/files/modules/only-office/only-office.constants.js.map +1 -1
  161. package/server/applications/files/modules/only-office/only-office.controller.js +1 -5
  162. package/server/applications/files/modules/only-office/only-office.controller.js.map +1 -1
  163. package/server/applications/files/modules/only-office/only-office.controller.spec.js +1 -5
  164. package/server/applications/files/modules/only-office/only-office.controller.spec.js.map +1 -1
  165. package/server/applications/files/modules/only-office/only-office.dtos.js +1 -5
  166. package/server/applications/files/modules/only-office/only-office.dtos.js.map +1 -1
  167. package/server/applications/files/modules/only-office/only-office.guard.js +1 -5
  168. package/server/applications/files/modules/only-office/only-office.guard.js.map +1 -1
  169. package/server/applications/files/modules/only-office/only-office.guard.spec.js +1 -5
  170. package/server/applications/files/modules/only-office/only-office.guard.spec.js.map +1 -1
  171. package/server/applications/files/modules/only-office/only-office.interface.js +1 -5
  172. package/server/applications/files/modules/only-office/only-office.interface.js.map +1 -1
  173. package/server/applications/files/modules/only-office/only-office.module.js +1 -5
  174. package/server/applications/files/modules/only-office/only-office.module.js.map +1 -1
  175. package/server/applications/files/modules/only-office/only-office.routes.js +1 -5
  176. package/server/applications/files/modules/only-office/only-office.routes.js.map +1 -1
  177. package/server/applications/files/modules/only-office/only-office.strategy.js +1 -5
  178. package/server/applications/files/modules/only-office/only-office.strategy.js.map +1 -1
  179. package/server/applications/files/schemas/file-content.interface.js +1 -5
  180. package/server/applications/files/schemas/file-content.interface.js.map +1 -1
  181. package/server/applications/files/schemas/file-recent.interface.js +1 -5
  182. package/server/applications/files/schemas/file-recent.interface.js.map +1 -1
  183. package/server/applications/files/schemas/file.interface.js +1 -5
  184. package/server/applications/files/schemas/file.interface.js.map +1 -1
  185. package/server/applications/files/schemas/files-content.schema.js +1 -5
  186. package/server/applications/files/schemas/files-content.schema.js.map +1 -1
  187. package/server/applications/files/schemas/files-recents.schema.js +1 -5
  188. package/server/applications/files/schemas/files-recents.schema.js.map +1 -1
  189. package/server/applications/files/schemas/files.schema.js +1 -5
  190. package/server/applications/files/schemas/files.schema.js.map +1 -1
  191. package/server/applications/files/services/files-content-manager.service.js +45 -16
  192. package/server/applications/files/services/files-content-manager.service.js.map +1 -1
  193. package/server/applications/files/services/files-lock-manager.service.js +53 -18
  194. package/server/applications/files/services/files-lock-manager.service.js.map +1 -1
  195. package/server/applications/files/services/files-lock-manager.service.spec.js +1 -5
  196. package/server/applications/files/services/files-lock-manager.service.spec.js.map +1 -1
  197. package/server/applications/files/services/files-manager.service.js +77 -24
  198. package/server/applications/files/services/files-manager.service.js.map +1 -1
  199. package/server/applications/files/services/files-manager.service.spec.js +1 -5
  200. package/server/applications/files/services/files-manager.service.spec.js.map +1 -1
  201. package/server/applications/files/services/files-methods.service.js +5 -6
  202. package/server/applications/files/services/files-methods.service.js.map +1 -1
  203. package/server/applications/files/services/files-methods.service.spec.js +1 -5
  204. package/server/applications/files/services/files-methods.service.spec.js.map +1 -1
  205. package/server/applications/files/services/files-parser.service.js +13 -8
  206. package/server/applications/files/services/files-parser.service.js.map +1 -1
  207. package/server/applications/files/services/files-parser.service.spec.js +1 -5
  208. package/server/applications/files/services/files-parser.service.spec.js.map +1 -1
  209. package/server/applications/files/services/files-queries.service.js +29 -12
  210. package/server/applications/files/services/files-queries.service.js.map +1 -1
  211. package/server/applications/files/services/files-recents.service.js +1 -5
  212. package/server/applications/files/services/files-recents.service.js.map +1 -1
  213. package/server/applications/files/services/files-recents.service.spec.js +1 -5
  214. package/server/applications/files/services/files-recents.service.spec.js.map +1 -1
  215. package/server/applications/files/services/files-scheduler.service.js +77 -24
  216. package/server/applications/files/services/files-scheduler.service.js.map +1 -1
  217. package/server/applications/files/services/files-search-manager.service.js +9 -7
  218. package/server/applications/files/services/files-search-manager.service.js.map +1 -1
  219. package/server/applications/files/services/files-search-manager.service.spec.js +1 -5
  220. package/server/applications/files/services/files-search-manager.service.spec.js.map +1 -1
  221. package/server/applications/files/services/files-tasks-manager.service.js +77 -24
  222. package/server/applications/files/services/files-tasks-manager.service.js.map +1 -1
  223. package/server/applications/files/services/files-tasks-manager.service.spec.js +1 -5
  224. package/server/applications/files/services/files-tasks-manager.service.spec.js.map +1 -1
  225. package/server/applications/files/utils/doc-textify/adapters/excel.js +1 -5
  226. package/server/applications/files/utils/doc-textify/adapters/excel.js.map +1 -1
  227. package/server/applications/files/utils/doc-textify/adapters/html.js +1 -5
  228. package/server/applications/files/utils/doc-textify/adapters/html.js.map +1 -1
  229. package/server/applications/files/utils/doc-textify/adapters/open-office.js +1 -5
  230. package/server/applications/files/utils/doc-textify/adapters/open-office.js.map +1 -1
  231. package/server/applications/files/utils/doc-textify/adapters/pdf.js +1 -5
  232. package/server/applications/files/utils/doc-textify/adapters/pdf.js.map +1 -1
  233. package/server/applications/files/utils/doc-textify/adapters/power-point.js +1 -5
  234. package/server/applications/files/utils/doc-textify/adapters/power-point.js.map +1 -1
  235. package/server/applications/files/utils/doc-textify/adapters/text.js +1 -5
  236. package/server/applications/files/utils/doc-textify/adapters/text.js.map +1 -1
  237. package/server/applications/files/utils/doc-textify/adapters/word.js +1 -5
  238. package/server/applications/files/utils/doc-textify/adapters/word.js.map +1 -1
  239. package/server/applications/files/utils/doc-textify/doc-textify.js +1 -5
  240. package/server/applications/files/utils/doc-textify/doc-textify.js.map +1 -1
  241. package/server/applications/files/utils/doc-textify/interfaces/doc-textify.interfaces.js +1 -5
  242. package/server/applications/files/utils/doc-textify/interfaces/doc-textify.interfaces.js.map +1 -1
  243. package/server/applications/files/utils/doc-textify/utils/clean.js +1 -5
  244. package/server/applications/files/utils/doc-textify/utils/clean.js.map +1 -1
  245. package/server/applications/files/utils/files-search.js +1 -5
  246. package/server/applications/files/utils/files-search.js.map +1 -1
  247. package/server/applications/files/utils/files-tree.js +1 -5
  248. package/server/applications/files/utils/files-tree.js.map +1 -1
  249. package/server/applications/files/utils/files.js +1 -5
  250. package/server/applications/files/utils/files.js.map +1 -1
  251. package/server/applications/files/utils/send-file.js +1 -5
  252. package/server/applications/files/utils/send-file.js.map +1 -1
  253. package/server/applications/files/utils/unzip-file.js +1 -5
  254. package/server/applications/files/utils/unzip-file.js.map +1 -1
  255. package/server/applications/files/utils/url-file.js +1 -5
  256. package/server/applications/files/utils/url-file.js.map +1 -1
  257. package/server/applications/links/constants/cache.js +1 -5
  258. package/server/applications/links/constants/cache.js.map +1 -1
  259. package/server/applications/links/constants/links.js +1 -5
  260. package/server/applications/links/constants/links.js.map +1 -1
  261. package/server/applications/links/constants/routes.js +1 -5
  262. package/server/applications/links/constants/routes.js.map +1 -1
  263. package/server/applications/links/dto/create-or-update-link.dto.js +1 -5
  264. package/server/applications/links/dto/create-or-update-link.dto.js.map +1 -1
  265. package/server/applications/links/interfaces/link-guest.interface.js +1 -5
  266. package/server/applications/links/interfaces/link-guest.interface.js.map +1 -1
  267. package/server/applications/links/interfaces/link-space.interface.js +1 -5
  268. package/server/applications/links/interfaces/link-space.interface.js.map +1 -1
  269. package/server/applications/links/links.controller.js +1 -5
  270. package/server/applications/links/links.controller.js.map +1 -1
  271. package/server/applications/links/links.controller.spec.js +1 -5
  272. package/server/applications/links/links.controller.spec.js.map +1 -1
  273. package/server/applications/links/schemas/link.interface.js +1 -5
  274. package/server/applications/links/schemas/link.interface.js.map +1 -1
  275. package/server/applications/links/schemas/links.schema.js +1 -5
  276. package/server/applications/links/schemas/links.schema.js.map +1 -1
  277. package/server/applications/links/services/links-manager.service.js +55 -20
  278. package/server/applications/links/services/links-manager.service.js.map +1 -1
  279. package/server/applications/links/services/links-manager.service.spec.js +3 -7
  280. package/server/applications/links/services/links-manager.service.spec.js.map +1 -1
  281. package/server/applications/links/services/links-queries.service.js +1 -5
  282. package/server/applications/links/services/links-queries.service.js.map +1 -1
  283. package/server/applications/notifications/constants/notifications.js +1 -5
  284. package/server/applications/notifications/constants/notifications.js.map +1 -1
  285. package/server/applications/notifications/constants/routes.js +1 -5
  286. package/server/applications/notifications/constants/routes.js.map +1 -1
  287. package/server/applications/notifications/constants/websocket.js +1 -5
  288. package/server/applications/notifications/constants/websocket.js.map +1 -1
  289. package/server/applications/notifications/i18n/de.js +1 -9
  290. package/server/applications/notifications/i18n/de.js.map +1 -1
  291. package/server/applications/notifications/i18n/es.js +1 -5
  292. package/server/applications/notifications/i18n/es.js.map +1 -1
  293. package/server/applications/notifications/i18n/fr.js +1 -5
  294. package/server/applications/notifications/i18n/fr.js.map +1 -1
  295. package/server/applications/notifications/i18n/hi.js +1 -5
  296. package/server/applications/notifications/i18n/hi.js.map +1 -1
  297. package/server/applications/notifications/i18n/index.js +1 -5
  298. package/server/applications/notifications/i18n/index.js.map +1 -1
  299. package/server/applications/notifications/i18n/it.js +1 -5
  300. package/server/applications/notifications/i18n/it.js.map +1 -1
  301. package/server/applications/notifications/i18n/ja.js +1 -5
  302. package/server/applications/notifications/i18n/ja.js.map +1 -1
  303. package/server/applications/notifications/i18n/ko.js +1 -5
  304. package/server/applications/notifications/i18n/ko.js.map +1 -1
  305. package/server/applications/notifications/i18n/pl.js +1 -5
  306. package/server/applications/notifications/i18n/pl.js.map +1 -1
  307. package/server/applications/notifications/i18n/pt.js +1 -5
  308. package/server/applications/notifications/i18n/pt.js.map +1 -1
  309. package/server/applications/notifications/i18n/pt_br.js +1 -5
  310. package/server/applications/notifications/i18n/pt_br.js.map +1 -1
  311. package/server/applications/notifications/i18n/ru.js +1 -5
  312. package/server/applications/notifications/i18n/ru.js.map +1 -1
  313. package/server/applications/notifications/i18n/tr.js +1 -5
  314. package/server/applications/notifications/i18n/tr.js.map +1 -1
  315. package/server/applications/notifications/i18n/zh.js +1 -5
  316. package/server/applications/notifications/i18n/zh.js.map +1 -1
  317. package/server/applications/notifications/interfaces/notification-properties.interface.js +1 -5
  318. package/server/applications/notifications/interfaces/notification-properties.interface.js.map +1 -1
  319. package/server/applications/notifications/interfaces/user-mail-notification.interface.js +1 -5
  320. package/server/applications/notifications/interfaces/user-mail-notification.interface.js.map +1 -1
  321. package/server/applications/notifications/mails/models.js +1 -5
  322. package/server/applications/notifications/mails/models.js.map +1 -1
  323. package/server/applications/notifications/mails/templates.js +1 -5
  324. package/server/applications/notifications/mails/templates.js.map +1 -1
  325. package/server/applications/notifications/mails/urls.js +1 -5
  326. package/server/applications/notifications/mails/urls.js.map +1 -1
  327. package/server/applications/notifications/notifications.controller.js +1 -5
  328. package/server/applications/notifications/notifications.controller.js.map +1 -1
  329. package/server/applications/notifications/notifications.controller.spec.js +1 -5
  330. package/server/applications/notifications/notifications.controller.spec.js.map +1 -1
  331. package/server/applications/notifications/notifications.gateway.js +1 -5
  332. package/server/applications/notifications/notifications.gateway.js.map +1 -1
  333. package/server/applications/notifications/notifications.module.js +1 -5
  334. package/server/applications/notifications/notifications.module.js.map +1 -1
  335. package/server/applications/notifications/schemas/notification.interface.js +1 -5
  336. package/server/applications/notifications/schemas/notification.interface.js.map +1 -1
  337. package/server/applications/notifications/schemas/notifications.schema.js +1 -5
  338. package/server/applications/notifications/schemas/notifications.schema.js.map +1 -1
  339. package/server/applications/notifications/services/notifications-manager.service.js +25 -11
  340. package/server/applications/notifications/services/notifications-manager.service.js.map +1 -1
  341. package/server/applications/notifications/services/notifications-manager.service.spec.js +20 -11
  342. package/server/applications/notifications/services/notifications-manager.service.spec.js.map +1 -1
  343. package/server/applications/notifications/services/notifications-queries.service.js +1 -5
  344. package/server/applications/notifications/services/notifications-queries.service.js.map +1 -1
  345. package/server/applications/shares/constants/routes.js +1 -5
  346. package/server/applications/shares/constants/routes.js.map +1 -1
  347. package/server/applications/shares/constants/shares.js +1 -5
  348. package/server/applications/shares/constants/shares.js.map +1 -1
  349. package/server/applications/shares/dto/create-or-update-share.dto.js +1 -5
  350. package/server/applications/shares/dto/create-or-update-share.dto.js.map +1 -1
  351. package/server/applications/shares/interfaces/share-child.interface.js +1 -5
  352. package/server/applications/shares/interfaces/share-child.interface.js.map +1 -1
  353. package/server/applications/shares/interfaces/share-env.interface.js +1 -5
  354. package/server/applications/shares/interfaces/share-env.interface.js.map +1 -1
  355. package/server/applications/shares/interfaces/share-file.interface.js +1 -5
  356. package/server/applications/shares/interfaces/share-file.interface.js.map +1 -1
  357. package/server/applications/shares/interfaces/share-link.interface.js +1 -5
  358. package/server/applications/shares/interfaces/share-link.interface.js.map +1 -1
  359. package/server/applications/shares/interfaces/share-props.interface.js +1 -5
  360. package/server/applications/shares/interfaces/share-props.interface.js.map +1 -1
  361. package/server/applications/shares/models/share-child.model.js +1 -5
  362. package/server/applications/shares/models/share-child.model.js.map +1 -1
  363. package/server/applications/shares/schemas/share-members.interface.js +1 -5
  364. package/server/applications/shares/schemas/share-members.interface.js.map +1 -1
  365. package/server/applications/shares/schemas/share.interface.js +1 -5
  366. package/server/applications/shares/schemas/share.interface.js.map +1 -1
  367. package/server/applications/shares/schemas/shares-members.schema.js +1 -5
  368. package/server/applications/shares/schemas/shares-members.schema.js.map +1 -1
  369. package/server/applications/shares/schemas/shares.schema.js +1 -5
  370. package/server/applications/shares/schemas/shares.schema.js.map +1 -1
  371. package/server/applications/shares/services/shares-manager.service.js +214 -68
  372. package/server/applications/shares/services/shares-manager.service.js.map +1 -1
  373. package/server/applications/shares/services/shares-manager.service.spec.js +1 -5
  374. package/server/applications/shares/services/shares-manager.service.spec.js.map +1 -1
  375. package/server/applications/shares/services/shares-queries.service.js +49 -17
  376. package/server/applications/shares/services/shares-queries.service.js.map +1 -1
  377. package/server/applications/shares/shares.controller.js +1 -5
  378. package/server/applications/shares/shares.controller.js.map +1 -1
  379. package/server/applications/shares/shares.controller.spec.js +1 -5
  380. package/server/applications/shares/shares.controller.spec.js.map +1 -1
  381. package/server/applications/shares/shares.module.js +1 -5
  382. package/server/applications/shares/shares.module.js.map +1 -1
  383. package/server/applications/spaces/constants/cache.js +1 -5
  384. package/server/applications/spaces/constants/cache.js.map +1 -1
  385. package/server/applications/spaces/constants/routes.js +1 -5
  386. package/server/applications/spaces/constants/routes.js.map +1 -1
  387. package/server/applications/spaces/constants/spaces.js +1 -5
  388. package/server/applications/spaces/constants/spaces.js.map +1 -1
  389. package/server/applications/spaces/decorators/space-override-permission.decorator.js +1 -5
  390. package/server/applications/spaces/decorators/space-override-permission.decorator.js.map +1 -1
  391. package/server/applications/spaces/decorators/space-skip-guard.decorator.js +1 -5
  392. package/server/applications/spaces/decorators/space-skip-guard.decorator.js.map +1 -1
  393. package/server/applications/spaces/decorators/space-skip-permissions.decorator.js +1 -5
  394. package/server/applications/spaces/decorators/space-skip-permissions.decorator.js.map +1 -1
  395. package/server/applications/spaces/decorators/space.decorator.js +1 -5
  396. package/server/applications/spaces/decorators/space.decorator.js.map +1 -1
  397. package/server/applications/spaces/dto/create-or-update-space.dto.js +1 -5
  398. package/server/applications/spaces/dto/create-or-update-space.dto.js.map +1 -1
  399. package/server/applications/spaces/dto/delete-space.dto.js +1 -5
  400. package/server/applications/spaces/dto/delete-space.dto.js.map +1 -1
  401. package/server/applications/spaces/dto/search-space.dto.js +1 -5
  402. package/server/applications/spaces/dto/search-space.dto.js.map +1 -1
  403. package/server/applications/spaces/dto/space-roots.dto.js +1 -5
  404. package/server/applications/spaces/dto/space-roots.dto.js.map +1 -1
  405. package/server/applications/spaces/guards/space.guard.js +17 -9
  406. package/server/applications/spaces/guards/space.guard.js.map +1 -1
  407. package/server/applications/spaces/guards/space.guard.spec.js +1 -5
  408. package/server/applications/spaces/guards/space.guard.spec.js.map +1 -1
  409. package/server/applications/spaces/interfaces/space-diff.interface.js +1 -5
  410. package/server/applications/spaces/interfaces/space-diff.interface.js.map +1 -1
  411. package/server/applications/spaces/interfaces/space-files.interface.js +1 -5
  412. package/server/applications/spaces/interfaces/space-files.interface.js.map +1 -1
  413. package/server/applications/spaces/interfaces/space-request.interface.js +1 -5
  414. package/server/applications/spaces/interfaces/space-request.interface.js.map +1 -1
  415. package/server/applications/spaces/interfaces/space-trash.interface.js +1 -5
  416. package/server/applications/spaces/interfaces/space-trash.interface.js.map +1 -1
  417. package/server/applications/spaces/models/space-env.model.js +1 -5
  418. package/server/applications/spaces/models/space-env.model.js.map +1 -1
  419. package/server/applications/spaces/models/space-props.model.js +1 -5
  420. package/server/applications/spaces/models/space-props.model.js.map +1 -1
  421. package/server/applications/spaces/models/space-root-props.model.js +1 -5
  422. package/server/applications/spaces/models/space-root-props.model.js.map +1 -1
  423. package/server/applications/spaces/models/space.model.js +1 -5
  424. package/server/applications/spaces/models/space.model.js.map +1 -1
  425. package/server/applications/spaces/schemas/space-members.interface.js +1 -5
  426. package/server/applications/spaces/schemas/space-members.interface.js.map +1 -1
  427. package/server/applications/spaces/schemas/space-root.interface.js +1 -5
  428. package/server/applications/spaces/schemas/space-root.interface.js.map +1 -1
  429. package/server/applications/spaces/schemas/space.interface.js +1 -5
  430. package/server/applications/spaces/schemas/space.interface.js.map +1 -1
  431. package/server/applications/spaces/schemas/spaces-members.schema.js +1 -5
  432. package/server/applications/spaces/schemas/spaces-members.schema.js.map +1 -1
  433. package/server/applications/spaces/schemas/spaces-roots.schema.js +1 -5
  434. package/server/applications/spaces/schemas/spaces-roots.schema.js.map +1 -1
  435. package/server/applications/spaces/schemas/spaces.schema.js +1 -5
  436. package/server/applications/spaces/schemas/spaces.schema.js.map +1 -1
  437. package/server/applications/spaces/services/spaces-browser.service.js +77 -24
  438. package/server/applications/spaces/services/spaces-browser.service.js.map +1 -1
  439. package/server/applications/spaces/services/spaces-browser.service.spec.js +1 -5
  440. package/server/applications/spaces/services/spaces-browser.service.spec.js.map +1 -1
  441. package/server/applications/spaces/services/spaces-manager.service.js +193 -53
  442. package/server/applications/spaces/services/spaces-manager.service.js.map +1 -1
  443. package/server/applications/spaces/services/spaces-manager.service.spec.js +1 -5
  444. package/server/applications/spaces/services/spaces-manager.service.spec.js.map +1 -1
  445. package/server/applications/spaces/services/spaces-queries.service.js +65 -21
  446. package/server/applications/spaces/services/spaces-queries.service.js.map +1 -1
  447. package/server/applications/spaces/services/spaces-scheduler.service.js +49 -17
  448. package/server/applications/spaces/services/spaces-scheduler.service.js.map +1 -1
  449. package/server/applications/spaces/spaces.controller.js +1 -5
  450. package/server/applications/spaces/spaces.controller.js.map +1 -1
  451. package/server/applications/spaces/spaces.controller.spec.js +1 -5
  452. package/server/applications/spaces/spaces.controller.spec.js.map +1 -1
  453. package/server/applications/spaces/spaces.module.js +1 -5
  454. package/server/applications/spaces/spaces.module.js.map +1 -1
  455. package/server/applications/spaces/utils/paths.js +1 -5
  456. package/server/applications/spaces/utils/paths.js.map +1 -1
  457. package/server/applications/spaces/utils/permissions.js +1 -5
  458. package/server/applications/spaces/utils/permissions.js.map +1 -1
  459. package/server/applications/spaces/utils/routes.js +1 -5
  460. package/server/applications/spaces/utils/routes.js.map +1 -1
  461. package/server/applications/sync/constants/auth.js +1 -5
  462. package/server/applications/sync/constants/auth.js.map +1 -1
  463. package/server/applications/sync/constants/routes.js +6 -5
  464. package/server/applications/sync/constants/routes.js.map +1 -1
  465. package/server/applications/sync/constants/store.js +1 -9
  466. package/server/applications/sync/constants/store.js.map +1 -1
  467. package/server/applications/sync/constants/sync.js +2 -6
  468. package/server/applications/sync/constants/sync.js.map +1 -1
  469. package/server/applications/sync/decorators/sync-context.decorator.js +1 -5
  470. package/server/applications/sync/decorators/sync-context.decorator.js.map +1 -1
  471. package/server/applications/sync/decorators/sync-environment.decorator.js +1 -5
  472. package/server/applications/sync/decorators/sync-environment.decorator.js.map +1 -1
  473. package/server/applications/sync/dtos/sync-client-auth.dto.js +12 -8
  474. package/server/applications/sync/dtos/sync-client-auth.dto.js.map +1 -1
  475. package/server/applications/sync/dtos/sync-client-info.dto.js +49 -0
  476. package/server/applications/sync/dtos/sync-client-info.dto.js.map +1 -0
  477. package/server/applications/sync/dtos/sync-client-registration.dto.js +34 -11
  478. package/server/applications/sync/dtos/sync-client-registration.dto.js.map +1 -1
  479. package/server/applications/sync/dtos/sync-operations.dto.js +1 -5
  480. package/server/applications/sync/dtos/sync-operations.dto.js.map +1 -1
  481. package/server/applications/sync/dtos/sync-path.dto.js +1 -5
  482. package/server/applications/sync/dtos/sync-path.dto.js.map +1 -1
  483. package/server/applications/sync/dtos/sync-upload.dto.js +1 -5
  484. package/server/applications/sync/dtos/sync-upload.dto.js.map +1 -1
  485. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.js +1 -5
  486. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.js.map +1 -1
  487. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.spec.js +1 -5
  488. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.spec.js.map +1 -1
  489. package/server/applications/sync/interfaces/store-manifest.interface.js +1 -5
  490. package/server/applications/sync/interfaces/store-manifest.interface.js.map +1 -1
  491. package/server/applications/sync/interfaces/sync-client-auth.interface.js +1 -25
  492. package/server/applications/sync/interfaces/sync-client-auth.interface.js.map +1 -1
  493. package/server/applications/sync/interfaces/sync-client-paths.interface.js +1 -5
  494. package/server/applications/sync/interfaces/sync-client-paths.interface.js.map +1 -1
  495. package/server/applications/sync/interfaces/sync-client.interface.js +1 -5
  496. package/server/applications/sync/interfaces/sync-client.interface.js.map +1 -1
  497. package/server/applications/sync/interfaces/sync-diff.interface.js +1 -5
  498. package/server/applications/sync/interfaces/sync-diff.interface.js.map +1 -1
  499. package/server/applications/sync/interfaces/sync-path.interface.js +1 -5
  500. package/server/applications/sync/interfaces/sync-path.interface.js.map +1 -1
  501. package/server/applications/sync/schemas/sync-client.interface.js +1 -5
  502. package/server/applications/sync/schemas/sync-client.interface.js.map +1 -1
  503. package/server/applications/sync/schemas/sync-clients.schema.js +1 -5
  504. package/server/applications/sync/schemas/sync-clients.schema.js.map +1 -1
  505. package/server/applications/sync/schemas/sync-path.interface.js +1 -5
  506. package/server/applications/sync/schemas/sync-path.interface.js.map +1 -1
  507. package/server/applications/sync/schemas/sync-paths.schema.js +1 -5
  508. package/server/applications/sync/schemas/sync-paths.schema.js.map +1 -1
  509. package/server/applications/sync/services/sync-clients-manager.service.js +108 -44
  510. package/server/applications/sync/services/sync-clients-manager.service.js.map +1 -1
  511. package/server/applications/sync/services/sync-clients-manager.service.spec.js +14 -17
  512. package/server/applications/sync/services/sync-clients-manager.service.spec.js.map +1 -1
  513. package/server/applications/sync/services/sync-manager.service.js +29 -12
  514. package/server/applications/sync/services/sync-manager.service.js.map +1 -1
  515. package/server/applications/sync/services/sync-manager.service.spec.js +1 -5
  516. package/server/applications/sync/services/sync-manager.service.spec.js.map +1 -1
  517. package/server/applications/sync/services/sync-paths-manager.service.js +27 -17
  518. package/server/applications/sync/services/sync-paths-manager.service.js.map +1 -1
  519. package/server/applications/sync/services/sync-paths-manager.service.spec.js +11 -15
  520. package/server/applications/sync/services/sync-paths-manager.service.spec.js.map +1 -1
  521. package/server/applications/sync/services/sync-queries.service.js +1 -5
  522. package/server/applications/sync/services/sync-queries.service.js.map +1 -1
  523. package/server/applications/sync/sync.config.js +1 -5
  524. package/server/applications/sync/sync.config.js.map +1 -1
  525. package/server/applications/sync/sync.controller.js +21 -6
  526. package/server/applications/sync/sync.controller.js.map +1 -1
  527. package/server/applications/sync/sync.controller.spec.js +1 -5
  528. package/server/applications/sync/sync.controller.spec.js.map +1 -1
  529. package/server/applications/sync/sync.module.js +1 -5
  530. package/server/applications/sync/sync.module.js.map +1 -1
  531. package/server/applications/sync/utils/functions.js +1 -5
  532. package/server/applications/sync/utils/functions.js.map +1 -1
  533. package/server/applications/sync/utils/normalizedMap.js +1 -5
  534. package/server/applications/sync/utils/normalizedMap.js.map +1 -1
  535. package/server/applications/sync/utils/routes.js +1 -5
  536. package/server/applications/sync/utils/routes.js.map +1 -1
  537. package/server/applications/users/admin-users.controller.js +2 -6
  538. package/server/applications/users/admin-users.controller.js.map +1 -1
  539. package/server/applications/users/admin-users.controller.spec.js +6 -10
  540. package/server/applications/users/admin-users.controller.spec.js.map +1 -1
  541. package/server/applications/users/constants/group.js +1 -5
  542. package/server/applications/users/constants/group.js.map +1 -1
  543. package/server/applications/users/constants/member.js +1 -5
  544. package/server/applications/users/constants/member.js.map +1 -1
  545. package/server/applications/users/constants/routes.js +1 -5
  546. package/server/applications/users/constants/routes.js.map +1 -1
  547. package/server/applications/users/constants/user.js +1 -5
  548. package/server/applications/users/constants/user.js.map +1 -1
  549. package/server/applications/users/constants/websocket.js +1 -5
  550. package/server/applications/users/constants/websocket.js.map +1 -1
  551. package/server/applications/users/decorators/permissions.decorator.js +1 -5
  552. package/server/applications/users/decorators/permissions.decorator.js.map +1 -1
  553. package/server/applications/users/decorators/roles.decorator.js +1 -5
  554. package/server/applications/users/decorators/roles.decorator.js.map +1 -1
  555. package/server/applications/users/decorators/user.decorator.js +1 -5
  556. package/server/applications/users/decorators/user.decorator.js.map +1 -1
  557. package/server/applications/users/dto/create-or-update-group.dto.js +1 -5
  558. package/server/applications/users/dto/create-or-update-group.dto.js.map +1 -1
  559. package/server/applications/users/dto/create-or-update-user.dto.js +1 -5
  560. package/server/applications/users/dto/create-or-update-user.dto.js.map +1 -1
  561. package/server/applications/users/dto/delete-user.dto.js +1 -5
  562. package/server/applications/users/dto/delete-user.dto.js.map +1 -1
  563. package/server/applications/users/dto/search-members.dto.js +1 -5
  564. package/server/applications/users/dto/search-members.dto.js.map +1 -1
  565. package/server/applications/users/dto/user-properties.dto.js +1 -5
  566. package/server/applications/users/dto/user-properties.dto.js.map +1 -1
  567. package/server/applications/users/guards/permissions.guard.js +1 -5
  568. package/server/applications/users/guards/permissions.guard.js.map +1 -1
  569. package/server/applications/users/guards/permissions.guard.spec.js +1 -5
  570. package/server/applications/users/guards/permissions.guard.spec.js.map +1 -1
  571. package/server/applications/users/guards/roles.guard.js +1 -5
  572. package/server/applications/users/guards/roles.guard.js.map +1 -1
  573. package/server/applications/users/guards/roles.guard.spec.js +1 -5
  574. package/server/applications/users/guards/roles.guard.spec.js.map +1 -1
  575. package/server/applications/users/interfaces/admin-group.interface.js +1 -5
  576. package/server/applications/users/interfaces/admin-group.interface.js.map +1 -1
  577. package/server/applications/users/interfaces/admin-user.interface.js +1 -5
  578. package/server/applications/users/interfaces/admin-user.interface.js.map +1 -1
  579. package/server/applications/users/interfaces/group-browse.interface.js +1 -5
  580. package/server/applications/users/interfaces/group-browse.interface.js.map +1 -1
  581. package/server/applications/users/interfaces/group-member.js +1 -5
  582. package/server/applications/users/interfaces/group-member.js.map +1 -1
  583. package/server/applications/users/interfaces/guest-user.interface.js +1 -5
  584. package/server/applications/users/interfaces/guest-user.interface.js.map +1 -1
  585. package/server/applications/users/interfaces/member.interface.js +1 -5
  586. package/server/applications/users/interfaces/member.interface.js.map +1 -1
  587. package/server/applications/users/interfaces/owner.interface.js +1 -5
  588. package/server/applications/users/interfaces/owner.interface.js.map +1 -1
  589. package/server/applications/users/interfaces/user-secrets.interface.js +1 -5
  590. package/server/applications/users/interfaces/user-secrets.interface.js.map +1 -1
  591. package/server/applications/users/interfaces/websocket.interface.js +1 -5
  592. package/server/applications/users/interfaces/websocket.interface.js.map +1 -1
  593. package/server/applications/users/models/user.model.js +1 -5
  594. package/server/applications/users/models/user.model.js.map +1 -1
  595. package/server/applications/users/schemas/group.interface.js +1 -5
  596. package/server/applications/users/schemas/group.interface.js.map +1 -1
  597. package/server/applications/users/schemas/groups.schema.js +1 -5
  598. package/server/applications/users/schemas/groups.schema.js.map +1 -1
  599. package/server/applications/users/schemas/user-group.interface.js +1 -5
  600. package/server/applications/users/schemas/user-group.interface.js.map +1 -1
  601. package/server/applications/users/schemas/user.interface.js +1 -5
  602. package/server/applications/users/schemas/user.interface.js.map +1 -1
  603. package/server/applications/users/schemas/users-groups.schema.js +1 -5
  604. package/server/applications/users/schemas/users-groups.schema.js.map +1 -1
  605. package/server/applications/users/schemas/users-guests.schema.js +1 -5
  606. package/server/applications/users/schemas/users-guests.schema.js.map +1 -1
  607. package/server/applications/users/schemas/users.schema.js +1 -5
  608. package/server/applications/users/schemas/users.schema.js.map +1 -1
  609. package/server/applications/users/services/admin-users-manager.service.js +67 -23
  610. package/server/applications/users/services/admin-users-manager.service.js.map +1 -1
  611. package/server/applications/users/services/admin-users-manager.service.spec.js +3 -7
  612. package/server/applications/users/services/admin-users-manager.service.spec.js.map +1 -1
  613. package/server/applications/users/services/admin-users-queries.service.js +65 -21
  614. package/server/applications/users/services/admin-users-queries.service.js.map +1 -1
  615. package/server/applications/users/services/users-manager.service.js +81 -25
  616. package/server/applications/users/services/users-manager.service.js.map +1 -1
  617. package/server/applications/users/services/users-manager.service.spec.js +14 -12
  618. package/server/applications/users/services/users-manager.service.spec.js.map +1 -1
  619. package/server/applications/users/services/users-queries.service.js +49 -17
  620. package/server/applications/users/services/users-queries.service.js.map +1 -1
  621. package/server/applications/users/users.controller.js +2 -6
  622. package/server/applications/users/users.controller.js.map +1 -1
  623. package/server/applications/users/users.controller.spec.js +5 -9
  624. package/server/applications/users/users.controller.spec.js.map +1 -1
  625. package/server/applications/users/users.e2e-spec.js +3 -7
  626. package/server/applications/users/users.e2e-spec.js.map +1 -1
  627. package/server/applications/users/users.gateway.js +29 -12
  628. package/server/applications/users/users.gateway.js.map +1 -1
  629. package/server/applications/users/users.gateway.spec.js +1 -5
  630. package/server/applications/users/users.gateway.spec.js.map +1 -1
  631. package/server/applications/users/users.module.js +1 -5
  632. package/server/applications/users/users.module.js.map +1 -1
  633. package/server/applications/users/utils/avatar.js +1 -5
  634. package/server/applications/users/utils/avatar.js.map +1 -1
  635. package/server/applications/users/utils/test.js +1 -5
  636. package/server/applications/users/utils/test.js.map +1 -1
  637. package/server/applications/webdav/constants/routes.js +1 -5
  638. package/server/applications/webdav/constants/routes.js.map +1 -1
  639. package/server/applications/webdav/constants/webdav.js +1 -5
  640. package/server/applications/webdav/constants/webdav.js.map +1 -1
  641. package/server/applications/webdav/decorators/if-header.decorator.js +1 -5
  642. package/server/applications/webdav/decorators/if-header.decorator.js.map +1 -1
  643. package/server/applications/webdav/decorators/webdav-context.decorator.js +1 -5
  644. package/server/applications/webdav/decorators/webdav-context.decorator.js.map +1 -1
  645. package/server/applications/webdav/filters/webdav.filter.js +1 -5
  646. package/server/applications/webdav/filters/webdav.filter.js.map +1 -1
  647. package/server/applications/webdav/filters/webdav.filter.spec.js +1 -5
  648. package/server/applications/webdav/filters/webdav.filter.spec.js.map +1 -1
  649. package/server/applications/webdav/guards/webdav-protocol.guard.js +54 -20
  650. package/server/applications/webdav/guards/webdav-protocol.guard.js.map +1 -1
  651. package/server/applications/webdav/guards/webdav-protocol.guard.spec.js +54 -0
  652. package/server/applications/webdav/guards/webdav-protocol.guard.spec.js.map +1 -1
  653. package/server/applications/webdav/interfaces/if-header.interface.js +1 -5
  654. package/server/applications/webdav/interfaces/if-header.interface.js.map +1 -1
  655. package/server/applications/webdav/interfaces/webdav.interface.js +1 -5
  656. package/server/applications/webdav/interfaces/webdav.interface.js.map +1 -1
  657. package/server/applications/webdav/models/webdav-file.model.js +1 -5
  658. package/server/applications/webdav/models/webdav-file.model.js.map +1 -1
  659. package/server/applications/webdav/services/webdav-methods.service.js +74 -26
  660. package/server/applications/webdav/services/webdav-methods.service.js.map +1 -1
  661. package/server/applications/webdav/services/webdav-methods.service.spec.js +15 -18
  662. package/server/applications/webdav/services/webdav-methods.service.spec.js.map +1 -1
  663. package/server/applications/webdav/services/webdav-spaces.service.js +17 -9
  664. package/server/applications/webdav/services/webdav-spaces.service.js.map +1 -1
  665. package/server/applications/webdav/services/webdav-spaces.service.spec.js +1 -5
  666. package/server/applications/webdav/services/webdav-spaces.service.spec.js.map +1 -1
  667. package/server/applications/webdav/utils/bootstrap.js +1 -5
  668. package/server/applications/webdav/utils/bootstrap.js.map +1 -1
  669. package/server/applications/webdav/utils/if-header.js +1 -5
  670. package/server/applications/webdav/utils/if-header.js.map +1 -1
  671. package/server/applications/webdav/utils/routes.js +1 -5
  672. package/server/applications/webdav/utils/routes.js.map +1 -1
  673. package/server/applications/webdav/utils/webdav.js +1 -5
  674. package/server/applications/webdav/utils/webdav.js.map +1 -1
  675. package/server/applications/webdav/utils/xml.js +1 -5
  676. package/server/applications/webdav/utils/xml.js.map +1 -1
  677. package/server/applications/webdav/webdav.controller.js +1 -5
  678. package/server/applications/webdav/webdav.controller.js.map +1 -1
  679. package/server/applications/webdav/webdav.controller.spec.js +1 -5
  680. package/server/applications/webdav/webdav.controller.spec.js.map +1 -1
  681. package/server/applications/webdav/webdav.e2e-spec.js +1 -5
  682. package/server/applications/webdav/webdav.e2e-spec.js.map +1 -1
  683. package/server/applications/webdav/webdav.module.js +1 -5
  684. package/server/applications/webdav/webdav.module.js.map +1 -1
  685. package/server/authentication/auth.config.js +23 -123
  686. package/server/authentication/auth.config.js.map +1 -1
  687. package/server/authentication/auth.controller.js +27 -21
  688. package/server/authentication/auth.controller.js.map +1 -1
  689. package/server/authentication/auth.controller.spec.js +6 -10
  690. package/server/authentication/auth.controller.spec.js.map +1 -1
  691. package/server/authentication/auth.e2e-spec.js +1 -5
  692. package/server/authentication/auth.e2e-spec.js.map +1 -1
  693. package/server/authentication/auth.module.js +17 -20
  694. package/server/authentication/auth.module.js.map +1 -1
  695. package/server/authentication/{services/auth-manager.service.js → auth.service.js} +41 -18
  696. package/server/authentication/auth.service.js.map +1 -0
  697. package/server/authentication/{services/auth-manager.service.spec.js → auth.service.spec.js} +6 -10
  698. package/server/authentication/auth.service.spec.js.map +1 -0
  699. package/server/authentication/constants/auth.js +1 -5
  700. package/server/authentication/constants/auth.js.map +1 -1
  701. package/server/authentication/constants/routes.js +41 -30
  702. package/server/authentication/constants/routes.js.map +1 -1
  703. package/server/authentication/constants/scope.js +2 -5
  704. package/server/authentication/constants/scope.js.map +1 -1
  705. package/server/authentication/decorators/auth-token-optional.decorator.js +1 -5
  706. package/server/authentication/decorators/auth-token-optional.decorator.js.map +1 -1
  707. package/server/authentication/decorators/auth-token-skip.decorator.js +1 -5
  708. package/server/authentication/decorators/auth-token-skip.decorator.js.map +1 -1
  709. package/server/authentication/dto/login-response.dto.js +1 -10
  710. package/server/authentication/dto/login-response.dto.js.map +1 -1
  711. package/server/authentication/dto/token-response.dto.js +1 -5
  712. package/server/authentication/dto/token-response.dto.js.map +1 -1
  713. package/server/authentication/guards/auth-anonymous.guard.js +1 -5
  714. package/server/authentication/guards/auth-anonymous.guard.js.map +1 -1
  715. package/server/authentication/guards/auth-anonymous.guard.spec.js +1 -5
  716. package/server/authentication/guards/auth-anonymous.guard.spec.js.map +1 -1
  717. package/server/authentication/guards/auth-anonymous.strategy.js +1 -5
  718. package/server/authentication/guards/auth-anonymous.strategy.js.map +1 -1
  719. package/server/authentication/guards/auth-basic.guard.js +1 -5
  720. package/server/authentication/guards/auth-basic.guard.js.map +1 -1
  721. package/server/authentication/guards/auth-basic.guard.spec.js +13 -14
  722. package/server/authentication/guards/auth-basic.guard.spec.js.map +1 -1
  723. package/server/authentication/guards/auth-basic.strategy.js +10 -11
  724. package/server/authentication/guards/auth-basic.strategy.js.map +1 -1
  725. package/server/authentication/guards/auth-digest.guard.js +1 -5
  726. package/server/authentication/guards/auth-digest.guard.js.map +1 -1
  727. package/server/authentication/guards/auth-digest.strategy.js +1 -5
  728. package/server/authentication/guards/auth-digest.strategy.js.map +1 -1
  729. package/server/authentication/guards/auth-local.guard.js +1 -5
  730. package/server/authentication/guards/auth-local.guard.js.map +1 -1
  731. package/server/authentication/guards/auth-local.guard.spec.js +9 -13
  732. package/server/authentication/guards/auth-local.guard.spec.js.map +1 -1
  733. package/server/authentication/guards/auth-local.strategy.js +6 -10
  734. package/server/authentication/guards/auth-local.strategy.js.map +1 -1
  735. package/server/authentication/guards/auth-token-access.guard.js +1 -5
  736. package/server/authentication/guards/auth-token-access.guard.js.map +1 -1
  737. package/server/authentication/guards/auth-token-access.guard.spec.js +3 -7
  738. package/server/authentication/guards/auth-token-access.guard.spec.js.map +1 -1
  739. package/server/authentication/guards/auth-token-access.strategy.js +3 -7
  740. package/server/authentication/guards/auth-token-access.strategy.js.map +1 -1
  741. package/server/authentication/guards/auth-token-refresh.guard.js +1 -5
  742. package/server/authentication/guards/auth-token-refresh.guard.js.map +1 -1
  743. package/server/authentication/guards/auth-token-refresh.guard.spec.js +3 -7
  744. package/server/authentication/guards/auth-token-refresh.guard.spec.js.map +1 -1
  745. package/server/authentication/guards/auth-token-refresh.strategy.js +3 -7
  746. package/server/authentication/guards/auth-token-refresh.strategy.js.map +1 -1
  747. package/server/authentication/guards/implementations/http-basic.strategy.js +1 -5
  748. package/server/authentication/guards/implementations/http-basic.strategy.js.map +1 -1
  749. package/server/authentication/guards/implementations/http-digest.strategy.js +1 -5
  750. package/server/authentication/guards/implementations/http-digest.strategy.js.map +1 -1
  751. package/server/authentication/interfaces/auth-request.interface.js +1 -5
  752. package/server/authentication/interfaces/auth-request.interface.js.map +1 -1
  753. package/server/authentication/interfaces/jwt-payload.interface.js +1 -5
  754. package/server/authentication/interfaces/jwt-payload.interface.js.map +1 -1
  755. package/server/authentication/interfaces/token.interface.js +1 -5
  756. package/server/authentication/interfaces/token.interface.js.map +1 -1
  757. package/server/authentication/providers/auth-providers.constants.js +18 -0
  758. package/server/authentication/providers/auth-providers.constants.js.map +1 -0
  759. package/server/authentication/providers/auth-providers.models.js +14 -0
  760. package/server/authentication/providers/auth-providers.models.js.map +1 -0
  761. package/server/authentication/providers/auth-providers.utils.js +42 -0
  762. package/server/authentication/providers/auth-providers.utils.js.map +1 -0
  763. package/server/authentication/providers/ldap/auth-ldap.config.js +143 -0
  764. package/server/authentication/providers/ldap/auth-ldap.config.js.map +1 -0
  765. package/server/authentication/{constants/auth-ldap.js → providers/ldap/auth-ldap.constants.js} +12 -6
  766. package/server/authentication/providers/ldap/auth-ldap.constants.js.map +1 -0
  767. package/server/authentication/providers/ldap/auth-provider-ldap.service.js +506 -0
  768. package/server/authentication/providers/ldap/auth-provider-ldap.service.js.map +1 -0
  769. package/server/authentication/providers/ldap/auth-provider-ldap.service.spec.js +674 -0
  770. package/server/authentication/providers/ldap/auth-provider-ldap.service.spec.js.map +1 -0
  771. package/server/authentication/{services/auth-methods/auth-method-database.service.js → providers/mysql/auth-provider-mysql.service.js} +16 -14
  772. package/server/authentication/providers/mysql/auth-provider-mysql.service.js.map +1 -0
  773. package/server/authentication/{services/auth-methods/auth-method-database.service.spec.js → providers/mysql/auth-provider-mysql.service.spec.js} +15 -19
  774. package/server/authentication/providers/mysql/auth-provider-mysql.service.spec.js.map +1 -0
  775. package/server/authentication/providers/oidc/auth-oidc-desktop.constants.js +30 -0
  776. package/server/authentication/providers/oidc/auth-oidc-desktop.constants.js.map +1 -0
  777. package/server/authentication/providers/oidc/auth-oidc.config.js +149 -0
  778. package/server/authentication/providers/oidc/auth-oidc.config.js.map +1 -0
  779. package/server/authentication/providers/oidc/auth-oidc.constants.js +39 -0
  780. package/server/authentication/providers/oidc/auth-oidc.constants.js.map +1 -0
  781. package/server/authentication/providers/oidc/auth-oidc.controller.js +83 -0
  782. package/server/authentication/providers/oidc/auth-oidc.controller.js.map +1 -0
  783. package/server/authentication/providers/oidc/auth-oidc.interfaces.js +6 -0
  784. package/server/authentication/providers/oidc/auth-oidc.interfaces.js.map +1 -0
  785. package/server/authentication/providers/oidc/auth-provider-oidc.module.js +36 -0
  786. package/server/authentication/providers/oidc/auth-provider-oidc.module.js.map +1 -0
  787. package/server/authentication/providers/oidc/auth-provider-oidc.service.js +373 -0
  788. package/server/authentication/providers/oidc/auth-provider-oidc.service.js.map +1 -0
  789. package/server/authentication/providers/oidc/auth-provider-oidc.service.spec.js +270 -0
  790. package/server/authentication/providers/oidc/auth-provider-oidc.service.spec.js.map +1 -0
  791. package/server/authentication/{services/auth-methods/auth-method-two-fa.service.js → providers/two-fa/auth-provider-two-fa.service.js} +56 -38
  792. package/server/authentication/providers/two-fa/auth-provider-two-fa.service.js.map +1 -0
  793. package/server/authentication/{services/auth-methods/auth-method-two-fa.service.spec.js → providers/two-fa/auth-provider-two-fa.service.spec.js} +6 -10
  794. package/server/authentication/providers/two-fa/auth-provider-two-fa.service.spec.js.map +1 -0
  795. package/server/authentication/{guards → providers/two-fa}/auth-two-fa-guard.js +10 -14
  796. package/server/authentication/providers/two-fa/auth-two-fa-guard.js.map +1 -0
  797. package/server/authentication/providers/two-fa/auth-two-fa.config.js +57 -0
  798. package/server/authentication/providers/two-fa/auth-two-fa.config.js.map +1 -0
  799. package/server/authentication/{dto/two-fa-verify.dto.js → providers/two-fa/auth-two-fa.dtos.js} +8 -6
  800. package/server/authentication/providers/two-fa/auth-two-fa.dtos.js.map +1 -0
  801. package/server/authentication/providers/two-fa/auth-two-fa.interfaces.js +6 -0
  802. package/server/authentication/providers/two-fa/auth-two-fa.interfaces.js.map +1 -0
  803. package/server/authentication/utils/crypt-secret.js +1 -5
  804. package/server/authentication/utils/crypt-secret.js.map +1 -1
  805. package/server/common/constants.js +1 -5
  806. package/server/common/constants.js.map +1 -1
  807. package/server/common/decorators.js +1 -5
  808. package/server/common/decorators.js.map +1 -1
  809. package/server/common/functions.js +25 -9
  810. package/server/common/functions.js.map +1 -1
  811. package/server/common/i18n.js +1 -5
  812. package/server/common/i18n.js.map +1 -1
  813. package/server/common/image.js +1 -5
  814. package/server/common/image.js.map +1 -1
  815. package/server/common/interfaces.js +1 -5
  816. package/server/common/interfaces.js.map +1 -1
  817. package/server/common/qrcode.js +1 -5
  818. package/server/common/qrcode.js.map +1 -1
  819. package/server/common/shared.js +6 -6
  820. package/server/common/shared.js.map +1 -1
  821. package/server/configuration/config.constants.js +1 -5
  822. package/server/configuration/config.constants.js.map +1 -1
  823. package/server/configuration/config.environment.js +2 -6
  824. package/server/configuration/config.environment.js.map +1 -1
  825. package/server/configuration/config.interfaces.js +1 -5
  826. package/server/configuration/config.interfaces.js.map +1 -1
  827. package/server/configuration/config.loader.js +1 -5
  828. package/server/configuration/config.loader.js.map +1 -1
  829. package/server/configuration/config.logger.js +4 -8
  830. package/server/configuration/config.logger.js.map +1 -1
  831. package/server/configuration/config.validation.js +7 -5
  832. package/server/configuration/config.validation.js.map +1 -1
  833. package/server/infrastructure/cache/adapters/mysql-cache.adapter.js +9 -7
  834. package/server/infrastructure/cache/adapters/mysql-cache.adapter.js.map +1 -1
  835. package/server/infrastructure/cache/adapters/redis-cache.adapter.js +1 -5
  836. package/server/infrastructure/cache/adapters/redis-cache.adapter.js.map +1 -1
  837. package/server/infrastructure/cache/cache.config.js +1 -5
  838. package/server/infrastructure/cache/cache.config.js.map +1 -1
  839. package/server/infrastructure/cache/cache.decorator.js +9 -7
  840. package/server/infrastructure/cache/cache.decorator.js.map +1 -1
  841. package/server/infrastructure/cache/cache.e2e-spec.js +1 -5
  842. package/server/infrastructure/cache/cache.e2e-spec.js.map +1 -1
  843. package/server/infrastructure/cache/cache.module.js +1 -5
  844. package/server/infrastructure/cache/cache.module.js.map +1 -1
  845. package/server/infrastructure/cache/schemas/mysql-cache.interface.js +1 -5
  846. package/server/infrastructure/cache/schemas/mysql-cache.interface.js.map +1 -1
  847. package/server/infrastructure/cache/schemas/mysql-cache.schema.js +1 -5
  848. package/server/infrastructure/cache/schemas/mysql-cache.schema.js.map +1 -1
  849. package/server/infrastructure/cache/services/cache.service.js +1 -5
  850. package/server/infrastructure/cache/services/cache.service.js.map +1 -1
  851. package/server/infrastructure/context/context.module.js +1 -5
  852. package/server/infrastructure/context/context.module.js.map +1 -1
  853. package/server/infrastructure/context/interceptors/context.interceptor.js +1 -5
  854. package/server/infrastructure/context/interceptors/context.interceptor.js.map +1 -1
  855. package/server/infrastructure/context/interceptors/context.interceptor.spec.js +2 -6
  856. package/server/infrastructure/context/interceptors/context.interceptor.spec.js.map +1 -1
  857. package/server/infrastructure/context/interfaces/context-store.interface.js +1 -5
  858. package/server/infrastructure/context/interfaces/context-store.interface.js.map +1 -1
  859. package/server/infrastructure/context/services/context-manager.service.js +1 -5
  860. package/server/infrastructure/context/services/context-manager.service.js.map +1 -1
  861. package/server/infrastructure/context/services/context-manager.service.spec.js +1 -5
  862. package/server/infrastructure/context/services/context-manager.service.spec.js.map +1 -1
  863. package/server/infrastructure/database/columns.js +1 -5
  864. package/server/infrastructure/database/columns.js.map +1 -1
  865. package/server/infrastructure/database/configuration.js +1 -5
  866. package/server/infrastructure/database/configuration.js.map +1 -1
  867. package/server/infrastructure/database/constants.js +2 -6
  868. package/server/infrastructure/database/constants.js.map +1 -1
  869. package/server/infrastructure/database/database.config.js +1 -5
  870. package/server/infrastructure/database/database.config.js.map +1 -1
  871. package/server/infrastructure/database/database.logger.js +1 -5
  872. package/server/infrastructure/database/database.logger.js.map +1 -1
  873. package/server/infrastructure/database/database.module.js +1 -5
  874. package/server/infrastructure/database/database.module.js.map +1 -1
  875. package/server/infrastructure/database/interfaces/database.interface.js +1 -5
  876. package/server/infrastructure/database/interfaces/database.interface.js.map +1 -1
  877. package/server/infrastructure/database/schema.js +1 -5
  878. package/server/infrastructure/database/schema.js.map +1 -1
  879. package/server/infrastructure/database/scripts/create-user.js +1 -5
  880. package/server/infrastructure/database/scripts/create-user.js.map +1 -1
  881. package/server/infrastructure/database/scripts/db.js +1 -5
  882. package/server/infrastructure/database/scripts/db.js.map +1 -1
  883. package/server/infrastructure/database/scripts/seed/main.js +1 -5
  884. package/server/infrastructure/database/scripts/seed/main.js.map +1 -1
  885. package/server/infrastructure/database/scripts/seed/usersgroups.js +1 -5
  886. package/server/infrastructure/database/scripts/seed/usersgroups.js.map +1 -1
  887. package/server/infrastructure/database/utils.js +1 -5
  888. package/server/infrastructure/database/utils.js.map +1 -1
  889. package/server/infrastructure/mailer/interfaces/mail.interface.js +1 -5
  890. package/server/infrastructure/mailer/interfaces/mail.interface.js.map +1 -1
  891. package/server/infrastructure/mailer/mailer.config.js +1 -5
  892. package/server/infrastructure/mailer/mailer.config.js.map +1 -1
  893. package/server/infrastructure/mailer/mailer.module.js +1 -5
  894. package/server/infrastructure/mailer/mailer.module.js.map +1 -1
  895. package/server/infrastructure/mailer/mailer.service.js +1 -5
  896. package/server/infrastructure/mailer/mailer.service.js.map +1 -1
  897. package/server/infrastructure/mailer/mailer.service.spec.js +2 -6
  898. package/server/infrastructure/mailer/mailer.service.spec.js.map +1 -1
  899. package/server/infrastructure/scheduler/scheduler.constants.js +1 -5
  900. package/server/infrastructure/scheduler/scheduler.constants.js.map +1 -1
  901. package/server/infrastructure/scheduler/scheduler.module.js +1 -5
  902. package/server/infrastructure/scheduler/scheduler.module.js.map +1 -1
  903. package/server/infrastructure/websocket/adapters/cluster.adapter.js +1 -5
  904. package/server/infrastructure/websocket/adapters/cluster.adapter.js.map +1 -1
  905. package/server/infrastructure/websocket/adapters/redis.adapter.js +1 -5
  906. package/server/infrastructure/websocket/adapters/redis.adapter.js.map +1 -1
  907. package/server/infrastructure/websocket/adapters/web-socket.adapter.js +1 -5
  908. package/server/infrastructure/websocket/adapters/web-socket.adapter.js.map +1 -1
  909. package/server/infrastructure/websocket/decorators/web-socket-user.decorator.js +1 -5
  910. package/server/infrastructure/websocket/decorators/web-socket-user.decorator.js.map +1 -1
  911. package/server/infrastructure/websocket/interfaces/auth-socket-io.interface.js +1 -5
  912. package/server/infrastructure/websocket/interfaces/auth-socket-io.interface.js.map +1 -1
  913. package/server/infrastructure/websocket/utils.js +1 -5
  914. package/server/infrastructure/websocket/utils.js.map +1 -1
  915. package/server/infrastructure/websocket/web-socket.config.js +1 -5
  916. package/server/infrastructure/websocket/web-socket.config.js.map +1 -1
  917. package/server/main.js +5 -0
  918. package/server/main.js.map +1 -1
  919. package/static/assets/pdfjs/build/pdf.mjs +724 -745
  920. package/static/assets/pdfjs/build/pdf.mjs.map +1 -1
  921. package/static/assets/pdfjs/build/pdf.sandbox.mjs +2 -2
  922. package/static/assets/pdfjs/build/pdf.worker.mjs +706 -193
  923. package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
  924. package/static/assets/pdfjs/version +1 -1
  925. package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +5 -5
  926. package/static/assets/pdfjs/web/locale/en-US/viewer.ftl +1 -0
  927. package/static/assets/pdfjs/web/locale/fur/viewer.ftl +5 -0
  928. package/static/assets/pdfjs/web/locale/kk/viewer.ftl +28 -0
  929. package/static/assets/pdfjs/web/locale/ml/viewer.ftl +4 -0
  930. package/static/assets/pdfjs/web/locale/ru/viewer.ftl +3 -3
  931. package/static/assets/pdfjs/web/viewer.css +207 -65
  932. package/static/assets/pdfjs/web/viewer.html +11 -10
  933. package/static/assets/pdfjs/web/viewer.mjs +850 -270
  934. package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
  935. package/static/assets/pdfjs/web/wasm/LICENSE_JBIG2 +196 -0
  936. package/static/assets/pdfjs/web/wasm/LICENSE_PDFJS_JBIG2 +13 -0
  937. package/static/assets/pdfjs/web/wasm/jbig2.wasm +0 -0
  938. package/static/chunk-22TZP6HW.js +1 -0
  939. package/static/{chunk-U5E5H2DD.js → chunk-27ATUHBH.js} +1 -1
  940. package/static/{chunk-HZAB6F4Q.js → chunk-2CKLZ3FM.js} +1 -1
  941. package/static/{chunk-XZHWESIY.js → chunk-2QZPX7LO.js} +1 -1
  942. package/static/{chunk-UOK3LKSX.js → chunk-2R6IBBPZ.js} +1 -1
  943. package/static/{chunk-DVCN3P7Q.js → chunk-4FIGEBNL.js} +1 -1
  944. package/static/chunk-4P3JABAP.js +13 -0
  945. package/static/chunk-5CZOSAMZ.js +1 -0
  946. package/static/{chunk-RBTLSPYJ.js → chunk-677WUBCT.js} +1 -1
  947. package/static/{chunk-KEZNIIFH.js → chunk-74CAHBFM.js} +1 -1
  948. package/static/{chunk-WRK2FTKU.js → chunk-7GWW6MJO.js} +1 -1
  949. package/static/{chunk-EKWB5W72.js → chunk-7WOPGQXB.js} +1 -1
  950. package/static/{chunk-IMFO2MI7.js → chunk-A4UGPSWX.js} +1 -1
  951. package/static/{chunk-KDUAB76O.js → chunk-AHO37FKW.js} +1 -1
  952. package/static/chunk-AQCXMKP3.js +1 -0
  953. package/static/chunk-B6PDYCRO.js +3 -0
  954. package/static/{chunk-PPJCVBJH.js → chunk-CU76ATCF.js} +1 -1
  955. package/static/{chunk-ARS47O5X.js → chunk-CWYHOPOP.js} +1 -1
  956. package/static/{chunk-CSVPAZHK.js → chunk-E5WI5725.js} +1 -1
  957. package/static/{chunk-XX3JPJUM.js → chunk-FC5HTKVM.js} +1 -1
  958. package/static/{chunk-QGHNJVJ6.js → chunk-FOSM7EYI.js} +1 -1
  959. package/static/{chunk-JAJ7VXMB.js → chunk-GAZO25PI.js} +1 -1
  960. package/static/{chunk-IHS5LSJJ.js → chunk-GB7ABR5N.js} +1 -1
  961. package/static/{chunk-27V66YJV.js → chunk-GEHFKZQ5.js} +2 -2
  962. package/static/{chunk-3QTROEHV.js → chunk-GQFMWVFD.js} +1 -1
  963. package/static/{chunk-FWQJ4ZCD.js → chunk-GVNTC564.js} +1 -1
  964. package/static/{chunk-4NIYCYRS.js → chunk-HGL3NYP2.js} +2 -2
  965. package/static/chunk-HLIWPWRA.js +1 -0
  966. package/static/{chunk-3VRUIWQG.js → chunk-HNYB3M4S.js} +1 -1
  967. package/static/{chunk-7HJFIMNF.js → chunk-HUXAUQMN.js} +1 -1
  968. package/static/chunk-I2XA6PPK.js +1 -0
  969. package/static/{chunk-RJULB733.js → chunk-ISV3BO6R.js} +1 -1
  970. package/static/{chunk-R4VYKZVJ.js → chunk-IWWBV6EM.js} +1 -1
  971. package/static/{chunk-TTWMFWEC.js → chunk-JV3AGU5B.js} +1 -1
  972. package/static/{chunk-X7NHX5C7.js → chunk-K25E7YGG.js} +1 -1
  973. package/static/chunk-K46PUTZB.js +1 -0
  974. package/static/{chunk-D2MLAO5N.js → chunk-KERFLJ56.js} +1 -7
  975. package/static/{chunk-LZUHREOF.js → chunk-KJD3KFF3.js} +1 -1
  976. package/static/chunk-KPKSI23S.js +1 -0
  977. package/static/{chunk-CMNMPG6Z.js → chunk-KZS7CTNR.js} +1 -1
  978. package/static/{chunk-RNVPQQKT.js → chunk-L5IHUVXL.js} +1 -1
  979. package/static/{chunk-2GXOVGTD.js → chunk-L7RRX2M3.js} +1 -1
  980. package/static/{chunk-WFMEUST4.js → chunk-LGWJ2WKU.js} +1 -1
  981. package/static/{chunk-ZOMRIN3G.js → chunk-MLC7JK2H.js} +2 -2
  982. package/static/{chunk-76REYAEA.js → chunk-MOHNYW2A.js} +1 -1
  983. package/static/{chunk-ZHUBWKA2.js → chunk-MTRXBVWZ.js} +1 -1
  984. package/static/{chunk-QJ22N76V.js → chunk-MZQK6LNV.js} +1 -1
  985. package/static/{chunk-SDJNZULP.js → chunk-NCDUOVMW.js} +1 -1
  986. package/static/chunk-NGUAJIGI.js +1 -0
  987. package/static/chunk-NIPP6JDI.js +1 -0
  988. package/static/{chunk-VD5JHSDS.js → chunk-NMTBMHUL.js} +1 -1
  989. package/static/chunk-O4XXMZFX.js +4 -0
  990. package/static/{chunk-WZPF4LS2.js → chunk-OANZITPM.js} +1 -1
  991. package/static/{chunk-JNTNMIUH.js → chunk-OGE4SAHU.js} +1 -1
  992. package/static/{chunk-S6H2ELRY.js → chunk-OI3ME22C.js} +1 -1
  993. package/static/{chunk-7KAYOR3A.js → chunk-Q3EGCMF5.js} +1 -1
  994. package/static/chunk-QF2NSHZA.js +1 -0
  995. package/static/{chunk-3ZBAQTHJ.js → chunk-QIGUDEZF.js} +1 -1
  996. package/static/{chunk-76M3BMK6.js → chunk-QJVC3SRJ.js} +11 -11
  997. package/static/{chunk-VBTZDHZ3.js → chunk-QKN6LAAA.js} +1 -1
  998. package/static/{chunk-JRXG43AA.js → chunk-QRFESU5O.js} +2 -2
  999. package/static/chunk-QVRVFYJH.js +1 -0
  1000. package/static/{chunk-BCN4T5DO.js → chunk-RFJIPIOK.js} +2 -2
  1001. package/static/{chunk-2RWLNKZH.js → chunk-RLL634K4.js} +1 -1
  1002. package/static/{chunk-D5FQ72R4.js → chunk-RS2OFKWP.js} +1 -1
  1003. package/static/{chunk-CN5YVRFT.js → chunk-RWAAC3A4.js} +1 -1
  1004. package/static/{chunk-LWSCODLD.js → chunk-RWCNTCU5.js} +1 -1
  1005. package/static/{chunk-FTFEQDWH.js → chunk-S5Y64DDS.js} +1 -1
  1006. package/static/{chunk-J7474P3L.js → chunk-SLG5KDU6.js} +1 -1
  1007. package/static/chunk-TJ4CVFEL.js +1 -0
  1008. package/static/{chunk-KAUCN24H.js → chunk-TWCGKSYE.js} +1 -1
  1009. package/static/{chunk-PDG7DOEF.js → chunk-UMDRE4S7.js} +1 -1
  1010. package/static/chunk-VRIOLRYR.js +5 -0
  1011. package/static/chunk-VS4O2XDP.js +1 -0
  1012. package/static/{chunk-ZEJLIGAY.js → chunk-VSBFNFOM.js} +1 -1
  1013. package/static/{chunk-XSURUW7C.js → chunk-WN4WXCVK.js} +1 -1
  1014. package/static/{chunk-S44QIK3G.js → chunk-WX7RXW7K.js} +1 -1
  1015. package/static/{chunk-3ZLBVUCX.js → chunk-XC4POKR3.js} +2 -2
  1016. package/static/{chunk-TNCKNU6I.js → chunk-Y4AUYQTG.js} +1 -1
  1017. package/static/{chunk-3MVPXC3U.js → chunk-Y67J3BOL.js} +1 -1
  1018. package/static/{chunk-QTPIEEZW.js → chunk-YMIXHRJQ.js} +1 -7
  1019. package/static/{chunk-VZFZUI6D.js → chunk-ZUNKFAKP.js} +1 -1
  1020. package/static/index.html +3 -3
  1021. package/static/main-QN4UCOC5.js +5 -0
  1022. package/static/{styles-XLLEY5Y3.css → styles-46GLIE7Y.css} +1 -1
  1023. package/server/authentication/constants/auth-ldap.js.map +0 -1
  1024. package/server/authentication/dto/two-fa-verify.dto.js.map +0 -1
  1025. package/server/authentication/guards/auth-two-fa-guard.js.map +0 -1
  1026. package/server/authentication/interfaces/two-fa-setup.interface.js +0 -10
  1027. package/server/authentication/interfaces/two-fa-setup.interface.js.map +0 -1
  1028. package/server/authentication/models/auth-method.js +0 -18
  1029. package/server/authentication/models/auth-method.js.map +0 -1
  1030. package/server/authentication/services/auth-manager.service.js.map +0 -1
  1031. package/server/authentication/services/auth-manager.service.spec.js.map +0 -1
  1032. package/server/authentication/services/auth-methods/auth-method-database.service.js.map +0 -1
  1033. package/server/authentication/services/auth-methods/auth-method-database.service.spec.js.map +0 -1
  1034. package/server/authentication/services/auth-methods/auth-method-ldap.service.js +0 -326
  1035. package/server/authentication/services/auth-methods/auth-method-ldap.service.js.map +0 -1
  1036. package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js +0 -534
  1037. package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js.map +0 -1
  1038. package/server/authentication/services/auth-methods/auth-method-two-fa.service.js.map +0 -1
  1039. package/server/authentication/services/auth-methods/auth-method-two-fa.service.spec.js.map +0 -1
  1040. package/static/chunk-2YQ4SX3A.js +0 -13
  1041. package/static/chunk-46TJLPJY.js +0 -1
  1042. package/static/chunk-6OEOADR6.js +0 -1
  1043. package/static/chunk-AALPWGPB.js +0 -3
  1044. package/static/chunk-CVXLHSO5.js +0 -1
  1045. package/static/chunk-G7RZN7HN.js +0 -1
  1046. package/static/chunk-LTJNLOX2.js +0 -1
  1047. package/static/chunk-NIKNG2FX.js +0 -1
  1048. package/static/chunk-NNZWSNAW.js +0 -1
  1049. package/static/chunk-NWKBB7J4.js +0 -1
  1050. package/static/chunk-PVYVY3GD.js +0 -1
  1051. package/static/chunk-Q5X5TPAG.js +0 -1
  1052. package/static/chunk-R4VMWCM5.js +0 -1
  1053. package/static/chunk-SNOOCDJD.js +0 -1
  1054. package/static/chunk-SPQH3ATC.js +0 -5
  1055. package/static/chunk-ZCSHU3D7.js +0 -1
  1056. package/static/chunk-ZU5MQTFN.js +0 -4
  1057. package/static/main-5O3KLGIR.js +0 -11
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/files/services/files-search-manager.service.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common'\nimport fs from 'fs/promises'\nimport { Stats } from 'node:fs'\nimport path from 'node:path'\nimport { configuration } from '../../../configuration/config.environment'\nimport { SharesQueries } from '../../shares/services/shares-queries.service'\nimport { SpacesQueries } from '../../spaces/services/spaces-queries.service'\nimport { UserModel } from '../../users/models/user.model'\nimport { shareIndexPrefix, spaceIndexPrefix, userIndexPrefix } from '../constants/indexing'\nimport { SearchFilesDto } from '../dto/file-operations.dto'\nimport { FilesIndexer } from '../models/files-indexer'\nimport { FileContent } from '../schemas/file-content.interface'\nimport { dirName, fileName, getMimeType } from '../utils/files'\nimport { genRegexPositiveAndNegativeTerms } from '../utils/files-search'\nimport { FilesParser } from './files-parser.service'\n\n@Injectable()\nexport class FilesSearchManager {\n private readonly logger = new Logger(FilesSearchManager.name)\n\n constructor(\n private readonly filesIndexer: FilesIndexer,\n private readonly filesParser: FilesParser,\n private readonly spacesQueries: SpacesQueries,\n private readonly sharesQueries: SharesQueries\n ) {}\n\n async search(user: UserModel, search: SearchFilesDto): Promise<FileContent[]> {\n const [spaceIds, shareIds] = await Promise.all([this.spacesQueries.spaceIds(user.id), this.sharesQueries.shareIds(user.id, +user.isAdmin)])\n if (search.fullText) {\n if (!configuration.applications.files.contentIndexing) {\n throw new HttpException('Full-text search is disabled', HttpStatus.BAD_REQUEST)\n }\n return await this.searchFullText(user.id, spaceIds, shareIds, search.content, search.limit)\n } else {\n return await this.searchFileNames(user.id, spaceIds, shareIds, search.content, search.limit)\n }\n }\n\n private async searchFullText(userId: number, spaceIds: number[], shareIds: number[], search: string, limit: number): Promise<FileContent[]> {\n const indexNames = await this.filesIndexer.existingIndexes([\n `${userIndexPrefix}${userId}`,\n ...spaceIds.map((id) => `${spaceIndexPrefix}${id}`),\n ...shareIds.map((id) => `${shareIndexPrefix}${id}`)\n ])\n if (indexNames.length === 0) {\n return []\n }\n try {\n return await this.filesIndexer.searchRecords(indexNames, search, limit)\n } catch (e) {\n this.logger.error(`${this.searchFullText.name} - ${JSON.stringify(indexNames)} - ${search} : ${e}`)\n let msg: string\n if (/Invalid regular expression/.test(e.message)) {\n msg = 'SyntaxError (check special characters)'\n } else {\n msg = e.message\n }\n throw new HttpException(msg, HttpStatus.BAD_REQUEST)\n }\n }\n\n private async searchFileNames(userId: number, spaceIds: number[], shareIds: number[], search: string, limit: number): Promise<FileContent[]> {\n const fileContents: FileContent[] = []\n const regexpTerms = genRegexPositiveAndNegativeTerms(search)\n for await (const [_id, _type, paths] of this.filesParser.allPaths(userId, spaceIds, shareIds)) {\n for (const p of paths) {\n const regexBasePath = new RegExp(`^/?${p.realPath}/?`)\n if (!p.isDir) {\n const f = await this.analyzeFile(p.realPath, p.pathPrefix, regexBasePath, regexpTerms)\n if (f !== null) {\n fileContents.push(f)\n }\n continue\n }\n for await (const fileContent of this.parseFileNames(p.realPath, p.pathPrefix, regexBasePath, regexpTerms)) {\n fileContents.push(fileContent)\n if (fileContents.length >= limit) {\n return fileContents\n }\n }\n }\n }\n return fileContents\n }\n\n private async *parseFileNames(dir: string, pathPrefix: string, regexBasePath: RegExp, regexpTerms: RegExp): AsyncGenerator<FileContent> {\n try {\n for (const entry of await fs.readdir(dir, { withFileTypes: true })) {\n const realPath = path.join(entry.parentPath, entry.name)\n const fileContent = await this.analyzeFile(realPath, pathPrefix, regexBasePath, regexpTerms)\n if (fileContent !== null) {\n yield fileContent\n }\n if (entry.isDirectory()) {\n yield* this.parseFileNames(realPath, pathPrefix, regexBasePath, regexpTerms)\n }\n }\n } catch (e) {\n this.logger.warn(`${this.parseFileNames.name} - unable to parse: ${dir} (${e})`)\n }\n }\n\n private async analyzeFile(realPath: string, pathPrefix: string, regexBasePath: RegExp, regexpTerms: RegExp): Promise<FileContent> {\n const filePath = realPath.replace(regexBasePath, '')\n if (!regexpTerms.test(filePath)) return null\n const stats: Stats = await fs.stat(realPath)\n return {\n id: stats.ino,\n path: path.join(pathPrefix, dirName(filePath)),\n name: fileName(filePath),\n mime: getMimeType(realPath, stats.isDirectory()),\n size: stats.size,\n mtime: stats.mtime.getTime()\n }\n }\n}\n"],"names":["FilesSearchManager","search","user","spaceIds","shareIds","Promise","all","spacesQueries","id","sharesQueries","isAdmin","fullText","configuration","applications","files","contentIndexing","HttpException","HttpStatus","BAD_REQUEST","searchFullText","content","limit","searchFileNames","userId","indexNames","filesIndexer","existingIndexes","userIndexPrefix","map","spaceIndexPrefix","shareIndexPrefix","length","searchRecords","e","logger","error","name","JSON","stringify","msg","test","message","fileContents","regexpTerms","genRegexPositiveAndNegativeTerms","_id","_type","paths","filesParser","allPaths","p","regexBasePath","RegExp","realPath","isDir","f","analyzeFile","pathPrefix","push","fileContent","parseFileNames","dir","entry","fs","readdir","withFileTypes","path","join","parentPath","isDirectory","warn","filePath","replace","stats","stat","ino","dirName","fileName","mime","getMimeType","size","mtime","getTime","Logger"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/files/services/files-search-manager.service.ts"],"sourcesContent":["import { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common'\nimport fs from 'fs/promises'\nimport { Stats } from 'node:fs'\nimport path from 'node:path'\nimport { configuration } from '../../../configuration/config.environment'\nimport { SharesQueries } from '../../shares/services/shares-queries.service'\nimport { SpacesQueries } from '../../spaces/services/spaces-queries.service'\nimport { UserModel } from '../../users/models/user.model'\nimport { shareIndexPrefix, spaceIndexPrefix, userIndexPrefix } from '../constants/indexing'\nimport { SearchFilesDto } from '../dto/file-operations.dto'\nimport { FilesIndexer } from '../models/files-indexer'\nimport { FileContent } from '../schemas/file-content.interface'\nimport { dirName, fileName, getMimeType } from '../utils/files'\nimport { genRegexPositiveAndNegativeTerms } from '../utils/files-search'\nimport { FilesParser } from './files-parser.service'\n\n@Injectable()\nexport class FilesSearchManager {\n private readonly logger = new Logger(FilesSearchManager.name)\n\n constructor(\n private readonly filesIndexer: FilesIndexer,\n private readonly filesParser: FilesParser,\n private readonly spacesQueries: SpacesQueries,\n private readonly sharesQueries: SharesQueries\n ) {}\n\n async search(user: UserModel, search: SearchFilesDto): Promise<FileContent[]> {\n const [spaceIds, shareIds] = await Promise.all([this.spacesQueries.spaceIds(user.id), this.sharesQueries.shareIds(user.id, +user.isAdmin)])\n if (search.fullText) {\n if (!configuration.applications.files.contentIndexing) {\n throw new HttpException('Full-text search is disabled', HttpStatus.BAD_REQUEST)\n }\n return await this.searchFullText(user.id, spaceIds, shareIds, search.content, search.limit)\n } else {\n return await this.searchFileNames(user.id, spaceIds, shareIds, search.content, search.limit)\n }\n }\n\n private async searchFullText(userId: number, spaceIds: number[], shareIds: number[], search: string, limit: number): Promise<FileContent[]> {\n const indexNames = await this.filesIndexer.existingIndexes([\n `${userIndexPrefix}${userId}`,\n ...spaceIds.map((id) => `${spaceIndexPrefix}${id}`),\n ...shareIds.map((id) => `${shareIndexPrefix}${id}`)\n ])\n if (indexNames.length === 0) {\n return []\n }\n try {\n return await this.filesIndexer.searchRecords(indexNames, search, limit)\n } catch (e) {\n this.logger.error({ tag: this.searchFullText.name, msg: `${JSON.stringify(indexNames)} - ${search} : ${e}` })\n let msg: string\n if (/Invalid regular expression/.test(e.message)) {\n msg = 'SyntaxError (check special characters)'\n } else {\n msg = e.message\n }\n throw new HttpException(msg, HttpStatus.BAD_REQUEST)\n }\n }\n\n private async searchFileNames(userId: number, spaceIds: number[], shareIds: number[], search: string, limit: number): Promise<FileContent[]> {\n const fileContents: FileContent[] = []\n const regexpTerms = genRegexPositiveAndNegativeTerms(search)\n for await (const [_id, _type, paths] of this.filesParser.allPaths(userId, spaceIds, shareIds)) {\n for (const p of paths) {\n const regexBasePath = new RegExp(`^/?${p.realPath}/?`)\n if (!p.isDir) {\n const f = await this.analyzeFile(p.realPath, p.pathPrefix, regexBasePath, regexpTerms)\n if (f !== null) {\n fileContents.push(f)\n }\n continue\n }\n for await (const fileContent of this.parseFileNames(p.realPath, p.pathPrefix, regexBasePath, regexpTerms)) {\n fileContents.push(fileContent)\n if (fileContents.length >= limit) {\n return fileContents\n }\n }\n }\n }\n return fileContents\n }\n\n private async *parseFileNames(dir: string, pathPrefix: string, regexBasePath: RegExp, regexpTerms: RegExp): AsyncGenerator<FileContent> {\n try {\n for (const entry of await fs.readdir(dir, { withFileTypes: true })) {\n const realPath = path.join(entry.parentPath, entry.name)\n const fileContent = await this.analyzeFile(realPath, pathPrefix, regexBasePath, regexpTerms)\n if (fileContent !== null) {\n yield fileContent\n }\n if (entry.isDirectory()) {\n yield* this.parseFileNames(realPath, pathPrefix, regexBasePath, regexpTerms)\n }\n }\n } catch (e) {\n this.logger.warn({ tag: this.parseFileNames.name, msg: `unable to parse: ${dir} (${e})` })\n }\n }\n\n private async analyzeFile(realPath: string, pathPrefix: string, regexBasePath: RegExp, regexpTerms: RegExp): Promise<FileContent> {\n const filePath = realPath.replace(regexBasePath, '')\n if (!regexpTerms.test(filePath)) return null\n const stats: Stats = await fs.stat(realPath)\n return {\n id: stats.ino,\n path: path.join(pathPrefix, dirName(filePath)),\n name: fileName(filePath),\n mime: getMimeType(realPath, stats.isDirectory()),\n size: stats.size,\n mtime: stats.mtime.getTime()\n }\n }\n}\n"],"names":["FilesSearchManager","search","user","spaceIds","shareIds","Promise","all","spacesQueries","id","sharesQueries","isAdmin","fullText","configuration","applications","files","contentIndexing","HttpException","HttpStatus","BAD_REQUEST","searchFullText","content","limit","searchFileNames","userId","indexNames","filesIndexer","existingIndexes","userIndexPrefix","map","spaceIndexPrefix","shareIndexPrefix","length","searchRecords","e","logger","error","tag","name","msg","JSON","stringify","test","message","fileContents","regexpTerms","genRegexPositiveAndNegativeTerms","_id","_type","paths","filesParser","allPaths","p","regexBasePath","RegExp","realPath","isDir","f","analyzeFile","pathPrefix","push","fileContent","parseFileNames","dir","entry","fs","readdir","withFileTypes","path","join","parentPath","isDirectory","warn","filePath","replace","stats","stat","ino","dirName","fileName","mime","getMimeType","size","mtime","getTime","Logger"],"mappings":";;;;+BAiBaA;;;eAAAA;;;wBAjBiD;iEAC/C;iEAEE;mCACa;sCACA;sCACA;0BAEsC;8BAEvC;uBAEkB;6BACE;oCACrB;;;;;;;;;;;;;;;AAGrB,IAAA,AAAMA,qBAAN,MAAMA;IAUX,MAAMC,OAAOC,IAAe,EAAED,MAAsB,EAA0B;QAC5E,MAAM,CAACE,UAAUC,SAAS,GAAG,MAAMC,QAAQC,GAAG,CAAC;YAAC,IAAI,CAACC,aAAa,CAACJ,QAAQ,CAACD,KAAKM,EAAE;YAAG,IAAI,CAACC,aAAa,CAACL,QAAQ,CAACF,KAAKM,EAAE,EAAE,CAACN,KAAKQ,OAAO;SAAE;QAC1I,IAAIT,OAAOU,QAAQ,EAAE;YACnB,IAAI,CAACC,gCAAa,CAACC,YAAY,CAACC,KAAK,CAACC,eAAe,EAAE;gBACrD,MAAM,IAAIC,qBAAa,CAAC,gCAAgCC,kBAAU,CAACC,WAAW;YAChF;YACA,OAAO,MAAM,IAAI,CAACC,cAAc,CAACjB,KAAKM,EAAE,EAAEL,UAAUC,UAAUH,OAAOmB,OAAO,EAAEnB,OAAOoB,KAAK;QAC5F,OAAO;YACL,OAAO,MAAM,IAAI,CAACC,eAAe,CAACpB,KAAKM,EAAE,EAAEL,UAAUC,UAAUH,OAAOmB,OAAO,EAAEnB,OAAOoB,KAAK;QAC7F;IACF;IAEA,MAAcF,eAAeI,MAAc,EAAEpB,QAAkB,EAAEC,QAAkB,EAAEH,MAAc,EAAEoB,KAAa,EAA0B;QAC1I,MAAMG,aAAa,MAAM,IAAI,CAACC,YAAY,CAACC,eAAe,CAAC;YACzD,GAAGC,yBAAe,GAAGJ,QAAQ;eAC1BpB,SAASyB,GAAG,CAAC,CAACpB,KAAO,GAAGqB,0BAAgB,GAAGrB,IAAI;eAC/CJ,SAASwB,GAAG,CAAC,CAACpB,KAAO,GAAGsB,0BAAgB,GAAGtB,IAAI;SACnD;QACD,IAAIgB,WAAWO,MAAM,KAAK,GAAG;YAC3B,OAAO,EAAE;QACX;QACA,IAAI;YACF,OAAO,MAAM,IAAI,CAACN,YAAY,CAACO,aAAa,CAACR,YAAYvB,QAAQoB;QACnE,EAAE,OAAOY,GAAG;YACV,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC;gBAAEC,KAAK,IAAI,CAACjB,cAAc,CAACkB,IAAI;gBAAEC,KAAK,GAAGC,KAAKC,SAAS,CAAChB,YAAY,GAAG,EAAEvB,OAAO,GAAG,EAAEgC,GAAG;YAAC;YAC3G,IAAIK;YACJ,IAAI,6BAA6BG,IAAI,CAACR,EAAES,OAAO,GAAG;gBAChDJ,MAAM;YACR,OAAO;gBACLA,MAAML,EAAES,OAAO;YACjB;YACA,MAAM,IAAI1B,qBAAa,CAACsB,KAAKrB,kBAAU,CAACC,WAAW;QACrD;IACF;IAEA,MAAcI,gBAAgBC,MAAc,EAAEpB,QAAkB,EAAEC,QAAkB,EAAEH,MAAc,EAAEoB,KAAa,EAA0B;QAC3I,MAAMsB,eAA8B,EAAE;QACtC,MAAMC,cAAcC,IAAAA,6CAAgC,EAAC5C;QACrD,WAAW,MAAM,CAAC6C,KAAKC,OAAOC,MAAM,IAAI,IAAI,CAACC,WAAW,CAACC,QAAQ,CAAC3B,QAAQpB,UAAUC,UAAW;YAC7F,KAAK,MAAM+C,KAAKH,MAAO;gBACrB,MAAMI,gBAAgB,IAAIC,OAAO,CAAC,GAAG,EAAEF,EAAEG,QAAQ,CAAC,EAAE,CAAC;gBACrD,IAAI,CAACH,EAAEI,KAAK,EAAE;oBACZ,MAAMC,IAAI,MAAM,IAAI,CAACC,WAAW,CAACN,EAAEG,QAAQ,EAAEH,EAAEO,UAAU,EAAEN,eAAeR;oBAC1E,IAAIY,MAAM,MAAM;wBACdb,aAAagB,IAAI,CAACH;oBACpB;oBACA;gBACF;gBACA,WAAW,MAAMI,eAAe,IAAI,CAACC,cAAc,CAACV,EAAEG,QAAQ,EAAEH,EAAEO,UAAU,EAAEN,eAAeR,aAAc;oBACzGD,aAAagB,IAAI,CAACC;oBAClB,IAAIjB,aAAaZ,MAAM,IAAIV,OAAO;wBAChC,OAAOsB;oBACT;gBACF;YACF;QACF;QACA,OAAOA;IACT;IAEA,OAAekB,eAAeC,GAAW,EAAEJ,UAAkB,EAAEN,aAAqB,EAAER,WAAmB,EAA+B;QACtI,IAAI;YACF,KAAK,MAAMmB,SAAS,CAAA,MAAMC,iBAAE,CAACC,OAAO,CAACH,KAAK;gBAAEI,eAAe;YAAK,EAAC,EAAG;gBAClE,MAAMZ,WAAWa,iBAAI,CAACC,IAAI,CAACL,MAAMM,UAAU,EAAEN,MAAM1B,IAAI;gBACvD,MAAMuB,cAAc,MAAM,IAAI,CAACH,WAAW,CAACH,UAAUI,YAAYN,eAAeR;gBAChF,IAAIgB,gBAAgB,MAAM;oBACxB,MAAMA;gBACR;gBACA,IAAIG,MAAMO,WAAW,IAAI;oBACvB,OAAO,IAAI,CAACT,cAAc,CAACP,UAAUI,YAAYN,eAAeR;gBAClE;YACF;QACF,EAAE,OAAOX,GAAG;YACV,IAAI,CAACC,MAAM,CAACqC,IAAI,CAAC;gBAAEnC,KAAK,IAAI,CAACyB,cAAc,CAACxB,IAAI;gBAAEC,KAAK,CAAC,iBAAiB,EAAEwB,IAAI,EAAE,EAAE7B,EAAE,CAAC,CAAC;YAAC;QAC1F;IACF;IAEA,MAAcwB,YAAYH,QAAgB,EAAEI,UAAkB,EAAEN,aAAqB,EAAER,WAAmB,EAAwB;QAChI,MAAM4B,WAAWlB,SAASmB,OAAO,CAACrB,eAAe;QACjD,IAAI,CAACR,YAAYH,IAAI,CAAC+B,WAAW,OAAO;QACxC,MAAME,QAAe,MAAMV,iBAAE,CAACW,IAAI,CAACrB;QACnC,OAAO;YACL9C,IAAIkE,MAAME,GAAG;YACbT,MAAMA,iBAAI,CAACC,IAAI,CAACV,YAAYmB,IAAAA,cAAO,EAACL;YACpCnC,MAAMyC,IAAAA,eAAQ,EAACN;YACfO,MAAMC,IAAAA,kBAAW,EAAC1B,UAAUoB,MAAMJ,WAAW;YAC7CW,MAAMP,MAAMO,IAAI;YAChBC,OAAOR,MAAMQ,KAAK,CAACC,OAAO;QAC5B;IACF;IA/FA,YACE,AAAiB1D,YAA0B,EAC3C,AAAiBwB,WAAwB,EACzC,AAAiB1C,aAA4B,EAC7C,AAAiBE,aAA4B,CAC7C;aAJiBgB,eAAAA;aACAwB,cAAAA;aACA1C,gBAAAA;aACAE,gBAAAA;aANFyB,SAAS,IAAIkD,cAAM,CAACpF,mBAAmBqC,IAAI;IAOzD;AA2FL"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/files/services/files-search-manager.service.spec.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { SharesQueries } from '../../shares/services/shares-queries.service'\nimport { SpacesQueries } from '../../spaces/services/spaces-queries.service'\nimport { FilesIndexer } from '../models/files-indexer'\nimport { FilesParser } from './files-parser.service'\nimport { FilesSearchManager } from './files-search-manager.service'\n\ndescribe(FilesSearchManager.name, () => {\n let service: FilesSearchManager\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n providers: [\n FilesSearchManager,\n { provide: FilesIndexer, useValue: {} },\n { provide: FilesParser, useValue: {} },\n {\n provide: SpacesQueries,\n useValue: {}\n },\n { provide: SharesQueries, useValue: {} }\n ]\n }).compile()\n\n service = module.get<FilesSearchManager>(FilesSearchManager)\n })\n\n it('should be defined', () => {\n expect(service).toBeDefined()\n })\n})\n"],"names":["describe","FilesSearchManager","name","service","beforeAll","module","Test","createTestingModule","providers","provide","FilesIndexer","useValue","FilesParser","SpacesQueries","SharesQueries","compile","get","it","expect","toBeDefined"],"mappings":"AAAA;;;;CAIC;;;;yBAEmC;sCACN;sCACA;8BACD;oCACD;2CACO;AAEnCA,SAASC,6CAAkB,CAACC,IAAI,EAAE;IAChC,IAAIC;IAEJC,UAAU;QACR,MAAMC,SAAwB,MAAMC,aAAI,CAACC,mBAAmB,CAAC;YAC3DC,WAAW;gBACTP,6CAAkB;gBAClB;oBAAEQ,SAASC,0BAAY;oBAAEC,UAAU,CAAC;gBAAE;gBACtC;oBAAEF,SAASG,+BAAW;oBAAED,UAAU,CAAC;gBAAE;gBACrC;oBACEF,SAASI,mCAAa;oBACtBF,UAAU,CAAC;gBACb;gBACA;oBAAEF,SAASK,mCAAa;oBAAEH,UAAU,CAAC;gBAAE;aACxC;QACH,GAAGI,OAAO;QAEVZ,UAAUE,OAAOW,GAAG,CAAqBf,6CAAkB;IAC7D;IAEAgB,GAAG,qBAAqB;QACtBC,OAAOf,SAASgB,WAAW;IAC7B;AACF"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/files/services/files-search-manager.service.spec.ts"],"sourcesContent":["import { Test, TestingModule } from '@nestjs/testing'\nimport { SharesQueries } from '../../shares/services/shares-queries.service'\nimport { SpacesQueries } from '../../spaces/services/spaces-queries.service'\nimport { FilesIndexer } from '../models/files-indexer'\nimport { FilesParser } from './files-parser.service'\nimport { FilesSearchManager } from './files-search-manager.service'\n\ndescribe(FilesSearchManager.name, () => {\n let service: FilesSearchManager\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n providers: [\n FilesSearchManager,\n { provide: FilesIndexer, useValue: {} },\n { provide: FilesParser, useValue: {} },\n {\n provide: SpacesQueries,\n useValue: {}\n },\n { provide: SharesQueries, useValue: {} }\n ]\n }).compile()\n\n service = module.get<FilesSearchManager>(FilesSearchManager)\n })\n\n it('should be defined', () => {\n expect(service).toBeDefined()\n })\n})\n"],"names":["describe","FilesSearchManager","name","service","beforeAll","module","Test","createTestingModule","providers","provide","FilesIndexer","useValue","FilesParser","SpacesQueries","SharesQueries","compile","get","it","expect","toBeDefined"],"mappings":";;;;yBAAoC;sCACN;sCACA;8BACD;oCACD;2CACO;AAEnCA,SAASC,6CAAkB,CAACC,IAAI,EAAE;IAChC,IAAIC;IAEJC,UAAU;QACR,MAAMC,SAAwB,MAAMC,aAAI,CAACC,mBAAmB,CAAC;YAC3DC,WAAW;gBACTP,6CAAkB;gBAClB;oBAAEQ,SAASC,0BAAY;oBAAEC,UAAU,CAAC;gBAAE;gBACtC;oBAAEF,SAASG,+BAAW;oBAAED,UAAU,CAAC;gBAAE;gBACrC;oBACEF,SAASI,mCAAa;oBACtBF,UAAU,CAAC;gBACb;gBACA;oBAAEF,SAASK,mCAAa;oBAAEH,UAAU,CAAC;gBAAE;aACxC;QACH,GAAGI,OAAO;QAEVZ,UAAUE,OAAOW,GAAG,CAAqBf,6CAAkB;IAC7D;IAEAgB,GAAG,qBAAqB;QACtBC,OAAOf,SAASgB,WAAW;IAC7B;AACF"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -53,11 +49,23 @@ let FilesTasksManager = class FilesTasksManager {
53
49
  props: {}
54
50
  };
55
51
  this.filesMethods[method](user, space, dto).then((data)=>{
56
- this.logger.debug(`${this.createTask.name} - ${newTask.name} : ${method} done`);
57
- this.setTaskDone(cacheKey, _filetask.FileTaskStatus.SUCCESS, data).catch((e)=>this.logger.error(`${this.createTask.name} - ${e}`));
52
+ this.logger.debug({
53
+ tag: this.createTask.name,
54
+ msg: `${newTask.name} : ${method} done`
55
+ });
56
+ this.setTaskDone(cacheKey, _filetask.FileTaskStatus.SUCCESS, data).catch((e)=>this.logger.error({
57
+ tag: this.createTask.name,
58
+ msg: `${e}`
59
+ }));
58
60
  }).catch((e)=>{
59
- this.logger.error(`${this.createTask.name} - ${newTask.name} : ${method} : ${e}`);
60
- this.setTaskDone(cacheKey, _filetask.FileTaskStatus.ERROR, e.message).catch((e)=>this.logger.error(`${this.createTask.name} - ${e}`));
61
+ this.logger.error({
62
+ tag: this.createTask.name,
63
+ msg: `${newTask.name} : ${method} : ${e}`
64
+ });
65
+ this.setTaskDone(cacheKey, _filetask.FileTaskStatus.ERROR, e.message).catch((e)=>this.logger.error({
66
+ tag: this.createTask.name,
67
+ msg: `${e}`
68
+ }));
61
69
  });
62
70
  return newTask;
63
71
  }
@@ -89,12 +97,21 @@ let FilesTasksManager = class FilesTasksManager {
89
97
  if (task.props.compressInDirectory === false) {
90
98
  // delete task file
91
99
  const rPath = _nodepath.default.join(user.tasksPath, task.name);
92
- (0, _files.removeFiles)(rPath).catch((e)=>this.logger.error(`${this.deleteTasks.name} - ${e}`));
100
+ (0, _files.removeFiles)(rPath).catch((e)=>this.logger.error({
101
+ tag: this.deleteTasks.name,
102
+ msg: `${e}`
103
+ }));
93
104
  }
94
105
  // clear watcher
95
- this.stopWatch(key).catch((e)=>this.logger.error(`${this.deleteTasks.name} - ${e}`));
106
+ this.stopWatch(key).catch((e)=>this.logger.error({
107
+ tag: this.deleteTasks.name,
108
+ msg: `${e}`
109
+ }));
96
110
  // remove from cache
97
- this.cache.del(key).catch((e)=>this.logger.error(`${this.deleteTasks.name} - ${e}`));
111
+ this.cache.del(key).catch((e)=>this.logger.error({
112
+ tag: this.deleteTasks.name,
113
+ msg: `${e}`
114
+ }));
98
115
  }
99
116
  }
100
117
  async downloadArchive(user, taskId, req, res) {
@@ -118,7 +135,10 @@ let FilesTasksManager = class FilesTasksManager {
118
135
  try {
119
136
  await this.cache.set(cacheKey, task, _cache.CACHE_TASK_TTL);
120
137
  } catch (e) {
121
- this.logger.error(`${this.storeTask.name} - ${e}`);
138
+ this.logger.error({
139
+ tag: this.storeTask.name,
140
+ msg: `${e}`
141
+ });
122
142
  }
123
143
  }
124
144
  async setTaskDone(cacheKey, status, result) {
@@ -155,11 +175,17 @@ let FilesTasksManager = class FilesTasksManager {
155
175
  }
156
176
  async startWatch(space, taskType, rPath, taskPath) {
157
177
  if (!space.task?.cacheKey || space.task.cacheKey in this.tasksWatcher) return;
158
- this.logger.verbose(`${this.startWatch.name} - ${space.task.cacheKey}`);
178
+ this.logger.verbose({
179
+ tag: this.startWatch.name,
180
+ msg: `${space.task.cacheKey}`
181
+ });
159
182
  this.updateTask(space.task.cacheKey, space.task?.props, {
160
183
  name: (0, _files.fileName)(rPath),
161
184
  path: taskPath
162
- }).catch((e)=>this.logger.error(`${this.startWatch.name} - ${e}`));
185
+ }).catch((e)=>this.logger.error({
186
+ tag: this.startWatch.name,
187
+ msg: `${e}`
188
+ }));
163
189
  switch(taskType){
164
190
  case _operations.FILE_OPERATION.COMPRESS:
165
191
  this.tasksWatcher[space.task.cacheKey] = setInterval(async ()=>this.updateCompressTask(space, rPath), this.watchInterval);
@@ -175,7 +201,10 @@ let FilesTasksManager = class FilesTasksManager {
175
201
  this.tasksWatcher[space.task.cacheKey] = setInterval(async ()=>this.updateCopyMoveTask(space, rPath), this.watchInterval);
176
202
  return;
177
203
  default:
178
- this.logger.warn(`${this.startWatch.name} - unknown task type ${taskType}`);
204
+ this.logger.warn({
205
+ tag: this.startWatch.name,
206
+ msg: `unknown task type ${taskType}`
207
+ });
179
208
  return;
180
209
  }
181
210
  }
@@ -188,27 +217,45 @@ let FilesTasksManager = class FilesTasksManager {
188
217
  async updateCompressTask(space, rPath) {
189
218
  try {
190
219
  space.task.props.size = await (0, _files.fileSize)(rPath);
191
- await this.updateTask(space.task.cacheKey, space.task.props).catch((e)=>this.logger.error(`${this.updateCompressTask.name} - ${e}`));
220
+ await this.updateTask(space.task.cacheKey, space.task.props).catch((e)=>this.logger.error({
221
+ tag: this.updateCompressTask.name,
222
+ msg: `${e}`
223
+ }));
192
224
  } catch (e) {
193
- this.logger.error(`${this.updateCompressTask.name} - ${e}`);
225
+ this.logger.error({
226
+ tag: this.updateCompressTask.name,
227
+ msg: `${e}`
228
+ });
194
229
  await this.stopWatch(space.task.cacheKey);
195
230
  }
196
231
  }
197
232
  async updateDecompressTask(space, rPath) {
198
233
  try {
199
234
  space.task.props = await (0, _files.countDirEntries)(rPath);
200
- this.updateTask(space.task.cacheKey, space.task.props).catch((e)=>this.logger.error(`${this.updateDecompressTask.name} - ${e}`));
235
+ this.updateTask(space.task.cacheKey, space.task.props).catch((e)=>this.logger.error({
236
+ tag: this.updateDecompressTask.name,
237
+ msg: `${e}`
238
+ }));
201
239
  } catch (e) {
202
- this.logger.error(`${this.updateDecompressTask.name} - ${e}`);
240
+ this.logger.error({
241
+ tag: this.updateDecompressTask.name,
242
+ msg: `${e}`
243
+ });
203
244
  await this.stopWatch(space.task.cacheKey);
204
245
  }
205
246
  }
206
247
  async updateDownloadTask(space, rPath) {
207
248
  try {
208
249
  await this.calcSizeAndProgressTask(space, rPath);
209
- this.updateTask(space.task.cacheKey, space.task.props).catch((e)=>this.logger.error(`${this.updateDownloadTask.name} - ${e}`));
250
+ this.updateTask(space.task.cacheKey, space.task.props).catch((e)=>this.logger.error({
251
+ tag: this.updateDownloadTask.name,
252
+ msg: `${e}`
253
+ }));
210
254
  } catch (e) {
211
- this.logger.error(`${this.updateDownloadTask.name} - ${e}`);
255
+ this.logger.error({
256
+ tag: this.updateDownloadTask.name,
257
+ msg: `${e}`
258
+ });
212
259
  await this.stopWatch(space.task.cacheKey);
213
260
  }
214
261
  }
@@ -219,9 +266,15 @@ let FilesTasksManager = class FilesTasksManager {
219
266
  } else {
220
267
  await this.calcSizeAndProgressTask(space, rPath);
221
268
  }
222
- this.updateTask(space.task.cacheKey, space.task.props).catch((e)=>this.logger.error(`${this.updateCopyMoveTask.name} - ${e}`));
269
+ this.updateTask(space.task.cacheKey, space.task.props).catch((e)=>this.logger.error({
270
+ tag: this.updateCopyMoveTask.name,
271
+ msg: `${e}`
272
+ }));
223
273
  } catch (e) {
224
- this.logger.error(`${this.updateCopyMoveTask.name} - ${e}`);
274
+ this.logger.error({
275
+ tag: this.updateCopyMoveTask.name,
276
+ msg: `${e}`
277
+ });
225
278
  await this.stopWatch(space.task.cacheKey);
226
279
  }
227
280
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/files/services/files-tasks-manager.service.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { HttpException, HttpStatus, Injectable, Logger, StreamableFile } from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport crypto from 'node:crypto'\nimport path from 'node:path'\nimport { setTimeout } from 'node:timers/promises'\nimport { FastifyAuthenticatedRequest } from '../../../authentication/interfaces/auth-request.interface'\n\nimport { currentTimeStamp } from '../../../common/shared'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { SpaceEnv } from '../../spaces/models/space-env.model'\nimport { UserModel } from '../../users/models/user.model'\nimport { CACHE_TASK_PREFIX, CACHE_TASK_TTL } from '../constants/cache'\nimport { FILE_OPERATION } from '../constants/operations'\nimport { FileTaskEvent } from '../events/file-task-event'\nimport { FileTask, FileTaskProps, FileTaskStatus } from '../models/file-task'\nimport { countDirEntries, dirName, fileName, fileSize, isPathIsDir, removeFiles } from '../utils/files'\nimport { SendFile } from '../utils/send-file'\nimport { FilesMethods } from './files-methods.service'\n\n@Injectable()\nexport class FilesTasksManager {\n // task cache key = `ftask-$(userId}-${taskId}` => FileTask\n private readonly logger = new Logger(FilesTasksManager.name)\n private readonly watchInterval = 1000\n private tasksWatcher: Record<string, any> = {}\n\n constructor(\n private readonly cache: Cache,\n private readonly filesMethods: FilesMethods\n ) {\n FileTaskEvent.on('startWatch', async (space: SpaceEnv, taskType: FILE_OPERATION, rPath: string) =>\n this.startWatch(space, taskType, rPath, dirName(space.url))\n )\n }\n\n static getCacheKey(userId: number, taskId?: string): string {\n return `${CACHE_TASK_PREFIX}-${userId}-${taskId || '*'}`\n }\n\n async createTask(type: FILE_OPERATION, user: UserModel, space: SpaceEnv, dto: any, method: string): Promise<FileTask> {\n const taskId: string = crypto.randomUUID()\n const cacheKey = FilesTasksManager.getCacheKey(user.id, taskId)\n const newTask = new FileTask(taskId, type, dirName(space.url), fileName(space.url))\n await this.storeTask(cacheKey, newTask)\n space.task = { cacheKey: cacheKey, props: {} }\n this.filesMethods[method](user, space, dto)\n .then((data: any) => {\n this.logger.debug(`${this.createTask.name} - ${newTask.name} : ${method} done`)\n this.setTaskDone(cacheKey, FileTaskStatus.SUCCESS, data).catch((e: Error) => this.logger.error(`${this.createTask.name} - ${e}`))\n })\n .catch((e: HttpException | any) => {\n this.logger.error(`${this.createTask.name} - ${newTask.name} : ${method} : ${e}`)\n this.setTaskDone(cacheKey, FileTaskStatus.ERROR, e.message).catch((e: Error) => this.logger.error(`${this.createTask.name} - ${e}`))\n })\n return newTask\n }\n\n async getTasks(userId: number, taskId?: string): Promise<FileTask | FileTask[]> {\n const cacheKey = FilesTasksManager.getCacheKey(userId, taskId)\n if (taskId) {\n const task: FileTask = await this.cache.get(cacheKey)\n if (task) return task\n throw new HttpException('Task not found', HttpStatus.NOT_FOUND)\n } else {\n const keys = await this.cache.keys(cacheKey)\n return keys.length ? await this.cache.mget(keys) : []\n }\n }\n\n async deleteTasks(user: UserModel, taskId?: string): Promise<void> {\n const cacheKey = FilesTasksManager.getCacheKey(user.id, taskId)\n let keys: string[]\n if (taskId) {\n keys = [cacheKey]\n } else {\n keys = await this.cache.keys(cacheKey)\n }\n if (!keys.length) return\n for (const key of keys) {\n const task: FileTask = await this.cache.get(key)\n if (!task || task.status === FileTaskStatus.PENDING) continue\n if (task.props.compressInDirectory === false) {\n // delete task file\n const rPath = path.join(user.tasksPath, task.name)\n removeFiles(rPath).catch((e: Error) => this.logger.error(`${this.deleteTasks.name} - ${e}`))\n }\n // clear watcher\n this.stopWatch(key).catch((e: Error) => this.logger.error(`${this.deleteTasks.name} - ${e}`))\n // remove from cache\n this.cache.del(key).catch((e: Error) => this.logger.error(`${this.deleteTasks.name} - ${e}`))\n }\n }\n\n async downloadArchive(user: UserModel, taskId: string, req: FastifyAuthenticatedRequest, res: FastifyReply): Promise<StreamableFile> {\n const cacheKey = FilesTasksManager.getCacheKey(user.id, taskId)\n const task: FileTask = await this.cache.get(cacheKey)\n if (!task || task.status !== FileTaskStatus.SUCCESS || task.props.compressInDirectory !== false) {\n throw new HttpException('Not applicable', HttpStatus.BAD_REQUEST)\n }\n const rPath = path.join(user.tasksPath, task.name)\n const sendFile = new SendFile(rPath)\n try {\n await sendFile.checks()\n } catch (e) {\n throw new HttpException(e.message, e.httpCode)\n }\n return await sendFile.stream(req, res)\n }\n\n private async storeTask(cacheKey: string, task: FileTask) {\n task.startedAt = currentTimeStamp(null, true)\n task.status = FileTaskStatus.PENDING\n try {\n await this.cache.set(cacheKey, task, CACHE_TASK_TTL)\n } catch (e) {\n this.logger.error(`${this.storeTask.name} - ${e}`)\n }\n }\n\n private async setTaskDone(cacheKey: string, status: FileTaskStatus, result: any): Promise<void> {\n const task: FileTask = await this.cache.get(cacheKey)\n if (task) {\n task.status = status\n task.endedAt = currentTimeStamp(null, true)\n if (result) {\n if (typeof result === 'string') {\n task.result = result\n } else {\n Object.assign(task, result)\n }\n }\n await this.cache.set(cacheKey, task, CACHE_TASK_TTL)\n }\n await this.stopWatch(cacheKey)\n }\n\n private async updateTask(cacheKey: string, props?: FileTaskProps, task?: Partial<FileTask>): Promise<void> {\n let ftask: FileTask = await this.cache.get(cacheKey)\n if (ftask) {\n if (task) ftask = { ...ftask, ...task }\n if (props) ftask.props = { ...ftask.props, ...props }\n await this.cache.set(cacheKey, ftask, CACHE_TASK_TTL)\n } else {\n await this.stopWatch(cacheKey)\n }\n }\n\n private async startWatch(space: SpaceEnv, taskType: FILE_OPERATION, rPath: string, taskPath?: string): Promise<void> {\n if (!space.task?.cacheKey || space.task.cacheKey in this.tasksWatcher) return\n this.logger.verbose(`${this.startWatch.name} - ${space.task.cacheKey}`)\n this.updateTask(space.task.cacheKey, space.task?.props, {\n name: fileName(rPath),\n path: taskPath\n }).catch((e: Error) => this.logger.error(`${this.startWatch.name} - ${e}`))\n switch (taskType) {\n case FILE_OPERATION.COMPRESS:\n this.tasksWatcher[space.task.cacheKey] = setInterval(async () => this.updateCompressTask(space, rPath), this.watchInterval)\n return\n case FILE_OPERATION.DECOMPRESS:\n this.tasksWatcher[space.task.cacheKey] = setInterval(async () => this.updateDecompressTask(space, rPath), this.watchInterval)\n return\n case FILE_OPERATION.DOWNLOAD:\n this.tasksWatcher[space.task.cacheKey] = setInterval(async () => this.updateDownloadTask(space, rPath), this.watchInterval)\n return\n case FILE_OPERATION.COPY:\n case FILE_OPERATION.MOVE:\n this.tasksWatcher[space.task.cacheKey] = setInterval(async () => this.updateCopyMoveTask(space, rPath), this.watchInterval)\n return\n default:\n this.logger.warn(`${this.startWatch.name} - unknown task type ${taskType}`)\n return\n }\n }\n\n private async stopWatch(cacheKey: string): Promise<void> {\n if (!(cacheKey in this.tasksWatcher)) return\n await setTimeout(this.watchInterval)\n clearInterval(this.tasksWatcher[cacheKey])\n delete this.tasksWatcher[cacheKey]\n }\n\n private async updateCompressTask(space: SpaceEnv, rPath: string): Promise<void> {\n try {\n space.task.props.size = await fileSize(rPath)\n await this.updateTask(space.task.cacheKey, space.task.props).catch((e: Error) => this.logger.error(`${this.updateCompressTask.name} - ${e}`))\n } catch (e) {\n this.logger.error(`${this.updateCompressTask.name} - ${e}`)\n await this.stopWatch(space.task.cacheKey)\n }\n }\n\n private async updateDecompressTask(space: SpaceEnv, rPath: string): Promise<void> {\n try {\n space.task.props = await countDirEntries(rPath)\n this.updateTask(space.task.cacheKey, space.task.props).catch((e: Error) => this.logger.error(`${this.updateDecompressTask.name} - ${e}`))\n } catch (e) {\n this.logger.error(`${this.updateDecompressTask.name} - ${e}`)\n await this.stopWatch(space.task.cacheKey)\n }\n }\n\n private async updateDownloadTask(space: SpaceEnv, rPath: string): Promise<void> {\n try {\n await this.calcSizeAndProgressTask(space, rPath)\n this.updateTask(space.task.cacheKey, space.task.props).catch((e: Error) => this.logger.error(`${this.updateDownloadTask.name} - ${e}`))\n } catch (e) {\n this.logger.error(`${this.updateDownloadTask.name} - ${e}`)\n await this.stopWatch(space.task.cacheKey)\n }\n }\n\n private async updateCopyMoveTask(space: SpaceEnv, rPath: string): Promise<void> {\n try {\n if (await isPathIsDir(rPath)) {\n space.task.props = await countDirEntries(rPath)\n } else {\n await this.calcSizeAndProgressTask(space, rPath)\n }\n this.updateTask(space.task.cacheKey, space.task.props).catch((e: Error) => this.logger.error(`${this.updateCopyMoveTask.name} - ${e}`))\n } catch (e) {\n this.logger.error(`${this.updateCopyMoveTask.name} - ${e}`)\n await this.stopWatch(space.task.cacheKey)\n }\n }\n\n private async calcSizeAndProgressTask(space: SpaceEnv, rPath: string) {\n space.task.props.size = await fileSize(rPath)\n if (space.task.props.totalSize) {\n space.task.props.progress = (100 * space.task.props.size) / space.task.props.totalSize\n }\n }\n}\n"],"names":["FilesTasksManager","getCacheKey","userId","taskId","CACHE_TASK_PREFIX","createTask","type","user","space","dto","method","crypto","randomUUID","cacheKey","id","newTask","FileTask","dirName","url","fileName","storeTask","task","props","filesMethods","then","data","logger","debug","name","setTaskDone","FileTaskStatus","SUCCESS","catch","e","error","ERROR","message","getTasks","cache","get","HttpException","HttpStatus","NOT_FOUND","keys","length","mget","deleteTasks","key","status","PENDING","compressInDirectory","rPath","path","join","tasksPath","removeFiles","stopWatch","del","downloadArchive","req","res","BAD_REQUEST","sendFile","SendFile","checks","httpCode","stream","startedAt","currentTimeStamp","set","CACHE_TASK_TTL","result","endedAt","Object","assign","updateTask","ftask","startWatch","taskType","taskPath","tasksWatcher","verbose","FILE_OPERATION","COMPRESS","setInterval","updateCompressTask","watchInterval","DECOMPRESS","updateDecompressTask","DOWNLOAD","updateDownloadTask","COPY","MOVE","updateCopyMoveTask","warn","setTimeout","clearInterval","size","fileSize","countDirEntries","calcSizeAndProgressTask","isPathIsDir","totalSize","progress","Logger","FileTaskEvent","on"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/files/services/files-tasks-manager.service.ts"],"sourcesContent":["import { HttpException, HttpStatus, Injectable, Logger, StreamableFile } from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport crypto from 'node:crypto'\nimport path from 'node:path'\nimport { setTimeout } from 'node:timers/promises'\nimport { FastifyAuthenticatedRequest } from '../../../authentication/interfaces/auth-request.interface'\n\nimport { currentTimeStamp } from '../../../common/shared'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { SpaceEnv } from '../../spaces/models/space-env.model'\nimport { UserModel } from '../../users/models/user.model'\nimport { CACHE_TASK_PREFIX, CACHE_TASK_TTL } from '../constants/cache'\nimport { FILE_OPERATION } from '../constants/operations'\nimport { FileTaskEvent } from '../events/file-task-event'\nimport { FileTask, FileTaskProps, FileTaskStatus } from '../models/file-task'\nimport { countDirEntries, dirName, fileName, fileSize, isPathIsDir, removeFiles } from '../utils/files'\nimport { SendFile } from '../utils/send-file'\nimport { FilesMethods } from './files-methods.service'\n\n@Injectable()\nexport class FilesTasksManager {\n // task cache key = `ftask-$(userId}-${taskId}` => FileTask\n private readonly logger = new Logger(FilesTasksManager.name)\n private readonly watchInterval = 1000\n private tasksWatcher: Record<string, any> = {}\n\n constructor(\n private readonly cache: Cache,\n private readonly filesMethods: FilesMethods\n ) {\n FileTaskEvent.on('startWatch', async (space: SpaceEnv, taskType: FILE_OPERATION, rPath: string) =>\n this.startWatch(space, taskType, rPath, dirName(space.url))\n )\n }\n\n static getCacheKey(userId: number, taskId?: string): string {\n return `${CACHE_TASK_PREFIX}-${userId}-${taskId || '*'}`\n }\n\n async createTask(type: FILE_OPERATION, user: UserModel, space: SpaceEnv, dto: any, method: string): Promise<FileTask> {\n const taskId: string = crypto.randomUUID()\n const cacheKey = FilesTasksManager.getCacheKey(user.id, taskId)\n const newTask = new FileTask(taskId, type, dirName(space.url), fileName(space.url))\n await this.storeTask(cacheKey, newTask)\n space.task = { cacheKey: cacheKey, props: {} }\n this.filesMethods[method](user, space, dto)\n .then((data: any) => {\n this.logger.debug({ tag: this.createTask.name, msg: `${newTask.name} : ${method} done` })\n this.setTaskDone(cacheKey, FileTaskStatus.SUCCESS, data).catch((e: Error) => this.logger.error({ tag: this.createTask.name, msg: `${e}` }))\n })\n .catch((e: HttpException | any) => {\n this.logger.error({ tag: this.createTask.name, msg: `${newTask.name} : ${method} : ${e}` })\n this.setTaskDone(cacheKey, FileTaskStatus.ERROR, e.message).catch((e: Error) => this.logger.error({ tag: this.createTask.name, msg: `${e}` }))\n })\n return newTask\n }\n\n async getTasks(userId: number, taskId?: string): Promise<FileTask | FileTask[]> {\n const cacheKey = FilesTasksManager.getCacheKey(userId, taskId)\n if (taskId) {\n const task: FileTask = await this.cache.get(cacheKey)\n if (task) return task\n throw new HttpException('Task not found', HttpStatus.NOT_FOUND)\n } else {\n const keys = await this.cache.keys(cacheKey)\n return keys.length ? await this.cache.mget(keys) : []\n }\n }\n\n async deleteTasks(user: UserModel, taskId?: string): Promise<void> {\n const cacheKey = FilesTasksManager.getCacheKey(user.id, taskId)\n let keys: string[]\n if (taskId) {\n keys = [cacheKey]\n } else {\n keys = await this.cache.keys(cacheKey)\n }\n if (!keys.length) return\n for (const key of keys) {\n const task: FileTask = await this.cache.get(key)\n if (!task || task.status === FileTaskStatus.PENDING) continue\n if (task.props.compressInDirectory === false) {\n // delete task file\n const rPath = path.join(user.tasksPath, task.name)\n removeFiles(rPath).catch((e: Error) => this.logger.error({ tag: this.deleteTasks.name, msg: `${e}` }))\n }\n // clear watcher\n this.stopWatch(key).catch((e: Error) => this.logger.error({ tag: this.deleteTasks.name, msg: `${e}` }))\n // remove from cache\n this.cache.del(key).catch((e: Error) => this.logger.error({ tag: this.deleteTasks.name, msg: `${e}` }))\n }\n }\n\n async downloadArchive(user: UserModel, taskId: string, req: FastifyAuthenticatedRequest, res: FastifyReply): Promise<StreamableFile> {\n const cacheKey = FilesTasksManager.getCacheKey(user.id, taskId)\n const task: FileTask = await this.cache.get(cacheKey)\n if (!task || task.status !== FileTaskStatus.SUCCESS || task.props.compressInDirectory !== false) {\n throw new HttpException('Not applicable', HttpStatus.BAD_REQUEST)\n }\n const rPath = path.join(user.tasksPath, task.name)\n const sendFile = new SendFile(rPath)\n try {\n await sendFile.checks()\n } catch (e) {\n throw new HttpException(e.message, e.httpCode)\n }\n return await sendFile.stream(req, res)\n }\n\n private async storeTask(cacheKey: string, task: FileTask) {\n task.startedAt = currentTimeStamp(null, true)\n task.status = FileTaskStatus.PENDING\n try {\n await this.cache.set(cacheKey, task, CACHE_TASK_TTL)\n } catch (e) {\n this.logger.error({ tag: this.storeTask.name, msg: `${e}` })\n }\n }\n\n private async setTaskDone(cacheKey: string, status: FileTaskStatus, result: any): Promise<void> {\n const task: FileTask = await this.cache.get(cacheKey)\n if (task) {\n task.status = status\n task.endedAt = currentTimeStamp(null, true)\n if (result) {\n if (typeof result === 'string') {\n task.result = result\n } else {\n Object.assign(task, result)\n }\n }\n await this.cache.set(cacheKey, task, CACHE_TASK_TTL)\n }\n await this.stopWatch(cacheKey)\n }\n\n private async updateTask(cacheKey: string, props?: FileTaskProps, task?: Partial<FileTask>): Promise<void> {\n let ftask: FileTask = await this.cache.get(cacheKey)\n if (ftask) {\n if (task) ftask = { ...ftask, ...task }\n if (props) ftask.props = { ...ftask.props, ...props }\n await this.cache.set(cacheKey, ftask, CACHE_TASK_TTL)\n } else {\n await this.stopWatch(cacheKey)\n }\n }\n\n private async startWatch(space: SpaceEnv, taskType: FILE_OPERATION, rPath: string, taskPath?: string): Promise<void> {\n if (!space.task?.cacheKey || space.task.cacheKey in this.tasksWatcher) return\n this.logger.verbose({ tag: this.startWatch.name, msg: `${space.task.cacheKey}` })\n this.updateTask(space.task.cacheKey, space.task?.props, {\n name: fileName(rPath),\n path: taskPath\n }).catch((e: Error) => this.logger.error({ tag: this.startWatch.name, msg: `${e}` }))\n switch (taskType) {\n case FILE_OPERATION.COMPRESS:\n this.tasksWatcher[space.task.cacheKey] = setInterval(async () => this.updateCompressTask(space, rPath), this.watchInterval)\n return\n case FILE_OPERATION.DECOMPRESS:\n this.tasksWatcher[space.task.cacheKey] = setInterval(async () => this.updateDecompressTask(space, rPath), this.watchInterval)\n return\n case FILE_OPERATION.DOWNLOAD:\n this.tasksWatcher[space.task.cacheKey] = setInterval(async () => this.updateDownloadTask(space, rPath), this.watchInterval)\n return\n case FILE_OPERATION.COPY:\n case FILE_OPERATION.MOVE:\n this.tasksWatcher[space.task.cacheKey] = setInterval(async () => this.updateCopyMoveTask(space, rPath), this.watchInterval)\n return\n default:\n this.logger.warn({ tag: this.startWatch.name, msg: `unknown task type ${taskType}` })\n return\n }\n }\n\n private async stopWatch(cacheKey: string): Promise<void> {\n if (!(cacheKey in this.tasksWatcher)) return\n await setTimeout(this.watchInterval)\n clearInterval(this.tasksWatcher[cacheKey])\n delete this.tasksWatcher[cacheKey]\n }\n\n private async updateCompressTask(space: SpaceEnv, rPath: string): Promise<void> {\n try {\n space.task.props.size = await fileSize(rPath)\n await this.updateTask(space.task.cacheKey, space.task.props).catch((e: Error) =>\n this.logger.error({ tag: this.updateCompressTask.name, msg: `${e}` })\n )\n } catch (e) {\n this.logger.error({ tag: this.updateCompressTask.name, msg: `${e}` })\n await this.stopWatch(space.task.cacheKey)\n }\n }\n\n private async updateDecompressTask(space: SpaceEnv, rPath: string): Promise<void> {\n try {\n space.task.props = await countDirEntries(rPath)\n this.updateTask(space.task.cacheKey, space.task.props).catch((e: Error) =>\n this.logger.error({ tag: this.updateDecompressTask.name, msg: `${e}` })\n )\n } catch (e) {\n this.logger.error({ tag: this.updateDecompressTask.name, msg: `${e}` })\n await this.stopWatch(space.task.cacheKey)\n }\n }\n\n private async updateDownloadTask(space: SpaceEnv, rPath: string): Promise<void> {\n try {\n await this.calcSizeAndProgressTask(space, rPath)\n this.updateTask(space.task.cacheKey, space.task.props).catch((e: Error) =>\n this.logger.error({ tag: this.updateDownloadTask.name, msg: `${e}` })\n )\n } catch (e) {\n this.logger.error({ tag: this.updateDownloadTask.name, msg: `${e}` })\n await this.stopWatch(space.task.cacheKey)\n }\n }\n\n private async updateCopyMoveTask(space: SpaceEnv, rPath: string): Promise<void> {\n try {\n if (await isPathIsDir(rPath)) {\n space.task.props = await countDirEntries(rPath)\n } else {\n await this.calcSizeAndProgressTask(space, rPath)\n }\n this.updateTask(space.task.cacheKey, space.task.props).catch((e: Error) =>\n this.logger.error({ tag: this.updateCopyMoveTask.name, msg: `${e}` })\n )\n } catch (e) {\n this.logger.error({ tag: this.updateCopyMoveTask.name, msg: `${e}` })\n await this.stopWatch(space.task.cacheKey)\n }\n }\n\n private async calcSizeAndProgressTask(space: SpaceEnv, rPath: string) {\n space.task.props.size = await fileSize(rPath)\n if (space.task.props.totalSize) {\n space.task.props.progress = (100 * space.task.props.size) / space.task.props.totalSize\n }\n }\n}\n"],"names":["FilesTasksManager","getCacheKey","userId","taskId","CACHE_TASK_PREFIX","createTask","type","user","space","dto","method","crypto","randomUUID","cacheKey","id","newTask","FileTask","dirName","url","fileName","storeTask","task","props","filesMethods","then","data","logger","debug","tag","name","msg","setTaskDone","FileTaskStatus","SUCCESS","catch","e","error","ERROR","message","getTasks","cache","get","HttpException","HttpStatus","NOT_FOUND","keys","length","mget","deleteTasks","key","status","PENDING","compressInDirectory","rPath","path","join","tasksPath","removeFiles","stopWatch","del","downloadArchive","req","res","BAD_REQUEST","sendFile","SendFile","checks","httpCode","stream","startedAt","currentTimeStamp","set","CACHE_TASK_TTL","result","endedAt","Object","assign","updateTask","ftask","startWatch","taskType","taskPath","tasksWatcher","verbose","FILE_OPERATION","COMPRESS","setInterval","updateCompressTask","watchInterval","DECOMPRESS","updateDecompressTask","DOWNLOAD","updateDownloadTask","COPY","MOVE","updateCopyMoveTask","warn","setTimeout","clearInterval","size","fileSize","countDirEntries","calcSizeAndProgressTask","isPathIsDir","totalSize","progress","Logger","FileTaskEvent","on"],"mappings":"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"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/files/services/files-tasks-manager.service.spec.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { SpacesManager } from '../../spaces/services/spaces-manager.service'\nimport { FilesManager } from './files-manager.service'\nimport { FilesMethods } from './files-methods.service'\nimport { FilesTasksManager } from './files-tasks-manager.service'\n\ndescribe(FilesTasksManager.name, () => {\n let filesTasksManager: FilesTasksManager\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n providers: [\n FilesTasksManager,\n { provide: FilesMethods, useValue: {} },\n { provide: FilesManager, useValue: {} },\n { provide: SpacesManager, useValue: {} },\n {\n provide: Cache,\n useValue: {}\n }\n ]\n }).compile()\n\n filesTasksManager = module.get<FilesTasksManager>(FilesTasksManager)\n })\n\n it('should be defined', () => {\n expect(filesTasksManager).toBeDefined()\n })\n})\n"],"names":["describe","FilesTasksManager","name","filesTasksManager","beforeAll","module","Test","createTestingModule","providers","provide","FilesMethods","useValue","FilesManager","SpacesManager","Cache","compile","get","it","expect","toBeDefined"],"mappings":"AAAA;;;;CAIC;;;;yBAEmC;8BACd;sCACQ;qCACD;qCACA;0CACK;AAElCA,SAASC,2CAAiB,CAACC,IAAI,EAAE;IAC/B,IAAIC;IAEJC,UAAU;QACR,MAAMC,SAAwB,MAAMC,aAAI,CAACC,mBAAmB,CAAC;YAC3DC,WAAW;gBACTP,2CAAiB;gBACjB;oBAAEQ,SAASC,iCAAY;oBAAEC,UAAU,CAAC;gBAAE;gBACtC;oBAAEF,SAASG,iCAAY;oBAAED,UAAU,CAAC;gBAAE;gBACtC;oBAAEF,SAASI,mCAAa;oBAAEF,UAAU,CAAC;gBAAE;gBACvC;oBACEF,SAASK,mBAAK;oBACdH,UAAU,CAAC;gBACb;aACD;QACH,GAAGI,OAAO;QAEVZ,oBAAoBE,OAAOW,GAAG,CAAoBf,2CAAiB;IACrE;IAEAgB,GAAG,qBAAqB;QACtBC,OAAOf,mBAAmBgB,WAAW;IACvC;AACF"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/files/services/files-tasks-manager.service.spec.ts"],"sourcesContent":["import { Test, TestingModule } from '@nestjs/testing'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { SpacesManager } from '../../spaces/services/spaces-manager.service'\nimport { FilesManager } from './files-manager.service'\nimport { FilesMethods } from './files-methods.service'\nimport { FilesTasksManager } from './files-tasks-manager.service'\n\ndescribe(FilesTasksManager.name, () => {\n let filesTasksManager: FilesTasksManager\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n providers: [\n FilesTasksManager,\n { provide: FilesMethods, useValue: {} },\n { provide: FilesManager, useValue: {} },\n { provide: SpacesManager, useValue: {} },\n {\n provide: Cache,\n useValue: {}\n }\n ]\n }).compile()\n\n filesTasksManager = module.get<FilesTasksManager>(FilesTasksManager)\n })\n\n it('should be defined', () => {\n expect(filesTasksManager).toBeDefined()\n })\n})\n"],"names":["describe","FilesTasksManager","name","filesTasksManager","beforeAll","module","Test","createTestingModule","providers","provide","FilesMethods","useValue","FilesManager","SpacesManager","Cache","compile","get","it","expect","toBeDefined"],"mappings":";;;;yBAAoC;8BACd;sCACQ;qCACD;qCACA;0CACK;AAElCA,SAASC,2CAAiB,CAACC,IAAI,EAAE;IAC/B,IAAIC;IAEJC,UAAU;QACR,MAAMC,SAAwB,MAAMC,aAAI,CAACC,mBAAmB,CAAC;YAC3DC,WAAW;gBACTP,2CAAiB;gBACjB;oBAAEQ,SAASC,iCAAY;oBAAEC,UAAU,CAAC;gBAAE;gBACtC;oBAAEF,SAASG,iCAAY;oBAAED,UAAU,CAAC;gBAAE;gBACtC;oBAAEF,SAASI,mCAAa;oBAAEF,UAAU,CAAC;gBAAE;gBACvC;oBACEF,SAASK,mBAAK;oBACdH,UAAU,CAAC;gBACb;aACD;QACH,GAAGI,OAAO;QAEVZ,oBAAoBE,OAAOW,GAAG,CAAoBf,2CAAiB;IACrE;IAEAgB,GAAG,qBAAqB;QACtBC,OAAOf,mBAAmBgB,WAAW;IACvC;AACF"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../backend/src/applications/files/utils/doc-textify/adapters/excel.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { promisify } from 'node:util'\nimport sax from 'sax'\nimport { open as openZip, Options, ZipFile } from 'yauzl'\nimport { DocTextifyOptions } from '../interfaces/doc-textify.interfaces'\n\nconst openZipAsync: (path: string, options: Options) => Promise<ZipFile> = promisify(openZip)\n\n/**\n * Parse XLSX files\n */\nexport async function parseExcel(filePath: string, options: DocTextifyOptions): Promise<string> {\n const sheetRegex = /^xl\\/worksheets\\/sheet\\d+\\.xml$/\n const sharedPath = 'xl/sharedStrings.xml'\n const texts: string[] = []\n let hasSheet = false\n\n // Open the ZIP in lazyEntries mode\n const zipFile = await openZipAsync(filePath, { lazyEntries: true })\n\n return new Promise<string>((resolve, reject) => {\n zipFile.readEntry()\n\n zipFile.on('entry', (entry) => {\n const path = entry.fileName\n\n // Only process sheets and sharedStrings\n if (!sheetRegex.test(path) && path !== sharedPath) {\n zipFile.readEntry() // <–– call directly, no unused-expression\n return\n }\n\n if (sheetRegex.test(path)) {\n hasSheet = true\n }\n\n zipFile.openReadStream(entry, (err, readStream) => {\n if (err) {\n zipFile.close()\n return reject(err)\n }\n\n const parser = sax.createStream(true)\n let buffer = ''\n\n parser.on('error', (parseErr) => {\n readStream.destroy()\n zipFile.close()\n reject(parseErr)\n })\n\n parser.on('opentag', (node) => {\n if (node.name === 't') buffer = ''\n })\n parser.on('text', (txt) => {\n buffer += txt\n })\n parser.on('closetag', (name) => {\n if (name === 't') {\n texts.push(buffer)\n }\n })\n\n readStream\n .on('error', (streamErr) => {\n zipFile.close()\n reject(streamErr)\n })\n .on('end', () => {\n zipFile.readEntry()\n })\n .pipe(parser)\n })\n })\n\n zipFile.on('end', () => {\n zipFile.close()\n // No sheets found → corrupted file\n if (!hasSheet) {\n return reject(new Error('file seems to be corrupted'))\n }\n resolve(texts.join(options.newlineDelimiter))\n })\n\n zipFile.on('error', (zipErr) => {\n zipFile.close()\n reject(zipErr)\n })\n })\n}\n"],"names":["parseExcel","openZipAsync","promisify","openZip","filePath","options","sheetRegex","sharedPath","texts","hasSheet","zipFile","lazyEntries","Promise","resolve","reject","readEntry","on","entry","path","fileName","test","openReadStream","err","readStream","close","parser","sax","createStream","buffer","parseErr","destroy","node","name","txt","push","streamErr","pipe","Error","join","newlineDelimiter","zipErr"],"mappings":"AAAA;;;;CAIC;;;;+BAYqBA;;;eAAAA;;;0BAVI;4DACV;uBACkC;;;;;;AAGlD,MAAMC,eAAqEC,IAAAA,mBAAS,EAACC,WAAO;AAKrF,eAAeH,WAAWI,QAAgB,EAAEC,OAA0B;IAC3E,MAAMC,aAAa;IACnB,MAAMC,aAAa;IACnB,MAAMC,QAAkB,EAAE;IAC1B,IAAIC,WAAW;IAEf,mCAAmC;IACnC,MAAMC,UAAU,MAAMT,aAAaG,UAAU;QAAEO,aAAa;IAAK;IAEjE,OAAO,IAAIC,QAAgB,CAACC,SAASC;QACnCJ,QAAQK,SAAS;QAEjBL,QAAQM,EAAE,CAAC,SAAS,CAACC;YACnB,MAAMC,OAAOD,MAAME,QAAQ;YAE3B,wCAAwC;YACxC,IAAI,CAACb,WAAWc,IAAI,CAACF,SAASA,SAASX,YAAY;gBACjDG,QAAQK,SAAS,IAAG,0CAA0C;gBAC9D;YACF;YAEA,IAAIT,WAAWc,IAAI,CAACF,OAAO;gBACzBT,WAAW;YACb;YAEAC,QAAQW,cAAc,CAACJ,OAAO,CAACK,KAAKC;gBAClC,IAAID,KAAK;oBACPZ,QAAQc,KAAK;oBACb,OAAOV,OAAOQ;gBAChB;gBAEA,MAAMG,SAASC,YAAG,CAACC,YAAY,CAAC;gBAChC,IAAIC,SAAS;gBAEbH,OAAOT,EAAE,CAAC,SAAS,CAACa;oBAClBN,WAAWO,OAAO;oBAClBpB,QAAQc,KAAK;oBACbV,OAAOe;gBACT;gBAEAJ,OAAOT,EAAE,CAAC,WAAW,CAACe;oBACpB,IAAIA,KAAKC,IAAI,KAAK,KAAKJ,SAAS;gBAClC;gBACAH,OAAOT,EAAE,CAAC,QAAQ,CAACiB;oBACjBL,UAAUK;gBACZ;gBACAR,OAAOT,EAAE,CAAC,YAAY,CAACgB;oBACrB,IAAIA,SAAS,KAAK;wBAChBxB,MAAM0B,IAAI,CAACN;oBACb;gBACF;gBAEAL,WACGP,EAAE,CAAC,SAAS,CAACmB;oBACZzB,QAAQc,KAAK;oBACbV,OAAOqB;gBACT,GACCnB,EAAE,CAAC,OAAO;oBACTN,QAAQK,SAAS;gBACnB,GACCqB,IAAI,CAACX;YACV;QACF;QAEAf,QAAQM,EAAE,CAAC,OAAO;YAChBN,QAAQc,KAAK;YACb,mCAAmC;YACnC,IAAI,CAACf,UAAU;gBACb,OAAOK,OAAO,IAAIuB,MAAM;YAC1B;YACAxB,QAAQL,MAAM8B,IAAI,CAACjC,QAAQkC,gBAAgB;QAC7C;QAEA7B,QAAQM,EAAE,CAAC,SAAS,CAACwB;YACnB9B,QAAQc,KAAK;YACbV,OAAO0B;QACT;IACF;AACF"}
1
+ {"version":3,"sources":["../../../../../../../backend/src/applications/files/utils/doc-textify/adapters/excel.ts"],"sourcesContent":["import { promisify } from 'node:util'\nimport sax from 'sax'\nimport { open as openZip, Options, ZipFile } from 'yauzl'\nimport { DocTextifyOptions } from '../interfaces/doc-textify.interfaces'\n\nconst openZipAsync: (path: string, options: Options) => Promise<ZipFile> = promisify(openZip)\n\n/**\n * Parse XLSX files\n */\nexport async function parseExcel(filePath: string, options: DocTextifyOptions): Promise<string> {\n const sheetRegex = /^xl\\/worksheets\\/sheet\\d+\\.xml$/\n const sharedPath = 'xl/sharedStrings.xml'\n const texts: string[] = []\n let hasSheet = false\n\n // Open the ZIP in lazyEntries mode\n const zipFile = await openZipAsync(filePath, { lazyEntries: true })\n\n return new Promise<string>((resolve, reject) => {\n zipFile.readEntry()\n\n zipFile.on('entry', (entry) => {\n const path = entry.fileName\n\n // Only process sheets and sharedStrings\n if (!sheetRegex.test(path) && path !== sharedPath) {\n zipFile.readEntry() // <–– call directly, no unused-expression\n return\n }\n\n if (sheetRegex.test(path)) {\n hasSheet = true\n }\n\n zipFile.openReadStream(entry, (err, readStream) => {\n if (err) {\n zipFile.close()\n return reject(err)\n }\n\n const parser = sax.createStream(true)\n let buffer = ''\n\n parser.on('error', (parseErr) => {\n readStream.destroy()\n zipFile.close()\n reject(parseErr)\n })\n\n parser.on('opentag', (node) => {\n if (node.name === 't') buffer = ''\n })\n parser.on('text', (txt) => {\n buffer += txt\n })\n parser.on('closetag', (name) => {\n if (name === 't') {\n texts.push(buffer)\n }\n })\n\n readStream\n .on('error', (streamErr) => {\n zipFile.close()\n reject(streamErr)\n })\n .on('end', () => {\n zipFile.readEntry()\n })\n .pipe(parser)\n })\n })\n\n zipFile.on('end', () => {\n zipFile.close()\n // No sheets found → corrupted file\n if (!hasSheet) {\n return reject(new Error('file seems to be corrupted'))\n }\n resolve(texts.join(options.newlineDelimiter))\n })\n\n zipFile.on('error', (zipErr) => {\n zipFile.close()\n reject(zipErr)\n })\n })\n}\n"],"names":["parseExcel","openZipAsync","promisify","openZip","filePath","options","sheetRegex","sharedPath","texts","hasSheet","zipFile","lazyEntries","Promise","resolve","reject","readEntry","on","entry","path","fileName","test","openReadStream","err","readStream","close","parser","sax","createStream","buffer","parseErr","destroy","node","name","txt","push","streamErr","pipe","Error","join","newlineDelimiter","zipErr"],"mappings":";;;;+BAUsBA;;;eAAAA;;;0BAVI;4DACV;uBACkC;;;;;;AAGlD,MAAMC,eAAqEC,IAAAA,mBAAS,EAACC,WAAO;AAKrF,eAAeH,WAAWI,QAAgB,EAAEC,OAA0B;IAC3E,MAAMC,aAAa;IACnB,MAAMC,aAAa;IACnB,MAAMC,QAAkB,EAAE;IAC1B,IAAIC,WAAW;IAEf,mCAAmC;IACnC,MAAMC,UAAU,MAAMT,aAAaG,UAAU;QAAEO,aAAa;IAAK;IAEjE,OAAO,IAAIC,QAAgB,CAACC,SAASC;QACnCJ,QAAQK,SAAS;QAEjBL,QAAQM,EAAE,CAAC,SAAS,CAACC;YACnB,MAAMC,OAAOD,MAAME,QAAQ;YAE3B,wCAAwC;YACxC,IAAI,CAACb,WAAWc,IAAI,CAACF,SAASA,SAASX,YAAY;gBACjDG,QAAQK,SAAS,IAAG,0CAA0C;gBAC9D;YACF;YAEA,IAAIT,WAAWc,IAAI,CAACF,OAAO;gBACzBT,WAAW;YACb;YAEAC,QAAQW,cAAc,CAACJ,OAAO,CAACK,KAAKC;gBAClC,IAAID,KAAK;oBACPZ,QAAQc,KAAK;oBACb,OAAOV,OAAOQ;gBAChB;gBAEA,MAAMG,SAASC,YAAG,CAACC,YAAY,CAAC;gBAChC,IAAIC,SAAS;gBAEbH,OAAOT,EAAE,CAAC,SAAS,CAACa;oBAClBN,WAAWO,OAAO;oBAClBpB,QAAQc,KAAK;oBACbV,OAAOe;gBACT;gBAEAJ,OAAOT,EAAE,CAAC,WAAW,CAACe;oBACpB,IAAIA,KAAKC,IAAI,KAAK,KAAKJ,SAAS;gBAClC;gBACAH,OAAOT,EAAE,CAAC,QAAQ,CAACiB;oBACjBL,UAAUK;gBACZ;gBACAR,OAAOT,EAAE,CAAC,YAAY,CAACgB;oBACrB,IAAIA,SAAS,KAAK;wBAChBxB,MAAM0B,IAAI,CAACN;oBACb;gBACF;gBAEAL,WACGP,EAAE,CAAC,SAAS,CAACmB;oBACZzB,QAAQc,KAAK;oBACbV,OAAOqB;gBACT,GACCnB,EAAE,CAAC,OAAO;oBACTN,QAAQK,SAAS;gBACnB,GACCqB,IAAI,CAACX;YACV;QACF;QAEAf,QAAQM,EAAE,CAAC,OAAO;YAChBN,QAAQc,KAAK;YACb,mCAAmC;YACnC,IAAI,CAACf,UAAU;gBACb,OAAOK,OAAO,IAAIuB,MAAM;YAC1B;YACAxB,QAAQL,MAAM8B,IAAI,CAACjC,QAAQkC,gBAAgB;QAC7C;QAEA7B,QAAQM,EAAE,CAAC,SAAS,CAACwB;YACnB9B,QAAQc,KAAK;YACbV,OAAO0B;QACT;IACF;AACF"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../backend/src/applications/files/utils/doc-textify/adapters/html.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport fs from 'fs/promises'\nimport { compile } from 'html-to-text'\n\nconst htmlConverter = compile({ wordwrap: false, preserveNewlines: false })\n\nexport async function parseHtml(filePath: string): Promise<string> {\n const content = await fs.readFile(filePath, { encoding: 'utf8' })\n return htmlConverter(content)\n}\n"],"names":["parseHtml","htmlConverter","compile","wordwrap","preserveNewlines","filePath","content","fs","readFile","encoding"],"mappings":"AAAA;;;;CAIC;;;;+BAOqBA;;;eAAAA;;;iEALP;4BACS;;;;;;AAExB,MAAMC,gBAAgBC,IAAAA,mBAAO,EAAC;IAAEC,UAAU;IAAOC,kBAAkB;AAAM;AAElE,eAAeJ,UAAUK,QAAgB;IAC9C,MAAMC,UAAU,MAAMC,iBAAE,CAACC,QAAQ,CAACH,UAAU;QAAEI,UAAU;IAAO;IAC/D,OAAOR,cAAcK;AACvB"}
1
+ {"version":3,"sources":["../../../../../../../backend/src/applications/files/utils/doc-textify/adapters/html.ts"],"sourcesContent":["import fs from 'fs/promises'\nimport { compile } from 'html-to-text'\n\nconst htmlConverter = compile({ wordwrap: false, preserveNewlines: false })\n\nexport async function parseHtml(filePath: string): Promise<string> {\n const content = await fs.readFile(filePath, { encoding: 'utf8' })\n return htmlConverter(content)\n}\n"],"names":["parseHtml","htmlConverter","compile","wordwrap","preserveNewlines","filePath","content","fs","readFile","encoding"],"mappings":";;;;+BAKsBA;;;eAAAA;;;iEALP;4BACS;;;;;;AAExB,MAAMC,gBAAgBC,IAAAA,mBAAO,EAAC;IAAEC,UAAU;IAAOC,kBAAkB;AAAM;AAElE,eAAeJ,UAAUK,QAAgB;IAC9C,MAAMC,UAAU,MAAMC,iBAAE,CAACC,QAAQ,CAACH,UAAU;QAAEI,UAAU;IAAO;IAC/D,OAAOR,cAAcK;AACvB"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../backend/src/applications/files/utils/doc-textify/adapters/open-office.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\nimport { promisify } from 'node:util'\nimport sax from 'sax'\nimport { Entry, open as openZip, Options, ZipFile } from 'yauzl'\nimport { DocTextifyOptions } from '../interfaces/doc-textify.interfaces'\n\nconst openZipAsync: (path: string, options: Options) => Promise<ZipFile> = promisify(openZip)\n\n/**\n * Parses ODT/ODS/ODP\n */\nexport async function parseOpenOffice(filePath: string, options: DocTextifyOptions): Promise<string> {\n // Paths to process: main content and any embedded object content\n const mainPath = /^content\\.xml$/\n const objectPath = /^Object \\d+\\/content\\.xml$/\n\n const texts: string[] = []\n const notes: string[] = []\n let hasMain = false\n\n // Open the package as a ZIP in lazyEntries mode\n const zipFile = await openZipAsync(filePath, { lazyEntries: true })\n\n return new Promise<string>((resolve, reject) => {\n zipFile.readEntry()\n\n zipFile.on('entry', (entry: Entry) => {\n const path = entry.fileName\n\n // Only process content.xml or object/.../content.xml\n const isMain = mainPath.test(path)\n const isObject = objectPath.test(path)\n if (!isMain && !isObject) {\n zipFile.readEntry()\n return\n }\n\n if (isMain) {\n hasMain = true\n }\n\n zipFile.openReadStream(entry, (err, readStream) => {\n if (err) {\n zipFile.close()\n return reject(err)\n }\n\n const parser = sax.createStream(true)\n let buffer = ''\n let reading = false\n\n parser.on('error', (parseErr) => {\n readStream.destroy()\n zipFile.close()\n reject(parseErr)\n })\n\n parser.on('opentag', (node) => {\n // Start buffering when entering a paragraph or header\n if (node.name === 'text:p' || node.name === 'text:h') {\n reading = true\n buffer = ''\n }\n })\n\n parser.on('text', (txt) => {\n if (reading) {\n buffer += txt\n }\n })\n\n parser.on('closetag', (name) => {\n // On closing a paragraph or header, store the text\n if ((name === 'text:p' || name === 'text:h') && reading) {\n if (isMain) {\n texts.push(buffer)\n } else {\n notes.push(buffer)\n }\n reading = false\n }\n })\n\n readStream\n .on('error', (streamErr) => {\n zipFile.close()\n reject(streamErr)\n })\n .on('end', () => {\n zipFile.readEntry()\n })\n .pipe(parser)\n })\n })\n\n zipFile.on('end', () => {\n zipFile.close()\n // Ensure main content was found\n if (!hasMain) {\n return reject(new Error('file seems to be corrupted'))\n }\n // Optionally append notes at the end\n const all = texts.concat(notes)\n resolve(all.join(options.newlineDelimiter))\n })\n\n zipFile.on('error', (zipErr) => {\n zipFile.close()\n reject(zipErr)\n })\n })\n}\n"],"names":["parseOpenOffice","openZipAsync","promisify","openZip","filePath","options","mainPath","objectPath","texts","notes","hasMain","zipFile","lazyEntries","Promise","resolve","reject","readEntry","on","entry","path","fileName","isMain","test","isObject","openReadStream","err","readStream","close","parser","sax","createStream","buffer","reading","parseErr","destroy","node","name","txt","push","streamErr","pipe","Error","all","concat","join","newlineDelimiter","zipErr"],"mappings":"AAAA;;;;CAIC;;;;+BAWqBA;;;eAAAA;;;0BAVI;4DACV;uBACyC;;;;;;AAGzD,MAAMC,eAAqEC,IAAAA,mBAAS,EAACC,WAAO;AAKrF,eAAeH,gBAAgBI,QAAgB,EAAEC,OAA0B;IAChF,iEAAiE;IACjE,MAAMC,WAAW;IACjB,MAAMC,aAAa;IAEnB,MAAMC,QAAkB,EAAE;IAC1B,MAAMC,QAAkB,EAAE;IAC1B,IAAIC,UAAU;IAEd,gDAAgD;IAChD,MAAMC,UAAU,MAAMV,aAAaG,UAAU;QAAEQ,aAAa;IAAK;IAEjE,OAAO,IAAIC,QAAgB,CAACC,SAASC;QACnCJ,QAAQK,SAAS;QAEjBL,QAAQM,EAAE,CAAC,SAAS,CAACC;YACnB,MAAMC,OAAOD,MAAME,QAAQ;YAE3B,qDAAqD;YACrD,MAAMC,SAASf,SAASgB,IAAI,CAACH;YAC7B,MAAMI,WAAWhB,WAAWe,IAAI,CAACH;YACjC,IAAI,CAACE,UAAU,CAACE,UAAU;gBACxBZ,QAAQK,SAAS;gBACjB;YACF;YAEA,IAAIK,QAAQ;gBACVX,UAAU;YACZ;YAEAC,QAAQa,cAAc,CAACN,OAAO,CAACO,KAAKC;gBAClC,IAAID,KAAK;oBACPd,QAAQgB,KAAK;oBACb,OAAOZ,OAAOU;gBAChB;gBAEA,MAAMG,SAASC,YAAG,CAACC,YAAY,CAAC;gBAChC,IAAIC,SAAS;gBACb,IAAIC,UAAU;gBAEdJ,OAAOX,EAAE,CAAC,SAAS,CAACgB;oBAClBP,WAAWQ,OAAO;oBAClBvB,QAAQgB,KAAK;oBACbZ,OAAOkB;gBACT;gBAEAL,OAAOX,EAAE,CAAC,WAAW,CAACkB;oBACpB,sDAAsD;oBACtD,IAAIA,KAAKC,IAAI,KAAK,YAAYD,KAAKC,IAAI,KAAK,UAAU;wBACpDJ,UAAU;wBACVD,SAAS;oBACX;gBACF;gBAEAH,OAAOX,EAAE,CAAC,QAAQ,CAACoB;oBACjB,IAAIL,SAAS;wBACXD,UAAUM;oBACZ;gBACF;gBAEAT,OAAOX,EAAE,CAAC,YAAY,CAACmB;oBACrB,mDAAmD;oBACnD,IAAI,AAACA,CAAAA,SAAS,YAAYA,SAAS,QAAO,KAAMJ,SAAS;wBACvD,IAAIX,QAAQ;4BACVb,MAAM8B,IAAI,CAACP;wBACb,OAAO;4BACLtB,MAAM6B,IAAI,CAACP;wBACb;wBACAC,UAAU;oBACZ;gBACF;gBAEAN,WACGT,EAAE,CAAC,SAAS,CAACsB;oBACZ5B,QAAQgB,KAAK;oBACbZ,OAAOwB;gBACT,GACCtB,EAAE,CAAC,OAAO;oBACTN,QAAQK,SAAS;gBACnB,GACCwB,IAAI,CAACZ;YACV;QACF;QAEAjB,QAAQM,EAAE,CAAC,OAAO;YAChBN,QAAQgB,KAAK;YACb,gCAAgC;YAChC,IAAI,CAACjB,SAAS;gBACZ,OAAOK,OAAO,IAAI0B,MAAM;YAC1B;YACA,qCAAqC;YACrC,MAAMC,MAAMlC,MAAMmC,MAAM,CAAClC;YACzBK,QAAQ4B,IAAIE,IAAI,CAACvC,QAAQwC,gBAAgB;QAC3C;QAEAlC,QAAQM,EAAE,CAAC,SAAS,CAAC6B;YACnBnC,QAAQgB,KAAK;YACbZ,OAAO+B;QACT;IACF;AACF"}
1
+ {"version":3,"sources":["../../../../../../../backend/src/applications/files/utils/doc-textify/adapters/open-office.ts"],"sourcesContent":["import { promisify } from 'node:util'\nimport sax from 'sax'\nimport { Entry, open as openZip, Options, ZipFile } from 'yauzl'\nimport { DocTextifyOptions } from '../interfaces/doc-textify.interfaces'\n\nconst openZipAsync: (path: string, options: Options) => Promise<ZipFile> = promisify(openZip)\n\n/**\n * Parses ODT/ODS/ODP\n */\nexport async function parseOpenOffice(filePath: string, options: DocTextifyOptions): Promise<string> {\n // Paths to process: main content and any embedded object content\n const mainPath = /^content\\.xml$/\n const objectPath = /^Object \\d+\\/content\\.xml$/\n\n const texts: string[] = []\n const notes: string[] = []\n let hasMain = false\n\n // Open the package as a ZIP in lazyEntries mode\n const zipFile = await openZipAsync(filePath, { lazyEntries: true })\n\n return new Promise<string>((resolve, reject) => {\n zipFile.readEntry()\n\n zipFile.on('entry', (entry: Entry) => {\n const path = entry.fileName\n\n // Only process content.xml or object/.../content.xml\n const isMain = mainPath.test(path)\n const isObject = objectPath.test(path)\n if (!isMain && !isObject) {\n zipFile.readEntry()\n return\n }\n\n if (isMain) {\n hasMain = true\n }\n\n zipFile.openReadStream(entry, (err, readStream) => {\n if (err) {\n zipFile.close()\n return reject(err)\n }\n\n const parser = sax.createStream(true)\n let buffer = ''\n let reading = false\n\n parser.on('error', (parseErr) => {\n readStream.destroy()\n zipFile.close()\n reject(parseErr)\n })\n\n parser.on('opentag', (node) => {\n // Start buffering when entering a paragraph or header\n if (node.name === 'text:p' || node.name === 'text:h') {\n reading = true\n buffer = ''\n }\n })\n\n parser.on('text', (txt) => {\n if (reading) {\n buffer += txt\n }\n })\n\n parser.on('closetag', (name) => {\n // On closing a paragraph or header, store the text\n if ((name === 'text:p' || name === 'text:h') && reading) {\n if (isMain) {\n texts.push(buffer)\n } else {\n notes.push(buffer)\n }\n reading = false\n }\n })\n\n readStream\n .on('error', (streamErr) => {\n zipFile.close()\n reject(streamErr)\n })\n .on('end', () => {\n zipFile.readEntry()\n })\n .pipe(parser)\n })\n })\n\n zipFile.on('end', () => {\n zipFile.close()\n // Ensure main content was found\n if (!hasMain) {\n return reject(new Error('file seems to be corrupted'))\n }\n // Optionally append notes at the end\n const all = texts.concat(notes)\n resolve(all.join(options.newlineDelimiter))\n })\n\n zipFile.on('error', (zipErr) => {\n zipFile.close()\n reject(zipErr)\n })\n })\n}\n"],"names":["parseOpenOffice","openZipAsync","promisify","openZip","filePath","options","mainPath","objectPath","texts","notes","hasMain","zipFile","lazyEntries","Promise","resolve","reject","readEntry","on","entry","path","fileName","isMain","test","isObject","openReadStream","err","readStream","close","parser","sax","createStream","buffer","reading","parseErr","destroy","node","name","txt","push","streamErr","pipe","Error","all","concat","join","newlineDelimiter","zipErr"],"mappings":";;;;+BAUsBA;;;eAAAA;;;0BAVI;4DACV;uBACyC;;;;;;AAGzD,MAAMC,eAAqEC,IAAAA,mBAAS,EAACC,WAAO;AAKrF,eAAeH,gBAAgBI,QAAgB,EAAEC,OAA0B;IAChF,iEAAiE;IACjE,MAAMC,WAAW;IACjB,MAAMC,aAAa;IAEnB,MAAMC,QAAkB,EAAE;IAC1B,MAAMC,QAAkB,EAAE;IAC1B,IAAIC,UAAU;IAEd,gDAAgD;IAChD,MAAMC,UAAU,MAAMV,aAAaG,UAAU;QAAEQ,aAAa;IAAK;IAEjE,OAAO,IAAIC,QAAgB,CAACC,SAASC;QACnCJ,QAAQK,SAAS;QAEjBL,QAAQM,EAAE,CAAC,SAAS,CAACC;YACnB,MAAMC,OAAOD,MAAME,QAAQ;YAE3B,qDAAqD;YACrD,MAAMC,SAASf,SAASgB,IAAI,CAACH;YAC7B,MAAMI,WAAWhB,WAAWe,IAAI,CAACH;YACjC,IAAI,CAACE,UAAU,CAACE,UAAU;gBACxBZ,QAAQK,SAAS;gBACjB;YACF;YAEA,IAAIK,QAAQ;gBACVX,UAAU;YACZ;YAEAC,QAAQa,cAAc,CAACN,OAAO,CAACO,KAAKC;gBAClC,IAAID,KAAK;oBACPd,QAAQgB,KAAK;oBACb,OAAOZ,OAAOU;gBAChB;gBAEA,MAAMG,SAASC,YAAG,CAACC,YAAY,CAAC;gBAChC,IAAIC,SAAS;gBACb,IAAIC,UAAU;gBAEdJ,OAAOX,EAAE,CAAC,SAAS,CAACgB;oBAClBP,WAAWQ,OAAO;oBAClBvB,QAAQgB,KAAK;oBACbZ,OAAOkB;gBACT;gBAEAL,OAAOX,EAAE,CAAC,WAAW,CAACkB;oBACpB,sDAAsD;oBACtD,IAAIA,KAAKC,IAAI,KAAK,YAAYD,KAAKC,IAAI,KAAK,UAAU;wBACpDJ,UAAU;wBACVD,SAAS;oBACX;gBACF;gBAEAH,OAAOX,EAAE,CAAC,QAAQ,CAACoB;oBACjB,IAAIL,SAAS;wBACXD,UAAUM;oBACZ;gBACF;gBAEAT,OAAOX,EAAE,CAAC,YAAY,CAACmB;oBACrB,mDAAmD;oBACnD,IAAI,AAACA,CAAAA,SAAS,YAAYA,SAAS,QAAO,KAAMJ,SAAS;wBACvD,IAAIX,QAAQ;4BACVb,MAAM8B,IAAI,CAACP;wBACb,OAAO;4BACLtB,MAAM6B,IAAI,CAACP;wBACb;wBACAC,UAAU;oBACZ;gBACF;gBAEAN,WACGT,EAAE,CAAC,SAAS,CAACsB;oBACZ5B,QAAQgB,KAAK;oBACbZ,OAAOwB;gBACT,GACCtB,EAAE,CAAC,OAAO;oBACTN,QAAQK,SAAS;gBACnB,GACCwB,IAAI,CAACZ;YACV;QACF;QAEAjB,QAAQM,EAAE,CAAC,OAAO;YAChBN,QAAQgB,KAAK;YACb,gCAAgC;YAChC,IAAI,CAACjB,SAAS;gBACZ,OAAOK,OAAO,IAAI0B,MAAM;YAC1B;YACA,qCAAqC;YACrC,MAAMC,MAAMlC,MAAMmC,MAAM,CAAClC;YACzBK,QAAQ4B,IAAIE,IAAI,CAACvC,QAAQwC,gBAAgB;QAC3C;QAEAlC,QAAQM,EAAE,CAAC,SAAS,CAAC6B;YACnBnC,QAAQgB,KAAK;YACbZ,OAAO+B;QACT;IACF;AACF"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../backend/src/applications/files/utils/doc-textify/adapters/pdf.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\nimport { readFile } from 'node:fs/promises'\nimport { getDocumentProxy } from 'unpdf'\nimport type { PDFDocumentProxy } from 'unpdf/pdfjs'\nimport type { DocTextifyOptions } from '../interfaces/doc-textify.interfaces'\n\n// Type guard to filter true text items\ninterface TextItem {\n str: string\n transform: [number, number, number, number, number, number]\n}\nfunction isTextItem(item: any): item is TextItem {\n return typeof item.str === 'string' && Array.isArray(item.transform)\n}\n\nconst ignorePdfBadFormat = new Set([0x0000, 0x0001])\n\n/** Parse PDF files */\nexport async function parsePdf(filePath: string, options: DocTextifyOptions): Promise<string> {\n let doc: PDFDocumentProxy\n const buffer = await readFile(filePath)\n\n try {\n // Load the document, allowing system fonts as fallback\n const doc = await getDocumentProxy(new Uint8Array(buffer), {\n disableFontFace: true,\n verbosity: 0\n })\n const fragments: string[] = []\n let lastY: number | undefined = undefined\n\n for (let pageNum = 1; pageNum <= doc.numPages; pageNum++) {\n const page = await doc.getPage(pageNum)\n const { items } = await page.getTextContent()\n\n for (const item of items) {\n // Skip non-text items\n if (!isTextItem(item)) continue\n\n const currentY = item.transform[5]\n if (lastY !== undefined && currentY !== lastY) {\n fragments.push(options.newlineDelimiter)\n }\n\n fragments.push(item.str)\n lastY = currentY\n }\n page.cleanup()\n }\n\n const content = fragments.join('')\n if (ignorePdfBadFormat.has(content.charCodeAt(0))) {\n return ''\n }\n return content\n } catch (e) {\n if (options.outputErrorToConsole) {\n console.error('Error parsing PDF:', e)\n }\n throw e\n } finally {\n doc?.destroy().catch((e: Error) => console.error(e))\n }\n}\n"],"names":["parsePdf","isTextItem","item","str","Array","isArray","transform","ignorePdfBadFormat","Set","filePath","options","doc","buffer","readFile","getDocumentProxy","Uint8Array","disableFontFace","verbosity","fragments","lastY","undefined","pageNum","numPages","page","getPage","items","getTextContent","currentY","push","newlineDelimiter","cleanup","content","join","has","charCodeAt","e","outputErrorToConsole","console","error","destroy","catch"],"mappings":"AAAA;;;;CAIC;;;;+BAkBqBA;;;eAAAA;;;0BAjBG;uBACQ;AASjC,SAASC,WAAWC,IAAS;IAC3B,OAAO,OAAOA,KAAKC,GAAG,KAAK,YAAYC,MAAMC,OAAO,CAACH,KAAKI,SAAS;AACrE;AAEA,MAAMC,qBAAqB,IAAIC,IAAI;IAAC;IAAQ;CAAO;AAG5C,eAAeR,SAASS,QAAgB,EAAEC,OAA0B;IACzE,IAAIC;IACJ,MAAMC,SAAS,MAAMC,IAAAA,kBAAQ,EAACJ;IAE9B,IAAI;QACF,uDAAuD;QACvD,MAAME,MAAM,MAAMG,IAAAA,uBAAgB,EAAC,IAAIC,WAAWH,SAAS;YACzDI,iBAAiB;YACjBC,WAAW;QACb;QACA,MAAMC,YAAsB,EAAE;QAC9B,IAAIC,QAA4BC;QAEhC,IAAK,IAAIC,UAAU,GAAGA,WAAWV,IAAIW,QAAQ,EAAED,UAAW;YACxD,MAAME,OAAO,MAAMZ,IAAIa,OAAO,CAACH;YAC/B,MAAM,EAAEI,KAAK,EAAE,GAAG,MAAMF,KAAKG,cAAc;YAE3C,KAAK,MAAMxB,QAAQuB,MAAO;gBACxB,sBAAsB;gBACtB,IAAI,CAACxB,WAAWC,OAAO;gBAEvB,MAAMyB,WAAWzB,KAAKI,SAAS,CAAC,EAAE;gBAClC,IAAIa,UAAUC,aAAaO,aAAaR,OAAO;oBAC7CD,UAAUU,IAAI,CAAClB,QAAQmB,gBAAgB;gBACzC;gBAEAX,UAAUU,IAAI,CAAC1B,KAAKC,GAAG;gBACvBgB,QAAQQ;YACV;YACAJ,KAAKO,OAAO;QACd;QAEA,MAAMC,UAAUb,UAAUc,IAAI,CAAC;QAC/B,IAAIzB,mBAAmB0B,GAAG,CAACF,QAAQG,UAAU,CAAC,KAAK;YACjD,OAAO;QACT;QACA,OAAOH;IACT,EAAE,OAAOI,GAAG;QACV,IAAIzB,QAAQ0B,oBAAoB,EAAE;YAChCC,QAAQC,KAAK,CAAC,sBAAsBH;QACtC;QACA,MAAMA;IACR,SAAU;QACRxB,KAAK4B,UAAUC,MAAM,CAACL,IAAaE,QAAQC,KAAK,CAACH;IACnD;AACF"}
1
+ {"version":3,"sources":["../../../../../../../backend/src/applications/files/utils/doc-textify/adapters/pdf.ts"],"sourcesContent":["import { readFile } from 'node:fs/promises'\nimport { getDocumentProxy } from 'unpdf'\nimport type { PDFDocumentProxy } from 'unpdf/pdfjs'\nimport type { DocTextifyOptions } from '../interfaces/doc-textify.interfaces'\n\n// Type guard to filter true text items\ninterface TextItem {\n str: string\n transform: [number, number, number, number, number, number]\n}\nfunction isTextItem(item: any): item is TextItem {\n return typeof item.str === 'string' && Array.isArray(item.transform)\n}\n\nconst ignorePdfBadFormat = new Set([0x0000, 0x0001])\n\n/** Parse PDF files */\nexport async function parsePdf(filePath: string, options: DocTextifyOptions): Promise<string> {\n let doc: PDFDocumentProxy\n const buffer = await readFile(filePath)\n\n try {\n // Load the document, allowing system fonts as fallback\n const doc = await getDocumentProxy(new Uint8Array(buffer), {\n disableFontFace: true,\n verbosity: 0\n })\n const fragments: string[] = []\n let lastY: number | undefined = undefined\n\n for (let pageNum = 1; pageNum <= doc.numPages; pageNum++) {\n const page = await doc.getPage(pageNum)\n const { items } = await page.getTextContent()\n\n for (const item of items) {\n // Skip non-text items\n if (!isTextItem(item)) continue\n\n const currentY = item.transform[5]\n if (lastY !== undefined && currentY !== lastY) {\n fragments.push(options.newlineDelimiter)\n }\n\n fragments.push(item.str)\n lastY = currentY\n }\n page.cleanup()\n }\n\n const content = fragments.join('')\n if (ignorePdfBadFormat.has(content.charCodeAt(0))) {\n return ''\n }\n return content\n } catch (e) {\n if (options.outputErrorToConsole) {\n console.error('Error parsing PDF:', e)\n }\n throw e\n } finally {\n doc?.destroy().catch((e: Error) => console.error(e))\n }\n}\n"],"names":["parsePdf","isTextItem","item","str","Array","isArray","transform","ignorePdfBadFormat","Set","filePath","options","doc","buffer","readFile","getDocumentProxy","Uint8Array","disableFontFace","verbosity","fragments","lastY","undefined","pageNum","numPages","page","getPage","items","getTextContent","currentY","push","newlineDelimiter","cleanup","content","join","has","charCodeAt","e","outputErrorToConsole","console","error","destroy","catch"],"mappings":";;;;+BAiBsBA;;;eAAAA;;;0BAjBG;uBACQ;AASjC,SAASC,WAAWC,IAAS;IAC3B,OAAO,OAAOA,KAAKC,GAAG,KAAK,YAAYC,MAAMC,OAAO,CAACH,KAAKI,SAAS;AACrE;AAEA,MAAMC,qBAAqB,IAAIC,IAAI;IAAC;IAAQ;CAAO;AAG5C,eAAeR,SAASS,QAAgB,EAAEC,OAA0B;IACzE,IAAIC;IACJ,MAAMC,SAAS,MAAMC,IAAAA,kBAAQ,EAACJ;IAE9B,IAAI;QACF,uDAAuD;QACvD,MAAME,MAAM,MAAMG,IAAAA,uBAAgB,EAAC,IAAIC,WAAWH,SAAS;YACzDI,iBAAiB;YACjBC,WAAW;QACb;QACA,MAAMC,YAAsB,EAAE;QAC9B,IAAIC,QAA4BC;QAEhC,IAAK,IAAIC,UAAU,GAAGA,WAAWV,IAAIW,QAAQ,EAAED,UAAW;YACxD,MAAME,OAAO,MAAMZ,IAAIa,OAAO,CAACH;YAC/B,MAAM,EAAEI,KAAK,EAAE,GAAG,MAAMF,KAAKG,cAAc;YAE3C,KAAK,MAAMxB,QAAQuB,MAAO;gBACxB,sBAAsB;gBACtB,IAAI,CAACxB,WAAWC,OAAO;gBAEvB,MAAMyB,WAAWzB,KAAKI,SAAS,CAAC,EAAE;gBAClC,IAAIa,UAAUC,aAAaO,aAAaR,OAAO;oBAC7CD,UAAUU,IAAI,CAAClB,QAAQmB,gBAAgB;gBACzC;gBAEAX,UAAUU,IAAI,CAAC1B,KAAKC,GAAG;gBACvBgB,QAAQQ;YACV;YACAJ,KAAKO,OAAO;QACd;QAEA,MAAMC,UAAUb,UAAUc,IAAI,CAAC;QAC/B,IAAIzB,mBAAmB0B,GAAG,CAACF,QAAQG,UAAU,CAAC,KAAK;YACjD,OAAO;QACT;QACA,OAAOH;IACT,EAAE,OAAOI,GAAG;QACV,IAAIzB,QAAQ0B,oBAAoB,EAAE;YAChCC,QAAQC,KAAK,CAAC,sBAAsBH;QACtC;QACA,MAAMA;IACR,SAAU;QACRxB,KAAK4B,UAAUC,MAAM,CAACL,IAAaE,QAAQC,KAAK,CAACH;IACnD;AACF"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../backend/src/applications/files/utils/doc-textify/adapters/power-point.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { promisify } from 'node:util'\nimport sax from 'sax'\nimport { Entry, open as openZip, Options, ZipFile } from 'yauzl'\nimport { DocTextifyOptions } from '../interfaces/doc-textify.interfaces'\n\nconst openZipAsync: (path: string, options: Options) => Promise<ZipFile> = promisify(openZip)\n\n/**\n * Parses a PPTX file\n */\nexport async function parsePowerPoint(filePath: string, options: DocTextifyOptions): Promise<string> {\n // Regex to match slide and notes XML, capturing the slide index\n const slidesRegex = /^ppt\\/slides\\/slide(\\d+)\\.xml$/\n const notesRegex = /^ppt\\/notesSlides\\/notesSlide(\\d+)\\.xml$|^ppt\\/slides\\/notesSlides\\/slide(\\d+)\\.xml$/\n\n // Map of slide index -> array of text fragments\n const slideTextMap: Record<number, string[]> = {}\n let hasSlide = false\n\n // 1. Open the PPTX (ZIP) in lazyEntries mode\n const zipFile = await openZipAsync(filePath, { lazyEntries: true })\n\n return new Promise<string>((resolve, reject) => {\n zipFile.readEntry()\n\n zipFile.on('entry', (entry: Entry) => {\n const path = entry.fileName\n let match: RegExpExecArray | null\n\n // Skip if not a slide or a note\n const isSlide = slidesRegex.test(path)\n const isNote = notesRegex.test(path)\n if (!isSlide && !isNote) {\n zipFile.readEntry()\n return\n }\n\n // Capture the regex match and flag that we've seen a slide\n if (isSlide) {\n match = slidesRegex.exec(path)!\n hasSlide = true\n } else {\n match = notesRegex.exec(path)!\n }\n\n // parse the slide number from whichever capture is defined\n const slideNum = parseInt(match[1] || match[2]!, 10)\n if (!slideTextMap[slideNum]) slideTextMap[slideNum] = []\n\n // 2. Open a read stream for this entry\n zipFile.openReadStream(entry, (err, readStream) => {\n if (err) {\n zipFile.close()\n return reject(err)\n }\n\n // 3. SAX parser to extract <a:t> text nodes\n const parser = sax.createStream(true)\n let buffer = ''\n\n parser.on('error', (parseErr) => {\n readStream.destroy()\n zipFile.close()\n reject(parseErr)\n })\n\n parser.on('opentag', (node) => {\n if (node.name === 'a:t') {\n buffer = ''\n }\n })\n\n parser.on('text', (txt) => {\n buffer += txt\n })\n\n parser.on('closetag', (name) => {\n if (name === 'a:t') {\n slideTextMap[slideNum].push(buffer)\n }\n })\n\n readStream\n .on('error', (streamErr) => {\n zipFile.close()\n reject(streamErr)\n })\n .on('end', () => {\n // Move on to the next entry\n zipFile.readEntry()\n })\n .pipe(parser)\n })\n })\n\n zipFile.on('end', () => {\n zipFile.close()\n // 4. Ensure at least one slide was found\n if (!hasSlide) {\n return reject(new Error('file seems to be corrupted'))\n }\n\n // 5. Build final output by ascending slide number\n const sortedSlides = Object.keys(slideTextMap)\n .map((n) => parseInt(n, 10))\n .sort((a, b) => a - b)\n\n const result = sortedSlides.map((num) => slideTextMap[num].join(options.newlineDelimiter)).join(options.newlineDelimiter)\n\n resolve(result)\n })\n\n zipFile.on('error', (zipErr) => {\n zipFile.close()\n reject(zipErr)\n })\n })\n}\n"],"names":["parsePowerPoint","openZipAsync","promisify","openZip","filePath","options","slidesRegex","notesRegex","slideTextMap","hasSlide","zipFile","lazyEntries","Promise","resolve","reject","readEntry","on","entry","path","fileName","match","isSlide","test","isNote","exec","slideNum","parseInt","openReadStream","err","readStream","close","parser","sax","createStream","buffer","parseErr","destroy","node","name","txt","push","streamErr","pipe","Error","sortedSlides","Object","keys","map","n","sort","a","b","result","num","join","newlineDelimiter","zipErr"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../backend/src/applications/files/utils/doc-textify/adapters/power-point.ts"],"sourcesContent":["import { promisify } from 'node:util'\nimport sax from 'sax'\nimport { Entry, open as openZip, Options, ZipFile } from 'yauzl'\nimport { DocTextifyOptions } from '../interfaces/doc-textify.interfaces'\n\nconst openZipAsync: (path: string, options: Options) => Promise<ZipFile> = promisify(openZip)\n\n/**\n * Parses a PPTX file\n */\nexport async function parsePowerPoint(filePath: string, options: DocTextifyOptions): Promise<string> {\n // Regex to match slide and notes XML, capturing the slide index\n const slidesRegex = /^ppt\\/slides\\/slide(\\d+)\\.xml$/\n const notesRegex = /^ppt\\/notesSlides\\/notesSlide(\\d+)\\.xml$|^ppt\\/slides\\/notesSlides\\/slide(\\d+)\\.xml$/\n\n // Map of slide index -> array of text fragments\n const slideTextMap: Record<number, string[]> = {}\n let hasSlide = false\n\n // 1. Open the PPTX (ZIP) in lazyEntries mode\n const zipFile = await openZipAsync(filePath, { lazyEntries: true })\n\n return new Promise<string>((resolve, reject) => {\n zipFile.readEntry()\n\n zipFile.on('entry', (entry: Entry) => {\n const path = entry.fileName\n let match: RegExpExecArray | null\n\n // Skip if not a slide or a note\n const isSlide = slidesRegex.test(path)\n const isNote = notesRegex.test(path)\n if (!isSlide && !isNote) {\n zipFile.readEntry()\n return\n }\n\n // Capture the regex match and flag that we've seen a slide\n if (isSlide) {\n match = slidesRegex.exec(path)!\n hasSlide = true\n } else {\n match = notesRegex.exec(path)!\n }\n\n // parse the slide number from whichever capture is defined\n const slideNum = parseInt(match[1] || match[2]!, 10)\n if (!slideTextMap[slideNum]) slideTextMap[slideNum] = []\n\n // 2. Open a read stream for this entry\n zipFile.openReadStream(entry, (err, readStream) => {\n if (err) {\n zipFile.close()\n return reject(err)\n }\n\n // 3. SAX parser to extract <a:t> text nodes\n const parser = sax.createStream(true)\n let buffer = ''\n\n parser.on('error', (parseErr) => {\n readStream.destroy()\n zipFile.close()\n reject(parseErr)\n })\n\n parser.on('opentag', (node) => {\n if (node.name === 'a:t') {\n buffer = ''\n }\n })\n\n parser.on('text', (txt) => {\n buffer += txt\n })\n\n parser.on('closetag', (name) => {\n if (name === 'a:t') {\n slideTextMap[slideNum].push(buffer)\n }\n })\n\n readStream\n .on('error', (streamErr) => {\n zipFile.close()\n reject(streamErr)\n })\n .on('end', () => {\n // Move on to the next entry\n zipFile.readEntry()\n })\n .pipe(parser)\n })\n })\n\n zipFile.on('end', () => {\n zipFile.close()\n // 4. Ensure at least one slide was found\n if (!hasSlide) {\n return reject(new Error('file seems to be corrupted'))\n }\n\n // 5. Build final output by ascending slide number\n const sortedSlides = Object.keys(slideTextMap)\n .map((n) => parseInt(n, 10))\n .sort((a, b) => a - b)\n\n const result = sortedSlides.map((num) => slideTextMap[num].join(options.newlineDelimiter)).join(options.newlineDelimiter)\n\n resolve(result)\n })\n\n zipFile.on('error', (zipErr) => {\n zipFile.close()\n reject(zipErr)\n })\n })\n}\n"],"names":["parsePowerPoint","openZipAsync","promisify","openZip","filePath","options","slidesRegex","notesRegex","slideTextMap","hasSlide","zipFile","lazyEntries","Promise","resolve","reject","readEntry","on","entry","path","fileName","match","isSlide","test","isNote","exec","slideNum","parseInt","openReadStream","err","readStream","close","parser","sax","createStream","buffer","parseErr","destroy","node","name","txt","push","streamErr","pipe","Error","sortedSlides","Object","keys","map","n","sort","a","b","result","num","join","newlineDelimiter","zipErr"],"mappings":"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"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../backend/src/applications/files/utils/doc-textify/adapters/text.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport fs from 'fs/promises'\n\nexport async function parseText(filePath: string): Promise<string> {\n return await fs.readFile(filePath, { encoding: 'utf8' })\n}\n"],"names":["parseText","filePath","fs","readFile","encoding"],"mappings":"AAAA;;;;CAIC;;;;+BAIqBA;;;eAAAA;;;iEAFP;;;;;;AAER,eAAeA,UAAUC,QAAgB;IAC9C,OAAO,MAAMC,iBAAE,CAACC,QAAQ,CAACF,UAAU;QAAEG,UAAU;IAAO;AACxD"}
1
+ {"version":3,"sources":["../../../../../../../backend/src/applications/files/utils/doc-textify/adapters/text.ts"],"sourcesContent":["import fs from 'fs/promises'\n\nexport async function parseText(filePath: string): Promise<string> {\n return await fs.readFile(filePath, { encoding: 'utf8' })\n}\n"],"names":["parseText","filePath","fs","readFile","encoding"],"mappings":";;;;+BAEsBA;;;eAAAA;;;iEAFP;;;;;;AAER,eAAeA,UAAUC,QAAgB;IAC9C,OAAO,MAAMC,iBAAE,CAACC,QAAQ,CAACF,UAAU;QAAEG,UAAU;IAAO;AACxD"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });