@vitnode/core 2.0.0-canary.4 → 2.0.0-canary.5
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/dist/src/api/adapters/search/postgres.d.ts.map +1 -1
- package/dist/src/api/adapters/search/postgres.js +1 -1
- package/dist/src/api/adapters/sso/discord.d.ts.map +1 -1
- package/dist/src/api/adapters/sso/discord.js +1 -1
- package/dist/src/api/config.d.ts.map +1 -1
- package/dist/src/api/config.js +1 -1
- package/dist/src/api/lib/auth-cookie.d.ts.map +1 -1
- package/dist/src/api/lib/auth-cookie.js +1 -1
- package/dist/src/api/lib/client-ip.d.ts +4 -0
- package/dist/src/api/lib/client-ip.d.ts.map +1 -0
- package/dist/src/api/lib/client-ip.js +1 -0
- package/dist/src/api/lib/pagination-cursor.d.ts +7 -3
- package/dist/src/api/lib/pagination-cursor.d.ts.map +1 -1
- package/dist/src/api/lib/pagination-cursor.js +1 -1
- package/dist/src/api/lib/user-email-lookup.d.ts +6 -0
- package/dist/src/api/lib/user-email-lookup.d.ts.map +1 -0
- package/dist/src/api/lib/user-email-lookup.js +1 -0
- package/dist/src/api/lib/with-pagination.d.ts +4 -2
- package/dist/src/api/lib/with-pagination.d.ts.map +1 -1
- package/dist/src/api/lib/with-pagination.js +1 -1
- package/dist/src/api/middlewares/captcha.middleware.d.ts.map +1 -1
- package/dist/src/api/middlewares/captcha.middleware.js +1 -1
- package/dist/src/api/middlewares/cron-auth.middleware.d.ts.map +1 -1
- package/dist/src/api/middlewares/cron-auth.middleware.js +1 -1
- package/dist/src/api/middlewares/global.middleware.d.ts.map +1 -1
- package/dist/src/api/middlewares/global.middleware.js +1 -1
- package/dist/src/api/middlewares/storage-static.middleware.d.ts +3 -0
- package/dist/src/api/middlewares/storage-static.middleware.d.ts.map +1 -0
- package/dist/src/api/middlewares/storage-static.middleware.js +1 -0
- package/dist/src/api/middlewares/websocket-origin.middleware.d.ts +5 -0
- package/dist/src/api/middlewares/websocket-origin.middleware.d.ts.map +1 -0
- package/dist/src/api/middlewares/websocket-origin.middleware.js +1 -0
- package/dist/src/api/models/device.d.ts +5 -1
- package/dist/src/api/models/device.d.ts.map +1 -1
- package/dist/src/api/models/device.js +1 -1
- package/dist/src/api/models/password.d.ts +1 -0
- package/dist/src/api/models/password.d.ts.map +1 -1
- package/dist/src/api/models/password.js +1 -1
- package/dist/src/api/models/session-admin.d.ts.map +1 -1
- package/dist/src/api/models/session-admin.js +1 -1
- package/dist/src/api/models/session-revoke.d.ts +4 -0
- package/dist/src/api/models/session-revoke.d.ts.map +1 -0
- package/dist/src/api/models/session-revoke.js +1 -0
- package/dist/src/api/models/session.js +1 -1
- package/dist/src/api/models/sso.d.ts.map +1 -1
- package/dist/src/api/models/sso.js +1 -1
- package/dist/src/api/models/storage.d.ts.map +1 -1
- package/dist/src/api/models/storage.js +1 -1
- 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 -1
- package/dist/src/api/models/user/sign-up.d.ts +1 -1
- package/dist/src/api/models/user/sign-up.d.ts.map +1 -1
- package/dist/src/api/models/user/sign-up.js +1 -1
- package/dist/src/api/models/user.d.ts +1 -1
- package/dist/src/api/models/user.d.ts.map +1 -1
- 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 -1
- 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 -1
- 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 -1
- package/dist/src/api/modules/admin/users/lib/assert-edit-user-permission.d.ts +1 -0
- 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 -1
- 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 -1
- package/dist/src/api/modules/search/routes/search.route.d.ts.map +1 -1
- package/dist/src/api/modules/search/routes/search.route.js +1 -1
- 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 -1
- 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 -1
- package/dist/src/api/modules/users/users.module.d.ts +0 -24
- package/dist/src/api/modules/users/users.module.d.ts.map +1 -1
- package/dist/src/api/modules/users/users.module.js +1 -1
- package/dist/src/api/modules.client.d.ts +0 -24
- package/dist/src/api/modules.client.d.ts.map +1 -1
- package/dist/src/components/confirm-action/confirm-action-alert-dialog.d.ts.map +1 -1
- package/dist/src/components/confirm-action/confirm-action-alert-dialog.js +1 -1
- package/dist/src/components/date-format.d.ts.map +1 -1
- package/dist/src/components/date-format.js +1 -1
- package/dist/src/components/editor-provider.d.ts +19 -0
- package/dist/src/components/editor-provider.d.ts.map +1 -0
- package/dist/src/components/editor-provider.js +1 -0
- package/dist/src/components/files/file-preview.d.ts.map +1 -1
- package/dist/src/components/files/file-preview.js +1 -1
- package/dist/src/components/files/metadata-cell.d.ts.map +1 -1
- package/dist/src/components/files/metadata-cell.js +1 -1
- package/dist/src/components/form/auto-form.d.ts.map +1 -1
- package/dist/src/components/form/auto-form.js +1 -1
- package/dist/src/components/form/common/async-picker.d.ts.map +1 -1
- package/dist/src/components/form/common/async-picker.js +1 -1
- package/dist/src/components/form/fields/array.d.ts.map +1 -1
- package/dist/src/components/form/fields/array.js +1 -1
- package/dist/src/components/form/fields/file-gallery.d.ts.map +1 -1
- package/dist/src/components/form/fields/file-gallery.js +1 -1
- package/dist/src/components/form/fields/file-shared.d.ts.map +1 -1
- package/dist/src/components/form/fields/file-shared.js +1 -1
- package/dist/src/components/form/fields/file.d.ts.map +1 -1
- package/dist/src/components/form/fields/file.js +1 -1
- package/dist/src/components/form/fields/files.d.ts.map +1 -1
- package/dist/src/components/form/fields/files.js +1 -1
- package/dist/src/components/form/fields/input-roles.d.ts.map +1 -1
- package/dist/src/components/form/fields/input-roles.js +1 -1
- package/dist/src/components/form/fields/input-users.d.ts.map +1 -1
- package/dist/src/components/form/fields/input-users.js +1 -1
- package/dist/src/components/form/fields/multi-lang.d.ts.map +1 -1
- package/dist/src/components/form/fields/multi-lang.js +1 -1
- package/dist/src/components/languages-provider.d.ts.map +1 -1
- package/dist/src/components/languages-provider.js +1 -1
- package/dist/src/components/role-format-content.d.ts.map +1 -1
- package/dist/src/components/role-format-content.js +1 -1
- package/dist/src/components/staff-permission/provider.d.ts.map +1 -1
- package/dist/src/components/staff-permission/provider.js +1 -1
- package/dist/src/components/switchers/langs/language-switcher-content.d.ts.map +1 -1
- package/dist/src/components/switchers/langs/language-switcher-content.js +1 -1
- package/dist/src/components/switchers/themes/theme-switcher.d.ts.map +1 -1
- package/dist/src/components/switchers/themes/theme-switcher.js +1 -1
- package/dist/src/components/table/content.js +1 -1
- package/dist/src/components/table/data-table-content.js +1 -1
- package/dist/src/components/table/filters.d.ts.map +1 -1
- package/dist/src/components/table/filters.js +1 -1
- package/dist/src/components/table/navigation.d.ts.map +1 -1
- package/dist/src/components/table/navigation.js +1 -1
- package/dist/src/components/table/no-results.d.ts.map +1 -1
- package/dist/src/components/table/no-results.js +1 -1
- package/dist/src/components/table/order-table-head.d.ts.map +1 -1
- package/dist/src/components/table/order-table-head.js +1 -1
- package/dist/src/components/table/pagination.d.ts.map +1 -1
- package/dist/src/components/table/pagination.js +1 -1
- package/dist/src/components/table/search.d.ts.map +1 -1
- package/dist/src/components/table/search.js +1 -1
- package/dist/src/components/table/selection.d.ts.map +1 -1
- package/dist/src/components/table/selection.js +1 -1
- package/dist/src/components/theme-provider.d.ts.map +1 -1
- package/dist/src/components/theme-provider.js +1 -1
- package/dist/src/components/theme-script.d.ts.map +1 -1
- package/dist/src/components/tiptap/drag-handle.d.ts +5 -0
- package/dist/src/components/tiptap/drag-handle.d.ts.map +1 -0
- package/dist/src/components/tiptap/drag-handle.js +1 -0
- package/dist/src/components/tiptap/emoji/custom-emoji.d.ts +7 -0
- package/dist/src/components/tiptap/emoji/custom-emoji.d.ts.map +1 -0
- package/dist/src/components/tiptap/emoji/custom-emoji.js +1 -0
- package/dist/src/components/tiptap/emoji/emoji-suggestion-list.d.ts +10 -0
- package/dist/src/components/tiptap/emoji/emoji-suggestion-list.d.ts.map +1 -0
- package/dist/src/components/tiptap/emoji/emoji-suggestion-list.js +1 -0
- package/dist/src/components/tiptap/emoji/emoji-suggestion.d.ts +6 -0
- package/dist/src/components/tiptap/emoji/emoji-suggestion.d.ts.map +1 -0
- package/dist/src/components/tiptap/emoji/emoji-suggestion.js +1 -0
- package/dist/src/components/tiptap/emoji/match-emojis.d.ts +4 -0
- package/dist/src/components/tiptap/emoji/match-emojis.d.ts.map +1 -0
- package/dist/src/components/tiptap/emoji/match-emojis.js +1 -0
- package/dist/src/components/tiptap/extension.d.ts +6 -1
- package/dist/src/components/tiptap/extension.d.ts.map +1 -1
- package/dist/src/components/tiptap/extension.js +1 -1
- package/dist/src/components/tiptap/tiptap-editor.d.ts +8 -0
- package/dist/src/components/tiptap/tiptap-editor.d.ts.map +1 -0
- package/dist/src/components/tiptap/tiptap-editor.js +1 -0
- package/dist/src/components/tiptap/toolbar/actions/audio/audio-form.d.ts +2 -0
- package/dist/src/components/tiptap/toolbar/actions/audio/audio-form.d.ts.map +1 -0
- package/dist/src/components/tiptap/toolbar/actions/audio/audio-form.js +1 -0
- package/dist/src/components/tiptap/toolbar/actions/audio-action.d.ts +3 -0
- package/dist/src/components/tiptap/toolbar/actions/audio-action.d.ts.map +1 -0
- package/dist/src/components/tiptap/toolbar/actions/audio-action.js +1 -0
- package/dist/src/components/tiptap/toolbar/actions/blocks-action.d.ts +2 -0
- package/dist/src/components/tiptap/toolbar/actions/blocks-action.d.ts.map +1 -0
- package/dist/src/components/tiptap/toolbar/actions/blocks-action.js +1 -0
- package/dist/src/components/tiptap/toolbar/actions/color-action.d.ts +3 -0
- package/dist/src/components/tiptap/toolbar/actions/color-action.d.ts.map +1 -0
- package/dist/src/components/tiptap/toolbar/actions/color-action.js +1 -0
- package/dist/src/components/tiptap/toolbar/actions/emoji/emoji-picker.d.ts +5 -0
- package/dist/src/components/tiptap/toolbar/actions/emoji/emoji-picker.d.ts.map +1 -0
- package/dist/src/components/tiptap/toolbar/actions/emoji/emoji-picker.js +1 -0
- package/dist/src/components/tiptap/toolbar/actions/emoji-action.d.ts +3 -0
- package/dist/src/components/tiptap/toolbar/actions/emoji-action.d.ts.map +1 -0
- package/dist/src/components/tiptap/toolbar/actions/emoji-action.js +1 -0
- package/dist/src/components/tiptap/toolbar/actions/font-size-action.d.ts +2 -0
- package/dist/src/components/tiptap/toolbar/actions/font-size-action.d.ts.map +1 -0
- package/dist/src/components/tiptap/toolbar/actions/font-size-action.js +1 -0
- package/dist/src/components/tiptap/toolbar/actions/table-action.d.ts +2 -0
- package/dist/src/components/tiptap/toolbar/actions/table-action.d.ts.map +1 -0
- package/dist/src/components/tiptap/toolbar/actions/table-action.js +1 -0
- package/dist/src/components/tiptap/toolbar/actions/text-format-more/text-format-more.d.ts.map +1 -1
- package/dist/src/components/tiptap/toolbar/actions/text-format-more/text-format-more.js +1 -1
- package/dist/src/components/tiptap/toolbar/tiptap-toolbar.d.ts.map +1 -1
- package/dist/src/components/tiptap/toolbar/tiptap-toolbar.js +1 -1
- package/dist/src/components/ui/accordion.d.ts.map +1 -1
- package/dist/src/components/ui/accordion.js +1 -1
- package/dist/src/components/ui/alert-dialog.d.ts.map +1 -1
- package/dist/src/components/ui/alert-dialog.js +1 -1
- package/dist/src/components/ui/avatar.d.ts.map +1 -1
- package/dist/src/components/ui/avatar.js +1 -1
- package/dist/src/components/ui/button-client.d.ts.map +1 -1
- package/dist/src/components/ui/button-client.js +1 -1
- package/dist/src/components/ui/button.js +1 -1
- package/dist/src/components/ui/carousel.d.ts.map +1 -1
- package/dist/src/components/ui/carousel.js +1 -1
- package/dist/src/components/ui/chart.d.ts.map +1 -1
- package/dist/src/components/ui/chart.js +1 -1
- package/dist/src/components/ui/checkbox.d.ts.map +1 -1
- package/dist/src/components/ui/checkbox.js +1 -1
- package/dist/src/components/ui/collapsible.d.ts.map +1 -1
- package/dist/src/components/ui/collapsible.js +1 -1
- package/dist/src/components/ui/color-picker.d.ts.map +1 -1
- package/dist/src/components/ui/color-picker.js +1 -1
- package/dist/src/components/ui/combobox.d.ts.map +1 -1
- package/dist/src/components/ui/combobox.js +1 -1
- package/dist/src/components/ui/command.d.ts.map +1 -1
- package/dist/src/components/ui/command.js +1 -1
- package/dist/src/components/ui/context-menu.d.ts.map +1 -1
- package/dist/src/components/ui/context-menu.js +1 -1
- package/dist/src/components/ui/dialog.d.ts.map +1 -1
- package/dist/src/components/ui/dialog.js +1 -1
- package/dist/src/components/ui/direction.d.ts.map +1 -1
- package/dist/src/components/ui/direction.js +1 -1
- package/dist/src/components/ui/drawer.d.ts.map +1 -1
- package/dist/src/components/ui/drawer.js +1 -1
- package/dist/src/components/ui/dropdown-menu.d.ts.map +1 -1
- package/dist/src/components/ui/dropdown-menu.js +1 -1
- package/dist/src/components/ui/editor.d.ts +2 -7
- package/dist/src/components/ui/editor.d.ts.map +1 -1
- package/dist/src/components/ui/editor.js +1 -1
- package/dist/src/components/ui/field.d.ts.map +1 -1
- package/dist/src/components/ui/field.js +1 -1
- package/dist/src/components/ui/form.d.ts.map +1 -1
- package/dist/src/components/ui/form.js +1 -1
- package/dist/src/components/ui/hover-card.d.ts.map +1 -1
- package/dist/src/components/ui/hover-card.js +1 -1
- package/dist/src/components/ui/input-group.d.ts.map +1 -1
- package/dist/src/components/ui/input-group.js +1 -1
- package/dist/src/components/ui/input-otp.d.ts.map +1 -1
- package/dist/src/components/ui/input-otp.js +1 -1
- package/dist/src/components/ui/input.js +1 -1
- package/dist/src/components/ui/kbd.js +1 -1
- package/dist/src/components/ui/menubar.d.ts.map +1 -1
- package/dist/src/components/ui/menubar.js +1 -1
- package/dist/src/components/ui/native-select.js +1 -1
- package/dist/src/components/ui/navigation-menu.d.ts.map +1 -1
- package/dist/src/components/ui/navigation-menu.js +1 -1
- package/dist/src/components/ui/popover.d.ts.map +1 -1
- package/dist/src/components/ui/popover.js +1 -1
- package/dist/src/components/ui/progress.d.ts.map +1 -1
- package/dist/src/components/ui/progress.js +1 -1
- package/dist/src/components/ui/radio-group.d.ts.map +1 -1
- package/dist/src/components/ui/radio-group.js +1 -1
- package/dist/src/components/ui/resizable.d.ts.map +1 -1
- package/dist/src/components/ui/resizable.js +1 -1
- package/dist/src/components/ui/scroll-area.d.ts.map +1 -1
- package/dist/src/components/ui/scroll-area.js +1 -1
- package/dist/src/components/ui/select.d.ts.map +1 -1
- package/dist/src/components/ui/select.js +1 -1
- package/dist/src/components/ui/separator.d.ts.map +1 -1
- package/dist/src/components/ui/separator.js +1 -1
- package/dist/src/components/ui/sheet.d.ts.map +1 -1
- package/dist/src/components/ui/sheet.js +1 -1
- package/dist/src/components/ui/sidebar.d.ts.map +1 -1
- package/dist/src/components/ui/sidebar.js +1 -1
- package/dist/src/components/ui/slider.d.ts.map +1 -1
- package/dist/src/components/ui/slider.js +1 -1
- package/dist/src/components/ui/sonner.d.ts.map +1 -1
- package/dist/src/components/ui/sonner.js +1 -1
- package/dist/src/components/ui/switch.d.ts.map +1 -1
- package/dist/src/components/ui/switch.js +1 -1
- package/dist/src/components/ui/table.d.ts.map +1 -1
- package/dist/src/components/ui/table.js +1 -1
- package/dist/src/components/ui/tabs.d.ts.map +1 -1
- package/dist/src/components/ui/tabs.js +1 -1
- package/dist/src/components/ui/textarea.js +1 -1
- package/dist/src/components/ui/toggle-group.d.ts.map +1 -1
- package/dist/src/components/ui/toggle-group.js +1 -1
- package/dist/src/components/ui/toggle.d.ts.map +1 -1
- package/dist/src/components/ui/toggle.js +1 -1
- package/dist/src/components/ui/tooltip.d.ts.map +1 -1
- package/dist/src/components/ui/tooltip.js +1 -1
- package/dist/src/config.js +1 -1
- package/dist/src/content/admin/upload.d.ts.map +1 -1
- package/dist/src/content/registry.d.ts.map +1 -1
- package/dist/src/content/server/preview-config.js +1 -1
- package/dist/src/content/server/routes.d.ts.map +1 -1
- package/dist/src/emoji-picker.css +104 -0
- package/dist/src/framework/vite/env.js +1 -1
- package/dist/src/framework/vite/optimize-deps.d.ts +1 -1
- package/dist/src/framework/vite/optimize-deps.d.ts.map +1 -1
- package/dist/src/framework/vite/optimize-deps.js +1 -1
- package/dist/src/lib/api/upload.d.ts +2 -1
- package/dist/src/lib/api/upload.d.ts.map +1 -1
- package/dist/src/lib/api/upload.js +1 -1
- package/dist/src/lib/config.d.ts +1 -0
- package/dist/src/lib/config.d.ts.map +1 -1
- package/dist/src/lib/config.js +1 -1
- package/dist/src/lib/email-canonical.d.ts +3 -0
- package/dist/src/lib/email-canonical.d.ts.map +1 -0
- package/dist/src/lib/email-canonical.js +1 -0
- package/dist/src/lib/fetcher-client.d.ts +5 -0
- package/dist/src/lib/fetcher-client.d.ts.map +1 -1
- package/dist/src/lib/fetcher-client.js +1 -1
- package/dist/src/lib/i18n/provider.d.ts.map +1 -1
- package/dist/src/lib/i18n/provider.js +1 -1
- package/dist/src/lib/plugin.d.ts +3 -0
- package/dist/src/lib/plugin.d.ts.map +1 -1
- package/dist/src/locales/en.json +45 -2
- package/dist/src/locales/pl.json +44 -1
- package/dist/src/routing/path.js +1 -1
- package/dist/src/tanstack/admin/breadcrumb.d.ts.map +1 -1
- package/dist/src/tanstack/admin/breadcrumb.js +1 -1
- package/dist/src/tanstack/admin/content/breadcrumb.d.ts.map +1 -1
- package/dist/src/tanstack/admin/content/breadcrumb.js +1 -1
- package/dist/src/tanstack/admin/content/create-action.d.ts.map +1 -1
- package/dist/src/tanstack/admin/content/create-action.js +1 -1
- package/dist/src/tanstack/admin/content/editorial/host.d.ts.map +1 -1
- package/dist/src/tanstack/admin/content/editorial/host.js +1 -1
- package/dist/src/tanstack/admin/content/editorial/panels.d.ts.map +1 -1
- package/dist/src/tanstack/admin/content/editorial/panels.js +1 -1
- package/dist/src/tanstack/admin/content/form/dialog.d.ts.map +1 -1
- package/dist/src/tanstack/admin/content/form/dialog.js +1 -1
- package/dist/src/tanstack/admin/content/form/form-body.d.ts.map +1 -1
- package/dist/src/tanstack/admin/content/form/form-body.js +1 -1
- package/dist/src/tanstack/admin/content/form/host.d.ts.map +1 -1
- package/dist/src/tanstack/admin/content/form/host.js +1 -1
- package/dist/src/tanstack/admin/content/form/page-body.d.ts.map +1 -1
- package/dist/src/tanstack/admin/content/form/page-body.js +1 -1
- package/dist/src/tanstack/admin/content/form/page-skeleton.d.ts +9 -0
- package/dist/src/tanstack/admin/content/form/page-skeleton.d.ts.map +1 -0
- package/dist/src/tanstack/admin/content/form/page-skeleton.js +1 -0
- package/dist/src/tanstack/admin/content/form/screen.d.ts.map +1 -1
- package/dist/src/tanstack/admin/content/form/screen.js +1 -1
- package/dist/src/tanstack/admin/content/form/spec.d.ts +2 -0
- package/dist/src/tanstack/admin/content/form/spec.d.ts.map +1 -1
- package/dist/src/tanstack/admin/content/form/spec.js +1 -1
- package/dist/src/tanstack/admin/content/form/transport.d.ts.map +1 -1
- package/dist/src/tanstack/admin/content/form/transport.js +1 -1
- package/dist/src/tanstack/admin/content/list.d.ts.map +1 -1
- package/dist/src/tanstack/admin/content/list.js +1 -1
- package/dist/src/tanstack/admin/content/query.d.ts.map +1 -1
- package/dist/src/tanstack/admin/content/query.js +1 -1
- package/dist/src/tanstack/admin/content/route-screen.d.ts.map +1 -1
- package/dist/src/tanstack/admin/content/route-screen.js +1 -1
- package/dist/src/tanstack/admin/content/route.d.ts.map +1 -1
- package/dist/src/tanstack/admin/content/row-actions.d.ts.map +1 -1
- package/dist/src/tanstack/admin/content/row-actions.js +1 -1
- package/dist/src/tanstack/admin/content/screen.d.ts.map +1 -1
- package/dist/src/tanstack/admin/content/screen.js +1 -1
- package/dist/src/tanstack/admin/content/transport.d.ts +3 -0
- package/dist/src/tanstack/admin/content/transport.d.ts.map +1 -0
- package/dist/src/tanstack/admin/content/transport.js +1 -0
- package/dist/src/tanstack/admin/cron/query.d.ts.map +1 -1
- package/dist/src/tanstack/admin/cron/query.js +1 -1
- package/dist/src/tanstack/admin/cron/screen.d.ts.map +1 -1
- package/dist/src/tanstack/admin/cron/screen.js +1 -1
- package/dist/src/tanstack/admin/dashboard/query.d.ts.map +1 -1
- package/dist/src/tanstack/admin/dashboard/query.js +1 -1
- package/dist/src/tanstack/admin/dashboard/screen.d.ts.map +1 -1
- package/dist/src/tanstack/admin/dashboard/screen.js +1 -1
- package/dist/src/tanstack/admin/dashboard/widgets.d.ts.map +1 -1
- package/dist/src/tanstack/admin/dashboard/widgets.js +1 -1
- package/dist/src/tanstack/admin/debug/query.d.ts.map +1 -1
- package/dist/src/tanstack/admin/debug/query.js +1 -1
- package/dist/src/tanstack/admin/debug/screen.d.ts.map +1 -1
- package/dist/src/tanstack/admin/debug/screen.js +1 -1
- package/dist/src/tanstack/admin/files/query.d.ts.map +1 -1
- package/dist/src/tanstack/admin/files/query.js +1 -1
- package/dist/src/tanstack/admin/files/screen.d.ts.map +1 -1
- package/dist/src/tanstack/admin/files/screen.js +1 -1
- package/dist/src/tanstack/admin/index.d.ts +0 -1
- package/dist/src/tanstack/admin/index.d.ts.map +1 -1
- package/dist/src/tanstack/admin/index.js +1 -1
- package/dist/src/tanstack/admin/integrations/query.d.ts.map +1 -1
- package/dist/src/tanstack/admin/integrations/query.js +1 -1
- package/dist/src/tanstack/admin/integrations/screen.d.ts.map +1 -1
- package/dist/src/tanstack/admin/integrations/screen.js +1 -1
- package/dist/src/tanstack/admin/nav.d.ts.map +1 -1
- package/dist/src/tanstack/admin/nav.js +1 -1
- package/dist/src/tanstack/admin/permissions.d.ts.map +1 -1
- package/dist/src/tanstack/admin/permissions.js +1 -1
- package/dist/src/tanstack/admin/queue/query.d.ts.map +1 -1
- package/dist/src/tanstack/admin/queue/query.js +1 -1
- package/dist/src/tanstack/admin/queue/screen.d.ts.map +1 -1
- package/dist/src/tanstack/admin/queue/screen.js +1 -1
- package/dist/src/tanstack/admin/roles/query.d.ts.map +1 -1
- package/dist/src/tanstack/admin/roles/query.js +1 -1
- package/dist/src/tanstack/admin/roles/screen.d.ts.map +1 -1
- package/dist/src/tanstack/admin/roles/screen.js +1 -1
- package/dist/src/tanstack/admin/search-index/query.d.ts.map +1 -1
- package/dist/src/tanstack/admin/search-index/query.js +1 -1
- package/dist/src/tanstack/admin/search-index/screen.d.ts.map +1 -1
- package/dist/src/tanstack/admin/search-index/screen.js +1 -1
- package/dist/src/tanstack/admin/search.d.ts.map +1 -1
- package/dist/src/tanstack/admin/search.js +1 -1
- package/dist/src/tanstack/admin/shell.d.ts.map +1 -1
- package/dist/src/tanstack/admin/shell.js +1 -1
- package/dist/src/tanstack/admin/sign-in-screen.d.ts.map +1 -1
- package/dist/src/tanstack/admin/sign-in-screen.js +1 -1
- package/dist/src/tanstack/admin/staff/breadcrumbs.d.ts.map +1 -1
- package/dist/src/tanstack/admin/staff/breadcrumbs.js +1 -1
- package/dist/src/tanstack/admin/staff/create-screen.d.ts.map +1 -1
- package/dist/src/tanstack/admin/staff/create-screen.js +1 -1
- package/dist/src/tanstack/admin/staff/edit-screen.d.ts.map +1 -1
- package/dist/src/tanstack/admin/staff/edit-screen.js +1 -1
- package/dist/src/tanstack/admin/staff/query.d.ts.map +1 -1
- package/dist/src/tanstack/admin/staff/query.js +1 -1
- package/dist/src/tanstack/admin/staff/screen.d.ts.map +1 -1
- package/dist/src/tanstack/admin/staff/screen.js +1 -1
- package/dist/src/tanstack/admin/user-bar.d.ts.map +1 -1
- package/dist/src/tanstack/admin/user-bar.js +1 -1
- package/dist/src/tanstack/admin/users/detail-breadcrumb.d.ts.map +1 -1
- package/dist/src/tanstack/admin/users/detail-breadcrumb.js +1 -1
- package/dist/src/tanstack/admin/users/detail-screen.d.ts.map +1 -1
- package/dist/src/tanstack/admin/users/detail-screen.js +1 -1
- package/dist/src/tanstack/admin/users/query.d.ts.map +1 -1
- package/dist/src/tanstack/admin/users/query.js +1 -1
- package/dist/src/tanstack/admin/users/screen.d.ts.map +1 -1
- package/dist/src/tanstack/admin/users/screen.js +1 -1
- package/dist/src/tanstack/auth/login-screen.d.ts.map +1 -1
- package/dist/src/tanstack/auth/login-screen.js +1 -1
- package/dist/src/tanstack/auth/middleware-config.d.ts.map +1 -1
- package/dist/src/tanstack/auth/middleware-config.js +1 -1
- package/dist/src/tanstack/auth/recovery-screen.d.ts.map +1 -1
- package/dist/src/tanstack/auth/recovery-screen.js +1 -1
- package/dist/src/tanstack/auth/register-screen.d.ts.map +1 -1
- package/dist/src/tanstack/auth/register-screen.js +1 -1
- package/dist/src/tanstack/auth/sso-screen.d.ts.map +1 -1
- package/dist/src/tanstack/auth/sso-screen.js +1 -1
- package/dist/src/tanstack/breadcrumb/main-breadcrumb.d.ts.map +1 -1
- package/dist/src/tanstack/breadcrumb/main-breadcrumb.js +1 -1
- package/dist/src/tanstack/devices/panel.d.ts.map +1 -1
- package/dist/src/tanstack/devices/panel.js +1 -1
- package/dist/src/tanstack/devices/query.d.ts.map +1 -1
- package/dist/src/tanstack/devices/query.js +1 -1
- package/dist/src/tanstack/fetcher/index.d.ts +15 -0
- package/dist/src/tanstack/fetcher/index.d.ts.map +1 -0
- package/dist/src/tanstack/fetcher/index.js +1 -0
- package/dist/src/tanstack/fetcher/server.js +1 -1
- package/dist/src/tanstack/files/query.d.ts.map +1 -1
- package/dist/src/tanstack/files/query.js +1 -1
- package/dist/src/tanstack/files/screen.d.ts.map +1 -1
- package/dist/src/tanstack/files/screen.js +1 -1
- package/dist/src/tanstack/i18n/request.d.ts.map +1 -1
- package/dist/src/tanstack/i18n/request.js +1 -1
- package/dist/src/tanstack/i18n/route-messages.d.ts.map +1 -1
- package/dist/src/tanstack/i18n/route-messages.js +1 -1
- package/dist/src/tanstack/layout/error-actions.d.ts.map +1 -1
- package/dist/src/tanstack/layout/error-actions.js +1 -1
- package/dist/src/tanstack/layout/header.d.ts.map +1 -1
- package/dist/src/tanstack/layout/header.js +1 -1
- package/dist/src/tanstack/layout/index.d.ts +1 -1
- package/dist/src/tanstack/layout/index.d.ts.map +1 -1
- package/dist/src/tanstack/layout/index.js +1 -1
- package/dist/src/tanstack/layout/language-switcher.d.ts.map +1 -1
- package/dist/src/tanstack/layout/language-switcher.js +1 -1
- package/dist/src/tanstack/layout/main-header.d.ts.map +1 -1
- package/dist/src/tanstack/layout/main-header.js +1 -1
- package/dist/src/tanstack/layout/not-found.d.ts +3 -0
- package/dist/src/tanstack/layout/not-found.d.ts.map +1 -1
- package/dist/src/tanstack/layout/not-found.js +1 -1
- package/dist/src/tanstack/layout/root-providers.d.ts.map +1 -1
- package/dist/src/tanstack/layout/root-providers.js +1 -1
- package/dist/src/tanstack/layout/router-link.d.ts.map +1 -1
- package/dist/src/tanstack/layout/router-link.js +1 -1
- package/dist/src/tanstack/layout/user-header.d.ts.map +1 -1
- package/dist/src/tanstack/layout/user-header.js +1 -1
- package/dist/src/tanstack/pending/guard-pending.d.ts.map +1 -1
- package/dist/src/tanstack/pending/guard-pending.js +1 -1
- package/dist/src/tanstack/pending/navigation-pending.d.ts.map +1 -1
- package/dist/src/tanstack/pending/navigation-pending.js +1 -1
- package/dist/src/tanstack/pending/route-pending-skeleton.d.ts.map +1 -1
- package/dist/src/tanstack/pending/route-pending-skeleton.js +1 -1
- package/dist/src/tanstack/pending/shapes.d.ts.map +1 -1
- package/dist/src/tanstack/pending/shapes.js +1 -1
- package/dist/src/tanstack/plugin-routes/components.d.ts.map +1 -1
- package/dist/src/tanstack/plugin-routes/components.js +1 -1
- package/dist/src/tanstack/realtime/realtime-listeners.d.ts.map +1 -1
- package/dist/src/tanstack/realtime/realtime-listeners.js +1 -1
- package/dist/src/tanstack/routes/main/index.d.ts.map +1 -1
- package/dist/src/tanstack/routes/main/index.js +1 -1
- package/dist/src/tanstack/search/discover-screen.d.ts.map +1 -1
- package/dist/src/tanstack/search/discover-screen.js +1 -1
- package/dist/src/tanstack/search/feed.d.ts.map +1 -1
- package/dist/src/tanstack/search/feed.js +1 -1
- package/dist/src/tanstack/search/search-screen.d.ts.map +1 -1
- package/dist/src/tanstack/search/search-screen.js +1 -1
- package/dist/src/tanstack/settings/layout.d.ts.map +1 -1
- package/dist/src/tanstack/settings/layout.js +1 -1
- package/dist/src/tiptap.css +103 -6
- package/dist/src/views/admin/layouts/search/search-content.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/search/search-content.js +1 -1
- package/dist/src/views/admin/layouts/search/search-dialog-content.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/search/search-dialog-content.js +1 -1
- package/dist/src/views/admin/layouts/sidebar/nav/item-content.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/sidebar/nav/item-content.js +1 -1
- package/dist/src/views/admin/layouts/sidebar/nav/nav-model.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/user-bar/user-bar-content.d.ts.map +1 -1
- package/dist/src/views/admin/layouts/user-bar/user-bar-content.js +1 -1
- package/dist/src/views/admin/views/content/actions/conflict-notice.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/actions/content-form.d.ts +3 -1
- package/dist/src/views/admin/views/content/actions/content-form.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/actions/content-form.js +1 -1
- package/dist/src/views/admin/views/content/actions/content-panel.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/actions/content-panel.js +1 -1
- package/dist/src/views/admin/views/content/actions/delivery/delivery-panel.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/actions/delivery-action.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/actions/delivery-action.js +1 -1
- package/dist/src/views/admin/views/content/actions/editorial-transport.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/actions/form-dialog.d.ts +2 -1
- package/dist/src/views/admin/views/content/actions/form-dialog.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/actions/form-dialog.js +1 -1
- package/dist/src/views/admin/views/content/actions/history/revision-actor.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/actions/history/revision-diff.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/actions/history/revision-history.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/actions/history/revision-row.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/actions/history-action.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/actions/history-action.js +1 -1
- package/dist/src/views/admin/views/content/actions/preview-action.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/actions/preview-action.js +1 -1
- package/dist/src/views/admin/views/content/actions/schedule/schedule-panel.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/actions/schedule-action.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/actions/schedule-action.js +1 -1
- package/dist/src/views/admin/views/content/content-request.d.ts +4 -1
- package/dist/src/views/admin/views/content/content-request.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/content-request.js +1 -1
- package/dist/src/views/admin/views/content/form/context.d.ts +1 -0
- package/dist/src/views/admin/views/content/form/context.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/form/context.js +1 -1
- package/dist/src/views/admin/views/content/form/index.d.ts +3 -1
- package/dist/src/views/admin/views/content/form/index.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/form/index.js +1 -1
- package/dist/src/views/admin/views/content/form/item-query.d.ts +3 -1
- package/dist/src/views/admin/views/content/form/item-query.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/form/item-query.js +1 -1
- package/dist/src/views/admin/views/content/form/layout-primitives.d.ts +13 -0
- package/dist/src/views/admin/views/content/form/layout-primitives.d.ts.map +1 -0
- package/dist/src/views/admin/views/content/form/layout-primitives.js +1 -0
- package/dist/src/views/admin/views/content/form/navigation.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/form/primitives.d.ts +0 -11
- package/dist/src/views/admin/views/content/form/primitives.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/form/primitives.js +1 -1
- package/dist/src/views/admin/views/content/form/publication-status.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/form/sections.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/form/sections.js +1 -1
- package/dist/src/views/admin/views/content/form/skeleton.d.ts +46 -0
- package/dist/src/views/admin/views/content/form/skeleton.d.ts.map +1 -0
- package/dist/src/views/admin/views/content/form/skeleton.js +1 -0
- package/dist/src/views/admin/views/content/form/transport.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/page/content-form-page.d.ts +2 -0
- package/dist/src/views/admin/views/content/page/content-form-page.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/page/content-form-page.js +1 -1
- package/dist/src/views/admin/views/content/table/list-query.d.ts +2 -1
- package/dist/src/views/admin/views/content/table/list-query.d.ts.map +1 -1
- package/dist/src/views/admin/views/content/table/list-query.js +1 -1
- package/dist/src/views/admin/views/core/advanced/cron/cron-query.d.ts +2 -0
- package/dist/src/views/admin/views/core/advanced/cron/cron-query.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/advanced/cron/cron-query.js +1 -1
- package/dist/src/views/admin/views/core/advanced/cron/cron-table-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/advanced/cron/cron-table-content.js +1 -1
- 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 -1
- package/dist/src/views/admin/views/core/advanced/queue/queue-query.d.ts +2 -0
- package/dist/src/views/admin/views/core/advanced/queue/queue-query.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/advanced/queue/queue-query.js +1 -1
- package/dist/src/views/admin/views/core/advanced/queue/queue-table-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/advanced/queue/queue-table-content.js +1 -1
- package/dist/src/views/admin/views/core/advanced/search/collections-table-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/advanced/search/collections-table-content.js +1 -1
- package/dist/src/views/admin/views/core/advanced/search/cron-warning.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/advanced/search/cron-warning.js +1 -1
- package/dist/src/views/admin/views/core/advanced/search/reindex-action.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/advanced/search/reindex-action.js +1 -1
- package/dist/src/views/admin/views/core/advanced/search/remove-documents-action.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/advanced/search/remove-documents-action.js +1 -1
- package/dist/src/views/admin/views/core/advanced/search/search-header-actions.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/advanced/search/search-header-actions.js +1 -1
- package/dist/src/views/admin/views/core/advanced/search/search-index-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/advanced/search/search-index-content.js +1 -1
- package/dist/src/views/admin/views/core/advanced/search/search-index-query.d.ts +2 -0
- package/dist/src/views/admin/views/core/advanced/search/search-index-query.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/advanced/search/search-index-query.js +1 -1
- package/dist/src/views/admin/views/core/advanced/search/sync-errors-card-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/advanced/search/sync-errors-card-content.js +1 -1
- package/dist/src/views/admin/views/core/dashboard/grid/board-provider.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/dashboard/grid/board-provider.js +1 -1
- package/dist/src/views/admin/views/core/dashboard/grid/dashboard-grid.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/dashboard/grid/dashboard-grid.js +1 -1
- package/dist/src/views/admin/views/core/dashboard/grid/drop-placeholder.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/dashboard/grid/drop-placeholder.js +1 -1
- package/dist/src/views/admin/views/core/dashboard/grid/edit-actions.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/dashboard/grid/edit-actions.js +1 -1
- package/dist/src/views/admin/views/core/dashboard/grid/widget-card.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/dashboard/grid/widget-card.js +1 -1
- package/dist/src/views/admin/views/core/dashboard/grid/widget-panel.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/dashboard/grid/widget-panel.js +1 -1
- package/dist/src/views/admin/views/core/dashboard/grid/widget-settings-dialog.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/dashboard/grid/widget-settings-dialog.js +1 -1
- package/dist/src/views/admin/views/core/dashboard/grid/widget-skeleton.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/dashboard/grid/widget-skeleton.js +1 -1
- package/dist/src/views/admin/views/core/dashboard/widgets/layout-query.d.ts +2 -0
- package/dist/src/views/admin/views/core/dashboard/widgets/layout-query.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/dashboard/widgets/layout-query.js +1 -1
- package/dist/src/views/admin/views/core/dashboard/widgets/notes/notes-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/dashboard/widgets/notes/notes-content.js +1 -1
- package/dist/src/views/admin/views/core/dashboard/widgets/send-notification/send-notification-settings-form.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/dashboard/widgets/send-notification/send-notification-settings-form.js +1 -1
- package/dist/src/views/admin/views/core/dashboard/widgets/send-notification/send-notification.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/dashboard/widgets/send-notification/send-notification.js +1 -1
- 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 -1
- package/dist/src/views/admin/views/core/debug/debug-query.d.ts +3 -0
- package/dist/src/views/admin/views/core/debug/debug-query.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/debug/debug-query.js +1 -1
- package/dist/src/views/admin/views/core/debug/queue/queue-view-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/debug/queue/queue-view-content.js +1 -1
- package/dist/src/views/admin/views/core/debug/system-logs/actions/more/more.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/debug/system-logs/actions/more/more.js +1 -1
- package/dist/src/views/admin/views/core/debug/system-logs/system-logs-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/debug/system-logs/system-logs-content.js +1 -1
- package/dist/src/views/admin/views/core/staff/create/create-staff-form-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/staff/create/create-staff-form-content.js +1 -1
- package/dist/src/views/admin/views/core/staff/edit/edit-staff-form-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/staff/edit/edit-staff-form-content.js +1 -1
- 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 -1
- package/dist/src/views/admin/views/core/staff/staff-query.d.ts +4 -0
- package/dist/src/views/admin/views/core/staff/staff-query.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/staff/staff-query.js +1 -1
- package/dist/src/views/admin/views/core/staff/table/staff-table-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/staff/table/staff-table-content.js +1 -1
- package/dist/src/views/admin/views/core/staff/table/staff-user-format-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/staff/table/staff-user-format-content.js +1 -1
- 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 -1
- package/dist/src/views/admin/views/core/system/files/actions/files-bulk-actions.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/system/files/actions/files-bulk-actions.js +1 -1
- package/dist/src/views/admin/views/core/system/files/files-query.d.ts +2 -0
- package/dist/src/views/admin/views/core/system/files/files-query.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/system/files/files-query.js +1 -1
- package/dist/src/views/admin/views/core/system/files/files-table-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/system/files/files-table-content.js +1 -1
- package/dist/src/views/admin/views/core/system/integrations/integrations-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/system/integrations/integrations-content.js +1 -1
- package/dist/src/views/admin/views/core/system/integrations/integrations-query.d.ts +2 -0
- package/dist/src/views/admin/views/core/system/integrations/integrations-query.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/system/integrations/integrations-query.js +1 -1
- 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 -1
- 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 -1
- package/dist/src/views/admin/views/core/system/integrations/test-ai/content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/system/integrations/test-ai/content.js +1 -1
- package/dist/src/views/admin/views/core/system/integrations/test-ai/test-ai.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/system/integrations/test-ai/test-ai.js +1 -1
- 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 -1
- 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 -1
- package/dist/src/views/admin/views/core/test.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/test.js +1 -1
- package/dist/src/views/admin/views/core/users/detail/user-detail-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/detail/user-detail-content.js +1 -1
- package/dist/src/views/admin/views/core/users/detail/user-fields-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/detail/user-fields-content.js +1 -1
- package/dist/src/views/admin/views/core/users/detail/user-query.d.ts +2 -0
- package/dist/src/views/admin/views/core/users/detail/user-query.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/detail/user-query.js +1 -1
- package/dist/src/views/admin/views/core/users/detail/user-roles-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/detail/user-roles-content.js +1 -1
- package/dist/src/views/admin/views/core/users/list/create-user-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/list/create-user-content.js +1 -1
- package/dist/src/views/admin/views/core/users/list/create-user-form.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/list/create-user-form.js +1 -1
- package/dist/src/views/admin/views/core/users/list/users-query.d.ts +2 -0
- package/dist/src/views/admin/views/core/users/list/users-query.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/list/users-query.js +1 -1
- package/dist/src/views/admin/views/core/users/list/users-table-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/list/users-table-content.js +1 -1
- package/dist/src/views/admin/views/core/users/roles/role-form-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/roles/role-form-content.js +1 -1
- package/dist/src/views/admin/views/core/users/roles/roles-query.d.ts +2 -0
- package/dist/src/views/admin/views/core/users/roles/roles-query.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/roles/roles-query.js +1 -1
- package/dist/src/views/admin/views/core/users/roles/roles-table-content.d.ts.map +1 -1
- package/dist/src/views/admin/views/core/users/roles/roles-table-content.js +1 -1
- package/dist/src/views/auth/password-reset/change-password-form/change-password-form-content.d.ts.map +1 -1
- package/dist/src/views/auth/password-reset/change-password-form/change-password-form-content.js +1 -1
- package/dist/src/views/auth/password-reset/change-password-form/use-change-password-form.d.ts.map +1 -1
- package/dist/src/views/auth/password-reset/change-password-form/use-change-password-form.js +1 -1
- package/dist/src/views/auth/password-reset/form/password-reset-form-content.d.ts.map +1 -1
- package/dist/src/views/auth/password-reset/form/password-reset-form-content.js +1 -1
- package/dist/src/views/auth/password-reset/form/use-password-reset-form.d.ts.map +1 -1
- package/dist/src/views/auth/password-reset/form/use-password-reset-form.js +1 -1
- package/dist/src/views/auth/settings/devices/device-item.d.ts.map +1 -1
- package/dist/src/views/auth/settings/devices/device-item.js +1 -1
- package/dist/src/views/auth/settings/devices/devices-content.d.ts.map +1 -1
- package/dist/src/views/auth/settings/devices/devices-content.js +1 -1
- package/dist/src/views/auth/settings/devices/devices-query.d.ts +2 -24
- package/dist/src/views/auth/settings/devices/devices-query.d.ts.map +1 -1
- package/dist/src/views/auth/settings/devices/devices-query.js +1 -1
- package/dist/src/views/auth/settings/devices/revoke-device-button.d.ts.map +1 -1
- package/dist/src/views/auth/settings/devices/revoke-device-button.js +1 -1
- package/dist/src/views/auth/settings/nav-content.d.ts.map +1 -1
- package/dist/src/views/auth/settings/nav-content.js +1 -1
- package/dist/src/views/auth/settings/overview/overview.d.ts.map +1 -1
- package/dist/src/views/auth/settings/overview/overview.js +1 -1
- package/dist/src/views/auth/settings/security/security.d.ts.map +1 -1
- package/dist/src/views/auth/settings/security/security.js +1 -1
- package/dist/src/views/auth/settings/shell-content.d.ts.map +1 -1
- package/dist/src/views/auth/settings/shell-content.js +1 -1
- package/dist/src/views/auth/sign-in/form/sign-in-form-content.d.ts.map +1 -1
- package/dist/src/views/auth/sign-in/form/sign-in-form-content.js +1 -1
- package/dist/src/views/auth/sign-in/form/use-sign-in-form.d.ts.map +1 -1
- package/dist/src/views/auth/sign-in/form/use-sign-in-form.js +1 -1
- package/dist/src/views/auth/sign-in/sign-in-content.d.ts.map +1 -1
- package/dist/src/views/auth/sign-in/sign-in-content.js +1 -1
- package/dist/src/views/auth/sign-up/form/sign-up-form-content.d.ts.map +1 -1
- package/dist/src/views/auth/sign-up/form/sign-up-form-content.js +1 -1
- package/dist/src/views/auth/sign-up/form/use-sign-up-form.d.ts.map +1 -1
- package/dist/src/views/auth/sign-up/form/use-sign-up-form.js +1 -1
- package/dist/src/views/auth/sign-up/sign-up-content.d.ts.map +1 -1
- package/dist/src/views/auth/sign-up/sign-up-content.js +1 -1
- package/dist/src/views/auth/sign-up/wrapper.d.ts.map +1 -1
- package/dist/src/views/auth/sign-up/wrapper.js +1 -1
- package/dist/src/views/auth/sso/buttons/sso-buttons-content.d.ts.map +1 -1
- package/dist/src/views/auth/sso/buttons/sso-buttons-content.js +1 -1
- package/dist/src/views/auth/sso/callback/sso-callback-content.d.ts.map +1 -1
- package/dist/src/views/auth/sso/callback/sso-callback-content.js +1 -1
- package/dist/src/views/auth/sso/callback/use-sso-callback.d.ts.map +1 -1
- package/dist/src/views/auth/sso/callback/use-sso-callback.js +1 -1
- 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 -1
- package/dist/src/views/files/actions/files-bulk-actions.d.ts.map +1 -1
- package/dist/src/views/files/actions/files-bulk-actions.js +1 -1
- package/dist/src/views/files/my-files-query.d.ts +2 -0
- package/dist/src/views/files/my-files-query.d.ts.map +1 -1
- package/dist/src/views/files/my-files-query.js +1 -1
- package/dist/src/views/files/my-files-table-content.d.ts.map +1 -1
- package/dist/src/views/files/my-files-table-content.js +1 -1
- package/dist/src/views/layouts/providers.d.ts +2 -2
- package/dist/src/views/layouts/providers.d.ts.map +1 -1
- package/dist/src/views/layouts/providers.js +1 -1
- package/dist/src/views/layouts/rate-limit-listener.d.ts.map +1 -1
- package/dist/src/views/layouts/rate-limit-listener.js +1 -1
- package/dist/src/views/layouts/theme/header/header-content.d.ts.map +1 -1
- package/dist/src/views/layouts/theme/header/header-content.js +1 -1
- package/dist/src/views/layouts/theme/header/user/user-header-content.d.ts.map +1 -1
- package/dist/src/views/layouts/theme/header/user/user-header-content.js +1 -1
- package/dist/src/views/layouts/theme/notification-listener.d.ts.map +1 -1
- package/dist/src/views/layouts/theme/notification-listener.js +1 -1
- 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 -1
- package/dist/src/views/search/search-controls-content.d.ts.map +1 -1
- package/dist/src/views/search/search-controls-content.js +1 -1
- package/dist/src/views/search/search-feed-content.d.ts.map +1 -1
- package/dist/src/views/search/search-feed-content.js +1 -1
- package/dist/src/views/search/search-feed-query.d.ts +2 -0
- package/dist/src/views/search/search-feed-query.d.ts.map +1 -1
- package/dist/src/views/search/search-feed-query.js +1 -1
- package/dist/src/vitnode.config.d.ts +6 -0
- package/dist/src/vitnode.config.d.ts.map +1 -1
- package/dist/src/ws/provider.d.ts.map +1 -1
- package/dist/src/ws/provider.js +1 -1
- package/dist/src/ws/use-websocket.d.ts.map +1 -1
- package/dist/src/ws/use-websocket.js +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/eslint.config.mjs +4 -11
- package/package.json +12 -2
- package/src/locales/en.json +45 -2
- package/src/locales/pl.json +44 -1
- package/src/tiptap.css +103 -6
- package/dist/src/api/modules/users/routes/test.route.d.ts +0 -27
- package/dist/src/api/modules/users/routes/test.route.d.ts.map +0 -1
- package/dist/src/api/modules/users/routes/test.route.js +0 -1
- package/dist/src/tanstack/admin/content/form/server.d.ts +0 -10
- package/dist/src/tanstack/admin/content/form/server.d.ts.map +0 -1
- package/dist/src/tanstack/admin/content/form/server.js +0 -1
- package/dist/src/tanstack/admin/content/server.d.ts +0 -26
- package/dist/src/tanstack/admin/content/server.d.ts.map +0 -1
- package/dist/src/tanstack/admin/content/server.js +0 -1
- package/dist/src/tanstack/admin/cron/server.d.ts +0 -24
- package/dist/src/tanstack/admin/cron/server.d.ts.map +0 -1
- package/dist/src/tanstack/admin/cron/server.js +0 -1
- package/dist/src/tanstack/admin/dashboard/server.d.ts +0 -9
- package/dist/src/tanstack/admin/dashboard/server.d.ts.map +0 -1
- package/dist/src/tanstack/admin/dashboard/server.js +0 -1
- package/dist/src/tanstack/admin/debug/server.d.ts +0 -49
- package/dist/src/tanstack/admin/debug/server.d.ts.map +0 -1
- package/dist/src/tanstack/admin/debug/server.js +0 -1
- package/dist/src/tanstack/admin/files/server.d.ts +0 -40
- package/dist/src/tanstack/admin/files/server.d.ts.map +0 -1
- package/dist/src/tanstack/admin/files/server.js +0 -1
- package/dist/src/tanstack/admin/integrations/server.d.ts +0 -47
- package/dist/src/tanstack/admin/integrations/server.d.ts.map +0 -1
- package/dist/src/tanstack/admin/integrations/server.js +0 -1
- package/dist/src/tanstack/admin/not-found.d.ts +0 -4
- package/dist/src/tanstack/admin/not-found.d.ts.map +0 -1
- package/dist/src/tanstack/admin/not-found.js +0 -1
- package/dist/src/tanstack/admin/queue/server.d.ts +0 -28
- package/dist/src/tanstack/admin/queue/server.d.ts.map +0 -1
- package/dist/src/tanstack/admin/queue/server.js +0 -1
- package/dist/src/tanstack/admin/roles/server.d.ts +0 -32
- package/dist/src/tanstack/admin/roles/server.d.ts.map +0 -1
- package/dist/src/tanstack/admin/roles/server.js +0 -1
- package/dist/src/tanstack/admin/search-index/server.d.ts +0 -29
- package/dist/src/tanstack/admin/search-index/server.d.ts.map +0 -1
- package/dist/src/tanstack/admin/search-index/server.js +0 -1
- package/dist/src/tanstack/admin/staff/server.d.ts +0 -90
- package/dist/src/tanstack/admin/staff/server.d.ts.map +0 -1
- package/dist/src/tanstack/admin/staff/server.js +0 -1
- package/dist/src/tanstack/admin/users/server.d.ts +0 -72
- package/dist/src/tanstack/admin/users/server.d.ts.map +0 -1
- package/dist/src/tanstack/admin/users/server.js +0 -1
- package/dist/src/tanstack/auth/middleware-config-server.d.ts +0 -4
- package/dist/src/tanstack/auth/middleware-config-server.d.ts.map +0 -1
- package/dist/src/tanstack/auth/middleware-config-server.js +0 -1
- package/dist/src/tanstack/devices/server.d.ts +0 -14
- package/dist/src/tanstack/devices/server.d.ts.map +0 -1
- package/dist/src/tanstack/devices/server.js +0 -1
- package/dist/src/tanstack/files/server.d.ts +0 -27
- package/dist/src/tanstack/files/server.d.ts.map +0 -1
- package/dist/src/tanstack/files/server.js +0 -1
- package/dist/src/tanstack/routes/main/not-found.d.ts +0 -3
- package/dist/src/tanstack/routes/main/not-found.d.ts.map +0 -1
- package/dist/src/tanstack/routes/main/not-found.js +0 -1
- package/dist/src/tanstack/search/server.d.ts +0 -35
- package/dist/src/tanstack/search/server.d.ts.map +0 -1
- package/dist/src/tanstack/search/server.js +0 -1
- package/test-fixtures/next-specimen/entry.ts +0 -2
- package/test-fixtures/next-specimen/hop.ts +0 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
import{and,eq}from"drizzle-orm";import{HTTPException}from"hono/http-exception";import{core_content_file_refs}from"../../database/content.js";import{core_files}from"../../database/files.js";import{isPgReferenceViolation}from"../../lib/api/pg-error.js";import{buildStorageKey,generateStorageFileName,replaceFileExtension}from"../../lib/api/upload.js";import{STORAGE_FILE_IN_USE}from"../../lib/files/in-use.js";import{formatBytes}from"../../lib/format-bytes.js";const DEFAULT_IMAGE_QUALITY=85;const PROCESSABLE_IMAGE_MIME_TYPES=new Set(["image/avif","image/jpeg","image/png","image/tiff","image/webp"]);export{STORAGE_FILE_IN_USE}from"../../lib/files/in-use.js";const storageFileInUse=body=>new HTTPException(409,{res:Response.json({code:STORAGE_FILE_IN_USE,...body},{status:409})});export class StorageImageUnprocessableError extends HTTPException{constructor(message){super(400,{message});this.name="StorageImageUnprocessableError"}}const WEBP_MAX_SIDE=16383;const SKIPPED_WEBP_DIMENSIONS="webp-dimension-limit";const exceedsWebpLimit=dimensions=>dimensions!==null&&(dimensions.width>WEBP_MAX_SIDE||dimensions.height>WEBP_MAX_SIDE);const imageFormatName=mimeType=>(mimeType.split("/")[1]??mimeType).toUpperCase();const reasonSuffix=error=>{const first=error instanceof Error?error.message.split("\n")[0]?.trim().replace(/[.:]+$/,"")??"":"";return first===""?"":`: ${first.slice(0,160)}`};const imageEncodeFailure=({dimensions,error,mimeType,targetFormat})=>{const size=dimensions?`${dimensions.width}\u00d7${dimensions.height} pixels`:"this size";const target=targetFormat.toUpperCase();const tooLarge=error instanceof Error&&/too large for the .* format/i.test(error.message);if(tooLarge){const limit=targetFormat==="webp"?` ${target} allows at most ${WEBP_MAX_SIDE} pixels per side.`:"";return new StorageImageUnprocessableError(`This image is ${size}, which is too large to convert to ${target}.${limit} Resize it and upload it again.`)}return new HTTPException(400,{message:`This ${imageFormatName(mimeType)} file is damaged${reasonSuffix(error)}. Its header reads as ${size}, but the image data could not be decoded - the file is most likely truncated or was cut short in transfer.`})};export class StorageModel{constructor(c){this.c=c}c;async processImage(body,mimeType){const image=this.c.get("core")?.storage?.image;if(!image||!PROCESSABLE_IMAGE_MIME_TYPES.has(mimeType)){return{body,mimeType,extension:null,dimensions:null,skippedConversion:null}}const quality=image.quality??DEFAULT_IMAGE_QUALITY;const toWebp=image.webp!==false;let sharp;try{const{default:s}=await import("sharp");sharp=s}catch(err){throw new HTTPException(500,{message:"The image optimization library (sharp) failed to load, so images cannot be processed. Install `sharp` on the API server, or remove `storage.image` from the API config to store images as they are uploaded."})}let metadata;try{metadata=await sharp(body).metadata()}catch(error){throw new HTTPException(400,{message:`Could not read this ${imageFormatName(mimeType)} file${reasonSuffix(error)}. It may be truncated, or another format saved under the wrong extension.`})}if(!metadata.format){return{body,mimeType,extension:null,dimensions:null,skippedConversion:null}}const dimensions=metadata.width&&metadata.height?{width:metadata.width,height:metadata.height}:null;const asWebp=toWebp&&!exceedsWebpLimit(dimensions);const targetFormat=asWebp?"webp":metadata.format;let output;try{output=await sharp(body).toFormat(targetFormat,{quality}).toBuffer()}catch(error){throw imageEncodeFailure({dimensions,error,mimeType,targetFormat})}return{body:output,mimeType:asWebp?"image/webp":mimeType,extension:asWebp?".webp":null,dimensions,skippedConversion:toWebp&&!asWebp?SKIPPED_WEBP_DIMENSIONS:null}}requireProvider(){const provider=this.c.get("core").storage?.adapter;if(!provider){throw new HTTPException(500,{message:"No storage adapter is configured, so there is nowhere to put this file. Set `storage.adapter` in the API config."})}return provider}async delete(key){await this.requireProvider().delete(key)}async deleteFile(id,{force=false,ownerId}={}){const db=this.c.get("db");const where=ownerId===undefined?eq(core_files.id,id):and(eq(core_files.id,id),eq(core_files.userId,ownerId));const deleted=await db.transaction(async tx=>{const pins=await tx.delete(core_content_file_refs).where(eq(core_content_file_refs.fileId,id)).returning({id:core_content_file_refs.id});let row;try{[row]=await tx.delete(core_files).where(where).returning({key:core_files.key})}catch(error){if(!isPgReferenceViolation(error))throw error;throw storageFileInUse({content:true,id,revisions:pins.length})}if(!row){throw new HTTPException(404,{message:"File not found"})}if(!force&&pins.length>0){throw storageFileInUse({content:false,id,revisions:pins.length})}return row});const provider=this.c.get("core").storage?.adapter;if(provider){await provider.delete(deleted.key).catch(()=>undefined)}}getUrl(key){return this.requireProvider().getUrl(key)}async upload({allowedMimeTypes,file,folder,maxBytes,metadata,userId}){const provider=this.requireProvider();if(maxBytes!==undefined&&file.size>maxBytes){throw new HTTPException(400,{message:`This file is ${formatBytes(file.size)}. The maximum is ${formatBytes(maxBytes)}.`})}if(allowedMimeTypes&&!allowedMimeTypes.includes(file.type)){throw new HTTPException(400,{message:`"${file.type||"unknown"}" is not an accepted file type here. Accepted: ${allowedMimeTypes.join(", ")}.`})}const processed=await this.processImage(Buffer.from(await file.arrayBuffer()),file.type);const displayName=processed.extension?replaceFileExtension(file.name,processed.extension):file.name;const key=buildStorageKey({folder,fileName:generateStorageFileName(file.name,processed.extension??undefined)});const result=await provider.upload({key,body:processed.body,contentType:processed.mimeType||undefined});const ownerId=userId!==undefined?userId:this.c.get("admin")?.user.id??this.c.get("user")?.id??null;const mimeType=processed.mimeType||null;const size=processed.body.length;let created;try{[created]=await this.c.get("db").insert(core_files).values({name:displayName,key:result.key,folder,mimeType,size,userId:ownerId,pluginId:this.c.get("plugin")?.id??null,metadata:{...metadata??{},...processed.dimensions?{dimensions:processed.dimensions}:{},...processed.skippedConversion?{skippedConversion:processed.skippedConversion}:{}}}).returning({id:core_files.id})}catch(error){await provider.delete(result.key).catch(()=>undefined);throw error}if(!created){await provider.delete(result.key).catch(()=>undefined);throw new HTTPException(500,{message:"The file was stored but could not be recorded in the database, so it cannot be referenced. Nothing was kept - try again."})}return{...result,dimensions:processed.dimensions,id:created.id,mimeType,name:displayName,size}}}
|
|
1
|
+
import{and,eq}from"drizzle-orm";import{HTTPException}from"hono/http-exception";import{core_content_file_refs}from"../../database/content.js";import{core_files}from"../../database/files.js";import{isPgReferenceViolation}from"../../lib/api/pg-error.js";import{buildStorageKey,generateStorageFileName,replaceFileExtension}from"../../lib/api/upload.js";import{STORAGE_FILE_IN_USE}from"../../lib/files/in-use.js";import{formatBytes}from"../../lib/format-bytes.js";const DEFAULT_IMAGE_QUALITY=85;const PROCESSABLE_IMAGE_MIME_TYPES=new Set(["image/avif","image/jpeg","image/png","image/tiff","image/webp"]);export{STORAGE_FILE_IN_USE}from"../../lib/files/in-use.js";const storageFileInUse=body=>new HTTPException(409,{res:Response.json({code:STORAGE_FILE_IN_USE,...body},{status:409})});export class StorageImageUnprocessableError extends HTTPException{constructor(message){super(400,{message});this.name="StorageImageUnprocessableError"}}const WEBP_MAX_SIDE=16383;const SKIPPED_WEBP_DIMENSIONS="webp-dimension-limit";const exceedsWebpLimit=dimensions=>dimensions!==null&&(dimensions.width>WEBP_MAX_SIDE||dimensions.height>WEBP_MAX_SIDE);const imageFormatName=mimeType=>(mimeType.split("/")[1]??mimeType).toUpperCase();const reasonSuffix=error=>{const first=error instanceof Error?error.message.split("\n")[0]?.trim().replace(/[.:]+$/,"")??"":"";return first===""?"":`: ${first.slice(0,160)}`};const imageEncodeFailure=({dimensions,error,mimeType,targetFormat})=>{const size=dimensions?`${dimensions.width}\u00d7${dimensions.height} pixels`:"this size";const target=targetFormat.toUpperCase();const tooLarge=error instanceof Error&&/too large for the .* format/i.test(error.message);if(tooLarge){const limit=targetFormat==="webp"?` ${target} allows at most ${WEBP_MAX_SIDE} pixels per side.`:"";return new StorageImageUnprocessableError(`This image is ${size}, which is too large to convert to ${target}.${limit} Resize it and upload it again.`)}return new HTTPException(400,{message:`This ${imageFormatName(mimeType)} file is damaged${reasonSuffix(error)}. Its header reads as ${size}, but the image data could not be decoded - the file is most likely truncated or was cut short in transfer.`})};export class StorageModel{constructor(c){this.c=c}c;async processImage(body,mimeType){const image=this.c.get("core")?.storage?.image;if(!image||!PROCESSABLE_IMAGE_MIME_TYPES.has(mimeType)){return{body,mimeType,extension:null,dimensions:null,skippedConversion:null}}const quality=image.quality??DEFAULT_IMAGE_QUALITY;const toWebp=image.webp!==false;let sharp;try{const{default:s}=await import("sharp");sharp=s}catch(err){throw new HTTPException(500,{message:"The image optimization library (sharp) failed to load, so images cannot be processed. Install `sharp` on the API server, or remove `storage.image` from the API config to store images as they are uploaded."})}let metadata;try{metadata=await sharp(body).metadata()}catch(error){throw new HTTPException(400,{message:`Could not read this ${imageFormatName(mimeType)} file${reasonSuffix(error)}. It may be truncated, or another format saved under the wrong extension.`})}if(!metadata.format){return{body,mimeType,extension:null,dimensions:null,skippedConversion:null}}const dimensions=metadata.width&&metadata.height?{width:metadata.width,height:metadata.height}:null;const asWebp=toWebp&&!exceedsWebpLimit(dimensions);const targetFormat=asWebp?"webp":metadata.format;let output;try{output=await sharp(body).toFormat(targetFormat,{quality}).toBuffer()}catch(error){throw imageEncodeFailure({dimensions,error,mimeType,targetFormat})}return{body:output,mimeType:asWebp?"image/webp":mimeType,extension:asWebp?".webp":null,dimensions,skippedConversion:toWebp&&!asWebp?SKIPPED_WEBP_DIMENSIONS:null}}requireProvider(){const provider=this.c.get("core").storage?.adapter;if(!provider){throw new HTTPException(500,{message:"No storage adapter is configured, so there is nowhere to put this file. Set `storage.adapter` in the API config."})}return provider}async delete(key){await this.requireProvider().delete(key)}async deleteFile(id,{force=false,ownerId}={}){const db=this.c.get("db");const where=ownerId===undefined?eq(core_files.id,id):and(eq(core_files.id,id),eq(core_files.userId,ownerId));const deleted=await db.transaction(async tx=>{const pins=await tx.delete(core_content_file_refs).where(eq(core_content_file_refs.fileId,id)).returning({id:core_content_file_refs.id});let row;try{[row]=await tx.delete(core_files).where(where).returning({key:core_files.key})}catch(error){if(!isPgReferenceViolation(error))throw error;throw storageFileInUse({content:true,id,revisions:pins.length})}if(!row){throw new HTTPException(404,{message:"File not found"})}if(!force&&pins.length>0){throw storageFileInUse({content:false,id,revisions:pins.length})}return row});const provider=this.c.get("core").storage?.adapter;if(provider){await provider.delete(deleted.key).catch(()=>undefined)}}getUrl(key){return this.requireProvider().getUrl(key)}async upload({allowedMimeTypes,file,folder,maxBytes,metadata,userId}){const provider=this.requireProvider();if(maxBytes!==undefined&&file.size>maxBytes){throw new HTTPException(400,{message:`This file is ${formatBytes(file.size)}. The maximum is ${formatBytes(maxBytes)}.`})}if(allowedMimeTypes&&!allowedMimeTypes.includes(file.type)){throw new HTTPException(400,{message:`"${file.type||"unknown"}" is not an accepted file type here. Accepted: ${allowedMimeTypes.join(", ")}.`})}const processed=await this.processImage(Buffer.from(await file.arrayBuffer()),file.type);const displayName=processed.extension?replaceFileExtension(file.name,processed.extension):file.name;const key=buildStorageKey({folder,fileName:generateStorageFileName(file.name,processed.extension??undefined,processed.mimeType)});const result=await provider.upload({key,body:processed.body,contentType:processed.mimeType||undefined});const ownerId=userId!==undefined?userId:this.c.get("admin")?.user.id??this.c.get("user")?.id??null;const mimeType=processed.mimeType||null;const size=processed.body.length;let created;try{[created]=await this.c.get("db").insert(core_files).values({name:displayName,key:result.key,folder,mimeType,size,userId:ownerId,pluginId:this.c.get("plugin")?.id??null,metadata:{...metadata??{},...processed.dimensions?{dimensions:processed.dimensions}:{},...processed.skippedConversion?{skippedConversion:processed.skippedConversion}:{}}}).returning({id:core_files.id})}catch(error){await provider.delete(result.key).catch(()=>undefined);throw error}if(!created){await provider.delete(result.key).catch(()=>undefined);throw new HTTPException(500,{message:"The file was stored but could not be recorded in the database, so it cannot be referenced. Nothing was kept - try again."})}return{...result,dimensions:processed.dimensions,id:created.id,mimeType,name:displayName,size}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sign-in-with-passwords.d.ts","sourceRoot":"","sources":["../../../../../src/api/models/user/sign-in-with-passwords.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AASpC,eAAO,MAAM,kBAAkB,GAAU,yBAItC;IACD,CAAC,EAAE,OAAO,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;;;
|
|
1
|
+
{"version":3,"file":"sign-in-with-passwords.d.ts","sourceRoot":"","sources":["../../../../../src/api/models/user/sign-in-with-passwords.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AASpC,eAAO,MAAM,kBAAkB,GAAU,yBAItC;IACD,CAAC,EAAE,OAAO,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;;;EAgCA,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{HTTPException}from"hono/http-exception";import{matchesEmail,pickAccountForEmail}from"../../lib/user-email-lookup.js";import{core_users}from"../../../database/users.js";import{PasswordModel}from"../password.js";export const signInWithPassword=async({email,password,c})=>{const candidates=await c.get("db").select({id:core_users.id,email:core_users.email,password:core_users.password}).from(core_users).where(matchesEmail(email)).limit(2);const user=pickAccountForEmail(candidates,email);const passwords=new PasswordModel;if(!user?.password){await passwords.verifyDummyPassword(password);throw new HTTPException(403)}const validPassword=await passwords.verifyPassword(password,user.password);if(!validPassword){throw new HTTPException(403)}return{id:user.id,email:user.email}};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Context } from "hono";
|
|
2
|
-
export declare const signUp: ({ email, name, newsletter, hashedPassword, }: {
|
|
2
|
+
export declare const signUp: ({ email: typedEmail, name, newsletter, hashedPassword, }: {
|
|
3
3
|
email: string;
|
|
4
4
|
hashedPassword: string | undefined;
|
|
5
5
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sign-up.d.ts","sourceRoot":"","sources":["../../../../../src/api/models/user/sign-up.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"sign-up.d.ts","sourceRoot":"","sources":["../../../../../src/api/models/user/sign-up.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAmEpC,eAAO,MAAM,MAAM,GACjB,0DAKG;IACD,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,EACD,GAAG,OAAO;;;;;;;;;;;;;EAmEX,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{and,count,eq,or}from"drizzle-orm";import{HTTPException}from"hono/http-exception";import{generateAvatarColor}from"../../modules/users/avatar-color.js";import{core_roles}from"../../../database/roles.js";import{core_users}from"../../../database/users.js";import{removeSpecialCharacters}from"../../../lib/special-characters.js";const getDefaultData=async c=>{const[countUsers]=await c.get("db").select({count:count()}).from(core_users);if(countUsers.count===0){const[defaultRole]=await c.get("db").select({id:core_roles.id}).from(core_roles).where(and(eq(core_roles.default,false),eq(core_roles.root,true))).limit(1);if(!defaultRole){throw new HTTPException(400,{message:"Default group not found."})}return{roleId:defaultRole.id,emailVerified:true}}const[defaultRole]=await c.get("db").select({id:core_roles.id}).from(core_roles).where(and(eq(core_roles.default,true),eq(core_roles.root,false))).limit(1);if(!defaultRole){throw new HTTPException(400,{message:"Default role not found."})}return{roleId:defaultRole.id,emailVerified:!c.get("core").email?.adapter}};export const signUp=async({email,name,newsletter,hashedPassword},c)=>{const convertToNameSEO=removeSpecialCharacters(name);const checkIfUserExist=await c.get("db").select({email:core_users.email,name_code:core_users.nameCode}).from(core_users).where(or(
|
|
1
|
+
import{and,count,eq,or}from"drizzle-orm";import{HTTPException}from"hono/http-exception";import{emailAliases,matchesEmail}from"../../lib/user-email-lookup.js";import{generateAvatarColor}from"../../modules/users/avatar-color.js";import{core_roles}from"../../../database/roles.js";import{core_users}from"../../../database/users.js";import{canonicalizeEmail}from"../../../lib/email-canonical.js";import{removeSpecialCharacters}from"../../../lib/special-characters.js";const getDefaultData=async c=>{const[countUsers]=await c.get("db").select({count:count()}).from(core_users);if(countUsers.count===0){const[defaultRole]=await c.get("db").select({id:core_roles.id}).from(core_roles).where(and(eq(core_roles.default,false),eq(core_roles.root,true))).limit(1);if(!defaultRole){throw new HTTPException(400,{message:"Default group not found."})}return{roleId:defaultRole.id,emailVerified:true}}const[defaultRole]=await c.get("db").select({id:core_roles.id}).from(core_roles).where(and(eq(core_roles.default,true),eq(core_roles.root,false))).limit(1);if(!defaultRole){throw new HTTPException(400,{message:"Default role not found."})}return{roleId:defaultRole.id,emailVerified:!c.get("core").email?.adapter}};export const signUp=async({email:typedEmail,name,newsletter,hashedPassword},c)=>{const convertToNameSEO=removeSpecialCharacters(name);const email=canonicalizeEmail(typedEmail);const takenAddresses=new Set(emailAliases(typedEmail));const checkIfUserExist=await c.get("db").select({email:core_users.email,name_code:core_users.nameCode}).from(core_users).where(or(matchesEmail(typedEmail),eq(core_users.nameCode,convertToNameSEO)));const findEmail=checkIfUserExist.find(user=>takenAddresses.has(user.email));if(findEmail){throw new HTTPException(409,{message:"Email already exists"})}const findName=checkIfUserExist.find(user=>user.name_code===convertToNameSEO);if(findName){throw new HTTPException(409,{message:"Name already exists"})}const{roleId,emailVerified}=await getDefaultData(c);const[data]=await c.get("db").insert(core_users).values({email,name,nameCode:convertToNameSEO,newsletter,password:hashedPassword,avatarColor:generateAvatarColor(name),roleId,emailVerified,ipAddress:c.get("ipAddress")}).returning();const{password:_,...user}=data;await c.get("events").emit("user.created",{userId:data.id,email:data.email,name:data.name,emailVerified:data.emailVerified});return user};
|
|
@@ -39,7 +39,7 @@ export declare class UserModel {
|
|
|
39
39
|
id: number;
|
|
40
40
|
email: string;
|
|
41
41
|
}>;
|
|
42
|
-
signUp: ({ email, name, newsletter, hashedPassword, }: {
|
|
42
|
+
signUp: ({ email: typedEmail, name, newsletter, hashedPassword, }: {
|
|
43
43
|
email: string;
|
|
44
44
|
hashedPassword: string | undefined;
|
|
45
45
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../src/api/models/user.ts"],"names":[],"mappings":"AAKA,qBAAa,SAAS;IACpB,WAAW;;;;;;;;;;;;;;;cAAe;IAC1B,iBAAiB;;;;;;;;;;;;;;;cAAqB;IACtC,kBAAkB;;;;;;;OAAsB;IACxC,MAAM;;;;
|
|
1
|
+
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../src/api/models/user.ts"],"names":[],"mappings":"AAKA,qBAAa,SAAS;IACpB,WAAW;;;;;;;;;;;;;;;cAAe;IAC1B,iBAAiB;;;;;;;;;;;;;;;cAAqB;IACtC,kBAAkB;;;;;;;OAAsB;IACxC,MAAM;;;;kBAE45C,CAAC;;;;;;;;;;;;;;OAFn5C;CACjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.route.d.ts","sourceRoot":"","sources":["../../../../../../../../src/api/modules/admin/advanced/queue/routes/get.route.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,KAAK,CAAC;AAkBpB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"get.route.d.ts","sourceRoot":"","sources":["../../../../../../../../src/api/modules/admin/advanced/queue/routes/get.route.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,KAAK,CAAC;AAkBpB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiG7B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{inArray}from"drizzle-orm";import z from"zod";import{buildRoute}from"../../../../../lib/route.js";import{withPagination,zodPaginationPageInfo,zodPaginationQuery}from"../../../../../lib/with-pagination.js";import{CONFIG_PLUGIN}from"../../../../../../config.js";import{core_queue}from"../../../../../../database/queue.js";const QUEUE_STATUSES=["pending","processing","completed","failed"];export const getQueueTasksRoute=buildRoute({pluginId:CONFIG_PLUGIN.pluginId,adminStaffPermission:{module:"queue",permission:"can_view"},route:{method:"get",description:"Get Admin Queue Tasks",path:"/",request:{query:zodPaginationQuery.extend({order:z.enum(["asc","desc"]).optional(),orderBy:z.enum(["createdAt","availableAt","status"]).optional(),status:z.string().optional()})},responses:{200:{content:{"application/json":{schema:z.object({edges:z.array(z.object({id:z.number(),pluginId:z.string(),name:z.string(),queue:z.string(),status:z.enum(QUEUE_STATUSES),priority:z.number(),attempts:z.number(),maxAttempts:z.number(),availableAt:z.date(),reservedAt:z.date().nullable(),lastError:z.string().nullable(),createdAt:z.date(),completedAt:z.date().nullable()})),pageInfo:zodPaginationPageInfo})}},description:"List of queue tasks"}}},handler:async c=>{const query=c.req.valid("query");const statuses=(query.status?.split(",")??[]).filter(status=>QUEUE_STATUSES.includes(status));const data=await withPagination({params:{query},c,primaryCursor:core_queue.id,where:statuses.length?inArray(core_queue.status,statuses):undefined,query:async({cursorSelection,limit,where,orderBy})=>await c.get("db").select({...cursorSelection,id:core_queue.id,pluginId:core_queue.pluginId,name:core_queue.name,queue:core_queue.queue,status:core_queue.status,priority:core_queue.priority,attempts:core_queue.attempts,maxAttempts:core_queue.maxAttempts,availableAt:core_queue.availableAt,reservedAt:core_queue.reservedAt,lastError:core_queue.lastError,createdAt:core_queue.createdAt,completedAt:core_queue.completedAt}).from(core_queue).where(where).orderBy(orderBy).limit(limit),table:core_queue,orderBy:{column:query.orderBy?core_queue[query.orderBy]:core_queue.createdAt,order:query.order??"desc"}});return c.json(data)}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"show.route.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/modules/admin/roles/routes/show.route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AA8BtC,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"show.route.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/modules/admin/roles/routes/show.route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AA8BtC,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiG7B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{z}from"@hono/zod-openapi";import{and,eq}from"drizzle-orm";import{buildRoute}from"../../../../lib/route.js";import{CONFIG_PLUGIN}from"../../../../../config.js";import{core_languages_words}from"../../../../../database/languages.js";import{core_roles}from"../../../../../database/roles.js";const roleAdminSchema=z.object({id:z.number(),name:z.array(z.object({name:z.string(),languageCode:z.string()})),color:z.string().nullable(),protected:z.boolean(),default:z.boolean(),root:z.boolean(),guest:z.boolean(),allowUploadFiles:z.boolean(),totalMaxStorage:z.number().nullable(),maxStorageForSubmit:z.number().nullable(),createdAt:z.date(),updatedAt:z.date()});export const showRoleAdminRoute=buildRoute({pluginId:CONFIG_PLUGIN.pluginId,route:{method:"get",description:"Get a single role by id (Admin only)",path:"/{id}",request:{params:z.object({id:z.string().openapi({example:"1"})})},responses:{200:{content:{"application/json":{schema:roleAdminSchema}},description:"Role found"},403:{description:"Access Denied"},404:{content:{"application/json":{schema:z.object({error:z.string()})}},description:"Role not found"}}},handler:async c=>{const{id}=c.req.valid("param");const roleId=Number(id);if(!Number.isInteger(roleId)){return c.json({error:"Role not found"},404)}const[role]=await c.get("db").select({id:core_roles.id,color:core_roles.color,protected:core_roles.protected,default:core_roles.default,root:core_roles.root,guest:core_roles.guest,allowUploadFiles:core_roles.allowUploadFiles,totalMaxStorage:core_roles.totalMaxStorage,maxStorageForSubmit:core_roles.maxStorageForSubmit,createdAt:core_roles.createdAt}).from(core_roles).where(eq(core_roles.id,roleId)).limit(1);if(!role){return c.json({error:"Role not found"},404)}const names=await c.get("db").select({languageCode:core_languages_words.languageCode,value:core_languages_words.value}).from(core_languages_words).where(and(eq(core_languages_words.tableName,"core_roles"),eq(core_languages_words.variable,"name"),eq(core_languages_words.pluginCode,"core"),eq(core_languages_words.itemId,roleId)));return c.json({...role,name:names.map(word=>({name:word.value,languageCode:word.languageCode}))},200)}});
|
|
1
|
+
import{z}from"@hono/zod-openapi";import{and,eq}from"drizzle-orm";import{buildRoute}from"../../../../lib/route.js";import{CONFIG_PLUGIN}from"../../../../../config.js";import{core_languages_words}from"../../../../../database/languages.js";import{core_roles}from"../../../../../database/roles.js";const roleAdminSchema=z.object({id:z.number(),name:z.array(z.object({name:z.string(),languageCode:z.string()})),color:z.string().nullable(),protected:z.boolean(),default:z.boolean(),root:z.boolean(),guest:z.boolean(),allowUploadFiles:z.boolean(),totalMaxStorage:z.number().nullable(),maxStorageForSubmit:z.number().nullable(),createdAt:z.date(),updatedAt:z.date()});export const showRoleAdminRoute=buildRoute({pluginId:CONFIG_PLUGIN.pluginId,adminStaffPermission:{module:"roles",permission:"can_view"},route:{method:"get",description:"Get a single role by id (Admin only)",path:"/{id}",request:{params:z.object({id:z.string().openapi({example:"1"})})},responses:{200:{content:{"application/json":{schema:roleAdminSchema}},description:"Role found"},403:{description:"Access Denied"},404:{content:{"application/json":{schema:z.object({error:z.string()})}},description:"Role not found"}}},handler:async c=>{const{id}=c.req.valid("param");const roleId=Number(id);if(!Number.isInteger(roleId)){return c.json({error:"Role not found"},404)}const[role]=await c.get("db").select({id:core_roles.id,color:core_roles.color,protected:core_roles.protected,default:core_roles.default,root:core_roles.root,guest:core_roles.guest,allowUploadFiles:core_roles.allowUploadFiles,totalMaxStorage:core_roles.totalMaxStorage,maxStorageForSubmit:core_roles.maxStorageForSubmit,createdAt:core_roles.createdAt}).from(core_roles).where(eq(core_roles.id,roleId)).limit(1);if(!role){return c.json({error:"Role not found"},404)}const names=await c.get("db").select({languageCode:core_languages_words.languageCode,value:core_languages_words.value}).from(core_languages_words).where(and(eq(core_languages_words.tableName,"core_roles"),eq(core_languages_words.variable,"name"),eq(core_languages_words.pluginCode,"core"),eq(core_languages_words.itemId,roleId)));return c.json({...role,name:names.map(word=>({name:word.value,languageCode:word.languageCode}))},200)}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifications.route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/modules/admin/routes/notifications.route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,yBAAyB;;;;;;;;;;iBAKpC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"notifications.route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/modules/admin/routes/notifications.route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,yBAAyB;;;;;;;;;;iBAKpC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmDhC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{HTTPException}from"hono/http-exception";import{z}from"zod";import{buildRoute}from"../../../lib/route.js";import{CONFIG_PLUGIN}from"../../../../config.js";import{notificationsChannel}from"../../../../ws/notifications.js";export const zodSendNotificationSchema=z.object({description:z.string().optional(),title:z.string().min(1,"Title is required"),type:z.enum(["error","info","success","warning"]).optional(),userId:z.number()});export const sendNotificationRoute=buildRoute({pluginId:CONFIG_PLUGIN.pluginId,route:{method:"post",description:"Send a notification to a user",path:"/notifications/send",request:{body:{content:{"application/json":{schema:zodSendNotificationSchema}}}},responses:{200:{content:{"application/json":{schema:z.object({success:z.boolean()})}},description:"Notification sent"},403:{description:"Access Denied"}}},handler:c=>{const admin=c.get("admin")?.user;if(!admin)throw new HTTPException(403);const{userId,title,description,type}=c.req.valid("json");c.get("realtime").sendToUser(userId,notificationsChannel,{description,title,type});return c.json({success:true})}});
|
|
1
|
+
import{HTTPException}from"hono/http-exception";import{z}from"zod";import{buildRoute}from"../../../lib/route.js";import{CONFIG_PLUGIN}from"../../../../config.js";import{notificationsChannel}from"../../../../ws/notifications.js";export const zodSendNotificationSchema=z.object({description:z.string().optional(),title:z.string().min(1,"Title is required"),type:z.enum(["error","info","success","warning"]).optional(),userId:z.number()});export const sendNotificationRoute=buildRoute({pluginId:CONFIG_PLUGIN.pluginId,adminStaffPermission:{module:"dashboard",permission:"can_edit"},route:{method:"post",description:"Send a notification to a user",path:"/notifications/send",request:{body:{content:{"application/json":{schema:zodSendNotificationSchema}}}},responses:{200:{content:{"application/json":{schema:z.object({success:z.boolean()})}},description:"Notification sent"},403:{description:"Access Denied"}}},handler:c=>{const admin=c.get("admin")?.user;if(!admin)throw new HTTPException(403);const{userId,title,description,type}=c.req.valid("json");c.get("realtime").sendToUser(userId,notificationsChannel,{description,title,type});return c.json({success:true})}});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Context } from "hono";
|
|
2
2
|
export declare const assertCanEditAdminTarget: (c: Context, userId: number) => Promise<void>;
|
|
3
|
+
export declare const assertCanAssignRoles: (c: Context, roleIds: number[]) => Promise<void>;
|
|
3
4
|
export declare const assertCanAssignPrimaryRole: (c: Context, roleId: number) => Promise<void>;
|
|
4
5
|
//# sourceMappingURL=assert-edit-user-permission.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assert-edit-user-permission.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/modules/admin/users/lib/assert-edit-user-permission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"assert-edit-user-permission.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/modules/admin/users/lib/assert-edit-user-permission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAoBpC,eAAO,MAAM,wBAAwB,GACnC,GAAG,OAAO,EACV,QAAQ,MAAM,KACb,OAAO,CAAC,IAAI,CAOd,CAAC;AAiCF,eAAO,MAAM,oBAAoB,GAC/B,GAAG,OAAO,EACV,SAAS,MAAM,EAAE,KAChB,OAAO,CAAC,IAAI,CAKd,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,GAAG,OAAO,EACV,QAAQ,MAAM,KACb,OAAO,CAAC,IAAI,CAEd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{eq}from"drizzle-orm";import{assertStaffPermission}from"../../../../lib/check-staff-permission.js";import{SessionAdminModel}from"../../../../models/session-admin.js";import{CONFIG_PLUGIN}from"../../../../../config.js";import{core_admin_permissions}from"../../../../../database/admins.js";const assertCanEditAdmin=async c=>{await assertStaffPermission(c,{type:"admin",plugin:CONFIG_PLUGIN.pluginId,module:"users",permission:"can_edit_admin"})};export const assertCanEditAdminTarget=async(c,userId)=>{const isTargetAdmin=await new SessionAdminModel(c).checkIfUserIsAdmin(userId);if(!isTargetAdmin)return;await assertCanEditAdmin(c)};
|
|
1
|
+
import{and,eq,inArray}from"drizzle-orm";import{assertStaffPermission}from"../../../../lib/check-staff-permission.js";import{SessionAdminModel}from"../../../../models/session-admin.js";import{CONFIG_PLUGIN}from"../../../../../config.js";import{core_admin_permissions}from"../../../../../database/admins.js";import{core_moderators_permissions}from"../../../../../database/moderators.js";import{core_roles}from"../../../../../database/roles.js";const assertCanEditAdmin=async c=>{await assertStaffPermission(c,{type:"admin",plugin:CONFIG_PLUGIN.pluginId,module:"users",permission:"can_edit_admin"})};export const assertCanEditAdminTarget=async(c,userId)=>{const isTargetAdmin=await new SessionAdminModel(c).checkIfUserIsAdmin(userId);if(!isTargetAdmin)return;await assertCanEditAdmin(c)};const rolesGrantStaffAccess=async(c,roleIds)=>{if(roleIds.length===0)return false;const db=c.get("db");const[rootRoles,adminRoles,moderatorRoles]=await Promise.all([db.select({id:core_roles.id}).from(core_roles).where(and(inArray(core_roles.id,roleIds),eq(core_roles.root,true))).limit(1),db.select({id:core_admin_permissions.id}).from(core_admin_permissions).where(inArray(core_admin_permissions.roleId,roleIds)).limit(1),db.select({id:core_moderators_permissions.id}).from(core_moderators_permissions).where(inArray(core_moderators_permissions.roleId,roleIds)).limit(1)]);return rootRoles.length>0||adminRoles.length>0||moderatorRoles.length>0};export const assertCanAssignRoles=async(c,roleIds)=>{const unique=[...new Set(roleIds)];if(!await rolesGrantStaffAccess(c,unique))return;await assertCanEditAdmin(c)};export const assertCanAssignPrimaryRole=async(c,roleId)=>{await assertCanAssignRoles(c,[roleId])};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.route.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/modules/admin/users/routes/update.route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"update.route.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/modules/admin/users/routes/update.route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAmBtC,eAAO,MAAM,wBAAwB;;;;;;iBA0BjC,CAAC;AAEL,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkQ/B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{z}from"@hono/zod-openapi";import{and,eq,inArray,ne}from"drizzle-orm";import{buildRoute}from"../../../../lib/route.js";import{invalidateStaffPermissionsForUser}from"../../../../lib/staff-permission-cache.js";import{CONFIG_PLUGIN}from"../../../../../config.js";import{core_roles}from"../../../../../database/roles.js";import{core_users,core_users_secondary_roles}from"../../../../../database/users.js";import{
|
|
1
|
+
import{z}from"@hono/zod-openapi";import{and,eq,inArray,ne}from"drizzle-orm";import{buildRoute}from"../../../../lib/route.js";import{invalidateStaffPermissionsForUser}from"../../../../lib/staff-permission-cache.js";import{matchesEmail}from"../../../../lib/user-email-lookup.js";import{invalidateSessionCacheForUser}from"../../../../models/session-revoke.js";import{CONFIG_PLUGIN}from"../../../../../config.js";import{core_roles}from"../../../../../database/roles.js";import{core_users,core_users_secondary_roles}from"../../../../../database/users.js";import{canonicalizeEmail}from"../../../../../lib/email-canonical.js";import{assertCanAssignRoles,assertCanEditAdminTarget}from"../lib/assert-edit-user-permission.js";const nameRegex=/^(?!.* {2})[\p{L}\p{N}._@ -]*$/u;export const zodUpdateUserAdminSchema=z.object({email:z.email().toLowerCase().openapi({example:"test@test.com"}),name:z.string().min(3).refine(val=>nameRegex.test(val),{message:"Invalid name"}).openapi({example:"test"}),nameCode:z.string().min(3).max(255).regex(/^[a-zA-Z0-9-]+$/,{message:"Invalid name code"}).openapi({example:"test"}),roleId:z.number().int().positive().openapi({example:1}),secondaryRoleIds:z.array(z.number().int().positive()).openapi({example:[2,3]})}).partial().refine(body=>Object.values(body).some(value=>value!==undefined),{message:"At least one field is required"});export const updateUserAdminRoute=buildRoute({pluginId:CONFIG_PLUGIN.pluginId,adminStaffPermission:{module:"users",permission:"can_edit"},route:{method:"patch",description:"Update a user's name or email by id (Admin only)",path:"/{id}",request:{params:z.object({id:z.string().openapi({example:"1"})}),body:{required:true,content:{"application/json":{schema:zodUpdateUserAdminSchema}}}},responses:{200:{content:{"application/json":{schema:z.object({id:z.number(),name:z.string(),email:z.email(),nameCode:z.string()})}},description:"User updated"},400:{content:{"application/json":{schema:z.object({error:z.string()})}},description:"Invalid role"},403:{description:"Access Denied"},404:{content:{"application/json":{schema:z.object({error:z.string()})}},description:"User not found"},409:{content:{"application/json":{schema:z.object({error:z.string()})}},description:"Email or name already exists"}}},handler:async c=>{const{id}=c.req.valid("param");const body=c.req.valid("json");const db=c.get("db");const userId=Number(id);if(!Number.isInteger(userId)){return c.json({error:"User not found"},404)}const[user]=await db.select({id:core_users.id,roleId:core_users.roleId}).from(core_users).where(eq(core_users.id,userId)).limit(1);if(!user){return c.json({error:"User not found"},404)}await assertCanEditAdminTarget(c,userId);const values={};if(body.email!==undefined){const[existing]=await db.select({id:core_users.id}).from(core_users).where(and(matchesEmail(body.email),ne(core_users.id,user.id))).limit(1);if(existing){return c.json({error:"Email already exists"},409)}values.email=canonicalizeEmail(body.email)}if(body.name!==undefined){const[existing]=await db.select({id:core_users.id}).from(core_users).where(and(eq(core_users.name,body.name),ne(core_users.id,user.id))).limit(1);if(existing){return c.json({error:"Name already exists"},409)}values.name=body.name}if(body.nameCode!==undefined){const[existing]=await db.select({id:core_users.id}).from(core_users).where(and(eq(core_users.nameCode,body.nameCode),ne(core_users.id,user.id))).limit(1);if(existing){return c.json({error:"Name code already exists"},409)}values.nameCode=body.nameCode}const effectivePrimaryId=body.roleId??user.roleId;const secondaryRoleIds=body.secondaryRoleIds!==undefined?[...new Set(body.secondaryRoleIds)].filter(id=>id!==effectivePrimaryId):undefined;const roleIdsToValidate=[...body.roleId!==undefined?[body.roleId]:[],...secondaryRoleIds??[]];if(roleIdsToValidate.length>0){const existingRoles=await db.select({id:core_roles.id,guest:core_roles.guest}).from(core_roles).where(inArray(core_roles.id,roleIdsToValidate));const assignableRoleIds=new Set(existingRoles.filter(role=>!role.guest).map(role=>role.id));if(roleIdsToValidate.some(id=>!assignableRoleIds.has(id))){return c.json({error:"Invalid role"},400)}}if(roleIdsToValidate.length>0){await assertCanAssignRoles(c,roleIdsToValidate)}if(body.roleId!==undefined){values.roleId=body.roleId}if(secondaryRoleIds!==undefined){await db.delete(core_users_secondary_roles).where(eq(core_users_secondary_roles.userId,user.id));if(secondaryRoleIds.length>0){await db.insert(core_users_secondary_roles).values(secondaryRoleIds.map(roleId=>({userId:user.id,roleId})))}}const rolesChanged=body.roleId!==undefined||secondaryRoleIds!==undefined;if(Object.keys(values).length>0){const[updated]=await db.update(core_users).set(values).where(eq(core_users.id,user.id)).returning({id:core_users.id,name:core_users.name,email:core_users.email,nameCode:core_users.nameCode});if(rolesChanged){await Promise.all([invalidateStaffPermissionsForUser(c,user.id),invalidateSessionCacheForUser(c,user.id)])}await c.get("events").emit("user.updated",{userId:updated.id,email:updated.email,name:updated.name});return c.json(updated,200)}const[current]=await db.select({id:core_users.id,name:core_users.name,email:core_users.email,nameCode:core_users.nameCode}).from(core_users).where(eq(core_users.id,user.id)).limit(1);if(rolesChanged){await Promise.all([invalidateStaffPermissionsForUser(c,user.id),invalidateSessionCacheForUser(c,user.id)])}await c.get("events").emit("user.updated",{userId:current.id,email:current.email,name:current.name});return c.json(current,200)}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/modules/search/routes/search.route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAgBtC,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;iBAuB7B,CAAC;
|
|
1
|
+
{"version":3,"file":"search.route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/modules/search/routes/search.route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAgBtC,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;iBAuB7B,CAAC;AA+BH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyDtB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{z}from"@hono/zod-openapi";import{CONFIG_PLUGIN}from"../../../../config.js";import{buildRoute}from"../../../lib/route.js";import{zodPaginationQuery}from"../../../lib/with-pagination.js";const zodSearchPageInfo=z.object({totalCount:z.number(),count:z.number(),hasNextPage:z.boolean(),hasPreviousPage:z.boolean(),startCursor:z.number().nullable(),endCursor:z.number().nullable()});export const zodSearchHitSchema=z.object({id:z.number(),pluginId:z.string(),itemType:z.string(),itemId:z.number(),languageCode:z.string(),authorId:z.number().nullable(),title:z.string(),content:z.string(),containerType:z.string().nullable(),containerId:z.number().nullable(),url:z.string().nullable(),metadata:z.record(z.string(),z.unknown()),createdAt:z.date(),score:z.number().nullable(),author:z.object({id:z.number(),name:z.string(),nameCode:z.string(),avatarColor:z.string()}).nullable()});export const searchRoute=buildRoute({pluginId:CONFIG_PLUGIN.pluginId,route:{method:"get",description:"Search and browse indexed community content.",path:"/",request:{query:zodPaginationQuery.extend({search:z.string().optional(),types:z.string().optional(),authorId:z.string().optional(),containerId:z.string().optional(),sort:z.enum(["newest","oldest","relevance"]).optional(),from:z.string().optional(),to:z.string().optional(),lang:z.string().optional()})},responses:{200:{content:{"application/json":{schema:z.object({edges:z.array(zodSearchHitSchema),pageInfo:zodSearchPageInfo})}},description:"Search results"}}},handler:async c=>{const query=c.req.valid("query");const result=await c.get("search").search({term:query.search,itemTypes:query.types?query.types.split(",").filter(Boolean):undefined,authorId:
|
|
1
|
+
import{z}from"@hono/zod-openapi";import{CONFIG_PLUGIN}from"../../../../config.js";import{buildRoute}from"../../../lib/route.js";import{zodPaginationQuery}from"../../../lib/with-pagination.js";const zodSearchPageInfo=z.object({totalCount:z.number(),count:z.number(),hasNextPage:z.boolean(),hasPreviousPage:z.boolean(),startCursor:z.number().nullable(),endCursor:z.number().nullable()});export const zodSearchHitSchema=z.object({id:z.number(),pluginId:z.string(),itemType:z.string(),itemId:z.number(),languageCode:z.string(),authorId:z.number().nullable(),title:z.string(),content:z.string(),containerType:z.string().nullable(),containerId:z.number().nullable(),url:z.string().nullable(),metadata:z.record(z.string(),z.unknown()),createdAt:z.date(),score:z.number().nullable(),author:z.object({id:z.number(),name:z.string(),nameCode:z.string(),avatarColor:z.string()}).nullable()});const positiveIntOrUndefined=value=>{if(value===undefined||value==="")return undefined;const parsed=Number(value);return Number.isSafeInteger(parsed)&&parsed>0?parsed:undefined};const dateOrUndefined=value=>{if(value===undefined||value==="")return undefined;const parsed=new Date(value);return Number.isNaN(parsed.getTime())?undefined:parsed};export const searchRoute=buildRoute({pluginId:CONFIG_PLUGIN.pluginId,route:{method:"get",description:"Search and browse indexed community content.",path:"/",request:{query:zodPaginationQuery.extend({search:z.string().optional(),types:z.string().optional(),authorId:z.string().optional(),containerId:z.string().optional(),sort:z.enum(["newest","oldest","relevance"]).optional(),from:z.string().optional(),to:z.string().optional(),lang:z.string().optional()})},responses:{200:{content:{"application/json":{schema:z.object({edges:z.array(zodSearchHitSchema),pageInfo:zodSearchPageInfo})}},description:"Search results"}}},handler:async c=>{const query=c.req.valid("query");const result=await c.get("search").search({term:query.search,itemTypes:query.types?query.types.split(",").filter(Boolean):undefined,authorId:positiveIntOrUndefined(query.authorId),containerId:positiveIntOrUndefined(query.containerId),sort:query.sort,dateFrom:dateOrUndefined(query.from),dateTo:dateOrUndefined(query.to),first:positiveIntOrUndefined(query.first),cursor:query.cursor,languageCode:query.lang,includePrivate:false});return c.json(result)}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change-password.route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/modules/users/routes/change-password.route.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"change-password.route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/modules/users/routes/change-password.route.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,uBAAuB;;;;iBAMlC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8E9B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{and,eq,gt}from"drizzle-orm";import{HTTPException}from"hono/http-exception";import{z}from"zod";import{buildRoute}from"../../../lib/route.js";import{PasswordModel}from"../../../models/password.js";import{CONFIG_PLUGIN}from"../../../../config.js";import{core_users,core_users_forgot_password}from"../../../../database/users.js";export const zodChangePasswordSchema=z.object({password:z.string().min(8).openapi({example:"Test123!"}),userId:z.number().openapi({example:123456}),token:z.string().openapi({example:"abcdefg12345"})});export const changePasswordRoute=buildRoute({pluginId:CONFIG_PLUGIN.pluginId,route:{method:"post",description:"Change user password",path:"/change-password",request:{body:{required:true,content:{"application/json":{schema:zodChangePasswordSchema}}}},responses:{201:{description:"Password changed"},400:{description:"Invalid or expired token"}}},handler:async c=>{const{password,userId,token}=c.req.valid("json");const[user]=await c.get("db").select().from(core_users_forgot_password).where(and(eq(core_users_forgot_password.userId,userId),eq(core_users_forgot_password.token,
|
|
1
|
+
import{and,eq,gt}from"drizzle-orm";import{HTTPException}from"hono/http-exception";import{z}from"zod";import{buildRoute}from"../../../lib/route.js";import{ForgotPasswordTokenModel,PasswordModel}from"../../../models/password.js";import{revokeAllSessionsForUser}from"../../../models/session-revoke.js";import{CONFIG_PLUGIN}from"../../../../config.js";import{core_users,core_users_forgot_password}from"../../../../database/users.js";export const zodChangePasswordSchema=z.object({password:z.string().min(8).openapi({example:"Test123!"}),userId:z.number().openapi({example:123456}),token:z.string().openapi({example:"abcdefg12345"})});export const changePasswordRoute=buildRoute({pluginId:CONFIG_PLUGIN.pluginId,route:{method:"post",description:"Change user password",path:"/change-password",request:{body:{required:true,content:{"application/json":{schema:zodChangePasswordSchema}}}},responses:{201:{description:"Password changed"},400:{description:"Invalid or expired token"}}},handler:async c=>{const{password,userId,token}=c.req.valid("json");const hashedToken=new ForgotPasswordTokenModel().hashResetToken(token);const[user]=await c.get("db").select().from(core_users_forgot_password).where(and(eq(core_users_forgot_password.userId,userId),eq(core_users_forgot_password.token,hashedToken),gt(core_users_forgot_password.expiresAt,new Date))).limit(1);if(!user){throw new HTTPException(400,{message:"Invalid token"})}const hashPassword=await new PasswordModel().encryptPassword(password);await Promise.all([c.get("db").update(core_users).set({password:hashPassword}).where(eq(core_users.id,userId)),c.get("db").delete(core_users_forgot_password).where(eq(core_users_forgot_password.id,user.id))]);await revokeAllSessionsForUser(c,userId);return c.text("Password changed",201)}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reset-passowrd.route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/modules/users/routes/reset-passowrd.route.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"reset-passowrd.route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/modules/users/routes/reset-passowrd.route.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;EAwH7B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{eq}from"drizzle-orm";import{createTranslator}from"use-intl";import{z}from"zod";import{buildRoute}from"../../../lib/route.js";import{ForgotPasswordTokenModel}from"../../../models/password.js";import{CONFIG_PLUGIN}from"../../../../config.js";import{core_users,core_users_forgot_password}from"../../../../database/users.js";import ResetPasswordEmailTemplate from"../../../../emails/reset-password.js";import{CONFIG}from"../../../../lib/config.js";export const resetPasswordRoute=buildRoute({pluginId:CONFIG_PLUGIN.pluginId,route:{method:"post",description:"Request a password reset",path:"/reset-password",withCaptcha:true,request:{body:{required:true,content:{"application/json":{schema:z.object({email:z.email().toLowerCase().openapi({example:"test@test.com"})})}}}},responses:{201:{description:"Email sent"}}},handler:async c=>{const RESPONSE_TEXT=c.text("Email sent",201);const{email}=c.req.valid("json");const
|
|
1
|
+
import{eq}from"drizzle-orm";import{createTranslator}from"use-intl";import{z}from"zod";import{buildRoute}from"../../../lib/route.js";import{matchesEmail,pickAccountForEmail}from"../../../lib/user-email-lookup.js";import{ForgotPasswordTokenModel}from"../../../models/password.js";import{CONFIG_PLUGIN}from"../../../../config.js";import{core_users,core_users_forgot_password}from"../../../../database/users.js";import ResetPasswordEmailTemplate from"../../../../emails/reset-password.js";import{CONFIG}from"../../../../lib/config.js";export const resetPasswordRoute=buildRoute({pluginId:CONFIG_PLUGIN.pluginId,route:{method:"post",description:"Request a password reset",path:"/reset-password",withCaptcha:true,request:{body:{required:true,content:{"application/json":{schema:z.object({email:z.email().toLowerCase().openapi({example:"test@test.com"})})}}}},responses:{201:{description:"Email sent"}}},handler:async c=>{const RESPONSE_TEXT=c.text("Email sent",201);const{email}=c.req.valid("json");const candidates=await c.get("db").select({email:core_users.email,id:core_users.id,language:core_users.language}).from(core_users).where(matchesEmail(email)).limit(2);const findUser=pickAccountForEmail(candidates,email);if(!findUser){return RESPONSE_TEXT}const tokens=new ForgotPasswordTokenModel;const resetToken=tokens.generateResetToken();const hashToken=tokens.hashResetToken(resetToken);const[findLastRecord]=await c.get("db").select().from(core_users_forgot_password).where(eq(core_users_forgot_password.userId,findUser.id)).limit(1);if(findLastRecord?.createdAt>new Date(Date.now()-1e3*60*5)){return RESPONSE_TEXT}const EXPIRES_AT=new Date(Date.now()+1e3*60*30);if(findLastRecord){await c.get("db").update(core_users_forgot_password).set({createdAt:new Date,expiresAt:EXPIRES_AT,token:hashToken,ipAddress:c.get("ipAddress")}).where(eq(core_users_forgot_password.id,findLastRecord.id))}else{await c.get("db").insert(core_users_forgot_password).values({token:hashToken,ipAddress:c.get("ipAddress"),userId:findUser.id,expiresAt:EXPIRES_AT})}const resetUrlNative=new URL(`login/reset-password?token=${encodeURIComponent(resetToken)}&userId=${findUser.id}`,CONFIG.web.href);await c.get("email").send({user:{id:findUser.id,email:findUser.email,language:findUser.language},content:props=>ResetPasswordEmailTemplate({...props,resetUrl:resetUrlNative.href,expiryDate:EXPIRES_AT,userIpAddress:c.get("ipAddress")}),subject:({i18n})=>{const t=createTranslator(i18n);return t("core.auth.reset_password.email.subject")}});return RESPONSE_TEXT}});
|
|
@@ -139,30 +139,6 @@ export declare const usersModule: import("../../../api/lib/module").BuildModuleR
|
|
|
139
139
|
};
|
|
140
140
|
} & {
|
|
141
141
|
path: string;
|
|
142
|
-
}>, import("../../lib/route").Route<"@vitnode/core", {
|
|
143
|
-
method: "post";
|
|
144
|
-
description: string;
|
|
145
|
-
path: "/test";
|
|
146
|
-
responses: {
|
|
147
|
-
200: {
|
|
148
|
-
content: {
|
|
149
|
-
"text/plain": {
|
|
150
|
-
schema: import("zod").ZodString;
|
|
151
|
-
};
|
|
152
|
-
};
|
|
153
|
-
description: string;
|
|
154
|
-
};
|
|
155
|
-
201: {
|
|
156
|
-
content: {
|
|
157
|
-
"text/plain": {
|
|
158
|
-
schema: import("zod").ZodString;
|
|
159
|
-
};
|
|
160
|
-
};
|
|
161
|
-
description: string;
|
|
162
|
-
};
|
|
163
|
-
};
|
|
164
|
-
} & {
|
|
165
|
-
path: string;
|
|
166
142
|
}>, import("../../lib/route").Route<"@vitnode/core", {
|
|
167
143
|
method: "post";
|
|
168
144
|
description: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.module.d.ts","sourceRoot":"","sources":["../../../../../src/api/modules/users/users.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"users.module.d.ts","sourceRoot":"","sources":["../../../../../src/api/modules/users/users.module.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kLAetB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{buildModule}from"../../lib/module.js";import{CONFIG_PLUGIN}from"../../../config.js";import{userFilesModule}from"./files/files.module.js";import{changePasswordRoute}from"./routes/change-password.route.js";import{listDevicesRoute}from"./routes/devices.route.js";import{permissionsRoute}from"./routes/permissions.route.js";import{resetPasswordRoute}from"./routes/reset-passowrd.route.js";import{revokeDeviceRoute}from"./routes/revoke-device.route.js";import{sessionRoute}from"./routes/session.route.js";import{signInRoute}from"./routes/sign-in.route.js";import{signOutRoute}from"./routes/sign-out.route.js";import{signUpRoute}from"./routes/sign-up.route.js";import{
|
|
1
|
+
import{buildModule}from"../../lib/module.js";import{CONFIG_PLUGIN}from"../../../config.js";import{userFilesModule}from"./files/files.module.js";import{changePasswordRoute}from"./routes/change-password.route.js";import{listDevicesRoute}from"./routes/devices.route.js";import{permissionsRoute}from"./routes/permissions.route.js";import{resetPasswordRoute}from"./routes/reset-passowrd.route.js";import{revokeDeviceRoute}from"./routes/revoke-device.route.js";import{sessionRoute}from"./routes/session.route.js";import{signInRoute}from"./routes/sign-in.route.js";import{signOutRoute}from"./routes/sign-out.route.js";import{signUpRoute}from"./routes/sign-up.route.js";import{ssoUserModule}from"./sso/sso.module.js";export const usersModule=buildModule({pluginId:CONFIG_PLUGIN.pluginId,name:"users",routes:[sessionRoute,signInRoute,signOutRoute,signUpRoute,resetPasswordRoute,changePasswordRoute,permissionsRoute,listDevicesRoute,revokeDeviceRoute],modules:[ssoUserModule,userFilesModule]});
|
|
@@ -2959,30 +2959,6 @@ export declare const usersModule: import("../api/lib/module").BuildModuleReturn<
|
|
|
2959
2959
|
};
|
|
2960
2960
|
} & {
|
|
2961
2961
|
path: string;
|
|
2962
|
-
}>, import("./lib/route").Route<"@vitnode/core", {
|
|
2963
|
-
method: "post";
|
|
2964
|
-
description: string;
|
|
2965
|
-
path: "/test";
|
|
2966
|
-
responses: {
|
|
2967
|
-
200: {
|
|
2968
|
-
content: {
|
|
2969
|
-
"text/plain": {
|
|
2970
|
-
schema: import("zod").ZodString;
|
|
2971
|
-
};
|
|
2972
|
-
};
|
|
2973
|
-
description: string;
|
|
2974
|
-
};
|
|
2975
|
-
201: {
|
|
2976
|
-
content: {
|
|
2977
|
-
"text/plain": {
|
|
2978
|
-
schema: import("zod").ZodString;
|
|
2979
|
-
};
|
|
2980
|
-
};
|
|
2981
|
-
description: string;
|
|
2982
|
-
};
|
|
2983
|
-
};
|
|
2984
|
-
} & {
|
|
2985
|
-
path: string;
|
|
2986
2962
|
}>, import("./lib/route").Route<"@vitnode/core", {
|
|
2987
2963
|
method: "post";
|
|
2988
2964
|
description: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules.client.d.ts","sourceRoot":"","sources":["../../../src/api/modules.client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAiB9D,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mJAEvB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+IAE3B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+IAE5B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+IAE5B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+IAE5B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+IAE5B,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+IAExB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+IAE3B,CAAC;AAEF,eAAO,MAAM,WAAW
|
|
1
|
+
{"version":3,"file":"modules.client.d.ts","sourceRoot":"","sources":["../../../src/api/modules.client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAiB9D,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mJAEvB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+IAE3B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+IAE5B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+IAE5B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+IAE5B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+IAE5B,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+IAExB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+IAE3B,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mJAEvB,CAAC;AAEF,eAAO,MAAM,YAAY,GAxCN,CAAC,SAAS,qBAAqB,YACtC,CAAC,CAAC,UAAU,CAAC,KACtB,CAsCkC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirm-action-alert-dialog.d.ts","sourceRoot":"","sources":["../../../../src/components/confirm-action/confirm-action-alert-dialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"confirm-action-alert-dialog.d.ts","sourceRoot":"","sources":["../../../../src/components/confirm-action/confirm-action-alert-dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EACL,WAAW,EACX,kBAAkB,EAMnB,MAAM,oBAAoB,CAAC;AAE5B,QAAA,MAAM,oBAAoB;;;;iBAEc,CAAC;cAKlC,CAAC;wBAHP,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,6FAStC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,WAAW,CAAC,EAAE,UAAU,CAAC,GAC3D,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,GAAG;IAClD,QAAQ,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC9B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,CAAC,YAAY,CAAC,CAAC;IAC3E,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACzB,sBAyBF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import React from"react";import{useTranslations}from"use-intl";import{AlertDialog,AlertDialogContent,AlertDialogDescription,AlertDialogFooterSkeleton,AlertDialogHeader,AlertDialogTitle,AlertDialogTrigger}from"../ui/alert-dialog.js";const ContentConfirmAction=React.lazy(async()=>import("./content.js").then(module=>({default:module.ContentConfirmAction})));export const ConfirmActionAlertDialog=({children,title,description,finalFocus,submitVariant,textSubmit,onSubmit,...props})=>{const t=useTranslations("core.global.confirm_action");return _jsxs(AlertDialog,{...props,children:[children?_jsx(AlertDialogTrigger,{render:children}):null,_jsxs(AlertDialogContent,{finalFocus:finalFocus,children:[_jsxs(AlertDialogHeader,{children:[_jsx(AlertDialogTitle,{children:title??t("title")}),_jsx(AlertDialogDescription,{children:description??t("desc")})]}),_jsx(React.Suspense,{fallback:_jsx(AlertDialogFooterSkeleton,{}),children:_jsx(ContentConfirmAction,{onSubmit:onSubmit,submitVariant:submitVariant,textSubmit:textSubmit})})]})]})};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-format.d.ts","sourceRoot":"","sources":["../../../src/components/date-format.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"date-format.d.ts","sourceRoot":"","sources":["../../../src/components/date-format.tsx"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU,GAAI,yCAIxB;IACD,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,yCAiCA,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{jsx as _jsx}from"react/jsx-runtime";import{useFormatter,useNow}from"use-intl";import{TooltipWithContent}from"./ui/tooltip.js";export const DateFormat=({date,updateInterval,showFullDate})=>{const dateToFormat=typeof date==="string"?new Date(date):date;const format=useFormatter();const now=useNow({updateInterval:updateInterval??(Date.now()-dateToFormat.getTime()<864e5?6e4:0)});const fullDate=format.dateTime(dateToFormat,{year:dateToFormat.getFullYear()===now.getFullYear()?undefined:"numeric",month:"short",day:"numeric",hour:"numeric",minute:"numeric"});if(showFullDate){return fullDate}if(now.getTime()-dateToFormat.getTime()<6048e5){return _jsx(TooltipWithContent,{text:fullDate,children:_jsx("span",{children:format.relativeTime(dateToFormat,now)})})}return fullDate};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface EditorCustomEmoji {
|
|
3
|
+
name: string;
|
|
4
|
+
src: string;
|
|
5
|
+
tags?: string[];
|
|
6
|
+
}
|
|
7
|
+
export interface EditorEmojiSection {
|
|
8
|
+
emojis: EditorCustomEmoji[];
|
|
9
|
+
label: string;
|
|
10
|
+
}
|
|
11
|
+
export interface VitNodeEditorConfig {
|
|
12
|
+
emojis?: EditorEmojiSection[];
|
|
13
|
+
}
|
|
14
|
+
export declare const EditorConfigProvider: ({ children, config, }: {
|
|
15
|
+
children: React.ReactNode;
|
|
16
|
+
config?: VitNodeEditorConfig;
|
|
17
|
+
}) => React.JSX.Element;
|
|
18
|
+
export declare const useEditorConfig: () => VitNodeEditorConfig;
|
|
19
|
+
//# sourceMappingURL=editor-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor-provider.d.ts","sourceRoot":"","sources":["../../../src/components/editor-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,iBAAiB;IAEhC,IAAI,EAAE,MAAM,CAAC;IAEb,GAAG,EAAE,MAAM,CAAC;IAEZ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAE5B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAID,eAAO,MAAM,oBAAoB,GAAI,uBAGlC;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B,sBAOA,CAAC;AAEF,eAAO,MAAM,eAAe,QAAO,mBACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as _jsx}from"react/jsx-runtime";import React from"react";const EditorConfigContext=React.createContext({});export const EditorConfigProvider=({children,config={}})=>{const value=React.useMemo(()=>({emojis:config.emojis?.filter(section=>section.emojis.length)}),[config.emojis]);return _jsx(EditorConfigContext,{value:value,children:children})};export const useEditorConfig=()=>React.use(EditorConfigContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-preview.d.ts","sourceRoot":"","sources":["../../../../src/components/files/file-preview.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"file-preview.d.ts","sourceRoot":"","sources":["../../../../src/components/files/file-preview.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAO,MAAM,WAAW,GAAI,0BAIzB;IACD,QAAQ,EAAE,IAAI,GAAG,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,IAAI,GAAG,MAAM,CAAC;CACpB,sBAqBA,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{jsx as _jsx}from"react/jsx-runtime";import{FileIcon}from"lucide-react";import React from"react";export const FilePreview=({mimeType,name,url})=>{const[failed,setFailed]=React.useState(false);const isImage=!!url&&!failed&&(mimeType?.startsWith("image/")??false);if(!isImage){return _jsx("div",{className:"bg-muted text-muted-foreground flex size-10 items-center justify-center rounded-md",children:_jsx(FileIcon,{className:"size-4"})})}return _jsx("img",{alt:name,className:"bg-muted size-10 rounded-md object-cover",loading:"lazy",onError:()=>setFailed(true),src:url})};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata-cell.d.ts","sourceRoot":"","sources":["../../../../src/components/files/metadata-cell.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metadata-cell.d.ts","sourceRoot":"","sources":["../../../../src/components/files/metadata-cell.tsx"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,GAAI,kCAI1B;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;CACf,gCAwBA,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{BracesIcon}from"lucide-react";import{Badge}from"../ui/badge.js";import{Popover,PopoverContent,PopoverTitle,PopoverTrigger}from"../ui/popover.js";export const MetadataCell=({emptyLabel,metadata,title})=>{const keys=Object.keys(metadata??{});if(keys.length===0){return _jsx("span",{className:"text-muted-foreground",children:emptyLabel})}return _jsxs(Popover,{children:[_jsxs(PopoverTrigger,{nativeButton:false,render:_jsx(Badge,{className:"cursor-pointer gap-1",variant:"secondary"}),children:[_jsx(BracesIcon,{}),keys.length]}),_jsxs(PopoverContent,{className:"w-80",children:[_jsx(PopoverTitle,{children:title}),_jsx("pre",{className:"bg-muted mt-2 max-h-72 overflow-auto rounded-md p-3 text-xs",children:JSON.stringify(metadata,null,2)})]})]})};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-form.d.ts","sourceRoot":"","sources":["../../../../src/components/form/auto-form.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auto-form.d.ts","sourceRoot":"","sources":["../../../../src/components/form/auto-form.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,IAAI,EAGT,KAAK,aAAa,EAEnB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAGhF,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAMtC,UAAU,uBAAuB,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;IACpE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,KAAK,iBAAiB,CACpB,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EACjE,KAAK,SAAS,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IACzD,uBAAuB,CAAC,CAAC,CAAC,GAC5B,CACI;IACE,SAAS,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,KAAK,CAAC,SAAS,CAAC;IAClE,EAAE,EAAE,KAAK,CAAC;CACX,GACD;IACE,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACzB,CACJ,CAAC;AAEJ,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,0BAA0B;IACzC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,KAAK,EAAE,qBAAqB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAClD,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE;QACV,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC;QAC3B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAuBD,eAAO,MAAM,oBAAoB,GAAI,2CAKlC;IACD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;CAC1D,gCAiBA,CAAC;AAeF,MAAM,MAAM,gBAAgB,CAC1B,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EACpC,QAAQ,GAAG,OAAO,IAChB,CACF,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAClB,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EACtD,OAAO,EAAE;IACP,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,KACE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE1B,wBAAgB,QAAQ,CACtB,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EACpC,QAAQ,GAAG,OAAO,EAClB,EACA,UAAU,EACV,IAAI,EACJ,QAAQ,EAAE,YAAY,EACtB,OAAO,EACP,MAAM,EACN,MAAM,EACN,IAAI,EACJ,iBAAiB,EACjB,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG;IAClD,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3D,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,UAAU,EAAE,CAAC,CAAC;IACd,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;IAC9E,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,QAAQ,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACzC,iBAAiB,CAAC,EAAE,IAAI,CACtB,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EACnC,WAAW,GAAG,MAAM,CACrB,CAAC;IACF,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC;CACtB,+BA8MA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{zodResolver}from"@hookform/resolvers/zod";import{useAnimate,useReducedMotion}from"motion/react";import{useEffect}from"react";import{useForm,useFormContext,useFormState}from"react-hook-form";import{useTranslations}from"use-intl";import z from"zod";import{useCaptcha}from"../../hooks/use-captcha.js";import{getDefaults,getNestedParam,getZodInputParams}from"../../lib/helpers/auto-form.js";import{SHAKE_KEYFRAMES,SHAKE_TRANSITION}from"../../lib/motion.js";import{Button}from"../ui/button.js";import{DialogClose,DialogFooter,useDialog}from"../ui/dialog.js";import{Field}from"../ui/field.js";import{Form,FormField}from"../ui/form.js";import{Tabs,TabsContent,TabsList,TabsTrigger}from"../ui/tabs.js";function AutoFormField({invalid,submitCount,...props}){const[scope,animate]=useAnimate();const shouldReduceMotion=useReducedMotion();useEffect(()=>{if(!invalid||shouldReduceMotion||!scope.current)return;animate(scope.current,SHAKE_KEYFRAMES,SHAKE_TRANSITION)},[invalid,submitCount,shouldReduceMotion,animate,scope]);return _jsx(Field,{"data-invalid":invalid,ref:scope,...props})}export const AutoFormSubmitButton=({children,className,intent,variant})=>{const t=useTranslations("core.global");const{control}=useFormContext();const{isSubmitting,isValid}=useFormState({control});return _jsx(Button,{className:className,disabled:!isValid||isSubmitting,isLoading:isSubmitting,type:"submit",value:intent,variant:variant,children:children??t("submit")})};const submitIntentOf=event=>{const native=event?.nativeEvent;if(!native||!("submitter"in native))return undefined;const{submitter}=native;return submitter instanceof HTMLButtonElement&&submitter.value!==""?submitter.value:undefined};export function AutoForm({formSchema,mode,onSubmit:onSubmitProp,captcha,fields,layout,tabs,submitButtonProps,children,...props}){const{isReady,getToken:getTokenCaptcha,onReset:onResetCaptcha}=useCaptcha(captcha);const{setIsDirty}=useDialog();const t=useTranslations("core.global");const jsonSchema=z.toJSONSchema(formSchema);const inputParams=getZodInputParams(jsonSchema);const form=useForm({resolver:zodResolver(formSchema),defaultValues:getDefaults(jsonSchema),mode});const onSubmit=async(values,event)=>{const parsedValues=formSchema.safeParse(values);if(parsedValues.success){await onSubmitProp?.(parsedValues.data,form,{captchaToken:captcha?await getTokenCaptcha():"",intent:submitIntentOf(event)});if(captcha){onResetCaptcha()}}};const hasConditionalFields=fields.some(item=>typeof item.hidden==="function");const watchedValues=hasConditionalFields?form.watch():undefined;const isFieldVisible=item=>{if(!item.hidden||!watchedValues)return true;return!item.hidden(watchedValues)};const renderField=item=>{const params=getNestedParam(inputParams,item.id);if(!params)return null;if(!item.component&&(item.label||item.description)){return _jsxs("div",{children:[!!item.label&&_jsx("span",{className:"text-xl leading-none font-semibold tracking-tight",children:item.label}),!!item.description&&_jsx("div",{className:"text-muted-foreground text-sm",children:item.description})]},item.id)}if(!item.component)return null;const{component}=item;return _jsx(FormField,{name:item.id,render:({field,fieldState})=>{return _jsx(AutoFormField,{invalid:fieldState.invalid,orientation:"responsive",submitCount:form.formState.submitCount,children:component({field,description:typeof params.description==="string"?params.description:"",itemParams:"itemParams"in params?params.itemParams:undefined,otherProps:{isOptional:!params.required,enum:Array.isArray(params.enum)?params.enum:undefined,maxLength:typeof params.maxLength==="number"?params.maxLength:undefined,maxItems:typeof params.maxItems==="number"?params.maxItems:undefined,minLength:typeof params.minLength==="number"?params.minLength:undefined,["aria-invalid"]:fieldState.invalid,minItems:typeof params.minItems==="number"?params.minItems:undefined,pattern:typeof params.pattern==="string"?params.pattern:undefined,type:typeof params.type==="string"?params.type:undefined}})})}},item.id)};const submitButton=_jsx(Button,{disabled:!form.formState.isValid||form.formState.isSubmitting||captcha&&!isReady,isLoading:form.formState.isSubmitting,...submitButtonProps,"aria-label":submitButtonProps?.["aria-label"]??t("submit"),type:"submit",children:submitButtonProps?.children??t("submit")});if(layout){return _jsxs(Form,{form:form,onSubmit:onSubmit,...props,children:[layout(Object.fromEntries(fields.filter(isFieldVisible).map(item=>[item.id,renderField(item)]))),children,captcha&&_jsx("div",{id:"vitnode_captcha"})]})}return _jsxs(Form,{form:form,onSubmit:onSubmit,...props,children:[tabs?.length?_jsxs(Tabs,{defaultValue:tabs[0].value,children:[_jsx(TabsList,{children:tabs.map(tab=>_jsx(TabsTrigger,{value:tab.value,children:tab.label},tab.value))}),tabs.map(tab=>_jsx(TabsContent,{className:"mt-0 space-y-6",keepMounted:true,value:tab.value,children:fields.filter(item=>(item.tab??tabs[0].value)===tab.value).filter(isFieldVisible).map(renderField)},tab.value))]}):fields.filter(isFieldVisible).map(renderField),children,captcha&&_jsx("div",{id:"vitnode_captcha"}),setIsDirty?_jsxs(DialogFooter,{children:[_jsx(DialogClose,{render:_jsx(Button,{variant:"ghost",children:t("cancel")})}),submitButton]}):submitButton]})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async-picker.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/common/async-picker.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"async-picker.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/common/async-picker.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAsB1B,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,wBAAgB,WAAW,CAAC,OAAO,SAAS,iBAAiB,EAAE,EAC7D,SAAS,EACT,QAAQ,EACR,UAAU,EACV,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,iBAAiB,EACjB,WAAgB,EAChB,OAAO,GACR,EAAE;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,KAAK,CAAC,SAAS,CAAC;IACnD,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B,qBA2FA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";import{ChevronsUpDownIcon}from"lucide-react";import React from"react";import{useDebouncedCallback}from"use-debounce";import{useTranslations}from"use-intl";import{Button}from"../../ui/button.js";import{Command,CommandEmpty,CommandGroup,CommandInput,CommandItem,CommandList}from"../../ui/command.js";import{Popover,PopoverContent,PopoverTrigger}from"../../ui/popover.js";import{Spinner}from"../../ui/spinner.js";import{cn}from"../../../lib/utils.js";export function AsyncPicker({className,disabled,emptyLabel,invalid,onSelect,renderOption,search,searchPlaceholder,selectedIds=[],trigger}){const t=useTranslations("core.global");const[open,setOpen]=React.useState(false);const[options,setOptions]=React.useState([]);const[isSearching,setIsSearching]=React.useState(false);const runSearch=React.useCallback(async value=>{setIsSearching(true);try{setOptions(await search(value))}catch(error){console.error(error);setOptions([])}finally{setIsSearching(false)}},[search]);const debouncedSearch=useDebouncedCallback(runSearch,400);const selected=new Set(selectedIds);return _jsxs(Popover,{onOpenChange:next=>{setOpen(next);if(next){setOptions([]);void runSearch("")}},open:open,children:[_jsxs(PopoverTrigger,{render:_jsx(Button,{"aria-invalid":invalid,className:cn("w-full justify-start font-normal",className),disabled:disabled,type:"button",variant:"outline"}),children:[trigger,_jsx(ChevronsUpDownIcon,{className:"ms-auto opacity-50"})]}),_jsx(PopoverContent,{align:"start",className:"w-(--anchor-width) min-w-56 p-0",children:_jsxs(Command,{shouldFilter:false,children:[_jsx(CommandInput,{onValueChange:debouncedSearch,placeholder:searchPlaceholder??t("search_placeholder")}),_jsx(CommandList,{children:isSearching&&options.length===0?_jsx("div",{className:"flex items-center justify-center py-6",children:_jsx(Spinner,{})}):_jsxs(_Fragment,{children:[_jsx(CommandEmpty,{children:emptyLabel??t("results_not_found")}),_jsx(CommandGroup,{children:options.map(option=>_jsx(CommandItem,{"data-checked":selected.has(option.id),onSelect:()=>{onSelect(option);setOpen(false)},value:String(option.id),children:renderOption(option)},option.id))})]})})]})})]})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/fields/array.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/fields/array.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAc/D,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,KAAK,CAAC,SAAS,CAAC;IAClE,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,kBAAmB,SAAQ,0BAA0B;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,aAAa,GAAI,4LAY3B,kBAAkB,sBAyJpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{PlusIcon,Trash2Icon}from"lucide-react";import React from"react";import{useFieldArray,useFormContext}from"react-hook-form";import{useTranslations}from"use-intl";import{cn}from"../../../lib/utils.js";import{getNestedParam}from"../../../lib/helpers/auto-form.js";import{Button}from"../../ui/button.js";import{Field,FieldDescription,FieldError,FieldGroup,FieldLegend,FieldSet}from"../../ui/field.js";import{FormField}from"../../ui/form.js";export const AutoFormArray=({label,field:parentField,description,fields:fieldDefinitions,addButtonLabel="Add Item",maxItems:maxItemsProp,minItems:minItemsProp,showRemoveButton=true,className,itemParams,otherProps})=>{const{control,formState}=useFormContext();const t=useTranslations("core.global");const id=parentField.name;const{fields,append,remove}=useFieldArray({control,name:id});const maxItems=maxItemsProp??otherProps.maxItems;const minItems=minItemsProp??otherProps.minItems??0;const canRemove=fields.length>minItems;const canAdd=!maxItems||fields.length<maxItems;const arrayError=formState.errors[id];return _jsxs(FieldSet,{className:cn("gap-4",className),children:[!!label&&_jsx(FieldLegend,{variant:"label",children:label}),!!description&&_jsx(FieldDescription,{children:description}),_jsxs(FieldGroup,{className:"gap-4",children:[fields.map((field,index)=>_jsxs(Field,{className:"@md/field-group:items-end",orientation:"responsive",children:[fieldDefinitions.map(fieldDef=>{const fullFieldName=`${id}.${index}.${fieldDef.id}`;const fieldParams=itemParams?getNestedParam(itemParams,fieldDef.id):undefined;return _jsx(FormField,{name:fullFieldName,render:({field,fieldState})=>_jsx(Field,{className:fieldDef.className,"data-invalid":fieldState.invalid,children:fieldDef.component({field,itemParams:fieldParams&&typeof fieldParams==="object"&&"itemParams"in fieldParams?fieldParams.itemParams:undefined,description:typeof fieldParams==="object"&&fieldParams&&"description"in fieldParams&&typeof fieldParams.description==="string"?fieldParams.description:undefined,otherProps:{isOptional:false,["aria-invalid"]:fieldState.invalid,enum:fieldParams&&typeof fieldParams==="object"&&"enum"in fieldParams&&Array.isArray(fieldParams.enum)?fieldParams.enum:undefined,maxLength:typeof fieldParams==="object"&&fieldParams&&"maxLength"in fieldParams&&typeof fieldParams.maxLength==="number"?fieldParams.maxLength:undefined,minLength:typeof fieldParams==="object"&&fieldParams&&"minLength"in fieldParams&&typeof fieldParams.minLength==="number"?fieldParams.minLength:undefined,pattern:typeof fieldParams==="object"&&fieldParams&&"pattern"in fieldParams&&typeof fieldParams.pattern==="string"?fieldParams.pattern:undefined,type:typeof fieldParams==="object"&&fieldParams&&"type"in fieldParams&&typeof fieldParams.type==="string"?fieldParams.type:undefined}})})},fullFieldName)}),canRemove&&showRemoveButton&&fields.length>0&&_jsx(FieldLegend,{className:"mb-2 flex justify-end",children:_jsx(Button,{"aria-label":t("remove"),onClick:()=>remove(index),size:"icon",type:"button",variant:"ghost",children:_jsx(Trash2Icon,{})})})]},field.id)),_jsxs(Button,{className:"w-fit",disabled:!canAdd,onClick:()=>{const newItem=fieldDefinitions.reduce((acc,fieldDef)=>{acc[fieldDef.id]=undefined;return acc},{});append(newItem)},size:"sm",type:"button",variant:"outline",children:[_jsx(PlusIcon,{}),addButtonLabel]})]}),(arrayError?.root?.message??arrayError?.message)&&_jsx(FieldError,{errors:[{message:arrayError.root?.message??arrayError.message}]})]})};
|