@vitnode/core 1.2.0-canary.74 → 1.2.0-canary.75
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/config/next.config.ts +4 -0
- package/dist/scripts/plugin.d.ts.map +1 -1
- package/dist/scripts/prepare-database.d.ts.map +1 -1
- package/dist/scripts/scripts.js +10 -39
- package/dist/scripts/shared/file-utils.d.ts +1 -0
- package/dist/scripts/shared/file-utils.d.ts.map +1 -1
- package/dist/scripts/shared/file-utils.test.d.ts +2 -0
- package/dist/scripts/shared/file-utils.test.d.ts.map +1 -0
- package/dist/src/api/config.d.ts.map +1 -1
- package/dist/src/api/config.js +1 -1
- package/dist/src/api/lib/cache-client.d.ts +4 -0
- package/dist/src/api/lib/cache-client.d.ts.map +1 -0
- package/dist/src/api/lib/cache-client.js +1 -0
- package/dist/src/api/lib/cache.d.ts +32 -0
- package/dist/src/api/lib/cache.d.ts.map +1 -0
- package/dist/src/api/lib/cache.js +1 -0
- package/dist/src/api/lib/cache.test.d.ts +2 -0
- package/dist/src/api/lib/cache.test.d.ts.map +1 -0
- package/dist/src/api/lib/cache.test.js +1 -0
- package/dist/src/api/lib/check-staff-permission.d.ts +20 -0
- package/dist/src/api/lib/check-staff-permission.d.ts.map +1 -0
- package/dist/src/api/lib/check-staff-permission.js +1 -0
- package/dist/src/api/lib/module.d.ts +4 -1
- package/dist/src/api/lib/module.d.ts.map +1 -1
- package/dist/src/api/lib/module.js +1 -1
- package/dist/src/api/lib/permission-staff.d.ts +35 -0
- package/dist/src/api/lib/permission-staff.d.ts.map +1 -0
- package/dist/src/api/lib/permission-staff.js +1 -0
- package/dist/src/api/lib/plugin.d.ts +8 -3
- package/dist/src/api/lib/plugin.d.ts.map +1 -1
- package/dist/src/api/lib/plugin.js +1 -1
- package/dist/src/api/lib/queue.d.ts +14 -0
- package/dist/src/api/lib/queue.d.ts.map +1 -0
- package/dist/src/api/lib/queue.js +1 -0
- package/dist/src/api/lib/resolve-role-names.d.ts +7 -0
- package/dist/src/api/lib/resolve-role-names.d.ts.map +1 -0
- package/dist/src/api/lib/resolve-role-names.js +1 -0
- package/dist/src/api/lib/route.d.ts +7 -1
- package/dist/src/api/lib/route.d.ts.map +1 -1
- package/dist/src/api/lib/route.js +1 -1
- package/dist/src/api/lib/staff-permission.d.ts +4 -0
- package/dist/src/api/lib/staff-permission.d.ts.map +1 -0
- package/dist/src/api/lib/staff-permission.js +1 -0
- package/dist/src/api/middlewares/global.middleware.d.ts +18 -5
- package/dist/src/api/middlewares/global.middleware.d.ts.map +1 -1
- package/dist/src/api/middlewares/global.middleware.js +1 -1
- package/dist/src/api/middlewares/rate-limiter.middleware.d.ts +2 -1
- package/dist/src/api/middlewares/rate-limiter.middleware.d.ts.map +1 -1
- package/dist/src/api/middlewares/rate-limiter.middleware.js +1 -1
- package/dist/src/api/models/email.d.ts +11 -1
- package/dist/src/api/models/email.d.ts.map +1 -1
- package/dist/src/api/models/email.js +1 -1
- package/dist/src/api/models/email.test.d.ts +2 -0
- package/dist/src/api/models/email.test.d.ts.map +1 -0
- package/dist/src/api/models/email.test.js +1 -0
- package/dist/src/api/models/queue.d.ts +17 -0
- package/dist/src/api/models/queue.d.ts.map +1 -0
- package/dist/src/api/models/queue.js +1 -0
- package/dist/src/api/models/queue.test.d.ts +2 -0
- package/dist/src/api/models/queue.test.d.ts.map +1 -0
- package/dist/src/api/models/queue.test.js +1 -0
- package/dist/src/api/models/session-admin.d.ts.map +1 -1
- package/dist/src/api/models/session-admin.js +1 -1
- package/dist/src/api/models/session-cache.d.ts +8 -0
- package/dist/src/api/models/session-cache.d.ts.map +1 -0
- package/dist/src/api/models/session-cache.js +1 -0
- package/dist/src/api/models/session.d.ts.map +1 -1
- package/dist/src/api/models/session.js +1 -1
- package/dist/src/api/modules/admin/admin.module.d.ts +694 -8
- package/dist/src/api/modules/admin/admin.module.d.ts.map +1 -1
- package/dist/src/api/modules/admin/admin.module.js +1 -1
- package/dist/src/api/modules/admin/advanced/advanced.admin.module.d.ts +64 -2
- package/dist/src/api/modules/admin/advanced/advanced.admin.module.d.ts.map +1 -1
- package/dist/src/api/modules/admin/advanced/advanced.admin.module.js +1 -1
- package/dist/src/api/modules/admin/advanced/queue/queue.admin.module.d.ts +64 -0
- package/dist/src/api/modules/admin/advanced/queue/queue.admin.module.d.ts.map +1 -0
- package/dist/src/api/modules/admin/advanced/queue/queue.admin.module.js +1 -0
- package/dist/src/api/modules/admin/advanced/queue/routes/get.route.d.ts +65 -0
- package/dist/src/api/modules/admin/advanced/queue/routes/get.route.d.ts.map +1 -0
- package/dist/src/api/modules/admin/advanced/queue/routes/get.route.js +1 -0
- package/dist/src/api/modules/admin/debug/debug.admin.module.d.ts +122 -2
- package/dist/src/api/modules/admin/debug/debug.admin.module.d.ts.map +1 -1
- package/dist/src/api/modules/admin/debug/debug.admin.module.js +1 -1
- package/dist/src/api/modules/admin/debug/routes/integrations.route.d.ts +49 -0
- package/dist/src/api/modules/admin/debug/routes/integrations.route.d.ts.map +1 -0
- package/dist/src/api/modules/admin/debug/routes/integrations.route.js +1 -0
- package/dist/src/api/modules/admin/debug/routes/logs.route.d.ts +2 -2
- package/dist/src/api/modules/admin/debug/routes/logs.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/debug/routes/logs.route.js +1 -1
- package/dist/src/api/modules/admin/debug/routes/queue.route.d.ts +42 -0
- package/dist/src/api/modules/admin/debug/routes/queue.route.d.ts.map +1 -0
- package/dist/src/api/modules/admin/debug/routes/queue.route.js +1 -0
- package/dist/src/api/modules/admin/debug/routes/send-test-email.route.d.ts +43 -0
- package/dist/src/api/modules/admin/debug/routes/send-test-email.route.d.ts.map +1 -0
- package/dist/src/api/modules/admin/debug/routes/send-test-email.route.js +1 -0
- package/dist/src/api/modules/admin/routes/session.route.d.ts +8 -0
- package/dist/src/api/modules/admin/routes/session.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/routes/session.route.js +1 -1
- package/dist/src/api/modules/admin/staff/lib/resolve-staff-edges.d.ts +38 -0
- package/dist/src/api/modules/admin/staff/lib/resolve-staff-edges.d.ts.map +1 -0
- package/dist/src/api/modules/admin/staff/lib/resolve-staff-edges.js +1 -0
- package/dist/src/api/modules/admin/staff/lib/schema.d.ts +107 -0
- package/dist/src/api/modules/admin/staff/lib/schema.d.ts.map +1 -0
- package/dist/src/api/modules/admin/staff/lib/schema.js +1 -0
- package/dist/src/api/modules/admin/staff/routes/admins.route.d.ts +76 -0
- package/dist/src/api/modules/admin/staff/routes/admins.route.d.ts.map +1 -0
- package/dist/src/api/modules/admin/staff/routes/admins.route.js +1 -0
- package/dist/src/api/modules/admin/staff/routes/create.route.d.ts +52 -0
- package/dist/src/api/modules/admin/staff/routes/create.route.d.ts.map +1 -0
- package/dist/src/api/modules/admin/staff/routes/create.route.js +1 -0
- package/dist/src/api/modules/admin/staff/routes/delete.route.d.ts +36 -0
- package/dist/src/api/modules/admin/staff/routes/delete.route.d.ts.map +1 -0
- package/dist/src/api/modules/admin/staff/routes/delete.route.js +1 -0
- package/dist/src/api/modules/admin/staff/routes/moderators.route.d.ts +76 -0
- package/dist/src/api/modules/admin/staff/routes/moderators.route.d.ts.map +1 -0
- package/dist/src/api/modules/admin/staff/routes/moderators.route.js +1 -0
- package/dist/src/api/modules/admin/staff/routes/permission-catalog.route.d.ts +32 -0
- package/dist/src/api/modules/admin/staff/routes/permission-catalog.route.d.ts.map +1 -0
- package/dist/src/api/modules/admin/staff/routes/permission-catalog.route.js +1 -0
- package/dist/src/api/modules/admin/staff/routes/show-permissions.route.d.ts +75 -0
- package/dist/src/api/modules/admin/staff/routes/show-permissions.route.d.ts.map +1 -0
- package/dist/src/api/modules/admin/staff/routes/show-permissions.route.js +1 -0
- package/dist/src/api/modules/admin/staff/routes/update-permissions.route.d.ts +62 -0
- package/dist/src/api/modules/admin/staff/routes/update-permissions.route.d.ts.map +1 -0
- package/dist/src/api/modules/admin/staff/routes/update-permissions.route.js +1 -0
- package/dist/src/api/modules/admin/staff/staff.admin.module.d.ts +392 -0
- package/dist/src/api/modules/admin/staff/staff.admin.module.d.ts.map +1 -0
- package/dist/src/api/modules/admin/staff/staff.admin.module.js +1 -0
- package/dist/src/api/modules/admin/users/lib/assert-edit-user-permission.d.ts +4 -0
- package/dist/src/api/modules/admin/users/lib/assert-edit-user-permission.d.ts.map +1 -0
- package/dist/src/api/modules/admin/users/lib/assert-edit-user-permission.js +1 -0
- package/dist/src/api/modules/admin/users/routes/create.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/users/routes/create.route.js +1 -1
- package/dist/src/api/modules/admin/users/routes/list.route.d.ts +16 -0
- package/dist/src/api/modules/admin/users/routes/list.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/users/routes/list.route.js +1 -1
- package/dist/src/api/modules/admin/users/routes/show.route.d.ts +19 -2
- package/dist/src/api/modules/admin/users/routes/show.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/users/routes/show.route.js +1 -1
- package/dist/src/api/modules/admin/users/routes/update.route.d.ts +83 -0
- package/dist/src/api/modules/admin/users/routes/update.route.d.ts.map +1 -0
- package/dist/src/api/modules/admin/users/routes/update.route.js +1 -0
- package/dist/src/api/modules/admin/users/routes/verify-email.route.d.ts +2 -2
- package/dist/src/api/modules/admin/users/routes/verify-email.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/users/routes/verify-email.route.js +1 -1
- package/dist/src/api/modules/admin/users/users.admin.module.d.ts +110 -4
- package/dist/src/api/modules/admin/users/users.admin.module.d.ts.map +1 -1
- package/dist/src/api/modules/admin/users/users.admin.module.js +1 -1
- package/dist/src/api/modules/queue/cron/process-queue.cron.d.ts +2 -0
- package/dist/src/api/modules/queue/cron/process-queue.cron.d.ts.map +1 -0
- package/dist/src/api/modules/queue/cron/process-queue.cron.js +1 -0
- package/dist/src/api/modules/queue/helpers/process-queue-tasks.d.ts +4 -0
- package/dist/src/api/modules/queue/helpers/process-queue-tasks.d.ts.map +1 -0
- package/dist/src/api/modules/queue/helpers/process-queue-tasks.js +1 -0
- package/dist/src/api/modules/queue/queue.module.d.ts +2 -0
- package/dist/src/api/modules/queue/queue.module.d.ts.map +1 -0
- package/dist/src/api/modules/queue/queue.module.js +1 -0
- package/dist/src/api/modules/queue/tasks/send-email.task.d.ts +10 -0
- package/dist/src/api/modules/queue/tasks/send-email.task.d.ts.map +1 -0
- package/dist/src/api/modules/queue/tasks/send-email.task.js +1 -0
- package/dist/src/api/modules/users/routes/permissions.route.d.ts +26 -0
- package/dist/src/api/modules/users/routes/permissions.route.d.ts.map +1 -0
- package/dist/src/api/modules/users/routes/permissions.route.js +1 -0
- package/dist/src/api/modules/users/routes/reset-passowrd.route.js +1 -1
- package/dist/src/api/modules/users/routes/session.route.d.ts +1 -0
- package/dist/src/api/modules/users/routes/session.route.d.ts.map +1 -1
- package/dist/src/api/modules/users/routes/session.route.js +1 -1
- package/dist/src/api/modules/users/users.module.d.ts +24 -0
- package/dist/src/api/modules/users/users.module.d.ts.map +1 -1
- package/dist/src/api/modules/users/users.module.js +1 -1
- package/dist/src/api/plugin.d.ts.map +1 -1
- package/dist/src/api/plugin.js +1 -1
- package/dist/src/components/confirm-action/confirm-action-alert-dialog.d.ts +1 -1
- package/dist/src/components/confirm-action/confirm-action-alert-dialog.d.ts.map +1 -1
- package/dist/src/components/confirm-action/confirm-action-alert-dialog.js +1 -1
- package/dist/src/components/form/auto-form.js +1 -1
- package/dist/src/components/form/fields/array.d.ts.map +1 -1
- package/dist/src/components/form/fields/checkbox.js +1 -1
- package/dist/src/components/form/fields/select.d.ts.map +1 -1
- package/dist/src/components/form/fields/select.js +1 -1
- package/dist/src/components/form/fields/switch.js +1 -1
- package/dist/src/components/staff-permission/provider.d.ts +13 -0
- package/dist/src/components/staff-permission/provider.d.ts.map +1 -0
- package/dist/src/components/staff-permission/provider.js +1 -0
- package/dist/src/components/switchers/langs/language-switcher.d.ts.map +1 -1
- package/dist/src/components/switchers/langs/language-switcher.js +1 -1
- package/dist/src/components/switchers/themes/theme-switcher.js +1 -1
- package/dist/src/components/table/filters.d.ts.map +1 -1
- package/dist/src/components/table/filters.js +1 -1
- package/dist/src/components/table/pagination.d.ts.map +1 -1
- package/dist/src/components/table/pagination.js +1 -1
- package/dist/src/components/theme-provider.d.ts +26 -0
- package/dist/src/components/theme-provider.d.ts.map +1 -0
- package/dist/src/components/theme-provider.js +1 -0
- package/dist/src/components/tiptap/toolbar/actions/alignment-action.d.ts.map +1 -1
- package/dist/src/components/tiptap/toolbar/actions/alignment-action.js +1 -1
- package/dist/src/components/tiptap/toolbar/actions/headings-action.d.ts.map +1 -1
- package/dist/src/components/tiptap/toolbar/actions/headings-action.js +1 -1
- package/dist/src/components/tiptap/toolbar/actions/text-format-more/text-format-more.d.ts.map +1 -1
- package/dist/src/components/tiptap/toolbar/actions/text-format-more/text-format-more.js +1 -1
- package/dist/src/components/ui/accordion.d.ts +3 -3
- package/dist/src/components/ui/accordion.d.ts.map +1 -1
- package/dist/src/components/ui/accordion.js +1 -1
- package/dist/src/components/ui/alert-dialog.d.ts +10 -10
- package/dist/src/components/ui/alert-dialog.d.ts.map +1 -1
- package/dist/src/components/ui/alert-dialog.js +1 -1
- package/dist/src/components/ui/alert.d.ts +2 -2
- package/dist/src/components/ui/alert.d.ts.map +1 -1
- package/dist/src/components/ui/alert.js +1 -1
- package/dist/src/components/ui/aspect-ratio.d.ts +4 -2
- package/dist/src/components/ui/aspect-ratio.d.ts.map +1 -1
- package/dist/src/components/ui/aspect-ratio.js +1 -1
- package/dist/src/components/ui/avatar.d.ts +2 -2
- package/dist/src/components/ui/avatar.d.ts.map +1 -1
- package/dist/src/components/ui/avatar.js +1 -1
- package/dist/src/components/ui/badge.d.ts +3 -5
- package/dist/src/components/ui/badge.d.ts.map +1 -1
- package/dist/src/components/ui/badge.js +1 -1
- package/dist/src/components/ui/breadcrumb.d.ts +3 -4
- package/dist/src/components/ui/breadcrumb.d.ts.map +1 -1
- package/dist/src/components/ui/breadcrumb.js +1 -1
- package/dist/src/components/ui/button-client.d.ts +1 -1
- package/dist/src/components/ui/button-client.d.ts.map +1 -1
- package/dist/src/components/ui/button-client.js +1 -1
- package/dist/src/components/ui/button-group.d.ts +2 -3
- package/dist/src/components/ui/button-group.d.ts.map +1 -1
- package/dist/src/components/ui/button-group.js +1 -1
- package/dist/src/components/ui/button.d.ts +5 -5
- package/dist/src/components/ui/button.d.ts.map +1 -1
- package/dist/src/components/ui/button.js +1 -1
- package/dist/src/components/ui/card.d.ts +1 -1
- package/dist/src/components/ui/card.d.ts.map +1 -1
- package/dist/src/components/ui/card.js +1 -1
- package/dist/src/components/ui/carousel.d.ts +1 -1
- package/dist/src/components/ui/carousel.d.ts.map +1 -1
- package/dist/src/components/ui/carousel.js +1 -1
- package/dist/src/components/ui/chart.d.ts +1 -1
- package/dist/src/components/ui/chart.d.ts.map +1 -1
- package/dist/src/components/ui/chart.js +1 -1
- package/dist/src/components/ui/checkbox.d.ts +2 -2
- package/dist/src/components/ui/checkbox.d.ts.map +1 -1
- package/dist/src/components/ui/checkbox.js +1 -1
- package/dist/src/components/ui/collapsible.d.ts +5 -4
- package/dist/src/components/ui/collapsible.d.ts.map +1 -1
- package/dist/src/components/ui/collapsible.js +1 -1
- package/dist/src/components/ui/combobox.d.ts +1 -1
- package/dist/src/components/ui/combobox.d.ts.map +1 -1
- package/dist/src/components/ui/combobox.js +1 -1
- package/dist/src/components/ui/command.d.ts +1 -1
- package/dist/src/components/ui/command.d.ts.map +1 -1
- package/dist/src/components/ui/command.js +1 -1
- package/dist/src/components/ui/context-menu.d.ts +7 -9
- package/dist/src/components/ui/context-menu.d.ts.map +1 -1
- package/dist/src/components/ui/context-menu.js +1 -1
- package/dist/src/components/ui/dialog.d.ts +12 -9
- package/dist/src/components/ui/dialog.d.ts.map +1 -1
- package/dist/src/components/ui/dialog.js +1 -1
- package/dist/src/components/ui/direction.d.ts +5 -5
- package/dist/src/components/ui/direction.d.ts.map +1 -1
- package/dist/src/components/ui/direction.js +1 -1
- package/dist/src/components/ui/drawer.d.ts +1 -1
- package/dist/src/components/ui/drawer.d.ts.map +1 -1
- package/dist/src/components/ui/drawer.js +1 -1
- package/dist/src/components/ui/dropdown-menu.d.ts +16 -16
- package/dist/src/components/ui/dropdown-menu.d.ts.map +1 -1
- package/dist/src/components/ui/dropdown-menu.js +1 -1
- package/dist/src/components/ui/empty.d.ts.map +1 -1
- package/dist/src/components/ui/empty.js +1 -1
- package/dist/src/components/ui/field.js +1 -1
- package/dist/src/components/ui/form.d.ts +1 -2
- package/dist/src/components/ui/form.d.ts.map +1 -1
- package/dist/src/components/ui/form.js +1 -1
- package/dist/src/components/ui/hover-card.d.ts +5 -5
- package/dist/src/components/ui/hover-card.d.ts.map +1 -1
- package/dist/src/components/ui/hover-card.js +1 -1
- package/dist/src/components/ui/input-group.d.ts +4 -2
- package/dist/src/components/ui/input-group.d.ts.map +1 -1
- package/dist/src/components/ui/input-group.js +1 -1
- package/dist/src/components/ui/input-otp.d.ts +1 -1
- package/dist/src/components/ui/input-otp.d.ts.map +1 -1
- package/dist/src/components/ui/input-otp.js +1 -1
- package/dist/src/components/ui/input.d.ts +1 -1
- package/dist/src/components/ui/input.d.ts.map +1 -1
- package/dist/src/components/ui/input.js +1 -1
- package/dist/src/components/ui/item.d.ts +4 -5
- package/dist/src/components/ui/item.d.ts.map +1 -1
- package/dist/src/components/ui/item.js +1 -1
- package/dist/src/components/ui/label.d.ts +2 -3
- package/dist/src/components/ui/label.d.ts.map +1 -1
- package/dist/src/components/ui/label.js +1 -1
- package/dist/src/components/ui/menubar.d.ts +18 -17
- package/dist/src/components/ui/menubar.d.ts.map +1 -1
- package/dist/src/components/ui/menubar.js +1 -1
- package/dist/src/components/ui/native-select.d.ts +1 -1
- package/dist/src/components/ui/native-select.d.ts.map +1 -1
- package/dist/src/components/ui/native-select.js +1 -1
- package/dist/src/components/ui/navigation-menu.d.ts +9 -11
- package/dist/src/components/ui/navigation-menu.d.ts.map +1 -1
- package/dist/src/components/ui/navigation-menu.js +1 -1
- package/dist/src/components/ui/pagination.d.ts +1 -1
- package/dist/src/components/ui/pagination.d.ts.map +1 -1
- package/dist/src/components/ui/pagination.js +1 -1
- package/dist/src/components/ui/popover.d.ts +6 -7
- package/dist/src/components/ui/popover.d.ts.map +1 -1
- package/dist/src/components/ui/popover.js +1 -1
- package/dist/src/components/ui/progress.d.ts +2 -2
- package/dist/src/components/ui/progress.d.ts.map +1 -1
- package/dist/src/components/ui/progress.js +1 -1
- package/dist/src/components/ui/radio-group.d.ts +5 -4
- package/dist/src/components/ui/radio-group.d.ts.map +1 -1
- package/dist/src/components/ui/radio-group.js +1 -1
- package/dist/src/components/ui/scroll-area.d.ts +3 -3
- package/dist/src/components/ui/scroll-area.d.ts.map +1 -1
- package/dist/src/components/ui/scroll-area.js +1 -1
- package/dist/src/components/ui/select.d.ts +6 -6
- package/dist/src/components/ui/select.d.ts.map +1 -1
- package/dist/src/components/ui/select.js +1 -1
- package/dist/src/components/ui/separator.d.ts +3 -3
- package/dist/src/components/ui/separator.d.ts.map +1 -1
- package/dist/src/components/ui/separator.js +1 -1
- package/dist/src/components/ui/sheet.d.ts +8 -8
- package/dist/src/components/ui/sheet.d.ts.map +1 -1
- package/dist/src/components/ui/sheet.js +1 -1
- package/dist/src/components/ui/sidebar.d.ts +9 -15
- package/dist/src/components/ui/sidebar.d.ts.map +1 -1
- package/dist/src/components/ui/sidebar.js +1 -1
- package/dist/src/components/ui/slider.d.ts +2 -2
- package/dist/src/components/ui/slider.d.ts.map +1 -1
- package/dist/src/components/ui/slider.js +1 -1
- package/dist/src/components/ui/sonner.d.ts.map +1 -1
- package/dist/src/components/ui/sonner.js +1 -1
- package/dist/src/components/ui/spinner.d.ts.map +1 -1
- package/dist/src/components/ui/spinner.js +1 -1
- package/dist/src/components/ui/switch.d.ts +2 -2
- package/dist/src/components/ui/switch.d.ts.map +1 -1
- package/dist/src/components/ui/switch.js +1 -1
- package/dist/src/components/ui/table.d.ts +1 -1
- package/dist/src/components/ui/table.d.ts.map +1 -1
- package/dist/src/components/ui/table.js +1 -1
- package/dist/src/components/ui/tabs.d.ts +4 -4
- package/dist/src/components/ui/tabs.d.ts.map +1 -1
- package/dist/src/components/ui/tabs.js +1 -1
- package/dist/src/components/ui/textarea.d.ts +1 -1
- package/dist/src/components/ui/textarea.d.ts.map +1 -1
- package/dist/src/components/ui/textarea.js +1 -1
- package/dist/src/components/ui/toggle-group.d.ts +1 -1
- package/dist/src/components/ui/toggle-group.d.ts.map +1 -1
- package/dist/src/components/ui/toggle-group.js +1 -1
- package/dist/src/components/ui/tooltip.d.ts +1 -1
- package/dist/src/components/ui/tooltip.d.ts.map +1 -1
- package/dist/src/components/ui/tooltip.js +1 -1
- package/dist/src/config.js +1 -1
- package/dist/src/database/admins.d.ts +20 -0
- package/dist/src/database/admins.d.ts.map +1 -1
- package/dist/src/database/admins.js +1 -1
- package/dist/src/database/languages.d.ts.map +1 -1
- package/dist/src/database/languages.js +1 -1
- package/dist/src/database/logs.d.ts +1 -1
- package/dist/src/database/moderators.d.ts +20 -0
- package/dist/src/database/moderators.d.ts.map +1 -1
- package/dist/src/database/moderators.js +1 -1
- package/dist/src/database/queue.d.ts +273 -0
- package/dist/src/database/queue.d.ts.map +1 -0
- package/dist/src/database/queue.js +1 -0
- package/dist/src/database/users.d.ts +63 -0
- package/dist/src/database/users.d.ts.map +1 -1
- package/dist/src/database/users.js +1 -1
- package/dist/src/emails/default-template.d.ts +1 -1
- package/dist/src/emails/default-template.d.ts.map +1 -1
- package/dist/src/emails/default-template.js +1 -1
- package/dist/src/emails/reset-password.js +1 -1
- package/dist/src/emails/test-email.d.ts +26 -0
- package/dist/src/emails/test-email.d.ts.map +1 -0
- package/dist/src/emails/test-email.js +1 -0
- package/dist/src/emails/ui/button.d.ts +2 -2
- package/dist/src/emails/ui/button.d.ts.map +1 -1
- package/dist/src/emails/ui/button.js +1 -1
- package/dist/src/emails/ui/card.d.ts +1 -1
- package/dist/src/emails/ui/card.d.ts.map +1 -1
- package/dist/src/emails/ui/card.js +1 -1
- package/dist/src/hooks/use-captcha.d.ts.map +1 -1
- package/dist/src/hooks/use-captcha.js +1 -1
- package/dist/src/hooks/use-mobile.js +1 -1
- package/dist/src/lib/api/get-moderator-permissions-api.d.ts +4 -0
- package/dist/src/lib/api/get-moderator-permissions-api.d.ts.map +1 -0
- package/dist/src/lib/api/get-moderator-permissions-api.js +1 -0
- package/dist/src/lib/api/get-next-cron-run-date.js +1 -1
- package/dist/src/lib/api/get-queue-backoff-date.d.ts +2 -0
- package/dist/src/lib/api/get-queue-backoff-date.d.ts.map +1 -0
- package/dist/src/lib/api/get-queue-backoff-date.js +1 -0
- package/dist/src/lib/api/get-queue-backoff-date.test.d.ts +2 -0
- package/dist/src/lib/api/get-queue-backoff-date.test.d.ts.map +1 -0
- package/dist/src/lib/api/get-queue-backoff-date.test.js +1 -0
- package/dist/src/lib/api/get-session-admin-api.d.ts +12 -0
- package/dist/src/lib/api/get-session-admin-api.d.ts.map +1 -1
- package/dist/src/lib/api/get-session-admin-api.js +1 -1
- package/dist/src/lib/api/get-session-api.d.ts +1 -0
- package/dist/src/lib/api/get-session-api.d.ts.map +1 -1
- package/dist/src/lib/api/resolve-queue-task-outcome.d.ts +14 -0
- package/dist/src/lib/api/resolve-queue-task-outcome.d.ts.map +1 -0
- package/dist/src/lib/api/resolve-queue-task-outcome.js +1 -0
- package/dist/src/lib/api/resolve-queue-task-outcome.test.d.ts +2 -0
- package/dist/src/lib/api/resolve-queue-task-outcome.test.d.ts.map +1 -0
- package/dist/src/lib/api/resolve-queue-task-outcome.test.js +1 -0
- package/dist/src/lib/api/should-cron-job-run.js +1 -1
- package/dist/src/lib/config.d.ts +1 -0
- package/dist/src/lib/config.d.ts.map +1 -1
- package/dist/src/lib/config.js +1 -1
- package/dist/src/lib/fetcher/types.d.ts.map +1 -1
- package/dist/src/lib/navigation.d.ts +5 -5
- package/dist/src/lib/plugin.d.ts +3 -0
- package/dist/src/lib/plugin.d.ts.map +1 -1
- package/dist/src/lib/utils.d.ts +1 -0
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +1 -1
- package/dist/src/routes/admin/core/advanced/queue/page.d.ts +13 -0
- package/dist/src/routes/admin/core/advanced/queue/page.d.ts.map +1 -0
- package/dist/src/routes/admin/core/advanced/queue/page.js +1 -0
- package/dist/src/routes/admin/core/debug/page.d.ts.map +1 -1
- package/dist/src/routes/admin/core/debug/page.js +1 -1
- package/dist/src/routes/admin/core/staff/admins/create/page.d.ts +3 -0
- package/dist/src/routes/admin/core/staff/admins/create/page.d.ts.map +1 -0
- package/dist/src/routes/admin/core/staff/admins/create/page.js +1 -0
- package/dist/src/routes/admin/core/staff/admins/edit/[id]/page.d.ts +7 -0
- package/dist/src/routes/admin/core/staff/admins/edit/[id]/page.d.ts.map +1 -0
- package/dist/src/routes/admin/core/staff/admins/edit/[id]/page.js +1 -0
- package/dist/src/routes/admin/core/staff/admins/page.d.ts +4 -0
- package/dist/src/routes/admin/core/staff/admins/page.d.ts.map +1 -0
- package/dist/src/routes/admin/core/staff/admins/page.js +1 -0
- package/dist/src/routes/admin/core/staff/moderators/create/page.d.ts +3 -0
- package/dist/src/routes/admin/core/staff/moderators/create/page.d.ts.map +1 -0
- package/dist/src/routes/admin/core/staff/moderators/create/page.js +1 -0
- package/dist/src/routes/admin/core/staff/moderators/edit/[id]/page.d.ts +7 -0
- package/dist/src/routes/admin/core/staff/moderators/edit/[id]/page.d.ts.map +1 -0
- package/dist/src/routes/admin/core/staff/moderators/edit/[id]/page.js +1 -0
- package/dist/src/routes/admin/core/staff/moderators/page.d.ts +4 -0
- package/dist/src/routes/admin/core/staff/moderators/page.d.ts.map +1 -0
- package/dist/src/routes/admin/core/staff/moderators/page.js +1 -0
- package/dist/src/routes/admin/core/system/integrations/page.d.ts +7 -0
- package/dist/src/routes/admin/core/system/integrations/page.d.ts.map +1 -0
- package/dist/src/routes/admin/core/system/integrations/page.js +1 -0
- package/dist/src/routes/admin/core/users/{[nameCode] → [id]}/page.d.ts +2 -2
- package/dist/src/routes/admin/core/users/[id]/page.d.ts.map +1 -0
- package/dist/src/routes/admin/core/users/[id]/page.js +1 -0
- package/dist/src/routes/admin/core/users/page.d.ts.map +1 -1
- package/dist/src/routes/admin/core/users/page.js +1 -1
- package/dist/src/routes/breadcrumb/admin/[...all]/page.d.ts +1 -5
- package/dist/src/routes/breadcrumb/admin/[...all]/page.d.ts.map +1 -1
- package/dist/src/routes/breadcrumb/admin/[...all]/page.js +1 -1
- package/dist/src/routes/breadcrumb/admin/core/staff/admins/create/page.d.ts +2 -0
- package/dist/src/routes/breadcrumb/admin/core/staff/admins/create/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/admin/core/staff/admins/create/page.js +1 -0
- package/dist/src/routes/breadcrumb/admin/core/{users/[nameCode] → staff/admins/edit/[id]}/page.d.ts +1 -1
- package/dist/src/routes/breadcrumb/admin/core/staff/admins/edit/[id]/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/admin/core/staff/admins/edit/[id]/page.js +1 -0
- package/dist/src/routes/breadcrumb/admin/core/staff/admins/page.d.ts +2 -0
- package/dist/src/routes/breadcrumb/admin/core/staff/admins/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/admin/core/staff/admins/page.js +1 -0
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/create/page.d.ts +2 -0
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/create/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/create/page.js +1 -0
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/edit/[id]/page.d.ts +6 -0
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/edit/[id]/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/edit/[id]/page.js +1 -0
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/page.d.ts +2 -0
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/page.js +1 -0
- package/dist/src/routes/breadcrumb/admin/core/users/[id]/page.d.ts +6 -0
- package/dist/src/routes/breadcrumb/admin/core/users/[id]/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/admin/core/users/{[nameCode] → [id]}/page.js +1 -1
- package/dist/src/routes/breadcrumb/main/[...rest]/page.d.ts +1 -5
- package/dist/src/routes/breadcrumb/main/[...rest]/page.d.ts.map +1 -1
- package/dist/src/routes/breadcrumb/main/[...rest]/page.js +1 -1
- package/dist/src/routes/breadcrumb/main/settings/overview/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/main/settings/overview/page.js +1 -0
- package/dist/src/routes/breadcrumb/main/settings/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/main/{register → settings}/page.js +1 -1
- package/dist/src/routes/breadcrumb/main/settings/security/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/main/settings/security/page.js +1 -0
- package/dist/src/routes/main/settings/layout.d.ts +5 -0
- package/dist/src/routes/main/settings/layout.d.ts.map +1 -0
- package/dist/src/routes/main/settings/layout.js +1 -0
- package/dist/src/routes/main/settings/overview/page.d.ts +5 -0
- package/dist/src/routes/main/settings/overview/page.d.ts.map +1 -0
- package/dist/src/routes/main/settings/overview/page.js +1 -0
- package/dist/src/routes/main/settings/page.d.ts +5 -0
- package/dist/src/routes/main/settings/page.d.ts.map +1 -0
- package/dist/src/routes/main/settings/page.js +1 -0
- package/dist/src/routes/main/settings/security/page.d.ts +5 -0
- package/dist/src/routes/main/settings/security/page.d.ts.map +1 -0
- package/dist/src/routes/main/settings/security/page.js +1 -0
- package/dist/src/views/admin/layouts/admin-layout.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/admin-layout.js +1 -1
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-admin.d.ts +6 -0
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-admin.d.ts.map +1 -0
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-admin.js +1 -0
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-create-admin.d.ts +5 -0
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-create-admin.d.ts.map +1 -0
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-create-admin.js +1 -0
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-edit-admin.d.ts +6 -0
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-edit-admin.d.ts.map +1 -0
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-edit-admin.js +1 -0
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-user-admin.d.ts +2 -2
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-user-admin.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-user-admin.js +1 -1
- package/dist/src/views/admin/layouts/breadcrumb/resolve-breadcrumb.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/breadcrumb/resolve-breadcrumb.js +1 -1
- package/dist/src/views/admin/layouts/sidebar/nav/get-admin-nav.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/sidebar/nav/get-admin-nav.js +1 -1
- package/dist/src/views/admin/layouts/sidebar/nav/item.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/sidebar/nav/item.js +1 -1
- package/dist/src/views/admin/layouts/user-bar/client.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/user-bar/client.js +1 -1
- package/dist/src/views/admin/layouts/user-bar/user-bar.js +1 -1
- package/dist/src/views/admin/views/core/advanced/queue/badges/status-badge.d.ts +5 -0
- package/dist/src/views/admin/views/core/advanced/queue/badges/status-badge.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/advanced/queue/badges/status-badge.js +1 -0
- package/dist/src/views/admin/views/core/advanced/queue/queue-table-view.d.ts +7 -0
- package/dist/src/views/admin/views/core/advanced/queue/queue-table-view.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/advanced/queue/queue-table-view.js +1 -0
- package/dist/src/views/admin/views/core/debug/actions/clear-cache/mutation-api.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/debug/actions/clear-cache/mutation-api.js +1 -1
- package/dist/src/views/admin/views/core/debug/queue/queue-view.d.ts +2 -0
- package/dist/src/views/admin/views/core/debug/queue/queue-view.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/debug/queue/queue-view.js +1 -0
- package/dist/src/views/admin/views/core/debug/system-logs/actions/more/more.d.ts +1 -1
- package/dist/src/views/admin/views/core/debug/system-logs/actions/more/more.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/debug/system-logs/actions/more/more.js +1 -1
- package/dist/src/views/admin/views/core/debug/system-logs/system-logs-view.d.ts +1 -1
- package/dist/src/views/admin/views/core/staff/create/create-staff-permissions-view.d.ts +5 -0
- package/dist/src/views/admin/views/core/staff/create/create-staff-permissions-view.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/staff/create/create-staff-permissions-view.js +1 -0
- package/dist/src/views/admin/views/core/staff/create/form.d.ts +6 -0
- package/dist/src/views/admin/views/core/staff/create/form.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/staff/create/form.js +1 -0
- package/dist/src/views/admin/views/core/staff/create/mutation-api.d.ts +14 -0
- package/dist/src/views/admin/views/core/staff/create/mutation-api.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/staff/create/mutation-api.js +1 -0
- package/dist/src/views/admin/views/core/staff/create/search.action.d.ts +8 -0
- package/dist/src/views/admin/views/core/staff/create/search.action.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/staff/create/search.action.js +1 -0
- package/dist/src/views/admin/views/core/staff/edit/edit-staff-permissions-view.d.ts +8 -0
- package/dist/src/views/admin/views/core/staff/edit/edit-staff-permissions-view.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/staff/edit/edit-staff-permissions-view.js +1 -0
- package/dist/src/views/admin/views/core/staff/edit/form.d.ts +29 -0
- package/dist/src/views/admin/views/core/staff/edit/form.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/staff/edit/form.js +1 -0
- package/dist/src/views/admin/views/core/staff/edit/mutation-api.d.ts +13 -0
- package/dist/src/views/admin/views/core/staff/edit/mutation-api.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/staff/edit/mutation-api.js +1 -0
- package/dist/src/views/admin/views/core/staff/selectable-card.d.ts +11 -0
- package/dist/src/views/admin/views/core/staff/selectable-card.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/staff/selectable-card.js +1 -0
- package/dist/src/views/admin/views/core/staff/table/actions/delete-action.d.ts +11 -0
- package/dist/src/views/admin/views/core/staff/table/actions/delete-action.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/staff/table/actions/delete-action.js +1 -0
- package/dist/src/views/admin/views/core/staff/table/actions/staff-row-actions.d.ts +10 -0
- package/dist/src/views/admin/views/core/staff/table/actions/staff-row-actions.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/staff/table/actions/staff-row-actions.js +1 -0
- package/dist/src/views/admin/views/core/staff/table/staff-table.d.ts +7 -0
- package/dist/src/views/admin/views/core/staff/table/staff-table.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/staff/table/staff-table.js +1 -0
- package/dist/src/views/admin/views/core/staff/table/staff-user-format.d.ts +18 -0
- package/dist/src/views/admin/views/core/staff/table/staff-user-format.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/staff/table/staff-user-format.js +1 -0
- package/dist/src/views/admin/views/core/staff/views/admins/admins-staff-view.d.ts +4 -0
- package/dist/src/views/admin/views/core/staff/views/admins/admins-staff-view.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/staff/views/admins/admins-staff-view.js +1 -0
- package/dist/src/views/admin/views/core/staff/views/moderators/moderators-staff-view.d.ts +4 -0
- package/dist/src/views/admin/views/core/staff/views/moderators/moderators-staff-view.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/staff/views/moderators/moderators-staff-view.js +1 -0
- package/dist/src/views/admin/views/core/system/integrations/integration-card.d.ts +15 -0
- package/dist/src/views/admin/views/core/system/integrations/integration-card.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/system/integrations/integration-card.js +1 -0
- package/dist/src/views/admin/views/core/system/integrations/integrations-view.d.ts +3 -0
- package/dist/src/views/admin/views/core/system/integrations/integrations-view.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/system/integrations/integrations-view.js +1 -0
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/content.d.ts +2 -0
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/content.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/content.js +1 -0
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/mutation-api.d.ts +12 -0
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/mutation-api.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/mutation-api.js +1 -0
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/send-test-email.d.ts +3 -0
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/send-test-email.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/send-test-email.js +1 -0
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/use-form.d.ts +15 -0
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/use-form.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/use-form.js +1 -0
- package/dist/src/views/admin/views/core/users/actions/create/create.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/actions/create/create.js +1 -1
- package/dist/src/views/admin/views/core/users/actions/verify-email/mutation-api.d.ts +1 -1
- package/dist/src/views/admin/views/core/users/actions/verify-email/mutation-api.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/actions/verify-email/mutation-api.js +1 -1
- package/dist/src/views/admin/views/core/users/actions/verify-email/verify-email.d.ts +2 -2
- package/dist/src/views/admin/views/core/users/actions/verify-email/verify-email.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/actions/verify-email/verify-email.js +1 -1
- package/dist/src/views/admin/views/core/users/actions.d.ts +3 -3
- package/dist/src/views/admin/views/core/users/actions.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/actions.js +1 -1
- package/dist/src/views/admin/views/core/users/show/edit-buttons.d.ts +4 -0
- package/dist/src/views/admin/views/core/users/show/edit-buttons.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/show/edit-buttons.js +1 -0
- package/dist/src/views/admin/views/core/users/show/edit-field.d.ts +13 -0
- package/dist/src/views/admin/views/core/users/show/edit-field.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/show/edit-field.js +1 -0
- package/dist/src/views/admin/views/core/users/show/edit-name-code.d.ts +5 -0
- package/dist/src/views/admin/views/core/users/show/edit-name-code.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/show/edit-name-code.js +1 -0
- package/dist/src/views/admin/views/core/users/show/mutation-api.d.ts +19 -0
- package/dist/src/views/admin/views/core/users/show/mutation-api.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/show/mutation-api.js +1 -0
- package/dist/src/views/admin/views/core/users/show/roles/edit-roles.d.ts +8 -0
- package/dist/src/views/admin/views/core/users/show/roles/edit-roles.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/show/roles/edit-roles.js +1 -0
- package/dist/src/views/admin/views/core/users/show/roles/roles.d.ts +8 -0
- package/dist/src/views/admin/views/core/users/show/roles/roles.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/show/roles/roles.js +1 -0
- package/dist/src/views/admin/views/core/users/show/roles/search-roles.action.d.ts +10 -0
- package/dist/src/views/admin/views/core/users/show/roles/search-roles.action.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/show/roles/search-roles.action.js +1 -0
- package/dist/src/views/admin/views/core/users/show/roles/update-roles.action.d.ts +13 -0
- package/dist/src/views/admin/views/core/users/show/roles/update-roles.action.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/show/roles/update-roles.action.js +1 -0
- package/dist/src/views/admin/views/core/users/show/show-user-admin-view.d.ts +2 -2
- package/dist/src/views/admin/views/core/users/show/show-user-admin-view.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/show/show-user-admin-view.js +1 -1
- package/dist/src/views/admin/views/core/users/users-admin-view.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/users-admin-view.js +1 -1
- package/dist/src/views/auth/settings/layout.d.ts +4 -0
- package/dist/src/views/auth/settings/layout.d.ts.map +1 -0
- package/dist/src/views/auth/settings/layout.js +1 -0
- package/dist/src/views/auth/settings/nav.d.ts +2 -0
- package/dist/src/views/auth/settings/nav.d.ts.map +1 -0
- package/dist/src/views/auth/settings/nav.js +1 -0
- package/dist/src/views/auth/settings/overview/overview.d.ts +2 -0
- package/dist/src/views/auth/settings/overview/overview.d.ts.map +1 -0
- package/dist/src/views/auth/settings/overview/overview.js +1 -0
- package/dist/src/views/auth/settings/security/security.d.ts +2 -0
- package/dist/src/views/auth/settings/security/security.d.ts.map +1 -0
- package/dist/src/views/auth/settings/security/security.js +1 -0
- package/dist/src/views/auth/settings/shell.d.ts +4 -0
- package/dist/src/views/auth/settings/shell.d.ts.map +1 -0
- package/dist/src/views/auth/settings/shell.js +1 -0
- package/dist/src/views/auth/sso/callback/client/client.d.ts.map +1 -1
- package/dist/src/views/auth/sso/callback/client/client.js +1 -1
- package/dist/src/views/breadcrumb/breadcrumb-main.js +1 -1
- package/dist/src/views/breadcrumb/breadcrumb-render.js +1 -1
- package/dist/src/views/error/global-error-view.js +1 -1
- package/dist/src/views/layouts/provider.d.ts.map +1 -1
- package/dist/src/views/layouts/provider.js +1 -1
- package/dist/src/views/layouts/root-layout.d.ts.map +1 -1
- package/dist/src/views/layouts/root-layout.js +1 -1
- package/dist/src/views/layouts/theme/header/user/auth/auth.js +1 -1
- package/dist/src/views/layouts/theme/header/user/auth/client.d.ts.map +1 -1
- package/dist/src/views/layouts/theme/header/user/auth/client.js +1 -1
- package/dist/src/vitnode.config.d.ts +7 -3
- package/dist/src/vitnode.config.d.ts.map +1 -1
- package/dist/src/ws/handle.d.ts.map +1 -1
- package/dist/src/ws/handle.js +1 -1
- package/dist/src/ws/manager.d.ts.map +1 -1
- package/dist/src/ws/manager.js +1 -1
- package/dist/src/ws/provider.d.ts.map +1 -1
- package/dist/src/ws/provider.js +1 -1
- package/dist/src/ws/registry.d.ts +5 -0
- package/dist/src/ws/registry.d.ts.map +1 -1
- package/dist/src/ws/registry.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/vitest.config.d.ts.map +1 -1
- package/package.json +24 -26
- package/src/locales/en.json +279 -4
- package/src/routes/admin/core/advanced/queue/page.tsx +51 -0
- package/src/routes/admin/core/debug/page.tsx +25 -4
- package/src/routes/admin/core/staff/admins/create/page.tsx +17 -0
- package/src/routes/admin/core/staff/admins/edit/[id]/page.tsx +23 -0
- package/src/routes/admin/core/staff/admins/page.tsx +14 -0
- package/src/routes/admin/core/staff/moderators/create/page.tsx +17 -0
- package/src/routes/admin/core/staff/moderators/edit/[id]/page.tsx +23 -0
- package/src/routes/admin/core/staff/moderators/page.tsx +14 -0
- package/src/routes/admin/core/system/integrations/page.tsx +43 -0
- package/src/routes/admin/core/users/{[nameCode] → [id]}/page.tsx +7 -7
- package/src/routes/admin/core/users/page.tsx +10 -2
- package/src/routes/breadcrumb/admin/[...all]/page.tsx +2 -16
- package/src/routes/breadcrumb/admin/core/staff/admins/create/page.tsx +5 -0
- package/src/routes/breadcrumb/admin/core/staff/admins/edit/[id]/page.tsx +11 -0
- package/src/routes/breadcrumb/admin/core/staff/admins/page.tsx +5 -0
- package/src/routes/breadcrumb/admin/core/staff/moderators/create/page.tsx +5 -0
- package/src/routes/breadcrumb/admin/core/staff/moderators/edit/[id]/page.tsx +11 -0
- package/src/routes/breadcrumb/admin/core/staff/moderators/page.tsx +5 -0
- package/src/routes/breadcrumb/admin/core/users/[id]/page.tsx +11 -0
- package/src/routes/breadcrumb/main/[...rest]/page.tsx +2 -16
- package/src/routes/breadcrumb/main/settings/overview/page.tsx +17 -0
- package/src/routes/breadcrumb/main/{register → settings}/page.tsx +3 -3
- package/src/routes/breadcrumb/main/settings/security/page.tsx +17 -0
- package/src/routes/main/settings/layout.tsx +16 -0
- package/src/routes/main/settings/overview/page.tsx +15 -0
- package/src/routes/main/settings/page.tsx +15 -0
- package/src/routes/main/settings/security/page.tsx +15 -0
- package/dist/scripts/get-config.js +0 -66
- package/dist/scripts/plugin.js +0 -206
- package/dist/scripts/prepare-database.js +0 -177
- package/dist/scripts/prepare-plugins-files.js +0 -152
- package/dist/scripts/run-interactive-shell-command.js +0 -21
- package/dist/scripts/shared/file-utils.js +0 -203
- package/dist/src/locales/en.json +0 -372
- package/dist/src/routes/admin/core/users/[nameCode]/page.d.ts.map +0 -1
- package/dist/src/routes/admin/core/users/[nameCode]/page.js +0 -1
- package/dist/src/routes/breadcrumb/admin/core/users/[nameCode]/page.d.ts.map +0 -1
- package/dist/src/routes/breadcrumb/main/login/page.d.ts.map +0 -1
- package/dist/src/routes/breadcrumb/main/login/page.js +0 -1
- package/dist/src/routes/breadcrumb/main/login/reset-password/page.d.ts.map +0 -1
- package/dist/src/routes/breadcrumb/main/login/reset-password/page.js +0 -1
- package/dist/src/routes/breadcrumb/main/register/page.d.ts.map +0 -1
- package/dist/tsup.config.js +0 -17
- package/dist/vitest.config.js +0 -48
- package/src/routes/breadcrumb/admin/core/users/[nameCode]/page.tsx +0 -12
- package/src/routes/breadcrumb/main/login/page.tsx +0 -11
- package/src/routes/breadcrumb/main/login/reset-password/page.tsx +0 -20
- /package/dist/src/routes/breadcrumb/main/{login → settings/overview}/page.d.ts +0 -0
- /package/dist/src/routes/breadcrumb/main/{login/reset-password → settings}/page.d.ts +0 -0
- /package/dist/src/routes/breadcrumb/main/{register → settings/security}/page.d.ts +0 -0
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import type { Context, Env, Next } from "hono";
|
|
2
|
+
import type { Redis } from "ioredis";
|
|
2
3
|
import type { VitNodeApiConfig, VitNodeConfig } from "../../vitnode.config";
|
|
3
4
|
import type { VitNodeRealtime } from "../../ws/registry";
|
|
4
|
-
import {
|
|
5
|
+
import { CacheModel } from "../../api/lib/cache";
|
|
6
|
+
import { EmailModel } from "../../api/models/email";
|
|
7
|
+
import { QueueModel } from "../../api/models/queue";
|
|
5
8
|
import type { BuildCronReturn } from "../lib/cron";
|
|
9
|
+
import type { PermissionStaffCatalogEntry } from "../lib/permission-staff";
|
|
10
|
+
import type { BuildQueueTaskReturn } from "../lib/queue";
|
|
6
11
|
import type { WebSocketConfig } from "../lib/websocket";
|
|
7
12
|
import type { SSOApiPlugin } from "../models/sso";
|
|
8
13
|
import { type LoggerMiddlewareType } from "../lib/logger-middleware";
|
|
@@ -28,6 +33,7 @@ export interface EnvVariablesVitNode {
|
|
|
28
33
|
roleId: number;
|
|
29
34
|
};
|
|
30
35
|
};
|
|
36
|
+
cache: CacheModel;
|
|
31
37
|
core: {
|
|
32
38
|
authorization: {
|
|
33
39
|
adminCookieExpires: number;
|
|
@@ -46,6 +52,7 @@ export interface EnvVariablesVitNode {
|
|
|
46
52
|
})[];
|
|
47
53
|
cronSecret?: string;
|
|
48
54
|
email?: VitNodeApiConfig["email"];
|
|
55
|
+
hasCronAdapter: boolean;
|
|
49
56
|
metadata: {
|
|
50
57
|
shortTitle?: string;
|
|
51
58
|
title: string;
|
|
@@ -53,20 +60,24 @@ export interface EnvVariablesVitNode {
|
|
|
53
60
|
pathToMessages: (path: string) => Promise<{
|
|
54
61
|
default: object;
|
|
55
62
|
}>;
|
|
63
|
+
permissionStaff: PermissionStaffCatalogEntry[];
|
|
56
64
|
plugins: {
|
|
57
65
|
id: string;
|
|
58
66
|
}[];
|
|
67
|
+
queue: (BuildQueueTaskReturn & {
|
|
68
|
+
module: string;
|
|
69
|
+
pluginId: string;
|
|
70
|
+
})[];
|
|
59
71
|
webSockets: WebSocketConfig[];
|
|
60
72
|
};
|
|
61
73
|
db: Pick<VitNodeApiConfig, "dbProvider">["dbProvider"];
|
|
62
|
-
email:
|
|
63
|
-
send: (args: EmailModelSendArgs) => Promise<void>;
|
|
64
|
-
};
|
|
74
|
+
email: EmailModel;
|
|
65
75
|
ipAddress: string;
|
|
66
76
|
log: LoggerMiddlewareType;
|
|
67
77
|
plugin: {
|
|
68
78
|
id: string;
|
|
69
79
|
};
|
|
80
|
+
queue: QueueModel;
|
|
70
81
|
realtime: VitNodeRealtime;
|
|
71
82
|
user: null | {
|
|
72
83
|
avatarColor: string;
|
|
@@ -81,7 +92,9 @@ export interface EnvVariablesVitNode {
|
|
|
81
92
|
roleId: number;
|
|
82
93
|
};
|
|
83
94
|
}
|
|
84
|
-
export declare const globalMiddleware: ({ authorization, metadata, email, dbProvider, captcha, plugins, pathToMessages, }: Pick<VitNodeApiConfig, "authorization" | "captcha" | "dbProvider" | "email" | "pathToMessages" | "plugins"> & Pick<VitNodeConfig, "metadata">
|
|
95
|
+
export declare const globalMiddleware: ({ authorization, metadata, email, dbProvider, captcha, cron, plugins, pathToMessages, cacheClient, }: Pick<VitNodeApiConfig, "authorization" | "captcha" | "cron" | "dbProvider" | "email" | "pathToMessages" | "plugins"> & Pick<VitNodeConfig, "metadata"> & {
|
|
96
|
+
cacheClient: null | Redis;
|
|
97
|
+
}) => (c: Context, next: Next) => Promise<void>;
|
|
85
98
|
export declare const pluginMiddleware: (pluginId: string) => (c: Context, next: Next) => Promise<void>;
|
|
86
99
|
export declare const globalAdminMiddleware: () => (c: Context, next: Next) => Promise<void>;
|
|
87
100
|
//# sourceMappingURL=global.middleware.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global.middleware.d.ts","sourceRoot":"","sources":["../../../../src/api/middlewares/global.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"global.middleware.d.ts","sourceRoot":"","sources":["../../../../src/api/middlewares/global.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAIrC,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAMhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAC;AAGlC,OAAO,QAAQ,MAAM,CAAC;IAEpB,UAAU,kBAAmB,SAAQ,mBAAmB;KAAG;CAC5D;AAED,MAAM,WAAW,UAAW,SAAQ,GAAG;IACrC,SAAS,EAAE,mBAAmB,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,IAAI,GAAG;QACZ,IAAI,EAAE;YACJ,WAAW,EAAE,MAAM,CAAC;YACpB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;YACtB,SAAS,EAAE,IAAI,CAAC;YAChB,KAAK,EAAE,MAAM,CAAC;YACd,aAAa,EAAE,OAAO,CAAC;YACvB,EAAE,EAAE,MAAM,CAAC;YACX,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,MAAM,CAAC;YACjB,UAAU,EAAE,OAAO,CAAC;YACpB,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE;QACJ,aAAa,EAAE;YACb,kBAAkB,EAAE,MAAM,CAAC;YAC3B,eAAe,EAAE,MAAM,CAAC;YACxB,cAAc,EAAE,MAAM,CAAC;YACvB,UAAU,EAAE,MAAM,CAAC;YACnB,YAAY,EAAE,OAAO,CAAC;YACtB,mBAAmB,EAAE,MAAM,CAAC;YAC5B,gBAAgB,EAAE,MAAM,CAAC;YACzB,WAAW,EAAE,YAAY,EAAE,CAAC;SAC7B,CAAC;QACF,OAAO,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,EAAE,CAAC,eAAe,GAAG;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,EAAE,CAAC;QACjE,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAIlC,cAAc,EAAE,OAAO,CAAC;QACxB,QAAQ,EAAE;YACR,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;QACF,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC/D,eAAe,EAAE,2BAA2B,EAAE,CAAC;QAC/C,OAAO,EAAE;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAC1B,KAAK,EAAE,CAAC,oBAAoB,GAAG;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,EAAE,CAAC;QACvE,UAAU,EAAE,eAAe,EAAE,CAAC;KAC/B,CAAC;IACF,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC;IACvD,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,oBAAoB,CAAC;IAC1B,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,IAAI,GAAG;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;QACtB,SAAS,EAAE,IAAI,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,OAAO,CAAC;QACvB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,OAAO,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,eAAO,MAAM,gBAAgB,GAAI,sGAU9B,IAAI,CACL,gBAAgB,EACd,eAAe,GACf,SAAS,GACT,MAAM,GACN,YAAY,GACZ,OAAO,GACP,gBAAgB,GAChB,SAAS,CACZ,GACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,GAAG;IAAE,WAAW,EAAE,IAAI,GAAG,KAAK,CAAA;CAAE,MA+DjD,GAAG,OAAO,EAAE,MAAM,IAAI,kBAsDrC,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,MACjC,GAAG,OAAO,EAAE,MAAM,IAAI,kBAMrC,CAAC;AAEF,eAAO,MAAM,qBAAqB,SAClB,GAAG,OAAO,EAAE,MAAM,IAAI,kBASrC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{HTTPException}from"hono/http-exception";import{EmailModel}from"../models/email.js";import{SessionModel}from"../models/session.js";import{SessionAdminModel}from"../models/session-admin.js";import{CONFIG}from"../../lib/config.js";import{realtime}from"../../ws/registry.js";import{loggerMiddleware}from"../lib/logger-middleware.js";export const globalMiddleware=({authorization,metadata,email,dbProvider,captcha,plugins,pathToMessages})=>{const pluginsMetadata=plugins.map(plugin=>({id:plugin.pluginId}));const cronMetadata=plugins.flatMap(plugin=>plugin.cronJobs.map(cronJob=>({pluginId:plugin.pluginId,module:cronJob.module,name:cronJob.name,schedule:cronJob.schedule,handler:cronJob.handler,description:cronJob.description})));const webSocketsMetadata=plugins.flatMap(plugin=>plugin.webSockets.map(webSocket=>({...webSocket,pluginId:plugin.pluginId})));const ipHeaderKeys=["x-forwarded-for","x-real-ip","cf-connecting-ip","x-client-ip","x-forwarded","x-cluster-client-ip","forwarded-for","forwarded","via","remote-addr","client-ip","ip","x-ip","true-client-ip","fastly-client-ip","x-fastly-client-ip"];return async(c,next)=>{let ipAddress;for(const key of ipHeaderKeys){ipAddress=c.req.header(key);if(ipAddress)break;ipAddress=c.req.raw.headers.get(key)??undefined;if(ipAddress)break}c.set("ipAddress",ipAddress??"127.0.0.1");c.set("db",dbProvider);c.set("email",new EmailModel(c));c.set("realtime",realtime);c.set("core",{pathToMessages,metadata,email,authorization:{cookieName:authorization?.cookieName??"vitnode_auth",cookie_expires:authorization?.cookieExpires??1e3*60*60*24*90,ssoAdapters:authorization?.ssoAdapters??[],deviceCookieName:authorization?.deviceCookieName??"vitnode_device",deviceCookieExpires:authorization?.deviceCookieExpires??1e3*60*60*24*365,adminCookieName:authorization?.adminCookieName??"vitnode_auth_admin",adminCookieExpires:authorization?.adminCookieExpires??1e3*60*60*24*1,cookieSecure:authorization?.cookieSecure??true},captcha,cronSecret:CONFIG.cronJobSecret,plugins:pluginsMetadata,cron:cronMetadata,webSockets:webSocketsMetadata});const user=await new SessionModel(c).getUser();c.set("user",user);c.set("admin",null);c.set("log",loggerMiddleware(c));await next()}};export const pluginMiddleware=pluginId=>{return async(c,next)=>{c.set("plugin",{id:pluginId});await next()}};export const globalAdminMiddleware=()=>{return async(c,next)=>{const user=await new SessionAdminModel(c).getUser();if(!user)throw new HTTPException(403);c.set("admin",{user});await next()}};
|
|
1
|
+
import{HTTPException}from"hono/http-exception";import{CacheModel}from"../lib/cache.js";import{EmailModel}from"../models/email.js";import{QueueModel}from"../models/queue.js";import{SessionModel}from"../models/session.js";import{SessionAdminModel}from"../models/session-admin.js";import{CONFIG}from"../../lib/config.js";import{realtime}from"../../ws/registry.js";import{loggerMiddleware}from"../lib/logger-middleware.js";import{normalizePermissionStaffModules}from"../lib/permission-staff.js";export const globalMiddleware=({authorization,metadata,email,dbProvider,captcha,cron,plugins,pathToMessages,cacheClient})=>{const pluginsMetadata=plugins.map(plugin=>({id:plugin.pluginId}));const cronMetadata=plugins.flatMap(plugin=>(plugin.cronJobs??[]).map(cronJob=>({pluginId:plugin.pluginId,module:cronJob.module,name:cronJob.name,schedule:cronJob.schedule,handler:cronJob.handler,description:cronJob.description})));const queueMetadata=plugins.flatMap(plugin=>(plugin.queueTasks??[]).map(task=>({pluginId:plugin.pluginId,module:task.module,name:task.name,handler:task.handler,description:task.description,maxAttempts:task.maxAttempts})));const webSocketsMetadata=plugins.flatMap(plugin=>(plugin.webSockets??[]).map(webSocket=>({...webSocket,pluginId:plugin.pluginId})));const permissionStaffMetadata=plugins.map(plugin=>({pluginId:plugin.pluginId,admin:normalizePermissionStaffModules(plugin.permissionStaff?.admin),moderator:normalizePermissionStaffModules(plugin.permissionStaff?.moderator)}));const ipHeaderKeys=["x-forwarded-for","x-real-ip","cf-connecting-ip","x-client-ip","x-forwarded","x-cluster-client-ip","forwarded-for","forwarded","via","remote-addr","client-ip","ip","x-ip","true-client-ip","fastly-client-ip","x-fastly-client-ip"];return async(c,next)=>{let ipAddress;for(const key of ipHeaderKeys){ipAddress=c.req.header(key);if(ipAddress)break;ipAddress=c.req.raw.headers.get(key)??undefined;if(ipAddress)break}c.set("ipAddress",ipAddress??"127.0.0.1");c.set("db",dbProvider);c.set("cache",new CacheModel(cacheClient,c));c.set("email",new EmailModel(c));c.set("queue",new QueueModel(c));c.set("realtime",realtime);c.set("core",{pathToMessages,metadata,email,authorization:{cookieName:authorization?.cookieName??"vitnode_auth",cookie_expires:authorization?.cookieExpires??1e3*60*60*24*90,ssoAdapters:authorization?.ssoAdapters??[],deviceCookieName:authorization?.deviceCookieName??"vitnode_device",deviceCookieExpires:authorization?.deviceCookieExpires??1e3*60*60*24*365,adminCookieName:authorization?.adminCookieName??"vitnode_auth_admin",adminCookieExpires:authorization?.adminCookieExpires??1e3*60*60*24*1,cookieSecure:authorization?.cookieSecure??true},captcha,cronSecret:CONFIG.cronJobSecret,hasCronAdapter:!!cron,plugins:pluginsMetadata,cron:cronMetadata,queue:queueMetadata,webSockets:webSocketsMetadata,permissionStaff:permissionStaffMetadata});const user=await new SessionModel(c).getUser();c.set("user",user);c.set("admin",null);c.set("log",loggerMiddleware(c));await next()}};export const pluginMiddleware=pluginId=>{return async(c,next)=>{c.set("plugin",{id:pluginId});await next()}};export const globalAdminMiddleware=()=>{return async(c,next)=>{const user=await new SessionAdminModel(c).getUser();if(!user)throw new HTTPException(403);c.set("admin",{user});await next()}};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Context, Next } from "hono";
|
|
2
|
+
import type { Redis } from "ioredis";
|
|
2
3
|
import { type IRateLimiterOptions } from "rate-limiter-flexible";
|
|
3
|
-
export declare const rateLimiterMiddleware: (options?: Omit<IRateLimiterOptions, "keyPrefix"
|
|
4
|
+
export declare const rateLimiterMiddleware: (options?: Omit<IRateLimiterOptions, "keyPrefix">, storeClient?: null | Redis) => ((_c: Context, next: Next) => Promise<void>) | ((c: Context, next: Next) => Promise<(Response & import("hono").TypedResponse<"Too Many Requests", 429, "text">) | undefined>);
|
|
4
5
|
//# sourceMappingURL=rate-limiter.middleware.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limiter.middleware.d.ts","sourceRoot":"","sources":["../../../../src/api/middlewares/rate-limiter.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"rate-limiter.middleware.d.ts","sourceRoot":"","sources":["../../../../src/api/middlewares/rate-limiter.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EACL,KAAK,mBAAmB,EAIzB,MAAM,uBAAuB,CAAC;AA8B/B,eAAO,MAAM,qBAAqB,GAChC,UAAU,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,EAChD,cAAc,IAAI,GAAG,KAAK,WAIN,OAAO,QAAQ,IAAI,2BAatB,OAAO,QAAQ,IAAI,sGAWrC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{RateLimiterMemory}from"rate-limiter-flexible";import{CONFIG}from"../../lib/config.js";const createRateLimiter=({keyPrefix,...options})=>{return new RateLimiterMemory({keyPrefix,...options})};export const rateLimiterMiddleware=options=>{if(CONFIG.node_development){return async(_c,next)=>{await next()}}const rateLimiter=createRateLimiter({...options,keyPrefix:"vitnode-api-rate-limiter",duration:options?.duration??60,points:options?.points??80});return async(c,next)=>{const key=c.get("ipAddress");try{await rateLimiter.consume(key)}catch{return c.text("Too Many Requests",429)}await next()}};
|
|
1
|
+
import{RateLimiterMemory,RateLimiterRedis}from"rate-limiter-flexible";import{CONFIG}from"../../lib/config.js";const createRateLimiter=({keyPrefix,storeClient,...options})=>{if(storeClient){return new RateLimiterRedis({storeClient,keyPrefix,...options,insuranceLimiter:new RateLimiterMemory({keyPrefix,...options})})}return new RateLimiterMemory({keyPrefix,...options})};export const rateLimiterMiddleware=(options,storeClient)=>{if(CONFIG.node_development){return async(_c,next)=>{await next()}}const rateLimiter=createRateLimiter({...options,keyPrefix:"vitnode-api-rate-limiter",duration:options?.duration??60,points:options?.points??80,storeClient});return async(c,next)=>{const key=c.get("ipAddress");try{await rateLimiter.consume(key)}catch{return c.text("Too Many Requests",429)}await next()}};
|
|
@@ -34,10 +34,20 @@ export type EmailModelSendArgs = {
|
|
|
34
34
|
replyTo?: string;
|
|
35
35
|
subject: ((props: Pick<DefaultTemplateEmailProps, "i18n">) => string) | string;
|
|
36
36
|
} & (EmailModelSendArgsWithEmail | EmailModelSendArgsWithUser);
|
|
37
|
+
export interface BuiltEmail {
|
|
38
|
+
html: string;
|
|
39
|
+
replyTo?: string;
|
|
40
|
+
subject: string;
|
|
41
|
+
text: string;
|
|
42
|
+
to: string;
|
|
43
|
+
}
|
|
37
44
|
export declare class EmailModel {
|
|
38
45
|
constructor(c: Context);
|
|
39
46
|
protected readonly c: Context;
|
|
40
|
-
|
|
47
|
+
private requireProvider;
|
|
48
|
+
build({ html, replyTo, subject, to, user, content, locale: localeFromArgs, }: EmailModelSendArgs): Promise<BuiltEmail>;
|
|
49
|
+
deliver(email: BuiltEmail): Promise<void>;
|
|
50
|
+
send(args: EmailModelSendArgs): Promise<void>;
|
|
41
51
|
}
|
|
42
52
|
export {};
|
|
43
53
|
//# sourceMappingURL=email.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../../src/api/models/email.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AACxD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAI/E,UAAU,0BAA0B;IAClC,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,UAAU,2BAA2B;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,CAAC,IAAI,EAAE;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QACjD,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;KACZ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,CACP,KAAK,EAAE,IAAI,CAAC,yBAAyB,EAAE,UAAU,CAAC,GAChD,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAC/B,KAAK,CAAC,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,
|
|
1
|
+
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../../src/api/models/email.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AACxD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAI/E,UAAU,0BAA0B;IAClC,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,UAAU,2BAA2B;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,CAAC,IAAI,EAAE;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QACjD,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;KACZ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,CACP,KAAK,EAAE,IAAI,CAAC,yBAAyB,EAAE,UAAU,CAAC,GAChD,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAC/B,KAAK,CAAC,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EACL,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,yBAAyB,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC,GAAG,MAAM,CAAC;CAEzE,GAAG,CAAC,2BAA2B,GAAG,0BAA0B,CAAC,CAAC;AAE/D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,qBAAa,UAAU;gBACT,CAAC,EAAE,OAAO;IAItB,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;IAE9B,OAAO,CAAC,eAAe;IAWjB,KAAK,CAAC,EACV,IAAI,EACJ,OAAO,EACP,OAAO,EACP,EAAE,EACF,IAAI,EACJ,OAAO,EACP,MAAM,EAAE,cAAc,GACvB,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IAgErC,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAazC,IAAI,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAepD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{HTTPException}from"hono/http-exception";import{render}from"react-email";import{CONFIG}from"../../lib/config.js";export class EmailModel{constructor(c){this.c=c}c;requireProvider(){const provider=this.c.get("core").email?.adapter;if(!provider){throw new HTTPException(500,{message:"Email provider not found"})}return provider}async build({html,replyTo,subject,to,user,content,locale:localeFromArgs}){const core=this.c.get("core");const locale=localeFromArgs??user?.language??"en";const pluginIds=["@vitnode/core",...core.plugins.map(plugin=>plugin.id)];const messagesPromises=pluginIds.map(async pluginId=>{try{const path=`${pluginId}/${locale}.json`;const messages=await core.pathToMessages(path);return messages.default}catch{return{}}});const allMessages=await Promise.all(messagesPromises);const messages=Object.assign({},...allMessages);const htmlContent=html??content({i18n:{locale,messages},templateProps:{metadata:{...core.metadata,url:CONFIG.web.href},logo:core.email?.logo},user});const emailTo=user?.email??to;if(!emailTo){throw new HTTPException(400,{message:"Email address is required"})}return{to:emailTo,subject:typeof subject==="function"?subject({i18n:{locale,messages}}):subject,html:await render(htmlContent),text:await render(htmlContent,{plainText:true}),replyTo}}async deliver(email){const provider=this.requireProvider();await provider.sendEmail({html:email.html,to:email.to,subject:email.subject,replyTo:email.replyTo,metadata:this.c.get("core").metadata,text:email.text})}async send(args){this.requireProvider();const email=await this.build(args);await this.c.get("queue").dispatch({name:"send-email",payload:{to:email.to,subject:email.subject,html:email.html,text:email.text,...email.replyTo?{replyTo:email.replyTo}:{}}})}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.test.d.ts","sourceRoot":"","sources":["../../../../src/api/models/email.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe,expect,it,vi}from"vitest";vi.mock("react-email",()=>({render:vi.fn().mockResolvedValue("RENDERED")}));import{EmailModel}from"./email.js";const makeCtx=(overrides={})=>{const dispatch=vi.fn().mockResolvedValue({id:1});const sendEmail=vi.fn().mockResolvedValue(undefined);const error=vi.fn().mockResolvedValue(undefined);const store={core:{email:"email"in overrides?overrides.email:{adapter:{sendEmail}},plugins:[],metadata:{title:"Test"},pathToMessages:vi.fn().mockResolvedValue({default:{}})},queue:{dispatch},log:{error,warn:vi.fn(),debug:vi.fn()}};return{ctx:{get:k=>store[k]},dispatch,sendEmail,error}};describe("EmailModel.queue",()=>{it("renders the email and enqueues a send-email task",async()=>{const{ctx,dispatch}=makeCtx();await new EmailModel(ctx).send({to:"a@b.com",locale:"en",subject:"Hi",content:()=>null});expect(dispatch).toHaveBeenCalledWith({name:"send-email",payload:{to:"a@b.com",subject:"Hi",html:"RENDERED",text:"RENDERED"}})});it("resolves a function subject before enqueueing",async()=>{const{ctx,dispatch}=makeCtx();await new EmailModel(ctx).send({to:"a@b.com",locale:"en",subject:()=>"Computed",content:()=>null});expect(dispatch.mock.calls[0][0].payload.subject).toBe("Computed")});it("throws when no email provider is configured",async()=>{const{ctx,dispatch}=makeCtx({email:undefined});await expect(new EmailModel(ctx).send({to:"a@b.com",locale:"en",subject:"Hi",content:()=>null})).rejects.toThrow();expect(dispatch).not.toHaveBeenCalled()})});describe("EmailModel.deliver",()=>{it("sends a prebuilt email through the provider",async()=>{const{ctx,sendEmail}=makeCtx();await new EmailModel(ctx).deliver({to:"a@b.com",subject:"Hi",html:"<p>hi</p>",text:"hi"});expect(sendEmail).toHaveBeenCalledWith(expect.objectContaining({to:"a@b.com",subject:"Hi",html:"<p>hi</p>",text:"hi",metadata:{title:"Test"}}))})});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Context } from "hono";
|
|
2
|
+
export interface QueueDispatchArgs {
|
|
3
|
+
availableAt?: Date;
|
|
4
|
+
maxAttempts?: number;
|
|
5
|
+
name: string;
|
|
6
|
+
payload?: Record<string, unknown>;
|
|
7
|
+
priority?: number;
|
|
8
|
+
queue?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class QueueModel {
|
|
11
|
+
constructor(c: Context);
|
|
12
|
+
protected readonly c: Context;
|
|
13
|
+
dispatch({ name, payload, queue, priority, maxAttempts, availableAt, }: QueueDispatchArgs): Promise<{
|
|
14
|
+
id: number;
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../../src/api/models/queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAIpC,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD,qBAAa,UAAU;gBACT,CAAC,EAAE,OAAO;IAItB,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;IAExB,QAAQ,CAAC,EACb,IAAI,EACJ,OAAY,EACZ,KAAiB,EACjB,QAAY,EACZ,WAAW,EACX,WAAW,GACZ,EAAE,iBAAiB,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CAuB/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{core_queue}from"../../database/queue.js";export class QueueModel{constructor(c){this.c=c}c;async dispatch({name,payload={},queue="default",priority=0,maxAttempts,availableAt}){const pluginId=this.c.get("plugin")?.id??"@vitnode/core";const registeredTask=this.c.get("core").queue.find(task=>task.pluginId===pluginId&&task.name===name);const[row]=await this.c.get("db").insert(core_queue).values({pluginId,name,queue,payload,priority,maxAttempts:maxAttempts??registeredTask?.maxAttempts??3,availableAt:availableAt??new Date}).returning({id:core_queue.id});return row}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.test.d.ts","sourceRoot":"","sources":["../../../../src/api/models/queue.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe,expect,it,vi}from"vitest";import{QueueModel}from"./queue.js";const makeCtx=(overrides={})=>{const values=vi.fn().mockReturnValue({returning:vi.fn().mockResolvedValue([{id:1}])});const store={db:{insert:vi.fn().mockReturnValue({values})},core:{queue:overrides.queue??[]},plugin:overrides.plugin};return{ctx:{get:k=>store[k]},values}};describe("QueueModel.dispatch",()=>{it("uses the explicit maxAttempts when provided",async()=>{const{ctx,values}=makeCtx({queue:[{name:"job",pluginId:"@vitnode/core",maxAttempts:5}]});await new QueueModel(ctx).dispatch({name:"job",maxAttempts:7});expect(values.mock.calls[0][0]).toMatchObject({maxAttempts:7})});it("falls back to the registered task maxAttempts",async()=>{const{ctx,values}=makeCtx({queue:[{name:"job",pluginId:"@vitnode/core",maxAttempts:5}]});await new QueueModel(ctx).dispatch({name:"job"});expect(values.mock.calls[0][0]).toMatchObject({maxAttempts:5})});it("defaults to 3 when the registered task has no maxAttempts",async()=>{const{ctx,values}=makeCtx({queue:[{name:"job",pluginId:"@vitnode/core"}]});await new QueueModel(ctx).dispatch({name:"job"});expect(values.mock.calls[0][0]).toMatchObject({maxAttempts:3})});it("defaults to 3 when the task is not registered",async()=>{const{ctx,values}=makeCtx({queue:[]});await new QueueModel(ctx).dispatch({name:"job"});expect(values.mock.calls[0][0]).toMatchObject({maxAttempts:3})});it("scopes the task lookup by pluginId",async()=>{const{ctx,values}=makeCtx({plugin:{id:"@vitnode/blog"},queue:[{name:"job",pluginId:"@vitnode/core",maxAttempts:5},{name:"job",pluginId:"@vitnode/blog",maxAttempts:9}]});await new QueueModel(ctx).dispatch({name:"job"});expect(values.mock.calls[0][0]).toMatchObject({pluginId:"@vitnode/blog",maxAttempts:9})})});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-admin.d.ts","sourceRoot":"","sources":["../../../../src/api/models/session-admin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"session-admin.d.ts","sourceRoot":"","sources":["../../../../src/api/models/session-admin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAkBpC,qBAAa,iBAAiB;gBAChB,CAAC,EAAE,OAAO;IAGtB,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;YAEhB,SAAS;IAejB,kBAAkB,CAAC,MAAM,EAAE,MAAM;IAmBjC,qBAAqB,CAAC,MAAM,EAAE,MAAM;;;IA2CpC,aAAa;IA2Bb,OAAO;;;;;;;;;;;;;CAwEd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{and,eq,gt,or}from"drizzle-orm";import{deleteCookie,getCookie,setCookie}from"hono/cookie";import{HTTPException}from"hono/http-exception";import{core_admin_permissions,core_admin_sessions}from"../../database/admins.js";import{CONFIG}from"../../lib/config.js";import{DeviceModel}from"./device.js";import{UserModel}from"./user.js";export class SessionAdminModel{constructor(c){this.c=c}c;async hashToken(token){const encoder=new TextEncoder;const data=encoder.encode(token);const hashBuffer=await crypto.subtle.digest("SHA-256",data);const bytes=new Uint8Array(hashBuffer);let result="";for(const byte of bytes){result+=byte.toString(16).padStart(2,"0")}return result}async checkIfUserIsAdmin(userId){const user=await new UserModel().getUserById({id:userId,c:this.c});if(!user)return false;const[permission]=await this.c.get("db").select().from(core_admin_permissions).where(or(eq(core_admin_permissions.userId,user.id),eq(core_admin_permissions.roleId,user.roleId))).limit(1);return!!permission}async createSessionByUserId(userId){const isAdmin=await this.checkIfUserIsAdmin(userId);if(!isAdmin){throw new HTTPException(403,{message:"Forbidden"})}const randomBytes=new Uint8Array(64);crypto.getRandomValues(randomBytes);let token="";for(const byte of randomBytes){token+=byte.toString(16).padStart(2,"0")}const hashedToken=await this.hashToken(token);const device=await new DeviceModel(this.c).getDeviceId();await this.c.get("db").insert(core_admin_sessions).values({token:hashedToken,userId,expiresAt:new Date(Date.now()+this.c.get("core").authorization.adminCookieExpires),deviceId:device.id});setCookie(this.c,this.c.get("core").authorization.adminCookieName,token,{httpOnly:true,secure:this.c.get("core").authorization.cookieSecure,path:"/",expires:new Date(Date.now()+this.c.get("core").authorization.adminCookieExpires),domain:CONFIG.web.hostname});return{token}}async deleteSession(){const token=getCookie(this.c,this.c.get("core").authorization.adminCookieName);if(!token)return;const hashedToken=await this.hashToken(token);await this.c.get("db").delete(core_admin_sessions).where(eq(core_admin_sessions.token,hashedToken));deleteCookie(this.c,this.c.get("core").authorization.adminCookieName,{path:"/",domain:CONFIG.web.hostname})}async getUser(){const{authorization}=this.c.get("core");const token=getCookie(this.c,authorization.adminCookieName);if(!token)return null;const device=await new DeviceModel(this.c).getDeviceId();if(!device)return null;const hashedToken=await this.hashToken(token);const[session]=await this.c.get("db").select({userId:core_admin_sessions.userId}).from(core_admin_sessions).where(and(eq(core_admin_sessions.token,hashedToken),eq(core_admin_sessions.deviceId,device.id),gt(core_admin_sessions.expiresAt,new Date))).limit(1);if(!session){deleteCookie(this.c,this.c.get("core").authorization.adminCookieName,{path:"/",domain:CONFIG.web.hostname});return null}const user=await new UserModel().getUserById({id:session.userId,c:this.c});if(!user)return null;const isStillAdmin=await this.checkIfUserIsAdmin(user.id);if(!isStillAdmin){await this.deleteSession();return null}return user}}
|
|
1
|
+
import{and,eq,gt,or}from"drizzle-orm";import{deleteCookie,getCookie,setCookie}from"hono/cookie";import{HTTPException}from"hono/http-exception";import{core_admin_permissions,core_admin_sessions}from"../../database/admins.js";import{CONFIG}from"../../lib/config.js";import{DeviceModel}from"./device.js";import{adminSessionCacheKey,reviveSessionUser,sessionCacheTtl}from"./session-cache.js";import{UserModel}from"./user.js";export class SessionAdminModel{constructor(c){this.c=c}c;async hashToken(token){const encoder=new TextEncoder;const data=encoder.encode(token);const hashBuffer=await crypto.subtle.digest("SHA-256",data);const bytes=new Uint8Array(hashBuffer);let result="";for(const byte of bytes){result+=byte.toString(16).padStart(2,"0")}return result}async checkIfUserIsAdmin(userId){const user=await new UserModel().getUserById({id:userId,c:this.c});if(!user)return false;const[permission]=await this.c.get("db").select().from(core_admin_permissions).where(or(eq(core_admin_permissions.userId,user.id),eq(core_admin_permissions.roleId,user.roleId))).limit(1);return!!permission}async createSessionByUserId(userId){const isAdmin=await this.checkIfUserIsAdmin(userId);if(!isAdmin){throw new HTTPException(403,{message:"Forbidden"})}const randomBytes=new Uint8Array(64);crypto.getRandomValues(randomBytes);let token="";for(const byte of randomBytes){token+=byte.toString(16).padStart(2,"0")}const hashedToken=await this.hashToken(token);const device=await new DeviceModel(this.c).getDeviceId();await this.c.get("db").insert(core_admin_sessions).values({token:hashedToken,userId,expiresAt:new Date(Date.now()+this.c.get("core").authorization.adminCookieExpires),deviceId:device.id});setCookie(this.c,this.c.get("core").authorization.adminCookieName,token,{httpOnly:true,secure:this.c.get("core").authorization.cookieSecure,path:"/",expires:new Date(Date.now()+this.c.get("core").authorization.adminCookieExpires),domain:CONFIG.web.hostname});return{token}}async deleteSession(){const token=getCookie(this.c,this.c.get("core").authorization.adminCookieName);if(!token)return;const hashedToken=await this.hashToken(token);const device=await new DeviceModel(this.c).getDeviceId();await this.c.get("db").delete(core_admin_sessions).where(eq(core_admin_sessions.token,hashedToken));await this.c.get("cache").deleteSystem(adminSessionCacheKey(hashedToken,device.id));deleteCookie(this.c,this.c.get("core").authorization.adminCookieName,{path:"/",domain:CONFIG.web.hostname})}async getUser(){const{authorization}=this.c.get("core");const token=getCookie(this.c,authorization.adminCookieName);if(!token)return null;const device=await new DeviceModel(this.c).getDeviceId();if(!device)return null;const hashedToken=await this.hashToken(token);const cache=this.c.get("cache");const cacheKey=adminSessionCacheKey(hashedToken,device.id);const cached=await cache.getSystem(cacheKey);if(cached){const user=reviveSessionUser(cached);if(!await this.checkIfUserIsAdmin(user.id)){await this.deleteSession();return null}return user}const[session]=await this.c.get("db").select({userId:core_admin_sessions.userId,expiresAt:core_admin_sessions.expiresAt}).from(core_admin_sessions).where(and(eq(core_admin_sessions.token,hashedToken),eq(core_admin_sessions.deviceId,device.id),gt(core_admin_sessions.expiresAt,new Date))).limit(1);if(!session){deleteCookie(this.c,this.c.get("core").authorization.adminCookieName,{path:"/",domain:CONFIG.web.hostname});return null}const user=await new UserModel().getUserById({id:session.userId,c:this.c});if(!user)return null;const isStillAdmin=await this.checkIfUserIsAdmin(user.id);if(!isStillAdmin){await this.deleteSession();return null}const ttl=sessionCacheTtl(session.expiresAt);if(ttl>0)await cache.setSystem(cacheKey,user,ttl);return user}}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { getUserById } from "./user/get-user-by-id";
|
|
2
|
+
export type SessionUser = NonNullable<Awaited<ReturnType<typeof getUserById>>>;
|
|
3
|
+
export declare const SESSION_CACHE_TTL_SECONDS = 60;
|
|
4
|
+
export declare const sessionCacheKey: (hashedToken: string, deviceId: number) => string;
|
|
5
|
+
export declare const adminSessionCacheKey: (hashedToken: string, deviceId: number) => string;
|
|
6
|
+
export declare const sessionCacheTtl: (expiresAt: Date) => number;
|
|
7
|
+
export declare const reviveSessionUser: (user: SessionUser) => SessionUser;
|
|
8
|
+
//# sourceMappingURL=session-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-cache.d.ts","sourceRoot":"","sources":["../../../../src/api/models/session-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;AAE/E,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C,eAAO,MAAM,eAAe,GAC1B,aAAa,MAAM,EACnB,UAAU,MAAM,KACf,MAAmD,CAAC;AAEvD,eAAO,MAAM,oBAAoB,GAC/B,aAAa,MAAM,EACnB,UAAU,MAAM,KACf,MAAoD,CAAC;AAExD,eAAO,MAAM,eAAe,GAAI,WAAW,IAAI,KAAG,MAI/C,CAAC;AAEJ,eAAO,MAAM,iBAAiB,GAAI,MAAM,WAAW,KAAG,WAIpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const SESSION_CACHE_TTL_SECONDS=60;export const sessionCacheKey=(hashedToken,deviceId)=>`session:user:${deviceId}:${hashedToken}`;export const adminSessionCacheKey=(hashedToken,deviceId)=>`session:admin:${deviceId}:${hashedToken}`;export const sessionCacheTtl=expiresAt=>Math.min(SESSION_CACHE_TTL_SECONDS,Math.floor((expiresAt.getTime()-Date.now())/1e3));export const reviveSessionUser=user=>({...user,createdAt:new Date(user.createdAt),birthday:user.birthday?new Date(user.birthday):null});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/api/models/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/api/models/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAiBpC,qBAAa,YAAY;gBACX,CAAC,EAAE,OAAO;IAGtB,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;YAEhB,SAAS;IAejB,qBAAqB,CAAC,MAAM,EAAE,MAAM;;;IA0CpC,aAAa;IAkCb,OAAO;;;;;;;;;;;;;CAuDd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{and,eq,gt}from"drizzle-orm";import{deleteCookie,getCookie,setCookie}from"hono/cookie";import{core_sessions}from"../../database/sessions.js";import{CONFIG}from"../../lib/config.js";import{DeviceModel}from"./device.js";import{UserModel}from"./user.js";export class SessionModel{constructor(c){this.c=c}c;async hashToken(token){const encoder=new TextEncoder;const data=encoder.encode(token);const hashBuffer=await crypto.subtle.digest("SHA-256",data);const bytes=new Uint8Array(hashBuffer);let result="";for(const byte of bytes){result+=byte.toString(16).padStart(2,"0")}return result}async createSessionByUserId(userId){const randomBytes=new Uint8Array(64);crypto.getRandomValues(randomBytes);let token="";for(const byte of randomBytes){token+=byte.toString(16).padStart(2,"0")}const device=await new DeviceModel(this.c).getDeviceId();const hashedToken=await this.hashToken(token);await this.c.get("db").insert(core_sessions).values({token:hashedToken,userId,expiresAt:new Date(Date.now()+this.c.get("core").authorization.cookie_expires),deviceId:device.id});setCookie(this.c,this.c.get("core").authorization.cookieName,token,{httpOnly:true,secure:this.c.get("core").authorization.cookieSecure,path:"/",expires:this.c.get("core").authorization.cookie_expires>0?new Date(Date.now()+this.c.get("core").authorization.cookie_expires):undefined,domain:CONFIG.web.hostname});return{token}}async deleteSession(){const token=getCookie(this.c,this.c.get("core").authorization.cookieName);const device=await new DeviceModel(this.c).getDeviceId();if(!(token&&device.id)){deleteCookie(this.c,this.c.get("core").authorization.cookieName);return}const hashedToken=await this.hashToken(token);await this.c.get("db").delete(core_sessions).where(and(eq(core_sessions.token,hashedToken),eq(core_sessions.deviceId,device.id)));deleteCookie(this.c,this.c.get("core").authorization.cookieName)}async getUser(){const token=getCookie(this.c,this.c.get("core").authorization.cookieName);if(!token)return null;const device=await new DeviceModel(this.c).getDeviceId();if(!device)return null;const hashedToken=await this.hashToken(token);const[session]=await this.c.get("db").select({userId:core_sessions.userId}).from(core_sessions).where(and(eq(core_sessions.token,hashedToken),eq(core_sessions.deviceId,device.id),gt(core_sessions.expiresAt,new Date))).limit(1);if(!session){deleteCookie(this.c,this.c.get("core").authorization.cookieName);return null}const user=await new UserModel().getUserById({id:session.userId,c:this.c});if(!user)return null;return user}}
|
|
1
|
+
import{and,eq,gt}from"drizzle-orm";import{deleteCookie,getCookie,setCookie}from"hono/cookie";import{core_sessions}from"../../database/sessions.js";import{CONFIG}from"../../lib/config.js";import{DeviceModel}from"./device.js";import{reviveSessionUser,sessionCacheKey,sessionCacheTtl}from"./session-cache.js";import{UserModel}from"./user.js";export class SessionModel{constructor(c){this.c=c}c;async hashToken(token){const encoder=new TextEncoder;const data=encoder.encode(token);const hashBuffer=await crypto.subtle.digest("SHA-256",data);const bytes=new Uint8Array(hashBuffer);let result="";for(const byte of bytes){result+=byte.toString(16).padStart(2,"0")}return result}async createSessionByUserId(userId){const randomBytes=new Uint8Array(64);crypto.getRandomValues(randomBytes);let token="";for(const byte of randomBytes){token+=byte.toString(16).padStart(2,"0")}const device=await new DeviceModel(this.c).getDeviceId();const hashedToken=await this.hashToken(token);await this.c.get("db").insert(core_sessions).values({token:hashedToken,userId,expiresAt:new Date(Date.now()+this.c.get("core").authorization.cookie_expires),deviceId:device.id});setCookie(this.c,this.c.get("core").authorization.cookieName,token,{httpOnly:true,secure:this.c.get("core").authorization.cookieSecure,path:"/",expires:this.c.get("core").authorization.cookie_expires>0?new Date(Date.now()+this.c.get("core").authorization.cookie_expires):undefined,domain:CONFIG.web.hostname});return{token}}async deleteSession(){const token=getCookie(this.c,this.c.get("core").authorization.cookieName);const device=await new DeviceModel(this.c).getDeviceId();if(!(token&&device.id)){deleteCookie(this.c,this.c.get("core").authorization.cookieName);return}const hashedToken=await this.hashToken(token);await this.c.get("db").delete(core_sessions).where(and(eq(core_sessions.token,hashedToken),eq(core_sessions.deviceId,device.id)));await this.c.get("cache").deleteSystem(sessionCacheKey(hashedToken,device.id));deleteCookie(this.c,this.c.get("core").authorization.cookieName)}async getUser(){const token=getCookie(this.c,this.c.get("core").authorization.cookieName);if(!token)return null;const device=await new DeviceModel(this.c).getDeviceId();if(!device)return null;const hashedToken=await this.hashToken(token);const cache=this.c.get("cache");const cacheKey=sessionCacheKey(hashedToken,device.id);const cached=await cache.getSystem(cacheKey);if(cached)return reviveSessionUser(cached);const[session]=await this.c.get("db").select({userId:core_sessions.userId,expiresAt:core_sessions.expiresAt}).from(core_sessions).where(and(eq(core_sessions.token,hashedToken),eq(core_sessions.deviceId,device.id),gt(core_sessions.expiresAt,new Date))).limit(1);if(!session){deleteCookie(this.c,this.c.get("core").authorization.cookieName);return null}const user=await new UserModel().getUserById({id:session.userId,c:this.c});if(!user)return null;const ttl=sessionCacheTtl(session.expiresAt);if(ttl>0)await cache.setSystem(cacheKey,user,ttl);return user}}
|