@sync-in/server 1.11.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/LICENSE +1 -1
- package/README.md +3 -11
- package/environment/environment.dist.min.yaml +1 -1
- package/environment/environment.dist.yaml +173 -28
- package/package.json +17 -16
- package/server/app.bootstrap.js +1 -5
- package/server/app.bootstrap.js.map +1 -1
- package/server/app.constants.js +1 -5
- package/server/app.constants.js.map +1 -1
- package/server/app.e2e-spec.js +1 -5
- package/server/app.e2e-spec.js.map +1 -1
- package/server/app.functions.js +1 -5
- package/server/app.functions.js.map +1 -1
- package/server/app.module.js +1 -5
- package/server/app.module.js.map +1 -1
- package/server/app.service.js +1 -5
- package/server/app.service.js.map +1 -1
- package/server/app.service.spec.js +2 -6
- package/server/app.service.spec.js.map +1 -1
- package/server/applications/admin/admin.module.js +1 -5
- package/server/applications/admin/admin.module.js.map +1 -1
- package/server/applications/admin/constants/routes.js +1 -5
- package/server/applications/admin/constants/routes.js.map +1 -1
- package/server/applications/admin/interfaces/check-update.interfaces.js +1 -5
- package/server/applications/admin/interfaces/check-update.interfaces.js.map +1 -1
- package/server/applications/admin/services/admin-scheduler.service.js +1 -5
- package/server/applications/admin/services/admin-scheduler.service.js.map +1 -1
- package/server/applications/admin/services/admin.service.js +13 -8
- package/server/applications/admin/services/admin.service.js.map +1 -1
- package/server/applications/admin/services/admin.service.spec.js +1 -5
- package/server/applications/admin/services/admin.service.spec.js.map +1 -1
- package/server/applications/admin/utils/check-update.js +1 -5
- package/server/applications/admin/utils/check-update.js.map +1 -1
- package/server/applications/applications.config.js +1 -5
- package/server/applications/applications.config.js.map +1 -1
- package/server/applications/applications.constants.js +5 -5
- package/server/applications/applications.constants.js.map +1 -1
- package/server/applications/applications.module.js +1 -5
- package/server/applications/applications.module.js.map +1 -1
- package/server/applications/comments/comments.controller.js +1 -5
- package/server/applications/comments/comments.controller.js.map +1 -1
- package/server/applications/comments/comments.controller.spec.js +1 -5
- package/server/applications/comments/comments.controller.spec.js.map +1 -1
- package/server/applications/comments/comments.module.js +1 -5
- package/server/applications/comments/comments.module.js.map +1 -1
- package/server/applications/comments/constants/routes.js +1 -5
- package/server/applications/comments/constants/routes.js.map +1 -1
- package/server/applications/comments/dto/comment.dto.js +1 -5
- package/server/applications/comments/dto/comment.dto.js.map +1 -1
- package/server/applications/comments/interfaces/comment-recent.interface.js +1 -5
- package/server/applications/comments/interfaces/comment-recent.interface.js.map +1 -1
- package/server/applications/comments/schemas/comment.interface.js +1 -5
- package/server/applications/comments/schemas/comment.interface.js.map +1 -1
- package/server/applications/comments/schemas/comments.schema.js +1 -5
- package/server/applications/comments/schemas/comments.schema.js.map +1 -1
- package/server/applications/comments/services/comments-manager.service.js +9 -7
- package/server/applications/comments/services/comments-manager.service.js.map +1 -1
- package/server/applications/comments/services/comments-manager.service.spec.js +10 -8
- package/server/applications/comments/services/comments-manager.service.spec.js.map +1 -1
- package/server/applications/comments/services/comments-queries.service.js +1 -5
- package/server/applications/comments/services/comments-queries.service.js.map +1 -1
- package/server/applications/files/adapters/files-indexer-mysql.service.js +29 -12
- package/server/applications/files/adapters/files-indexer-mysql.service.js.map +1 -1
- package/server/applications/files/adapters/files-indexer-mysql.service.spec.js +1 -5
- package/server/applications/files/adapters/files-indexer-mysql.service.spec.js.map +1 -1
- package/server/applications/files/constants/cache.js +1 -5
- package/server/applications/files/constants/cache.js.map +1 -1
- package/server/applications/files/constants/compress.js +1 -5
- package/server/applications/files/constants/compress.js.map +1 -1
- package/server/applications/files/constants/files.js +1 -5
- package/server/applications/files/constants/files.js.map +1 -1
- package/server/applications/files/constants/indexing.js +1 -5
- package/server/applications/files/constants/indexing.js.map +1 -1
- package/server/applications/files/constants/operations.js +1 -5
- package/server/applications/files/constants/operations.js.map +1 -1
- package/server/applications/files/constants/routes.js +1 -5
- package/server/applications/files/constants/routes.js.map +1 -1
- package/server/applications/files/constants/samples.js +1 -5
- package/server/applications/files/constants/samples.js.map +1 -1
- package/server/applications/files/dto/file-operations.dto.js +1 -5
- package/server/applications/files/dto/file-operations.dto.js.map +1 -1
- package/server/applications/files/events/file-task-event.js +1 -5
- package/server/applications/files/events/file-task-event.js.map +1 -1
- package/server/applications/files/files-tasks.controller.js +1 -5
- package/server/applications/files/files-tasks.controller.js.map +1 -1
- package/server/applications/files/files-tasks.controller.spec.js +1 -5
- package/server/applications/files/files-tasks.controller.spec.js.map +1 -1
- package/server/applications/files/files.config.js +1 -5
- package/server/applications/files/files.config.js.map +1 -1
- package/server/applications/files/files.controller.js +1 -5
- package/server/applications/files/files.controller.js.map +1 -1
- package/server/applications/files/files.controller.spec.js +1 -5
- package/server/applications/files/files.controller.spec.js.map +1 -1
- package/server/applications/files/files.module.js +1 -5
- package/server/applications/files/files.module.js.map +1 -1
- package/server/applications/files/interfaces/file-db-props.interface.js +1 -5
- package/server/applications/files/interfaces/file-db-props.interface.js.map +1 -1
- package/server/applications/files/interfaces/file-lock.interface.js +1 -5
- package/server/applications/files/interfaces/file-lock.interface.js.map +1 -1
- package/server/applications/files/interfaces/file-parse-index.js +1 -5
- package/server/applications/files/interfaces/file-parse-index.js.map +1 -1
- package/server/applications/files/interfaces/file-props.interface.js +1 -5
- package/server/applications/files/interfaces/file-props.interface.js.map +1 -1
- package/server/applications/files/interfaces/file-recent-location.interface.js +1 -5
- package/server/applications/files/interfaces/file-recent-location.interface.js.map +1 -1
- package/server/applications/files/interfaces/file-space.interface.js +1 -5
- package/server/applications/files/interfaces/file-space.interface.js.map +1 -1
- package/server/applications/files/interfaces/file-tree.interface.js +1 -5
- package/server/applications/files/interfaces/file-tree.interface.js.map +1 -1
- package/server/applications/files/models/file-error.js +1 -5
- package/server/applications/files/models/file-error.js.map +1 -1
- package/server/applications/files/models/file-lock-error.js +1 -5
- package/server/applications/files/models/file-lock-error.js.map +1 -1
- package/server/applications/files/models/file-task.js +1 -5
- package/server/applications/files/models/file-task.js.map +1 -1
- package/server/applications/files/models/files-indexer.js +1 -5
- package/server/applications/files/models/files-indexer.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js +21 -10
- package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.config.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.config.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.constants.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.constants.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.controller.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.controller.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.dtos.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.dtos.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.guard.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.guard.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.interface.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.interface.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.module.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.module.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.routes.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.routes.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.strategy.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.strategy.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.utils.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.utils.js.map +1 -1
- package/server/applications/files/modules/file-editor-providers.interface.js +6 -0
- package/server/applications/files/modules/file-editor-providers.interface.js.map +1 -0
- package/server/applications/files/modules/only-office/only-office-environment.decorator.js +1 -5
- package/server/applications/files/modules/only-office/only-office-environment.decorator.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office-manager.service.js +57 -19
- package/server/applications/files/modules/only-office/only-office-manager.service.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office-manager.service.spec.js +1 -5
- package/server/applications/files/modules/only-office/only-office-manager.service.spec.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.config.js +1 -5
- package/server/applications/files/modules/only-office/only-office.config.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.constants.js +1 -5
- package/server/applications/files/modules/only-office/only-office.constants.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.controller.js +1 -5
- package/server/applications/files/modules/only-office/only-office.controller.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.controller.spec.js +1 -5
- package/server/applications/files/modules/only-office/only-office.controller.spec.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.dtos.js +1 -5
- package/server/applications/files/modules/only-office/only-office.dtos.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.guard.js +1 -5
- package/server/applications/files/modules/only-office/only-office.guard.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.guard.spec.js +1 -5
- package/server/applications/files/modules/only-office/only-office.guard.spec.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.interface.js +1 -5
- package/server/applications/files/modules/only-office/only-office.interface.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.module.js +1 -5
- package/server/applications/files/modules/only-office/only-office.module.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.routes.js +1 -5
- package/server/applications/files/modules/only-office/only-office.routes.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.strategy.js +1 -5
- package/server/applications/files/modules/only-office/only-office.strategy.js.map +1 -1
- package/server/applications/files/schemas/file-content.interface.js +1 -5
- package/server/applications/files/schemas/file-content.interface.js.map +1 -1
- package/server/applications/files/schemas/file-recent.interface.js +1 -5
- package/server/applications/files/schemas/file-recent.interface.js.map +1 -1
- package/server/applications/files/schemas/file.interface.js +1 -5
- package/server/applications/files/schemas/file.interface.js.map +1 -1
- package/server/applications/files/schemas/files-content.schema.js +1 -5
- package/server/applications/files/schemas/files-content.schema.js.map +1 -1
- package/server/applications/files/schemas/files-recents.schema.js +1 -5
- package/server/applications/files/schemas/files-recents.schema.js.map +1 -1
- package/server/applications/files/schemas/files.schema.js +1 -5
- package/server/applications/files/schemas/files.schema.js.map +1 -1
- package/server/applications/files/services/files-content-manager.service.js +45 -16
- package/server/applications/files/services/files-content-manager.service.js.map +1 -1
- package/server/applications/files/services/files-lock-manager.service.js +53 -18
- package/server/applications/files/services/files-lock-manager.service.js.map +1 -1
- package/server/applications/files/services/files-lock-manager.service.spec.js +1 -5
- package/server/applications/files/services/files-lock-manager.service.spec.js.map +1 -1
- package/server/applications/files/services/files-manager.service.js +77 -24
- package/server/applications/files/services/files-manager.service.js.map +1 -1
- package/server/applications/files/services/files-manager.service.spec.js +1 -5
- package/server/applications/files/services/files-manager.service.spec.js.map +1 -1
- package/server/applications/files/services/files-methods.service.js +5 -6
- package/server/applications/files/services/files-methods.service.js.map +1 -1
- package/server/applications/files/services/files-methods.service.spec.js +1 -5
- package/server/applications/files/services/files-methods.service.spec.js.map +1 -1
- package/server/applications/files/services/files-parser.service.js +13 -8
- package/server/applications/files/services/files-parser.service.js.map +1 -1
- package/server/applications/files/services/files-parser.service.spec.js +1 -5
- package/server/applications/files/services/files-parser.service.spec.js.map +1 -1
- package/server/applications/files/services/files-queries.service.js +29 -12
- package/server/applications/files/services/files-queries.service.js.map +1 -1
- package/server/applications/files/services/files-recents.service.js +1 -5
- package/server/applications/files/services/files-recents.service.js.map +1 -1
- package/server/applications/files/services/files-recents.service.spec.js +1 -5
- package/server/applications/files/services/files-recents.service.spec.js.map +1 -1
- package/server/applications/files/services/files-scheduler.service.js +77 -24
- package/server/applications/files/services/files-scheduler.service.js.map +1 -1
- package/server/applications/files/services/files-search-manager.service.js +9 -7
- package/server/applications/files/services/files-search-manager.service.js.map +1 -1
- package/server/applications/files/services/files-search-manager.service.spec.js +1 -5
- package/server/applications/files/services/files-search-manager.service.spec.js.map +1 -1
- package/server/applications/files/services/files-tasks-manager.service.js +77 -24
- package/server/applications/files/services/files-tasks-manager.service.js.map +1 -1
- package/server/applications/files/services/files-tasks-manager.service.spec.js +1 -5
- package/server/applications/files/services/files-tasks-manager.service.spec.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/excel.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/excel.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/html.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/html.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/open-office.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/open-office.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/pdf.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/pdf.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/power-point.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/power-point.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/text.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/text.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/word.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/word.js.map +1 -1
- package/server/applications/files/utils/doc-textify/doc-textify.js +1 -5
- package/server/applications/files/utils/doc-textify/doc-textify.js.map +1 -1
- package/server/applications/files/utils/doc-textify/interfaces/doc-textify.interfaces.js +1 -5
- package/server/applications/files/utils/doc-textify/interfaces/doc-textify.interfaces.js.map +1 -1
- package/server/applications/files/utils/doc-textify/utils/clean.js +1 -5
- package/server/applications/files/utils/doc-textify/utils/clean.js.map +1 -1
- package/server/applications/files/utils/files-search.js +1 -5
- package/server/applications/files/utils/files-search.js.map +1 -1
- package/server/applications/files/utils/files-tree.js +1 -5
- package/server/applications/files/utils/files-tree.js.map +1 -1
- package/server/applications/files/utils/files.js +1 -5
- package/server/applications/files/utils/files.js.map +1 -1
- package/server/applications/files/utils/send-file.js +1 -5
- package/server/applications/files/utils/send-file.js.map +1 -1
- package/server/applications/files/utils/unzip-file.js +1 -5
- package/server/applications/files/utils/unzip-file.js.map +1 -1
- package/server/applications/files/utils/url-file.js +1 -5
- package/server/applications/files/utils/url-file.js.map +1 -1
- package/server/applications/links/constants/cache.js +1 -5
- package/server/applications/links/constants/cache.js.map +1 -1
- package/server/applications/links/constants/links.js +1 -5
- package/server/applications/links/constants/links.js.map +1 -1
- package/server/applications/links/constants/routes.js +1 -5
- package/server/applications/links/constants/routes.js.map +1 -1
- package/server/applications/links/dto/create-or-update-link.dto.js +1 -5
- package/server/applications/links/dto/create-or-update-link.dto.js.map +1 -1
- package/server/applications/links/interfaces/link-guest.interface.js +1 -5
- package/server/applications/links/interfaces/link-guest.interface.js.map +1 -1
- package/server/applications/links/interfaces/link-space.interface.js +1 -5
- package/server/applications/links/interfaces/link-space.interface.js.map +1 -1
- package/server/applications/links/links.controller.js +1 -5
- package/server/applications/links/links.controller.js.map +1 -1
- package/server/applications/links/links.controller.spec.js +1 -5
- package/server/applications/links/links.controller.spec.js.map +1 -1
- package/server/applications/links/schemas/link.interface.js +1 -5
- package/server/applications/links/schemas/link.interface.js.map +1 -1
- package/server/applications/links/schemas/links.schema.js +1 -5
- package/server/applications/links/schemas/links.schema.js.map +1 -1
- package/server/applications/links/services/links-manager.service.js +55 -20
- package/server/applications/links/services/links-manager.service.js.map +1 -1
- package/server/applications/links/services/links-manager.service.spec.js +3 -7
- package/server/applications/links/services/links-manager.service.spec.js.map +1 -1
- package/server/applications/links/services/links-queries.service.js +1 -5
- package/server/applications/links/services/links-queries.service.js.map +1 -1
- package/server/applications/notifications/constants/notifications.js +1 -5
- package/server/applications/notifications/constants/notifications.js.map +1 -1
- package/server/applications/notifications/constants/routes.js +1 -5
- package/server/applications/notifications/constants/routes.js.map +1 -1
- package/server/applications/notifications/constants/websocket.js +1 -5
- package/server/applications/notifications/constants/websocket.js.map +1 -1
- package/server/applications/notifications/i18n/de.js +1 -9
- package/server/applications/notifications/i18n/de.js.map +1 -1
- package/server/applications/notifications/i18n/es.js +1 -5
- package/server/applications/notifications/i18n/es.js.map +1 -1
- package/server/applications/notifications/i18n/fr.js +1 -5
- package/server/applications/notifications/i18n/fr.js.map +1 -1
- package/server/applications/notifications/i18n/hi.js +1 -5
- package/server/applications/notifications/i18n/hi.js.map +1 -1
- package/server/applications/notifications/i18n/index.js +1 -5
- package/server/applications/notifications/i18n/index.js.map +1 -1
- package/server/applications/notifications/i18n/it.js +1 -5
- package/server/applications/notifications/i18n/it.js.map +1 -1
- package/server/applications/notifications/i18n/ja.js +1 -5
- package/server/applications/notifications/i18n/ja.js.map +1 -1
- package/server/applications/notifications/i18n/ko.js +1 -5
- package/server/applications/notifications/i18n/ko.js.map +1 -1
- package/server/applications/notifications/i18n/pl.js +1 -5
- package/server/applications/notifications/i18n/pl.js.map +1 -1
- package/server/applications/notifications/i18n/pt.js +1 -5
- package/server/applications/notifications/i18n/pt.js.map +1 -1
- package/server/applications/notifications/i18n/pt_br.js +1 -5
- package/server/applications/notifications/i18n/pt_br.js.map +1 -1
- package/server/applications/notifications/i18n/ru.js +1 -5
- package/server/applications/notifications/i18n/ru.js.map +1 -1
- package/server/applications/notifications/i18n/tr.js +1 -5
- package/server/applications/notifications/i18n/tr.js.map +1 -1
- package/server/applications/notifications/i18n/zh.js +1 -5
- package/server/applications/notifications/i18n/zh.js.map +1 -1
- package/server/applications/notifications/interfaces/notification-properties.interface.js +1 -5
- package/server/applications/notifications/interfaces/notification-properties.interface.js.map +1 -1
- package/server/applications/notifications/interfaces/user-mail-notification.interface.js +1 -5
- package/server/applications/notifications/interfaces/user-mail-notification.interface.js.map +1 -1
- package/server/applications/notifications/mails/models.js +1 -5
- package/server/applications/notifications/mails/models.js.map +1 -1
- package/server/applications/notifications/mails/templates.js +1 -5
- package/server/applications/notifications/mails/templates.js.map +1 -1
- package/server/applications/notifications/mails/urls.js +1 -5
- package/server/applications/notifications/mails/urls.js.map +1 -1
- package/server/applications/notifications/notifications.controller.js +1 -5
- package/server/applications/notifications/notifications.controller.js.map +1 -1
- package/server/applications/notifications/notifications.controller.spec.js +1 -5
- package/server/applications/notifications/notifications.controller.spec.js.map +1 -1
- package/server/applications/notifications/notifications.gateway.js +1 -5
- package/server/applications/notifications/notifications.gateway.js.map +1 -1
- package/server/applications/notifications/notifications.module.js +1 -5
- package/server/applications/notifications/notifications.module.js.map +1 -1
- package/server/applications/notifications/schemas/notification.interface.js +1 -5
- package/server/applications/notifications/schemas/notification.interface.js.map +1 -1
- package/server/applications/notifications/schemas/notifications.schema.js +1 -5
- package/server/applications/notifications/schemas/notifications.schema.js.map +1 -1
- package/server/applications/notifications/services/notifications-manager.service.js +25 -11
- package/server/applications/notifications/services/notifications-manager.service.js.map +1 -1
- package/server/applications/notifications/services/notifications-manager.service.spec.js +20 -11
- package/server/applications/notifications/services/notifications-manager.service.spec.js.map +1 -1
- package/server/applications/notifications/services/notifications-queries.service.js +1 -5
- package/server/applications/notifications/services/notifications-queries.service.js.map +1 -1
- package/server/applications/shares/constants/routes.js +1 -5
- package/server/applications/shares/constants/routes.js.map +1 -1
- package/server/applications/shares/constants/shares.js +1 -5
- package/server/applications/shares/constants/shares.js.map +1 -1
- package/server/applications/shares/dto/create-or-update-share.dto.js +1 -5
- package/server/applications/shares/dto/create-or-update-share.dto.js.map +1 -1
- package/server/applications/shares/interfaces/share-child.interface.js +1 -5
- package/server/applications/shares/interfaces/share-child.interface.js.map +1 -1
- package/server/applications/shares/interfaces/share-env.interface.js +1 -5
- package/server/applications/shares/interfaces/share-env.interface.js.map +1 -1
- package/server/applications/shares/interfaces/share-file.interface.js +1 -5
- package/server/applications/shares/interfaces/share-file.interface.js.map +1 -1
- package/server/applications/shares/interfaces/share-link.interface.js +1 -5
- package/server/applications/shares/interfaces/share-link.interface.js.map +1 -1
- package/server/applications/shares/interfaces/share-props.interface.js +1 -5
- package/server/applications/shares/interfaces/share-props.interface.js.map +1 -1
- package/server/applications/shares/models/share-child.model.js +1 -5
- package/server/applications/shares/models/share-child.model.js.map +1 -1
- package/server/applications/shares/schemas/share-members.interface.js +1 -5
- package/server/applications/shares/schemas/share-members.interface.js.map +1 -1
- package/server/applications/shares/schemas/share.interface.js +1 -5
- package/server/applications/shares/schemas/share.interface.js.map +1 -1
- package/server/applications/shares/schemas/shares-members.schema.js +1 -5
- package/server/applications/shares/schemas/shares-members.schema.js.map +1 -1
- package/server/applications/shares/schemas/shares.schema.js +1 -5
- package/server/applications/shares/schemas/shares.schema.js.map +1 -1
- package/server/applications/shares/services/shares-manager.service.js +214 -68
- package/server/applications/shares/services/shares-manager.service.js.map +1 -1
- package/server/applications/shares/services/shares-manager.service.spec.js +1 -5
- package/server/applications/shares/services/shares-manager.service.spec.js.map +1 -1
- package/server/applications/shares/services/shares-queries.service.js +49 -17
- package/server/applications/shares/services/shares-queries.service.js.map +1 -1
- package/server/applications/shares/shares.controller.js +1 -5
- package/server/applications/shares/shares.controller.js.map +1 -1
- package/server/applications/shares/shares.controller.spec.js +1 -5
- package/server/applications/shares/shares.controller.spec.js.map +1 -1
- package/server/applications/shares/shares.module.js +1 -5
- package/server/applications/shares/shares.module.js.map +1 -1
- package/server/applications/spaces/constants/cache.js +1 -5
- package/server/applications/spaces/constants/cache.js.map +1 -1
- package/server/applications/spaces/constants/routes.js +1 -5
- package/server/applications/spaces/constants/routes.js.map +1 -1
- package/server/applications/spaces/constants/spaces.js +1 -5
- package/server/applications/spaces/constants/spaces.js.map +1 -1
- package/server/applications/spaces/decorators/space-override-permission.decorator.js +1 -5
- package/server/applications/spaces/decorators/space-override-permission.decorator.js.map +1 -1
- package/server/applications/spaces/decorators/space-skip-guard.decorator.js +1 -5
- package/server/applications/spaces/decorators/space-skip-guard.decorator.js.map +1 -1
- package/server/applications/spaces/decorators/space-skip-permissions.decorator.js +1 -5
- package/server/applications/spaces/decorators/space-skip-permissions.decorator.js.map +1 -1
- package/server/applications/spaces/decorators/space.decorator.js +1 -5
- package/server/applications/spaces/decorators/space.decorator.js.map +1 -1
- package/server/applications/spaces/dto/create-or-update-space.dto.js +1 -5
- package/server/applications/spaces/dto/create-or-update-space.dto.js.map +1 -1
- package/server/applications/spaces/dto/delete-space.dto.js +1 -5
- package/server/applications/spaces/dto/delete-space.dto.js.map +1 -1
- package/server/applications/spaces/dto/search-space.dto.js +1 -5
- package/server/applications/spaces/dto/search-space.dto.js.map +1 -1
- package/server/applications/spaces/dto/space-roots.dto.js +1 -5
- package/server/applications/spaces/dto/space-roots.dto.js.map +1 -1
- package/server/applications/spaces/guards/space.guard.js +17 -9
- package/server/applications/spaces/guards/space.guard.js.map +1 -1
- package/server/applications/spaces/guards/space.guard.spec.js +1 -5
- package/server/applications/spaces/guards/space.guard.spec.js.map +1 -1
- package/server/applications/spaces/interfaces/space-diff.interface.js +1 -5
- package/server/applications/spaces/interfaces/space-diff.interface.js.map +1 -1
- package/server/applications/spaces/interfaces/space-files.interface.js +1 -5
- package/server/applications/spaces/interfaces/space-files.interface.js.map +1 -1
- package/server/applications/spaces/interfaces/space-request.interface.js +1 -5
- package/server/applications/spaces/interfaces/space-request.interface.js.map +1 -1
- package/server/applications/spaces/interfaces/space-trash.interface.js +1 -5
- package/server/applications/spaces/interfaces/space-trash.interface.js.map +1 -1
- package/server/applications/spaces/models/space-env.model.js +1 -5
- package/server/applications/spaces/models/space-env.model.js.map +1 -1
- package/server/applications/spaces/models/space-props.model.js +1 -5
- package/server/applications/spaces/models/space-props.model.js.map +1 -1
- package/server/applications/spaces/models/space-root-props.model.js +1 -5
- package/server/applications/spaces/models/space-root-props.model.js.map +1 -1
- package/server/applications/spaces/models/space.model.js +1 -5
- package/server/applications/spaces/models/space.model.js.map +1 -1
- package/server/applications/spaces/schemas/space-members.interface.js +1 -5
- package/server/applications/spaces/schemas/space-members.interface.js.map +1 -1
- package/server/applications/spaces/schemas/space-root.interface.js +1 -5
- package/server/applications/spaces/schemas/space-root.interface.js.map +1 -1
- package/server/applications/spaces/schemas/space.interface.js +1 -5
- package/server/applications/spaces/schemas/space.interface.js.map +1 -1
- package/server/applications/spaces/schemas/spaces-members.schema.js +1 -5
- package/server/applications/spaces/schemas/spaces-members.schema.js.map +1 -1
- package/server/applications/spaces/schemas/spaces-roots.schema.js +1 -5
- package/server/applications/spaces/schemas/spaces-roots.schema.js.map +1 -1
- package/server/applications/spaces/schemas/spaces.schema.js +1 -5
- package/server/applications/spaces/schemas/spaces.schema.js.map +1 -1
- package/server/applications/spaces/services/spaces-browser.service.js +77 -24
- package/server/applications/spaces/services/spaces-browser.service.js.map +1 -1
- package/server/applications/spaces/services/spaces-browser.service.spec.js +1 -5
- package/server/applications/spaces/services/spaces-browser.service.spec.js.map +1 -1
- package/server/applications/spaces/services/spaces-manager.service.js +193 -53
- package/server/applications/spaces/services/spaces-manager.service.js.map +1 -1
- package/server/applications/spaces/services/spaces-manager.service.spec.js +1 -5
- package/server/applications/spaces/services/spaces-manager.service.spec.js.map +1 -1
- package/server/applications/spaces/services/spaces-queries.service.js +65 -21
- package/server/applications/spaces/services/spaces-queries.service.js.map +1 -1
- package/server/applications/spaces/services/spaces-scheduler.service.js +49 -17
- package/server/applications/spaces/services/spaces-scheduler.service.js.map +1 -1
- package/server/applications/spaces/spaces.controller.js +1 -5
- package/server/applications/spaces/spaces.controller.js.map +1 -1
- package/server/applications/spaces/spaces.controller.spec.js +1 -5
- package/server/applications/spaces/spaces.controller.spec.js.map +1 -1
- package/server/applications/spaces/spaces.module.js +1 -5
- package/server/applications/spaces/spaces.module.js.map +1 -1
- package/server/applications/spaces/utils/paths.js +1 -5
- package/server/applications/spaces/utils/paths.js.map +1 -1
- package/server/applications/spaces/utils/permissions.js +1 -5
- package/server/applications/spaces/utils/permissions.js.map +1 -1
- package/server/applications/spaces/utils/routes.js +1 -5
- package/server/applications/spaces/utils/routes.js.map +1 -1
- package/server/applications/sync/constants/auth.js +1 -5
- package/server/applications/sync/constants/auth.js.map +1 -1
- package/server/applications/sync/constants/routes.js +6 -5
- package/server/applications/sync/constants/routes.js.map +1 -1
- package/server/applications/sync/constants/store.js +1 -9
- package/server/applications/sync/constants/store.js.map +1 -1
- package/server/applications/sync/constants/sync.js +2 -6
- package/server/applications/sync/constants/sync.js.map +1 -1
- package/server/applications/sync/decorators/sync-context.decorator.js +1 -5
- package/server/applications/sync/decorators/sync-context.decorator.js.map +1 -1
- package/server/applications/sync/decorators/sync-environment.decorator.js +1 -5
- package/server/applications/sync/decorators/sync-environment.decorator.js.map +1 -1
- package/server/applications/sync/dtos/sync-client-auth.dto.js +12 -8
- package/server/applications/sync/dtos/sync-client-auth.dto.js.map +1 -1
- package/server/applications/sync/dtos/sync-client-info.dto.js +49 -0
- package/server/applications/sync/dtos/sync-client-info.dto.js.map +1 -0
- package/server/applications/sync/dtos/sync-client-registration.dto.js +34 -11
- package/server/applications/sync/dtos/sync-client-registration.dto.js.map +1 -1
- package/server/applications/sync/dtos/sync-operations.dto.js +1 -5
- package/server/applications/sync/dtos/sync-operations.dto.js.map +1 -1
- package/server/applications/sync/dtos/sync-path.dto.js +1 -5
- package/server/applications/sync/dtos/sync-path.dto.js.map +1 -1
- package/server/applications/sync/dtos/sync-upload.dto.js +1 -5
- package/server/applications/sync/dtos/sync-upload.dto.js.map +1 -1
- package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.js +1 -5
- package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.js.map +1 -1
- package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.spec.js +1 -5
- package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.spec.js.map +1 -1
- package/server/applications/sync/interfaces/store-manifest.interface.js +1 -5
- package/server/applications/sync/interfaces/store-manifest.interface.js.map +1 -1
- package/server/applications/sync/interfaces/sync-client-auth.interface.js +1 -25
- package/server/applications/sync/interfaces/sync-client-auth.interface.js.map +1 -1
- package/server/applications/sync/interfaces/sync-client-paths.interface.js +1 -5
- package/server/applications/sync/interfaces/sync-client-paths.interface.js.map +1 -1
- package/server/applications/sync/interfaces/sync-client.interface.js +1 -5
- package/server/applications/sync/interfaces/sync-client.interface.js.map +1 -1
- package/server/applications/sync/interfaces/sync-diff.interface.js +1 -5
- package/server/applications/sync/interfaces/sync-diff.interface.js.map +1 -1
- package/server/applications/sync/interfaces/sync-path.interface.js +1 -5
- package/server/applications/sync/interfaces/sync-path.interface.js.map +1 -1
- package/server/applications/sync/schemas/sync-client.interface.js +1 -5
- package/server/applications/sync/schemas/sync-client.interface.js.map +1 -1
- package/server/applications/sync/schemas/sync-clients.schema.js +1 -5
- package/server/applications/sync/schemas/sync-clients.schema.js.map +1 -1
- package/server/applications/sync/schemas/sync-path.interface.js +1 -5
- package/server/applications/sync/schemas/sync-path.interface.js.map +1 -1
- package/server/applications/sync/schemas/sync-paths.schema.js +1 -5
- package/server/applications/sync/schemas/sync-paths.schema.js.map +1 -1
- package/server/applications/sync/services/sync-clients-manager.service.js +108 -44
- package/server/applications/sync/services/sync-clients-manager.service.js.map +1 -1
- package/server/applications/sync/services/sync-clients-manager.service.spec.js +14 -17
- package/server/applications/sync/services/sync-clients-manager.service.spec.js.map +1 -1
- package/server/applications/sync/services/sync-manager.service.js +29 -12
- package/server/applications/sync/services/sync-manager.service.js.map +1 -1
- package/server/applications/sync/services/sync-manager.service.spec.js +1 -5
- package/server/applications/sync/services/sync-manager.service.spec.js.map +1 -1
- package/server/applications/sync/services/sync-paths-manager.service.js +27 -17
- package/server/applications/sync/services/sync-paths-manager.service.js.map +1 -1
- package/server/applications/sync/services/sync-paths-manager.service.spec.js +11 -15
- package/server/applications/sync/services/sync-paths-manager.service.spec.js.map +1 -1
- package/server/applications/sync/services/sync-queries.service.js +1 -5
- package/server/applications/sync/services/sync-queries.service.js.map +1 -1
- package/server/applications/sync/sync.config.js +1 -5
- package/server/applications/sync/sync.config.js.map +1 -1
- package/server/applications/sync/sync.controller.js +21 -6
- package/server/applications/sync/sync.controller.js.map +1 -1
- package/server/applications/sync/sync.controller.spec.js +1 -5
- package/server/applications/sync/sync.controller.spec.js.map +1 -1
- package/server/applications/sync/sync.module.js +1 -5
- package/server/applications/sync/sync.module.js.map +1 -1
- package/server/applications/sync/utils/functions.js +1 -5
- package/server/applications/sync/utils/functions.js.map +1 -1
- package/server/applications/sync/utils/normalizedMap.js +1 -5
- package/server/applications/sync/utils/normalizedMap.js.map +1 -1
- package/server/applications/sync/utils/routes.js +1 -5
- package/server/applications/sync/utils/routes.js.map +1 -1
- package/server/applications/users/admin-users.controller.js +2 -6
- package/server/applications/users/admin-users.controller.js.map +1 -1
- package/server/applications/users/admin-users.controller.spec.js +6 -10
- package/server/applications/users/admin-users.controller.spec.js.map +1 -1
- package/server/applications/users/constants/group.js +1 -5
- package/server/applications/users/constants/group.js.map +1 -1
- package/server/applications/users/constants/member.js +1 -5
- package/server/applications/users/constants/member.js.map +1 -1
- package/server/applications/users/constants/routes.js +1 -5
- package/server/applications/users/constants/routes.js.map +1 -1
- package/server/applications/users/constants/user.js +1 -5
- package/server/applications/users/constants/user.js.map +1 -1
- package/server/applications/users/constants/websocket.js +1 -5
- package/server/applications/users/constants/websocket.js.map +1 -1
- package/server/applications/users/decorators/permissions.decorator.js +1 -5
- package/server/applications/users/decorators/permissions.decorator.js.map +1 -1
- package/server/applications/users/decorators/roles.decorator.js +1 -5
- package/server/applications/users/decorators/roles.decorator.js.map +1 -1
- package/server/applications/users/decorators/user.decorator.js +1 -5
- package/server/applications/users/decorators/user.decorator.js.map +1 -1
- package/server/applications/users/dto/create-or-update-group.dto.js +1 -5
- package/server/applications/users/dto/create-or-update-group.dto.js.map +1 -1
- package/server/applications/users/dto/create-or-update-user.dto.js +1 -5
- package/server/applications/users/dto/create-or-update-user.dto.js.map +1 -1
- package/server/applications/users/dto/delete-user.dto.js +1 -5
- package/server/applications/users/dto/delete-user.dto.js.map +1 -1
- package/server/applications/users/dto/search-members.dto.js +1 -5
- package/server/applications/users/dto/search-members.dto.js.map +1 -1
- package/server/applications/users/dto/user-properties.dto.js +1 -5
- package/server/applications/users/dto/user-properties.dto.js.map +1 -1
- package/server/applications/users/guards/permissions.guard.js +1 -5
- package/server/applications/users/guards/permissions.guard.js.map +1 -1
- package/server/applications/users/guards/permissions.guard.spec.js +1 -5
- package/server/applications/users/guards/permissions.guard.spec.js.map +1 -1
- package/server/applications/users/guards/roles.guard.js +1 -5
- package/server/applications/users/guards/roles.guard.js.map +1 -1
- package/server/applications/users/guards/roles.guard.spec.js +1 -5
- package/server/applications/users/guards/roles.guard.spec.js.map +1 -1
- package/server/applications/users/interfaces/admin-group.interface.js +1 -5
- package/server/applications/users/interfaces/admin-group.interface.js.map +1 -1
- package/server/applications/users/interfaces/admin-user.interface.js +1 -5
- package/server/applications/users/interfaces/admin-user.interface.js.map +1 -1
- package/server/applications/users/interfaces/group-browse.interface.js +1 -5
- package/server/applications/users/interfaces/group-browse.interface.js.map +1 -1
- package/server/applications/users/interfaces/group-member.js +1 -5
- package/server/applications/users/interfaces/group-member.js.map +1 -1
- package/server/applications/users/interfaces/guest-user.interface.js +1 -5
- package/server/applications/users/interfaces/guest-user.interface.js.map +1 -1
- package/server/applications/users/interfaces/member.interface.js +1 -5
- package/server/applications/users/interfaces/member.interface.js.map +1 -1
- package/server/applications/users/interfaces/owner.interface.js +1 -5
- package/server/applications/users/interfaces/owner.interface.js.map +1 -1
- package/server/applications/users/interfaces/user-secrets.interface.js +1 -5
- package/server/applications/users/interfaces/user-secrets.interface.js.map +1 -1
- package/server/applications/users/interfaces/websocket.interface.js +1 -5
- package/server/applications/users/interfaces/websocket.interface.js.map +1 -1
- package/server/applications/users/models/user.model.js +1 -5
- package/server/applications/users/models/user.model.js.map +1 -1
- package/server/applications/users/schemas/group.interface.js +1 -5
- package/server/applications/users/schemas/group.interface.js.map +1 -1
- package/server/applications/users/schemas/groups.schema.js +1 -5
- package/server/applications/users/schemas/groups.schema.js.map +1 -1
- package/server/applications/users/schemas/user-group.interface.js +1 -5
- package/server/applications/users/schemas/user-group.interface.js.map +1 -1
- package/server/applications/users/schemas/user.interface.js +1 -5
- package/server/applications/users/schemas/user.interface.js.map +1 -1
- package/server/applications/users/schemas/users-groups.schema.js +1 -5
- package/server/applications/users/schemas/users-groups.schema.js.map +1 -1
- package/server/applications/users/schemas/users-guests.schema.js +1 -5
- package/server/applications/users/schemas/users-guests.schema.js.map +1 -1
- package/server/applications/users/schemas/users.schema.js +1 -5
- package/server/applications/users/schemas/users.schema.js.map +1 -1
- package/server/applications/users/services/admin-users-manager.service.js +67 -23
- package/server/applications/users/services/admin-users-manager.service.js.map +1 -1
- package/server/applications/users/services/admin-users-manager.service.spec.js +3 -7
- package/server/applications/users/services/admin-users-manager.service.spec.js.map +1 -1
- package/server/applications/users/services/admin-users-queries.service.js +65 -21
- package/server/applications/users/services/admin-users-queries.service.js.map +1 -1
- package/server/applications/users/services/users-manager.service.js +81 -25
- package/server/applications/users/services/users-manager.service.js.map +1 -1
- package/server/applications/users/services/users-manager.service.spec.js +14 -12
- package/server/applications/users/services/users-manager.service.spec.js.map +1 -1
- package/server/applications/users/services/users-queries.service.js +49 -17
- package/server/applications/users/services/users-queries.service.js.map +1 -1
- package/server/applications/users/users.controller.js +2 -6
- package/server/applications/users/users.controller.js.map +1 -1
- package/server/applications/users/users.controller.spec.js +5 -9
- package/server/applications/users/users.controller.spec.js.map +1 -1
- package/server/applications/users/users.e2e-spec.js +3 -7
- package/server/applications/users/users.e2e-spec.js.map +1 -1
- package/server/applications/users/users.gateway.js +29 -12
- package/server/applications/users/users.gateway.js.map +1 -1
- package/server/applications/users/users.gateway.spec.js +1 -5
- package/server/applications/users/users.gateway.spec.js.map +1 -1
- package/server/applications/users/users.module.js +1 -5
- package/server/applications/users/users.module.js.map +1 -1
- package/server/applications/users/utils/avatar.js +1 -5
- package/server/applications/users/utils/avatar.js.map +1 -1
- package/server/applications/users/utils/test.js +1 -5
- package/server/applications/users/utils/test.js.map +1 -1
- package/server/applications/webdav/constants/routes.js +1 -5
- package/server/applications/webdav/constants/routes.js.map +1 -1
- package/server/applications/webdav/constants/webdav.js +1 -5
- package/server/applications/webdav/constants/webdav.js.map +1 -1
- package/server/applications/webdav/decorators/if-header.decorator.js +1 -5
- package/server/applications/webdav/decorators/if-header.decorator.js.map +1 -1
- package/server/applications/webdav/decorators/webdav-context.decorator.js +1 -5
- package/server/applications/webdav/decorators/webdav-context.decorator.js.map +1 -1
- package/server/applications/webdav/filters/webdav.filter.js +1 -5
- package/server/applications/webdav/filters/webdav.filter.js.map +1 -1
- package/server/applications/webdav/filters/webdav.filter.spec.js +1 -5
- package/server/applications/webdav/filters/webdav.filter.spec.js.map +1 -1
- package/server/applications/webdav/guards/webdav-protocol.guard.js +54 -20
- package/server/applications/webdav/guards/webdav-protocol.guard.js.map +1 -1
- package/server/applications/webdav/guards/webdav-protocol.guard.spec.js +54 -0
- package/server/applications/webdav/guards/webdav-protocol.guard.spec.js.map +1 -1
- package/server/applications/webdav/interfaces/if-header.interface.js +1 -5
- package/server/applications/webdav/interfaces/if-header.interface.js.map +1 -1
- package/server/applications/webdav/interfaces/webdav.interface.js +1 -5
- package/server/applications/webdav/interfaces/webdav.interface.js.map +1 -1
- package/server/applications/webdav/models/webdav-file.model.js +1 -5
- package/server/applications/webdav/models/webdav-file.model.js.map +1 -1
- package/server/applications/webdav/services/webdav-methods.service.js +74 -26
- package/server/applications/webdav/services/webdav-methods.service.js.map +1 -1
- package/server/applications/webdav/services/webdav-methods.service.spec.js +15 -18
- package/server/applications/webdav/services/webdav-methods.service.spec.js.map +1 -1
- package/server/applications/webdav/services/webdav-spaces.service.js +17 -9
- package/server/applications/webdav/services/webdav-spaces.service.js.map +1 -1
- package/server/applications/webdav/services/webdav-spaces.service.spec.js +1 -5
- package/server/applications/webdav/services/webdav-spaces.service.spec.js.map +1 -1
- package/server/applications/webdav/utils/bootstrap.js +1 -5
- package/server/applications/webdav/utils/bootstrap.js.map +1 -1
- package/server/applications/webdav/utils/if-header.js +1 -5
- package/server/applications/webdav/utils/if-header.js.map +1 -1
- package/server/applications/webdav/utils/routes.js +1 -5
- package/server/applications/webdav/utils/routes.js.map +1 -1
- package/server/applications/webdav/utils/webdav.js +1 -5
- package/server/applications/webdav/utils/webdav.js.map +1 -1
- package/server/applications/webdav/utils/xml.js +1 -5
- package/server/applications/webdav/utils/xml.js.map +1 -1
- package/server/applications/webdav/webdav.controller.js +1 -5
- package/server/applications/webdav/webdav.controller.js.map +1 -1
- package/server/applications/webdav/webdav.controller.spec.js +1 -5
- package/server/applications/webdav/webdav.controller.spec.js.map +1 -1
- package/server/applications/webdav/webdav.e2e-spec.js +1 -5
- package/server/applications/webdav/webdav.e2e-spec.js.map +1 -1
- package/server/applications/webdav/webdav.module.js +1 -5
- package/server/applications/webdav/webdav.module.js.map +1 -1
- package/server/authentication/auth.config.js +23 -123
- package/server/authentication/auth.config.js.map +1 -1
- package/server/authentication/auth.controller.js +27 -21
- package/server/authentication/auth.controller.js.map +1 -1
- package/server/authentication/auth.controller.spec.js +6 -10
- package/server/authentication/auth.controller.spec.js.map +1 -1
- package/server/authentication/auth.e2e-spec.js +1 -5
- package/server/authentication/auth.e2e-spec.js.map +1 -1
- package/server/authentication/auth.module.js +17 -20
- package/server/authentication/auth.module.js.map +1 -1
- package/server/authentication/{services/auth-manager.service.js → auth.service.js} +41 -18
- package/server/authentication/auth.service.js.map +1 -0
- package/server/authentication/{services/auth-manager.service.spec.js → auth.service.spec.js} +6 -10
- package/server/authentication/auth.service.spec.js.map +1 -0
- package/server/authentication/constants/auth.js +1 -5
- package/server/authentication/constants/auth.js.map +1 -1
- package/server/authentication/constants/routes.js +41 -30
- package/server/authentication/constants/routes.js.map +1 -1
- package/server/authentication/constants/scope.js +2 -5
- package/server/authentication/constants/scope.js.map +1 -1
- package/server/authentication/decorators/auth-token-optional.decorator.js +1 -5
- package/server/authentication/decorators/auth-token-optional.decorator.js.map +1 -1
- package/server/authentication/decorators/auth-token-skip.decorator.js +1 -5
- package/server/authentication/decorators/auth-token-skip.decorator.js.map +1 -1
- package/server/authentication/dto/login-response.dto.js +1 -10
- package/server/authentication/dto/login-response.dto.js.map +1 -1
- package/server/authentication/dto/token-response.dto.js +1 -5
- package/server/authentication/dto/token-response.dto.js.map +1 -1
- package/server/authentication/guards/auth-anonymous.guard.js +1 -5
- package/server/authentication/guards/auth-anonymous.guard.js.map +1 -1
- package/server/authentication/guards/auth-anonymous.guard.spec.js +1 -5
- package/server/authentication/guards/auth-anonymous.guard.spec.js.map +1 -1
- package/server/authentication/guards/auth-anonymous.strategy.js +1 -5
- package/server/authentication/guards/auth-anonymous.strategy.js.map +1 -1
- package/server/authentication/guards/auth-basic.guard.js +1 -5
- package/server/authentication/guards/auth-basic.guard.js.map +1 -1
- package/server/authentication/guards/auth-basic.guard.spec.js +13 -14
- package/server/authentication/guards/auth-basic.guard.spec.js.map +1 -1
- package/server/authentication/guards/auth-basic.strategy.js +10 -11
- package/server/authentication/guards/auth-basic.strategy.js.map +1 -1
- package/server/authentication/guards/auth-digest.guard.js +1 -5
- package/server/authentication/guards/auth-digest.guard.js.map +1 -1
- package/server/authentication/guards/auth-digest.strategy.js +1 -5
- package/server/authentication/guards/auth-digest.strategy.js.map +1 -1
- package/server/authentication/guards/auth-local.guard.js +1 -5
- package/server/authentication/guards/auth-local.guard.js.map +1 -1
- package/server/authentication/guards/auth-local.guard.spec.js +9 -13
- package/server/authentication/guards/auth-local.guard.spec.js.map +1 -1
- package/server/authentication/guards/auth-local.strategy.js +6 -10
- package/server/authentication/guards/auth-local.strategy.js.map +1 -1
- package/server/authentication/guards/auth-token-access.guard.js +1 -5
- package/server/authentication/guards/auth-token-access.guard.js.map +1 -1
- package/server/authentication/guards/auth-token-access.guard.spec.js +3 -7
- package/server/authentication/guards/auth-token-access.guard.spec.js.map +1 -1
- package/server/authentication/guards/auth-token-access.strategy.js +3 -7
- package/server/authentication/guards/auth-token-access.strategy.js.map +1 -1
- package/server/authentication/guards/auth-token-refresh.guard.js +1 -5
- package/server/authentication/guards/auth-token-refresh.guard.js.map +1 -1
- package/server/authentication/guards/auth-token-refresh.guard.spec.js +3 -7
- package/server/authentication/guards/auth-token-refresh.guard.spec.js.map +1 -1
- package/server/authentication/guards/auth-token-refresh.strategy.js +3 -7
- package/server/authentication/guards/auth-token-refresh.strategy.js.map +1 -1
- package/server/authentication/guards/implementations/http-basic.strategy.js +1 -5
- package/server/authentication/guards/implementations/http-basic.strategy.js.map +1 -1
- package/server/authentication/guards/implementations/http-digest.strategy.js +1 -5
- package/server/authentication/guards/implementations/http-digest.strategy.js.map +1 -1
- package/server/authentication/interfaces/auth-request.interface.js +1 -5
- package/server/authentication/interfaces/auth-request.interface.js.map +1 -1
- package/server/authentication/interfaces/jwt-payload.interface.js +1 -5
- package/server/authentication/interfaces/jwt-payload.interface.js.map +1 -1
- package/server/authentication/interfaces/token.interface.js +1 -5
- package/server/authentication/interfaces/token.interface.js.map +1 -1
- package/server/authentication/providers/auth-providers.constants.js +18 -0
- package/server/authentication/providers/auth-providers.constants.js.map +1 -0
- package/server/authentication/providers/auth-providers.models.js +14 -0
- package/server/authentication/providers/auth-providers.models.js.map +1 -0
- package/server/authentication/providers/auth-providers.utils.js +42 -0
- package/server/authentication/providers/auth-providers.utils.js.map +1 -0
- package/server/authentication/providers/ldap/auth-ldap.config.js +143 -0
- package/server/authentication/providers/ldap/auth-ldap.config.js.map +1 -0
- package/server/authentication/{constants/auth-ldap.js → providers/ldap/auth-ldap.constants.js} +12 -6
- package/server/authentication/providers/ldap/auth-ldap.constants.js.map +1 -0
- package/server/authentication/providers/ldap/auth-provider-ldap.service.js +506 -0
- package/server/authentication/providers/ldap/auth-provider-ldap.service.js.map +1 -0
- package/server/authentication/providers/ldap/auth-provider-ldap.service.spec.js +674 -0
- package/server/authentication/providers/ldap/auth-provider-ldap.service.spec.js.map +1 -0
- package/server/authentication/{services/auth-methods/auth-method-database.service.js → providers/mysql/auth-provider-mysql.service.js} +16 -14
- package/server/authentication/providers/mysql/auth-provider-mysql.service.js.map +1 -0
- package/server/authentication/{services/auth-methods/auth-method-database.service.spec.js → providers/mysql/auth-provider-mysql.service.spec.js} +15 -19
- package/server/authentication/providers/mysql/auth-provider-mysql.service.spec.js.map +1 -0
- package/server/authentication/providers/oidc/auth-oidc-desktop.constants.js +30 -0
- package/server/authentication/providers/oidc/auth-oidc-desktop.constants.js.map +1 -0
- package/server/authentication/providers/oidc/auth-oidc.config.js +149 -0
- package/server/authentication/providers/oidc/auth-oidc.config.js.map +1 -0
- package/server/authentication/providers/oidc/auth-oidc.constants.js +39 -0
- package/server/authentication/providers/oidc/auth-oidc.constants.js.map +1 -0
- package/server/authentication/providers/oidc/auth-oidc.controller.js +83 -0
- package/server/authentication/providers/oidc/auth-oidc.controller.js.map +1 -0
- package/server/authentication/providers/oidc/auth-oidc.interfaces.js +6 -0
- package/server/authentication/providers/oidc/auth-oidc.interfaces.js.map +1 -0
- package/server/authentication/providers/oidc/auth-provider-oidc.module.js +36 -0
- package/server/authentication/providers/oidc/auth-provider-oidc.module.js.map +1 -0
- package/server/authentication/providers/oidc/auth-provider-oidc.service.js +373 -0
- package/server/authentication/providers/oidc/auth-provider-oidc.service.js.map +1 -0
- package/server/authentication/providers/oidc/auth-provider-oidc.service.spec.js +270 -0
- package/server/authentication/providers/oidc/auth-provider-oidc.service.spec.js.map +1 -0
- package/server/authentication/{services/auth-methods/auth-method-two-fa.service.js → providers/two-fa/auth-provider-two-fa.service.js} +56 -38
- package/server/authentication/providers/two-fa/auth-provider-two-fa.service.js.map +1 -0
- package/server/authentication/{services/auth-methods/auth-method-two-fa.service.spec.js → providers/two-fa/auth-provider-two-fa.service.spec.js} +6 -10
- package/server/authentication/providers/two-fa/auth-provider-two-fa.service.spec.js.map +1 -0
- package/server/authentication/{guards → providers/two-fa}/auth-two-fa-guard.js +10 -14
- package/server/authentication/providers/two-fa/auth-two-fa-guard.js.map +1 -0
- package/server/authentication/providers/two-fa/auth-two-fa.config.js +57 -0
- package/server/authentication/providers/two-fa/auth-two-fa.config.js.map +1 -0
- package/server/authentication/{dto/two-fa-verify.dto.js → providers/two-fa/auth-two-fa.dtos.js} +8 -6
- package/server/authentication/providers/two-fa/auth-two-fa.dtos.js.map +1 -0
- package/server/authentication/providers/two-fa/auth-two-fa.interfaces.js +6 -0
- package/server/authentication/providers/two-fa/auth-two-fa.interfaces.js.map +1 -0
- package/server/authentication/utils/crypt-secret.js +1 -5
- package/server/authentication/utils/crypt-secret.js.map +1 -1
- package/server/common/constants.js +1 -5
- package/server/common/constants.js.map +1 -1
- package/server/common/decorators.js +1 -5
- package/server/common/decorators.js.map +1 -1
- package/server/common/functions.js +25 -9
- package/server/common/functions.js.map +1 -1
- package/server/common/i18n.js +1 -5
- package/server/common/i18n.js.map +1 -1
- package/server/common/image.js +1 -5
- package/server/common/image.js.map +1 -1
- package/server/common/interfaces.js +1 -5
- package/server/common/interfaces.js.map +1 -1
- package/server/common/qrcode.js +1 -5
- package/server/common/qrcode.js.map +1 -1
- package/server/common/shared.js +6 -6
- package/server/common/shared.js.map +1 -1
- package/server/configuration/config.constants.js +1 -5
- package/server/configuration/config.constants.js.map +1 -1
- package/server/configuration/config.environment.js +2 -6
- package/server/configuration/config.environment.js.map +1 -1
- package/server/configuration/config.interfaces.js +1 -5
- package/server/configuration/config.interfaces.js.map +1 -1
- package/server/configuration/config.loader.js +1 -5
- package/server/configuration/config.loader.js.map +1 -1
- package/server/configuration/config.logger.js +4 -8
- package/server/configuration/config.logger.js.map +1 -1
- package/server/configuration/config.validation.js +7 -5
- package/server/configuration/config.validation.js.map +1 -1
- package/server/infrastructure/cache/adapters/mysql-cache.adapter.js +9 -7
- package/server/infrastructure/cache/adapters/mysql-cache.adapter.js.map +1 -1
- package/server/infrastructure/cache/adapters/redis-cache.adapter.js +1 -5
- package/server/infrastructure/cache/adapters/redis-cache.adapter.js.map +1 -1
- package/server/infrastructure/cache/cache.config.js +1 -5
- package/server/infrastructure/cache/cache.config.js.map +1 -1
- package/server/infrastructure/cache/cache.decorator.js +9 -7
- package/server/infrastructure/cache/cache.decorator.js.map +1 -1
- package/server/infrastructure/cache/cache.e2e-spec.js +1 -5
- package/server/infrastructure/cache/cache.e2e-spec.js.map +1 -1
- package/server/infrastructure/cache/cache.module.js +1 -5
- package/server/infrastructure/cache/cache.module.js.map +1 -1
- package/server/infrastructure/cache/schemas/mysql-cache.interface.js +1 -5
- package/server/infrastructure/cache/schemas/mysql-cache.interface.js.map +1 -1
- package/server/infrastructure/cache/schemas/mysql-cache.schema.js +1 -5
- package/server/infrastructure/cache/schemas/mysql-cache.schema.js.map +1 -1
- package/server/infrastructure/cache/services/cache.service.js +1 -5
- package/server/infrastructure/cache/services/cache.service.js.map +1 -1
- package/server/infrastructure/context/context.module.js +1 -5
- package/server/infrastructure/context/context.module.js.map +1 -1
- package/server/infrastructure/context/interceptors/context.interceptor.js +1 -5
- package/server/infrastructure/context/interceptors/context.interceptor.js.map +1 -1
- package/server/infrastructure/context/interceptors/context.interceptor.spec.js +2 -6
- package/server/infrastructure/context/interceptors/context.interceptor.spec.js.map +1 -1
- package/server/infrastructure/context/interfaces/context-store.interface.js +1 -5
- package/server/infrastructure/context/interfaces/context-store.interface.js.map +1 -1
- package/server/infrastructure/context/services/context-manager.service.js +1 -5
- package/server/infrastructure/context/services/context-manager.service.js.map +1 -1
- package/server/infrastructure/context/services/context-manager.service.spec.js +1 -5
- package/server/infrastructure/context/services/context-manager.service.spec.js.map +1 -1
- package/server/infrastructure/database/columns.js +1 -5
- package/server/infrastructure/database/columns.js.map +1 -1
- package/server/infrastructure/database/configuration.js +1 -5
- package/server/infrastructure/database/configuration.js.map +1 -1
- package/server/infrastructure/database/constants.js +2 -6
- package/server/infrastructure/database/constants.js.map +1 -1
- package/server/infrastructure/database/database.config.js +1 -5
- package/server/infrastructure/database/database.config.js.map +1 -1
- package/server/infrastructure/database/database.logger.js +1 -5
- package/server/infrastructure/database/database.logger.js.map +1 -1
- package/server/infrastructure/database/database.module.js +1 -5
- package/server/infrastructure/database/database.module.js.map +1 -1
- package/server/infrastructure/database/interfaces/database.interface.js +1 -5
- package/server/infrastructure/database/interfaces/database.interface.js.map +1 -1
- package/server/infrastructure/database/schema.js +1 -5
- package/server/infrastructure/database/schema.js.map +1 -1
- package/server/infrastructure/database/scripts/create-user.js +1 -5
- package/server/infrastructure/database/scripts/create-user.js.map +1 -1
- package/server/infrastructure/database/scripts/db.js +1 -5
- package/server/infrastructure/database/scripts/db.js.map +1 -1
- package/server/infrastructure/database/scripts/seed/main.js +1 -5
- package/server/infrastructure/database/scripts/seed/main.js.map +1 -1
- package/server/infrastructure/database/scripts/seed/usersgroups.js +1 -5
- package/server/infrastructure/database/scripts/seed/usersgroups.js.map +1 -1
- package/server/infrastructure/database/utils.js +1 -5
- package/server/infrastructure/database/utils.js.map +1 -1
- package/server/infrastructure/mailer/interfaces/mail.interface.js +1 -5
- package/server/infrastructure/mailer/interfaces/mail.interface.js.map +1 -1
- package/server/infrastructure/mailer/mailer.config.js +1 -5
- package/server/infrastructure/mailer/mailer.config.js.map +1 -1
- package/server/infrastructure/mailer/mailer.module.js +1 -5
- package/server/infrastructure/mailer/mailer.module.js.map +1 -1
- package/server/infrastructure/mailer/mailer.service.js +1 -5
- package/server/infrastructure/mailer/mailer.service.js.map +1 -1
- package/server/infrastructure/mailer/mailer.service.spec.js +2 -6
- package/server/infrastructure/mailer/mailer.service.spec.js.map +1 -1
- package/server/infrastructure/scheduler/scheduler.constants.js +1 -5
- package/server/infrastructure/scheduler/scheduler.constants.js.map +1 -1
- package/server/infrastructure/scheduler/scheduler.module.js +1 -5
- package/server/infrastructure/scheduler/scheduler.module.js.map +1 -1
- package/server/infrastructure/websocket/adapters/cluster.adapter.js +1 -5
- package/server/infrastructure/websocket/adapters/cluster.adapter.js.map +1 -1
- package/server/infrastructure/websocket/adapters/redis.adapter.js +1 -5
- package/server/infrastructure/websocket/adapters/redis.adapter.js.map +1 -1
- package/server/infrastructure/websocket/adapters/web-socket.adapter.js +1 -5
- package/server/infrastructure/websocket/adapters/web-socket.adapter.js.map +1 -1
- package/server/infrastructure/websocket/decorators/web-socket-user.decorator.js +1 -5
- package/server/infrastructure/websocket/decorators/web-socket-user.decorator.js.map +1 -1
- package/server/infrastructure/websocket/interfaces/auth-socket-io.interface.js +1 -5
- package/server/infrastructure/websocket/interfaces/auth-socket-io.interface.js.map +1 -1
- package/server/infrastructure/websocket/utils.js +1 -5
- package/server/infrastructure/websocket/utils.js.map +1 -1
- package/server/infrastructure/websocket/web-socket.config.js +1 -5
- package/server/infrastructure/websocket/web-socket.config.js.map +1 -1
- package/server/main.js +5 -0
- package/server/main.js.map +1 -1
- package/static/assets/pdfjs/build/pdf.mjs +724 -745
- package/static/assets/pdfjs/build/pdf.mjs.map +1 -1
- package/static/assets/pdfjs/build/pdf.sandbox.mjs +2 -2
- package/static/assets/pdfjs/build/pdf.worker.mjs +706 -193
- package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
- package/static/assets/pdfjs/version +1 -1
- package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +5 -5
- package/static/assets/pdfjs/web/locale/en-US/viewer.ftl +1 -0
- package/static/assets/pdfjs/web/locale/fur/viewer.ftl +5 -0
- package/static/assets/pdfjs/web/locale/kk/viewer.ftl +28 -0
- package/static/assets/pdfjs/web/locale/ml/viewer.ftl +4 -0
- package/static/assets/pdfjs/web/locale/ru/viewer.ftl +3 -3
- package/static/assets/pdfjs/web/viewer.css +207 -65
- package/static/assets/pdfjs/web/viewer.html +11 -10
- package/static/assets/pdfjs/web/viewer.mjs +850 -270
- package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
- package/static/assets/pdfjs/web/wasm/LICENSE_JBIG2 +196 -0
- package/static/assets/pdfjs/web/wasm/LICENSE_PDFJS_JBIG2 +13 -0
- package/static/assets/pdfjs/web/wasm/jbig2.wasm +0 -0
- package/static/chunk-22TZP6HW.js +1 -0
- package/static/{chunk-G7TLKY5X.js → chunk-27ATUHBH.js} +1 -1
- package/static/{chunk-CQOQXVYG.js → chunk-2CKLZ3FM.js} +1 -1
- package/static/{chunk-FVFOX6OP.js → chunk-2QZPX7LO.js} +1 -1
- package/static/{chunk-32AVRWC3.js → chunk-2R6IBBPZ.js} +1 -1
- package/static/{chunk-76JDXKD7.js → chunk-4FIGEBNL.js} +1 -1
- package/static/{chunk-ACCGBDUZ.js → chunk-4P3JABAP.js} +4 -4
- package/static/chunk-5CZOSAMZ.js +1 -0
- package/static/{chunk-2PDTP6N4.js → chunk-677WUBCT.js} +1 -1
- package/static/{chunk-K5VO5XTG.js → chunk-74CAHBFM.js} +1 -1
- package/static/{chunk-WTWGBCFO.js → chunk-7GWW6MJO.js} +1 -1
- package/static/{chunk-JXZOYX4N.js → chunk-A4UGPSWX.js} +1 -1
- package/static/{chunk-44D7RWET.js → chunk-AHO37FKW.js} +1 -1
- package/static/{chunk-WB2DECOA.js → chunk-AQCXMKP3.js} +1 -1
- package/static/chunk-B6PDYCRO.js +3 -0
- package/static/{chunk-JVGN5V5E.js → chunk-CU76ATCF.js} +1 -1
- package/static/{chunk-Q5K4ZUHK.js → chunk-CWYHOPOP.js} +1 -1
- package/static/{chunk-IOX3ANJR.js → chunk-E5WI5725.js} +1 -1
- package/static/{chunk-NUG54Y65.js → chunk-FC5HTKVM.js} +1 -1
- package/static/{chunk-LRK6RNPR.js → chunk-FOSM7EYI.js} +1 -1
- package/static/{chunk-B4UP2EQM.js → chunk-GAZO25PI.js} +1 -1
- package/static/{chunk-3WBCGTYW.js → chunk-GB7ABR5N.js} +1 -1
- package/static/{chunk-XFZ37WVK.js → chunk-GEHFKZQ5.js} +1 -1
- package/static/{chunk-4CQLN5HL.js → chunk-GQFMWVFD.js} +1 -1
- package/static/{chunk-YBEH442D.js → chunk-GVNTC564.js} +1 -1
- package/static/{chunk-WO6GBHBZ.js → chunk-HGL3NYP2.js} +2 -2
- package/static/{chunk-IAWRRL6J.js → chunk-HLIWPWRA.js} +1 -1
- package/static/{chunk-6LHJBXUE.js → chunk-HNYB3M4S.js} +1 -1
- package/static/{chunk-5WTIUYFF.js → chunk-HUXAUQMN.js} +1 -1
- package/static/{chunk-VBH3Y2M5.js → chunk-I2XA6PPK.js} +1 -1
- package/static/{chunk-I3XI72AV.js → chunk-ISV3BO6R.js} +1 -1
- package/static/{chunk-P7X53PEP.js → chunk-JV3AGU5B.js} +1 -1
- package/static/{chunk-ZFAXICUH.js → chunk-K25E7YGG.js} +1 -1
- package/static/{chunk-CAD3RHAY.js → chunk-K46PUTZB.js} +1 -1
- package/static/{chunk-GYFLVCFN.js → chunk-KERFLJ56.js} +1 -7
- package/static/{chunk-WSTGWBVW.js → chunk-KJD3KFF3.js} +1 -1
- package/static/{chunk-R4P4NBUL.js → chunk-KPKSI23S.js} +1 -1
- package/static/{chunk-M7IFVC5D.js → chunk-KZS7CTNR.js} +1 -1
- package/static/{chunk-P2IJCGWD.js → chunk-L5IHUVXL.js} +1 -1
- package/static/{chunk-DXESTGOH.js → chunk-L7RRX2M3.js} +1 -1
- package/static/{chunk-WE3ISL7O.js → chunk-LGWJ2WKU.js} +1 -1
- package/static/{chunk-OKI3N5AI.js → chunk-MLC7JK2H.js} +2 -2
- package/static/{chunk-NG7QWUFM.js → chunk-MOHNYW2A.js} +1 -1
- package/static/{chunk-SQYWQUL4.js → chunk-NCDUOVMW.js} +1 -1
- package/static/chunk-NGUAJIGI.js +1 -0
- package/static/{chunk-OYPJUVD6.js → chunk-NIPP6JDI.js} +1 -1
- package/static/{chunk-Y433XOAJ.js → chunk-NMTBMHUL.js} +1 -1
- package/static/chunk-O4XXMZFX.js +4 -0
- package/static/{chunk-IOP3ON2H.js → chunk-OANZITPM.js} +1 -1
- package/static/{chunk-WJFKUJJX.js → chunk-OGE4SAHU.js} +1 -1
- package/static/{chunk-7EHP6HO3.js → chunk-OI3ME22C.js} +1 -1
- package/static/{chunk-D4XDSS6P.js → chunk-Q3EGCMF5.js} +1 -1
- package/static/{chunk-TQBCGNFG.js → chunk-QF2NSHZA.js} +1 -1
- package/static/{chunk-RBBMH2FM.js → chunk-QKN6LAAA.js} +1 -1
- package/static/{chunk-J45SD6RC.js → chunk-QRFESU5O.js} +2 -2
- package/static/chunk-QVRVFYJH.js +1 -0
- package/static/{chunk-BAHNSFET.js → chunk-RFJIPIOK.js} +1 -1
- package/static/{chunk-IZ7TCHUW.js → chunk-RLL634K4.js} +1 -1
- package/static/{chunk-MOWL3ILT.js → chunk-RS2OFKWP.js} +1 -1
- package/static/{chunk-WM56LPJ3.js → chunk-RWAAC3A4.js} +1 -1
- package/static/{chunk-F3GMI6OL.js → chunk-S5Y64DDS.js} +1 -1
- package/static/{chunk-VNNLMUK7.js → chunk-SLG5KDU6.js} +1 -1
- package/static/chunk-TJ4CVFEL.js +1 -0
- package/static/{chunk-SAN35XTD.js → chunk-TWCGKSYE.js} +1 -1
- package/static/{chunk-EUKVDBBK.js → chunk-UMDRE4S7.js} +1 -1
- package/static/{chunk-YKCUUBZP.js → chunk-VRIOLRYR.js} +4 -4
- package/static/chunk-VS4O2XDP.js +1 -0
- package/static/{chunk-2MRTBCSV.js → chunk-VSBFNFOM.js} +1 -1
- package/static/{chunk-CTPKDDVI.js → chunk-WN4WXCVK.js} +1 -1
- package/static/{chunk-2AA3WMW5.js → chunk-WX7RXW7K.js} +1 -1
- package/static/{chunk-J2BUPRCZ.js → chunk-XC4POKR3.js} +2 -2
- package/static/{chunk-AXLDYLIO.js → chunk-Y4AUYQTG.js} +1 -1
- package/static/{chunk-RPHWIW7S.js → chunk-YMIXHRJQ.js} +1 -7
- package/static/{chunk-AFNUBQMD.js → chunk-ZUNKFAKP.js} +1 -1
- package/static/index.html +3 -3
- package/static/main-QN4UCOC5.js +5 -0
- package/static/{styles-PD6764CP.css → styles-46GLIE7Y.css} +1 -1
- package/server/authentication/constants/auth-ldap.js.map +0 -1
- package/server/authentication/dto/two-fa-verify.dto.js.map +0 -1
- package/server/authentication/guards/auth-two-fa-guard.js.map +0 -1
- package/server/authentication/interfaces/two-fa-setup.interface.js +0 -10
- package/server/authentication/interfaces/two-fa-setup.interface.js.map +0 -1
- package/server/authentication/models/auth-method.js +0 -18
- package/server/authentication/models/auth-method.js.map +0 -1
- package/server/authentication/services/auth-manager.service.js.map +0 -1
- package/server/authentication/services/auth-manager.service.spec.js.map +0 -1
- package/server/authentication/services/auth-methods/auth-method-database.service.js.map +0 -1
- package/server/authentication/services/auth-methods/auth-method-database.service.spec.js.map +0 -1
- package/server/authentication/services/auth-methods/auth-method-ldap.service.js +0 -326
- package/server/authentication/services/auth-methods/auth-method-ldap.service.js.map +0 -1
- package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js +0 -534
- package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js.map +0 -1
- package/server/authentication/services/auth-methods/auth-method-two-fa.service.js.map +0 -1
- package/server/authentication/services/auth-methods/auth-method-two-fa.service.spec.js.map +0 -1
- package/static/chunk-3I6NPM62.js +0 -1
- package/static/chunk-GCPX3EFC.js +0 -1
- package/static/chunk-KBUIDMCK.js +0 -1
- package/static/chunk-KY6MNZLC.js +0 -1
- package/static/chunk-MPWD4VMY.js +0 -1
- package/static/chunk-QQAF3MLL.js +0 -1
- package/static/chunk-VHZKPUWE.js +0 -4
- package/static/chunk-YWLMFOB4.js +0 -3
- package/static/main-ZXEMCBMI.js +0 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/sync/services/sync-clients-manager.service.spec.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { HttpService } from '@nestjs/axios'\nimport { HttpStatus } from '@nestjs/common'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { FastifyReply } from 'fastify'\nimport crypto from 'node:crypto'\nimport fs from 'node:fs/promises'\nimport { AuthMethod } from '../../../authentication/models/auth-method'\nimport { AuthManager } from '../../../authentication/services/auth-manager.service'\nimport { AuthMethod2FA } from '../../../authentication/services/auth-methods/auth-method-two-fa.service'\nimport * as commonFunctions from '../../../common/functions'\nimport * as commonShared from '../../../common/shared'\nimport { configuration } from '../../../configuration/config.environment'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { isPathExists } from '../../files/utils/files'\nimport { UserModel } from '../../users/models/user.model'\nimport { UsersManager } from '../../users/services/users-manager.service'\nimport { CLIENT_AUTH_TYPE, CLIENT_TOKEN_EXPIRED_ERROR } from '../constants/auth'\nimport { APP_STORE_DIRNAME, APP_STORE_REPOSITORY } from '../constants/store'\nimport { SYNC_CLIENT_TYPE } from '../constants/sync'\nimport { SyncClientsManager } from './sync-clients-manager.service'\nimport { SyncQueries } from './sync-queries.service'\n\n// Pilotage permission via UserModel\nlet mockHavePermission = true\njest.mock('../../users/models/user.model', () => ({\n UserModel: jest.fn().mockImplementation((props: any) => ({\n ...props,\n havePermission: () => mockHavePermission\n }))\n}))\n\n// Mock ciblé de convertHumanTimeToSeconds\njest.mock('../../../common/functions', () => {\n const actual = jest.requireActual('../../../common/functions')\n return { ...actual, convertHumanTimeToSeconds: jest.fn() }\n})\n\n// Mock currentTimeStamp\njest.mock('../../../common/shared', () => ({ currentTimeStamp: jest.fn() }))\n\n// Mock FS et helper d'existence\njest.mock('node:fs/promises', () => ({ readFile: jest.fn() }))\njest.mock('../../files/utils/files', () => ({ isPathExists: jest.fn() }))\n\ndescribe(SyncClientsManager.name, () => {\n let service: SyncClientsManager\n\n // Mocks\n let http: { axiosRef: jest.Mock }\n let authManager: { setCookies: jest.Mock; getTokens: jest.Mock }\n let authMethod: { validateUser: jest.Mock }\n let usersManager: { fromUserId: jest.Mock; updateAccesses: jest.Mock }\n let syncQueries: {\n getOrCreateClient: jest.Mock\n deleteClient: jest.Mock\n getClient: jest.Mock\n updateClientInfo: jest.Mock\n renewClientTokenAndExpiration: jest.Mock\n getClients: jest.Mock\n }\n let cacheMock: { genSlugKey: jest.Mock; get: jest.Mock; set: jest.Mock; del: jest.Mock }\n\n // Helpers\n const setRepo = (repo: APP_STORE_REPOSITORY) => {\n ;(configuration as any).applications.appStore.repository = repo\n }\n const makeClient = (overrides: any = {}) => ({\n id: 'cid',\n ownerId: 1,\n tokenExpiration: 2000,\n enabled: true,\n info: { type: 'desktop' },\n ...overrides\n })\n const makeUser = (overrides: any = {}) =>\n new UserModel({\n id: 1,\n isActive: true,\n login: 'u',\n email: 'u@x',\n firstName: 'U',\n lastName: 'X',\n role: 1,\n permissions: 'desktop',\n ...overrides\n })\n\n beforeAll(async () => {\n http = { axiosRef: jest.fn() }\n authManager = { setCookies: jest.fn(), getTokens: jest.fn() }\n authMethod = { validateUser: jest.fn() }\n usersManager = { fromUserId: jest.fn(), updateAccesses: jest.fn() }\n syncQueries = {\n getOrCreateClient: jest.fn(),\n deleteClient: jest.fn(),\n getClient: jest.fn(),\n updateClientInfo: jest.fn(),\n renewClientTokenAndExpiration: jest.fn(),\n getClients: jest.fn()\n }\n cacheMock = {\n genSlugKey: jest.fn().mockReturnValue('syncclientsmanager:checkappstore'),\n get: jest.fn().mockResolvedValue(undefined),\n set: jest.fn().mockResolvedValue(undefined),\n del: jest.fn().mockResolvedValue(undefined)\n }\n\n const module: TestingModule = await Test.createTestingModule({\n providers: [\n SyncClientsManager,\n { provide: Cache, useValue: cacheMock },\n { provide: HttpService, useValue: http },\n { provide: SyncQueries, useValue: syncQueries },\n { provide: UsersManager, useValue: usersManager },\n { provide: AuthManager, useValue: authManager },\n { provide: AuthMethod, useValue: authMethod },\n { provide: AuthMethod2FA, useValue: {} }\n ]\n }).compile()\n\n module.useLogger(['fatal'])\n service = module.get<SyncClientsManager>(SyncClientsManager)\n ;(service as any).cache = cacheMock\n })\n\n beforeEach(() => {\n jest.restoreAllMocks()\n jest.clearAllMocks()\n mockHavePermission = true\n ;(commonShared.currentTimeStamp as jest.Mock).mockReturnValue(1_000)\n ;(commonFunctions.convertHumanTimeToSeconds as jest.Mock).mockImplementation((v: string | number) => {\n if (v === '90d') return 90 * 24 * 3600\n if (v === '180d') return 180 * 24 * 3600\n if (typeof v === 'number') return v\n return 0\n })\n ;(isPathExists as jest.Mock).mockReset()\n ;(fs.readFile as jest.Mock).mockReset()\n ;(syncQueries.updateClientInfo as jest.Mock).mockResolvedValue(undefined)\n ;(usersManager.updateAccesses as jest.Mock).mockResolvedValue(undefined)\n ;(service as any).cache = cacheMock\n cacheMock.get.mockResolvedValue(undefined)\n cacheMock.get.mockClear()\n cacheMock.set.mockClear()\n cacheMock.del.mockClear()\n cacheMock.genSlugKey.mockClear()\n setRepo(APP_STORE_REPOSITORY.PUBLIC)\n })\n\n it('should be defined', () => expect(service).toBeDefined())\n\n describe('register', () => {\n const baseDto = { login: 'john', password: 'secret', clientId: 'client-1', info: { type: 'desktop', version: '1.0.0' } }\n\n test.each([\n ['Unauthorized when credentials are invalid', null, HttpStatus.UNAUTHORIZED],\n ['Forbidden when user lacks DESKTOP_APP permission', { id: 10, login: 'john', havePermission: () => false }, HttpStatus.FORBIDDEN]\n ])('should throw %s', async (_label, user, status) => {\n authMethod.validateUser.mockResolvedValue(user)\n await expect(service.register(baseDto as any, '1.2.3.4')).rejects.toMatchObject({ status })\n })\n\n it('should return client token when registration succeeds', async () => {\n authMethod.validateUser.mockResolvedValue({ id: 10, login: 'john', havePermission: () => true })\n syncQueries.getOrCreateClient.mockResolvedValue('token-abc')\n\n const r = await service.register(baseDto as any, '1.2.3.4')\n expect(r).toEqual({ clientToken: 'token-abc' })\n expect(syncQueries.getOrCreateClient).toHaveBeenCalledWith(10, 'client-1', baseDto.info, '1.2.3.4')\n })\n\n it('should throw Internal Server Error when persistence fails', async () => {\n authMethod.validateUser.mockResolvedValue({ id: 10, login: 'john', havePermission: () => true })\n syncQueries.getOrCreateClient.mockRejectedValue(new Error('db error'))\n await expect(service.register(baseDto as any, '1.2.3.4')).rejects.toMatchObject({ status: HttpStatus.INTERNAL_SERVER_ERROR })\n })\n })\n\n describe('unregister', () => {\n it('should delete client without error', async () => {\n syncQueries.deleteClient.mockResolvedValue(undefined)\n await expect(service.unregister({ id: 1, clientId: 'c1' } as any)).resolves.toBeUndefined()\n expect(syncQueries.deleteClient).toHaveBeenCalledWith(1, 'c1')\n })\n it('should throw Internal Server Error when deletion fails', async () => {\n syncQueries.deleteClient.mockRejectedValue(new Error('db error'))\n await expect(service.unregister({ id: 1, clientId: 'c1' } as any)).rejects.toMatchObject({ status: HttpStatus.INTERNAL_SERVER_ERROR })\n })\n })\n\n describe('authenticate', () => {\n const ip = '9.9.9.9'\n const dto = { clientId: 'cid', token: 'ctok' }\n\n it('should forbid when client is unknown', async () => {\n syncQueries.getClient.mockResolvedValue(undefined)\n await expect(service.authenticate(CLIENT_AUTH_TYPE.TOKEN, dto as any, ip, {} as FastifyReply)).rejects.toMatchObject({\n status: HttpStatus.FORBIDDEN,\n response: 'Client is unknown'\n })\n })\n\n it('should forbid when client is disabled', async () => {\n syncQueries.getClient.mockResolvedValue(makeClient({ enabled: false, tokenExpiration: 5000 }))\n await expect(service.authenticate(CLIENT_AUTH_TYPE.TOKEN, dto as any, ip, {} as FastifyReply)).rejects.toMatchObject({\n status: HttpStatus.FORBIDDEN,\n response: 'Client is disabled'\n })\n })\n\n it('should forbid when client token is expired', async () => {\n ;(commonShared.currentTimeStamp as jest.Mock).mockReturnValue(1000)\n syncQueries.getClient.mockResolvedValue(makeClient({ tokenExpiration: 1000 }))\n await expect(service.authenticate(CLIENT_AUTH_TYPE.TOKEN, dto as any, ip, {} as FastifyReply)).rejects.toMatchObject({\n status: HttpStatus.FORBIDDEN,\n response: CLIENT_TOKEN_EXPIRED_ERROR\n })\n })\n\n it('should forbid when owner user does not exist', async () => {\n syncQueries.getClient.mockResolvedValue(makeClient())\n syncQueries.updateClientInfo.mockRejectedValueOnce(new Error('update-fails')) // silence expected\n usersManager.fromUserId.mockResolvedValue(null)\n await expect(service.authenticate(CLIENT_AUTH_TYPE.TOKEN, dto as any, ip, {} as FastifyReply)).rejects.toMatchObject({\n status: HttpStatus.FORBIDDEN,\n response: 'User does not exist'\n })\n })\n\n it('should forbid when owner account is inactive', async () => {\n syncQueries.getClient.mockResolvedValue(makeClient())\n usersManager.fromUserId.mockResolvedValue(makeUser({ isActive: false }))\n await expect(service.authenticate(CLIENT_AUTH_TYPE.TOKEN, dto as any, ip, {} as FastifyReply)).rejects.toMatchObject({\n status: HttpStatus.FORBIDDEN,\n response: 'Account suspended or not authorized'\n })\n })\n\n it('should forbid when owner lacks DESKTOP_APP permission', async () => {\n mockHavePermission = false\n syncQueries.getClient.mockResolvedValue(makeClient())\n usersManager.fromUserId.mockResolvedValue(makeUser({ permissions: '', role: 999 }))\n await expect(service.authenticate(CLIENT_AUTH_TYPE.TOKEN, dto as any, ip, {} as FastifyReply)).rejects.toMatchObject({\n status: HttpStatus.FORBIDDEN,\n response: 'Missing permission'\n })\n })\n\n it('should perform COOKIE authentication and renew client token when needed', async () => {\n syncQueries.getClient.mockResolvedValue(makeClient({ ownerId: 7 }))\n usersManager.fromUserId.mockResolvedValue(makeUser({ id: 7, login: 'john', email: 'john@doe', firstName: 'John', lastName: 'Doe' }))\n usersManager.updateAccesses.mockRejectedValueOnce(new Error('update-access-fail')) // silence expected\n authManager.setCookies.mockResolvedValue({ access_token: 'a', refresh_token: 'b' })\n jest.spyOn(service, 'renewTokenAndExpiration').mockResolvedValue('new-client-token')\n\n const reply = {} as unknown as FastifyReply\n const r: any = await service.authenticate(CLIENT_AUTH_TYPE.COOKIE, dto as any, ip, reply)\n\n expect(authManager.setCookies).toHaveBeenCalledTimes(1)\n expect(service.renewTokenAndExpiration).toHaveBeenCalledTimes(1)\n expect(r.client_token_update).toBe('new-client-token')\n })\n\n it('should perform TOKEN authentication and not renew when not needed', async () => {\n syncQueries.getClient.mockResolvedValue(makeClient({ ownerId: 8 }))\n usersManager.fromUserId.mockResolvedValue(makeUser({ id: 8, login: 'alice', email: 'alice@doe', firstName: 'Alice' }))\n authManager.getTokens.mockResolvedValue({ access_token: 'x', refresh_token: 'y' })\n jest.spyOn(service, 'renewTokenAndExpiration').mockResolvedValue(undefined)\n\n const r: any = await service.authenticate(CLIENT_AUTH_TYPE.TOKEN, dto as any, ip, {} as FastifyReply)\n expect(authManager.getTokens).toHaveBeenCalledTimes(1)\n expect(r.client_token_update).toBeUndefined()\n })\n\n it('should throw when auth type is unknown (else branch)', async () => {\n syncQueries.getClient.mockResolvedValue(makeClient({ ownerId: 9 }))\n usersManager.fromUserId.mockResolvedValue(makeUser({ id: 9, login: 'bob', email: 'bob@doe', firstName: 'Bob' }))\n jest.spyOn(service, 'renewTokenAndExpiration').mockResolvedValue(undefined)\n await expect(service.authenticate('unknown' as any, { clientId: 'cid', token: 'ctok' } as any, ip, {} as FastifyReply)).rejects.toBeInstanceOf(\n TypeError\n )\n })\n })\n\n describe('getClients', () => {\n it('should proxy to SyncQueries.getClients', async () => {\n const fake = [{ id: 'c1', paths: [] }]\n syncQueries.getClients.mockResolvedValue(fake)\n const r = await service.getClients({ id: 1, clientId: 'c1' } as any)\n expect(r).toBe(fake)\n expect(syncQueries.getClients).toHaveBeenCalledWith({ id: 1, clientId: 'c1' })\n })\n })\n\n describe('renewTokenAndExpiration', () => {\n const owner = { id: 1, login: 'bob' } as any\n\n it('should return undefined when token expiration is far enough', async () => {\n ;(commonShared.currentTimeStamp as jest.Mock).mockReturnValue(1_000)\n ;(commonFunctions.convertHumanTimeToSeconds as jest.Mock).mockImplementation((v: string) => (v === '90d' ? 90 * 24 * 3600 : 0))\n const client = { id: 'cid', tokenExpiration: 1_000 + 90 * 24 * 3600 + 1 } as any\n expect(await service.renewTokenAndExpiration(client, owner)).toBeUndefined()\n })\n\n it('should renew token and return new value when close to expiration', async () => {\n ;(commonShared.currentTimeStamp as jest.Mock).mockReturnValue(1_000)\n ;(commonFunctions.convertHumanTimeToSeconds as jest.Mock).mockImplementation((v: string) =>\n v === '60d' ? 60 * 24 * 3600 : v === '120d' ? 120 * 24 * 3600 : 0\n )\n const client = { id: 'cid', tokenExpiration: 1_000 + 60 * 24 * 3600 - 1 } as any\n syncQueries.renewClientTokenAndExpiration.mockResolvedValue(undefined)\n\n const r = await service.renewTokenAndExpiration(client, owner)\n expect(typeof r).toBe('string')\n expect(r).toBeTruthy()\n expect(syncQueries.renewClientTokenAndExpiration).toHaveBeenCalledWith('cid', r, expect.any(Number))\n })\n\n it('should throw Bad Request when renewal persistence fails', async () => {\n ;(commonShared.currentTimeStamp as jest.Mock).mockReturnValue(1_000)\n const client = { id: 'cid', tokenExpiration: 1_000 } as any\n jest.spyOn(crypto, 'randomUUID').mockReturnValue('uuid-err' as any)\n syncQueries.renewClientTokenAndExpiration.mockRejectedValue(new Error('db fail'))\n await expect(service.renewTokenAndExpiration(client, owner)).rejects.toMatchObject({ status: HttpStatus.BAD_REQUEST })\n })\n })\n\n describe('deleteClient', () => {\n it('should delete client successfully', async () => {\n syncQueries.deleteClient.mockResolvedValue(undefined)\n await expect(service.deleteClient({ id: 5 } as any, 'cid')).resolves.toBeUndefined()\n expect(syncQueries.deleteClient).toHaveBeenCalledWith(5, 'cid')\n })\n it('should throw Internal Server Error when deletion fails', async () => {\n syncQueries.deleteClient.mockRejectedValue(new Error('db error'))\n await expect(service.deleteClient({ id: 5 } as any, 'cid')).rejects.toMatchObject({ status: HttpStatus.INTERNAL_SERVER_ERROR })\n })\n })\n\n describe('checkAppStore', () => {\n it('should return PUBLIC manifest when HTTP fetch succeeds', async () => {\n setRepo(APP_STORE_REPOSITORY.PUBLIC)\n http.axiosRef.mockResolvedValue({ data: { platform: { win: [] } } })\n\n const manifest: any = await service.checkAppStore()\n expect(manifest).toBeTruthy()\n expect(manifest.repository).toBe(APP_STORE_REPOSITORY.PUBLIC)\n expect(http.axiosRef).toHaveBeenCalled()\n })\n\n it('should return null when PUBLIC manifest fetch fails', async () => {\n setRepo(APP_STORE_REPOSITORY.PUBLIC)\n http.axiosRef.mockRejectedValue(new Error('network'))\n expect(await service.checkAppStore()).toBeNull()\n })\n\n it('should return null when LOCAL manifest file does not exist', async () => {\n setRepo(APP_STORE_REPOSITORY.LOCAL)\n ;(isPathExists as jest.Mock).mockResolvedValue(false)\n expect(await service.checkAppStore()).toBeNull()\n })\n\n it('should return LOCAL manifest with rewritten URLs when file is valid', async () => {\n setRepo(APP_STORE_REPOSITORY.LOCAL)\n ;(isPathExists as jest.Mock).mockResolvedValue(true)\n const raw = {\n platform: {\n win: [{ package: 'desktop-win.exe' }, { package: 'cli-win.zip' }],\n linux: [{ package: 'desktop-linux.AppImage' }]\n }\n }\n ;(fs.readFile as jest.Mock).mockResolvedValue(JSON.stringify(raw))\n\n const manifest: any = await service.checkAppStore()\n expect(manifest.repository).toBe(APP_STORE_REPOSITORY.LOCAL)\n expect(manifest.platform.win[0].url.startsWith(APP_STORE_DIRNAME)).toBe(true)\n expect(manifest.platform.win[0].url.endsWith('desktop-win.exe')).toBe(true)\n expect(manifest.platform.win[1].url.startsWith(APP_STORE_DIRNAME)).toBe(true)\n expect(manifest.platform.win[1].url.endsWith('cli-win.zip')).toBe(true)\n expect(manifest.platform.linux[0].url.startsWith(APP_STORE_DIRNAME)).toBe(true)\n expect(manifest.platform.linux[0].url.endsWith('desktop-linux.AppImage')).toBe(true)\n })\n\n it('should return null when LOCAL manifest cannot be parsed', async () => {\n setRepo(APP_STORE_REPOSITORY.LOCAL)\n ;(isPathExists as jest.Mock).mockResolvedValue(true)\n ;(fs.readFile as jest.Mock).mockRejectedValue(new Error('fs error'))\n expect(await service.checkAppStore()).toBeNull()\n })\n\n it('should rewrite desktop packages under desktop/os when package starts with \"desktop\"', async () => {\n setRepo(APP_STORE_REPOSITORY.LOCAL)\n ;(isPathExists as jest.Mock).mockResolvedValue(true)\n const raw = {\n platform: {\n win: [{ package: `${SYNC_CLIENT_TYPE.DESKTOP}-win.exe` }],\n mac: [{ package: `${SYNC_CLIENT_TYPE.DESKTOP}-mac.dmg` }],\n linux: [{ package: `${SYNC_CLIENT_TYPE.DESKTOP}-linux.AppImage` }]\n }\n }\n ;(fs.readFile as jest.Mock).mockResolvedValue(JSON.stringify(raw))\n\n const manifest: any = await service.checkAppStore()\n expect(manifest).toBeTruthy()\n expect(manifest.repository).toBe(APP_STORE_REPOSITORY.LOCAL)\n expect(manifest.platform.win[0].url).toBe(`${APP_STORE_DIRNAME}/${SYNC_CLIENT_TYPE.DESKTOP}/win/${SYNC_CLIENT_TYPE.DESKTOP}-win.exe`)\n expect(manifest.platform.mac[0].url).toBe(`${APP_STORE_DIRNAME}/${SYNC_CLIENT_TYPE.DESKTOP}/mac/${SYNC_CLIENT_TYPE.DESKTOP}-mac.dmg`)\n expect(manifest.platform.linux[0].url).toBe(`${APP_STORE_DIRNAME}/${SYNC_CLIENT_TYPE.DESKTOP}/linux/${SYNC_CLIENT_TYPE.DESKTOP}-linux.AppImage`)\n })\n })\n})\n"],"names":["mockHavePermission","jest","mock","UserModel","fn","mockImplementation","props","havePermission","actual","requireActual","convertHumanTimeToSeconds","currentTimeStamp","readFile","isPathExists","describe","SyncClientsManager","name","service","http","authManager","authMethod","usersManager","syncQueries","cacheMock","setRepo","repo","configuration","applications","appStore","repository","makeClient","overrides","id","ownerId","tokenExpiration","enabled","info","type","makeUser","isActive","login","email","firstName","lastName","role","permissions","beforeAll","axiosRef","setCookies","getTokens","validateUser","fromUserId","updateAccesses","getOrCreateClient","deleteClient","getClient","updateClientInfo","renewClientTokenAndExpiration","getClients","genSlugKey","mockReturnValue","get","mockResolvedValue","undefined","set","del","module","Test","createTestingModule","providers","provide","Cache","useValue","HttpService","SyncQueries","UsersManager","AuthManager","AuthMethod","AuthMethod2FA","compile","useLogger","cache","beforeEach","restoreAllMocks","clearAllMocks","commonShared","commonFunctions","v","mockReset","fs","mockClear","APP_STORE_REPOSITORY","PUBLIC","it","expect","toBeDefined","baseDto","password","clientId","version","test","each","HttpStatus","UNAUTHORIZED","FORBIDDEN","_label","user","status","register","rejects","toMatchObject","r","toEqual","clientToken","toHaveBeenCalledWith","mockRejectedValue","Error","INTERNAL_SERVER_ERROR","unregister","resolves","toBeUndefined","ip","dto","token","authenticate","CLIENT_AUTH_TYPE","TOKEN","response","CLIENT_TOKEN_EXPIRED_ERROR","mockRejectedValueOnce","access_token","refresh_token","spyOn","reply","COOKIE","toHaveBeenCalledTimes","renewTokenAndExpiration","client_token_update","toBe","toBeInstanceOf","TypeError","fake","paths","owner","client","toBeTruthy","any","Number","crypto","BAD_REQUEST","data","platform","win","manifest","checkAppStore","toHaveBeenCalled","toBeNull","LOCAL","raw","package","linux","JSON","stringify","url","startsWith","APP_STORE_DIRNAME","endsWith","SYNC_CLIENT_TYPE","DESKTOP","mac"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/sync/services/sync-clients-manager.service.spec.ts"],"sourcesContent":["import { HttpService } from '@nestjs/axios'\nimport { HttpStatus } from '@nestjs/common'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { FastifyReply } from 'fastify'\nimport crypto from 'node:crypto'\nimport fs from 'node:fs/promises'\nimport { AuthManager } from '../../../authentication/auth.service'\nimport { AuthProvider } from '../../../authentication/providers/auth-providers.models'\nimport { AuthProvider2FA } from '../../../authentication/providers/two-fa/auth-provider-two-fa.service'\nimport * as commonFunctions from '../../../common/functions'\nimport * as commonShared from '../../../common/shared'\nimport { configuration } from '../../../configuration/config.environment'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { isPathExists } from '../../files/utils/files'\nimport { UserModel } from '../../users/models/user.model'\nimport { UsersManager } from '../../users/services/users-manager.service'\nimport { CLIENT_AUTH_TYPE, CLIENT_TOKEN_EXPIRED_ERROR } from '../constants/auth'\nimport { APP_STORE_DIRNAME, APP_STORE_REPOSITORY } from '../constants/store'\nimport { SYNC_CLIENT_TYPE } from '../constants/sync'\nimport { SyncClientAuthRegistration } from '../interfaces/sync-client-auth.interface'\nimport { SyncClientsManager } from './sync-clients-manager.service'\nimport { SyncQueries } from './sync-queries.service'\n\n// Pilotage permission via UserModel\nlet mockHavePermission = true\njest.mock('../../users/models/user.model', () => ({\n UserModel: jest.fn().mockImplementation((props: any) => ({\n ...props,\n havePermission: () => mockHavePermission\n }))\n}))\n\n// Mock ciblé de convertHumanTimeToSeconds\njest.mock('../../../common/functions', () => {\n const actual = jest.requireActual('../../../common/functions')\n return { ...actual, convertHumanTimeToSeconds: jest.fn() }\n})\n\n// Mock currentTimeStamp\njest.mock('../../../common/shared', () => ({ currentTimeStamp: jest.fn() }))\n\n// Mock FS et helper d'existence\njest.mock('node:fs/promises', () => ({ readFile: jest.fn() }))\njest.mock('../../files/utils/files', () => ({ isPathExists: jest.fn() }))\n\ndescribe(SyncClientsManager.name, () => {\n let service: SyncClientsManager\n\n // Mocks\n let http: { axiosRef: jest.Mock }\n let authManager: { setCookies: jest.Mock; getTokens: jest.Mock }\n let authProvider: { validateUser: jest.Mock }\n let usersManager: { fromUserId: jest.Mock; updateAccesses: jest.Mock }\n let syncQueries: {\n getOrCreateClient: jest.Mock\n deleteClient: jest.Mock\n getClient: jest.Mock\n updateClientInfo: jest.Mock\n renewClientTokenAndExpiration: jest.Mock\n getClients: jest.Mock\n }\n let cacheMock: { genSlugKey: jest.Mock; get: jest.Mock; set: jest.Mock; del: jest.Mock }\n\n // Helpers\n const setRepo = (repo: APP_STORE_REPOSITORY) => {\n ;(configuration as any).applications.appStore.repository = repo\n }\n const makeClient = (overrides: any = {}) => ({\n id: 'cid',\n ownerId: 1,\n tokenExpiration: 2000,\n enabled: true,\n info: { type: 'desktop' },\n ...overrides\n })\n const makeUser = (overrides: any = {}) =>\n new UserModel({\n id: 1,\n isActive: true,\n login: 'u',\n email: 'u@x',\n firstName: 'U',\n lastName: 'X',\n role: 1,\n permissions: 'desktop',\n ...overrides\n })\n\n beforeAll(async () => {\n http = { axiosRef: jest.fn() }\n authManager = { setCookies: jest.fn(), getTokens: jest.fn() }\n authProvider = { validateUser: jest.fn() }\n usersManager = { fromUserId: jest.fn(), updateAccesses: jest.fn() }\n syncQueries = {\n getOrCreateClient: jest.fn(),\n deleteClient: jest.fn(),\n getClient: jest.fn(),\n updateClientInfo: jest.fn(),\n renewClientTokenAndExpiration: jest.fn(),\n getClients: jest.fn()\n }\n cacheMock = {\n genSlugKey: jest.fn().mockReturnValue('syncclientsmanager:checkappstore'),\n get: jest.fn().mockResolvedValue(undefined),\n set: jest.fn().mockResolvedValue(undefined),\n del: jest.fn().mockResolvedValue(undefined)\n }\n\n const module: TestingModule = await Test.createTestingModule({\n providers: [\n SyncClientsManager,\n { provide: Cache, useValue: cacheMock },\n { provide: HttpService, useValue: http },\n { provide: SyncQueries, useValue: syncQueries },\n { provide: UsersManager, useValue: usersManager },\n { provide: AuthManager, useValue: authManager },\n { provide: AuthProvider, useValue: authProvider },\n { provide: AuthProvider2FA, useValue: {} }\n ]\n }).compile()\n\n module.useLogger(['fatal'])\n service = module.get<SyncClientsManager>(SyncClientsManager)\n ;(service as any).cache = cacheMock\n })\n\n beforeEach(() => {\n jest.restoreAllMocks()\n jest.clearAllMocks()\n mockHavePermission = true\n ;(commonShared.currentTimeStamp as jest.Mock).mockReturnValue(1_000)\n ;(commonFunctions.convertHumanTimeToSeconds as jest.Mock).mockImplementation((v: string | number) => {\n if (v === '90d') return 90 * 24 * 3600\n if (v === '180d') return 180 * 24 * 3600\n if (typeof v === 'number') return v\n return 0\n })\n ;(isPathExists as jest.Mock).mockReset()\n ;(fs.readFile as jest.Mock).mockReset()\n ;(syncQueries.updateClientInfo as jest.Mock).mockResolvedValue(undefined)\n ;(usersManager.updateAccesses as jest.Mock).mockResolvedValue(undefined)\n ;(service as any).cache = cacheMock\n cacheMock.get.mockResolvedValue(undefined)\n cacheMock.get.mockClear()\n cacheMock.set.mockClear()\n cacheMock.del.mockClear()\n cacheMock.genSlugKey.mockClear()\n setRepo(APP_STORE_REPOSITORY.PUBLIC)\n })\n\n it('should be defined', () => expect(service).toBeDefined())\n\n describe('register', () => {\n const baseDto = { login: 'john', password: 'secret', clientId: 'client-1', info: { type: 'desktop', version: '1.0.0' } }\n\n test.each([\n ['Unauthorized when credentials are invalid', null, HttpStatus.UNAUTHORIZED],\n ['Forbidden when user lacks DESKTOP_APP permission', { id: 10, login: 'john', havePermission: () => false }, HttpStatus.FORBIDDEN]\n ])('should throw %s', async (_label, user, status) => {\n authProvider.validateUser.mockResolvedValue(user)\n await expect(service.register(baseDto as any, '1.2.3.4')).rejects.toMatchObject({ status })\n })\n\n it('should return client token when registration succeeds', async () => {\n authProvider.validateUser.mockResolvedValue({ id: 10, login: 'john', havePermission: () => true })\n syncQueries.getOrCreateClient.mockResolvedValue('token-abc')\n\n const r = await service.register(baseDto as any, '1.2.3.4')\n expect(r).toEqual({ clientId: 'client-1', clientToken: 'token-abc' } satisfies SyncClientAuthRegistration)\n expect(syncQueries.getOrCreateClient).toHaveBeenCalledWith(10, 'client-1', baseDto.info, '1.2.3.4')\n })\n\n it('should throw Internal Server Error when persistence fails', async () => {\n authProvider.validateUser.mockResolvedValue({ id: 10, login: 'john', havePermission: () => true })\n syncQueries.getOrCreateClient.mockRejectedValue(new Error('db error'))\n await expect(service.register(baseDto as any, '1.2.3.4')).rejects.toMatchObject({ status: HttpStatus.INTERNAL_SERVER_ERROR })\n })\n })\n\n describe('unregister', () => {\n it('should delete client without error', async () => {\n syncQueries.deleteClient.mockResolvedValue(undefined)\n await expect(service.unregister({ id: 1, clientId: 'c1' } as any)).resolves.toBeUndefined()\n expect(syncQueries.deleteClient).toHaveBeenCalledWith(1, 'c1')\n })\n it('should throw Internal Server Error when deletion fails', async () => {\n syncQueries.deleteClient.mockRejectedValue(new Error('db error'))\n await expect(service.unregister({ id: 1, clientId: 'c1' } as any)).rejects.toMatchObject({ status: HttpStatus.INTERNAL_SERVER_ERROR })\n })\n })\n\n describe('authenticate', () => {\n const ip = '9.9.9.9'\n const dto = { clientId: 'cid', token: 'ctok' }\n\n it('should forbid when client is unknown', async () => {\n syncQueries.getClient.mockResolvedValue(undefined)\n await expect(service.authenticate(CLIENT_AUTH_TYPE.TOKEN, dto as any, ip, {} as FastifyReply)).rejects.toMatchObject({\n status: HttpStatus.FORBIDDEN,\n response: 'Client is unknown'\n })\n })\n\n it('should forbid when client is disabled', async () => {\n syncQueries.getClient.mockResolvedValue(makeClient({ enabled: false, tokenExpiration: 5000 }))\n await expect(service.authenticate(CLIENT_AUTH_TYPE.TOKEN, dto as any, ip, {} as FastifyReply)).rejects.toMatchObject({\n status: HttpStatus.FORBIDDEN,\n response: 'Client is disabled'\n })\n })\n\n it('should forbid when client token is expired', async () => {\n ;(commonShared.currentTimeStamp as jest.Mock).mockReturnValue(1000)\n syncQueries.getClient.mockResolvedValue(makeClient({ tokenExpiration: 1000 }))\n await expect(service.authenticate(CLIENT_AUTH_TYPE.TOKEN, dto as any, ip, {} as FastifyReply)).rejects.toMatchObject({\n status: HttpStatus.FORBIDDEN,\n response: CLIENT_TOKEN_EXPIRED_ERROR\n })\n })\n\n it('should forbid when owner user does not exist', async () => {\n syncQueries.getClient.mockResolvedValue(makeClient())\n syncQueries.updateClientInfo.mockRejectedValueOnce(new Error('update-fails')) // silence expected\n usersManager.fromUserId.mockResolvedValue(null)\n await expect(service.authenticate(CLIENT_AUTH_TYPE.TOKEN, dto as any, ip, {} as FastifyReply)).rejects.toMatchObject({\n status: HttpStatus.FORBIDDEN,\n response: 'User does not exist'\n })\n })\n\n it('should forbid when owner account is inactive', async () => {\n syncQueries.getClient.mockResolvedValue(makeClient())\n usersManager.fromUserId.mockResolvedValue(makeUser({ isActive: false }))\n await expect(service.authenticate(CLIENT_AUTH_TYPE.TOKEN, dto as any, ip, {} as FastifyReply)).rejects.toMatchObject({\n status: HttpStatus.FORBIDDEN,\n response: 'Account suspended or not authorized'\n })\n })\n\n it('should forbid when owner lacks DESKTOP_APP permission', async () => {\n mockHavePermission = false\n syncQueries.getClient.mockResolvedValue(makeClient())\n usersManager.fromUserId.mockResolvedValue(makeUser({ permissions: '', role: 999 }))\n await expect(service.authenticate(CLIENT_AUTH_TYPE.TOKEN, dto as any, ip, {} as FastifyReply)).rejects.toMatchObject({\n status: HttpStatus.FORBIDDEN,\n response: 'Missing permission'\n })\n })\n\n it('should perform COOKIE authentication and renew client token when needed', async () => {\n syncQueries.getClient.mockResolvedValue(makeClient({ ownerId: 7 }))\n usersManager.fromUserId.mockResolvedValue(makeUser({ id: 7, login: 'john', email: 'john@doe', firstName: 'John', lastName: 'Doe' }))\n usersManager.updateAccesses.mockRejectedValueOnce(new Error('update-access-fail')) // silence expected\n authManager.setCookies.mockResolvedValue({ access_token: 'a', refresh_token: 'b' })\n jest.spyOn(service, 'renewTokenAndExpiration').mockResolvedValue('new-client-token')\n\n const reply = {} as unknown as FastifyReply\n const r: any = await service.authenticate(CLIENT_AUTH_TYPE.COOKIE, dto as any, ip, reply)\n\n expect(authManager.setCookies).toHaveBeenCalledTimes(1)\n expect(service.renewTokenAndExpiration).toHaveBeenCalledTimes(1)\n expect(r.client_token_update).toBe('new-client-token')\n })\n\n it('should perform TOKEN authentication and not renew when not needed', async () => {\n syncQueries.getClient.mockResolvedValue(makeClient({ ownerId: 8 }))\n usersManager.fromUserId.mockResolvedValue(makeUser({ id: 8, login: 'alice', email: 'alice@doe', firstName: 'Alice' }))\n authManager.getTokens.mockResolvedValue({ access_token: 'x', refresh_token: 'y' })\n jest.spyOn(service, 'renewTokenAndExpiration').mockResolvedValue(undefined)\n\n const r: any = await service.authenticate(CLIENT_AUTH_TYPE.TOKEN, dto as any, ip, {} as FastifyReply)\n expect(authManager.getTokens).toHaveBeenCalledTimes(1)\n expect(r.client_token_update).toBeUndefined()\n })\n\n it('should throw when auth type is unknown (else branch)', async () => {\n syncQueries.getClient.mockResolvedValue(makeClient({ ownerId: 9 }))\n usersManager.fromUserId.mockResolvedValue(makeUser({ id: 9, login: 'bob', email: 'bob@doe', firstName: 'Bob' }))\n jest.spyOn(service, 'renewTokenAndExpiration').mockResolvedValue(undefined)\n await expect(service.authenticate('unknown' as any, { clientId: 'cid', token: 'ctok' } as any, ip, {} as FastifyReply)).rejects.toBeInstanceOf(\n TypeError\n )\n })\n })\n\n describe('getClients', () => {\n it('should proxy to SyncQueries.getClients', async () => {\n const fake = [{ id: 'c1', paths: [] }]\n syncQueries.getClients.mockResolvedValue(fake)\n const r = await service.getClients({ id: 1, clientId: 'c1' } as any)\n expect(r).toBe(fake)\n expect(syncQueries.getClients).toHaveBeenCalledWith({ id: 1, clientId: 'c1' })\n })\n })\n\n describe('renewTokenAndExpiration', () => {\n const owner = { id: 1, login: 'bob' } as any\n\n it('should return undefined when token expiration is far enough', async () => {\n ;(commonShared.currentTimeStamp as jest.Mock).mockReturnValue(1_000)\n ;(commonFunctions.convertHumanTimeToSeconds as jest.Mock).mockImplementation((v: string) => (v === '90d' ? 90 * 24 * 3600 : 0))\n const client = { id: 'cid', tokenExpiration: 1_000 + 90 * 24 * 3600 + 1 } as any\n expect(await service.renewTokenAndExpiration(client, owner)).toBeUndefined()\n })\n\n it('should renew token and return new value when close to expiration', async () => {\n ;(commonShared.currentTimeStamp as jest.Mock).mockReturnValue(1_000)\n ;(commonFunctions.convertHumanTimeToSeconds as jest.Mock).mockImplementation((v: string) =>\n v === '60d' ? 60 * 24 * 3600 : v === '120d' ? 120 * 24 * 3600 : 0\n )\n const client = { id: 'cid', tokenExpiration: 1_000 + 60 * 24 * 3600 - 1 } as any\n syncQueries.renewClientTokenAndExpiration.mockResolvedValue(undefined)\n\n const r = await service.renewTokenAndExpiration(client, owner)\n expect(typeof r).toBe('string')\n expect(r).toBeTruthy()\n expect(syncQueries.renewClientTokenAndExpiration).toHaveBeenCalledWith('cid', r, expect.any(Number))\n })\n\n it('should throw Bad Request when renewal persistence fails', async () => {\n ;(commonShared.currentTimeStamp as jest.Mock).mockReturnValue(1_000)\n const client = { id: 'cid', tokenExpiration: 1_000 } as any\n jest.spyOn(crypto, 'randomUUID').mockReturnValue('uuid-err' as any)\n syncQueries.renewClientTokenAndExpiration.mockRejectedValue(new Error('db fail'))\n await expect(service.renewTokenAndExpiration(client, owner)).rejects.toMatchObject({ status: HttpStatus.BAD_REQUEST })\n })\n })\n\n describe('deleteClient', () => {\n it('should delete client successfully', async () => {\n syncQueries.deleteClient.mockResolvedValue(undefined)\n await expect(service.deleteClient({ id: 5 } as any, 'cid')).resolves.toBeUndefined()\n expect(syncQueries.deleteClient).toHaveBeenCalledWith(5, 'cid')\n })\n it('should throw Internal Server Error when deletion fails', async () => {\n syncQueries.deleteClient.mockRejectedValue(new Error('db error'))\n await expect(service.deleteClient({ id: 5 } as any, 'cid')).rejects.toMatchObject({ status: HttpStatus.INTERNAL_SERVER_ERROR })\n })\n })\n\n describe('checkAppStore', () => {\n it('should return PUBLIC manifest when HTTP fetch succeeds', async () => {\n setRepo(APP_STORE_REPOSITORY.PUBLIC)\n http.axiosRef.mockResolvedValue({ data: { platform: { win: [] } } })\n\n const manifest: any = await service.checkAppStore()\n expect(manifest).toBeTruthy()\n expect(manifest.repository).toBe(APP_STORE_REPOSITORY.PUBLIC)\n expect(http.axiosRef).toHaveBeenCalled()\n })\n\n it('should return null when PUBLIC manifest fetch fails', async () => {\n setRepo(APP_STORE_REPOSITORY.PUBLIC)\n http.axiosRef.mockRejectedValue(new Error('network'))\n expect(await service.checkAppStore()).toBeNull()\n })\n\n it('should return null when LOCAL manifest file does not exist', async () => {\n setRepo(APP_STORE_REPOSITORY.LOCAL)\n ;(isPathExists as jest.Mock).mockResolvedValue(false)\n expect(await service.checkAppStore()).toBeNull()\n })\n\n it('should return LOCAL manifest with rewritten URLs when file is valid', async () => {\n setRepo(APP_STORE_REPOSITORY.LOCAL)\n ;(isPathExists as jest.Mock).mockResolvedValue(true)\n const raw = {\n platform: {\n win: [{ package: 'desktop-win.exe' }, { package: 'cli-win.zip' }],\n linux: [{ package: 'desktop-linux.AppImage' }]\n }\n }\n ;(fs.readFile as jest.Mock).mockResolvedValue(JSON.stringify(raw))\n\n const manifest: any = await service.checkAppStore()\n expect(manifest.repository).toBe(APP_STORE_REPOSITORY.LOCAL)\n expect(manifest.platform.win[0].url.startsWith(APP_STORE_DIRNAME)).toBe(true)\n expect(manifest.platform.win[0].url.endsWith('desktop-win.exe')).toBe(true)\n expect(manifest.platform.win[1].url.startsWith(APP_STORE_DIRNAME)).toBe(true)\n expect(manifest.platform.win[1].url.endsWith('cli-win.zip')).toBe(true)\n expect(manifest.platform.linux[0].url.startsWith(APP_STORE_DIRNAME)).toBe(true)\n expect(manifest.platform.linux[0].url.endsWith('desktop-linux.AppImage')).toBe(true)\n })\n\n it('should return null when LOCAL manifest cannot be parsed', async () => {\n setRepo(APP_STORE_REPOSITORY.LOCAL)\n ;(isPathExists as jest.Mock).mockResolvedValue(true)\n ;(fs.readFile as jest.Mock).mockRejectedValue(new Error('fs error'))\n expect(await service.checkAppStore()).toBeNull()\n })\n\n it('should rewrite desktop packages under desktop/os when package starts with \"desktop\"', async () => {\n setRepo(APP_STORE_REPOSITORY.LOCAL)\n ;(isPathExists as jest.Mock).mockResolvedValue(true)\n const raw = {\n platform: {\n win: [{ package: `${SYNC_CLIENT_TYPE.DESKTOP}-win.exe` }],\n mac: [{ package: `${SYNC_CLIENT_TYPE.DESKTOP}-mac.dmg` }],\n linux: [{ package: `${SYNC_CLIENT_TYPE.DESKTOP}-linux.AppImage` }]\n }\n }\n ;(fs.readFile as jest.Mock).mockResolvedValue(JSON.stringify(raw))\n\n const manifest: any = await service.checkAppStore()\n expect(manifest).toBeTruthy()\n expect(manifest.repository).toBe(APP_STORE_REPOSITORY.LOCAL)\n expect(manifest.platform.win[0].url).toBe(`${APP_STORE_DIRNAME}/${SYNC_CLIENT_TYPE.DESKTOP}/win/${SYNC_CLIENT_TYPE.DESKTOP}-win.exe`)\n expect(manifest.platform.mac[0].url).toBe(`${APP_STORE_DIRNAME}/${SYNC_CLIENT_TYPE.DESKTOP}/mac/${SYNC_CLIENT_TYPE.DESKTOP}-mac.dmg`)\n expect(manifest.platform.linux[0].url).toBe(`${APP_STORE_DIRNAME}/${SYNC_CLIENT_TYPE.DESKTOP}/linux/${SYNC_CLIENT_TYPE.DESKTOP}-linux.AppImage`)\n })\n })\n})\n"],"names":["mockHavePermission","jest","mock","UserModel","fn","mockImplementation","props","havePermission","actual","requireActual","convertHumanTimeToSeconds","currentTimeStamp","readFile","isPathExists","describe","SyncClientsManager","name","service","http","authManager","authProvider","usersManager","syncQueries","cacheMock","setRepo","repo","configuration","applications","appStore","repository","makeClient","overrides","id","ownerId","tokenExpiration","enabled","info","type","makeUser","isActive","login","email","firstName","lastName","role","permissions","beforeAll","axiosRef","setCookies","getTokens","validateUser","fromUserId","updateAccesses","getOrCreateClient","deleteClient","getClient","updateClientInfo","renewClientTokenAndExpiration","getClients","genSlugKey","mockReturnValue","get","mockResolvedValue","undefined","set","del","module","Test","createTestingModule","providers","provide","Cache","useValue","HttpService","SyncQueries","UsersManager","AuthManager","AuthProvider","AuthProvider2FA","compile","useLogger","cache","beforeEach","restoreAllMocks","clearAllMocks","commonShared","commonFunctions","v","mockReset","fs","mockClear","APP_STORE_REPOSITORY","PUBLIC","it","expect","toBeDefined","baseDto","password","clientId","version","test","each","HttpStatus","UNAUTHORIZED","FORBIDDEN","_label","user","status","register","rejects","toMatchObject","r","toEqual","clientToken","toHaveBeenCalledWith","mockRejectedValue","Error","INTERNAL_SERVER_ERROR","unregister","resolves","toBeUndefined","ip","dto","token","authenticate","CLIENT_AUTH_TYPE","TOKEN","response","CLIENT_TOKEN_EXPIRED_ERROR","mockRejectedValueOnce","access_token","refresh_token","spyOn","reply","COOKIE","toHaveBeenCalledTimes","renewTokenAndExpiration","client_token_update","toBe","toBeInstanceOf","TypeError","fake","paths","owner","client","toBeTruthy","any","Number","crypto","BAD_REQUEST","data","platform","win","manifest","checkAppStore","toHaveBeenCalled","toBeNull","LOCAL","raw","package","linux","JSON","stringify","url","startsWith","APP_STORE_DIRNAME","endsWith","SYNC_CLIENT_TYPE","DESKTOP","mac"],"mappings":"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"}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
|
|
3
|
-
* This file is part of Sync-in | The open source file sync and share solution
|
|
4
|
-
* See the LICENSE file for licensing details
|
|
5
|
-
*/ "use strict";
|
|
1
|
+
"use strict";
|
|
6
2
|
Object.defineProperty(exports, "__esModule", {
|
|
7
3
|
value: true
|
|
8
4
|
});
|
|
@@ -168,7 +164,10 @@ let SyncManager = class SyncManager {
|
|
|
168
164
|
}
|
|
169
165
|
res.raw.write(_sync.SYNC_DIFF_DONE);
|
|
170
166
|
} catch (e) {
|
|
171
|
-
this.logger.error(
|
|
167
|
+
this.logger.error({
|
|
168
|
+
tag: this.diff.name,
|
|
169
|
+
msg: `${e.message}`
|
|
170
|
+
});
|
|
172
171
|
res.raw.write(`${e.message}\n`);
|
|
173
172
|
res.status(_common.HttpStatus.INTERNAL_SERVER_ERROR);
|
|
174
173
|
}
|
|
@@ -188,7 +187,10 @@ let SyncManager = class SyncManager {
|
|
|
188
187
|
}))){
|
|
189
188
|
const realPath = _nodepath.default.join(entry.parentPath, entry.name);
|
|
190
189
|
if (!entry.isDirectory() && !entry.isFile()) {
|
|
191
|
-
this.logger.log(
|
|
190
|
+
this.logger.log({
|
|
191
|
+
tag: this.parseFiles.name,
|
|
192
|
+
msg: `ignore special file: ${realPath}`
|
|
193
|
+
});
|
|
192
194
|
continue;
|
|
193
195
|
}
|
|
194
196
|
if (entry.isDirectory()) {
|
|
@@ -205,7 +207,10 @@ let SyncManager = class SyncManager {
|
|
|
205
207
|
}
|
|
206
208
|
}
|
|
207
209
|
} catch (e) {
|
|
208
|
-
this.logger.error(
|
|
210
|
+
this.logger.error({
|
|
211
|
+
tag: this.parseFiles.name,
|
|
212
|
+
msg: `unable to parse directory : ${dir} : ${e}`
|
|
213
|
+
});
|
|
209
214
|
throw new Error('Unable to parse path');
|
|
210
215
|
}
|
|
211
216
|
}
|
|
@@ -219,7 +224,10 @@ let SyncManager = class SyncManager {
|
|
|
219
224
|
try {
|
|
220
225
|
stats = await _promises.default.stat(realPath);
|
|
221
226
|
} catch (e) {
|
|
222
|
-
this.logger.warn(
|
|
227
|
+
this.logger.warn({
|
|
228
|
+
tag: this.analyzeFile.name,
|
|
229
|
+
msg: `unable to get file stats : ${realPath} : ${e}`
|
|
230
|
+
});
|
|
223
231
|
return {
|
|
224
232
|
[filePath]: [
|
|
225
233
|
_sync.F_SPECIAL_STAT.ERROR,
|
|
@@ -228,7 +236,10 @@ let SyncManager = class SyncManager {
|
|
|
228
236
|
};
|
|
229
237
|
}
|
|
230
238
|
if (ctx.syncDiff.pathFilters && ctx.syncDiff.pathFilters.test(filePath)) {
|
|
231
|
-
this.logger.verbose(
|
|
239
|
+
this.logger.verbose({
|
|
240
|
+
tag: this.analyzeFile.name,
|
|
241
|
+
msg: `ignore filtered file : ${realPath}`
|
|
242
|
+
});
|
|
232
243
|
return {
|
|
233
244
|
[filePath]: [
|
|
234
245
|
_sync.F_SPECIAL_STAT.FILTERED,
|
|
@@ -247,7 +258,10 @@ let SyncManager = class SyncManager {
|
|
|
247
258
|
try {
|
|
248
259
|
await this.checkSumFile(ctx, filePath, realPath, fileStats);
|
|
249
260
|
} catch (e) {
|
|
250
|
-
this.logger.error(
|
|
261
|
+
this.logger.error({
|
|
262
|
+
tag: this.analyzeFile.name,
|
|
263
|
+
msg: `file error : ${realPath} - ${e}`
|
|
264
|
+
});
|
|
251
265
|
return {
|
|
252
266
|
[filePath]: [
|
|
253
267
|
_sync.F_SPECIAL_STAT.ERROR,
|
|
@@ -271,7 +285,10 @@ let SyncManager = class SyncManager {
|
|
|
271
285
|
fileStats[_sync.F_STAT.CHECKSUM] = await (0, _files.checksumFile)(realPath, _sync.SYNC_CHECKSUM_ALG);
|
|
272
286
|
}
|
|
273
287
|
handleError(space, action, e, dstSpace) {
|
|
274
|
-
this.logger.error(
|
|
288
|
+
this.logger.error({
|
|
289
|
+
tag: this.handleError.name,
|
|
290
|
+
msg: `unable to ${action} ${space.url}${dstSpace?.url ? ` -> ${dstSpace.url}` : ''} : ${e}`
|
|
291
|
+
});
|
|
275
292
|
// Remove the last part to avoid exposing the path
|
|
276
293
|
const errorMsg = e.message.split(',')[0];
|
|
277
294
|
if (e instanceof _filelockerror.LockConflict) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/sync/services/sync-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 { HttpException, HttpStatus, Injectable, Logger, StreamableFile } from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport fs from 'fs/promises'\nimport { Dirent, Stats } from 'node:fs'\nimport path from 'node:path'\nimport { regExpPathPattern } from '../../../common/functions'\nimport { FILE_OPERATION } from '../../files/constants/operations'\nimport { FileError } from '../../files/models/file-error'\nimport { LockConflict } from '../../files/models/file-lock-error'\nimport { FilesManager } from '../../files/services/files-manager.service'\nimport { checksumFile, isPathExists, isPathIsDir, removeFiles, touchFile } from '../../files/utils/files'\nimport { SendFile } from '../../files/utils/send-file'\nimport { ParseDiffContext } from '../../spaces/interfaces/space-diff.interface'\nimport { FastifySpaceRequest } from '../../spaces/interfaces/space-request.interface'\nimport { SpaceEnv } from '../../spaces/models/space-env.model'\nimport { SpacesManager } from '../../spaces/services/spaces-manager.service'\nimport { UserModel } from '../../users/models/user.model'\nimport { F_SPECIAL_STAT, F_STAT, SYNC_CHECKSUM_ALG, SYNC_DIFF_DONE } from '../constants/sync'\nimport { SyncCopyMoveDto, SyncDiffDto, SyncMakeDto, SyncPropsDto } from '../dtos/sync-operations.dto'\nimport { SyncUploadDto } from '../dtos/sync-upload.dto'\nimport { SyncFileSpecialStats, SyncFileStats } from '../interfaces/sync-diff.interface'\nimport { SyncPathSettings } from '../interfaces/sync-path.interface'\nimport { getTmpFilePath } from '../utils/functions'\nimport { SYNC_PATH_TO_SPACE_SEGMENTS } from '../utils/routes'\nimport { SyncQueries } from './sync-queries.service'\n\n@Injectable()\nexport class SyncManager {\n private readonly logger = new Logger(SyncManager.name)\n\n constructor(\n private readonly spacesManager: SpacesManager,\n private readonly filesManager: FilesManager,\n private readonly syncQueries: SyncQueries\n ) {}\n\n async download(req: FastifySpaceRequest, res: FastifyReply): Promise<StreamableFile> {\n const sendFile: SendFile = this.filesManager.sendFileFromSpace(req.space)\n try {\n await sendFile.checks()\n return await sendFile.stream(req, res)\n } catch (e) {\n this.handleError(req.space, req.method, e)\n }\n }\n\n async upload(req: FastifySpaceRequest, syncUploadDto: SyncUploadDto): Promise<{ ino: number }> {\n const tmpPath = getTmpFilePath(req.space.realPath)\n try {\n if (syncUploadDto.checksum) {\n const checksum = await this.filesManager.saveStream(req.user, req.space, req, { tmpPath: tmpPath, checksumAlg: SYNC_CHECKSUM_ALG })\n if (checksum !== syncUploadDto.checksum) {\n await removeFiles(tmpPath)\n this.handleError(req.space, req.method, new FileError(HttpStatus.BAD_REQUEST, 'checksums are not identical'))\n }\n } else {\n await this.filesManager.saveStream(req.user, req.space, req, { tmpPath: tmpPath })\n }\n const fileStats = await fs.stat(req.space.realPath)\n if (fileStats.size !== syncUploadDto.size) {\n await removeFiles(tmpPath)\n this.handleError(\n req.space,\n req.method,\n new FileError(HttpStatus.BAD_REQUEST, `sizes are not identical : ${fileStats.size} != ${syncUploadDto.size}`)\n )\n }\n // update mtime\n await touchFile(req.space.realPath, syncUploadDto.mtime)\n // return inode number\n return { ino: fileStats.ino }\n } catch (e) {\n this.handleError(req.space, req.method, e)\n }\n }\n\n async delete(req: FastifySpaceRequest): Promise<void> {\n try {\n return await this.filesManager.delete(req.user, req.space)\n } catch (e) {\n this.handleError(req.space, FILE_OPERATION.DELETE, e)\n }\n }\n\n async props(req: FastifySpaceRequest, syncPropsDto: SyncPropsDto): Promise<void> {\n try {\n await this.filesManager.touch(req.user, req.space, syncPropsDto.mtime, false)\n } catch (e) {\n this.handleError(req.space, FILE_OPERATION.TOUCH, e)\n }\n }\n\n async make(req: FastifySpaceRequest, syncMakeDto: SyncMakeDto): Promise<{ ino: number }> {\n try {\n if (syncMakeDto.type === 'directory') {\n await this.filesManager.mkDir(req.user, req.space, true)\n } else {\n await this.filesManager.mkFile(req.user, req.space, true)\n }\n await touchFile(req.space.realPath, syncMakeDto.mtime)\n return { ino: (await fs.stat(req.space.realPath)).ino }\n } catch (e) {\n this.handleError(req.space, `${FILE_OPERATION.MAKE} ${syncMakeDto.type}`, e)\n }\n }\n\n async copyMove(req: FastifySpaceRequest, syncCopyMoveDto: SyncCopyMoveDto, isMove: true): Promise<void>\n async copyMove(req: FastifySpaceRequest, syncCopyMoveDto: SyncCopyMoveDto, isMove: false): Promise<{ ino: number; mtime: number }>\n async copyMove(req: FastifySpaceRequest, syncCopyMoveDto: SyncCopyMoveDto, isMove: boolean): Promise<void | { ino: number; mtime: number }> {\n const dstSpace: SpaceEnv = await this.spacesManager.spaceEnv(req.user, SYNC_PATH_TO_SPACE_SEGMENTS(syncCopyMoveDto.destination))\n try {\n await this.filesManager.copyMove(req.user, req.space, dstSpace, isMove, true, true)\n if (!isMove) {\n if (syncCopyMoveDto.mtime) {\n // update mtime\n await touchFile(dstSpace.realPath, syncCopyMoveDto.mtime)\n }\n // return inode & mtime\n const stats = await fs.stat(dstSpace.realPath)\n return { ino: stats.ino, mtime: Math.floor(stats.mtime.getTime() / 1000) }\n }\n } catch (e) {\n this.handleError(req.space, isMove ? FILE_OPERATION.MOVE : FILE_OPERATION.COPY, e, dstSpace)\n }\n }\n\n async diff(user: UserModel, pathId: number, syncDiff: SyncDiffDto, res: FastifyReply): Promise<void> {\n if (!user.clientId) {\n throw new HttpException('Client id is missing', HttpStatus.BAD_REQUEST)\n }\n const syncPathSettings: SyncPathSettings = await this.syncQueries.getPathSettings(user.clientId, pathId)\n if (!syncPathSettings) {\n throw new HttpException('Path not found', HttpStatus.NOT_FOUND)\n }\n let space: SpaceEnv\n try {\n space = await this.spacesManager.spaceEnv(user, SYNC_PATH_TO_SPACE_SEGMENTS(syncPathSettings.remotePath))\n } catch (e) {\n throw new HttpException(e.message, HttpStatus.BAD_REQUEST)\n }\n if (!space) {\n throw new HttpException('Space not found', HttpStatus.NOT_FOUND)\n }\n if (space.quotaIsExceeded) {\n throw new HttpException('Storage quota exceeded', HttpStatus.INSUFFICIENT_STORAGE)\n }\n if (!(await isPathExists(space.realPath))) {\n throw new HttpException(`Remote path not found : ${syncPathSettings.remotePath}`, HttpStatus.NOT_FOUND)\n }\n if (!(await isPathIsDir(space.realPath))) {\n throw new HttpException('Remote path must be a directory', HttpStatus.BAD_REQUEST)\n }\n // start\n res.raw.writeHead(200, {\n 'Content-Type': 'text/plain; charset=utf-8',\n 'Transfer-Encoding': 'chunked'\n })\n try {\n for await (const f of this.parseSyncPath(space, syncDiff)) {\n res.raw.write(`${JSON.stringify(f)}\\n`)\n }\n res.raw.write(SYNC_DIFF_DONE)\n } catch (e) {\n this.logger.error(`${this.diff.name} : ${e.message}`)\n res.raw.write(`${e.message}\\n`)\n res.status(HttpStatus.INTERNAL_SERVER_ERROR)\n }\n res.raw.end()\n }\n\n private async *parseSyncPath(space: SpaceEnv, syncDiff: SyncDiffDto): AsyncGenerator<Record<string, SyncFileStats | SyncFileSpecialStats>> {\n const context: ParseDiffContext = {\n regexBasePath: regExpPathPattern(space.realPath),\n syncDiff: syncDiff\n }\n yield* this.parseFiles(space.realPath, context)\n }\n\n private async *parseFiles(dir: string, ctx: ParseDiffContext): AsyncGenerator<Record<string, SyncFileStats | SyncFileSpecialStats>> {\n try {\n for (const entry of await fs.readdir(dir, { withFileTypes: true })) {\n const realPath = path.join(entry.parentPath, entry.name)\n if (!entry.isDirectory() && !entry.isFile()) {\n this.logger.log(`${this.parseFiles.name} - ignore special file: ${realPath}`)\n continue\n }\n if (entry.isDirectory()) {\n const dirStats: Record<string, SyncFileStats | SyncFileSpecialStats> = await this.analyzeFile(entry, ctx)\n if (dirStats !== null) {\n yield dirStats\n }\n yield* this.parseFiles(realPath, ctx)\n } else {\n const fileStats: Record<string, SyncFileStats | SyncFileSpecialStats> = await this.analyzeFile(entry, ctx)\n if (fileStats !== null) {\n yield fileStats\n }\n }\n }\n } catch (e) {\n this.logger.error(`${this.parseFiles.name} - unable to parse directory : ${dir} : ${e}`)\n throw new Error('Unable to parse path')\n }\n }\n\n private async analyzeFile(entry: Dirent, ctx: ParseDiffContext): Promise<Record<string, SyncFileStats | SyncFileSpecialStats>> {\n if (ctx.syncDiff.defaultFilters.has(entry.name)) {\n return null\n }\n\n const realPath = path.join(entry.parentPath, entry.name)\n const filePath = realPath.replace(ctx.regexBasePath, '')\n\n let stats: Stats\n try {\n stats = await fs.stat(realPath)\n } catch (e) {\n this.logger.warn(`${this.analyzeFile.name} - unable to get file stats : ${realPath} : ${e}`)\n return { [filePath]: [F_SPECIAL_STAT.ERROR, e.toString()] }\n }\n\n if (ctx.syncDiff.pathFilters && ctx.syncDiff.pathFilters.test(filePath)) {\n this.logger.verbose(`${this.analyzeFile.name} - ignore filtered file : ${realPath}`)\n return { [filePath]: [F_SPECIAL_STAT.FILTERED, stats.isDirectory()] }\n }\n\n const fileStats: SyncFileStats = [\n stats.isDirectory(),\n stats.isDirectory() ? 0 : stats.size,\n Math.floor(stats.mtime.getTime() / 1000),\n stats.ino,\n null\n ]\n if (ctx.syncDiff.secureDiff && !fileStats[F_STAT.IS_DIR]) {\n try {\n await this.checkSumFile(ctx, filePath, realPath, fileStats)\n } catch (e) {\n this.logger.error(`${this.analyzeFile.name} - file error : ${realPath} - ${e}`)\n return { [filePath]: [F_SPECIAL_STAT.ERROR, e.toString()] }\n }\n }\n return { [filePath]: fileStats }\n }\n\n private async checkSumFile(ctx: ParseDiffContext, filePath: string, realPath: string, fileStats: SyncFileStats): Promise<void> {\n if (!ctx.syncDiff.firstSync && ctx.syncDiff.snapshot.has(filePath)) {\n const snapFileStats: SyncFileStats = ctx.syncDiff.snapshot.get(filePath)\n if (\n snapFileStats[F_STAT.CHECKSUM] &&\n snapFileStats[F_STAT.MTIME] == fileStats[F_STAT.MTIME] &&\n snapFileStats[F_STAT.SIZE] == fileStats[F_STAT.SIZE] &&\n snapFileStats[F_STAT.INO] == fileStats[F_STAT.INO]\n ) {\n fileStats[F_STAT.CHECKSUM] = snapFileStats[F_STAT.CHECKSUM]\n return\n }\n }\n fileStats[F_STAT.CHECKSUM] = await checksumFile(realPath, SYNC_CHECKSUM_ALG)\n }\n\n private handleError(space: SpaceEnv, action: string, e: any, dstSpace?: SpaceEnv) {\n this.logger.error(`unable to ${action} ${space.url}${dstSpace?.url ? ` -> ${dstSpace.url}` : ''} : ${e}`)\n // Remove the last part to avoid exposing the path\n const errorMsg = e.message.split(',')[0]\n if (e instanceof LockConflict) {\n throw new HttpException('The file is locked', HttpStatus.LOCKED)\n } else if (e instanceof FileError) {\n throw new HttpException(errorMsg, e.httpCode)\n }\n throw new HttpException(errorMsg, HttpStatus.INTERNAL_SERVER_ERROR)\n }\n}\n"],"names":["SyncManager","download","req","res","sendFile","filesManager","sendFileFromSpace","space","checks","stream","e","handleError","method","upload","syncUploadDto","tmpPath","getTmpFilePath","realPath","checksum","saveStream","user","checksumAlg","SYNC_CHECKSUM_ALG","removeFiles","FileError","HttpStatus","BAD_REQUEST","fileStats","fs","stat","size","touchFile","mtime","ino","delete","FILE_OPERATION","DELETE","props","syncPropsDto","touch","TOUCH","make","syncMakeDto","type","mkDir","mkFile","MAKE","copyMove","syncCopyMoveDto","isMove","dstSpace","spacesManager","spaceEnv","SYNC_PATH_TO_SPACE_SEGMENTS","destination","stats","Math","floor","getTime","MOVE","COPY","diff","pathId","syncDiff","clientId","HttpException","syncPathSettings","syncQueries","getPathSettings","NOT_FOUND","remotePath","message","quotaIsExceeded","INSUFFICIENT_STORAGE","isPathExists","isPathIsDir","raw","writeHead","f","parseSyncPath","write","JSON","stringify","SYNC_DIFF_DONE","logger","error","name","status","INTERNAL_SERVER_ERROR","end","context","regexBasePath","regExpPathPattern","parseFiles","dir","ctx","entry","readdir","withFileTypes","path","join","parentPath","isDirectory","isFile","log","dirStats","analyzeFile","Error","defaultFilters","has","filePath","replace","warn","F_SPECIAL_STAT","ERROR","toString","pathFilters","test","verbose","FILTERED","secureDiff","F_STAT","IS_DIR","checkSumFile","firstSync","snapshot","snapFileStats","get","CHECKSUM","MTIME","SIZE","INO","checksumFile","action","url","errorMsg","split","LockConflict","LOCKED","httpCode","Logger"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/sync/services/sync-manager.service.ts"],"sourcesContent":["import { HttpException, HttpStatus, Injectable, Logger, StreamableFile } from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport fs from 'fs/promises'\nimport { Dirent, Stats } from 'node:fs'\nimport path from 'node:path'\nimport { regExpPathPattern } from '../../../common/functions'\nimport { FILE_OPERATION } from '../../files/constants/operations'\nimport { FileError } from '../../files/models/file-error'\nimport { LockConflict } from '../../files/models/file-lock-error'\nimport { FilesManager } from '../../files/services/files-manager.service'\nimport { checksumFile, isPathExists, isPathIsDir, removeFiles, touchFile } from '../../files/utils/files'\nimport { SendFile } from '../../files/utils/send-file'\nimport { ParseDiffContext } from '../../spaces/interfaces/space-diff.interface'\nimport { FastifySpaceRequest } from '../../spaces/interfaces/space-request.interface'\nimport { SpaceEnv } from '../../spaces/models/space-env.model'\nimport { SpacesManager } from '../../spaces/services/spaces-manager.service'\nimport { UserModel } from '../../users/models/user.model'\nimport { F_SPECIAL_STAT, F_STAT, SYNC_CHECKSUM_ALG, SYNC_DIFF_DONE } from '../constants/sync'\nimport { SyncCopyMoveDto, SyncDiffDto, SyncMakeDto, SyncPropsDto } from '../dtos/sync-operations.dto'\nimport { SyncUploadDto } from '../dtos/sync-upload.dto'\nimport { SyncFileSpecialStats, SyncFileStats } from '../interfaces/sync-diff.interface'\nimport { SyncPathSettings } from '../interfaces/sync-path.interface'\nimport { getTmpFilePath } from '../utils/functions'\nimport { SYNC_PATH_TO_SPACE_SEGMENTS } from '../utils/routes'\nimport { SyncQueries } from './sync-queries.service'\n\n@Injectable()\nexport class SyncManager {\n private readonly logger = new Logger(SyncManager.name)\n\n constructor(\n private readonly spacesManager: SpacesManager,\n private readonly filesManager: FilesManager,\n private readonly syncQueries: SyncQueries\n ) {}\n\n async download(req: FastifySpaceRequest, res: FastifyReply): Promise<StreamableFile> {\n const sendFile: SendFile = this.filesManager.sendFileFromSpace(req.space)\n try {\n await sendFile.checks()\n return await sendFile.stream(req, res)\n } catch (e) {\n this.handleError(req.space, req.method, e)\n }\n }\n\n async upload(req: FastifySpaceRequest, syncUploadDto: SyncUploadDto): Promise<{ ino: number }> {\n const tmpPath = getTmpFilePath(req.space.realPath)\n try {\n if (syncUploadDto.checksum) {\n const checksum = await this.filesManager.saveStream(req.user, req.space, req, { tmpPath: tmpPath, checksumAlg: SYNC_CHECKSUM_ALG })\n if (checksum !== syncUploadDto.checksum) {\n await removeFiles(tmpPath)\n this.handleError(req.space, req.method, new FileError(HttpStatus.BAD_REQUEST, 'checksums are not identical'))\n }\n } else {\n await this.filesManager.saveStream(req.user, req.space, req, { tmpPath: tmpPath })\n }\n const fileStats = await fs.stat(req.space.realPath)\n if (fileStats.size !== syncUploadDto.size) {\n await removeFiles(tmpPath)\n this.handleError(\n req.space,\n req.method,\n new FileError(HttpStatus.BAD_REQUEST, `sizes are not identical : ${fileStats.size} != ${syncUploadDto.size}`)\n )\n }\n // update mtime\n await touchFile(req.space.realPath, syncUploadDto.mtime)\n // return inode number\n return { ino: fileStats.ino }\n } catch (e) {\n this.handleError(req.space, req.method, e)\n }\n }\n\n async delete(req: FastifySpaceRequest): Promise<void> {\n try {\n return await this.filesManager.delete(req.user, req.space)\n } catch (e) {\n this.handleError(req.space, FILE_OPERATION.DELETE, e)\n }\n }\n\n async props(req: FastifySpaceRequest, syncPropsDto: SyncPropsDto): Promise<void> {\n try {\n await this.filesManager.touch(req.user, req.space, syncPropsDto.mtime, false)\n } catch (e) {\n this.handleError(req.space, FILE_OPERATION.TOUCH, e)\n }\n }\n\n async make(req: FastifySpaceRequest, syncMakeDto: SyncMakeDto): Promise<{ ino: number }> {\n try {\n if (syncMakeDto.type === 'directory') {\n await this.filesManager.mkDir(req.user, req.space, true)\n } else {\n await this.filesManager.mkFile(req.user, req.space, true)\n }\n await touchFile(req.space.realPath, syncMakeDto.mtime)\n return { ino: (await fs.stat(req.space.realPath)).ino }\n } catch (e) {\n this.handleError(req.space, `${FILE_OPERATION.MAKE} ${syncMakeDto.type}`, e)\n }\n }\n\n async copyMove(req: FastifySpaceRequest, syncCopyMoveDto: SyncCopyMoveDto, isMove: true): Promise<void>\n async copyMove(req: FastifySpaceRequest, syncCopyMoveDto: SyncCopyMoveDto, isMove: false): Promise<{ ino: number; mtime: number }>\n async copyMove(req: FastifySpaceRequest, syncCopyMoveDto: SyncCopyMoveDto, isMove: boolean): Promise<void | { ino: number; mtime: number }> {\n const dstSpace: SpaceEnv = await this.spacesManager.spaceEnv(req.user, SYNC_PATH_TO_SPACE_SEGMENTS(syncCopyMoveDto.destination))\n try {\n await this.filesManager.copyMove(req.user, req.space, dstSpace, isMove, true, true)\n if (!isMove) {\n if (syncCopyMoveDto.mtime) {\n // update mtime\n await touchFile(dstSpace.realPath, syncCopyMoveDto.mtime)\n }\n // return inode & mtime\n const stats = await fs.stat(dstSpace.realPath)\n return { ino: stats.ino, mtime: Math.floor(stats.mtime.getTime() / 1000) }\n }\n } catch (e) {\n this.handleError(req.space, isMove ? FILE_OPERATION.MOVE : FILE_OPERATION.COPY, e, dstSpace)\n }\n }\n\n async diff(user: UserModel, pathId: number, syncDiff: SyncDiffDto, res: FastifyReply): Promise<void> {\n if (!user.clientId) {\n throw new HttpException('Client id is missing', HttpStatus.BAD_REQUEST)\n }\n const syncPathSettings: SyncPathSettings = await this.syncQueries.getPathSettings(user.clientId, pathId)\n if (!syncPathSettings) {\n throw new HttpException('Path not found', HttpStatus.NOT_FOUND)\n }\n let space: SpaceEnv\n try {\n space = await this.spacesManager.spaceEnv(user, SYNC_PATH_TO_SPACE_SEGMENTS(syncPathSettings.remotePath))\n } catch (e) {\n throw new HttpException(e.message, HttpStatus.BAD_REQUEST)\n }\n if (!space) {\n throw new HttpException('Space not found', HttpStatus.NOT_FOUND)\n }\n if (space.quotaIsExceeded) {\n throw new HttpException('Storage quota exceeded', HttpStatus.INSUFFICIENT_STORAGE)\n }\n if (!(await isPathExists(space.realPath))) {\n throw new HttpException(`Remote path not found : ${syncPathSettings.remotePath}`, HttpStatus.NOT_FOUND)\n }\n if (!(await isPathIsDir(space.realPath))) {\n throw new HttpException('Remote path must be a directory', HttpStatus.BAD_REQUEST)\n }\n // start\n res.raw.writeHead(200, {\n 'Content-Type': 'text/plain; charset=utf-8',\n 'Transfer-Encoding': 'chunked'\n })\n try {\n for await (const f of this.parseSyncPath(space, syncDiff)) {\n res.raw.write(`${JSON.stringify(f)}\\n`)\n }\n res.raw.write(SYNC_DIFF_DONE)\n } catch (e) {\n this.logger.error({ tag: this.diff.name, msg: `${e.message}` })\n res.raw.write(`${e.message}\\n`)\n res.status(HttpStatus.INTERNAL_SERVER_ERROR)\n }\n res.raw.end()\n }\n\n private async *parseSyncPath(space: SpaceEnv, syncDiff: SyncDiffDto): AsyncGenerator<Record<string, SyncFileStats | SyncFileSpecialStats>> {\n const context: ParseDiffContext = {\n regexBasePath: regExpPathPattern(space.realPath),\n syncDiff: syncDiff\n }\n yield* this.parseFiles(space.realPath, context)\n }\n\n private async *parseFiles(dir: string, ctx: ParseDiffContext): AsyncGenerator<Record<string, SyncFileStats | SyncFileSpecialStats>> {\n try {\n for (const entry of await fs.readdir(dir, { withFileTypes: true })) {\n const realPath = path.join(entry.parentPath, entry.name)\n if (!entry.isDirectory() && !entry.isFile()) {\n this.logger.log({ tag: this.parseFiles.name, msg: `ignore special file: ${realPath}` })\n continue\n }\n if (entry.isDirectory()) {\n const dirStats: Record<string, SyncFileStats | SyncFileSpecialStats> = await this.analyzeFile(entry, ctx)\n if (dirStats !== null) {\n yield dirStats\n }\n yield* this.parseFiles(realPath, ctx)\n } else {\n const fileStats: Record<string, SyncFileStats | SyncFileSpecialStats> = await this.analyzeFile(entry, ctx)\n if (fileStats !== null) {\n yield fileStats\n }\n }\n }\n } catch (e) {\n this.logger.error({ tag: this.parseFiles.name, msg: `unable to parse directory : ${dir} : ${e}` })\n throw new Error('Unable to parse path')\n }\n }\n\n private async analyzeFile(entry: Dirent, ctx: ParseDiffContext): Promise<Record<string, SyncFileStats | SyncFileSpecialStats>> {\n if (ctx.syncDiff.defaultFilters.has(entry.name)) {\n return null\n }\n\n const realPath = path.join(entry.parentPath, entry.name)\n const filePath = realPath.replace(ctx.regexBasePath, '')\n\n let stats: Stats\n try {\n stats = await fs.stat(realPath)\n } catch (e) {\n this.logger.warn({ tag: this.analyzeFile.name, msg: `unable to get file stats : ${realPath} : ${e}` })\n return { [filePath]: [F_SPECIAL_STAT.ERROR, e.toString()] }\n }\n\n if (ctx.syncDiff.pathFilters && ctx.syncDiff.pathFilters.test(filePath)) {\n this.logger.verbose({ tag: this.analyzeFile.name, msg: `ignore filtered file : ${realPath}` })\n return { [filePath]: [F_SPECIAL_STAT.FILTERED, stats.isDirectory()] }\n }\n\n const fileStats: SyncFileStats = [\n stats.isDirectory(),\n stats.isDirectory() ? 0 : stats.size,\n Math.floor(stats.mtime.getTime() / 1000),\n stats.ino,\n null\n ]\n if (ctx.syncDiff.secureDiff && !fileStats[F_STAT.IS_DIR]) {\n try {\n await this.checkSumFile(ctx, filePath, realPath, fileStats)\n } catch (e) {\n this.logger.error({ tag: this.analyzeFile.name, msg: `file error : ${realPath} - ${e}` })\n return { [filePath]: [F_SPECIAL_STAT.ERROR, e.toString()] }\n }\n }\n return { [filePath]: fileStats }\n }\n\n private async checkSumFile(ctx: ParseDiffContext, filePath: string, realPath: string, fileStats: SyncFileStats): Promise<void> {\n if (!ctx.syncDiff.firstSync && ctx.syncDiff.snapshot.has(filePath)) {\n const snapFileStats: SyncFileStats = ctx.syncDiff.snapshot.get(filePath)\n if (\n snapFileStats[F_STAT.CHECKSUM] &&\n snapFileStats[F_STAT.MTIME] == fileStats[F_STAT.MTIME] &&\n snapFileStats[F_STAT.SIZE] == fileStats[F_STAT.SIZE] &&\n snapFileStats[F_STAT.INO] == fileStats[F_STAT.INO]\n ) {\n fileStats[F_STAT.CHECKSUM] = snapFileStats[F_STAT.CHECKSUM]\n return\n }\n }\n fileStats[F_STAT.CHECKSUM] = await checksumFile(realPath, SYNC_CHECKSUM_ALG)\n }\n\n private handleError(space: SpaceEnv, action: string, e: any, dstSpace?: SpaceEnv) {\n this.logger.error({ tag: this.handleError.name, msg: `unable to ${action} ${space.url}${dstSpace?.url ? ` -> ${dstSpace.url}` : ''} : ${e}` })\n // Remove the last part to avoid exposing the path\n const errorMsg = e.message.split(',')[0]\n if (e instanceof LockConflict) {\n throw new HttpException('The file is locked', HttpStatus.LOCKED)\n } else if (e instanceof FileError) {\n throw new HttpException(errorMsg, e.httpCode)\n }\n throw new HttpException(errorMsg, HttpStatus.INTERNAL_SERVER_ERROR)\n }\n}\n"],"names":["SyncManager","download","req","res","sendFile","filesManager","sendFileFromSpace","space","checks","stream","e","handleError","method","upload","syncUploadDto","tmpPath","getTmpFilePath","realPath","checksum","saveStream","user","checksumAlg","SYNC_CHECKSUM_ALG","removeFiles","FileError","HttpStatus","BAD_REQUEST","fileStats","fs","stat","size","touchFile","mtime","ino","delete","FILE_OPERATION","DELETE","props","syncPropsDto","touch","TOUCH","make","syncMakeDto","type","mkDir","mkFile","MAKE","copyMove","syncCopyMoveDto","isMove","dstSpace","spacesManager","spaceEnv","SYNC_PATH_TO_SPACE_SEGMENTS","destination","stats","Math","floor","getTime","MOVE","COPY","diff","pathId","syncDiff","clientId","HttpException","syncPathSettings","syncQueries","getPathSettings","NOT_FOUND","remotePath","message","quotaIsExceeded","INSUFFICIENT_STORAGE","isPathExists","isPathIsDir","raw","writeHead","f","parseSyncPath","write","JSON","stringify","SYNC_DIFF_DONE","logger","error","tag","name","msg","status","INTERNAL_SERVER_ERROR","end","context","regexBasePath","regExpPathPattern","parseFiles","dir","ctx","entry","readdir","withFileTypes","path","join","parentPath","isDirectory","isFile","log","dirStats","analyzeFile","Error","defaultFilters","has","filePath","replace","warn","F_SPECIAL_STAT","ERROR","toString","pathFilters","test","verbose","FILTERED","secureDiff","F_STAT","IS_DIR","checkSumFile","firstSync","snapshot","snapFileStats","get","CHECKSUM","MTIME","SIZE","INO","checksumFile","action","url","errorMsg","split","LockConflict","LOCKED","httpCode","Logger"],"mappings":"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"}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
|
|
3
|
-
* This file is part of Sync-in | The open source file sync and share solution
|
|
4
|
-
* See the LICENSE file for licensing details
|
|
5
|
-
*/ "use strict";
|
|
1
|
+
"use strict";
|
|
6
2
|
Object.defineProperty(exports, "__esModule", {
|
|
7
3
|
value: true
|
|
8
4
|
});
|