@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,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
  });
@@ -39,10 +35,16 @@ let WebDAVSpaces = class WebDAVSpaces {
39
35
  return space;
40
36
  }
41
37
  } catch (e) {
42
- this.logger.warn(`${this.spaceEnv.name} : ${e}`);
38
+ this.logger.warn({
39
+ tag: this.spaceEnv.name,
40
+ msg: `${e}`
41
+ });
43
42
  return null;
44
43
  }
45
- this.logger.warn(`Space not authorized or not found : ${path}`);
44
+ this.logger.warn({
45
+ tag: this.spaceEnv.name,
46
+ msg: `Space not authorized or not found : ${path}`
47
+ });
46
48
  return null;
47
49
  }
48
50
  propfind(req, space) {
@@ -58,7 +60,10 @@ let WebDAVSpaces = class WebDAVSpaces {
58
60
  case _routes.WEBDAV_NS.TRASH:
59
61
  return this.listTrashes(req);
60
62
  default:
61
- this.logger.error(`Unknown space ${space}`);
63
+ this.logger.error({
64
+ tag: this.propfind.name,
65
+ msg: `Unknown space ${space}`
66
+ });
62
67
  throw new _common.HttpException('Unknown space', _common.HttpStatus.NOT_FOUND);
63
68
  }
64
69
  }
@@ -127,7 +132,10 @@ let WebDAVSpaces = class WebDAVSpaces {
127
132
  yield this.roots[_routes.WEBDAV_NS.SHARES];
128
133
  } else {
129
134
  if (!await (0, _files.isPathExists)(space.realPath)) {
130
- this.logger.warn(`Location not found : ${space.realPath}`);
135
+ this.logger.warn({
136
+ tag: this.listFiles.name,
137
+ msg: `Location not found : ${space.realPath}`
138
+ });
131
139
  throw new _common.HttpException('Location not found', _common.HttpStatus.NOT_FOUND);
132
140
  }
133
141
  yield new _webdavfilemodel.WebDAVFile(await (0, _files.getProps)(space.realPath, req.dav.url), req.dav.url, true);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/webdav/services/webdav-spaces.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 { getProps, isPathExists, isPathIsDir } from '../../files/utils/files'\nimport { SPACE_REPOSITORY } from '../../spaces/constants/spaces'\nimport { SpaceEnv } from '../../spaces/models/space-env.model'\nimport { SpacesBrowser } from '../../spaces/services/spaces-browser.service'\nimport { SpacesManager } from '../../spaces/services/spaces-manager.service'\nimport { canAccessToSpaceUrl } from '../../spaces/utils/permissions'\nimport { UserModel } from '../../users/models/user.model'\nimport { WEBDAV_NS, WEBDAV_SPACES } from '../constants/routes'\nimport { DEPTH } from '../constants/webdav'\nimport { FastifyDAVRequest } from '../interfaces/webdav.interface'\nimport { WebDAVFile } from '../models/webdav-file.model'\nimport { WEBDAV_PATH_TO_SPACE_SEGMENTS } from '../utils/routes'\n\n@Injectable()\nexport class WebDAVSpaces {\n private readonly logger = new Logger(WebDAVSpaces.name)\n private readonly roots: Record<string, WebDAVFile> = {}\n\n constructor(\n private readonly spacesManager: SpacesManager,\n private readonly spacesBrowser: SpacesBrowser\n ) {\n for (const [name, info] of Object.entries(WEBDAV_SPACES)) {\n this.roots[name] = new WebDAVFile(\n {\n id: 0,\n name: name,\n isDir: true,\n size: 0,\n ctime: new Date().getTime(),\n mtime: new Date().getTime(),\n mime: undefined\n },\n info.route,\n true\n )\n }\n }\n\n async spaceEnv(user: UserModel, path: string) {\n try {\n const space: SpaceEnv = await this.spacesManager.spaceEnv(user, WEBDAV_PATH_TO_SPACE_SEGMENTS(path))\n if (space) {\n return space\n }\n } catch (e) {\n this.logger.warn(`${this.spaceEnv.name} : ${e}`)\n return null\n }\n\n this.logger.warn(`Space not authorized or not found : ${path}`)\n return null\n }\n\n propfind(req: FastifyDAVRequest, space: string): AsyncGenerator<WebDAVFile> {\n switch (space) {\n case SPACE_REPOSITORY.FILES:\n return this.listFiles(req, req.space)\n case WEBDAV_NS.SERVER:\n return this.listServer(req)\n case WEBDAV_NS.WEBDAV:\n return this.listWebDAV(req)\n case WEBDAV_NS.SPACES:\n return this.listSpaces(req)\n case WEBDAV_NS.TRASH:\n return this.listTrashes(req)\n default:\n this.logger.error(`Unknown space ${space}`)\n throw new HttpException('Unknown space', HttpStatus.NOT_FOUND)\n }\n }\n\n private async *listServer(req: FastifyDAVRequest): AsyncGenerator<WebDAVFile> {\n yield this.roots[WEBDAV_NS.SERVER]\n\n if (req.dav.depth === DEPTH.MEMBERS) {\n yield this.roots[WEBDAV_NS.WEBDAV]\n }\n }\n\n private async *listWebDAV(req: FastifyDAVRequest): AsyncGenerator<WebDAVFile> {\n yield this.roots[WEBDAV_NS.WEBDAV]\n\n if (req.dav.depth === DEPTH.MEMBERS) {\n for (const root of Object.values(this.roots)) {\n if ([WEBDAV_NS.SERVER as string, WEBDAV_NS.WEBDAV as string].indexOf(root.name) === -1) {\n // filter repositories based on user applications\n if (!canAccessToSpaceUrl(req.user, WEBDAV_SPACES[root.name].spaceRepository)) {\n continue\n }\n yield root\n }\n }\n }\n }\n\n private async *listSpaces(req: FastifyDAVRequest): AsyncGenerator<WebDAVFile> {\n yield this.roots[WEBDAV_NS.SPACES]\n\n if (req.dav.depth === DEPTH.MEMBERS) {\n for (const s of await this.spacesManager.listSpaces(req.user.id)) {\n yield new WebDAVFile(\n {\n id: s.id,\n name: s.name,\n alias: s.alias,\n isDir: true,\n size: 0,\n mime: undefined,\n ctime: new Date(s.createdAt).getTime(),\n mtime: new Date(s.modifiedAt).getTime()\n },\n req.dav.url\n )\n }\n }\n }\n\n private async *listTrashes(req: FastifyDAVRequest): AsyncGenerator<WebDAVFile> {\n yield this.roots[WEBDAV_NS.TRASH]\n\n if (req.dav.depth === DEPTH.MEMBERS) {\n for (const f of await this.spacesManager.listTrashes(req.user)) {\n yield new WebDAVFile(\n {\n id: f.id,\n alias: f.alias,\n name: `${f.alias} (${f.nb})`,\n isDir: true,\n size: 0,\n mime: undefined,\n mtime: f.mtime,\n ctime: f.ctime\n },\n req.dav.url\n )\n }\n }\n }\n\n private async *listFiles(req: FastifyDAVRequest, space: SpaceEnv): AsyncGenerator<WebDAVFile> {\n let isDir: boolean\n\n if (space.inSharesList) {\n // The shares are defined like a files (direct link)\n isDir = true\n yield this.roots[WEBDAV_NS.SHARES]\n } else {\n if (!(await isPathExists(space.realPath))) {\n this.logger.warn(`Location not found : ${space.realPath}`)\n throw new HttpException('Location not found', HttpStatus.NOT_FOUND)\n }\n yield new WebDAVFile(await getProps(space.realPath, req.dav.url), req.dav.url, true)\n }\n\n if (req.dav.depth === DEPTH.MEMBERS && (isDir === true || (await isPathIsDir(space.realPath)))) {\n const { files } = await this.spacesBrowser.browse(req.user, space)\n for (const f of files) {\n yield new WebDAVFile(f, req.dav.url)\n }\n }\n }\n}\n"],"names":["WebDAVSpaces","spaceEnv","user","path","space","spacesManager","WEBDAV_PATH_TO_SPACE_SEGMENTS","e","logger","warn","name","propfind","req","SPACE_REPOSITORY","FILES","listFiles","WEBDAV_NS","SERVER","listServer","WEBDAV","listWebDAV","SPACES","listSpaces","TRASH","listTrashes","error","HttpException","HttpStatus","NOT_FOUND","roots","dav","depth","DEPTH","MEMBERS","root","Object","values","indexOf","canAccessToSpaceUrl","WEBDAV_SPACES","spaceRepository","s","id","WebDAVFile","alias","isDir","size","mime","undefined","ctime","Date","createdAt","getTime","mtime","modifiedAt","url","f","nb","inSharesList","SHARES","isPathExists","realPath","getProps","isPathIsDir","files","spacesBrowser","browse","Logger","info","entries","route"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/webdav/services/webdav-spaces.service.ts"],"sourcesContent":["import { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common'\nimport { getProps, isPathExists, isPathIsDir } from '../../files/utils/files'\nimport { SPACE_REPOSITORY } from '../../spaces/constants/spaces'\nimport { SpaceEnv } from '../../spaces/models/space-env.model'\nimport { SpacesBrowser } from '../../spaces/services/spaces-browser.service'\nimport { SpacesManager } from '../../spaces/services/spaces-manager.service'\nimport { canAccessToSpaceUrl } from '../../spaces/utils/permissions'\nimport { UserModel } from '../../users/models/user.model'\nimport { WEBDAV_NS, WEBDAV_SPACES } from '../constants/routes'\nimport { DEPTH } from '../constants/webdav'\nimport { FastifyDAVRequest } from '../interfaces/webdav.interface'\nimport { WebDAVFile } from '../models/webdav-file.model'\nimport { WEBDAV_PATH_TO_SPACE_SEGMENTS } from '../utils/routes'\n\n@Injectable()\nexport class WebDAVSpaces {\n private readonly logger = new Logger(WebDAVSpaces.name)\n private readonly roots: Record<string, WebDAVFile> = {}\n\n constructor(\n private readonly spacesManager: SpacesManager,\n private readonly spacesBrowser: SpacesBrowser\n ) {\n for (const [name, info] of Object.entries(WEBDAV_SPACES)) {\n this.roots[name] = new WebDAVFile(\n {\n id: 0,\n name: name,\n isDir: true,\n size: 0,\n ctime: new Date().getTime(),\n mtime: new Date().getTime(),\n mime: undefined\n },\n info.route,\n true\n )\n }\n }\n\n async spaceEnv(user: UserModel, path: string) {\n try {\n const space: SpaceEnv = await this.spacesManager.spaceEnv(user, WEBDAV_PATH_TO_SPACE_SEGMENTS(path))\n if (space) {\n return space\n }\n } catch (e) {\n this.logger.warn({ tag: this.spaceEnv.name, msg: `${e}` })\n return null\n }\n\n this.logger.warn({ tag: this.spaceEnv.name, msg: `Space not authorized or not found : ${path}` })\n return null\n }\n\n propfind(req: FastifyDAVRequest, space: string): AsyncGenerator<WebDAVFile> {\n switch (space) {\n case SPACE_REPOSITORY.FILES:\n return this.listFiles(req, req.space)\n case WEBDAV_NS.SERVER:\n return this.listServer(req)\n case WEBDAV_NS.WEBDAV:\n return this.listWebDAV(req)\n case WEBDAV_NS.SPACES:\n return this.listSpaces(req)\n case WEBDAV_NS.TRASH:\n return this.listTrashes(req)\n default:\n this.logger.error({ tag: this.propfind.name, msg: `Unknown space ${space}` })\n throw new HttpException('Unknown space', HttpStatus.NOT_FOUND)\n }\n }\n\n private async *listServer(req: FastifyDAVRequest): AsyncGenerator<WebDAVFile> {\n yield this.roots[WEBDAV_NS.SERVER]\n\n if (req.dav.depth === DEPTH.MEMBERS) {\n yield this.roots[WEBDAV_NS.WEBDAV]\n }\n }\n\n private async *listWebDAV(req: FastifyDAVRequest): AsyncGenerator<WebDAVFile> {\n yield this.roots[WEBDAV_NS.WEBDAV]\n\n if (req.dav.depth === DEPTH.MEMBERS) {\n for (const root of Object.values(this.roots)) {\n if ([WEBDAV_NS.SERVER as string, WEBDAV_NS.WEBDAV as string].indexOf(root.name) === -1) {\n // filter repositories based on user applications\n if (!canAccessToSpaceUrl(req.user, WEBDAV_SPACES[root.name].spaceRepository)) {\n continue\n }\n yield root\n }\n }\n }\n }\n\n private async *listSpaces(req: FastifyDAVRequest): AsyncGenerator<WebDAVFile> {\n yield this.roots[WEBDAV_NS.SPACES]\n\n if (req.dav.depth === DEPTH.MEMBERS) {\n for (const s of await this.spacesManager.listSpaces(req.user.id)) {\n yield new WebDAVFile(\n {\n id: s.id,\n name: s.name,\n alias: s.alias,\n isDir: true,\n size: 0,\n mime: undefined,\n ctime: new Date(s.createdAt).getTime(),\n mtime: new Date(s.modifiedAt).getTime()\n },\n req.dav.url\n )\n }\n }\n }\n\n private async *listTrashes(req: FastifyDAVRequest): AsyncGenerator<WebDAVFile> {\n yield this.roots[WEBDAV_NS.TRASH]\n\n if (req.dav.depth === DEPTH.MEMBERS) {\n for (const f of await this.spacesManager.listTrashes(req.user)) {\n yield new WebDAVFile(\n {\n id: f.id,\n alias: f.alias,\n name: `${f.alias} (${f.nb})`,\n isDir: true,\n size: 0,\n mime: undefined,\n mtime: f.mtime,\n ctime: f.ctime\n },\n req.dav.url\n )\n }\n }\n }\n\n private async *listFiles(req: FastifyDAVRequest, space: SpaceEnv): AsyncGenerator<WebDAVFile> {\n let isDir: boolean\n\n if (space.inSharesList) {\n // The shares are defined like a files (direct link)\n isDir = true\n yield this.roots[WEBDAV_NS.SHARES]\n } else {\n if (!(await isPathExists(space.realPath))) {\n this.logger.warn({ tag: this.listFiles.name, msg: `Location not found : ${space.realPath}` })\n throw new HttpException('Location not found', HttpStatus.NOT_FOUND)\n }\n yield new WebDAVFile(await getProps(space.realPath, req.dav.url), req.dav.url, true)\n }\n\n if (req.dav.depth === DEPTH.MEMBERS && (isDir === true || (await isPathIsDir(space.realPath)))) {\n const { files } = await this.spacesBrowser.browse(req.user, space)\n for (const f of files) {\n yield new WebDAVFile(f, req.dav.url)\n }\n }\n }\n}\n"],"names":["WebDAVSpaces","spaceEnv","user","path","space","spacesManager","WEBDAV_PATH_TO_SPACE_SEGMENTS","e","logger","warn","tag","name","msg","propfind","req","SPACE_REPOSITORY","FILES","listFiles","WEBDAV_NS","SERVER","listServer","WEBDAV","listWebDAV","SPACES","listSpaces","TRASH","listTrashes","error","HttpException","HttpStatus","NOT_FOUND","roots","dav","depth","DEPTH","MEMBERS","root","Object","values","indexOf","canAccessToSpaceUrl","WEBDAV_SPACES","spaceRepository","s","id","WebDAVFile","alias","isDir","size","mime","undefined","ctime","Date","createdAt","getTime","mtime","modifiedAt","url","f","nb","inSharesList","SHARES","isPathExists","realPath","getProps","isPathIsDir","files","spacesBrowser","browse","Logger","info","entries","route"],"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/webdav/services/webdav-spaces.service.spec.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { HttpException, HttpStatus } from '@nestjs/common'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { getProps, isPathExists, isPathIsDir } from '../../files/utils/files'\nimport { SPACE_REPOSITORY } from '../../spaces/constants/spaces'\nimport { SpacesBrowser } from '../../spaces/services/spaces-browser.service'\nimport { SpacesManager } from '../../spaces/services/spaces-manager.service'\nimport { canAccessToSpaceUrl } from '../../spaces/utils/permissions'\nimport { WEBDAV_NS } from '../constants/routes'\nimport { DEPTH } from '../constants/webdav'\nimport type { FastifyDAVRequest } from '../interfaces/webdav.interface'\nimport { WebDAVSpaces } from './webdav-spaces.service'\n\n// mocks for file utils and permissions\njest.mock('../../files/utils/files', () => ({\n getProps: jest.fn(),\n isPathExists: jest.fn(),\n isPathIsDir: jest.fn()\n}))\njest.mock('../../spaces/utils/permissions', () => ({\n canAccessToSpaceUrl: jest.fn()\n}))\n// mock for WEBDAV path-to-space segments\njest.mock('../utils/routes', () => ({\n WEBDAV_PATH_TO_SPACE_SEGMENTS: jest.fn(() => ['files', 'personal'])\n}))\n\n// small helper to collect results from an AsyncGenerator\nasync function collectGenerator<T>(gen: AsyncGenerator<T>): Promise<T[]> {\n const all: T[] = []\n for await (const item of gen) {\n all.push(item)\n }\n return all\n}\n\ndescribe(WebDAVSpaces.name, () => {\n let service: WebDAVSpaces\n let spacesManager: jest.Mocked<SpacesManager>\n let spacesBrowser: jest.Mocked<SpacesBrowser>\n\n const user = { id: 1, login: 'john', isAdmin: false } as any\n\n beforeAll(async () => {\n const spacesManagerMock: Partial<jest.Mocked<SpacesManager>> = {\n spaceEnv: jest.fn(),\n listSpaces: jest.fn(),\n listTrashes: jest.fn()\n }\n const spacesBrowserMock: Partial<jest.Mocked<SpacesBrowser>> = {\n browse: jest.fn()\n }\n\n const module: TestingModule = await Test.createTestingModule({\n providers: [{ provide: SpacesBrowser, useValue: spacesBrowserMock }, { provide: SpacesManager, useValue: spacesManagerMock }, WebDAVSpaces]\n }).compile()\n\n module.useLogger(['fatal'])\n service = module.get<WebDAVSpaces>(WebDAVSpaces)\n spacesManager = module.get(SpacesManager) as jest.Mocked<SpacesManager>\n spacesBrowser = module.get(SpacesBrowser) as jest.Mocked<SpacesBrowser>\n })\n\n beforeEach(() => {\n jest.clearAllMocks()\n })\n\n it('should be defined', () => {\n expect(service).toBeDefined()\n })\n\n describe('spaceEnv', () => {\n it('returns space when manager resolves', async () => {\n const fakeSpace = { alias: 'personal', id: 0 } as any\n ;(spacesManager.spaceEnv as jest.Mock).mockResolvedValue(fakeSpace)\n\n const res = await service.spaceEnv(user as any, '/webdav/personal')\n expect(res).toBe(fakeSpace)\n expect(spacesManager.spaceEnv).toHaveBeenCalled()\n })\n\n it('returns null when manager throws', async () => {\n ;(spacesManager.spaceEnv as jest.Mock).mockRejectedValue(new Error('boom'))\n\n const res = await service.spaceEnv(user as any, '/webdav/personal')\n expect(res).toBeNull()\n })\n\n it('returns null when space not found', async () => {\n ;(spacesManager.spaceEnv as jest.Mock).mockResolvedValue(null)\n\n const res = await service.spaceEnv(user as any, '/webdav/personal')\n expect(res).toBeNull()\n })\n })\n\n describe('propfind - server root', () => {\n it('yields server root and webdav child when depth=1', async () => {\n const req = { user, dav: { url: '/', depth: DEPTH.MEMBERS } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.SERVER as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.SERVER, WEBDAV_NS.WEBDAV])\n })\n\n it('yields only server root when depth=0', async () => {\n const req = { user, dav: { url: '/', depth: DEPTH.RESOURCE } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.SERVER as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.SERVER])\n })\n })\n\n describe('propfind - webdav listing', () => {\n it('filters repositories by user access', async () => {\n ;(canAccessToSpaceUrl as jest.Mock).mockImplementation((_u: any, repos: string[]) => repos?.includes(SPACE_REPOSITORY.FILES))\n const req = { user, dav: { url: '/webdav', depth: DEPTH.MEMBERS } } as unknown as FastifyDAVRequest\n\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.WEBDAV as any))\n // should list only roots that include FILES in their repository (personal, spaces), not server/webdav\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.WEBDAV, 'personal', 'spaces'])\n })\n\n it('lists only itself when depth=0', async () => {\n const req = { user, dav: { url: '/webdav', depth: DEPTH.RESOURCE } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.WEBDAV as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.WEBDAV])\n })\n })\n\n describe('propfind - spaces listing', () => {\n it('yields spaces root then user spaces when depth=1', async () => {\n const now = new Date()\n ;(spacesManager.listSpaces as jest.Mock).mockResolvedValue([\n { id: 10, name: 'Team A', alias: 'team-a', createdAt: now.toISOString(), modifiedAt: now.toISOString() },\n { id: 11, name: 'Team B', alias: 'team-b', createdAt: now.toISOString(), modifiedAt: now.toISOString() }\n ])\n\n const req = { user, dav: { url: '/webdav/spaces', depth: DEPTH.MEMBERS } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.SPACES as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.SPACES, 'Team A', 'Team B'])\n })\n\n it('yields only spaces root when depth=0', async () => {\n ;(spacesManager.listSpaces as jest.Mock).mockResolvedValue([])\n const req = { user, dav: { url: '/webdav/spaces', depth: DEPTH.RESOURCE } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.SPACES as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.SPACES])\n })\n })\n\n describe('propfind - trashes listing', () => {\n it('yields trash root then each trash bucket when depth=1', async () => {\n ;(spacesManager.listTrashes as jest.Mock).mockResolvedValue([\n { id: 1, alias: 'personal', nb: 2, mtime: 3, ctime: 4, name: 'Personal files' },\n { id: 2, alias: 'team-a', nb: 5, mtime: 6, ctime: 7, name: 'Team A' }\n ])\n const req = { user, dav: { url: '/webdav/trash', depth: DEPTH.MEMBERS } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.TRASH as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.TRASH, 'personal (2)', 'team-a (5)'])\n })\n\n it('yields only trash root when depth=0', async () => {\n ;(spacesManager.listTrashes as jest.Mock).mockResolvedValue([])\n const req = { user, dav: { url: '/webdav/trash', depth: DEPTH.RESOURCE } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.TRASH as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.TRASH])\n })\n })\n\n describe('propfind - files listing (shares list)', () => {\n it('yields shares root and children when inSharesList=true and depth=1', async () => {\n ;(spacesBrowser.browse as jest.Mock).mockResolvedValue({\n files: [{ id: 1, name: 'doc.txt', isDir: false, size: 12, ctime: 1, mtime: 2, mime: 'text/plain' }]\n })\n\n const req = {\n user,\n dav: { url: '/webdav/files/personal', depth: DEPTH.MEMBERS },\n space: { inSharesList: true, realPath: '/any/ignored' }\n } as unknown as FastifyDAVRequest\n\n const items = await collectGenerator(service.propfind(req, SPACE_REPOSITORY.FILES))\n expect(items.map((i: any) => i.name)).toEqual(['shares', 'doc.txt'])\n })\n })\n\n describe('propfind - files listing (path cases)', () => {\n it('throws 404 when path does not exist', async () => {\n ;(isPathExists as jest.Mock).mockResolvedValue(false)\n\n const req = {\n user,\n dav: { url: '/webdav/files/personal/current', depth: DEPTH.RESOURCE },\n space: { inSharesList: false, realPath: '/path/not/found' }\n } as unknown as FastifyDAVRequest\n\n await expect(collectGenerator(service.propfind(req, SPACE_REPOSITORY.FILES))).rejects.toBeInstanceOf(HttpException)\n await expect(collectGenerator(service.propfind(req, SPACE_REPOSITORY.FILES))).rejects.toMatchObject({ status: HttpStatus.NOT_FOUND })\n })\n\n it('yields current directory and children when path exists and is dir', async () => {\n ;(isPathExists as jest.Mock).mockResolvedValue(true)\n ;(getProps as jest.Mock).mockResolvedValue({\n id: 100,\n name: 'current',\n isDir: true,\n size: 0,\n ctime: Date.now(),\n mtime: Date.now(),\n mime: undefined\n })\n ;(isPathIsDir as jest.Mock).mockResolvedValue(true)\n ;(spacesBrowser.browse as jest.Mock).mockResolvedValue({\n files: [{ id: 2, name: 'child.txt', isDir: false, size: 1, ctime: 1, mtime: 2, mime: 'text/plain' }]\n })\n\n const req = {\n user,\n dav: { url: '/webdav/files/personal/current', depth: DEPTH.MEMBERS },\n space: { inSharesList: false, realPath: '/path/current' }\n } as unknown as FastifyDAVRequest\n\n const items = await collectGenerator(service.propfind(req, SPACE_REPOSITORY.FILES))\n expect(items.map((i: any) => i.name)).toEqual(['current', 'child.txt'])\n })\n\n it('does not list children when path exists but is not a directory', async () => {\n ;(isPathExists as jest.Mock).mockResolvedValue(true)\n ;(getProps as jest.Mock).mockResolvedValue({\n id: 101,\n name: 'current',\n isDir: false,\n size: 123,\n ctime: Date.now(),\n mtime: Date.now(),\n mime: 'text/plain'\n })\n ;(isPathIsDir as jest.Mock).mockResolvedValue(false)\n ;(spacesBrowser.browse as jest.Mock).mockResolvedValue({ files: [] })\n\n const req = {\n user,\n dav: { url: '/webdav/files/personal/current', depth: DEPTH.MEMBERS },\n space: { inSharesList: false, realPath: '/path/current' }\n } as unknown as FastifyDAVRequest\n\n const items = await collectGenerator(service.propfind(req, SPACE_REPOSITORY.FILES))\n expect(items.map((i: any) => i.name)).toEqual(['current'])\n expect(spacesBrowser.browse).not.toHaveBeenCalled()\n })\n })\n\n describe('propfind - unknown space', () => {\n it('throws not found for unknown space', () => {\n const req = { user, dav: { url: '/webdav/unknown', depth: DEPTH.RESOURCE } } as unknown as FastifyDAVRequest\n try {\n service.propfind(req, 'unknown' as any)\n fail('Expected HttpException to be thrown')\n } catch (err) {\n expect(err).toBeInstanceOf(HttpException)\n expect((err as HttpException).getStatus()).toBe(HttpStatus.NOT_FOUND)\n }\n })\n })\n})\n"],"names":["jest","mock","getProps","fn","isPathExists","isPathIsDir","canAccessToSpaceUrl","WEBDAV_PATH_TO_SPACE_SEGMENTS","collectGenerator","gen","all","item","push","describe","WebDAVSpaces","name","service","spacesManager","spacesBrowser","user","id","login","isAdmin","beforeAll","spacesManagerMock","spaceEnv","listSpaces","listTrashes","spacesBrowserMock","browse","module","Test","createTestingModule","providers","provide","SpacesBrowser","useValue","SpacesManager","compile","useLogger","get","beforeEach","clearAllMocks","it","expect","toBeDefined","fakeSpace","alias","mockResolvedValue","res","toBe","toHaveBeenCalled","mockRejectedValue","Error","toBeNull","req","dav","url","depth","DEPTH","MEMBERS","items","propfind","WEBDAV_NS","SERVER","map","i","toEqual","WEBDAV","RESOURCE","mockImplementation","_u","repos","includes","SPACE_REPOSITORY","FILES","now","Date","createdAt","toISOString","modifiedAt","SPACES","nb","mtime","ctime","TRASH","files","isDir","size","mime","space","inSharesList","realPath","rejects","toBeInstanceOf","HttpException","toMatchObject","status","HttpStatus","NOT_FOUND","undefined","not","fail","err","getStatus"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/webdav/services/webdav-spaces.service.spec.ts"],"sourcesContent":["import { HttpException, HttpStatus } from '@nestjs/common'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { getProps, isPathExists, isPathIsDir } from '../../files/utils/files'\nimport { SPACE_REPOSITORY } from '../../spaces/constants/spaces'\nimport { SpacesBrowser } from '../../spaces/services/spaces-browser.service'\nimport { SpacesManager } from '../../spaces/services/spaces-manager.service'\nimport { canAccessToSpaceUrl } from '../../spaces/utils/permissions'\nimport { WEBDAV_NS } from '../constants/routes'\nimport { DEPTH } from '../constants/webdav'\nimport type { FastifyDAVRequest } from '../interfaces/webdav.interface'\nimport { WebDAVSpaces } from './webdav-spaces.service'\n\n// mocks for file utils and permissions\njest.mock('../../files/utils/files', () => ({\n getProps: jest.fn(),\n isPathExists: jest.fn(),\n isPathIsDir: jest.fn()\n}))\njest.mock('../../spaces/utils/permissions', () => ({\n canAccessToSpaceUrl: jest.fn()\n}))\n// mock for WEBDAV path-to-space segments\njest.mock('../utils/routes', () => ({\n WEBDAV_PATH_TO_SPACE_SEGMENTS: jest.fn(() => ['files', 'personal'])\n}))\n\n// small helper to collect results from an AsyncGenerator\nasync function collectGenerator<T>(gen: AsyncGenerator<T>): Promise<T[]> {\n const all: T[] = []\n for await (const item of gen) {\n all.push(item)\n }\n return all\n}\n\ndescribe(WebDAVSpaces.name, () => {\n let service: WebDAVSpaces\n let spacesManager: jest.Mocked<SpacesManager>\n let spacesBrowser: jest.Mocked<SpacesBrowser>\n\n const user = { id: 1, login: 'john', isAdmin: false } as any\n\n beforeAll(async () => {\n const spacesManagerMock: Partial<jest.Mocked<SpacesManager>> = {\n spaceEnv: jest.fn(),\n listSpaces: jest.fn(),\n listTrashes: jest.fn()\n }\n const spacesBrowserMock: Partial<jest.Mocked<SpacesBrowser>> = {\n browse: jest.fn()\n }\n\n const module: TestingModule = await Test.createTestingModule({\n providers: [{ provide: SpacesBrowser, useValue: spacesBrowserMock }, { provide: SpacesManager, useValue: spacesManagerMock }, WebDAVSpaces]\n }).compile()\n\n module.useLogger(['fatal'])\n service = module.get<WebDAVSpaces>(WebDAVSpaces)\n spacesManager = module.get(SpacesManager) as jest.Mocked<SpacesManager>\n spacesBrowser = module.get(SpacesBrowser) as jest.Mocked<SpacesBrowser>\n })\n\n beforeEach(() => {\n jest.clearAllMocks()\n })\n\n it('should be defined', () => {\n expect(service).toBeDefined()\n })\n\n describe('spaceEnv', () => {\n it('returns space when manager resolves', async () => {\n const fakeSpace = { alias: 'personal', id: 0 } as any\n ;(spacesManager.spaceEnv as jest.Mock).mockResolvedValue(fakeSpace)\n\n const res = await service.spaceEnv(user as any, '/webdav/personal')\n expect(res).toBe(fakeSpace)\n expect(spacesManager.spaceEnv).toHaveBeenCalled()\n })\n\n it('returns null when manager throws', async () => {\n ;(spacesManager.spaceEnv as jest.Mock).mockRejectedValue(new Error('boom'))\n\n const res = await service.spaceEnv(user as any, '/webdav/personal')\n expect(res).toBeNull()\n })\n\n it('returns null when space not found', async () => {\n ;(spacesManager.spaceEnv as jest.Mock).mockResolvedValue(null)\n\n const res = await service.spaceEnv(user as any, '/webdav/personal')\n expect(res).toBeNull()\n })\n })\n\n describe('propfind - server root', () => {\n it('yields server root and webdav child when depth=1', async () => {\n const req = { user, dav: { url: '/', depth: DEPTH.MEMBERS } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.SERVER as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.SERVER, WEBDAV_NS.WEBDAV])\n })\n\n it('yields only server root when depth=0', async () => {\n const req = { user, dav: { url: '/', depth: DEPTH.RESOURCE } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.SERVER as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.SERVER])\n })\n })\n\n describe('propfind - webdav listing', () => {\n it('filters repositories by user access', async () => {\n ;(canAccessToSpaceUrl as jest.Mock).mockImplementation((_u: any, repos: string[]) => repos?.includes(SPACE_REPOSITORY.FILES))\n const req = { user, dav: { url: '/webdav', depth: DEPTH.MEMBERS } } as unknown as FastifyDAVRequest\n\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.WEBDAV as any))\n // should list only roots that include FILES in their repository (personal, spaces), not server/webdav\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.WEBDAV, 'personal', 'spaces'])\n })\n\n it('lists only itself when depth=0', async () => {\n const req = { user, dav: { url: '/webdav', depth: DEPTH.RESOURCE } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.WEBDAV as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.WEBDAV])\n })\n })\n\n describe('propfind - spaces listing', () => {\n it('yields spaces root then user spaces when depth=1', async () => {\n const now = new Date()\n ;(spacesManager.listSpaces as jest.Mock).mockResolvedValue([\n { id: 10, name: 'Team A', alias: 'team-a', createdAt: now.toISOString(), modifiedAt: now.toISOString() },\n { id: 11, name: 'Team B', alias: 'team-b', createdAt: now.toISOString(), modifiedAt: now.toISOString() }\n ])\n\n const req = { user, dav: { url: '/webdav/spaces', depth: DEPTH.MEMBERS } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.SPACES as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.SPACES, 'Team A', 'Team B'])\n })\n\n it('yields only spaces root when depth=0', async () => {\n ;(spacesManager.listSpaces as jest.Mock).mockResolvedValue([])\n const req = { user, dav: { url: '/webdav/spaces', depth: DEPTH.RESOURCE } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.SPACES as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.SPACES])\n })\n })\n\n describe('propfind - trashes listing', () => {\n it('yields trash root then each trash bucket when depth=1', async () => {\n ;(spacesManager.listTrashes as jest.Mock).mockResolvedValue([\n { id: 1, alias: 'personal', nb: 2, mtime: 3, ctime: 4, name: 'Personal files' },\n { id: 2, alias: 'team-a', nb: 5, mtime: 6, ctime: 7, name: 'Team A' }\n ])\n const req = { user, dav: { url: '/webdav/trash', depth: DEPTH.MEMBERS } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.TRASH as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.TRASH, 'personal (2)', 'team-a (5)'])\n })\n\n it('yields only trash root when depth=0', async () => {\n ;(spacesManager.listTrashes as jest.Mock).mockResolvedValue([])\n const req = { user, dav: { url: '/webdav/trash', depth: DEPTH.RESOURCE } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.TRASH as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.TRASH])\n })\n })\n\n describe('propfind - files listing (shares list)', () => {\n it('yields shares root and children when inSharesList=true and depth=1', async () => {\n ;(spacesBrowser.browse as jest.Mock).mockResolvedValue({\n files: [{ id: 1, name: 'doc.txt', isDir: false, size: 12, ctime: 1, mtime: 2, mime: 'text/plain' }]\n })\n\n const req = {\n user,\n dav: { url: '/webdav/files/personal', depth: DEPTH.MEMBERS },\n space: { inSharesList: true, realPath: '/any/ignored' }\n } as unknown as FastifyDAVRequest\n\n const items = await collectGenerator(service.propfind(req, SPACE_REPOSITORY.FILES))\n expect(items.map((i: any) => i.name)).toEqual(['shares', 'doc.txt'])\n })\n })\n\n describe('propfind - files listing (path cases)', () => {\n it('throws 404 when path does not exist', async () => {\n ;(isPathExists as jest.Mock).mockResolvedValue(false)\n\n const req = {\n user,\n dav: { url: '/webdav/files/personal/current', depth: DEPTH.RESOURCE },\n space: { inSharesList: false, realPath: '/path/not/found' }\n } as unknown as FastifyDAVRequest\n\n await expect(collectGenerator(service.propfind(req, SPACE_REPOSITORY.FILES))).rejects.toBeInstanceOf(HttpException)\n await expect(collectGenerator(service.propfind(req, SPACE_REPOSITORY.FILES))).rejects.toMatchObject({ status: HttpStatus.NOT_FOUND })\n })\n\n it('yields current directory and children when path exists and is dir', async () => {\n ;(isPathExists as jest.Mock).mockResolvedValue(true)\n ;(getProps as jest.Mock).mockResolvedValue({\n id: 100,\n name: 'current',\n isDir: true,\n size: 0,\n ctime: Date.now(),\n mtime: Date.now(),\n mime: undefined\n })\n ;(isPathIsDir as jest.Mock).mockResolvedValue(true)\n ;(spacesBrowser.browse as jest.Mock).mockResolvedValue({\n files: [{ id: 2, name: 'child.txt', isDir: false, size: 1, ctime: 1, mtime: 2, mime: 'text/plain' }]\n })\n\n const req = {\n user,\n dav: { url: '/webdav/files/personal/current', depth: DEPTH.MEMBERS },\n space: { inSharesList: false, realPath: '/path/current' }\n } as unknown as FastifyDAVRequest\n\n const items = await collectGenerator(service.propfind(req, SPACE_REPOSITORY.FILES))\n expect(items.map((i: any) => i.name)).toEqual(['current', 'child.txt'])\n })\n\n it('does not list children when path exists but is not a directory', async () => {\n ;(isPathExists as jest.Mock).mockResolvedValue(true)\n ;(getProps as jest.Mock).mockResolvedValue({\n id: 101,\n name: 'current',\n isDir: false,\n size: 123,\n ctime: Date.now(),\n mtime: Date.now(),\n mime: 'text/plain'\n })\n ;(isPathIsDir as jest.Mock).mockResolvedValue(false)\n ;(spacesBrowser.browse as jest.Mock).mockResolvedValue({ files: [] })\n\n const req = {\n user,\n dav: { url: '/webdav/files/personal/current', depth: DEPTH.MEMBERS },\n space: { inSharesList: false, realPath: '/path/current' }\n } as unknown as FastifyDAVRequest\n\n const items = await collectGenerator(service.propfind(req, SPACE_REPOSITORY.FILES))\n expect(items.map((i: any) => i.name)).toEqual(['current'])\n expect(spacesBrowser.browse).not.toHaveBeenCalled()\n })\n })\n\n describe('propfind - unknown space', () => {\n it('throws not found for unknown space', () => {\n const req = { user, dav: { url: '/webdav/unknown', depth: DEPTH.RESOURCE } } as unknown as FastifyDAVRequest\n try {\n service.propfind(req, 'unknown' as any)\n fail('Expected HttpException to be thrown')\n } catch (err) {\n expect(err).toBeInstanceOf(HttpException)\n expect((err as HttpException).getStatus()).toBe(HttpStatus.NOT_FOUND)\n }\n })\n })\n})\n"],"names":["jest","mock","getProps","fn","isPathExists","isPathIsDir","canAccessToSpaceUrl","WEBDAV_PATH_TO_SPACE_SEGMENTS","collectGenerator","gen","all","item","push","describe","WebDAVSpaces","name","service","spacesManager","spacesBrowser","user","id","login","isAdmin","beforeAll","spacesManagerMock","spaceEnv","listSpaces","listTrashes","spacesBrowserMock","browse","module","Test","createTestingModule","providers","provide","SpacesBrowser","useValue","SpacesManager","compile","useLogger","get","beforeEach","clearAllMocks","it","expect","toBeDefined","fakeSpace","alias","mockResolvedValue","res","toBe","toHaveBeenCalled","mockRejectedValue","Error","toBeNull","req","dav","url","depth","DEPTH","MEMBERS","items","propfind","WEBDAV_NS","SERVER","map","i","toEqual","WEBDAV","RESOURCE","mockImplementation","_u","repos","includes","SPACE_REPOSITORY","FILES","now","Date","createdAt","toISOString","modifiedAt","SPACES","nb","mtime","ctime","TRASH","files","isDir","size","mime","space","inSharesList","realPath","rejects","toBeInstanceOf","HttpException","toMatchObject","status","HttpStatus","NOT_FOUND","undefined","not","fail","err","getStatus"],"mappings":"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"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2026 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/webdav/utils/bootstrap.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2026 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 { NestFastifyApplication } from '@nestjs/platform-fastify'\nimport { FastifyInstance } from 'fastify'\nimport { HTTP_METHOD, HTTP_WEBDAV_METHOD } from '../../applications.constants'\nimport { WEBDAV_NS, WEBDAV_SPACES } from '../constants/routes'\nimport { WEBDAV_CONTENT_TYPES } from '../constants/webdav'\n\n/**\n * Bootstrap WebDAV-specific Nest/Fastify configuration.\n *\n * - Enables XML body parsing for WebDAV XML-based methods (PROPFIND/PROPPATCH/etc.)\n * - Registers additional WebDAV HTTP methods\n * - Forces binary Content-Type ONLY for WebDAV PUT requests (file uploads)\n *\n * Per RFC 4918, PUT is used to create/replace the content of a resource and the\n * request body must be treated as an opaque stream (even if the file is JSON/XML).\n */\nexport function bootstrapWebDAV(app: NestFastifyApplication, fastifyInstance: FastifyInstance) {\n // Enable XML body parser for WebDAV XML requests (PROPFIND, PROPPATCH, LOCK, etc.)\n app.useBodyParser(WEBDAV_CONTENT_TYPES)\n\n // Register WebDAV-specific HTTP methods\n for (const method of Object.values(HTTP_WEBDAV_METHOD)) {\n fastifyInstance.addHttpMethod(method, { hasBody: true })\n }\n\n /**\n * onRequest hook for WebDAV uploads.\n *\n * WebDAV clients may send JSON/XML files with a Content-Type that triggers\n * Fastify's body parsers (application/json, text/plain, application/xml...).\n * For PUT uploads we must always treat the payload as a raw binary stream.\n *\n * This hook forces `application/octet-stream` for WebDAV PUT requests only,\n * leaving XML-based WebDAV methods unaffected.\n */\n fastifyInstance.addHook('onRequest', (req, _reply, done) => {\n // Only handle WebDAV PUT requests under the WebDAV base path\n if (req.method !== HTTP_METHOD.PUT) return done()\n if (!req.originalUrl.startsWith(WEBDAV_SPACES[WEBDAV_NS.WEBDAV].route)) return done()\n\n req.headers['content-type'] = 'application/octet-stream'\n return done()\n })\n}\n"],"names":["bootstrapWebDAV","app","fastifyInstance","useBodyParser","WEBDAV_CONTENT_TYPES","method","Object","values","HTTP_WEBDAV_METHOD","addHttpMethod","hasBody","addHook","req","_reply","done","HTTP_METHOD","PUT","originalUrl","startsWith","WEBDAV_SPACES","WEBDAV_NS","WEBDAV","route","headers"],"mappings":"AAAA;;;;CAIC;;;;+BAkBeA;;;eAAAA;;;uCAdgC;wBACP;wBACJ;AAY9B,SAASA,gBAAgBC,GAA2B,EAAEC,eAAgC;IAC3F,mFAAmF;IACnFD,IAAIE,aAAa,CAACC,4BAAoB;IAEtC,wCAAwC;IACxC,KAAK,MAAMC,UAAUC,OAAOC,MAAM,CAACC,yCAAkB,EAAG;QACtDN,gBAAgBO,aAAa,CAACJ,QAAQ;YAAEK,SAAS;QAAK;IACxD;IAEA;;;;;;;;;GASC,GACDR,gBAAgBS,OAAO,CAAC,aAAa,CAACC,KAAKC,QAAQC;QACjD,6DAA6D;QAC7D,IAAIF,IAAIP,MAAM,KAAKU,kCAAW,CAACC,GAAG,EAAE,OAAOF;QAC3C,IAAI,CAACF,IAAIK,WAAW,CAACC,UAAU,CAACC,qBAAa,CAACC,iBAAS,CAACC,MAAM,CAAC,CAACC,KAAK,GAAG,OAAOR;QAE/EF,IAAIW,OAAO,CAAC,eAAe,GAAG;QAC9B,OAAOT;IACT;AACF"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/webdav/utils/bootstrap.ts"],"sourcesContent":["import { NestFastifyApplication } from '@nestjs/platform-fastify'\nimport { FastifyInstance } from 'fastify'\nimport { HTTP_METHOD, HTTP_WEBDAV_METHOD } from '../../applications.constants'\nimport { WEBDAV_NS, WEBDAV_SPACES } from '../constants/routes'\nimport { WEBDAV_CONTENT_TYPES } from '../constants/webdav'\n\n/**\n * Bootstrap WebDAV-specific Nest/Fastify configuration.\n *\n * - Enables XML body parsing for WebDAV XML-based methods (PROPFIND/PROPPATCH/etc.)\n * - Registers additional WebDAV HTTP methods\n * - Forces binary Content-Type ONLY for WebDAV PUT requests (file uploads)\n *\n * Per RFC 4918, PUT is used to create/replace the content of a resource and the\n * request body must be treated as an opaque stream (even if the file is JSON/XML).\n */\nexport function bootstrapWebDAV(app: NestFastifyApplication, fastifyInstance: FastifyInstance) {\n // Enable XML body parser for WebDAV XML requests (PROPFIND, PROPPATCH, LOCK, etc.)\n app.useBodyParser(WEBDAV_CONTENT_TYPES)\n\n // Register WebDAV-specific HTTP methods\n for (const method of Object.values(HTTP_WEBDAV_METHOD)) {\n fastifyInstance.addHttpMethod(method, { hasBody: true })\n }\n\n /**\n * onRequest hook for WebDAV uploads.\n *\n * WebDAV clients may send JSON/XML files with a Content-Type that triggers\n * Fastify's body parsers (application/json, text/plain, application/xml...).\n * For PUT uploads we must always treat the payload as a raw binary stream.\n *\n * This hook forces `application/octet-stream` for WebDAV PUT requests only,\n * leaving XML-based WebDAV methods unaffected.\n */\n fastifyInstance.addHook('onRequest', (req, _reply, done) => {\n // Only handle WebDAV PUT requests under the WebDAV base path\n if (req.method !== HTTP_METHOD.PUT) return done()\n if (!req.originalUrl.startsWith(WEBDAV_SPACES[WEBDAV_NS.WEBDAV].route)) return done()\n\n req.headers['content-type'] = 'application/octet-stream'\n return done()\n })\n}\n"],"names":["bootstrapWebDAV","app","fastifyInstance","useBodyParser","WEBDAV_CONTENT_TYPES","method","Object","values","HTTP_WEBDAV_METHOD","addHttpMethod","hasBody","addHook","req","_reply","done","HTTP_METHOD","PUT","originalUrl","startsWith","WEBDAV_SPACES","WEBDAV_NS","WEBDAV","route","headers"],"mappings":";;;;+BAgBgBA;;;eAAAA;;;uCAdgC;wBACP;wBACJ;AAY9B,SAASA,gBAAgBC,GAA2B,EAAEC,eAAgC;IAC3F,mFAAmF;IACnFD,IAAIE,aAAa,CAACC,4BAAoB;IAEtC,wCAAwC;IACxC,KAAK,MAAMC,UAAUC,OAAOC,MAAM,CAACC,yCAAkB,EAAG;QACtDN,gBAAgBO,aAAa,CAACJ,QAAQ;YAAEK,SAAS;QAAK;IACxD;IAEA;;;;;;;;;GASC,GACDR,gBAAgBS,OAAO,CAAC,aAAa,CAACC,KAAKC,QAAQC;QACjD,6DAA6D;QAC7D,IAAIF,IAAIP,MAAM,KAAKU,kCAAW,CAACC,GAAG,EAAE,OAAOF;QAC3C,IAAI,CAACF,IAAIK,WAAW,CAACC,UAAU,CAACC,qBAAa,CAACC,iBAAS,CAACC,MAAM,CAAC,CAACC,KAAK,GAAG,OAAOR;QAE/EF,IAAIW,OAAO,CAAC,eAAe,GAAG;QAC9B,OAAOT;IACT;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/webdav/utils/if-header.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 { urlToPath } from '../../../common/functions'\nimport { IfHeader } from '../interfaces/if-header.interface'\n\n//IF HEADER Before : (<locktoken:a-write-lock-token> [\"I am an ETag\"]) ([\"I am another ETag\"])\n//IF HEADER After : [{\"path\":\"/webdav/specs/\",\"token\":{\"mustMatch\":true,\"value\":\"urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2\"},\n// \"etag\":{\"mustMatch\":true,\"value\":\"W/\\\"A weak ETag\\\"\"}},\n// {\"path\":\"/webdav/specs/\",\"etag\":{\"mustMatch\":true,\"value\":\"\\\"strong ETag\\\"\"}}]\n\nconst ifHeaderRegExp = /(?:<([^>]+)>)?\\s*\\(([^)]+)\\)/g\nconst ifHeaderInternalRegExp = /((not)|\\[([^\\]]+)\\]|<(DAV:no-lock)>|<([^>]+)>|([^\\s]+))/gi\n\nfunction parseIfHeaderInternal(path: string, group: string) {\n let match = ifHeaderInternalRegExp.exec(group)\n\n let mustMatch = true\n const state: IfHeader = path ? { path: path } : {}\n\n while (match) {\n if (match[2]) {\n // not\n // inverse condition\n mustMatch = false\n } else if (match[5] || match[6]) {\n // check if a lock token match\n state.token = { mustMatch, value: match[5] || match[6] }\n mustMatch = true\n } else if (match[3]) {\n // check if etag is matching\n state.etag = { mustMatch, value: match[3] }\n mustMatch = true\n } else if (match[4]) {\n // check if no lock exists (DAV:no-lock)\n state.haveLock = { mustMatch: !mustMatch }\n mustMatch = true\n }\n match = ifHeaderInternalRegExp.exec(group)\n }\n\n return state\n}\n\nexport function parseIfHeader(ifHeader: string): IfHeader[] {\n const orArray: IfHeader[] = []\n let match = ifHeaderRegExp.exec(ifHeader)\n let path = undefined\n\n while (match) {\n if (match[1]) {\n path = urlToPath(match[1])\n }\n orArray.push(parseIfHeaderInternal(path, match[2]))\n match = ifHeaderRegExp.exec(ifHeader)\n }\n return orArray\n}\n\nexport function extractOneToken(ifHeaders: IfHeader[]): string {\n return ifHeaders[0].token.value\n}\n\nexport function extractAllTokens(ifHeaders: IfHeader[]): string[] {\n return ifHeaders ? ifHeaders.map((i: IfHeader) => i.token?.value).filter(Boolean) : []\n}\n"],"names":["extractAllTokens","extractOneToken","parseIfHeader","ifHeaderRegExp","ifHeaderInternalRegExp","parseIfHeaderInternal","path","group","match","exec","mustMatch","state","token","value","etag","haveLock","ifHeader","orArray","undefined","urlToPath","push","ifHeaders","map","i","filter","Boolean"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QA8DeA;eAAAA;;QAJAC;eAAAA;;QAfAC;eAAAA;;;2BAzCU;AAG1B,8FAA8F;AAC9F,iIAAiI;AACjI,8EAA8E;AAC9E,oGAAoG;AAEpG,MAAMC,iBAAiB;AACvB,MAAMC,yBAAyB;AAE/B,SAASC,sBAAsBC,IAAY,EAAEC,KAAa;IACxD,IAAIC,QAAQJ,uBAAuBK,IAAI,CAACF;IAExC,IAAIG,YAAY;IAChB,MAAMC,QAAkBL,OAAO;QAAEA,MAAMA;IAAK,IAAI,CAAC;IAEjD,MAAOE,MAAO;QACZ,IAAIA,KAAK,CAAC,EAAE,EAAE;YACZ,MAAM;YACN,oBAAoB;YACpBE,YAAY;QACd,OAAO,IAAIF,KAAK,CAAC,EAAE,IAAIA,KAAK,CAAC,EAAE,EAAE;YAC/B,8BAA8B;YAC9BG,MAAMC,KAAK,GAAG;gBAAEF;gBAAWG,OAAOL,KAAK,CAAC,EAAE,IAAIA,KAAK,CAAC,EAAE;YAAC;YACvDE,YAAY;QACd,OAAO,IAAIF,KAAK,CAAC,EAAE,EAAE;YACnB,4BAA4B;YAC5BG,MAAMG,IAAI,GAAG;gBAAEJ;gBAAWG,OAAOL,KAAK,CAAC,EAAE;YAAC;YAC1CE,YAAY;QACd,OAAO,IAAIF,KAAK,CAAC,EAAE,EAAE;YACnB,wCAAwC;YACxCG,MAAMI,QAAQ,GAAG;gBAAEL,WAAW,CAACA;YAAU;YACzCA,YAAY;QACd;QACAF,QAAQJ,uBAAuBK,IAAI,CAACF;IACtC;IAEA,OAAOI;AACT;AAEO,SAAST,cAAcc,QAAgB;IAC5C,MAAMC,UAAsB,EAAE;IAC9B,IAAIT,QAAQL,eAAeM,IAAI,CAACO;IAChC,IAAIV,OAAOY;IAEX,MAAOV,MAAO;QACZ,IAAIA,KAAK,CAAC,EAAE,EAAE;YACZF,OAAOa,IAAAA,oBAAS,EAACX,KAAK,CAAC,EAAE;QAC3B;QACAS,QAAQG,IAAI,CAACf,sBAAsBC,MAAME,KAAK,CAAC,EAAE;QACjDA,QAAQL,eAAeM,IAAI,CAACO;IAC9B;IACA,OAAOC;AACT;AAEO,SAAShB,gBAAgBoB,SAAqB;IACnD,OAAOA,SAAS,CAAC,EAAE,CAACT,KAAK,CAACC,KAAK;AACjC;AAEO,SAASb,iBAAiBqB,SAAqB;IACpD,OAAOA,YAAYA,UAAUC,GAAG,CAAC,CAACC,IAAgBA,EAAEX,KAAK,EAAEC,OAAOW,MAAM,CAACC,WAAW,EAAE;AACxF"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/webdav/utils/if-header.ts"],"sourcesContent":["import { urlToPath } from '../../../common/functions'\nimport { IfHeader } from '../interfaces/if-header.interface'\n\n//IF HEADER Before : (<locktoken:a-write-lock-token> [\"I am an ETag\"]) ([\"I am another ETag\"])\n//IF HEADER After : [{\"path\":\"/webdav/specs/\",\"token\":{\"mustMatch\":true,\"value\":\"urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2\"},\n// \"etag\":{\"mustMatch\":true,\"value\":\"W/\\\"A weak ETag\\\"\"}},\n// {\"path\":\"/webdav/specs/\",\"etag\":{\"mustMatch\":true,\"value\":\"\\\"strong ETag\\\"\"}}]\n\nconst ifHeaderRegExp = /(?:<([^>]+)>)?\\s*\\(([^)]+)\\)/g\nconst ifHeaderInternalRegExp = /((not)|\\[([^\\]]+)\\]|<(DAV:no-lock)>|<([^>]+)>|([^\\s]+))/gi\n\nfunction parseIfHeaderInternal(path: string, group: string) {\n let match = ifHeaderInternalRegExp.exec(group)\n\n let mustMatch = true\n const state: IfHeader = path ? { path: path } : {}\n\n while (match) {\n if (match[2]) {\n // not\n // inverse condition\n mustMatch = false\n } else if (match[5] || match[6]) {\n // check if a lock token match\n state.token = { mustMatch, value: match[5] || match[6] }\n mustMatch = true\n } else if (match[3]) {\n // check if etag is matching\n state.etag = { mustMatch, value: match[3] }\n mustMatch = true\n } else if (match[4]) {\n // check if no lock exists (DAV:no-lock)\n state.haveLock = { mustMatch: !mustMatch }\n mustMatch = true\n }\n match = ifHeaderInternalRegExp.exec(group)\n }\n\n return state\n}\n\nexport function parseIfHeader(ifHeader: string): IfHeader[] {\n const orArray: IfHeader[] = []\n let match = ifHeaderRegExp.exec(ifHeader)\n let path = undefined\n\n while (match) {\n if (match[1]) {\n path = urlToPath(match[1])\n }\n orArray.push(parseIfHeaderInternal(path, match[2]))\n match = ifHeaderRegExp.exec(ifHeader)\n }\n return orArray\n}\n\nexport function extractOneToken(ifHeaders: IfHeader[]): string {\n return ifHeaders[0].token.value\n}\n\nexport function extractAllTokens(ifHeaders: IfHeader[]): string[] {\n return ifHeaders ? ifHeaders.map((i: IfHeader) => i.token?.value).filter(Boolean) : []\n}\n"],"names":["extractAllTokens","extractOneToken","parseIfHeader","ifHeaderRegExp","ifHeaderInternalRegExp","parseIfHeaderInternal","path","group","match","exec","mustMatch","state","token","value","etag","haveLock","ifHeader","orArray","undefined","urlToPath","push","ifHeaders","map","i","filter","Boolean"],"mappings":";;;;;;;;;;;QA4DgBA;eAAAA;;QAJAC;eAAAA;;QAfAC;eAAAA;;;2BAzCU;AAG1B,8FAA8F;AAC9F,iIAAiI;AACjI,8EAA8E;AAC9E,oGAAoG;AAEpG,MAAMC,iBAAiB;AACvB,MAAMC,yBAAyB;AAE/B,SAASC,sBAAsBC,IAAY,EAAEC,KAAa;IACxD,IAAIC,QAAQJ,uBAAuBK,IAAI,CAACF;IAExC,IAAIG,YAAY;IAChB,MAAMC,QAAkBL,OAAO;QAAEA,MAAMA;IAAK,IAAI,CAAC;IAEjD,MAAOE,MAAO;QACZ,IAAIA,KAAK,CAAC,EAAE,EAAE;YACZ,MAAM;YACN,oBAAoB;YACpBE,YAAY;QACd,OAAO,IAAIF,KAAK,CAAC,EAAE,IAAIA,KAAK,CAAC,EAAE,EAAE;YAC/B,8BAA8B;YAC9BG,MAAMC,KAAK,GAAG;gBAAEF;gBAAWG,OAAOL,KAAK,CAAC,EAAE,IAAIA,KAAK,CAAC,EAAE;YAAC;YACvDE,YAAY;QACd,OAAO,IAAIF,KAAK,CAAC,EAAE,EAAE;YACnB,4BAA4B;YAC5BG,MAAMG,IAAI,GAAG;gBAAEJ;gBAAWG,OAAOL,KAAK,CAAC,EAAE;YAAC;YAC1CE,YAAY;QACd,OAAO,IAAIF,KAAK,CAAC,EAAE,EAAE;YACnB,wCAAwC;YACxCG,MAAMI,QAAQ,GAAG;gBAAEL,WAAW,CAACA;YAAU;YACzCA,YAAY;QACd;QACAF,QAAQJ,uBAAuBK,IAAI,CAACF;IACtC;IAEA,OAAOI;AACT;AAEO,SAAST,cAAcc,QAAgB;IAC5C,MAAMC,UAAsB,EAAE;IAC9B,IAAIT,QAAQL,eAAeM,IAAI,CAACO;IAChC,IAAIV,OAAOY;IAEX,MAAOV,MAAO;QACZ,IAAIA,KAAK,CAAC,EAAE,EAAE;YACZF,OAAOa,IAAAA,oBAAS,EAACX,KAAK,CAAC,EAAE;QAC3B;QACAS,QAAQG,IAAI,CAACf,sBAAsBC,MAAME,KAAK,CAAC,EAAE;QACjDA,QAAQL,eAAeM,IAAI,CAACO;IAC9B;IACA,OAAOC;AACT;AAEO,SAAShB,gBAAgBoB,SAAqB;IACnD,OAAOA,SAAS,CAAC,EAAE,CAACT,KAAK,CAACC,KAAK;AACjC;AAEO,SAASb,iBAAiBqB,SAAqB;IACpD,OAAOA,YAAYA,UAAUC,GAAG,CAAC,CAACC,IAAgBA,EAAEX,KAAK,EAAEC,OAAOW,MAAM,CAACC,WAAW,EAAE;AACxF"}
@@ -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/webdav/utils/routes.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 { PATH_TO_SPACE_SEGMENTS } from '../../spaces/utils/routes'\nimport { WEBDAV_BASE_PATH, WEBDAV_SPACES } from '../constants/routes'\n\nexport function WEBDAV_PATH_TO_SPACE_SEGMENTS(path: string): string[] {\n const urlSegments = PATH_TO_SPACE_SEGMENTS(path)\n if (urlSegments[0] === WEBDAV_BASE_PATH) {\n urlSegments.shift()\n }\n const repository = urlSegments.shift()\n if (!(repository in WEBDAV_SPACES)) {\n throw new Error(`Repository not found : ${repository}`)\n }\n urlSegments.unshift(...WEBDAV_SPACES[repository].spaceRepository)\n return urlSegments\n}\n"],"names":["WEBDAV_PATH_TO_SPACE_SEGMENTS","path","urlSegments","PATH_TO_SPACE_SEGMENTS","WEBDAV_BASE_PATH","shift","repository","WEBDAV_SPACES","Error","unshift","spaceRepository"],"mappings":"AAAA;;;;CAIC;;;;+BAKeA;;;eAAAA;;;wBAHuB;yBACS;AAEzC,SAASA,8BAA8BC,IAAY;IACxD,MAAMC,cAAcC,IAAAA,8BAAsB,EAACF;IAC3C,IAAIC,WAAW,CAAC,EAAE,KAAKE,yBAAgB,EAAE;QACvCF,YAAYG,KAAK;IACnB;IACA,MAAMC,aAAaJ,YAAYG,KAAK;IACpC,IAAI,CAAEC,CAAAA,cAAcC,sBAAa,AAAD,GAAI;QAClC,MAAM,IAAIC,MAAM,CAAC,uBAAuB,EAAEF,YAAY;IACxD;IACAJ,YAAYO,OAAO,IAAIF,sBAAa,CAACD,WAAW,CAACI,eAAe;IAChE,OAAOR;AACT"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/webdav/utils/routes.ts"],"sourcesContent":["import { PATH_TO_SPACE_SEGMENTS } from '../../spaces/utils/routes'\nimport { WEBDAV_BASE_PATH, WEBDAV_SPACES } from '../constants/routes'\n\nexport function WEBDAV_PATH_TO_SPACE_SEGMENTS(path: string): string[] {\n const urlSegments = PATH_TO_SPACE_SEGMENTS(path)\n if (urlSegments[0] === WEBDAV_BASE_PATH) {\n urlSegments.shift()\n }\n const repository = urlSegments.shift()\n if (!(repository in WEBDAV_SPACES)) {\n throw new Error(`Repository not found : ${repository}`)\n }\n urlSegments.unshift(...WEBDAV_SPACES[repository].spaceRepository)\n return urlSegments\n}\n"],"names":["WEBDAV_PATH_TO_SPACE_SEGMENTS","path","urlSegments","PATH_TO_SPACE_SEGMENTS","WEBDAV_BASE_PATH","shift","repository","WEBDAV_SPACES","Error","unshift","spaceRepository"],"mappings":";;;;+BAGgBA;;;eAAAA;;;wBAHuB;yBACS;AAEzC,SAASA,8BAA8BC,IAAY;IACxD,MAAMC,cAAcC,IAAAA,8BAAsB,EAACF;IAC3C,IAAIC,WAAW,CAAC,EAAE,KAAKE,yBAAgB,EAAE;QACvCF,YAAYG,KAAK;IACnB;IACA,MAAMC,aAAaJ,YAAYG,KAAK;IACpC,IAAI,CAAEC,CAAAA,cAAcC,sBAAa,AAAD,GAAI;QAClC,MAAM,IAAIC,MAAM,CAAC,uBAAuB,EAAEF,YAAY;IACxD;IACAJ,YAAYO,OAAO,IAAIF,sBAAa,CAACD,WAAW,CAACI,eAAe;IAChE,OAAOR;AACT"}
@@ -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/webdav/utils/webdav.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 { FastifyReply } from 'fastify'\nimport http from 'node:http'\nimport { currentTimeStamp, encodeUrl, SERVER_NAME } from '../../../common/shared'\nimport { FileLock } from '../../files/interfaces/file-lock.interface'\nimport { LOCK_SCOPE, NS_DAV, NS_PREFIX, PROPSTAT, XML_CONTENT_TYPE } from '../constants/webdav'\nimport { XML_NS, xmlBuild } from './xml'\n\nexport const XML_DAV_NS = { [`${XML_NS}:${NS_PREFIX}`]: `${NS_DAV}` }\nexport const PROPFIND_COLLECTION = { [`${NS_PREFIX}:collection`]: null }\nexport const PROPFIND_ALL_PROP = {\n [`${NS_PREFIX}:propfind`]: {\n [`${NS_PREFIX}:${PROPSTAT.ALLPROP}`]: null,\n ...XML_DAV_NS\n }\n}\n\nexport const SUPPORTED_LOCKS = {\n [`${NS_PREFIX}:lockentry`]: [\n {\n [`${NS_PREFIX}:lockscope`]: {\n [`${NS_PREFIX}:exclusive`]: null\n },\n [`${NS_PREFIX}:locktype`]: {\n [`${NS_PREFIX}:write`]: null\n }\n },\n {\n [`${NS_PREFIX}:lockscope`]: {\n [`${NS_PREFIX}:shared`]: null\n },\n [`${NS_PREFIX}:locktype`]: {\n [`${NS_PREFIX}:write`]: null\n }\n }\n ]\n}\n\nexport function PROP(prop: any, httpVersion: string, httpStatus: number, description?: string) {\n return {\n [`${NS_PREFIX}:prop`]: prop,\n [`${NS_PREFIX}:status`]: `${httpVersion} ${httpStatus} ${http.STATUS_CODES[httpStatus]}`,\n [`${NS_PREFIX}:responsedescription`]: description ? { [`${NS_PREFIX}:error`]: { [`${NS_PREFIX}:${description}`]: null } } : undefined\n }\n}\n\nexport function PROP_STAT(href: string, props: any) {\n return {\n [`${NS_PREFIX}:href`]: href,\n [`${NS_PREFIX}:propstat`]: props\n }\n}\n\nexport function MULTI_STATUS(content: any) {\n return {\n [`${NS_PREFIX}:multistatus`]: { [`${NS_PREFIX}:response`]: content, ...XML_DAV_NS }\n }\n}\n\nexport function LOCK_DISCOVERY(locks: FileLock[]) {\n // only locktype write is currently implemented in RFC\n const activeLocks = []\n for (const lock of locks) {\n activeLocks.push({\n [`${NS_PREFIX}:activelock`]: {\n [`${NS_PREFIX}:locktype`]: { [`${NS_PREFIX}:write`]: null },\n [`${NS_PREFIX}:lockscope`]: { [`${NS_PREFIX}:${lock.options?.lockScope || LOCK_SCOPE.EXCLUSIVE}`]: null },\n [`${NS_PREFIX}:locktoken`]: { [`${NS_PREFIX}:href`]: lock.options?.lockToken || SERVER_NAME },\n [`${NS_PREFIX}:lockroot`]: { [`${NS_PREFIX}:href`]: encodeUrl(lock.options?.lockRoot || lock.dbFilePath) },\n [`${NS_PREFIX}:owner`]: formatLockOwner(lock),\n [`${NS_PREFIX}:timeout`]: `Second-${Math.floor(lock.expiration - currentTimeStamp())}`,\n [`${NS_PREFIX}:depth`]: lock.depth\n }\n })\n }\n return activeLocks\n}\n\nexport function LOCK_PROP(locks: FileLock[]) {\n return { [`${NS_PREFIX}:prop`]: { [`${NS_PREFIX}:lockdiscovery`]: LOCK_DISCOVERY(locks), ...XML_DAV_NS } }\n}\n\nexport function DAV_ERROR(error: string, href?: string): string {\n return xmlBuild({\n 'ns0:error': { [`ns0:${error}`]: href ? [{ 'ns0:href': encodeUrl(href) }] : '', [`${XML_NS}:ns0`]: `${NS_DAV}` }\n })\n}\n\nexport function DAV_ERROR_RES(code: number, error: string, res: FastifyReply, href?: string): FastifyReply {\n return res.status(code).type(XML_CONTENT_TYPE).send(DAV_ERROR(error, href))\n}\n\nfunction formatLockOwner(lock: FileLock) {\n const lockInfo = `${lock.options.lockInfo ? `${lock.options.lockInfo}` : ''}${lock.app ? ` ${lock.app}` : ''}`\n return `${lock.owner.fullName} (${lock.owner.email})${lockInfo ? ` - ${lockInfo}` : ''}`\n}\n"],"names":["DAV_ERROR","DAV_ERROR_RES","LOCK_DISCOVERY","LOCK_PROP","MULTI_STATUS","PROP","PROPFIND_ALL_PROP","PROPFIND_COLLECTION","PROP_STAT","SUPPORTED_LOCKS","XML_DAV_NS","XML_NS","NS_PREFIX","NS_DAV","PROPSTAT","ALLPROP","prop","httpVersion","httpStatus","description","http","STATUS_CODES","undefined","href","props","content","locks","activeLocks","lock","push","options","lockScope","LOCK_SCOPE","EXCLUSIVE","lockToken","SERVER_NAME","encodeUrl","lockRoot","dbFilePath","formatLockOwner","Math","floor","expiration","currentTimeStamp","depth","error","xmlBuild","code","res","status","type","XML_CONTENT_TYPE","send","lockInfo","app","owner","fullName","email"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/webdav/utils/webdav.ts"],"sourcesContent":["import { FastifyReply } from 'fastify'\nimport http from 'node:http'\nimport { currentTimeStamp, encodeUrl, SERVER_NAME } from '../../../common/shared'\nimport { FileLock } from '../../files/interfaces/file-lock.interface'\nimport { LOCK_SCOPE, NS_DAV, NS_PREFIX, PROPSTAT, XML_CONTENT_TYPE } from '../constants/webdav'\nimport { XML_NS, xmlBuild } from './xml'\n\nexport const XML_DAV_NS = { [`${XML_NS}:${NS_PREFIX}`]: `${NS_DAV}` }\nexport const PROPFIND_COLLECTION = { [`${NS_PREFIX}:collection`]: null }\nexport const PROPFIND_ALL_PROP = {\n [`${NS_PREFIX}:propfind`]: {\n [`${NS_PREFIX}:${PROPSTAT.ALLPROP}`]: null,\n ...XML_DAV_NS\n }\n}\n\nexport const SUPPORTED_LOCKS = {\n [`${NS_PREFIX}:lockentry`]: [\n {\n [`${NS_PREFIX}:lockscope`]: {\n [`${NS_PREFIX}:exclusive`]: null\n },\n [`${NS_PREFIX}:locktype`]: {\n [`${NS_PREFIX}:write`]: null\n }\n },\n {\n [`${NS_PREFIX}:lockscope`]: {\n [`${NS_PREFIX}:shared`]: null\n },\n [`${NS_PREFIX}:locktype`]: {\n [`${NS_PREFIX}:write`]: null\n }\n }\n ]\n}\n\nexport function PROP(prop: any, httpVersion: string, httpStatus: number, description?: string) {\n return {\n [`${NS_PREFIX}:prop`]: prop,\n [`${NS_PREFIX}:status`]: `${httpVersion} ${httpStatus} ${http.STATUS_CODES[httpStatus]}`,\n [`${NS_PREFIX}:responsedescription`]: description ? { [`${NS_PREFIX}:error`]: { [`${NS_PREFIX}:${description}`]: null } } : undefined\n }\n}\n\nexport function PROP_STAT(href: string, props: any) {\n return {\n [`${NS_PREFIX}:href`]: href,\n [`${NS_PREFIX}:propstat`]: props\n }\n}\n\nexport function MULTI_STATUS(content: any) {\n return {\n [`${NS_PREFIX}:multistatus`]: { [`${NS_PREFIX}:response`]: content, ...XML_DAV_NS }\n }\n}\n\nexport function LOCK_DISCOVERY(locks: FileLock[]) {\n // only locktype write is currently implemented in RFC\n const activeLocks = []\n for (const lock of locks) {\n activeLocks.push({\n [`${NS_PREFIX}:activelock`]: {\n [`${NS_PREFIX}:locktype`]: { [`${NS_PREFIX}:write`]: null },\n [`${NS_PREFIX}:lockscope`]: { [`${NS_PREFIX}:${lock.options?.lockScope || LOCK_SCOPE.EXCLUSIVE}`]: null },\n [`${NS_PREFIX}:locktoken`]: { [`${NS_PREFIX}:href`]: lock.options?.lockToken || SERVER_NAME },\n [`${NS_PREFIX}:lockroot`]: { [`${NS_PREFIX}:href`]: encodeUrl(lock.options?.lockRoot || lock.dbFilePath) },\n [`${NS_PREFIX}:owner`]: formatLockOwner(lock),\n [`${NS_PREFIX}:timeout`]: `Second-${Math.floor(lock.expiration - currentTimeStamp())}`,\n [`${NS_PREFIX}:depth`]: lock.depth\n }\n })\n }\n return activeLocks\n}\n\nexport function LOCK_PROP(locks: FileLock[]) {\n return { [`${NS_PREFIX}:prop`]: { [`${NS_PREFIX}:lockdiscovery`]: LOCK_DISCOVERY(locks), ...XML_DAV_NS } }\n}\n\nexport function DAV_ERROR(error: string, href?: string): string {\n return xmlBuild({\n 'ns0:error': { [`ns0:${error}`]: href ? [{ 'ns0:href': encodeUrl(href) }] : '', [`${XML_NS}:ns0`]: `${NS_DAV}` }\n })\n}\n\nexport function DAV_ERROR_RES(code: number, error: string, res: FastifyReply, href?: string): FastifyReply {\n return res.status(code).type(XML_CONTENT_TYPE).send(DAV_ERROR(error, href))\n}\n\nfunction formatLockOwner(lock: FileLock) {\n const lockInfo = `${lock.options.lockInfo ? `${lock.options.lockInfo}` : ''}${lock.app ? ` ${lock.app}` : ''}`\n return `${lock.owner.fullName} (${lock.owner.email})${lockInfo ? ` - ${lockInfo}` : ''}`\n}\n"],"names":["DAV_ERROR","DAV_ERROR_RES","LOCK_DISCOVERY","LOCK_PROP","MULTI_STATUS","PROP","PROPFIND_ALL_PROP","PROPFIND_COLLECTION","PROP_STAT","SUPPORTED_LOCKS","XML_DAV_NS","XML_NS","NS_PREFIX","NS_DAV","PROPSTAT","ALLPROP","prop","httpVersion","httpStatus","description","http","STATUS_CODES","undefined","href","props","content","locks","activeLocks","lock","push","options","lockScope","LOCK_SCOPE","EXCLUSIVE","lockToken","SERVER_NAME","encodeUrl","lockRoot","dbFilePath","formatLockOwner","Math","floor","expiration","currentTimeStamp","depth","error","xmlBuild","code","res","status","type","XML_CONTENT_TYPE","send","lockInfo","app","owner","fullName","email"],"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/webdav/utils/xml.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 { XMLBuilder, XMLParser, XMLValidator } from 'fast-xml-parser'\n\nexport const XML_NS_PREFIX = '@_'\n\nexport const XML_NS = `${XML_NS_PREFIX}xmlns`\n\nexport const XML_VERSION = {\n '?xml': {\n [`${XML_NS_PREFIX}version`]: '1.0',\n [`${XML_NS_PREFIX}encoding`]: 'utf-8',\n [`${XML_NS_PREFIX}standalone`]: 'yes'\n }\n}\n\nconst xmlParser = new XMLParser({\n ignoreAttributes: false,\n removeNSPrefix: true,\n attributeNamePrefix: XML_NS_PREFIX,\n ignoreDeclaration: true,\n ignorePiTags: true,\n processEntities: false\n})\n\nconst xmlBuilder = new XMLBuilder({\n ignoreAttributes: false,\n attributeNamePrefix: XML_NS_PREFIX,\n format: false,\n suppressEmptyNode: true\n})\n\nexport function xmlIsValid(content: string) {\n return XMLValidator.validate(content)\n}\n\nexport function xmlBuild(content: any): string {\n return xmlBuilder.build({ ...XML_VERSION, ...content }) as string\n}\n\nexport function xmlParse(content: any): any {\n return xmlParser.parse(content)\n}\n"],"names":["XML_NS","XML_NS_PREFIX","XML_VERSION","xmlBuild","xmlIsValid","xmlParse","xmlParser","XMLParser","ignoreAttributes","removeNSPrefix","attributeNamePrefix","ignoreDeclaration","ignorePiTags","processEntities","xmlBuilder","XMLBuilder","format","suppressEmptyNode","content","XMLValidator","validate","build","parse"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAMYA;eAAAA;;QAFAC;eAAAA;;QAIAC;eAAAA;;QA4BGC;eAAAA;;QAJAC;eAAAA;;QAQAC;eAAAA;;;+BAtCoC;AAE7C,MAAMJ,gBAAgB;AAEtB,MAAMD,SAAS,GAAGC,cAAc,KAAK,CAAC;AAEtC,MAAMC,cAAc;IACzB,QAAQ;QACN,CAAC,GAAGD,cAAc,OAAO,CAAC,CAAC,EAAE;QAC7B,CAAC,GAAGA,cAAc,QAAQ,CAAC,CAAC,EAAE;QAC9B,CAAC,GAAGA,cAAc,UAAU,CAAC,CAAC,EAAE;IAClC;AACF;AAEA,MAAMK,YAAY,IAAIC,wBAAS,CAAC;IAC9BC,kBAAkB;IAClBC,gBAAgB;IAChBC,qBAAqBT;IACrBU,mBAAmB;IACnBC,cAAc;IACdC,iBAAiB;AACnB;AAEA,MAAMC,aAAa,IAAIC,yBAAU,CAAC;IAChCP,kBAAkB;IAClBE,qBAAqBT;IACrBe,QAAQ;IACRC,mBAAmB;AACrB;AAEO,SAASb,WAAWc,OAAe;IACxC,OAAOC,2BAAY,CAACC,QAAQ,CAACF;AAC/B;AAEO,SAASf,SAASe,OAAY;IACnC,OAAOJ,WAAWO,KAAK,CAAC;QAAE,GAAGnB,WAAW;QAAE,GAAGgB,OAAO;IAAC;AACvD;AAEO,SAASb,SAASa,OAAY;IACnC,OAAOZ,UAAUgB,KAAK,CAACJ;AACzB"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/webdav/utils/xml.ts"],"sourcesContent":["import { XMLBuilder, XMLParser, XMLValidator } from 'fast-xml-parser'\n\nexport const XML_NS_PREFIX = '@_'\n\nexport const XML_NS = `${XML_NS_PREFIX}xmlns`\n\nexport const XML_VERSION = {\n '?xml': {\n [`${XML_NS_PREFIX}version`]: '1.0',\n [`${XML_NS_PREFIX}encoding`]: 'utf-8',\n [`${XML_NS_PREFIX}standalone`]: 'yes'\n }\n}\n\nconst xmlParser = new XMLParser({\n ignoreAttributes: false,\n removeNSPrefix: true,\n attributeNamePrefix: XML_NS_PREFIX,\n ignoreDeclaration: true,\n ignorePiTags: true,\n processEntities: false\n})\n\nconst xmlBuilder = new XMLBuilder({\n ignoreAttributes: false,\n attributeNamePrefix: XML_NS_PREFIX,\n format: false,\n suppressEmptyNode: true\n})\n\nexport function xmlIsValid(content: string) {\n return XMLValidator.validate(content)\n}\n\nexport function xmlBuild(content: any): string {\n return xmlBuilder.build({ ...XML_VERSION, ...content }) as string\n}\n\nexport function xmlParse(content: any): any {\n return xmlParser.parse(content)\n}\n"],"names":["XML_NS","XML_NS_PREFIX","XML_VERSION","xmlBuild","xmlIsValid","xmlParse","xmlParser","XMLParser","ignoreAttributes","removeNSPrefix","attributeNamePrefix","ignoreDeclaration","ignorePiTags","processEntities","xmlBuilder","XMLBuilder","format","suppressEmptyNode","content","XMLValidator","validate","build","parse"],"mappings":";;;;;;;;;;;QAIaA;eAAAA;;QAFAC;eAAAA;;QAIAC;eAAAA;;QA4BGC;eAAAA;;QAJAC;eAAAA;;QAQAC;eAAAA;;;+BAtCoC;AAE7C,MAAMJ,gBAAgB;AAEtB,MAAMD,SAAS,GAAGC,cAAc,KAAK,CAAC;AAEtC,MAAMC,cAAc;IACzB,QAAQ;QACN,CAAC,GAAGD,cAAc,OAAO,CAAC,CAAC,EAAE;QAC7B,CAAC,GAAGA,cAAc,QAAQ,CAAC,CAAC,EAAE;QAC9B,CAAC,GAAGA,cAAc,UAAU,CAAC,CAAC,EAAE;IAClC;AACF;AAEA,MAAMK,YAAY,IAAIC,wBAAS,CAAC;IAC9BC,kBAAkB;IAClBC,gBAAgB;IAChBC,qBAAqBT;IACrBU,mBAAmB;IACnBC,cAAc;IACdC,iBAAiB;AACnB;AAEA,MAAMC,aAAa,IAAIC,yBAAU,CAAC;IAChCP,kBAAkB;IAClBE,qBAAqBT;IACrBe,QAAQ;IACRC,mBAAmB;AACrB;AAEO,SAASb,WAAWc,OAAe;IACxC,OAAOC,2BAAY,CAACC,QAAQ,CAACF;AAC/B;AAEO,SAASf,SAASe,OAAY;IACnC,OAAOJ,WAAWO,KAAK,CAAC;QAAE,GAAGnB,WAAW;QAAE,GAAGgB,OAAO;IAAC;AACvD;AAEO,SAASb,SAASa,OAAY;IACnC,OAAOZ,UAAUgB,KAAK,CAACJ;AACzB"}
@@ -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/webdav/webdav.controller.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 { All, Controller, HttpStatus, Options, Param, Propfind, Req, Res, StreamableFile, UseGuards } from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport { HTTP_METHOD } from '../applications.constants'\nimport { SPACE_REPOSITORY } from '../spaces/constants/spaces'\nimport { SpaceGuard } from '../spaces/guards/space.guard'\nimport { WEBDAV_BASE_PATH, WEBDAV_NS } from './constants/routes'\nimport { WebDAVEnvironment } from './decorators/webdav-context.decorator'\nimport { FastifyDAVRequest } from './interfaces/webdav.interface'\nimport { WebDAVMethods } from './services/webdav-methods.service'\n\n@Controller()\n@WebDAVEnvironment()\nexport class WebDAVController {\n constructor(private readonly webdavMethods: WebDAVMethods) {}\n\n @Options()\n serverOptions(): void {\n // OPTIONS method is handled in the `WebDAVProtocolGuard`, return empty response with headers\n return\n }\n\n @Propfind()\n serverPropFind(@Req() req: FastifyDAVRequest, @Res({ passthrough: true }) res: FastifyReply): Promise<string> {\n return this.webdavMethods.propfind(req, res, WEBDAV_NS.SERVER)\n }\n\n @Options(WEBDAV_BASE_PATH)\n webdavOptions(): void {\n // OPTIONS method is handled in the `WebDAVProtocolGuard`, return empty response with headers\n return\n }\n\n @Propfind(WEBDAV_BASE_PATH)\n async webdavPropfind(@Req() req: FastifyDAVRequest, @Res({ passthrough: true }) res: FastifyReply): Promise<string> {\n return this.webdavMethods.propfind(req, res, WEBDAV_NS.WEBDAV)\n }\n\n @Options(`${WEBDAV_BASE_PATH}/:repository(^(${WEBDAV_NS.SPACES}|${WEBDAV_NS.TRASH})$)`)\n repositoriesOptions(): void {\n // OPTIONS method is handled in the `WebDAVProtocolGuard`\n return\n }\n\n @Propfind(`${WEBDAV_BASE_PATH}/:repository(^(${WEBDAV_NS.SPACES}|${WEBDAV_NS.TRASH})$)`)\n async repositoriesPropfind(\n @Req() req: FastifyDAVRequest,\n @Res({ passthrough: true }) res: FastifyReply,\n @Param('repository') repository: string\n ): Promise<string> {\n return this.webdavMethods.propfind(req, res, repository)\n }\n\n @All(`${WEBDAV_BASE_PATH}/*`)\n @UseGuards(SpaceGuard)\n async files(@Req() req: FastifyDAVRequest, @Res({ passthrough: true }) res: FastifyReply): Promise<string | StreamableFile> {\n // OPTIONS method is handled in the `WebDAVProtocolGuard`\n switch (req.method) {\n case HTTP_METHOD.PROPFIND:\n return this.webdavMethods.propfind(req, res, SPACE_REPOSITORY.FILES)\n case HTTP_METHOD.HEAD:\n case HTTP_METHOD.GET:\n return this.webdavMethods.headOrGet(req, res, SPACE_REPOSITORY.FILES)\n case HTTP_METHOD.PUT:\n return this.webdavMethods.put(req, res)\n case HTTP_METHOD.DELETE:\n return this.webdavMethods.delete(req, res)\n case HTTP_METHOD.LOCK:\n return this.webdavMethods.lock(req, res)\n case HTTP_METHOD.UNLOCK:\n return this.webdavMethods.unlock(req, res)\n case HTTP_METHOD.PROPPATCH:\n return this.webdavMethods.proppatch(req, res)\n case HTTP_METHOD.MKCOL:\n return this.webdavMethods.mkcol(req, res)\n case HTTP_METHOD.COPY:\n case HTTP_METHOD.MOVE:\n return this.webdavMethods.copyMove(req, res)\n default:\n return res.status(HttpStatus.METHOD_NOT_ALLOWED).send()\n }\n }\n}\n"],"names":["WebDAVController","serverOptions","serverPropFind","req","res","webdavMethods","propfind","WEBDAV_NS","SERVER","webdavOptions","webdavPropfind","WEBDAV","repositoriesOptions","repositoriesPropfind","repository","files","method","HTTP_METHOD","PROPFIND","SPACE_REPOSITORY","FILES","HEAD","GET","headOrGet","PUT","put","DELETE","delete","LOCK","lock","UNLOCK","unlock","PROPPATCH","proppatch","MKCOL","mkcol","COPY","MOVE","copyMove","status","HttpStatus","METHOD_NOT_ALLOWED","send","passthrough","WEBDAV_BASE_PATH","SPACES","TRASH"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../backend/src/applications/webdav/webdav.controller.ts"],"sourcesContent":["import { All, Controller, HttpStatus, Options, Param, Propfind, Req, Res, StreamableFile, UseGuards } from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport { HTTP_METHOD } from '../applications.constants'\nimport { SPACE_REPOSITORY } from '../spaces/constants/spaces'\nimport { SpaceGuard } from '../spaces/guards/space.guard'\nimport { WEBDAV_BASE_PATH, WEBDAV_NS } from './constants/routes'\nimport { WebDAVEnvironment } from './decorators/webdav-context.decorator'\nimport { FastifyDAVRequest } from './interfaces/webdav.interface'\nimport { WebDAVMethods } from './services/webdav-methods.service'\n\n@Controller()\n@WebDAVEnvironment()\nexport class WebDAVController {\n constructor(private readonly webdavMethods: WebDAVMethods) {}\n\n @Options()\n serverOptions(): void {\n // OPTIONS method is handled in the `WebDAVProtocolGuard`, return empty response with headers\n return\n }\n\n @Propfind()\n serverPropFind(@Req() req: FastifyDAVRequest, @Res({ passthrough: true }) res: FastifyReply): Promise<string> {\n return this.webdavMethods.propfind(req, res, WEBDAV_NS.SERVER)\n }\n\n @Options(WEBDAV_BASE_PATH)\n webdavOptions(): void {\n // OPTIONS method is handled in the `WebDAVProtocolGuard`, return empty response with headers\n return\n }\n\n @Propfind(WEBDAV_BASE_PATH)\n async webdavPropfind(@Req() req: FastifyDAVRequest, @Res({ passthrough: true }) res: FastifyReply): Promise<string> {\n return this.webdavMethods.propfind(req, res, WEBDAV_NS.WEBDAV)\n }\n\n @Options(`${WEBDAV_BASE_PATH}/:repository(^(${WEBDAV_NS.SPACES}|${WEBDAV_NS.TRASH})$)`)\n repositoriesOptions(): void {\n // OPTIONS method is handled in the `WebDAVProtocolGuard`\n return\n }\n\n @Propfind(`${WEBDAV_BASE_PATH}/:repository(^(${WEBDAV_NS.SPACES}|${WEBDAV_NS.TRASH})$)`)\n async repositoriesPropfind(\n @Req() req: FastifyDAVRequest,\n @Res({ passthrough: true }) res: FastifyReply,\n @Param('repository') repository: string\n ): Promise<string> {\n return this.webdavMethods.propfind(req, res, repository)\n }\n\n @All(`${WEBDAV_BASE_PATH}/*`)\n @UseGuards(SpaceGuard)\n async files(@Req() req: FastifyDAVRequest, @Res({ passthrough: true }) res: FastifyReply): Promise<string | StreamableFile> {\n // OPTIONS method is handled in the `WebDAVProtocolGuard`\n switch (req.method) {\n case HTTP_METHOD.PROPFIND:\n return this.webdavMethods.propfind(req, res, SPACE_REPOSITORY.FILES)\n case HTTP_METHOD.HEAD:\n case HTTP_METHOD.GET:\n return this.webdavMethods.headOrGet(req, res, SPACE_REPOSITORY.FILES)\n case HTTP_METHOD.PUT:\n return this.webdavMethods.put(req, res)\n case HTTP_METHOD.DELETE:\n return this.webdavMethods.delete(req, res)\n case HTTP_METHOD.LOCK:\n return this.webdavMethods.lock(req, res)\n case HTTP_METHOD.UNLOCK:\n return this.webdavMethods.unlock(req, res)\n case HTTP_METHOD.PROPPATCH:\n return this.webdavMethods.proppatch(req, res)\n case HTTP_METHOD.MKCOL:\n return this.webdavMethods.mkcol(req, res)\n case HTTP_METHOD.COPY:\n case HTTP_METHOD.MOVE:\n return this.webdavMethods.copyMove(req, res)\n default:\n return res.status(HttpStatus.METHOD_NOT_ALLOWED).send()\n }\n }\n}\n"],"names":["WebDAVController","serverOptions","serverPropFind","req","res","webdavMethods","propfind","WEBDAV_NS","SERVER","webdavOptions","webdavPropfind","WEBDAV","repositoriesOptions","repositoriesPropfind","repository","files","method","HTTP_METHOD","PROPFIND","SPACE_REPOSITORY","FILES","HEAD","GET","headOrGet","PUT","put","DELETE","delete","LOCK","lock","UNLOCK","unlock","PROPPATCH","proppatch","MKCOL","mkcol","COPY","MOVE","copyMove","status","HttpStatus","METHOD_NOT_ALLOWED","send","passthrough","WEBDAV_BASE_PATH","SPACES","TRASH"],"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/webdav/webdav.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 { SpacesManager } from '../spaces/services/spaces-manager.service'\nimport { WebDAVMethods } from './services/webdav-methods.service'\nimport { WebDAVSpaces } from './services/webdav-spaces.service'\nimport { WebDAVController } from './webdav.controller'\n\ndescribe(WebDAVController.name, () => {\n let davController: WebDAVController\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n providers: [\n { provide: WebDAVSpaces, useValue: {} },\n {\n provide: WebDAVMethods,\n useValue: {}\n },\n { provide: SpacesManager, useValue: {} },\n WebDAVController\n ]\n }).compile()\n\n davController = module.get<WebDAVController>(WebDAVController)\n })\n\n it('should be defined', () => {\n expect(davController).toBeDefined()\n })\n})\n"],"names":["describe","WebDAVController","name","davController","beforeAll","module","Test","createTestingModule","providers","provide","WebDAVSpaces","useValue","WebDAVMethods","SpacesManager","compile","get","it","expect","toBeDefined"],"mappings":"AAAA;;;;CAIC;;;;yBAEmC;sCACN;sCACA;qCACD;kCACI;AAEjCA,SAASC,kCAAgB,CAACC,IAAI,EAAE;IAC9B,IAAIC;IAEJC,UAAU;QACR,MAAMC,SAAwB,MAAMC,aAAI,CAACC,mBAAmB,CAAC;YAC3DC,WAAW;gBACT;oBAAEC,SAASC,iCAAY;oBAAEC,UAAU,CAAC;gBAAE;gBACtC;oBACEF,SAASG,mCAAa;oBACtBD,UAAU,CAAC;gBACb;gBACA;oBAAEF,SAASI,mCAAa;oBAAEF,UAAU,CAAC;gBAAE;gBACvCV,kCAAgB;aACjB;QACH,GAAGa,OAAO;QAEVX,gBAAgBE,OAAOU,GAAG,CAAmBd,kCAAgB;IAC/D;IAEAe,GAAG,qBAAqB;QACtBC,OAAOd,eAAee,WAAW;IACnC;AACF"}
1
+ {"version":3,"sources":["../../../../backend/src/applications/webdav/webdav.controller.spec.ts"],"sourcesContent":["import { Test, TestingModule } from '@nestjs/testing'\nimport { SpacesManager } from '../spaces/services/spaces-manager.service'\nimport { WebDAVMethods } from './services/webdav-methods.service'\nimport { WebDAVSpaces } from './services/webdav-spaces.service'\nimport { WebDAVController } from './webdav.controller'\n\ndescribe(WebDAVController.name, () => {\n let davController: WebDAVController\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n providers: [\n { provide: WebDAVSpaces, useValue: {} },\n {\n provide: WebDAVMethods,\n useValue: {}\n },\n { provide: SpacesManager, useValue: {} },\n WebDAVController\n ]\n }).compile()\n\n davController = module.get<WebDAVController>(WebDAVController)\n })\n\n it('should be defined', () => {\n expect(davController).toBeDefined()\n })\n})\n"],"names":["describe","WebDAVController","name","davController","beforeAll","module","Test","createTestingModule","providers","provide","WebDAVSpaces","useValue","WebDAVMethods","SpacesManager","compile","get","it","expect","toBeDefined"],"mappings":";;;;yBAAoC;sCACN;sCACA;qCACD;kCACI;AAEjCA,SAASC,kCAAgB,CAACC,IAAI,EAAE;IAC9B,IAAIC;IAEJC,UAAU;QACR,MAAMC,SAAwB,MAAMC,aAAI,CAACC,mBAAmB,CAAC;YAC3DC,WAAW;gBACT;oBAAEC,SAASC,iCAAY;oBAAEC,UAAU,CAAC;gBAAE;gBACtC;oBACEF,SAASG,mCAAa;oBACtBD,UAAU,CAAC;gBACb;gBACA;oBAAEF,SAASI,mCAAa;oBAAEF,UAAU,CAAC;gBAAE;gBACvCV,kCAAgB;aACjB;QACH,GAAGa,OAAO;QAEVX,gBAAgBE,OAAOU,GAAG,CAAmBd,kCAAgB;IAC/D;IAEAe,GAAG,qBAAqB;QACtBC,OAAOd,eAAee,WAAW;IACnC;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/webdav/webdav.e2e-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 { NestFastifyApplication } from '@nestjs/platform-fastify'\nimport { appBootstrap } from '../../app.bootstrap'\nimport { XML_CONTENT_TYPE } from './constants/webdav'\n\nconst XML_VERSION_STR = '<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>'\n\ndescribe('WebDAV (e2e)', () => {\n let app: NestFastifyApplication\n\n beforeAll(async () => {\n app = await appBootstrap()\n await app.init()\n await app.getHttpAdapter().getInstance().ready()\n })\n\n afterAll(async () => {\n await app.close()\n })\n\n it('should be defined', () => {\n expect(app).toBeDefined()\n })\n\n it('PROPFIND ALLPROP /webdav => 207', async () => {\n const res = await app.inject({\n method: 'PROPFIND',\n url: '/webdav',\n headers: { authorization: 'Basic am86cGFzc3dvcmQ=', 'content-type': XML_CONTENT_TYPE, Depth: '1' },\n body: `${XML_VERSION_STR}\n <propfind xmlns:D=\"DAV:\">\n <allprop/>\n </propfind>`\n } as any)\n expect(res.statusCode).toEqual(207)\n })\n\n it('PROPFIND PROP /webdav => 207', async () => {\n const res = await app.inject({\n method: 'PROPFIND',\n url: '/webdav',\n headers: { authorization: 'Basic am86cGFzc3dvcmQ=', 'content-type': XML_CONTENT_TYPE, Depth: '1' },\n body: `${XML_VERSION_STR}\n <D:propfind xmlns:D=\"DAV:\">\n <D:prop>\n <D:creationdate/>\n <D:displayname/>\n <D:getcontentlength/>\n <D:getcontenttype/>\n <D:getetag/>\n <D:getlastmodified/>\n <D:resourcetype/>\n </D:prop>\n </D:propfind>`\n } as any)\n expect(res.statusCode).toEqual(207)\n })\n\n describe('PUT with non-XML Content-Types (stream preservation)', () => {\n const testFilePath = '/webdav/personal/test-content-type.txt'\n const auth = 'Basic am86cGFzc3dvcmQ='\n\n afterEach(async () => {\n // Cleanup: delete the test file if it exists\n await app.inject({\n method: 'DELETE',\n url: testFilePath,\n headers: { authorization: auth }\n } as any)\n })\n\n it('PUT with application/json should preserve stream and create file with content', async () => {\n const jsonContent = '{\"key\":\"value\",\"number\":42}'\n\n const putRes = await app.inject({\n method: 'PUT',\n url: testFilePath,\n headers: {\n authorization: auth,\n 'content-type': 'application/json'\n },\n body: jsonContent\n } as any)\n\n expect([201, 204]).toContain(putRes.statusCode)\n\n // Verify the file was created with the correct content\n const getRes = await app.inject({\n method: 'GET',\n url: testFilePath,\n headers: { authorization: auth }\n } as any)\n\n expect(getRes.statusCode).toEqual(200)\n expect(getRes.body).toEqual(jsonContent)\n expect(getRes.headers['content-length']).toEqual(String(jsonContent.length))\n })\n\n it('PUT with text/plain should preserve stream and create file with content', async () => {\n const textContent = 'This is plain text content with special chars: éàù'\n\n const putRes = await app.inject({\n method: 'PUT',\n url: testFilePath,\n headers: {\n authorization: auth,\n 'content-type': 'text/plain'\n },\n body: textContent\n } as any)\n\n expect([201, 204]).toContain(putRes.statusCode)\n\n // Verify the file was created with the correct content\n const getRes = await app.inject({\n method: 'GET',\n url: testFilePath,\n headers: { authorization: auth }\n } as any)\n\n expect(getRes.statusCode).toEqual(200)\n expect(getRes.body).toEqual(textContent)\n expect(getRes.headers['content-length']).toEqual(String(Buffer.byteLength(textContent, 'utf8')))\n })\n\n it('PUT with text/plain; charset=utf-8 should preserve stream and create file with content', async () => {\n const textContent = 'Text with charset and emoji: 🚀 ✅'\n\n const putRes = await app.inject({\n method: 'PUT',\n url: testFilePath,\n headers: {\n authorization: auth,\n 'content-type': 'text/plain; charset=utf-8'\n },\n body: textContent\n } as any)\n\n expect([201, 204]).toContain(putRes.statusCode)\n\n // Verify the file was created with the correct content\n const getRes = await app.inject({\n method: 'GET',\n url: testFilePath,\n headers: { authorization: auth }\n } as any)\n\n expect(getRes.statusCode).toEqual(200)\n expect(getRes.body).toEqual(textContent)\n expect(getRes.headers['content-length']).toEqual(String(Buffer.byteLength(textContent, 'utf8')))\n })\n\n it('PUT with application/octet-stream should work as expected', async () => {\n const binaryContent = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])\n\n const putRes = await app.inject({\n method: 'PUT',\n url: testFilePath,\n headers: {\n authorization: auth,\n 'content-type': 'application/octet-stream'\n },\n body: binaryContent\n } as any)\n\n expect([201, 204]).toContain(putRes.statusCode)\n\n // Verify the file was created with the correct content\n const getRes = await app.inject({\n method: 'GET',\n url: testFilePath,\n headers: { authorization: auth }\n } as any)\n\n expect(getRes.statusCode).toEqual(200)\n expect(Buffer.from(getRes.rawPayload)).toEqual(binaryContent)\n expect(getRes.headers['content-length']).toEqual(String(binaryContent.length))\n })\n })\n})\n"],"names":["XML_VERSION_STR","describe","app","beforeAll","appBootstrap","init","getHttpAdapter","getInstance","ready","afterAll","close","it","expect","toBeDefined","res","inject","method","url","headers","authorization","XML_CONTENT_TYPE","Depth","body","statusCode","toEqual","testFilePath","auth","afterEach","jsonContent","putRes","toContain","getRes","String","length","textContent","Buffer","byteLength","binaryContent","from","rawPayload"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../backend/src/applications/webdav/webdav.e2e-spec.ts"],"sourcesContent":["import { NestFastifyApplication } from '@nestjs/platform-fastify'\nimport { appBootstrap } from '../../app.bootstrap'\nimport { XML_CONTENT_TYPE } from './constants/webdav'\n\nconst XML_VERSION_STR = '<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>'\n\ndescribe('WebDAV (e2e)', () => {\n let app: NestFastifyApplication\n\n beforeAll(async () => {\n app = await appBootstrap()\n await app.init()\n await app.getHttpAdapter().getInstance().ready()\n })\n\n afterAll(async () => {\n await app.close()\n })\n\n it('should be defined', () => {\n expect(app).toBeDefined()\n })\n\n it('PROPFIND ALLPROP /webdav => 207', async () => {\n const res = await app.inject({\n method: 'PROPFIND',\n url: '/webdav',\n headers: { authorization: 'Basic am86cGFzc3dvcmQ=', 'content-type': XML_CONTENT_TYPE, Depth: '1' },\n body: `${XML_VERSION_STR}\n <propfind xmlns:D=\"DAV:\">\n <allprop/>\n </propfind>`\n } as any)\n expect(res.statusCode).toEqual(207)\n })\n\n it('PROPFIND PROP /webdav => 207', async () => {\n const res = await app.inject({\n method: 'PROPFIND',\n url: '/webdav',\n headers: { authorization: 'Basic am86cGFzc3dvcmQ=', 'content-type': XML_CONTENT_TYPE, Depth: '1' },\n body: `${XML_VERSION_STR}\n <D:propfind xmlns:D=\"DAV:\">\n <D:prop>\n <D:creationdate/>\n <D:displayname/>\n <D:getcontentlength/>\n <D:getcontenttype/>\n <D:getetag/>\n <D:getlastmodified/>\n <D:resourcetype/>\n </D:prop>\n </D:propfind>`\n } as any)\n expect(res.statusCode).toEqual(207)\n })\n\n describe('PUT with non-XML Content-Types (stream preservation)', () => {\n const testFilePath = '/webdav/personal/test-content-type.txt'\n const auth = 'Basic am86cGFzc3dvcmQ='\n\n afterEach(async () => {\n // Cleanup: delete the test file if it exists\n await app.inject({\n method: 'DELETE',\n url: testFilePath,\n headers: { authorization: auth }\n } as any)\n })\n\n it('PUT with application/json should preserve stream and create file with content', async () => {\n const jsonContent = '{\"key\":\"value\",\"number\":42}'\n\n const putRes = await app.inject({\n method: 'PUT',\n url: testFilePath,\n headers: {\n authorization: auth,\n 'content-type': 'application/json'\n },\n body: jsonContent\n } as any)\n\n expect([201, 204]).toContain(putRes.statusCode)\n\n // Verify the file was created with the correct content\n const getRes = await app.inject({\n method: 'GET',\n url: testFilePath,\n headers: { authorization: auth }\n } as any)\n\n expect(getRes.statusCode).toEqual(200)\n expect(getRes.body).toEqual(jsonContent)\n expect(getRes.headers['content-length']).toEqual(String(jsonContent.length))\n })\n\n it('PUT with text/plain should preserve stream and create file with content', async () => {\n const textContent = 'This is plain text content with special chars: éàù'\n\n const putRes = await app.inject({\n method: 'PUT',\n url: testFilePath,\n headers: {\n authorization: auth,\n 'content-type': 'text/plain'\n },\n body: textContent\n } as any)\n\n expect([201, 204]).toContain(putRes.statusCode)\n\n // Verify the file was created with the correct content\n const getRes = await app.inject({\n method: 'GET',\n url: testFilePath,\n headers: { authorization: auth }\n } as any)\n\n expect(getRes.statusCode).toEqual(200)\n expect(getRes.body).toEqual(textContent)\n expect(getRes.headers['content-length']).toEqual(String(Buffer.byteLength(textContent, 'utf8')))\n })\n\n it('PUT with text/plain; charset=utf-8 should preserve stream and create file with content', async () => {\n const textContent = 'Text with charset and emoji: 🚀 ✅'\n\n const putRes = await app.inject({\n method: 'PUT',\n url: testFilePath,\n headers: {\n authorization: auth,\n 'content-type': 'text/plain; charset=utf-8'\n },\n body: textContent\n } as any)\n\n expect([201, 204]).toContain(putRes.statusCode)\n\n // Verify the file was created with the correct content\n const getRes = await app.inject({\n method: 'GET',\n url: testFilePath,\n headers: { authorization: auth }\n } as any)\n\n expect(getRes.statusCode).toEqual(200)\n expect(getRes.body).toEqual(textContent)\n expect(getRes.headers['content-length']).toEqual(String(Buffer.byteLength(textContent, 'utf8')))\n })\n\n it('PUT with application/octet-stream should work as expected', async () => {\n const binaryContent = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])\n\n const putRes = await app.inject({\n method: 'PUT',\n url: testFilePath,\n headers: {\n authorization: auth,\n 'content-type': 'application/octet-stream'\n },\n body: binaryContent\n } as any)\n\n expect([201, 204]).toContain(putRes.statusCode)\n\n // Verify the file was created with the correct content\n const getRes = await app.inject({\n method: 'GET',\n url: testFilePath,\n headers: { authorization: auth }\n } as any)\n\n expect(getRes.statusCode).toEqual(200)\n expect(Buffer.from(getRes.rawPayload)).toEqual(binaryContent)\n expect(getRes.headers['content-length']).toEqual(String(binaryContent.length))\n })\n })\n})\n"],"names":["XML_VERSION_STR","describe","app","beforeAll","appBootstrap","init","getHttpAdapter","getInstance","ready","afterAll","close","it","expect","toBeDefined","res","inject","method","url","headers","authorization","XML_CONTENT_TYPE","Depth","body","statusCode","toEqual","testFilePath","auth","afterEach","jsonContent","putRes","toContain","getRes","String","length","textContent","Buffer","byteLength","binaryContent","from","rawPayload"],"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/webdav/webdav.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 { WebDAVProtocolGuard } from './guards/webdav-protocol.guard'\nimport { WebDAVMethods } from './services/webdav-methods.service'\nimport { WebDAVSpaces } from './services/webdav-spaces.service'\nimport { WebDAVController } from './webdav.controller'\n\n@Module({\n controllers: [WebDAVController],\n providers: [WebDAVProtocolGuard, WebDAVMethods, WebDAVSpaces]\n})\nexport class WebDAVModule {}\n"],"names":["WebDAVModule","controllers","WebDAVController","providers","WebDAVProtocolGuard","WebDAVMethods","WebDAVSpaces"],"mappings":"AAAA;;;;CAIC;;;;+BAYYA;;;eAAAA;;;wBAVU;qCACa;sCACN;qCACD;kCACI;;;;;;;AAM1B,IAAA,AAAMA,eAAN,MAAMA;AAAc;;;QAHzBC,aAAa;YAACC,kCAAgB;SAAC;QAC/BC,WAAW;YAACC,wCAAmB;YAAEC,mCAAa;YAAEC,iCAAY;SAAC"}
1
+ {"version":3,"sources":["../../../../backend/src/applications/webdav/webdav.module.ts"],"sourcesContent":["import { Module } from '@nestjs/common'\nimport { WebDAVProtocolGuard } from './guards/webdav-protocol.guard'\nimport { WebDAVMethods } from './services/webdav-methods.service'\nimport { WebDAVSpaces } from './services/webdav-spaces.service'\nimport { WebDAVController } from './webdav.controller'\n\n@Module({\n controllers: [WebDAVController],\n providers: [WebDAVProtocolGuard, WebDAVMethods, WebDAVSpaces]\n})\nexport class WebDAVModule {}\n"],"names":["WebDAVModule","controllers","WebDAVController","providers","WebDAVProtocolGuard","WebDAVMethods","WebDAVSpaces"],"mappings":";;;;+BAUaA;;;eAAAA;;;wBAVU;qCACa;sCACN;qCACD;kCACI;;;;;;;AAM1B,IAAA,AAAMA,eAAN,MAAMA;AAAc;;;QAHzBC,aAAa;YAACC,kCAAgB;SAAC;QAC/BC,WAAW;YAACC,wCAAmB;YAAEC,mCAAa;YAAEC,iCAAY;SAAC"}