@sync-in/server 1.8.1 → 1.9.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.
- package/CHANGELOG.md +56 -11
- package/environment/environment.dist.yaml +29 -26
- package/package.json +15 -15
- package/server/app.constants.js +9 -0
- package/server/app.constants.js.map +1 -1
- package/server/app.module.js +4 -0
- package/server/app.module.js.map +1 -1
- package/server/applications/admin/admin.module.js +6 -1
- package/server/applications/admin/admin.module.js.map +1 -1
- package/server/applications/{notifications/interfaces/user-mail-notification.js → admin/interfaces/check-update.interfaces.js} +1 -1
- package/server/applications/admin/interfaces/check-update.interfaces.js.map +1 -0
- package/server/applications/admin/services/admin-scheduler.service.js +53 -0
- package/server/applications/admin/services/admin-scheduler.service.js.map +1 -0
- package/server/applications/admin/services/admin.service.js +102 -0
- package/server/applications/admin/services/admin.service.js.map +1 -0
- package/server/applications/admin/services/admin.service.spec.js +46 -0
- package/server/applications/admin/services/admin.service.spec.js.map +1 -0
- package/server/applications/admin/utils/check-update.js +28 -0
- package/server/applications/admin/utils/check-update.js.map +1 -0
- package/server/applications/comments/services/comments-manager.service.js +1 -1
- package/server/applications/comments/services/comments-manager.service.js.map +1 -1
- package/server/applications/comments/services/comments-manager.service.spec.js +1 -1
- package/server/applications/comments/services/comments-manager.service.spec.js.map +1 -1
- package/server/applications/comments/services/comments-queries.service.js.map +1 -1
- package/server/applications/files/constants/cache.js +10 -1
- package/server/applications/files/constants/cache.js.map +1 -1
- package/server/applications/files/constants/only-office.js +0 -25
- package/server/applications/files/constants/only-office.js.map +1 -1
- package/server/applications/files/constants/operations.js +20 -3
- package/server/applications/files/constants/operations.js.map +1 -1
- package/server/applications/files/dto/file-operations.dto.js +7 -0
- package/server/applications/files/dto/file-operations.dto.js.map +1 -1
- package/server/applications/files/files-only-office.controller.js +3 -2
- package/server/applications/files/files-only-office.controller.js.map +1 -1
- package/server/applications/files/files-only-office.controller.spec.js +6 -5
- package/server/applications/files/files-only-office.controller.spec.js.map +1 -1
- package/server/applications/files/files.controller.js +88 -8
- package/server/applications/files/files.controller.js.map +1 -1
- package/server/applications/files/files.controller.spec.js +11 -4
- package/server/applications/files/files.controller.spec.js.map +1 -1
- package/server/applications/files/guards/files-only-office.guard.js +6 -0
- package/server/applications/files/guards/files-only-office.guard.js.map +1 -1
- package/server/applications/files/interfaces/file-db-props.interface.js.map +1 -1
- package/server/applications/files/interfaces/file-props.interface.js.map +1 -1
- package/server/applications/files/interfaces/only-office-config.interface.js.map +1 -1
- package/server/applications/files/services/files-content-manager.service.js +3 -3
- package/server/applications/files/services/files-content-manager.service.js.map +1 -1
- package/server/applications/files/services/files-lock-manager.service.js +61 -22
- package/server/applications/files/services/files-lock-manager.service.js.map +1 -1
- package/server/applications/files/services/files-manager.service.js +122 -24
- package/server/applications/files/services/files-manager.service.js.map +1 -1
- package/server/applications/files/services/files-manager.service.spec.js +15 -0
- package/server/applications/files/services/files-manager.service.spec.js.map +1 -1
- package/server/applications/files/services/files-methods.service.js +38 -8
- package/server/applications/files/services/files-methods.service.js.map +1 -1
- package/server/applications/files/services/files-only-office-manager.service.js +12 -12
- package/server/applications/files/services/files-only-office-manager.service.js.map +1 -1
- package/server/applications/files/services/files-parser.service.js +1 -1
- package/server/applications/files/services/files-parser.service.js.map +1 -1
- package/server/applications/files/services/files-queries.service.js +10 -0
- package/server/applications/files/services/files-queries.service.js.map +1 -1
- package/server/applications/files/utils/files.js +1 -1
- package/server/applications/files/utils/files.js.map +1 -1
- package/server/applications/files/utils/send-file.js +3 -2
- package/server/applications/files/utils/send-file.js.map +1 -1
- package/server/applications/links/services/links-queries.service.js +1 -1
- package/server/applications/links/services/links-queries.service.js.map +1 -1
- package/server/applications/notifications/constants/notifications.js +5 -1
- package/server/applications/notifications/constants/notifications.js.map +1 -1
- package/server/applications/notifications/i18n/de.js +8 -2
- package/server/applications/notifications/i18n/de.js.map +1 -1
- package/server/applications/notifications/i18n/es.js +8 -2
- package/server/applications/notifications/i18n/es.js.map +1 -1
- package/server/applications/notifications/i18n/fr.js +8 -2
- package/server/applications/notifications/i18n/fr.js.map +1 -1
- package/server/applications/notifications/i18n/hi.js +8 -2
- package/server/applications/notifications/i18n/hi.js.map +1 -1
- package/server/applications/notifications/i18n/it.js +8 -2
- package/server/applications/notifications/i18n/it.js.map +1 -1
- package/server/applications/notifications/i18n/ja.js +8 -2
- package/server/applications/notifications/i18n/ja.js.map +1 -1
- package/server/applications/notifications/i18n/ko.js +8 -2
- package/server/applications/notifications/i18n/ko.js.map +1 -1
- package/server/applications/notifications/i18n/pl.js +8 -2
- package/server/applications/notifications/i18n/pl.js.map +1 -1
- package/server/applications/notifications/i18n/pt.js +8 -2
- package/server/applications/notifications/i18n/pt.js.map +1 -1
- package/server/applications/notifications/i18n/pt_br.js +8 -2
- package/server/applications/notifications/i18n/pt_br.js.map +1 -1
- package/server/applications/notifications/i18n/ru.js +8 -2
- package/server/applications/notifications/i18n/ru.js.map +1 -1
- package/server/applications/notifications/i18n/tr.js +8 -2
- package/server/applications/notifications/i18n/tr.js.map +1 -1
- package/server/applications/notifications/i18n/zh.js +8 -2
- package/server/applications/notifications/i18n/zh.js.map +1 -1
- package/server/applications/notifications/interfaces/notification-properties.interface.js.map +1 -1
- package/server/applications/notifications/interfaces/user-mail-notification.interface.js +10 -0
- package/server/applications/notifications/interfaces/user-mail-notification.interface.js.map +1 -0
- package/server/applications/notifications/mails/models.js +38 -3
- package/server/applications/notifications/mails/models.js.map +1 -1
- package/server/applications/notifications/mails/templates.js +1 -1
- package/server/applications/notifications/mails/templates.js.map +1 -1
- package/server/applications/notifications/services/notifications-manager.service.js +8 -1
- package/server/applications/notifications/services/notifications-manager.service.js.map +1 -1
- package/server/applications/notifications/services/notifications-queries.service.js.map +1 -1
- package/server/applications/shares/services/shares-manager.service.js +17 -10
- package/server/applications/shares/services/shares-manager.service.js.map +1 -1
- package/server/applications/shares/services/shares-manager.service.spec.js +10 -3
- package/server/applications/shares/services/shares-manager.service.spec.js.map +1 -1
- package/server/applications/shares/services/shares-queries.service.js +11 -1
- package/server/applications/shares/services/shares-queries.service.js.map +1 -1
- package/server/applications/spaces/guards/space.guard.spec.js +2 -2
- package/server/applications/spaces/guards/space.guard.spec.js.map +1 -1
- package/server/applications/spaces/services/spaces-browser.service.js +31 -11
- package/server/applications/spaces/services/spaces-browser.service.js.map +1 -1
- package/server/applications/spaces/services/spaces-manager.service.js +2 -2
- package/server/applications/spaces/services/spaces-manager.service.js.map +1 -1
- package/server/applications/spaces/services/spaces-queries.service.js +6 -2
- package/server/applications/spaces/services/spaces-queries.service.js.map +1 -1
- package/server/applications/spaces/utils/permissions.js +2 -2
- package/server/applications/spaces/utils/permissions.js.map +1 -1
- package/server/applications/sync/services/sync-manager.service.js +1 -0
- package/server/applications/sync/services/sync-manager.service.js.map +1 -1
- package/server/applications/sync/services/sync-paths-manager.service.js +1 -1
- package/server/applications/sync/services/sync-paths-manager.service.js.map +1 -1
- package/server/applications/sync/services/sync-paths-manager.service.spec.js +1 -1
- package/server/applications/sync/services/sync-paths-manager.service.spec.js.map +1 -1
- package/server/applications/users/constants/user.js +1 -1
- package/server/applications/users/constants/user.js.map +1 -1
- package/server/applications/users/services/admin-users-queries.service.js +8 -0
- package/server/applications/users/services/admin-users-queries.service.js.map +1 -1
- package/server/applications/users/services/users-queries.service.js +67 -68
- package/server/applications/users/services/users-queries.service.js.map +1 -1
- package/server/applications/users/users.module.js +2 -1
- package/server/applications/users/users.module.js.map +1 -1
- package/server/applications/webdav/guards/webdav-protocol.guard.js +4 -4
- package/server/applications/webdav/guards/webdav-protocol.guard.js.map +1 -1
- package/server/applications/webdav/guards/webdav-protocol.guard.spec.js +6 -6
- package/server/applications/webdav/guards/webdav-protocol.guard.spec.js.map +1 -1
- package/server/applications/webdav/services/webdav-methods.service.js +3 -2
- package/server/applications/webdav/services/webdav-methods.service.js.map +1 -1
- package/server/applications/webdav/services/webdav-methods.service.spec.js +2 -2
- package/server/applications/webdav/services/webdav-methods.service.spec.js.map +1 -1
- package/server/authentication/constants/auth-ldap.js +2 -0
- package/server/authentication/constants/auth-ldap.js.map +1 -1
- package/server/authentication/services/auth-methods/auth-method-ldap.service.js +34 -21
- package/server/authentication/services/auth-methods/auth-method-ldap.service.js.map +1 -1
- package/server/common/functions.js +0 -8
- package/server/common/functions.js.map +1 -1
- package/server/common/image.js +1 -0
- package/server/common/image.js.map +1 -1
- package/server/common/shared.js +18 -1
- package/server/common/shared.js.map +1 -1
- package/server/infrastructure/context/services/context-manager.service.js +3 -0
- package/server/infrastructure/context/services/context-manager.service.js.map +1 -1
- package/server/infrastructure/websocket/adapters/cluster.adapter.js +4 -4
- package/server/infrastructure/websocket/adapters/cluster.adapter.js.map +1 -1
- package/static/3rdpartylicenses.txt +1393 -44
- package/static/assets/favicon.svg +2 -25
- package/static/assets/logo-dark.svg +2 -32
- package/static/assets/logo.svg +2 -32
- package/static/assets/mimes/application-sql.svg +29 -1
- package/static/assets/mimes/application-x-sql.svg +29 -0
- package/static/assets/mimes/image-bmp.svg +12 -0
- package/static/assets/pdfjs/build/pdf.mjs +4869 -4454
- 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 +885 -596
- package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
- package/static/assets/pdfjs/version +1 -1
- package/static/assets/pdfjs/web/locale/be/viewer.ftl +40 -0
- package/static/assets/pdfjs/web/locale/bg/viewer.ftl +2 -0
- package/static/assets/pdfjs/web/locale/cs/viewer.ftl +41 -0
- package/static/assets/pdfjs/web/locale/cy/viewer.ftl +43 -0
- package/static/assets/pdfjs/web/locale/da/viewer.ftl +39 -0
- package/static/assets/pdfjs/web/locale/de/viewer.ftl +41 -0
- package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +43 -0
- package/static/assets/pdfjs/web/locale/el/viewer.ftl +39 -0
- package/static/assets/pdfjs/web/locale/en-CA/viewer.ftl +35 -0
- package/static/assets/pdfjs/web/locale/en-GB/viewer.ftl +41 -0
- package/static/assets/pdfjs/web/locale/en-US/viewer.ftl +2 -2
- package/static/assets/pdfjs/web/locale/eo/viewer.ftl +39 -0
- package/static/assets/pdfjs/web/locale/es-AR/viewer.ftl +41 -0
- package/static/assets/pdfjs/web/locale/es-CL/viewer.ftl +39 -0
- package/static/assets/pdfjs/web/locale/es-ES/viewer.ftl +72 -0
- package/static/assets/pdfjs/web/locale/es-MX/viewer.ftl +120 -0
- package/static/assets/pdfjs/web/locale/eu/viewer.ftl +41 -0
- package/static/assets/pdfjs/web/locale/fi/viewer.ftl +41 -0
- package/static/assets/pdfjs/web/locale/fr/viewer.ftl +41 -0
- package/static/assets/pdfjs/web/locale/fur/viewer.ftl +77 -0
- package/static/assets/pdfjs/web/locale/fy-NL/viewer.ftl +41 -0
- package/static/assets/pdfjs/web/locale/gn/viewer.ftl +39 -0
- package/static/assets/pdfjs/web/locale/he/viewer.ftl +41 -0
- package/static/assets/pdfjs/web/locale/hsb/viewer.ftl +43 -0
- package/static/assets/pdfjs/web/locale/hu/viewer.ftl +41 -0
- package/static/assets/pdfjs/web/locale/hy-AM/viewer.ftl +1 -1
- package/static/assets/pdfjs/web/locale/ia/viewer.ftl +41 -0
- package/static/assets/pdfjs/web/locale/it/viewer.ftl +41 -0
- package/static/assets/pdfjs/web/locale/ja/viewer.ftl +32 -0
- package/static/assets/pdfjs/web/locale/ka/viewer.ftl +41 -0
- package/static/assets/pdfjs/web/locale/kab/viewer.ftl +73 -0
- package/static/assets/pdfjs/web/locale/kk/viewer.ftl +21 -0
- package/static/assets/pdfjs/web/locale/ko/viewer.ftl +38 -1
- package/static/assets/pdfjs/web/locale/nb-NO/viewer.ftl +39 -0
- package/static/assets/pdfjs/web/locale/nl/viewer.ftl +41 -0
- package/static/assets/pdfjs/web/locale/nn-NO/viewer.ftl +37 -0
- package/static/assets/pdfjs/web/locale/pa-IN/viewer.ftl +37 -0
- package/static/assets/pdfjs/web/locale/pl/viewer.ftl +39 -0
- package/static/assets/pdfjs/web/locale/pt-BR/viewer.ftl +39 -0
- package/static/assets/pdfjs/web/locale/rm/viewer.ftl +73 -0
- package/static/assets/pdfjs/web/locale/ro/viewer.ftl +41 -0
- package/static/assets/pdfjs/web/locale/ru/viewer.ftl +42 -0
- package/static/assets/pdfjs/web/locale/sc/viewer.ftl +6 -0
- package/static/assets/pdfjs/web/locale/sk/viewer.ftl +43 -0
- package/static/assets/pdfjs/web/locale/sl/viewer.ftl +42 -1
- package/static/assets/pdfjs/web/locale/sq/viewer.ftl +77 -0
- package/static/assets/pdfjs/web/locale/sv-SE/viewer.ftl +41 -0
- package/static/assets/pdfjs/web/locale/tg/viewer.ftl +39 -0
- package/static/assets/pdfjs/web/locale/th/viewer.ftl +35 -0
- package/static/assets/pdfjs/web/locale/tr/viewer.ftl +39 -0
- package/static/assets/pdfjs/web/locale/vi/viewer.ftl +42 -5
- package/static/assets/pdfjs/web/locale/zh-CN/viewer.ftl +35 -0
- package/static/assets/pdfjs/web/locale/zh-TW/viewer.ftl +37 -0
- package/static/assets/pdfjs/web/viewer.css +141 -110
- package/static/assets/pdfjs/web/viewer.html +7 -7
- package/static/assets/pdfjs/web/viewer.mjs +97 -14
- package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
- package/static/chunk-22DWHRCL.js +1 -0
- package/static/chunk-23UUFZSR.js +1 -0
- package/static/{chunk-MTVSJTIW.js → chunk-24Q7OUU2.js} +1 -1
- package/static/chunk-25QTY2GI.js +1 -0
- package/static/chunk-2E7IJZLL.js +1 -0
- package/static/chunk-2FC5EKS5.js +1 -0
- package/static/chunk-2FOWUJQF.js +1 -0
- package/static/chunk-2XPHUNYN.js +1 -0
- package/static/chunk-32L7RG2G.js +1 -0
- package/static/chunk-3IISSX63.js +1 -0
- package/static/chunk-3OHSTP3R.js +1 -0
- package/static/chunk-42L6C5MT.js +1 -0
- package/static/chunk-4AGQL5GV.js +1 -0
- package/static/chunk-4BPSQMI2.js +1 -0
- package/static/chunk-4FDRWZWT.js +1 -0
- package/static/chunk-4FJUCMEG.js +1 -0
- package/static/chunk-4GCCF6PF.js +1 -0
- package/static/chunk-4ORP3SBY.js +1 -0
- package/static/chunk-4QBOHIC3.js +1 -0
- package/static/chunk-4YT6K5KY.js +1 -0
- package/static/chunk-556I6YIW.js +1 -0
- package/static/chunk-5DPIGJU4.js +1 -0
- package/static/chunk-5HNQLBSW.js +3 -0
- package/static/chunk-5IL7C45D.js +1 -0
- package/static/chunk-5KJXGMKR.js +1 -0
- package/static/chunk-5SPGSHKL.js +1 -0
- package/static/chunk-5WCQBTXW.js +1 -0
- package/static/chunk-5XUIPWOH.js +1 -0
- package/static/chunk-62WT7PI3.js +1 -0
- package/static/chunk-6F6OMQ5H.js +1 -0
- package/static/chunk-6I5BGQHT.js +1 -0
- package/static/chunk-6NOS45DG.js +1 -0
- package/static/chunk-6OKLPRCD.js +1 -0
- package/static/chunk-6VEJCG43.js +1 -0
- package/static/chunk-77SS36Z2.js +1 -0
- package/static/chunk-7AXEPO3G.js +1 -0
- package/static/chunk-7CFSJ4BO.js +1 -0
- package/static/chunk-7CKHC72R.js +1 -0
- package/static/chunk-7DUTYOJG.js +1 -0
- package/static/chunk-7HKFYRPF.js +1 -0
- package/static/chunk-7NZJZATZ.js +1 -0
- package/static/chunk-AADK5D2H.js +1 -0
- package/static/chunk-ACUF7IKP.js +1 -0
- package/static/chunk-AGREZPV4.js +1 -0
- package/static/chunk-ATBJWFA3.js +1 -0
- package/static/chunk-ATXLZN2B.js +1 -0
- package/static/chunk-AZ5TF5Y3.js +1 -0
- package/static/chunk-BBHYIURC.js +1 -0
- package/static/chunk-BHZEPHRI.js +13 -0
- package/static/chunk-BQZWSZNN.js +1 -0
- package/static/chunk-BSB4VROD.js +2 -0
- package/static/chunk-BYWSTP3P.js +1 -0
- package/static/chunk-C3AAEQKW.js +1 -0
- package/static/chunk-CCGGCHGN.js +1 -0
- package/static/chunk-CFTKW432.js +1 -0
- package/static/chunk-CNOVT6KU.js +1 -0
- package/static/chunk-D56H3XE2.js +1 -0
- package/static/chunk-DFOOSIIA.js +1 -0
- package/static/chunk-DHFQIFOF.js +1 -0
- package/static/{chunk-3GMLWAFZ.js → chunk-DIC2MVRI.js} +1 -1
- package/static/chunk-DJDRX53V.js +2 -0
- package/static/chunk-DKGXUMLT.js +1 -0
- package/static/chunk-DRHPEERW.js +2 -0
- package/static/chunk-DWYP6ZGG.js +1 -0
- package/static/chunk-EDJAISWO.js +13 -0
- package/static/chunk-EIYRBM4J.js +1 -0
- package/static/chunk-EKEGRXCV.js +7 -0
- package/static/chunk-EL6QL4TP.js +1 -0
- package/static/chunk-ERDZ7IVF.js +1 -0
- package/static/chunk-EVQKKVUZ.js +1 -0
- package/static/chunk-F2XG7EWI.js +1 -0
- package/static/chunk-F672FY5I.js +1 -0
- package/static/chunk-F6V37MKG.js +1 -0
- package/static/chunk-F7TXTNZC.js +1 -0
- package/static/chunk-FCGTI42I.js +1 -0
- package/static/chunk-FQHOSSCO.js +1 -0
- package/static/chunk-FTSIPHMG.js +1 -0
- package/static/chunk-GAGHHYLF.js +1 -0
- package/static/{chunk-JPT5WEAT.js → chunk-GOJYWL2M.js} +1 -1
- package/static/chunk-H6WOTGQ5.js +1 -0
- package/static/{chunk-CHJ64RJM.js → chunk-H6ZXFINQ.js} +1 -1
- package/static/chunk-HC7F57NA.js +1 -0
- package/static/chunk-HHWXIK2M.js +7 -0
- package/static/chunk-HKRGIRKB.js +3 -0
- package/static/chunk-HNMGPG72.js +1 -0
- package/static/chunk-HS4S6BV3.js +1 -0
- package/static/chunk-IJ7K7ATQ.js +1 -0
- package/static/chunk-IOIBQGHN.js +562 -0
- package/static/chunk-ITVA26X2.js +2 -0
- package/static/chunk-J6YSFHLZ.js +1 -0
- package/static/chunk-JAEJ6IMV.js +1 -0
- package/static/chunk-JB5R6V33.js +1 -0
- package/static/chunk-JF6WIV6M.js +1 -0
- package/static/chunk-JGB4LLUT.js +1 -0
- package/static/chunk-JGXVTKLG.js +1 -0
- package/static/chunk-JMYAD7E2.js +1 -0
- package/static/chunk-JSE63Q5X.js +1 -0
- package/static/chunk-JVV3ZL6L.js +1 -0
- package/static/chunk-JXZCNFW7.js +1 -0
- package/static/chunk-KAVP6UXH.js +1 -0
- package/static/{chunk-3R74L4UU.js → chunk-KDEEERWZ.js} +1 -1
- package/static/chunk-KHRF67SG.js +1 -0
- package/static/chunk-KLOUBIO4.js +1 -0
- package/static/chunk-KMF3ZRAO.js +1 -0
- package/static/chunk-KNZ3AQPR.js +1 -0
- package/static/chunk-KT3TWCST.js +1 -0
- package/static/chunk-L6SYG23T.js +1 -0
- package/static/chunk-LJSVNPPQ.js +1 -0
- package/static/{chunk-LNTUR3GU.js → chunk-LRDKG274.js} +1 -1
- package/static/chunk-LRQSPCYZ.js +1 -0
- package/static/chunk-LUSVISM6.js +1 -0
- package/static/chunk-LXQGVNU2.js +1 -0
- package/static/{chunk-LVSNIS5P.js → chunk-LYZGJZNP.js} +1 -1
- package/static/chunk-LZKI5P5T.js +1 -0
- package/static/chunk-M4XL3JN5.js +6 -0
- package/static/{chunk-UNCPXHHT.js → chunk-MGWG7OD7.js} +1 -1
- package/static/chunk-MKUUWY6Y.js +1 -0
- package/static/{chunk-VJTXJ43D.js → chunk-MNNCSSHN.js} +1 -1
- package/static/chunk-MR3U7TKQ.js +1 -0
- package/static/chunk-MRF3CNLZ.js +1 -0
- package/static/chunk-MRMSMTWD.js +1 -0
- package/static/chunk-MVZJSG5R.js +1 -0
- package/static/chunk-MYM43ENO.js +1 -0
- package/static/chunk-N3P6P6GW.js +7 -0
- package/static/chunk-NAH4V2R6.js +2 -0
- package/static/chunk-NBBDVVUF.js +1 -0
- package/static/chunk-NMF2ZFBE.js +1 -0
- package/static/chunk-NN4ONTOT.js +1 -0
- package/static/chunk-NOPACN4F.js +1 -0
- package/static/chunk-NYJPOP4L.js +1 -0
- package/static/chunk-OJCAIKUK.js +1 -0
- package/static/chunk-OQRWXCLY.js +1 -0
- package/static/chunk-PCFH5HCI.js +2 -0
- package/static/chunk-PG54TWBO.js +4 -0
- package/static/chunk-PJF5XUTO.js +1 -0
- package/static/{chunk-FJE6BOFL.js → chunk-PSUAQBYM.js} +1 -1
- package/static/chunk-PTLYIUFW.js +1 -0
- package/static/chunk-PZGLDZZM.js +1 -0
- package/static/chunk-Q4VNZGFI.js +1 -0
- package/static/chunk-Q556XB3S.js +1 -0
- package/static/{chunk-PB4AIT7O.js → chunk-Q7IXRPOO.js} +1 -1
- package/static/chunk-Q7U2VPIS.js +1 -0
- package/static/chunk-QM6CQMEX.js +1 -0
- package/static/chunk-QMHUIHSR.js +1 -0
- package/static/chunk-QNFNXDSX.js +1 -0
- package/static/chunk-QVFPHTOH.js +1 -0
- package/static/chunk-R4MI25E2.js +1 -0
- package/static/chunk-R7JRAR3P.js +1 -0
- package/static/chunk-R7PNKQU2.js +1 -0
- package/static/chunk-RCAORRB7.js +1 -0
- package/static/chunk-RK7XRDNB.js +1 -0
- package/static/chunk-RO7SAOLK.js +1 -0
- package/static/chunk-RQUUINHV.js +1 -0
- package/static/chunk-RT3K6DZR.js +1 -0
- package/static/chunk-RUN556VW.js +1 -0
- package/static/chunk-RX3YQ67K.js +1 -0
- package/static/chunk-S6EVLDHA.js +5 -0
- package/static/chunk-S7S5M3AZ.js +1 -0
- package/static/chunk-SBLNYV74.js +1 -0
- package/static/chunk-SIZCHHUA.js +1 -0
- package/static/chunk-SRBOO7AO.js +1 -0
- package/static/{chunk-PVDHBQRM.js → chunk-STA7NTYL.js} +1 -1
- package/static/chunk-T3YI3BSS.js +1 -0
- package/static/chunk-T74SMT7I.js +1 -0
- package/static/chunk-TAL3RTTQ.js +1 -0
- package/static/chunk-TJZKTNNS.js +1 -0
- package/static/chunk-UJTFWZEC.js +1 -0
- package/static/chunk-UPGVU5LG.js +1 -0
- package/static/chunk-UQ6O3I6W.js +1 -0
- package/static/{chunk-5NMSIIQB.js → chunk-V43RGNXA.js} +1 -1
- package/static/chunk-VWIRXLNE.js +1 -0
- package/static/chunk-VZMVGIVW.js +1 -0
- package/static/chunk-VZPCXSRG.js +2 -0
- package/static/chunk-WR3MA3L3.js +1 -0
- package/static/chunk-XCLK7NJL.js +1 -0
- package/static/{chunk-DSWEWLXJ.js → chunk-XCPDPB5G.js} +1 -1
- package/static/chunk-XEGHEUP5.js +1 -0
- package/static/chunk-XKEBQNQJ.js +1 -0
- package/static/chunk-XOF4UW3S.js +1 -0
- package/static/chunk-XOTKK2NJ.js +1 -0
- package/static/chunk-XX7JXKA6.js +1 -0
- package/static/chunk-Y2I36A4K.js +1 -0
- package/static/chunk-Y44XDRM5.js +1 -0
- package/static/{chunk-QO6BTONN.js → chunk-Y4MAPE2C.js} +1 -1
- package/static/chunk-Y5RLD72B.js +1 -0
- package/static/{chunk-DPUVSXRB.js → chunk-Y5XTRCFK.js} +1 -1
- package/static/chunk-Y63UUJGJ.js +1 -0
- package/static/chunk-YBNAC7QM.js +1 -0
- package/static/chunk-YCTCESL4.js +1 -0
- package/static/chunk-YMAN4LIU.js +1 -0
- package/static/chunk-YTDE6SXT.js +1 -0
- package/static/chunk-YZPIUJB3.js +1 -0
- package/static/chunk-ZCOWBVOT.js +1 -0
- package/static/chunk-ZHRYYMYE.js +1 -0
- package/static/chunk-ZNXTOQFG.js +1 -0
- package/static/{chunk-URHTCJ7G.js → chunk-ZQLBPLXI.js} +1 -1
- package/static/favicon.ico +0 -0
- package/static/index.html +2 -2
- package/static/main-3PLRDZTO.js +11 -0
- package/static/styles-Q4OZOSSK.css +1 -0
- package/server/applications/notifications/interfaces/user-mail-notification.js.map +0 -1
- package/static/assets/codemirror/mode/apl/apl.js +0 -174
- package/static/assets/codemirror/mode/asciiarmor/asciiarmor.js +0 -74
- package/static/assets/codemirror/mode/asn.1/asn.1.js +0 -204
- package/static/assets/codemirror/mode/asterisk/asterisk.js +0 -220
- package/static/assets/codemirror/mode/brainfuck/brainfuck.js +0 -85
- package/static/assets/codemirror/mode/clike/clike.js +0 -942
- package/static/assets/codemirror/mode/clojure/clojure.js +0 -293
- package/static/assets/codemirror/mode/cmake/cmake.js +0 -97
- package/static/assets/codemirror/mode/cobol/cobol.js +0 -255
- package/static/assets/codemirror/mode/coffeescript/coffeescript.js +0 -359
- package/static/assets/codemirror/mode/commonlisp/commonlisp.js +0 -125
- package/static/assets/codemirror/mode/crystal/crystal.js +0 -433
- package/static/assets/codemirror/mode/css/css.js +0 -862
- package/static/assets/codemirror/mode/cypher/cypher.js +0 -152
- package/static/assets/codemirror/mode/d/d.js +0 -223
- package/static/assets/codemirror/mode/dart/dart.js +0 -168
- package/static/assets/codemirror/mode/diff/diff.js +0 -47
- package/static/assets/codemirror/mode/django/django.js +0 -356
- package/static/assets/codemirror/mode/dockerfile/dockerfile.js +0 -211
- package/static/assets/codemirror/mode/dtd/dtd.js +0 -142
- package/static/assets/codemirror/mode/dylan/dylan.js +0 -352
- package/static/assets/codemirror/mode/ebnf/ebnf.js +0 -195
- package/static/assets/codemirror/mode/ecl/ecl.js +0 -206
- package/static/assets/codemirror/mode/eiffel/eiffel.js +0 -160
- package/static/assets/codemirror/mode/elm/elm.js +0 -245
- package/static/assets/codemirror/mode/erlang/erlang.js +0 -619
- package/static/assets/codemirror/mode/factor/factor.js +0 -85
- package/static/assets/codemirror/mode/fcl/fcl.js +0 -173
- package/static/assets/codemirror/mode/forth/forth.js +0 -180
- package/static/assets/codemirror/mode/fortran/fortran.js +0 -188
- package/static/assets/codemirror/mode/gas/gas.js +0 -355
- package/static/assets/codemirror/mode/gfm/gfm.js +0 -129
- package/static/assets/codemirror/mode/gherkin/gherkin.js +0 -194
- package/static/assets/codemirror/mode/go/go.js +0 -187
- package/static/assets/codemirror/mode/groovy/groovy.js +0 -245
- package/static/assets/codemirror/mode/haml/haml.js +0 -161
- package/static/assets/codemirror/mode/handlebars/handlebars.js +0 -70
- package/static/assets/codemirror/mode/haskell/haskell.js +0 -268
- package/static/assets/codemirror/mode/haskell-literate/haskell-literate.js +0 -43
- package/static/assets/codemirror/mode/haxe/haxe.js +0 -515
- package/static/assets/codemirror/mode/htmlembedded/htmlembedded.js +0 -37
- package/static/assets/codemirror/mode/htmlmixed/htmlmixed.js +0 -153
- package/static/assets/codemirror/mode/http/http.js +0 -113
- package/static/assets/codemirror/mode/idl/idl.js +0 -290
- package/static/assets/codemirror/mode/javascript/javascript.js +0 -960
- package/static/assets/codemirror/mode/jinja2/jinja2.js +0 -193
- package/static/assets/codemirror/mode/jsx/jsx.js +0 -149
- package/static/assets/codemirror/mode/julia/julia.js +0 -390
- package/static/assets/codemirror/mode/livescript/livescript.js +0 -280
- package/static/assets/codemirror/mode/lua/lua.js +0 -160
- package/static/assets/codemirror/mode/markdown/markdown.js +0 -886
- package/static/assets/codemirror/mode/mathematica/mathematica.js +0 -176
- package/static/assets/codemirror/mode/mbox/mbox.js +0 -129
- package/static/assets/codemirror/mode/meta.js +0 -221
- package/static/assets/codemirror/mode/mirc/mirc.js +0 -193
- package/static/assets/codemirror/mode/mllike/mllike.js +0 -359
- package/static/assets/codemirror/mode/modelica/modelica.js +0 -245
- package/static/assets/codemirror/mode/mscgen/mscgen.js +0 -175
- package/static/assets/codemirror/mode/mumps/mumps.js +0 -148
- package/static/assets/codemirror/mode/nginx/nginx.js +0 -178
- package/static/assets/codemirror/mode/nsis/nsis.js +0 -95
- package/static/assets/codemirror/mode/ntriples/ntriples.js +0 -195
- package/static/assets/codemirror/mode/octave/octave.js +0 -139
- package/static/assets/codemirror/mode/oz/oz.js +0 -252
- package/static/assets/codemirror/mode/pascal/pascal.js +0 -136
- package/static/assets/codemirror/mode/pegjs/pegjs.js +0 -111
- package/static/assets/codemirror/mode/perl/perl.js +0 -836
- package/static/assets/codemirror/mode/php/php.js +0 -234
- package/static/assets/codemirror/mode/pig/pig.js +0 -178
- package/static/assets/codemirror/mode/powershell/powershell.js +0 -398
- package/static/assets/codemirror/mode/properties/properties.js +0 -78
- package/static/assets/codemirror/mode/protobuf/protobuf.js +0 -72
- package/static/assets/codemirror/mode/pug/pug.js +0 -591
- package/static/assets/codemirror/mode/puppet/puppet.js +0 -220
- package/static/assets/codemirror/mode/python/python.js +0 -402
- package/static/assets/codemirror/mode/q/q.js +0 -139
- package/static/assets/codemirror/mode/r/r.js +0 -190
- package/static/assets/codemirror/mode/rpm/changes/index.html +0 -66
- package/static/assets/codemirror/mode/rpm/rpm.js +0 -109
- package/static/assets/codemirror/mode/rst/rst.js +0 -557
- package/static/assets/codemirror/mode/ruby/ruby.js +0 -303
- package/static/assets/codemirror/mode/rust/rust.js +0 -72
- package/static/assets/codemirror/mode/sas/sas.js +0 -303
- package/static/assets/codemirror/mode/sass/sass.js +0 -459
- package/static/assets/codemirror/mode/scheme/scheme.js +0 -284
- package/static/assets/codemirror/mode/shell/shell.js +0 -168
- package/static/assets/codemirror/mode/sieve/sieve.js +0 -193
- package/static/assets/codemirror/mode/slim/slim.js +0 -575
- package/static/assets/codemirror/mode/smalltalk/smalltalk.js +0 -168
- package/static/assets/codemirror/mode/smarty/smarty.js +0 -225
- package/static/assets/codemirror/mode/solr/solr.js +0 -104
- package/static/assets/codemirror/mode/soy/soy.js +0 -665
- package/static/assets/codemirror/mode/sparql/sparql.js +0 -184
- package/static/assets/codemirror/mode/spreadsheet/spreadsheet.js +0 -112
- package/static/assets/codemirror/mode/sql/sql.js +0 -529
- package/static/assets/codemirror/mode/stex/stex.js +0 -264
- package/static/assets/codemirror/mode/stylus/stylus.js +0 -775
- package/static/assets/codemirror/mode/swift/swift.js +0 -221
- package/static/assets/codemirror/mode/tcl/tcl.js +0 -140
- package/static/assets/codemirror/mode/textile/textile.js +0 -469
- package/static/assets/codemirror/mode/tiddlywiki/tiddlywiki.css +0 -14
- package/static/assets/codemirror/mode/tiddlywiki/tiddlywiki.js +0 -308
- package/static/assets/codemirror/mode/tiki/tiki.css +0 -26
- package/static/assets/codemirror/mode/tiki/tiki.js +0 -312
- package/static/assets/codemirror/mode/toml/toml.js +0 -88
- package/static/assets/codemirror/mode/tornado/tornado.js +0 -68
- package/static/assets/codemirror/mode/troff/troff.js +0 -84
- package/static/assets/codemirror/mode/ttcn/ttcn.js +0 -283
- package/static/assets/codemirror/mode/ttcn-cfg/ttcn-cfg.js +0 -214
- package/static/assets/codemirror/mode/turtle/turtle.js +0 -162
- package/static/assets/codemirror/mode/twig/twig.js +0 -141
- package/static/assets/codemirror/mode/vb/vb.js +0 -275
- package/static/assets/codemirror/mode/vbscript/vbscript.js +0 -350
- package/static/assets/codemirror/mode/velocity/velocity.js +0 -202
- package/static/assets/codemirror/mode/verilog/verilog.js +0 -781
- package/static/assets/codemirror/mode/vhdl/vhdl.js +0 -189
- package/static/assets/codemirror/mode/vue/vue.js +0 -77
- package/static/assets/codemirror/mode/wast/wast.js +0 -132
- package/static/assets/codemirror/mode/webidl/webidl.js +0 -195
- package/static/assets/codemirror/mode/xml/xml.js +0 -417
- package/static/assets/codemirror/mode/xquery/xquery.js +0 -448
- package/static/assets/codemirror/mode/yacas/yacas.js +0 -204
- package/static/assets/codemirror/mode/yaml/yaml.js +0 -120
- package/static/assets/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js +0 -72
- package/static/assets/codemirror/mode/z80/z80.js +0 -116
- package/static/chunk-2KLC4T2Z.js +0 -1
- package/static/chunk-2VMSXRCB.js +0 -12
- package/static/chunk-3OHSRRKH.js +0 -4
- package/static/chunk-3R4WKOHQ.js +0 -1
- package/static/chunk-3XVM35O2.js +0 -1
- package/static/chunk-3YVRP3VM.js +0 -2
- package/static/chunk-5UKZLU5H.js +0 -1
- package/static/chunk-AF24EYXU.js +0 -1
- package/static/chunk-AKQVEHO6.js +0 -2
- package/static/chunk-BCVX464U.js +0 -2
- package/static/chunk-BQV4FRM6.js +0 -1
- package/static/chunk-CETH7UYS.js +0 -1
- package/static/chunk-DIT6W7VM.js +0 -562
- package/static/chunk-DKSEQTMX.js +0 -1
- package/static/chunk-FZ3JPGYZ.js +0 -1
- package/static/chunk-IQSKQXC3.js +0 -1
- package/static/chunk-ITUFI2BJ.js +0 -1
- package/static/chunk-LCTZJ537.js +0 -1
- package/static/chunk-LK2UCQJ6.js +0 -1
- package/static/chunk-LP5TBXEN.js +0 -7
- package/static/chunk-N3U6637P.js +0 -1
- package/static/chunk-NNV4OXSB.js +0 -1
- package/static/chunk-O6FYXVHI.js +0 -1
- package/static/chunk-OOGP4WSH.js +0 -2
- package/static/chunk-PCWDQPOM.js +0 -2
- package/static/chunk-PNR6M34W.js +0 -1
- package/static/chunk-Q5KM7LTX.js +0 -1
- package/static/chunk-QHC6ZPQ4.js +0 -1
- package/static/chunk-QMRBZHE4.js +0 -1
- package/static/chunk-QSJRY3TF.js +0 -1
- package/static/chunk-QUUIRSYT.js +0 -1
- package/static/chunk-RFH46UW3.js +0 -1
- package/static/chunk-RSXHRKM5.js +0 -1
- package/static/chunk-RV3VZJPZ.js +0 -1
- package/static/chunk-S7HNXVRB.js +0 -1
- package/static/chunk-SBZ572Q4.js +0 -2
- package/static/chunk-SJR5R3Y4.js +0 -1
- package/static/chunk-SLHTEGRU.js +0 -1
- package/static/chunk-SSFF27P2.js +0 -24
- package/static/chunk-V3LHHZYN.js +0 -1
- package/static/chunk-VQQKMY2C.js +0 -1
- package/static/chunk-WSSU2HXE.js +0 -1
- package/static/chunk-XDZGW64M.js +0 -3
- package/static/chunk-XTRDKGKG.js +0 -1
- package/static/chunk-YLWTEC3X.js +0 -1
- package/static/chunk-Z5J5F5SX.js +0 -1
- package/static/main-4H5BJY3J.js +0 -9
- package/static/scripts-WRDOQIU5.js +0 -24
- package/static/styles-2C2UNCNB.css +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/notifications/services/notifications-manager.service.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Injectable, Logger } from '@nestjs/common'\nimport { i18nLocale } from '../../../common/i18n'\nimport { MailProps } from '../../../infrastructure/mailer/interfaces/mail.interface'\nimport { Mailer } from '../../../infrastructure/mailer/mailer.service'\nimport { USER_NOTIFICATION } from '../../users/constants/user'\nimport { UserModel } from '../../users/models/user.model'\nimport { getAvatarBase64 } from '../../users/utils/avatar'\nimport { NOTIFICATION_APP } from '../constants/notifications'\nimport { NOTIFICATIONS_WS } from '../constants/websocket'\nimport type { NotificationContent, NotificationFromUser, NotificationOptions } from '../interfaces/notification-properties.interface'\nimport type { UserMailNotification } from '../interfaces/user-mail-notification'\nimport { auth2FaMail, authLocked, commentMail, linkMail, shareMail, spaceMail, spaceRootMail, syncMail } from '../mails/models'\nimport { WebSocketNotifications } from '../notifications.gateway'\nimport { NotificationsQueries } from './notifications-queries.service'\n\n@Injectable()\nexport class NotificationsManager {\n private readonly logger = new Logger(NotificationsManager.name)\n\n constructor(\n private readonly mailer: Mailer,\n private readonly notificationsQueries: NotificationsQueries,\n private readonly webSocketNotifications: WebSocketNotifications\n ) {}\n\n list(user: UserModel, onlyUnread: boolean = false): Promise<NotificationFromUser[]> {\n return this.notificationsQueries.list(user.id, onlyUnread)\n }\n\n async create(toUsers: UserMailNotification[] | number[], content: NotificationContent, options?: NotificationOptions): Promise<void> {\n // store it in db\n const isArrayOfUsers: boolean = typeof toUsers[0] === 'object'\n const toUserIds = isArrayOfUsers ? (toUsers as UserMailNotification[]).map((m) => m.id) : (toUsers as number[])\n this.storeNotification(toUserIds, content, options?.author?.id).catch((e: Error) => this.logger.error(`${this.create.name} - ${e}`))\n\n // send websocket notification\n this.webSocketNotifications.sendMessageToUsers(toUserIds, NOTIFICATIONS_WS.EVENTS.NOTIFICATION, 'check')\n\n // send emails\n if (this.mailer.available) {\n const usersNotifiedByEmail: UserMailNotification[] = isArrayOfUsers\n ? (toUsers as UserMailNotification[]).filter((u) => u.notification === USER_NOTIFICATION.APPLICATION_EMAIL)\n : await this.notificationsQueries.usersNotifiedByEmail(toUsers as number[])\n if (!usersNotifiedByEmail.length) {\n return\n }\n this.sendEmailNotification(usersNotifiedByEmail, content, options).catch((e: Error) => this.logger.error(`${this.create.name} - ${e}`))\n }\n }\n\n wasRead(user: UserModel, notificationId?: number): void {\n this.notificationsQueries.wasRead(user.id, notificationId).catch((e: Error) => this.logger.error(`${this.wasRead.name} - ${e}`))\n }\n\n async delete(user: UserModel, notificationId?: number): Promise<void> {\n return this.notificationsQueries.delete(user.id, notificationId)\n }\n\n async sendEmailNotification(toUsers: UserMailNotification[], content: NotificationContent, options?: NotificationOptions): Promise<void> {\n if (!this.mailer.available) {\n return\n }\n if (options?.author) {\n options.author.avatarBase64 = await getAvatarBase64(options.author.login)\n }\n this.mailer\n .sendMails(\n await Promise.all(\n toUsers.map(async (m) => {\n const [title, html] = this.genMail(m.language as i18nLocale, content, options)\n return {\n to: m.email,\n subject: title,\n html: html\n } satisfies MailProps\n })\n )\n )\n .catch((e: Error) => this.logger.error(`${this.sendEmailNotification.name} - ${e}`))\n }\n\n private async storeNotification(toUserIds: number[], content: NotificationContent, authorId?: number): Promise<void> {\n // store it in db\n try {\n await this.notificationsQueries.create(authorId || null, toUserIds, content)\n } catch (e) {\n this.logger.error(`${this.create.name} - ${e}`)\n }\n }\n\n private genMail(language: i18nLocale, content: NotificationContent, options?: NotificationOptions): [string, string] {\n switch (content.app) {\n case NOTIFICATION_APP.COMMENTS:\n return commentMail(language, content, { content: options.content, currentUrl: options.currentUrl, author: options.author })\n case NOTIFICATION_APP.SPACES:\n return spaceMail(language, content, { currentUrl: options.currentUrl, action: options.action })\n case NOTIFICATION_APP.SPACE_ROOTS:\n return spaceRootMail(language, content, { currentUrl: options.currentUrl, author: options.author, action: options.action })\n case NOTIFICATION_APP.SHARES:\n return shareMail(language, content, { currentUrl: options.currentUrl, author: options.author, action: options.action })\n case NOTIFICATION_APP.LINKS:\n return linkMail(language, content, {\n currentUrl: options.currentUrl,\n author: options.author,\n linkUUID: options.linkUUID,\n linkPassword: options.linkPassword,\n action: options.action\n })\n case NOTIFICATION_APP.SYNC:\n return syncMail(language, content, { currentUrl: options.currentUrl, action: options.action })\n case NOTIFICATION_APP.AUTH_2FA:\n return auth2FaMail(language, content)\n case NOTIFICATION_APP.AUTH_LOCKED:\n return authLocked(language, content)\n default:\n this.logger.error(`${this.genMail.name} - case not handled : ${content.app}`)\n }\n }\n}\n"],"names":["NotificationsManager","list","user","onlyUnread","notificationsQueries","id","create","toUsers","content","options","isArrayOfUsers","toUserIds","map","m","storeNotification","author","catch","e","logger","error","name","webSocketNotifications","sendMessageToUsers","NOTIFICATIONS_WS","EVENTS","NOTIFICATION","mailer","available","usersNotifiedByEmail","filter","u","notification","USER_NOTIFICATION","APPLICATION_EMAIL","length","sendEmailNotification","wasRead","notificationId","delete","avatarBase64","getAvatarBase64","login","sendMails","Promise","all","title","html","genMail","language","to","email","subject","authorId","app","NOTIFICATION_APP","COMMENTS","commentMail","currentUrl","SPACES","spaceMail","action","SPACE_ROOTS","spaceRootMail","SHARES","shareMail","LINKS","linkMail","linkUUID","linkPassword","SYNC","syncMail","AUTH_2FA","auth2FaMail","AUTH_LOCKED","authLocked","Logger"],"mappings":"AAAA;;;;CAIC;;;;+BAkBYA;;;eAAAA;;;wBAhBsB;+BAGZ;sBACW;wBAEF;+BACC;2BACA;wBAG6E;sCACvE;6CACF;;;;;;;;;;AAG9B,IAAA,AAAMA,uBAAN,MAAMA;IASXC,KAAKC,IAAe,EAAEC,aAAsB,KAAK,EAAmC;QAClF,OAAO,IAAI,CAACC,oBAAoB,CAACH,IAAI,CAACC,KAAKG,EAAE,EAAEF;IACjD;IAEA,MAAMG,OAAOC,OAA0C,EAAEC,OAA4B,EAAEC,OAA6B,EAAiB;QACnI,iBAAiB;QACjB,MAAMC,iBAA0B,OAAOH,OAAO,CAAC,EAAE,KAAK;QACtD,MAAMI,YAAYD,iBAAiB,AAACH,QAAmCK,GAAG,CAAC,CAACC,IAAMA,EAAER,EAAE,IAAKE;QAC3F,IAAI,CAACO,iBAAiB,CAACH,WAAWH,SAASC,SAASM,QAAQV,IAAIW,KAAK,CAAC,CAACC,IAAa,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAACb,MAAM,CAACc,IAAI,CAAC,GAAG,EAAEH,GAAG;QAElI,8BAA8B;QAC9B,IAAI,CAACI,sBAAsB,CAACC,kBAAkB,CAACX,WAAWY,2BAAgB,CAACC,MAAM,CAACC,YAAY,EAAE;QAEhG,cAAc;QACd,IAAI,IAAI,CAACC,MAAM,CAACC,SAAS,EAAE;YACzB,MAAMC,uBAA+ClB,iBACjD,AAACH,QAAmCsB,MAAM,CAAC,CAACC,IAAMA,EAAEC,YAAY,KAAKC,uBAAiB,CAACC,iBAAiB,IACxG,MAAM,IAAI,CAAC7B,oBAAoB,CAACwB,oBAAoB,CAACrB;YACzD,IAAI,CAACqB,qBAAqBM,MAAM,EAAE;gBAChC;YACF;YACA,IAAI,CAACC,qBAAqB,CAACP,sBAAsBpB,SAASC,SAASO,KAAK,CAAC,CAACC,IAAa,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAACb,MAAM,CAACc,IAAI,CAAC,GAAG,EAAEH,GAAG;QACvI;IACF;IAEAmB,QAAQlC,IAAe,EAAEmC,cAAuB,EAAQ;QACtD,IAAI,CAACjC,oBAAoB,CAACgC,OAAO,CAAClC,KAAKG,EAAE,EAAEgC,gBAAgBrB,KAAK,CAAC,CAACC,IAAa,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAACiB,OAAO,CAAChB,IAAI,CAAC,GAAG,EAAEH,GAAG;IAChI;IAEA,MAAMqB,OAAOpC,IAAe,EAAEmC,cAAuB,EAAiB;QACpE,OAAO,IAAI,CAACjC,oBAAoB,CAACkC,MAAM,CAACpC,KAAKG,EAAE,EAAEgC;IACnD;IAEA,MAAMF,sBAAsB5B,OAA+B,EAAEC,OAA4B,EAAEC,OAA6B,EAAiB;QACvI,IAAI,CAAC,IAAI,CAACiB,MAAM,CAACC,SAAS,EAAE;YAC1B;QACF;QACA,IAAIlB,SAASM,QAAQ;YACnBN,QAAQM,MAAM,CAACwB,YAAY,GAAG,MAAMC,IAAAA,uBAAe,EAAC/B,QAAQM,MAAM,CAAC0B,KAAK;QAC1E;QACA,IAAI,CAACf,MAAM,CACRgB,SAAS,CACR,MAAMC,QAAQC,GAAG,CACfrC,QAAQK,GAAG,CAAC,OAAOC;YACjB,MAAM,CAACgC,OAAOC,KAAK,GAAG,IAAI,CAACC,OAAO,CAAClC,EAAEmC,QAAQ,EAAgBxC,SAASC;YACtE,OAAO;gBACLwC,IAAIpC,EAAEqC,KAAK;gBACXC,SAASN;gBACTC,MAAMA;YACR;QACF,KAGH9B,KAAK,CAAC,CAACC,IAAa,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAACgB,qBAAqB,CAACf,IAAI,CAAC,GAAG,EAAEH,GAAG;IACtF;IAEA,MAAcH,kBAAkBH,SAAmB,EAAEH,OAA4B,EAAE4C,QAAiB,EAAiB;QACnH,iBAAiB;QACjB,IAAI;YACF,MAAM,IAAI,CAAChD,oBAAoB,CAACE,MAAM,CAAC8C,YAAY,MAAMzC,WAAWH;QACtE,EAAE,OAAOS,GAAG;YACV,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAACb,MAAM,CAACc,IAAI,CAAC,GAAG,EAAEH,GAAG;QAChD;IACF;IAEQ8B,QAAQC,QAAoB,EAAExC,OAA4B,EAAEC,OAA6B,EAAoB;QACnH,OAAQD,QAAQ6C,GAAG;YACjB,KAAKC,+BAAgB,CAACC,QAAQ;gBAC5B,OAAOC,IAAAA,mBAAW,EAACR,UAAUxC,SAAS;oBAAEA,SAASC,QAAQD,OAAO;oBAAEiD,YAAYhD,QAAQgD,UAAU;oBAAE1C,QAAQN,QAAQM,MAAM;gBAAC;YAC3H,KAAKuC,+BAAgB,CAACI,MAAM;gBAC1B,OAAOC,IAAAA,iBAAS,EAACX,UAAUxC,SAAS;oBAAEiD,YAAYhD,QAAQgD,UAAU;oBAAEG,QAAQnD,QAAQmD,MAAM;gBAAC;YAC/F,KAAKN,+BAAgB,CAACO,WAAW;gBAC/B,OAAOC,IAAAA,qBAAa,EAACd,UAAUxC,SAAS;oBAAEiD,YAAYhD,QAAQgD,UAAU;oBAAE1C,QAAQN,QAAQM,MAAM;oBAAE6C,QAAQnD,QAAQmD,MAAM;gBAAC;YAC3H,KAAKN,+BAAgB,CAACS,MAAM;gBAC1B,OAAOC,IAAAA,iBAAS,EAAChB,UAAUxC,SAAS;oBAAEiD,YAAYhD,QAAQgD,UAAU;oBAAE1C,QAAQN,QAAQM,MAAM;oBAAE6C,QAAQnD,QAAQmD,MAAM;gBAAC;YACvH,KAAKN,+BAAgB,CAACW,KAAK;gBACzB,OAAOC,IAAAA,gBAAQ,EAAClB,UAAUxC,SAAS;oBACjCiD,YAAYhD,QAAQgD,UAAU;oBAC9B1C,QAAQN,QAAQM,MAAM;oBACtBoD,UAAU1D,QAAQ0D,QAAQ;oBAC1BC,cAAc3D,QAAQ2D,YAAY;oBAClCR,QAAQnD,QAAQmD,MAAM;gBACxB;YACF,KAAKN,+BAAgB,CAACe,IAAI;gBACxB,OAAOC,IAAAA,gBAAQ,EAACtB,UAAUxC,SAAS;oBAAEiD,YAAYhD,QAAQgD,UAAU;oBAAEG,QAAQnD,QAAQmD,MAAM;gBAAC;YAC9F,KAAKN,+BAAgB,CAACiB,QAAQ;gBAC5B,OAAOC,IAAAA,mBAAW,EAACxB,UAAUxC;YAC/B,KAAK8C,+BAAgB,CAACmB,WAAW;gBAC/B,OAAOC,IAAAA,kBAAU,EAAC1B,UAAUxC;YAC9B;gBACE,IAAI,CAACU,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAAC4B,OAAO,CAAC3B,IAAI,CAAC,sBAAsB,EAAEZ,QAAQ6C,GAAG,EAAE;QAChF;IACF;IAlGA,YACE,AAAiB3B,MAAc,EAC/B,AAAiBtB,oBAA0C,EAC3D,AAAiBiB,sBAA8C,CAC/D;aAHiBK,SAAAA;aACAtB,uBAAAA;aACAiB,yBAAAA;aALFH,SAAS,IAAIyD,cAAM,CAAC3E,qBAAqBoB,IAAI;IAM3D;AA+FL"}
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/notifications/services/notifications-manager.service.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Injectable, Logger } from '@nestjs/common'\nimport { i18nLocale } from '../../../common/i18n'\nimport { MailProps } from '../../../infrastructure/mailer/interfaces/mail.interface'\nimport { Mailer } from '../../../infrastructure/mailer/mailer.service'\nimport { USER_NOTIFICATION } from '../../users/constants/user'\nimport { UserModel } from '../../users/models/user.model'\nimport { getAvatarBase64 } from '../../users/utils/avatar'\nimport { NOTIFICATION_APP } from '../constants/notifications'\nimport { NOTIFICATIONS_WS } from '../constants/websocket'\nimport type { NotificationContent, NotificationFromUser, NotificationOptions } from '../interfaces/notification-properties.interface'\nimport type { UserMailNotification } from '../interfaces/user-mail-notification.interface'\nimport {\n auth2FaMail,\n authLockedMail,\n commentMail,\n linkMail,\n requestUnlockMail,\n serverUpdateAvailableMail,\n shareMail,\n spaceMail,\n spaceRootMail,\n syncMail\n} from '../mails/models'\nimport { WebSocketNotifications } from '../notifications.gateway'\nimport { NotificationsQueries } from './notifications-queries.service'\n\n@Injectable()\nexport class NotificationsManager {\n private readonly logger = new Logger(NotificationsManager.name)\n\n constructor(\n private readonly mailer: Mailer,\n private readonly notificationsQueries: NotificationsQueries,\n private readonly webSocketNotifications: WebSocketNotifications\n ) {}\n\n list(user: UserModel, onlyUnread: boolean = false): Promise<NotificationFromUser[]> {\n return this.notificationsQueries.list(user.id, onlyUnread)\n }\n\n async create(toUsers: UserMailNotification[] | number[], content: NotificationContent, options?: NotificationOptions): Promise<void> {\n // store it in db\n const isArrayOfUsers: boolean = typeof toUsers[0] === 'object'\n const toUserIds = isArrayOfUsers ? (toUsers as UserMailNotification[]).map((m) => m.id) : (toUsers as number[])\n this.storeNotification(toUserIds, content, options?.author?.id).catch((e: Error) => this.logger.error(`${this.create.name} - ${e}`))\n\n // send websocket notification\n this.webSocketNotifications.sendMessageToUsers(toUserIds, NOTIFICATIONS_WS.EVENTS.NOTIFICATION, 'check')\n\n // send emails\n if (this.mailer.available) {\n const usersNotifiedByEmail: UserMailNotification[] = isArrayOfUsers\n ? (toUsers as UserMailNotification[]).filter((u) => u.notification === USER_NOTIFICATION.APPLICATION_EMAIL)\n : await this.notificationsQueries.usersNotifiedByEmail(toUsers as number[])\n if (!usersNotifiedByEmail.length) {\n return\n }\n this.sendEmailNotification(usersNotifiedByEmail, content, options).catch((e: Error) => this.logger.error(`${this.create.name} - ${e}`))\n }\n }\n\n wasRead(user: UserModel, notificationId?: number): void {\n this.notificationsQueries.wasRead(user.id, notificationId).catch((e: Error) => this.logger.error(`${this.wasRead.name} - ${e}`))\n }\n\n async delete(user: UserModel, notificationId?: number): Promise<void> {\n return this.notificationsQueries.delete(user.id, notificationId)\n }\n\n async sendEmailNotification(toUsers: UserMailNotification[], content: NotificationContent, options?: NotificationOptions): Promise<void> {\n if (!this.mailer.available) {\n return\n }\n if (options?.author) {\n options.author.avatarBase64 = await getAvatarBase64(options.author.login)\n }\n this.mailer\n .sendMails(\n await Promise.all(\n toUsers.map(async (m) => {\n const [title, html] = this.genMail(m.language as i18nLocale, content, options)\n return {\n to: m.email,\n subject: title,\n html: html\n } satisfies MailProps\n })\n )\n )\n .catch((e: Error) => this.logger.error(`${this.sendEmailNotification.name} - ${e}`))\n }\n\n private async storeNotification(toUserIds: number[], content: NotificationContent, authorId?: number): Promise<void> {\n // store it in db\n try {\n await this.notificationsQueries.create(authorId || null, toUserIds, content)\n } catch (e) {\n this.logger.error(`${this.create.name} - ${e}`)\n }\n }\n\n private genMail(language: i18nLocale, content: NotificationContent, options?: NotificationOptions): [string, string] {\n switch (content.app) {\n case NOTIFICATION_APP.COMMENTS:\n return commentMail(language, content, { content: options.content, currentUrl: options.currentUrl, author: options.author })\n case NOTIFICATION_APP.SPACES:\n return spaceMail(language, content, { currentUrl: options.currentUrl, action: options.action })\n case NOTIFICATION_APP.SPACE_ROOTS:\n return spaceRootMail(language, content, { currentUrl: options.currentUrl, author: options.author, action: options.action })\n case NOTIFICATION_APP.SHARES:\n return shareMail(language, content, { currentUrl: options.currentUrl, author: options.author, action: options.action })\n case NOTIFICATION_APP.LINKS:\n return linkMail(language, content, {\n currentUrl: options.currentUrl,\n author: options.author,\n linkUUID: options.linkUUID,\n linkPassword: options.linkPassword,\n action: options.action\n })\n case NOTIFICATION_APP.SYNC:\n return syncMail(language, content, { currentUrl: options.currentUrl, action: options.action })\n case NOTIFICATION_APP.AUTH_2FA:\n return auth2FaMail(language, content)\n case NOTIFICATION_APP.AUTH_LOCKED:\n return authLockedMail(language, content)\n case NOTIFICATION_APP.UNLOCK_REQUEST:\n return requestUnlockMail(language, content, { currentUrl: options.currentUrl, author: options.author })\n case NOTIFICATION_APP.UPDATE_AVAILABLE:\n return serverUpdateAvailableMail(language, content)\n default:\n this.logger.error(`${this.genMail.name} - case not handled : ${content.app}`)\n }\n }\n}\n"],"names":["NotificationsManager","list","user","onlyUnread","notificationsQueries","id","create","toUsers","content","options","isArrayOfUsers","toUserIds","map","m","storeNotification","author","catch","e","logger","error","name","webSocketNotifications","sendMessageToUsers","NOTIFICATIONS_WS","EVENTS","NOTIFICATION","mailer","available","usersNotifiedByEmail","filter","u","notification","USER_NOTIFICATION","APPLICATION_EMAIL","length","sendEmailNotification","wasRead","notificationId","delete","avatarBase64","getAvatarBase64","login","sendMails","Promise","all","title","html","genMail","language","to","email","subject","authorId","app","NOTIFICATION_APP","COMMENTS","commentMail","currentUrl","SPACES","spaceMail","action","SPACE_ROOTS","spaceRootMail","SHARES","shareMail","LINKS","linkMail","linkUUID","linkPassword","SYNC","syncMail","AUTH_2FA","auth2FaMail","AUTH_LOCKED","authLockedMail","UNLOCK_REQUEST","requestUnlockMail","UPDATE_AVAILABLE","serverUpdateAvailableMail","Logger"],"mappings":"AAAA;;;;CAIC;;;;+BA6BYA;;;eAAAA;;;wBA3BsB;+BAGZ;sBACW;wBAEF;+BACC;2BACA;wBAc1B;sCACgC;6CACF;;;;;;;;;;AAG9B,IAAA,AAAMA,uBAAN,MAAMA;IASXC,KAAKC,IAAe,EAAEC,aAAsB,KAAK,EAAmC;QAClF,OAAO,IAAI,CAACC,oBAAoB,CAACH,IAAI,CAACC,KAAKG,EAAE,EAAEF;IACjD;IAEA,MAAMG,OAAOC,OAA0C,EAAEC,OAA4B,EAAEC,OAA6B,EAAiB;QACnI,iBAAiB;QACjB,MAAMC,iBAA0B,OAAOH,OAAO,CAAC,EAAE,KAAK;QACtD,MAAMI,YAAYD,iBAAiB,AAACH,QAAmCK,GAAG,CAAC,CAACC,IAAMA,EAAER,EAAE,IAAKE;QAC3F,IAAI,CAACO,iBAAiB,CAACH,WAAWH,SAASC,SAASM,QAAQV,IAAIW,KAAK,CAAC,CAACC,IAAa,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAACb,MAAM,CAACc,IAAI,CAAC,GAAG,EAAEH,GAAG;QAElI,8BAA8B;QAC9B,IAAI,CAACI,sBAAsB,CAACC,kBAAkB,CAACX,WAAWY,2BAAgB,CAACC,MAAM,CAACC,YAAY,EAAE;QAEhG,cAAc;QACd,IAAI,IAAI,CAACC,MAAM,CAACC,SAAS,EAAE;YACzB,MAAMC,uBAA+ClB,iBACjD,AAACH,QAAmCsB,MAAM,CAAC,CAACC,IAAMA,EAAEC,YAAY,KAAKC,uBAAiB,CAACC,iBAAiB,IACxG,MAAM,IAAI,CAAC7B,oBAAoB,CAACwB,oBAAoB,CAACrB;YACzD,IAAI,CAACqB,qBAAqBM,MAAM,EAAE;gBAChC;YACF;YACA,IAAI,CAACC,qBAAqB,CAACP,sBAAsBpB,SAASC,SAASO,KAAK,CAAC,CAACC,IAAa,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAACb,MAAM,CAACc,IAAI,CAAC,GAAG,EAAEH,GAAG;QACvI;IACF;IAEAmB,QAAQlC,IAAe,EAAEmC,cAAuB,EAAQ;QACtD,IAAI,CAACjC,oBAAoB,CAACgC,OAAO,CAAClC,KAAKG,EAAE,EAAEgC,gBAAgBrB,KAAK,CAAC,CAACC,IAAa,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAACiB,OAAO,CAAChB,IAAI,CAAC,GAAG,EAAEH,GAAG;IAChI;IAEA,MAAMqB,OAAOpC,IAAe,EAAEmC,cAAuB,EAAiB;QACpE,OAAO,IAAI,CAACjC,oBAAoB,CAACkC,MAAM,CAACpC,KAAKG,EAAE,EAAEgC;IACnD;IAEA,MAAMF,sBAAsB5B,OAA+B,EAAEC,OAA4B,EAAEC,OAA6B,EAAiB;QACvI,IAAI,CAAC,IAAI,CAACiB,MAAM,CAACC,SAAS,EAAE;YAC1B;QACF;QACA,IAAIlB,SAASM,QAAQ;YACnBN,QAAQM,MAAM,CAACwB,YAAY,GAAG,MAAMC,IAAAA,uBAAe,EAAC/B,QAAQM,MAAM,CAAC0B,KAAK;QAC1E;QACA,IAAI,CAACf,MAAM,CACRgB,SAAS,CACR,MAAMC,QAAQC,GAAG,CACfrC,QAAQK,GAAG,CAAC,OAAOC;YACjB,MAAM,CAACgC,OAAOC,KAAK,GAAG,IAAI,CAACC,OAAO,CAAClC,EAAEmC,QAAQ,EAAgBxC,SAASC;YACtE,OAAO;gBACLwC,IAAIpC,EAAEqC,KAAK;gBACXC,SAASN;gBACTC,MAAMA;YACR;QACF,KAGH9B,KAAK,CAAC,CAACC,IAAa,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAACgB,qBAAqB,CAACf,IAAI,CAAC,GAAG,EAAEH,GAAG;IACtF;IAEA,MAAcH,kBAAkBH,SAAmB,EAAEH,OAA4B,EAAE4C,QAAiB,EAAiB;QACnH,iBAAiB;QACjB,IAAI;YACF,MAAM,IAAI,CAAChD,oBAAoB,CAACE,MAAM,CAAC8C,YAAY,MAAMzC,WAAWH;QACtE,EAAE,OAAOS,GAAG;YACV,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAACb,MAAM,CAACc,IAAI,CAAC,GAAG,EAAEH,GAAG;QAChD;IACF;IAEQ8B,QAAQC,QAAoB,EAAExC,OAA4B,EAAEC,OAA6B,EAAoB;QACnH,OAAQD,QAAQ6C,GAAG;YACjB,KAAKC,+BAAgB,CAACC,QAAQ;gBAC5B,OAAOC,IAAAA,mBAAW,EAACR,UAAUxC,SAAS;oBAAEA,SAASC,QAAQD,OAAO;oBAAEiD,YAAYhD,QAAQgD,UAAU;oBAAE1C,QAAQN,QAAQM,MAAM;gBAAC;YAC3H,KAAKuC,+BAAgB,CAACI,MAAM;gBAC1B,OAAOC,IAAAA,iBAAS,EAACX,UAAUxC,SAAS;oBAAEiD,YAAYhD,QAAQgD,UAAU;oBAAEG,QAAQnD,QAAQmD,MAAM;gBAAC;YAC/F,KAAKN,+BAAgB,CAACO,WAAW;gBAC/B,OAAOC,IAAAA,qBAAa,EAACd,UAAUxC,SAAS;oBAAEiD,YAAYhD,QAAQgD,UAAU;oBAAE1C,QAAQN,QAAQM,MAAM;oBAAE6C,QAAQnD,QAAQmD,MAAM;gBAAC;YAC3H,KAAKN,+BAAgB,CAACS,MAAM;gBAC1B,OAAOC,IAAAA,iBAAS,EAAChB,UAAUxC,SAAS;oBAAEiD,YAAYhD,QAAQgD,UAAU;oBAAE1C,QAAQN,QAAQM,MAAM;oBAAE6C,QAAQnD,QAAQmD,MAAM;gBAAC;YACvH,KAAKN,+BAAgB,CAACW,KAAK;gBACzB,OAAOC,IAAAA,gBAAQ,EAAClB,UAAUxC,SAAS;oBACjCiD,YAAYhD,QAAQgD,UAAU;oBAC9B1C,QAAQN,QAAQM,MAAM;oBACtBoD,UAAU1D,QAAQ0D,QAAQ;oBAC1BC,cAAc3D,QAAQ2D,YAAY;oBAClCR,QAAQnD,QAAQmD,MAAM;gBACxB;YACF,KAAKN,+BAAgB,CAACe,IAAI;gBACxB,OAAOC,IAAAA,gBAAQ,EAACtB,UAAUxC,SAAS;oBAAEiD,YAAYhD,QAAQgD,UAAU;oBAAEG,QAAQnD,QAAQmD,MAAM;gBAAC;YAC9F,KAAKN,+BAAgB,CAACiB,QAAQ;gBAC5B,OAAOC,IAAAA,mBAAW,EAACxB,UAAUxC;YAC/B,KAAK8C,+BAAgB,CAACmB,WAAW;gBAC/B,OAAOC,IAAAA,sBAAc,EAAC1B,UAAUxC;YAClC,KAAK8C,+BAAgB,CAACqB,cAAc;gBAClC,OAAOC,IAAAA,yBAAiB,EAAC5B,UAAUxC,SAAS;oBAAEiD,YAAYhD,QAAQgD,UAAU;oBAAE1C,QAAQN,QAAQM,MAAM;gBAAC;YACvG,KAAKuC,+BAAgB,CAACuB,gBAAgB;gBACpC,OAAOC,IAAAA,iCAAyB,EAAC9B,UAAUxC;YAC7C;gBACE,IAAI,CAACU,MAAM,CAACC,KAAK,CAAC,GAAG,IAAI,CAAC4B,OAAO,CAAC3B,IAAI,CAAC,sBAAsB,EAAEZ,QAAQ6C,GAAG,EAAE;QAChF;IACF;IAtGA,YACE,AAAiB3B,MAAc,EAC/B,AAAiBtB,oBAA0C,EAC3D,AAAiBiB,sBAA8C,CAC/D;aAHiBK,SAAAA;aACAtB,uBAAAA;aACAiB,yBAAAA;aALFH,SAAS,IAAI6D,cAAM,CAAC/E,qBAAqBoB,IAAI;IAM3D;AAmGL"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/notifications/services/notifications-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, inArray, SelectedFields, SQL } from 'drizzle-orm'\nimport { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'\nimport { DBSchema } from '../../../infrastructure/database/interfaces/database.interface'\nimport { dbCheckAffectedRows } from '../../../infrastructure/database/utils'\nimport { USER_NOTIFICATION } from '../../users/constants/user'\nimport { userFullNameSQL, users } from '../../users/schemas/users.schema'\nimport type { NotificationContent, NotificationFromUser } from '../interfaces/notification-properties.interface'\nimport type { UserMailNotification } from '../interfaces/user-mail-notification'\nimport { Notification } from '../schemas/notification.interface'\nimport { notifications } from '../schemas/notifications.schema'\n\n@Injectable()\nexport class NotificationsQueries {\n constructor(@Inject(DB_TOKEN_PROVIDER) private readonly db: DBSchema) {}\n\n list(userId: number, onlyUnread: boolean = false): Promise<NotificationFromUser[]> {\n const where: SQL[] = [eq(notifications.toUserId, userId), ...(onlyUnread ? [eq(notifications.wasRead, false)] : [])]\n return this.db\n .select({\n id: notifications.id,\n fromUser: { id: users.id, login: users.login, email: users.email, fullName: userFullNameSQL(users) },\n content: notifications.content,\n wasRead: notifications.wasRead,\n createdAt: notifications.createdAt\n } satisfies NotificationFromUser | SelectedFields<any, any>)\n .from(notifications)\n .leftJoin(users, eq(users.id, notifications.fromUserId))\n .where(and(...where))\n .orderBy(desc(notifications.id))\n }\n\n async create(fromUserId: number, toUserIds: number[], content: NotificationContent): Promise<void> {\n dbCheckAffectedRows(\n await this.db.insert(notifications).values(\n toUserIds.map((toUserId: number) => ({\n fromUserId: fromUserId,\n toUserId: toUserId,\n content: content\n }))\n ),\n toUserIds.length\n )\n }\n\n async wasRead(userId: number, notificationId: number): Promise<void> {\n await this.db\n .update(notifications)\n .set({ wasRead: true } as Notification)\n .where(and(eq(notifications.toUserId, userId), eq(notifications.id, notificationId), eq(notifications.wasRead, false)))\n }\n\n async delete(userId: number, notificationId?: number): Promise<void> {\n const where: SQL[] = [eq(notifications.toUserId, userId), ...(notificationId ? [eq(notifications.id, notificationId)] : [])]\n await this.db.delete(notifications).where(and(...where))\n }\n\n usersNotifiedByEmail(userIds: number[]): Promise<UserMailNotification[]> {\n return this.db\n .select({\n id: users.id,\n email: users.email,\n language: users.language,\n notification: users.notification\n } satisfies UserMailNotification | SelectedFields<any, any>)\n .from(users)\n .where(and(inArray(users.id, userIds), eq(users.notification, USER_NOTIFICATION.APPLICATION_EMAIL)))\n }\n}\n"],"names":["NotificationsQueries","list","userId","onlyUnread","where","eq","notifications","toUserId","wasRead","db","select","id","fromUser","users","login","email","fullName","userFullNameSQL","content","createdAt","from","leftJoin","fromUserId","and","orderBy","desc","create","toUserIds","dbCheckAffectedRows","insert","values","map","length","notificationId","update","set","delete","usersNotifiedByEmail","userIds","language","notification","inArray","USER_NOTIFICATION","APPLICATION_EMAIL"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/notifications/services/notifications-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, inArray, SelectedFields, SQL } from 'drizzle-orm'\nimport { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'\nimport { DBSchema } from '../../../infrastructure/database/interfaces/database.interface'\nimport { dbCheckAffectedRows } from '../../../infrastructure/database/utils'\nimport { USER_NOTIFICATION } from '../../users/constants/user'\nimport { userFullNameSQL, users } from '../../users/schemas/users.schema'\nimport type { NotificationContent, NotificationFromUser } from '../interfaces/notification-properties.interface'\nimport type { UserMailNotification } from '../interfaces/user-mail-notification.interface'\nimport { Notification } from '../schemas/notification.interface'\nimport { notifications } from '../schemas/notifications.schema'\n\n@Injectable()\nexport class NotificationsQueries {\n constructor(@Inject(DB_TOKEN_PROVIDER) private readonly db: DBSchema) {}\n\n list(userId: number, onlyUnread: boolean = false): Promise<NotificationFromUser[]> {\n const where: SQL[] = [eq(notifications.toUserId, userId), ...(onlyUnread ? [eq(notifications.wasRead, false)] : [])]\n return this.db\n .select({\n id: notifications.id,\n fromUser: { id: users.id, login: users.login, email: users.email, fullName: userFullNameSQL(users) },\n content: notifications.content,\n wasRead: notifications.wasRead,\n createdAt: notifications.createdAt\n } satisfies NotificationFromUser | SelectedFields<any, any>)\n .from(notifications)\n .leftJoin(users, eq(users.id, notifications.fromUserId))\n .where(and(...where))\n .orderBy(desc(notifications.id))\n }\n\n async create(fromUserId: number, toUserIds: number[], content: NotificationContent): Promise<void> {\n dbCheckAffectedRows(\n await this.db.insert(notifications).values(\n toUserIds.map((toUserId: number) => ({\n fromUserId: fromUserId,\n toUserId: toUserId,\n content: content\n }))\n ),\n toUserIds.length\n )\n }\n\n async wasRead(userId: number, notificationId: number): Promise<void> {\n await this.db\n .update(notifications)\n .set({ wasRead: true } as Notification)\n .where(and(eq(notifications.toUserId, userId), eq(notifications.id, notificationId), eq(notifications.wasRead, false)))\n }\n\n async delete(userId: number, notificationId?: number): Promise<void> {\n const where: SQL[] = [eq(notifications.toUserId, userId), ...(notificationId ? [eq(notifications.id, notificationId)] : [])]\n await this.db.delete(notifications).where(and(...where))\n }\n\n usersNotifiedByEmail(userIds: number[]): Promise<UserMailNotification[]> {\n return this.db\n .select({\n id: users.id,\n email: users.email,\n language: users.language,\n notification: users.notification\n } satisfies UserMailNotification | SelectedFields<any, any>)\n .from(users)\n .where(and(inArray(users.id, userIds), eq(users.notification, USER_NOTIFICATION.APPLICATION_EMAIL)))\n }\n}\n"],"names":["NotificationsQueries","list","userId","onlyUnread","where","eq","notifications","toUserId","wasRead","db","select","id","fromUser","users","login","email","fullName","userFullNameSQL","content","createdAt","from","leftJoin","fromUserId","and","orderBy","desc","create","toUserIds","dbCheckAffectedRows","insert","values","map","length","notificationId","update","set","delete","usersNotifiedByEmail","userIds","language","notification","inArray","USER_NOTIFICATION","APPLICATION_EMAIL"],"mappings":"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"}
|
|
@@ -16,6 +16,7 @@ const _common = require("@nestjs/common");
|
|
|
16
16
|
const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
|
|
17
17
|
const _constants = require("../../../common/constants");
|
|
18
18
|
const _functions = require("../../../common/functions");
|
|
19
|
+
const _shared = require("../../../common/shared");
|
|
19
20
|
const _contextmanagerservice = require("../../../infrastructure/context/services/context-manager.service");
|
|
20
21
|
const _fileerror = require("../../files/models/file-error");
|
|
21
22
|
const _files = require("../../files/utils/files");
|
|
@@ -127,6 +128,12 @@ let SharesManager = class SharesManager {
|
|
|
127
128
|
share.ownerId = user.id;
|
|
128
129
|
if (createOrUpdateShareDto.file.ownerId) {
|
|
129
130
|
/* PERSONAL SPACE CASE */ // check file
|
|
131
|
+
if (createOrUpdateShareDto.file.ownerId === user.id && createOrUpdateShareDto.file.id > 0) {
|
|
132
|
+
// When a user shares a root space they own, it is recommended to create the share from their personal space.
|
|
133
|
+
// `file.path` come from a root space with a custom name (invalid in the personal space context); if so, retrieve the original path.
|
|
134
|
+
const f = await this.spacesQueries.getUserFile(user.id, createOrUpdateShareDto.file.id);
|
|
135
|
+
if (f) createOrUpdateShareDto.file.path = f.path;
|
|
136
|
+
}
|
|
130
137
|
const realPath = _nodepath.default.join(user.filesPath, createOrUpdateShareDto.file.path);
|
|
131
138
|
if (!await (0, _files.isPathExists)(realPath)) {
|
|
132
139
|
this.logger.warn(`${this.createShare.name} - location does not exist : ${realPath}`);
|
|
@@ -147,11 +154,11 @@ let SharesManager = class SharesManager {
|
|
|
147
154
|
space.setPermissions(true);
|
|
148
155
|
// intersect space permissions for members
|
|
149
156
|
for (const m of createOrUpdateShareDto.members){
|
|
150
|
-
m.permissions = (0,
|
|
157
|
+
m.permissions = (0, _shared.intersectPermissions)(space.envPermissions, m.permissions);
|
|
151
158
|
}
|
|
152
159
|
// intersect space permissions for links
|
|
153
160
|
for (const l of createOrUpdateShareDto.links){
|
|
154
|
-
l.permissions = (0,
|
|
161
|
+
l.permissions = (0, _shared.intersectPermissions)(space.envPermissions, l.permissions);
|
|
155
162
|
}
|
|
156
163
|
// check file
|
|
157
164
|
try {
|
|
@@ -187,7 +194,7 @@ let SharesManager = class SharesManager {
|
|
|
187
194
|
}
|
|
188
195
|
// create share
|
|
189
196
|
share.id = await this.sharesQueries.createShare(share);
|
|
190
|
-
// check
|
|
197
|
+
// check and update members
|
|
191
198
|
await this.createOrUpdateLinksAsMembers(user, share, _links.LINK_TYPE.SHARE, createOrUpdateShareDto.links);
|
|
192
199
|
await this.updateMembers(user, share, [], createOrUpdateShareDto.members);
|
|
193
200
|
return this.getShareWithMembers(user, share.id);
|
|
@@ -224,11 +231,11 @@ let SharesManager = class SharesManager {
|
|
|
224
231
|
const linkMembers = await this.createOrUpdateLinksAsMembers(user, share, _links.LINK_TYPE.SHARE, createOrUpdateShareDto.links);
|
|
225
232
|
// intersect share permissions for members
|
|
226
233
|
for (const m of createOrUpdateShareDto.members){
|
|
227
|
-
m.permissions = (0,
|
|
234
|
+
m.permissions = (0, _shared.intersectPermissions)(share.file.permissions, m.permissions);
|
|
228
235
|
}
|
|
229
236
|
// intersect share permissions for links
|
|
230
237
|
for (const l of linkMembers){
|
|
231
|
-
l.permissions = (0,
|
|
238
|
+
l.permissions = (0, _shared.intersectPermissions)(share.file.permissions, l.permissions);
|
|
232
239
|
}
|
|
233
240
|
await this.updateMembers(user, share, share.members, [
|
|
234
241
|
...createOrUpdateShareDto.members,
|
|
@@ -342,11 +349,11 @@ let SharesManager = class SharesManager {
|
|
|
342
349
|
share.id = await this.sharesQueries.createShare(share);
|
|
343
350
|
// intersect parent share permissions for members
|
|
344
351
|
for (const m of createOrUpdateShareDto.members){
|
|
345
|
-
m.permissions = (0,
|
|
352
|
+
m.permissions = (0, _shared.intersectPermissions)(pSharePermissions.permissions, m.permissions);
|
|
346
353
|
}
|
|
347
354
|
// intersect parent share permissions for links
|
|
348
355
|
for (const l of createOrUpdateShareDto.links){
|
|
349
|
-
l.permissions = (0,
|
|
356
|
+
l.permissions = (0, _shared.intersectPermissions)(pSharePermissions.permissions, l.permissions);
|
|
350
357
|
}
|
|
351
358
|
// check & update members
|
|
352
359
|
await this.createOrUpdateLinksAsMembers(user, share, _links.LINK_TYPE.SHARE, createOrUpdateShareDto.links);
|
|
@@ -547,7 +554,7 @@ let SharesManager = class SharesManager {
|
|
|
547
554
|
// permissions are only present if the share type is link
|
|
548
555
|
// intersect permissions to ensure that the user does not attempt to exceed his rights
|
|
549
556
|
const shareLink = await this.getShareLink(user, spaceOrShareId);
|
|
550
|
-
updateMember.permissions = (0,
|
|
557
|
+
updateMember.permissions = (0, _shared.intersectPermissions)(shareLink.file.permissions, v);
|
|
551
558
|
}
|
|
552
559
|
break;
|
|
553
560
|
case 'language':
|
|
@@ -984,7 +991,7 @@ let SharesManager = class SharesManager {
|
|
|
984
991
|
url: _spaces.SPACE_REPOSITORY.SHARES
|
|
985
992
|
};
|
|
986
993
|
this.notificationsManager.create(memberIds, notification, {
|
|
987
|
-
currentUrl: this.contextManager.
|
|
994
|
+
currentUrl: this.contextManager.headerOriginUrl(),
|
|
988
995
|
author: user,
|
|
989
996
|
action: action
|
|
990
997
|
}).catch((e)=>this.logger.error(`${this.clearCachePermissionsAndOrNotify.name} - ${e}`));
|
|
@@ -1010,7 +1017,7 @@ let SharesManager = class SharesManager {
|
|
|
1010
1017
|
author: user,
|
|
1011
1018
|
linkUUID: link.linkSettings.uuid,
|
|
1012
1019
|
linkPassword: link.linkSettings.password,
|
|
1013
|
-
currentUrl: this.contextManager.
|
|
1020
|
+
currentUrl: this.contextManager.headerOriginUrl(),
|
|
1014
1021
|
action: action
|
|
1015
1022
|
}).catch((e)=>this.logger.error(`${this.notifyGuestLink.name} - ${e}`));
|
|
1016
1023
|
}
|