@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
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/spaces/services/spaces-browser.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, Injectable, Logger } from '@nestjs/common'\nimport fs from 'node:fs/promises'\nimport path from 'node:path'\nimport { DEFAULT_FILTERS } from '../../files/constants/files'\nimport { FileLock } from '../../files/interfaces/file-lock.interface'\nimport { FileProps } from '../../files/interfaces/file-props.interface'\nimport { FilesLockManager } from '../../files/services/files-lock-manager.service'\nimport { FilesQueries } from '../../files/services/files-queries.service'\nimport { FilesRecents } from '../../files/services/files-recents.service'\nimport { dirName, fileName, getProps } from '../../files/utils/files'\nimport { SharesQueries } from '../../shares/services/shares-queries.service'\nimport { USER_PERMISSION } from '../../users/constants/user'\nimport { UserModel } from '../../users/models/user.model'\nimport { LOCK_SCOPE } from '../../webdav/constants/webdav'\nimport { SpaceFiles } from '../interfaces/space-files.interface'\nimport { SpaceEnv } from '../models/space-env.model'\nimport { realPathFromRootFile, IsRealPathIsDirAndExists } from '../utils/paths'\nimport { SpacesManager } from './spaces-manager.service'\nimport { SpacesQueries } from './spaces-queries.service'\n\n@Injectable()\nexport class SpacesBrowser {\n private readonly logger = new Logger(SpacesBrowser.name)\n\n constructor(\n private readonly spacesManager: SpacesManager,\n private readonly spacesQueries: SpacesQueries,\n private readonly sharesQueries: SharesQueries,\n private readonly filesQueries: FilesQueries,\n private readonly filesLockManager: FilesLockManager,\n private readonly filesRecents: FilesRecents\n ) {}\n\n async browse(\n user: UserModel,\n space: SpaceEnv,\n options: {\n withLocks?: boolean\n withSpacesAndShares?: boolean\n withSyncs?: boolean\n withHasComments?: boolean\n } = {}\n ): Promise<SpaceFiles> {\n // check sync permission\n options.withSyncs = options.withSyncs && user.havePermission(USER_PERMISSION.DESKTOP_APP) && user.havePermission(USER_PERMISSION.DESKTOP_APP_SYNC)\n const spaceFiles: SpaceFiles = { files: [], hasRoots: false, permissions: space.browsePermissions() }\n const [fsFiles, dbFiles, rootFiles] = await Promise.all([\n this.parseFS(space),\n this.parseDB(user.id, space, options),\n this.parseRootFiles(user, space, {\n withShares: options.withSpacesAndShares,\n withHasComments: options.withHasComments,\n withSyncs: options.withSyncs\n })\n ])\n this.updateDBFiles(user, space, dbFiles, fsFiles, options)\n if (space.inSharesList) {\n // the share space includes shares as root files\n spaceFiles.files = [...rootFiles, ...fsFiles]\n spaceFiles.hasRoots = true\n } else {\n await this.mergeSpaceRootFiles(space, rootFiles, fsFiles, spaceFiles)\n }\n if (options.withLocks && !space.inTrashRepository) {\n // locks were removed when files were moved to the trash, no need to parse locks\n await this.enrichWithLocks(space, spaceFiles.files)\n }\n // update recents files\n this.filesRecents.updateRecents(user, space, spaceFiles.files).catch((e: Error) => this.logger.error(`${this.browse.name} - ${e}`))\n return spaceFiles\n }\n\n private async parseRootFiles(\n user: UserModel,\n space: SpaceEnv,\n options: {\n withShares?: boolean\n withHasComments?: boolean\n withSyncs?: boolean\n }\n ): Promise<FileProps[]> {\n if (space.inFilesRepository && space.id && !space.root.alias) {\n // list roots in the space\n return Promise.all((await this.spacesQueries.spaceRootFiles(user.id, space.id, options)).map((f) => this.updateRootFile(f, options)))\n } else if (space.inSharesList) {\n // list shares as roots\n return Promise.all((await this.sharesQueries.shareRootFiles(user, options)).map((f) => this.updateRootFile(f, options)))\n }\n return []\n }\n\n private async parseDB(\n userId: number,\n space: SpaceEnv,\n options: {\n withSpacesAndShares?: boolean\n withSyncs?: boolean\n withHasComments?: boolean\n }\n ): Promise<FileProps[]> {\n if (space.inSharesList) return []\n const dbOptions = {\n withSpaces: options.withSpacesAndShares && space.inPersonalSpace,\n withShares: options.withSpacesAndShares,\n withSyncs: options.withSyncs,\n withHasComments: options.withHasComments,\n ignoreChildShares: !space.inSharesRepository\n }\n return this.filesQueries.browseFiles(userId, space.dbFile, dbOptions)\n }\n\n private async parseFS(space: SpaceEnv): Promise<FileProps[]> {\n if (space.inSharesList) return []\n const fsFiles: FileProps[] = []\n try {\n await IsRealPathIsDirAndExists(space.realPath)\n } catch (e) {\n this.logger.warn(`${this.parseFS.name} - ${space.realPath} : ${e.message}`)\n throw new HttpException(e.message, e.httpCode)\n }\n for await (const f of this.parsePath(space)) {\n fsFiles.push(f)\n }\n return fsFiles\n }\n\n private async *parsePath(space: SpaceEnv): AsyncGenerator<FileProps> {\n try {\n for (const element of await fs.readdir(space.realPath, { withFileTypes: true })) {\n const isDir = element.isDirectory()\n if (!isDir && !element.isFile()) {\n this.logger.log(`${this.parsePath.name} - ignore special file : ${element.name}`)\n continue\n }\n if (DEFAULT_FILTERS.has(element.name)) {\n this.logger.verbose(`${this.parsePath.name} - ignore filtered file : ${element.name}`)\n continue\n }\n const realPath = path.join(space.realPath, element.name)\n const filePath = path.join(space.relativeUrl, element.name)\n try {\n yield await getProps(realPath, filePath, isDir)\n } catch (e) {\n this.logger.warn(`${this.parsePath.name} - unable get stats from ${realPath} : ${e}`)\n }\n }\n } catch (e) {\n this.logger.error(`${this.parsePath.name} - unable to parse ${space.realPath} : ${e}`)\n }\n }\n\n private async updateRootFile(f: FileProps, options: { withShares?: boolean; withHasComments?: boolean; withSyncs?: boolean }): Promise<FileProps> {\n // get realpath\n const realPath = realPathFromRootFile(f)\n f.path = f.root.name\n try {\n const fileProps: FileProps = await getProps(realPath, f.path)\n if (options.withShares) {\n fileProps.shares = f.shares\n }\n if (options.withHasComments) {\n fileProps.hasComments = f.hasComments\n }\n if (options.withSyncs) {\n fileProps.syncs = f.syncs\n }\n if (f.id) {\n // f.id is null for external roots\n // todo: check if a db file referenced under external roots have an id and correctly parsed here\n this.filesQueries.compareAndUpdateFileProps(f, fileProps).catch((e: Error) => this.logger.error(`${this.updateRootFile.name} - ${e}`))\n fileProps.id = f.id\n }\n fileProps.root = {\n id: f.root.id,\n alias: f.root.alias,\n description: f.root.description,\n enabled: typeof f.root.enabled === 'undefined' ? true : f.root.enabled,\n permissions: f.root.permissions,\n owner: f.root.owner\n }\n return fileProps\n } catch (e) {\n this.logger.error(`${this.updateRootFile.name} - ${JSON.stringify(f)} - ${e}`)\n return { ...f, name: fileName(f.path), path: dirName(f.path), ...{ root: { ...f.root, enabled: false } } }\n }\n }\n\n private updateDBFiles(\n user: UserModel,\n space: SpaceEnv,\n dbFiles: FileProps[],\n fsFiles: FileProps[],\n options: {\n withSpacesAndShares?: boolean\n withSyncs?: boolean\n withHasComments?: boolean\n }\n ) {\n for (const dbFile of dbFiles) {\n const fsFile = fsFiles.find((f: FileProps) => dbFile.name === f.name)\n if (fsFile) {\n /* important: inherits from the file id in database */\n fsFile.id = dbFile.id\n if (options.withSpacesAndShares) {\n fsFile.spaces = dbFile.spaces\n fsFile.shares = dbFile.shares\n }\n if (options.withSyncs) {\n fsFile.syncs = dbFile.syncs\n }\n if (options.withHasComments) {\n fsFile.hasComments = dbFile.hasComments\n }\n this.filesQueries.compareAndUpdateFileProps(dbFile, fsFile).catch((e: Error) => this.logger.error(`${this.updateDBFiles.name} - ${e}`))\n } else {\n this.logger.warn(`${this.updateDBFiles.name} - missing ${dbFile.path}/${dbFile.name} (${dbFile.id}) from fs, delete it from db`)\n if (options.withSpacesAndShares) {\n if (dbFile.spaces) {\n for (const space of dbFile.spaces) {\n this.logger.warn(\n `${this.updateDBFiles.name} - ${dbFile.path}/${dbFile.name} (${dbFile.id}) will be removed from space : *${space.alias}* (${space.id})`\n )\n }\n }\n if (dbFile.shares) {\n for (const share of dbFile.shares) {\n this.logger.warn(\n `${this.updateDBFiles.name} - ${dbFile.path}/${dbFile.name} (${dbFile.id}) will be removed from share : *${share.alias}* (${share.id})`\n )\n }\n }\n }\n this.deleteDBFile(user, space, dbFile).catch((e: Error) => this.logger.error(`${this.updateDBFiles.name} - ${e}`))\n }\n }\n }\n\n private async deleteDBFile(user: UserModel, space: SpaceEnv, dbFile: FileProps) {\n const spaceEnv = await this.spacesManager.spaceEnv(user, path.join(space.url, dbFile.name).split('/'))\n this.filesQueries.deleteFiles(spaceEnv.dbFile, dbFile.isDir, true).catch((e: Error) => this.logger.error(`${this.deleteDBFile.name} - ${e}`))\n }\n\n private async mergeSpaceRootFiles(space: SpaceEnv, rootFiles: FileProps[], fsFiles: FileProps[], spaceFiles: SpaceFiles) {\n // merges root files in space files taking care of alias and name (file names must be unique)\n if (!rootFiles.length) {\n spaceFiles.files = fsFiles\n return\n }\n spaceFiles.hasRoots = true\n for (const f of rootFiles) {\n // check root alias (must be unique in the space)\n const newAlias: string = await this.spacesManager.uniqueRootAlias(\n space.id,\n f.root.alias,\n fsFiles.map((f) => f.name),\n true\n )\n if (newAlias) {\n this.logger.log(`${this.mergeSpaceRootFiles.name} - update space root alias (${f.root.id}) : ${f.root.alias} -> ${newAlias}`)\n // update in db\n this.spacesQueries\n .updateRoot({ alias: newAlias }, { id: f.root.id })\n .catch((e: Error) => this.logger.error(`${this.mergeSpaceRootFiles.name} - ${e}`))\n // cleanup cache\n this.spacesQueries\n .clearCachePermissions(space.alias, [f.root.alias, newAlias])\n .catch((e: Error) => this.logger.error(`${this.mergeSpaceRootFiles.name} - ${e}`))\n // assign\n f.root.alias = newAlias\n }\n // check root name (must be unique in the space)\n // f.name is equal to root name\n const newName: string = this.spacesManager.uniqueRootName(\n f.name,\n fsFiles.map((f) => f.name)\n )\n if (newName) {\n this.logger.log(`${this.mergeSpaceRootFiles.name} - update space root name (${f.root.id}) : ${f.name} -> ${newName}`)\n // update in db\n this.spacesQueries\n .updateRoot({ name: newName }, { id: f.root.id })\n .catch((e: Error) => this.logger.error(`${this.mergeSpaceRootFiles.name} - ${e}`))\n // assign\n f.name = newName\n }\n }\n spaceFiles.files = [...fsFiles, ...rootFiles]\n }\n\n private async enrichWithLocks(space: SpaceEnv, files: FileProps[]) {\n if (space.inSharesList) {\n return\n }\n const locks: Record<string, FileLock> = await this.filesLockManager.browseParentChildLocks(space.dbFile, false)\n if (!Object.keys(locks).length) return\n for (const f of files.filter((f) => (f.root && f.root.alias in locks) || (!f.root && f.name in locks))) {\n const lock: FileLock = f.root ? locks[f.root.alias] : locks[f.name]\n f.lock = {\n owner: lock?.davLock?.owner || `${lock.owner.fullName} (${lock.owner.email})`,\n ownerLogin: lock.owner.login,\n isExclusive: lock?.davLock?.lockscope ? lock?.davLock?.lockscope === LOCK_SCOPE.EXCLUSIVE : true\n }\n }\n }\n}\n"],"names":["SpacesBrowser","browse","user","space","options","withSyncs","havePermission","USER_PERMISSION","DESKTOP_APP","DESKTOP_APP_SYNC","spaceFiles","files","hasRoots","permissions","browsePermissions","fsFiles","dbFiles","rootFiles","Promise","all","parseFS","parseDB","id","parseRootFiles","withShares","withSpacesAndShares","withHasComments","updateDBFiles","inSharesList","mergeSpaceRootFiles","withLocks","inTrashRepository","enrichWithLocks","filesRecents","updateRecents","catch","e","logger","error","name","inFilesRepository","root","alias","spacesQueries","spaceRootFiles","map","f","updateRootFile","sharesQueries","shareRootFiles","userId","dbOptions","withSpaces","inPersonalSpace","ignoreChildShares","inSharesRepository","filesQueries","browseFiles","dbFile","IsRealPathIsDirAndExists","realPath","warn","message","HttpException","httpCode","parsePath","push","element","fs","readdir","withFileTypes","isDir","isDirectory","isFile","log","DEFAULT_FILTERS","has","verbose","path","join","filePath","relativeUrl","getProps","realPathFromRootFile","fileProps","shares","hasComments","syncs","compareAndUpdateFileProps","description","enabled","owner","JSON","stringify","fileName","dirName","fsFile","find","spaces","share","deleteDBFile","spaceEnv","spacesManager","url","split","deleteFiles","length","newAlias","uniqueRootAlias","updateRoot","clearCachePermissions","newName","uniqueRootName","locks","filesLockManager","browseParentChildLocks","Object","keys","filter","lock","davLock","fullName","email","ownerLogin","login","isExclusive","lockscope","LOCK_SCOPE","EXCLUSIVE","Logger"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/spaces/services/spaces-browser.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, Injectable, Logger } from '@nestjs/common'\nimport fs from 'node:fs/promises'\nimport path from 'node:path'\nimport { configuration } from '../../../configuration/config.environment'\nimport { FileLock } from '../../files/interfaces/file-lock.interface'\nimport { FileProps } from '../../files/interfaces/file-props.interface'\nimport { FilesLockManager } from '../../files/services/files-lock-manager.service'\nimport { FilesQueries } from '../../files/services/files-queries.service'\nimport { FilesRecents } from '../../files/services/files-recents.service'\nimport { dirName, fileName, getProps } from '../../files/utils/files'\nimport { SharesQueries } from '../../shares/services/shares-queries.service'\nimport { USER_PERMISSION } from '../../users/constants/user'\nimport { UserModel } from '../../users/models/user.model'\nimport { LOCK_SCOPE } from '../../webdav/constants/webdav'\nimport { SpaceFiles } from '../interfaces/space-files.interface'\nimport { SpaceEnv } from '../models/space-env.model'\nimport { realPathFromRootFile, IsRealPathIsDirAndExists } from '../utils/paths'\nimport { SpacesManager } from './spaces-manager.service'\nimport { SpacesQueries } from './spaces-queries.service'\n\n@Injectable()\nexport class SpacesBrowser {\n private readonly logger = new Logger(SpacesBrowser.name)\n\n constructor(\n private readonly spacesManager: SpacesManager,\n private readonly spacesQueries: SpacesQueries,\n private readonly sharesQueries: SharesQueries,\n private readonly filesQueries: FilesQueries,\n private readonly filesLockManager: FilesLockManager,\n private readonly filesRecents: FilesRecents\n ) {}\n\n async browse(\n user: UserModel,\n space: SpaceEnv,\n options: {\n withLocks?: boolean\n withSpacesAndShares?: boolean\n withSyncs?: boolean\n withHasComments?: boolean\n } = {}\n ): Promise<SpaceFiles> {\n // check sync permission\n options.withSyncs = options.withSyncs && user.havePermission(USER_PERMISSION.DESKTOP_APP) && user.havePermission(USER_PERMISSION.DESKTOP_APP_SYNC)\n const spaceFiles: SpaceFiles = { files: [], hasRoots: false, permissions: space.browsePermissions() }\n const [fsFiles, dbFiles, rootFiles] = await Promise.all([\n this.parseFS(space),\n this.parseDB(user.id, space, options),\n this.parseRootFiles(user, space, {\n withShares: options.withSpacesAndShares,\n withHasComments: options.withHasComments,\n withSyncs: options.withSyncs\n })\n ])\n this.updateDBFiles(user, space, dbFiles, fsFiles, options)\n if (space.inSharesList) {\n // the share space includes shares as root files\n spaceFiles.files = [...rootFiles, ...fsFiles]\n spaceFiles.hasRoots = true\n } else {\n await this.mergeSpaceRootFiles(space, rootFiles, fsFiles, spaceFiles)\n }\n if (options.withLocks && !space.inTrashRepository) {\n // locks were removed when files were moved to the trash, no need to parse locks\n await this.enrichWithLocks(space, spaceFiles.files)\n }\n // update recents files\n this.filesRecents.updateRecents(user, space, spaceFiles.files).catch((e: Error) => this.logger.error(`${this.browse.name} - ${e}`))\n return spaceFiles\n }\n\n private async parseRootFiles(\n user: UserModel,\n space: SpaceEnv,\n options: {\n withShares?: boolean\n withHasComments?: boolean\n withSyncs?: boolean\n }\n ): Promise<FileProps[]> {\n if (space.inFilesRepository && space.id && !space.root.alias) {\n // list roots in the space\n return Promise.all((await this.spacesQueries.spaceRootFiles(user.id, space.id, options)).map((f) => this.updateRootFile(f, options)))\n } else if (space.inSharesList) {\n // list shares as roots\n return Promise.all((await this.sharesQueries.shareRootFiles(user, options)).map((f) => this.updateRootFile(f, options)))\n }\n return []\n }\n\n private async parseDB(\n userId: number,\n space: SpaceEnv,\n options: {\n withSpacesAndShares?: boolean\n withSyncs?: boolean\n withHasComments?: boolean\n }\n ): Promise<FileProps[]> {\n if (space.inSharesList) return []\n const dbOptions = {\n withSpaces: options.withSpacesAndShares && space.inPersonalSpace,\n withShares: options.withSpacesAndShares,\n withSyncs: options.withSyncs,\n withHasComments: options.withHasComments,\n ignoreChildShares: !space.inSharesRepository\n }\n return this.filesQueries.browseFiles(userId, space.dbFile, dbOptions)\n }\n\n private async parseFS(space: SpaceEnv): Promise<FileProps[]> {\n if (space.inSharesList) return []\n const fsFiles: FileProps[] = []\n try {\n await IsRealPathIsDirAndExists(space.realPath)\n } catch (e) {\n this.logger.warn(`${this.parseFS.name} - ${space.realPath} : ${e.message}`)\n throw new HttpException(e.message, e.httpCode)\n }\n for await (const f of this.parsePath(space)) {\n fsFiles.push(f)\n }\n return fsFiles\n }\n\n private async *parsePath(space: SpaceEnv): AsyncGenerator<FileProps> {\n try {\n for (const element of await fs.readdir(space.realPath, { withFileTypes: true })) {\n const isDir = element.isDirectory()\n if (!isDir && !element.isFile()) {\n this.logger.log(`${this.parsePath.name} - ignore special file : ${element.name}`)\n continue\n }\n if (!configuration.applications.files.showHiddenFiles && element.name[0] === '.') {\n this.logger.verbose(`${this.parsePath.name} - ignore filtered file : ${element.name}`)\n continue\n }\n const realPath = path.join(space.realPath, element.name)\n const filePath = path.join(space.relativeUrl, element.name)\n try {\n yield await getProps(realPath, filePath, isDir)\n } catch (e) {\n this.logger.warn(`${this.parsePath.name} - unable get stats from ${realPath} : ${e}`)\n }\n }\n } catch (e) {\n this.logger.error(`${this.parsePath.name} - unable to parse ${space.realPath} : ${e}`)\n }\n }\n\n private async updateRootFile(f: FileProps, options: { withShares?: boolean; withHasComments?: boolean; withSyncs?: boolean }): Promise<FileProps> {\n // get realpath\n const realPath = realPathFromRootFile(f)\n f.path = f.root.name\n try {\n const fileProps: FileProps = await getProps(realPath, f.path)\n if (options.withShares) {\n fileProps.shares = f.shares\n }\n if (options.withHasComments) {\n fileProps.hasComments = f.hasComments\n }\n if (options.withSyncs) {\n fileProps.syncs = f.syncs\n }\n if (f.id) {\n // f.id is null for external roots\n // todo: check if a db file referenced under external roots have an id and correctly parsed here\n this.filesQueries.compareAndUpdateFileProps(f, fileProps).catch((e: Error) => this.logger.error(`${this.updateRootFile.name} - ${e}`))\n fileProps.id = f.id\n }\n fileProps.root = {\n id: f.root.id,\n alias: f.root.alias,\n description: f.root.description,\n enabled: typeof f.root.enabled === 'undefined' ? true : f.root.enabled,\n permissions: f.root.permissions,\n owner: f.root.owner\n }\n return fileProps\n } catch (e) {\n this.logger.error(`${this.updateRootFile.name} - ${JSON.stringify(f)} - ${e}`)\n return { ...f, name: fileName(f.path), path: dirName(f.path), ...{ root: { ...f.root, enabled: false } } }\n }\n }\n\n private updateDBFiles(\n user: UserModel,\n space: SpaceEnv,\n dbFiles: FileProps[],\n fsFiles: FileProps[],\n options: {\n withSpacesAndShares?: boolean\n withSyncs?: boolean\n withHasComments?: boolean\n }\n ) {\n for (const dbFile of dbFiles) {\n const fsFile = fsFiles.find((f: FileProps) => dbFile.name === f.name)\n if (fsFile) {\n /* important: inherits from the file id in database */\n fsFile.id = dbFile.id\n if (options.withSpacesAndShares) {\n fsFile.spaces = dbFile.spaces\n fsFile.shares = dbFile.shares\n }\n if (options.withSyncs) {\n fsFile.syncs = dbFile.syncs\n }\n if (options.withHasComments) {\n fsFile.hasComments = dbFile.hasComments\n }\n this.filesQueries.compareAndUpdateFileProps(dbFile, fsFile).catch((e: Error) => this.logger.error(`${this.updateDBFiles.name} - ${e}`))\n } else {\n this.logger.warn(`${this.updateDBFiles.name} - missing ${dbFile.path}/${dbFile.name} (${dbFile.id}) from fs, delete it from db`)\n if (options.withSpacesAndShares) {\n if (dbFile.spaces) {\n for (const space of dbFile.spaces) {\n this.logger.warn(\n `${this.updateDBFiles.name} - ${dbFile.path}/${dbFile.name} (${dbFile.id}) will be removed from space : *${space.alias}* (${space.id})`\n )\n }\n }\n if (dbFile.shares) {\n for (const share of dbFile.shares) {\n this.logger.warn(\n `${this.updateDBFiles.name} - ${dbFile.path}/${dbFile.name} (${dbFile.id}) will be removed from share : *${share.alias}* (${share.id})`\n )\n }\n }\n }\n this.deleteDBFile(user, space, dbFile).catch((e: Error) => this.logger.error(`${this.updateDBFiles.name} - ${e}`))\n }\n }\n }\n\n private async deleteDBFile(user: UserModel, space: SpaceEnv, dbFile: FileProps) {\n const spaceEnv = await this.spacesManager.spaceEnv(user, path.join(space.url, dbFile.name).split('/'))\n this.filesQueries.deleteFiles(spaceEnv.dbFile, dbFile.isDir, true).catch((e: Error) => this.logger.error(`${this.deleteDBFile.name} - ${e}`))\n }\n\n private async mergeSpaceRootFiles(space: SpaceEnv, rootFiles: FileProps[], fsFiles: FileProps[], spaceFiles: SpaceFiles) {\n // merges root files in space files taking care of alias and name (file names must be unique)\n if (!rootFiles.length) {\n spaceFiles.files = fsFiles\n return\n }\n spaceFiles.hasRoots = true\n for (const f of rootFiles) {\n // check root alias (must be unique in the space)\n const newAlias: string = await this.spacesManager.uniqueRootAlias(\n space.id,\n f.root.alias,\n fsFiles.map((f) => f.name),\n true\n )\n if (newAlias) {\n this.logger.log(`${this.mergeSpaceRootFiles.name} - update space root alias (${f.root.id}) : ${f.root.alias} -> ${newAlias}`)\n // update in db\n this.spacesQueries\n .updateRoot({ alias: newAlias }, { id: f.root.id })\n .catch((e: Error) => this.logger.error(`${this.mergeSpaceRootFiles.name} - ${e}`))\n // cleanup cache\n this.spacesQueries\n .clearCachePermissions(space.alias, [f.root.alias, newAlias])\n .catch((e: Error) => this.logger.error(`${this.mergeSpaceRootFiles.name} - ${e}`))\n // assign\n f.root.alias = newAlias\n }\n // check root name (must be unique in the space)\n // f.name is equal to root name\n const newName: string = this.spacesManager.uniqueRootName(\n f.name,\n fsFiles.map((f) => f.name)\n )\n if (newName) {\n this.logger.log(`${this.mergeSpaceRootFiles.name} - update space root name (${f.root.id}) : ${f.name} -> ${newName}`)\n // update in db\n this.spacesQueries\n .updateRoot({ name: newName }, { id: f.root.id })\n .catch((e: Error) => this.logger.error(`${this.mergeSpaceRootFiles.name} - ${e}`))\n // assign\n f.name = newName\n }\n }\n spaceFiles.files = [...fsFiles, ...rootFiles]\n }\n\n private async enrichWithLocks(space: SpaceEnv, files: FileProps[]) {\n if (space.inSharesList) {\n return\n }\n const locks: Record<string, FileLock> = await this.filesLockManager.browseParentChildLocks(space.dbFile, false)\n if (!Object.keys(locks).length) return\n for (const f of files.filter((f) => (f.root && f.root.alias in locks) || (!f.root && f.name in locks))) {\n const lock: FileLock = f.root ? locks[f.root.alias] : locks[f.name]\n f.lock = {\n owner: lock?.davLock?.owner || `${lock.owner.fullName} (${lock.owner.email})`,\n ownerLogin: lock.owner.login,\n isExclusive: lock?.davLock?.lockscope ? lock?.davLock?.lockscope === LOCK_SCOPE.EXCLUSIVE : true\n }\n }\n }\n}\n"],"names":["SpacesBrowser","browse","user","space","options","withSyncs","havePermission","USER_PERMISSION","DESKTOP_APP","DESKTOP_APP_SYNC","spaceFiles","files","hasRoots","permissions","browsePermissions","fsFiles","dbFiles","rootFiles","Promise","all","parseFS","parseDB","id","parseRootFiles","withShares","withSpacesAndShares","withHasComments","updateDBFiles","inSharesList","mergeSpaceRootFiles","withLocks","inTrashRepository","enrichWithLocks","filesRecents","updateRecents","catch","e","logger","error","name","inFilesRepository","root","alias","spacesQueries","spaceRootFiles","map","f","updateRootFile","sharesQueries","shareRootFiles","userId","dbOptions","withSpaces","inPersonalSpace","ignoreChildShares","inSharesRepository","filesQueries","browseFiles","dbFile","IsRealPathIsDirAndExists","realPath","warn","message","HttpException","httpCode","parsePath","push","element","fs","readdir","withFileTypes","isDir","isDirectory","isFile","log","configuration","applications","showHiddenFiles","verbose","path","join","filePath","relativeUrl","getProps","realPathFromRootFile","fileProps","shares","hasComments","syncs","compareAndUpdateFileProps","description","enabled","owner","JSON","stringify","fileName","dirName","fsFile","find","spaces","share","deleteDBFile","spaceEnv","spacesManager","url","split","deleteFiles","length","newAlias","uniqueRootAlias","updateRoot","clearCachePermissions","newName","uniqueRootName","locks","filesLockManager","browseParentChildLocks","Object","keys","filter","lock","davLock","fullName","email","ownerLogin","login","isExclusive","lockscope","LOCK_SCOPE","EXCLUSIVE","Logger"],"mappings":"AAAA;;;;CAIC;;;;+BAuBYA;;;eAAAA;;;wBArBqC;iEACnC;iEACE;mCACa;yCAGG;qCACJ;qCACA;uBACe;sCACd;sBACE;wBAEL;uBAGoC;sCACjC;sCACA;;;;;;;;;;;;;;;AAGvB,IAAA,AAAMA,gBAAN,MAAMA;IAYX,MAAMC,OACJC,IAAe,EACfC,KAAe,EACfC,UAKI,CAAC,CAAC,EACe;QACrB,wBAAwB;QACxBA,QAAQC,SAAS,GAAGD,QAAQC,SAAS,IAAIH,KAAKI,cAAc,CAACC,qBAAe,CAACC,WAAW,KAAKN,KAAKI,cAAc,CAACC,qBAAe,CAACE,gBAAgB;QACjJ,MAAMC,aAAyB;YAAEC,OAAO,EAAE;YAAEC,UAAU;YAAOC,aAAaV,MAAMW,iBAAiB;QAAG;QACpG,MAAM,CAACC,SAASC,SAASC,UAAU,GAAG,MAAMC,QAAQC,GAAG,CAAC;YACtD,IAAI,CAACC,OAAO,CAACjB;YACb,IAAI,CAACkB,OAAO,CAACnB,KAAKoB,EAAE,EAAEnB,OAAOC;YAC7B,IAAI,CAACmB,cAAc,CAACrB,MAAMC,OAAO;gBAC/BqB,YAAYpB,QAAQqB,mBAAmB;gBACvCC,iBAAiBtB,QAAQsB,eAAe;gBACxCrB,WAAWD,QAAQC,SAAS;YAC9B;SACD;QACD,IAAI,CAACsB,aAAa,CAACzB,MAAMC,OAAOa,SAASD,SAASX;QAClD,IAAID,MAAMyB,YAAY,EAAE;YACtB,gDAAgD;YAChDlB,WAAWC,KAAK,GAAG;mBAAIM;mBAAcF;aAAQ;YAC7CL,WAAWE,QAAQ,GAAG;QACxB,OAAO;YACL,MAAM,IAAI,CAACiB,mBAAmB,CAAC1B,OAAOc,WAAWF,SAASL;QAC5D;QACA,IAAIN,QAAQ0B,SAAS,IAAI,CAAC3B,MAAM4B,iBAAiB,EAAE;YACjD,gFAAgF;YAChF,MAAM,IAAI,CAACC,eAAe,CAAC7B,OAAOO,WAAWC,KAAK;QACpD;QACA,uBAAuB;QACvB,IAAI,CAACsB,YAAY,CAACC,aAAa,CAAChC,MAAMC,OAAOO,WAAWC,KAAK,EAAEwB,KAAK,CAAC,CAACC,IAAa,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAACrC,MAAM,CAACsC,IAAI,CAAC,GAAG,EAAEH,GAAG;QACjI,OAAO1B;IACT;IAEA,MAAca,eACZrB,IAAe,EACfC,KAAe,EACfC,OAIC,EACqB;QACtB,IAAID,MAAMqC,iBAAiB,IAAIrC,MAAMmB,EAAE,IAAI,CAACnB,MAAMsC,IAAI,CAACC,KAAK,EAAE;YAC5D,0BAA0B;YAC1B,OAAOxB,QAAQC,GAAG,CAAC,AAAC,CAAA,MAAM,IAAI,CAACwB,aAAa,CAACC,cAAc,CAAC1C,KAAKoB,EAAE,EAAEnB,MAAMmB,EAAE,EAAElB,QAAO,EAAGyC,GAAG,CAAC,CAACC,IAAM,IAAI,CAACC,cAAc,CAACD,GAAG1C;QAC7H,OAAO,IAAID,MAAMyB,YAAY,EAAE;YAC7B,uBAAuB;YACvB,OAAOV,QAAQC,GAAG,CAAC,AAAC,CAAA,MAAM,IAAI,CAAC6B,aAAa,CAACC,cAAc,CAAC/C,MAAME,QAAO,EAAGyC,GAAG,CAAC,CAACC,IAAM,IAAI,CAACC,cAAc,CAACD,GAAG1C;QAChH;QACA,OAAO,EAAE;IACX;IAEA,MAAciB,QACZ6B,MAAc,EACd/C,KAAe,EACfC,OAIC,EACqB;QACtB,IAAID,MAAMyB,YAAY,EAAE,OAAO,EAAE;QACjC,MAAMuB,YAAY;YAChBC,YAAYhD,QAAQqB,mBAAmB,IAAItB,MAAMkD,eAAe;YAChE7B,YAAYpB,QAAQqB,mBAAmB;YACvCpB,WAAWD,QAAQC,SAAS;YAC5BqB,iBAAiBtB,QAAQsB,eAAe;YACxC4B,mBAAmB,CAACnD,MAAMoD,kBAAkB;QAC9C;QACA,OAAO,IAAI,CAACC,YAAY,CAACC,WAAW,CAACP,QAAQ/C,MAAMuD,MAAM,EAAEP;IAC7D;IAEA,MAAc/B,QAAQjB,KAAe,EAAwB;QAC3D,IAAIA,MAAMyB,YAAY,EAAE,OAAO,EAAE;QACjC,MAAMb,UAAuB,EAAE;QAC/B,IAAI;YACF,MAAM4C,IAAAA,+BAAwB,EAACxD,MAAMyD,QAAQ;QAC/C,EAAE,OAAOxB,GAAG;YACV,IAAI,CAACC,MAAM,CAACwB,IAAI,CAAC,GAAG,IAAI,CAACzC,OAAO,CAACmB,IAAI,CAAC,GAAG,EAAEpC,MAAMyD,QAAQ,CAAC,GAAG,EAAExB,EAAE0B,OAAO,EAAE;YAC1E,MAAM,IAAIC,qBAAa,CAAC3B,EAAE0B,OAAO,EAAE1B,EAAE4B,QAAQ;QAC/C;QACA,WAAW,MAAMlB,KAAK,IAAI,CAACmB,SAAS,CAAC9D,OAAQ;YAC3CY,QAAQmD,IAAI,CAACpB;QACf;QACA,OAAO/B;IACT;IAEA,OAAekD,UAAU9D,KAAe,EAA6B;QACnE,IAAI;YACF,KAAK,MAAMgE,WAAW,CAAA,MAAMC,iBAAE,CAACC,OAAO,CAAClE,MAAMyD,QAAQ,EAAE;gBAAEU,eAAe;YAAK,EAAC,EAAG;gBAC/E,MAAMC,QAAQJ,QAAQK,WAAW;gBACjC,IAAI,CAACD,SAAS,CAACJ,QAAQM,MAAM,IAAI;oBAC/B,IAAI,CAACpC,MAAM,CAACqC,GAAG,CAAC,GAAG,IAAI,CAACT,SAAS,CAAC1B,IAAI,CAAC,yBAAyB,EAAE4B,QAAQ5B,IAAI,EAAE;oBAChF;gBACF;gBACA,IAAI,CAACoC,gCAAa,CAACC,YAAY,CAACjE,KAAK,CAACkE,eAAe,IAAIV,QAAQ5B,IAAI,CAAC,EAAE,KAAK,KAAK;oBAChF,IAAI,CAACF,MAAM,CAACyC,OAAO,CAAC,GAAG,IAAI,CAACb,SAAS,CAAC1B,IAAI,CAAC,0BAA0B,EAAE4B,QAAQ5B,IAAI,EAAE;oBACrF;gBACF;gBACA,MAAMqB,WAAWmB,iBAAI,CAACC,IAAI,CAAC7E,MAAMyD,QAAQ,EAAEO,QAAQ5B,IAAI;gBACvD,MAAM0C,WAAWF,iBAAI,CAACC,IAAI,CAAC7E,MAAM+E,WAAW,EAAEf,QAAQ5B,IAAI;gBAC1D,IAAI;oBACF,MAAM,MAAM4C,IAAAA,eAAQ,EAACvB,UAAUqB,UAAUV;gBAC3C,EAAE,OAAOnC,GAAG;oBACV,IAAI,CAACC,MAAM,CAACwB,IAAI,CAAC,GAAG,IAAI,CAACI,SAAS,CAAC1B,IAAI,CAAC,yBAAyB,EAAEqB,SAAS,GAAG,EAAExB,GAAG;gBACtF;YACF;QACF,EAAE,OAAOA,GAAG;YACV,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAAC2B,SAAS,CAAC1B,IAAI,CAAC,mBAAmB,EAAEpC,MAAMyD,QAAQ,CAAC,GAAG,EAAExB,GAAG;QACvF;IACF;IAEA,MAAcW,eAAeD,CAAY,EAAE1C,OAAiF,EAAsB;QAChJ,eAAe;QACf,MAAMwD,WAAWwB,IAAAA,2BAAoB,EAACtC;QACtCA,EAAEiC,IAAI,GAAGjC,EAAEL,IAAI,CAACF,IAAI;QACpB,IAAI;YACF,MAAM8C,YAAuB,MAAMF,IAAAA,eAAQ,EAACvB,UAAUd,EAAEiC,IAAI;YAC5D,IAAI3E,QAAQoB,UAAU,EAAE;gBACtB6D,UAAUC,MAAM,GAAGxC,EAAEwC,MAAM;YAC7B;YACA,IAAIlF,QAAQsB,eAAe,EAAE;gBAC3B2D,UAAUE,WAAW,GAAGzC,EAAEyC,WAAW;YACvC;YACA,IAAInF,QAAQC,SAAS,EAAE;gBACrBgF,UAAUG,KAAK,GAAG1C,EAAE0C,KAAK;YAC3B;YACA,IAAI1C,EAAExB,EAAE,EAAE;gBACR,kCAAkC;gBAClC,gGAAgG;gBAChG,IAAI,CAACkC,YAAY,CAACiC,yBAAyB,CAAC3C,GAAGuC,WAAWlD,KAAK,CAAC,CAACC,IAAa,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAACS,cAAc,CAACR,IAAI,CAAC,GAAG,EAAEH,GAAG;gBACpIiD,UAAU/D,EAAE,GAAGwB,EAAExB,EAAE;YACrB;YACA+D,UAAU5C,IAAI,GAAG;gBACfnB,IAAIwB,EAAEL,IAAI,CAACnB,EAAE;gBACboB,OAAOI,EAAEL,IAAI,CAACC,KAAK;gBACnBgD,aAAa5C,EAAEL,IAAI,CAACiD,WAAW;gBAC/BC,SAAS,OAAO7C,EAAEL,IAAI,CAACkD,OAAO,KAAK,cAAc,OAAO7C,EAAEL,IAAI,CAACkD,OAAO;gBACtE9E,aAAaiC,EAAEL,IAAI,CAAC5B,WAAW;gBAC/B+E,OAAO9C,EAAEL,IAAI,CAACmD,KAAK;YACrB;YACA,OAAOP;QACT,EAAE,OAAOjD,GAAG;YACV,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAACS,cAAc,CAACR,IAAI,CAAC,GAAG,EAAEsD,KAAKC,SAAS,CAAChD,GAAG,GAAG,EAAEV,GAAG;YAC7E,OAAO;gBAAE,GAAGU,CAAC;gBAAEP,MAAMwD,IAAAA,eAAQ,EAACjD,EAAEiC,IAAI;gBAAGA,MAAMiB,IAAAA,cAAO,EAAClD,EAAEiC,IAAI;gBAAG,GAAG;oBAAEtC,MAAM;wBAAE,GAAGK,EAAEL,IAAI;wBAAEkD,SAAS;oBAAM;gBAAE,CAAC;YAAC;QAC3G;IACF;IAEQhE,cACNzB,IAAe,EACfC,KAAe,EACfa,OAAoB,EACpBD,OAAoB,EACpBX,OAIC,EACD;QACA,KAAK,MAAMsD,UAAU1C,QAAS;YAC5B,MAAMiF,SAASlF,QAAQmF,IAAI,CAAC,CAACpD,IAAiBY,OAAOnB,IAAI,KAAKO,EAAEP,IAAI;YACpE,IAAI0D,QAAQ;gBACV,oDAAoD,GACpDA,OAAO3E,EAAE,GAAGoC,OAAOpC,EAAE;gBACrB,IAAIlB,QAAQqB,mBAAmB,EAAE;oBAC/BwE,OAAOE,MAAM,GAAGzC,OAAOyC,MAAM;oBAC7BF,OAAOX,MAAM,GAAG5B,OAAO4B,MAAM;gBAC/B;gBACA,IAAIlF,QAAQC,SAAS,EAAE;oBACrB4F,OAAOT,KAAK,GAAG9B,OAAO8B,KAAK;gBAC7B;gBACA,IAAIpF,QAAQsB,eAAe,EAAE;oBAC3BuE,OAAOV,WAAW,GAAG7B,OAAO6B,WAAW;gBACzC;gBACA,IAAI,CAAC/B,YAAY,CAACiC,yBAAyB,CAAC/B,QAAQuC,QAAQ9D,KAAK,CAAC,CAACC,IAAa,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAACX,aAAa,CAACY,IAAI,CAAC,GAAG,EAAEH,GAAG;YACvI,OAAO;gBACL,IAAI,CAACC,MAAM,CAACwB,IAAI,CAAC,GAAG,IAAI,CAAClC,aAAa,CAACY,IAAI,CAAC,WAAW,EAAEmB,OAAOqB,IAAI,CAAC,CAAC,EAAErB,OAAOnB,IAAI,CAAC,EAAE,EAAEmB,OAAOpC,EAAE,CAAC,4BAA4B,CAAC;gBAC/H,IAAIlB,QAAQqB,mBAAmB,EAAE;oBAC/B,IAAIiC,OAAOyC,MAAM,EAAE;wBACjB,KAAK,MAAMhG,SAASuD,OAAOyC,MAAM,CAAE;4BACjC,IAAI,CAAC9D,MAAM,CAACwB,IAAI,CACd,GAAG,IAAI,CAAClC,aAAa,CAACY,IAAI,CAAC,GAAG,EAAEmB,OAAOqB,IAAI,CAAC,CAAC,EAAErB,OAAOnB,IAAI,CAAC,EAAE,EAAEmB,OAAOpC,EAAE,CAAC,gCAAgC,EAAEnB,MAAMuC,KAAK,CAAC,GAAG,EAAEvC,MAAMmB,EAAE,CAAC,CAAC,CAAC;wBAE3I;oBACF;oBACA,IAAIoC,OAAO4B,MAAM,EAAE;wBACjB,KAAK,MAAMc,SAAS1C,OAAO4B,MAAM,CAAE;4BACjC,IAAI,CAACjD,MAAM,CAACwB,IAAI,CACd,GAAG,IAAI,CAAClC,aAAa,CAACY,IAAI,CAAC,GAAG,EAAEmB,OAAOqB,IAAI,CAAC,CAAC,EAAErB,OAAOnB,IAAI,CAAC,EAAE,EAAEmB,OAAOpC,EAAE,CAAC,gCAAgC,EAAE8E,MAAM1D,KAAK,CAAC,GAAG,EAAE0D,MAAM9E,EAAE,CAAC,CAAC,CAAC;wBAE3I;oBACF;gBACF;gBACA,IAAI,CAAC+E,YAAY,CAACnG,MAAMC,OAAOuD,QAAQvB,KAAK,CAAC,CAACC,IAAa,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAACX,aAAa,CAACY,IAAI,CAAC,GAAG,EAAEH,GAAG;YAClH;QACF;IACF;IAEA,MAAciE,aAAanG,IAAe,EAAEC,KAAe,EAAEuD,MAAiB,EAAE;QAC9E,MAAM4C,WAAW,MAAM,IAAI,CAACC,aAAa,CAACD,QAAQ,CAACpG,MAAM6E,iBAAI,CAACC,IAAI,CAAC7E,MAAMqG,GAAG,EAAE9C,OAAOnB,IAAI,EAAEkE,KAAK,CAAC;QACjG,IAAI,CAACjD,YAAY,CAACkD,WAAW,CAACJ,SAAS5C,MAAM,EAAEA,OAAOa,KAAK,EAAE,MAAMpC,KAAK,CAAC,CAACC,IAAa,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAAC+D,YAAY,CAAC9D,IAAI,CAAC,GAAG,EAAEH,GAAG;IAC7I;IAEA,MAAcP,oBAAoB1B,KAAe,EAAEc,SAAsB,EAAEF,OAAoB,EAAEL,UAAsB,EAAE;QACvH,6FAA6F;QAC7F,IAAI,CAACO,UAAU0F,MAAM,EAAE;YACrBjG,WAAWC,KAAK,GAAGI;YACnB;QACF;QACAL,WAAWE,QAAQ,GAAG;QACtB,KAAK,MAAMkC,KAAK7B,UAAW;YACzB,iDAAiD;YACjD,MAAM2F,WAAmB,MAAM,IAAI,CAACL,aAAa,CAACM,eAAe,CAC/D1G,MAAMmB,EAAE,EACRwB,EAAEL,IAAI,CAACC,KAAK,EACZ3B,QAAQ8B,GAAG,CAAC,CAACC,IAAMA,EAAEP,IAAI,GACzB;YAEF,IAAIqE,UAAU;gBACZ,IAAI,CAACvE,MAAM,CAACqC,GAAG,CAAC,GAAG,IAAI,CAAC7C,mBAAmB,CAACU,IAAI,CAAC,4BAA4B,EAAEO,EAAEL,IAAI,CAACnB,EAAE,CAAC,IAAI,EAAEwB,EAAEL,IAAI,CAACC,KAAK,CAAC,IAAI,EAAEkE,UAAU;gBAC5H,eAAe;gBACf,IAAI,CAACjE,aAAa,CACfmE,UAAU,CAAC;oBAAEpE,OAAOkE;gBAAS,GAAG;oBAAEtF,IAAIwB,EAAEL,IAAI,CAACnB,EAAE;gBAAC,GAChDa,KAAK,CAAC,CAACC,IAAa,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAACT,mBAAmB,CAACU,IAAI,CAAC,GAAG,EAAEH,GAAG;gBAClF,gBAAgB;gBAChB,IAAI,CAACO,aAAa,CACfoE,qBAAqB,CAAC5G,MAAMuC,KAAK,EAAE;oBAACI,EAAEL,IAAI,CAACC,KAAK;oBAAEkE;iBAAS,EAC3DzE,KAAK,CAAC,CAACC,IAAa,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAACT,mBAAmB,CAACU,IAAI,CAAC,GAAG,EAAEH,GAAG;gBAClF,SAAS;gBACTU,EAAEL,IAAI,CAACC,KAAK,GAAGkE;YACjB;YACA,gDAAgD;YAChD,+BAA+B;YAC/B,MAAMI,UAAkB,IAAI,CAACT,aAAa,CAACU,cAAc,CACvDnE,EAAEP,IAAI,EACNxB,QAAQ8B,GAAG,CAAC,CAACC,IAAMA,EAAEP,IAAI;YAE3B,IAAIyE,SAAS;gBACX,IAAI,CAAC3E,MAAM,CAACqC,GAAG,CAAC,GAAG,IAAI,CAAC7C,mBAAmB,CAACU,IAAI,CAAC,2BAA2B,EAAEO,EAAEL,IAAI,CAACnB,EAAE,CAAC,IAAI,EAAEwB,EAAEP,IAAI,CAAC,IAAI,EAAEyE,SAAS;gBACpH,eAAe;gBACf,IAAI,CAACrE,aAAa,CACfmE,UAAU,CAAC;oBAAEvE,MAAMyE;gBAAQ,GAAG;oBAAE1F,IAAIwB,EAAEL,IAAI,CAACnB,EAAE;gBAAC,GAC9Ca,KAAK,CAAC,CAACC,IAAa,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAACT,mBAAmB,CAACU,IAAI,CAAC,GAAG,EAAEH,GAAG;gBAClF,SAAS;gBACTU,EAAEP,IAAI,GAAGyE;YACX;QACF;QACAtG,WAAWC,KAAK,GAAG;eAAII;eAAYE;SAAU;IAC/C;IAEA,MAAce,gBAAgB7B,KAAe,EAAEQ,KAAkB,EAAE;QACjE,IAAIR,MAAMyB,YAAY,EAAE;YACtB;QACF;QACA,MAAMsF,QAAkC,MAAM,IAAI,CAACC,gBAAgB,CAACC,sBAAsB,CAACjH,MAAMuD,MAAM,EAAE;QACzG,IAAI,CAAC2D,OAAOC,IAAI,CAACJ,OAAOP,MAAM,EAAE;QAChC,KAAK,MAAM7D,KAAKnC,MAAM4G,MAAM,CAAC,CAACzE,IAAM,AAACA,EAAEL,IAAI,IAAIK,EAAEL,IAAI,CAACC,KAAK,IAAIwE,SAAW,CAACpE,EAAEL,IAAI,IAAIK,EAAEP,IAAI,IAAI2E,OAAS;YACtG,MAAMM,OAAiB1E,EAAEL,IAAI,GAAGyE,KAAK,CAACpE,EAAEL,IAAI,CAACC,KAAK,CAAC,GAAGwE,KAAK,CAACpE,EAAEP,IAAI,CAAC;YACnEO,EAAE0E,IAAI,GAAG;gBACP5B,OAAO4B,MAAMC,SAAS7B,SAAS,GAAG4B,KAAK5B,KAAK,CAAC8B,QAAQ,CAAC,EAAE,EAAEF,KAAK5B,KAAK,CAAC+B,KAAK,CAAC,CAAC,CAAC;gBAC7EC,YAAYJ,KAAK5B,KAAK,CAACiC,KAAK;gBAC5BC,aAAaN,MAAMC,SAASM,YAAYP,MAAMC,SAASM,cAAcC,kBAAU,CAACC,SAAS,GAAG;YAC9F;QACF;IACF;IAvRA,YACE,AAAiB1B,aAA4B,EAC7C,AAAiB5D,aAA4B,EAC7C,AAAiBK,aAA4B,EAC7C,AAAiBQ,YAA0B,EAC3C,AAAiB2D,gBAAkC,EACnD,AAAiBlF,YAA0B,CAC3C;aANiBsE,gBAAAA;aACA5D,gBAAAA;aACAK,gBAAAA;aACAQ,eAAAA;aACA2D,mBAAAA;aACAlF,eAAAA;aARFI,SAAS,IAAI6F,cAAM,CAAClI,cAAcuC,IAAI;IASpD;AAiRL"}
@@ -19,11 +19,11 @@ const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
19
19
  const _constants = require("../../../common/constants");
20
20
  const _functions = require("../../../common/functions");
21
21
  const _shared = require("../../../common/shared");
22
+ const _configenvironment = require("../../../configuration/config.environment");
22
23
  const _cacheservice = require("../../../infrastructure/cache/services/cache.service");
23
24
  const _contextmanagerservice = require("../../../infrastructure/context/services/context-manager.service");
24
- const _files = require("../../files/constants/files");
25
25
  const _fileerror = require("../../files/models/file-error");
26
- const _files1 = require("../../files/utils/files");
26
+ const _files = require("../../files/utils/files");
27
27
  const _links = require("../../links/constants/links");
28
28
  const _notifications = require("../../notifications/constants/notifications");
29
29
  const _notificationsmanagerservice = require("../../notifications/services/notifications-manager.service");
@@ -160,7 +160,7 @@ let SpacesManager = class SpacesManager {
160
160
  ]){
161
161
  const rPath = space.alias === _spaces.SPACE_ALIAS.PERSONAL ? user.trashPath : _spacemodel.SpaceModel.getTrashPath(space.alias);
162
162
  try {
163
- space.nb = (await _promises.default.readdir(rPath)).filter((f)=>!_files.DEFAULT_FILTERS.has(f)).length;
163
+ space.nb = (await _promises.default.readdir(rPath)).filter((f)=>_configenvironment.configuration.applications.files.showHiddenFiles || f[0] !== '.').length;
164
164
  if (space.nb) {
165
165
  const stats = await _promises.default.stat(rPath);
166
166
  space.mtime = stats.mtime.getTime();
@@ -254,7 +254,7 @@ let SpacesManager = class SpacesManager {
254
254
  // checks & updates roots
255
255
  const aliases = space.roots.map((r)=>r.alias);
256
256
  const names = [
257
- ...await (0, _files1.dirListFileNames)(_spacemodel.SpaceModel.getFilesPath(space.alias)),
257
+ ...await (0, _files.dirListFileNames)(_spacemodel.SpaceModel.getFilesPath(space.alias)),
258
258
  ...space.roots.map((r)=>r.name)
259
259
  ];
260
260
  await this.updateRoots(user, space, space.roots, createOrUpdateSpaceDto.roots, aliases, names);
@@ -293,7 +293,7 @@ let SpacesManager = class SpacesManager {
293
293
  const spaceRoots = await this.spacesQueries.getSpaceRoots(spaceId);
294
294
  const aliases = spaceRoots.map((r)=>r.alias);
295
295
  const names = [
296
- ...await (0, _files1.dirListFileNames)(_spacemodel.SpaceModel.getFilesPath(space.alias)),
296
+ ...await (0, _files.dirListFileNames)(_spacemodel.SpaceModel.getFilesPath(space.alias)),
297
297
  ...spaceRoots.map((r)=>r.name)
298
298
  ];
299
299
  // force owner.id on new user roots (owner is optional and required for the next steps)
@@ -342,11 +342,11 @@ let SpacesManager = class SpacesManager {
342
342
  ] : []
343
343
  ]))){
344
344
  const userPath = _usermodel.UserModel.getHomePath(user.login);
345
- if (!await (0, _files1.isPathExists)(userPath)) {
345
+ if (!await (0, _files.isPathExists)(userPath)) {
346
346
  this.logger.warn(`${this.updatePersonalSpacesQuota.name} - *${user.login}* home path does not exist`);
347
347
  continue;
348
348
  }
349
- const [size, errors] = await (0, _files1.dirSize)(userPath);
349
+ const [size, errors] = await (0, _files.dirSize)(userPath);
350
350
  for (const [path, error] of Object.entries(errors)){
351
351
  this.logger.warn(`${this.updatePersonalSpacesQuota.name} - unable to get size for *${user.login}* on ${path} : ${error}`);
352
352
  }
@@ -375,11 +375,11 @@ let SpacesManager = class SpacesManager {
375
375
  ] : []
376
376
  ]))){
377
377
  const spacePath = _spacemodel.SpaceModel.getHomePath(space.alias);
378
- if (!await (0, _files1.isPathExists)(spacePath)) {
378
+ if (!await (0, _files.isPathExists)(spacePath)) {
379
379
  this.logger.warn(`${this.updateSpacesQuota.name} - *${space.alias}* home path does not exist`);
380
380
  continue;
381
381
  }
382
- const [size, errors] = await (0, _files1.dirSize)(spacePath);
382
+ const [size, errors] = await (0, _files.dirSize)(spacePath);
383
383
  for (const [path, error] of Object.entries(errors)){
384
384
  this.logger.warn(`${this.updateSpacesQuota.name} - unable to get size for *${space.alias}* on ${path} : ${error}`);
385
385
  }
@@ -581,7 +581,7 @@ let SpacesManager = class SpacesManager {
581
581
  continue;
582
582
  }
583
583
  const rPath = r.externalPath || _nodepath.default.join(user.filesPath, r.file.path);
584
- if (!await (0, _files1.isPathExists)(rPath)) {
584
+ if (!await (0, _files.isPathExists)(rPath)) {
585
585
  this.logger.warn(`ignore new root *${r.alias}* (${r.file.path}) : *${rPath}* does not exist`);
586
586
  continue;
587
587
  }
@@ -599,7 +599,7 @@ let SpacesManager = class SpacesManager {
599
599
  // keep the file id (maybe already in db)
600
600
  if (!r.externalPath) {
601
601
  r.file = {
602
- ...await (0, _files1.getProps)(rPath, r.file.path),
602
+ ...await (0, _files.getProps)(rPath, r.file.path),
603
603
  id: r.file.id
604
604
  };
605
605
  }
@@ -631,8 +631,8 @@ let SpacesManager = class SpacesManager {
631
631
  }
632
632
  async deleteSpaceLocation(spaceAlias) {
633
633
  const spaceLocation = _spacemodel.SpaceModel.getHomePath(spaceAlias);
634
- if (await (0, _files1.isPathExists)(spaceLocation)) {
635
- await (0, _files1.removeFiles)(spaceLocation);
634
+ if (await (0, _files.isPathExists)(spaceLocation)) {
635
+ await (0, _files.removeFiles)(spaceLocation);
636
636
  this.logger.warn(`${this.deleteSpaceLocation.name} - space *${spaceAlias}* location was deleted`);
637
637
  } else {
638
638
  this.logger.warn(`${this.deleteSpaceLocation.name} - space *${spaceAlias}* location does not exist : ${spaceLocation}`);
@@ -640,18 +640,18 @@ let SpacesManager = class SpacesManager {
640
640
  }
641
641
  async renameSpaceLocation(oldSpaceAlias, newSpaceAlias) {
642
642
  const currentSpaceLocation = _spacemodel.SpaceModel.getHomePath(oldSpaceAlias);
643
- if (await (0, _files1.isPathExists)(currentSpaceLocation)) {
643
+ if (await (0, _files.isPathExists)(currentSpaceLocation)) {
644
644
  const newSpaceLocation = _spacemodel.SpaceModel.getHomePath(newSpaceAlias);
645
- if (await (0, _files1.isPathExists)(newSpaceLocation)) {
645
+ if (await (0, _files.isPathExists)(newSpaceLocation)) {
646
646
  this.logger.warn(`${this.renameSpaceLocation.name} - *${newSpaceAlias}* home path already exists : ${newSpaceLocation}`);
647
647
  return false;
648
648
  } else {
649
649
  try {
650
- await (0, _files1.moveFiles)(currentSpaceLocation, newSpaceLocation);
650
+ await (0, _files.moveFiles)(currentSpaceLocation, newSpaceLocation);
651
651
  return true;
652
652
  } catch (e) {
653
653
  // try to restore
654
- await (0, _files1.moveFiles)(newSpaceLocation, currentSpaceLocation, true);
654
+ await (0, _files.moveFiles)(newSpaceLocation, currentSpaceLocation, true);
655
655
  this.logger.error(`${this.renameSpaceLocation.name} - unable to rename space location from *${currentSpaceLocation}* to *${newSpaceLocation}* : ${e}`);
656
656
  return false;
657
657
  }