@sync-in/server 1.9.6 → 1.10.1
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.
- package/CHANGELOG.md +38 -4
- package/README.md +2 -2
- package/environment/environment.dist.yaml +15 -5
- package/package.json +14 -16
- package/server/app.bootstrap.js +4 -23
- package/server/app.bootstrap.js.map +1 -1
- package/server/app.constants.js +3 -2
- package/server/app.constants.js.map +1 -1
- package/server/applications/comments/services/comments-queries.service.js +5 -9
- package/server/applications/comments/services/comments-queries.service.js.map +1 -1
- package/server/applications/files/constants/cache.js +2 -5
- package/server/applications/files/constants/cache.js.map +1 -1
- package/server/applications/files/constants/files.js +4 -0
- package/server/applications/files/constants/files.js.map +1 -1
- package/server/applications/files/constants/operations.js +4 -0
- package/server/applications/files/constants/operations.js.map +1 -1
- package/server/applications/files/constants/routes.js +1 -26
- package/server/applications/files/constants/routes.js.map +1 -1
- package/server/applications/files/files.config.js +15 -39
- package/server/applications/files/files.config.js.map +1 -1
- package/server/applications/files/files.controller.js +4 -4
- package/server/applications/files/files.controller.js.map +1 -1
- package/server/applications/files/files.module.js +12 -9
- package/server/applications/files/files.module.js.map +1 -1
- package/server/applications/files/interfaces/file-lock.interface.js.map +1 -1
- package/server/applications/files/interfaces/file-props.interface.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js +32 -0
- package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js +280 -0
- package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js +552 -0
- package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online.config.js +40 -0
- package/server/applications/files/modules/collabora-online/collabora-online.config.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online.constants.js +110 -0
- package/server/applications/files/modules/collabora-online/collabora-online.constants.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online.controller.js +128 -0
- package/server/applications/files/modules/collabora-online/collabora-online.controller.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js +47 -0
- package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js.map +1 -0
- package/server/applications/files/{interfaces/only-office-config.interface.js → modules/collabora-online/collabora-online.dtos.js} +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.dtos.js.map +1 -0
- package/server/applications/files/{guards/files-only-office.guard.js → modules/collabora-online/collabora-online.guard.js} +7 -21
- package/server/applications/files/modules/collabora-online/collabora-online.guard.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js +86 -0
- package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online.interface.js +10 -0
- package/server/applications/files/modules/collabora-online/collabora-online.interface.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online.module.js +41 -0
- package/server/applications/files/modules/collabora-online/collabora-online.module.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online.routes.js +35 -0
- package/server/applications/files/modules/collabora-online/collabora-online.routes.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online.strategy.js +59 -0
- package/server/applications/files/modules/collabora-online/collabora-online.strategy.js.map +1 -0
- package/server/applications/files/modules/collabora-online/collabora-online.utils.js +28 -0
- package/server/applications/files/modules/collabora-online/collabora-online.utils.js.map +1 -0
- package/server/applications/files/{decorators → modules/only-office}/only-office-environment.decorator.js +5 -5
- package/server/applications/files/modules/only-office/only-office-environment.decorator.js.map +1 -0
- package/server/applications/files/{services/files-only-office-manager.service.js → modules/only-office/only-office-manager.service.js} +101 -97
- package/server/applications/files/modules/only-office/only-office-manager.service.js.map +1 -0
- package/server/applications/files/modules/only-office/only-office-manager.service.spec.js +477 -0
- package/server/applications/files/modules/only-office/only-office-manager.service.spec.js.map +1 -0
- package/server/applications/files/modules/only-office/only-office.config.js +51 -0
- package/server/applications/files/modules/only-office/only-office.config.js.map +1 -0
- package/server/applications/files/modules/only-office/only-office.constants.js +417 -0
- package/server/applications/files/modules/only-office/only-office.constants.js.map +1 -0
- package/server/applications/files/{files-only-office.controller.js → modules/only-office/only-office.controller.js} +35 -52
- package/server/applications/files/modules/only-office/only-office.controller.js.map +1 -0
- package/server/applications/files/{files-only-office.controller.spec.js → modules/only-office/only-office.controller.spec.js} +24 -21
- package/server/applications/files/modules/only-office/only-office.controller.spec.js.map +1 -0
- package/server/applications/files/modules/only-office/only-office.dtos.js +10 -0
- package/server/applications/files/modules/only-office/only-office.dtos.js.map +1 -0
- package/server/applications/files/modules/only-office/only-office.guard.js +40 -0
- package/server/applications/files/modules/only-office/only-office.guard.js.map +1 -0
- package/server/applications/files/{guards/files-only-office.guard.spec.js → modules/only-office/only-office.guard.spec.js} +15 -21
- package/server/applications/files/modules/only-office/only-office.guard.spec.js.map +1 -0
- package/server/applications/files/modules/only-office/only-office.interface.js +10 -0
- package/server/applications/files/modules/only-office/only-office.interface.js.map +1 -0
- package/server/applications/files/modules/only-office/only-office.module.js +41 -0
- package/server/applications/files/modules/only-office/only-office.module.js.map +1 -0
- package/server/applications/files/modules/only-office/only-office.routes.js +45 -0
- package/server/applications/files/modules/only-office/only-office.routes.js.map +1 -0
- package/server/applications/files/{guards/files-only-office.strategy.js → modules/only-office/only-office.strategy.js} +11 -11
- package/server/applications/files/modules/only-office/only-office.strategy.js.map +1 -0
- package/server/applications/files/services/files-lock-manager.service.js +25 -33
- package/server/applications/files/services/files-lock-manager.service.js.map +1 -1
- package/server/applications/files/services/files-manager.service.js +17 -16
- package/server/applications/files/services/files-manager.service.js.map +1 -1
- package/server/applications/files/services/files-methods.service.js +2 -2
- package/server/applications/files/services/files-methods.service.js.map +1 -1
- package/server/applications/files/services/files-methods.service.spec.js +3 -1
- package/server/applications/files/services/files-methods.service.spec.js.map +1 -1
- package/server/applications/files/services/files-scheduler.service.js +2 -2
- package/server/applications/files/services/files-scheduler.service.js.map +1 -1
- package/server/applications/files/utils/files.js +10 -2
- package/server/applications/files/utils/files.js.map +1 -1
- package/server/applications/links/constants/routes.js +5 -0
- package/server/applications/links/constants/routes.js.map +1 -1
- package/server/applications/links/interfaces/link-space.interface.js.map +1 -1
- package/server/applications/links/links.controller.js +25 -5
- package/server/applications/links/links.controller.js.map +1 -1
- package/server/applications/links/services/links-manager.service.js +43 -21
- package/server/applications/links/services/links-manager.service.js.map +1 -1
- package/server/applications/links/services/links-manager.service.spec.js +4 -3
- package/server/applications/links/services/links-manager.service.spec.js.map +1 -1
- package/server/applications/links/services/links-queries.service.js +9 -2
- package/server/applications/links/services/links-queries.service.js.map +1 -1
- package/server/applications/shares/interfaces/share-link.interface.js.map +1 -1
- package/server/applications/shares/services/shares-manager.service.js +3 -0
- package/server/applications/shares/services/shares-manager.service.js.map +1 -1
- package/server/applications/shares/services/shares-manager.service.spec.js +2 -1
- package/server/applications/shares/services/shares-manager.service.spec.js.map +1 -1
- package/server/applications/shares/services/shares-queries.service.js +1 -0
- package/server/applications/shares/services/shares-queries.service.js.map +1 -1
- package/server/applications/spaces/constants/spaces.js +2 -2
- package/server/applications/spaces/constants/spaces.js.map +1 -1
- package/server/applications/spaces/decorators/space-override-permission.decorator.js +18 -0
- package/server/applications/spaces/decorators/space-override-permission.decorator.js.map +1 -0
- package/server/applications/spaces/guards/space.guard.js +40 -33
- package/server/applications/spaces/guards/space.guard.js.map +1 -1
- package/server/applications/spaces/guards/space.guard.spec.js +10 -15
- package/server/applications/spaces/guards/space.guard.spec.js.map +1 -1
- package/server/applications/users/users.e2e-spec.js +0 -1
- package/server/applications/users/users.e2e-spec.js.map +1 -1
- package/server/applications/webdav/constants/webdav.js +11 -0
- package/server/applications/webdav/constants/webdav.js.map +1 -1
- package/server/applications/webdav/guards/webdav-protocol.guard.js +9 -8
- package/server/applications/webdav/guards/webdav-protocol.guard.js.map +1 -1
- package/server/applications/webdav/guards/webdav-protocol.guard.spec.js +1 -1
- package/server/applications/webdav/guards/webdav-protocol.guard.spec.js.map +1 -1
- package/server/applications/webdav/interfaces/webdav.interface.js.map +1 -1
- package/server/applications/webdav/services/webdav-methods.service.js +40 -17
- package/server/applications/webdav/services/webdav-methods.service.js.map +1 -1
- package/server/applications/webdav/services/webdav-methods.service.spec.js +2157 -1289
- package/server/applications/webdav/services/webdav-methods.service.spec.js.map +1 -1
- package/server/applications/webdav/utils/bootstrap.js +45 -0
- package/server/applications/webdav/utils/bootstrap.js.map +1 -0
- package/server/applications/webdav/utils/webdav.js +8 -4
- package/server/applications/webdav/utils/webdav.js.map +1 -1
- package/server/applications/webdav/webdav.controller.js +5 -5
- package/server/applications/webdav/webdav.controller.js.map +1 -1
- package/server/applications/webdav/webdav.e2e-spec.js +131 -2
- package/server/applications/webdav/webdav.e2e-spec.js.map +1 -1
- package/server/authentication/auth.e2e-spec.js +12 -6
- package/server/authentication/auth.e2e-spec.js.map +1 -1
- package/server/authentication/guards/auth-basic.guard.spec.js +23 -0
- package/server/authentication/guards/auth-basic.guard.spec.js.map +1 -1
- package/server/authentication/guards/auth-basic.strategy.js +3 -3
- package/server/authentication/guards/auth-basic.strategy.js.map +1 -1
- package/server/authentication/guards/auth-digest.strategy.js +32 -11
- package/server/authentication/guards/auth-digest.strategy.js.map +1 -1
- package/server/authentication/guards/auth-token-access.guard.js +8 -3
- package/server/authentication/guards/auth-token-access.guard.js.map +1 -1
- package/server/authentication/guards/implementations/http-basic.strategy.js +76 -0
- package/server/authentication/guards/implementations/http-basic.strategy.js.map +1 -0
- package/server/authentication/guards/implementations/http-digest.strategy.js +155 -0
- package/server/authentication/guards/implementations/http-digest.strategy.js.map +1 -0
- package/server/authentication/services/auth-manager.service.js +1 -2
- package/server/authentication/services/auth-manager.service.js.map +1 -1
- package/server/authentication/services/auth-methods/auth-method-two-fa.service.js +1 -1
- package/server/authentication/services/auth-methods/auth-method-two-fa.service.js.map +1 -1
- package/server/authentication/services/auth-methods/auth-method-two-fa.service.spec.js +350 -4
- package/server/authentication/services/auth-methods/auth-method-two-fa.service.spec.js.map +1 -1
- package/server/configuration/config.environment.js +5 -1
- package/server/configuration/config.environment.js.map +1 -1
- package/server/configuration/config.interfaces.js.map +1 -1
- package/static/3rdpartylicenses.txt +507 -507
- package/static/assets/pdfjs/build/pdf.mjs +93 -33
- package/static/assets/pdfjs/build/pdf.mjs.map +1 -1
- package/static/assets/pdfjs/build/pdf.sandbox.mjs +3 -3
- package/static/assets/pdfjs/build/pdf.sandbox.mjs.map +1 -1
- package/static/assets/pdfjs/build/pdf.worker.mjs +166 -54
- package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
- package/static/assets/pdfjs/version +1 -1
- package/static/assets/pdfjs/web/images/checkmark.svg +5 -0
- package/static/assets/pdfjs/web/images/pages_closeButton.svg +3 -0
- package/static/assets/pdfjs/web/images/pages_selected.svg +7 -0
- package/static/assets/pdfjs/web/images/pages_viewArrow.svg +3 -0
- package/static/assets/pdfjs/web/images/pages_viewButton.svg +3 -0
- package/static/assets/pdfjs/web/locale/be/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/bs/viewer.ftl +0 -5
- package/static/assets/pdfjs/web/locale/cs/viewer.ftl +4 -6
- package/static/assets/pdfjs/web/locale/cy/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/da/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/de/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/el/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/en-CA/viewer.ftl +6 -2
- package/static/assets/pdfjs/web/locale/en-GB/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/en-US/viewer.ftl +82 -17
- package/static/assets/pdfjs/web/locale/eo/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/es-AR/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/es-CL/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/es-ES/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/es-MX/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/eu/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/fi/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/fr/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/fur/viewer.ftl +0 -5
- package/static/assets/pdfjs/web/locale/fy-NL/viewer.ftl +3 -5
- package/static/assets/pdfjs/web/locale/gn/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/he/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/hr/viewer.ftl +66 -0
- package/static/assets/pdfjs/web/locale/hsb/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/hu/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/hy-AM/viewer.ftl +3 -8
- package/static/assets/pdfjs/web/locale/ia/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/id/viewer.ftl +0 -5
- package/static/assets/pdfjs/web/locale/is/viewer.ftl +0 -5
- package/static/assets/pdfjs/web/locale/it/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/ja/viewer.ftl +0 -14
- package/static/assets/pdfjs/web/locale/ka/viewer.ftl +4 -6
- package/static/assets/pdfjs/web/locale/kab/viewer.ftl +0 -5
- package/static/assets/pdfjs/web/locale/kk/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/ko/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/nb-NO/viewer.ftl +1 -3
- package/static/assets/pdfjs/web/locale/nl/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/nn-NO/viewer.ftl +4 -2
- package/static/assets/pdfjs/web/locale/pa-IN/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/pl/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/pt-BR/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/pt-PT/viewer.ftl +35 -0
- package/static/assets/pdfjs/web/locale/rm/viewer.ftl +0 -5
- package/static/assets/pdfjs/web/locale/ro/viewer.ftl +4 -6
- package/static/assets/pdfjs/web/locale/ru/viewer.ftl +3 -5
- package/static/assets/pdfjs/web/locale/sk/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/sl/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/sq/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/sv-SE/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/tg/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/th/viewer.ftl +2 -2
- package/static/assets/pdfjs/web/locale/tr/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/vi/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/zh-CN/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/locale/zh-TW/viewer.ftl +0 -2
- package/static/assets/pdfjs/web/viewer.css +1778 -835
- package/static/assets/pdfjs/web/viewer.html +167 -86
- package/static/assets/pdfjs/web/viewer.mjs +1106 -801
- package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
- package/static/chunk-27V66YJV.js +2 -0
- package/static/{chunk-2F42MZQ5.js → chunk-2GXOVGTD.js} +1 -1
- package/static/{chunk-HLKZCMKV.js → chunk-2RWLNKZH.js} +1 -1
- package/static/chunk-2YQ4SX3A.js +13 -0
- package/static/{chunk-LFAQLJZK.js → chunk-3MVPXC3U.js} +1 -1
- package/static/chunk-3QTROEHV.js +1 -0
- package/static/{chunk-JYHTSSKW.js → chunk-3VRUIWQG.js} +1 -1
- package/static/{chunk-2CAAJBRO.js → chunk-3ZBAQTHJ.js} +1 -1
- package/static/chunk-3ZLBVUCX.js +2 -0
- package/static/chunk-46TJLPJY.js +1 -0
- package/static/chunk-4NIYCYRS.js +2 -0
- package/static/chunk-6OEOADR6.js +1 -0
- package/static/{chunk-BJARRIS6.js → chunk-76M3BMK6.js} +11 -11
- package/static/{chunk-ANH4VNOS.js → chunk-76REYAEA.js} +1 -1
- package/static/{chunk-7HL5Z6PF.js → chunk-7HJFIMNF.js} +1 -1
- package/static/{chunk-XIQXRSZ2.js → chunk-7KAYOR3A.js} +1 -1
- package/static/chunk-AALPWGPB.js +3 -0
- package/static/{chunk-Z2KBIZ5D.js → chunk-ARS47O5X.js} +1 -1
- package/static/chunk-BCN4T5DO.js +2 -0
- package/static/{chunk-DU4Q4RWJ.js → chunk-CMNMPG6Z.js} +1 -1
- package/static/{chunk-UO7ATVQG.js → chunk-CN5YVRFT.js} +1 -1
- package/static/{chunk-BX3QZ7IL.js → chunk-CSVPAZHK.js} +1 -1
- package/static/chunk-CVXLHSO5.js +1 -0
- package/static/{chunk-O233BXWK.js → chunk-D2MLAO5N.js} +1 -1
- package/static/{chunk-NHMYAVJK.js → chunk-D5FQ72R4.js} +1 -1
- package/static/{chunk-IBC7CFBQ.js → chunk-DVCN3P7Q.js} +1 -1
- package/static/{chunk-25PWAXTJ.js → chunk-EKWB5W72.js} +1 -1
- package/static/{chunk-ZCOEP4O2.js → chunk-FTFEQDWH.js} +1 -1
- package/static/{chunk-EPDWJEPD.js → chunk-FWQJ4ZCD.js} +1 -1
- package/static/chunk-G7RZN7HN.js +1 -0
- package/static/{chunk-X5UDV4ZB.js → chunk-HZAB6F4Q.js} +1 -1
- package/static/{chunk-FEQUP26G.js → chunk-IHS5LSJJ.js} +1 -1
- package/static/{chunk-DQAQUSVW.js → chunk-IMFO2MI7.js} +1 -1
- package/static/{chunk-ODAQRAPO.js → chunk-J7474P3L.js} +1 -1
- package/static/{chunk-DK2LAJEL.js → chunk-JAJ7VXMB.js} +1 -1
- package/static/{chunk-AYYJZMBE.js → chunk-JNTNMIUH.js} +1 -1
- package/static/chunk-JRXG43AA.js +2 -0
- package/static/{chunk-3AR5VNJE.js → chunk-KAUCN24H.js} +1 -1
- package/static/{chunk-3WS72A6C.js → chunk-KDUAB76O.js} +1 -1
- package/static/chunk-KEZNIIFH.js +1 -0
- package/static/chunk-LTJNLOX2.js +1 -0
- package/static/chunk-LWSCODLD.js +1 -0
- package/static/{chunk-GRV44RYI.js → chunk-LZUHREOF.js} +1 -1
- package/static/chunk-NIKNG2FX.js +1 -0
- package/static/chunk-NNZWSNAW.js +1 -0
- package/static/chunk-NWKBB7J4.js +1 -0
- package/static/{chunk-B4TDS6AQ.js → chunk-PDG7DOEF.js} +1 -1
- package/static/{chunk-NQCKX2AD.js → chunk-PPJCVBJH.js} +1 -1
- package/static/chunk-PVYVY3GD.js +1 -0
- package/static/chunk-Q5X5TPAG.js +1 -0
- package/static/chunk-QGHNJVJ6.js +1 -0
- package/static/{chunk-5HYSNQR4.js → chunk-QJ22N76V.js} +1 -1
- package/static/{chunk-TOCCCZP2.js → chunk-QTPIEEZW.js} +1 -1
- package/static/{chunk-D6QWQHWE.js → chunk-R4VMWCM5.js} +1 -1
- package/static/{chunk-7H5O4BLV.js → chunk-R4VYKZVJ.js} +1 -1
- package/static/{chunk-QKMN3S4M.js → chunk-RBTLSPYJ.js} +1 -1
- package/static/chunk-RJULB733.js +1 -0
- package/static/{chunk-E5C4QRNQ.js → chunk-RNVPQQKT.js} +5 -5
- package/static/chunk-RTNEBRKJ.js +1 -0
- package/static/{chunk-IIKL33TV.js → chunk-S44QIK3G.js} +1 -1
- package/static/{chunk-SF6Q6VRC.js → chunk-S6H2ELRY.js} +1 -1
- package/static/{chunk-4GBA6EJ4.js → chunk-SDJNZULP.js} +1 -1
- package/static/chunk-SNOOCDJD.js +1 -0
- package/static/chunk-SPQH3ATC.js +5 -0
- package/static/{chunk-5KVI243T.js → chunk-TNCKNU6I.js} +1 -1
- package/static/{chunk-7QYALK5T.js → chunk-TTWMFWEC.js} +1 -1
- package/static/{chunk-OVUMPMVM.js → chunk-U5E5H2DD.js} +1 -1
- package/static/{chunk-5NFH4E2B.js → chunk-UOK3LKSX.js} +1 -1
- package/static/{chunk-5ATJIR5S.js → chunk-VBTZDHZ3.js} +1 -1
- package/static/{chunk-CHMDM2ZW.js → chunk-VD5JHSDS.js} +1 -1
- package/static/chunk-VZFZUI6D.js +1 -0
- package/static/{chunk-GYYJ4FWN.js → chunk-WFMEUST4.js} +1 -1
- package/static/{chunk-BVKDW5XO.js → chunk-WRK2FTKU.js} +1 -1
- package/static/{chunk-GLPKRULI.js → chunk-WZPF4LS2.js} +1 -1
- package/static/chunk-X7NHX5C7.js +1 -0
- package/static/{chunk-FSGT46LM.js → chunk-XSURUW7C.js} +1 -1
- package/static/{chunk-KAAFVHYE.js → chunk-XX3JPJUM.js} +1 -1
- package/static/{chunk-C5T7RZSD.js → chunk-XZHWESIY.js} +1 -1
- package/static/chunk-ZCSHU3D7.js +1 -0
- package/static/{chunk-QUUQOBTF.js → chunk-ZEJLIGAY.js} +1 -1
- package/static/{chunk-GENTF6JM.js → chunk-ZHUBWKA2.js} +1 -1
- package/static/chunk-ZOMRIN3G.js +2 -0
- package/static/{chunk-2U5VKTML.js → chunk-ZU5MQTFN.js} +1 -1
- package/static/index.html +2 -2
- package/static/main-5O3KLGIR.js +11 -0
- package/static/{styles-S5HVK4H5.css → styles-XLLEY5Y3.css} +1 -1
- package/server/applications/files/constants/only-office.js +0 -531
- package/server/applications/files/constants/only-office.js.map +0 -1
- package/server/applications/files/decorators/only-office-environment.decorator.js.map +0 -1
- package/server/applications/files/files-only-office.controller.js.map +0 -1
- package/server/applications/files/files-only-office.controller.spec.js.map +0 -1
- package/server/applications/files/guards/files-only-office.guard.js.map +0 -1
- package/server/applications/files/guards/files-only-office.guard.spec.js.map +0 -1
- package/server/applications/files/guards/files-only-office.strategy.js.map +0 -1
- package/server/applications/files/interfaces/only-office-config.interface.js.map +0 -1
- package/server/applications/files/services/files-only-office-manager.service.js.map +0 -1
- package/server/applications/files/services/files-only-office-manager.service.spec.js +0 -58
- package/server/applications/files/services/files-only-office-manager.service.spec.js.map +0 -1
- package/static/chunk-42L6C5MT.js +0 -1
- package/static/chunk-4ZKAVMB4.js +0 -1
- package/static/chunk-5GIWZKNS.js +0 -1
- package/static/chunk-5WCQBTXW.js +0 -1
- package/static/chunk-B2A4HNDC.js +0 -1
- package/static/chunk-BSB4VROD.js +0 -2
- package/static/chunk-CUC7R6C2.js +0 -1
- package/static/chunk-DHFQIFOF.js +0 -1
- package/static/chunk-DRHPEERW.js +0 -2
- package/static/chunk-FCGTI42I.js +0 -1
- package/static/chunk-FCR5AEHR.js +0 -3
- package/static/chunk-HB5DC7RJ.js +0 -1
- package/static/chunk-ITVA26X2.js +0 -2
- package/static/chunk-KWKZN53T.js +0 -1
- package/static/chunk-LBXOAKBD.js +0 -1
- package/static/chunk-LZKI5P5T.js +0 -1
- package/static/chunk-MGMDT4VN.js +0 -1
- package/static/chunk-MWUUM2NK.js +0 -13
- package/static/chunk-MYM43ENO.js +0 -1
- package/static/chunk-NAH4V2R6.js +0 -2
- package/static/chunk-PCFH5HCI.js +0 -2
- package/static/chunk-Q6B4OVER.js +0 -5
- package/static/chunk-QV5LQKTS.js +0 -1
- package/static/chunk-S4UTSOPV.js +0 -1
- package/static/chunk-SRBOO7AO.js +0 -1
- package/static/chunk-VZPCXSRG.js +0 -2
- package/static/chunk-XKEBQNQJ.js +0 -1
- package/static/chunk-YYTDPI5S.js +0 -1
- package/static/main-ODUA232E.js +0 -11
- /package/static/assets/pdfjs/web/images/{toolbarButton-sidebarToggle.svg → toolbarButton-viewsManagerToggle.svg} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,42 @@
|
|
|
1
1
|
|
|
2
|
+
## [1.10.1](https://github.com/Sync-in/server/compare/v1.10.0...v1.10.1) (2026-01-12)
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
* **auth:** WebDAV basic auth fails with ":" in password ([#104](https://github.com/Sync-in/server/issues/104)) ([9671b71](https://github.com/Sync-in/server/commit/9671b71e5a4fcbfb659b5eb1e2818f55f3df7976))
|
|
8
|
+
* **backend:comments:** refine file path query for better handling of space roots ([5b0c8ff](https://github.com/Sync-in/server/commit/5b0c8fff0aa3eba9d3e0308e2ae012992f1fa91b))
|
|
9
|
+
* **backend:webdav:** treat PUT requests as binary streams to avoid body parsing ([edc291c](https://github.com/Sync-in/server/commit/edc291ccc634e03843c4db9f7000969e6fc9946f))
|
|
10
|
+
|
|
11
|
+
## [1.10.0](https://github.com/Sync-in/server/compare/v1.9.6...v1.10.0) (2026-01-07)
|
|
12
|
+
|
|
13
|
+
🔥🚀 Collabora Online integration
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* **backend/frontend:files:** improve file locking logic, enhance compatibility across apps such as WebDAV and Collabora and OnlyOffice ([9eb5a17](https://github.com/Sync-in/server/commit/9eb5a17b26cc6c0928be6a16c71002e9bd4082de))
|
|
18
|
+
* **files:** add Collabora Online integration to Docker setup ([abe4fa4](https://github.com/Sync-in/server/commit/abe4fa4f89edbb79265d3cdb94aa01725a35ddce))
|
|
19
|
+
* **files:** collabora online integration ([dabeff6](https://github.com/Sync-in/server/commit/dabeff62d522cd2af4acb93c20d287221e0f2c30))
|
|
20
|
+
* **files:** Collabora Online integration, multi-editor support, and improved file locking ([e6bedc1](https://github.com/Sync-in/server/commit/e6bedc1bff837ce477ff4e791f78e66e038209b2))
|
|
21
|
+
* **files:** improve editor selection and add editor preference support ([8fea357](https://github.com/Sync-in/server/commit/8fea357925a6671393d4f02b1ff790134ca87912))
|
|
22
|
+
* **frontend/backend:files:** simplify file opening flow and improve readonly handling ([6563f44](https://github.com/Sync-in/server/commit/6563f445441c755f392508d98caa9ba261e5c2d7))
|
|
23
|
+
* **links:** allow direct access to spaces via public links; add file preview/edit/download; improve password validation ([5102e9a](https://github.com/Sync-in/server/commit/5102e9ae6b17b9924969839c69b7cbdc2421c518))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### Bug Fixes
|
|
27
|
+
|
|
28
|
+
* **backend:files-scheduler:** correct ordering of recent files ([aea6bcd](https://github.com/Sync-in/server/commit/aea6bcdf79763bf392b105e1c806bb70da0f00be))
|
|
29
|
+
* **backend:shares:** clear cached permissions when share link permissions are changed ([95a455b](https://github.com/Sync-in/server/commit/95a455b07d44ac4761e1f9583f8be7d90939e614))
|
|
30
|
+
* **backend:spaces:** apply MODIFY permission for PUT requests on existing files instead of ADD when the resource exists ([e73ae93](https://github.com/Sync-in/server/commit/e73ae93251e090f4f9f4aaf455f5098a3ee47a4b))
|
|
31
|
+
* **backend:webdav:** properly handle HEAD requests on directories, match lock source file when the file is a space root and extend lock owner information ([f1f4836](https://github.com/Sync-in/server/commit/f1f4836d4038eb3960a1f08cc8579176d05d1b55))
|
|
32
|
+
* **docker:collabora:** add capabilities for debian based hosts ([9275df6](https://github.com/Sync-in/server/commit/9275df653acde8a8abfa6dad5c92859a064021be))
|
|
33
|
+
* **frontend:auth:** ensure server config is initialized during authentication to prevent OTP prompt from not appearing on desktop ([e0053ae](https://github.com/Sync-in/server/commit/e0053ae608954be7a1a85b7736e150c03ecb43cb))
|
|
34
|
+
* **frontend:files:** adjust badge styles to use `white-space-normal` for consistent text wrapping ([615ea00](https://github.com/Sync-in/server/commit/615ea00bc79efe0cb3afa4e905dc3e0226336b84))
|
|
35
|
+
* **frontend:files:** correct writeable condition ([288193e](https://github.com/Sync-in/server/commit/288193e3d8f0afb95db9212a33579fb33867bb30))
|
|
36
|
+
* **frontend:files:** load tasks only when a user is logged in to prevent interceptor redirects when refreshing a public link URL ([bda58d6](https://github.com/Sync-in/server/commit/bda58d6094659231ead9c7c51878e57ed13b3d87))
|
|
37
|
+
* **frontend:i18n:** remove explicit 'en' locale definition to prevent bs-datepicker translation conflicts ([13529f1](https://github.com/Sync-in/server/commit/13529f1b7c68e468c3aa195c81c4ce20bcd31c66))
|
|
38
|
+
* **frontend:spaces:** display deactivation date when space is disabled ([7df2535](https://github.com/Sync-in/server/commit/7df2535f3f54e3ec6bced3525b16fb90edf1560b))
|
|
39
|
+
|
|
2
40
|
## [1.9.6](https://github.com/Sync-in/server/compare/v1.9.5...v1.9.6) (2025-12-16)
|
|
3
41
|
|
|
4
42
|
### Bug Fixes
|
|
@@ -22,10 +60,6 @@
|
|
|
22
60
|
* **frontend:files:** fix DataTransfer usage after async operations and delay overwrite until analysis completes to restore overwrite on dropped files ([d9935e5](https://github.com/Sync-in/server/commit/d9935e5a3887448635c30fd49f22657461177610))
|
|
23
61
|
* **frontend:styles:** add min-width on app-auth background class ([dffd5e5](https://github.com/Sync-in/server/commit/dffd5e5c7a1a65994970bedf33a95dd00827aa94))
|
|
24
62
|
|
|
25
|
-
### Community Highlights ❤️
|
|
26
|
-
|
|
27
|
-
We would like to thank @x0root for reporting this vulnerability and helping improve the security of the project.
|
|
28
|
-
|
|
29
63
|
## [1.9.1](https://github.com/Sync-in/server/compare/v1.8.1...v1.9.1) (2025-11-25)
|
|
30
64
|
|
|
31
65
|
### Features
|
package/README.md
CHANGED
|
@@ -45,8 +45,8 @@ Sync-in fits seamlessly into any environment — from small teams to large enter
|
|
|
45
45
|
- 🔑 Advanced User Access Control
|
|
46
46
|
- **Spaces & Shares**: Organize files with fine-grained access permissions
|
|
47
47
|
- Role-based permission system ensuring secure file management
|
|
48
|
-
- 🤝 Collaboration
|
|
49
|
-
- **OnlyOffice Integration**:
|
|
48
|
+
- 🤝 Collaboration
|
|
49
|
+
- **Collabora Online & OnlyOffice Integration**: Real-time document editing and collaboration
|
|
50
50
|
- **Activity Tracking**: Commenting, notifications, and file history for seamless teamwork
|
|
51
51
|
- 🔎 Powerful Full-Text Search
|
|
52
52
|
- **Deep content search** for easy retrieval of files and documents
|
|
@@ -151,16 +151,26 @@ applications:
|
|
|
151
151
|
# enable onlyoffice integration
|
|
152
152
|
# default: false
|
|
153
153
|
enabled: false
|
|
154
|
-
# For an external server (e.g., https://onlyoffice.domain.com), remember the url must be accessible from browser!
|
|
155
|
-
# If externalServer is empty (case of official docker compose), we use the local instance
|
|
156
|
-
# default: null
|
|
157
|
-
externalServer:
|
|
158
154
|
# Secret used for jwt tokens, it must be the same on the onlyoffice server
|
|
159
155
|
# required
|
|
160
156
|
secret: onlyOfficeSecret
|
|
157
|
+
# If no external server is configured, the local Nginx service from the Docker Compose setup is used.
|
|
158
|
+
# If an external server is configured, it will be used instead.
|
|
159
|
+
# Note: when using an external server (e.g. https://onlyoffice.domain.com), make sure it is accessible from the client/browser.
|
|
160
|
+
# default: null
|
|
161
|
+
externalServer:
|
|
161
162
|
# If you use https, set to `true`.
|
|
162
|
-
# default:
|
|
163
|
+
# default: false
|
|
163
164
|
verifySSL: false
|
|
165
|
+
collabora:
|
|
166
|
+
# enable collabora online integration
|
|
167
|
+
# default: false
|
|
168
|
+
enabled: false
|
|
169
|
+
# If no external server is configured, the local Nginx service from the Docker Compose setup is used.
|
|
170
|
+
# If an external server is configured, it will be used instead.
|
|
171
|
+
# Note: when using an external server (e.g. https://collabora.domain.com), make sure it is accessible from the client/browser.
|
|
172
|
+
# default: null
|
|
173
|
+
externalServer:
|
|
164
174
|
appStore:
|
|
165
175
|
# repository: `public` | `local`
|
|
166
176
|
# default: `public`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sync-in/server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.10.1",
|
|
4
4
|
"description": "The secure, open-source platform for file storage, sharing, collaboration, and sync",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Johan Legrand",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"!win32"
|
|
20
20
|
],
|
|
21
21
|
"engines": {
|
|
22
|
-
"node": ">=22
|
|
22
|
+
"node": ">= 22"
|
|
23
23
|
},
|
|
24
24
|
"funding": [
|
|
25
25
|
{
|
|
@@ -76,48 +76,46 @@
|
|
|
76
76
|
"@fastify/helmet": "13.0.2",
|
|
77
77
|
"@fastify/multipart": "9.3.0",
|
|
78
78
|
"@fastify/send": "4.1.0",
|
|
79
|
-
"@fastify/static": "
|
|
79
|
+
"@fastify/static": "9.0.0",
|
|
80
80
|
"@knaadh/nestjs-drizzle-mysql2": "1.2.0",
|
|
81
81
|
"@lukeed/ms": "2.0.2",
|
|
82
82
|
"@nestjs/axios": "4.0.1",
|
|
83
|
-
"@nestjs/common": "11.1.
|
|
83
|
+
"@nestjs/common": "11.1.11",
|
|
84
84
|
"@nestjs/config": "4.0.2",
|
|
85
|
-
"@nestjs/core": "11.1.
|
|
85
|
+
"@nestjs/core": "11.1.11",
|
|
86
86
|
"@nestjs/jwt": "11.0.2",
|
|
87
87
|
"@nestjs/passport": "11.0.5",
|
|
88
|
-
"@nestjs/platform-fastify": "11.1.
|
|
89
|
-
"@nestjs/platform-socket.io": "11.1.
|
|
88
|
+
"@nestjs/platform-fastify": "11.1.11",
|
|
89
|
+
"@nestjs/platform-socket.io": "11.1.11",
|
|
90
90
|
"@nestjs/schedule": "6.1.0",
|
|
91
|
-
"@nestjs/websockets": "11.1.
|
|
91
|
+
"@nestjs/websockets": "11.1.11",
|
|
92
92
|
"@socket.io/cluster-adapter": "0.3.0",
|
|
93
93
|
"@socket.io/redis-adapter": "8.3.0",
|
|
94
|
-
"@types/text-to-svg": "3.1.4",
|
|
95
94
|
"archiver": "7.0.1",
|
|
96
95
|
"bcryptjs": "3.0.3",
|
|
97
96
|
"class-transformer": "0.5.1",
|
|
98
97
|
"class-validator": "0.14.3",
|
|
99
98
|
"deepmerge": "4.3.1",
|
|
100
99
|
"drizzle-kit": "0.31.8",
|
|
101
|
-
"drizzle-orm": "0.
|
|
100
|
+
"drizzle-orm": "0.45.1",
|
|
102
101
|
"fast-xml-parser": "5.3.3",
|
|
103
|
-
"fs-extra": "11.3.
|
|
102
|
+
"fs-extra": "11.3.3",
|
|
104
103
|
"html-to-text": "9.0.5",
|
|
105
104
|
"js-yaml": "4.1.1",
|
|
106
|
-
"ldapts": "8.
|
|
105
|
+
"ldapts": "8.1.3",
|
|
107
106
|
"mime-types": "3.0.2",
|
|
108
107
|
"mysql2": "3.16.0",
|
|
109
108
|
"nestjs-pino": "4.5.0",
|
|
110
|
-
"nodemailer": "7.0.
|
|
111
|
-
"passport-http": "0.3.0",
|
|
109
|
+
"nodemailer": "7.0.12",
|
|
112
110
|
"passport-jwt": "4.0.1",
|
|
113
111
|
"passport-local": "1.0.0",
|
|
114
112
|
"passport": "0.7.0",
|
|
115
113
|
"pino-pretty": "13.1.3",
|
|
116
114
|
"qrcode-generator": "2.0.4",
|
|
117
115
|
"redis": "5.10.0",
|
|
118
|
-
"sax": "1.4.
|
|
116
|
+
"sax": "1.4.4",
|
|
119
117
|
"sharp": "0.34.5",
|
|
120
|
-
"socket.io": "4.8.
|
|
118
|
+
"socket.io": "4.8.3",
|
|
121
119
|
"tar": "7.5.2",
|
|
122
120
|
"text-to-svg": "3.1.5",
|
|
123
121
|
"time2fa": "1.4.2",
|
package/server/app.bootstrap.js
CHANGED
|
@@ -21,8 +21,7 @@ const _platformfastify = require("@nestjs/platform-fastify");
|
|
|
21
21
|
const _nestjspino = require("nestjs-pino");
|
|
22
22
|
const _appconstants = require("./app.constants");
|
|
23
23
|
const _appmodule = require("./app.module");
|
|
24
|
-
const
|
|
25
|
-
const _routes = require("./applications/webdav/constants/routes");
|
|
24
|
+
const _bootstrap = require("./applications/webdav/utils/bootstrap");
|
|
26
25
|
const _configconstants = require("./configuration/config.constants");
|
|
27
26
|
const _configenvironment = require("./configuration/config.environment");
|
|
28
27
|
const _websocketadapter = require("./infrastructure/websocket/adapters/web-socket.adapter");
|
|
@@ -49,29 +48,11 @@ async function appBootstrap() {
|
|
|
49
48
|
/* LOGGER */ app.useLogger(_configconstants.IS_TEST_ENV ? [
|
|
50
49
|
'fatal'
|
|
51
50
|
] : app.get(_nestjspino.Logger));
|
|
52
|
-
/*
|
|
53
|
-
|
|
54
|
-
'application/xml',
|
|
55
|
-
'text/xml'
|
|
56
|
-
]);
|
|
57
|
-
// add webdav methods
|
|
58
|
-
for (const method of Object.values(_applicationsconstants.HTTP_WEBDAV_METHOD)){
|
|
59
|
-
fastifyInstance.addHttpMethod(method, {
|
|
60
|
-
hasBody: true
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
// '*' body parser allow binary data as stream (unlimited body size)
|
|
51
|
+
/* WEBDAV BOOTSTRAP RULES */ (0, _bootstrap.bootstrapWebDAV)(app, fastifyInstance);
|
|
52
|
+
/* PARSER */ // '*' body parser allow binary data as a stream (unlimited body size)
|
|
64
53
|
fastifyInstance.addContentTypeParser('*', {
|
|
65
54
|
bodyLimit: 0
|
|
66
55
|
}, (_req, _payload, done)=>done(null));
|
|
67
|
-
// Joplin clients send incorrect `Content-Type` headers when syncing over WebDAV (issue: https://github.com/laurent22/joplin/issues/122499)
|
|
68
|
-
// This hook intercepts matching requests and sets `application/octet-stream` to ensure compatibility and successful sync.
|
|
69
|
-
// todo: remove it when fixed on Joplin side
|
|
70
|
-
fastifyInstance.addHook('onRequest', async (req, _reply)=>{
|
|
71
|
-
if ((req.headers['user-agent'] || '').indexOf('Joplin') !== -1 && req.originalUrl.startsWith(_routes.WEBDAV_SPACES[_routes.WEBDAV_NS.WEBDAV].route)) {
|
|
72
|
-
req.headers['content-type'] = 'application/octet-stream';
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
56
|
/* INTERCEPTORS */ app.useGlobalInterceptors(new _nestjspino.LoggerErrorInterceptor(), new _common.ClassSerializerInterceptor(app.get(_core.Reflector), {
|
|
76
57
|
excludePrefixes: [
|
|
77
58
|
'_'
|
|
@@ -86,7 +67,7 @@ async function appBootstrap() {
|
|
|
86
67
|
prefixAvoidTrailingSlash: true
|
|
87
68
|
});
|
|
88
69
|
/* SECURITY */ await app.register(_helmet.default, {
|
|
89
|
-
contentSecurityPolicy: (0, _appconstants.CONTENT_SECURITY_POLICY)(_configenvironment.configuration.applications.files.onlyoffice.externalServer)
|
|
70
|
+
contentSecurityPolicy: (0, _appconstants.CONTENT_SECURITY_POLICY)(_configenvironment.configuration.applications.files.onlyoffice.externalServer, _configenvironment.configuration.applications.files.collabora.externalServer)
|
|
90
71
|
});
|
|
91
72
|
/* COOKIES */ // we use csrf secret to unsign csrf cookie
|
|
92
73
|
await app.register(_cookie.default, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../backend/src/app.bootstrap.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 fastifyCookie from '@fastify/cookie'\nimport fastifyHelmet from '@fastify/helmet'\nimport multipart from '@fastify/multipart'\nimport { ClassSerializerInterceptor, ValidationPipe } from '@nestjs/common'\nimport { NestFactory, Reflector } from '@nestjs/core'\nimport { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify'\nimport { FastifyRequest } from 'fastify'\nimport { Logger, LoggerErrorInterceptor } from 'nestjs-pino'\nimport { CONTENT_SECURITY_POLICY } from './app.constants'\nimport { AppModule } from './app.module'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../backend/src/app.bootstrap.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 fastifyCookie from '@fastify/cookie'\nimport fastifyHelmet from '@fastify/helmet'\nimport multipart from '@fastify/multipart'\nimport { ClassSerializerInterceptor, ValidationPipe } from '@nestjs/common'\nimport { NestFactory, Reflector } from '@nestjs/core'\nimport { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify'\nimport { FastifyInstance, FastifyRequest } from 'fastify'\nimport { Logger, LoggerErrorInterceptor } from 'nestjs-pino'\nimport { CONTENT_SECURITY_POLICY } from './app.constants'\nimport { AppModule } from './app.module'\nimport { bootstrapWebDAV } from './applications/webdav/utils/bootstrap'\nimport { IS_TEST_ENV, STATIC_PATH } from './configuration/config.constants'\nimport { configuration } from './configuration/config.environment'\nimport { WebSocketAdapter } from './infrastructure/websocket/adapters/web-socket.adapter'\n\nexport async function appBootstrap(): Promise<NestFastifyApplication> {\n /* APP */\n const fastifyAdapter = new FastifyAdapter({\n logger: false,\n trustProxy: configuration.server.trustProxy,\n routerOptions: {\n ignoreTrailingSlash: true,\n maxParamLength: 256\n },\n bodyLimit: 26214400 /* 25 MB */\n })\n const app: NestFastifyApplication = await NestFactory.create<NestFastifyApplication>(AppModule, fastifyAdapter, {\n bufferLogs: true\n })\n\n /* NestJS starts listening for shutdown hooks */\n app.enableShutdownHooks()\n\n /* Fastify instance */\n const fastifyInstance: FastifyInstance = fastifyAdapter.getInstance()\n\n /* LOGGER */\n app.useLogger(IS_TEST_ENV ? ['fatal'] : app.get(Logger))\n\n /* WEBDAV BOOTSTRAP RULES */\n bootstrapWebDAV(app, fastifyInstance)\n\n /* PARSER */\n // '*' body parser allow binary data as a stream (unlimited body size)\n fastifyInstance.addContentTypeParser('*', { bodyLimit: 0 }, (_req: FastifyRequest, _payload: FastifyRequest['raw'], done) => done(null))\n\n /* INTERCEPTORS */\n app.useGlobalInterceptors(\n new LoggerErrorInterceptor(),\n new ClassSerializerInterceptor(app.get(Reflector), {\n excludePrefixes: ['_']\n })\n )\n\n /* VALIDATION */\n app.useGlobalPipes(new ValidationPipe({ transform: true, whitelist: true }))\n\n /* STATIC */\n app.useStaticAssets({ root: STATIC_PATH, prefixAvoidTrailingSlash: true })\n\n /* SECURITY */\n await app.register(fastifyHelmet, {\n contentSecurityPolicy: CONTENT_SECURITY_POLICY(\n configuration.applications.files.onlyoffice.externalServer,\n configuration.applications.files.collabora.externalServer\n )\n })\n\n /* COOKIES */\n // we use csrf secret to unsign csrf cookie\n await app.register(fastifyCookie, {\n secret: configuration.auth.token.csrf.secret,\n parseOptions: {\n secure: 'auto',\n sameSite: configuration.auth.cookieSameSite,\n httpOnly: true\n }\n })\n\n /* UPLOAD */\n await app.register(multipart, {\n preservePath: true,\n limits: { parts: Infinity, fileSize: configuration.applications.files.maxUploadSize }\n })\n\n /* WEBSOCKET */\n if (!IS_TEST_ENV) {\n const webSocketAdapter = new WebSocketAdapter(app)\n await webSocketAdapter.initAdapter()\n app.useWebSocketAdapter(webSocketAdapter)\n }\n\n return app\n}\n"],"names":["appBootstrap","fastifyAdapter","FastifyAdapter","logger","trustProxy","configuration","server","routerOptions","ignoreTrailingSlash","maxParamLength","bodyLimit","app","NestFactory","create","AppModule","bufferLogs","enableShutdownHooks","fastifyInstance","getInstance","useLogger","IS_TEST_ENV","get","Logger","bootstrapWebDAV","addContentTypeParser","_req","_payload","done","useGlobalInterceptors","LoggerErrorInterceptor","ClassSerializerInterceptor","Reflector","excludePrefixes","useGlobalPipes","ValidationPipe","transform","whitelist","useStaticAssets","root","STATIC_PATH","prefixAvoidTrailingSlash","register","fastifyHelmet","contentSecurityPolicy","CONTENT_SECURITY_POLICY","applications","files","onlyoffice","externalServer","collabora","fastifyCookie","secret","auth","token","csrf","parseOptions","secure","sameSite","cookieSameSite","httpOnly","multipart","preservePath","limits","parts","Infinity","fileSize","maxUploadSize","webSocketAdapter","WebSocketAdapter","initAdapter","useWebSocketAdapter"],"mappings":"AAAA;;;;CAIC;;;;+BAiBqBA;;;eAAAA;;;+DAfI;+DACA;kEACJ;wBACqC;sBACpB;iCACgB;4BAER;8BACP;2BACd;2BACM;iCACS;mCACX;kCACG;;;;;;AAE1B,eAAeA;IACpB,OAAO,GACP,MAAMC,iBAAiB,IAAIC,+BAAc,CAAC;QACxCC,QAAQ;QACRC,YAAYC,gCAAa,CAACC,MAAM,CAACF,UAAU;QAC3CG,eAAe;YACbC,qBAAqB;YACrBC,gBAAgB;QAClB;QACAC,WAAW,SAAS,SAAS;IAC/B;IACA,MAAMC,MAA8B,MAAMC,iBAAW,CAACC,MAAM,CAAyBC,oBAAS,EAAEb,gBAAgB;QAC9Gc,YAAY;IACd;IAEA,8CAA8C,GAC9CJ,IAAIK,mBAAmB;IAEvB,oBAAoB,GACpB,MAAMC,kBAAmChB,eAAeiB,WAAW;IAEnE,UAAU,GACVP,IAAIQ,SAAS,CAACC,4BAAW,GAAG;QAAC;KAAQ,GAAGT,IAAIU,GAAG,CAACC,kBAAM;IAEtD,0BAA0B,GAC1BC,IAAAA,0BAAe,EAACZ,KAAKM;IAErB,UAAU,GACV,sEAAsE;IACtEA,gBAAgBO,oBAAoB,CAAC,KAAK;QAAEd,WAAW;IAAE,GAAG,CAACe,MAAsBC,UAAiCC,OAASA,KAAK;IAElI,gBAAgB,GAChBhB,IAAIiB,qBAAqB,CACvB,IAAIC,kCAAsB,IAC1B,IAAIC,kCAA0B,CAACnB,IAAIU,GAAG,CAACU,eAAS,GAAG;QACjDC,iBAAiB;YAAC;SAAI;IACxB;IAGF,cAAc,GACdrB,IAAIsB,cAAc,CAAC,IAAIC,sBAAc,CAAC;QAAEC,WAAW;QAAMC,WAAW;IAAK;IAEzE,UAAU,GACVzB,IAAI0B,eAAe,CAAC;QAAEC,MAAMC,4BAAW;QAAEC,0BAA0B;IAAK;IAExE,YAAY,GACZ,MAAM7B,IAAI8B,QAAQ,CAACC,eAAa,EAAE;QAChCC,uBAAuBC,IAAAA,qCAAuB,EAC5CvC,gCAAa,CAACwC,YAAY,CAACC,KAAK,CAACC,UAAU,CAACC,cAAc,EAC1D3C,gCAAa,CAACwC,YAAY,CAACC,KAAK,CAACG,SAAS,CAACD,cAAc;IAE7D;IAEA,WAAW,GACX,2CAA2C;IAC3C,MAAMrC,IAAI8B,QAAQ,CAACS,eAAa,EAAE;QAChCC,QAAQ9C,gCAAa,CAAC+C,IAAI,CAACC,KAAK,CAACC,IAAI,CAACH,MAAM;QAC5CI,cAAc;YACZC,QAAQ;YACRC,UAAUpD,gCAAa,CAAC+C,IAAI,CAACM,cAAc;YAC3CC,UAAU;QACZ;IACF;IAEA,UAAU,GACV,MAAMhD,IAAI8B,QAAQ,CAACmB,kBAAS,EAAE;QAC5BC,cAAc;QACdC,QAAQ;YAAEC,OAAOC;YAAUC,UAAU5D,gCAAa,CAACwC,YAAY,CAACC,KAAK,CAACoB,aAAa;QAAC;IACtF;IAEA,aAAa,GACb,IAAI,CAAC9C,4BAAW,EAAE;QAChB,MAAM+C,mBAAmB,IAAIC,kCAAgB,CAACzD;QAC9C,MAAMwD,iBAAiBE,WAAW;QAClC1D,IAAI2D,mBAAmB,CAACH;IAC1B;IAEA,OAAOxD;AACT"}
|
package/server/app.constants.js
CHANGED
|
@@ -29,12 +29,13 @@ _export(exports, {
|
|
|
29
29
|
const _appfunctions = require("./app.functions");
|
|
30
30
|
const VERSION = (0, _appfunctions.loadVersion)();
|
|
31
31
|
const USER_AGENT = `sync-in-server/${VERSION}`;
|
|
32
|
-
const CONTENT_SECURITY_POLICY = (onlyOfficeServer)=>({
|
|
32
|
+
const CONTENT_SECURITY_POLICY = (onlyOfficeServer, collaboraServer)=>({
|
|
33
33
|
useDefaults: false,
|
|
34
34
|
directives: {
|
|
35
35
|
defaultSrc: [
|
|
36
36
|
"'self'",
|
|
37
|
-
onlyOfficeServer || ''
|
|
37
|
+
onlyOfficeServer || '',
|
|
38
|
+
collaboraServer || ''
|
|
38
39
|
],
|
|
39
40
|
scriptSrc: [
|
|
40
41
|
"'self'",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../backend/src/app.constants.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 { loadVersion } from './app.functions'\n\nexport const VERSION = loadVersion()\nexport const USER_AGENT = `sync-in-server/${VERSION}`\nexport const CONTENT_SECURITY_POLICY = (onlyOfficeServer: string) => ({\n useDefaults: false,\n directives: {\n defaultSrc: [\"'self'\", onlyOfficeServer || ''],\n scriptSrc: [\"'self'\", \"'unsafe-inline'\", onlyOfficeServer || ''],\n styleSrc: [\"'self'\", \"'unsafe-inline'\"],\n imgSrc: [\"'self'\", 'data:'],\n fontSrc: [\"'self'\"]\n }\n})\n\nexport const CONNECT_ERROR_CODE = new Set(['ECONNREFUSED', 'ETIMEDOUT', 'ENOTFOUND'])\n"],"names":["CONNECT_ERROR_CODE","CONTENT_SECURITY_POLICY","USER_AGENT","VERSION","loadVersion","onlyOfficeServer","useDefaults","directives","defaultSrc","scriptSrc","styleSrc","imgSrc","fontSrc","Set"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAiBYA;eAAAA;;QAXAC;eAAAA;;QADAC;eAAAA;;QADAC;eAAAA;;;8BAFe;AAErB,MAAMA,UAAUC,IAAAA,yBAAW;AAC3B,MAAMF,aAAa,CAAC,eAAe,EAAEC,SAAS;AAC9C,MAAMF,0BAA0B,CAACI,
|
|
1
|
+
{"version":3,"sources":["../../backend/src/app.constants.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 { loadVersion } from './app.functions'\n\nexport const VERSION = loadVersion()\nexport const USER_AGENT = `sync-in-server/${VERSION}`\nexport const CONTENT_SECURITY_POLICY = (onlyOfficeServer: string, collaboraServer: string) => ({\n useDefaults: false,\n directives: {\n defaultSrc: [\"'self'\", onlyOfficeServer || '', collaboraServer || ''],\n scriptSrc: [\"'self'\", \"'unsafe-inline'\", onlyOfficeServer || ''],\n styleSrc: [\"'self'\", \"'unsafe-inline'\"],\n imgSrc: [\"'self'\", 'data:'],\n fontSrc: [\"'self'\"]\n }\n})\n\nexport const CONNECT_ERROR_CODE = new Set(['ECONNREFUSED', 'ETIMEDOUT', 'ENOTFOUND'])\n"],"names":["CONNECT_ERROR_CODE","CONTENT_SECURITY_POLICY","USER_AGENT","VERSION","loadVersion","onlyOfficeServer","collaboraServer","useDefaults","directives","defaultSrc","scriptSrc","styleSrc","imgSrc","fontSrc","Set"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAiBYA;eAAAA;;QAXAC;eAAAA;;QADAC;eAAAA;;QADAC;eAAAA;;;8BAFe;AAErB,MAAMA,UAAUC,IAAAA,yBAAW;AAC3B,MAAMF,aAAa,CAAC,eAAe,EAAEC,SAAS;AAC9C,MAAMF,0BAA0B,CAACI,kBAA0BC,kBAA6B,CAAA;QAC7FC,aAAa;QACbC,YAAY;YACVC,YAAY;gBAAC;gBAAUJ,oBAAoB;gBAAIC,mBAAmB;aAAG;YACrEI,WAAW;gBAAC;gBAAU;gBAAmBL,oBAAoB;aAAG;YAChEM,UAAU;gBAAC;gBAAU;aAAkB;YACvCC,QAAQ;gBAAC;gBAAU;aAAQ;YAC3BC,SAAS;gBAAC;aAAS;QACrB;IACF,CAAA;AAEO,MAAMb,qBAAqB,IAAIc,IAAI;IAAC;IAAgB;IAAa;CAAY"}
|
|
@@ -132,16 +132,12 @@ let CommentsQueries = class CommentsQueries {
|
|
|
132
132
|
file: {
|
|
133
133
|
name: (0, _drizzleorm.sql)`IF (${_filesschema.files.id} = ${_spacesrootsschema.spacesRoots.fileId}, ${_spacesrootsschema.spacesRoots.name}, ${_filesschema.files.name})`.as('name'),
|
|
134
134
|
path: (0, _drizzleorm.sql)`
|
|
135
|
-
CONCAT_WS('/',
|
|
136
|
-
|
|
135
|
+
CONCAT_WS('/',
|
|
136
|
+
IF (${_filesschema.files.inTrash} = 0, '${_drizzleorm.sql.raw(_spaces.SPACE_REPOSITORY.FILES)}', '${_drizzleorm.sql.raw(_spaces.SPACE_REPOSITORY.TRASH)}'),
|
|
137
|
+
IF (${_filesschema.files.ownerId} = ${userId}, '${_drizzleorm.sql.raw(_spaces.SPACE_ALIAS.PERSONAL)}', ${_spacesschema.spaces.alias}),
|
|
137
138
|
IF (${spaceRootFile.id} IS NOT NULL,
|
|
138
|
-
IF (${_filesschema.files.id} = ${spaceRootFile.id}, NULL, REGEXP_REPLACE(${_filesschema.files.path}, ${(0, _filesschema.filePathSQL)(spaceRootFile)}, ${_spacesrootsschema.spacesRoots.alias})),
|
|
139
|
-
NULLIF(
|
|
140
|
-
CONCAT_WS('/',
|
|
141
|
-
IF (${_filesschema.files.spaceExternalRootId} = ${_spacesrootsschema.spacesRoots.id}, ${_spacesrootsschema.spacesRoots.alias}, NULL),
|
|
142
|
-
IF (${_filesschema.files.path} = '.', NULL, ${_filesschema.files.path})
|
|
143
|
-
)
|
|
144
|
-
, '')
|
|
139
|
+
IF (${_filesschema.files.id} = ${spaceRootFile.id}, NULL, IF (${_filesschema.files.path} = '.', NULL, REGEXP_REPLACE(${_filesschema.files.path}, ${(0, _filesschema.filePathSQL)(spaceRootFile)}, ${_spacesrootsschema.spacesRoots.alias}))),
|
|
140
|
+
NULLIF(CONCAT_WS('/', IF (${_filesschema.files.spaceExternalRootId} = ${_spacesrootsschema.spacesRoots.id}, ${_spacesrootsschema.spacesRoots.alias}, NULL), IF (${_filesschema.files.path} = '.', NULL, ${_filesschema.files.path})), '')
|
|
145
141
|
)
|
|
146
142
|
)`.as('path'),
|
|
147
143
|
mime: _filesschema.files.mime,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/comments/services/comments-queries.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 { Inject, Injectable } from '@nestjs/common'\nimport { and, desc, eq, getTableColumns, inArray, isNotNull, isNull, ne, or, SelectedFields, SQL, sql } from 'drizzle-orm'\nimport { alias, union } from 'drizzle-orm/mysql-core'\nimport { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'\nimport type { DBSchema } from '../../../infrastructure/database/interfaces/database.interface'\nimport { dbCheckAffectedRows, dbGetInsertedId } from '../../../infrastructure/database/utils'\nimport { filePathSQL, files } from '../../files/schemas/files.schema'\nimport { UserMailNotification } from '../../notifications/interfaces/user-mail-notification.interface'\nimport { shares } from '../../shares/schemas/shares.schema'\nimport { SharesQueries } from '../../shares/services/shares-queries.service'\nimport { SPACE_ALIAS, SPACE_REPOSITORY } from '../../spaces/constants/spaces'\nimport { spacesRoots } from '../../spaces/schemas/spaces-roots.schema'\nimport { spaces } from '../../spaces/schemas/spaces.schema'\nimport { SpacesQueries } from '../../spaces/services/spaces-queries.service'\nimport { UserModel } from '../../users/models/user.model'\nimport { userFullNameSQL, users } from '../../users/schemas/users.schema'\nimport { CommentRecent } from '../interfaces/comment-recent.interface'\nimport { Comment } from '../schemas/comment.interface'\nimport { comments } from '../schemas/comments.schema'\n\n@Injectable()\nexport class CommentsQueries {\n constructor(\n @Inject(DB_TOKEN_PROVIDER) private readonly db: DBSchema,\n private readonly spacesQueries: SpacesQueries,\n private readonly sharesQueries: SharesQueries\n ) {}\n\n getComments(userId: number, isFileOwner: boolean, fromFileId?: number, fromCommentId?: number, limit: number = undefined): Promise<Comment[]> {\n let where: SQL\n if (fromFileId) {\n where = eq(comments.fileId, fromFileId)\n } else if (fromCommentId) {\n where = eq(comments.id, fromCommentId)\n limit = 1\n } else {\n throw Error('fromFileId or fromCommentId must be provided')\n }\n return this.db\n .select({\n ...getTableColumns(comments),\n author: { login: users.login, fullName: userFullNameSQL(users), email: users.email, isAuthor: sql`${users.id} = ${userId}`.mapWith(Boolean) },\n isFileOwner: sql`${+isFileOwner}`.mapWith(Boolean)\n })\n .from(comments)\n .leftJoin(users, eq(users.id, comments.userId))\n .where(where)\n .orderBy(desc(comments.id))\n .limit(limit)\n }\n\n async createComment(userId: number, fileId: number, content: string): Promise<Comment['id']> {\n return dbGetInsertedId(await this.db.insert(comments).values({ userId: userId, fileId: fileId, content: content } as Comment))\n }\n\n async updateComment(userId: number, commentId: number, fileId: number, content: string): Promise<boolean> {\n return dbCheckAffectedRows(\n await this.db\n .update(comments)\n .set({ content: content } as Comment)\n .where(and(eq(comments.userId, userId), eq(comments.id, commentId), eq(comments.fileId, fileId)))\n .limit(1),\n 1,\n false\n )\n }\n\n async deleteComment(userId: number, commentId: number, fileId: number, isFileOwner: boolean): Promise<boolean> {\n return dbCheckAffectedRows(\n await this.db\n .delete(comments)\n .where(and(or(eq(sql`${+isFileOwner}`, 1), eq(comments.userId, userId)), eq(comments.id, commentId), eq(comments.fileId, fileId)))\n .limit(1),\n 1,\n false\n )\n }\n\n membersToNotify(fromUserId: number, fileId: number): Promise<UserMailNotification[]> {\n /* lists the owner of the file and the users who have commented on it */\n const select: UserMailNotification | SelectedFields<any, any> = {\n id: users.id,\n email: users.email,\n language: users.language,\n notification: users.notification\n }\n const fromComments = this.db\n .select(select)\n .from(comments)\n .innerJoin(users, and(eq(users.id, comments.userId), ne(users.id, fromUserId)))\n .where(eq(comments.fileId, fileId))\n const fromFile = this.db\n .select(select)\n .from(files)\n .innerJoin(users, and(eq(users.id, files.ownerId), ne(users.id, fromUserId)))\n .where(eq(files.id, fileId))\n return union(fromComments, fromFile) as any\n }\n\n getRecentsFromShares(userId: number, shareIds: number[], limit: number) {\n const shareFile: any = alias(files, 'shareFile')\n return this.db\n .select({\n id: comments.id,\n content: comments.content,\n modifiedAt: comments.modifiedAt,\n author: { login: users.login, fullName: userFullNameSQL(users).as('fullName'), email: users.email },\n file: {\n name: sql<string>`IF (${files.id} = ${shareFile.id}, ${shares.name}, ${files.name})`.as('name'),\n path: sql<string>`\n CONCAT_WS('/', '${sql.raw(SPACE_REPOSITORY.SHARES)}',\n IF (${shareFile.id} IS NOT NULL,\n IF (${files.id} = ${shareFile.id}, NULL, REGEXP_REPLACE(${files.path}, ${filePathSQL(shareFile)}, ${shares.alias})),\n CONCAT_WS('/', ${shares.alias}, IF (${files.path} = '.', NULL, ${files.path}))\n )\n )`.as('path'),\n mime: files.mime,\n inTrash: sql<number>`0`.as('inTrash'),\n fromSpace: sql<number>`0`.as('fromSpace'),\n fromShare: sql<number>`1`.as('fromShare')\n }\n } satisfies CommentRecent | SelectedFields<any, any>)\n .from(shares)\n .leftJoin(shareFile, eq(shareFile.id, shares.fileId))\n .leftJoin(spaces, eq(spaces.id, shareFile.spaceId))\n .leftJoin(spacesRoots, eq(spacesRoots.spaceId, spaces.id))\n .leftJoin(\n files,\n or(\n // file linked to the share\n eq(files.id, shareFile.id),\n // all files with an external share id\n and(isNull(shareFile.id), eq(files.shareExternalId, shares.id)),\n // all files under the share\n and(\n isNotNull(shareFile.id),\n eq(shareFile.isDir, true),\n sql`${files.spaceId} <=> ${shareFile.spaceId}`,\n sql`${files.ownerId} <=> ${shareFile.ownerId}`,\n sql`${files.spaceExternalRootId} <=> ${shareFile.spaceExternalRootId}`,\n sql`${files.shareExternalId} <=> ${shareFile.shareExternalId}`,\n sql`${files.path} REGEXP CONCAT('^', IF(${shareFile.path} = '.', CONCAT(${shareFile.name}, '(/.*|)$'), CONCAT(${shareFile.path}, '/')))`\n )\n )\n )\n .innerJoin(comments, and(eq(comments.fileId, files.id), ne(comments.userId, userId)))\n .innerJoin(users, eq(users.id, comments.userId))\n .where(inArray(shares.id, shareIds))\n .groupBy(comments.id)\n .orderBy(desc(comments.id))\n .limit(limit)\n }\n\n getRecentsFromSpaces(userId: number, spaceIds: number[], limit: number) {\n const spaceRootFile: any = alias(files, 'spaceRootFile')\n return this.db\n .select({\n id: comments.id,\n content: comments.content,\n modifiedAt: comments.modifiedAt,\n author: { login: users.login, fullName: userFullNameSQL(users).as('fullName'), email: users.email },\n file: {\n name: sql<string>`IF (${files.id} = ${spacesRoots.fileId}, ${spacesRoots.name}, ${files.name})`.as('name'),\n path: sql<string>`\n CONCAT_WS('/', IF (${files.inTrash} = 0, '${sql.raw(SPACE_REPOSITORY.FILES)}', '${sql.raw(SPACE_REPOSITORY.TRASH)}'), \n IF (${files.ownerId} = ${userId}, '${sql.raw(SPACE_ALIAS.PERSONAL)}', ${spaces.alias}),\n IF (${spaceRootFile.id} IS NOT NULL,\n IF (${files.id} = ${spaceRootFile.id}, NULL, REGEXP_REPLACE(${files.path}, ${filePathSQL(spaceRootFile)}, ${spacesRoots.alias})),\n NULLIF(\n CONCAT_WS('/', \n IF (${files.spaceExternalRootId} = ${spacesRoots.id}, ${spacesRoots.alias}, NULL), \n IF (${files.path} = '.', NULL, ${files.path})\n )\n , '')\n )\n )`.as('path'),\n mime: files.mime,\n inTrash: sql<number>`${files.inTrash}`.as('inTrash'),\n fromSpace: sql<number>`IF (${files.ownerId} = ${userId}, 0, 1)`.as('fromSpace'),\n fromShare: sql<number>`0`.as('fromShare')\n }\n } satisfies CommentRecent | SelectedFields<any, any>)\n .from(spaces)\n .leftJoin(spacesRoots, eq(spacesRoots.spaceId, spaces.id))\n .leftJoin(spaceRootFile, eq(spaceRootFile.id, spacesRoots.fileId))\n .leftJoin(\n files,\n or(\n // all files from user\n eq(files.ownerId, userId),\n // all files from spaces\n eq(files.spaceId, spaces.id),\n // all files from space roots\n eq(files.id, spacesRoots.fileId),\n // all files under the space roots\n and(\n isNotNull(spaceRootFile.id),\n eq(spaceRootFile.isDir, true),\n sql`${files.ownerId} <=> ${spaceRootFile.ownerId}`,\n sql`${files.path} REGEXP CONCAT('^', IF(${spaceRootFile.path} = '.', CONCAT(${spaceRootFile.name}, '(/.*|)$'), CONCAT(${spaceRootFile.path}, '/')))`\n )\n )\n )\n .innerJoin(comments, and(eq(comments.fileId, files.id), ne(comments.userId, userId)))\n .innerJoin(users, eq(users.id, comments.userId))\n .where(inArray(spaces.id, spaceIds))\n .groupBy(comments.id)\n .orderBy(desc(comments.id))\n .limit(limit)\n }\n\n async getRecentsFromUser(user: UserModel, limit = 10): Promise<CommentRecent[]> {\n const [spaceIds, shareIds] = await Promise.all([this.spacesQueries.spaceIds(user.id), this.sharesQueries.shareIds(user.id, +user.isAdmin)])\n const fromSpaces = this.getRecentsFromSpaces(user.id, spaceIds, limit * 2)\n const fromShares = this.getRecentsFromShares(user.id, shareIds, limit * 2)\n const unionAlias = union(fromSpaces, fromShares).as('unionAlias')\n return this.db.select().from(unionAlias).groupBy(unionAlias.id).orderBy(desc(unionAlias.id)).limit(limit)\n }\n}\n"],"names":["CommentsQueries","getComments","userId","isFileOwner","fromFileId","fromCommentId","limit","undefined","where","eq","comments","fileId","id","Error","db","select","getTableColumns","author","login","users","fullName","userFullNameSQL","email","isAuthor","sql","mapWith","Boolean","from","leftJoin","orderBy","desc","createComment","content","dbGetInsertedId","insert","values","updateComment","commentId","dbCheckAffectedRows","update","set","and","deleteComment","delete","or","membersToNotify","fromUserId","language","notification","fromComments","innerJoin","ne","fromFile","files","ownerId","union","getRecentsFromShares","shareIds","shareFile","alias","modifiedAt","as","file","name","shares","path","raw","SPACE_REPOSITORY","SHARES","filePathSQL","mime","inTrash","fromSpace","fromShare","spaces","spaceId","spacesRoots","isNull","shareExternalId","isNotNull","isDir","spaceExternalRootId","inArray","groupBy","getRecentsFromSpaces","spaceIds","spaceRootFile","FILES","TRASH","SPACE_ALIAS","PERSONAL","getRecentsFromUser","user","Promise","all","spacesQueries","sharesQueries","isAdmin","fromSpaces","fromShares","unionAlias"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/comments/services/comments-queries.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 { Inject, Injectable } from '@nestjs/common'\nimport { and, desc, eq, getTableColumns, inArray, isNotNull, isNull, ne, or, SelectedFields, SQL, sql } from 'drizzle-orm'\nimport { alias, union } from 'drizzle-orm/mysql-core'\nimport { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'\nimport type { DBSchema } from '../../../infrastructure/database/interfaces/database.interface'\nimport { dbCheckAffectedRows, dbGetInsertedId } from '../../../infrastructure/database/utils'\nimport { filePathSQL, files } from '../../files/schemas/files.schema'\nimport { UserMailNotification } from '../../notifications/interfaces/user-mail-notification.interface'\nimport { shares } from '../../shares/schemas/shares.schema'\nimport { SharesQueries } from '../../shares/services/shares-queries.service'\nimport { SPACE_ALIAS, SPACE_REPOSITORY } from '../../spaces/constants/spaces'\nimport { spacesRoots } from '../../spaces/schemas/spaces-roots.schema'\nimport { spaces } from '../../spaces/schemas/spaces.schema'\nimport { SpacesQueries } from '../../spaces/services/spaces-queries.service'\nimport { UserModel } from '../../users/models/user.model'\nimport { userFullNameSQL, users } from '../../users/schemas/users.schema'\nimport { CommentRecent } from '../interfaces/comment-recent.interface'\nimport { Comment } from '../schemas/comment.interface'\nimport { comments } from '../schemas/comments.schema'\n\n@Injectable()\nexport class CommentsQueries {\n constructor(\n @Inject(DB_TOKEN_PROVIDER) private readonly db: DBSchema,\n private readonly spacesQueries: SpacesQueries,\n private readonly sharesQueries: SharesQueries\n ) {}\n\n getComments(userId: number, isFileOwner: boolean, fromFileId?: number, fromCommentId?: number, limit: number = undefined): Promise<Comment[]> {\n let where: SQL\n if (fromFileId) {\n where = eq(comments.fileId, fromFileId)\n } else if (fromCommentId) {\n where = eq(comments.id, fromCommentId)\n limit = 1\n } else {\n throw Error('fromFileId or fromCommentId must be provided')\n }\n return this.db\n .select({\n ...getTableColumns(comments),\n author: { login: users.login, fullName: userFullNameSQL(users), email: users.email, isAuthor: sql`${users.id} = ${userId}`.mapWith(Boolean) },\n isFileOwner: sql`${+isFileOwner}`.mapWith(Boolean)\n })\n .from(comments)\n .leftJoin(users, eq(users.id, comments.userId))\n .where(where)\n .orderBy(desc(comments.id))\n .limit(limit)\n }\n\n async createComment(userId: number, fileId: number, content: string): Promise<Comment['id']> {\n return dbGetInsertedId(await this.db.insert(comments).values({ userId: userId, fileId: fileId, content: content } as Comment))\n }\n\n async updateComment(userId: number, commentId: number, fileId: number, content: string): Promise<boolean> {\n return dbCheckAffectedRows(\n await this.db\n .update(comments)\n .set({ content: content } as Comment)\n .where(and(eq(comments.userId, userId), eq(comments.id, commentId), eq(comments.fileId, fileId)))\n .limit(1),\n 1,\n false\n )\n }\n\n async deleteComment(userId: number, commentId: number, fileId: number, isFileOwner: boolean): Promise<boolean> {\n return dbCheckAffectedRows(\n await this.db\n .delete(comments)\n .where(and(or(eq(sql`${+isFileOwner}`, 1), eq(comments.userId, userId)), eq(comments.id, commentId), eq(comments.fileId, fileId)))\n .limit(1),\n 1,\n false\n )\n }\n\n membersToNotify(fromUserId: number, fileId: number): Promise<UserMailNotification[]> {\n /* lists the owner of the file and the users who have commented on it */\n const select: UserMailNotification | SelectedFields<any, any> = {\n id: users.id,\n email: users.email,\n language: users.language,\n notification: users.notification\n }\n const fromComments = this.db\n .select(select)\n .from(comments)\n .innerJoin(users, and(eq(users.id, comments.userId), ne(users.id, fromUserId)))\n .where(eq(comments.fileId, fileId))\n const fromFile = this.db\n .select(select)\n .from(files)\n .innerJoin(users, and(eq(users.id, files.ownerId), ne(users.id, fromUserId)))\n .where(eq(files.id, fileId))\n return union(fromComments, fromFile) as any\n }\n\n getRecentsFromShares(userId: number, shareIds: number[], limit: number) {\n const shareFile: any = alias(files, 'shareFile')\n return this.db\n .select({\n id: comments.id,\n content: comments.content,\n modifiedAt: comments.modifiedAt,\n author: { login: users.login, fullName: userFullNameSQL(users).as('fullName'), email: users.email },\n file: {\n name: sql<string>`IF (${files.id} = ${shareFile.id}, ${shares.name}, ${files.name})`.as('name'),\n path: sql<string>`\n CONCAT_WS('/', '${sql.raw(SPACE_REPOSITORY.SHARES)}',\n IF (${shareFile.id} IS NOT NULL,\n IF (${files.id} = ${shareFile.id}, NULL, REGEXP_REPLACE(${files.path}, ${filePathSQL(shareFile)}, ${shares.alias})),\n CONCAT_WS('/', ${shares.alias}, IF (${files.path} = '.', NULL, ${files.path}))\n )\n )`.as('path'),\n mime: files.mime,\n inTrash: sql<number>`0`.as('inTrash'),\n fromSpace: sql<number>`0`.as('fromSpace'),\n fromShare: sql<number>`1`.as('fromShare')\n }\n } satisfies CommentRecent | SelectedFields<any, any>)\n .from(shares)\n .leftJoin(shareFile, eq(shareFile.id, shares.fileId))\n .leftJoin(spaces, eq(spaces.id, shareFile.spaceId))\n .leftJoin(spacesRoots, eq(spacesRoots.spaceId, spaces.id))\n .leftJoin(\n files,\n or(\n // file linked to the share\n eq(files.id, shareFile.id),\n // all files with an external share id\n and(isNull(shareFile.id), eq(files.shareExternalId, shares.id)),\n // all files under the share\n and(\n isNotNull(shareFile.id),\n eq(shareFile.isDir, true),\n sql`${files.spaceId} <=> ${shareFile.spaceId}`,\n sql`${files.ownerId} <=> ${shareFile.ownerId}`,\n sql`${files.spaceExternalRootId} <=> ${shareFile.spaceExternalRootId}`,\n sql`${files.shareExternalId} <=> ${shareFile.shareExternalId}`,\n sql`${files.path} REGEXP CONCAT('^', IF(${shareFile.path} = '.', CONCAT(${shareFile.name}, '(/.*|)$'), CONCAT(${shareFile.path}, '/')))`\n )\n )\n )\n .innerJoin(comments, and(eq(comments.fileId, files.id), ne(comments.userId, userId)))\n .innerJoin(users, eq(users.id, comments.userId))\n .where(inArray(shares.id, shareIds))\n .groupBy(comments.id)\n .orderBy(desc(comments.id))\n .limit(limit)\n }\n\n getRecentsFromSpaces(userId: number, spaceIds: number[], limit: number) {\n const spaceRootFile: any = alias(files, 'spaceRootFile')\n return this.db\n .select({\n id: comments.id,\n content: comments.content,\n modifiedAt: comments.modifiedAt,\n author: { login: users.login, fullName: userFullNameSQL(users).as('fullName'), email: users.email },\n file: {\n name: sql<string>`IF (${files.id} = ${spacesRoots.fileId}, ${spacesRoots.name}, ${files.name})`.as('name'),\n path: sql<string>`\n CONCAT_WS('/', \n IF (${files.inTrash} = 0, '${sql.raw(SPACE_REPOSITORY.FILES)}', '${sql.raw(SPACE_REPOSITORY.TRASH)}'), \n IF (${files.ownerId} = ${userId}, '${sql.raw(SPACE_ALIAS.PERSONAL)}', ${spaces.alias}),\n IF (${spaceRootFile.id} IS NOT NULL,\n IF (${files.id} = ${spaceRootFile.id}, NULL, IF (${files.path} = '.', NULL, REGEXP_REPLACE(${files.path}, ${filePathSQL(spaceRootFile)}, ${spacesRoots.alias}))),\n NULLIF(CONCAT_WS('/', IF (${files.spaceExternalRootId} = ${spacesRoots.id}, ${spacesRoots.alias}, NULL), IF (${files.path} = '.', NULL, ${files.path})), '')\n )\n )`.as('path'),\n mime: files.mime,\n inTrash: sql<number>`${files.inTrash}`.as('inTrash'),\n fromSpace: sql<number>`IF (${files.ownerId} = ${userId}, 0, 1)`.as('fromSpace'),\n fromShare: sql<number>`0`.as('fromShare')\n }\n } satisfies CommentRecent | SelectedFields<any, any>)\n .from(spaces)\n .leftJoin(spacesRoots, eq(spacesRoots.spaceId, spaces.id))\n .leftJoin(spaceRootFile, eq(spaceRootFile.id, spacesRoots.fileId))\n .leftJoin(\n files,\n or(\n // all files from user\n eq(files.ownerId, userId),\n // all files from spaces\n eq(files.spaceId, spaces.id),\n // all files from space roots\n eq(files.id, spacesRoots.fileId),\n // all files under the space roots\n and(\n isNotNull(spaceRootFile.id),\n eq(spaceRootFile.isDir, true),\n sql`${files.ownerId} <=> ${spaceRootFile.ownerId}`,\n sql`${files.path} REGEXP CONCAT('^', IF(${spaceRootFile.path} = '.', CONCAT(${spaceRootFile.name}, '(/.*|)$'), CONCAT(${spaceRootFile.path}, '/')))`\n )\n )\n )\n .innerJoin(comments, and(eq(comments.fileId, files.id), ne(comments.userId, userId)))\n .innerJoin(users, eq(users.id, comments.userId))\n .where(inArray(spaces.id, spaceIds))\n .groupBy(comments.id)\n .orderBy(desc(comments.id))\n .limit(limit)\n }\n\n async getRecentsFromUser(user: UserModel, limit = 10): Promise<CommentRecent[]> {\n const [spaceIds, shareIds] = await Promise.all([this.spacesQueries.spaceIds(user.id), this.sharesQueries.shareIds(user.id, +user.isAdmin)])\n const fromSpaces = this.getRecentsFromSpaces(user.id, spaceIds, limit * 2)\n const fromShares = this.getRecentsFromShares(user.id, shareIds, limit * 2)\n const unionAlias = union(fromSpaces, fromShares).as('unionAlias')\n return this.db.select().from(unionAlias).groupBy(unionAlias.id).orderBy(desc(unionAlias.id)).limit(limit)\n }\n}\n"],"names":["CommentsQueries","getComments","userId","isFileOwner","fromFileId","fromCommentId","limit","undefined","where","eq","comments","fileId","id","Error","db","select","getTableColumns","author","login","users","fullName","userFullNameSQL","email","isAuthor","sql","mapWith","Boolean","from","leftJoin","orderBy","desc","createComment","content","dbGetInsertedId","insert","values","updateComment","commentId","dbCheckAffectedRows","update","set","and","deleteComment","delete","or","membersToNotify","fromUserId","language","notification","fromComments","innerJoin","ne","fromFile","files","ownerId","union","getRecentsFromShares","shareIds","shareFile","alias","modifiedAt","as","file","name","shares","path","raw","SPACE_REPOSITORY","SHARES","filePathSQL","mime","inTrash","fromSpace","fromShare","spaces","spaceId","spacesRoots","isNull","shareExternalId","isNotNull","isDir","spaceExternalRootId","inArray","groupBy","getRecentsFromSpaces","spaceIds","spaceRootFile","FILES","TRASH","SPACE_ALIAS","PERSONAL","getRecentsFromUser","user","Promise","all","spacesQueries","sharesQueries","isAdmin","fromSpaces","fromShares","unionAlias"],"mappings":"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"}
|
|
@@ -23,9 +23,6 @@ _export(exports, {
|
|
|
23
23
|
get CACHE_LOCK_PREFIX () {
|
|
24
24
|
return CACHE_LOCK_PREFIX;
|
|
25
25
|
},
|
|
26
|
-
get CACHE_ONLY_OFFICE () {
|
|
27
|
-
return CACHE_ONLY_OFFICE;
|
|
28
|
-
},
|
|
29
26
|
get CACHE_TASK_PREFIX () {
|
|
30
27
|
return CACHE_TASK_PREFIX;
|
|
31
28
|
},
|
|
@@ -39,7 +36,7 @@ const CACHE_TASK_TTL = 86400// one day
|
|
|
39
36
|
const CACHE_LOCK_PREFIX = 'flock';
|
|
40
37
|
const CACHE_LOCK_DEFAULT_TTL = 28800// 8 hours in seconds
|
|
41
38
|
;
|
|
42
|
-
const CACHE_LOCK_FILE_TTL = 3600
|
|
43
|
-
|
|
39
|
+
const CACHE_LOCK_FILE_TTL = 3600// cache only office = `office|${fileId}` => docKey
|
|
40
|
+
;
|
|
44
41
|
|
|
45
42
|
//# sourceMappingURL=cache.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/files/constants/cache.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\n// cache task key = `ftask-$(userId}-${taskId}` => FileTask\nexport const CACHE_TASK_PREFIX = 'ftask' as const\nexport const CACHE_TASK_TTL = 86400 as const // one day\n// cache token key = `flock|token?:${uuid}|path:${path}|ownerId?:${number}|spaceId?:${number}|...props` => FileLock\nexport const CACHE_LOCK_PREFIX = 'flock' as const\nexport const CACHE_LOCK_DEFAULT_TTL = 28800 as const // 8 hours in seconds\nexport const CACHE_LOCK_FILE_TTL = 3600 as const\n// cache only office = `office|${fileId}` => docKey\
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/files/constants/cache.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\n// cache task key = `ftask-$(userId}-${taskId}` => FileTask\nexport const CACHE_TASK_PREFIX = 'ftask' as const\nexport const CACHE_TASK_TTL = 86400 as const // one day\n// cache token key = `flock|token?:${uuid}|path:${path}|ownerId?:${number}|spaceId?:${number}|...props` => FileLock\nexport const CACHE_LOCK_PREFIX = 'flock' as const\nexport const CACHE_LOCK_DEFAULT_TTL = 28800 as const // 8 hours in seconds\nexport const CACHE_LOCK_FILE_TTL = 3600 as const\n// cache only office = `office|${fileId}` => docKey\n"],"names":["CACHE_LOCK_DEFAULT_TTL","CACHE_LOCK_FILE_TTL","CACHE_LOCK_PREFIX","CACHE_TASK_PREFIX","CACHE_TASK_TTL"],"mappings":"AAAA;;;;CAIC,GAED,2DAA2D;;;;;;;;;;;;QAK9CA;eAAAA;;QACAC;eAAAA;;QAFAC;eAAAA;;QAHAC;eAAAA;;QACAC;eAAAA;;;AADN,MAAMD,oBAAoB;AAC1B,MAAMC,iBAAiB,KAAe,UAAU;;AAEhD,MAAMF,oBAAoB;AAC1B,MAAMF,yBAAyB,KAAe,qBAAqB;;AACnE,MAAMC,sBAAsB,IACnC,mDAAmD"}
|
|
@@ -16,6 +16,9 @@ _export(exports, {
|
|
|
16
16
|
get COMPRESSION_EXTENSION () {
|
|
17
17
|
return COMPRESSION_EXTENSION;
|
|
18
18
|
},
|
|
19
|
+
get DEFAULT_CHECKSUM_ALGORITHM () {
|
|
20
|
+
return DEFAULT_CHECKSUM_ALGORITHM;
|
|
21
|
+
},
|
|
19
22
|
get DEFAULT_HIGH_WATER_MARK () {
|
|
20
23
|
return DEFAULT_HIGH_WATER_MARK;
|
|
21
24
|
},
|
|
@@ -26,6 +29,7 @@ _export(exports, {
|
|
|
26
29
|
return EXTRA_MIMES_TYPE;
|
|
27
30
|
}
|
|
28
31
|
});
|
|
32
|
+
const DEFAULT_CHECKSUM_ALGORITHM = 'sha512-256';
|
|
29
33
|
const DEFAULT_HIGH_WATER_MARK = 1024 * 1024;
|
|
30
34
|
const DEFAULT_MIME_TYPE = 'application/octet-stream';
|
|
31
35
|
const EXTRA_MIMES_TYPE = new Map([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/files/constants/files.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nexport const DEFAULT_HIGH_WATER_MARK = 1024 * 1024\nexport const DEFAULT_MIME_TYPE = 'application/octet-stream'\nexport const EXTRA_MIMES_TYPE = new Map([\n ['.ts', 'text-typescript'],\n ['.py', 'text-x-python'],\n ['.tgz', 'application-gzip'],\n ['.gz', 'application-gzip'],\n ['.gzip', 'application-gzip']\n])\nexport const COMPRESSION_EXTENSION = new Map([\n ['.zip', 'zip'],\n ['.gzip', 'gzip'],\n ['.tgz', 'tgz'],\n ['.gz', 'tgz'],\n ['.tar.gz', 'tgz'],\n ['.tar', 'tar']\n])\n"],"names":["COMPRESSION_EXTENSION","DEFAULT_HIGH_WATER_MARK","DEFAULT_MIME_TYPE","EXTRA_MIMES_TYPE","Map"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/files/constants/files.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nexport const DEFAULT_CHECKSUM_ALGORITHM = 'sha512-256'\nexport const DEFAULT_HIGH_WATER_MARK = 1024 * 1024\nexport const DEFAULT_MIME_TYPE = 'application/octet-stream'\nexport const EXTRA_MIMES_TYPE = new Map([\n ['.ts', 'text-typescript'],\n ['.py', 'text-x-python'],\n ['.tgz', 'application-gzip'],\n ['.gz', 'application-gzip'],\n ['.gzip', 'application-gzip']\n])\nexport const COMPRESSION_EXTENSION = new Map([\n ['.zip', 'zip'],\n ['.gzip', 'gzip'],\n ['.tgz', 'tgz'],\n ['.gz', 'tgz'],\n ['.tar.gz', 'tgz'],\n ['.tar', 'tar']\n])\n"],"names":["COMPRESSION_EXTENSION","DEFAULT_CHECKSUM_ALGORITHM","DEFAULT_HIGH_WATER_MARK","DEFAULT_MIME_TYPE","EXTRA_MIMES_TYPE","Map"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAYYA;eAAAA;;QAVAC;eAAAA;;QACAC;eAAAA;;QACAC;eAAAA;;QACAC;eAAAA;;;AAHN,MAAMH,6BAA6B;AACnC,MAAMC,0BAA0B,OAAO;AACvC,MAAMC,oBAAoB;AAC1B,MAAMC,mBAAmB,IAAIC,IAAI;IACtC;QAAC;QAAO;KAAkB;IAC1B;QAAC;QAAO;KAAgB;IACxB;QAAC;QAAQ;KAAmB;IAC5B;QAAC;QAAO;KAAmB;IAC3B;QAAC;QAAS;KAAmB;CAC9B;AACM,MAAML,wBAAwB,IAAIK,IAAI;IAC3C;QAAC;QAAQ;KAAM;IACf;QAAC;QAAS;KAAO;IACjB;QAAC;QAAQ;KAAM;IACf;QAAC;QAAO;KAAM;IACd;QAAC;QAAW;KAAM;IAClB;QAAC;QAAQ;KAAM;CAChB"}
|
|
@@ -18,6 +18,9 @@ _export(exports, {
|
|
|
18
18
|
},
|
|
19
19
|
get FILE_OPERATION () {
|
|
20
20
|
return FILE_OPERATION;
|
|
21
|
+
},
|
|
22
|
+
get FORCE_AS_FILE_OWNER () {
|
|
23
|
+
return FORCE_AS_FILE_OWNER;
|
|
21
24
|
}
|
|
22
25
|
});
|
|
23
26
|
var FILE_OPERATION = /*#__PURE__*/ function(FILE_OPERATION) {
|
|
@@ -42,5 +45,6 @@ var FILE_MODE = /*#__PURE__*/ function(FILE_MODE) {
|
|
|
42
45
|
FILE_MODE["EDIT"] = "edit";
|
|
43
46
|
return FILE_MODE;
|
|
44
47
|
}({});
|
|
48
|
+
const FORCE_AS_FILE_OWNER = 'forceAsFileOwner';
|
|
45
49
|
|
|
46
50
|
//# sourceMappingURL=operations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/files/constants/operations.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nexport enum FILE_OPERATION {\n MAKE = 'make',\n COPY = 'copy',\n MOVE = 'move',\n DELETE = 'delete',\n COMPRESS = 'compress',\n DECOMPRESS = 'decompress',\n DOWNLOAD = 'download',\n UPLOAD = 'upload',\n TOUCH = 'touch',\n THUMBNAIL = 'thumbnail',\n GET_SIZE = 'getSize',\n LOCK = 'lock',\n UNLOCK = 'unlock',\n UNLOCK_REQUEST = 'unlockRequest'\n}\n\nexport enum FILE_MODE {\n VIEW = 'view',\n EDIT = 'edit'\n}\n"],"names":["FILE_MODE","FILE_OPERATION"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAmBWA;eAAAA;;QAjBAC;eAAAA;;;
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/files/constants/operations.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nexport enum FILE_OPERATION {\n MAKE = 'make',\n COPY = 'copy',\n MOVE = 'move',\n DELETE = 'delete',\n COMPRESS = 'compress',\n DECOMPRESS = 'decompress',\n DOWNLOAD = 'download',\n UPLOAD = 'upload',\n TOUCH = 'touch',\n THUMBNAIL = 'thumbnail',\n GET_SIZE = 'getSize',\n LOCK = 'lock',\n UNLOCK = 'unlock',\n UNLOCK_REQUEST = 'unlockRequest'\n}\n\nexport enum FILE_MODE {\n VIEW = 'view',\n EDIT = 'edit'\n}\n\nexport const FORCE_AS_FILE_OWNER = 'forceAsFileOwner' as const\n"],"names":["FILE_MODE","FILE_OPERATION","FORCE_AS_FILE_OWNER"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAmBWA;eAAAA;;QAjBAC;eAAAA;;QAsBCC;eAAAA;;;AAtBN,IAAA,AAAKD,wCAAAA;;;;;;;;;;;;;;;WAAAA;;AAiBL,IAAA,AAAKD,mCAAAA;;;WAAAA;;AAKL,MAAME,sBAAsB"}
|
|
@@ -13,21 +13,6 @@ function _export(target, all) {
|
|
|
13
13
|
});
|
|
14
14
|
}
|
|
15
15
|
_export(exports, {
|
|
16
|
-
get API_FILES_ONLY_OFFICE () {
|
|
17
|
-
return API_FILES_ONLY_OFFICE;
|
|
18
|
-
},
|
|
19
|
-
get API_FILES_ONLY_OFFICE_CALLBACK () {
|
|
20
|
-
return API_FILES_ONLY_OFFICE_CALLBACK;
|
|
21
|
-
},
|
|
22
|
-
get API_FILES_ONLY_OFFICE_DOCUMENT () {
|
|
23
|
-
return API_FILES_ONLY_OFFICE_DOCUMENT;
|
|
24
|
-
},
|
|
25
|
-
get API_FILES_ONLY_OFFICE_SETTINGS () {
|
|
26
|
-
return API_FILES_ONLY_OFFICE_SETTINGS;
|
|
27
|
-
},
|
|
28
|
-
get API_FILES_ONLY_OFFICE_STATUS () {
|
|
29
|
-
return API_FILES_ONLY_OFFICE_STATUS;
|
|
30
|
-
},
|
|
31
16
|
get API_FILES_OPERATION () {
|
|
32
17
|
return API_FILES_OPERATION;
|
|
33
18
|
},
|
|
@@ -77,12 +62,7 @@ const FILES_ROUTE = {
|
|
|
77
62
|
TASKS: 'tasks',
|
|
78
63
|
TASKS_DOWNLOAD: 'download',
|
|
79
64
|
RECENTS: 'recents',
|
|
80
|
-
SEARCH: 'search'
|
|
81
|
-
ONLY_OFFICE: 'onlyoffice',
|
|
82
|
-
ONLY_OFFICE_SETTINGS: 'settings',
|
|
83
|
-
ONLY_OFFICE_DOCUMENT: 'document',
|
|
84
|
-
ONLY_OFFICE_CALLBACK: 'callback',
|
|
85
|
-
ONLY_OFFICE_STATUS: 'status'
|
|
65
|
+
SEARCH: 'search'
|
|
86
66
|
};
|
|
87
67
|
const API_FILES_OPERATION = `${FILES_ROUTE.BASE}/${FILES_ROUTE.OPERATION}`;
|
|
88
68
|
const API_FILES_OPERATION_THUMBNAIL = `${API_FILES_OPERATION}/${_operations.FILE_OPERATION.THUMBNAIL}`;
|
|
@@ -96,10 +76,5 @@ const API_FILES_TASKS = `${FILES_ROUTE.BASE}/${FILES_ROUTE.TASKS}`;
|
|
|
96
76
|
const API_FILES_TASKS_DOWNLOAD = `${FILES_ROUTE.BASE}/${FILES_ROUTE.TASKS}/${FILES_ROUTE.TASKS_DOWNLOAD}`;
|
|
97
77
|
const API_FILES_RECENTS = `${FILES_ROUTE.BASE}/${FILES_ROUTE.RECENTS}`;
|
|
98
78
|
const API_FILES_SEARCH = `${FILES_ROUTE.BASE}/${FILES_ROUTE.SEARCH}`;
|
|
99
|
-
const API_FILES_ONLY_OFFICE = `${FILES_ROUTE.BASE}/${FILES_ROUTE.ONLY_OFFICE}`;
|
|
100
|
-
const API_FILES_ONLY_OFFICE_SETTINGS = `${API_FILES_ONLY_OFFICE}/${FILES_ROUTE.ONLY_OFFICE_SETTINGS}`;
|
|
101
|
-
const API_FILES_ONLY_OFFICE_DOCUMENT = `${API_FILES_ONLY_OFFICE}/${FILES_ROUTE.ONLY_OFFICE_DOCUMENT}`;
|
|
102
|
-
const API_FILES_ONLY_OFFICE_CALLBACK = `${API_FILES_ONLY_OFFICE}/${FILES_ROUTE.ONLY_OFFICE_CALLBACK}`;
|
|
103
|
-
const API_FILES_ONLY_OFFICE_STATUS = `${API_FILES_ONLY_OFFICE}/${FILES_ROUTE.ONLY_OFFICE_STATUS}`;
|
|
104
79
|
|
|
105
80
|
//# sourceMappingURL=routes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/files/constants/routes.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { SPACES_ROUTE } from '../../spaces/constants/routes'\nimport { FILE_OPERATION } from './operations'\n\nexport const FILES_ROUTE = {\n BASE: SPACES_ROUTE.BASE,\n OPERATION: 'operation',\n TASK_OPERATION: 'task/operation',\n TASKS: 'tasks',\n TASKS_DOWNLOAD: 'download',\n RECENTS: 'recents',\n SEARCH: 'search'
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/files/constants/routes.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { SPACES_ROUTE } from '../../spaces/constants/routes'\nimport { FILE_OPERATION } from './operations'\n\nexport const FILES_ROUTE = {\n BASE: SPACES_ROUTE.BASE,\n OPERATION: 'operation',\n TASK_OPERATION: 'task/operation',\n TASKS: 'tasks',\n TASKS_DOWNLOAD: 'download',\n RECENTS: 'recents',\n SEARCH: 'search'\n} as const\n\nexport const API_FILES_OPERATION = `${FILES_ROUTE.BASE}/${FILES_ROUTE.OPERATION}`\nexport const API_FILES_OPERATION_THUMBNAIL = `${API_FILES_OPERATION}/${FILE_OPERATION.THUMBNAIL}`\nexport const API_FILES_OPERATION_MAKE = `${API_FILES_OPERATION}/${FILE_OPERATION.MAKE}`\nexport const API_FILES_OPERATION_UPLOAD = `${API_FILES_OPERATION}/${FILE_OPERATION.UPLOAD}`\nexport const API_FILES_TASK_OPERATION = `${FILES_ROUTE.BASE}/${FILES_ROUTE.TASK_OPERATION}`\nexport const API_FILES_TASK_OPERATION_DOWNLOAD = `${API_FILES_TASK_OPERATION}/${FILE_OPERATION.DOWNLOAD}`\nexport const API_FILES_TASK_OPERATION_COMPRESS = `${API_FILES_TASK_OPERATION}/${FILE_OPERATION.COMPRESS}`\nexport const API_FILES_TASK_OPERATION_DECOMPRESS = `${API_FILES_TASK_OPERATION}/${FILE_OPERATION.DECOMPRESS}`\nexport const API_FILES_TASKS = `${FILES_ROUTE.BASE}/${FILES_ROUTE.TASKS}`\nexport const API_FILES_TASKS_DOWNLOAD = `${FILES_ROUTE.BASE}/${FILES_ROUTE.TASKS}/${FILES_ROUTE.TASKS_DOWNLOAD}`\nexport const API_FILES_RECENTS = `${FILES_ROUTE.BASE}/${FILES_ROUTE.RECENTS}`\nexport const API_FILES_SEARCH = `${FILES_ROUTE.BASE}/${FILES_ROUTE.SEARCH}`\n"],"names":["API_FILES_OPERATION","API_FILES_OPERATION_MAKE","API_FILES_OPERATION_THUMBNAIL","API_FILES_OPERATION_UPLOAD","API_FILES_RECENTS","API_FILES_SEARCH","API_FILES_TASKS","API_FILES_TASKS_DOWNLOAD","API_FILES_TASK_OPERATION","API_FILES_TASK_OPERATION_COMPRESS","API_FILES_TASK_OPERATION_DECOMPRESS","API_FILES_TASK_OPERATION_DOWNLOAD","FILES_ROUTE","BASE","SPACES_ROUTE","OPERATION","TASK_OPERATION","TASKS","TASKS_DOWNLOAD","RECENTS","SEARCH","FILE_OPERATION","THUMBNAIL","MAKE","UPLOAD","DOWNLOAD","COMPRESS","DECOMPRESS"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAeYA;eAAAA;;QAEAC;eAAAA;;QADAC;eAAAA;;QAEAC;eAAAA;;QAOAC;eAAAA;;QACAC;eAAAA;;QAHAC;eAAAA;;QACAC;eAAAA;;QALAC;eAAAA;;QAEAC;eAAAA;;QACAC;eAAAA;;QAFAC;eAAAA;;QAfAC;eAAAA;;;wBAHgB;4BACE;AAExB,MAAMA,cAAc;IACzBC,MAAMC,oBAAY,CAACD,IAAI;IACvBE,WAAW;IACXC,gBAAgB;IAChBC,OAAO;IACPC,gBAAgB;IAChBC,SAAS;IACTC,QAAQ;AACV;AAEO,MAAMpB,sBAAsB,GAAGY,YAAYC,IAAI,CAAC,CAAC,EAAED,YAAYG,SAAS,EAAE;AAC1E,MAAMb,gCAAgC,GAAGF,oBAAoB,CAAC,EAAEqB,0BAAc,CAACC,SAAS,EAAE;AAC1F,MAAMrB,2BAA2B,GAAGD,oBAAoB,CAAC,EAAEqB,0BAAc,CAACE,IAAI,EAAE;AAChF,MAAMpB,6BAA6B,GAAGH,oBAAoB,CAAC,EAAEqB,0BAAc,CAACG,MAAM,EAAE;AACpF,MAAMhB,2BAA2B,GAAGI,YAAYC,IAAI,CAAC,CAAC,EAAED,YAAYI,cAAc,EAAE;AACpF,MAAML,oCAAoC,GAAGH,yBAAyB,CAAC,EAAEa,0BAAc,CAACI,QAAQ,EAAE;AAClG,MAAMhB,oCAAoC,GAAGD,yBAAyB,CAAC,EAAEa,0BAAc,CAACK,QAAQ,EAAE;AAClG,MAAMhB,sCAAsC,GAAGF,yBAAyB,CAAC,EAAEa,0BAAc,CAACM,UAAU,EAAE;AACtG,MAAMrB,kBAAkB,GAAGM,YAAYC,IAAI,CAAC,CAAC,EAAED,YAAYK,KAAK,EAAE;AAClE,MAAMV,2BAA2B,GAAGK,YAAYC,IAAI,CAAC,CAAC,EAAED,YAAYK,KAAK,CAAC,CAAC,EAAEL,YAAYM,cAAc,EAAE;AACzG,MAAMd,oBAAoB,GAAGQ,YAAYC,IAAI,CAAC,CAAC,EAAED,YAAYO,OAAO,EAAE;AACtE,MAAMd,mBAAmB,GAAGO,YAAYC,IAAI,CAAC,CAAC,EAAED,YAAYQ,MAAM,EAAE"}
|