@sync-in/server 1.3.9 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +5 -3
  3. package/environment/environment.dist.yaml +2 -0
  4. package/package.json +6 -6
  5. package/server/app.bootstrap.js +9 -0
  6. package/server/app.bootstrap.js.map +1 -1
  7. package/server/app.service.spec.js +44 -19
  8. package/server/app.service.spec.js.map +1 -1
  9. package/server/applications/comments/comments.controller.spec.js +103 -4
  10. package/server/applications/comments/comments.controller.spec.js.map +1 -1
  11. package/server/applications/comments/services/comments-manager.service.spec.js +409 -9
  12. package/server/applications/comments/services/comments-manager.service.spec.js.map +1 -1
  13. package/server/applications/files/adapters/files-indexer-mysql.service.spec.js +333 -0
  14. package/server/applications/files/adapters/files-indexer-mysql.service.spec.js.map +1 -0
  15. package/server/applications/files/constants/files.js +0 -23
  16. package/server/applications/files/constants/files.js.map +1 -1
  17. package/server/applications/files/constants/only-office.js +8 -0
  18. package/server/applications/files/constants/only-office.js.map +1 -1
  19. package/server/applications/files/constants/routes.js +6 -1
  20. package/server/applications/files/constants/routes.js.map +1 -1
  21. package/server/applications/files/files-only-office.controller.js +11 -0
  22. package/server/applications/files/files-only-office.controller.js.map +1 -1
  23. package/server/applications/files/files-only-office.controller.spec.js +97 -3
  24. package/server/applications/files/files-only-office.controller.spec.js.map +1 -1
  25. package/server/applications/files/files-tasks.controller.spec.js +91 -1
  26. package/server/applications/files/files-tasks.controller.spec.js.map +1 -1
  27. package/server/applications/files/files.config.js +5 -0
  28. package/server/applications/files/files.config.js.map +1 -1
  29. package/server/applications/files/files.controller.spec.js +268 -46
  30. package/server/applications/files/files.controller.spec.js.map +1 -1
  31. package/server/applications/files/guards/files-only-office.guard.spec.js +77 -1
  32. package/server/applications/files/guards/files-only-office.guard.spec.js.map +1 -1
  33. package/server/applications/files/guards/files-only-office.strategy.js +0 -1
  34. package/server/applications/files/guards/files-only-office.strategy.js.map +1 -1
  35. package/server/applications/files/services/files-only-office-manager.service.js +5 -0
  36. package/server/applications/files/services/files-only-office-manager.service.js.map +1 -1
  37. package/server/applications/links/links.controller.spec.js +91 -58
  38. package/server/applications/links/links.controller.spec.js.map +1 -1
  39. package/server/applications/links/services/links-manager.service.js +4 -6
  40. package/server/applications/links/services/links-manager.service.js.map +1 -1
  41. package/server/applications/links/services/links-manager.service.spec.js +378 -14
  42. package/server/applications/links/services/links-manager.service.spec.js.map +1 -1
  43. package/server/applications/links/services/links-queries.service.js +1 -1
  44. package/server/applications/links/services/links-queries.service.js.map +1 -1
  45. package/server/applications/notifications/notifications.controller.spec.js +56 -1
  46. package/server/applications/notifications/notifications.controller.spec.js.map +1 -1
  47. package/server/applications/notifications/services/notifications-manager.service.spec.js +461 -5
  48. package/server/applications/notifications/services/notifications-manager.service.spec.js.map +1 -1
  49. package/server/applications/shares/services/shares-manager.service.spec.js +590 -14
  50. package/server/applications/shares/services/shares-manager.service.spec.js.map +1 -1
  51. package/server/applications/spaces/guards/space.guard.spec.js +153 -18
  52. package/server/applications/spaces/guards/space.guard.spec.js.map +1 -1
  53. package/server/applications/spaces/services/spaces-browser.service.js +7 -7
  54. package/server/applications/spaces/services/spaces-browser.service.js.map +1 -1
  55. package/server/applications/spaces/services/spaces-manager.service.js +17 -17
  56. package/server/applications/spaces/services/spaces-manager.service.js.map +1 -1
  57. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.spec.js +120 -0
  58. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.spec.js.map +1 -0
  59. package/server/applications/sync/services/sync-clients-manager.service.spec.js +548 -8
  60. package/server/applications/sync/services/sync-clients-manager.service.spec.js.map +1 -1
  61. package/server/applications/sync/services/sync-manager.service.spec.js +837 -5
  62. package/server/applications/sync/services/sync-manager.service.spec.js.map +1 -1
  63. package/server/applications/sync/services/sync-paths-manager.service.spec.js +900 -7
  64. package/server/applications/sync/services/sync-paths-manager.service.spec.js.map +1 -1
  65. package/server/applications/sync/utils/routes.js +1 -1
  66. package/server/applications/sync/utils/routes.js.map +1 -1
  67. package/server/applications/users/guards/permissions.guard.js +4 -4
  68. package/server/applications/users/guards/permissions.guard.js.map +1 -1
  69. package/server/applications/users/guards/permissions.guard.spec.js +6 -6
  70. package/server/applications/users/guards/permissions.guard.spec.js.map +1 -1
  71. package/server/applications/users/guards/roles.guard.js +1 -1
  72. package/server/applications/users/guards/roles.guard.js.map +1 -1
  73. package/server/applications/users/models/user.model.js +1 -1
  74. package/server/applications/users/models/user.model.js.map +1 -1
  75. package/server/applications/users/services/admin-users-manager.service.js +22 -24
  76. package/server/applications/users/services/admin-users-manager.service.js.map +1 -1
  77. package/server/applications/users/services/admin-users-manager.service.spec.js +763 -17
  78. package/server/applications/users/services/admin-users-manager.service.spec.js.map +1 -1
  79. package/server/applications/users/services/users-manager.service.js +1 -1
  80. package/server/applications/users/services/users-manager.service.js.map +1 -1
  81. package/server/applications/users/services/users-manager.service.spec.js +938 -49
  82. package/server/applications/users/services/users-manager.service.spec.js.map +1 -1
  83. package/server/applications/webdav/decorators/if-header.decorator.js +4 -1
  84. package/server/applications/webdav/decorators/if-header.decorator.js.map +1 -1
  85. package/server/applications/webdav/filters/webdav.filter.spec.js +77 -0
  86. package/server/applications/webdav/filters/webdav.filter.spec.js.map +1 -0
  87. package/server/applications/webdav/guards/webdav-protocol.guard.js +3 -7
  88. package/server/applications/webdav/guards/webdav-protocol.guard.js.map +1 -1
  89. package/server/applications/webdav/guards/webdav-protocol.guard.spec.js +580 -0
  90. package/server/applications/webdav/guards/webdav-protocol.guard.spec.js.map +1 -0
  91. package/server/applications/webdav/services/webdav-methods.service.spec.js +1582 -3
  92. package/server/applications/webdav/services/webdav-methods.service.spec.js.map +1 -1
  93. package/server/applications/webdav/services/webdav-spaces.service.spec.js +390 -2
  94. package/server/applications/webdav/services/webdav-spaces.service.spec.js.map +1 -1
  95. package/server/applications/webdav/webdav.controller.js +2 -2
  96. package/server/applications/webdav/webdav.controller.js.map +1 -1
  97. package/server/authentication/guards/auth-basic.guard.js.map +1 -1
  98. package/server/authentication/guards/auth-basic.guard.spec.js +38 -2
  99. package/server/authentication/guards/auth-basic.guard.spec.js.map +1 -1
  100. package/server/authentication/guards/auth-basic.strategy.js +0 -1
  101. package/server/authentication/guards/auth-basic.strategy.js.map +1 -1
  102. package/server/authentication/guards/auth-digest.guard.js +1 -2
  103. package/server/authentication/guards/auth-digest.guard.js.map +1 -1
  104. package/server/authentication/guards/auth-local.guard.js.map +1 -1
  105. package/server/authentication/guards/auth-local.guard.spec.js +7 -5
  106. package/server/authentication/guards/auth-local.guard.spec.js.map +1 -1
  107. package/server/authentication/guards/auth-local.strategy.js +0 -1
  108. package/server/authentication/guards/auth-local.strategy.js.map +1 -1
  109. package/server/authentication/guards/auth-token-access.guard.spec.js +30 -0
  110. package/server/authentication/guards/auth-token-access.guard.spec.js.map +1 -1
  111. package/server/authentication/guards/auth-token-access.strategy.js +0 -1
  112. package/server/authentication/guards/auth-token-access.strategy.js.map +1 -1
  113. package/server/authentication/guards/auth-token-refresh.strategy.js +0 -1
  114. package/server/authentication/guards/auth-token-refresh.strategy.js.map +1 -1
  115. package/server/authentication/services/auth-methods/auth-method-database.service.js +1 -1
  116. package/server/authentication/services/auth-methods/auth-method-database.service.js.map +1 -1
  117. package/server/authentication/services/auth-methods/auth-method-database.service.spec.js +8 -6
  118. package/server/authentication/services/auth-methods/auth-method-database.service.spec.js.map +1 -1
  119. package/server/authentication/services/auth-methods/auth-method-ldap.service.js +2 -2
  120. package/server/authentication/services/auth-methods/auth-method-ldap.service.js.map +1 -1
  121. package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js +500 -5
  122. package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js.map +1 -1
  123. package/server/configuration/config.loader.js +0 -3
  124. package/server/configuration/config.loader.js.map +1 -1
  125. package/server/infrastructure/context/interceptors/context.interceptor.spec.js +135 -0
  126. package/server/infrastructure/context/interceptors/context.interceptor.spec.js.map +1 -0
  127. package/server/infrastructure/context/services/context-manager.service.spec.js +98 -0
  128. package/server/infrastructure/context/services/context-manager.service.spec.js.map +1 -0
  129. package/server/infrastructure/database/constants.js +0 -1
  130. package/server/infrastructure/database/constants.js.map +1 -1
  131. package/server/infrastructure/database/scripts/seed/usersgroups.js +3 -3
  132. package/server/infrastructure/database/scripts/seed/usersgroups.js.map +1 -1
  133. package/server/infrastructure/mailer/mailer.service.js +20 -19
  134. package/server/infrastructure/mailer/mailer.service.js.map +1 -1
  135. package/server/infrastructure/mailer/mailer.service.spec.js +176 -0
  136. package/server/infrastructure/mailer/mailer.service.spec.js.map +1 -0
  137. package/static/3rdpartylicenses.txt +26 -26
  138. package/static/assets/pdfjs/build/pdf.mjs +1177 -255
  139. package/static/assets/pdfjs/build/pdf.mjs.map +1 -1
  140. package/static/assets/pdfjs/build/pdf.sandbox.mjs +25 -2
  141. package/static/assets/pdfjs/build/pdf.sandbox.mjs.map +1 -1
  142. package/static/assets/pdfjs/build/pdf.worker.mjs +140 -16
  143. package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
  144. package/static/assets/pdfjs/version +1 -1
  145. package/static/assets/pdfjs/web/debugger.css +31 -0
  146. package/static/assets/pdfjs/web/debugger.mjs +144 -2
  147. package/static/assets/pdfjs/web/images/comment-editButton.svg +6 -1
  148. package/static/assets/pdfjs/web/locale/ach/viewer.ftl +0 -63
  149. package/static/assets/pdfjs/web/locale/af/viewer.ftl +0 -71
  150. package/static/assets/pdfjs/web/locale/an/viewer.ftl +0 -63
  151. package/static/assets/pdfjs/web/locale/ast/viewer.ftl +0 -60
  152. package/static/assets/pdfjs/web/locale/az/viewer.ftl +0 -63
  153. package/static/assets/pdfjs/web/locale/be/viewer.ftl +38 -0
  154. package/static/assets/pdfjs/web/locale/bg/viewer.ftl +0 -37
  155. package/static/assets/pdfjs/web/locale/bn/viewer.ftl +0 -63
  156. package/static/assets/pdfjs/web/locale/bo/viewer.ftl +0 -63
  157. package/static/assets/pdfjs/web/locale/br/viewer.ftl +0 -37
  158. package/static/assets/pdfjs/web/locale/brx/viewer.ftl +0 -63
  159. package/static/assets/pdfjs/web/locale/bs/viewer.ftl +22 -0
  160. package/static/assets/pdfjs/web/locale/ca/viewer.ftl +0 -54
  161. package/static/assets/pdfjs/web/locale/cak/viewer.ftl +0 -54
  162. package/static/assets/pdfjs/web/locale/ckb/viewer.ftl +0 -63
  163. package/static/assets/pdfjs/web/locale/cs/viewer.ftl +38 -0
  164. package/static/assets/pdfjs/web/locale/cy/viewer.ftl +38 -0
  165. package/static/assets/pdfjs/web/locale/da/viewer.ftl +38 -0
  166. package/static/assets/pdfjs/web/locale/de/viewer.ftl +38 -0
  167. package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +38 -0
  168. package/static/assets/pdfjs/web/locale/el/viewer.ftl +38 -0
  169. package/static/assets/pdfjs/web/locale/en-CA/viewer.ftl +38 -0
  170. package/static/assets/pdfjs/web/locale/en-GB/viewer.ftl +38 -0
  171. package/static/assets/pdfjs/web/locale/en-US/viewer.ftl +25 -0
  172. package/static/assets/pdfjs/web/locale/eo/viewer.ftl +38 -0
  173. package/static/assets/pdfjs/web/locale/es-AR/viewer.ftl +38 -0
  174. package/static/assets/pdfjs/web/locale/es-CL/viewer.ftl +38 -0
  175. package/static/assets/pdfjs/web/locale/es-MX/viewer.ftl +0 -6
  176. package/static/assets/pdfjs/web/locale/et/viewer.ftl +0 -57
  177. package/static/assets/pdfjs/web/locale/fa/viewer.ftl +0 -37
  178. package/static/assets/pdfjs/web/locale/ff/viewer.ftl +0 -63
  179. package/static/assets/pdfjs/web/locale/fi/viewer.ftl +38 -0
  180. package/static/assets/pdfjs/web/locale/fr/viewer.ftl +38 -0
  181. package/static/assets/pdfjs/web/locale/fy-NL/viewer.ftl +38 -0
  182. package/static/assets/pdfjs/web/locale/ga-IE/viewer.ftl +0 -71
  183. package/static/assets/pdfjs/web/locale/gd/viewer.ftl +0 -54
  184. package/static/assets/pdfjs/web/locale/gl/viewer.ftl +8 -0
  185. package/static/assets/pdfjs/web/locale/gn/viewer.ftl +38 -0
  186. package/static/assets/pdfjs/web/locale/gu-IN/viewer.ftl +0 -63
  187. package/static/assets/pdfjs/web/locale/he/viewer.ftl +38 -0
  188. package/static/assets/pdfjs/web/locale/hi-IN/viewer.ftl +0 -60
  189. package/static/assets/pdfjs/web/locale/hsb/viewer.ftl +38 -0
  190. package/static/assets/pdfjs/web/locale/hu/viewer.ftl +38 -0
  191. package/static/assets/pdfjs/web/locale/hy-AM/viewer.ftl +0 -49
  192. package/static/assets/pdfjs/web/locale/hye/viewer.ftl +0 -60
  193. package/static/assets/pdfjs/web/locale/ia/viewer.ftl +38 -0
  194. package/static/assets/pdfjs/web/locale/is/viewer.ftl +0 -3
  195. package/static/assets/pdfjs/web/locale/it/viewer.ftl +31 -0
  196. package/static/assets/pdfjs/web/locale/ja/viewer.ftl +8 -0
  197. package/static/assets/pdfjs/web/locale/ka/viewer.ftl +48 -10
  198. package/static/assets/pdfjs/web/locale/kab/viewer.ftl +5 -0
  199. package/static/assets/pdfjs/web/locale/kk/viewer.ftl +8 -0
  200. package/static/assets/pdfjs/web/locale/km/viewer.ftl +0 -63
  201. package/static/assets/pdfjs/web/locale/kn/viewer.ftl +0 -71
  202. package/static/assets/pdfjs/web/locale/ko/viewer.ftl +38 -0
  203. package/static/assets/pdfjs/web/locale/lij/viewer.ftl +0 -63
  204. package/static/assets/pdfjs/web/locale/lo/viewer.ftl +0 -54
  205. package/static/assets/pdfjs/web/locale/lt/viewer.ftl +0 -60
  206. package/static/assets/pdfjs/web/locale/ltg/viewer.ftl +0 -63
  207. package/static/assets/pdfjs/web/locale/lv/viewer.ftl +0 -63
  208. package/static/assets/pdfjs/web/locale/meh/viewer.ftl +0 -75
  209. package/static/assets/pdfjs/web/locale/mk/viewer.ftl +0 -63
  210. package/static/assets/pdfjs/web/locale/ml/viewer.ftl +0 -3
  211. package/static/assets/pdfjs/web/locale/mr/viewer.ftl +0 -63
  212. package/static/assets/pdfjs/web/locale/ms/viewer.ftl +0 -63
  213. package/static/assets/pdfjs/web/locale/my/viewer.ftl +0 -71
  214. package/static/assets/pdfjs/web/locale/nb-NO/viewer.ftl +44 -6
  215. package/static/assets/pdfjs/web/locale/ne-NP/viewer.ftl +0 -71
  216. package/static/assets/pdfjs/web/locale/nl/viewer.ftl +38 -0
  217. package/static/assets/pdfjs/web/locale/nn-NO/viewer.ftl +45 -1
  218. package/static/assets/pdfjs/web/locale/oc/viewer.ftl +0 -31
  219. package/static/assets/pdfjs/web/locale/pa-IN/viewer.ftl +38 -0
  220. package/static/assets/pdfjs/web/locale/pl/viewer.ftl +39 -1
  221. package/static/assets/pdfjs/web/locale/pt-BR/viewer.ftl +38 -0
  222. package/static/assets/pdfjs/web/locale/ro/viewer.ftl +355 -1
  223. package/static/assets/pdfjs/web/locale/ru/viewer.ftl +38 -0
  224. package/static/assets/pdfjs/web/locale/sat/viewer.ftl +0 -54
  225. package/static/assets/pdfjs/web/locale/sc/viewer.ftl +0 -38
  226. package/static/assets/pdfjs/web/locale/scn/viewer.ftl +0 -92
  227. package/static/assets/pdfjs/web/locale/sco/viewer.ftl +0 -60
  228. package/static/assets/pdfjs/web/locale/si/viewer.ftl +0 -51
  229. package/static/assets/pdfjs/web/locale/sk/viewer.ftl +38 -0
  230. package/static/assets/pdfjs/web/locale/skr/viewer.ftl +0 -27
  231. package/static/assets/pdfjs/web/locale/sl/viewer.ftl +8 -0
  232. package/static/assets/pdfjs/web/locale/son/viewer.ftl +0 -71
  233. package/static/assets/pdfjs/web/locale/sr/viewer.ftl +0 -33
  234. package/static/assets/pdfjs/web/locale/sv-SE/viewer.ftl +38 -0
  235. package/static/assets/pdfjs/web/locale/szl/viewer.ftl +0 -63
  236. package/static/assets/pdfjs/web/locale/ta/viewer.ftl +0 -63
  237. package/static/assets/pdfjs/web/locale/te/viewer.ftl +0 -60
  238. package/static/assets/pdfjs/web/locale/tg/viewer.ftl +38 -0
  239. package/static/assets/pdfjs/web/locale/tl/viewer.ftl +0 -63
  240. package/static/assets/pdfjs/web/locale/tr/viewer.ftl +40 -2
  241. package/static/assets/pdfjs/web/locale/trs/viewer.ftl +0 -72
  242. package/static/assets/pdfjs/web/locale/ur/viewer.ftl +0 -60
  243. package/static/assets/pdfjs/web/locale/uz/viewer.ftl +0 -71
  244. package/static/assets/pdfjs/web/locale/vi/viewer.ftl +38 -0
  245. package/static/assets/pdfjs/web/locale/wo/viewer.ftl +0 -77
  246. package/static/assets/pdfjs/web/locale/xh/viewer.ftl +0 -71
  247. package/static/assets/pdfjs/web/locale/zh-CN/viewer.ftl +38 -0
  248. package/static/assets/pdfjs/web/locale/zh-TW/viewer.ftl +38 -0
  249. package/static/assets/pdfjs/web/viewer.css +649 -120
  250. package/static/assets/pdfjs/web/viewer.html +19 -0
  251. package/static/assets/pdfjs/web/viewer.mjs +489 -38
  252. package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
  253. package/static/chunk-22EANI6R.js +1 -0
  254. package/static/{chunk-KFM544CA.js → chunk-2UWN7IQF.js} +1 -1
  255. package/static/{chunk-N3T57OCA.js → chunk-2VSPDSJS.js} +1 -1
  256. package/static/{chunk-HUWQHCUX.js → chunk-34UZ7SYI.js} +1 -1
  257. package/static/{chunk-MWFRZBJD.js → chunk-45UQJGGY.js} +1 -1
  258. package/static/{chunk-LYTD6AJE.js → chunk-5TEXH3LJ.js} +1 -1
  259. package/static/{chunk-4KESSWTF.js → chunk-66FMKVJX.js} +1 -1
  260. package/static/{chunk-XE5YHU5J.js → chunk-BIUNUYZ5.js} +1 -1
  261. package/static/chunk-CK4BY2NX.js +27 -0
  262. package/static/{chunk-QTW62OKJ.js → chunk-CSBDAY77.js} +1 -1
  263. package/static/{chunk-XUZSYWRF.js → chunk-CXXPLBDZ.js} +1 -1
  264. package/static/{chunk-ZTXJC5IC.js → chunk-EILQG525.js} +1 -1
  265. package/static/{chunk-FJFNDK67.js → chunk-ENWABUR4.js} +1 -1
  266. package/static/{chunk-WL65GYD5.js → chunk-FR4AOLYL.js} +4 -4
  267. package/static/chunk-HW2H3ISM.js +559 -0
  268. package/static/{chunk-BW5PQAKK.js → chunk-HYMDGBZL.js} +1 -1
  269. package/static/{chunk-WLPYIJFI.js → chunk-IML5UYQG.js} +1 -1
  270. package/static/{chunk-Z5X7LVMZ.js → chunk-IPSMJHMQ.js} +1 -1
  271. package/static/{chunk-3S4WNZ2T.js → chunk-JVCWYSNP.js} +1 -1
  272. package/static/{chunk-CLSVDV7J.js → chunk-KGPCIUD2.js} +1 -1
  273. package/static/{chunk-O4AQBQBF.js → chunk-KQZJSEM3.js} +1 -1
  274. package/static/{chunk-MK7WZG3F.js → chunk-NPEMJJIU.js} +1 -1
  275. package/static/{chunk-4TEHM3AS.js → chunk-OEFBC4GG.js} +1 -1
  276. package/static/{chunk-O67RFAWU.js → chunk-P734A3XZ.js} +1 -1
  277. package/static/{chunk-SRLMFJ7C.js → chunk-RASR4CK6.js} +1 -1
  278. package/static/{chunk-S5WXHO6D.js → chunk-RFMOUC22.js} +1 -1
  279. package/static/{chunk-TTQ37MUV.js → chunk-RSS6GYNE.js} +1 -1
  280. package/static/{chunk-3FX6ISDY.js → chunk-SBOQGGZX.js} +1 -1
  281. package/static/{chunk-NV2MEIWP.js → chunk-SJAFPXQV.js} +1 -1
  282. package/static/{chunk-PYSFXLMV.js → chunk-XTYGMF2V.js} +1 -1
  283. package/static/{chunk-ZFKCGL6X.js → chunk-YCWMV2YR.js} +1 -1
  284. package/static/{chunk-LB7B5RIV.js → chunk-YGD22MWQ.js} +1 -1
  285. package/static/{chunk-MTRNPGS4.js → chunk-ZC5NIT55.js} +1 -1
  286. package/static/{chunk-SKDQM65G.js → chunk-ZVY37DKS.js} +1 -1
  287. package/static/index.html +2 -2
  288. package/static/main-N5CZRHAO.js +7 -0
  289. package/static/styles-FYUSO6OJ.css +1 -0
  290. package/static/chunk-AY2GOSJ2.js +0 -24
  291. package/static/chunk-RSNLYAN6.js +0 -560
  292. package/static/chunk-ZZ3LHYOY.js +0 -1
  293. package/static/main-RREKR34B.js +0 -10
  294. package/static/styles-3DONJ2Z4.css +0 -1
@@ -15,7 +15,15 @@ const _filesmethodsservice = require("./services/files-methods.service");
15
15
  const _filesonlyofficemanagerservice = require("./services/files-only-office-manager.service");
16
16
  describe(_filesonlyofficecontroller.FilesOnlyOfficeController.name, ()=>{
17
17
  let controller;
18
- beforeAll(async ()=>{
18
+ const filesOnlyOfficeManagerMock = {
19
+ getSettings: jest.fn(),
20
+ callBack: jest.fn()
21
+ };
22
+ const filesMethodsMock = {
23
+ headOrGet: jest.fn()
24
+ };
25
+ beforeEach(async ()=>{
26
+ jest.clearAllMocks();
19
27
  const module = await _testing.Test.createTestingModule({
20
28
  controllers: [
21
29
  _filesonlyofficecontroller.FilesOnlyOfficeController
@@ -23,11 +31,11 @@ describe(_filesonlyofficecontroller.FilesOnlyOfficeController.name, ()=>{
23
31
  providers: [
24
32
  {
25
33
  provide: _filesonlyofficemanagerservice.FilesOnlyOfficeManager,
26
- useValue: {}
34
+ useValue: filesOnlyOfficeManagerMock
27
35
  },
28
36
  {
29
37
  provide: _filesmethodsservice.FilesMethods,
30
- useValue: {}
38
+ useValue: filesMethodsMock
31
39
  },
32
40
  {
33
41
  provide: _spacesmanagerservice.SpacesManager,
@@ -42,6 +50,92 @@ describe(_filesonlyofficecontroller.FilesOnlyOfficeController.name, ()=>{
42
50
  it('should be defined', ()=>{
43
51
  expect(controller).toBeDefined();
44
52
  });
53
+ describe('onlyOfficeSettings', ()=>{
54
+ it('should call manager with default mode "view" when mode is undefined', async ()=>{
55
+ const user = {
56
+ id: 1
57
+ };
58
+ const space = {
59
+ id: 'space-1'
60
+ };
61
+ const req = {
62
+ headers: {},
63
+ params: {},
64
+ query: {}
65
+ };
66
+ const expected = {
67
+ config: 'ok',
68
+ mode: 'view'
69
+ };
70
+ filesOnlyOfficeManagerMock.getSettings.mockResolvedValue(expected);
71
+ const result = await controller.onlyOfficeSettings(user, space, undefined, req);
72
+ expect(filesOnlyOfficeManagerMock.getSettings).toHaveBeenCalledTimes(1);
73
+ expect(filesOnlyOfficeManagerMock.getSettings).toHaveBeenCalledWith(user, space, 'view', req);
74
+ expect(result).toBe(expected);
75
+ });
76
+ it('should pass provided mode to manager', async ()=>{
77
+ const user = {
78
+ id: 2
79
+ };
80
+ const space = {
81
+ id: 'space-2'
82
+ };
83
+ const req = {
84
+ headers: {
85
+ 'x-test': '1'
86
+ }
87
+ };
88
+ const expected = {
89
+ config: 'ok',
90
+ mode: 'edit'
91
+ };
92
+ filesOnlyOfficeManagerMock.getSettings.mockResolvedValue(expected);
93
+ const result = await controller.onlyOfficeSettings(user, space, 'edit', req);
94
+ expect(filesOnlyOfficeManagerMock.getSettings).toHaveBeenCalledWith(user, space, 'edit', req);
95
+ expect(result).toBe(expected);
96
+ });
97
+ });
98
+ describe('onlyOfficeDocument', ()=>{
99
+ it('should delegate to filesMethods.headOrGet with req and res', async ()=>{
100
+ const req = {
101
+ params: {
102
+ '*': 'path/to/file'
103
+ }
104
+ };
105
+ const res = {
106
+ header: jest.fn(),
107
+ status: jest.fn().mockReturnThis()
108
+ };
109
+ const stream = {
110
+ readable: true
111
+ };
112
+ filesMethodsMock.headOrGet.mockResolvedValue(stream);
113
+ const result = await controller.onlyOfficeDocument(req, res);
114
+ expect(filesMethodsMock.headOrGet).toHaveBeenCalledTimes(1);
115
+ expect(filesMethodsMock.headOrGet).toHaveBeenCalledWith(req, res);
116
+ expect(result).toBe(stream);
117
+ });
118
+ });
119
+ describe('onlyOfficeCallBack', ()=>{
120
+ it('should call manager.callBack with user, space, token and fileId (fid)', async ()=>{
121
+ const user = {
122
+ id: 3
123
+ };
124
+ const space = {
125
+ id: 'space-3'
126
+ };
127
+ const token = 'jwt-token';
128
+ const fileId = 'file-123';
129
+ const expected = {
130
+ ok: true
131
+ };
132
+ filesOnlyOfficeManagerMock.callBack.mockResolvedValue(expected);
133
+ const result = await controller.onlyOfficeCallBack(user, space, token, fileId);
134
+ expect(filesOnlyOfficeManagerMock.callBack).toHaveBeenCalledTimes(1);
135
+ expect(filesOnlyOfficeManagerMock.callBack).toHaveBeenCalledWith(user, space, token, fileId);
136
+ expect(result).toBe(expected);
137
+ });
138
+ });
45
139
  });
46
140
 
47
141
  //# sourceMappingURL=files-only-office.controller.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../backend/src/applications/files/files-only-office.controller.spec.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { ContextInterceptor } from '../../infrastructure/context/interceptors/context.interceptor'\nimport { ContextManager } from '../../infrastructure/context/services/context-manager.service'\nimport { SpacesManager } from '../spaces/services/spaces-manager.service'\nimport { FilesOnlyOfficeController } from './files-only-office.controller'\nimport { FilesMethods } from './services/files-methods.service'\nimport { FilesOnlyOfficeManager } from './services/files-only-office-manager.service'\n\ndescribe(FilesOnlyOfficeController.name, () => {\n let controller: FilesOnlyOfficeController\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n controllers: [FilesOnlyOfficeController],\n providers: [\n { provide: FilesOnlyOfficeManager, useValue: {} },\n { provide: FilesMethods, useValue: {} },\n { provide: SpacesManager, useValue: {} },\n ContextManager,\n ContextInterceptor\n ]\n }).compile()\n\n controller = module.get<FilesOnlyOfficeController>(FilesOnlyOfficeController)\n })\n\n it('should be defined', () => {\n expect(controller).toBeDefined()\n })\n})\n"],"names":["describe","FilesOnlyOfficeController","name","controller","beforeAll","module","Test","createTestingModule","controllers","providers","provide","FilesOnlyOfficeManager","useValue","FilesMethods","SpacesManager","ContextManager","ContextInterceptor","compile","get","it","expect","toBeDefined"],"mappings":"AAAA;;;;CAIC;;;;yBAEmC;oCACD;uCACJ;sCACD;2CACY;qCACb;+CACU;AAEvCA,SAASC,oDAAyB,CAACC,IAAI,EAAE;IACvC,IAAIC;IAEJC,UAAU;QACR,MAAMC,SAAwB,MAAMC,aAAI,CAACC,mBAAmB,CAAC;YAC3DC,aAAa;gBAACP,oDAAyB;aAAC;YACxCQ,WAAW;gBACT;oBAAEC,SAASC,qDAAsB;oBAAEC,UAAU,CAAC;gBAAE;gBAChD;oBAAEF,SAASG,iCAAY;oBAAED,UAAU,CAAC;gBAAE;gBACtC;oBAAEF,SAASI,mCAAa;oBAAEF,UAAU,CAAC;gBAAE;gBACvCG,qCAAc;gBACdC,sCAAkB;aACnB;QACH,GAAGC,OAAO;QAEVd,aAAaE,OAAOa,GAAG,CAA4BjB,oDAAyB;IAC9E;IAEAkB,GAAG,qBAAqB;QACtBC,OAAOjB,YAAYkB,WAAW;IAChC;AACF"}
1
+ {"version":3,"sources":["../../../../backend/src/applications/files/files-only-office.controller.spec.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { ContextInterceptor } from '../../infrastructure/context/interceptors/context.interceptor'\nimport { ContextManager } from '../../infrastructure/context/services/context-manager.service'\nimport { SpacesManager } from '../spaces/services/spaces-manager.service'\nimport { FilesOnlyOfficeController } from './files-only-office.controller'\nimport { FilesMethods } from './services/files-methods.service'\nimport { FilesOnlyOfficeManager } from './services/files-only-office-manager.service'\n\ndescribe(FilesOnlyOfficeController.name, () => {\n let controller: FilesOnlyOfficeController\n\n const filesOnlyOfficeManagerMock = {\n getSettings: jest.fn(),\n callBack: jest.fn()\n }\n\n const filesMethodsMock = {\n headOrGet: jest.fn()\n }\n\n beforeEach(async () => {\n jest.clearAllMocks()\n const module: TestingModule = await Test.createTestingModule({\n controllers: [FilesOnlyOfficeController],\n providers: [\n { provide: FilesOnlyOfficeManager, useValue: filesOnlyOfficeManagerMock },\n { provide: FilesMethods, useValue: filesMethodsMock },\n { provide: SpacesManager, useValue: {} },\n ContextManager,\n ContextInterceptor\n ]\n }).compile()\n\n controller = module.get<FilesOnlyOfficeController>(FilesOnlyOfficeController)\n })\n\n it('should be defined', () => {\n expect(controller).toBeDefined()\n })\n\n describe('onlyOfficeSettings', () => {\n it('should call manager with default mode \"view\" when mode is undefined', async () => {\n const user: any = { id: 1 }\n const space: any = { id: 'space-1' }\n const req: any = { headers: {}, params: {}, query: {} }\n const expected = { config: 'ok', mode: 'view' }\n filesOnlyOfficeManagerMock.getSettings.mockResolvedValue(expected)\n\n const result = await controller.onlyOfficeSettings(user, space, undefined as any, req)\n\n expect(filesOnlyOfficeManagerMock.getSettings).toHaveBeenCalledTimes(1)\n expect(filesOnlyOfficeManagerMock.getSettings).toHaveBeenCalledWith(user, space, 'view', req)\n expect(result).toBe(expected)\n })\n\n it('should pass provided mode to manager', async () => {\n const user: any = { id: 2 }\n const space: any = { id: 'space-2' }\n const req: any = { headers: { 'x-test': '1' } }\n const expected = { config: 'ok', mode: 'edit' }\n filesOnlyOfficeManagerMock.getSettings.mockResolvedValue(expected)\n\n const result = await controller.onlyOfficeSettings(user, space, 'edit', req)\n\n expect(filesOnlyOfficeManagerMock.getSettings).toHaveBeenCalledWith(user, space, 'edit', req)\n expect(result).toBe(expected)\n })\n })\n\n describe('onlyOfficeDocument', () => {\n it('should delegate to filesMethods.headOrGet with req and res', async () => {\n const req: any = { params: { '*': 'path/to/file' } }\n const res: any = { header: jest.fn(), status: jest.fn().mockReturnThis() }\n const stream: any = { readable: true }\n filesMethodsMock.headOrGet.mockResolvedValue(stream)\n\n const result = await controller.onlyOfficeDocument(req, res)\n\n expect(filesMethodsMock.headOrGet).toHaveBeenCalledTimes(1)\n expect(filesMethodsMock.headOrGet).toHaveBeenCalledWith(req, res)\n expect(result).toBe(stream)\n })\n })\n\n describe('onlyOfficeCallBack', () => {\n it('should call manager.callBack with user, space, token and fileId (fid)', async () => {\n const user: any = { id: 3 }\n const space: any = { id: 'space-3' }\n const token = 'jwt-token'\n const fileId = 'file-123'\n const expected = { ok: true }\n filesOnlyOfficeManagerMock.callBack.mockResolvedValue(expected)\n\n const result = await controller.onlyOfficeCallBack(user, space, token, fileId)\n\n expect(filesOnlyOfficeManagerMock.callBack).toHaveBeenCalledTimes(1)\n expect(filesOnlyOfficeManagerMock.callBack).toHaveBeenCalledWith(user, space, token, fileId)\n expect(result).toBe(expected)\n })\n })\n})\n"],"names":["describe","FilesOnlyOfficeController","name","controller","filesOnlyOfficeManagerMock","getSettings","jest","fn","callBack","filesMethodsMock","headOrGet","beforeEach","clearAllMocks","module","Test","createTestingModule","controllers","providers","provide","FilesOnlyOfficeManager","useValue","FilesMethods","SpacesManager","ContextManager","ContextInterceptor","compile","get","it","expect","toBeDefined","user","id","space","req","headers","params","query","expected","config","mode","mockResolvedValue","result","onlyOfficeSettings","undefined","toHaveBeenCalledTimes","toHaveBeenCalledWith","toBe","res","header","status","mockReturnThis","stream","readable","onlyOfficeDocument","token","fileId","ok","onlyOfficeCallBack"],"mappings":"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"}
@@ -13,7 +13,13 @@ const _filesmethodsservice = require("./services/files-methods.service");
13
13
  const _filestasksmanagerservice = require("./services/files-tasks-manager.service");
14
14
  describe(_filestaskscontroller.FilesTasksController.name, ()=>{
15
15
  let controller;
16
+ let filesTasksManager;
16
17
  beforeAll(async ()=>{
18
+ filesTasksManager = {
19
+ getTasks: jest.fn(),
20
+ deleteTasks: jest.fn(),
21
+ downloadArchive: jest.fn()
22
+ };
17
23
  const module = await _testing.Test.createTestingModule({
18
24
  controllers: [
19
25
  _filestaskscontroller.FilesTasksController
@@ -27,14 +33,98 @@ describe(_filestaskscontroller.FilesTasksController.name, ()=>{
27
33
  provide: _filesmethodsservice.FilesMethods,
28
34
  useValue: {}
29
35
  },
30
- _filestasksmanagerservice.FilesTasksManager
36
+ {
37
+ provide: _filestasksmanagerservice.FilesTasksManager,
38
+ useValue: filesTasksManager
39
+ }
31
40
  ]
32
41
  }).compile();
33
42
  controller = module.get(_filestaskscontroller.FilesTasksController);
34
43
  });
44
+ beforeEach(()=>{
45
+ jest.clearAllMocks();
46
+ });
35
47
  it('should be defined', ()=>{
36
48
  expect(controller).toBeDefined();
37
49
  });
50
+ it('getTasks should call FilesTasksManager.getTasks with user.id and taskId and return the value', ()=>{
51
+ const user = {
52
+ id: 'user-1'
53
+ };
54
+ const taskId = 'task-123';
55
+ const expected = [
56
+ {
57
+ id: 'task-123'
58
+ }
59
+ ];
60
+ filesTasksManager.getTasks.mockReturnValueOnce(expected);
61
+ const result = controller.getTasks(user, taskId);
62
+ expect(filesTasksManager.getTasks).toHaveBeenCalledTimes(1);
63
+ expect(filesTasksManager.getTasks).toHaveBeenCalledWith('user-1', 'task-123');
64
+ expect(result).toBe(expected);
65
+ });
66
+ it('getTasks without taskId should pass undefined', ()=>{
67
+ const user = {
68
+ id: 'user-2'
69
+ };
70
+ const expected = [
71
+ {
72
+ id: 'task-a'
73
+ },
74
+ {
75
+ id: 'task-b'
76
+ }
77
+ ];
78
+ filesTasksManager.getTasks.mockReturnValueOnce(expected);
79
+ const result = controller.getTasks(user);
80
+ expect(filesTasksManager.getTasks).toHaveBeenCalledTimes(1);
81
+ expect(filesTasksManager.getTasks).toHaveBeenCalledWith('user-2', undefined);
82
+ expect(result).toBe(expected);
83
+ });
84
+ it('deleteTasks should call FilesTasksManager.deleteTasks with user and taskId and return the value', ()=>{
85
+ const user = {
86
+ id: 'user-3',
87
+ name: 'Alice'
88
+ };
89
+ const taskId = 'task-del-1';
90
+ const expected = {
91
+ deleted: true
92
+ };
93
+ filesTasksManager.deleteTasks.mockReturnValueOnce(expected);
94
+ const result = controller.deleteTasks(user, taskId);
95
+ expect(filesTasksManager.deleteTasks).toHaveBeenCalledTimes(1);
96
+ expect(filesTasksManager.deleteTasks).toHaveBeenCalledWith(user, 'task-del-1');
97
+ expect(result).toBe(expected);
98
+ });
99
+ it('deleteTasks without taskId must pass undefined', ()=>{
100
+ const user = {
101
+ id: 'user-4'
102
+ };
103
+ const expected = {
104
+ deletedAll: true
105
+ };
106
+ filesTasksManager.deleteTasks.mockReturnValueOnce(expected);
107
+ const result = controller.deleteTasks(user);
108
+ expect(filesTasksManager.deleteTasks).toHaveBeenCalledTimes(1);
109
+ expect(filesTasksManager.deleteTasks).toHaveBeenCalledWith(user, undefined);
110
+ expect(result).toBe(expected);
111
+ });
112
+ it('downloadTaskFile should delegate to FilesTasksManager.downloadArchive and return the StreamableFile', async ()=>{
113
+ const user = {
114
+ id: 'user-5'
115
+ };
116
+ const taskId = 'task-dl-42';
117
+ const req = {};
118
+ const res = {};
119
+ const streamable = {
120
+ some: 'stream'
121
+ };
122
+ filesTasksManager.downloadArchive.mockResolvedValueOnce(streamable);
123
+ const result = await controller.downloadTaskFile(user, taskId, req, res);
124
+ expect(filesTasksManager.downloadArchive).toHaveBeenCalledTimes(1);
125
+ expect(filesTasksManager.downloadArchive).toHaveBeenCalledWith(user, 'task-dl-42', req, res);
126
+ expect(result).toBe(streamable);
127
+ });
38
128
  });
39
129
 
40
130
  //# sourceMappingURL=files-tasks.controller.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../backend/src/applications/files/files-tasks.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 { Cache } from '../../infrastructure/cache/services/cache.service'\nimport { FilesTasksController } from './files-tasks.controller'\nimport { FilesMethods } from './services/files-methods.service'\nimport { FilesTasksManager } from './services/files-tasks-manager.service'\n\ndescribe(FilesTasksController.name, () => {\n let controller: FilesTasksController\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n controllers: [FilesTasksController],\n providers: [\n {\n provide: Cache,\n useValue: {}\n },\n { provide: FilesMethods, useValue: {} },\n FilesTasksManager\n ]\n }).compile()\n\n controller = module.get<FilesTasksController>(FilesTasksController)\n })\n\n it('should be defined', () => {\n expect(controller).toBeDefined()\n })\n})\n"],"names":["describe","FilesTasksController","name","controller","beforeAll","module","Test","createTestingModule","controllers","providers","provide","Cache","useValue","FilesMethods","FilesTasksManager","compile","get","it","expect","toBeDefined"],"mappings":"AAAA;;;;CAIC;;;;yBAEmC;8BACd;sCACe;qCACR;0CACK;AAElCA,SAASC,0CAAoB,CAACC,IAAI,EAAE;IAClC,IAAIC;IAEJC,UAAU;QACR,MAAMC,SAAwB,MAAMC,aAAI,CAACC,mBAAmB,CAAC;YAC3DC,aAAa;gBAACP,0CAAoB;aAAC;YACnCQ,WAAW;gBACT;oBACEC,SAASC,mBAAK;oBACdC,UAAU,CAAC;gBACb;gBACA;oBAAEF,SAASG,iCAAY;oBAAED,UAAU,CAAC;gBAAE;gBACtCE,2CAAiB;aAClB;QACH,GAAGC,OAAO;QAEVZ,aAAaE,OAAOW,GAAG,CAAuBf,0CAAoB;IACpE;IAEAgB,GAAG,qBAAqB;QACtBC,OAAOf,YAAYgB,WAAW;IAChC;AACF"}
1
+ {"version":3,"sources":["../../../../backend/src/applications/files/files-tasks.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 { Cache } from '../../infrastructure/cache/services/cache.service'\nimport { FilesTasksController } from './files-tasks.controller'\nimport { FilesMethods } from './services/files-methods.service'\nimport { FilesTasksManager } from './services/files-tasks-manager.service'\n\ndescribe(FilesTasksController.name, () => {\n let controller: FilesTasksController\n let filesTasksManager: { getTasks: jest.Mock; deleteTasks: jest.Mock; downloadArchive: jest.Mock }\n\n beforeAll(async () => {\n filesTasksManager = {\n getTasks: jest.fn(),\n deleteTasks: jest.fn(),\n downloadArchive: jest.fn()\n }\n\n const module: TestingModule = await Test.createTestingModule({\n controllers: [FilesTasksController],\n providers: [\n {\n provide: Cache,\n useValue: {}\n },\n { provide: FilesMethods, useValue: {} },\n { provide: FilesTasksManager, useValue: filesTasksManager }\n ]\n }).compile()\n\n controller = module.get<FilesTasksController>(FilesTasksController)\n })\n\n beforeEach(() => {\n jest.clearAllMocks()\n })\n\n it('should be defined', () => {\n expect(controller).toBeDefined()\n })\n\n it('getTasks should call FilesTasksManager.getTasks with user.id and taskId and return the value', () => {\n const user = { id: 'user-1' } as any\n const taskId = 'task-123'\n const expected = [{ id: 'task-123' }]\n\n filesTasksManager.getTasks.mockReturnValueOnce(expected)\n\n const result = controller.getTasks(user, taskId)\n\n expect(filesTasksManager.getTasks).toHaveBeenCalledTimes(1)\n expect(filesTasksManager.getTasks).toHaveBeenCalledWith('user-1', 'task-123')\n expect(result).toBe(expected)\n })\n\n it('getTasks without taskId should pass undefined', () => {\n const user = { id: 'user-2' } as any\n const expected = [{ id: 'task-a' }, { id: 'task-b' }]\n\n filesTasksManager.getTasks.mockReturnValueOnce(expected)\n\n const result = controller.getTasks(user)\n\n expect(filesTasksManager.getTasks).toHaveBeenCalledTimes(1)\n expect(filesTasksManager.getTasks).toHaveBeenCalledWith('user-2', undefined)\n expect(result).toBe(expected)\n })\n\n it('deleteTasks should call FilesTasksManager.deleteTasks with user and taskId and return the value', () => {\n const user = { id: 'user-3', name: 'Alice' } as any\n const taskId = 'task-del-1'\n const expected = { deleted: true }\n\n filesTasksManager.deleteTasks.mockReturnValueOnce(expected)\n\n const result = controller.deleteTasks(user, taskId)\n\n expect(filesTasksManager.deleteTasks).toHaveBeenCalledTimes(1)\n expect(filesTasksManager.deleteTasks).toHaveBeenCalledWith(user, 'task-del-1')\n expect(result).toBe(expected)\n })\n\n it('deleteTasks without taskId must pass undefined', () => {\n const user = { id: 'user-4' } as any\n const expected = { deletedAll: true }\n\n filesTasksManager.deleteTasks.mockReturnValueOnce(expected)\n\n const result = controller.deleteTasks(user)\n\n expect(filesTasksManager.deleteTasks).toHaveBeenCalledTimes(1)\n expect(filesTasksManager.deleteTasks).toHaveBeenCalledWith(user, undefined)\n expect(result).toBe(expected)\n })\n\n it('downloadTaskFile should delegate to FilesTasksManager.downloadArchive and return the StreamableFile', async () => {\n const user = { id: 'user-5' } as any\n const taskId = 'task-dl-42'\n const req = {} as any\n const res = {} as any\n const streamable = { some: 'stream' } as any\n\n filesTasksManager.downloadArchive.mockResolvedValueOnce(streamable)\n\n const result = await controller.downloadTaskFile(user, taskId, req, res)\n\n expect(filesTasksManager.downloadArchive).toHaveBeenCalledTimes(1)\n expect(filesTasksManager.downloadArchive).toHaveBeenCalledWith(user, 'task-dl-42', req, res)\n expect(result).toBe(streamable)\n })\n})\n"],"names":["describe","FilesTasksController","name","controller","filesTasksManager","beforeAll","getTasks","jest","fn","deleteTasks","downloadArchive","module","Test","createTestingModule","controllers","providers","provide","Cache","useValue","FilesMethods","FilesTasksManager","compile","get","beforeEach","clearAllMocks","it","expect","toBeDefined","user","id","taskId","expected","mockReturnValueOnce","result","toHaveBeenCalledTimes","toHaveBeenCalledWith","toBe","undefined","deleted","deletedAll","req","res","streamable","some","mockResolvedValueOnce","downloadTaskFile"],"mappings":"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"}
@@ -59,6 +59,7 @@ _ts_decorate([
59
59
  let FilesConfig = class FilesConfig {
60
60
  constructor(){
61
61
  this.maxUploadSize = 5368709120; // 5 GB
62
+ this.showHiddenFiles = false;
62
63
  this.onlyoffice = new FilesOnlyOfficeConfig();
63
64
  }
64
65
  };
@@ -86,6 +87,10 @@ _ts_decorate([
86
87
  (0, _classvalidator.IsInt)(),
87
88
  _ts_metadata("design:type", Number)
88
89
  ], FilesConfig.prototype, "maxUploadSize", void 0);
90
+ _ts_decorate([
91
+ (0, _classvalidator.IsBoolean)(),
92
+ _ts_metadata("design:type", Boolean)
93
+ ], FilesConfig.prototype, "showHiddenFiles", void 0);
89
94
  _ts_decorate([
90
95
  (0, _classvalidator.IsNotEmptyObject)(),
91
96
  (0, _classvalidator.ValidateNested)(),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../backend/src/applications/files/files.config.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Type } from 'class-transformer'\nimport { IsBoolean, IsInt, IsNotEmpty, IsNotEmptyObject, IsOptional, IsString, ValidateIf, ValidateNested } from 'class-validator'\n\nexport class FilesOnlyOfficeConfig {\n @IsBoolean()\n enabled = false\n\n @IsOptional()\n @IsString()\n externalServer: string = null\n\n @ValidateIf((o: FilesOnlyOfficeConfig) => o.enabled)\n @IsString()\n @IsNotEmpty()\n secret: string\n\n @IsBoolean()\n verifySSL: boolean = false\n}\n\nexport class FilesConfig {\n @IsNotEmpty()\n @IsString()\n dataPath: string\n\n @IsNotEmpty()\n @IsString()\n usersPath: string\n\n @IsNotEmpty()\n @IsString()\n spacesPath: string\n\n @IsNotEmpty()\n @IsString()\n tmpPath: string\n\n @IsInt()\n maxUploadSize: number = 5368709120 // 5 GB\n\n @IsNotEmptyObject()\n @ValidateNested()\n @Type(() => FilesOnlyOfficeConfig)\n onlyoffice: FilesOnlyOfficeConfig = new FilesOnlyOfficeConfig()\n}\n"],"names":["FilesConfig","FilesOnlyOfficeConfig","enabled","externalServer","verifySSL","o","maxUploadSize","onlyoffice"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAsBYA;eAAAA;;QAjBAC;eAAAA;;;kCAHQ;gCAC4F;;;;;;;;;;AAE1G,IAAA,AAAMA,wBAAN,MAAMA;;aAEXC,UAAU;aAIVC,iBAAyB;aAQzBC,YAAqB;;AACvB;;;;;;;;;;qCAPeC,IAA6BA,EAAEH,OAAO;;;;;;;;;AAS9C,IAAA,AAAMF,cAAN,MAAMA;;aAkBXM,gBAAwB,YAAW,OAAO;aAK1CC,aAAoC,IAAIN;;AAC1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAFcA"}
1
+ {"version":3,"sources":["../../../../backend/src/applications/files/files.config.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Type } from 'class-transformer'\nimport { IsBoolean, IsInt, IsNotEmpty, IsNotEmptyObject, IsOptional, IsString, ValidateIf, ValidateNested } from 'class-validator'\n\nexport class FilesOnlyOfficeConfig {\n @IsBoolean()\n enabled = false\n\n @IsOptional()\n @IsString()\n externalServer: string = null\n\n @ValidateIf((o: FilesOnlyOfficeConfig) => o.enabled)\n @IsString()\n @IsNotEmpty()\n secret: string\n\n @IsBoolean()\n verifySSL: boolean = false\n}\n\nexport class FilesConfig {\n @IsNotEmpty()\n @IsString()\n dataPath: string\n\n @IsNotEmpty()\n @IsString()\n usersPath: string\n\n @IsNotEmpty()\n @IsString()\n spacesPath: string\n\n @IsNotEmpty()\n @IsString()\n tmpPath: string\n\n @IsInt()\n maxUploadSize: number = 5368709120 // 5 GB\n\n @IsBoolean()\n showHiddenFiles: boolean = false\n\n @IsNotEmptyObject()\n @ValidateNested()\n @Type(() => FilesOnlyOfficeConfig)\n onlyoffice: FilesOnlyOfficeConfig = new FilesOnlyOfficeConfig()\n}\n"],"names":["FilesConfig","FilesOnlyOfficeConfig","enabled","externalServer","verifySSL","o","maxUploadSize","showHiddenFiles","onlyoffice"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAsBYA;eAAAA;;QAjBAC;eAAAA;;;kCAHQ;gCAC4F;;;;;;;;;;AAE1G,IAAA,AAAMA,wBAAN,MAAMA;;aAEXC,UAAU;aAIVC,iBAAyB;aAQzBC,YAAqB;;AACvB;;;;;;;;;;qCAPeC,IAA6BA,EAAEH,OAAO;;;;;;;;;AAS9C,IAAA,AAAMF,cAAN,MAAMA;;aAkBXM,gBAAwB,YAAW,OAAO;aAG1CC,kBAA2B;aAK3BC,aAAoC,IAAIP;;AAC1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAFcA"}