@sync-in/server 1.11.0 → 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 (1040) hide show
  1. package/CHANGELOG.md +37 -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 +17 -16
  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-G7TLKY5X.js → chunk-27ATUHBH.js} +1 -1
  940. package/static/{chunk-CQOQXVYG.js → chunk-2CKLZ3FM.js} +1 -1
  941. package/static/{chunk-FVFOX6OP.js → chunk-2QZPX7LO.js} +1 -1
  942. package/static/{chunk-32AVRWC3.js → chunk-2R6IBBPZ.js} +1 -1
  943. package/static/{chunk-76JDXKD7.js → chunk-4FIGEBNL.js} +1 -1
  944. package/static/{chunk-ACCGBDUZ.js → chunk-4P3JABAP.js} +4 -4
  945. package/static/chunk-5CZOSAMZ.js +1 -0
  946. package/static/{chunk-2PDTP6N4.js → chunk-677WUBCT.js} +1 -1
  947. package/static/{chunk-K5VO5XTG.js → chunk-74CAHBFM.js} +1 -1
  948. package/static/{chunk-WTWGBCFO.js → chunk-7GWW6MJO.js} +1 -1
  949. package/static/{chunk-JXZOYX4N.js → chunk-A4UGPSWX.js} +1 -1
  950. package/static/{chunk-44D7RWET.js → chunk-AHO37FKW.js} +1 -1
  951. package/static/{chunk-WB2DECOA.js → chunk-AQCXMKP3.js} +1 -1
  952. package/static/chunk-B6PDYCRO.js +3 -0
  953. package/static/{chunk-JVGN5V5E.js → chunk-CU76ATCF.js} +1 -1
  954. package/static/{chunk-Q5K4ZUHK.js → chunk-CWYHOPOP.js} +1 -1
  955. package/static/{chunk-IOX3ANJR.js → chunk-E5WI5725.js} +1 -1
  956. package/static/{chunk-NUG54Y65.js → chunk-FC5HTKVM.js} +1 -1
  957. package/static/{chunk-LRK6RNPR.js → chunk-FOSM7EYI.js} +1 -1
  958. package/static/{chunk-B4UP2EQM.js → chunk-GAZO25PI.js} +1 -1
  959. package/static/{chunk-3WBCGTYW.js → chunk-GB7ABR5N.js} +1 -1
  960. package/static/{chunk-XFZ37WVK.js → chunk-GEHFKZQ5.js} +1 -1
  961. package/static/{chunk-4CQLN5HL.js → chunk-GQFMWVFD.js} +1 -1
  962. package/static/{chunk-YBEH442D.js → chunk-GVNTC564.js} +1 -1
  963. package/static/{chunk-WO6GBHBZ.js → chunk-HGL3NYP2.js} +2 -2
  964. package/static/{chunk-IAWRRL6J.js → chunk-HLIWPWRA.js} +1 -1
  965. package/static/{chunk-6LHJBXUE.js → chunk-HNYB3M4S.js} +1 -1
  966. package/static/{chunk-5WTIUYFF.js → chunk-HUXAUQMN.js} +1 -1
  967. package/static/{chunk-VBH3Y2M5.js → chunk-I2XA6PPK.js} +1 -1
  968. package/static/{chunk-I3XI72AV.js → chunk-ISV3BO6R.js} +1 -1
  969. package/static/{chunk-P7X53PEP.js → chunk-JV3AGU5B.js} +1 -1
  970. package/static/{chunk-ZFAXICUH.js → chunk-K25E7YGG.js} +1 -1
  971. package/static/{chunk-CAD3RHAY.js → chunk-K46PUTZB.js} +1 -1
  972. package/static/{chunk-GYFLVCFN.js → chunk-KERFLJ56.js} +1 -7
  973. package/static/{chunk-WSTGWBVW.js → chunk-KJD3KFF3.js} +1 -1
  974. package/static/{chunk-R4P4NBUL.js → chunk-KPKSI23S.js} +1 -1
  975. package/static/{chunk-M7IFVC5D.js → chunk-KZS7CTNR.js} +1 -1
  976. package/static/{chunk-P2IJCGWD.js → chunk-L5IHUVXL.js} +1 -1
  977. package/static/{chunk-DXESTGOH.js → chunk-L7RRX2M3.js} +1 -1
  978. package/static/{chunk-WE3ISL7O.js → chunk-LGWJ2WKU.js} +1 -1
  979. package/static/{chunk-OKI3N5AI.js → chunk-MLC7JK2H.js} +2 -2
  980. package/static/{chunk-NG7QWUFM.js → chunk-MOHNYW2A.js} +1 -1
  981. package/static/{chunk-SQYWQUL4.js → chunk-NCDUOVMW.js} +1 -1
  982. package/static/chunk-NGUAJIGI.js +1 -0
  983. package/static/{chunk-OYPJUVD6.js → chunk-NIPP6JDI.js} +1 -1
  984. package/static/{chunk-Y433XOAJ.js → chunk-NMTBMHUL.js} +1 -1
  985. package/static/chunk-O4XXMZFX.js +4 -0
  986. package/static/{chunk-IOP3ON2H.js → chunk-OANZITPM.js} +1 -1
  987. package/static/{chunk-WJFKUJJX.js → chunk-OGE4SAHU.js} +1 -1
  988. package/static/{chunk-7EHP6HO3.js → chunk-OI3ME22C.js} +1 -1
  989. package/static/{chunk-D4XDSS6P.js → chunk-Q3EGCMF5.js} +1 -1
  990. package/static/{chunk-TQBCGNFG.js → chunk-QF2NSHZA.js} +1 -1
  991. package/static/{chunk-RBBMH2FM.js → chunk-QKN6LAAA.js} +1 -1
  992. package/static/{chunk-J45SD6RC.js → chunk-QRFESU5O.js} +2 -2
  993. package/static/chunk-QVRVFYJH.js +1 -0
  994. package/static/{chunk-BAHNSFET.js → chunk-RFJIPIOK.js} +1 -1
  995. package/static/{chunk-IZ7TCHUW.js → chunk-RLL634K4.js} +1 -1
  996. package/static/{chunk-MOWL3ILT.js → chunk-RS2OFKWP.js} +1 -1
  997. package/static/{chunk-WM56LPJ3.js → chunk-RWAAC3A4.js} +1 -1
  998. package/static/{chunk-F3GMI6OL.js → chunk-S5Y64DDS.js} +1 -1
  999. package/static/{chunk-VNNLMUK7.js → chunk-SLG5KDU6.js} +1 -1
  1000. package/static/chunk-TJ4CVFEL.js +1 -0
  1001. package/static/{chunk-SAN35XTD.js → chunk-TWCGKSYE.js} +1 -1
  1002. package/static/{chunk-EUKVDBBK.js → chunk-UMDRE4S7.js} +1 -1
  1003. package/static/{chunk-YKCUUBZP.js → chunk-VRIOLRYR.js} +4 -4
  1004. package/static/chunk-VS4O2XDP.js +1 -0
  1005. package/static/{chunk-2MRTBCSV.js → chunk-VSBFNFOM.js} +1 -1
  1006. package/static/{chunk-CTPKDDVI.js → chunk-WN4WXCVK.js} +1 -1
  1007. package/static/{chunk-2AA3WMW5.js → chunk-WX7RXW7K.js} +1 -1
  1008. package/static/{chunk-J2BUPRCZ.js → chunk-XC4POKR3.js} +2 -2
  1009. package/static/{chunk-AXLDYLIO.js → chunk-Y4AUYQTG.js} +1 -1
  1010. package/static/{chunk-RPHWIW7S.js → chunk-YMIXHRJQ.js} +1 -7
  1011. package/static/{chunk-AFNUBQMD.js → chunk-ZUNKFAKP.js} +1 -1
  1012. package/static/index.html +3 -3
  1013. package/static/main-QN4UCOC5.js +5 -0
  1014. package/static/{styles-PD6764CP.css → styles-46GLIE7Y.css} +1 -1
  1015. package/server/authentication/constants/auth-ldap.js.map +0 -1
  1016. package/server/authentication/dto/two-fa-verify.dto.js.map +0 -1
  1017. package/server/authentication/guards/auth-two-fa-guard.js.map +0 -1
  1018. package/server/authentication/interfaces/two-fa-setup.interface.js +0 -10
  1019. package/server/authentication/interfaces/two-fa-setup.interface.js.map +0 -1
  1020. package/server/authentication/models/auth-method.js +0 -18
  1021. package/server/authentication/models/auth-method.js.map +0 -1
  1022. package/server/authentication/services/auth-manager.service.js.map +0 -1
  1023. package/server/authentication/services/auth-manager.service.spec.js.map +0 -1
  1024. package/server/authentication/services/auth-methods/auth-method-database.service.js.map +0 -1
  1025. package/server/authentication/services/auth-methods/auth-method-database.service.spec.js.map +0 -1
  1026. package/server/authentication/services/auth-methods/auth-method-ldap.service.js +0 -326
  1027. package/server/authentication/services/auth-methods/auth-method-ldap.service.js.map +0 -1
  1028. package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js +0 -534
  1029. package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js.map +0 -1
  1030. package/server/authentication/services/auth-methods/auth-method-two-fa.service.js.map +0 -1
  1031. package/server/authentication/services/auth-methods/auth-method-two-fa.service.spec.js.map +0 -1
  1032. package/static/chunk-3I6NPM62.js +0 -1
  1033. package/static/chunk-GCPX3EFC.js +0 -1
  1034. package/static/chunk-KBUIDMCK.js +0 -1
  1035. package/static/chunk-KY6MNZLC.js +0 -1
  1036. package/static/chunk-MPWD4VMY.js +0 -1
  1037. package/static/chunk-QQAF3MLL.js +0 -1
  1038. package/static/chunk-VHZKPUWE.js +0 -4
  1039. package/static/chunk-YWLMFOB4.js +0 -3
  1040. package/static/main-ZXEMCBMI.js +0 -11
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../backend/src/applications/files/files.controller.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 { ContextInterceptor } from '../../infrastructure/context/interceptors/context.interceptor'\nimport { ContextManager } from '../../infrastructure/context/services/context-manager.service'\nimport { SpaceGuard } from '../spaces/guards/space.guard'\nimport { FILE_OPERATION } from './constants/operations'\nimport { FilesController } from './files.controller'\nimport { FilesMethods } from './services/files-methods.service'\nimport { FilesRecents } from './services/files-recents.service'\nimport { FilesSearchManager } from './services/files-search-manager.service'\nimport { FilesTasksManager } from './services/files-tasks-manager.service'\n\ndescribe(FilesController.name, () => {\n let filesController: FilesController\n\n // Reusable fakes\n const fakeUser: any = { id: 1, login: 'john', role: 1 }\n const fakeSpace: any = { id: 42, key: 'space-key', url: '/space/a', realPath: '/data/space/a', realBasePath: '/data/space' }\n const fakeReq: any = { user: fakeUser, space: fakeSpace, headers: {}, method: 'GET', ip: '127.0.0.1' }\n const fakeRes: any = { header: jest.fn().mockReturnThis(), status: jest.fn().mockReturnThis(), type: jest.fn().mockReturnThis(), send: jest.fn() }\n\n // Mocks\n const filesMethodsMock = {\n headOrGet: jest.fn(),\n make: jest.fn(),\n upload: jest.fn(),\n copy: jest.fn(),\n move: jest.fn(),\n delete: jest.fn(),\n genThumbnail: jest.fn(),\n downloadFromUrl: jest.fn(),\n compress: jest.fn(),\n decompress: jest.fn()\n }\n\n const filesTasksManagerMock = {\n createTask: jest.fn()\n }\n\n const filesRecentsMock = {\n getRecents: jest.fn()\n }\n\n const filesSearchMock = {\n search: jest.fn()\n }\n\n beforeAll(async () => {\n const testingModuleBuilder = Test.createTestingModule({\n controllers: [FilesController],\n providers: [\n { provide: FilesMethods, useValue: filesMethodsMock },\n { provide: FilesTasksManager, useValue: filesTasksManagerMock },\n { provide: FilesRecents, useValue: filesRecentsMock },\n { provide: FilesSearchManager, useValue: filesSearchMock },\n { provide: ContextManager, useValue: filesSearchMock },\n ContextInterceptor\n ]\n })\n // IMPORTANT: override the guard referenced by @UseGuards to avoid resolving its dependencies\n testingModuleBuilder.overrideGuard(SpaceGuard).useValue({ canActivate: jest.fn().mockReturnValue(true) })\n\n const module: TestingModule = await testingModuleBuilder.compile()\n\n filesController = module.get<FilesController>(FilesController)\n })\n\n it('should be defined', () => {\n expect(filesController).toBeDefined()\n })\n\n describe('Operations', () => {\n beforeEach(() => {\n jest.clearAllMocks()\n })\n\n it('head() should delegate to filesMethods.headOrGet(req, res) and return its result', async () => {\n const stream = {} as any\n filesMethodsMock.headOrGet.mockResolvedValue(stream)\n\n const result = await filesController.head(fakeReq, fakeRes)\n\n expect(filesMethodsMock.headOrGet).toHaveBeenCalledWith(fakeReq, fakeRes)\n expect(result).toBe(stream)\n })\n\n it('download() should delegate to filesMethods.headOrGet(req, res) and return its result', async () => {\n const stream = {} as any\n filesMethodsMock.headOrGet.mockResolvedValue(stream)\n\n const result = await filesController.download(fakeReq, fakeRes)\n\n expect(filesMethodsMock.headOrGet).toHaveBeenCalledWith(fakeReq, fakeRes)\n expect(result).toBe(stream)\n })\n\n it('make() should call filesMethods.make(user, space, dto)', async () => {\n const dto = { path: '/a', name: 'b', type: 'directory' } as any\n\n await filesController.make(fakeUser, fakeSpace, dto)\n\n expect(filesMethodsMock.make).toHaveBeenCalledWith(fakeUser, fakeSpace, dto)\n })\n\n it('upload() should call filesMethods.upload(req)', async () => {\n await filesController.uploadCreate(fakeReq)\n\n expect(filesMethodsMock.upload).toHaveBeenCalledWith(fakeReq)\n })\n\n it('copy() should call filesMethods.copy(user, space, dto) and return its result', async () => {\n const dto = { dstDirectory: '/dst', dstName: 'b' } as any\n const expected = { path: '/dst', name: 'b' }\n filesMethodsMock.copy.mockResolvedValue(expected)\n\n const result = await filesController.copy(fakeUser, fakeSpace, dto)\n\n expect(filesMethodsMock.copy).toHaveBeenCalledWith(fakeUser, fakeSpace, dto)\n expect(result).toEqual(expected)\n })\n\n it('move() should call filesMethods.move(user, space, dto) and return its result', async () => {\n const dto = { dstDirectory: '/dst', dstName: 'c' } as any\n const expected = { path: '/dst', name: 'c' }\n filesMethodsMock.move.mockResolvedValue(expected)\n\n const result = await filesController.move(fakeUser, fakeSpace, dto)\n\n expect(filesMethodsMock.move).toHaveBeenCalledWith(fakeUser, fakeSpace, dto)\n expect(result).toEqual(expected)\n })\n\n it('delete() should call filesMethods.delete(user, space)', async () => {\n await filesController.delete(fakeUser, fakeSpace)\n\n expect(filesMethodsMock.delete).toHaveBeenCalledWith(fakeUser, fakeSpace)\n })\n\n it('genThumbnail() should default size to 256 when not provided', async () => {\n const stream = {} as any\n filesMethodsMock.genThumbnail.mockResolvedValue(stream)\n\n // pass undefined to exercise controller default parameter\n const result = await filesController.genThumbnail(fakeSpace, undefined as unknown as number, fakeRes)\n\n expect(filesMethodsMock.genThumbnail).toHaveBeenCalledWith(fakeSpace, 256)\n expect(fakeRes.type).toHaveBeenCalled()\n expect(fakeRes.send).toHaveBeenCalledWith(stream)\n expect(result).toBeUndefined()\n })\n\n it('genThumbnail() should pass provided size', async () => {\n const stream = {} as any\n filesMethodsMock.genThumbnail.mockResolvedValue(stream)\n\n const result = await filesController.genThumbnail(fakeSpace, 512, fakeRes)\n\n expect(filesMethodsMock.genThumbnail).toHaveBeenCalledWith(fakeSpace, 512)\n expect(fakeRes.type).toHaveBeenCalled()\n expect(fakeRes.send).toHaveBeenCalledWith(stream)\n expect(result).toBeUndefined()\n })\n\n it('genThumbnail() should reduce size larger than 1024', async () => {\n const stream = {} as any\n filesMethodsMock.genThumbnail.mockResolvedValue(stream)\n\n const result = await filesController.genThumbnail(fakeSpace, 2048, fakeRes)\n\n expect(filesMethodsMock.genThumbnail).toHaveBeenCalledWith(fakeSpace, 1024)\n expect(fakeRes.type).toHaveBeenCalled()\n expect(fakeRes.send).toHaveBeenCalledWith(stream)\n expect(result).toBeUndefined()\n })\n })\n\n describe('Tasks operations', () => {\n beforeEach(() => {\n jest.clearAllMocks()\n })\n\n it('downloadFromUrlAsTask() should create DOWNLOAD task using method name \"downloadFromUrl\"', async () => {\n const dto = { url: 'http://x', to: '/a' } as any\n const task = { id: 1 } as any\n filesTasksManagerMock.createTask.mockResolvedValue(task)\n\n const result = await filesController.downloadFromUrlAsTask(fakeUser, fakeSpace, dto)\n\n expect(filesTasksManagerMock.createTask).toHaveBeenCalledWith(\n FILE_OPERATION.DOWNLOAD,\n fakeUser,\n fakeSpace,\n dto,\n filesMethodsMock.downloadFromUrl.name\n )\n expect(result).toBe(task)\n })\n\n it('compressAsTask() should call SpaceGuard.checkPermissions when compressInDirectory is true', async () => {\n const dto = { compressInDirectory: true } as any\n const spy = jest.spyOn(SpaceGuard as any, 'checkPermissions').mockImplementation(() => undefined)\n\n filesTasksManagerMock.createTask.mockResolvedValue({} as any)\n await filesController.compressAsTask(fakeReq, dto)\n\n expect(spy).toHaveBeenCalled()\n spy.mockRestore()\n })\n\n it('compressAsTask() should create COMPRESS task with req.user and req.space and method name \"compress\"', async () => {\n const dto = { compressInDirectory: false } as any\n const task = { id: 2 } as any\n filesTasksManagerMock.createTask.mockResolvedValue(task)\n\n const result = await filesController.compressAsTask(fakeReq, dto)\n\n expect(filesTasksManagerMock.createTask).toHaveBeenCalledWith(\n FILE_OPERATION.COMPRESS,\n fakeReq.user,\n fakeReq.space,\n dto,\n filesMethodsMock.compress.name\n )\n expect(result).toBe(task)\n })\n\n it('decompressAsTask() should create DECOMPRESS task with null dto and method name \"decompress\"', async () => {\n const task = { id: 3 } as any\n filesTasksManagerMock.createTask.mockResolvedValue(task)\n\n const result = await filesController.decompressAsTask(fakeUser, fakeSpace)\n\n expect(filesTasksManagerMock.createTask).toHaveBeenCalledWith(\n FILE_OPERATION.DECOMPRESS,\n fakeUser,\n fakeSpace,\n null,\n filesMethodsMock.decompress.name\n )\n expect(result).toBe(task)\n })\n\n it('copyAsTask() should create COPY task with method name \"copy\"', async () => {\n const dto = { from: '/a', to: '/b' } as any\n const task = { id: 4 } as any\n filesTasksManagerMock.createTask.mockResolvedValue(task)\n\n const result = await filesController.copyAsTask(fakeUser, fakeSpace, dto)\n\n expect(filesTasksManagerMock.createTask).toHaveBeenCalledWith(FILE_OPERATION.COPY, fakeUser, fakeSpace, dto, filesMethodsMock.copy.name)\n expect(result).toBe(task)\n })\n\n it('moveAsTask() should create MOVE task with method name \"move\"', async () => {\n const dto = { from: '/a', to: '/c' } as any\n const task = { id: 5 } as any\n filesTasksManagerMock.createTask.mockResolvedValue(task)\n\n const result = await filesController.moveAsTask(fakeUser, fakeSpace, dto)\n\n expect(filesTasksManagerMock.createTask).toHaveBeenCalledWith(FILE_OPERATION.MOVE, fakeUser, fakeSpace, dto, filesMethodsMock.move.name)\n expect(result).toBe(task)\n })\n\n it('deleteAsTask() should create DELETE task with null dto and method name \"delete\"', async () => {\n const task = { id: 6 } as any\n filesTasksManagerMock.createTask.mockResolvedValue(task)\n\n const result = await filesController.deleteAsTask(fakeUser, fakeSpace)\n\n expect(filesTasksManagerMock.createTask).toHaveBeenCalledWith(FILE_OPERATION.DELETE, fakeUser, fakeSpace, null, filesMethodsMock.delete.name)\n expect(result).toBe(task)\n })\n })\n\n describe('Recents & Search', () => {\n beforeEach(() => {\n jest.clearAllMocks()\n })\n\n it('getRecents() should use limit=10 by default', async () => {\n const recents = [{ path: '/a' }] as any\n filesRecentsMock.getRecents.mockResolvedValue(recents)\n\n const result = await filesController.getRecents(fakeUser, undefined as unknown as number)\n\n expect(filesRecentsMock.getRecents).toHaveBeenCalledWith(fakeUser, 10)\n expect(result).toBe(recents)\n })\n\n it('getRecents() should forward provided limit', async () => {\n const recents = [{ path: '/b' }] as any\n filesRecentsMock.getRecents.mockResolvedValue(recents)\n\n const result = await filesController.getRecents(fakeUser, 5)\n\n expect(filesRecentsMock.getRecents).toHaveBeenCalledWith(fakeUser, 5)\n expect(result).toBe(recents)\n })\n\n it('search() should delegate to filesSearch.search(user, dto)', async () => {\n const dto = { query: 'test' } as any\n const items = [{ name: 'file' }] as any\n filesSearchMock.search.mockResolvedValue(items)\n\n const result = await filesController.search(fakeUser, dto)\n\n expect(filesSearchMock.search).toHaveBeenCalledWith(fakeUser, dto)\n expect(result).toBe(items)\n })\n })\n})\n"],"names":["describe","FilesController","name","filesController","fakeUser","id","login","role","fakeSpace","key","url","realPath","realBasePath","fakeReq","user","space","headers","method","ip","fakeRes","header","jest","fn","mockReturnThis","status","type","send","filesMethodsMock","headOrGet","make","upload","copy","move","delete","genThumbnail","downloadFromUrl","compress","decompress","filesTasksManagerMock","createTask","filesRecentsMock","getRecents","filesSearchMock","search","beforeAll","testingModuleBuilder","Test","createTestingModule","controllers","providers","provide","FilesMethods","useValue","FilesTasksManager","FilesRecents","FilesSearchManager","ContextManager","ContextInterceptor","overrideGuard","SpaceGuard","canActivate","mockReturnValue","module","compile","get","it","expect","toBeDefined","beforeEach","clearAllMocks","stream","mockResolvedValue","result","head","toHaveBeenCalledWith","toBe","download","dto","path","uploadCreate","dstDirectory","dstName","expected","toEqual","undefined","toHaveBeenCalled","toBeUndefined","to","task","downloadFromUrlAsTask","FILE_OPERATION","DOWNLOAD","compressInDirectory","spy","spyOn","mockImplementation","compressAsTask","mockRestore","COMPRESS","decompressAsTask","DECOMPRESS","from","copyAsTask","COPY","moveAsTask","MOVE","deleteAsTask","DELETE","recents","query","items"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../backend/src/applications/files/files.controller.spec.ts"],"sourcesContent":["import { Test, TestingModule } from '@nestjs/testing'\nimport { ContextInterceptor } from '../../infrastructure/context/interceptors/context.interceptor'\nimport { ContextManager } from '../../infrastructure/context/services/context-manager.service'\nimport { SpaceGuard } from '../spaces/guards/space.guard'\nimport { FILE_OPERATION } from './constants/operations'\nimport { FilesController } from './files.controller'\nimport { FilesMethods } from './services/files-methods.service'\nimport { FilesRecents } from './services/files-recents.service'\nimport { FilesSearchManager } from './services/files-search-manager.service'\nimport { FilesTasksManager } from './services/files-tasks-manager.service'\n\ndescribe(FilesController.name, () => {\n let filesController: FilesController\n\n // Reusable fakes\n const fakeUser: any = { id: 1, login: 'john', role: 1 }\n const fakeSpace: any = { id: 42, key: 'space-key', url: '/space/a', realPath: '/data/space/a', realBasePath: '/data/space' }\n const fakeReq: any = { user: fakeUser, space: fakeSpace, headers: {}, method: 'GET', ip: '127.0.0.1' }\n const fakeRes: any = { header: jest.fn().mockReturnThis(), status: jest.fn().mockReturnThis(), type: jest.fn().mockReturnThis(), send: jest.fn() }\n\n // Mocks\n const filesMethodsMock = {\n headOrGet: jest.fn(),\n make: jest.fn(),\n upload: jest.fn(),\n copy: jest.fn(),\n move: jest.fn(),\n delete: jest.fn(),\n genThumbnail: jest.fn(),\n downloadFromUrl: jest.fn(),\n compress: jest.fn(),\n decompress: jest.fn()\n }\n\n const filesTasksManagerMock = {\n createTask: jest.fn()\n }\n\n const filesRecentsMock = {\n getRecents: jest.fn()\n }\n\n const filesSearchMock = {\n search: jest.fn()\n }\n\n beforeAll(async () => {\n const testingModuleBuilder = Test.createTestingModule({\n controllers: [FilesController],\n providers: [\n { provide: FilesMethods, useValue: filesMethodsMock },\n { provide: FilesTasksManager, useValue: filesTasksManagerMock },\n { provide: FilesRecents, useValue: filesRecentsMock },\n { provide: FilesSearchManager, useValue: filesSearchMock },\n { provide: ContextManager, useValue: filesSearchMock },\n ContextInterceptor\n ]\n })\n // IMPORTANT: override the guard referenced by @UseGuards to avoid resolving its dependencies\n testingModuleBuilder.overrideGuard(SpaceGuard).useValue({ canActivate: jest.fn().mockReturnValue(true) })\n\n const module: TestingModule = await testingModuleBuilder.compile()\n\n filesController = module.get<FilesController>(FilesController)\n })\n\n it('should be defined', () => {\n expect(filesController).toBeDefined()\n })\n\n describe('Operations', () => {\n beforeEach(() => {\n jest.clearAllMocks()\n })\n\n it('head() should delegate to filesMethods.headOrGet(req, res) and return its result', async () => {\n const stream = {} as any\n filesMethodsMock.headOrGet.mockResolvedValue(stream)\n\n const result = await filesController.head(fakeReq, fakeRes)\n\n expect(filesMethodsMock.headOrGet).toHaveBeenCalledWith(fakeReq, fakeRes)\n expect(result).toBe(stream)\n })\n\n it('download() should delegate to filesMethods.headOrGet(req, res) and return its result', async () => {\n const stream = {} as any\n filesMethodsMock.headOrGet.mockResolvedValue(stream)\n\n const result = await filesController.download(fakeReq, fakeRes)\n\n expect(filesMethodsMock.headOrGet).toHaveBeenCalledWith(fakeReq, fakeRes)\n expect(result).toBe(stream)\n })\n\n it('make() should call filesMethods.make(user, space, dto)', async () => {\n const dto = { path: '/a', name: 'b', type: 'directory' } as any\n\n await filesController.make(fakeUser, fakeSpace, dto)\n\n expect(filesMethodsMock.make).toHaveBeenCalledWith(fakeUser, fakeSpace, dto)\n })\n\n it('upload() should call filesMethods.upload(req)', async () => {\n await filesController.uploadCreate(fakeReq)\n\n expect(filesMethodsMock.upload).toHaveBeenCalledWith(fakeReq)\n })\n\n it('copy() should call filesMethods.copy(user, space, dto) and return its result', async () => {\n const dto = { dstDirectory: '/dst', dstName: 'b' } as any\n const expected = { path: '/dst', name: 'b' }\n filesMethodsMock.copy.mockResolvedValue(expected)\n\n const result = await filesController.copy(fakeUser, fakeSpace, dto)\n\n expect(filesMethodsMock.copy).toHaveBeenCalledWith(fakeUser, fakeSpace, dto)\n expect(result).toEqual(expected)\n })\n\n it('move() should call filesMethods.move(user, space, dto) and return its result', async () => {\n const dto = { dstDirectory: '/dst', dstName: 'c' } as any\n const expected = { path: '/dst', name: 'c' }\n filesMethodsMock.move.mockResolvedValue(expected)\n\n const result = await filesController.move(fakeUser, fakeSpace, dto)\n\n expect(filesMethodsMock.move).toHaveBeenCalledWith(fakeUser, fakeSpace, dto)\n expect(result).toEqual(expected)\n })\n\n it('delete() should call filesMethods.delete(user, space)', async () => {\n await filesController.delete(fakeUser, fakeSpace)\n\n expect(filesMethodsMock.delete).toHaveBeenCalledWith(fakeUser, fakeSpace)\n })\n\n it('genThumbnail() should default size to 256 when not provided', async () => {\n const stream = {} as any\n filesMethodsMock.genThumbnail.mockResolvedValue(stream)\n\n // pass undefined to exercise controller default parameter\n const result = await filesController.genThumbnail(fakeSpace, undefined as unknown as number, fakeRes)\n\n expect(filesMethodsMock.genThumbnail).toHaveBeenCalledWith(fakeSpace, 256)\n expect(fakeRes.type).toHaveBeenCalled()\n expect(fakeRes.send).toHaveBeenCalledWith(stream)\n expect(result).toBeUndefined()\n })\n\n it('genThumbnail() should pass provided size', async () => {\n const stream = {} as any\n filesMethodsMock.genThumbnail.mockResolvedValue(stream)\n\n const result = await filesController.genThumbnail(fakeSpace, 512, fakeRes)\n\n expect(filesMethodsMock.genThumbnail).toHaveBeenCalledWith(fakeSpace, 512)\n expect(fakeRes.type).toHaveBeenCalled()\n expect(fakeRes.send).toHaveBeenCalledWith(stream)\n expect(result).toBeUndefined()\n })\n\n it('genThumbnail() should reduce size larger than 1024', async () => {\n const stream = {} as any\n filesMethodsMock.genThumbnail.mockResolvedValue(stream)\n\n const result = await filesController.genThumbnail(fakeSpace, 2048, fakeRes)\n\n expect(filesMethodsMock.genThumbnail).toHaveBeenCalledWith(fakeSpace, 1024)\n expect(fakeRes.type).toHaveBeenCalled()\n expect(fakeRes.send).toHaveBeenCalledWith(stream)\n expect(result).toBeUndefined()\n })\n })\n\n describe('Tasks operations', () => {\n beforeEach(() => {\n jest.clearAllMocks()\n })\n\n it('downloadFromUrlAsTask() should create DOWNLOAD task using method name \"downloadFromUrl\"', async () => {\n const dto = { url: 'http://x', to: '/a' } as any\n const task = { id: 1 } as any\n filesTasksManagerMock.createTask.mockResolvedValue(task)\n\n const result = await filesController.downloadFromUrlAsTask(fakeUser, fakeSpace, dto)\n\n expect(filesTasksManagerMock.createTask).toHaveBeenCalledWith(\n FILE_OPERATION.DOWNLOAD,\n fakeUser,\n fakeSpace,\n dto,\n filesMethodsMock.downloadFromUrl.name\n )\n expect(result).toBe(task)\n })\n\n it('compressAsTask() should call SpaceGuard.checkPermissions when compressInDirectory is true', async () => {\n const dto = { compressInDirectory: true } as any\n const spy = jest.spyOn(SpaceGuard as any, 'checkPermissions').mockImplementation(() => undefined)\n\n filesTasksManagerMock.createTask.mockResolvedValue({} as any)\n await filesController.compressAsTask(fakeReq, dto)\n\n expect(spy).toHaveBeenCalled()\n spy.mockRestore()\n })\n\n it('compressAsTask() should create COMPRESS task with req.user and req.space and method name \"compress\"', async () => {\n const dto = { compressInDirectory: false } as any\n const task = { id: 2 } as any\n filesTasksManagerMock.createTask.mockResolvedValue(task)\n\n const result = await filesController.compressAsTask(fakeReq, dto)\n\n expect(filesTasksManagerMock.createTask).toHaveBeenCalledWith(\n FILE_OPERATION.COMPRESS,\n fakeReq.user,\n fakeReq.space,\n dto,\n filesMethodsMock.compress.name\n )\n expect(result).toBe(task)\n })\n\n it('decompressAsTask() should create DECOMPRESS task with null dto and method name \"decompress\"', async () => {\n const task = { id: 3 } as any\n filesTasksManagerMock.createTask.mockResolvedValue(task)\n\n const result = await filesController.decompressAsTask(fakeUser, fakeSpace)\n\n expect(filesTasksManagerMock.createTask).toHaveBeenCalledWith(\n FILE_OPERATION.DECOMPRESS,\n fakeUser,\n fakeSpace,\n null,\n filesMethodsMock.decompress.name\n )\n expect(result).toBe(task)\n })\n\n it('copyAsTask() should create COPY task with method name \"copy\"', async () => {\n const dto = { from: '/a', to: '/b' } as any\n const task = { id: 4 } as any\n filesTasksManagerMock.createTask.mockResolvedValue(task)\n\n const result = await filesController.copyAsTask(fakeUser, fakeSpace, dto)\n\n expect(filesTasksManagerMock.createTask).toHaveBeenCalledWith(FILE_OPERATION.COPY, fakeUser, fakeSpace, dto, filesMethodsMock.copy.name)\n expect(result).toBe(task)\n })\n\n it('moveAsTask() should create MOVE task with method name \"move\"', async () => {\n const dto = { from: '/a', to: '/c' } as any\n const task = { id: 5 } as any\n filesTasksManagerMock.createTask.mockResolvedValue(task)\n\n const result = await filesController.moveAsTask(fakeUser, fakeSpace, dto)\n\n expect(filesTasksManagerMock.createTask).toHaveBeenCalledWith(FILE_OPERATION.MOVE, fakeUser, fakeSpace, dto, filesMethodsMock.move.name)\n expect(result).toBe(task)\n })\n\n it('deleteAsTask() should create DELETE task with null dto and method name \"delete\"', async () => {\n const task = { id: 6 } as any\n filesTasksManagerMock.createTask.mockResolvedValue(task)\n\n const result = await filesController.deleteAsTask(fakeUser, fakeSpace)\n\n expect(filesTasksManagerMock.createTask).toHaveBeenCalledWith(FILE_OPERATION.DELETE, fakeUser, fakeSpace, null, filesMethodsMock.delete.name)\n expect(result).toBe(task)\n })\n })\n\n describe('Recents & Search', () => {\n beforeEach(() => {\n jest.clearAllMocks()\n })\n\n it('getRecents() should use limit=10 by default', async () => {\n const recents = [{ path: '/a' }] as any\n filesRecentsMock.getRecents.mockResolvedValue(recents)\n\n const result = await filesController.getRecents(fakeUser, undefined as unknown as number)\n\n expect(filesRecentsMock.getRecents).toHaveBeenCalledWith(fakeUser, 10)\n expect(result).toBe(recents)\n })\n\n it('getRecents() should forward provided limit', async () => {\n const recents = [{ path: '/b' }] as any\n filesRecentsMock.getRecents.mockResolvedValue(recents)\n\n const result = await filesController.getRecents(fakeUser, 5)\n\n expect(filesRecentsMock.getRecents).toHaveBeenCalledWith(fakeUser, 5)\n expect(result).toBe(recents)\n })\n\n it('search() should delegate to filesSearch.search(user, dto)', async () => {\n const dto = { query: 'test' } as any\n const items = [{ name: 'file' }] as any\n filesSearchMock.search.mockResolvedValue(items)\n\n const result = await filesController.search(fakeUser, dto)\n\n expect(filesSearchMock.search).toHaveBeenCalledWith(fakeUser, dto)\n expect(result).toBe(items)\n })\n })\n})\n"],"names":["describe","FilesController","name","filesController","fakeUser","id","login","role","fakeSpace","key","url","realPath","realBasePath","fakeReq","user","space","headers","method","ip","fakeRes","header","jest","fn","mockReturnThis","status","type","send","filesMethodsMock","headOrGet","make","upload","copy","move","delete","genThumbnail","downloadFromUrl","compress","decompress","filesTasksManagerMock","createTask","filesRecentsMock","getRecents","filesSearchMock","search","beforeAll","testingModuleBuilder","Test","createTestingModule","controllers","providers","provide","FilesMethods","useValue","FilesTasksManager","FilesRecents","FilesSearchManager","ContextManager","ContextInterceptor","overrideGuard","SpaceGuard","canActivate","mockReturnValue","module","compile","get","it","expect","toBeDefined","beforeEach","clearAllMocks","stream","mockResolvedValue","result","head","toHaveBeenCalledWith","toBe","download","dto","path","uploadCreate","dstDirectory","dstName","expected","toEqual","undefined","toHaveBeenCalled","toBeUndefined","to","task","downloadFromUrlAsTask","FILE_OPERATION","DOWNLOAD","compressInDirectory","spy","spyOn","mockImplementation","compressAsTask","mockRestore","COMPRESS","decompressAsTask","DECOMPRESS","from","copyAsTask","COPY","moveAsTask","MOVE","deleteAsTask","DELETE","recents","query","items"],"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/files.module.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 { Module } from '@nestjs/common'\nimport { configuration } from '../../configuration/config.environment'\nimport { FilesIndexerMySQL } from './adapters/files-indexer-mysql.service'\nimport { FilesTasksController } from './files-tasks.controller'\nimport { FilesController } from './files.controller'\nimport { FilesIndexer } from './models/files-indexer'\nimport { CollaboraOnlineModule } from './modules/collabora-online/collabora-online.module'\nimport { OnlyOfficeModule } from './modules/only-office/only-office.module'\nimport { FilesContentManager } from './services/files-content-manager.service'\nimport { FilesLockManager } from './services/files-lock-manager.service'\nimport { FilesManager } from './services/files-manager.service'\nimport { FilesMethods } from './services/files-methods.service'\nimport { FilesParser } from './services/files-parser.service'\nimport { FilesQueries } from './services/files-queries.service'\nimport { FilesRecents } from './services/files-recents.service'\nimport { FilesScheduler } from './services/files-scheduler.service'\nimport { FilesSearchManager } from './services/files-search-manager.service'\nimport { FilesTasksManager } from './services/files-tasks-manager.service'\n\n@Module({\n imports: [\n ...(configuration.applications.files.onlyoffice.enabled ? [OnlyOfficeModule] : []),\n ...(configuration.applications.files.collabora.enabled ? [CollaboraOnlineModule] : [])\n ],\n controllers: [FilesController, FilesTasksController],\n providers: [\n FilesMethods,\n FilesManager,\n FilesQueries,\n FilesLockManager,\n FilesTasksManager,\n FilesScheduler,\n FilesRecents,\n FilesParser,\n FilesContentManager,\n { provide: FilesIndexer, useClass: FilesIndexerMySQL },\n FilesSearchManager\n ],\n exports: [FilesManager, FilesQueries, FilesLockManager, FilesMethods, FilesRecents]\n})\nexport class FilesModule {}\n"],"names":["FilesModule","imports","configuration","applications","files","onlyoffice","enabled","OnlyOfficeModule","collabora","CollaboraOnlineModule","controllers","FilesController","FilesTasksController","providers","FilesMethods","FilesManager","FilesQueries","FilesLockManager","FilesTasksManager","FilesScheduler","FilesRecents","FilesParser","FilesContentManager","provide","FilesIndexer","useClass","FilesIndexerMySQL","FilesSearchManager","exports"],"mappings":"AAAA;;;;CAIC;;;;+BA0CYA;;;eAAAA;;;wBAxCU;mCACO;0CACI;sCACG;iCACL;8BACH;uCACS;kCACL;4CACG;yCACH;qCACJ;qCACA;oCACD;qCACC;qCACA;uCACE;2CACI;0CACD;;;;;;;AAuB3B,IAAA,AAAMA,cAAN,MAAMA;AAAa;;;QApBxBC,SAAS;eACHC,gCAAa,CAACC,YAAY,CAACC,KAAK,CAACC,UAAU,CAACC,OAAO,GAAG;gBAACC,kCAAgB;aAAC,GAAG,EAAE;eAC7EL,gCAAa,CAACC,YAAY,CAACC,KAAK,CAACI,SAAS,CAACF,OAAO,GAAG;gBAACG,4CAAqB;aAAC,GAAG,EAAE;SACtF;QACDC,aAAa;YAACC,gCAAe;YAAEC,0CAAoB;SAAC;QACpDC,WAAW;YACTC,iCAAY;YACZC,iCAAY;YACZC,iCAAY;YACZC,yCAAgB;YAChBC,2CAAiB;YACjBC,qCAAc;YACdC,iCAAY;YACZC,+BAAW;YACXC,+CAAmB;YACnB;gBAAEC,SAASC,0BAAY;gBAAEC,UAAUC,2CAAiB;YAAC;YACrDC,6CAAkB;SACnB;QACDC,SAAS;YAACb,iCAAY;YAAEC,iCAAY;YAAEC,yCAAgB;YAAEH,iCAAY;YAAEM,iCAAY;SAAC"}
1
+ {"version":3,"sources":["../../../../backend/src/applications/files/files.module.ts"],"sourcesContent":["import { Module } from '@nestjs/common'\nimport { configuration } from '../../configuration/config.environment'\nimport { FilesIndexerMySQL } from './adapters/files-indexer-mysql.service'\nimport { FilesTasksController } from './files-tasks.controller'\nimport { FilesController } from './files.controller'\nimport { FilesIndexer } from './models/files-indexer'\nimport { CollaboraOnlineModule } from './modules/collabora-online/collabora-online.module'\nimport { OnlyOfficeModule } from './modules/only-office/only-office.module'\nimport { FilesContentManager } from './services/files-content-manager.service'\nimport { FilesLockManager } from './services/files-lock-manager.service'\nimport { FilesManager } from './services/files-manager.service'\nimport { FilesMethods } from './services/files-methods.service'\nimport { FilesParser } from './services/files-parser.service'\nimport { FilesQueries } from './services/files-queries.service'\nimport { FilesRecents } from './services/files-recents.service'\nimport { FilesScheduler } from './services/files-scheduler.service'\nimport { FilesSearchManager } from './services/files-search-manager.service'\nimport { FilesTasksManager } from './services/files-tasks-manager.service'\n\n@Module({\n imports: [\n ...(configuration.applications.files.onlyoffice.enabled ? [OnlyOfficeModule] : []),\n ...(configuration.applications.files.collabora.enabled ? [CollaboraOnlineModule] : [])\n ],\n controllers: [FilesController, FilesTasksController],\n providers: [\n FilesMethods,\n FilesManager,\n FilesQueries,\n FilesLockManager,\n FilesTasksManager,\n FilesScheduler,\n FilesRecents,\n FilesParser,\n FilesContentManager,\n { provide: FilesIndexer, useClass: FilesIndexerMySQL },\n FilesSearchManager\n ],\n exports: [FilesManager, FilesQueries, FilesLockManager, FilesMethods, FilesRecents]\n})\nexport class FilesModule {}\n"],"names":["FilesModule","imports","configuration","applications","files","onlyoffice","enabled","OnlyOfficeModule","collabora","CollaboraOnlineModule","controllers","FilesController","FilesTasksController","providers","FilesMethods","FilesManager","FilesQueries","FilesLockManager","FilesTasksManager","FilesScheduler","FilesRecents","FilesParser","FilesContentManager","provide","FilesIndexer","useClass","FilesIndexerMySQL","FilesSearchManager","exports"],"mappings":";;;;+BAwCaA;;;eAAAA;;;wBAxCU;mCACO;0CACI;sCACG;iCACL;8BACH;uCACS;kCACL;4CACG;yCACH;qCACJ;qCACA;oCACD;qCACC;qCACA;uCACE;2CACI;0CACD;;;;;;;AAuB3B,IAAA,AAAMA,cAAN,MAAMA;AAAa;;;QApBxBC,SAAS;eACHC,gCAAa,CAACC,YAAY,CAACC,KAAK,CAACC,UAAU,CAACC,OAAO,GAAG;gBAACC,kCAAgB;aAAC,GAAG,EAAE;eAC7EL,gCAAa,CAACC,YAAY,CAACC,KAAK,CAACI,SAAS,CAACF,OAAO,GAAG;gBAACG,4CAAqB;aAAC,GAAG,EAAE;SACtF;QACDC,aAAa;YAACC,gCAAe;YAAEC,0CAAoB;SAAC;QACpDC,WAAW;YACTC,iCAAY;YACZC,iCAAY;YACZC,iCAAY;YACZC,yCAAgB;YAChBC,2CAAiB;YACjBC,qCAAc;YACdC,iCAAY;YACZC,+BAAW;YACXC,+CAAmB;YACnB;gBAAEC,SAASC,0BAAY;gBAAEC,UAAUC,2CAAiB;YAAC;YACrDC,6CAAkB;SACnB;QACDC,SAAS;YAACb,iCAAY;YAAEC,iCAAY;YAAEC,yCAAgB;YAAEH,iCAAY;YAAEM,iCAAY;SAAC"}
@@ -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/interfaces/file-db-props.interface.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 type { File } from '../schemas/file.interface'\n\nexport interface FileDBProps extends Partial<Pick<File, 'ownerId' | 'spaceId' | 'spaceExternalRootId' | 'shareExternalId' | 'inTrash' | 'path'>> {\n // warn: used during lock creation, new fields will be used in the lock key\n ownerId?: number\n spaceId?: number\n spaceExternalRootId?: number\n shareExternalId?: number\n inTrash: boolean\n // full path with name\n path: string\n}\n"],"names":[],"mappings":"AAAA;;;;CAIC"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/files/interfaces/file-db-props.interface.ts"],"names":[],"mappings":""}
@@ -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/interfaces/file-lock.interface.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 { SERVER_NAME } from '../../../common/shared'\nimport { Owner } from '../../users/interfaces/owner.interface'\nimport { LOCK_DEPTH, LOCK_SCOPE, WEBDAV_APP_LOCK } from '../../webdav/constants/webdav'\nimport { COLLABORA_APP_LOCK } from '../modules/collabora-online/collabora-online.constants'\nimport { ONLY_OFFICE_APP_LOCK } from '../modules/only-office/only-office.constants'\n\nexport type LOCK_APP = typeof WEBDAV_APP_LOCK | typeof COLLABORA_APP_LOCK | typeof ONLY_OFFICE_APP_LOCK | typeof SERVER_NAME\n\n// Optional lock parameters\nexport interface FileLockOptions {\n // Only locktype write is currently implemented in RFC\n lockRoot: string // Used with webdav (uri)\n lockToken: string\n lockScope: LOCK_SCOPE\n lockInfo?: string // Provided by some WebDAV clients to identify the locking application.\n}\n\nexport interface FileLock {\n owner: Owner\n dbFilePath: string\n key: string\n depth: LOCK_DEPTH\n expiration: number\n app: LOCK_APP // Known application (internal)\n options?: FileLockOptions\n}\n"],"names":[],"mappings":"AAAA;;;;CAIC"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/files/interfaces/file-lock.interface.ts"],"names":[],"mappings":""}
@@ -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/interfaces/file-parse-index.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\nexport type FileParseType = 'user' | 'space' | 'share'\n\nexport interface FileParseContext {\n realPath: string\n pathPrefix: string\n isDir: boolean\n}\n\nexport interface FileIndexContext {\n indexSuffix: string\n pathPrefix: string\n regexBasePath: RegExp\n db: Map<number, { name: string; path: string; size: number }>\n fs: Set<number>\n}\n"],"names":[],"mappings":"AAAA;;;;CAIC"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/files/interfaces/file-parse-index.ts"],"names":[],"mappings":""}
@@ -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/interfaces/file-props.interface.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 type { Share } from '../../shares/schemas/share.interface'\nimport type { SpaceRoot } from '../../spaces/schemas/space-root.interface'\nimport type { Space } from '../../spaces/schemas/space.interface'\nimport type { SyncPath } from '../../sync/schemas/sync-path.interface'\nimport type { Owner } from '../../users/interfaces/owner.interface'\nimport type { File } from '../schemas/file.interface'\n\nexport interface FileLockProps {\n owner: Owner\n app: string\n info?: string\n isExclusive: boolean\n}\n\nexport interface FileProps extends Omit<File, 'ownerId' | 'spaceId' | 'spaceExternalRootId' | 'shareExternalId' | 'inTrash'> {\n id: number\n name: string\n path: string\n isDir: boolean\n size: number\n ctime: number\n mtime: number\n mime: string\n inTrash?: boolean\n // used with shares\n origin?: {\n ownerId: number\n ownerLogin: string\n spaceId: number\n spaceAlias: string\n spaceExternalRootId: number\n spaceRootExternalPath: string\n shareExternalId: number\n }\n // root can be a share or a space root\n // enabled, and description are only used for shares\n root?: Pick<SpaceRoot, 'id' | 'alias' | 'permissions'> &\n Partial<Pick<SpaceRoot, 'name' | 'externalPath'>> &\n Partial<Pick<Share, 'enabled' | 'description'>> & {\n owner: Owner\n }\n lock?: FileLockProps\n // used by the file browser to enrich files\n spaces?: Pick<Space, 'id' | 'alias' | 'name'>[]\n shares?: Pick<Share, 'id' | 'alias' | 'name' | 'type'>[]\n syncs?: Pick<SyncPath, 'clientId' | 'id'> & { clientName: string }[]\n hasComments?: boolean\n}\n"],"names":[],"mappings":"AAAA;;;;CAIC"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/files/interfaces/file-props.interface.ts"],"names":[],"mappings":""}
@@ -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/interfaces/file-recent-location.interface.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\nexport interface FileRecentLocation {\n ownerId?: number\n spaceId?: number\n shareId?: number | number[]\n path: string\n}\n"],"names":[],"mappings":"AAAA;;;;CAIC"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/files/interfaces/file-recent-location.interface.ts"],"names":[],"mappings":""}
@@ -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/interfaces/file-space.interface.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 type { File } from '../schemas/file.interface'\n\nexport class FileSpace implements Pick<File, 'id' | 'ownerId' | 'path' | 'isDir' | 'inTrash' | 'mime'> {\n id: number\n ownerId: number\n name: string\n path: string\n isDir: boolean\n inTrash: boolean\n mime: string\n // permissions are inherited from the shared file (space and root permissions are intersected)\n permissions?: string\n space: {\n alias: string\n name: string\n root: { alias: string; name: string }\n }\n}\n"],"names":["FileSpace"],"mappings":"AAAA;;;;CAIC;;;;+BAIYA;;;eAAAA;;;AAAN,IAAA,AAAMA,YAAN,MAAMA;AAeb"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/files/interfaces/file-space.interface.ts"],"sourcesContent":["import type { File } from '../schemas/file.interface'\n\nexport class FileSpace implements Pick<File, 'id' | 'ownerId' | 'path' | 'isDir' | 'inTrash' | 'mime'> {\n id: number\n ownerId: number\n name: string\n path: string\n isDir: boolean\n inTrash: boolean\n mime: string\n // permissions are inherited from the shared file (space and root permissions are intersected)\n permissions?: string\n space: {\n alias: string\n name: string\n root: { alias: string; name: string }\n }\n}\n"],"names":["FileSpace"],"mappings":";;;;+BAEaA;;;eAAAA;;;AAAN,IAAA,AAAMA,YAAN,MAAMA;AAeb"}
@@ -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/interfaces/file-tree.interface.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 type { FileProps } from './file-props.interface'\n\nexport interface FileTree extends Pick<FileProps, 'id' | 'name' | 'path' | 'isDir' | 'mime'> {\n hasChildren: boolean\n inShare: boolean\n enabled: boolean\n permissions: string\n quotaIsExceeded: boolean\n}\n"],"names":[],"mappings":"AAAA;;;;CAIC"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/files/interfaces/file-tree.interface.ts"],"names":[],"mappings":""}
@@ -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/models/file-error.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\nexport class FileError extends Error {\n httpCode: number\n\n constructor(httpCode: number, message: string) {\n super(message)\n this.name = FileError.name\n this.httpCode = httpCode\n }\n}\n"],"names":["FileError","Error","httpCode","message","name"],"mappings":"AAAA;;;;CAIC;;;;+BAEYA;;;eAAAA;;;AAAN,IAAA,AAAMA,YAAN,MAAMA,kBAAkBC;IAG7B,YAAYC,QAAgB,EAAEC,OAAe,CAAE;QAC7C,KAAK,CAACA;QACN,IAAI,CAACC,IAAI,GAAGJ,UAAUI,IAAI;QAC1B,IAAI,CAACF,QAAQ,GAAGA;IAClB;AACF"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/files/models/file-error.ts"],"sourcesContent":["export class FileError extends Error {\n httpCode: number\n\n constructor(httpCode: number, message: string) {\n super(message)\n this.name = FileError.name\n this.httpCode = httpCode\n }\n}\n"],"names":["FileError","Error","httpCode","message","name"],"mappings":";;;;+BAAaA;;;eAAAA;;;AAAN,IAAA,AAAMA,YAAN,MAAMA,kBAAkBC;IAG7B,YAAYC,QAAgB,EAAEC,OAAe,CAAE;QAC7C,KAAK,CAACA;QACN,IAAI,CAACC,IAAI,GAAGJ,UAAUI,IAAI;QAC1B,IAAI,CAACF,QAAQ,GAAGA;IAClB;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/models/file-lock-error.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 { FileLock } from '../interfaces/file-lock.interface'\n\nexport class LockConflict extends Error {\n lock: FileLock\n\n constructor(lock: FileLock, message: string) {\n super(message)\n this.name = LockConflict.name\n this.lock = lock\n }\n}\n"],"names":["LockConflict","Error","lock","message","name"],"mappings":"AAAA;;;;CAIC;;;;+BAIYA;;;eAAAA;;;AAAN,IAAA,AAAMA,eAAN,MAAMA,qBAAqBC;IAGhC,YAAYC,IAAc,EAAEC,OAAe,CAAE;QAC3C,KAAK,CAACA;QACN,IAAI,CAACC,IAAI,GAAGJ,aAAaI,IAAI;QAC7B,IAAI,CAACF,IAAI,GAAGA;IACd;AACF"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/files/models/file-lock-error.ts"],"sourcesContent":["import { FileLock } from '../interfaces/file-lock.interface'\n\nexport class LockConflict extends Error {\n lock: FileLock\n\n constructor(lock: FileLock, message: string) {\n super(message)\n this.name = LockConflict.name\n this.lock = lock\n }\n}\n"],"names":["LockConflict","Error","lock","message","name"],"mappings":";;;;+BAEaA;;;eAAAA;;;AAAN,IAAA,AAAMA,eAAN,MAAMA,qBAAqBC;IAGhC,YAAYC,IAAc,EAAEC,OAAe,CAAE;QAC3C,KAAK,CAACA;QACN,IAAI,CAACC,IAAI,GAAGJ,aAAaI,IAAI;QAC7B,IAAI,CAACF,IAAI,GAAGA;IACd;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/models/file-task.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 { FILE_OPERATION } from '../constants/operations'\n\nexport enum FileTaskStatus {\n PENDING,\n SUCCESS,\n ERROR\n}\n\nexport interface FileTaskProps {\n progress?: number\n size?: number\n totalSize?: number\n compressInDirectory?: boolean\n directories?: number\n files?: number\n src?: { name: string; path: string }\n}\n\nexport class FileTask {\n id: string\n type: FILE_OPERATION\n status: FileTaskStatus\n path: string\n name: string\n props: FileTaskProps = {}\n result: string\n startedAt: number\n endedAt: number\n\n constructor(id: string, type: FILE_OPERATION, path: string, name: string) {\n this.id = id\n this.type = type\n this.path = path\n this.name = name\n if (type === FILE_OPERATION.COPY || type === FILE_OPERATION.MOVE || type === FILE_OPERATION.DOWNLOAD) {\n this.props = { progress: 1 }\n if (type !== FILE_OPERATION.DOWNLOAD) {\n // copy move operation\n this.props.src = { name: name, path: path }\n }\n }\n }\n}\n"],"names":["FileTask","FileTaskStatus","id","type","path","name","props","FILE_OPERATION","COPY","MOVE","DOWNLOAD","progress","src"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAoBYA;eAAAA;;QAhBDC;eAAAA;;;4BAFmB;AAExB,IAAA,AAAKA,wCAAAA;;;;WAAAA;;AAgBL,IAAA,AAAMD,WAAN,MAAMA;IAWX,YAAYE,EAAU,EAAEC,IAAoB,EAAEC,IAAY,EAAEC,IAAY,CAAE;aAL1EC,QAAuB,CAAC;QAMtB,IAAI,CAACJ,EAAE,GAAGA;QACV,IAAI,CAACC,IAAI,GAAGA;QACZ,IAAI,CAACC,IAAI,GAAGA;QACZ,IAAI,CAACC,IAAI,GAAGA;QACZ,IAAIF,SAASI,0BAAc,CAACC,IAAI,IAAIL,SAASI,0BAAc,CAACE,IAAI,IAAIN,SAASI,0BAAc,CAACG,QAAQ,EAAE;YACpG,IAAI,CAACJ,KAAK,GAAG;gBAAEK,UAAU;YAAE;YAC3B,IAAIR,SAASI,0BAAc,CAACG,QAAQ,EAAE;gBACpC,sBAAsB;gBACtB,IAAI,CAACJ,KAAK,CAACM,GAAG,GAAG;oBAAEP,MAAMA;oBAAMD,MAAMA;gBAAK;YAC5C;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/files/models/file-task.ts"],"sourcesContent":["import { FILE_OPERATION } from '../constants/operations'\n\nexport enum FileTaskStatus {\n PENDING,\n SUCCESS,\n ERROR\n}\n\nexport interface FileTaskProps {\n progress?: number\n size?: number\n totalSize?: number\n compressInDirectory?: boolean\n directories?: number\n files?: number\n src?: { name: string; path: string }\n}\n\nexport class FileTask {\n id: string\n type: FILE_OPERATION\n status: FileTaskStatus\n path: string\n name: string\n props: FileTaskProps = {}\n result: string\n startedAt: number\n endedAt: number\n\n constructor(id: string, type: FILE_OPERATION, path: string, name: string) {\n this.id = id\n this.type = type\n this.path = path\n this.name = name\n if (type === FILE_OPERATION.COPY || type === FILE_OPERATION.MOVE || type === FILE_OPERATION.DOWNLOAD) {\n this.props = { progress: 1 }\n if (type !== FILE_OPERATION.DOWNLOAD) {\n // copy move operation\n this.props.src = { name: name, path: path }\n }\n }\n }\n}\n"],"names":["FileTask","FileTaskStatus","id","type","path","name","props","FILE_OPERATION","COPY","MOVE","DOWNLOAD","progress","src"],"mappings":";;;;;;;;;;;QAkBaA;eAAAA;;QAhBDC;eAAAA;;;4BAFmB;AAExB,IAAA,AAAKA,wCAAAA;;;;WAAAA;;AAgBL,IAAA,AAAMD,WAAN,MAAMA;IAWX,YAAYE,EAAU,EAAEC,IAAoB,EAAEC,IAAY,EAAEC,IAAY,CAAE;aAL1EC,QAAuB,CAAC;QAMtB,IAAI,CAACJ,EAAE,GAAGA;QACV,IAAI,CAACC,IAAI,GAAGA;QACZ,IAAI,CAACC,IAAI,GAAGA;QACZ,IAAI,CAACC,IAAI,GAAGA;QACZ,IAAIF,SAASI,0BAAc,CAACC,IAAI,IAAIL,SAASI,0BAAc,CAACE,IAAI,IAAIN,SAASI,0BAAc,CAACG,QAAQ,EAAE;YACpG,IAAI,CAACJ,KAAK,GAAG;gBAAEK,UAAU;YAAE;YAC3B,IAAIR,SAASI,0BAAc,CAACG,QAAQ,EAAE;gBACpC,sBAAsB;gBACtB,IAAI,CAACJ,KAAK,CAACM,GAAG,GAAG;oBAAEP,MAAMA;oBAAMD,MAAMA;gBAAK;YAC5C;QACF;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/models/files-indexer.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 { FileContent } from '../schemas/file-content.interface'\n\nexport abstract class FilesIndexer {\n abstract indexesList(): Promise<string[]>\n\n abstract getIndexName(indexSuffix: string): string\n\n abstract existingIndexes(indexSuffixes: string[]): Promise<string[]>\n\n abstract createIndex(indexName: string): Promise<boolean>\n\n abstract dropIndex(indexName: string): Promise<boolean>\n\n abstract insertRecord(indexName: string, fc: FileContent): Promise<void>\n\n abstract searchRecords(indexNames: string[], search: string, limit: number): Promise<FileContent[]>\n\n abstract getRecordStats(indexName: string, path?: string): Promise<Map<number, { name: string; path: string; size: number }>>\n\n abstract deleteRecords(indexName: string, ids: number[]): Promise<void>\n\n abstract cleanIndexes(indexSuffixes: string[]): Promise<void>\n}\n"],"names":["FilesIndexer"],"mappings":"AAAA;;;;CAIC;;;;+BAIqBA;;;eAAAA;;;AAAf,IAAA,AAAeA,eAAf,MAAeA;AAoBtB"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/files/models/files-indexer.ts"],"sourcesContent":["import { FileContent } from '../schemas/file-content.interface'\n\nexport abstract class FilesIndexer {\n abstract indexesList(): Promise<string[]>\n\n abstract getIndexName(indexSuffix: string): string\n\n abstract existingIndexes(indexSuffixes: string[]): Promise<string[]>\n\n abstract createIndex(indexName: string): Promise<boolean>\n\n abstract dropIndex(indexName: string): Promise<boolean>\n\n abstract insertRecord(indexName: string, fc: FileContent): Promise<void>\n\n abstract searchRecords(indexNames: string[], search: string, limit: number): Promise<FileContent[]>\n\n abstract getRecordStats(indexName: string, path?: string): Promise<Map<number, { name: string; path: string; size: number }>>\n\n abstract deleteRecords(indexName: string, ids: number[]): Promise<void>\n\n abstract cleanIndexes(indexSuffixes: string[]): Promise<void>\n}\n"],"names":["FilesIndexer"],"mappings":";;;;+BAEsBA;;;eAAAA;;;AAAf,IAAA,AAAeA,eAAf,MAAeA;AAoBtB"}
@@ -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/modules/collabora-online/collabora-online-environment.decorator.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 { applyDecorators, SetMetadata, UseGuards } from '@nestjs/common'\nimport { SpaceGuard } from '../../../spaces/guards/space.guard'\nimport { COLLABORA_CONTEXT } from './collabora-online.constants'\nimport { CollaboraOnlineGuard } from './collabora-online.guard'\n\nexport const CollaboraOnlineContext = () => SetMetadata(COLLABORA_CONTEXT, true)\nexport const CollaboraOnlineEnvironment = () => {\n return applyDecorators(CollaboraOnlineContext(), UseGuards(CollaboraOnlineGuard, SpaceGuard))\n}\n"],"names":["CollaboraOnlineContext","CollaboraOnlineEnvironment","SetMetadata","COLLABORA_CONTEXT","applyDecorators","UseGuards","CollaboraOnlineGuard","SpaceGuard"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAOYA;eAAAA;;QACAC;eAAAA;;;wBAN2C;4BAC7B;0CACO;sCACG;AAE9B,MAAMD,yBAAyB,IAAME,IAAAA,mBAAW,EAACC,2CAAiB,EAAE;AACpE,MAAMF,6BAA6B;IACxC,OAAOG,IAAAA,uBAAe,EAACJ,0BAA0BK,IAAAA,iBAAS,EAACC,0CAAoB,EAAEC,sBAAU;AAC7F"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/collabora-online/collabora-online-environment.decorator.ts"],"sourcesContent":["import { applyDecorators, SetMetadata, UseGuards } from '@nestjs/common'\nimport { SpaceGuard } from '../../../spaces/guards/space.guard'\nimport { COLLABORA_CONTEXT } from './collabora-online.constants'\nimport { CollaboraOnlineGuard } from './collabora-online.guard'\n\nexport const CollaboraOnlineContext = () => SetMetadata(COLLABORA_CONTEXT, true)\nexport const CollaboraOnlineEnvironment = () => {\n return applyDecorators(CollaboraOnlineContext(), UseGuards(CollaboraOnlineGuard, SpaceGuard))\n}\n"],"names":["CollaboraOnlineContext","CollaboraOnlineEnvironment","SetMetadata","COLLABORA_CONTEXT","applyDecorators","UseGuards","CollaboraOnlineGuard","SpaceGuard"],"mappings":";;;;;;;;;;;QAKaA;eAAAA;;QACAC;eAAAA;;;wBAN2C;4BAC7B;0CACO;sCACG;AAE9B,MAAMD,yBAAyB,IAAME,IAAAA,mBAAW,EAACC,2CAAiB,EAAE;AACpE,MAAMF,6BAA6B;IACxC,OAAOG,IAAAA,uBAAe,EAACJ,0BAA0BK,IAAAA,iBAAS,EAACC,0CAAoB,EAAEC,sBAAU;AAC7F"}
@@ -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
  });
@@ -66,7 +62,10 @@ let CollaboraOnlineManager = class CollaboraOnlineManager {
66
62
  hasLock = this.filesLockManager.convertLockToFileLockProps(e.lock);
67
63
  mode = _operations.FILE_MODE.VIEW;
68
64
  } else {
69
- this.logger.error(`${this.getSettings.name} - ${e}`);
65
+ this.logger.error({
66
+ tag: this.getSettings.name,
67
+ msg: `${e}`
68
+ });
70
69
  throw new _common.HttpException('Unable to check file lock', _common.HttpStatus.INTERNAL_SERVER_ERROR);
71
70
  }
72
71
  }
@@ -118,11 +117,17 @@ let CollaboraOnlineManager = class CollaboraOnlineManager {
118
117
  if (!isNaN(contentLength) && contentLength !== 0) {
119
118
  const tmpFileSize = await (0, _files.fileSize)(tmpFilePath);
120
119
  if (tmpFileSize !== contentLength) {
121
- this.logger.error(`${this.saveDocument.name} - document size differs (${tmpFileSize} != ${contentLength})`);
120
+ this.logger.error({
121
+ tag: this.saveDocument.name,
122
+ msg: `document size differs (${tmpFileSize} != ${contentLength})`
123
+ });
122
124
  throw new _common.HttpException('Size Mismatch', _common.HttpStatus.BAD_REQUEST);
123
125
  }
124
126
  } else if (contentLength === 0) {
125
- this.logger.warn(`${this.saveDocument.name} - content length is 0 : ${req.space.url}`);
127
+ this.logger.warn({
128
+ tag: this.saveDocument.name,
129
+ msg: `content length is 0 : ${req.space.url}`
130
+ });
126
131
  }
127
132
  // copy contents to avoid inode changes (dbFileHash in some cases)
128
133
  try {
@@ -134,7 +139,10 @@ let CollaboraOnlineManager = class CollaboraOnlineManager {
134
139
  LastModifiedTime: fStats.mtime.toISOString()
135
140
  };
136
141
  } catch (e) {
137
- this.logger.error(`${this.saveDocument.name} - unable to save document: ${e}`);
142
+ this.logger.error({
143
+ tag: this.saveDocument.name,
144
+ msg: `unable to save document: ${e}`
145
+ });
138
146
  throw new _common.HttpException('Unable to save document', _common.HttpStatus.INTERNAL_SERVER_ERROR);
139
147
  }
140
148
  }
@@ -191,7 +199,10 @@ let CollaboraOnlineManager = class CollaboraOnlineManager {
191
199
  break;
192
200
  }
193
201
  default:
194
- this.logger.warn(`${this.manageLock.name} - Unknown lock action: ${lockAction}`);
202
+ this.logger.warn({
203
+ tag: this.manageLock.name,
204
+ msg: `Unknown lock action: ${lockAction}`
205
+ });
195
206
  throw new _common.HttpException('Unknown lock action', _common.HttpStatus.BAD_REQUEST);
196
207
  }
197
208
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/collabora-online/collabora-online-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 { JwtService } from '@nestjs/jwt'\nimport { FastifyReply } from 'fastify'\nimport fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { convertHumanTimeToSeconds } from '../../../../common/functions'\nimport { configuration } from '../../../../configuration/config.environment'\nimport { ContextManager } from '../../../../infrastructure/context/services/context-manager.service'\nimport { SPACE_OPERATION } from '../../../spaces/constants/spaces'\nimport type { SpaceEnv } from '../../../spaces/models/space-env.model'\nimport { haveSpaceEnvPermissions } from '../../../spaces/utils/permissions'\nimport type { UserModel } from '../../../users/models/user.model'\nimport { getAvatarBase64 } from '../../../users/utils/avatar'\nimport { DEPTH, LOCK_SCOPE } from '../../../webdav/constants/webdav'\nimport { FILE_MODE } from '../../constants/operations'\nimport { FileLockOptions } from '../../interfaces/file-lock.interface'\nimport { FileLockProps } from '../../interfaces/file-props.interface'\nimport { LockConflict } from '../../models/file-lock-error'\nimport { FilesLockManager } from '../../services/files-lock-manager.service'\nimport {\n copyFileContent,\n fileName,\n fileSize,\n genEtag,\n genUniqHashFromFileDBProps,\n isPathExists,\n isPathIsDir,\n removeFiles,\n uniqueFilePathFromDir,\n writeFromStream\n} from '../../utils/files'\nimport {\n COLLABORA_APP_LOCK,\n COLLABORA_HEADERS,\n COLLABORA_LOCK_ACTION,\n COLLABORA_ONLINE_EXTENSIONS,\n COLLABORA_TOKEN_QUERY_PARAM_NAME,\n COLLABORA_URI,\n COLLABORA_WOPI_SRC_QUERY_PARAM_NAME\n} from './collabora-online.constants'\nimport { CollaboraOnlineReqDto, CollaboraSaveDocumentDto } from './collabora-online.dtos'\nimport { CollaboraOnlineCheckFileInfo, FastifyCollaboraOnlineSpaceRequest, JwtCollaboraOnlinePayload } from './collabora-online.interface'\nimport { API_COLLABORA_ONLINE_FILES } from './collabora-online.routes'\n\n@Injectable()\nexport class CollaboraOnlineManager {\n private logger = new Logger(CollaboraOnlineManager.name)\n private readonly externalCollaboraOnlineServer = configuration.applications.files.collabora.externalServer || null\n private readonly expiration = convertHumanTimeToSeconds(configuration.auth.token.refresh.expiration)\n\n constructor(\n private readonly contextManager: ContextManager,\n private readonly jwt: JwtService,\n private readonly filesLockManager: FilesLockManager\n ) {}\n\n async getSettings(user: UserModel, space: SpaceEnv): Promise<CollaboraOnlineReqDto> {\n await this.checkSpace(space)\n const fileExtension = path.extname(space.realPath).slice(1)\n if (!COLLABORA_ONLINE_EXTENSIONS.has(fileExtension)) {\n throw new HttpException('Document not supported', HttpStatus.BAD_REQUEST)\n }\n let hasLock: false | FileLockProps = false\n let mode: FILE_MODE = haveSpaceEnvPermissions(space, SPACE_OPERATION.MODIFY) ? FILE_MODE.EDIT : FILE_MODE.VIEW\n if (mode === FILE_MODE.EDIT) {\n // Check lock conflicts\n try {\n await this.filesLockManager.checkConflicts(space.dbFile, DEPTH.RESOURCE, {\n userId: user.id,\n app: COLLABORA_APP_LOCK,\n lockScope: LOCK_SCOPE.SHARED\n })\n } catch (e) {\n if (e instanceof LockConflict) {\n hasLock = this.filesLockManager.convertLockToFileLockProps(e.lock)\n mode = FILE_MODE.VIEW\n } else {\n this.logger.error(`${this.getSettings.name} - ${e}`)\n throw new HttpException('Unable to check file lock', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n }\n }\n const dbFileHash = genUniqHashFromFileDBProps(space.dbFile)\n const authToken: string = await this.genAuthToken(user, space, dbFileHash)\n return { documentServerUrl: this.getDocumentUrl(dbFileHash, authToken), mode: mode, hasLock: hasLock }\n }\n\n async checkFileInfo(req: FastifyCollaboraOnlineSpaceRequest): Promise<CollaboraOnlineCheckFileInfo> {\n const fStats = await fs.stat(req.space.realPath)\n return {\n BaseFileName: fileName(req.space.realPath),\n Version: genEtag(null, req.space.realPath, false),\n OwnerId: `${req.space.dbFile.ownerId || req.user.id}`,\n Size: fStats.size,\n LastModifiedTime: fStats.mtime.toISOString(),\n UserId: `${req.user.id}`,\n UserFriendlyName: `${req.user.fullName} (${req.user.email})`,\n ReadOnly: false,\n UserExtraInfo: { avatar: await getAvatarBase64(req.user.login) },\n UserCanNotWriteRelative: true,\n UserCanWrite: haveSpaceEnvPermissions(req.space, SPACE_OPERATION.MODIFY),\n UserCanRename: false,\n SupportsUpdate: true,\n SupportsRename: false,\n SupportsExport: true,\n SupportsCoauth: true,\n SupportsLocks: true,\n SupportsGetLock: true\n } satisfies CollaboraOnlineCheckFileInfo\n }\n\n async saveDocument(req: FastifyCollaboraOnlineSpaceRequest): Promise<CollaboraSaveDocumentDto> {\n await this.checkSpace(req.space)\n await this.checkTimeStampFromHeaders(req)\n const tmpFilePath = await uniqueFilePathFromDir(path.join(os.tmpdir(), fileName(req.space.realPath)))\n try {\n await writeFromStream(tmpFilePath, req.raw)\n } catch (e) {\n throw new Error(`unable to save document : ${e.message}`)\n }\n // try to verify the downloaded size\n const contentLength = parseInt(req.headers['content-length'], 10)\n if (!isNaN(contentLength) && contentLength !== 0) {\n const tmpFileSize = await fileSize(tmpFilePath)\n if (tmpFileSize !== contentLength) {\n this.logger.error(`${this.saveDocument.name} - document size differs (${tmpFileSize} != ${contentLength})`)\n throw new HttpException('Size Mismatch', HttpStatus.BAD_REQUEST)\n }\n } else if (contentLength === 0) {\n this.logger.warn(`${this.saveDocument.name} - content length is 0 : ${req.space.url}`)\n }\n // copy contents to avoid inode changes (dbFileHash in some cases)\n try {\n // todo: versioning\n await copyFileContent(tmpFilePath, req.space.realPath)\n await removeFiles(tmpFilePath)\n const fStats = await fs.stat(req.space.realPath)\n return { LastModifiedTime: fStats.mtime.toISOString() } satisfies CollaboraSaveDocumentDto\n } catch (e) {\n this.logger.error(`${this.saveDocument.name} - unable to save document: ${e}`)\n throw new HttpException('Unable to save document', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n }\n\n async manageLock(req: FastifyCollaboraOnlineSpaceRequest, res: FastifyReply) {\n const lockAction = req.headers[COLLABORA_HEADERS.Action] as COLLABORA_LOCK_ACTION\n switch (lockAction) {\n case COLLABORA_LOCK_ACTION.LOCK: {\n const reqLockToken = this.lockTokenFromHeaders(req)\n const currentLock = await this.filesLockManager.isLockedWithToken(reqLockToken, req.space.dbFile.path)\n if (currentLock) {\n await this.filesLockManager.refreshLockTimeout(currentLock, this.expiration)\n break\n }\n const [ok, fileLock] = await this.filesLockManager.create(\n req.user,\n req.space.dbFile,\n COLLABORA_APP_LOCK,\n DEPTH.RESOURCE,\n {\n lockRoot: null,\n lockToken: reqLockToken,\n lockScope: LOCK_SCOPE.SHARED // Collabora uses one lock for the session\n } satisfies FileLockOptions,\n this.expiration\n )\n if (!ok) {\n this.lockConflict(res, fileLock.options.lockToken)\n return\n }\n break\n }\n case COLLABORA_LOCK_ACTION.UNLOCK: {\n const reqLockToken = this.lockTokenFromHeaders(req)\n const currentLock = await this.filesLockManager.isLockedWithToken(reqLockToken, req.space.dbFile.path)\n if (currentLock) {\n await this.filesLockManager.removeLock(currentLock.key)\n } else {\n throw new HttpException('Lock not found', HttpStatus.CONFLICT)\n }\n break\n }\n case COLLABORA_LOCK_ACTION.GET_LOCK: {\n const lock = await this.filesLockManager.getLocksByPath(req.space.dbFile)\n if (lock.length) {\n res.header(COLLABORA_HEADERS.LockToken, lock[0].options.lockToken)\n }\n break\n }\n case COLLABORA_LOCK_ACTION.REFRESH_LOCK: {\n const reqLockToken = this.lockTokenFromHeaders(req)\n const currentLock = await this.filesLockManager.isLockedWithToken(reqLockToken, req.space.dbFile.path)\n if (currentLock) {\n await this.filesLockManager.refreshLockTimeout(currentLock, this.expiration)\n } else {\n throw new HttpException('Lock not found', HttpStatus.CONFLICT)\n }\n break\n }\n default:\n this.logger.warn(`${this.manageLock.name} - Unknown lock action: ${lockAction}`)\n throw new HttpException('Unknown lock action', HttpStatus.BAD_REQUEST)\n }\n }\n\n private getDocumentUrl(dbFileHash: string, token: string): string {\n const collaboraBase = this.externalCollaboraOnlineServer || this.contextManager.headerOriginUrl()\n // Example:\n // - external: https://collabora.domain.com\n // - internal (via nginx proxy): https://domain.com/*\n\n const editorUrl = new URL(COLLABORA_URI, collaboraBase)\n // → /browser/dist/cool.html\n\n const wopiSrcUrl = new URL(`${API_COLLABORA_ONLINE_FILES}/${dbFileHash}`, this.contextManager.headerOriginUrl())\n // → https://domain.com/wopi/files/888\n\n editorUrl.searchParams.set(COLLABORA_WOPI_SRC_QUERY_PARAM_NAME, wopiSrcUrl.toString())\n editorUrl.searchParams.set(COLLABORA_TOKEN_QUERY_PARAM_NAME, token)\n\n return editorUrl.toString()\n }\n\n private genAuthToken(user: UserModel, space: SpaceEnv, dbFileHash: string): Promise<string> {\n // use refresh expiration to allow long sessions\n return this.jwt.signAsync(\n {\n identity: {\n id: user.id,\n login: user.login,\n email: user.email,\n fullName: user.fullName,\n language: user.language,\n role: user.role,\n applications: user.applications,\n spaceUrl: space.url,\n dbFileHash: dbFileHash\n } satisfies JwtCollaboraOnlinePayload\n },\n {\n secret: configuration.auth.token.access.secret,\n expiresIn: this.expiration\n }\n )\n }\n\n private lockTokenFromHeaders(req: FastifyCollaboraOnlineSpaceRequest): string {\n const lockToken = req.headers[COLLABORA_HEADERS.LockToken] as string\n if (!lockToken) {\n throw new HttpException('Lock token is required', HttpStatus.CONFLICT)\n }\n return lockToken\n }\n\n private lockConflict(res: FastifyReply, currentLockToken: string) {\n res.header(COLLABORA_HEADERS.LockToken, currentLockToken)\n throw new HttpException('The file is locked', HttpStatus.CONFLICT)\n }\n\n private async checkTimeStampFromHeaders(req: FastifyCollaboraOnlineSpaceRequest) {\n const timestamp = req.headers[COLLABORA_HEADERS.Timestamp] as string\n if (!timestamp) {\n return\n }\n const fStats = await fs.stat(req.space.realPath)\n if (fStats.mtime.toISOString() !== timestamp) {\n throw new HttpException({ LOOLStatusCode: 1010 }, HttpStatus.CONFLICT)\n }\n }\n\n private async checkSpace(space: SpaceEnv) {\n if (!(await isPathExists(space.realPath))) {\n throw new HttpException('Document not found', HttpStatus.NOT_FOUND)\n }\n if (await isPathIsDir(space.realPath)) {\n throw new HttpException('Document must be a file', HttpStatus.BAD_REQUEST)\n }\n }\n}\n"],"names":["CollaboraOnlineManager","getSettings","user","space","checkSpace","fileExtension","path","extname","realPath","slice","COLLABORA_ONLINE_EXTENSIONS","has","HttpException","HttpStatus","BAD_REQUEST","hasLock","mode","haveSpaceEnvPermissions","SPACE_OPERATION","MODIFY","FILE_MODE","EDIT","VIEW","filesLockManager","checkConflicts","dbFile","DEPTH","RESOURCE","userId","id","app","COLLABORA_APP_LOCK","lockScope","LOCK_SCOPE","SHARED","e","LockConflict","convertLockToFileLockProps","lock","logger","error","name","INTERNAL_SERVER_ERROR","dbFileHash","genUniqHashFromFileDBProps","authToken","genAuthToken","documentServerUrl","getDocumentUrl","checkFileInfo","req","fStats","fs","stat","BaseFileName","fileName","Version","genEtag","OwnerId","ownerId","Size","size","LastModifiedTime","mtime","toISOString","UserId","UserFriendlyName","fullName","email","ReadOnly","UserExtraInfo","avatar","getAvatarBase64","login","UserCanNotWriteRelative","UserCanWrite","UserCanRename","SupportsUpdate","SupportsRename","SupportsExport","SupportsCoauth","SupportsLocks","SupportsGetLock","saveDocument","checkTimeStampFromHeaders","tmpFilePath","uniqueFilePathFromDir","join","os","tmpdir","writeFromStream","raw","Error","message","contentLength","parseInt","headers","isNaN","tmpFileSize","fileSize","warn","url","copyFileContent","removeFiles","manageLock","res","lockAction","COLLABORA_HEADERS","Action","COLLABORA_LOCK_ACTION","LOCK","reqLockToken","lockTokenFromHeaders","currentLock","isLockedWithToken","refreshLockTimeout","expiration","ok","fileLock","create","lockRoot","lockToken","lockConflict","options","UNLOCK","removeLock","key","CONFLICT","GET_LOCK","getLocksByPath","length","header","LockToken","REFRESH_LOCK","token","collaboraBase","externalCollaboraOnlineServer","contextManager","headerOriginUrl","editorUrl","URL","COLLABORA_URI","wopiSrcUrl","API_COLLABORA_ONLINE_FILES","searchParams","set","COLLABORA_WOPI_SRC_QUERY_PARAM_NAME","toString","COLLABORA_TOKEN_QUERY_PARAM_NAME","jwt","signAsync","identity","language","role","applications","spaceUrl","secret","configuration","auth","access","expiresIn","currentLockToken","timestamp","Timestamp","LOOLStatusCode","isPathExists","NOT_FOUND","isPathIsDir","Logger","files","collabora","externalServer","convertHumanTimeToSeconds","refresh"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/collabora-online/collabora-online-manager.service.ts"],"sourcesContent":["import { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common'\nimport { JwtService } from '@nestjs/jwt'\nimport { FastifyReply } from 'fastify'\nimport fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { convertHumanTimeToSeconds } from '../../../../common/functions'\nimport { configuration } from '../../../../configuration/config.environment'\nimport { ContextManager } from '../../../../infrastructure/context/services/context-manager.service'\nimport { SPACE_OPERATION } from '../../../spaces/constants/spaces'\nimport type { SpaceEnv } from '../../../spaces/models/space-env.model'\nimport { haveSpaceEnvPermissions } from '../../../spaces/utils/permissions'\nimport type { UserModel } from '../../../users/models/user.model'\nimport { getAvatarBase64 } from '../../../users/utils/avatar'\nimport { DEPTH, LOCK_SCOPE } from '../../../webdav/constants/webdav'\nimport { FILE_MODE } from '../../constants/operations'\nimport { FileLockOptions } from '../../interfaces/file-lock.interface'\nimport { FileLockProps } from '../../interfaces/file-props.interface'\nimport { LockConflict } from '../../models/file-lock-error'\nimport { FilesLockManager } from '../../services/files-lock-manager.service'\nimport {\n copyFileContent,\n fileName,\n fileSize,\n genEtag,\n genUniqHashFromFileDBProps,\n isPathExists,\n isPathIsDir,\n removeFiles,\n uniqueFilePathFromDir,\n writeFromStream\n} from '../../utils/files'\nimport {\n COLLABORA_APP_LOCK,\n COLLABORA_HEADERS,\n COLLABORA_LOCK_ACTION,\n COLLABORA_ONLINE_EXTENSIONS,\n COLLABORA_TOKEN_QUERY_PARAM_NAME,\n COLLABORA_URI,\n COLLABORA_WOPI_SRC_QUERY_PARAM_NAME\n} from './collabora-online.constants'\nimport { CollaboraOnlineReqDto, CollaboraSaveDocumentDto } from './collabora-online.dtos'\nimport { CollaboraOnlineCheckFileInfo, FastifyCollaboraOnlineSpaceRequest, JwtCollaboraOnlinePayload } from './collabora-online.interface'\nimport { API_COLLABORA_ONLINE_FILES } from './collabora-online.routes'\n\n@Injectable()\nexport class CollaboraOnlineManager {\n private logger = new Logger(CollaboraOnlineManager.name)\n private readonly externalCollaboraOnlineServer = configuration.applications.files.collabora.externalServer || null\n private readonly expiration = convertHumanTimeToSeconds(configuration.auth.token.refresh.expiration)\n\n constructor(\n private readonly contextManager: ContextManager,\n private readonly jwt: JwtService,\n private readonly filesLockManager: FilesLockManager\n ) {}\n\n async getSettings(user: UserModel, space: SpaceEnv): Promise<CollaboraOnlineReqDto> {\n await this.checkSpace(space)\n const fileExtension = path.extname(space.realPath).slice(1)\n if (!COLLABORA_ONLINE_EXTENSIONS.has(fileExtension)) {\n throw new HttpException('Document not supported', HttpStatus.BAD_REQUEST)\n }\n let hasLock: false | FileLockProps = false\n let mode: FILE_MODE = haveSpaceEnvPermissions(space, SPACE_OPERATION.MODIFY) ? FILE_MODE.EDIT : FILE_MODE.VIEW\n if (mode === FILE_MODE.EDIT) {\n // Check lock conflicts\n try {\n await this.filesLockManager.checkConflicts(space.dbFile, DEPTH.RESOURCE, {\n userId: user.id,\n app: COLLABORA_APP_LOCK,\n lockScope: LOCK_SCOPE.SHARED\n })\n } catch (e) {\n if (e instanceof LockConflict) {\n hasLock = this.filesLockManager.convertLockToFileLockProps(e.lock)\n mode = FILE_MODE.VIEW\n } else {\n this.logger.error({ tag: this.getSettings.name, msg: `${e}` })\n throw new HttpException('Unable to check file lock', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n }\n }\n const dbFileHash = genUniqHashFromFileDBProps(space.dbFile)\n const authToken: string = await this.genAuthToken(user, space, dbFileHash)\n return { documentServerUrl: this.getDocumentUrl(dbFileHash, authToken), mode: mode, hasLock: hasLock }\n }\n\n async checkFileInfo(req: FastifyCollaboraOnlineSpaceRequest): Promise<CollaboraOnlineCheckFileInfo> {\n const fStats = await fs.stat(req.space.realPath)\n return {\n BaseFileName: fileName(req.space.realPath),\n Version: genEtag(null, req.space.realPath, false),\n OwnerId: `${req.space.dbFile.ownerId || req.user.id}`,\n Size: fStats.size,\n LastModifiedTime: fStats.mtime.toISOString(),\n UserId: `${req.user.id}`,\n UserFriendlyName: `${req.user.fullName} (${req.user.email})`,\n ReadOnly: false,\n UserExtraInfo: { avatar: await getAvatarBase64(req.user.login) },\n UserCanNotWriteRelative: true,\n UserCanWrite: haveSpaceEnvPermissions(req.space, SPACE_OPERATION.MODIFY),\n UserCanRename: false,\n SupportsUpdate: true,\n SupportsRename: false,\n SupportsExport: true,\n SupportsCoauth: true,\n SupportsLocks: true,\n SupportsGetLock: true\n } satisfies CollaboraOnlineCheckFileInfo\n }\n\n async saveDocument(req: FastifyCollaboraOnlineSpaceRequest): Promise<CollaboraSaveDocumentDto> {\n await this.checkSpace(req.space)\n await this.checkTimeStampFromHeaders(req)\n const tmpFilePath = await uniqueFilePathFromDir(path.join(os.tmpdir(), fileName(req.space.realPath)))\n try {\n await writeFromStream(tmpFilePath, req.raw)\n } catch (e) {\n throw new Error(`unable to save document : ${e.message}`)\n }\n // try to verify the downloaded size\n const contentLength = parseInt(req.headers['content-length'], 10)\n if (!isNaN(contentLength) && contentLength !== 0) {\n const tmpFileSize = await fileSize(tmpFilePath)\n if (tmpFileSize !== contentLength) {\n this.logger.error({ tag: this.saveDocument.name, msg: `document size differs (${tmpFileSize} != ${contentLength})` })\n throw new HttpException('Size Mismatch', HttpStatus.BAD_REQUEST)\n }\n } else if (contentLength === 0) {\n this.logger.warn({ tag: this.saveDocument.name, msg: `content length is 0 : ${req.space.url}` })\n }\n // copy contents to avoid inode changes (dbFileHash in some cases)\n try {\n // todo: versioning\n await copyFileContent(tmpFilePath, req.space.realPath)\n await removeFiles(tmpFilePath)\n const fStats = await fs.stat(req.space.realPath)\n return { LastModifiedTime: fStats.mtime.toISOString() } satisfies CollaboraSaveDocumentDto\n } catch (e) {\n this.logger.error({ tag: this.saveDocument.name, msg: `unable to save document: ${e}` })\n throw new HttpException('Unable to save document', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n }\n\n async manageLock(req: FastifyCollaboraOnlineSpaceRequest, res: FastifyReply) {\n const lockAction = req.headers[COLLABORA_HEADERS.Action] as COLLABORA_LOCK_ACTION\n switch (lockAction) {\n case COLLABORA_LOCK_ACTION.LOCK: {\n const reqLockToken = this.lockTokenFromHeaders(req)\n const currentLock = await this.filesLockManager.isLockedWithToken(reqLockToken, req.space.dbFile.path)\n if (currentLock) {\n await this.filesLockManager.refreshLockTimeout(currentLock, this.expiration)\n break\n }\n const [ok, fileLock] = await this.filesLockManager.create(\n req.user,\n req.space.dbFile,\n COLLABORA_APP_LOCK,\n DEPTH.RESOURCE,\n {\n lockRoot: null,\n lockToken: reqLockToken,\n lockScope: LOCK_SCOPE.SHARED // Collabora uses one lock for the session\n } satisfies FileLockOptions,\n this.expiration\n )\n if (!ok) {\n this.lockConflict(res, fileLock.options.lockToken)\n return\n }\n break\n }\n case COLLABORA_LOCK_ACTION.UNLOCK: {\n const reqLockToken = this.lockTokenFromHeaders(req)\n const currentLock = await this.filesLockManager.isLockedWithToken(reqLockToken, req.space.dbFile.path)\n if (currentLock) {\n await this.filesLockManager.removeLock(currentLock.key)\n } else {\n throw new HttpException('Lock not found', HttpStatus.CONFLICT)\n }\n break\n }\n case COLLABORA_LOCK_ACTION.GET_LOCK: {\n const lock = await this.filesLockManager.getLocksByPath(req.space.dbFile)\n if (lock.length) {\n res.header(COLLABORA_HEADERS.LockToken, lock[0].options.lockToken)\n }\n break\n }\n case COLLABORA_LOCK_ACTION.REFRESH_LOCK: {\n const reqLockToken = this.lockTokenFromHeaders(req)\n const currentLock = await this.filesLockManager.isLockedWithToken(reqLockToken, req.space.dbFile.path)\n if (currentLock) {\n await this.filesLockManager.refreshLockTimeout(currentLock, this.expiration)\n } else {\n throw new HttpException('Lock not found', HttpStatus.CONFLICT)\n }\n break\n }\n default:\n this.logger.warn({ tag: this.manageLock.name, msg: `Unknown lock action: ${lockAction}` })\n throw new HttpException('Unknown lock action', HttpStatus.BAD_REQUEST)\n }\n }\n\n private getDocumentUrl(dbFileHash: string, token: string): string {\n const collaboraBase = this.externalCollaboraOnlineServer || this.contextManager.headerOriginUrl()\n // Example:\n // - external: https://collabora.domain.com\n // - internal (via nginx proxy): https://domain.com/*\n\n const editorUrl = new URL(COLLABORA_URI, collaboraBase)\n // → /browser/dist/cool.html\n\n const wopiSrcUrl = new URL(`${API_COLLABORA_ONLINE_FILES}/${dbFileHash}`, this.contextManager.headerOriginUrl())\n // → https://domain.com/wopi/files/888\n\n editorUrl.searchParams.set(COLLABORA_WOPI_SRC_QUERY_PARAM_NAME, wopiSrcUrl.toString())\n editorUrl.searchParams.set(COLLABORA_TOKEN_QUERY_PARAM_NAME, token)\n\n return editorUrl.toString()\n }\n\n private genAuthToken(user: UserModel, space: SpaceEnv, dbFileHash: string): Promise<string> {\n // use refresh expiration to allow long sessions\n return this.jwt.signAsync(\n {\n identity: {\n id: user.id,\n login: user.login,\n email: user.email,\n fullName: user.fullName,\n language: user.language,\n role: user.role,\n applications: user.applications,\n spaceUrl: space.url,\n dbFileHash: dbFileHash\n } satisfies JwtCollaboraOnlinePayload\n },\n {\n secret: configuration.auth.token.access.secret,\n expiresIn: this.expiration\n }\n )\n }\n\n private lockTokenFromHeaders(req: FastifyCollaboraOnlineSpaceRequest): string {\n const lockToken = req.headers[COLLABORA_HEADERS.LockToken] as string\n if (!lockToken) {\n throw new HttpException('Lock token is required', HttpStatus.CONFLICT)\n }\n return lockToken\n }\n\n private lockConflict(res: FastifyReply, currentLockToken: string) {\n res.header(COLLABORA_HEADERS.LockToken, currentLockToken)\n throw new HttpException('The file is locked', HttpStatus.CONFLICT)\n }\n\n private async checkTimeStampFromHeaders(req: FastifyCollaboraOnlineSpaceRequest) {\n const timestamp = req.headers[COLLABORA_HEADERS.Timestamp] as string\n if (!timestamp) {\n return\n }\n const fStats = await fs.stat(req.space.realPath)\n if (fStats.mtime.toISOString() !== timestamp) {\n throw new HttpException({ LOOLStatusCode: 1010 }, HttpStatus.CONFLICT)\n }\n }\n\n private async checkSpace(space: SpaceEnv) {\n if (!(await isPathExists(space.realPath))) {\n throw new HttpException('Document not found', HttpStatus.NOT_FOUND)\n }\n if (await isPathIsDir(space.realPath)) {\n throw new HttpException('Document must be a file', HttpStatus.BAD_REQUEST)\n }\n }\n}\n"],"names":["CollaboraOnlineManager","getSettings","user","space","checkSpace","fileExtension","path","extname","realPath","slice","COLLABORA_ONLINE_EXTENSIONS","has","HttpException","HttpStatus","BAD_REQUEST","hasLock","mode","haveSpaceEnvPermissions","SPACE_OPERATION","MODIFY","FILE_MODE","EDIT","VIEW","filesLockManager","checkConflicts","dbFile","DEPTH","RESOURCE","userId","id","app","COLLABORA_APP_LOCK","lockScope","LOCK_SCOPE","SHARED","e","LockConflict","convertLockToFileLockProps","lock","logger","error","tag","name","msg","INTERNAL_SERVER_ERROR","dbFileHash","genUniqHashFromFileDBProps","authToken","genAuthToken","documentServerUrl","getDocumentUrl","checkFileInfo","req","fStats","fs","stat","BaseFileName","fileName","Version","genEtag","OwnerId","ownerId","Size","size","LastModifiedTime","mtime","toISOString","UserId","UserFriendlyName","fullName","email","ReadOnly","UserExtraInfo","avatar","getAvatarBase64","login","UserCanNotWriteRelative","UserCanWrite","UserCanRename","SupportsUpdate","SupportsRename","SupportsExport","SupportsCoauth","SupportsLocks","SupportsGetLock","saveDocument","checkTimeStampFromHeaders","tmpFilePath","uniqueFilePathFromDir","join","os","tmpdir","writeFromStream","raw","Error","message","contentLength","parseInt","headers","isNaN","tmpFileSize","fileSize","warn","url","copyFileContent","removeFiles","manageLock","res","lockAction","COLLABORA_HEADERS","Action","COLLABORA_LOCK_ACTION","LOCK","reqLockToken","lockTokenFromHeaders","currentLock","isLockedWithToken","refreshLockTimeout","expiration","ok","fileLock","create","lockRoot","lockToken","lockConflict","options","UNLOCK","removeLock","key","CONFLICT","GET_LOCK","getLocksByPath","length","header","LockToken","REFRESH_LOCK","token","collaboraBase","externalCollaboraOnlineServer","contextManager","headerOriginUrl","editorUrl","URL","COLLABORA_URI","wopiSrcUrl","API_COLLABORA_ONLINE_FILES","searchParams","set","COLLABORA_WOPI_SRC_QUERY_PARAM_NAME","toString","COLLABORA_TOKEN_QUERY_PARAM_NAME","jwt","signAsync","identity","language","role","applications","spaceUrl","secret","configuration","auth","access","expiresIn","currentLockToken","timestamp","Timestamp","LOOLStatusCode","isPathExists","NOT_FOUND","isPathIsDir","Logger","files","collabora","externalServer","convertHumanTimeToSeconds","refresh"],"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
  });