@vitnode/core 1.2.0-canary.76 → 1.2.0-canary.78
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/cli.mjs +2 -0
- package/dist/scripts/build.d.ts +2 -0
- package/dist/scripts/build.d.ts.map +1 -0
- package/dist/scripts/dev.d.ts +4 -0
- package/dist/scripts/dev.d.ts.map +1 -0
- package/dist/scripts/get-config.d.ts +12 -0
- package/dist/scripts/get-config.d.ts.map +1 -0
- package/dist/scripts/i18n-check.d.ts +2 -0
- package/dist/scripts/i18n-check.d.ts.map +1 -0
- package/dist/scripts/i18n-create.d.ts +20 -0
- package/dist/scripts/i18n-create.d.ts.map +1 -0
- package/dist/scripts/i18n-delete.d.ts +4 -0
- package/dist/scripts/i18n-delete.d.ts.map +1 -0
- package/dist/scripts/i18n-shared.d.ts +51 -0
- package/dist/scripts/i18n-shared.d.ts.map +1 -0
- package/dist/scripts/i18n-update.d.ts +3 -0
- package/dist/scripts/i18n-update.d.ts.map +1 -0
- package/dist/scripts/plugin.d.ts +4 -0
- package/dist/scripts/plugin.d.ts.map +1 -0
- package/dist/scripts/prepare-database.d.ts +8 -0
- package/dist/scripts/prepare-database.d.ts.map +1 -0
- package/dist/scripts/prepare-plugins-files.d.ts +2 -0
- package/dist/scripts/prepare-plugins-files.d.ts.map +1 -0
- package/dist/scripts/run-interactive-shell-command.d.ts +2 -0
- package/dist/scripts/run-interactive-shell-command.d.ts.map +1 -0
- package/dist/scripts/scripts.d.ts +3 -0
- package/dist/scripts/scripts.d.ts.map +1 -0
- package/dist/scripts/scripts.js +58 -2
- package/dist/scripts/shared/file-utils.d.ts +16 -0
- package/dist/scripts/shared/file-utils.d.ts.map +1 -0
- package/dist/src/api/adapters/events/local.d.ts +3 -0
- package/dist/src/api/adapters/events/local.d.ts.map +1 -0
- package/dist/src/api/adapters/events/local.js +1 -0
- package/dist/src/api/adapters/search/postgres.d.ts +3 -0
- package/dist/src/api/adapters/search/postgres.d.ts.map +1 -0
- package/dist/src/api/adapters/search/postgres.js +1 -0
- package/dist/src/api/adapters/sso/discord.d.ts +4 -7
- package/dist/src/api/adapters/sso/discord.d.ts.map +1 -1
- package/dist/src/api/adapters/sso/discord.js +1 -2
- package/dist/src/api/adapters/sso/facebook.d.ts +4 -7
- package/dist/src/api/adapters/sso/facebook.d.ts.map +1 -1
- package/dist/src/api/adapters/sso/facebook.js +1 -2
- package/dist/src/api/adapters/sso/google.d.ts +4 -7
- package/dist/src/api/adapters/sso/google.d.ts.map +1 -1
- package/dist/src/api/adapters/sso/google.js +1 -2
- package/dist/src/api/adapters/storage/local.d.ts +4 -7
- package/dist/src/api/adapters/storage/local.d.ts.map +1 -1
- package/dist/src/api/adapters/storage/local.js +1 -2
- package/dist/src/api/config.d.ts +16 -18
- package/dist/src/api/config.d.ts.map +1 -1
- package/dist/src/api/config.js +1 -2
- package/dist/src/api/lib/cache-client.d.ts +2 -5
- package/dist/src/api/lib/cache-client.d.ts.map +1 -1
- package/dist/src/api/lib/cache-client.js +1 -2
- package/dist/src/api/lib/cache.d.ts +29 -32
- package/dist/src/api/lib/cache.d.ts.map +1 -1
- package/dist/src/api/lib/cache.js +1 -2
- package/dist/src/api/lib/check-plugin-id.d.ts +13 -16
- package/dist/src/api/lib/check-plugin-id.d.ts.map +1 -1
- package/dist/src/api/lib/check-plugin-id.js +1 -2
- package/dist/src/api/lib/check-staff-permission.d.ts +14 -17
- package/dist/src/api/lib/check-staff-permission.d.ts.map +1 -1
- package/dist/src/api/lib/check-staff-permission.js +1 -2
- package/dist/src/api/lib/cron.d.ts +16 -17
- package/dist/src/api/lib/cron.d.ts.map +1 -1
- package/dist/src/api/lib/cron.js +1 -2
- package/dist/src/api/lib/events.d.ts +15 -0
- package/dist/src/api/lib/events.d.ts.map +1 -0
- package/dist/src/api/lib/events.js +1 -0
- package/dist/src/api/lib/logger-middleware.d.ts +6 -9
- package/dist/src/api/lib/logger-middleware.d.ts.map +1 -1
- package/dist/src/api/lib/logger-middleware.js +1 -2
- package/dist/src/api/lib/module.d.ts +29 -29
- package/dist/src/api/lib/module.d.ts.map +1 -1
- package/dist/src/api/lib/module.js +1 -2
- package/dist/src/api/lib/permission-staff.d.ts +24 -31
- package/dist/src/api/lib/permission-staff.d.ts.map +1 -1
- package/dist/src/api/lib/permission-staff.js +1 -2
- package/dist/src/api/lib/plugin.d.ts +24 -19
- package/dist/src/api/lib/plugin.d.ts.map +1 -1
- package/dist/src/api/lib/plugin.js +1 -2
- package/dist/src/api/lib/queue.d.ts +11 -14
- package/dist/src/api/lib/queue.d.ts.map +1 -1
- package/dist/src/api/lib/queue.js +1 -2
- package/dist/src/api/lib/resolve-role-names.d.ts +5 -8
- package/dist/src/api/lib/resolve-role-names.d.ts.map +1 -1
- package/dist/src/api/lib/resolve-role-names.js +1 -2
- package/dist/src/api/lib/route.d.ts +20 -23
- package/dist/src/api/lib/route.d.ts.map +1 -1
- package/dist/src/api/lib/route.js +1 -2
- package/dist/src/api/lib/save-language-words.d.ts +11 -0
- package/dist/src/api/lib/save-language-words.d.ts.map +1 -0
- package/dist/src/api/lib/save-language-words.js +1 -0
- package/dist/src/api/lib/staff-permission.d.ts +3 -6
- package/dist/src/api/lib/staff-permission.d.ts.map +1 -1
- package/dist/src/api/lib/staff-permission.js +1 -2
- package/dist/src/api/lib/websocket.d.ts +21 -24
- package/dist/src/api/lib/websocket.d.ts.map +1 -1
- package/dist/src/api/lib/websocket.js +1 -2
- package/dist/src/api/lib/with-pagination.d.ts +45 -48
- package/dist/src/api/lib/with-pagination.d.ts.map +1 -1
- package/dist/src/api/lib/with-pagination.js +1 -2
- package/dist/src/api/middlewares/captcha.middleware.d.ts +2 -5
- package/dist/src/api/middlewares/captcha.middleware.d.ts.map +1 -1
- package/dist/src/api/middlewares/captcha.middleware.js +1 -2
- package/dist/src/api/middlewares/cron-auth.middleware.d.ts +2 -5
- package/dist/src/api/middlewares/cron-auth.middleware.d.ts.map +1 -1
- package/dist/src/api/middlewares/cron-auth.middleware.js +1 -2
- package/dist/src/api/middlewares/global.middleware.d.ts +115 -95
- package/dist/src/api/middlewares/global.middleware.d.ts.map +1 -1
- package/dist/src/api/middlewares/global.middleware.js +1 -2
- package/dist/src/api/middlewares/plugin.middleware.d.ts +2 -5
- package/dist/src/api/middlewares/plugin.middleware.d.ts.map +1 -1
- package/dist/src/api/middlewares/plugin.middleware.js +1 -2
- package/dist/src/api/middlewares/rate-limiter.middleware.d.ts +7 -7
- package/dist/src/api/middlewares/rate-limiter.middleware.d.ts.map +1 -1
- package/dist/src/api/middlewares/rate-limiter.middleware.js +1 -2
- package/dist/src/api/models/device.d.ts +11 -14
- package/dist/src/api/models/device.d.ts.map +1 -1
- package/dist/src/api/models/device.js +1 -2
- package/dist/src/api/models/email.d.ts +41 -43
- package/dist/src/api/models/email.d.ts.map +1 -1
- package/dist/src/api/models/email.js +1 -2
- package/dist/src/api/models/events.d.ts +66 -0
- package/dist/src/api/models/events.d.ts.map +1 -0
- package/dist/src/api/models/events.js +1 -0
- package/dist/src/api/models/i18n.d.ts +15 -0
- package/dist/src/api/models/i18n.d.ts.map +1 -0
- package/dist/src/api/models/i18n.js +1 -0
- package/dist/src/api/models/password.d.ts +6 -9
- package/dist/src/api/models/password.d.ts.map +1 -1
- package/dist/src/api/models/password.js +1 -2
- package/dist/src/api/models/queue.d.ts +14 -17
- package/dist/src/api/models/queue.d.ts.map +1 -1
- package/dist/src/api/models/queue.js +1 -2
- package/dist/src/api/models/search.d.ts +102 -0
- package/dist/src/api/models/search.d.ts.map +1 -0
- package/dist/src/api/models/search.js +1 -0
- package/dist/src/api/models/session-admin.d.ts +23 -26
- package/dist/src/api/models/session-admin.d.ts.map +1 -1
- package/dist/src/api/models/session-admin.js +1 -2
- package/dist/src/api/models/session-cache.d.ts +7 -10
- package/dist/src/api/models/session-cache.d.ts.map +1 -1
- package/dist/src/api/models/session-cache.js +1 -2
- package/dist/src/api/models/session.d.ts +22 -25
- package/dist/src/api/models/session.d.ts.map +1 -1
- package/dist/src/api/models/session.js +1 -2
- package/dist/src/api/models/sso.d.ts +34 -37
- package/dist/src/api/models/sso.d.ts.map +1 -1
- package/dist/src/api/models/sso.js +1 -2
- package/dist/src/api/models/storage.d.ts +33 -36
- package/dist/src/api/models/storage.d.ts.map +1 -1
- package/dist/src/api/models/storage.js +1 -2
- package/dist/src/api/models/user/get-user-by-id.d.ts +15 -18
- package/dist/src/api/models/user/get-user-by-id.d.ts.map +1 -1
- package/dist/src/api/models/user/get-user-by-id.js +1 -2
- package/dist/src/api/models/user/get-user-by-name-code.d.ts +15 -18
- package/dist/src/api/models/user/get-user-by-name-code.d.ts.map +1 -1
- package/dist/src/api/models/user/get-user-by-name-code.js +1 -2
- package/dist/src/api/models/user/sign-in-with-passwords.d.ts +7 -10
- package/dist/src/api/models/user/sign-in-with-passwords.d.ts.map +1 -1
- package/dist/src/api/models/user/sign-in-with-passwords.js +1 -2
- package/dist/src/api/models/user/sign-up.d.ts +18 -21
- package/dist/src/api/models/user/sign-up.d.ts.map +1 -1
- package/dist/src/api/models/user/sign-up.js +1 -2
- package/dist/src/api/models/user.d.ts +60 -63
- package/dist/src/api/models/user.d.ts.map +1 -1
- package/dist/src/api/models/user.js +1 -2
- package/dist/src/api/modules/admin/admin.module.d.ts +1510 -1307
- package/dist/src/api/modules/admin/admin.module.d.ts.map +1 -1
- package/dist/src/api/modules/admin/admin.module.js +1 -2
- package/dist/src/api/modules/admin/advanced/advanced.admin.module.d.ts +150 -155
- 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 -2
- package/dist/src/api/modules/admin/advanced/cron/cron.admin.module.d.ts +91 -96
- package/dist/src/api/modules/admin/advanced/cron/cron.admin.module.d.ts.map +1 -1
- package/dist/src/api/modules/admin/advanced/cron/cron.admin.module.js +1 -2
- package/dist/src/api/modules/admin/advanced/cron/routes/get.route.d.ts +49 -53
- package/dist/src/api/modules/admin/advanced/cron/routes/get.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/advanced/cron/routes/get.route.js +1 -2
- package/dist/src/api/modules/admin/advanced/cron/routes/run.route.d.ts +42 -46
- package/dist/src/api/modules/admin/advanced/cron/routes/run.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/advanced/cron/routes/run.route.js +1 -2
- package/dist/src/api/modules/admin/advanced/queue/queue.admin.module.d.ts +60 -65
- package/dist/src/api/modules/admin/advanced/queue/queue.admin.module.d.ts.map +1 -1
- package/dist/src/api/modules/admin/advanced/queue/queue.admin.module.js +1 -2
- package/dist/src/api/modules/admin/advanced/queue/routes/get.route.d.ts +59 -63
- package/dist/src/api/modules/admin/advanced/queue/routes/get.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/advanced/queue/routes/get.route.js +1 -2
- package/dist/src/api/modules/admin/debug/debug.admin.module.d.ts +261 -207
- 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 -2
- package/dist/src/api/modules/admin/debug/routes/integrations.route.d.ts +50 -54
- package/dist/src/api/modules/admin/debug/routes/integrations.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/debug/routes/integrations.route.js +1 -2
- package/dist/src/api/modules/admin/debug/routes/logs.route.d.ts +60 -64
- 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 -2
- package/dist/src/api/modules/admin/debug/routes/queue.route.d.ts +36 -40
- package/dist/src/api/modules/admin/debug/routes/queue.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/debug/routes/queue.route.js +1 -2
- package/dist/src/api/modules/admin/debug/routes/rebuild-search.route.d.ts +36 -0
- package/dist/src/api/modules/admin/debug/routes/rebuild-search.route.d.ts.map +1 -0
- package/dist/src/api/modules/admin/debug/routes/rebuild-search.route.js +1 -0
- package/dist/src/api/modules/admin/debug/routes/search-status.route.d.ts +32 -0
- package/dist/src/api/modules/admin/debug/routes/search-status.route.d.ts.map +1 -0
- package/dist/src/api/modules/admin/debug/routes/search-status.route.js +1 -0
- package/dist/src/api/modules/admin/debug/routes/send-test-email.route.d.ts +36 -40
- package/dist/src/api/modules/admin/debug/routes/send-test-email.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/debug/routes/send-test-email.route.js +1 -2
- package/dist/src/api/modules/admin/debug/routes/test-storage-upload.route.d.ts +30 -34
- package/dist/src/api/modules/admin/debug/routes/test-storage-upload.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/debug/routes/test-storage-upload.route.js +1 -2
- package/dist/src/api/modules/admin/files/files.admin.module.d.ts +116 -121
- package/dist/src/api/modules/admin/files/files.admin.module.d.ts.map +1 -1
- package/dist/src/api/modules/admin/files/files.admin.module.js +1 -2
- package/dist/src/api/modules/admin/files/routes/delete.route.d.ts +22 -26
- package/dist/src/api/modules/admin/files/routes/delete.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/files/routes/delete.route.js +1 -2
- package/dist/src/api/modules/admin/files/routes/download.route.d.ts +27 -31
- package/dist/src/api/modules/admin/files/routes/download.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/files/routes/download.route.js +1 -2
- package/dist/src/api/modules/admin/files/routes/list.route.d.ts +66 -70
- package/dist/src/api/modules/admin/files/routes/list.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/files/routes/list.route.js +1 -2
- package/dist/src/api/modules/admin/roles/lib/assert-manage-admin-role.d.ts +6 -0
- package/dist/src/api/modules/admin/roles/lib/assert-manage-admin-role.d.ts.map +1 -0
- package/dist/src/api/modules/admin/roles/lib/assert-manage-admin-role.js +1 -0
- package/dist/src/api/modules/admin/roles/roles.admin.module.d.ts +250 -106
- package/dist/src/api/modules/admin/roles/roles.admin.module.d.ts.map +1 -1
- package/dist/src/api/modules/admin/roles/roles.admin.module.js +1 -2
- package/dist/src/api/modules/admin/roles/routes/create.route.d.ts +58 -0
- package/dist/src/api/modules/admin/roles/routes/create.route.d.ts.map +1 -0
- package/dist/src/api/modules/admin/roles/routes/create.route.js +1 -0
- package/dist/src/api/modules/admin/roles/routes/delete.route.d.ts +52 -0
- package/dist/src/api/modules/admin/roles/routes/delete.route.d.ts.map +1 -0
- package/dist/src/api/modules/admin/roles/routes/delete.route.js +1 -0
- package/dist/src/api/modules/admin/roles/routes/list.route.d.ts +61 -61
- package/dist/src/api/modules/admin/roles/routes/list.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/roles/routes/list.route.js +1 -2
- package/dist/src/api/modules/admin/roles/routes/show.route.d.ts +46 -47
- package/dist/src/api/modules/admin/roles/routes/show.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/roles/routes/show.route.js +1 -2
- package/dist/src/api/modules/admin/roles/routes/update.route.d.ts +66 -0
- package/dist/src/api/modules/admin/roles/routes/update.route.d.ts.map +1 -0
- package/dist/src/api/modules/admin/roles/routes/update.route.js +1 -0
- package/dist/src/api/modules/admin/routes/notifications.route.d.ts +47 -51
- package/dist/src/api/modules/admin/routes/notifications.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/routes/notifications.route.js +1 -2
- package/dist/src/api/modules/admin/routes/session.route.d.ts +39 -43
- 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 -2
- package/dist/src/api/modules/admin/staff/lib/resolve-staff-edges.d.ts +29 -34
- package/dist/src/api/modules/admin/staff/lib/resolve-staff-edges.d.ts.map +1 -1
- package/dist/src/api/modules/admin/staff/lib/resolve-staff-edges.js +1 -2
- package/dist/src/api/modules/admin/staff/lib/schema.d.ts +82 -85
- package/dist/src/api/modules/admin/staff/lib/schema.d.ts.map +1 -1
- package/dist/src/api/modules/admin/staff/lib/schema.js +1 -2
- package/dist/src/api/modules/admin/staff/routes/admins.route.d.ts +71 -75
- package/dist/src/api/modules/admin/staff/routes/admins.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/staff/routes/admins.route.js +1 -2
- package/dist/src/api/modules/admin/staff/routes/create.route.d.ts +43 -47
- package/dist/src/api/modules/admin/staff/routes/create.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/staff/routes/create.route.js +1 -2
- package/dist/src/api/modules/admin/staff/routes/delete.route.d.ts +29 -33
- package/dist/src/api/modules/admin/staff/routes/delete.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/staff/routes/delete.route.js +1 -2
- package/dist/src/api/modules/admin/staff/routes/moderators.route.d.ts +71 -75
- package/dist/src/api/modules/admin/staff/routes/moderators.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/staff/routes/moderators.route.js +1 -2
- package/dist/src/api/modules/admin/staff/routes/permission-catalog.route.d.ts +26 -30
- package/dist/src/api/modules/admin/staff/routes/permission-catalog.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/staff/routes/permission-catalog.route.js +1 -2
- package/dist/src/api/modules/admin/staff/routes/show-permissions.route.d.ts +68 -72
- package/dist/src/api/modules/admin/staff/routes/show-permissions.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/staff/routes/show-permissions.route.js +1 -2
- package/dist/src/api/modules/admin/staff/routes/update-permissions.route.d.ts +53 -57
- package/dist/src/api/modules/admin/staff/routes/update-permissions.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/staff/routes/update-permissions.route.js +1 -2
- package/dist/src/api/modules/admin/staff/staff.admin.module.d.ts +362 -367
- package/dist/src/api/modules/admin/staff/staff.admin.module.d.ts.map +1 -1
- package/dist/src/api/modules/admin/staff/staff.admin.module.js +1 -2
- package/dist/src/api/modules/admin/users/lib/assert-edit-user-permission.d.ts +3 -6
- package/dist/src/api/modules/admin/users/lib/assert-edit-user-permission.d.ts.map +1 -1
- package/dist/src/api/modules/admin/users/lib/assert-edit-user-permission.js +1 -2
- package/dist/src/api/modules/admin/users/routes/create.route.d.ts +39 -43
- 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 -2
- package/dist/src/api/modules/admin/users/routes/list.route.d.ts +68 -72
- 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 -2
- package/dist/src/api/modules/admin/users/routes/show.route.d.ts +59 -63
- 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 -2
- package/dist/src/api/modules/admin/users/routes/update.route.d.ts +71 -75
- package/dist/src/api/modules/admin/users/routes/update.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/users/routes/update.route.js +1 -2
- package/dist/src/api/modules/admin/users/routes/users.route.d.ts +55 -59
- package/dist/src/api/modules/admin/users/routes/users.route.d.ts.map +1 -1
- package/dist/src/api/modules/admin/users/routes/users.route.js +1 -2
- package/dist/src/api/modules/admin/users/routes/verify-email.route.d.ts +33 -37
- 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 -2
- package/dist/src/api/modules/admin/users/users.admin.module.d.ts +261 -266
- 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 -2
- package/dist/src/api/modules/cron/cron/clean.cron.d.ts +1 -5
- package/dist/src/api/modules/cron/cron/clean.cron.d.ts.map +1 -1
- package/dist/src/api/modules/cron/cron/clean.cron.js +1 -2
- package/dist/src/api/modules/cron/cron.module.d.ts +18 -23
- package/dist/src/api/modules/cron/cron.module.d.ts.map +1 -1
- package/dist/src/api/modules/cron/cron.module.js +1 -2
- package/dist/src/api/modules/cron/helpers/process-cron-jobs.d.ts +28 -30
- package/dist/src/api/modules/cron/helpers/process-cron-jobs.d.ts.map +1 -1
- package/dist/src/api/modules/cron/helpers/process-cron-jobs.js +1 -2
- package/dist/src/api/modules/cron/helpers/register-cron-jobs.d.ts +4 -0
- package/dist/src/api/modules/cron/helpers/register-cron-jobs.d.ts.map +1 -0
- package/dist/src/api/modules/cron/helpers/register-cron-jobs.js +1 -0
- package/dist/src/api/modules/cron/routes/cron.route.d.ts +18 -22
- package/dist/src/api/modules/cron/routes/cron.route.d.ts.map +1 -1
- package/dist/src/api/modules/cron/routes/cron.route.js +1 -2
- package/dist/src/api/modules/middleware/middleware.module.d.ts +27 -32
- package/dist/src/api/modules/middleware/middleware.module.d.ts.map +1 -1
- package/dist/src/api/modules/middleware/middleware.module.js +1 -2
- package/dist/src/api/modules/middleware/route.d.ts +41 -45
- package/dist/src/api/modules/middleware/route.d.ts.map +1 -1
- package/dist/src/api/modules/middleware/route.js +1 -2
- package/dist/src/api/modules/queue/cron/process-queue.cron.d.ts +1 -5
- package/dist/src/api/modules/queue/cron/process-queue.cron.d.ts.map +1 -1
- package/dist/src/api/modules/queue/cron/process-queue.cron.js +1 -2
- package/dist/src/api/modules/queue/helpers/process-queue-tasks.d.ts +3 -6
- package/dist/src/api/modules/queue/helpers/process-queue-tasks.d.ts.map +1 -1
- package/dist/src/api/modules/queue/helpers/process-queue-tasks.js +1 -2
- package/dist/src/api/modules/queue/queue.module.d.ts +1 -6
- package/dist/src/api/modules/queue/queue.module.d.ts.map +1 -1
- package/dist/src/api/modules/queue/queue.module.js +1 -2
- package/dist/src/api/modules/queue/tasks/send-email.task.d.ts +9 -13
- package/dist/src/api/modules/queue/tasks/send-email.task.d.ts.map +1 -1
- package/dist/src/api/modules/queue/tasks/send-email.task.js +1 -2
- package/dist/src/api/modules/search/routes/search.route.d.ts +91 -0
- package/dist/src/api/modules/search/routes/search.route.d.ts.map +1 -0
- package/dist/src/api/modules/search/routes/search.route.js +1 -0
- package/dist/src/api/modules/search/search.module.d.ts +68 -0
- package/dist/src/api/modules/search/search.module.d.ts.map +1 -0
- package/dist/src/api/modules/search/search.module.js +1 -0
- package/dist/src/api/modules/search/tasks/rebuild-index.task.d.ts +2 -0
- package/dist/src/api/modules/search/tasks/rebuild-index.task.d.ts.map +1 -0
- package/dist/src/api/modules/search/tasks/rebuild-index.task.js +1 -0
- package/dist/src/api/modules/users/avatar-color.d.ts +1 -4
- package/dist/src/api/modules/users/avatar-color.d.ts.map +1 -1
- package/dist/src/api/modules/users/avatar-color.js +1 -2
- package/dist/src/api/modules/users/files/files.module.d.ts +112 -117
- package/dist/src/api/modules/users/files/files.module.d.ts.map +1 -1
- package/dist/src/api/modules/users/files/files.module.js +1 -2
- package/dist/src/api/modules/users/files/routes/delete.route.d.ts +25 -29
- package/dist/src/api/modules/users/files/routes/delete.route.d.ts.map +1 -1
- package/dist/src/api/modules/users/files/routes/delete.route.js +1 -2
- package/dist/src/api/modules/users/files/routes/download.route.d.ts +30 -34
- package/dist/src/api/modules/users/files/routes/download.route.d.ts.map +1 -1
- package/dist/src/api/modules/users/files/routes/download.route.js +1 -2
- package/dist/src/api/modules/users/files/routes/list.route.d.ts +56 -60
- package/dist/src/api/modules/users/files/routes/list.route.d.ts.map +1 -1
- package/dist/src/api/modules/users/files/routes/list.route.js +1 -2
- package/dist/src/api/modules/users/routes/change-password.route.d.ts +27 -31
- package/dist/src/api/modules/users/routes/change-password.route.d.ts.map +1 -1
- package/dist/src/api/modules/users/routes/change-password.route.js +1 -2
- package/dist/src/api/modules/users/routes/devices.route.d.ts +34 -0
- package/dist/src/api/modules/users/routes/devices.route.d.ts.map +1 -0
- package/dist/src/api/modules/users/routes/devices.route.js +1 -0
- package/dist/src/api/modules/users/routes/permissions.route.d.ts +21 -25
- package/dist/src/api/modules/users/routes/permissions.route.d.ts.map +1 -1
- package/dist/src/api/modules/users/routes/permissions.route.js +1 -2
- package/dist/src/api/modules/users/routes/reset-passowrd.route.d.ts +21 -25
- package/dist/src/api/modules/users/routes/reset-passowrd.route.d.ts.map +1 -1
- package/dist/src/api/modules/users/routes/reset-passowrd.route.js +1 -2
- package/dist/src/api/modules/users/routes/revoke-device.route.d.ts +42 -0
- package/dist/src/api/modules/users/routes/revoke-device.route.d.ts.map +1 -0
- package/dist/src/api/modules/users/routes/revoke-device.route.js +1 -0
- package/dist/src/api/modules/users/routes/session.route.d.ts +29 -33
- 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 -2
- package/dist/src/api/modules/users/routes/sign-in.route.d.ts +37 -41
- package/dist/src/api/modules/users/routes/sign-in.route.d.ts.map +1 -1
- package/dist/src/api/modules/users/routes/sign-in.route.js +1 -2
- package/dist/src/api/modules/users/routes/sign-out.route.d.ts +21 -25
- package/dist/src/api/modules/users/routes/sign-out.route.d.ts.map +1 -1
- package/dist/src/api/modules/users/routes/sign-out.route.js +1 -2
- package/dist/src/api/modules/users/routes/sign-up.route.d.ts +44 -48
- package/dist/src/api/modules/users/routes/sign-up.route.d.ts.map +1 -1
- package/dist/src/api/modules/users/routes/sign-up.route.js +1 -2
- package/dist/src/api/modules/users/routes/test.route.d.ts +21 -25
- package/dist/src/api/modules/users/routes/test.route.d.ts.map +1 -1
- package/dist/src/api/modules/users/routes/test.route.js +1 -2
- package/dist/src/api/modules/users/sso/routes/callback.route.d.ts +29 -33
- package/dist/src/api/modules/users/sso/routes/callback.route.d.ts.map +1 -1
- package/dist/src/api/modules/users/sso/routes/callback.route.js +1 -2
- package/dist/src/api/modules/users/sso/routes/create-url.route.d.ts +21 -25
- package/dist/src/api/modules/users/sso/routes/create-url.route.d.ts.map +1 -1
- package/dist/src/api/modules/users/sso/routes/create-url.route.js +1 -2
- package/dist/src/api/modules/users/sso/sso.module.d.ts +49 -54
- package/dist/src/api/modules/users/sso/sso.module.d.ts.map +1 -1
- package/dist/src/api/modules/users/sso/sso.module.js +1 -2
- package/dist/src/api/modules/users/users.module.d.ts +439 -374
- package/dist/src/api/modules/users/users.module.d.ts.map +1 -1
- package/dist/src/api/modules/users/users.module.js +1 -2
- package/dist/src/api/plugin.d.ts +1 -5
- package/dist/src/api/plugin.d.ts.map +1 -1
- package/dist/src/api/plugin.js +1 -2
- package/dist/src/components/avatar.d.ts +7 -10
- package/dist/src/components/avatar.d.ts.map +1 -1
- package/dist/src/components/avatar.js +1 -2
- package/dist/src/components/confirm-action/confirm-action-alert-dialog.d.ts +10 -12
- 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 -2
- package/dist/src/components/confirm-action/content.d.ts +5 -8
- package/dist/src/components/confirm-action/content.d.ts.map +1 -1
- package/dist/src/components/confirm-action/content.js +1 -2
- package/dist/src/components/date-format.d.ts +4 -7
- package/dist/src/components/date-format.d.ts.map +1 -1
- package/dist/src/components/date-format.js +1 -2
- package/dist/src/components/files/file-preview.d.ts +4 -7
- package/dist/src/components/files/file-preview.d.ts.map +1 -1
- package/dist/src/components/files/file-preview.js +1 -2
- package/dist/src/components/files/metadata-cell.d.ts +4 -7
- package/dist/src/components/files/metadata-cell.d.ts.map +1 -1
- package/dist/src/components/files/metadata-cell.js +1 -2
- package/dist/src/components/form/auto-form.d.ts +48 -41
- package/dist/src/components/form/auto-form.d.ts.map +1 -1
- package/dist/src/components/form/auto-form.js +1 -2
- package/dist/src/components/form/common/desc.d.ts +1 -4
- package/dist/src/components/form/common/desc.d.ts.map +1 -1
- package/dist/src/components/form/common/desc.js +1 -2
- package/dist/src/components/form/common/label.d.ts +4 -7
- package/dist/src/components/form/common/label.d.ts.map +1 -1
- package/dist/src/components/form/common/label.js +1 -2
- package/dist/src/components/form/fields/array.d.ts +15 -18
- package/dist/src/components/form/fields/array.d.ts.map +1 -1
- package/dist/src/components/form/fields/array.js +1 -2
- package/dist/src/components/form/fields/checkbox.d.ts +3 -6
- package/dist/src/components/form/fields/checkbox.d.ts.map +1 -1
- package/dist/src/components/form/fields/checkbox.js +1 -2
- package/dist/src/components/form/fields/color.d.ts +5 -0
- package/dist/src/components/form/fields/color.d.ts.map +1 -0
- package/dist/src/components/form/fields/color.js +1 -0
- package/dist/src/components/form/fields/combobox.d.ts +20 -22
- package/dist/src/components/form/fields/combobox.d.ts.map +1 -1
- package/dist/src/components/form/fields/combobox.js +1 -2
- package/dist/src/components/form/fields/editor.d.ts +8 -7
- package/dist/src/components/form/fields/editor.d.ts.map +1 -1
- package/dist/src/components/form/fields/editor.js +1 -2
- package/dist/src/components/form/fields/input.d.ts +7 -6
- package/dist/src/components/form/fields/input.d.ts.map +1 -1
- package/dist/src/components/form/fields/input.js +1 -2
- package/dist/src/components/form/fields/multi-lang.d.ts +18 -0
- package/dist/src/components/form/fields/multi-lang.d.ts.map +1 -0
- package/dist/src/components/form/fields/multi-lang.js +1 -0
- package/dist/src/components/form/fields/nullable-number.d.ts +11 -0
- package/dist/src/components/form/fields/nullable-number.d.ts.map +1 -0
- package/dist/src/components/form/fields/nullable-number.js +1 -0
- package/dist/src/components/form/fields/radio-group.d.ts +11 -13
- package/dist/src/components/form/fields/radio-group.d.ts.map +1 -1
- package/dist/src/components/form/fields/radio-group.js +1 -2
- package/dist/src/components/form/fields/select.d.ts +9 -12
- package/dist/src/components/form/fields/select.d.ts.map +1 -1
- package/dist/src/components/form/fields/select.js +1 -2
- package/dist/src/components/form/fields/switch.d.ts +3 -6
- package/dist/src/components/form/fields/switch.d.ts.map +1 -1
- package/dist/src/components/form/fields/switch.js +1 -2
- package/dist/src/components/form/fields/textarea.d.ts +6 -9
- package/dist/src/components/form/fields/textarea.d.ts.map +1 -1
- package/dist/src/components/form/fields/textarea.js +1 -2
- package/dist/src/components/i18n-provider.d.ts +4 -7
- package/dist/src/components/i18n-provider.d.ts.map +1 -1
- package/dist/src/components/i18n-provider.js +1 -2
- package/dist/src/components/languages-provider.d.ts +8 -0
- package/dist/src/components/languages-provider.d.ts.map +1 -0
- package/dist/src/components/languages-provider.js +1 -0
- package/dist/src/components/logo-vitnode.d.ts +2 -5
- package/dist/src/components/logo-vitnode.d.ts.map +1 -1
- package/dist/src/components/logo-vitnode.js +1 -2
- package/dist/src/components/role-format.d.ts +9 -12
- package/dist/src/components/role-format.d.ts.map +1 -1
- package/dist/src/components/role-format.js +1 -2
- package/dist/src/components/staff-permission/provider.d.ts +9 -12
- package/dist/src/components/staff-permission/provider.d.ts.map +1 -1
- package/dist/src/components/staff-permission/provider.js +1 -2
- package/dist/src/components/switchers/langs/language-switcher.d.ts +3 -6
- package/dist/src/components/switchers/langs/language-switcher.d.ts.map +1 -1
- package/dist/src/components/switchers/langs/language-switcher.js +1 -2
- package/dist/src/components/switchers/themes/theme-switcher.d.ts +1 -4
- package/dist/src/components/switchers/themes/theme-switcher.d.ts.map +1 -1
- package/dist/src/components/switchers/themes/theme-switcher.js +1 -2
- package/dist/src/components/table/content.d.ts +2 -5
- package/dist/src/components/table/content.d.ts.map +1 -1
- package/dist/src/components/table/content.js +1 -2
- package/dist/src/components/table/data-table.d.ts +46 -48
- package/dist/src/components/table/data-table.d.ts.map +1 -1
- package/dist/src/components/table/data-table.js +1 -2
- package/dist/src/components/table/filters.d.ts +11 -14
- package/dist/src/components/table/filters.d.ts.map +1 -1
- package/dist/src/components/table/filters.js +1 -2
- package/dist/src/components/table/order-table-head.d.ts +4 -7
- package/dist/src/components/table/order-table-head.d.ts.map +1 -1
- package/dist/src/components/table/order-table-head.js +1 -2
- package/dist/src/components/table/pagination.d.ts +9 -12
- package/dist/src/components/table/pagination.d.ts.map +1 -1
- package/dist/src/components/table/pagination.js +1 -2
- package/dist/src/components/table/search.d.ts +2 -5
- package/dist/src/components/table/search.d.ts.map +1 -1
- package/dist/src/components/table/search.js +1 -2
- package/dist/src/components/theme-provider.d.ts +21 -23
- package/dist/src/components/theme-provider.d.ts.map +1 -1
- package/dist/src/components/theme-provider.js +1 -2
- package/dist/src/components/tiptap/extension.d.ts +3 -6
- package/dist/src/components/tiptap/extension.d.ts.map +1 -1
- package/dist/src/components/tiptap/extension.js +1 -2
- package/dist/src/components/tiptap/toolbar/actions/alignment-action.d.ts +1 -4
- 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 -2
- package/dist/src/components/tiptap/toolbar/actions/bold-action.d.ts +1 -4
- package/dist/src/components/tiptap/toolbar/actions/bold-action.d.ts.map +1 -1
- package/dist/src/components/tiptap/toolbar/actions/bold-action.js +1 -2
- package/dist/src/components/tiptap/toolbar/actions/headings-action.d.ts +1 -4
- 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 -2
- package/dist/src/components/tiptap/toolbar/actions/italic-action.d.ts +1 -4
- package/dist/src/components/tiptap/toolbar/actions/italic-action.d.ts.map +1 -1
- package/dist/src/components/tiptap/toolbar/actions/italic-action.js +1 -2
- package/dist/src/components/tiptap/toolbar/actions/list-action.d.ts +1 -4
- package/dist/src/components/tiptap/toolbar/actions/list-action.d.ts.map +1 -1
- package/dist/src/components/tiptap/toolbar/actions/list-action.js +1 -2
- package/dist/src/components/tiptap/toolbar/actions/text-format-more/text-format-more.d.ts +1 -4
- 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 -2
- package/dist/src/components/tiptap/toolbar/actions/underline-action.d.ts +1 -4
- package/dist/src/components/tiptap/toolbar/actions/underline-action.d.ts.map +1 -1
- package/dist/src/components/tiptap/toolbar/actions/underline-action.js +1 -2
- package/dist/src/components/tiptap/toolbar/actions/undo-redo-actions.d.ts +1 -4
- package/dist/src/components/tiptap/toolbar/actions/undo-redo-actions.d.ts.map +1 -1
- package/dist/src/components/tiptap/toolbar/actions/undo-redo-actions.js +1 -2
- package/dist/src/components/tiptap/toolbar/actions/utils/tooltip-shortcut.d.ts +2 -5
- package/dist/src/components/tiptap/toolbar/actions/utils/tooltip-shortcut.d.ts.map +1 -1
- package/dist/src/components/tiptap/toolbar/actions/utils/tooltip-shortcut.js +1 -2
- package/dist/src/components/tiptap/toolbar/tiptap-toolbar.d.ts +3 -6
- package/dist/src/components/tiptap/toolbar/tiptap-toolbar.d.ts.map +1 -1
- package/dist/src/components/tiptap/toolbar/tiptap-toolbar.js +1 -2
- package/dist/src/components/tiptap/toolbar/use-toolbar-editor.d.ts +5 -8
- package/dist/src/components/tiptap/toolbar/use-toolbar-editor.d.ts.map +1 -1
- package/dist/src/components/tiptap/toolbar/use-toolbar-editor.js +1 -2
- package/dist/src/components/ui/accordion.d.ts +5 -7
- package/dist/src/components/ui/accordion.d.ts.map +1 -1
- package/dist/src/components/ui/accordion.js +1 -2
- package/dist/src/components/ui/alert-dialog.d.ts +14 -16
- package/dist/src/components/ui/alert-dialog.d.ts.map +1 -1
- package/dist/src/components/ui/alert-dialog.js +1 -2
- package/dist/src/components/ui/alert.d.ts +2 -4
- package/dist/src/components/ui/alert.d.ts.map +1 -1
- package/dist/src/components/ui/alert.js +1 -2
- package/dist/src/components/ui/aspect-ratio.d.ts +1 -3
- package/dist/src/components/ui/aspect-ratio.d.ts.map +1 -1
- package/dist/src/components/ui/aspect-ratio.js +1 -2
- package/dist/src/components/ui/attachment.d.ts +18 -20
- package/dist/src/components/ui/attachment.d.ts.map +1 -1
- package/dist/src/components/ui/attachment.js +1 -2
- package/dist/src/components/ui/avatar.d.ts +6 -8
- package/dist/src/components/ui/avatar.d.ts.map +1 -1
- package/dist/src/components/ui/avatar.js +1 -2
- package/dist/src/components/ui/badge.d.ts +2 -4
- package/dist/src/components/ui/badge.d.ts.map +1 -1
- package/dist/src/components/ui/badge.js +1 -2
- package/dist/src/components/ui/breadcrumb.d.ts +2 -4
- package/dist/src/components/ui/breadcrumb.d.ts.map +1 -1
- package/dist/src/components/ui/breadcrumb.js +1 -2
- package/dist/src/components/ui/button-client.d.ts +2 -5
- package/dist/src/components/ui/button-client.d.ts.map +1 -1
- package/dist/src/components/ui/button-client.js +1 -2
- package/dist/src/components/ui/button-group.d.ts +4 -6
- package/dist/src/components/ui/button-group.d.ts.map +1 -1
- package/dist/src/components/ui/button-group.js +1 -2
- package/dist/src/components/ui/button.d.ts +11 -13
- package/dist/src/components/ui/button.d.ts.map +1 -1
- package/dist/src/components/ui/button.js +1 -2
- package/dist/src/components/ui/card.d.ts +2 -4
- package/dist/src/components/ui/card.d.ts.map +1 -1
- package/dist/src/components/ui/card.js +1 -2
- package/dist/src/components/ui/carousel.d.ts +13 -15
- package/dist/src/components/ui/carousel.d.ts.map +1 -1
- package/dist/src/components/ui/carousel.js +1 -2
- package/dist/src/components/ui/chart.d.ts +29 -30
- package/dist/src/components/ui/chart.d.ts.map +1 -1
- package/dist/src/components/ui/chart.js +4 -7
- package/dist/src/components/ui/checkbox.d.ts +2 -4
- package/dist/src/components/ui/checkbox.d.ts.map +1 -1
- package/dist/src/components/ui/checkbox.js +1 -2
- package/dist/src/components/ui/collapsible.d.ts +4 -6
- package/dist/src/components/ui/collapsible.d.ts.map +1 -1
- package/dist/src/components/ui/collapsible.js +1 -2
- package/dist/src/components/ui/color-picker.d.ts +8 -0
- package/dist/src/components/ui/color-picker.d.ts.map +1 -0
- package/dist/src/components/ui/color-picker.js +1 -0
- package/dist/src/components/ui/combobox.d.ts +20 -22
- package/dist/src/components/ui/combobox.d.ts.map +1 -1
- package/dist/src/components/ui/combobox.js +1 -2
- package/dist/src/components/ui/command.d.ts +14 -16
- package/dist/src/components/ui/command.d.ts.map +1 -1
- package/dist/src/components/ui/command.js +1 -2
- package/dist/src/components/ui/context-menu.d.ts +21 -23
- package/dist/src/components/ui/context-menu.d.ts.map +1 -1
- package/dist/src/components/ui/context-menu.js +1 -2
- package/dist/src/components/ui/dialog.d.ts +19 -21
- package/dist/src/components/ui/dialog.d.ts.map +1 -1
- package/dist/src/components/ui/dialog.js +1 -2
- package/dist/src/components/ui/direction.d.ts +4 -6
- package/dist/src/components/ui/direction.d.ts.map +1 -1
- package/dist/src/components/ui/direction.js +1 -2
- package/dist/src/components/ui/drawer.d.ts +10 -12
- package/dist/src/components/ui/drawer.d.ts.map +1 -1
- package/dist/src/components/ui/drawer.js +1 -2
- package/dist/src/components/ui/dropdown-menu.d.ts +21 -23
- package/dist/src/components/ui/dropdown-menu.d.ts.map +1 -1
- package/dist/src/components/ui/dropdown-menu.js +1 -2
- package/dist/src/components/ui/editor-content.d.ts +2 -5
- package/dist/src/components/ui/editor-content.d.ts.map +1 -1
- package/dist/src/components/ui/editor-content.js +1 -2
- package/dist/src/components/ui/editor.d.ts +5 -8
- package/dist/src/components/ui/editor.d.ts.map +1 -1
- package/dist/src/components/ui/editor.js +1 -2
- package/dist/src/components/ui/empty.d.ts +3 -5
- package/dist/src/components/ui/empty.d.ts.map +1 -1
- package/dist/src/components/ui/empty.js +1 -2
- package/dist/src/components/ui/field.d.ts +9 -11
- package/dist/src/components/ui/field.d.ts.map +1 -1
- package/dist/src/components/ui/field.js +1 -2
- package/dist/src/components/ui/form.d.ts +15 -17
- package/dist/src/components/ui/form.d.ts.map +1 -1
- package/dist/src/components/ui/form.js +1 -2
- package/dist/src/components/ui/header-content.d.ts +10 -12
- package/dist/src/components/ui/header-content.d.ts.map +1 -1
- package/dist/src/components/ui/header-content.js +1 -2
- package/dist/src/components/ui/hover-card.d.ts +4 -6
- package/dist/src/components/ui/hover-card.d.ts.map +1 -1
- package/dist/src/components/ui/hover-card.js +1 -2
- package/dist/src/components/ui/input-group.d.ts +6 -8
- package/dist/src/components/ui/input-group.d.ts.map +1 -1
- package/dist/src/components/ui/input-group.js +1 -2
- package/dist/src/components/ui/input-otp.d.ts +3 -5
- package/dist/src/components/ui/input-otp.d.ts.map +1 -1
- package/dist/src/components/ui/input-otp.js +1 -2
- package/dist/src/components/ui/input.d.ts +0 -2
- package/dist/src/components/ui/input.d.ts.map +1 -1
- package/dist/src/components/ui/input.js +1 -2
- package/dist/src/components/ui/item.d.ts +7 -9
- package/dist/src/components/ui/item.d.ts.map +1 -1
- package/dist/src/components/ui/item.js +1 -2
- package/dist/src/components/ui/kbd.d.ts +0 -2
- package/dist/src/components/ui/kbd.d.ts.map +1 -1
- package/dist/src/components/ui/kbd.js +1 -2
- package/dist/src/components/ui/label.d.ts +0 -2
- package/dist/src/components/ui/label.d.ts.map +1 -1
- package/dist/src/components/ui/label.js +1 -2
- package/dist/src/components/ui/loader.d.ts +3 -6
- package/dist/src/components/ui/loader.d.ts.map +1 -1
- package/dist/src/components/ui/loader.js +1 -2
- package/dist/src/components/ui/menubar.d.ts +23 -25
- package/dist/src/components/ui/menubar.d.ts.map +1 -1
- package/dist/src/components/ui/menubar.js +1 -2
- package/dist/src/components/ui/native-select.d.ts +1 -3
- package/dist/src/components/ui/native-select.d.ts.map +1 -1
- package/dist/src/components/ui/native-select.js +1 -2
- package/dist/src/components/ui/navigation-menu.d.ts +10 -12
- package/dist/src/components/ui/navigation-menu.d.ts.map +1 -1
- package/dist/src/components/ui/navigation-menu.js +1 -2
- package/dist/src/components/ui/pagination.d.ts +5 -7
- package/dist/src/components/ui/pagination.d.ts.map +1 -1
- package/dist/src/components/ui/pagination.js +1 -2
- package/dist/src/components/ui/popover.d.ts +7 -9
- package/dist/src/components/ui/popover.d.ts.map +1 -1
- package/dist/src/components/ui/popover.js +1 -2
- package/dist/src/components/ui/progress.d.ts +2 -4
- package/dist/src/components/ui/progress.d.ts.map +1 -1
- package/dist/src/components/ui/progress.js +1 -2
- package/dist/src/components/ui/radio-group.d.ts +4 -6
- package/dist/src/components/ui/radio-group.d.ts.map +1 -1
- package/dist/src/components/ui/radio-group.js +1 -2
- package/dist/src/components/ui/resizable.d.ts +1 -3
- package/dist/src/components/ui/resizable.d.ts.map +1 -1
- package/dist/src/components/ui/resizable.js +1 -2
- package/dist/src/components/ui/scroll-area.d.ts +3 -5
- package/dist/src/components/ui/scroll-area.d.ts.map +1 -1
- package/dist/src/components/ui/scroll-area.js +1 -2
- package/dist/src/components/ui/select.d.ts +13 -15
- package/dist/src/components/ui/select.d.ts.map +1 -1
- package/dist/src/components/ui/select.js +1 -2
- package/dist/src/components/ui/separator.d.ts +2 -4
- package/dist/src/components/ui/separator.d.ts.map +1 -1
- package/dist/src/components/ui/separator.js +1 -2
- package/dist/src/components/ui/sheet.d.ts +10 -12
- package/dist/src/components/ui/sheet.d.ts.map +1 -1
- package/dist/src/components/ui/sheet.js +1 -2
- package/dist/src/components/ui/sidebar.d.ts +28 -30
- package/dist/src/components/ui/sidebar.d.ts.map +1 -1
- package/dist/src/components/ui/sidebar.js +1 -2
- package/dist/src/components/ui/skeleton.d.ts +0 -2
- package/dist/src/components/ui/skeleton.d.ts.map +1 -1
- package/dist/src/components/ui/skeleton.js +1 -2
- package/dist/src/components/ui/slider.d.ts +2 -4
- package/dist/src/components/ui/slider.d.ts.map +1 -1
- package/dist/src/components/ui/slider.js +1 -2
- package/dist/src/components/ui/sonner.d.ts +1 -3
- package/dist/src/components/ui/sonner.d.ts.map +1 -1
- package/dist/src/components/ui/sonner.js +1 -2
- package/dist/src/components/ui/spinner.d.ts +0 -2
- package/dist/src/components/ui/spinner.d.ts.map +1 -1
- package/dist/src/components/ui/spinner.js +1 -2
- package/dist/src/components/ui/switch.d.ts +3 -5
- package/dist/src/components/ui/switch.d.ts.map +1 -1
- package/dist/src/components/ui/switch.js +1 -2
- package/dist/src/components/ui/table.d.ts +1 -3
- package/dist/src/components/ui/table.d.ts.map +1 -1
- package/dist/src/components/ui/table.js +1 -2
- package/dist/src/components/ui/tabs.d.ts +8 -10
- package/dist/src/components/ui/tabs.d.ts.map +1 -1
- package/dist/src/components/ui/tabs.js +1 -2
- package/dist/src/components/ui/textarea.d.ts +0 -2
- package/dist/src/components/ui/textarea.d.ts.map +1 -1
- package/dist/src/components/ui/textarea.js +1 -2
- package/dist/src/components/ui/toggle-group.d.ts +8 -10
- package/dist/src/components/ui/toggle-group.d.ts.map +1 -1
- package/dist/src/components/ui/toggle-group.js +1 -2
- package/dist/src/components/ui/toggle.d.ts +5 -7
- package/dist/src/components/ui/toggle.d.ts.map +1 -1
- package/dist/src/components/ui/toggle.js +1 -2
- package/dist/src/components/ui/tooltip.d.ts +8 -10
- package/dist/src/components/ui/tooltip.d.ts.map +1 -1
- package/dist/src/components/ui/tooltip.js +1 -2
- package/dist/src/components/user-format.d.ts +10 -13
- package/dist/src/components/user-format.d.ts.map +1 -1
- package/dist/src/components/user-format.js +1 -2
- package/dist/src/config.d.ts +3 -6
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +1 -2
- package/dist/src/database/admins.d.ts +278 -264
- package/dist/src/database/admins.d.ts.map +1 -1
- package/dist/src/database/admins.js +1 -2
- package/dist/src/database/cron.d.ts +169 -172
- package/dist/src/database/cron.d.ts.map +1 -1
- package/dist/src/database/cron.js +1 -2
- package/dist/src/database/files.d.ts +190 -193
- package/dist/src/database/files.d.ts.map +1 -1
- package/dist/src/database/files.js +1 -2
- package/dist/src/database/languages.d.ts +300 -320
- package/dist/src/database/languages.d.ts.map +1 -1
- package/dist/src/database/languages.js +1 -2
- package/dist/src/database/logs.d.ts +218 -221
- package/dist/src/database/logs.d.ts.map +1 -1
- package/dist/src/database/logs.js +1 -2
- package/dist/src/database/moderators.d.ts +148 -134
- package/dist/src/database/moderators.d.ts.map +1 -1
- package/dist/src/database/moderators.js +1 -2
- package/dist/src/database/queue.d.ts +271 -274
- package/dist/src/database/queue.d.ts.map +1 -1
- package/dist/src/database/queue.js +1 -2
- package/dist/src/database/roles.d.ts +195 -147
- package/dist/src/database/roles.d.ts.map +1 -1
- package/dist/src/database/roles.js +1 -2
- package/dist/src/database/search.d.ts +314 -0
- package/dist/src/database/search.d.ts.map +1 -0
- package/dist/src/database/search.js +1 -0
- package/dist/src/database/sessions.d.ts +210 -213
- package/dist/src/database/sessions.d.ts.map +1 -1
- package/dist/src/database/sessions.js +1 -2
- package/dist/src/database/users.d.ts +633 -636
- package/dist/src/database/users.d.ts.map +1 -1
- package/dist/src/database/users.js +1 -2
- package/dist/src/drizzle.config.d.ts +4 -7
- package/dist/src/drizzle.config.d.ts.map +1 -1
- package/dist/src/drizzle.config.js +1 -2
- package/dist/src/emails/default-template.d.ts +38 -40
- package/dist/src/emails/default-template.d.ts.map +1 -1
- package/dist/src/emails/default-template.js +1 -2
- package/dist/src/emails/reset-password.d.ts +47 -49
- package/dist/src/emails/reset-password.d.ts.map +1 -1
- package/dist/src/emails/reset-password.js +1 -2
- package/dist/src/emails/test-email.d.ts +20 -22
- package/dist/src/emails/test-email.d.ts.map +1 -1
- package/dist/src/emails/test-email.js +1 -2
- package/dist/src/emails/ui/button.d.ts +6 -8
- package/dist/src/emails/ui/button.d.ts.map +1 -1
- package/dist/src/emails/ui/button.js +1 -2
- package/dist/src/emails/ui/card.d.ts +6 -9
- package/dist/src/emails/ui/card.d.ts.map +1 -1
- package/dist/src/emails/ui/card.js +1 -2
- package/dist/src/globals.css +45 -0
- package/dist/src/hooks/use-before-unload.d.ts +1 -4
- package/dist/src/hooks/use-before-unload.d.ts.map +1 -1
- package/dist/src/hooks/use-before-unload.js +1 -2
- package/dist/src/hooks/use-captcha.d.ts +24 -27
- package/dist/src/hooks/use-captcha.d.ts.map +1 -1
- package/dist/src/hooks/use-captcha.js +1 -2
- package/dist/src/hooks/use-mobile.d.ts +1 -4
- package/dist/src/hooks/use-mobile.d.ts.map +1 -1
- package/dist/src/hooks/use-mobile.js +1 -2
- package/dist/src/lib/api/get-devices-api.d.ts +14 -0
- package/dist/src/lib/api/get-devices-api.d.ts.map +1 -0
- package/dist/src/lib/api/get-devices-api.js +1 -0
- package/dist/src/lib/api/get-middleware-api.d.ts +10 -13
- package/dist/src/lib/api/get-middleware-api.d.ts.map +1 -1
- package/dist/src/lib/api/get-middleware-api.js +1 -2
- package/dist/src/lib/api/get-moderator-permissions-api.d.ts +3 -6
- package/dist/src/lib/api/get-moderator-permissions-api.d.ts.map +1 -1
- package/dist/src/lib/api/get-moderator-permissions-api.js +1 -2
- package/dist/src/lib/api/get-next-cron-run-date.d.ts +1 -4
- package/dist/src/lib/api/get-next-cron-run-date.d.ts.map +1 -1
- package/dist/src/lib/api/get-next-cron-run-date.js +1 -2
- package/dist/src/lib/api/get-queue-backoff-date.d.ts +1 -4
- package/dist/src/lib/api/get-queue-backoff-date.d.ts.map +1 -1
- package/dist/src/lib/api/get-queue-backoff-date.js +1 -2
- package/dist/src/lib/api/get-queue-status.d.ts +11 -0
- package/dist/src/lib/api/get-queue-status.d.ts.map +1 -0
- package/dist/src/lib/api/get-queue-status.js +1 -0
- package/dist/src/lib/api/get-session-admin-api.d.ts +24 -27
- 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 -2
- package/dist/src/lib/api/get-session-api.d.ts +16 -19
- package/dist/src/lib/api/get-session-api.d.ts.map +1 -1
- package/dist/src/lib/api/get-session-api.js +1 -2
- package/dist/src/lib/api/is-cron-stale.d.ts +2 -5
- package/dist/src/lib/api/is-cron-stale.d.ts.map +1 -1
- package/dist/src/lib/api/is-cron-stale.js +1 -2
- package/dist/src/lib/api/parse-user-agent.d.ts +8 -0
- package/dist/src/lib/api/parse-user-agent.d.ts.map +1 -0
- package/dist/src/lib/api/parse-user-agent.js +1 -0
- package/dist/src/lib/api/resolve-queue-task-outcome.d.ts +11 -14
- package/dist/src/lib/api/resolve-queue-task-outcome.d.ts.map +1 -1
- package/dist/src/lib/api/resolve-queue-task-outcome.js +1 -2
- package/dist/src/lib/api/should-cron-job-run.d.ts +1 -4
- package/dist/src/lib/api/should-cron-job-run.d.ts.map +1 -1
- package/dist/src/lib/api/should-cron-job-run.js +1 -2
- package/dist/src/lib/api/upload.d.ts +12 -15
- package/dist/src/lib/api/upload.d.ts.map +1 -1
- package/dist/src/lib/api/upload.js +1 -2
- package/dist/src/lib/api/validate-cron-schedule.d.ts +1 -4
- package/dist/src/lib/api/validate-cron-schedule.d.ts.map +1 -1
- package/dist/src/lib/api/validate-cron-schedule.js +1 -2
- package/dist/src/lib/colors.d.ts +20 -23
- package/dist/src/lib/colors.d.ts.map +1 -1
- package/dist/src/lib/colors.js +1 -2
- package/dist/src/lib/config.d.ts +6 -9
- package/dist/src/lib/config.d.ts.map +1 -1
- package/dist/src/lib/config.js +1 -2
- package/dist/src/lib/ctrl-or-command-character.d.ts +1 -4
- package/dist/src/lib/ctrl-or-command-character.d.ts.map +1 -1
- package/dist/src/lib/ctrl-or-command-character.js +1 -2
- package/dist/src/lib/fetcher/cookie-from-string-to-object.d.ts +8 -11
- package/dist/src/lib/fetcher/cookie-from-string-to-object.d.ts.map +1 -1
- package/dist/src/lib/fetcher/cookie-from-string-to-object.js +1 -2
- package/dist/src/lib/fetcher/core.d.ts +14 -16
- package/dist/src/lib/fetcher/core.d.ts.map +1 -1
- package/dist/src/lib/fetcher/core.js +3 -2
- package/dist/src/lib/fetcher/helpers-server.d.ts +1 -4
- package/dist/src/lib/fetcher/helpers-server.d.ts.map +1 -1
- package/dist/src/lib/fetcher/helpers-server.js +1 -2
- package/dist/src/lib/fetcher/helpers.d.ts +1 -4
- package/dist/src/lib/fetcher/helpers.d.ts.map +1 -1
- package/dist/src/lib/fetcher/helpers.js +1 -2
- package/dist/src/lib/fetcher/rate-limit.d.ts +10 -0
- package/dist/src/lib/fetcher/rate-limit.d.ts.map +1 -0
- package/dist/src/lib/fetcher/rate-limit.js +1 -0
- package/dist/src/lib/fetcher/types.d.ts +87 -83
- package/dist/src/lib/fetcher/types.d.ts.map +1 -1
- package/dist/src/lib/fetcher/types.js +1 -0
- package/dist/src/lib/fetcher-client.d.ts +10 -13
- package/dist/src/lib/fetcher-client.d.ts.map +1 -1
- package/dist/src/lib/fetcher-client.js +1 -2
- package/dist/src/lib/fetcher.d.ts +9 -12
- package/dist/src/lib/fetcher.d.ts.map +1 -1
- package/dist/src/lib/fetcher.js +1 -2
- package/dist/src/lib/format-bytes.d.ts +1 -4
- package/dist/src/lib/format-bytes.d.ts.map +1 -1
- package/dist/src/lib/format-bytes.js +1 -2
- package/dist/src/lib/helpers/auto-form.d.ts +19 -21
- package/dist/src/lib/helpers/auto-form.d.ts.map +1 -1
- package/dist/src/lib/helpers/auto-form.js +1 -2
- package/dist/src/lib/helpers/multi-lang.d.ts +21 -0
- package/dist/src/lib/helpers/multi-lang.d.ts.map +1 -0
- package/dist/src/lib/helpers/multi-lang.js +1 -0
- package/dist/src/lib/i18n/deep-merge.d.ts +4 -0
- package/dist/src/lib/i18n/deep-merge.d.ts.map +1 -0
- package/dist/src/lib/i18n/deep-merge.js +1 -0
- package/dist/src/lib/i18n/load-messages.d.ts +9 -0
- package/dist/src/lib/i18n/load-messages.d.ts.map +1 -0
- package/dist/src/lib/i18n/load-messages.js +1 -0
- package/dist/src/lib/i18n/negotiate-locale.d.ts +2 -0
- package/dist/src/lib/i18n/negotiate-locale.d.ts.map +1 -0
- package/dist/src/lib/i18n/negotiate-locale.js +1 -0
- package/dist/src/lib/i18n/sources.d.ts +16 -0
- package/dist/src/lib/i18n/sources.d.ts.map +1 -0
- package/dist/src/lib/i18n/sources.js +1 -0
- package/dist/src/lib/i18n/types.d.ts +26 -0
- package/dist/src/lib/i18n/types.d.ts.map +1 -0
- package/dist/src/lib/i18n/types.js +1 -0
- package/dist/src/lib/motion.d.ts +8 -0
- package/dist/src/lib/motion.d.ts.map +1 -0
- package/dist/src/lib/motion.js +1 -0
- package/dist/src/lib/navigation.d.ts +334 -336
- package/dist/src/lib/navigation.d.ts.map +1 -1
- package/dist/src/lib/navigation.js +1 -2
- package/dist/src/lib/plugin.d.ts +16 -16
- package/dist/src/lib/plugin.d.ts.map +1 -1
- package/dist/src/lib/plugin.js +1 -2
- package/dist/src/lib/special-characters.d.ts +2 -5
- package/dist/src/lib/special-characters.d.ts.map +1 -1
- package/dist/src/lib/special-characters.js +1 -2
- package/dist/src/lib/strip-html.d.ts +2 -0
- package/dist/src/lib/strip-html.d.ts.map +1 -0
- package/dist/src/lib/strip-html.js +1 -0
- package/dist/src/lib/tiptap/toolbar/actions/bold-action.d.ts +1 -1
- package/dist/src/lib/tiptap/toolbar/actions/bold-action.d.ts.map +1 -0
- package/dist/src/lib/utils.d.ts +3 -6
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +1 -2
- package/dist/src/locales/api/en.json +19 -0
- package/dist/src/locales/api/index.d.ts +4 -0
- package/dist/src/locales/api/index.d.ts.map +1 -0
- package/dist/src/locales/api/index.js +1 -0
- package/dist/src/locales/en.json +886 -0
- package/dist/src/locales/index.d.ts +4 -0
- package/dist/src/locales/index.d.ts.map +1 -0
- package/dist/src/locales/index.js +1 -0
- package/dist/src/routes/admin/core/advanced/cron/page.d.ts +6 -9
- package/dist/src/routes/admin/core/advanced/cron/page.d.ts.map +1 -1
- package/dist/src/routes/admin/core/advanced/cron/page.js +1 -2
- package/dist/src/routes/admin/core/advanced/queue/page.d.ts +8 -11
- package/dist/src/routes/admin/core/advanced/queue/page.d.ts.map +1 -1
- package/dist/src/routes/admin/core/advanced/queue/page.js +1 -2
- package/dist/src/routes/admin/core/advanced/search/page.d.ts +11 -0
- package/dist/src/routes/admin/core/advanced/search/page.d.ts.map +1 -0
- package/dist/src/routes/admin/core/advanced/search/page.js +1 -0
- package/dist/src/routes/admin/core/debug/page.d.ts +6 -8
- package/dist/src/routes/admin/core/debug/page.d.ts.map +1 -1
- package/dist/src/routes/admin/core/debug/page.js +1 -2
- package/dist/src/routes/admin/core/page.d.ts +1 -4
- package/dist/src/routes/admin/core/page.d.ts.map +1 -1
- package/dist/src/routes/admin/core/page.js +1 -2
- package/dist/src/routes/admin/core/staff/admins/create/page.d.ts +1 -4
- package/dist/src/routes/admin/core/staff/admins/create/page.d.ts.map +1 -1
- package/dist/src/routes/admin/core/staff/admins/create/page.js +1 -2
- package/dist/src/routes/admin/core/staff/admins/edit/[id]/page.d.ts +4 -7
- package/dist/src/routes/admin/core/staff/admins/edit/[id]/page.d.ts.map +1 -1
- package/dist/src/routes/admin/core/staff/admins/edit/[id]/page.js +1 -2
- package/dist/src/routes/admin/core/staff/admins/page.d.ts +2 -5
- package/dist/src/routes/admin/core/staff/admins/page.d.ts.map +1 -1
- package/dist/src/routes/admin/core/staff/admins/page.js +1 -2
- package/dist/src/routes/admin/core/staff/moderators/create/page.d.ts +1 -4
- package/dist/src/routes/admin/core/staff/moderators/create/page.d.ts.map +1 -1
- package/dist/src/routes/admin/core/staff/moderators/create/page.js +1 -2
- package/dist/src/routes/admin/core/staff/moderators/edit/[id]/page.d.ts +4 -7
- package/dist/src/routes/admin/core/staff/moderators/edit/[id]/page.d.ts.map +1 -1
- package/dist/src/routes/admin/core/staff/moderators/edit/[id]/page.js +1 -2
- package/dist/src/routes/admin/core/staff/moderators/page.d.ts +2 -5
- package/dist/src/routes/admin/core/staff/moderators/page.d.ts.map +1 -1
- package/dist/src/routes/admin/core/staff/moderators/page.js +1 -2
- package/dist/src/routes/admin/core/system/files/page.d.ts +6 -9
- package/dist/src/routes/admin/core/system/files/page.d.ts.map +1 -1
- package/dist/src/routes/admin/core/system/files/page.js +1 -2
- package/dist/src/routes/admin/core/system/integrations/page.d.ts +4 -7
- package/dist/src/routes/admin/core/system/integrations/page.d.ts.map +1 -1
- package/dist/src/routes/admin/core/system/integrations/page.js +1 -2
- package/dist/src/routes/admin/core/test/page.d.ts +1 -4
- package/dist/src/routes/admin/core/test/page.d.ts.map +1 -1
- package/dist/src/routes/admin/core/test/page.js +1 -2
- package/dist/src/routes/admin/core/users/[id]/page.d.ts +9 -12
- package/dist/src/routes/admin/core/users/[id]/page.d.ts.map +1 -1
- package/dist/src/routes/admin/core/users/[id]/page.js +1 -2
- package/dist/src/routes/admin/core/users/page.d.ts +5 -7
- package/dist/src/routes/admin/core/users/page.d.ts.map +1 -1
- package/dist/src/routes/admin/core/users/page.js +1 -2
- package/dist/src/routes/admin/core/users/roles/page.d.ts +5 -7
- package/dist/src/routes/admin/core/users/roles/page.d.ts.map +1 -1
- package/dist/src/routes/admin/core/users/roles/page.js +1 -2
- package/dist/src/routes/blank/test/page.d.ts +1 -4
- package/dist/src/routes/blank/test/page.d.ts.map +1 -1
- package/dist/src/routes/blank/test/page.js +1 -2
- package/dist/src/routes/breadcrumb/admin/[...all]/page.d.ts +1 -4
- package/dist/src/routes/breadcrumb/admin/[...all]/page.d.ts.map +1 -1
- package/dist/src/routes/breadcrumb/admin/[...all]/page.js +1 -2
- package/dist/src/routes/breadcrumb/admin/core/advanced/cron/page.d.ts +2 -0
- package/dist/src/routes/breadcrumb/admin/core/advanced/cron/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/admin/core/advanced/cron/page.js +1 -0
- package/dist/src/routes/breadcrumb/admin/core/advanced/queue/page.d.ts +2 -0
- package/dist/src/routes/breadcrumb/admin/core/advanced/queue/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/admin/core/advanced/queue/page.js +1 -0
- package/dist/src/routes/breadcrumb/admin/core/advanced/search/page.d.ts +2 -0
- package/dist/src/routes/breadcrumb/admin/core/advanced/search/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/admin/core/advanced/search/page.js +1 -0
- package/dist/src/routes/breadcrumb/admin/core/page.d.ts +2 -0
- package/dist/src/routes/breadcrumb/admin/core/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/admin/core/page.js +1 -0
- package/dist/src/routes/breadcrumb/admin/core/staff/admins/create/page.d.ts +1 -4
- package/dist/src/routes/breadcrumb/admin/core/staff/admins/create/page.d.ts.map +1 -1
- package/dist/src/routes/breadcrumb/admin/core/staff/admins/create/page.js +1 -2
- package/dist/src/routes/breadcrumb/admin/core/staff/admins/edit/[id]/page.d.ts +4 -7
- package/dist/src/routes/breadcrumb/admin/core/staff/admins/edit/[id]/page.d.ts.map +1 -1
- package/dist/src/routes/breadcrumb/admin/core/staff/admins/edit/[id]/page.js +1 -2
- package/dist/src/routes/breadcrumb/admin/core/staff/admins/page.d.ts +1 -4
- package/dist/src/routes/breadcrumb/admin/core/staff/admins/page.d.ts.map +1 -1
- package/dist/src/routes/breadcrumb/admin/core/staff/admins/page.js +1 -2
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/create/page.d.ts +1 -4
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/create/page.d.ts.map +1 -1
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/create/page.js +1 -2
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/edit/[id]/page.d.ts +4 -7
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/edit/[id]/page.d.ts.map +1 -1
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/edit/[id]/page.js +1 -2
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/page.d.ts +1 -4
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/page.d.ts.map +1 -1
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/page.js +1 -2
- package/dist/src/routes/breadcrumb/admin/core/system/files/page.d.ts +2 -0
- package/dist/src/routes/breadcrumb/admin/core/system/files/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/admin/core/system/files/page.js +1 -0
- package/dist/src/routes/breadcrumb/admin/core/system/integrations/page.d.ts +2 -0
- package/dist/src/routes/breadcrumb/admin/core/system/integrations/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/admin/core/system/integrations/page.js +1 -0
- package/dist/src/routes/breadcrumb/admin/core/users/[id]/page.d.ts +4 -7
- package/dist/src/routes/breadcrumb/admin/core/users/[id]/page.d.ts.map +1 -1
- package/dist/src/routes/breadcrumb/admin/core/users/[id]/page.js +1 -2
- package/dist/src/routes/breadcrumb/admin/core/users/page.d.ts +2 -0
- package/dist/src/routes/breadcrumb/admin/core/users/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/admin/core/users/page.js +1 -0
- package/dist/src/routes/breadcrumb/admin/core/users/roles/page.d.ts +2 -0
- package/dist/src/routes/breadcrumb/admin/core/users/roles/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/admin/core/users/roles/page.js +1 -0
- package/dist/src/routes/breadcrumb/admin/default.d.ts +1 -4
- package/dist/src/routes/breadcrumb/admin/default.d.ts.map +1 -1
- package/dist/src/routes/breadcrumb/admin/default.js +1 -2
- package/dist/src/routes/breadcrumb/main/[...rest]/page.d.ts +1 -4
- package/dist/src/routes/breadcrumb/main/[...rest]/page.d.ts.map +1 -1
- package/dist/src/routes/breadcrumb/main/[...rest]/page.js +1 -2
- package/dist/src/routes/breadcrumb/main/default.d.ts +1 -4
- package/dist/src/routes/breadcrumb/main/default.d.ts.map +1 -1
- package/dist/src/routes/breadcrumb/main/default.js +1 -2
- package/dist/src/routes/breadcrumb/main/discover/page.d.ts +2 -0
- package/dist/src/routes/breadcrumb/main/discover/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/main/discover/page.js +1 -0
- package/dist/src/routes/breadcrumb/main/page.d.ts +1 -4
- package/dist/src/routes/breadcrumb/main/page.d.ts.map +1 -1
- package/dist/src/routes/breadcrumb/main/page.js +1 -2
- package/dist/src/routes/breadcrumb/main/search/page.d.ts +2 -0
- package/dist/src/routes/breadcrumb/main/search/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/main/search/page.js +1 -0
- package/dist/src/routes/breadcrumb/main/settings/devices/page.d.ts +2 -0
- package/dist/src/routes/breadcrumb/main/settings/devices/page.d.ts.map +1 -0
- package/dist/src/routes/breadcrumb/main/settings/devices/page.js +1 -0
- package/dist/src/routes/breadcrumb/main/settings/overview/page.d.ts +1 -4
- package/dist/src/routes/breadcrumb/main/settings/overview/page.d.ts.map +1 -1
- package/dist/src/routes/breadcrumb/main/settings/overview/page.js +1 -2
- package/dist/src/routes/breadcrumb/main/settings/page.d.ts +1 -4
- package/dist/src/routes/breadcrumb/main/settings/page.d.ts.map +1 -1
- package/dist/src/routes/breadcrumb/main/settings/page.js +1 -2
- package/dist/src/routes/breadcrumb/main/settings/security/page.d.ts +1 -4
- package/dist/src/routes/breadcrumb/main/settings/security/page.d.ts.map +1 -1
- package/dist/src/routes/breadcrumb/main/settings/security/page.js +1 -2
- package/dist/src/routes/main/discover/page.d.ts +11 -0
- package/dist/src/routes/main/discover/page.d.ts.map +1 -0
- package/dist/src/routes/main/discover/page.js +1 -0
- package/dist/src/routes/main/files/page.d.ts +10 -13
- package/dist/src/routes/main/files/page.d.ts.map +1 -1
- package/dist/src/routes/main/files/page.js +1 -2
- package/dist/src/routes/main/login/page.d.ts +6 -9
- package/dist/src/routes/main/login/page.d.ts.map +1 -1
- package/dist/src/routes/main/login/page.js +1 -2
- package/dist/src/routes/main/login/reset-password/page.d.ts +7 -10
- package/dist/src/routes/main/login/reset-password/page.d.ts.map +1 -1
- package/dist/src/routes/main/login/reset-password/page.js +1 -2
- package/dist/src/routes/main/login/sso/[providerId]/page.d.ts +5 -8
- package/dist/src/routes/main/login/sso/[providerId]/page.d.ts.map +1 -1
- package/dist/src/routes/main/login/sso/[providerId]/page.js +1 -2
- package/dist/src/routes/main/register/page.d.ts +6 -9
- package/dist/src/routes/main/register/page.d.ts.map +1 -1
- package/dist/src/routes/main/register/page.js +1 -2
- package/dist/src/routes/main/search/page.d.ts +15 -0
- package/dist/src/routes/main/search/page.d.ts.map +1 -0
- package/dist/src/routes/main/search/page.js +1 -0
- package/dist/src/routes/main/settings/devices/page.d.ts +5 -0
- package/dist/src/routes/main/settings/devices/page.d.ts.map +1 -0
- package/dist/src/routes/main/settings/devices/page.js +1 -0
- package/dist/src/routes/main/settings/layout.d.ts +4 -7
- package/dist/src/routes/main/settings/layout.d.ts.map +1 -1
- package/dist/src/routes/main/settings/layout.js +1 -2
- package/dist/src/routes/main/settings/overview/page.d.ts +3 -6
- package/dist/src/routes/main/settings/overview/page.d.ts.map +1 -1
- package/dist/src/routes/main/settings/overview/page.js +1 -2
- package/dist/src/routes/main/settings/page.d.ts +3 -6
- package/dist/src/routes/main/settings/page.d.ts.map +1 -1
- package/dist/src/routes/main/settings/page.js +1 -2
- package/dist/src/routes/main/settings/security/page.d.ts +3 -6
- package/dist/src/routes/main/settings/security/page.d.ts.map +1 -1
- package/dist/src/routes/main/settings/security/page.js +1 -2
- package/dist/src/tests/setup.d.ts +2 -0
- package/dist/src/tests/setup.d.ts.map +1 -0
- package/dist/src/tests/setup.js +1 -0
- package/dist/src/tiptap.css +28 -0
- package/dist/src/views/admin/layouts/admin-layout.d.ts +6 -9
- package/dist/src/views/admin/layouts/admin-layout.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/admin-layout.js +1 -2
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-admin.d.ts +9 -12
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-admin.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-admin.js +1 -2
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-advanced-search.d.ts +5 -0
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-advanced-search.d.ts.map +1 -0
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-advanced-search.js +1 -0
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-roles-admin.d.ts +5 -0
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-roles-admin.d.ts.map +1 -0
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-roles-admin.js +1 -0
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-admin.d.ts +4 -7
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-admin.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-admin.js +1 -2
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-create-admin.d.ts +3 -6
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-create-admin.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-create-admin.js +1 -2
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-edit-admin.d.ts +4 -7
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-edit-admin.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-edit-admin.js +1 -2
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-user-admin.d.ts +4 -7
- 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 -2
- package/dist/src/views/admin/layouts/breadcrumb/resolve-breadcrumb.d.ts +4 -6
- 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 -2
- package/dist/src/views/admin/layouts/sidebar/nav/get-admin-nav.d.ts +8 -11
- 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 -2
- package/dist/src/views/admin/layouts/sidebar/nav/item.d.ts +7 -9
- 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 -2
- package/dist/src/views/admin/layouts/sidebar/nav/nav.d.ts +4 -7
- package/dist/src/views/admin/layouts/sidebar/nav/nav.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/sidebar/nav/nav.js +1 -2
- package/dist/src/views/admin/layouts/sidebar/sidebar.d.ts +2 -5
- package/dist/src/views/admin/layouts/sidebar/sidebar.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/sidebar/sidebar.js +1 -2
- package/dist/src/views/admin/layouts/sidebar/sign-out.d.ts +2 -5
- package/dist/src/views/admin/layouts/sidebar/sign-out.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/sidebar/sign-out.js +1 -2
- package/dist/src/views/admin/layouts/user-bar/client.d.ts +5 -8
- 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 -2
- package/dist/src/views/admin/layouts/user-bar/user-bar.d.ts +2 -5
- package/dist/src/views/admin/layouts/user-bar/user-bar.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/user-bar/user-bar.js +1 -2
- package/dist/src/views/admin/sign-in/sign-in-admin-view.d.ts +1 -4
- package/dist/src/views/admin/sign-in/sign-in-admin-view.d.ts.map +1 -1
- package/dist/src/views/admin/sign-in/sign-in-admin-view.js +1 -2
- package/dist/src/views/admin/views/core/advanced/cron/cron-table-view.d.ts +3 -6
- package/dist/src/views/admin/views/core/advanced/cron/cron-table-view.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/advanced/cron/cron-table-view.js +1 -2
- package/dist/src/views/admin/views/core/advanced/cron/run-action/mutation-api.server.d.ts +4 -0
- package/dist/src/views/admin/views/core/advanced/cron/run-action/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/advanced/cron/run-action/mutation-api.server.js +1 -0
- package/dist/src/views/admin/views/core/advanced/cron/run-action/run-action.d.ts +3 -6
- package/dist/src/views/admin/views/core/advanced/cron/run-action/run-action.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/advanced/cron/run-action/run-action.js +1 -2
- package/dist/src/views/admin/views/core/advanced/queue/badges/status-badge.d.ts +3 -6
- package/dist/src/views/admin/views/core/advanced/queue/badges/status-badge.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/advanced/queue/badges/status-badge.js +1 -2
- package/dist/src/views/admin/views/core/advanced/queue/queue-table-view.d.ts +5 -8
- package/dist/src/views/admin/views/core/advanced/queue/queue-table-view.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/advanced/queue/queue-table-view.js +1 -2
- package/dist/src/views/admin/views/core/advanced/search/collection-status.d.ts +11 -0
- package/dist/src/views/admin/views/core/advanced/search/collection-status.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/advanced/search/collection-status.js +1 -0
- package/dist/src/views/admin/views/core/advanced/search/collections-table.d.ts +6 -0
- package/dist/src/views/admin/views/core/advanced/search/collections-table.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/advanced/search/collections-table.js +1 -0
- package/dist/src/views/admin/views/core/advanced/search/cron-warning.d.ts +3 -0
- package/dist/src/views/admin/views/core/advanced/search/cron-warning.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/advanced/search/cron-warning.js +1 -0
- package/dist/src/views/admin/views/core/advanced/search/mutation-api.server.d.ts +10 -0
- package/dist/src/views/admin/views/core/advanced/search/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/advanced/search/mutation-api.server.js +1 -0
- package/dist/src/views/admin/views/core/advanced/search/reindex-action.d.ts +6 -0
- package/dist/src/views/admin/views/core/advanced/search/reindex-action.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/advanced/search/reindex-action.js +1 -0
- package/dist/src/views/admin/views/core/advanced/search/search-header-actions.d.ts +3 -0
- package/dist/src/views/admin/views/core/advanced/search/search-header-actions.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/advanced/search/search-header-actions.js +1 -0
- package/dist/src/views/admin/views/core/advanced/search/search-view.d.ts +7 -0
- package/dist/src/views/admin/views/core/advanced/search/search-view.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/advanced/search/search-view.js +1 -0
- package/dist/src/views/admin/views/core/dashboard/dashboard-admin-view.d.ts +1 -4
- package/dist/src/views/admin/views/core/dashboard/dashboard-admin-view.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/dashboard/dashboard-admin-view.js +1 -2
- package/dist/src/views/admin/views/core/dashboard/send-notification/mutation-api.server.d.ts +6 -0
- package/dist/src/views/admin/views/core/dashboard/send-notification/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/dashboard/send-notification/mutation-api.server.js +1 -0
- package/dist/src/views/admin/views/core/dashboard/send-notification/send-notification.d.ts +2 -5
- package/dist/src/views/admin/views/core/dashboard/send-notification/send-notification.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/dashboard/send-notification/send-notification.js +1 -2
- package/dist/src/views/admin/views/core/debug/actions/clear-cache/clear-cache.d.ts +1 -4
- package/dist/src/views/admin/views/core/debug/actions/clear-cache/clear-cache.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/debug/actions/clear-cache/clear-cache.js +1 -2
- package/dist/src/views/admin/views/core/debug/actions/clear-cache/mutation-api.server.d.ts +2 -0
- package/dist/src/views/admin/views/core/debug/actions/clear-cache/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/debug/actions/clear-cache/mutation-api.server.js +1 -0
- package/dist/src/views/admin/views/core/debug/queue/queue-view.d.ts +1 -4
- package/dist/src/views/admin/views/core/debug/queue/queue-view.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/debug/queue/queue-view.js +1 -2
- package/dist/src/views/admin/views/core/debug/system-logs/actions/more/content.d.ts +2 -5
- package/dist/src/views/admin/views/core/debug/system-logs/actions/more/content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/debug/system-logs/actions/more/content.js +1 -2
- package/dist/src/views/admin/views/core/debug/system-logs/actions/more/more.d.ts +16 -18
- 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 -2
- package/dist/src/views/admin/views/core/debug/system-logs/badges/badge-status.d.ts +2 -5
- package/dist/src/views/admin/views/core/debug/system-logs/badges/badge-status.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/debug/system-logs/badges/badge-status.js +1 -2
- package/dist/src/views/admin/views/core/debug/system-logs/badges/badge-type-log.d.ts +2 -5
- package/dist/src/views/admin/views/core/debug/system-logs/badges/badge-type-log.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/debug/system-logs/badges/badge-type-log.js +1 -2
- package/dist/src/views/admin/views/core/debug/system-logs/system-logs-view.d.ts +28 -31
- package/dist/src/views/admin/views/core/debug/system-logs/system-logs-view.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/debug/system-logs/system-logs-view.js +1 -2
- package/dist/src/views/admin/views/core/staff/create/create-staff-permissions-view.d.ts +3 -6
- package/dist/src/views/admin/views/core/staff/create/create-staff-permissions-view.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/staff/create/create-staff-permissions-view.js +1 -2
- package/dist/src/views/admin/views/core/staff/create/form.d.ts +3 -6
- package/dist/src/views/admin/views/core/staff/create/form.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/staff/create/form.js +1 -2
- package/dist/src/views/admin/views/core/staff/create/mutation-api.server.d.ts +14 -0
- package/dist/src/views/admin/views/core/staff/create/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/staff/create/mutation-api.server.js +1 -0
- package/dist/src/views/admin/views/core/staff/create/search.action.server.d.ts +8 -0
- package/dist/src/views/admin/views/core/staff/create/search.action.server.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/staff/create/search.action.server.js +1 -0
- package/dist/src/views/admin/views/core/staff/edit/edit-staff-permissions-view.d.ts +5 -7
- package/dist/src/views/admin/views/core/staff/edit/edit-staff-permissions-view.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/staff/edit/edit-staff-permissions-view.js +1 -2
- package/dist/src/views/admin/views/core/staff/edit/form.d.ts +21 -23
- package/dist/src/views/admin/views/core/staff/edit/form.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/staff/edit/form.js +1 -2
- package/dist/src/views/admin/views/core/staff/edit/mutation-api.server.d.ts +13 -0
- package/dist/src/views/admin/views/core/staff/edit/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/staff/edit/mutation-api.server.js +1 -0
- package/dist/src/views/admin/views/core/staff/selectable-card.d.ts +7 -9
- package/dist/src/views/admin/views/core/staff/selectable-card.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/staff/selectable-card.js +1 -2
- package/dist/src/views/admin/views/core/staff/table/actions/delete-action.server.d.ts +11 -0
- package/dist/src/views/admin/views/core/staff/table/actions/delete-action.server.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/staff/table/actions/delete-action.server.js +1 -0
- package/dist/src/views/admin/views/core/staff/table/actions/staff-row-actions.d.ts +8 -11
- package/dist/src/views/admin/views/core/staff/table/actions/staff-row-actions.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/staff/table/actions/staff-row-actions.js +1 -2
- package/dist/src/views/admin/views/core/staff/table/staff-table.d.ts +4 -6
- package/dist/src/views/admin/views/core/staff/table/staff-table.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/staff/table/staff-table.js +1 -2
- package/dist/src/views/admin/views/core/staff/table/staff-user-format.d.ts +13 -15
- package/dist/src/views/admin/views/core/staff/table/staff-user-format.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/staff/table/staff-user-format.js +1 -2
- package/dist/src/views/admin/views/core/staff/views/admins/admins-staff-view.d.ts +2 -5
- package/dist/src/views/admin/views/core/staff/views/admins/admins-staff-view.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/staff/views/admins/admins-staff-view.js +1 -2
- package/dist/src/views/admin/views/core/staff/views/moderators/moderators-staff-view.d.ts +2 -5
- package/dist/src/views/admin/views/core/staff/views/moderators/moderators-staff-view.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/staff/views/moderators/moderators-staff-view.js +1 -2
- package/dist/src/views/admin/views/core/system/files/actions/delete-action.server.d.ts +9 -0
- package/dist/src/views/admin/views/core/system/files/actions/delete-action.server.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/system/files/actions/delete-action.server.js +1 -0
- package/dist/src/views/admin/views/core/system/files/actions/file-row-actions.d.ts +5 -8
- package/dist/src/views/admin/views/core/system/files/actions/file-row-actions.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/system/files/actions/file-row-actions.js +1 -2
- package/dist/src/views/admin/views/core/system/files/files-table-view.d.ts +3 -6
- package/dist/src/views/admin/views/core/system/files/files-table-view.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/system/files/files-table-view.js +1 -2
- package/dist/src/views/admin/views/core/system/integrations/integration-card.d.ts +13 -16
- package/dist/src/views/admin/views/core/system/integrations/integration-card.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/system/integrations/integration-card.js +1 -2
- package/dist/src/views/admin/views/core/system/integrations/integrations-view.d.ts +2 -5
- package/dist/src/views/admin/views/core/system/integrations/integrations-view.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/system/integrations/integrations-view.js +1 -2
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/content.d.ts +1 -4
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/content.js +1 -2
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/mutation-api.server.d.ts +12 -0
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/mutation-api.server.js +1 -0
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/send-test-email.d.ts +1 -4
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/send-test-email.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/send-test-email.js +1 -2
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/use-form.d.ts +13 -16
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/use-form.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/use-form.js +1 -2
- package/dist/src/views/admin/views/core/system/integrations/test-storage/content.d.ts +1 -4
- package/dist/src/views/admin/views/core/system/integrations/test-storage/content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/system/integrations/test-storage/content.js +1 -2
- package/dist/src/views/admin/views/core/system/integrations/test-storage/test-storage.d.ts +1 -4
- package/dist/src/views/admin/views/core/system/integrations/test-storage/test-storage.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/system/integrations/test-storage/test-storage.js +1 -2
- package/dist/src/views/admin/views/core/test.d.ts +1 -4
- package/dist/src/views/admin/views/core/test.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/test.js +1 -4
- package/dist/src/views/admin/views/core/users/actions/create/content.d.ts +1 -4
- package/dist/src/views/admin/views/core/users/actions/create/content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/actions/create/content.js +1 -2
- package/dist/src/views/admin/views/core/users/actions/create/create.d.ts +1 -4
- 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 -2
- package/dist/src/views/admin/views/core/users/actions/create/mutation-api.server.d.ts +14 -0
- package/dist/src/views/admin/views/core/users/actions/create/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/actions/create/mutation-api.server.js +1 -0
- package/dist/src/views/admin/views/core/users/actions/create/use-form.d.ts +13 -16
- package/dist/src/views/admin/views/core/users/actions/create/use-form.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/actions/create/use-form.js +1 -2
- package/dist/src/views/admin/views/core/users/actions/verify-email/mutation-api.server.d.ts +11 -0
- package/dist/src/views/admin/views/core/users/actions/verify-email/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/actions/verify-email/mutation-api.server.js +1 -0
- package/dist/src/views/admin/views/core/users/actions/verify-email/verify-email.d.ts +4 -7
- 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 -2
- package/dist/src/views/admin/views/core/users/actions.d.ts +3 -6
- 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 -2
- package/dist/src/views/admin/views/core/users/roles/actions/actions.d.ts +3 -0
- package/dist/src/views/admin/views/core/users/roles/actions/actions.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/roles/actions/actions.js +1 -0
- package/dist/src/views/admin/views/core/users/roles/actions/create-edit/create-edit.d.ts +15 -0
- package/dist/src/views/admin/views/core/users/roles/actions/create-edit/create-edit.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/roles/actions/create-edit/create-edit.js +1 -0
- package/dist/src/views/admin/views/core/users/roles/actions/create-edit/mutation-api.server.d.ts +11 -0
- package/dist/src/views/admin/views/core/users/roles/actions/create-edit/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/roles/actions/create-edit/mutation-api.server.js +1 -0
- package/dist/src/views/admin/views/core/users/roles/roles-admin-view.d.ts +2 -5
- package/dist/src/views/admin/views/core/users/roles/roles-admin-view.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/roles/roles-admin-view.js +1 -2
- package/dist/src/views/admin/views/core/users/roles/table/actions/delete-action.d.ts +13 -0
- package/dist/src/views/admin/views/core/users/roles/table/actions/delete-action.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/roles/table/actions/delete-action.js +1 -0
- package/dist/src/views/admin/views/core/users/roles/table/actions/delete-role.action.server.d.ts +9 -0
- package/dist/src/views/admin/views/core/users/roles/table/actions/delete-role.action.server.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/roles/table/actions/delete-role.action.server.js +1 -0
- package/dist/src/views/admin/views/core/users/roles/table/actions/edit-action.d.ts +7 -0
- package/dist/src/views/admin/views/core/users/roles/table/actions/edit-action.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/roles/table/actions/edit-action.js +1 -0
- package/dist/src/views/admin/views/core/users/roles/table/actions/row-actions.d.ts +22 -0
- package/dist/src/views/admin/views/core/users/roles/table/actions/row-actions.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/roles/table/actions/row-actions.js +1 -0
- package/dist/src/views/admin/views/core/users/roles/table/actions/search-roles.action.server.d.ts +10 -0
- package/dist/src/views/admin/views/core/users/roles/table/actions/search-roles.action.server.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/roles/table/actions/search-roles.action.server.js +1 -0
- package/dist/src/views/admin/views/core/users/search-roles.action.server.d.ts +3 -0
- package/dist/src/views/admin/views/core/users/search-roles.action.server.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/search-roles.action.server.js +1 -0
- package/dist/src/views/admin/views/core/users/show/edit-buttons.d.ts +2 -5
- package/dist/src/views/admin/views/core/users/show/edit-buttons.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/show/edit-buttons.js +1 -2
- package/dist/src/views/admin/views/core/users/show/edit-field.d.ts +10 -13
- package/dist/src/views/admin/views/core/users/show/edit-field.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/show/edit-field.js +1 -2
- package/dist/src/views/admin/views/core/users/show/edit-name-code.d.ts +3 -6
- package/dist/src/views/admin/views/core/users/show/edit-name-code.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/show/edit-name-code.js +1 -2
- package/dist/src/views/admin/views/core/users/show/mutation-api.server.d.ts +19 -0
- package/dist/src/views/admin/views/core/users/show/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/show/mutation-api.server.js +1 -0
- package/dist/src/views/admin/views/core/users/show/roles/edit-roles.d.ts +5 -8
- package/dist/src/views/admin/views/core/users/show/roles/edit-roles.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/show/roles/edit-roles.js +1 -2
- package/dist/src/views/admin/views/core/users/show/roles/roles.d.ts +6 -9
- package/dist/src/views/admin/views/core/users/show/roles/roles.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/show/roles/roles.js +1 -2
- package/dist/src/views/admin/views/core/users/show/roles/search-roles.action.server.d.ts +10 -0
- package/dist/src/views/admin/views/core/users/show/roles/search-roles.action.server.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/show/roles/search-roles.action.server.js +1 -0
- package/dist/src/views/admin/views/core/users/show/roles/update-roles.action.server.d.ts +13 -0
- package/dist/src/views/admin/views/core/users/show/roles/update-roles.action.server.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/show/roles/update-roles.action.server.js +1 -0
- package/dist/src/views/admin/views/core/users/show/show-user-admin-view.d.ts +2 -5
- 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 -2
- package/dist/src/views/admin/views/core/users/show/tabs.d.ts +5 -0
- package/dist/src/views/admin/views/core/users/show/tabs.d.ts.map +1 -0
- package/dist/src/views/admin/views/core/users/show/tabs.js +1 -0
- package/dist/src/views/admin/views/core/users/users-admin-view.d.ts +2 -5
- 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 -2
- package/dist/src/views/auth/password-reset/change-password-form/form.d.ts +3 -6
- package/dist/src/views/auth/password-reset/change-password-form/form.d.ts.map +1 -1
- package/dist/src/views/auth/password-reset/change-password-form/form.js +1 -2
- package/dist/src/views/auth/password-reset/change-password-form/mutation-api.server.d.ts +6 -0
- package/dist/src/views/auth/password-reset/change-password-form/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/auth/password-reset/change-password-form/mutation-api.server.js +1 -0
- package/dist/src/views/auth/password-reset/change-password-form/use-form.d.ts +8 -11
- package/dist/src/views/auth/password-reset/change-password-form/use-form.d.ts.map +1 -1
- package/dist/src/views/auth/password-reset/change-password-form/use-form.js +1 -2
- package/dist/src/views/auth/password-reset/form/form.d.ts +4 -7
- package/dist/src/views/auth/password-reset/form/form.d.ts.map +1 -1
- package/dist/src/views/auth/password-reset/form/form.js +1 -2
- package/dist/src/views/auth/password-reset/form/mutation-api.server.d.ts +7 -0
- package/dist/src/views/auth/password-reset/form/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/auth/password-reset/form/mutation-api.server.js +1 -0
- package/dist/src/views/auth/password-reset/form/use-form.d.ts +9 -12
- package/dist/src/views/auth/password-reset/form/use-form.d.ts.map +1 -1
- package/dist/src/views/auth/password-reset/form/use-form.js +1 -2
- package/dist/src/views/auth/password-reset/password-reset-view.d.ts +5 -8
- package/dist/src/views/auth/password-reset/password-reset-view.d.ts.map +1 -1
- package/dist/src/views/auth/password-reset/password-reset-view.js +1 -2
- package/dist/src/views/auth/settings/devices/device-item.d.ts +5 -0
- package/dist/src/views/auth/settings/devices/device-item.d.ts.map +1 -0
- package/dist/src/views/auth/settings/devices/device-item.js +1 -0
- package/dist/src/views/auth/settings/devices/devices.d.ts +2 -0
- package/dist/src/views/auth/settings/devices/devices.d.ts.map +1 -0
- package/dist/src/views/auth/settings/devices/devices.js +1 -0
- package/dist/src/views/auth/settings/devices/revoke-action.server.d.ts +9 -0
- package/dist/src/views/auth/settings/devices/revoke-action.server.d.ts.map +1 -0
- package/dist/src/views/auth/settings/devices/revoke-action.server.js +1 -0
- package/dist/src/views/auth/settings/devices/revoke-device-button.d.ts +5 -0
- package/dist/src/views/auth/settings/devices/revoke-device-button.d.ts.map +1 -0
- package/dist/src/views/auth/settings/devices/revoke-device-button.js +1 -0
- package/dist/src/views/auth/settings/layout.d.ts +2 -5
- package/dist/src/views/auth/settings/layout.d.ts.map +1 -1
- package/dist/src/views/auth/settings/layout.js +1 -2
- package/dist/src/views/auth/settings/nav.d.ts +1 -4
- package/dist/src/views/auth/settings/nav.d.ts.map +1 -1
- package/dist/src/views/auth/settings/nav.js +1 -2
- package/dist/src/views/auth/settings/overview/overview.d.ts +1 -4
- package/dist/src/views/auth/settings/overview/overview.d.ts.map +1 -1
- package/dist/src/views/auth/settings/overview/overview.js +1 -2
- package/dist/src/views/auth/settings/security/security.d.ts +1 -4
- package/dist/src/views/auth/settings/security/security.d.ts.map +1 -1
- package/dist/src/views/auth/settings/security/security.js +1 -2
- package/dist/src/views/auth/settings/shell.d.ts +2 -5
- package/dist/src/views/auth/settings/shell.d.ts.map +1 -1
- package/dist/src/views/auth/settings/shell.js +1 -2
- package/dist/src/views/auth/sign-in/form/form.d.ts +3 -6
- package/dist/src/views/auth/sign-in/form/form.d.ts.map +1 -1
- package/dist/src/views/auth/sign-in/form/form.js +1 -2
- package/dist/src/views/auth/sign-in/form/mutation-api.server.d.ts +10 -0
- package/dist/src/views/auth/sign-in/form/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/auth/sign-in/form/mutation-api.server.js +1 -0
- package/dist/src/views/auth/sign-in/form/use-form.d.ts +13 -16
- package/dist/src/views/auth/sign-in/form/use-form.d.ts.map +1 -1
- package/dist/src/views/auth/sign-in/form/use-form.js +1 -2
- package/dist/src/views/auth/sign-in/sign-in-view.d.ts +1 -4
- package/dist/src/views/auth/sign-in/sign-in-view.d.ts.map +1 -1
- package/dist/src/views/auth/sign-in/sign-in-view.js +1 -2
- package/dist/src/views/auth/sign-up/components/password-input.d.ts +3 -6
- package/dist/src/views/auth/sign-up/components/password-input.d.ts.map +1 -1
- package/dist/src/views/auth/sign-up/components/password-input.js +1 -2
- package/dist/src/views/auth/sign-up/email-confirmation-view.d.ts +2 -5
- package/dist/src/views/auth/sign-up/email-confirmation-view.d.ts.map +1 -1
- package/dist/src/views/auth/sign-up/email-confirmation-view.js +1 -2
- package/dist/src/views/auth/sign-up/form/form.d.ts +5 -8
- package/dist/src/views/auth/sign-up/form/form.d.ts.map +1 -1
- package/dist/src/views/auth/sign-up/form/form.js +1 -2
- package/dist/src/views/auth/sign-up/form/mutation-api.server.d.ts +16 -0
- package/dist/src/views/auth/sign-up/form/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/auth/sign-up/form/mutation-api.server.js +1 -0
- package/dist/src/views/auth/sign-up/form/use-form.d.ts +18 -21
- package/dist/src/views/auth/sign-up/form/use-form.d.ts.map +1 -1
- package/dist/src/views/auth/sign-up/form/use-form.js +1 -2
- package/dist/src/views/auth/sign-up/sign-up-view.d.ts +1 -4
- package/dist/src/views/auth/sign-up/sign-up-view.d.ts.map +1 -1
- package/dist/src/views/auth/sign-up/sign-up-view.js +1 -2
- package/dist/src/views/auth/sign-up/wrapper.d.ts +4 -7
- package/dist/src/views/auth/sign-up/wrapper.d.ts.map +1 -1
- package/dist/src/views/auth/sign-up/wrapper.js +1 -2
- package/dist/src/views/auth/sso/buttons/client.d.ts +3 -6
- package/dist/src/views/auth/sso/buttons/client.d.ts.map +1 -1
- package/dist/src/views/auth/sso/buttons/client.js +1 -2
- package/dist/src/views/auth/sso/buttons/mutation-api.server.d.ts +4 -0
- package/dist/src/views/auth/sso/buttons/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/auth/sso/buttons/mutation-api.server.js +1 -0
- package/dist/src/views/auth/sso/buttons/sso-buttons.d.ts +2 -5
- package/dist/src/views/auth/sso/buttons/sso-buttons.d.ts.map +1 -1
- package/dist/src/views/auth/sso/buttons/sso-buttons.js +1 -2
- package/dist/src/views/auth/sso/callback/callback-sso-view.d.ts +3 -6
- package/dist/src/views/auth/sso/callback/callback-sso-view.d.ts.map +1 -1
- package/dist/src/views/auth/sso/callback/callback-sso-view.js +1 -2
- package/dist/src/views/auth/sso/callback/client/client.d.ts +6 -9
- 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 -2
- package/dist/src/views/auth/sso/callback/client/mutation-api.server.d.ts +8 -0
- package/dist/src/views/auth/sso/callback/client/mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/auth/sso/callback/client/mutation-api.server.js +1 -0
- package/dist/src/views/breadcrumb/breadcrumb-main.d.ts +5 -8
- package/dist/src/views/breadcrumb/breadcrumb-main.d.ts.map +1 -1
- package/dist/src/views/breadcrumb/breadcrumb-main.js +1 -2
- package/dist/src/views/breadcrumb/breadcrumb-render.d.ts +3 -6
- package/dist/src/views/breadcrumb/breadcrumb-render.d.ts.map +1 -1
- package/dist/src/views/breadcrumb/breadcrumb-render.js +1 -2
- package/dist/src/views/breadcrumb/crumb.d.ts +7 -10
- package/dist/src/views/breadcrumb/crumb.d.ts.map +1 -1
- package/dist/src/views/breadcrumb/crumb.js +1 -2
- package/dist/src/views/breadcrumb/resolve-main-breadcrumb.d.ts +2 -5
- package/dist/src/views/breadcrumb/resolve-main-breadcrumb.d.ts.map +1 -1
- package/dist/src/views/breadcrumb/resolve-main-breadcrumb.js +1 -2
- package/dist/src/views/error/back-button.d.ts +3 -6
- package/dist/src/views/error/back-button.d.ts.map +1 -1
- package/dist/src/views/error/back-button.js +1 -2
- package/dist/src/views/error/error-view.d.ts +5 -8
- package/dist/src/views/error/error-view.d.ts.map +1 -1
- package/dist/src/views/error/error-view.js +1 -2
- package/dist/src/views/error/global-error-view.d.ts +4 -7
- package/dist/src/views/error/global-error-view.d.ts.map +1 -1
- package/dist/src/views/error/global-error-view.js +1 -2
- package/dist/src/views/files/actions/delete-action.server.d.ts +9 -0
- package/dist/src/views/files/actions/delete-action.server.d.ts.map +1 -0
- package/dist/src/views/files/actions/delete-action.server.js +1 -0
- package/dist/src/views/files/actions/file-row-actions.d.ts +3 -6
- package/dist/src/views/files/actions/file-row-actions.d.ts.map +1 -1
- package/dist/src/views/files/actions/file-row-actions.js +1 -2
- package/dist/src/views/files/my-files-table-view.d.ts +3 -6
- package/dist/src/views/files/my-files-table-view.d.ts.map +1 -1
- package/dist/src/views/files/my-files-table-view.js +1 -2
- package/dist/src/views/layouts/provider.d.ts +10 -9
- package/dist/src/views/layouts/provider.d.ts.map +1 -1
- package/dist/src/views/layouts/provider.js +1 -2
- package/dist/src/views/layouts/rate-limit-listener.d.ts +2 -0
- package/dist/src/views/layouts/rate-limit-listener.d.ts.map +1 -0
- package/dist/src/views/layouts/rate-limit-listener.js +1 -0
- package/dist/src/views/layouts/root-layout.d.ts +11 -14
- package/dist/src/views/layouts/root-layout.d.ts.map +1 -1
- package/dist/src/views/layouts/root-layout.js +1 -2
- package/dist/src/views/layouts/theme/header/header.d.ts +5 -8
- package/dist/src/views/layouts/theme/header/header.d.ts.map +1 -1
- package/dist/src/views/layouts/theme/header/header.js +1 -2
- package/dist/src/views/layouts/theme/header/user/auth/auth.d.ts +1 -4
- package/dist/src/views/layouts/theme/header/user/auth/auth.d.ts.map +1 -1
- package/dist/src/views/layouts/theme/header/user/auth/auth.js +1 -2
- package/dist/src/views/layouts/theme/header/user/auth/client.d.ts +3 -6
- 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 -2
- package/dist/src/views/layouts/theme/header/user/auth/log-out-mutation-api.server.d.ts +4 -0
- package/dist/src/views/layouts/theme/header/user/auth/log-out-mutation-api.server.d.ts.map +1 -0
- package/dist/src/views/layouts/theme/header/user/auth/log-out-mutation-api.server.js +1 -0
- package/dist/src/views/layouts/theme/header/user/user.d.ts +1 -4
- package/dist/src/views/layouts/theme/header/user/user.d.ts.map +1 -1
- package/dist/src/views/layouts/theme/header/user/user.js +1 -2
- package/dist/src/views/layouts/theme/layout.d.ts +6 -9
- package/dist/src/views/layouts/theme/layout.d.ts.map +1 -1
- package/dist/src/views/layouts/theme/layout.js +1 -2
- package/dist/src/views/layouts/theme/notification-listener.d.ts +1 -4
- package/dist/src/views/layouts/theme/notification-listener.d.ts.map +1 -1
- package/dist/src/views/layouts/theme/notification-listener.js +1 -2
- package/dist/src/views/layouts/theme/web-socket-auth-sync.d.ts +2 -5
- package/dist/src/views/layouts/theme/web-socket-auth-sync.d.ts.map +1 -1
- package/dist/src/views/layouts/theme/web-socket-auth-sync.js +1 -2
- package/dist/src/views/search/discover-view.d.ts +2 -0
- package/dist/src/views/search/discover-view.d.ts.map +1 -0
- package/dist/src/views/search/discover-view.js +1 -0
- package/dist/src/views/search/registry.d.ts +9 -0
- package/dist/src/views/search/registry.d.ts.map +1 -0
- package/dist/src/views/search/registry.js +1 -0
- package/dist/src/views/search/search-controls.d.ts +8 -0
- package/dist/src/views/search/search-controls.d.ts.map +1 -0
- package/dist/src/views/search/search-controls.js +1 -0
- package/dist/src/views/search/search-feed.d.ts +17 -0
- package/dist/src/views/search/search-feed.d.ts.map +1 -0
- package/dist/src/views/search/search-feed.js +1 -0
- package/dist/src/views/search/search-view.d.ts +4 -0
- package/dist/src/views/search/search-view.d.ts.map +1 -0
- package/dist/src/views/search/search-view.js +1 -0
- package/dist/src/views/search/types.d.ts +34 -0
- package/dist/src/views/search/types.d.ts.map +1 -0
- package/dist/src/views/search/types.js +1 -0
- package/dist/src/vitnode.config.d.ts +79 -86
- package/dist/src/vitnode.config.d.ts.map +1 -1
- package/dist/src/vitnode.config.js +1 -2
- package/dist/src/ws/handle.d.ts +4 -7
- package/dist/src/ws/handle.d.ts.map +1 -1
- package/dist/src/ws/handle.js +1 -2
- package/dist/src/ws/manager.d.ts +11 -14
- package/dist/src/ws/manager.d.ts.map +1 -1
- package/dist/src/ws/manager.js +1 -2
- package/dist/src/ws/notifications.d.ts +6 -10
- package/dist/src/ws/notifications.d.ts.map +1 -1
- package/dist/src/ws/notifications.js +1 -2
- package/dist/src/ws/provider.d.ts +8 -10
- package/dist/src/ws/provider.d.ts.map +1 -1
- package/dist/src/ws/provider.js +1 -2
- package/dist/src/ws/registry.d.ts +16 -19
- package/dist/src/ws/registry.d.ts.map +1 -1
- package/dist/src/ws/registry.js +1 -2
- package/dist/src/ws/types.d.ts +17 -20
- package/dist/src/ws/types.d.ts.map +1 -1
- package/dist/src/ws/types.js +1 -2
- package/dist/src/ws/use-websocket.d.ts +6 -9
- package/dist/src/ws/use-websocket.d.ts.map +1 -1
- package/dist/src/ws/use-websocket.js +1 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/tsup.config.d.ts +3 -0
- package/dist/tsup.config.d.ts.map +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/package.json +42 -38
- package/src/locales/api/en.json +19 -0
- package/src/locales/api/index.ts +15 -0
- package/src/locales/en.json +165 -27
- package/src/locales/index.ts +17 -0
- package/src/routes/admin/core/advanced/cron/page.tsx +10 -1
- package/src/routes/admin/core/advanced/search/page.tsx +50 -0
- package/src/routes/admin/core/users/[id]/page.tsx +1 -1
- package/src/routes/admin/core/users/roles/page.tsx +13 -2
- package/src/routes/breadcrumb/admin/core/advanced/cron/page.tsx +5 -0
- package/src/routes/breadcrumb/admin/core/advanced/queue/page.tsx +5 -0
- package/src/routes/breadcrumb/admin/core/advanced/search/page.tsx +5 -0
- package/src/routes/breadcrumb/admin/core/page.tsx +5 -0
- package/src/routes/breadcrumb/admin/core/system/files/page.tsx +5 -0
- package/src/routes/breadcrumb/admin/core/system/integrations/page.tsx +5 -0
- package/src/routes/breadcrumb/admin/core/users/page.tsx +5 -0
- package/src/routes/breadcrumb/admin/core/users/roles/page.tsx +5 -0
- package/src/routes/breadcrumb/main/discover/page.tsx +14 -0
- package/src/routes/breadcrumb/main/search/page.tsx +11 -0
- package/src/routes/breadcrumb/main/settings/devices/page.tsx +17 -0
- package/src/routes/main/discover/page.tsx +41 -0
- package/src/routes/main/search/page.tsx +43 -0
- package/src/routes/main/settings/devices/page.tsx +15 -0
- package/dist/src/api/adapters/sso/discord.js.map +0 -1
- package/dist/src/api/adapters/sso/facebook.js.map +0 -1
- package/dist/src/api/adapters/sso/google.js.map +0 -1
- package/dist/src/api/adapters/storage/local.js.map +0 -1
- package/dist/src/api/config.js.map +0 -1
- package/dist/src/api/lib/cache-client.js.map +0 -1
- package/dist/src/api/lib/cache.js.map +0 -1
- package/dist/src/api/lib/check-plugin-id.js.map +0 -1
- package/dist/src/api/lib/check-staff-permission.js.map +0 -1
- package/dist/src/api/lib/cron.js.map +0 -1
- package/dist/src/api/lib/logger-middleware.js.map +0 -1
- package/dist/src/api/lib/module.js.map +0 -1
- package/dist/src/api/lib/permission-staff.js.map +0 -1
- package/dist/src/api/lib/plugin.js.map +0 -1
- package/dist/src/api/lib/queue.js.map +0 -1
- package/dist/src/api/lib/resolve-role-names.js.map +0 -1
- package/dist/src/api/lib/route.js.map +0 -1
- package/dist/src/api/lib/staff-permission.js.map +0 -1
- package/dist/src/api/lib/websocket.js.map +0 -1
- package/dist/src/api/lib/with-pagination.js.map +0 -1
- package/dist/src/api/middlewares/captcha.middleware.js.map +0 -1
- package/dist/src/api/middlewares/cron-auth.middleware.js.map +0 -1
- package/dist/src/api/middlewares/global.middleware.js.map +0 -1
- package/dist/src/api/middlewares/plugin.middleware.js.map +0 -1
- package/dist/src/api/middlewares/rate-limiter.middleware.js.map +0 -1
- package/dist/src/api/models/device.js.map +0 -1
- package/dist/src/api/models/email.js.map +0 -1
- package/dist/src/api/models/password.js.map +0 -1
- package/dist/src/api/models/queue.js.map +0 -1
- package/dist/src/api/models/session-admin.js.map +0 -1
- package/dist/src/api/models/session-cache.js.map +0 -1
- package/dist/src/api/models/session.js.map +0 -1
- package/dist/src/api/models/sso.js.map +0 -1
- package/dist/src/api/models/storage.js.map +0 -1
- package/dist/src/api/models/user/get-user-by-id.js.map +0 -1
- package/dist/src/api/models/user/get-user-by-name-code.js.map +0 -1
- package/dist/src/api/models/user/sign-in-with-passwords.js.map +0 -1
- package/dist/src/api/models/user/sign-up.js.map +0 -1
- package/dist/src/api/models/user.js.map +0 -1
- package/dist/src/api/modules/admin/admin.module.js.map +0 -1
- package/dist/src/api/modules/admin/advanced/advanced.admin.module.js.map +0 -1
- package/dist/src/api/modules/admin/advanced/cron/cron.admin.module.js.map +0 -1
- package/dist/src/api/modules/admin/advanced/cron/routes/get.route.js.map +0 -1
- package/dist/src/api/modules/admin/advanced/cron/routes/run.route.js.map +0 -1
- package/dist/src/api/modules/admin/advanced/queue/queue.admin.module.js.map +0 -1
- package/dist/src/api/modules/admin/advanced/queue/routes/get.route.js.map +0 -1
- package/dist/src/api/modules/admin/debug/debug.admin.module.js.map +0 -1
- package/dist/src/api/modules/admin/debug/routes/integrations.route.js.map +0 -1
- package/dist/src/api/modules/admin/debug/routes/logs.route.js.map +0 -1
- package/dist/src/api/modules/admin/debug/routes/queue.route.js.map +0 -1
- package/dist/src/api/modules/admin/debug/routes/send-test-email.route.js.map +0 -1
- package/dist/src/api/modules/admin/debug/routes/test-storage-upload.route.js.map +0 -1
- package/dist/src/api/modules/admin/files/files.admin.module.js.map +0 -1
- package/dist/src/api/modules/admin/files/routes/delete.route.js.map +0 -1
- package/dist/src/api/modules/admin/files/routes/download.route.js.map +0 -1
- package/dist/src/api/modules/admin/files/routes/list.route.js.map +0 -1
- package/dist/src/api/modules/admin/roles/roles.admin.module.js.map +0 -1
- package/dist/src/api/modules/admin/roles/routes/list.route.js.map +0 -1
- package/dist/src/api/modules/admin/roles/routes/show.route.js.map +0 -1
- package/dist/src/api/modules/admin/routes/notifications.route.js.map +0 -1
- package/dist/src/api/modules/admin/routes/session.route.js.map +0 -1
- package/dist/src/api/modules/admin/staff/lib/resolve-staff-edges.js.map +0 -1
- package/dist/src/api/modules/admin/staff/lib/schema.js.map +0 -1
- package/dist/src/api/modules/admin/staff/routes/admins.route.js.map +0 -1
- package/dist/src/api/modules/admin/staff/routes/create.route.js.map +0 -1
- package/dist/src/api/modules/admin/staff/routes/delete.route.js.map +0 -1
- package/dist/src/api/modules/admin/staff/routes/moderators.route.js.map +0 -1
- package/dist/src/api/modules/admin/staff/routes/permission-catalog.route.js.map +0 -1
- package/dist/src/api/modules/admin/staff/routes/show-permissions.route.js.map +0 -1
- package/dist/src/api/modules/admin/staff/routes/update-permissions.route.js.map +0 -1
- package/dist/src/api/modules/admin/staff/staff.admin.module.js.map +0 -1
- package/dist/src/api/modules/admin/users/lib/assert-edit-user-permission.js.map +0 -1
- package/dist/src/api/modules/admin/users/routes/create.route.js.map +0 -1
- package/dist/src/api/modules/admin/users/routes/list.route.js.map +0 -1
- package/dist/src/api/modules/admin/users/routes/show.route.js.map +0 -1
- package/dist/src/api/modules/admin/users/routes/update.route.js.map +0 -1
- package/dist/src/api/modules/admin/users/routes/users.route.js.map +0 -1
- package/dist/src/api/modules/admin/users/routes/verify-email.route.js.map +0 -1
- package/dist/src/api/modules/admin/users/users.admin.module.js.map +0 -1
- package/dist/src/api/modules/cron/cron/clean.cron.js.map +0 -1
- package/dist/src/api/modules/cron/cron.module.js.map +0 -1
- package/dist/src/api/modules/cron/helpers/process-cron-jobs.js.map +0 -1
- package/dist/src/api/modules/cron/routes/cron.route.js.map +0 -1
- package/dist/src/api/modules/middleware/middleware.module.js.map +0 -1
- package/dist/src/api/modules/middleware/route.js.map +0 -1
- package/dist/src/api/modules/queue/cron/process-queue.cron.js.map +0 -1
- package/dist/src/api/modules/queue/helpers/process-queue-tasks.js.map +0 -1
- package/dist/src/api/modules/queue/queue.module.js.map +0 -1
- package/dist/src/api/modules/queue/tasks/send-email.task.js.map +0 -1
- package/dist/src/api/modules/users/avatar-color.js.map +0 -1
- package/dist/src/api/modules/users/files/files.module.js.map +0 -1
- package/dist/src/api/modules/users/files/routes/delete.route.js.map +0 -1
- package/dist/src/api/modules/users/files/routes/download.route.js.map +0 -1
- package/dist/src/api/modules/users/files/routes/list.route.js.map +0 -1
- package/dist/src/api/modules/users/routes/change-password.route.js.map +0 -1
- package/dist/src/api/modules/users/routes/permissions.route.js.map +0 -1
- package/dist/src/api/modules/users/routes/reset-passowrd.route.js.map +0 -1
- package/dist/src/api/modules/users/routes/session.route.js.map +0 -1
- package/dist/src/api/modules/users/routes/sign-in.route.js.map +0 -1
- package/dist/src/api/modules/users/routes/sign-out.route.js.map +0 -1
- package/dist/src/api/modules/users/routes/sign-up.route.js.map +0 -1
- package/dist/src/api/modules/users/routes/test.route.js.map +0 -1
- package/dist/src/api/modules/users/sso/routes/callback.route.js.map +0 -1
- package/dist/src/api/modules/users/sso/routes/create-url.route.js.map +0 -1
- package/dist/src/api/modules/users/sso/sso.module.js.map +0 -1
- package/dist/src/api/modules/users/users.module.js.map +0 -1
- package/dist/src/api/plugin.js.map +0 -1
- package/dist/src/components/avatar.js.map +0 -1
- package/dist/src/components/confirm-action/confirm-action-alert-dialog.js.map +0 -1
- package/dist/src/components/confirm-action/content.js.map +0 -1
- package/dist/src/components/date-format.js.map +0 -1
- package/dist/src/components/files/file-preview.js.map +0 -1
- package/dist/src/components/files/metadata-cell.js.map +0 -1
- package/dist/src/components/form/auto-form.js.map +0 -1
- package/dist/src/components/form/common/desc.js.map +0 -1
- package/dist/src/components/form/common/label.js.map +0 -1
- package/dist/src/components/form/fields/array.js.map +0 -1
- package/dist/src/components/form/fields/checkbox.js.map +0 -1
- package/dist/src/components/form/fields/combobox.js.map +0 -1
- package/dist/src/components/form/fields/editor.js.map +0 -1
- package/dist/src/components/form/fields/input.js.map +0 -1
- package/dist/src/components/form/fields/radio-group.js.map +0 -1
- package/dist/src/components/form/fields/select.js.map +0 -1
- package/dist/src/components/form/fields/switch.js.map +0 -1
- package/dist/src/components/form/fields/textarea.js.map +0 -1
- package/dist/src/components/i18n-provider.js.map +0 -1
- package/dist/src/components/logo-vitnode.js.map +0 -1
- package/dist/src/components/role-format.js.map +0 -1
- package/dist/src/components/staff-permission/provider.js.map +0 -1
- package/dist/src/components/switchers/langs/language-switcher.js.map +0 -1
- package/dist/src/components/switchers/themes/theme-switcher.js.map +0 -1
- package/dist/src/components/table/content.js.map +0 -1
- package/dist/src/components/table/data-table.js.map +0 -1
- package/dist/src/components/table/filters.js.map +0 -1
- package/dist/src/components/table/order-table-head.js.map +0 -1
- package/dist/src/components/table/pagination.js.map +0 -1
- package/dist/src/components/table/search.js.map +0 -1
- package/dist/src/components/theme-provider.js.map +0 -1
- package/dist/src/components/tiptap/extension.js.map +0 -1
- package/dist/src/components/tiptap/toolbar/actions/alignment-action.js.map +0 -1
- package/dist/src/components/tiptap/toolbar/actions/bold-action.js.map +0 -1
- package/dist/src/components/tiptap/toolbar/actions/headings-action.js.map +0 -1
- package/dist/src/components/tiptap/toolbar/actions/italic-action.js.map +0 -1
- package/dist/src/components/tiptap/toolbar/actions/list-action.js.map +0 -1
- package/dist/src/components/tiptap/toolbar/actions/text-format-more/text-format-more.js.map +0 -1
- package/dist/src/components/tiptap/toolbar/actions/underline-action.js.map +0 -1
- package/dist/src/components/tiptap/toolbar/actions/undo-redo-actions.js.map +0 -1
- package/dist/src/components/tiptap/toolbar/actions/utils/tooltip-shortcut.js.map +0 -1
- package/dist/src/components/tiptap/toolbar/tiptap-toolbar.js.map +0 -1
- package/dist/src/components/tiptap/toolbar/use-toolbar-editor.js.map +0 -1
- package/dist/src/components/ui/accordion.js.map +0 -1
- package/dist/src/components/ui/alert-dialog.js.map +0 -1
- package/dist/src/components/ui/alert.js.map +0 -1
- package/dist/src/components/ui/aspect-ratio.js.map +0 -1
- package/dist/src/components/ui/attachment.js.map +0 -1
- package/dist/src/components/ui/avatar.js.map +0 -1
- package/dist/src/components/ui/badge.js.map +0 -1
- package/dist/src/components/ui/breadcrumb.js.map +0 -1
- package/dist/src/components/ui/button-client.js.map +0 -1
- package/dist/src/components/ui/button-group.js.map +0 -1
- package/dist/src/components/ui/button.js.map +0 -1
- package/dist/src/components/ui/card.js.map +0 -1
- package/dist/src/components/ui/carousel.js.map +0 -1
- package/dist/src/components/ui/chart.js.map +0 -1
- package/dist/src/components/ui/checkbox.js.map +0 -1
- package/dist/src/components/ui/collapsible.js.map +0 -1
- package/dist/src/components/ui/combobox.js.map +0 -1
- package/dist/src/components/ui/command.js.map +0 -1
- package/dist/src/components/ui/context-menu.js.map +0 -1
- package/dist/src/components/ui/dialog.js.map +0 -1
- package/dist/src/components/ui/direction.js.map +0 -1
- package/dist/src/components/ui/drawer.js.map +0 -1
- package/dist/src/components/ui/dropdown-menu.js.map +0 -1
- package/dist/src/components/ui/editor-content.js.map +0 -1
- package/dist/src/components/ui/editor.js.map +0 -1
- package/dist/src/components/ui/empty.js.map +0 -1
- package/dist/src/components/ui/field.js.map +0 -1
- package/dist/src/components/ui/form.js.map +0 -1
- package/dist/src/components/ui/header-content.js.map +0 -1
- package/dist/src/components/ui/hover-card.js.map +0 -1
- package/dist/src/components/ui/input-group.js.map +0 -1
- package/dist/src/components/ui/input-otp.js.map +0 -1
- package/dist/src/components/ui/input.js.map +0 -1
- package/dist/src/components/ui/item.js.map +0 -1
- package/dist/src/components/ui/kbd.js.map +0 -1
- package/dist/src/components/ui/label.js.map +0 -1
- package/dist/src/components/ui/loader.js.map +0 -1
- package/dist/src/components/ui/menubar.js.map +0 -1
- package/dist/src/components/ui/native-select.js.map +0 -1
- package/dist/src/components/ui/navigation-menu.js.map +0 -1
- package/dist/src/components/ui/pagination.js.map +0 -1
- package/dist/src/components/ui/popover.js.map +0 -1
- package/dist/src/components/ui/progress.js.map +0 -1
- package/dist/src/components/ui/radio-group.js.map +0 -1
- package/dist/src/components/ui/resizable.js.map +0 -1
- package/dist/src/components/ui/scroll-area.js.map +0 -1
- package/dist/src/components/ui/select.js.map +0 -1
- package/dist/src/components/ui/separator.js.map +0 -1
- package/dist/src/components/ui/sheet.js.map +0 -1
- package/dist/src/components/ui/sidebar.js.map +0 -1
- package/dist/src/components/ui/skeleton.js.map +0 -1
- package/dist/src/components/ui/slider.js.map +0 -1
- package/dist/src/components/ui/sonner.js.map +0 -1
- package/dist/src/components/ui/spinner.js.map +0 -1
- package/dist/src/components/ui/switch.js.map +0 -1
- package/dist/src/components/ui/table.js.map +0 -1
- package/dist/src/components/ui/tabs.js.map +0 -1
- package/dist/src/components/ui/textarea.js.map +0 -1
- package/dist/src/components/ui/toggle-group.js.map +0 -1
- package/dist/src/components/ui/toggle.js.map +0 -1
- package/dist/src/components/ui/tooltip.js.map +0 -1
- package/dist/src/components/user-format.js.map +0 -1
- package/dist/src/config.js.map +0 -1
- package/dist/src/database/admins.js.map +0 -1
- package/dist/src/database/cron.js.map +0 -1
- package/dist/src/database/files.js.map +0 -1
- package/dist/src/database/languages.js.map +0 -1
- package/dist/src/database/logs.js.map +0 -1
- package/dist/src/database/moderators.js.map +0 -1
- package/dist/src/database/queue.js.map +0 -1
- package/dist/src/database/roles.js.map +0 -1
- package/dist/src/database/sessions.js.map +0 -1
- package/dist/src/database/users.js.map +0 -1
- package/dist/src/drizzle.config.js.map +0 -1
- package/dist/src/emails/default-template.js.map +0 -1
- package/dist/src/emails/reset-password.js.map +0 -1
- package/dist/src/emails/test-email.js.map +0 -1
- package/dist/src/emails/ui/button.js.map +0 -1
- package/dist/src/emails/ui/card.js.map +0 -1
- package/dist/src/hooks/use-before-unload.js.map +0 -1
- package/dist/src/hooks/use-captcha.js.map +0 -1
- package/dist/src/hooks/use-mobile.js.map +0 -1
- package/dist/src/lib/api/get-middleware-api.js.map +0 -1
- package/dist/src/lib/api/get-moderator-permissions-api.js.map +0 -1
- package/dist/src/lib/api/get-next-cron-run-date.js.map +0 -1
- package/dist/src/lib/api/get-queue-backoff-date.js.map +0 -1
- package/dist/src/lib/api/get-session-admin-api.js.map +0 -1
- package/dist/src/lib/api/get-session-api.js.map +0 -1
- package/dist/src/lib/api/is-cron-stale.js.map +0 -1
- package/dist/src/lib/api/resolve-queue-task-outcome.js.map +0 -1
- package/dist/src/lib/api/should-cron-job-run.js.map +0 -1
- package/dist/src/lib/api/upload.js.map +0 -1
- package/dist/src/lib/api/validate-cron-schedule.js.map +0 -1
- package/dist/src/lib/colors.js.map +0 -1
- package/dist/src/lib/config.js.map +0 -1
- package/dist/src/lib/ctrl-or-command-character.js.map +0 -1
- package/dist/src/lib/fetcher/cookie-from-string-to-object.js.map +0 -1
- package/dist/src/lib/fetcher/core.js.map +0 -1
- package/dist/src/lib/fetcher/helpers-server.js.map +0 -1
- package/dist/src/lib/fetcher/helpers.js.map +0 -1
- package/dist/src/lib/fetcher-client.js.map +0 -1
- package/dist/src/lib/fetcher.js.map +0 -1
- package/dist/src/lib/format-bytes.js.map +0 -1
- package/dist/src/lib/helpers/auto-form.js.map +0 -1
- package/dist/src/lib/navigation.js.map +0 -1
- package/dist/src/lib/plugin.js.map +0 -1
- package/dist/src/lib/special-characters.js.map +0 -1
- package/dist/src/lib/utils.js.map +0 -1
- package/dist/src/routes/admin/core/advanced/cron/page.js.map +0 -1
- package/dist/src/routes/admin/core/advanced/queue/page.js.map +0 -1
- package/dist/src/routes/admin/core/debug/page.js.map +0 -1
- package/dist/src/routes/admin/core/page.js.map +0 -1
- package/dist/src/routes/admin/core/staff/admins/create/page.js.map +0 -1
- package/dist/src/routes/admin/core/staff/admins/edit/[id]/page.js.map +0 -1
- package/dist/src/routes/admin/core/staff/admins/page.js.map +0 -1
- package/dist/src/routes/admin/core/staff/moderators/create/page.js.map +0 -1
- package/dist/src/routes/admin/core/staff/moderators/edit/[id]/page.js.map +0 -1
- package/dist/src/routes/admin/core/staff/moderators/page.js.map +0 -1
- package/dist/src/routes/admin/core/system/files/page.js.map +0 -1
- package/dist/src/routes/admin/core/system/integrations/page.js.map +0 -1
- package/dist/src/routes/admin/core/test/page.js.map +0 -1
- package/dist/src/routes/admin/core/users/[id]/page.js.map +0 -1
- package/dist/src/routes/admin/core/users/page.js.map +0 -1
- package/dist/src/routes/admin/core/users/roles/page.js.map +0 -1
- package/dist/src/routes/blank/test/page.js.map +0 -1
- package/dist/src/routes/breadcrumb/admin/[...all]/page.js.map +0 -1
- package/dist/src/routes/breadcrumb/admin/core/staff/admins/create/page.js.map +0 -1
- package/dist/src/routes/breadcrumb/admin/core/staff/admins/edit/[id]/page.js.map +0 -1
- package/dist/src/routes/breadcrumb/admin/core/staff/admins/page.js.map +0 -1
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/create/page.js.map +0 -1
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/edit/[id]/page.js.map +0 -1
- package/dist/src/routes/breadcrumb/admin/core/staff/moderators/page.js.map +0 -1
- package/dist/src/routes/breadcrumb/admin/core/users/[id]/page.js.map +0 -1
- package/dist/src/routes/breadcrumb/admin/default.js.map +0 -1
- package/dist/src/routes/breadcrumb/main/[...rest]/page.js.map +0 -1
- package/dist/src/routes/breadcrumb/main/default.js.map +0 -1
- package/dist/src/routes/breadcrumb/main/page.js.map +0 -1
- package/dist/src/routes/breadcrumb/main/settings/overview/page.js.map +0 -1
- package/dist/src/routes/breadcrumb/main/settings/page.js.map +0 -1
- package/dist/src/routes/breadcrumb/main/settings/security/page.js.map +0 -1
- package/dist/src/routes/main/files/page.js.map +0 -1
- package/dist/src/routes/main/login/page.js.map +0 -1
- package/dist/src/routes/main/login/reset-password/page.js.map +0 -1
- package/dist/src/routes/main/login/sso/[providerId]/page.js.map +0 -1
- package/dist/src/routes/main/register/page.js.map +0 -1
- package/dist/src/routes/main/settings/layout.js.map +0 -1
- package/dist/src/routes/main/settings/overview/page.js.map +0 -1
- package/dist/src/routes/main/settings/page.js.map +0 -1
- package/dist/src/routes/main/settings/security/page.js.map +0 -1
- package/dist/src/views/admin/layouts/admin-layout.js.map +0 -1
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-admin.js.map +0 -1
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-admin.js.map +0 -1
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-create-admin.js.map +0 -1
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-edit-admin.js.map +0 -1
- package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-user-admin.js.map +0 -1
- package/dist/src/views/admin/layouts/breadcrumb/resolve-breadcrumb.js.map +0 -1
- package/dist/src/views/admin/layouts/sidebar/nav/get-admin-nav.js.map +0 -1
- package/dist/src/views/admin/layouts/sidebar/nav/item.js.map +0 -1
- package/dist/src/views/admin/layouts/sidebar/nav/nav.js.map +0 -1
- package/dist/src/views/admin/layouts/sidebar/sidebar.js.map +0 -1
- package/dist/src/views/admin/layouts/sidebar/sign-out.js.map +0 -1
- package/dist/src/views/admin/layouts/user-bar/client.js.map +0 -1
- package/dist/src/views/admin/layouts/user-bar/user-bar.js.map +0 -1
- package/dist/src/views/admin/sign-in/sign-in-admin-view.js.map +0 -1
- package/dist/src/views/admin/views/core/advanced/cron/cron-table-view.js.map +0 -1
- package/dist/src/views/admin/views/core/advanced/cron/run-action/mutation-api.d.ts +0 -7
- package/dist/src/views/admin/views/core/advanced/cron/run-action/mutation-api.d.ts.map +0 -1
- package/dist/src/views/admin/views/core/advanced/cron/run-action/mutation-api.js +0 -2
- package/dist/src/views/admin/views/core/advanced/cron/run-action/mutation-api.js.map +0 -1
- package/dist/src/views/admin/views/core/advanced/cron/run-action/run-action.js.map +0 -1
- package/dist/src/views/admin/views/core/advanced/queue/badges/status-badge.js.map +0 -1
- package/dist/src/views/admin/views/core/advanced/queue/queue-table-view.js.map +0 -1
- package/dist/src/views/admin/views/core/dashboard/dashboard-admin-view.js.map +0 -1
- package/dist/src/views/admin/views/core/dashboard/send-notification/mutation-api.d.ts +0 -9
- package/dist/src/views/admin/views/core/dashboard/send-notification/mutation-api.d.ts.map +0 -1
- package/dist/src/views/admin/views/core/dashboard/send-notification/mutation-api.js +0 -2
- package/dist/src/views/admin/views/core/dashboard/send-notification/mutation-api.js.map +0 -1
- package/dist/src/views/admin/views/core/dashboard/send-notification/send-notification.js.map +0 -1
- package/dist/src/views/admin/views/core/debug/actions/clear-cache/clear-cache.js.map +0 -1
- package/dist/src/views/admin/views/core/debug/actions/clear-cache/mutation-api.d.ts +0 -5
- package/dist/src/views/admin/views/core/debug/actions/clear-cache/mutation-api.d.ts.map +0 -1
- package/dist/src/views/admin/views/core/debug/actions/clear-cache/mutation-api.js +0 -2
- package/dist/src/views/admin/views/core/debug/actions/clear-cache/mutation-api.js.map +0 -1
- package/dist/src/views/admin/views/core/debug/queue/queue-view.js.map +0 -1
- package/dist/src/views/admin/views/core/debug/system-logs/actions/more/content.js.map +0 -1
- package/dist/src/views/admin/views/core/debug/system-logs/actions/more/more.js.map +0 -1
- package/dist/src/views/admin/views/core/debug/system-logs/badges/badge-status.js.map +0 -1
- package/dist/src/views/admin/views/core/debug/system-logs/badges/badge-type-log.js.map +0 -1
- package/dist/src/views/admin/views/core/debug/system-logs/system-logs-view.js.map +0 -1
- package/dist/src/views/admin/views/core/staff/create/create-staff-permissions-view.js.map +0 -1
- package/dist/src/views/admin/views/core/staff/create/form.js.map +0 -1
- package/dist/src/views/admin/views/core/staff/create/mutation-api.d.ts +0 -17
- package/dist/src/views/admin/views/core/staff/create/mutation-api.d.ts.map +0 -1
- package/dist/src/views/admin/views/core/staff/create/mutation-api.js +0 -2
- package/dist/src/views/admin/views/core/staff/create/mutation-api.js.map +0 -1
- package/dist/src/views/admin/views/core/staff/create/search.action.d.ts +0 -11
- package/dist/src/views/admin/views/core/staff/create/search.action.d.ts.map +0 -1
- package/dist/src/views/admin/views/core/staff/create/search.action.js +0 -2
- package/dist/src/views/admin/views/core/staff/create/search.action.js.map +0 -1
- package/dist/src/views/admin/views/core/staff/edit/edit-staff-permissions-view.js.map +0 -1
- package/dist/src/views/admin/views/core/staff/edit/form.js.map +0 -1
- package/dist/src/views/admin/views/core/staff/edit/mutation-api.d.ts +0 -16
- package/dist/src/views/admin/views/core/staff/edit/mutation-api.d.ts.map +0 -1
- package/dist/src/views/admin/views/core/staff/edit/mutation-api.js +0 -2
- package/dist/src/views/admin/views/core/staff/edit/mutation-api.js.map +0 -1
- package/dist/src/views/admin/views/core/staff/selectable-card.js.map +0 -1
- package/dist/src/views/admin/views/core/staff/table/actions/delete-action.d.ts +0 -14
- package/dist/src/views/admin/views/core/staff/table/actions/delete-action.d.ts.map +0 -1
- package/dist/src/views/admin/views/core/staff/table/actions/delete-action.js +0 -2
- package/dist/src/views/admin/views/core/staff/table/actions/delete-action.js.map +0 -1
- package/dist/src/views/admin/views/core/staff/table/actions/staff-row-actions.js.map +0 -1
- package/dist/src/views/admin/views/core/staff/table/staff-table.js.map +0 -1
- package/dist/src/views/admin/views/core/staff/table/staff-user-format.js.map +0 -1
- package/dist/src/views/admin/views/core/staff/views/admins/admins-staff-view.js.map +0 -1
- package/dist/src/views/admin/views/core/staff/views/moderators/moderators-staff-view.js.map +0 -1
- package/dist/src/views/admin/views/core/system/files/actions/delete-action.d.ts +0 -12
- package/dist/src/views/admin/views/core/system/files/actions/delete-action.d.ts.map +0 -1
- package/dist/src/views/admin/views/core/system/files/actions/delete-action.js +0 -2
- package/dist/src/views/admin/views/core/system/files/actions/delete-action.js.map +0 -1
- package/dist/src/views/admin/views/core/system/files/actions/file-row-actions.js.map +0 -1
- package/dist/src/views/admin/views/core/system/files/files-table-view.js.map +0 -1
- package/dist/src/views/admin/views/core/system/integrations/integration-card.js.map +0 -1
- package/dist/src/views/admin/views/core/system/integrations/integrations-view.js.map +0 -1
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/content.js.map +0 -1
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/mutation-api.d.ts +0 -15
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/mutation-api.d.ts.map +0 -1
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/mutation-api.js +0 -2
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/mutation-api.js.map +0 -1
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/send-test-email.js.map +0 -1
- package/dist/src/views/admin/views/core/system/integrations/send-test-email/use-form.js.map +0 -1
- package/dist/src/views/admin/views/core/system/integrations/test-storage/content.js.map +0 -1
- package/dist/src/views/admin/views/core/system/integrations/test-storage/test-storage.js.map +0 -1
- package/dist/src/views/admin/views/core/test.js.map +0 -1
- package/dist/src/views/admin/views/core/users/actions/create/content.js.map +0 -1
- package/dist/src/views/admin/views/core/users/actions/create/create.js.map +0 -1
- package/dist/src/views/admin/views/core/users/actions/create/mutation-api.d.ts +0 -17
- package/dist/src/views/admin/views/core/users/actions/create/mutation-api.d.ts.map +0 -1
- package/dist/src/views/admin/views/core/users/actions/create/mutation-api.js +0 -2
- package/dist/src/views/admin/views/core/users/actions/create/mutation-api.js.map +0 -1
- package/dist/src/views/admin/views/core/users/actions/create/use-form.js.map +0 -1
- package/dist/src/views/admin/views/core/users/actions/verify-email/mutation-api.d.ts +0 -14
- package/dist/src/views/admin/views/core/users/actions/verify-email/mutation-api.d.ts.map +0 -1
- package/dist/src/views/admin/views/core/users/actions/verify-email/mutation-api.js +0 -2
- package/dist/src/views/admin/views/core/users/actions/verify-email/mutation-api.js.map +0 -1
- package/dist/src/views/admin/views/core/users/actions/verify-email/verify-email.js.map +0 -1
- package/dist/src/views/admin/views/core/users/actions.js.map +0 -1
- package/dist/src/views/admin/views/core/users/roles/roles-admin-view.js.map +0 -1
- package/dist/src/views/admin/views/core/users/search-roles.action.d.ts +0 -6
- package/dist/src/views/admin/views/core/users/search-roles.action.d.ts.map +0 -1
- package/dist/src/views/admin/views/core/users/search-roles.action.js +0 -2
- package/dist/src/views/admin/views/core/users/search-roles.action.js.map +0 -1
- package/dist/src/views/admin/views/core/users/show/edit-buttons.js.map +0 -1
- package/dist/src/views/admin/views/core/users/show/edit-field.js.map +0 -1
- package/dist/src/views/admin/views/core/users/show/edit-name-code.js.map +0 -1
- package/dist/src/views/admin/views/core/users/show/mutation-api.d.ts +0 -21
- package/dist/src/views/admin/views/core/users/show/mutation-api.d.ts.map +0 -1
- package/dist/src/views/admin/views/core/users/show/mutation-api.js +0 -2
- package/dist/src/views/admin/views/core/users/show/mutation-api.js.map +0 -1
- package/dist/src/views/admin/views/core/users/show/roles/edit-roles.js.map +0 -1
- package/dist/src/views/admin/views/core/users/show/roles/roles.js.map +0 -1
- package/dist/src/views/admin/views/core/users/show/roles/search-roles.action.d.ts +0 -13
- package/dist/src/views/admin/views/core/users/show/roles/search-roles.action.d.ts.map +0 -1
- package/dist/src/views/admin/views/core/users/show/roles/search-roles.action.js +0 -2
- package/dist/src/views/admin/views/core/users/show/roles/search-roles.action.js.map +0 -1
- package/dist/src/views/admin/views/core/users/show/roles/update-roles.action.d.ts +0 -15
- package/dist/src/views/admin/views/core/users/show/roles/update-roles.action.d.ts.map +0 -1
- package/dist/src/views/admin/views/core/users/show/roles/update-roles.action.js +0 -2
- package/dist/src/views/admin/views/core/users/show/roles/update-roles.action.js.map +0 -1
- package/dist/src/views/admin/views/core/users/show/show-user-admin-view.js.map +0 -1
- package/dist/src/views/admin/views/core/users/users-admin-view.js.map +0 -1
- package/dist/src/views/auth/password-reset/change-password-form/form.js.map +0 -1
- package/dist/src/views/auth/password-reset/change-password-form/mutation-api.d.ts +0 -9
- package/dist/src/views/auth/password-reset/change-password-form/mutation-api.d.ts.map +0 -1
- package/dist/src/views/auth/password-reset/change-password-form/mutation-api.js +0 -2
- package/dist/src/views/auth/password-reset/change-password-form/mutation-api.js.map +0 -1
- package/dist/src/views/auth/password-reset/change-password-form/use-form.js.map +0 -1
- package/dist/src/views/auth/password-reset/form/form.js.map +0 -1
- package/dist/src/views/auth/password-reset/form/mutation-api.d.ts +0 -10
- package/dist/src/views/auth/password-reset/form/mutation-api.d.ts.map +0 -1
- package/dist/src/views/auth/password-reset/form/mutation-api.js +0 -2
- package/dist/src/views/auth/password-reset/form/mutation-api.js.map +0 -1
- package/dist/src/views/auth/password-reset/form/use-form.js.map +0 -1
- package/dist/src/views/auth/password-reset/password-reset-view.js.map +0 -1
- package/dist/src/views/auth/settings/layout.js.map +0 -1
- package/dist/src/views/auth/settings/nav.js.map +0 -1
- package/dist/src/views/auth/settings/overview/overview.js.map +0 -1
- package/dist/src/views/auth/settings/security/security.js.map +0 -1
- package/dist/src/views/auth/settings/shell.js.map +0 -1
- package/dist/src/views/auth/sign-in/form/form.js.map +0 -1
- package/dist/src/views/auth/sign-in/form/mutation-api.d.ts +0 -13
- package/dist/src/views/auth/sign-in/form/mutation-api.d.ts.map +0 -1
- package/dist/src/views/auth/sign-in/form/mutation-api.js +0 -2
- package/dist/src/views/auth/sign-in/form/mutation-api.js.map +0 -1
- package/dist/src/views/auth/sign-in/form/use-form.js.map +0 -1
- package/dist/src/views/auth/sign-in/sign-in-view.js.map +0 -1
- package/dist/src/views/auth/sign-up/components/password-input.js.map +0 -1
- package/dist/src/views/auth/sign-up/email-confirmation-view.js.map +0 -1
- package/dist/src/views/auth/sign-up/form/form.js.map +0 -1
- package/dist/src/views/auth/sign-up/form/mutation-api.d.ts +0 -19
- package/dist/src/views/auth/sign-up/form/mutation-api.d.ts.map +0 -1
- package/dist/src/views/auth/sign-up/form/mutation-api.js +0 -2
- package/dist/src/views/auth/sign-up/form/mutation-api.js.map +0 -1
- package/dist/src/views/auth/sign-up/form/use-form.js.map +0 -1
- package/dist/src/views/auth/sign-up/sign-up-view.js.map +0 -1
- package/dist/src/views/auth/sign-up/wrapper.js.map +0 -1
- package/dist/src/views/auth/sso/buttons/client.js.map +0 -1
- package/dist/src/views/auth/sso/buttons/mutation-api.d.ts +0 -7
- package/dist/src/views/auth/sso/buttons/mutation-api.d.ts.map +0 -1
- package/dist/src/views/auth/sso/buttons/mutation-api.js +0 -2
- package/dist/src/views/auth/sso/buttons/mutation-api.js.map +0 -1
- package/dist/src/views/auth/sso/buttons/sso-buttons.js.map +0 -1
- package/dist/src/views/auth/sso/callback/callback-sso-view.js.map +0 -1
- package/dist/src/views/auth/sso/callback/client/client.js.map +0 -1
- package/dist/src/views/auth/sso/callback/client/mutation-api.d.ts +0 -11
- package/dist/src/views/auth/sso/callback/client/mutation-api.d.ts.map +0 -1
- package/dist/src/views/auth/sso/callback/client/mutation-api.js +0 -2
- package/dist/src/views/auth/sso/callback/client/mutation-api.js.map +0 -1
- package/dist/src/views/breadcrumb/breadcrumb-main.js.map +0 -1
- package/dist/src/views/breadcrumb/breadcrumb-render.js.map +0 -1
- package/dist/src/views/breadcrumb/crumb.js.map +0 -1
- package/dist/src/views/breadcrumb/resolve-main-breadcrumb.js.map +0 -1
- package/dist/src/views/error/back-button.js.map +0 -1
- package/dist/src/views/error/error-view.js.map +0 -1
- package/dist/src/views/error/global-error-view.js.map +0 -1
- package/dist/src/views/files/actions/delete-action.d.ts +0 -12
- package/dist/src/views/files/actions/delete-action.d.ts.map +0 -1
- package/dist/src/views/files/actions/delete-action.js +0 -2
- package/dist/src/views/files/actions/delete-action.js.map +0 -1
- package/dist/src/views/files/actions/file-row-actions.js.map +0 -1
- package/dist/src/views/files/my-files-table-view.js.map +0 -1
- package/dist/src/views/layouts/provider.js.map +0 -1
- package/dist/src/views/layouts/root-layout.js.map +0 -1
- package/dist/src/views/layouts/theme/header/header.js.map +0 -1
- package/dist/src/views/layouts/theme/header/user/auth/auth.js.map +0 -1
- package/dist/src/views/layouts/theme/header/user/auth/client.js.map +0 -1
- package/dist/src/views/layouts/theme/header/user/auth/log-out-mutation-api.d.ts +0 -7
- package/dist/src/views/layouts/theme/header/user/auth/log-out-mutation-api.d.ts.map +0 -1
- package/dist/src/views/layouts/theme/header/user/auth/log-out-mutation-api.js +0 -2
- package/dist/src/views/layouts/theme/header/user/auth/log-out-mutation-api.js.map +0 -1
- package/dist/src/views/layouts/theme/header/user/user.js.map +0 -1
- package/dist/src/views/layouts/theme/layout.js.map +0 -1
- package/dist/src/views/layouts/theme/notification-listener.js.map +0 -1
- package/dist/src/views/layouts/theme/web-socket-auth-sync.js.map +0 -1
- package/dist/src/vitnode.config.js.map +0 -1
- package/dist/src/ws/handle.js.map +0 -1
- package/dist/src/ws/manager.js.map +0 -1
- package/dist/src/ws/notifications.js.map +0 -1
- package/dist/src/ws/provider.js.map +0 -1
- package/dist/src/ws/registry.js.map +0 -1
- package/dist/src/ws/types.js.map +0 -1
- package/dist/src/ws/use-websocket.js.map +0 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { getTranslations } from "next-intl/server";
|
|
2
|
+
|
|
3
|
+
import { BreadcrumbMain } from "@/views/breadcrumb/breadcrumb-main";
|
|
4
|
+
|
|
5
|
+
export default async function BreadcrumbSlot() {
|
|
6
|
+
const t = await getTranslations("core.search");
|
|
7
|
+
|
|
8
|
+
return (
|
|
9
|
+
<BreadcrumbMain
|
|
10
|
+
labels={{ "/discover": t("discoverTitle") }}
|
|
11
|
+
segments={["discover"]}
|
|
12
|
+
/>
|
|
13
|
+
);
|
|
14
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { getTranslations } from "next-intl/server";
|
|
2
|
+
|
|
3
|
+
import { BreadcrumbMain } from "@/views/breadcrumb/breadcrumb-main";
|
|
4
|
+
|
|
5
|
+
export default async function BreadcrumbSlot() {
|
|
6
|
+
const t = await getTranslations("core.search");
|
|
7
|
+
|
|
8
|
+
return (
|
|
9
|
+
<BreadcrumbMain labels={{ "/search": t("title") }} segments={["search"]} />
|
|
10
|
+
);
|
|
11
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { getTranslations } from "next-intl/server";
|
|
2
|
+
|
|
3
|
+
import { BreadcrumbMain } from "@/views/breadcrumb/breadcrumb-main";
|
|
4
|
+
|
|
5
|
+
export default async function BreadcrumbSlot() {
|
|
6
|
+
const t = await getTranslations("core.auth.settings");
|
|
7
|
+
|
|
8
|
+
return (
|
|
9
|
+
<BreadcrumbMain
|
|
10
|
+
labels={{
|
|
11
|
+
"/settings": t("title"),
|
|
12
|
+
"/settings/devices": t("nav.devices"),
|
|
13
|
+
}}
|
|
14
|
+
segments={["settings", "devices"]}
|
|
15
|
+
/>
|
|
16
|
+
);
|
|
17
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { getTranslations } from "next-intl/server";
|
|
2
|
+
import dynamic from "next/dynamic";
|
|
3
|
+
import React from "react";
|
|
4
|
+
|
|
5
|
+
import { I18nProvider } from "@/components/i18n-provider";
|
|
6
|
+
import { HeaderContent } from "@/components/ui/header-content";
|
|
7
|
+
import { Skeleton } from "@/components/ui/skeleton";
|
|
8
|
+
|
|
9
|
+
const DiscoverView = dynamic(async () =>
|
|
10
|
+
import("@/views/search/discover-view").then(module => ({
|
|
11
|
+
default: module.DiscoverView,
|
|
12
|
+
})),
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
export const generateMetadata = async () => {
|
|
16
|
+
const t = await getTranslations("core.search");
|
|
17
|
+
|
|
18
|
+
return {
|
|
19
|
+
title: t("discoverTitle"),
|
|
20
|
+
description: t("discoverDesc"),
|
|
21
|
+
robots: { index: true, follow: true },
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export default async function Page() {
|
|
26
|
+
const t = await getTranslations("core.search");
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<I18nProvider namespaces={["core.search"]}>
|
|
30
|
+
<div className="container mx-auto max-w-3xl space-y-6 p-4">
|
|
31
|
+
<HeaderContent desc={t("discoverDesc")} h1={t("discoverTitle")} />
|
|
32
|
+
|
|
33
|
+
<React.Suspense
|
|
34
|
+
fallback={<Skeleton className="h-64 w-full rounded-xl" />}
|
|
35
|
+
>
|
|
36
|
+
<DiscoverView />
|
|
37
|
+
</React.Suspense>
|
|
38
|
+
</div>
|
|
39
|
+
</I18nProvider>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { getTranslations } from "next-intl/server";
|
|
2
|
+
import dynamic from "next/dynamic";
|
|
3
|
+
import React from "react";
|
|
4
|
+
|
|
5
|
+
import { I18nProvider } from "@/components/i18n-provider";
|
|
6
|
+
import { HeaderContent } from "@/components/ui/header-content";
|
|
7
|
+
import { Skeleton } from "@/components/ui/skeleton";
|
|
8
|
+
|
|
9
|
+
const SearchView = dynamic(async () =>
|
|
10
|
+
import("@/views/search/search-view").then(module => ({
|
|
11
|
+
default: module.SearchView,
|
|
12
|
+
})),
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
export const generateMetadata = async () => {
|
|
16
|
+
const t = await getTranslations("core.search");
|
|
17
|
+
|
|
18
|
+
return {
|
|
19
|
+
title: t("title"),
|
|
20
|
+
description: t("desc"),
|
|
21
|
+
robots: { index: true, follow: true },
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export default async function Page(
|
|
26
|
+
props: React.ComponentProps<typeof SearchView>,
|
|
27
|
+
) {
|
|
28
|
+
const t = await getTranslations("core.search");
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<I18nProvider namespaces={["core.search"]}>
|
|
32
|
+
<div className="container mx-auto max-w-3xl space-y-6 p-4">
|
|
33
|
+
<HeaderContent desc={t("desc")} h1={t("title")} />
|
|
34
|
+
|
|
35
|
+
<React.Suspense
|
|
36
|
+
fallback={<Skeleton className="h-64 w-full rounded-xl" />}
|
|
37
|
+
>
|
|
38
|
+
<SearchView {...props} />
|
|
39
|
+
</React.Suspense>
|
|
40
|
+
</div>
|
|
41
|
+
</I18nProvider>
|
|
42
|
+
);
|
|
43
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { getTranslations } from "next-intl/server";
|
|
2
|
+
|
|
3
|
+
import { DevicesSettings } from "@/views/auth/settings/devices/devices";
|
|
4
|
+
|
|
5
|
+
export const generateMetadata = async () => {
|
|
6
|
+
const t = await getTranslations("core.auth.settings");
|
|
7
|
+
|
|
8
|
+
return {
|
|
9
|
+
title: `${t("nav.devices")} - ${t("title")}`,
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default function Page() {
|
|
14
|
+
return <DevicesSettings />;
|
|
15
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"discord.js","names":["z"],"sources":["../../../../../src/api/adapters/sso/discord.ts"],"sourcesContent":["import type { ContentfulStatusCode } from \"hono/utils/http-status\";\n\nimport { HTTPException } from \"hono/http-exception\";\nimport { z } from \"zod\";\n\nimport type { SSOApiPlugin } from \"@/api/models/sso\";\n\nimport { getRedirectUri } from \"@/api/models/sso\";\n\nexport const DiscordSSOApiPlugin = ({\n clientId = \"\",\n clientSecret = \"\",\n}: {\n clientId: string | undefined;\n clientSecret: string | undefined;\n}): SSOApiPlugin => {\n const id = \"discord\";\n const redirectUri = getRedirectUri(id);\n const userSchema = z.object({\n id: z.string(),\n email: z.string(),\n username: z.string(),\n });\n const tokenSchema = z.object({\n access_token: z.string(),\n token_type: z.string(),\n });\n\n return {\n fetchToken: async code => {\n if (!(clientId && clientSecret)) {\n throw new Error(\"Missing Discord client ID or secret\");\n }\n\n const res = await fetch(\"https://discord.com/api/oauth2/token\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Accept: \"application/json\",\n },\n body: new URLSearchParams({\n code,\n redirect_uri: redirectUri,\n grant_type: \"authorization_code\",\n client_id: clientId,\n client_secret: clientSecret,\n }),\n });\n\n if (!res.ok) {\n throw new HTTPException(\n +res.status.toString() as ContentfulStatusCode,\n {\n message: \"Internal error requesting token\",\n },\n );\n }\n\n const { data, error } = tokenSchema.safeParse(await res.json());\n if (error || !data) {\n throw new HTTPException(400, {\n message: \"Invalid token response\",\n });\n }\n\n return data;\n },\n fetchUser: async ({ token_type, access_token }) => {\n const res = await fetch(\"https://discord.com/api/users/@me\", {\n headers: {\n Authorization: `${token_type} ${access_token}`,\n },\n });\n const { data, error } = userSchema.safeParse(await res.json());\n if (error || !data) {\n throw new HTTPException(400, {\n message: \"Invalid user response\",\n });\n }\n\n return data;\n },\n getUrl: ({ state }) => {\n if (!clientId) {\n throw new Error(\"Missing Discord client ID\");\n }\n\n const url = new URL(\"https://discord.com/oauth2/authorize\");\n url.searchParams.set(\"client_id\", clientId);\n url.searchParams.set(\"redirect_uri\", redirectUri);\n url.searchParams.set(\"response_type\", \"code\");\n url.searchParams.set(\"scope\", \"identify email\");\n url.searchParams.set(\"state\", state);\n\n return url.toString();\n },\n id,\n name: \"Discord\",\n };\n};\n"],"mappings":"iIASA,MAAa,GAAuB,CAClC,WAAW,GACX,eAAe,MAIG,CAClB,IAAM,EAAK,UACL,EAAc,EAAe,CAAE,EAC/B,EAAaA,EAAE,OAAO,CAC1B,GAAIA,EAAE,OAAO,EACb,MAAOA,EAAE,OAAO,EAChB,SAAUA,EAAE,OAAO,CACrB,CAAC,EACK,EAAcA,EAAE,OAAO,CAC3B,aAAcA,EAAE,OAAO,EACvB,WAAYA,EAAE,OAAO,CACvB,CAAC,EAED,MAAO,CACL,WAAY,KAAM,IAAQ,CACxB,GAAI,EAAE,GAAY,GAChB,MAAU,MAAM,qCAAqC,EAGvD,IAAM,EAAM,MAAM,MAAM,uCAAwC,CAC9D,OAAQ,OACR,QAAS,CACP,eAAgB,oCAChB,OAAQ,kBACV,EACA,KAAM,IAAI,gBAAgB,CACxB,OACA,aAAc,EACd,WAAY,qBACZ,UAAW,EACX,cAAe,CACjB,CAAC,CACH,CAAC,EAED,GAAI,CAAC,EAAI,GACP,MAAM,IAAI,EACR,CAAC,EAAI,OAAO,SAAS,EACrB,CACE,QAAS,iCACX,CACF,EAGF,GAAM,CAAE,OAAM,SAAU,EAAY,UAAU,MAAM,EAAI,KAAK,CAAC,EAC9D,GAAI,GAAS,CAAC,EACZ,MAAM,IAAI,EAAc,IAAK,CAC3B,QAAS,wBACX,CAAC,EAGH,OAAO,CACT,EACA,UAAW,MAAO,CAAE,aAAY,kBAAmB,CACjD,IAAM,EAAM,MAAM,MAAM,oCAAqC,CAC3D,QAAS,CACP,cAAe,GAAG,EAAW,GAAG,GAClC,CACF,CAAC,EACK,CAAE,OAAM,SAAU,EAAW,UAAU,MAAM,EAAI,KAAK,CAAC,EAC7D,GAAI,GAAS,CAAC,EACZ,MAAM,IAAI,EAAc,IAAK,CAC3B,QAAS,uBACX,CAAC,EAGH,OAAO,CACT,EACA,QAAS,CAAE,WAAY,CACrB,GAAI,CAAC,EACH,MAAU,MAAM,2BAA2B,EAG7C,IAAM,EAAM,IAAI,IAAI,sCAAsC,EAO1D,OANA,EAAI,aAAa,IAAI,YAAa,CAAQ,EAC1C,EAAI,aAAa,IAAI,eAAgB,CAAW,EAChD,EAAI,aAAa,IAAI,gBAAiB,MAAM,EAC5C,EAAI,aAAa,IAAI,QAAS,gBAAgB,EAC9C,EAAI,aAAa,IAAI,QAAS,CAAK,EAE5B,EAAI,SAAS,CACtB,EACA,KACA,KAAM,SACR,CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"facebook.js","names":["z"],"sources":["../../../../../src/api/adapters/sso/facebook.ts"],"sourcesContent":["import type { ContentfulStatusCode } from \"hono/utils/http-status\";\n\nimport { HTTPException } from \"hono/http-exception\";\nimport { z } from \"zod\";\n\nimport type { SSOApiPlugin } from \"@/api/models/sso\";\n\nimport { getRedirectUri } from \"@/api/models/sso\";\n\nexport const FacebookSSOApiPlugin = ({\n clientId,\n clientSecret,\n}: {\n clientId: string | undefined;\n clientSecret: string | undefined;\n}): SSOApiPlugin => {\n const id = \"facebook\";\n const redirectUri = getRedirectUri(id);\n const tokenSchema = z.object({\n access_token: z.string(),\n token_type: z.string(),\n });\n const userSchema = z.object({\n id: z.string(),\n name: z.string(),\n email: z.string(),\n });\n\n return {\n id,\n name: \"Facebook\",\n fetchToken: async code => {\n if (!(clientId && clientSecret)) {\n throw new Error(\"Missing Facebook client ID or secret\");\n }\n\n const url = new URL(\n \"https://graph.facebook.com/v22.0/oauth/access_token\",\n );\n url.searchParams.set(\"code\", code);\n url.searchParams.set(\"redirect_uri\", redirectUri);\n url.searchParams.set(\"client_id\", clientId);\n url.searchParams.set(\"client_secret\", clientSecret);\n const res = await fetch(url.toString());\n if (!res.ok) {\n throw new HTTPException(\n +res.status.toString() as ContentfulStatusCode,\n {\n message: \"Internal error requesting token\",\n },\n );\n }\n\n const { data, error } = tokenSchema.safeParse(await res.json());\n if (error || !data) {\n throw new HTTPException(400, {\n message: \"Invalid token response\",\n });\n }\n\n return data;\n },\n\n fetchUser: async ({ access_token }) => {\n const url = new URL(\"https://graph.facebook.com/v22.0/me\");\n url.searchParams.set(\"fields\", \"id,name,email\");\n url.searchParams.set(\"access_token\", access_token);\n const res = await fetch(url.toString());\n if (!res.ok) {\n throw new HTTPException(\n +res.status.toString() as ContentfulStatusCode,\n {\n message: \"Internal error requesting user\",\n },\n );\n }\n const { data: userData, error: userError } = userSchema.safeParse(\n await res.json(),\n );\n if (userError || !userData) {\n throw new HTTPException(400, {\n message: \"Invalid user response\",\n });\n }\n\n return { ...userData, username: userData.name };\n },\n\n getUrl: ({ state }) => {\n if (!clientId) {\n throw new Error(\"Missing Facebook client ID\");\n }\n\n const url = new URL(\"https://www.facebook.com/v22.0/dialog/oauth\");\n url.searchParams.set(\"client_id\", clientId);\n url.searchParams.set(\"redirect_uri\", redirectUri);\n url.searchParams.set(\"scope\", \"public_profile,email\");\n url.searchParams.set(\"response_type\", \"code\");\n url.searchParams.set(\"state\", state);\n\n return url.toString();\n },\n };\n};\n"],"mappings":"iIASA,MAAa,GAAwB,CACnC,WACA,kBAIkB,CAClB,IAAM,EAAK,WACL,EAAc,EAAe,CAAE,EAC/B,EAAcA,EAAE,OAAO,CAC3B,aAAcA,EAAE,OAAO,EACvB,WAAYA,EAAE,OAAO,CACvB,CAAC,EACK,EAAaA,EAAE,OAAO,CAC1B,GAAIA,EAAE,OAAO,EACb,KAAMA,EAAE,OAAO,EACf,MAAOA,EAAE,OAAO,CAClB,CAAC,EAED,MAAO,CACL,KACA,KAAM,WACN,WAAY,KAAM,IAAQ,CACxB,GAAI,EAAE,GAAY,GAChB,MAAU,MAAM,sCAAsC,EAGxD,IAAM,EAAM,IAAI,IACd,qDACF,EACA,EAAI,aAAa,IAAI,OAAQ,CAAI,EACjC,EAAI,aAAa,IAAI,eAAgB,CAAW,EAChD,EAAI,aAAa,IAAI,YAAa,CAAQ,EAC1C,EAAI,aAAa,IAAI,gBAAiB,CAAY,EAClD,IAAM,EAAM,MAAM,MAAM,EAAI,SAAS,CAAC,EACtC,GAAI,CAAC,EAAI,GACP,MAAM,IAAI,EACR,CAAC,EAAI,OAAO,SAAS,EACrB,CACE,QAAS,iCACX,CACF,EAGF,GAAM,CAAE,OAAM,SAAU,EAAY,UAAU,MAAM,EAAI,KAAK,CAAC,EAC9D,GAAI,GAAS,CAAC,EACZ,MAAM,IAAI,EAAc,IAAK,CAC3B,QAAS,wBACX,CAAC,EAGH,OAAO,CACT,EAEA,UAAW,MAAO,CAAE,kBAAmB,CACrC,IAAM,EAAM,IAAI,IAAI,qCAAqC,EACzD,EAAI,aAAa,IAAI,SAAU,eAAe,EAC9C,EAAI,aAAa,IAAI,eAAgB,CAAY,EACjD,IAAM,EAAM,MAAM,MAAM,EAAI,SAAS,CAAC,EACtC,GAAI,CAAC,EAAI,GACP,MAAM,IAAI,EACR,CAAC,EAAI,OAAO,SAAS,EACrB,CACE,QAAS,gCACX,CACF,EAEF,GAAM,CAAE,KAAM,EAAU,MAAO,GAAc,EAAW,UACtD,MAAM,EAAI,KAAK,CACjB,EACA,GAAI,GAAa,CAAC,EAChB,MAAM,IAAI,EAAc,IAAK,CAC3B,QAAS,uBACX,CAAC,EAGH,MAAO,CAAE,GAAG,EAAU,SAAU,EAAS,IAAK,CAChD,EAEA,QAAS,CAAE,WAAY,CACrB,GAAI,CAAC,EACH,MAAU,MAAM,4BAA4B,EAG9C,IAAM,EAAM,IAAI,IAAI,6CAA6C,EAOjE,OANA,EAAI,aAAa,IAAI,YAAa,CAAQ,EAC1C,EAAI,aAAa,IAAI,eAAgB,CAAW,EAChD,EAAI,aAAa,IAAI,QAAS,sBAAsB,EACpD,EAAI,aAAa,IAAI,gBAAiB,MAAM,EAC5C,EAAI,aAAa,IAAI,QAAS,CAAK,EAE5B,EAAI,SAAS,CACtB,CACF,CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"google.js","names":["z"],"sources":["../../../../../src/api/adapters/sso/google.ts"],"sourcesContent":["import type { ContentfulStatusCode } from \"hono/utils/http-status\";\n\nimport { HTTPException } from \"hono/http-exception\";\nimport { z } from \"zod\";\n\nimport type { SSOApiPlugin } from \"@/api/models/sso\";\n\nimport { getRedirectUri } from \"@/api/models/sso\";\n\nexport const GoogleSSOApiPlugin = ({\n clientId,\n clientSecret,\n}: {\n clientId: string | undefined;\n clientSecret: string | undefined;\n}): SSOApiPlugin => {\n const id = \"google\";\n const redirectUri = getRedirectUri(id);\n const tokenSchema = z.object({\n access_token: z.string(),\n token_type: z.string(),\n });\n const userSchema = z.object({\n id: z.string(),\n email: z.string(),\n name: z.string(),\n verified_email: z.boolean(),\n });\n\n return {\n id,\n name: \"Google\",\n fetchToken: async code => {\n if (!(clientId && clientSecret)) {\n throw new Error(\"Missing Google client ID or secret\");\n }\n\n const res = await fetch(\"https://oauth2.googleapis.com/token\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Accept: \"application/json\",\n },\n body: new URLSearchParams({\n code,\n redirect_uri: redirectUri,\n grant_type: \"authorization_code\",\n client_id: clientId,\n client_secret: clientSecret,\n }),\n });\n\n if (!res.ok) {\n throw new HTTPException(\n +res.status.toString() as ContentfulStatusCode,\n {\n message: \"Internal error requesting token\",\n },\n );\n }\n\n const { data, error } = tokenSchema.safeParse(await res.json());\n if (error || !data) {\n throw new HTTPException(400, {\n message: \"Invalid token response\",\n });\n }\n\n return data;\n },\n fetchUser: async ({ token_type, access_token }) => {\n const res = await fetch(\"https://www.googleapis.com/oauth2/v1/userinfo\", {\n headers: {\n Authorization: `${token_type} ${access_token}`,\n },\n });\n const dataFromRes = await res.json();\n const { data, error } = userSchema.safeParse(dataFromRes);\n if (error || !data) {\n throw new HTTPException(400, {\n message: \"Invalid user response\",\n });\n }\n\n if (!data.verified_email) {\n throw new HTTPException(400, {\n message: \"Email not verified\",\n });\n }\n\n return {\n ...data,\n username: data.name,\n };\n },\n getUrl: ({ state }) => {\n if (!clientId) {\n throw new Error(\"Missing Google client ID\");\n }\n\n const url = new URL(\"https://accounts.google.com/o/oauth2/auth\");\n url.searchParams.set(\"client_id\", clientId);\n url.searchParams.set(\"redirect_uri\", redirectUri);\n url.searchParams.set(\"response_type\", \"code\");\n url.searchParams.set(\"scope\", \"openid profile email\");\n url.searchParams.set(\"state\", state);\n\n return url.toString();\n },\n };\n};\n"],"mappings":"iIASA,MAAa,GAAsB,CACjC,WACA,kBAIkB,CAClB,IAAM,EAAK,SACL,EAAc,EAAe,CAAE,EAC/B,EAAcA,EAAE,OAAO,CAC3B,aAAcA,EAAE,OAAO,EACvB,WAAYA,EAAE,OAAO,CACvB,CAAC,EACK,EAAaA,EAAE,OAAO,CAC1B,GAAIA,EAAE,OAAO,EACb,MAAOA,EAAE,OAAO,EAChB,KAAMA,EAAE,OAAO,EACf,eAAgBA,EAAE,QAAQ,CAC5B,CAAC,EAED,MAAO,CACL,KACA,KAAM,SACN,WAAY,KAAM,IAAQ,CACxB,GAAI,EAAE,GAAY,GAChB,MAAU,MAAM,oCAAoC,EAGtD,IAAM,EAAM,MAAM,MAAM,sCAAuC,CAC7D,OAAQ,OACR,QAAS,CACP,eAAgB,oCAChB,OAAQ,kBACV,EACA,KAAM,IAAI,gBAAgB,CACxB,OACA,aAAc,EACd,WAAY,qBACZ,UAAW,EACX,cAAe,CACjB,CAAC,CACH,CAAC,EAED,GAAI,CAAC,EAAI,GACP,MAAM,IAAI,EACR,CAAC,EAAI,OAAO,SAAS,EACrB,CACE,QAAS,iCACX,CACF,EAGF,GAAM,CAAE,OAAM,SAAU,EAAY,UAAU,MAAM,EAAI,KAAK,CAAC,EAC9D,GAAI,GAAS,CAAC,EACZ,MAAM,IAAI,EAAc,IAAK,CAC3B,QAAS,wBACX,CAAC,EAGH,OAAO,CACT,EACA,UAAW,MAAO,CAAE,aAAY,kBAAmB,CAMjD,IAAM,EAAc,MAAM,MALR,MAAM,gDAAiD,CACvE,QAAS,CACP,cAAe,GAAG,EAAW,GAAG,GAClC,CACF,CAAC,EAAA,CAC6B,KAAK,EAC7B,CAAE,OAAM,SAAU,EAAW,UAAU,CAAW,EACxD,GAAI,GAAS,CAAC,EACZ,MAAM,IAAI,EAAc,IAAK,CAC3B,QAAS,uBACX,CAAC,EAGH,GAAI,CAAC,EAAK,eACR,MAAM,IAAI,EAAc,IAAK,CAC3B,QAAS,oBACX,CAAC,EAGH,MAAO,CACL,GAAG,EACH,SAAU,EAAK,IACjB,CACF,EACA,QAAS,CAAE,WAAY,CACrB,GAAI,CAAC,EACH,MAAU,MAAM,0BAA0B,EAG5C,IAAM,EAAM,IAAI,IAAI,2CAA2C,EAO/D,OANA,EAAI,aAAa,IAAI,YAAa,CAAQ,EAC1C,EAAI,aAAa,IAAI,eAAgB,CAAW,EAChD,EAAI,aAAa,IAAI,gBAAiB,MAAM,EAC5C,EAAI,aAAa,IAAI,QAAS,sBAAsB,EACpD,EAAI,aAAa,IAAI,QAAS,CAAK,EAE5B,EAAI,SAAS,CACtB,CACF,CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"local.js","names":[],"sources":["../../../../../src/api/adapters/storage/local.ts"],"sourcesContent":["import { mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nimport type {\n StorageApiPlugin,\n StorageUploadArgs,\n StorageUploadResult,\n} from \"@/api/models/storage\";\n\nimport { CONFIG } from \"@/lib/config\";\n\n/**\n * Zero-config storage backend that writes uploads to the local disk under\n * `public/uploads`.\n *\n * - On the standalone Node API (`@hono/node-server`) files are served by Hono's\n * `serveStatic`, wired from the `static` descriptor below. The API is mounted\n * under `/api`, so `publicPath` defaults to `/api/uploads`.\n * - Inside a Next.js app the `public/` directory is served at the site root, so\n * pass `publicPath: \"/uploads\"` there (the `static` descriptor is unused).\n *\n * Local disk is not durable on serverless platforms - use a cloud adapter there.\n */\nexport const LocalStorageAdapter = ({\n baseUrl,\n publicPath = \"/api/uploads\",\n}: {\n baseUrl?: string;\n publicPath?: string;\n} = {}): StorageApiPlugin => {\n // Static path segments (not a variable) so Next's file tracer can scope the\n // trace to `public/uploads` instead of the whole project.\n const resolvePath = (key: string): string =>\n join(process.cwd(), \"public\", \"uploads\", key);\n const getUrl = (key: string): string => {\n const base = (baseUrl ?? CONFIG.api.origin).replace(/\\/$/, \"\");\n const path = publicPath.replace(/^\\/|\\/$/g, \"\");\n\n return `${base}/${path}/${key}`;\n };\n // Route registered on the API app, which already carries the `/api` basePath.\n const mountPath = `${publicPath.replace(/^\\/api/, \"\")}/*`;\n\n return {\n delete: async (key: string): Promise<void> => {\n await rm(resolvePath(key), { force: true });\n },\n getUrl,\n static: {\n mountPath,\n root: \"./public/uploads\",\n stripPrefix: publicPath,\n },\n upload: async ({\n body,\n key,\n }: StorageUploadArgs): Promise<StorageUploadResult> => {\n const filePath = resolvePath(key);\n await mkdir(dirname(filePath), { recursive: true });\n await writeFile(filePath, body);\n\n return { key, url: getUrl(key) };\n },\n };\n};\n"],"mappings":"8JAuBA,MAAa,GAAuB,CAClC,UACA,aAAa,gBAIX,CAAC,IAAwB,CAG3B,IAAM,EAAe,GACnB,EAAK,QAAQ,IAAI,EAAG,SAAU,UAAW,CAAG,EACxC,EAAU,GAIP,IAHO,GAAW,EAAO,IAAI,OAAA,CAAQ,QAAQ,MAAO,EAG9C,EAAE,GAFF,EAAW,QAAQ,WAAY,EAEvB,EAAE,GAAG,IAK5B,MAAO,CACL,OAAQ,KAAO,IAA+B,CAC5C,MAAM,EAAG,EAAY,CAAG,EAAG,CAAE,MAAO,EAAK,CAAC,CAC5C,EACA,SACA,OAAQ,CACN,UAAA,GARiB,EAAW,QAAQ,SAAU,EAAE,EAAE,IASlD,KAAM,mBACN,YAAa,CACf,EACA,OAAQ,MAAO,CACb,OACA,SACqD,CACrD,IAAM,EAAW,EAAY,CAAG,EAIhC,OAHA,MAAM,EAAM,EAAQ,CAAQ,EAAG,CAAE,UAAW,EAAK,CAAC,EAClD,MAAM,EAAU,EAAU,CAAI,EAEvB,CAAE,MAAK,IAAK,EAAO,CAAG,CAAE,CACjC,CACF,CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":[],"sources":["../../../src/api/config.ts"],"sourcesContent":["import type { OpenAPIHono } from \"@hono/zod-openapi\";\nimport type { Context, Env, Schema } from \"hono\";\n\nimport { swaggerUI } from \"@hono/swagger-ui\";\nimport { cors } from \"hono/cors\";\nimport { csrf } from \"hono/csrf\";\nimport { HTTPException } from \"hono/http-exception\";\n\nimport type { VitNodeApiConfig } from \"@/vitnode.config\";\n\nimport { createCacheClient } from \"@/api/lib/cache-client\";\nimport { newBuildPluginApiCore } from \"@/api/plugin\";\nimport { CONFIG_PLUGIN } from \"@/config\";\nimport { initRealtimePubSub } from \"@/ws/registry\";\n\nimport {\n globalAdminMiddleware,\n globalMiddleware,\n} from \"./middlewares/global.middleware\";\nimport { rateLimiterMiddleware } from \"./middlewares/rate-limiter.middleware\";\n\ninterface CORSOptions {\n allowHeaders?: string[];\n allowMethods?: string[];\n credentials?: boolean;\n exposeHeaders?: string[];\n maxAge?: number;\n origin:\n | ((origin: string, c: Context) => null | string | undefined)\n | string\n | string[];\n}\n\ntype IsAllowedOriginHandler = (origin: string, context: Context) => boolean;\ninterface CSRFOptions {\n origin?: IsAllowedOriginHandler | string | string[];\n}\n\nexport function VitNodeAPI({\n app,\n cors: corsOptions,\n csrf: csrfOptions,\n vitNodeApiConfig,\n}: {\n app: OpenAPIHono<Env, Schema, string>;\n cors?: CORSOptions;\n csrf?: CSRFOptions;\n vitNodeApiConfig: VitNodeApiConfig;\n}) {\n // Shared Redis client, created once at boot. Reused by the rate limiter\n // (which runs before the request context exists), the realtime pub/sub bridge,\n // and the per-request cache exposed as `c.get(\"cache\")`. Safe no-op when\n // `redis` is unset.\n const redisClient = createCacheClient(vitNodeApiConfig.redis);\n\n // Bridge realtime (WebSocket) messages across instances via Redis pub/sub, so\n // `broadcast`/`sendToUser` reach clients on every instance. No-op without Redis.\n initRealtimePubSub(redisClient);\n\n app.doc(\"/swagger/doc\", {\n openapi: \"3.0.0\",\n info: {\n version: CONFIG_PLUGIN.version,\n title: \"VitNode API\",\n },\n });\n app.use(cors(corsOptions));\n app.use(csrf(csrfOptions));\n app.use(\n \"*\",\n rateLimiterMiddleware(vitNodeApiConfig.rateLimiter, redisClient),\n );\n app.get(\"/swagger\", swaggerUI({ url: \"/api/swagger/doc\" }));\n app.use(\n \"*\",\n globalMiddleware({\n pathToMessages: vitNodeApiConfig.pathToMessages,\n email: vitNodeApiConfig.email,\n metadata: vitNodeApiConfig.metadata,\n authorization: vitNodeApiConfig.authorization,\n dbProvider: vitNodeApiConfig.dbProvider,\n captcha: vitNodeApiConfig.captcha,\n cron: vitNodeApiConfig.cron,\n storage: vitNodeApiConfig.storage,\n plugins: [newBuildPluginApiCore, ...vitNodeApiConfig.plugins],\n cacheClient: redisClient,\n }),\n );\n app.use(async (c, next) => {\n if (c.req.path.includes(\"/admin/\")) {\n return await globalAdminMiddleware()(c, next);\n }\n\n return next();\n });\n\n if (vitNodeApiConfig.cron) {\n vitNodeApiConfig.cron.schedule();\n }\n\n [newBuildPluginApiCore, ...vitNodeApiConfig.plugins].map(root => {\n app.route(`/${root.pluginId}`, root.hono);\n });\n\n app.onError(async (error, c) => {\n if (error instanceof HTTPException) {\n return error.getResponse();\n }\n\n const errorMessage = error?.message ?? \"Unknown error\";\n\n try {\n const logger = c.get(\"log\");\n if (logger) {\n await logger.error(`Unhandled error: ${errorMessage}`);\n }\n } catch {\n /* empty */\n }\n\n return new Response(\n process.env.NODE_ENV === \"development\"\n ? errorMessage\n : \"Internal Server Error\",\n {\n status: 500,\n },\n );\n });\n\n return app;\n}\n"],"mappings":"uiBAsCA,SAAgB,EAAW,CACzB,MACA,KAAM,EACN,KAAM,EACN,oBAMC,CAKD,IAAM,EAAc,EAAkB,EAAiB,KAAK,EA6E5D,OAzEA,EAAmB,CAAW,EAE9B,EAAI,IAAI,eAAgB,CACtB,QAAS,QACT,KAAM,CACJ,QAAS,EAAc,QACvB,MAAO,aACT,CACF,CAAC,EACD,EAAI,IAAI,EAAK,CAAW,CAAC,EACzB,EAAI,IAAI,EAAK,CAAW,CAAC,EACzB,EAAI,IACF,IACA,EAAsB,EAAiB,YAAa,CAAW,CACjE,EACA,EAAI,IAAI,WAAY,EAAU,CAAE,IAAK,kBAAmB,CAAC,CAAC,EAC1D,EAAI,IACF,IACA,EAAiB,CACf,eAAgB,EAAiB,eACjC,MAAO,EAAiB,MACxB,SAAU,EAAiB,SAC3B,cAAe,EAAiB,cAChC,WAAY,EAAiB,WAC7B,QAAS,EAAiB,QAC1B,KAAM,EAAiB,KACvB,QAAS,EAAiB,QAC1B,QAAS,CAAC,EAAuB,GAAG,EAAiB,OAAO,EAC5D,YAAa,CACf,CAAC,CACH,EACA,EAAI,IAAI,MAAO,EAAG,IACZ,EAAE,IAAI,KAAK,SAAS,SAAS,EACxB,MAAM,EAAsB,CAAC,CAAC,EAAG,CAAI,EAGvC,EAAK,CACb,EAEG,EAAiB,MACnB,EAAiB,KAAK,SAAS,EAGjC,CAAC,EAAuB,GAAG,EAAiB,OAAO,CAAC,CAAC,IAAI,GAAQ,CAC/D,EAAI,MAAM,IAAI,EAAK,WAAY,EAAK,IAAI,CAC1C,CAAC,EAED,EAAI,QAAQ,MAAO,EAAO,IAAM,CAC9B,GAAI,aAAiB,EACnB,OAAO,EAAM,YAAY,EAG3B,IAAM,EAAe,GAAO,SAAW,gBAEvC,GAAI,CACF,IAAM,EAAS,EAAE,IAAI,KAAK,EACtB,GACF,MAAM,EAAO,MAAM,oBAAoB,GAAc,CAEzD,MAAQ,CAER,CAEA,OAAO,IAAI,SACT,QAAQ,IAAI,WAAa,cACrB,EACA,wBACJ,CACE,OAAQ,GACV,CACF,CACF,CAAC,EAEM,CACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cache-client.js","names":[],"sources":["../../../../src/api/lib/cache-client.ts"],"sourcesContent":["import { Redis } from \"ioredis\";\n\nimport type { CacheConfig } from \"./cache\";\n\nexport const createCacheClient = (config?: CacheConfig): null | Redis => {\n if (!config) return null;\n\n const { url, ...options } = config;\n // `enableOfflineQueue: false` makes commands fail fast (instead of queueing)\n // when Redis is unreachable, so `remember` falls through to its loader rather\n // than hanging. Callers can override it via the config.\n const client = url\n ? new Redis(url, { enableOfflineQueue: false, ...options })\n : new Redis({ enableOfflineQueue: false, ...options });\n\n // Without a listener, an \"error\" event (e.g. Redis down) is thrown as an\n // unhandled exception and crashes the process. Swallow it here.\n client.on(\"error\", () => {\n /* cache methods handle failures individually */\n });\n\n return client;\n};\n"],"mappings":"gCAIA,MAAa,EAAqB,GAAuC,CACvE,GAAI,CAAC,EAAQ,OAAO,KAEpB,GAAM,CAAE,MAAK,GAAG,GAAY,EAItB,EAAS,EACX,IAAI,EAAM,EAAK,CAAE,mBAAoB,GAAO,GAAG,CAAQ,CAAC,EACxD,IAAI,EAAM,CAAE,mBAAoB,GAAO,GAAG,CAAQ,CAAC,EAQvD,OAJA,EAAO,GAAG,YAAe,CAEzB,CAAC,EAEM,CACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","names":[],"sources":["../../../../src/api/lib/cache.ts"],"sourcesContent":["import type { Context } from \"hono\";\nimport type { Redis, RedisOptions } from \"ioredis\";\n\nexport type CacheConfig = RedisOptions & { url?: string };\n\n/**\n * Root prefix applied to every key VitNode writes, so the cache can be flushed\n * without touching unrelated data that may live in the same Redis instance.\n * Keys are further namespaced per plugin - see {@link CacheModel.prefix}.\n */\nconst CACHE_PREFIX = \"vitnode:cache:\";\nconst SYSTEM_NAMESPACE = \"__system__\";\n\n/**\n * A small, safe cache facade exposed on the request context as\n * `c.get(\"cache\")`. Values are JSON-serialized and namespaced per plugin (see\n * {@link CacheModel.prefix}), so the `hello` key a plugin writes actually lives\n * at `vitnode:cache:{plugin_code}:hello`. When Redis is not configured (client\n * is `null`) or a command fails, reads return `null`/`false`, writes are\n * no-ops, and {@link CacheModel.remember} simply runs its loader - caching must\n * never break a request.\n */\nexport class CacheModel {\n constructor(client: null | Redis, c: Context) {\n this.c = c;\n this.client = client;\n }\n\n protected readonly c: Context;\n protected readonly client: null | Redis;\n\n private key(key: string): string {\n return `${this.prefix()}${key}`;\n }\n\n /**\n * Key prefix for the current request's plugin, e.g.\n * `vitnode:cache:@vitnode/blog:`. Keys are scoped per plugin so one plugin\n * can't read or clobber another's cache. Falls back to the shared\n * `vitnode:cache:` namespace when there is no plugin on the context.\n */\n private prefix(): string {\n const pluginId = this.c.get(\"plugin\")?.id;\n\n return pluginId ? `${CACHE_PREFIX}${pluginId}:` : CACHE_PREFIX;\n }\n\n private async readKey<T>(fullKey: string): Promise<null | T> {\n if (!this.client) return null;\n\n try {\n const raw = await this.client.get(fullKey);\n\n return raw === null ? null : (JSON.parse(raw) as T);\n } catch {\n return null;\n }\n }\n\n private async removeKeys(fullKeys: string[]): Promise<void> {\n if (!this.client) return;\n\n try {\n if (fullKeys.length > 0) await this.client.del(...fullKeys);\n } catch {\n /* swallow */\n }\n }\n\n private systemKey(key: string): string {\n return `${CACHE_PREFIX}${SYSTEM_NAMESPACE}:${key}`;\n }\n\n private async writeKey<T>(\n fullKey: string,\n value: T,\n ttlSeconds?: number,\n ): Promise<void> {\n if (!this.client) return;\n\n try {\n const raw = JSON.stringify(value);\n if (ttlSeconds && ttlSeconds > 0) {\n await this.client.set(fullKey, raw, \"EX\", ttlSeconds);\n } else {\n await this.client.set(fullKey, raw);\n }\n } catch {\n /* caching must never break the request */\n }\n }\n\n /**\n * Acquire a short-lived distributed lock (`SET key val NX EX ttl`) in the\n * system namespace. Returns `true` when the lock is held by this caller.\n * **Without Redis it returns `true`** so cache-less / single-instance\n * deployments still make progress - callers must guard correctness some other\n * way (e.g. Postgres `FOR UPDATE SKIP LOCKED`). Returns `false` on a Redis\n * error so a flaky connection skips rather than double-runs work.\n */\n async acquireLock(key: string, ttlSeconds: number): Promise<boolean> {\n if (!this.client) return true;\n\n try {\n const result = await this.client.set(\n this.systemKey(`lock:${key}`),\n \"1\",\n \"EX\",\n ttlSeconds,\n \"NX\",\n );\n\n return result === \"OK\";\n } catch {\n return false;\n }\n }\n\n /** Remove one or more keys. No-op without Redis. */\n async delete(key: string | string[]): Promise<void> {\n const keys = (Array.isArray(key) ? key : [key]).map(k => this.key(k));\n await this.removeKeys(keys);\n }\n\n /**\n * Remove one or more keys from the framework system namespace. No-op without\n * Redis. See {@link SYSTEM_NAMESPACE}.\n */\n async deleteSystem(key: string | string[]): Promise<void> {\n const keys = (Array.isArray(key) ? key : [key]).map(k => this.systemKey(k));\n await this.removeKeys(keys);\n }\n\n /**\n * Delete every cache key for the current plugin\n * (`vitnode:cache:{plugin_code}:*`). Other plugins' keys and unrelated Redis\n * data are left untouched. No-op without Redis.\n */\n async flush(): Promise<void> {\n if (!this.client) return;\n\n try {\n const stream = this.client.scanStream({\n match: `${this.prefix()}*`,\n count: 100,\n });\n\n for await (const keys of stream) {\n const batch = keys as string[];\n if (batch.length > 0) await this.client.del(...batch);\n }\n } catch {\n /* swallow */\n }\n }\n\n /** Read a JSON value. Returns `null` on a miss, without Redis, or on error. */\n async get<T>(key: string): Promise<null | T> {\n return this.readKey<T>(this.key(key));\n }\n\n async getSystem<T>(key: string): Promise<null | T> {\n return this.readKey<T>(this.systemKey(key));\n }\n\n /** Whether a key currently exists. `false` without Redis or on error. */\n async has(key: string): Promise<boolean> {\n if (!this.client) return false;\n\n try {\n return (await this.client.exists(this.key(key))) === 1;\n } catch {\n return false;\n }\n }\n\n /** Release a lock taken with {@link acquireLock}. No-op without Redis. */\n async releaseLock(key: string): Promise<void> {\n await this.removeKeys([this.systemKey(`lock:${key}`)]);\n }\n\n async remember<T>(\n key: string,\n ttlSeconds: number,\n loader: () => Promise<T>,\n ): Promise<T> {\n const cached = await this.get<T>(key);\n if (cached !== null) return cached;\n\n const value = await loader();\n await this.set(key, value, ttlSeconds);\n\n return value;\n }\n\n async set<T>(key: string, value: T, ttlSeconds?: number): Promise<void> {\n await this.writeKey(this.key(key), value, ttlSeconds);\n }\n\n async setSystem<T>(\n key: string,\n value: T,\n ttlSeconds?: number,\n ): Promise<void> {\n await this.writeKey(this.systemKey(key), value, ttlSeconds);\n }\n\n async status(): Promise<{ configured: boolean; connected: boolean }> {\n if (!this.client) return { configured: false, connected: false };\n\n try {\n const pong = await this.client.ping();\n\n return { configured: true, connected: pong === \"PONG\" };\n } catch {\n return { configured: true, connected: false };\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"check-plugin-id.js","names":[],"sources":["../../../../src/api/lib/check-plugin-id.ts"],"sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\n\nimport { CONFIG } from \"../../lib/config\";\n\nexport interface PackageJSON {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n exports?: Record<string, Record<string, string>>;\n name: string;\n overrides?: Record<string, string>;\n packageManager?: string;\n pnpm?: Record<string, Record<string, string>>;\n private: boolean;\n scripts?: Record<string, string>;\n version: string;\n workspaces?: string[];\n}\n\nexport const checkPluginId = (pluginName: string): null | PackageJSON => {\n if (!CONFIG.node_development) return null;\n\n const findMonorepoRoot = (startPath: string): null | string => {\n let currentPath = startPath;\n while (currentPath !== resolve(currentPath, \"..\")) {\n const turboConfigPath = join(currentPath, \"turbo.json\");\n\n if (existsSync(turboConfigPath)) {\n return currentPath;\n }\n currentPath = resolve(currentPath, \"..\");\n }\n\n return null;\n };\n\n const findPluginPath = (pluginName: string): null | string => {\n const cwd = process.cwd();\n const monorepoRoot = findMonorepoRoot(cwd);\n\n // Check in current working directory first\n const cwdPluginPath = join(cwd, \"node_modules\", pluginName, \"package.json\");\n if (existsSync(cwdPluginPath)) {\n return cwdPluginPath;\n }\n\n // Check in monorepo root if it exists and is different from cwd\n if (monorepoRoot && monorepoRoot !== cwd) {\n const rootPluginPath = join(\n monorepoRoot,\n \"node_modules\",\n pluginName,\n \"package.json\",\n );\n if (existsSync(rootPluginPath)) {\n return rootPluginPath;\n }\n }\n\n return null;\n };\n\n const path = findPluginPath(pluginName);\n\n if (!path) {\n throw new Error(\n `package.json file not found for plugin \"${pluginName}\". Please ensure you are using the correct plugin name as specified in its package.json.`,\n );\n }\n\n const content: PackageJSON = JSON.parse(readFileSync(path, \"utf-8\"));\n if (content.name !== pluginName) {\n throw new Error(\n `The plugin name in package.json (${content.name}) does not match the requested plugin name (${pluginName}). Please check the plugin name.`,\n );\n }\n\n return content;\n};\n"],"mappings":"kJAmBA,MAAa,EAAiB,GAA2C,CACvE,GAAI,CAAC,EAAO,iBAAkB,OAAO,KAErC,IAAM,EAAoB,GAAqC,CAC7D,IAAI,EAAc,EAClB,KAAO,IAAgB,EAAQ,EAAa,IAAI,GAAG,CAGjD,GAAI,EAFoB,EAAK,EAAa,YAEb,CAAC,EAC5B,OAAO,EAET,EAAc,EAAQ,EAAa,IAAI,CACzC,CAEA,OAAO,IACT,EA4BM,GA1BkB,GAAsC,CAC5D,IAAM,EAAM,QAAQ,IAAI,EAClB,EAAe,EAAiB,CAAG,EAGnC,EAAgB,EAAK,EAAK,eAAgB,EAAY,cAAc,EAC1E,GAAI,EAAW,CAAa,EAC1B,OAAO,EAIT,GAAI,GAAgB,IAAiB,EAAK,CACxC,IAAM,EAAiB,EACrB,EACA,eACA,EACA,cACF,EACA,GAAI,EAAW,CAAc,EAC3B,OAAO,CAEX,CAEA,OAAO,IACT,EAEa,CAAe,CAAU,EAEtC,GAAI,CAAC,EACH,MAAU,MACR,2CAA2C,EAAW,yFACxD,EAGF,IAAM,EAAuB,KAAK,MAAM,EAAa,EAAM,OAAO,CAAC,EACnE,GAAI,EAAQ,OAAS,EACnB,MAAU,MACR,oCAAoC,EAAQ,KAAK,8CAA8C,EAAW,iCAC5G,EAGF,OAAO,CACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"check-staff-permission.js","names":[],"sources":["../../../../src/api/lib/check-staff-permission.ts"],"sourcesContent":["import type { Context } from \"hono\";\n\nimport { and, eq, inArray, or } from \"drizzle-orm\";\nimport { HTTPException } from \"hono/http-exception\";\n\nimport { core_admin_permissions } from \"@/database/admins\";\nimport { core_moderators_permissions } from \"@/database/moderators\";\nimport { core_roles } from \"@/database/roles\";\nimport { core_users_secondary_roles } from \"@/database/users\";\n\nimport type {\n PermissionsStaffArgs,\n PermissionStaffType,\n StaffPermissionSet,\n} from \"./permission-staff\";\n\nimport { hasStaffPermission, staffPermissionKey } from \"./staff-permission\";\n\nconst tableByType = {\n admin: core_admin_permissions,\n moderator: core_moderators_permissions,\n} as const;\n\nexport const getUserRoleIds = async (\n c: Context,\n user: { id: number; roleId: number },\n): Promise<number[]> => {\n const secondary = await c\n .get(\"db\")\n .select({ roleId: core_users_secondary_roles.roleId })\n .from(core_users_secondary_roles)\n .where(eq(core_users_secondary_roles.userId, user.id));\n\n return [...new Set([user.roleId, ...secondary.map(row => row.roleId)])];\n};\n\nexport const resolveStaffPermissions = async (\n c: Context,\n {\n type,\n user,\n }: { type: PermissionStaffType; user: { id: number; roleId: number } },\n): Promise<StaffPermissionSet> => {\n const roleIds = await getUserRoleIds(c, user);\n\n const rootRoles = await c\n .get(\"db\")\n .select({ id: core_roles.id })\n .from(core_roles)\n .where(and(inArray(core_roles.id, roleIds), eq(core_roles.root, true)))\n .limit(1);\n\n if (rootRoles.length > 0) {\n return { root: true, permissions: [] };\n }\n\n const table = tableByType[type];\n const entries = await c\n .get(\"db\")\n .select({ data: table.data })\n .from(table)\n .where(or(eq(table.userId, user.id), inArray(table.roleId, roleIds)));\n\n if (entries.some(entry => entry.data?.unrestricted)) {\n return { root: true, permissions: [] };\n }\n\n const seen = new Set<string>();\n const permissions: PermissionsStaffArgs[] = [];\n for (const entry of entries) {\n for (const permission of entry.data?.permissions ?? []) {\n const key = staffPermissionKey(permission);\n if (seen.has(key)) continue;\n seen.add(key);\n permissions.push(permission);\n }\n }\n\n return { root: false, permissions };\n};\n\nexport const checkStaffPermission = async (\n c: Context,\n { type, ...args }: PermissionsStaffArgs & { type: PermissionStaffType },\n): Promise<boolean> => {\n const user = type === \"admin\" ? c.get(\"admin\")?.user : c.get(\"user\");\n if (!user) return false;\n\n const set = await resolveStaffPermissions(c, { type, user });\n\n return hasStaffPermission(set, args);\n};\n\nexport const assertStaffPermission = async (\n c: Context,\n args: PermissionsStaffArgs & { type: PermissionStaffType },\n): Promise<void> => {\n const allowed = await checkStaffPermission(c, args);\n if (!allowed) {\n throw new HTTPException(403, { message: \"Forbidden\" });\n }\n};\n"],"mappings":"6cAkBA,MAAM,EAAc,CAClB,MAAO,EACP,UAAW,CACb,EAEa,EAAiB,MAC5B,EACA,IACsB,CACtB,IAAM,EAAY,MAAM,EACrB,IAAI,IAAI,CAAC,CACT,OAAO,CAAE,OAAQ,EAA2B,MAAO,CAAC,CAAC,CACrD,KAAK,CAA0B,CAAC,CAChC,MAAM,EAAG,EAA2B,OAAQ,EAAK,EAAE,CAAC,EAEvD,MAAO,CAAC,GAAG,IAAI,IAAI,CAAC,EAAK,OAAQ,GAAG,EAAU,IAAI,GAAO,EAAI,MAAM,CAAC,CAAC,CAAC,CACxE,EAEa,EAA0B,MACrC,EACA,CACE,OACA,UAE8B,CAChC,IAAM,EAAU,MAAM,EAAe,EAAG,CAAI,EAS5C,IAAI,MAPoB,EACrB,IAAI,IAAI,CAAC,CACT,OAAO,CAAE,GAAI,EAAW,EAAG,CAAC,CAAC,CAC7B,KAAK,CAAU,CAAC,CAChB,MAAM,EAAI,EAAQ,EAAW,GAAI,CAAO,EAAG,EAAG,EAAW,KAAM,EAAI,CAAC,CAAC,CAAC,CACtE,MAAM,CAAC,EAAA,CAEI,OAAS,EACrB,MAAO,CAAE,KAAM,GAAM,YAAa,CAAC,CAAE,EAGvC,IAAM,EAAQ,EAAY,GACpB,EAAU,MAAM,EACnB,IAAI,IAAI,CAAC,CACT,OAAO,CAAE,KAAM,EAAM,IAAK,CAAC,CAAC,CAC5B,KAAK,CAAK,CAAC,CACX,MAAM,EAAG,EAAG,EAAM,OAAQ,EAAK,EAAE,EAAG,EAAQ,EAAM,OAAQ,CAAO,CAAC,CAAC,EAEtE,GAAI,EAAQ,KAAK,GAAS,EAAM,MAAM,YAAY,EAChD,MAAO,CAAE,KAAM,GAAM,YAAa,CAAC,CAAE,EAGvC,IAAM,EAAO,IAAI,IACX,EAAsC,CAAC,EAC7C,IAAK,IAAM,KAAS,EAClB,IAAK,IAAM,KAAc,EAAM,MAAM,aAAe,CAAC,EAAG,CACtD,IAAM,EAAM,EAAmB,CAAU,EACrC,EAAK,IAAI,CAAG,IAChB,EAAK,IAAI,CAAG,EACZ,EAAY,KAAK,CAAU,EAC7B,CAGF,MAAO,CAAE,KAAM,GAAO,aAAY,CACpC,EAEa,EAAuB,MAClC,EACA,CAAE,OAAM,GAAG,KACU,CACrB,IAAM,EAAO,IAAS,QAAU,EAAE,IAAI,OAAO,CAAC,EAAE,KAAO,EAAE,IAAI,MAAM,EAKnE,OAJK,EAIE,EAAmB,MAFR,EAAwB,EAAG,CAAE,OAAM,MAAK,CAAC,EAE5B,CAAI,EAJjB,EAKpB,EAEa,EAAwB,MACnC,EACA,IACkB,CAElB,GAAI,CAAC,MADiB,EAAqB,EAAG,CAAI,EAEhD,MAAM,IAAI,EAAc,IAAK,CAAE,QAAS,WAAY,CAAC,CAEzD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cron.js","names":[],"sources":["../../../../src/api/lib/cron.ts"],"sourcesContent":["import type { Context } from \"hono\";\n\nimport { CONFIG } from \"@/lib/config\";\n\nimport type { EnvVitNode } from \"../middlewares/global.middleware\";\n\nexport interface CronAdapter {\n schedule: () => void;\n}\n\nexport interface BuildCronReturn {\n description?: string;\n handler: (c: Context<EnvVitNode>) => Promise<void> | void;\n name: string;\n schedule: string;\n}\n\nexport interface CronJobConfig extends BuildCronReturn {\n module: string;\n pluginId: string;\n}\n\nexport function buildCron({\n name,\n schedule,\n handler,\n description,\n}: BuildCronReturn): BuildCronReturn {\n return { name, schedule, handler, description };\n}\n\nexport const handleCronJobs = async () => {\n const url = new URL(\"/api/@vitnode/core/cron\", CONFIG.api.origin);\n const headers: HeadersInit = {\n \"Content-Type\": \"application/json\",\n };\n\n if (CONFIG.cronJobSecret) {\n headers.authorization = `Bearer ${CONFIG.cronJobSecret}`;\n }\n\n await fetch(url.toString(), {\n method: \"POST\",\n headers,\n });\n};\n"],"mappings":"6CAsBA,SAAgB,EAAU,CACxB,OACA,WACA,UACA,eACmC,CACnC,MAAO,CAAE,OAAM,WAAU,UAAS,aAAY,CAChD,CAEA,MAAa,EAAiB,SAAY,CACxC,IAAM,EAAM,IAAI,IAAI,0BAA2B,EAAO,IAAI,MAAM,EAC1D,EAAuB,CAC3B,eAAgB,kBAClB,EAEI,EAAO,gBACT,EAAQ,cAAgB,UAAU,EAAO,iBAG3C,MAAM,MAAM,EAAI,SAAS,EAAG,CAC1B,OAAQ,OACR,SACF,CAAC,CACH"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger-middleware.js","names":[],"sources":["../../../../src/api/lib/logger-middleware.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport type { Context } from \"hono\";\n\nimport { core_logs } from \"@/database/logs\";\n\ntype CoreLogsType = \"debug\" | \"error\" | \"warn\";\n\nexport interface LoggerMiddlewareType {\n debug: (content: string) => Promise<void>;\n error: (content: string) => Promise<void>;\n warn: (content: string) => Promise<void>;\n}\n\nexport const loggerMiddleware = (c: Context): LoggerMiddlewareType => {\n const logToDbAndConsole = async (content: string, type: CoreLogsType) => {\n const pluginId = c.get(\"plugin\")?.id ?? \"core\";\n const ipAddress = c.get(\"ipAddress\");\n\n await c\n .get(\"db\")\n .insert(core_logs)\n .values({\n pluginId,\n type,\n content,\n ipAddress,\n method: c.req.method.toUpperCase(),\n path: c.req.path,\n userAgent: c.req.header(\"User-Agent\"),\n statusCode: c.res.status,\n userId: c.get(\"user\")?.id,\n });\n\n const loggers: Record<CoreLogsType, (msg: string) => void> = {\n debug: msg =>\n console.debug(\n `\\x1b[34m[VitNode]\\x1b[0m \\x1b[38;5;208mDebug (${pluginId})\\x1b[0m: ${msg}`,\n ),\n error: msg =>\n console.error(\n `\\x1b[34m[VitNode]\\x1b[0m \\x1b[31mError (${pluginId})\\x1b[0m: ${msg}`,\n ),\n warn: msg =>\n console.warn(\n `\\x1b[34m[VitNode]\\x1b[0m \\x1b[33mWarning (${pluginId})\\x1b[0m: ${msg}`,\n ),\n };\n (loggers[type] ?? loggers.debug)(content);\n };\n\n return {\n debug: async (content: string) => {\n await logToDbAndConsole(content, \"debug\");\n },\n error: async (content: string) => {\n await logToDbAndConsole(content, \"error\");\n },\n warn: async (content: string) => {\n await logToDbAndConsole(content, \"warn\");\n },\n };\n};\n"],"mappings":"mDAaA,MAAa,EAAoB,GAAqC,CACpE,IAAM,EAAoB,MAAO,EAAiB,IAAuB,CACvE,IAAM,EAAW,EAAE,IAAI,QAAQ,CAAC,EAAE,IAAM,OAClC,EAAY,EAAE,IAAI,WAAW,EAEnC,MAAM,EACH,IAAI,IAAI,CAAC,CACT,OAAO,CAAS,CAAC,CACjB,OAAO,CACN,WACA,OACA,UACA,YACA,OAAQ,EAAE,IAAI,OAAO,YAAY,EACjC,KAAM,EAAE,IAAI,KACZ,UAAW,EAAE,IAAI,OAAO,YAAY,EACpC,WAAY,EAAE,IAAI,OAClB,OAAQ,EAAE,IAAI,MAAM,CAAC,EAAE,EACzB,CAAC,EAEH,IAAM,EAAuD,CAC3D,MAAO,GACL,QAAQ,MACN,iDAAiD,EAAS,YAAY,GACxE,EACF,MAAO,GACL,QAAQ,MACN,2CAA2C,EAAS,YAAY,GAClE,EACF,KAAM,GACJ,QAAQ,KACN,6CAA6C,EAAS,YAAY,GACpE,CACJ,GACC,EAAQ,IAAS,EAAQ,MAAA,CAAO,CAAO,CAC1C,EAEA,MAAO,CACL,MAAO,KAAO,IAAoB,CAChC,MAAM,EAAkB,EAAS,OAAO,CAC1C,EACA,MAAO,KAAO,IAAoB,CAChC,MAAM,EAAkB,EAAS,OAAO,CAC1C,EACA,KAAM,KAAO,IAAoB,CAC/B,MAAM,EAAkB,EAAS,MAAM,CACzC,CACF,CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","names":[],"sources":["../../../../src/api/lib/module.ts"],"sourcesContent":["import { OpenAPIHono } from \"@hono/zod-openapi\";\n\nimport type { BuildCronReturn } from \"./cron\";\nimport type { BuildQueueTaskReturn } from \"./queue\";\nimport type { Route } from \"./route\";\nimport type { BuildWebSocketReturn } from \"./websocket\";\n\nexport interface BuildModuleType<T extends Route, Plugin extends string> {\n plugin: Plugin;\n routes: T;\n}\n\nexport interface BaseBuildModuleReturn<\n P extends string = string,\n M extends string = string,\n Routes extends Route<P>[] = Route<P>[],\n> {\n cronJobs: BuildCronReturn[];\n hono: OpenAPIHono;\n modules?: BaseBuildModuleReturn<P>[];\n name: M;\n pluginId: P;\n queueTasks: BuildQueueTaskReturn[];\n routes: Routes;\n webSockets: BuildWebSocketReturn[];\n}\n\nexport interface BuildModuleReturn<\n P extends string,\n M extends string,\n Routes extends Route<P>[] = Route<P>[],\n Modules extends BaseBuildModuleReturn<P>[] = BaseBuildModuleReturn<P>[],\n> extends BaseBuildModuleReturn<P, M, Routes> {\n modules?: Modules;\n}\n\nexport function buildModule<\n const P extends string,\n const M extends string,\n const Routes extends Route<P>[],\n Modules extends BaseBuildModuleReturn<P>[],\n>({\n routes,\n pluginId,\n name,\n modules,\n cronJobs = [],\n queueTasks = [],\n webSockets = [],\n}: {\n cronJobs?: BuildCronReturn[];\n modules?: Modules;\n name: M;\n pluginId: P;\n queueTasks?: BuildQueueTaskReturn[];\n routes: Routes;\n webSockets?: BuildWebSocketReturn[];\n}): BuildModuleReturn<P, M, Routes, Modules> {\n const hono = new OpenAPIHono();\n\n if (routes) {\n routes.forEach(({ handler, route }) => {\n hono.openapi(route, handler);\n });\n }\n\n if (modules) {\n modules.forEach(module => {\n hono.route(`/${module.name}`, module.hono);\n });\n }\n\n return {\n routes,\n pluginId,\n hono,\n name,\n modules,\n cronJobs,\n queueTasks,\n webSockets,\n };\n}\n"],"mappings":"gDAoCA,SAAgB,EAKd,CACA,SACA,WACA,OACA,UACA,WAAW,CAAC,EACZ,aAAa,CAAC,EACd,aAAa,CAAC,GAS6B,CAC3C,IAAM,EAAO,IAAI,EAcjB,OAZI,GACF,EAAO,SAAS,CAAE,UAAS,WAAY,CACrC,EAAK,QAAQ,EAAO,CAAO,CAC7B,CAAC,EAGC,GACF,EAAQ,QAAQ,GAAU,CACxB,EAAK,MAAM,IAAI,EAAO,OAAQ,EAAO,IAAI,CAC3C,CAAC,EAGI,CACL,SACA,WACA,OACA,OACA,UACA,WACA,aACA,YACF,CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"permission-staff.js","names":[],"sources":["../../../../src/api/lib/permission-staff.ts"],"sourcesContent":["/**\n * Plugin-based staff permission catalog.\n *\n * A plugin declares, in its API config, which permissions exist for moderators\n * and for admins. Permissions are grouped by module string, mirroring the way a\n * plugin is split into modules elsewhere in the API.\n *\n * The i18n label for each permission lives in the plugin's locale file under the\n * flat top-level key `{pluginId}:{module}:{permission}` (e.g.\n * `@vitnode/blog:posts:can_delete`).\n *\n * A permission may be declared as a plain string, or as an object that lists the\n * other permissions (in the same module) it `dependsOn`. The staff form only\n * shows a permission once every permission it depends on is enabled - e.g.\n * `{ permission: \"can_create\", dependsOn: [\"can_view\"] }` stays hidden until\n * `can_view` is on.\n */\nexport type PermissionStaffEntryInput =\n string | { dependsOn?: string[]; permission: string };\n\n/**\n * Author-facing module map - what a plugin declares in its API config.\n */\nexport type PermissionStaffModulesInput = Record<\n string,\n PermissionStaffEntryInput[]\n>;\n\n/**\n * A permission entry after normalization - the shape carried on the request\n * context and returned by the permission catalog. `dependsOn` is always an\n * array (empty when the permission has no prerequisites).\n */\nexport interface PermissionStaffEntry {\n dependsOn: string[];\n permission: string;\n}\n\nexport type PermissionStaffModules = Record<string, PermissionStaffEntry[]>;\n\nexport interface PermissionStaffConfig {\n admin?: PermissionStaffModulesInput;\n moderator?: PermissionStaffModulesInput;\n}\n\nexport type PermissionStaffType = \"admin\" | \"moderator\";\n\n/**\n * Normalizes the author-facing module map into the canonical\n * `{ permission, dependsOn }` shape, so every downstream reader deals with a\n * single shape regardless of how the plugin declared it.\n */\nexport const normalizePermissionStaffModules = (\n modules: PermissionStaffModulesInput = {},\n): PermissionStaffModules =>\n Object.fromEntries(\n Object.entries(modules).map(([module, entries]) => [\n module,\n entries.map(entry =>\n typeof entry === \"string\"\n ? { permission: entry, dependsOn: [] }\n : { permission: entry.permission, dependsOn: entry.dependsOn ?? [] },\n ),\n ]),\n );\n\n/**\n * A single granted permission stored against a staff entry.\n */\nexport interface PermissionsStaffArgs {\n module: string;\n permission: string;\n plugin: string;\n}\n\n/**\n * The value persisted in a staff entry's `data` jsonb column.\n *\n * `unrestricted` grants every permission for the staff type (and any added in\n * the future); when `false`, only the explicitly listed `permissions` apply.\n */\nexport interface StaffPermissionsData {\n permissions: PermissionsStaffArgs[];\n unrestricted: boolean;\n}\n\n/**\n * The catalog as aggregated onto the request context (`c.get(\"core\").permissionStaff`).\n */\nexport interface PermissionStaffCatalogEntry {\n admin: PermissionStaffModules;\n moderator: PermissionStaffModules;\n pluginId: string;\n}\n\n/**\n * The resolved effective permissions for a user. `root` short-circuits every\n * check to `true`.\n */\nexport interface StaffPermissionSet {\n permissions: PermissionsStaffArgs[];\n root: boolean;\n}\n"],"mappings":"AAoDA,MAAa,GACX,EAAuC,CAAC,IAExC,OAAO,YACL,OAAO,QAAQ,CAAO,CAAC,CAAC,KAAK,CAAC,EAAQ,KAAa,CACjD,EACA,EAAQ,IAAI,GACV,OAAO,GAAU,SACb,CAAE,WAAY,EAAO,UAAW,CAAC,CAAE,EACnC,CAAE,WAAY,EAAM,WAAY,UAAW,EAAM,WAAa,CAAC,CAAE,CACvE,CACF,CAAC,CACH"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","names":[],"sources":["../../../../src/api/lib/plugin.ts"],"sourcesContent":["import { OpenAPIHono } from \"@hono/zod-openapi\";\n\nimport type { CronJobConfig } from \"./cron\";\nimport type { BuildModuleReturn } from \"./module\";\nimport type { PermissionStaffConfig } from \"./permission-staff\";\nimport type { QueueTaskConfig } from \"./queue\";\nimport type { WebSocketConfig } from \"./websocket\";\n\nimport { checkPluginId } from \"./check-plugin-id\";\n\nexport interface BuildPluginApiReturn {\n cronJobs?: Omit<CronJobConfig, \"pluginId\">[];\n hono: OpenAPIHono;\n permissionStaff?: PermissionStaffConfig;\n pluginId: string;\n queueTasks?: Omit<QueueTaskConfig, \"pluginId\">[];\n webSockets?: Omit<WebSocketConfig, \"pluginId\">[];\n}\n\nexport function buildApiPlugin<P extends string>({\n pluginId,\n modules = [],\n permissionStaff,\n}: {\n modules?: BuildModuleReturn<P, string>[];\n permissionStaff?: PermissionStaffConfig;\n pluginId: P;\n}): BuildPluginApiReturn {\n // Run for checking if the plugin is valid\n checkPluginId(pluginId);\n\n const hono = new OpenAPIHono();\n const cronJobs: BuildPluginApiReturn[\"cronJobs\"] = [];\n const queueTasks: BuildPluginApiReturn[\"queueTasks\"] = [];\n const webSockets: BuildPluginApiReturn[\"webSockets\"] = [];\n modules.forEach(handler => {\n hono.route(`/${handler.name}`, handler.hono);\n\n handler.cronJobs?.forEach(cron => {\n cronJobs.push({ ...cron, module: handler.name });\n });\n\n handler.queueTasks?.forEach(task => {\n queueTasks.push({ ...task, module: handler.name });\n });\n\n handler.webSockets?.forEach(webSocket => {\n webSockets.push({ ...webSocket, module: handler.name });\n });\n });\n\n return {\n pluginId,\n hono,\n cronJobs,\n queueTasks,\n webSockets,\n permissionStaff,\n };\n}\n"],"mappings":"qGAmBA,SAAgB,EAAiC,CAC/C,WACA,UAAU,CAAC,EACX,mBAKuB,CAEvB,EAAc,CAAQ,EAEtB,IAAM,EAAO,IAAI,EACX,EAA6C,CAAC,EAC9C,EAAiD,CAAC,EAClD,EAAiD,CAAC,EAiBxD,OAhBA,EAAQ,QAAQ,GAAW,CACzB,EAAK,MAAM,IAAI,EAAQ,OAAQ,EAAQ,IAAI,EAE3C,EAAQ,UAAU,QAAQ,GAAQ,CAChC,EAAS,KAAK,CAAE,GAAG,EAAM,OAAQ,EAAQ,IAAK,CAAC,CACjD,CAAC,EAED,EAAQ,YAAY,QAAQ,GAAQ,CAClC,EAAW,KAAK,CAAE,GAAG,EAAM,OAAQ,EAAQ,IAAK,CAAC,CACnD,CAAC,EAED,EAAQ,YAAY,QAAQ,GAAa,CACvC,EAAW,KAAK,CAAE,GAAG,EAAW,OAAQ,EAAQ,IAAK,CAAC,CACxD,CAAC,CACH,CAAC,EAEM,CACL,WACA,OACA,WACA,aACA,aACA,iBACF,CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","names":[],"sources":["../../../../src/api/lib/queue.ts"],"sourcesContent":["import type { Context } from \"hono\";\n\nimport type { EnvVitNode } from \"../middlewares/global.middleware\";\n\nexport interface BuildQueueTaskReturn {\n description?: string;\n handler: (\n c: Context<EnvVitNode>,\n payload: Record<string, unknown>,\n ) => Promise<void> | void;\n maxAttempts?: number;\n name: string;\n}\n\nexport interface QueueTaskConfig extends BuildQueueTaskReturn {\n module: string;\n pluginId: string;\n}\n\nexport function buildQueueTask({\n name,\n handler,\n description,\n maxAttempts,\n}: BuildQueueTaskReturn): BuildQueueTaskReturn {\n return { name, handler, description, maxAttempts };\n}\n"],"mappings":"AAmBA,SAAgB,EAAe,CAC7B,OACA,UACA,cACA,eAC6C,CAC7C,MAAO,CAAE,OAAM,UAAS,cAAa,aAAY,CACnD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-role-names.js","names":[],"sources":["../../../../src/api/lib/resolve-role-names.ts"],"sourcesContent":["import type { Context } from \"hono\";\n\nimport { and, eq, inArray } from \"drizzle-orm\";\n\nimport { core_languages_words } from \"@/database/languages\";\n\nexport interface ResolvedRoleName {\n languageCode: string;\n name: string;\n}\n\n// Role names are not stored on `core_roles` - every translation lives in\n// `core_languages_words`. This resolves the name translations for a set of role\n// ids in a single query and returns them keyed by role id, ready to hand to the\n// `RoleFormat` component (which picks the active locale on the frontend).\nexport const resolveRoleNames = async (\n c: Context,\n roleIds: number[],\n): Promise<Map<number, ResolvedRoleName[]>> => {\n const ids = [...new Set(roleIds)];\n if (ids.length === 0) {\n return new Map();\n }\n\n const words = await c\n .get(\"db\")\n .select({\n itemId: core_languages_words.itemId,\n languageCode: core_languages_words.languageCode,\n value: core_languages_words.value,\n })\n .from(core_languages_words)\n .where(\n and(\n eq(core_languages_words.tableName, \"core_roles\"),\n eq(core_languages_words.variable, \"name\"),\n eq(core_languages_words.pluginCode, \"core\"),\n inArray(core_languages_words.itemId, ids),\n ),\n );\n\n const result = new Map<number, ResolvedRoleName[]>();\n for (const id of ids) {\n result.set(\n id,\n words\n .filter(word => word.itemId === id)\n .map(word => ({ name: word.value, languageCode: word.languageCode })),\n );\n }\n\n return result;\n};\n"],"mappings":"0HAeA,MAAa,EAAmB,MAC9B,EACA,IAC6C,CAC7C,IAAM,EAAM,CAAC,GAAG,IAAI,IAAI,CAAO,CAAC,EAChC,GAAI,EAAI,SAAW,EACjB,OAAO,IAAI,IAGb,IAAM,EAAQ,MAAM,EACjB,IAAI,IAAI,CAAC,CACT,OAAO,CACN,OAAQ,EAAqB,OAC7B,aAAc,EAAqB,aACnC,MAAO,EAAqB,KAC9B,CAAC,CAAC,CACD,KAAK,CAAoB,CAAC,CAC1B,MACC,EACE,EAAG,EAAqB,UAAW,YAAY,EAC/C,EAAG,EAAqB,SAAU,MAAM,EACxC,EAAG,EAAqB,WAAY,MAAM,EAC1C,EAAQ,EAAqB,OAAQ,CAAG,CAC1C,CACF,EAEI,EAAS,IAAI,IACnB,IAAK,IAAM,KAAM,EACf,EAAO,IACL,EACA,EACG,OAAO,GAAQ,EAAK,SAAW,CAAE,CAAC,CAClC,IAAI,IAAS,CAAE,KAAM,EAAK,MAAO,aAAc,EAAK,YAAa,EAAE,CACxE,EAGF,OAAO,CACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"route.js","names":["createRouteHono"],"sources":["../../../../src/api/lib/route.ts"],"sourcesContent":["import type { RouteConfig, RouteHandler } from \"@hono/zod-openapi\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport { createRoute as createRouteHono } from \"@hono/zod-openapi\";\n\nimport type { EnvVitNode } from \"../middlewares/global.middleware\";\n\nimport { captchaMiddleware } from \"../middlewares/captcha.middleware\";\nimport { pluginMiddleware } from \"../middlewares/plugin.middleware\";\nimport { assertStaffPermission } from \"./check-staff-permission\";\n\nexport interface AdminStaffPermission {\n module: string;\n permission: string;\n plugin?: string;\n}\n\nexport const buildRoute = <\n Plugin extends string,\n P extends string,\n R extends Omit<RouteConfig, \"path\"> & {\n path: P;\n withCaptcha?: boolean;\n },\n>({\n route,\n handler,\n pluginId,\n adminStaffPermission,\n}: {\n adminStaffPermission?: AdminStaffPermission;\n handler: RouteHandler<R & { path: P }, EnvVitNode>;\n pluginId: Plugin;\n route: R;\n}): Route<Plugin, R & { path: P }> => {\n const pluginTag = pluginId\n .split(/[-_]/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n\n const tags = [pluginTag, ...(route.tags ?? [])];\n\n const middleware: MiddlewareHandler[] = [pluginMiddleware(pluginId)];\n\n if (adminStaffPermission) {\n const { plugin, module, permission } = adminStaffPermission;\n middleware.push(async (c, next) => {\n await assertStaffPermission(c, {\n type: \"admin\",\n plugin: plugin ?? pluginId,\n module,\n permission,\n });\n await next();\n });\n }\n\n if (route.withCaptcha) {\n middleware.push(captchaMiddleware());\n }\n\n if (Array.isArray(route.middleware)) {\n middleware.push(...route.middleware);\n } else if (route.middleware) {\n middleware.push(route.middleware);\n }\n\n return {\n route: createRouteHono({\n tags,\n middleware,\n ...route,\n }),\n handler: handler as Route<Plugin, R & { path: P }>[\"handler\"],\n pluginId,\n };\n};\n\nexport interface Route<\n Plugin extends string = string,\n R extends RouteConfig = RouteConfig,\n> {\n handler: (...args: unknown[]) => Promise<Response> | Response;\n pluginId: Plugin;\n route: R;\n}\n"],"mappings":"oQAiBA,MAAa,GAOX,CACA,QACA,UACA,WACA,0BAMoC,CAMpC,IAAM,EAAO,CALK,EACf,MAAM,MAAM,CAAC,CACb,IAAI,GAAQ,EAAK,OAAO,CAAC,CAAC,CAAC,YAAY,EAAI,EAAK,MAAM,CAAC,CAAC,CAAC,CACzD,KAAK,GAEc,EAAG,GAAI,EAAM,MAAQ,CAAC,CAAE,EAExC,EAAkC,CAAC,EAAiB,CAAQ,CAAC,EAEnE,GAAI,EAAsB,CACxB,GAAM,CAAE,SAAQ,SAAQ,cAAe,EACvC,EAAW,KAAK,MAAO,EAAG,IAAS,CACjC,MAAM,EAAsB,EAAG,CAC7B,KAAM,QACN,OAAQ,GAAU,EAClB,SACA,YACF,CAAC,EACD,MAAM,EAAK,CACb,CAAC,CACH,CAYA,OAVI,EAAM,aACR,EAAW,KAAK,EAAkB,CAAC,EAGjC,MAAM,QAAQ,EAAM,UAAU,EAChC,EAAW,KAAK,GAAG,EAAM,UAAU,EAC1B,EAAM,YACf,EAAW,KAAK,EAAM,UAAU,EAG3B,CACL,MAAOA,EAAgB,CACrB,OACA,aACA,GAAG,CACL,CAAC,EACQ,UACT,UACF,CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"staff-permission.js","names":[],"sources":["../../../../src/api/lib/staff-permission.ts"],"sourcesContent":["import type {\n PermissionsStaffArgs,\n StaffPermissionSet,\n} from \"./permission-staff\";\n\nexport const hasStaffPermission = (\n set: StaffPermissionSet,\n args: PermissionsStaffArgs,\n): boolean => {\n if (set.root) return true;\n\n return set.permissions.some(\n permission =>\n permission.plugin === args.plugin &&\n permission.module === args.module &&\n permission.permission === args.permission,\n );\n};\n\nexport const staffPermissionKey = ({\n plugin,\n module,\n permission,\n}: PermissionsStaffArgs): string => `${plugin}:${module}:${permission}`;\n"],"mappings":"AAKA,MAAa,GACX,EACA,IAEI,EAAI,KAAa,GAEd,EAAI,YAAY,KACrB,GACE,EAAW,SAAW,EAAK,QAC3B,EAAW,SAAW,EAAK,QAC3B,EAAW,aAAe,EAAK,UACnC,EAGW,GAAsB,CACjC,SACA,SACA,gBACkC,GAAG,EAAO,GAAG,EAAO,GAAG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","names":[],"sources":["../../../../src/api/lib/websocket.ts"],"sourcesContent":["import type { Context } from \"hono\";\nimport type { WSContext } from \"hono/ws\";\n\nimport type { EnvVitNode } from \"../middlewares/global.middleware\";\n\nexport { getWebSocketId } from \"@/ws/types\";\n\n/**\n * WebSocket context for controlling the connection. Use it to `send`, `close`\n * or read the `readyState`. The underlying runtime socket is exposed on\n * `ws.raw` and is left generic so the same handler works across runtimes\n * (node.js `ws`, Bun, ...).\n */\nexport type VitNodeWSContext = WSContext;\n\n/**\n * Arguments passed to a registered WebSocket's `onMessage` handler.\n *\n * - `TReceive` - the payload the client sends for this socket.\n * - `TSend` - the payload the server sends back to the client.\n */\nexport interface VitNodeWSMessageParams<TReceive = unknown, TSend = unknown> {\n /** Hono request context - reach the db, the user, the logger, etc. */\n c: Context<EnvVitNode>;\n /** The payload sent by the client for this socket. */\n data: TReceive;\n /** Send a payload back to this client on the same socket id. */\n send: (data: TSend) => void;\n /** Low-level WebSocket context (`send`, `close`, `readyState`, ...). */\n ws: VitNodeWSContext;\n}\n\n/**\n * A registered WebSocket. The generic argument types are only used at the\n * definition site (via {@link buildWebSocket}); once stored they are erased so\n * sockets with different message shapes can live in the same array.\n */\nexport interface BuildWebSocketReturn {\n description?: string;\n /**\n * The part of the id chosen by the developer. The full id a client targets\n * is `{pluginId}_{module}_{id}`.\n */\n id: string;\n onMessage: (params: VitNodeWSMessageParams) => Promise<void> | void;\n}\n\n/**\n * A registered WebSocket together with the plugin and module it belongs to.\n * The `module` is filled in when the module is built and the `pluginId` when\n * the plugin is built, mirroring how cron jobs are wired up.\n */\nexport interface WebSocketConfig extends BuildWebSocketReturn {\n module: string;\n pluginId: string;\n}\n\nexport function buildWebSocket<TReceive = unknown, TSend = unknown>(webSocket: {\n description?: string;\n id: string;\n onMessage: (\n params: VitNodeWSMessageParams<TReceive, TSend>,\n ) => Promise<void> | void;\n}): BuildWebSocketReturn {\n return webSocket as BuildWebSocketReturn;\n}\n"],"mappings":"mDAyDA,SAAgB,EAAoD,EAM3C,CACvB,OAAO,CACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"with-pagination.js","names":[],"sources":["../../../../src/api/lib/with-pagination.ts"],"sourcesContent":["import type { ColumnBaseConfig, Placeholder, SQL } from \"drizzle-orm\";\nimport type {\n PgColumn,\n PgTable,\n PgTableWithColumns,\n TableConfig,\n} from \"drizzle-orm/pg-core\";\nimport type { Context } from \"hono\";\n\nimport { z } from \"@hono/zod-openapi\";\nimport { and, asc, count, desc, gt, ilike, lt, or } from \"drizzle-orm\";\n\nfunction parsePaginationParams(params: {\n query: { cursor?: string; first?: string; last?: string };\n}): { cursor?: number; first?: number; last?: number } {\n const cursor = params.query.cursor\n ? parseInt(params.query.cursor, 10)\n : undefined;\n const first = params.query.first\n ? Math.min(parseInt(params.query.first, 10), 100)\n : undefined;\n const last = params.query.last\n ? Math.min(parseInt(params.query.last, 10), 100)\n : undefined;\n\n if (first !== undefined && last !== undefined) {\n throw new Error(\"Cannot specify both first and last\");\n }\n if (first !== undefined && first < 0) {\n throw new Error(\"first must be positive\");\n }\n if (last !== undefined && last < 0) {\n throw new Error(\"last must be positive\");\n }\n\n return { cursor, first, last };\n}\n\nfunction getOrderFn(\n isForward: boolean,\n order: \"asc\" | \"desc\",\n): typeof asc | typeof desc {\n if (isForward) {\n return order === \"asc\" ? asc : desc;\n }\n\n return order === \"asc\" ? desc : asc;\n}\n\nfunction buildWhereWithCursor<\n Primary extends ColumnBaseConfig<\"number\", string>,\n>(\n baseWhere: SQL | undefined,\n cursor: number | undefined,\n isForward: boolean,\n order: \"asc\" | \"desc\",\n table: PgTable,\n primaryCursor: PgColumn<Primary>,\n): SQL | undefined {\n if (!cursor) return baseWhere;\n\n const cursorFilter =\n (isForward && order === \"asc\") || (!isForward && order === \"desc\")\n ? gt\n : lt;\n\n const cursorWhere = cursorFilter(table[primaryCursor.name], cursor);\n\n return baseWhere ? and(baseWhere, cursorWhere) : cursorWhere;\n}\n\nfunction buildSearchWhere(\n search: PgColumn[] | undefined,\n term: string | undefined,\n): SQL | undefined {\n const trimmed = term?.trim();\n if (!search?.length || !trimmed) return undefined;\n\n return or(...search.map(column => ilike(column, `%${trimmed}%`)));\n}\n\nasync function fetchTotalCount(\n c: Context,\n table: PgTable,\n where: SQL | undefined,\n): Promise<number> {\n const [{ count: totalCount }] = await c\n .get(\"db\")\n .select({ count: count() })\n .from(table)\n .where(where);\n\n return totalCount;\n}\n\nexport async function withPagination<\n QueryMin extends Record<string, unknown>,\n T extends TableConfig,\n Primary extends ColumnBaseConfig<\"number\", string>,\n>({\n query,\n table,\n params,\n search,\n where: whereFromParams,\n primaryCursor,\n orderBy: orderByFromParams,\n c,\n}: {\n c: Context;\n orderBy: {\n column: PgColumn;\n order: \"asc\" | \"desc\";\n };\n params: {\n query: {\n cursor?: string;\n first?: string;\n last?: string;\n search?: string;\n };\n };\n primaryCursor: PgColumn<Primary>;\n query: (args: {\n limit: number | Placeholder<string, unknown>;\n orderBy: SQL;\n where: SQL | undefined;\n }) => Promise<QueryMin[]>;\n search?: T[\"columns\"][keyof T[\"columns\"]][];\n table: Omit<PgTableWithColumns<T>, \"enableRLS\">;\n where?: SQL;\n}): Promise<{\n edges: QueryMin[];\n pageInfo: {\n count: number;\n endCursor: null | number;\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n startCursor: null | number;\n totalCount: number;\n };\n}> {\n const { cursor, first, last } = parsePaginationParams(params);\n\n const isForward = last === undefined;\n const orderFn = getOrderFn(isForward, orderByFromParams.order);\n const orderBy: SQL = orderFn(table[orderByFromParams.column.name]);\n\n const searchWhere = buildSearchWhere(search, params.query.search);\n const baseWhere =\n whereFromParams && searchWhere\n ? and(whereFromParams, searchWhere)\n : (whereFromParams ?? searchWhere);\n\n const where = buildWhereWithCursor(\n baseWhere,\n cursor,\n isForward,\n orderByFromParams.order,\n table,\n primaryCursor,\n );\n\n const totalCount = await fetchTotalCount(c, table, baseWhere);\n\n const limit = (first ?? last ?? 50) + 1;\n const edges = await query({ limit, where, orderBy });\n\n const requested = first ?? last ?? edges.length;\n const hasMore = edges.length > requested;\n const slicedEdges = edges.slice(0, requested);\n const finalEdges = isForward ? slicedEdges : slicedEdges.reverse();\n\n const startCursor: null | number =\n (finalEdges[0]?.[primaryCursor.name] as number) ?? null;\n const endCursor: null | number =\n (finalEdges.at(-1)?.[primaryCursor.name] as number) ?? null;\n\n return {\n pageInfo: {\n totalCount,\n count: finalEdges.length,\n hasNextPage: isForward ? hasMore : !!cursor,\n hasPreviousPage: isForward ? !!cursor : hasMore,\n startCursor,\n endCursor,\n },\n edges: finalEdges,\n };\n}\n\nexport const zodPaginationPageInfo = z.object({\n totalCount: z.number(),\n count: z.number(),\n hasNextPage: z.boolean(),\n hasPreviousPage: z.boolean(),\n startCursor: z.number().nullable(),\n endCursor: z.number().nullable(),\n});\n\nexport const zodPaginationQuery = z.object({\n cursor: z.string().optional(),\n first: z.string().optional(),\n last: z.string().optional(),\n});\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"captcha.middleware.js","names":[],"sources":["../../../../src/api/middlewares/captcha.middleware.ts"],"sourcesContent":["import type { Context, Next } from \"hono\";\n\nimport { HTTPException } from \"hono/http-exception\";\n\nimport type { VitNodeApiConfig } from \"../../vitnode.config\";\n\nconst getResFromReCaptcha = async ({\n token,\n userIp,\n captchaConfig,\n}: {\n captchaConfig: NonNullable<Pick<VitNodeApiConfig, \"captcha\">[\"captcha\"]>;\n token: string;\n userIp: string;\n}): Promise<{ \"error-codes\"?: string[]; score: number; success: boolean }> => {\n if (captchaConfig.type === \"cloudflare_turnstile\") {\n const res = await fetch(\n \"https://challenges.cloudflare.com/turnstile/v0/siteverify\",\n {\n method: \"POST\",\n body: JSON.stringify({\n secret: captchaConfig.secretKey,\n response: token,\n remoteip: userIp,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n },\n );\n\n const data: {\n \"error-codes\"?: string[];\n success: boolean;\n } = await res.json();\n\n return {\n success: data.success,\n score: data.success ? 1 : 0,\n \"error-codes\": data[\"error-codes\"],\n };\n }\n if (captchaConfig.type === \"recaptcha_v3\") {\n const res = await fetch(\n `https://www.google.com/recaptcha/api/siteverify?secret=${captchaConfig.secretKey}&response=${token}&remoteip=${userIp}`,\n {\n method: \"POST\",\n },\n );\n\n const data: {\n \"error-codes\"?: string[];\n score: number;\n success: boolean;\n } = await res.json();\n\n return {\n success: data.success,\n score: data.score ?? 0,\n \"error-codes\": data[\"error-codes\"],\n };\n }\n\n return {\n success: false,\n score: 0,\n };\n};\n\nexport const captchaMiddleware = () => {\n return async (c: Context, next: Next) => {\n const token = c.req.header(\"x-vitnode-captcha-token\");\n const captchaConfig = c.get(\"core\").captcha;\n if (!captchaConfig) {\n await next();\n\n return;\n }\n\n if (!token) {\n throw new HTTPException(400, {\n message: \"Captcha token is required\",\n });\n }\n\n const res = await getResFromReCaptcha({\n token,\n userIp: c.get(\"ipAddress\"),\n captchaConfig,\n });\n\n if (!res.success || res.score < 0.5) {\n throw new HTTPException(400, {\n message: \"Captcha validation failed\",\n });\n }\n\n await next();\n };\n};\n"],"mappings":"oDAMA,MAAM,EAAsB,MAAO,CACjC,QACA,SACA,mBAK4E,CAC5E,GAAI,EAAc,OAAS,uBAAwB,CAgBjD,IAAM,EAGF,MAAM,MAlBQ,MAChB,4DACA,CACE,OAAQ,OACR,KAAM,KAAK,UAAU,CACnB,OAAQ,EAAc,UACtB,SAAU,EACV,SAAU,CACZ,CAAC,EACD,QAAS,CACP,eAAgB,kBAClB,CACF,CACF,EAAA,CAKc,KAAK,EAEnB,MAAO,CACL,QAAS,EAAK,QACd,MAAO,KAAK,QACZ,cAAe,EAAK,cACtB,CACF,CACA,GAAI,EAAc,OAAS,eAAgB,CAQzC,IAAM,EAIF,MAAM,MAXQ,MAChB,0DAA0D,EAAc,UAAU,YAAY,EAAM,YAAY,IAChH,CACE,OAAQ,MACV,CACF,EAAA,CAMc,KAAK,EAEnB,MAAO,CACL,QAAS,EAAK,QACd,MAAO,EAAK,OAAS,EACrB,cAAe,EAAK,cACtB,CACF,CAEA,MAAO,CACL,QAAS,GACT,MAAO,CACT,CACF,EAEa,MACJ,MAAO,EAAY,IAAe,CACvC,IAAM,EAAQ,EAAE,IAAI,OAAO,yBAAyB,EAC9C,EAAgB,EAAE,IAAI,MAAM,CAAC,CAAC,QACpC,GAAI,CAAC,EAAe,CAClB,MAAM,EAAK,EAEX,MACF,CAEA,GAAI,CAAC,EACH,MAAM,IAAI,EAAc,IAAK,CAC3B,QAAS,2BACX,CAAC,EAGH,IAAM,EAAM,MAAM,EAAoB,CACpC,QACA,OAAQ,EAAE,IAAI,WAAW,EACzB,eACF,CAAC,EAED,GAAI,CAAC,EAAI,SAAW,EAAI,MAAQ,GAC9B,MAAM,IAAI,EAAc,IAAK,CAC3B,QAAS,2BACX,CAAC,EAGH,MAAM,EAAK,CACb"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cron-auth.middleware.js","names":[],"sources":["../../../../src/api/middlewares/cron-auth.middleware.ts"],"sourcesContent":["import type { Context, Next } from \"hono\";\n\nimport { HTTPException } from \"hono/http-exception\";\n\nexport const cronAuthMiddleware = () => {\n return async (c: Context, next: Next) => {\n const cronSecret = c.get(\"core\").cronSecret;\n if (!cronSecret) {\n throw new HTTPException(403, { message: \"Cron access not configured\" });\n }\n\n const authHeader = c.req.header(\"authorization\");\n const providedSecret = authHeader?.replace(\"Bearer \", \"\");\n\n if (providedSecret !== cronSecret) {\n throw new HTTPException(403, { message: \"Invalid cron authorization\" });\n }\n\n await next();\n };\n};\n"],"mappings":"oDAIA,MAAa,MACJ,MAAO,EAAY,IAAe,CACvC,IAAM,EAAa,EAAE,IAAI,MAAM,CAAC,CAAC,WACjC,GAAI,CAAC,EACH,MAAM,IAAI,EAAc,IAAK,CAAE,QAAS,4BAA6B,CAAC,EAMxE,GAHmB,EAAE,IAAI,OAAO,eACA,CAAC,EAAE,QAAQ,UAAW,EAAE,IAEjC,EACrB,MAAM,IAAI,EAAc,IAAK,CAAE,QAAS,4BAA6B,CAAC,EAGxE,MAAM,EAAK,CACb"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"global.middleware.js","names":[],"sources":["../../../../src/api/middlewares/global.middleware.ts"],"sourcesContent":["import type { Context, Env, Next } from \"hono\";\nimport type { Redis } from \"ioredis\";\n\nimport { HTTPException } from \"hono/http-exception\";\n\nimport type { VitNodeApiConfig, VitNodeConfig } from \"@/vitnode.config\";\nimport type { VitNodeRealtime } from \"@/ws/registry\";\n\nimport { CacheModel } from \"@/api/lib/cache\";\nimport { EmailModel } from \"@/api/models/email\";\nimport { QueueModel } from \"@/api/models/queue\";\nimport { SessionModel } from \"@/api/models/session\";\nimport { SessionAdminModel } from \"@/api/models/session-admin\";\nimport { StorageModel } from \"@/api/models/storage\";\nimport { CONFIG } from \"@/lib/config\";\nimport { realtime } from \"@/ws/registry\";\n\nimport type { BuildCronReturn } from \"../lib/cron\";\nimport type { PermissionStaffCatalogEntry } from \"../lib/permission-staff\";\nimport type { BuildQueueTaskReturn } from \"../lib/queue\";\nimport type { WebSocketConfig } from \"../lib/websocket\";\nimport type { SSOApiPlugin } from \"../models/sso\";\n\nimport {\n loggerMiddleware,\n type LoggerMiddlewareType,\n} from \"../lib/logger-middleware\";\nimport { normalizePermissionStaffModules } from \"../lib/permission-staff\";\n\ndeclare module \"hono\" {\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n interface ContextVariableMap extends EnvVariablesVitNode {}\n}\n\nexport interface EnvVitNode extends Env {\n Variables: EnvVariablesVitNode;\n}\n\nexport interface EnvVariablesVitNode {\n admin: null | {\n user: {\n avatarColor: string;\n birthday: Date | null;\n createdAt: Date;\n email: string;\n emailVerified: boolean;\n id: number;\n name: string;\n nameCode: string;\n newsletter: boolean;\n roleId: number;\n };\n };\n cache: CacheModel;\n core: {\n authorization: {\n adminCookieExpires: number;\n adminCookieName: string;\n cookie_expires: number;\n cookieName: string;\n cookieSecure: boolean;\n deviceCookieExpires: number;\n deviceCookieName: string;\n ssoAdapters: SSOApiPlugin[];\n };\n captcha?: Pick<VitNodeApiConfig, \"captcha\">[\"captcha\"];\n cron: (BuildCronReturn & { module: string; pluginId: string })[];\n cronSecret?: string;\n email?: VitNodeApiConfig[\"email\"];\n // Whether a cron adapter is configured (`buildApiConfig({ cron })`), i.e. an\n // in-process scheduler is running the registered jobs automatically. Without\n // it, jobs only run when the cron endpoint is triggered externally.\n hasCronAdapter: boolean;\n metadata: {\n shortTitle?: string;\n title: string;\n };\n pathToMessages: (path: string) => Promise<{ default: object }>;\n permissionStaff: PermissionStaffCatalogEntry[];\n plugins: { id: string }[];\n queue: (BuildQueueTaskReturn & { module: string; pluginId: string })[];\n storage?: VitNodeApiConfig[\"storage\"];\n webSockets: WebSocketConfig[];\n };\n db: Pick<VitNodeApiConfig, \"dbProvider\">[\"dbProvider\"];\n email: EmailModel;\n ipAddress: string;\n log: LoggerMiddlewareType;\n plugin: {\n id: string;\n };\n queue: QueueModel;\n realtime: VitNodeRealtime;\n storage: StorageModel;\n user: null | {\n avatarColor: string;\n birthday: Date | null;\n createdAt: Date;\n email: string;\n emailVerified: boolean;\n id: number;\n name: string;\n nameCode: string;\n newsletter: boolean;\n roleId: number;\n };\n}\n\nexport const globalMiddleware = ({\n authorization,\n metadata,\n email,\n dbProvider,\n captcha,\n cron,\n plugins,\n pathToMessages,\n storage,\n cacheClient,\n}: Pick<\n VitNodeApiConfig,\n | \"authorization\"\n | \"captcha\"\n | \"cron\"\n | \"dbProvider\"\n | \"email\"\n | \"pathToMessages\"\n | \"plugins\"\n | \"storage\"\n> &\n Pick<VitNodeConfig, \"metadata\"> & { cacheClient: null | Redis }) => {\n const pluginsMetadata = plugins.map(plugin => ({\n id: plugin.pluginId,\n }));\n\n const cronMetadata = plugins.flatMap(plugin =>\n (plugin.cronJobs ?? []).map(cronJob => ({\n pluginId: plugin.pluginId,\n module: cronJob.module,\n name: cronJob.name,\n schedule: cronJob.schedule,\n handler: cronJob.handler,\n description: cronJob.description,\n })),\n );\n\n const queueMetadata = plugins.flatMap(plugin =>\n (plugin.queueTasks ?? []).map(task => ({\n pluginId: plugin.pluginId,\n module: task.module,\n name: task.name,\n handler: task.handler,\n description: task.description,\n maxAttempts: task.maxAttempts,\n })),\n );\n\n const webSocketsMetadata: WebSocketConfig[] = plugins.flatMap(plugin =>\n (plugin.webSockets ?? []).map(webSocket => ({\n ...webSocket,\n pluginId: plugin.pluginId,\n })),\n );\n\n const permissionStaffMetadata: PermissionStaffCatalogEntry[] = plugins.map(\n plugin => ({\n pluginId: plugin.pluginId,\n admin: normalizePermissionStaffModules(plugin.permissionStaff?.admin),\n moderator: normalizePermissionStaffModules(\n plugin.permissionStaff?.moderator,\n ),\n }),\n );\n\n const ipHeaderKeys = [\n \"x-forwarded-for\",\n \"x-real-ip\",\n \"cf-connecting-ip\",\n \"x-client-ip\",\n \"x-forwarded\",\n \"x-cluster-client-ip\",\n \"forwarded-for\",\n \"forwarded\",\n \"via\",\n \"remote-addr\",\n \"client-ip\",\n \"ip\",\n \"x-ip\",\n \"true-client-ip\",\n \"fastly-client-ip\",\n \"x-fastly-client-ip\",\n ];\n\n return async (c: Context, next: Next) => {\n let ipAddress: string | undefined;\n\n // Optimize: Try both header methods in a single loop\n for (const key of ipHeaderKeys) {\n ipAddress = c.req.header(key);\n if (ipAddress) break;\n\n ipAddress = c.req.raw.headers.get(key) ?? undefined;\n if (ipAddress) break;\n }\n\n // Fallback to localhost if nothing found\n c.set(\"ipAddress\", ipAddress ?? \"127.0.0.1\");\n c.set(\"db\", dbProvider);\n c.set(\"cache\", new CacheModel(cacheClient, c));\n c.set(\"email\", new EmailModel(c));\n c.set(\"queue\", new QueueModel(c));\n c.set(\"storage\", new StorageModel(c));\n c.set(\"realtime\", realtime);\n\n c.set(\"core\", {\n pathToMessages,\n metadata,\n email,\n storage,\n authorization: {\n cookieName: authorization?.cookieName ?? \"vitnode_auth\",\n cookie_expires:\n authorization?.cookieExpires ?? 1000 * 60 * 60 * 24 * 90, // 90 days\n ssoAdapters: authorization?.ssoAdapters ?? [],\n deviceCookieName: authorization?.deviceCookieName ?? \"vitnode_device\",\n deviceCookieExpires:\n authorization?.deviceCookieExpires ?? 1000 * 60 * 60 * 24 * 365, // 1 year,\n adminCookieName: authorization?.adminCookieName ?? \"vitnode_auth_admin\",\n adminCookieExpires:\n authorization?.adminCookieExpires ?? 1000 * 60 * 60 * 24 * 1, // 1 day\n cookieSecure: authorization?.cookieSecure ?? true,\n },\n captcha,\n cronSecret: CONFIG.cronJobSecret,\n hasCronAdapter: !!cron,\n plugins: pluginsMetadata,\n cron: cronMetadata,\n queue: queueMetadata,\n webSockets: webSocketsMetadata,\n permissionStaff: permissionStaffMetadata,\n });\n\n const user = await new SessionModel(c).getUser();\n c.set(\"user\", user);\n c.set(\"admin\", null);\n c.set(\"log\", loggerMiddleware(c));\n\n await next();\n };\n};\n\nexport const globalAdminMiddleware = () => {\n return async (c: Context, next: Next) => {\n const user = await new SessionAdminModel(c).getUser();\n if (!user) throw new HTTPException(403);\n c.set(\"admin\", {\n user,\n });\n\n await next();\n };\n};\n"],"mappings":"ilBA4GA,MAAa,GAAoB,CAC/B,gBACA,WACA,QACA,aACA,UACA,OACA,UACA,iBACA,UACA,iBAYoE,CACpE,IAAM,EAAkB,EAAQ,IAAI,IAAW,CAC7C,GAAI,EAAO,QACb,EAAE,EAEI,EAAe,EAAQ,QAAQ,IAClC,EAAO,UAAY,CAAC,EAAA,CAAG,IAAI,IAAY,CACtC,SAAU,EAAO,SACjB,OAAQ,EAAQ,OAChB,KAAM,EAAQ,KACd,SAAU,EAAQ,SAClB,QAAS,EAAQ,QACjB,YAAa,EAAQ,WACvB,EAAE,CACJ,EAEM,EAAgB,EAAQ,QAAQ,IACnC,EAAO,YAAc,CAAC,EAAA,CAAG,IAAI,IAAS,CACrC,SAAU,EAAO,SACjB,OAAQ,EAAK,OACb,KAAM,EAAK,KACX,QAAS,EAAK,QACd,YAAa,EAAK,YAClB,YAAa,EAAK,WACpB,EAAE,CACJ,EAEM,EAAwC,EAAQ,QAAQ,IAC3D,EAAO,YAAc,CAAC,EAAA,CAAG,IAAI,IAAc,CAC1C,GAAG,EACH,SAAU,EAAO,QACnB,EAAE,CACJ,EAEM,EAAyD,EAAQ,IACrE,IAAW,CACT,SAAU,EAAO,SACjB,MAAO,EAAgC,EAAO,iBAAiB,KAAK,EACpE,UAAW,EACT,EAAO,iBAAiB,SAC1B,CACF,EACF,EAEM,EAAe,CACnB,kBACA,YACA,mBACA,cACA,cACA,sBACA,gBACA,YACA,MACA,cACA,YACA,KACA,OACA,iBACA,mBACA,oBACF,EAEA,OAAO,MAAO,EAAY,IAAe,CACvC,IAAI,EAGJ,IAAK,IAAM,KAAO,EAKhB,GAJA,EAAY,EAAE,IAAI,OAAO,CAAG,EACxB,IAEJ,EAAY,EAAE,IAAI,IAAI,QAAQ,IAAI,CAAG,GAAK,IAAA,GACtC,GAAW,MAIjB,EAAE,IAAI,YAAa,GAAa,WAAW,EAC3C,EAAE,IAAI,KAAM,CAAU,EACtB,EAAE,IAAI,QAAS,IAAI,EAAW,EAAa,CAAC,CAAC,EAC7C,EAAE,IAAI,QAAS,IAAI,EAAW,CAAC,CAAC,EAChC,EAAE,IAAI,QAAS,IAAI,EAAW,CAAC,CAAC,EAChC,EAAE,IAAI,UAAW,IAAI,EAAa,CAAC,CAAC,EACpC,EAAE,IAAI,WAAY,CAAQ,EAE1B,EAAE,IAAI,OAAQ,CACZ,iBACA,WACA,QACA,UACA,cAAe,CACb,WAAY,GAAe,YAAc,eACzC,eACE,GAAe,eAAiB,IAAO,GAAK,GAAK,GAAK,GACxD,YAAa,GAAe,aAAe,CAAC,EAC5C,iBAAkB,GAAe,kBAAoB,iBACrD,oBACE,GAAe,qBAAuB,IAAO,GAAK,GAAK,GAAK,IAC9D,gBAAiB,GAAe,iBAAmB,qBACnD,mBACE,GAAe,oBAAsB,IAAO,GAAK,GAAK,GAAK,EAC7D,aAAc,GAAe,cAAgB,EAC/C,EACA,UACA,WAAY,EAAO,cACnB,eAAgB,CAAC,CAAC,EAClB,QAAS,EACT,KAAM,EACN,MAAO,EACP,WAAY,EACZ,gBAAiB,CACnB,CAAC,EAED,IAAM,EAAO,MAAM,IAAI,EAAa,CAAC,CAAC,CAAC,QAAQ,EAC/C,EAAE,IAAI,OAAQ,CAAI,EAClB,EAAE,IAAI,QAAS,IAAI,EACnB,EAAE,IAAI,MAAO,EAAiB,CAAC,CAAC,EAEhC,MAAM,EAAK,CACb,CACF,EAEa,MACJ,MAAO,EAAY,IAAe,CACvC,IAAM,EAAO,MAAM,IAAI,EAAkB,CAAC,CAAC,CAAC,QAAQ,EACpD,GAAI,CAAC,EAAM,MAAM,IAAI,EAAc,GAAG,EACtC,EAAE,IAAI,QAAS,CACb,MACF,CAAC,EAED,MAAM,EAAK,CACb"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.middleware.js","names":[],"sources":["../../../../src/api/middlewares/plugin.middleware.ts"],"sourcesContent":["import type { Context, Next } from \"hono\";\n\n// Kept in its own light module (no heavy imports) so `buildRoute` can use it\n// without pulling the full global middleware - and its models (StorageModel →\n// sharp, etc.) - into bundles that transitively import route definitions.\nexport const pluginMiddleware = (pluginId: string) => {\n return async (c: Context, next: Next) => {\n c.set(\"plugin\", {\n id: pluginId,\n });\n await next();\n };\n};\n"],"mappings":"AAKA,MAAa,EAAoB,GACxB,MAAO,EAAY,IAAe,CACvC,EAAE,IAAI,SAAU,CACd,GAAI,CACN,CAAC,EACD,MAAM,EAAK,CACb"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limiter.middleware.js","names":[],"sources":["../../../../src/api/middlewares/rate-limiter.middleware.ts"],"sourcesContent":["import type { Context, Next } from \"hono\";\nimport type { Redis } from \"ioredis\";\n\nimport {\n type IRateLimiterOptions,\n type RateLimiterAbstract,\n RateLimiterMemory,\n RateLimiterRedis,\n} from \"rate-limiter-flexible\";\n\nimport { CONFIG } from \"../../lib/config\";\n\nconst createRateLimiter = ({\n keyPrefix,\n storeClient,\n ...options\n}: Omit<IRateLimiterOptions, \"keyPrefix\"> & {\n keyPrefix: string;\n storeClient?: null | Redis;\n}): RateLimiterAbstract => {\n // With a Redis client the counters are shared across all instances, so rate\n // limits hold up behind a load balancer. `insuranceLimiter` falls back to\n // in-memory limiting if Redis becomes unavailable, so requests keep flowing.\n if (storeClient) {\n return new RateLimiterRedis({\n storeClient,\n keyPrefix,\n ...options,\n insuranceLimiter: new RateLimiterMemory({ keyPrefix, ...options }),\n });\n }\n\n return new RateLimiterMemory({\n keyPrefix,\n ...options,\n });\n};\n\nexport const rateLimiterMiddleware = (\n options?: Omit<IRateLimiterOptions, \"keyPrefix\">,\n storeClient?: null | Redis,\n) => {\n if (CONFIG.node_development) {\n // In development, we disable the rate limiter for easier testing\n return async (_c: Context, next: Next) => {\n await next();\n };\n }\n\n const rateLimiter = createRateLimiter({\n ...options,\n keyPrefix: \"vitnode-api-rate-limiter\",\n duration: options?.duration ?? 60,\n points: options?.points ?? 80,\n storeClient,\n });\n\n return async (c: Context, next: Next) => {\n const key = c.get(\"ipAddress\");\n\n try {\n await rateLimiter.consume(key);\n } catch {\n return c.text(\"Too Many Requests\", 429);\n }\n\n await next();\n };\n};\n"],"mappings":"6HAYA,MAAM,GAAqB,CACzB,YACA,cACA,GAAG,KAQC,EACK,IAAI,EAAiB,CAC1B,cACA,YACA,GAAG,EACH,iBAAkB,IAAI,EAAkB,CAAE,YAAW,GAAG,CAAQ,CAAC,CACnE,CAAC,EAGI,IAAI,EAAkB,CAC3B,YACA,GAAG,CACL,CAAC,EAGU,GACX,EACA,IACG,CACH,GAAI,EAAO,iBAET,OAAO,MAAO,EAAa,IAAe,CACxC,MAAM,EAAK,CACb,EAGF,IAAM,EAAc,EAAkB,CACpC,GAAG,EACH,UAAW,2BACX,SAAU,GAAS,UAAY,GAC/B,OAAQ,GAAS,QAAU,GAC3B,aACF,CAAC,EAED,OAAO,MAAO,EAAY,IAAe,CACvC,IAAM,EAAM,EAAE,IAAI,WAAW,EAE7B,GAAI,CACF,MAAM,EAAY,QAAQ,CAAG,CAC/B,MAAQ,CACN,OAAO,EAAE,KAAK,oBAAqB,GAAG,CACxC,CAEA,MAAM,EAAK,CACb,CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"device.js","names":[],"sources":["../../../../src/api/models/device.ts"],"sourcesContent":["import type { Context } from \"hono\";\n\nimport { eq } from \"drizzle-orm\";\nimport { getCookie, setCookie } from \"hono/cookie\";\nimport { randomBytes } from \"node:crypto\";\n\nimport { core_sessions_known_devices } from \"@/database/sessions\";\nimport { CONFIG } from \"@/lib/config\";\n\nexport class DeviceModel {\n constructor(c: Context) {\n this.c = c;\n }\n protected readonly c: Context;\n\n private async createDevice() {\n const publicId = randomBytes(16).toString(\"hex\");\n\n const [device] = await this.c\n .get(\"db\")\n .insert(core_sessions_known_devices)\n .values({\n publicId,\n ipAddress: this.c.get(\"ipAddress\"),\n userAgent: this.getUserAgent(),\n })\n .returning({ id: core_sessions_known_devices.id });\n\n this.setCookieDevice(publicId);\n\n return { id: device.id, publicId };\n }\n\n private getUserAgent() {\n return this.c.req.header(\"User-Agent\") ?? \"node\";\n }\n\n private setCookieDevice(publicDeviceId: string) {\n setCookie(\n this.c,\n this.c.get(\"core\").authorization.deviceCookieName,\n publicDeviceId,\n {\n httpOnly: true,\n secure: this.c.get(\"core\").authorization.cookieSecure,\n path: \"/\",\n domain: CONFIG.web.hostname,\n expires: new Date(\n Date.now() + this.c.get(\"core\").authorization.deviceCookieExpires,\n ),\n },\n );\n }\n\n async getDeviceId() {\n const deviceIdFromCookie = getCookie(\n this.c,\n this.c.get(\"core\").authorization.deviceCookieName,\n );\n\n try {\n if (deviceIdFromCookie) {\n const [device] = await this.c\n .get(\"db\")\n .select({\n id: core_sessions_known_devices.id,\n })\n .from(core_sessions_known_devices)\n .where(eq(core_sessions_known_devices.publicId, deviceIdFromCookie));\n\n if (!device) {\n return await this.createDevice();\n }\n\n await this.c\n .get(\"db\")\n .update(core_sessions_known_devices)\n .set({\n ipAddress: this.c.get(\"ipAddress\"),\n userAgent: this.getUserAgent(),\n })\n .where(eq(core_sessions_known_devices.publicId, deviceIdFromCookie));\n\n return {\n id: device.id,\n publicId: deviceIdFromCookie,\n };\n }\n } catch {\n /* empty */\n }\n\n return await this.createDevice();\n }\n}\n"],"mappings":"wPASA,IAAa,EAAb,KAAyB,CACvB,YAAY,EAAY,CACtB,KAAK,EAAI,CACX,CACA,EAEA,MAAc,cAAe,CAC3B,IAAM,EAAW,EAAY,EAAE,CAAC,CAAC,SAAS,KAAK,EAEzC,CAAC,GAAU,MAAM,KAAK,EACzB,IAAI,IAAI,CAAC,CACT,OAAO,CAA2B,CAAC,CACnC,OAAO,CACN,WACA,UAAW,KAAK,EAAE,IAAI,WAAW,EACjC,UAAW,KAAK,aAAa,CAC/B,CAAC,CAAC,CACD,UAAU,CAAE,GAAI,EAA4B,EAAG,CAAC,EAInD,OAFA,KAAK,gBAAgB,CAAQ,EAEtB,CAAE,GAAI,EAAO,GAAI,UAAS,CACnC,CAEA,cAAuB,CACrB,OAAO,KAAK,EAAE,IAAI,OAAO,YAAY,GAAK,MAC5C,CAEA,gBAAwB,EAAwB,CAC9C,EACE,KAAK,EACL,KAAK,EAAE,IAAI,MAAM,CAAC,CAAC,cAAc,iBACjC,EACA,CACE,SAAU,GACV,OAAQ,KAAK,EAAE,IAAI,MAAM,CAAC,CAAC,cAAc,aACzC,KAAM,IACN,OAAQ,EAAO,IAAI,SACnB,QAAS,IAAI,KACX,KAAK,IAAI,EAAI,KAAK,EAAE,IAAI,MAAM,CAAC,CAAC,cAAc,mBAChD,CACF,CACF,CACF,CAEA,MAAM,aAAc,CAClB,IAAM,EAAqB,EACzB,KAAK,EACL,KAAK,EAAE,IAAI,MAAM,CAAC,CAAC,cAAc,gBACnC,EAEA,GAAI,CACF,GAAI,EAAoB,CACtB,GAAM,CAAC,GAAU,MAAM,KAAK,EACzB,IAAI,IAAI,CAAC,CACT,OAAO,CACN,GAAI,EAA4B,EAClC,CAAC,CAAC,CACD,KAAK,CAA2B,CAAC,CACjC,MAAM,EAAG,EAA4B,SAAU,CAAkB,CAAC,EAerE,OAbK,GAIL,MAAM,KAAK,EACR,IAAI,IAAI,CAAC,CACT,OAAO,CAA2B,CAAC,CACnC,IAAI,CACH,UAAW,KAAK,EAAE,IAAI,WAAW,EACjC,UAAW,KAAK,aAAa,CAC/B,CAAC,CAAC,CACD,MAAM,EAAG,EAA4B,SAAU,CAAkB,CAAC,EAE9D,CACL,GAAI,EAAO,GACX,SAAU,CACZ,GAfS,MAAM,KAAK,aAAa,CAgBnC,CACF,MAAQ,CAER,CAEA,OAAO,MAAM,KAAK,aAAa,CACjC,CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"email.js","names":[],"sources":["../../../../src/api/models/email.ts"],"sourcesContent":["import type { Context, ContextVariableMap } from \"hono\";\nimport type React from \"react\";\n\nimport { HTTPException } from \"hono/http-exception\";\nimport { render } from \"react-email\";\n\nimport type { DefaultTemplateEmailProps } from \"../../emails/default-template\";\n\nimport { CONFIG } from \"../../lib/config\";\n\ninterface EmailModelSendArgsWithUser {\n locale?: never;\n to?: never;\n user: {\n email: string;\n id: number;\n language: string;\n name?: string;\n nameCode?: string;\n };\n}\n\ninterface EmailModelSendArgsWithEmail {\n locale: string;\n to: string;\n user?: never;\n}\n\nexport interface EmailApiPlugin {\n sendEmail: (args: {\n html: string;\n metadata: ContextVariableMap[\"core\"][\"metadata\"];\n replyTo?: string;\n subject: string;\n text: string;\n to: string;\n }) => Promise<void>;\n}\n\nexport type EmailModelSendArgs = {\n content: (\n props: Omit<DefaultTemplateEmailProps, \"children\"> &\n Pick<EmailModelSendArgs, \"user\">,\n ) => React.ReactNode;\n html?: string;\n locale?: string;\n replyTo?: string;\n subject:\n ((props: Pick<DefaultTemplateEmailProps, \"i18n\">) => string) | string;\n // eslint-disable-next-line perfectionist/sort-intersection-types\n} & (EmailModelSendArgsWithEmail | EmailModelSendArgsWithUser);\n\nexport interface BuiltEmail {\n html: string;\n replyTo?: string;\n subject: string;\n text: string;\n to: string;\n}\n\nexport class EmailModel {\n constructor(c: Context) {\n this.c = c;\n }\n\n protected readonly c: Context;\n\n private requireProvider() {\n const provider = this.c.get(\"core\").email?.adapter;\n if (!provider) {\n throw new HTTPException(500, {\n message: \"Email provider not found\",\n });\n }\n\n return provider;\n }\n\n async build({\n html,\n replyTo,\n subject,\n to,\n user,\n content,\n locale: localeFromArgs,\n }: EmailModelSendArgs): Promise<BuiltEmail> {\n const core = this.c.get(\"core\");\n const locale = localeFromArgs ?? user?.language ?? \"en\";\n const pluginIds: string[] = [\n \"@vitnode/core\",\n ...core.plugins.map(plugin => plugin.id),\n ];\n\n const messagesPromises = pluginIds.map(async pluginId => {\n try {\n const path = `${pluginId}/${locale}.json`;\n const messages = await core.pathToMessages(path);\n\n return messages.default;\n } catch {\n return {};\n }\n });\n\n const allMessages = await Promise.all(messagesPromises);\n\n // Optimize: Use Object.assign instead of reduce with spread operator\n // to avoid creating intermediate objects on each iteration\n const messages = Object.assign({}, ...allMessages) as Record<\n string,\n string\n >;\n\n const htmlContent =\n html ??\n content({\n i18n: {\n locale,\n messages,\n },\n templateProps: {\n metadata: {\n ...core.metadata,\n url: CONFIG.web.href,\n },\n logo: core.email?.logo,\n },\n user,\n });\n\n const emailTo = user?.email ?? to;\n if (!emailTo) {\n throw new HTTPException(400, {\n message: \"Email address is required\",\n });\n }\n\n return {\n to: emailTo,\n subject:\n typeof subject === \"function\"\n ? subject({ i18n: { locale, messages } })\n : subject,\n html: await render(htmlContent),\n text: await render(htmlContent, { plainText: true }),\n replyTo,\n };\n }\n\n async deliver(email: BuiltEmail): Promise<void> {\n const provider = this.requireProvider();\n\n await provider.sendEmail({\n html: email.html,\n to: email.to,\n subject: email.subject,\n replyTo: email.replyTo,\n metadata: this.c.get(\"core\").metadata,\n text: email.text,\n });\n }\n\n async send(args: EmailModelSendArgs): Promise<void> {\n this.requireProvider();\n const email = await this.build(args);\n\n await this.c.get(\"queue\").dispatch({\n name: \"send-email\",\n payload: {\n to: email.to,\n subject: email.subject,\n html: email.html,\n text: email.text,\n ...(email.replyTo ? { replyTo: email.replyTo } : {}),\n },\n });\n }\n}\n"],"mappings":"sIA4DA,IAAa,EAAb,KAAwB,CACtB,YAAY,EAAY,CACtB,KAAK,EAAI,CACX,CAEA,EAEA,iBAA0B,CACxB,IAAM,EAAW,KAAK,EAAE,IAAI,MAAM,CAAC,CAAC,OAAO,QAC3C,GAAI,CAAC,EACH,MAAM,IAAI,EAAc,IAAK,CAC3B,QAAS,0BACX,CAAC,EAGH,OAAO,CACT,CAEA,MAAM,MAAM,CACV,OACA,UACA,UACA,KACA,OACA,UACA,OAAQ,GACkC,CAC1C,IAAM,EAAO,KAAK,EAAE,IAAI,MAAM,EACxB,EAAS,GAAkB,GAAM,UAAY,KAM7C,EAAmB,CAJvB,gBACA,GAAG,EAAK,QAAQ,IAAI,GAAU,EAAO,EAAE,CAGR,CAAC,CAAC,IAAI,KAAM,IAAY,CACvD,GAAI,CACF,IAAM,EAAO,GAAG,EAAS,GAAG,EAAO,OAGnC,OAAO,MAFgB,EAAK,eAAe,CAAI,EAAA,CAE/B,OAClB,MAAQ,CACN,MAAO,CAAC,CACV,CACF,CAAC,EAEK,EAAc,MAAM,QAAQ,IAAI,CAAgB,EAIhD,EAAW,OAAO,OAAO,CAAC,EAAG,GAAG,CAAW,EAK3C,EACJ,GACA,EAAQ,CACN,KAAM,CACJ,SACA,UACF,EACA,cAAe,CACb,SAAU,CACR,GAAG,EAAK,SACR,IAAK,EAAO,IAAI,IAClB,EACA,KAAM,EAAK,OAAO,IACpB,EACA,MACF,CAAC,EAEG,EAAU,GAAM,OAAS,EAC/B,GAAI,CAAC,EACH,MAAM,IAAI,EAAc,IAAK,CAC3B,QAAS,2BACX,CAAC,EAGH,MAAO,CACL,GAAI,EACJ,QACE,OAAO,GAAY,WACf,EAAQ,CAAE,KAAM,CAAE,SAAQ,UAAS,CAAE,CAAC,EACtC,EACN,KAAM,MAAM,EAAO,CAAW,EAC9B,KAAM,MAAM,EAAO,EAAa,CAAE,UAAW,EAAK,CAAC,EACnD,SACF,CACF,CAEA,MAAM,QAAQ,EAAkC,CAG9C,MAFiB,KAAK,gBAET,CAAC,CAAC,UAAU,CACvB,KAAM,EAAM,KACZ,GAAI,EAAM,GACV,QAAS,EAAM,QACf,QAAS,EAAM,QACf,SAAU,KAAK,EAAE,IAAI,MAAM,CAAC,CAAC,SAC7B,KAAM,EAAM,IACd,CAAC,CACH,CAEA,MAAM,KAAK,EAAyC,CAClD,KAAK,gBAAgB,EACrB,IAAM,EAAQ,MAAM,KAAK,MAAM,CAAI,EAEnC,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,CAAC,SAAS,CACjC,KAAM,aACN,QAAS,CACP,GAAI,EAAM,GACV,QAAS,EAAM,QACf,KAAM,EAAM,KACZ,KAAM,EAAM,KACZ,GAAI,EAAM,QAAU,CAAE,QAAS,EAAM,OAAQ,EAAI,CAAC,CACpD,CACF,CAAC,CACH,CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"password.js","names":[],"sources":["../../../../src/api/models/password.ts"],"sourcesContent":["import crypto from \"node:crypto\";\n\nexport class PasswordModel {\n async encryptPassword(password: string): Promise<string> {\n return await new Promise((resolve, reject) => {\n const salt = crypto.randomBytes(8).toString(\"hex\");\n\n crypto.scrypt(password, salt, 64, (err, derivedKey) => {\n if (err) reject(err);\n\n resolve(`${salt}:${derivedKey.toString(\"hex\")}`);\n });\n });\n }\n\n async verifyPassword(password: string, hash: string): Promise<boolean> {\n return await new Promise((resolve, reject) => {\n const [salt, key] = hash.split(\":\");\n const keyBuffer = Buffer.from(key, \"hex\");\n\n crypto.scrypt(password, salt, 64, (err, derivedKey) => {\n if (err) reject(err);\n\n if (keyBuffer.length !== derivedKey.length) {\n crypto.timingSafeEqual(derivedKey, derivedKey);\n resolve(false);\n } else {\n const areEqual = crypto.timingSafeEqual(keyBuffer, derivedKey);\n resolve(areEqual);\n }\n });\n });\n }\n}\n\nexport class ForgotPasswordTokenModel {\n generateResetToken() {\n return crypto.randomBytes(32).toString(\"base64url\");\n }\n\n hashResetToken(token: string) {\n return crypto.createHash(\"sha256\").update(token).digest(\"hex\");\n }\n}\n"],"mappings":"2BAEA,IAAa,EAAb,KAA2B,CACzB,MAAM,gBAAgB,EAAmC,CACvD,OAAO,MAAM,IAAI,SAAS,EAAS,IAAW,CAC5C,IAAM,EAAO,EAAO,YAAY,CAAC,CAAC,CAAC,SAAS,KAAK,EAEjD,EAAO,OAAO,EAAU,EAAM,IAAK,EAAK,IAAe,CACjD,GAAK,EAAO,CAAG,EAEnB,EAAQ,GAAG,EAAK,GAAG,EAAW,SAAS,KAAK,GAAG,CACjD,CAAC,CACH,CAAC,CACH,CAEA,MAAM,eAAe,EAAkB,EAAgC,CACrE,OAAO,MAAM,IAAI,SAAS,EAAS,IAAW,CAC5C,GAAM,CAAC,EAAM,GAAO,EAAK,MAAM,GAAG,EAC5B,EAAY,OAAO,KAAK,EAAK,KAAK,EAExC,EAAO,OAAO,EAAU,EAAM,IAAK,EAAK,IAAe,CACjD,GAAK,EAAO,CAAG,EAEf,EAAU,SAAW,EAAW,OAKlC,EADiB,EAAO,gBAAgB,EAAW,CACpC,CAAC,GAJhB,EAAO,gBAAgB,EAAY,CAAU,EAC7C,EAAQ,EAAK,EAKjB,CAAC,CACH,CAAC,CACH,CACF,EAEa,EAAb,KAAsC,CACpC,oBAAqB,CACnB,OAAO,EAAO,YAAY,EAAE,CAAC,CAAC,SAAS,WAAW,CACpD,CAEA,eAAe,EAAe,CAC5B,OAAO,EAAO,WAAW,QAAQ,CAAC,CAAC,OAAO,CAAK,CAAC,CAAC,OAAO,KAAK,CAC/D,CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","names":[],"sources":["../../../../src/api/models/queue.ts"],"sourcesContent":["import type { Context } from \"hono\";\n\nimport { core_queue } from \"@/database/queue\";\n\nexport interface QueueDispatchArgs {\n availableAt?: Date;\n maxAttempts?: number;\n name: string;\n payload?: Record<string, unknown>;\n priority?: number;\n queue?: string;\n}\n\n/**\n * Enqueue background work into the database-backed task queue, exposed on the\n * request context as `c.get(\"queue\")`. Rows are drained by the `process-queue`\n * cron job. The task `name` must match a handler registered via\n * {@link buildQueueTask} in a module's `queueTasks`.\n */\nexport class QueueModel {\n constructor(c: Context) {\n this.c = c;\n }\n\n protected readonly c: Context;\n\n async dispatch({\n name,\n payload = {},\n queue = \"default\",\n priority = 0,\n maxAttempts,\n availableAt,\n }: QueueDispatchArgs): Promise<{ id: number }> {\n const pluginId = this.c.get(\"plugin\")?.id ?? \"@vitnode/core\";\n\n const registeredTask = this.c\n .get(\"core\")\n .queue.find(task => task.pluginId === pluginId && task.name === name);\n\n const [row] = await this.c\n .get(\"db\")\n .insert(core_queue)\n .values({\n pluginId,\n name,\n queue,\n payload,\n priority,\n maxAttempts: maxAttempts ?? registeredTask?.maxAttempts ?? 3,\n availableAt: availableAt ?? new Date(),\n })\n .returning({ id: core_queue.id });\n\n return row;\n }\n}\n"],"mappings":"qDAmBA,IAAa,EAAb,KAAwB,CACtB,YAAY,EAAY,CACtB,KAAK,EAAI,CACX,CAEA,EAEA,MAAM,SAAS,CACb,OACA,UAAU,CAAC,EACX,QAAQ,UACR,WAAW,EACX,cACA,eAC6C,CAC7C,IAAM,EAAW,KAAK,EAAE,IAAI,QAAQ,CAAC,EAAE,IAAM,gBAEvC,EAAiB,KAAK,EACzB,IAAI,MAAM,CAAC,CACX,MAAM,KAAK,GAAQ,EAAK,WAAa,GAAY,EAAK,OAAS,CAAI,EAEhE,CAAC,GAAO,MAAM,KAAK,EACtB,IAAI,IAAI,CAAC,CACT,OAAO,CAAU,CAAC,CAClB,OAAO,CACN,WACA,OACA,QACA,UACA,WACA,YAAa,GAAe,GAAgB,aAAe,EAC3D,YAAa,GAAe,IAAI,IAClC,CAAC,CAAC,CACD,UAAU,CAAE,GAAI,EAAW,EAAG,CAAC,EAElC,OAAO,CACT,CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-admin.js","names":[],"sources":["../../../../src/api/models/session-admin.ts"],"sourcesContent":["import type { Context } from \"hono\";\n\nimport { and, eq, gt, or } from \"drizzle-orm\"; // Removed 'or' as it's safer not to use it here\nimport { deleteCookie, getCookie, setCookie } from \"hono/cookie\";\nimport { HTTPException } from \"hono/http-exception\";\n\nimport { core_admin_permissions, core_admin_sessions } from \"@/database/admins\";\nimport { CONFIG } from \"@/lib/config\";\n\nimport { DeviceModel } from \"./device\";\nimport {\n adminSessionCacheKey,\n reviveSessionUser,\n sessionCacheTtl,\n type SessionUser,\n} from \"./session-cache\";\nimport { UserModel } from \"./user\";\n\nexport class SessionAdminModel {\n constructor(c: Context) {\n this.c = c;\n }\n protected readonly c: Context;\n\n private async hashToken(token: string): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(token);\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", data);\n const bytes = new Uint8Array(hashBuffer);\n\n // Optimize: Use direct iteration instead of Array.from + map\n let result = \"\";\n for (const byte of bytes) {\n result += byte.toString(16).padStart(2, \"0\");\n }\n\n return result;\n }\n\n async checkIfUserIsAdmin(userId: number) {\n const user = await new UserModel().getUserById({ id: userId, c: this.c });\n if (!user) return false;\n\n const [permission] = await this.c\n .get(\"db\")\n .select()\n .from(core_admin_permissions)\n .where(\n or(\n eq(core_admin_permissions.userId, user.id),\n eq(core_admin_permissions.roleId, user.roleId),\n ),\n )\n .limit(1);\n\n return !!permission;\n }\n\n async createSessionByUserId(userId: number) {\n const isAdmin = await this.checkIfUserIsAdmin(userId);\n if (!isAdmin) {\n throw new HTTPException(403, { message: \"Forbidden\" });\n }\n\n const randomBytes = new Uint8Array(64);\n crypto.getRandomValues(randomBytes);\n\n // Optimize: Use direct iteration instead of Array.from + map\n let token = \"\";\n for (const byte of randomBytes) {\n token += byte.toString(16).padStart(2, \"0\");\n }\n\n const hashedToken = await this.hashToken(token);\n const device = await new DeviceModel(this.c).getDeviceId();\n\n await this.c\n .get(\"db\")\n .insert(core_admin_sessions)\n .values({\n token: hashedToken,\n userId,\n expiresAt: new Date(\n Date.now() + this.c.get(\"core\").authorization.adminCookieExpires,\n ),\n deviceId: device.id,\n });\n\n setCookie(this.c, this.c.get(\"core\").authorization.adminCookieName, token, {\n httpOnly: true,\n secure: this.c.get(\"core\").authorization.cookieSecure,\n path: \"/\",\n expires: new Date(\n Date.now() + this.c.get(\"core\").authorization.adminCookieExpires,\n ),\n domain: CONFIG.web.hostname,\n });\n\n return { token };\n }\n\n async deleteSession() {\n const token = getCookie(\n this.c,\n this.c.get(\"core\").authorization.adminCookieName,\n );\n if (!token) return;\n\n const hashedToken = await this.hashToken(token);\n const device = await new DeviceModel(this.c).getDeviceId();\n\n await this.c\n .get(\"db\")\n .delete(core_admin_sessions)\n .where(eq(core_admin_sessions.token, hashedToken));\n\n // Drop the cached resolution so getUser stops returning this admin before\n // the TTL would naturally expire it.\n await this.c\n .get(\"cache\")\n .deleteSystem(adminSessionCacheKey(hashedToken, device.id));\n\n deleteCookie(this.c, this.c.get(\"core\").authorization.adminCookieName, {\n path: \"/\",\n domain: CONFIG.web.hostname,\n });\n }\n\n async getUser() {\n const { authorization } = this.c.get(\"core\");\n const token = getCookie(this.c, authorization.adminCookieName);\n if (!token) return null;\n\n const device = await new DeviceModel(this.c).getDeviceId();\n if (!device) return null;\n\n const hashedToken = await this.hashToken(token);\n const cache = this.c.get(\"cache\");\n const cacheKey = adminSessionCacheKey(hashedToken, device.id);\n\n // Fast path: skip the session + user lookups for a session resolved on a\n // recent request. Admin status is still re-checked live below so a revoked\n // admin loses access immediately, not when the cache expires.\n const cached = await cache.getSystem<SessionUser>(cacheKey);\n if (cached) {\n const user = reviveSessionUser(cached);\n if (!(await this.checkIfUserIsAdmin(user.id))) {\n await this.deleteSession();\n\n return null;\n }\n\n return user;\n }\n\n const [session] = await this.c\n .get(\"db\")\n .select({\n userId: core_admin_sessions.userId,\n expiresAt: core_admin_sessions.expiresAt,\n })\n .from(core_admin_sessions)\n .where(\n and(\n eq(core_admin_sessions.token, hashedToken),\n eq(core_admin_sessions.deviceId, device.id),\n gt(core_admin_sessions.expiresAt, new Date()),\n ),\n )\n .limit(1);\n\n if (!session) {\n deleteCookie(this.c, this.c.get(\"core\").authorization.adminCookieName, {\n path: \"/\",\n domain: CONFIG.web.hostname,\n });\n\n return null;\n }\n\n const user = await new UserModel().getUserById({\n id: session.userId,\n c: this.c,\n });\n\n if (!user) return null;\n const isStillAdmin = await this.checkIfUserIsAdmin(user.id);\n if (!isStillAdmin) {\n await this.deleteSession();\n\n return null;\n }\n\n // Cap the TTL to the session's remaining lifetime so an expired session is\n // never served from cache.\n const ttl = sessionCacheTtl(session.expiresAt);\n if (ttl > 0) await cache.setSystem(cacheKey, user, ttl);\n\n return user;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-cache.js","names":[],"sources":["../../../../src/api/models/session-cache.ts"],"sourcesContent":["import type { getUserById } from \"./user/get-user-by-id\";\n\nexport type SessionUser = NonNullable<Awaited<ReturnType<typeof getUserById>>>;\n\nexport const SESSION_CACHE_TTL_SECONDS = 60;\n\nexport const sessionCacheKey = (\n hashedToken: string,\n deviceId: number,\n): string => `session:user:${deviceId}:${hashedToken}`;\n\nexport const adminSessionCacheKey = (\n hashedToken: string,\n deviceId: number,\n): string => `session:admin:${deviceId}:${hashedToken}`;\n\nexport const sessionCacheTtl = (expiresAt: Date): number =>\n Math.min(\n SESSION_CACHE_TTL_SECONDS,\n Math.floor((expiresAt.getTime() - Date.now()) / 1000),\n );\n\nexport const reviveSessionUser = (user: SessionUser): SessionUser => ({\n ...user,\n createdAt: new Date(user.createdAt),\n birthday: user.birthday ? new Date(user.birthday) : null,\n});\n"],"mappings":"AAIA,MAAa,EAA4B,GAE5B,GACX,EACA,IACW,gBAAgB,EAAS,GAAG,IAE5B,GACX,EACA,IACW,iBAAiB,EAAS,GAAG,IAE7B,EAAmB,GAC9B,KAAK,IAAA,GAEH,KAAK,OAAO,EAAU,QAAQ,EAAI,KAAK,IAAI,GAAK,GAAI,CACtD,EAEW,EAAqB,IAAoC,CACpE,GAAG,EACH,UAAW,IAAI,KAAK,EAAK,SAAS,EAClC,SAAU,EAAK,SAAW,IAAI,KAAK,EAAK,QAAQ,EAAI,IACtD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","names":[],"sources":["../../../../src/api/models/session.ts"],"sourcesContent":["import type { Context } from \"hono\";\n\nimport { and, eq, gt } from \"drizzle-orm\";\nimport { deleteCookie, getCookie, setCookie } from \"hono/cookie\";\n\nimport { core_sessions } from \"@/database/sessions\";\nimport { CONFIG } from \"@/lib/config\";\n\nimport { DeviceModel } from \"./device\";\nimport {\n reviveSessionUser,\n sessionCacheKey,\n sessionCacheTtl,\n type SessionUser,\n} from \"./session-cache\";\nimport { UserModel } from \"./user\";\n\nexport class SessionModel {\n constructor(c: Context) {\n this.c = c;\n }\n protected readonly c: Context;\n\n private async hashToken(token: string): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(token);\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", data);\n const bytes = new Uint8Array(hashBuffer);\n\n // Optimize: Use direct iteration instead of Array.from + map\n let result = \"\";\n for (const byte of bytes) {\n result += byte.toString(16).padStart(2, \"0\");\n }\n\n return result;\n }\n\n async createSessionByUserId(userId: number) {\n // Generate secure random bytes using Web Crypto API\n const randomBytes = new Uint8Array(64);\n crypto.getRandomValues(randomBytes);\n\n // Optimize: Use direct iteration instead of Array.from + map\n let token = \"\";\n for (const byte of randomBytes) {\n token += byte.toString(16).padStart(2, \"0\");\n }\n\n const device = await new DeviceModel(this.c).getDeviceId();\n const hashedToken = await this.hashToken(token);\n\n await this.c\n .get(\"db\")\n .insert(core_sessions)\n .values({\n token: hashedToken,\n userId,\n expiresAt: new Date(\n Date.now() + this.c.get(\"core\").authorization.cookie_expires,\n ),\n deviceId: device.id,\n });\n\n setCookie(this.c, this.c.get(\"core\").authorization.cookieName, token, {\n httpOnly: true,\n secure: this.c.get(\"core\").authorization.cookieSecure,\n path: \"/\",\n expires:\n this.c.get(\"core\").authorization.cookie_expires > 0\n ? new Date(\n Date.now() + this.c.get(\"core\").authorization.cookie_expires,\n )\n : undefined,\n domain: CONFIG.web.hostname,\n });\n\n return { token };\n }\n\n async deleteSession() {\n const token = getCookie(\n this.c,\n this.c.get(\"core\").authorization.cookieName,\n );\n const device = await new DeviceModel(this.c).getDeviceId();\n\n // Ensure both token and deviceId exist before proceeding\n if (!(token && device.id)) {\n deleteCookie(this.c, this.c.get(\"core\").authorization.cookieName);\n\n return;\n }\n\n const hashedToken = await this.hashToken(token);\n\n await this.c\n .get(\"db\")\n .delete(core_sessions)\n // Harden the query to ensure a user can only delete their own device's session\n .where(\n and(\n eq(core_sessions.token, hashedToken),\n eq(core_sessions.deviceId, device.id),\n ),\n );\n\n await this.c\n .get(\"cache\")\n .deleteSystem(sessionCacheKey(hashedToken, device.id));\n\n deleteCookie(this.c, this.c.get(\"core\").authorization.cookieName);\n }\n\n async getUser() {\n const token = getCookie(\n this.c,\n this.c.get(\"core\").authorization.cookieName,\n );\n if (!token) return null;\n\n const device = await new DeviceModel(this.c).getDeviceId();\n if (!device) return null;\n\n const hashedToken = await this.hashToken(token);\n const cache = this.c.get(\"cache\");\n const cacheKey = sessionCacheKey(hashedToken, device.id);\n\n // Fast path: a still-valid session resolved on a recent request. Only\n // positive hits are cached, so a miss always re-runs the full lookup below.\n const cached = await cache.getSystem<SessionUser>(cacheKey);\n if (cached) return reviveSessionUser(cached);\n\n const [session] = await this.c\n .get(\"db\")\n .select({\n userId: core_sessions.userId,\n expiresAt: core_sessions.expiresAt,\n })\n .from(core_sessions)\n .where(\n and(\n eq(core_sessions.token, hashedToken),\n eq(core_sessions.deviceId, device.id),\n gt(core_sessions.expiresAt, new Date()),\n ),\n )\n .limit(1);\n\n if (!session) {\n deleteCookie(this.c, this.c.get(\"core\").authorization.cookieName);\n\n return null;\n }\n\n const user = await new UserModel().getUserById({\n id: session.userId,\n c: this.c,\n });\n\n if (!user) return null;\n\n // Cap the TTL to the session's remaining lifetime so an expired session is\n // never served from cache.\n const ttl = sessionCacheTtl(session.expiresAt);\n if (ttl > 0) await cache.setSystem(cacheKey, user, ttl);\n\n return user;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sso.js","names":[],"sources":["../../../../src/api/models/sso.ts"],"sourcesContent":["import type { Context } from \"hono\";\n\nimport { and, eq } from \"drizzle-orm\";\nimport { deleteCookie, getCookie, setCookie } from \"hono/cookie\";\nimport { HTTPException } from \"hono/http-exception\";\nimport crypto from \"node:crypto\";\n\nimport { core_users, core_users_sso } from \"@/database/users\";\nimport { CONFIG } from \"@/lib/config\";\nimport { removeSpecialCharacters } from \"@/lib/special-characters\";\n\nimport { UserModel } from \"./user\";\n\nexport interface SSOApiPlugin {\n fetchToken: (\n code: string,\n ) => Promise<{ access_token: string; token_type: string }>;\n fetchUser: (args: {\n access_token: string;\n token_type: string;\n }) => Promise<{ email: string; id: string; username: string }>;\n getUrl: (props: { state: string }) => string;\n id: string;\n name: string;\n}\n\nexport const getRedirectUri = (code: string) =>\n new URL(`${CONFIG.web.href}login/sso/${code}`).toString();\n\nexport class SSOModel {\n constructor(c: Context) {\n this.c = c;\n this.plugins = c.get(\"core\").authorization.ssoAdapters;\n }\n\n private readonly c: Context;\n private readonly plugins: SSOApiPlugin[];\n\n private readonly signUpUser = async ({\n providerId,\n user,\n c,\n }: {\n c: Context;\n providerId: string;\n user: {\n email: string;\n id: string;\n username: string;\n };\n }) => {\n const data = await new UserModel().signUp(\n {\n email: user.email,\n name: removeSpecialCharacters(user.username, false),\n newsletter: false,\n hashedPassword: undefined,\n },\n c,\n );\n await c.get(\"db\").insert(core_users_sso).values({\n userId: data.id,\n providerId: providerId,\n providerAccountId: user.id,\n });\n\n return { userId: data.id };\n };\n\n async callback({\n code,\n providerId,\n state,\n }: {\n code: string;\n providerId: string;\n state: string;\n }): Promise<{\n userId: number;\n }> {\n await this.verifyState(state);\n const provider = this.plugins.find(p => p.id === providerId);\n if (!provider) {\n throw new HTTPException(404);\n }\n\n const ssoToken = await provider.fetchToken(code);\n const userFromSSO = await provider.fetchUser(ssoToken);\n\n return await this.c.get(\"db\").transaction(async tx => {\n const [dataSSOFromDb] = await tx\n .select({\n userId: core_users_sso.userId,\n })\n .from(core_users_sso)\n .leftJoin(core_users, eq(core_users.id, core_users_sso.userId))\n .where(\n and(\n eq(core_users_sso.providerId, providerId),\n eq(core_users_sso.providerAccountId, userFromSSO.id),\n ),\n )\n .limit(1);\n\n if (!dataSSOFromDb) {\n const [userWithEmail] = await tx\n .select({\n id: core_users.id,\n email: core_users.email,\n })\n .from(core_users)\n .where(eq(core_users.email, userFromSSO.email))\n .limit(1);\n\n if (!userWithEmail) {\n const signUpUser = await this.signUpUser({\n providerId,\n user: userFromSSO,\n c: this.c,\n });\n\n return signUpUser;\n }\n\n // If email exists, throw an error\n throw new HTTPException(409, {\n message: \"Email already exists\",\n });\n // await tx.insert(core_users_sso).values({\n // providerId: providerId,\n // providerAccountId: userFromSSO.id,\n // userId: userWithEmail.id,\n // });\n }\n\n return {\n userId: dataSSOFromDb.userId,\n };\n });\n }\n\n async encryptState() {\n const state = crypto.randomBytes(8).toString(\"hex\");\n const encryptedState = await new Promise<string>((resolve, reject) => {\n const salt = crypto.randomBytes(4).toString(\"hex\");\n\n crypto.scrypt(state, salt, 16, (err, derivedKey) => {\n if (err) reject(err);\n\n resolve(`${salt}:${derivedKey.toString(\"hex\")}`);\n });\n });\n\n setCookie(\n this.c,\n `${this.c.get(\"core\").authorization.cookieName}--state-sso`,\n encryptedState,\n {\n httpOnly: true,\n secure: this.c.get(\"core\").authorization.cookieSecure,\n path: \"/\",\n domain: CONFIG.web.hostname,\n },\n );\n\n return state;\n }\n\n async getUrl(providerId: string) {\n const provider = this.plugins.find(p => p.id === providerId);\n if (!provider) {\n throw new HTTPException(404);\n }\n\n return provider.getUrl({ state: await this.encryptState() });\n }\n\n async verifyState(state: string) {\n const storedState = getCookie(\n this.c,\n `${this.c.get(\"core\").authorization.cookieName}--state-sso`,\n );\n if (!storedState) {\n throw new HTTPException(400, {\n message: \"Invalid state\",\n });\n }\n\n const isValid = await new Promise<boolean>((resolve, reject) => {\n const [salt, storedHash] = storedState.split(\":\");\n\n crypto.scrypt(state, salt, 16, (err, derivedKey) => {\n if (err) reject(err);\n resolve(storedHash === derivedKey.toString(\"hex\"));\n });\n });\n\n if (!isValid) {\n throw new HTTPException(400, {\n message: \"Invalid state\",\n });\n }\n\n deleteCookie(\n this.c,\n `${this.c.get(\"core\").authorization.cookieName}--state-sso`,\n );\n }\n}\n"],"mappings":"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"}
|