@btst/stack 3.0.0-rc.2 → 3.0.0-rc.3
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/README.md +118 -38
- package/dist/api/index.cjs +133 -29
- package/dist/api/index.d.cts +14 -32
- package/dist/api/index.d.mts +14 -32
- package/dist/api/index.d.ts +14 -32
- package/dist/api/index.mjs +133 -28
- package/dist/authorization/client.cjs +154 -0
- package/dist/authorization/client.d.cts +70 -0
- package/dist/authorization/client.d.mts +70 -0
- package/dist/authorization/client.d.ts +70 -0
- package/dist/authorization/client.mjs +152 -0
- package/dist/authorization/index.cjs +371 -0
- package/dist/authorization/index.d.cts +201 -0
- package/dist/authorization/index.d.mts +201 -0
- package/dist/authorization/index.d.ts +201 -0
- package/dist/authorization/index.mjs +365 -0
- package/dist/authorization/remote.cjs +117 -0
- package/dist/authorization/remote.d.cts +79 -0
- package/dist/authorization/remote.d.mts +79 -0
- package/dist/authorization/remote.d.ts +79 -0
- package/dist/authorization/remote.mjs +111 -0
- package/dist/authorization/server.cjs +77 -0
- package/dist/authorization/server.d.cts +51 -0
- package/dist/authorization/server.d.mts +51 -0
- package/dist/authorization/server.d.ts +51 -0
- package/dist/authorization/server.mjs +73 -0
- package/dist/client/components/index.cjs +1 -0
- package/dist/client/components/index.d.cts +23 -6
- package/dist/client/components/index.d.mts +23 -6
- package/dist/client/components/index.d.ts +23 -6
- package/dist/client/components/index.mjs +1 -1
- package/dist/client/hooks/index.cjs +8 -0
- package/dist/client/hooks/index.d.cts +25 -0
- package/dist/client/hooks/index.d.mts +25 -0
- package/dist/client/hooks/index.d.ts +25 -0
- package/dist/client/hooks/index.mjs +2 -0
- package/dist/client/index.cjs +38 -7
- package/dist/client/index.d.cts +30 -100
- package/dist/client/index.d.mts +30 -100
- package/dist/client/index.d.ts +30 -100
- package/dist/client/index.mjs +38 -7
- package/dist/client/server.cjs +96 -0
- package/dist/client/server.d.cts +57 -0
- package/dist/client/server.d.mts +57 -0
- package/dist/client/server.d.ts +57 -0
- package/dist/client/server.mjs +92 -0
- package/dist/components/auto-form/index.d.cts +2 -2
- package/dist/components/auto-form/index.d.mts +2 -2
- package/dist/components/auto-form/index.d.ts +2 -2
- package/dist/components/form-builder/index.d.cts +1 -1
- package/dist/components/form-builder/index.d.mts +1 -1
- package/dist/components/form-builder/index.d.ts +1 -1
- package/dist/components/stepped-auto-form/index.d.cts +1 -1
- package/dist/components/stepped-auto-form/index.d.mts +1 -1
- package/dist/components/stepped-auto-form/index.d.ts +1 -1
- package/dist/context/index.cjs +8 -2
- package/dist/context/index.d.cts +111 -89
- package/dist/context/index.d.mts +111 -89
- package/dist/context/index.d.ts +111 -89
- package/dist/context/index.mjs +3 -1
- package/dist/index.cjs +1 -2
- package/dist/index.d.cts +8 -3
- package/dist/index.d.mts +8 -3
- package/dist/index.d.ts +8 -3
- package/dist/index.mjs +1 -1
- package/dist/next/index.d.cts +19 -7
- package/dist/next/index.d.mts +19 -7
- package/dist/next/index.d.ts +19 -7
- package/dist/next/server.cjs +7 -0
- package/dist/next/server.d.cts +56 -0
- package/dist/next/server.d.mts +56 -0
- package/dist/next/server.d.ts +56 -0
- package/dist/next/server.mjs +1 -0
- package/dist/packages/stack/src/authorization/json.cjs +57 -0
- package/dist/packages/stack/src/authorization/json.mjs +55 -0
- package/dist/packages/stack/src/client/components/compose.cjs +91 -9
- package/dist/packages/stack/src/client/components/compose.mjs +92 -11
- package/dist/packages/stack/src/client/runtime.cjs +295 -0
- package/dist/packages/stack/src/client/runtime.mjs +293 -0
- package/dist/packages/stack/src/context/auth.cjs +141 -73
- package/dist/packages/stack/src/context/auth.mjs +139 -73
- package/dist/packages/stack/src/context/provider.cjs +11 -5
- package/dist/packages/stack/src/context/provider.mjs +11 -5
- package/dist/packages/stack/src/context/router.cjs +9 -0
- package/dist/packages/stack/src/context/router.mjs +7 -0
- package/dist/packages/stack/src/context/site-navigation.cjs +40 -0
- package/dist/packages/stack/src/context/site-navigation.mjs +38 -0
- package/dist/packages/stack/src/next/layout.cjs +27 -0
- package/dist/packages/stack/src/next/layout.mjs +25 -0
- package/dist/packages/stack/src/plugin-registration.cjs +59 -0
- package/dist/packages/stack/src/plugin-registration.mjs +57 -0
- package/dist/packages/stack/src/plugins/ai-chat/api/lifecycle-migrations.cjs +18 -0
- package/dist/packages/stack/src/plugins/ai-chat/api/lifecycle-migrations.mjs +16 -0
- package/dist/packages/stack/src/plugins/ai-chat/api/operations.cjs +1341 -0
- package/dist/packages/stack/src/plugins/ai-chat/api/operations.mjs +1333 -0
- package/dist/packages/stack/src/plugins/ai-chat/api/plugin.cjs +82 -640
- package/dist/packages/stack/src/plugins/ai-chat/api/plugin.mjs +78 -641
- package/dist/packages/stack/src/plugins/ai-chat/api/serializers.cjs +23 -0
- package/dist/packages/stack/src/plugins/ai-chat/api/serializers.mjs +20 -0
- package/dist/packages/stack/src/plugins/ai-chat/client/components/chat-input.cjs +183 -111
- package/dist/packages/stack/src/plugins/ai-chat/client/components/chat-input.mjs +187 -115
- package/dist/packages/stack/src/plugins/ai-chat/client/components/chat-interface.cjs +562 -116
- package/dist/packages/stack/src/plugins/ai-chat/client/components/chat-interface.mjs +567 -121
- package/dist/packages/stack/src/plugins/ai-chat/client/components/chat-layout.cjs +6 -6
- package/dist/packages/stack/src/plugins/ai-chat/client/components/chat-layout.mjs +6 -6
- package/dist/packages/stack/src/plugins/ai-chat/client/components/chat-message.cjs +1 -1
- package/dist/packages/stack/src/plugins/ai-chat/client/components/chat-message.mjs +1 -1
- package/dist/packages/stack/src/plugins/ai-chat/client/components/chat-sidebar.cjs +45 -29
- package/dist/packages/stack/src/plugins/ai-chat/client/components/chat-sidebar.mjs +46 -30
- package/dist/packages/stack/src/plugins/ai-chat/client/components/pages/404-page.cjs +1 -1
- package/dist/packages/stack/src/plugins/ai-chat/client/components/pages/404-page.mjs +1 -1
- package/dist/packages/stack/src/plugins/ai-chat/client/components/pages/chat-page.cjs +46 -7
- package/dist/packages/stack/src/plugins/ai-chat/client/components/pages/chat-page.internal.cjs +5 -3
- package/dist/packages/stack/src/plugins/ai-chat/client/components/pages/chat-page.internal.mjs +5 -3
- package/dist/packages/stack/src/plugins/ai-chat/client/components/pages/chat-page.mjs +48 -9
- package/dist/packages/stack/src/plugins/ai-chat/client/components/shared/default-error.cjs +1 -1
- package/dist/packages/stack/src/plugins/ai-chat/client/components/shared/default-error.mjs +1 -1
- package/dist/packages/stack/src/plugins/ai-chat/client/components/tool-call-display.cjs +1 -1
- package/dist/packages/stack/src/plugins/ai-chat/client/components/tool-call-display.mjs +1 -1
- package/dist/packages/stack/src/plugins/ai-chat/client/hooks/ai-chat-resource.cjs +1 -1
- package/dist/packages/stack/src/plugins/ai-chat/client/hooks/ai-chat-resource.mjs +1 -1
- package/dist/packages/stack/src/plugins/ai-chat/client/hooks/chat-hooks.cjs +179 -19
- package/dist/packages/stack/src/plugins/ai-chat/client/hooks/chat-hooks.mjs +180 -21
- package/dist/packages/stack/src/plugins/ai-chat/client/navigation.cjs +11 -0
- package/dist/packages/stack/src/plugins/ai-chat/client/navigation.mjs +9 -0
- package/dist/packages/stack/src/plugins/ai-chat/client/overrides.cjs +24 -0
- package/dist/packages/stack/src/plugins/ai-chat/client/overrides.mjs +21 -1
- package/dist/packages/stack/src/plugins/ai-chat/client/plugin.cjs +152 -82
- package/dist/packages/stack/src/plugins/ai-chat/client/plugin.mjs +152 -82
- package/dist/packages/stack/src/plugins/api/create-endpoint.cjs +27 -9
- package/dist/packages/stack/src/plugins/api/create-endpoint.mjs +27 -10
- package/dist/packages/stack/src/plugins/api/endpoint-inventory.cjs +125 -0
- package/dist/packages/stack/src/plugins/api/endpoint-inventory.mjs +123 -0
- package/dist/packages/stack/src/plugins/api/operation.cjs +208 -0
- package/dist/packages/stack/src/plugins/api/operation.mjs +198 -0
- package/dist/packages/stack/src/plugins/blog/api/lifecycle-migrations.cjs +17 -0
- package/dist/packages/stack/src/plugins/blog/api/lifecycle-migrations.mjs +15 -0
- package/dist/packages/stack/src/plugins/blog/api/mutations.cjs +10 -2
- package/dist/packages/stack/src/plugins/blog/api/mutations.mjs +10 -2
- package/dist/packages/stack/src/plugins/blog/api/operations.cjs +455 -0
- package/dist/packages/stack/src/plugins/blog/api/operations.mjs +448 -0
- package/dist/packages/stack/src/plugins/blog/api/plugin.cjs +51 -298
- package/dist/packages/stack/src/plugins/blog/api/plugin.mjs +55 -304
- package/dist/packages/stack/src/plugins/blog/client/components/forms/image-field.cjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/forms/image-field.mjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/forms/markdown-editor-with-overrides.cjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/forms/markdown-editor-with-overrides.mjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/forms/post-forms.cjs +82 -67
- package/dist/packages/stack/src/plugins/blog/client/components/forms/post-forms.mjs +84 -69
- package/dist/packages/stack/src/plugins/blog/client/components/pages/404-page.cjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/pages/404-page.mjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/pages/edit-post-page.cjs +22 -4
- package/dist/packages/stack/src/plugins/blog/client/components/pages/edit-post-page.internal.cjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/pages/edit-post-page.internal.mjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/pages/edit-post-page.mjs +23 -5
- package/dist/packages/stack/src/plugins/blog/client/components/pages/home-page.cjs +6 -2
- package/dist/packages/stack/src/plugins/blog/client/components/pages/home-page.internal.cjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/pages/home-page.internal.mjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/pages/home-page.mjs +6 -2
- package/dist/packages/stack/src/plugins/blog/client/components/pages/new-post-page.cjs +4 -2
- package/dist/packages/stack/src/plugins/blog/client/components/pages/new-post-page.internal.cjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/pages/new-post-page.internal.mjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/pages/new-post-page.mjs +4 -2
- package/dist/packages/stack/src/plugins/blog/client/components/pages/post-page.cjs +30 -3
- package/dist/packages/stack/src/plugins/blog/client/components/pages/post-page.internal.cjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/pages/post-page.internal.mjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/pages/post-page.mjs +31 -4
- package/dist/packages/stack/src/plugins/blog/client/components/pages/tag-page.cjs +4 -1
- package/dist/packages/stack/src/plugins/blog/client/components/pages/tag-page.internal.cjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/pages/tag-page.internal.mjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/pages/tag-page.mjs +4 -1
- package/dist/packages/stack/src/plugins/blog/client/components/shared/collapsible-tag-list.cjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/shared/collapsible-tag-list.mjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/shared/default-error.cjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/shared/default-error.mjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/shared/on-this-page.cjs +3 -2
- package/dist/packages/stack/src/plugins/blog/client/components/shared/on-this-page.mjs +3 -2
- package/dist/packages/stack/src/plugins/blog/client/components/shared/page-wrapper.cjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/shared/page-wrapper.mjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/shared/post-card.cjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/shared/post-card.mjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/shared/posts-list.cjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/shared/posts-list.mjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/shared/recent-posts-carousel.cjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/shared/recent-posts-carousel.mjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/components/shared/search-input.cjs +2 -2
- package/dist/packages/stack/src/plugins/blog/client/components/shared/search-input.mjs +1 -1
- package/dist/packages/stack/src/plugins/blog/client/constants.cjs +5 -0
- package/dist/packages/stack/src/plugins/blog/client/constants.mjs +3 -0
- package/dist/packages/stack/src/plugins/blog/client/hooks/blog-resource.cjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/hooks/blog-resource.mjs +2 -1
- package/dist/packages/stack/src/plugins/blog/client/plugin.cjs +169 -163
- package/dist/packages/stack/src/plugins/blog/client/plugin.mjs +169 -163
- package/dist/packages/stack/src/plugins/client/resource/hooks.cjs +31 -16
- package/dist/packages/stack/src/plugins/client/resource/hooks.mjs +31 -16
- package/dist/packages/stack/src/plugins/client/resource/internal.cjs +66 -52
- package/dist/packages/stack/src/plugins/client/resource/internal.mjs +66 -52
- package/dist/packages/stack/src/plugins/client/resource/use-form.cjs +20 -17
- package/dist/packages/stack/src/plugins/client/resource/use-form.mjs +20 -17
- package/dist/packages/stack/src/plugins/client/resource/use-select.cjs +39 -33
- package/dist/packages/stack/src/plugins/client/resource/use-select.mjs +39 -33
- package/dist/packages/stack/src/plugins/cms/api/lifecycle-migrations.cjs +13 -0
- package/dist/packages/stack/src/plugins/cms/api/lifecycle-migrations.mjs +11 -0
- package/dist/packages/stack/src/plugins/cms/api/operations.cjs +1763 -0
- package/dist/packages/stack/src/plugins/cms/api/operations.mjs +1756 -0
- package/dist/packages/stack/src/plugins/cms/api/plugin.cjs +165 -752
- package/dist/packages/stack/src/plugins/cms/api/plugin.mjs +164 -755
- package/dist/packages/stack/src/plugins/cms/client/components/forms/content-form.cjs +2 -1
- package/dist/packages/stack/src/plugins/cms/client/components/forms/content-form.mjs +2 -1
- package/dist/packages/stack/src/plugins/cms/client/components/forms/file-upload.cjs +2 -1
- package/dist/packages/stack/src/plugins/cms/client/components/forms/file-upload.mjs +2 -1
- package/dist/packages/stack/src/plugins/cms/client/components/forms/relation-field.cjs +2 -1
- package/dist/packages/stack/src/plugins/cms/client/components/forms/relation-field.mjs +2 -1
- package/dist/packages/stack/src/plugins/cms/client/components/inverse-relations-panel.cjs +23 -13
- package/dist/packages/stack/src/plugins/cms/client/components/inverse-relations-panel.mjs +24 -14
- package/dist/packages/stack/src/plugins/cms/client/components/pages/404-page.cjs +5 -4
- package/dist/packages/stack/src/plugins/cms/client/components/pages/404-page.mjs +6 -5
- package/dist/packages/stack/src/plugins/cms/client/components/pages/content-editor-page.cjs +40 -7
- package/dist/packages/stack/src/plugins/cms/client/components/pages/content-editor-page.internal.cjs +15 -9
- package/dist/packages/stack/src/plugins/cms/client/components/pages/content-editor-page.internal.mjs +14 -8
- package/dist/packages/stack/src/plugins/cms/client/components/pages/content-editor-page.mjs +41 -8
- package/dist/packages/stack/src/plugins/cms/client/components/pages/content-list-page.cjs +7 -1
- package/dist/packages/stack/src/plugins/cms/client/components/pages/content-list-page.internal.cjs +42 -29
- package/dist/packages/stack/src/plugins/cms/client/components/pages/content-list-page.internal.mjs +40 -27
- package/dist/packages/stack/src/plugins/cms/client/components/pages/content-list-page.mjs +7 -1
- package/dist/packages/stack/src/plugins/cms/client/components/pages/dashboard-page.cjs +4 -1
- package/dist/packages/stack/src/plugins/cms/client/components/pages/dashboard-page.internal.cjs +13 -7
- package/dist/packages/stack/src/plugins/cms/client/components/pages/dashboard-page.internal.mjs +12 -6
- package/dist/packages/stack/src/plugins/cms/client/components/pages/dashboard-page.mjs +4 -1
- package/dist/packages/stack/src/plugins/cms/client/components/shared/page-wrapper.cjs +2 -1
- package/dist/packages/stack/src/plugins/cms/client/components/shared/page-wrapper.mjs +2 -1
- package/dist/packages/stack/src/plugins/cms/client/constants.cjs +5 -0
- package/dist/packages/stack/src/plugins/cms/client/constants.mjs +3 -0
- package/dist/packages/stack/src/plugins/cms/client/hooks/cms-resource.cjs +2 -1
- package/dist/packages/stack/src/plugins/cms/client/hooks/cms-resource.mjs +2 -1
- package/dist/packages/stack/src/plugins/cms/client/overrides.cjs +26 -0
- package/dist/packages/stack/src/plugins/cms/client/overrides.mjs +24 -0
- package/dist/packages/stack/src/plugins/cms/client/plugin.cjs +102 -81
- package/dist/packages/stack/src/plugins/cms/client/plugin.mjs +103 -82
- package/dist/packages/stack/src/plugins/comments/api/getters.cjs +6 -2
- package/dist/packages/stack/src/plugins/comments/api/getters.mjs +6 -3
- package/dist/packages/stack/src/plugins/comments/api/lifecycle-migrations.cjs +18 -0
- package/dist/packages/stack/src/plugins/comments/api/lifecycle-migrations.mjs +16 -0
- package/dist/packages/stack/src/plugins/comments/api/mutations.cjs +179 -68
- package/dist/packages/stack/src/plugins/comments/api/mutations.mjs +179 -68
- package/dist/packages/stack/src/plugins/comments/api/operations.cjs +453 -0
- package/dist/packages/stack/src/plugins/comments/api/operations.mjs +445 -0
- package/dist/packages/stack/src/plugins/comments/api/plugin.cjs +51 -276
- package/dist/packages/stack/src/plugins/comments/api/plugin.mjs +48 -277
- package/dist/packages/stack/src/plugins/comments/client/components/comment-count.cjs +32 -5
- package/dist/packages/stack/src/plugins/comments/client/components/comment-count.mjs +34 -7
- package/dist/packages/stack/src/plugins/comments/client/components/comment-thread.cjs +160 -104
- package/dist/packages/stack/src/plugins/comments/client/components/comment-thread.mjs +161 -105
- package/dist/packages/stack/src/plugins/comments/client/components/pages/moderation-page.cjs +14 -2
- package/dist/packages/stack/src/plugins/comments/client/components/pages/moderation-page.internal.cjs +141 -71
- package/dist/packages/stack/src/plugins/comments/client/components/pages/moderation-page.internal.mjs +142 -72
- package/dist/packages/stack/src/plugins/comments/client/components/pages/moderation-page.mjs +14 -2
- package/dist/packages/stack/src/plugins/comments/client/components/pages/moderation-state.cjs +12 -0
- package/dist/packages/stack/src/plugins/comments/client/components/pages/moderation-state.mjs +9 -0
- package/dist/packages/stack/src/plugins/comments/client/components/pages/my-comments-page.cjs +2 -1
- package/dist/packages/stack/src/plugins/comments/client/components/pages/my-comments-page.internal.cjs +40 -26
- package/dist/packages/stack/src/plugins/comments/client/components/pages/my-comments-page.internal.mjs +40 -26
- package/dist/packages/stack/src/plugins/comments/client/components/pages/my-comments-page.mjs +2 -1
- package/dist/packages/stack/src/plugins/comments/client/components/pages/resource-comments-page.cjs +9 -1
- package/dist/packages/stack/src/plugins/comments/client/components/pages/resource-comments-page.internal.cjs +25 -20
- package/dist/packages/stack/src/plugins/comments/client/components/pages/resource-comments-page.internal.mjs +26 -21
- package/dist/packages/stack/src/plugins/comments/client/components/pages/resource-comments-page.mjs +9 -1
- package/dist/packages/stack/src/plugins/comments/client/components/shared/page-wrapper.cjs +2 -1
- package/dist/packages/stack/src/plugins/comments/client/components/shared/page-wrapper.mjs +2 -1
- package/dist/packages/stack/src/plugins/comments/client/components/shared/pagination.cjs +2 -1
- package/dist/packages/stack/src/plugins/comments/client/components/shared/pagination.mjs +2 -1
- package/dist/packages/stack/src/plugins/comments/client/constants.cjs +5 -0
- package/dist/packages/stack/src/plugins/comments/client/constants.mjs +3 -0
- package/dist/packages/stack/src/plugins/comments/client/hooks/use-comments.cjs +323 -290
- package/dist/packages/stack/src/plugins/comments/client/hooks/use-comments.mjs +325 -292
- package/dist/packages/stack/src/plugins/comments/client/localization/comments-thread.cjs +1 -0
- package/dist/packages/stack/src/plugins/comments/client/localization/comments-thread.mjs +1 -0
- package/dist/packages/stack/src/plugins/comments/client/plugin.cjs +78 -46
- package/dist/packages/stack/src/plugins/comments/client/plugin.mjs +80 -48
- package/dist/packages/stack/src/plugins/form-builder/api/getters.cjs +9 -0
- package/dist/packages/stack/src/plugins/form-builder/api/getters.mjs +9 -1
- package/dist/packages/stack/src/plugins/form-builder/api/lifecycle-migrations.cjs +15 -0
- package/dist/packages/stack/src/plugins/form-builder/api/lifecycle-migrations.mjs +13 -0
- package/dist/packages/stack/src/plugins/form-builder/api/operations.cjs +1093 -0
- package/dist/packages/stack/src/plugins/form-builder/api/operations.mjs +1082 -0
- package/dist/packages/stack/src/plugins/form-builder/api/plugin.cjs +97 -466
- package/dist/packages/stack/src/plugins/form-builder/api/plugin.mjs +92 -468
- package/dist/packages/stack/src/plugins/form-builder/api/query-key-defs.cjs +5 -0
- package/dist/packages/stack/src/plugins/form-builder/api/query-key-defs.mjs +5 -0
- package/dist/packages/stack/src/plugins/form-builder/client/components/forms/form-renderer.cjs +41 -11
- package/dist/packages/stack/src/plugins/form-builder/client/components/forms/form-renderer.mjs +42 -12
- package/dist/packages/stack/src/plugins/form-builder/client/components/pages/404-page.cjs +8 -5
- package/dist/packages/stack/src/plugins/form-builder/client/components/pages/404-page.mjs +9 -6
- package/dist/packages/stack/src/plugins/form-builder/client/components/pages/form-builder-page.cjs +36 -3
- package/dist/packages/stack/src/plugins/form-builder/client/components/pages/form-builder-page.internal.cjs +32 -11
- package/dist/packages/stack/src/plugins/form-builder/client/components/pages/form-builder-page.internal.mjs +35 -14
- package/dist/packages/stack/src/plugins/form-builder/client/components/pages/form-builder-page.mjs +37 -4
- package/dist/packages/stack/src/plugins/form-builder/client/components/pages/form-list-page.cjs +6 -1
- package/dist/packages/stack/src/plugins/form-builder/client/components/pages/form-list-page.internal.cjs +34 -26
- package/dist/packages/stack/src/plugins/form-builder/client/components/pages/form-list-page.internal.mjs +34 -26
- package/dist/packages/stack/src/plugins/form-builder/client/components/pages/form-list-page.mjs +6 -1
- package/dist/packages/stack/src/plugins/form-builder/client/components/pages/submissions-page.cjs +24 -7
- package/dist/packages/stack/src/plugins/form-builder/client/components/pages/submissions-page.internal.cjs +72 -40
- package/dist/packages/stack/src/plugins/form-builder/client/components/pages/submissions-page.internal.mjs +76 -44
- package/dist/packages/stack/src/plugins/form-builder/client/components/pages/submissions-page.mjs +25 -8
- package/dist/packages/stack/src/plugins/form-builder/client/components/shared/page-wrapper.cjs +2 -1
- package/dist/packages/stack/src/plugins/form-builder/client/components/shared/page-wrapper.mjs +2 -1
- package/dist/packages/stack/src/plugins/form-builder/client/constants.cjs +5 -0
- package/dist/packages/stack/src/plugins/form-builder/client/constants.mjs +3 -0
- package/dist/packages/stack/src/plugins/form-builder/client/hooks/form-builder-hooks.cjs +29 -0
- package/dist/packages/stack/src/plugins/form-builder/client/hooks/form-builder-hooks.mjs +28 -1
- package/dist/packages/stack/src/plugins/form-builder/client/hooks/form-builder-resource.cjs +2 -1
- package/dist/packages/stack/src/plugins/form-builder/client/hooks/form-builder-resource.mjs +2 -1
- package/dist/packages/stack/src/plugins/form-builder/client/plugin.cjs +113 -86
- package/dist/packages/stack/src/plugins/form-builder/client/plugin.mjs +114 -87
- package/dist/packages/stack/src/plugins/form-builder/schemas.cjs +9 -3
- package/dist/packages/stack/src/plugins/form-builder/schemas.mjs +9 -3
- package/dist/packages/stack/src/plugins/kanban/api/getters.cjs +47 -36
- package/dist/packages/stack/src/plugins/kanban/api/getters.mjs +47 -37
- package/dist/packages/stack/src/plugins/kanban/api/lifecycle-migrations.cjs +23 -0
- package/dist/packages/stack/src/plugins/kanban/api/lifecycle-migrations.mjs +21 -0
- package/dist/packages/stack/src/plugins/kanban/api/operations.cjs +1552 -0
- package/dist/packages/stack/src/plugins/kanban/api/operations.mjs +1543 -0
- package/dist/packages/stack/src/plugins/kanban/api/plugin.cjs +64 -631
- package/dist/packages/stack/src/plugins/kanban/api/plugin.mjs +62 -634
- package/dist/packages/stack/src/plugins/kanban/api/serializers.cjs +21 -0
- package/dist/packages/stack/src/plugins/kanban/api/serializers.mjs +21 -1
- package/dist/packages/stack/src/plugins/kanban/client/components/forms/board-form.cjs +2 -1
- package/dist/packages/stack/src/plugins/kanban/client/components/forms/board-form.mjs +2 -1
- package/dist/packages/stack/src/plugins/kanban/client/components/forms/column-form.cjs +2 -1
- package/dist/packages/stack/src/plugins/kanban/client/components/forms/column-form.mjs +2 -1
- package/dist/packages/stack/src/plugins/kanban/client/components/forms/task-form.cjs +72 -54
- package/dist/packages/stack/src/plugins/kanban/client/components/forms/task-form.mjs +74 -56
- package/dist/packages/stack/src/plugins/kanban/client/components/pages/404-page.cjs +4 -6
- package/dist/packages/stack/src/plugins/kanban/client/components/pages/404-page.mjs +5 -7
- package/dist/packages/stack/src/plugins/kanban/client/components/pages/board-page.cjs +22 -6
- package/dist/packages/stack/src/plugins/kanban/client/components/pages/board-page.internal.cjs +82 -77
- package/dist/packages/stack/src/plugins/kanban/client/components/pages/board-page.internal.mjs +83 -78
- package/dist/packages/stack/src/plugins/kanban/client/components/pages/board-page.mjs +23 -7
- package/dist/packages/stack/src/plugins/kanban/client/components/pages/boards-list-page.cjs +2 -1
- package/dist/packages/stack/src/plugins/kanban/client/components/pages/boards-list-page.internal.cjs +34 -24
- package/dist/packages/stack/src/plugins/kanban/client/components/pages/boards-list-page.internal.mjs +35 -25
- package/dist/packages/stack/src/plugins/kanban/client/components/pages/boards-list-page.mjs +2 -1
- package/dist/packages/stack/src/plugins/kanban/client/components/pages/new-board-page.cjs +2 -1
- package/dist/packages/stack/src/plugins/kanban/client/components/pages/new-board-page.internal.cjs +6 -9
- package/dist/packages/stack/src/plugins/kanban/client/components/pages/new-board-page.internal.mjs +7 -10
- package/dist/packages/stack/src/plugins/kanban/client/components/pages/new-board-page.mjs +2 -1
- package/dist/packages/stack/src/plugins/kanban/client/components/shared/column-content.cjs +72 -45
- package/dist/packages/stack/src/plugins/kanban/client/components/shared/column-content.mjs +73 -46
- package/dist/packages/stack/src/plugins/kanban/client/components/shared/default-error.cjs +2 -1
- package/dist/packages/stack/src/plugins/kanban/client/components/shared/default-error.mjs +2 -1
- package/dist/packages/stack/src/plugins/kanban/client/components/shared/kanban-board.cjs +4 -4
- package/dist/packages/stack/src/plugins/kanban/client/components/shared/kanban-board.mjs +4 -4
- package/dist/packages/stack/src/plugins/kanban/client/components/shared/permission-access-any.cjs +23 -0
- package/dist/packages/stack/src/plugins/kanban/client/components/shared/permission-access-any.mjs +21 -0
- package/dist/packages/stack/src/plugins/kanban/client/components/shared/task-card.cjs +54 -17
- package/dist/packages/stack/src/plugins/kanban/client/components/shared/task-card.mjs +55 -18
- package/dist/packages/stack/src/plugins/kanban/client/components/shared/user-avatar.cjs +2 -1
- package/dist/packages/stack/src/plugins/kanban/client/components/shared/user-avatar.mjs +2 -1
- package/dist/packages/stack/src/plugins/kanban/client/constants.cjs +5 -0
- package/dist/packages/stack/src/plugins/kanban/client/constants.mjs +3 -0
- package/dist/packages/stack/src/plugins/kanban/client/hooks/kanban-hooks.cjs +38 -9
- package/dist/packages/stack/src/plugins/kanban/client/hooks/kanban-hooks.mjs +39 -10
- package/dist/packages/stack/src/plugins/kanban/client/hooks/kanban-resource.cjs +2 -1
- package/dist/packages/stack/src/plugins/kanban/client/hooks/kanban-resource.mjs +2 -1
- package/dist/packages/stack/src/plugins/kanban/client/plugin.cjs +177 -104
- package/dist/packages/stack/src/plugins/kanban/client/plugin.mjs +178 -105
- package/dist/packages/stack/src/plugins/kanban/schemas.cjs +32 -23
- package/dist/packages/stack/src/plugins/kanban/schemas.mjs +33 -21
- package/dist/packages/stack/src/plugins/media/api/lifecycle-migrations.cjs +9 -0
- package/dist/packages/stack/src/plugins/media/api/lifecycle-migrations.mjs +7 -0
- package/dist/packages/stack/src/plugins/media/api/mutations.cjs +7 -2
- package/dist/packages/stack/src/plugins/media/api/mutations.mjs +7 -2
- package/dist/packages/stack/src/plugins/media/api/operations.cjs +1299 -0
- package/dist/packages/stack/src/plugins/media/api/operations.mjs +1290 -0
- package/dist/packages/stack/src/plugins/media/api/plugin.cjs +131 -508
- package/dist/packages/stack/src/plugins/media/api/plugin.mjs +127 -510
- package/dist/packages/stack/src/plugins/media/api/query-key-defs.cjs +26 -2
- package/dist/packages/stack/src/plugins/media/api/query-key-defs.mjs +25 -3
- package/dist/packages/stack/src/plugins/media/api/serializers.cjs +4 -2
- package/dist/packages/stack/src/plugins/media/api/serializers.mjs +4 -2
- package/dist/packages/stack/src/plugins/media/asset-url.cjs +13 -0
- package/dist/packages/stack/src/plugins/media/asset-url.mjs +11 -0
- package/dist/packages/stack/src/plugins/media/client/components/media-picker/asset-card.cjs +10 -10
- package/dist/packages/stack/src/plugins/media/client/components/media-picker/asset-card.mjs +12 -12
- package/dist/packages/stack/src/plugins/media/client/components/media-picker/folder-tree.cjs +47 -27
- package/dist/packages/stack/src/plugins/media/client/components/media-picker/folder-tree.mjs +49 -29
- package/dist/packages/stack/src/plugins/media/client/components/media-picker/index.cjs +225 -180
- package/dist/packages/stack/src/plugins/media/client/components/media-picker/index.mjs +228 -183
- package/dist/packages/stack/src/plugins/media/client/components/media-picker/upload-tab.cjs +1 -8
- package/dist/packages/stack/src/plugins/media/client/components/media-picker/upload-tab.mjs +2 -9
- package/dist/packages/stack/src/plugins/media/client/components/media-picker/url-tab.cjs +0 -6
- package/dist/packages/stack/src/plugins/media/client/components/media-picker/url-tab.mjs +1 -7
- package/dist/packages/stack/src/plugins/media/client/components/pages/library-page.cjs +4 -2
- package/dist/packages/stack/src/plugins/media/client/components/pages/library-page.internal.cjs +92 -75
- package/dist/packages/stack/src/plugins/media/client/components/pages/library-page.internal.mjs +93 -76
- package/dist/packages/stack/src/plugins/media/client/components/pages/library-page.mjs +4 -2
- package/dist/packages/stack/src/plugins/media/client/components/upload-permission-check.cjs +52 -0
- package/dist/packages/stack/src/plugins/media/client/components/upload-permission-check.mjs +49 -0
- package/dist/packages/stack/src/plugins/media/client/constants.cjs +5 -0
- package/dist/packages/stack/src/plugins/media/client/constants.mjs +3 -0
- package/dist/packages/stack/src/plugins/media/client/hooks/media-resource.cjs +2 -1
- package/dist/packages/stack/src/plugins/media/client/hooks/media-resource.mjs +2 -1
- package/dist/packages/stack/src/plugins/media/client/hooks/use-media.cjs +214 -43
- package/dist/packages/stack/src/plugins/media/client/hooks/use-media.mjs +217 -46
- package/dist/packages/stack/src/plugins/media/client/plugin.cjs +122 -62
- package/dist/packages/stack/src/plugins/media/client/plugin.mjs +123 -63
- package/dist/packages/stack/src/plugins/media/client/upload.cjs +121 -52
- package/dist/packages/stack/src/plugins/media/client/upload.mjs +121 -53
- package/dist/packages/stack/src/plugins/media/db.cjs +8 -0
- package/dist/packages/stack/src/plugins/media/db.mjs +8 -0
- package/dist/packages/stack/src/plugins/open-api/api/generator.cjs +36 -5
- package/dist/packages/stack/src/plugins/open-api/api/generator.mjs +36 -5
- package/dist/packages/stack/src/plugins/open-api/api/plugin.cjs +22 -11
- package/dist/packages/stack/src/plugins/open-api/api/plugin.mjs +22 -11
- package/dist/packages/stack/src/plugins/route-docs/client/components/pages/docs-page.cjs +65 -34
- package/dist/packages/stack/src/plugins/route-docs/client/components/pages/docs-page.mjs +56 -25
- package/dist/packages/stack/src/plugins/route-docs/client/constants.cjs +5 -0
- package/dist/packages/stack/src/plugins/route-docs/client/constants.mjs +3 -0
- package/dist/packages/stack/src/plugins/route-docs/client/hooks.cjs +9 -8
- package/dist/packages/stack/src/plugins/route-docs/client/hooks.mjs +10 -9
- package/dist/packages/stack/src/plugins/route-docs/client/plugin.cjs +143 -75
- package/dist/packages/stack/src/plugins/route-docs/client/plugin.mjs +144 -74
- package/dist/packages/stack/src/plugins/route-docs/client/schema.cjs +26 -0
- package/dist/packages/stack/src/plugins/route-docs/client/schema.mjs +23 -0
- package/dist/packages/stack/src/plugins/route-docs/generator.cjs +7 -4
- package/dist/packages/stack/src/plugins/route-docs/generator.mjs +7 -4
- package/dist/packages/stack/src/plugins/ui-builder/client/components/page-renderer.cjs +41 -12
- package/dist/packages/stack/src/plugins/ui-builder/client/components/page-renderer.mjs +42 -13
- package/dist/packages/stack/src/plugins/ui-builder/client/components/pages/page-builder-page.cjs +37 -3
- package/dist/packages/stack/src/plugins/ui-builder/client/components/pages/page-builder-page.internal.cjs +32 -20
- package/dist/packages/stack/src/plugins/ui-builder/client/components/pages/page-builder-page.internal.mjs +34 -22
- package/dist/packages/stack/src/plugins/ui-builder/client/components/pages/page-builder-page.mjs +38 -4
- package/dist/packages/stack/src/plugins/ui-builder/client/components/pages/page-list-page.cjs +8 -2
- package/dist/packages/stack/src/plugins/ui-builder/client/components/pages/page-list-page.internal.cjs +37 -19
- package/dist/packages/stack/src/plugins/ui-builder/client/components/pages/page-list-page.internal.mjs +38 -20
- package/dist/packages/stack/src/plugins/ui-builder/client/components/pages/page-list-page.mjs +8 -2
- package/dist/packages/stack/src/plugins/ui-builder/client/components/shared/default-error.cjs +2 -1
- package/dist/packages/stack/src/plugins/ui-builder/client/components/shared/default-error.mjs +2 -1
- package/dist/packages/stack/src/plugins/ui-builder/client/components/shared/page-wrapper.cjs +2 -1
- package/dist/packages/stack/src/plugins/ui-builder/client/components/shared/page-wrapper.mjs +2 -1
- package/dist/packages/stack/src/plugins/ui-builder/client/constants.cjs +5 -0
- package/dist/packages/stack/src/plugins/ui-builder/client/constants.mjs +3 -0
- package/dist/packages/stack/src/plugins/ui-builder/client/hooks/ui-builder-resource.cjs +2 -1
- package/dist/packages/stack/src/plugins/ui-builder/client/hooks/ui-builder-resource.mjs +2 -1
- package/dist/packages/stack/src/plugins/ui-builder/client/overrides.cjs +8 -0
- package/dist/packages/stack/src/plugins/ui-builder/client/overrides.mjs +6 -0
- package/dist/packages/stack/src/plugins/ui-builder/client/plugin.cjs +93 -53
- package/dist/packages/stack/src/plugins/ui-builder/client/plugin.mjs +94 -54
- package/dist/packages/stack/src/plugins/utils.cjs +4 -12
- package/dist/packages/stack/src/plugins/utils.mjs +5 -12
- package/dist/packages/stack/src/react-router/layout.cjs +14 -0
- package/dist/packages/stack/src/react-router/layout.mjs +12 -0
- package/dist/packages/stack/src/react-router/page.cjs +10 -5
- package/dist/packages/stack/src/react-router/page.mjs +11 -6
- package/dist/packages/stack/src/shared/initial-identity.cjs +27 -0
- package/dist/packages/stack/src/shared/initial-identity.mjs +23 -0
- package/dist/packages/stack/src/tanstack/layout.cjs +10 -0
- package/dist/packages/stack/src/tanstack/layout.mjs +8 -0
- package/dist/packages/stack/src/tanstack/page.cjs +6 -2
- package/dist/packages/stack/src/tanstack/page.mjs +6 -2
- package/dist/plugins/ai-chat/api/index.cjs +10 -0
- package/dist/plugins/ai-chat/api/index.d.cts +31 -5
- package/dist/plugins/ai-chat/api/index.d.mts +31 -5
- package/dist/plugins/ai-chat/api/index.d.ts +31 -5
- package/dist/plugins/ai-chat/api/index.mjs +3 -1
- package/dist/plugins/ai-chat/client/components/index.d.cts +1 -1
- package/dist/plugins/ai-chat/client/components/index.d.mts +1 -1
- package/dist/plugins/ai-chat/client/components/index.d.ts +1 -1
- package/dist/plugins/ai-chat/client/hooks/index.cjs +1 -0
- package/dist/plugins/ai-chat/client/hooks/index.d.cts +14 -8
- package/dist/plugins/ai-chat/client/hooks/index.d.mts +14 -8
- package/dist/plugins/ai-chat/client/hooks/index.d.ts +14 -8
- package/dist/plugins/ai-chat/client/hooks/index.mjs +1 -1
- package/dist/plugins/ai-chat/client/index.d.cts +21 -25
- package/dist/plugins/ai-chat/client/index.d.mts +21 -25
- package/dist/plugins/ai-chat/client/index.d.ts +21 -25
- package/dist/plugins/ai-chat/permissions.cjs +90 -0
- package/dist/plugins/ai-chat/permissions.d.cts +84 -0
- package/dist/plugins/ai-chat/permissions.d.mts +84 -0
- package/dist/plugins/ai-chat/permissions.d.ts +84 -0
- package/dist/plugins/ai-chat/permissions.mjs +88 -0
- package/dist/plugins/ai-chat/query-keys.cjs +116 -18
- package/dist/plugins/ai-chat/query-keys.d.cts +6 -2
- package/dist/plugins/ai-chat/query-keys.d.mts +6 -2
- package/dist/plugins/ai-chat/query-keys.d.ts +6 -2
- package/dist/plugins/ai-chat/query-keys.mjs +116 -19
- package/dist/plugins/api/index.cjs +4 -0
- package/dist/plugins/api/index.d.cts +13 -18
- package/dist/plugins/api/index.d.mts +13 -18
- package/dist/plugins/api/index.d.ts +13 -18
- package/dist/plugins/api/index.mjs +1 -0
- package/dist/plugins/blog/api/index.cjs +9 -2
- package/dist/plugins/blog/api/index.d.cts +118 -4
- package/dist/plugins/blog/api/index.d.mts +118 -4
- package/dist/plugins/blog/api/index.d.ts +118 -4
- package/dist/plugins/blog/api/index.mjs +4 -1
- package/dist/plugins/blog/client/hooks/index.d.cts +2 -2
- package/dist/plugins/blog/client/hooks/index.d.mts +2 -2
- package/dist/plugins/blog/client/hooks/index.d.ts +2 -2
- package/dist/plugins/blog/client/index.d.cts +210 -226
- package/dist/plugins/blog/client/index.d.mts +210 -226
- package/dist/plugins/blog/client/index.d.ts +210 -226
- package/dist/plugins/blog/permissions.cjs +47 -0
- package/dist/plugins/blog/permissions.d.cts +49 -0
- package/dist/plugins/blog/permissions.d.mts +49 -0
- package/dist/plugins/blog/permissions.d.ts +49 -0
- package/dist/plugins/blog/permissions.mjs +45 -0
- package/dist/plugins/blog/query-keys.d.cts +7 -3
- package/dist/plugins/blog/query-keys.d.mts +7 -3
- package/dist/plugins/blog/query-keys.d.ts +7 -3
- package/dist/plugins/client/hooks/index.d.cts +2 -2
- package/dist/plugins/client/hooks/index.d.mts +2 -2
- package/dist/plugins/client/hooks/index.d.ts +2 -2
- package/dist/plugins/client/index.cjs +3 -0
- package/dist/plugins/client/index.d.cts +30 -10
- package/dist/plugins/client/index.d.mts +30 -10
- package/dist/plugins/client/index.d.ts +30 -10
- package/dist/plugins/client/index.mjs +3 -0
- package/dist/plugins/cms/api/index.cjs +7 -0
- package/dist/plugins/cms/api/index.d.cts +173 -4
- package/dist/plugins/cms/api/index.d.mts +173 -4
- package/dist/plugins/cms/api/index.d.ts +173 -4
- package/dist/plugins/cms/api/index.mjs +2 -0
- package/dist/plugins/cms/client/hooks/index.d.cts +1 -1
- package/dist/plugins/cms/client/hooks/index.d.mts +1 -1
- package/dist/plugins/cms/client/hooks/index.d.ts +1 -1
- package/dist/plugins/cms/client/index.d.cts +188 -184
- package/dist/plugins/cms/client/index.d.mts +188 -184
- package/dist/plugins/cms/client/index.d.ts +188 -184
- package/dist/plugins/cms/permissions.cjs +46 -0
- package/dist/plugins/cms/permissions.d.cts +42 -0
- package/dist/plugins/cms/permissions.d.mts +42 -0
- package/dist/plugins/cms/permissions.d.ts +42 -0
- package/dist/plugins/cms/permissions.mjs +44 -0
- package/dist/plugins/cms/query-keys.d.cts +4 -4
- package/dist/plugins/cms/query-keys.d.mts +4 -4
- package/dist/plugins/cms/query-keys.d.ts +4 -4
- package/dist/plugins/comments/api/index.cjs +10 -0
- package/dist/plugins/comments/api/index.d.cts +54 -18
- package/dist/plugins/comments/api/index.d.mts +54 -18
- package/dist/plugins/comments/api/index.d.ts +54 -18
- package/dist/plugins/comments/api/index.mjs +3 -0
- package/dist/plugins/comments/client/components/index.d.cts +2 -2
- package/dist/plugins/comments/client/components/index.d.mts +2 -2
- package/dist/plugins/comments/client/components/index.d.ts +2 -2
- package/dist/plugins/comments/client/hooks/index.d.cts +12 -18
- package/dist/plugins/comments/client/hooks/index.d.mts +12 -18
- package/dist/plugins/comments/client/hooks/index.d.ts +12 -18
- package/dist/plugins/comments/client/index.d.cts +96 -114
- package/dist/plugins/comments/client/index.d.mts +96 -114
- package/dist/plugins/comments/client/index.d.ts +96 -114
- package/dist/plugins/comments/permissions.cjs +70 -0
- package/dist/plugins/comments/permissions.d.cts +76 -0
- package/dist/plugins/comments/permissions.d.mts +76 -0
- package/dist/plugins/comments/permissions.d.ts +76 -0
- package/dist/plugins/comments/permissions.mjs +68 -0
- package/dist/plugins/comments/query-keys.cjs +1 -1
- package/dist/plugins/comments/query-keys.d.cts +16 -19
- package/dist/plugins/comments/query-keys.d.mts +16 -19
- package/dist/plugins/comments/query-keys.d.ts +16 -19
- package/dist/plugins/comments/query-keys.mjs +1 -1
- package/dist/plugins/form-builder/api/index.cjs +8 -0
- package/dist/plugins/form-builder/api/index.d.cts +115 -4
- package/dist/plugins/form-builder/api/index.d.mts +115 -4
- package/dist/plugins/form-builder/api/index.d.ts +115 -4
- package/dist/plugins/form-builder/api/index.mjs +4 -1
- package/dist/plugins/form-builder/client/components/index.d.cts +6 -2
- package/dist/plugins/form-builder/client/components/index.d.mts +6 -2
- package/dist/plugins/form-builder/client/components/index.d.ts +6 -2
- package/dist/plugins/form-builder/client/hooks/index.cjs +2 -0
- package/dist/plugins/form-builder/client/hooks/index.d.cts +34 -8
- package/dist/plugins/form-builder/client/hooks/index.d.mts +34 -8
- package/dist/plugins/form-builder/client/hooks/index.d.ts +34 -8
- package/dist/plugins/form-builder/client/hooks/index.mjs +1 -1
- package/dist/plugins/form-builder/client/index.d.cts +153 -174
- package/dist/plugins/form-builder/client/index.d.mts +153 -174
- package/dist/plugins/form-builder/client/index.d.ts +153 -174
- package/dist/plugins/form-builder/permissions.cjs +95 -0
- package/dist/plugins/form-builder/permissions.d.cts +94 -0
- package/dist/plugins/form-builder/permissions.d.mts +94 -0
- package/dist/plugins/form-builder/permissions.d.ts +94 -0
- package/dist/plugins/form-builder/permissions.mjs +93 -0
- package/dist/plugins/form-builder/query-keys.cjs +11 -4
- package/dist/plugins/form-builder/query-keys.d.cts +38 -12
- package/dist/plugins/form-builder/query-keys.d.mts +38 -12
- package/dist/plugins/form-builder/query-keys.d.ts +38 -12
- package/dist/plugins/form-builder/query-keys.mjs +11 -4
- package/dist/plugins/kanban/api/index.cjs +9 -0
- package/dist/plugins/kanban/api/index.d.cts +137 -5
- package/dist/plugins/kanban/api/index.d.mts +137 -5
- package/dist/plugins/kanban/api/index.d.ts +137 -5
- package/dist/plugins/kanban/api/index.mjs +5 -2
- package/dist/plugins/kanban/client/components/index.d.cts +18 -10
- package/dist/plugins/kanban/client/components/index.d.mts +18 -10
- package/dist/plugins/kanban/client/components/index.d.ts +18 -10
- package/dist/plugins/kanban/client/hooks/index.d.cts +15 -7
- package/dist/plugins/kanban/client/hooks/index.d.mts +15 -7
- package/dist/plugins/kanban/client/hooks/index.d.ts +15 -7
- package/dist/plugins/kanban/client/index.d.cts +32 -28
- package/dist/plugins/kanban/client/index.d.mts +32 -28
- package/dist/plugins/kanban/client/index.d.ts +32 -28
- package/dist/plugins/kanban/permissions.cjs +101 -0
- package/dist/plugins/kanban/permissions.d.cts +109 -0
- package/dist/plugins/kanban/permissions.d.mts +109 -0
- package/dist/plugins/kanban/permissions.d.ts +109 -0
- package/dist/plugins/kanban/permissions.mjs +99 -0
- package/dist/plugins/kanban/query-keys.cjs +14 -15
- package/dist/plugins/kanban/query-keys.d.cts +63 -42
- package/dist/plugins/kanban/query-keys.d.mts +63 -42
- package/dist/plugins/kanban/query-keys.d.ts +63 -42
- package/dist/plugins/kanban/query-keys.mjs +14 -15
- package/dist/plugins/media/api/adapters/local.d.cts +1 -1
- package/dist/plugins/media/api/adapters/local.d.mts +1 -1
- package/dist/plugins/media/api/adapters/local.d.ts +1 -1
- package/dist/plugins/media/api/adapters/s3.d.cts +1 -1
- package/dist/plugins/media/api/adapters/s3.d.mts +1 -1
- package/dist/plugins/media/api/adapters/s3.d.ts +1 -1
- package/dist/plugins/media/api/adapters/vercel-blob.cjs +46 -0
- package/dist/plugins/media/api/adapters/vercel-blob.d.cts +6 -9
- package/dist/plugins/media/api/adapters/vercel-blob.d.mts +6 -9
- package/dist/plugins/media/api/adapters/vercel-blob.d.ts +6 -9
- package/dist/plugins/media/api/adapters/vercel-blob.mjs +46 -0
- package/dist/plugins/media/api/index.cjs +10 -0
- package/dist/plugins/media/api/index.d.cts +93 -6
- package/dist/plugins/media/api/index.d.mts +93 -6
- package/dist/plugins/media/api/index.d.ts +93 -6
- package/dist/plugins/media/api/index.mjs +2 -0
- package/dist/plugins/media/client/components/index.d.cts +1 -1
- package/dist/plugins/media/client/components/index.d.mts +1 -1
- package/dist/plugins/media/client/components/index.d.ts +1 -1
- package/dist/plugins/media/client/hooks/index.d.cts +20 -10
- package/dist/plugins/media/client/hooks/index.d.mts +20 -10
- package/dist/plugins/media/client/hooks/index.d.ts +20 -10
- package/dist/plugins/media/client/index.cjs +1 -0
- package/dist/plugins/media/client/index.d.cts +112 -100
- package/dist/plugins/media/client/index.d.mts +112 -100
- package/dist/plugins/media/client/index.d.ts +112 -100
- package/dist/plugins/media/client/index.mjs +1 -1
- package/dist/plugins/media/permissions.cjs +63 -0
- package/dist/plugins/media/permissions.d.cts +64 -0
- package/dist/plugins/media/permissions.d.mts +64 -0
- package/dist/plugins/media/permissions.d.ts +64 -0
- package/dist/plugins/media/permissions.mjs +61 -0
- package/dist/plugins/media/query-keys.cjs +29 -17
- package/dist/plugins/media/query-keys.d.cts +24 -31
- package/dist/plugins/media/query-keys.d.mts +24 -31
- package/dist/plugins/media/query-keys.d.ts +24 -31
- package/dist/plugins/media/query-keys.mjs +30 -18
- package/dist/plugins/open-api/api/index.d.cts +9 -4
- package/dist/plugins/open-api/api/index.d.mts +9 -4
- package/dist/plugins/open-api/api/index.d.ts +9 -4
- package/dist/plugins/route-docs/client/index.cjs +2 -2
- package/dist/plugins/route-docs/client/index.d.cts +54 -53
- package/dist/plugins/route-docs/client/index.d.mts +54 -53
- package/dist/plugins/route-docs/client/index.d.ts +54 -53
- package/dist/plugins/route-docs/client/index.mjs +2 -1
- package/dist/plugins/ui-builder/client/components/index.d.cts +8 -5
- package/dist/plugins/ui-builder/client/components/index.d.mts +8 -5
- package/dist/plugins/ui-builder/client/components/index.d.ts +8 -5
- package/dist/plugins/ui-builder/client/hooks/index.d.cts +5 -5
- package/dist/plugins/ui-builder/client/hooks/index.d.mts +5 -5
- package/dist/plugins/ui-builder/client/hooks/index.d.ts +5 -5
- package/dist/plugins/ui-builder/client/index.d.cts +151 -199
- package/dist/plugins/ui-builder/client/index.d.mts +151 -199
- package/dist/plugins/ui-builder/client/index.d.ts +151 -199
- package/dist/plugins/ui-builder/index.d.cts +11 -8
- package/dist/plugins/ui-builder/index.d.mts +11 -8
- package/dist/plugins/ui-builder/index.d.ts +11 -8
- package/dist/plugins/ui-builder/query-keys.d.cts +6 -6
- package/dist/plugins/ui-builder/query-keys.d.mts +6 -6
- package/dist/plugins/ui-builder/query-keys.d.ts +6 -6
- package/dist/react-router/index.cjs +2 -0
- package/dist/react-router/index.d.cts +29 -5
- package/dist/react-router/index.d.mts +29 -5
- package/dist/react-router/index.d.ts +29 -5
- package/dist/react-router/index.mjs +1 -0
- package/dist/shared/stack.0O62uXqP.d.ts +613 -0
- package/dist/shared/stack.0y6iTP03.d.ts +533 -0
- package/dist/shared/{stack.CbZenbej.d.cts → stack.1ukVJym7.d.cts} +3 -4
- package/dist/shared/{stack.CbZenbej.d.mts → stack.1ukVJym7.d.mts} +3 -4
- package/dist/shared/{stack.CbZenbej.d.ts → stack.1ukVJym7.d.ts} +3 -4
- package/dist/shared/stack.3Sr6qRtT.d.ts +507 -0
- package/dist/shared/{stack.9BAOaSqE.d.cts → stack.5_zzCejP.d.cts} +16 -14
- package/dist/shared/{stack.9BAOaSqE.d.mts → stack.5_zzCejP.d.mts} +16 -14
- package/dist/shared/{stack.9BAOaSqE.d.ts → stack.5_zzCejP.d.ts} +16 -14
- package/dist/shared/stack.B1UrNoVl.d.mts +533 -0
- package/dist/shared/{stack.B2xi4jj7.d.cts → stack.B1srlBud.d.mts} +2 -2
- package/dist/shared/stack.B3_aDcYL.d.cts +281 -0
- package/dist/shared/stack.B3_aDcYL.d.mts +281 -0
- package/dist/shared/stack.B3_aDcYL.d.ts +281 -0
- package/dist/shared/stack.B5yPgHsp.d.mts +507 -0
- package/dist/shared/stack.B8PG21zX.d.mts +764 -0
- package/dist/shared/stack.BFP_9pRX.d.cts +707 -0
- package/dist/shared/{stack.DzwZw-Ck.d.cts → stack.BGzgFx3R.d.cts} +2 -2
- package/dist/shared/stack.BJx1ZXrN.d.cts +118 -0
- package/dist/shared/{stack.7b3vsM8_.d.ts → stack.BK9Z2dcL.d.ts} +2 -2
- package/dist/shared/stack.BMHoxAn7.d.mts +707 -0
- package/dist/shared/stack.BMmvEBH_.d.ts +118 -0
- package/dist/shared/stack.BOZRaVpu.d.cts +1184 -0
- package/dist/shared/stack.BPLykw4s.d.ts +436 -0
- package/dist/shared/{stack.aqVZ6PEW.d.mts → stack.BRvqQWGt.d.cts} +40 -1
- package/dist/shared/{stack.aqVZ6PEW.d.cts → stack.BRvqQWGt.d.mts} +40 -1
- package/dist/shared/{stack.aqVZ6PEW.d.ts → stack.BRvqQWGt.d.ts} +40 -1
- package/dist/shared/stack.BSACE667.d.cts +23 -0
- package/dist/shared/stack.BYMentwB.d.cts +47 -0
- package/dist/shared/stack.BYMentwB.d.mts +47 -0
- package/dist/shared/stack.BYMentwB.d.ts +47 -0
- package/dist/shared/stack.Bt8hfw9o.d.ts +707 -0
- package/dist/shared/{stack.D7bewlgt.d.mts → stack.Bu2IPOLi.d.cts} +1 -0
- package/dist/shared/{stack.D7bewlgt.d.ts → stack.Bu2IPOLi.d.mts} +1 -0
- package/dist/shared/{stack.D7bewlgt.d.cts → stack.Bu2IPOLi.d.ts} +1 -0
- package/dist/shared/stack.BuxUQqL8.d.ts +408 -0
- package/dist/shared/stack.BzWGB5MG.d.cts +436 -0
- package/dist/shared/stack.C3bU9w6L.d.ts +351 -0
- package/dist/shared/stack.C4oVW2qK.d.cts +507 -0
- package/dist/shared/stack.CKXzdGiJ.d.cts +3 -0
- package/dist/shared/stack.CKXzdGiJ.d.mts +3 -0
- package/dist/shared/stack.CKXzdGiJ.d.ts +3 -0
- package/dist/shared/{stack.C3GBG8in.d.ts → stack.COrJrztD.d.cts} +1 -1
- package/dist/shared/{stack.C3GBG8in.d.cts → stack.COrJrztD.d.mts} +1 -1
- package/dist/shared/{stack.C3GBG8in.d.mts → stack.COrJrztD.d.ts} +1 -1
- package/dist/shared/stack.CX83YNuS.d.cts +408 -0
- package/dist/shared/stack.Cbd7sD5M.d.mts +118 -0
- package/dist/shared/{stack.B9NtGpAR.d.ts → stack.CcjENrr4.d.cts} +1 -5
- package/dist/shared/stack.CfK5NKlK.d.mts +613 -0
- package/dist/shared/{stack.oVIdV7XS.d.mts → stack.CjCSDfWy.d.mts} +2 -2
- package/dist/shared/stack.Cmg7lzzy.d.cts +44 -0
- package/dist/shared/stack.Cmg7lzzy.d.mts +44 -0
- package/dist/shared/stack.Cmg7lzzy.d.ts +44 -0
- package/dist/shared/stack.CpE1mS3p.d.ts +331 -0
- package/dist/shared/stack.CskhFw3z.d.mts +23 -0
- package/dist/shared/stack.CvlC5kqe.d.cts +331 -0
- package/dist/shared/stack.CxKc9evq.d.ts +23 -0
- package/dist/shared/stack.CyalJ0j6.d.ts +764 -0
- package/dist/shared/stack.D6Pg-ufX.d.cts +764 -0
- package/dist/shared/{stack.lkebw2nj.d.mts → stack.DVEjWKCT.d.cts} +19 -5
- package/dist/shared/{stack.lkebw2nj.d.ts → stack.DVEjWKCT.d.mts} +19 -5
- package/dist/shared/{stack.lkebw2nj.d.cts → stack.DVEjWKCT.d.ts} +19 -5
- package/dist/shared/{stack.Cp_6mO5s.d.mts → stack.DbbvHbhn.d.mts} +1 -5
- package/dist/shared/stack.DiuRuzIs.d.cts +613 -0
- package/dist/shared/{stack.BMlLOMED.d.cts → stack.DjGixVx3.d.cts} +6 -2
- package/dist/shared/{stack.BMlLOMED.d.mts → stack.DjGixVx3.d.mts} +6 -2
- package/dist/shared/{stack.BMlLOMED.d.ts → stack.DjGixVx3.d.ts} +6 -2
- package/dist/shared/stack.DlBoNqYu.d.ts +1184 -0
- package/dist/shared/stack.DlCycSM-.d.mts +331 -0
- package/dist/shared/{stack.DycBcTeg.d.mts → stack.DmpPDPxA.d.cts} +2 -2
- package/dist/shared/{stack.DseBJmGF.d.ts → stack.Dpg_JjIo.d.ts} +2 -2
- package/dist/shared/stack.Dvy7FmaA.d.mts +1184 -0
- package/dist/shared/stack.DxHPKr2R.d.mts +436 -0
- package/dist/shared/stack.Egr3RWhA.d.mts +408 -0
- package/dist/shared/stack.Mak7pzIV.d.cts +533 -0
- package/dist/shared/stack.OYT8WU4n.d.mts +351 -0
- package/dist/shared/{stack.CPsYC2-Z.d.cts → stack.fdi94T4S.d.cts} +7 -7
- package/dist/shared/{stack.CPsYC2-Z.d.mts → stack.fdi94T4S.d.mts} +7 -7
- package/dist/shared/{stack.CPsYC2-Z.d.ts → stack.fdi94T4S.d.ts} +7 -7
- package/dist/shared/{stack.Dlgtumru.d.cts → stack.kaCV7vEL.d.ts} +1 -5
- package/dist/shared/stack.v2O65JqF.d.cts +351 -0
- package/dist/tanstack/index.cjs +2 -0
- package/dist/tanstack/index.d.cts +27 -5
- package/dist/tanstack/index.d.mts +27 -5
- package/dist/tanstack/index.d.ts +27 -5
- package/dist/tanstack/index.mjs +1 -0
- package/dist/tanstack/server.cjs +9 -0
- package/dist/tanstack/server.d.cts +15 -0
- package/dist/tanstack/server.d.mts +15 -0
- package/dist/tanstack/server.d.ts +15 -0
- package/dist/tanstack/server.mjs +7 -0
- package/package.json +198 -3
- package/src/__tests__/ai-chat-client-runtime.test.ts +481 -0
- package/src/__tests__/ai-chat-client-runtime.typecheck.tsx +130 -0
- package/src/__tests__/ai-chat-lifecycle-migrations.typecheck.ts +61 -0
- package/src/__tests__/ai-chat-query-keys.test.ts +125 -22
- package/src/__tests__/auth-provider.test.tsx +41 -314
- package/src/__tests__/auth-test-utils.ts +24 -0
- package/src/__tests__/authorization-client.test.tsx +767 -0
- package/src/__tests__/authorization-contraction.test.ts +182 -0
- package/src/__tests__/authorization-remote.test.ts +222 -0
- package/src/__tests__/authorization-server.test.ts +90 -0
- package/src/__tests__/authorization.test.ts +652 -0
- package/src/__tests__/authorization.typecheck.ts +671 -0
- package/src/__tests__/backend-plugin-factories.test.ts +54 -0
- package/src/__tests__/backend-plugin-factories.typecheck.ts +133 -0
- package/src/__tests__/client-plugin-ssr-loaders.test.ts +304 -138
- package/src/__tests__/client-runtime.test.ts +1021 -0
- package/src/__tests__/client-runtime.typecheck.ts +107 -0
- package/src/__tests__/client-stack-test-utils.ts +36 -0
- package/src/__tests__/content-lifecycle-migrations.typecheck.ts +122 -0
- package/src/__tests__/endpoint-inventory.test.ts +768 -0
- package/src/__tests__/form-builder-query-keys.test.ts +32 -0
- package/src/__tests__/i18n-provider.test.tsx +4 -3
- package/src/__tests__/initial-identity-hydration.test.tsx +156 -0
- package/src/__tests__/initial-identity-layouts.test.tsx +204 -0
- package/src/__tests__/kanban-query-keys.test.ts +189 -2
- package/src/__tests__/managed-origin-hydration.browser.test.tsx +163 -0
- package/src/__tests__/media-query-keys.test.ts +91 -17
- package/src/__tests__/notify-provider.test.tsx +3 -2
- package/src/__tests__/package-metadata.test.ts +294 -0
- package/src/__tests__/page-component-overrides.test.tsx +3 -4
- package/src/__tests__/plugin-registration.test.tsx +183 -0
- package/src/__tests__/plugin-registration.typecheck.tsx +139 -0
- package/src/__tests__/plugins.test.tsx +72 -42
- package/src/__tests__/resource-factory.test.tsx +79 -2
- package/src/__tests__/resource-use-form.test.tsx +2 -2
- package/src/__tests__/resource-use-select.test.tsx +2 -4
- package/src/__tests__/router-overrides.test.tsx +20 -8
- package/src/__tests__/sitemap.test.ts +38 -22
- package/src/__tests__/stack-api.test.ts +39 -34
- package/src/__tests__/stack-auth.test.ts +44 -140
- package/src/__tests__/stack-constructors.test.ts +96 -0
- package/src/__tests__/stack-constructors.typecheck.ts +115 -0
- package/src/__tests__/use-list-state.test.tsx +7 -6
- package/src/__tests__/workflow-lifecycle-migrations.typecheck.ts +150 -0
- package/src/api/index.ts +204 -99
- package/src/authorization/client.tsx +310 -0
- package/src/authorization/index.ts +873 -0
- package/src/authorization/json.ts +70 -0
- package/src/authorization/remote.ts +234 -0
- package/src/authorization/server.ts +171 -0
- package/src/client/__tests__/server-origin.test.ts +119 -0
- package/src/client/components/compose.tsx +126 -18
- package/src/client/hooks/index.ts +12 -0
- package/src/client/hooks/use-list-state.ts +7 -13
- package/src/client/index.ts +105 -50
- package/src/client/runtime.ts +414 -0
- package/src/client/server.ts +174 -0
- package/src/context/auth.tsx +205 -154
- package/src/context/index.ts +10 -4
- package/src/context/provider.tsx +96 -57
- package/src/context/router.tsx +7 -0
- package/src/context/site-navigation.ts +52 -0
- package/src/next/layout.tsx +81 -0
- package/src/next/page.tsx +16 -3
- package/src/next/router.tsx +1 -1
- package/src/next/server.ts +5 -0
- package/src/plugin-registration.ts +70 -0
- package/src/plugins/ai-chat/__tests__/authorization.test.ts +2051 -0
- package/src/plugins/ai-chat/__tests__/chat-hooks.test.tsx +147 -0
- package/src/plugins/ai-chat/__tests__/chat-input-authorization.test.tsx +188 -0
- package/src/plugins/ai-chat/__tests__/client-sweep.test.tsx +1506 -34
- package/src/plugins/ai-chat/__tests__/hooks.test.tsx +131 -23
- package/src/plugins/ai-chat/api/getters.ts +2 -2
- package/src/plugins/ai-chat/api/index.ts +6 -1
- package/src/plugins/ai-chat/api/lifecycle-migrations.ts +20 -0
- package/src/plugins/ai-chat/api/operations.ts +1865 -0
- package/src/plugins/ai-chat/api/plugin.ts +78 -1168
- package/src/plugins/ai-chat/api/serializers.ts +30 -0
- package/src/plugins/ai-chat/client/components/chat-input.tsx +228 -129
- package/src/plugins/ai-chat/client/components/chat-interface.tsx +776 -183
- package/src/plugins/ai-chat/client/components/chat-layout.tsx +6 -7
- package/src/plugins/ai-chat/client/components/chat-message.tsx +1 -1
- package/src/plugins/ai-chat/client/components/chat-sidebar.tsx +57 -37
- package/src/plugins/ai-chat/client/components/pages/404-page.tsx +1 -1
- package/src/plugins/ai-chat/client/components/pages/chat-page.internal.tsx +5 -3
- package/src/plugins/ai-chat/client/components/pages/chat-page.tsx +56 -15
- package/src/plugins/ai-chat/client/components/shared/default-error.tsx +1 -1
- package/src/plugins/ai-chat/client/components/tool-call-display.tsx +1 -1
- package/src/plugins/ai-chat/client/hooks/ai-chat-resource.ts +1 -1
- package/src/plugins/ai-chat/client/hooks/chat-hooks.tsx +253 -20
- package/src/plugins/ai-chat/client/index.ts +1 -0
- package/src/plugins/ai-chat/client/navigation.ts +11 -0
- package/src/plugins/ai-chat/client/overrides.ts +47 -11
- package/src/plugins/ai-chat/client/plugin.tsx +208 -111
- package/src/plugins/ai-chat/permissions.ts +89 -0
- package/src/plugins/ai-chat/query-keys.ts +183 -25
- package/src/plugins/ai-chat/types.ts +7 -5
- package/src/plugins/api/create-endpoint.ts +40 -22
- package/src/plugins/api/endpoint-inventory.ts +206 -0
- package/src/plugins/api/index.ts +38 -4
- package/src/plugins/api/operation.ts +600 -0
- package/src/plugins/blog/__tests__/authorization.test.ts +1366 -0
- package/src/plugins/blog/__tests__/client-runtime.browser.test.tsx +257 -0
- package/src/plugins/blog/__tests__/client-runtime.test.ts +283 -0
- package/src/plugins/blog/__tests__/client-runtime.typecheck.tsx +98 -0
- package/src/plugins/blog/__tests__/client-sweep.test.tsx +212 -37
- package/src/plugins/blog/api/getters.ts +3 -3
- package/src/plugins/blog/api/index.ts +2 -0
- package/src/plugins/blog/api/lifecycle-migrations.ts +19 -0
- package/src/plugins/blog/api/mutations.ts +26 -5
- package/src/plugins/blog/api/operations.ts +727 -0
- package/src/plugins/blog/api/plugin.ts +99 -504
- package/src/plugins/blog/client/components/forms/image-field.tsx +2 -1
- package/src/plugins/blog/client/components/forms/markdown-editor-with-overrides.tsx +2 -1
- package/src/plugins/blog/client/components/forms/post-forms.tsx +61 -33
- package/src/plugins/blog/client/components/pages/404-page.tsx +3 -1
- package/src/plugins/blog/client/components/pages/edit-post-page.internal.tsx +2 -1
- package/src/plugins/blog/client/components/pages/edit-post-page.tsx +28 -5
- package/src/plugins/blog/client/components/pages/home-page.internal.tsx +2 -1
- package/src/plugins/blog/client/components/pages/home-page.tsx +7 -4
- package/src/plugins/blog/client/components/pages/new-post-page.internal.tsx +2 -1
- package/src/plugins/blog/client/components/pages/new-post-page.tsx +5 -2
- package/src/plugins/blog/client/components/pages/post-page.internal.tsx +2 -1
- package/src/plugins/blog/client/components/pages/post-page.tsx +38 -4
- package/src/plugins/blog/client/components/pages/tag-page.internal.tsx +2 -1
- package/src/plugins/blog/client/components/pages/tag-page.tsx +5 -1
- package/src/plugins/blog/client/components/shared/collapsible-tag-list.tsx +2 -1
- package/src/plugins/blog/client/components/shared/default-error.tsx +3 -1
- package/src/plugins/blog/client/components/shared/on-this-page.tsx +5 -2
- package/src/plugins/blog/client/components/shared/page-wrapper.tsx +2 -1
- package/src/plugins/blog/client/components/shared/post-card.tsx +2 -1
- package/src/plugins/blog/client/components/shared/posts-list.tsx +2 -1
- package/src/plugins/blog/client/components/shared/recent-posts-carousel.tsx +2 -1
- package/src/plugins/blog/client/components/shared/search-input.tsx +1 -1
- package/src/plugins/blog/client/constants.ts +2 -0
- package/src/plugins/blog/client/hooks/blog-resource.ts +2 -1
- package/src/plugins/blog/client/overrides.ts +1 -6
- package/src/plugins/blog/client/plugin.tsx +145 -129
- package/src/plugins/blog/permissions.ts +44 -0
- package/src/plugins/client/index.ts +108 -7
- package/src/plugins/client/resource/hooks.tsx +41 -18
- package/src/plugins/client/resource/internal.ts +77 -61
- package/src/plugins/client/resource/queries.ts +3 -4
- package/src/plugins/client/resource/use-form.ts +23 -20
- package/src/plugins/client/resource/use-select.ts +40 -34
- package/src/plugins/cms/__tests__/authorization.test.ts +2188 -0
- package/src/plugins/cms/__tests__/client-runtime.browser.test.tsx +245 -0
- package/src/plugins/cms/__tests__/client-runtime.test.ts +320 -0
- package/src/plugins/cms/__tests__/client-runtime.typecheck.tsx +208 -0
- package/src/plugins/cms/__tests__/client-sweep.test.tsx +202 -50
- package/src/plugins/cms/api/getters.ts +4 -4
- package/src/plugins/cms/api/index.ts +20 -0
- package/src/plugins/cms/api/lifecycle-migrations.ts +15 -0
- package/src/plugins/cms/api/mutations.ts +2 -2
- package/src/plugins/cms/api/operations.ts +2218 -0
- package/src/plugins/cms/api/plugin.ts +169 -1047
- package/src/plugins/cms/api/relations.ts +3 -1
- package/src/plugins/cms/client/components/forms/content-form.tsx +2 -1
- package/src/plugins/cms/client/components/forms/file-upload.tsx +3 -1
- package/src/plugins/cms/client/components/forms/relation-field.tsx +3 -1
- package/src/plugins/cms/client/components/inverse-relations-panel.tsx +29 -17
- package/src/plugins/cms/client/components/pages/404-page.tsx +7 -5
- package/src/plugins/cms/client/components/pages/content-editor-page.internal.tsx +19 -10
- package/src/plugins/cms/client/components/pages/content-editor-page.tsx +50 -12
- package/src/plugins/cms/client/components/pages/content-list-page.internal.tsx +48 -34
- package/src/plugins/cms/client/components/pages/content-list-page.tsx +8 -1
- package/src/plugins/cms/client/components/pages/dashboard-page.internal.tsx +15 -8
- package/src/plugins/cms/client/components/pages/dashboard-page.tsx +5 -1
- package/src/plugins/cms/client/components/shared/page-wrapper.tsx +2 -1
- package/src/plugins/cms/client/constants.ts +2 -0
- package/src/plugins/cms/client/hooks/cms-resource.ts +2 -1
- package/src/plugins/cms/client/index.ts +6 -1
- package/src/plugins/cms/client/overrides.ts +46 -6
- package/src/plugins/cms/client/plugin.tsx +135 -80
- package/src/plugins/cms/permissions.ts +43 -0
- package/src/plugins/cms/types.ts +174 -46
- package/src/plugins/comments/__tests__/authorization.test.ts +1570 -0
- package/src/plugins/comments/__tests__/client-runtime.browser.test.tsx +207 -0
- package/src/plugins/comments/__tests__/client-runtime.test.ts +224 -0
- package/src/plugins/comments/__tests__/client-runtime.typecheck.tsx +85 -0
- package/src/plugins/comments/__tests__/client-sweep.test.tsx +445 -82
- package/src/plugins/comments/api/getters.ts +19 -3
- package/src/plugins/comments/api/index.ts +2 -6
- package/src/plugins/comments/api/lifecycle-migrations.ts +20 -0
- package/src/plugins/comments/api/mutations.ts +261 -88
- package/src/plugins/comments/api/operations.ts +742 -0
- package/src/plugins/comments/api/plugin.ts +76 -548
- package/src/plugins/comments/client/components/comment-count.tsx +38 -5
- package/src/plugins/comments/client/components/comment-thread.tsx +148 -110
- package/src/plugins/comments/client/components/pages/moderation-page.internal.tsx +144 -78
- package/src/plugins/comments/client/components/pages/moderation-page.tsx +18 -2
- package/src/plugins/comments/client/components/pages/moderation-state.ts +13 -0
- package/src/plugins/comments/client/components/pages/my-comments-page.internal.tsx +38 -30
- package/src/plugins/comments/client/components/pages/my-comments-page.tsx +3 -1
- package/src/plugins/comments/client/components/pages/resource-comments-page.internal.tsx +29 -30
- package/src/plugins/comments/client/components/pages/resource-comments-page.tsx +10 -1
- package/src/plugins/comments/client/components/shared/page-wrapper.tsx +2 -1
- package/src/plugins/comments/client/components/shared/pagination.tsx +2 -1
- package/src/plugins/comments/client/constants.ts +2 -0
- package/src/plugins/comments/client/hooks/use-comments.tsx +430 -421
- package/src/plugins/comments/client/localization/comments-thread.ts +1 -0
- package/src/plugins/comments/client/plugin.tsx +113 -72
- package/src/plugins/comments/permissions.ts +68 -0
- package/src/plugins/comments/query-keys.ts +9 -10
- package/src/plugins/comments/schemas.ts +7 -8
- package/src/plugins/form-builder/__tests__/authorization.test.ts +1600 -0
- package/src/plugins/form-builder/__tests__/client-runtime.browser.test.tsx +255 -0
- package/src/plugins/form-builder/__tests__/client-runtime.test.ts +132 -0
- package/src/plugins/form-builder/__tests__/client-runtime.typecheck.tsx +77 -0
- package/src/plugins/form-builder/__tests__/client-sweep.test.tsx +350 -54
- package/src/plugins/form-builder/__tests__/form-renderer-authorization.test.tsx +162 -0
- package/src/plugins/form-builder/api/getters.ts +21 -5
- package/src/plugins/form-builder/api/index.ts +31 -0
- package/src/plugins/form-builder/api/lifecycle-migrations.ts +17 -0
- package/src/plugins/form-builder/api/operations.ts +1493 -0
- package/src/plugins/form-builder/api/plugin.ts +125 -632
- package/src/plugins/form-builder/api/query-key-defs.ts +7 -0
- package/src/plugins/form-builder/api/serializers.ts +1 -0
- package/src/plugins/form-builder/client/components/forms/form-renderer.tsx +49 -19
- package/src/plugins/form-builder/client/components/pages/404-page.tsx +9 -9
- package/src/plugins/form-builder/client/components/pages/form-builder-page.internal.tsx +54 -30
- package/src/plugins/form-builder/client/components/pages/form-builder-page.tsx +42 -9
- package/src/plugins/form-builder/client/components/pages/form-list-page.internal.tsx +46 -34
- package/src/plugins/form-builder/client/components/pages/form-list-page.tsx +6 -2
- package/src/plugins/form-builder/client/components/pages/submissions-page.internal.tsx +98 -64
- package/src/plugins/form-builder/client/components/pages/submissions-page.tsx +29 -9
- package/src/plugins/form-builder/client/components/shared/page-wrapper.tsx +2 -1
- package/src/plugins/form-builder/client/constants.ts +2 -0
- package/src/plugins/form-builder/client/hooks/form-builder-hooks.tsx +68 -4
- package/src/plugins/form-builder/client/hooks/form-builder-resource.ts +2 -1
- package/src/plugins/form-builder/client/hooks/index.tsx +1 -0
- package/src/plugins/form-builder/client/overrides.ts +1 -6
- package/src/plugins/form-builder/client/plugin.tsx +128 -96
- package/src/plugins/form-builder/permissions.ts +94 -0
- package/src/plugins/form-builder/query-keys.ts +28 -3
- package/src/plugins/form-builder/schemas.ts +9 -1
- package/src/plugins/form-builder/types.ts +173 -41
- package/src/plugins/kanban/__tests__/authorization.test.ts +1382 -0
- package/src/plugins/kanban/__tests__/client-runtime.browser.test.tsx +302 -0
- package/src/plugins/kanban/__tests__/client-runtime.test.ts +130 -0
- package/src/plugins/kanban/__tests__/client-runtime.typecheck.tsx +81 -0
- package/src/plugins/kanban/__tests__/client-sweep.test.tsx +418 -33
- package/src/plugins/kanban/__tests__/identity-partition.test.tsx +306 -0
- package/src/plugins/kanban/api/getters.ts +65 -50
- package/src/plugins/kanban/api/index.ts +55 -4
- package/src/plugins/kanban/api/lifecycle-migrations.ts +25 -0
- package/src/plugins/kanban/api/mutations.ts +3 -3
- package/src/plugins/kanban/api/operations.ts +2065 -0
- package/src/plugins/kanban/api/plugin.ts +83 -1013
- package/src/plugins/kanban/api/serializers.ts +26 -0
- package/src/plugins/kanban/client/components/forms/board-form.tsx +3 -1
- package/src/plugins/kanban/client/components/forms/column-form.tsx +3 -1
- package/src/plugins/kanban/client/components/forms/task-form.tsx +92 -74
- package/src/plugins/kanban/client/components/pages/404-page.tsx +6 -9
- package/src/plugins/kanban/client/components/pages/board-page.internal.tsx +57 -74
- package/src/plugins/kanban/client/components/pages/board-page.tsx +31 -7
- package/src/plugins/kanban/client/components/pages/boards-list-page.internal.tsx +54 -45
- package/src/plugins/kanban/client/components/pages/boards-list-page.tsx +2 -1
- package/src/plugins/kanban/client/components/pages/new-board-page.internal.tsx +8 -12
- package/src/plugins/kanban/client/components/pages/new-board-page.tsx +2 -1
- package/src/plugins/kanban/client/components/shared/column-content.tsx +61 -48
- package/src/plugins/kanban/client/components/shared/default-error.tsx +3 -1
- package/src/plugins/kanban/client/components/shared/kanban-board.tsx +6 -6
- package/src/plugins/kanban/client/components/shared/permission-access-any.tsx +32 -0
- package/src/plugins/kanban/client/components/shared/task-card.tsx +64 -20
- package/src/plugins/kanban/client/components/shared/user-avatar.tsx +3 -1
- package/src/plugins/kanban/client/constants.ts +2 -0
- package/src/plugins/kanban/client/hooks/kanban-hooks.tsx +55 -10
- package/src/plugins/kanban/client/hooks/kanban-resource.ts +2 -1
- package/src/plugins/kanban/client/overrides.ts +0 -5
- package/src/plugins/kanban/client/plugin.tsx +201 -113
- package/src/plugins/kanban/permissions.ts +100 -0
- package/src/plugins/kanban/query-keys.ts +61 -21
- package/src/plugins/kanban/schemas.ts +44 -18
- package/src/plugins/kanban/types.ts +381 -1
- package/src/plugins/media/__tests__/authorization.test.ts +1769 -0
- package/src/plugins/media/__tests__/client-runtime.browser.test.tsx +975 -0
- package/src/plugins/media/__tests__/client-runtime.test.ts +539 -0
- package/src/plugins/media/__tests__/client-runtime.typecheck.tsx +135 -0
- package/src/plugins/media/__tests__/client-sweep.test.tsx +292 -24
- package/src/plugins/media/__tests__/identity-partition.test.tsx +741 -0
- package/src/plugins/media/__tests__/plugin.test.ts +68 -28
- package/src/plugins/media/__tests__/query-key-defs.test.ts +32 -2
- package/src/plugins/media/api/adapters/vercel-blob.ts +84 -8
- package/src/plugins/media/api/getters.ts +6 -6
- package/src/plugins/media/api/index.ts +3 -0
- package/src/plugins/media/api/lifecycle-migrations.ts +11 -0
- package/src/plugins/media/api/mutations.ts +19 -13
- package/src/plugins/media/api/operations.ts +1873 -0
- package/src/plugins/media/api/plugin.ts +211 -899
- package/src/plugins/media/api/query-key-defs.ts +66 -4
- package/src/plugins/media/api/serializers.ts +4 -2
- package/src/plugins/media/api/storage-adapter.ts +22 -4
- package/src/plugins/media/asset-url.ts +14 -0
- package/src/plugins/media/client/components/media-picker/asset-card.tsx +105 -98
- package/src/plugins/media/client/components/media-picker/folder-tree.tsx +82 -60
- package/src/plugins/media/client/components/media-picker/index.tsx +235 -171
- package/src/plugins/media/client/components/media-picker/upload-tab.tsx +2 -10
- package/src/plugins/media/client/components/media-picker/url-tab.tsx +1 -8
- package/src/plugins/media/client/components/pages/library-page.internal.tsx +103 -82
- package/src/plugins/media/client/components/pages/library-page.tsx +4 -2
- package/src/plugins/media/client/components/upload-permission-check.tsx +75 -0
- package/src/plugins/media/client/constants.ts +2 -0
- package/src/plugins/media/client/hooks/media-resource.ts +2 -1
- package/src/plugins/media/client/hooks/use-media.tsx +292 -49
- package/src/plugins/media/client/index.ts +16 -3
- package/src/plugins/media/client/overrides.ts +6 -17
- package/src/plugins/media/client/plugin.tsx +188 -123
- package/src/plugins/media/client/upload.ts +170 -53
- package/src/plugins/media/db.ts +8 -0
- package/src/plugins/media/permissions.ts +61 -0
- package/src/plugins/media/query-keys.ts +63 -19
- package/src/plugins/media/types.ts +8 -2
- package/src/plugins/open-api/__tests__/route-introspection.test.ts +277 -0
- package/src/plugins/open-api/api/generator.ts +49 -8
- package/src/plugins/open-api/api/plugin.ts +36 -14
- package/src/plugins/route-docs/client/components/pages/docs-page.tsx +63 -23
- package/src/plugins/route-docs/client/constants.ts +2 -0
- package/src/plugins/route-docs/client/hooks.ts +23 -13
- package/src/plugins/route-docs/client/index.ts +7 -1
- package/src/plugins/route-docs/client/plugin.tsx +222 -145
- package/src/plugins/route-docs/client/schema.ts +31 -0
- package/src/plugins/route-docs/generator.ts +9 -5
- package/src/plugins/ui-builder/__tests__/client-sweep.test.tsx +427 -48
- package/src/plugins/ui-builder/client/components/page-renderer.tsx +58 -16
- package/src/plugins/ui-builder/client/components/pages/page-builder-page.internal.tsx +47 -26
- package/src/plugins/ui-builder/client/components/pages/page-builder-page.tsx +43 -8
- package/src/plugins/ui-builder/client/components/pages/page-list-page.internal.tsx +38 -19
- package/src/plugins/ui-builder/client/components/pages/page-list-page.tsx +8 -2
- package/src/plugins/ui-builder/client/components/shared/default-error.tsx +2 -1
- package/src/plugins/ui-builder/client/components/shared/page-wrapper.tsx +2 -1
- package/src/plugins/ui-builder/client/constants.ts +2 -0
- package/src/plugins/ui-builder/client/hooks/ui-builder-resource.ts +2 -1
- package/src/plugins/ui-builder/client/index.ts +4 -1
- package/src/plugins/ui-builder/client/overrides.ts +16 -21
- package/src/plugins/ui-builder/client/plugin.tsx +119 -66
- package/src/plugins/ui-builder/client/registry.ts +3 -5
- package/src/plugins/ui-builder/types.ts +7 -4
- package/src/plugins/utils.ts +5 -1
- package/src/react-router/index.tsx +5 -0
- package/src/react-router/layout.ts +43 -0
- package/src/react-router/page.tsx +12 -5
- package/src/react-router/router.tsx +1 -1
- package/src/shared/auth-types.ts +19 -70
- package/src/shared/entry-factories.ts +3 -3
- package/src/shared/initial-identity.ts +73 -0
- package/src/shared/list-state.ts +12 -0
- package/src/shared/types.ts +1 -0
- package/src/tanstack/index.tsx +5 -0
- package/src/tanstack/layout.ts +36 -0
- package/src/tanstack/page.tsx +7 -2
- package/src/tanstack/router.tsx +1 -1
- package/src/tanstack/server.ts +18 -0
- package/src/types.ts +557 -65
- package/dist/shared/stack.B8vdOMnQ.d.cts +0 -329
- package/dist/shared/stack.BISAZ5LX.d.mts +0 -492
- package/dist/shared/stack.BL5PvShn.d.mts +0 -193
- package/dist/shared/stack.Be1QIHEn.d.cts +0 -23
- package/dist/shared/stack.Be1QIHEn.d.mts +0 -23
- package/dist/shared/stack.Be1QIHEn.d.ts +0 -23
- package/dist/shared/stack.BjvOk_Bs.d.cts +0 -492
- package/dist/shared/stack.BozPgbrZ.d.cts +0 -201
- package/dist/shared/stack.BozPgbrZ.d.mts +0 -201
- package/dist/shared/stack.BozPgbrZ.d.ts +0 -201
- package/dist/shared/stack.BqTR6qi2.d.ts +0 -193
- package/dist/shared/stack.BsmDN8r9.d.cts +0 -406
- package/dist/shared/stack.C1ATQ3pd.d.ts +0 -416
- package/dist/shared/stack.C4_gEENS.d.cts +0 -97
- package/dist/shared/stack.C4_gEENS.d.mts +0 -97
- package/dist/shared/stack.C4_gEENS.d.ts +0 -97
- package/dist/shared/stack.C5Y5lViI.d.cts +0 -461
- package/dist/shared/stack.C8SwdUz8.d.ts +0 -461
- package/dist/shared/stack.CBsp9rDM.d.cts +0 -193
- package/dist/shared/stack.CKGjOI3Z.d.cts +0 -840
- package/dist/shared/stack.Cf-DbL1A.d.ts +0 -329
- package/dist/shared/stack.CuI_-z-_.d.cts +0 -560
- package/dist/shared/stack.D2RVkQD8.d.mts +0 -560
- package/dist/shared/stack.DHTvwoNG.d.mts +0 -329
- package/dist/shared/stack.DJaKVY7v.d.cts +0 -76
- package/dist/shared/stack.DJaKVY7v.d.mts +0 -76
- package/dist/shared/stack.DJaKVY7v.d.ts +0 -76
- package/dist/shared/stack.DKZMaVr6.d.cts +0 -416
- package/dist/shared/stack.DOzsgzkY.d.ts +0 -406
- package/dist/shared/stack.DQq8DEIv.d.mts +0 -461
- package/dist/shared/stack.DXrOtuek.d.ts +0 -560
- package/dist/shared/stack.DZHEHd-S.d.mts +0 -840
- package/dist/shared/stack.Dd-8shBE.d.ts +0 -492
- package/dist/shared/stack.EOPVnJrF.d.cts +0 -39
- package/dist/shared/stack.EOPVnJrF.d.mts +0 -39
- package/dist/shared/stack.EOPVnJrF.d.ts +0 -39
- package/dist/shared/stack.NGKtwA6S.d.mts +0 -406
- package/dist/shared/stack.WELCDuMs.d.ts +0 -840
- package/dist/shared/stack.aXdBOJAR.d.cts +0 -173
- package/dist/shared/stack.aXdBOJAR.d.mts +0 -173
- package/dist/shared/stack.aXdBOJAR.d.ts +0 -173
- package/dist/shared/stack.oBokjN_J.d.mts +0 -416
- package/dist/shared/{stack.D18Dq3ve.d.mts → stack.Csi-4Mgz.d.cts} +1 -1
- package/dist/shared/{stack.D18Dq3ve.d.ts → stack.Csi-4Mgz.d.mts} +1 -1
- package/dist/shared/{stack.D18Dq3ve.d.cts → stack.Csi-4Mgz.d.ts} +1 -1
|
@@ -0,0 +1,613 @@
|
|
|
1
|
+
import { Route, createRouter } from '@btst/yar';
|
|
2
|
+
import { QueryClient } from '@tanstack/react-query';
|
|
3
|
+
import { DBAdapter, DbPlugin, DatabaseDefinition } from '@btst/db';
|
|
4
|
+
import { Endpoint, Router } from 'better-call';
|
|
5
|
+
import { ServerAuth } from '../authorization/server.cjs';
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { AnyPermissionDescriptor, PermissionRequestFor, PermissionFactsFor, PermissionInputFor, PermissionRequest, AnyAuthorization, AuthorizationPermissionRequest } from '../authorization/index.cjs';
|
|
8
|
+
import { a as StackIdentity } from './stack.BYMentwB.cjs';
|
|
9
|
+
import { M as MaybePromise } from './stack.CKXzdGiJ.cjs';
|
|
10
|
+
|
|
11
|
+
/** Whether a request operation requires identity authorization. */
|
|
12
|
+
type OperationAccess = "authorized" | "public";
|
|
13
|
+
/** How an operation result crosses the lifecycle boundary. */
|
|
14
|
+
type OperationResultMode = "immutable" | "passthrough";
|
|
15
|
+
/**
|
|
16
|
+
* A domain failure that is safe for an HTTP operation route to expose.
|
|
17
|
+
* Identity, rule, fact, and ordinary execution errors are intentionally not
|
|
18
|
+
* converted at the transport boundary.
|
|
19
|
+
*/
|
|
20
|
+
declare class OperationHttpError extends Error {
|
|
21
|
+
readonly statusCode: number;
|
|
22
|
+
readonly code: string;
|
|
23
|
+
readonly issues?: readonly unknown[];
|
|
24
|
+
constructor(statusCode: number, message: string, code: string, issues?: readonly unknown[]);
|
|
25
|
+
}
|
|
26
|
+
/** Plain values accepted at the immutable operation lifecycle boundary. */
|
|
27
|
+
type OperationData = string | number | boolean | bigint | null | undefined | readonly OperationData[] | {
|
|
28
|
+
readonly [key: string]: OperationData;
|
|
29
|
+
};
|
|
30
|
+
/** Recursively readonly data exposed by an authorized operation lifecycle. */
|
|
31
|
+
type DeepReadonly<T> = T extends (...args: any[]) => unknown ? T : T extends readonly unknown[] ? {
|
|
32
|
+
readonly [TKey in keyof T]: DeepReadonly<T[TKey]>;
|
|
33
|
+
} : T extends object ? {
|
|
34
|
+
readonly [TKey in keyof T]: DeepReadonly<T[TKey]>;
|
|
35
|
+
} : T;
|
|
36
|
+
/** Validated input, trusted facts, and resolved identity passed through an operation. */
|
|
37
|
+
interface OperationContext<TInput, TFacts> {
|
|
38
|
+
readonly input: DeepReadonly<TInput>;
|
|
39
|
+
readonly facts: DeepReadonly<TFacts>;
|
|
40
|
+
readonly identity: DeepReadonly<StackIdentity> | null;
|
|
41
|
+
readonly request?: Request;
|
|
42
|
+
}
|
|
43
|
+
/** Context available after an authorized operation enters its lifecycle. */
|
|
44
|
+
interface OperationErrorContext<TInput, TFacts> extends OperationContext<TInput, TFacts> {
|
|
45
|
+
readonly error: unknown;
|
|
46
|
+
}
|
|
47
|
+
/** A validated plugin operation shared by every server transport. */
|
|
48
|
+
interface Operation<TInputSchema extends z.ZodTypeAny = z.ZodTypeAny, TPermission extends AnyPermissionDescriptor = AnyPermissionDescriptor, TResult = unknown, TPassthroughResult extends boolean = false> {
|
|
49
|
+
readonly input: TInputSchema;
|
|
50
|
+
readonly permission: TPermission;
|
|
51
|
+
readonly access: OperationAccess;
|
|
52
|
+
readonly resultMode: TPassthroughResult extends true ? "passthrough" : "immutable";
|
|
53
|
+
}
|
|
54
|
+
/** Any plugin operation, for generic stack composition. */
|
|
55
|
+
type AnyOperation = Operation<z.ZodTypeAny, AnyPermissionDescriptor, any, false> | Operation<z.ZodTypeAny, AnyPermissionDescriptor, any, true>;
|
|
56
|
+
/** Named operations exposed by a backend plugin. */
|
|
57
|
+
type OperationRecord = Record<string, AnyOperation>;
|
|
58
|
+
type OperationInput<TOperation extends AnyOperation> = TOperation extends Operation<infer TInputSchema, any, any, any> ? z.input<TInputSchema> : never;
|
|
59
|
+
type OperationTransportResult<TOperation extends AnyOperation> = TOperation extends Operation<any, any, infer TResult, infer TPassthroughResult> ? TPassthroughResult extends true ? TResult : DeepReadonly<TResult> : never;
|
|
60
|
+
/** Infer the permission request enforced by an operation. */
|
|
61
|
+
type OperationPermissionRequest<TOperation extends AnyOperation> = TOperation extends Operation<any, infer TPermission, any, any> ? PermissionRequestFor<TPermission> : never;
|
|
62
|
+
/** Convert operation definitions into their bound callable application API. */
|
|
63
|
+
type OperationApi<TOperations extends OperationRecord> = {
|
|
64
|
+
[TKey in keyof TOperations]: (input: OperationInput<TOperations[TKey]>) => Promise<OperationTransportResult<TOperations[TKey]>>;
|
|
65
|
+
};
|
|
66
|
+
/** One request-bound operation plus its endpoint-binding helper. */
|
|
67
|
+
type RouteOperation<TOperation extends AnyOperation> = {
|
|
68
|
+
(input: OperationInput<TOperation>, request: Request): Promise<OperationTransportResult<TOperation>>;
|
|
69
|
+
/** Generate an endpoint handler that always executes this exact operation. */
|
|
70
|
+
route<TContext extends {
|
|
71
|
+
readonly request: Request;
|
|
72
|
+
readonly error: (...args: any[]) => Error;
|
|
73
|
+
}>(resolveInput: (context: TContext) => MaybePromise<OperationInput<TOperation>>): (context: TContext) => Promise<OperationTransportResult<TOperation>>;
|
|
74
|
+
};
|
|
75
|
+
/** Operations bound to an HTTP transport; every call requires its request. */
|
|
76
|
+
type RouteOperationApi<TOperations extends OperationRecord> = {
|
|
77
|
+
[TKey in keyof TOperations]: RouteOperation<TOperations[TKey]>;
|
|
78
|
+
};
|
|
79
|
+
/** Shared configuration shape for immutable and passthrough operations. */
|
|
80
|
+
type OperationConfig<TInputSchema extends z.ZodTypeAny, TPermission extends AnyPermissionDescriptor, TExecute extends (ctx: OperationContext<z.output<TInputSchema>, PermissionFactsFor<TPermission>>) => MaybePromise<unknown>, TResult> = {
|
|
81
|
+
input: [z.output<TInputSchema>] extends [OperationData] ? TInputSchema : never;
|
|
82
|
+
permission: [PermissionFactsFor<TPermission>] extends [OperationData] ? TPermission : never;
|
|
83
|
+
/**
|
|
84
|
+
* Explicitly bypass request identity authorization for this one operation.
|
|
85
|
+
* Validation, trusted fact derivation, lifecycle hooks, and execution still run.
|
|
86
|
+
* @default "authorized"
|
|
87
|
+
*/
|
|
88
|
+
access?: OperationAccess;
|
|
89
|
+
facts: (ctx: {
|
|
90
|
+
readonly input: DeepReadonly<z.output<TInputSchema>>;
|
|
91
|
+
readonly request?: Request;
|
|
92
|
+
}) => MaybePromise<PermissionInputFor<TPermission>>;
|
|
93
|
+
/**
|
|
94
|
+
* Derive any compound permission checks from validated input and trusted
|
|
95
|
+
* primary facts after request execution authorizes the primary permission.
|
|
96
|
+
* Every returned request is authorized before lifecycle hooks run; trusted
|
|
97
|
+
* execution skips only the evaluations.
|
|
98
|
+
*/
|
|
99
|
+
additionalPermissions?: (ctx: {
|
|
100
|
+
readonly input: DeepReadonly<z.output<TInputSchema>>;
|
|
101
|
+
readonly facts: DeepReadonly<PermissionFactsFor<TPermission>>;
|
|
102
|
+
readonly request?: Request;
|
|
103
|
+
}) => MaybePromise<readonly PermissionRequest<string, any>[]>;
|
|
104
|
+
before?: (ctx: OperationContext<z.output<TInputSchema>, PermissionFactsFor<TPermission>>) => MaybePromise<void>;
|
|
105
|
+
execute: TExecute;
|
|
106
|
+
after?: (ctx: OperationContext<z.output<TInputSchema>, PermissionFactsFor<TPermission>> & {
|
|
107
|
+
readonly result: TResult;
|
|
108
|
+
}) => MaybePromise<void>;
|
|
109
|
+
onError?: (ctx: OperationErrorContext<z.output<TInputSchema>, PermissionFactsFor<TPermission>>) => MaybePromise<void>;
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* Define validation, trusted fact derivation, authorization, lifecycle hooks,
|
|
113
|
+
* and execution once so transports cannot accidentally bypass the pipeline.
|
|
114
|
+
*
|
|
115
|
+
* The operation descriptor deliberately has no public `run()` method. Stack
|
|
116
|
+
* composition binds it to HTTP, `forRequest().operations`, and the explicit
|
|
117
|
+
* `trusted` namespace so callers cannot forge a trusted execution flag.
|
|
118
|
+
*/
|
|
119
|
+
declare function defineOperation<const TInputSchema extends z.ZodTypeAny, const TPermission extends AnyPermissionDescriptor, const TExecute extends (ctx: OperationContext<z.output<TInputSchema>, PermissionFactsFor<TPermission>>) => MaybePromise<OperationData>>(config: {
|
|
120
|
+
input: [z.output<TInputSchema>] extends [OperationData] ? TInputSchema : never;
|
|
121
|
+
permission: [PermissionFactsFor<TPermission>] extends [OperationData] ? TPermission : never;
|
|
122
|
+
/**
|
|
123
|
+
* Explicitly bypass request identity authorization for this one operation.
|
|
124
|
+
* Validation, trusted fact derivation, lifecycle hooks, and execution still run.
|
|
125
|
+
* @default "authorized"
|
|
126
|
+
*/
|
|
127
|
+
access?: OperationAccess;
|
|
128
|
+
facts: (ctx: {
|
|
129
|
+
readonly input: DeepReadonly<z.output<TInputSchema>>;
|
|
130
|
+
readonly request?: Request;
|
|
131
|
+
}) => MaybePromise<PermissionInputFor<TPermission>>;
|
|
132
|
+
additionalPermissions?: (ctx: {
|
|
133
|
+
readonly input: DeepReadonly<z.output<TInputSchema>>;
|
|
134
|
+
readonly facts: DeepReadonly<PermissionFactsFor<TPermission>>;
|
|
135
|
+
readonly request?: Request;
|
|
136
|
+
}) => MaybePromise<readonly PermissionRequest<string, any>[]>;
|
|
137
|
+
before?: (ctx: OperationContext<z.output<TInputSchema>, PermissionFactsFor<TPermission>>) => MaybePromise<void>;
|
|
138
|
+
execute: TExecute;
|
|
139
|
+
after?: (ctx: OperationContext<z.output<TInputSchema>, PermissionFactsFor<TPermission>> & {
|
|
140
|
+
readonly result: DeepReadonly<Awaited<ReturnType<TExecute>>>;
|
|
141
|
+
}) => MaybePromise<void>;
|
|
142
|
+
onError?: (ctx: OperationErrorContext<z.output<TInputSchema>, PermissionFactsFor<TPermission>>) => MaybePromise<void>;
|
|
143
|
+
}): Operation<TInputSchema, TPermission, Awaited<ReturnType<TExecute>>>;
|
|
144
|
+
/**
|
|
145
|
+
* Define an operation whose transport-native result must retain its runtime
|
|
146
|
+
* identity (for example a streaming `Response`). Input, facts, identity,
|
|
147
|
+
* authorization, and lifecycle ordering remain identical to `defineOperation`;
|
|
148
|
+
* only the result skips recursive freezing.
|
|
149
|
+
*/
|
|
150
|
+
declare function definePassthroughOperation<const TInputSchema extends z.ZodTypeAny, const TPermission extends AnyPermissionDescriptor, const TExecute extends (ctx: OperationContext<z.output<TInputSchema>, PermissionFactsFor<TPermission>>) => MaybePromise<unknown>>(config: OperationConfig<TInputSchema, TPermission, TExecute, Awaited<ReturnType<TExecute>>>): Operation<TInputSchema, TPermission, Awaited<ReturnType<TExecute>>, true>;
|
|
151
|
+
|
|
152
|
+
/** A true infrastructure route that intentionally bypasses business operations. */
|
|
153
|
+
interface InfrastructureRouteDeclaration {
|
|
154
|
+
/** Infrastructure access is explicit and currently limited to public metadata. */
|
|
155
|
+
readonly access: "public";
|
|
156
|
+
/** Why this route cannot use the business-operation pipeline. */
|
|
157
|
+
readonly rationale: string;
|
|
158
|
+
}
|
|
159
|
+
/** Narrow route-key allowlist for a backend plugin's infrastructure handlers. */
|
|
160
|
+
type InfrastructureRouteInventory = Readonly<Record<string, InfrastructureRouteDeclaration>>;
|
|
161
|
+
/** Safe authorization metadata for one composed HTTP endpoint. */
|
|
162
|
+
interface ComposedEndpointInventoryEntry {
|
|
163
|
+
readonly pluginKey: string;
|
|
164
|
+
readonly pluginName: string;
|
|
165
|
+
readonly routeKey: string;
|
|
166
|
+
readonly method: string;
|
|
167
|
+
readonly path: string;
|
|
168
|
+
readonly source: "operation" | "infrastructure";
|
|
169
|
+
readonly access: "permission" | "public";
|
|
170
|
+
readonly permissionId?: string;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/** An absolute origin plus the path mounted below that origin. */
|
|
174
|
+
interface ClientLocation {
|
|
175
|
+
/** Absolute HTTP(S) origin, without a pathname. */
|
|
176
|
+
baseURL: string;
|
|
177
|
+
/** Mount path below the origin, normalized with a leading slash. */
|
|
178
|
+
basePath: string;
|
|
179
|
+
}
|
|
180
|
+
/** Shared API transport configured once for a request or browser stack. */
|
|
181
|
+
interface ClientApiConfig extends ClientLocation {
|
|
182
|
+
/**
|
|
183
|
+
* Per-request server headers. Browser-created stacks reject this field so a
|
|
184
|
+
* request cookie or authorization value cannot enter the provider projection.
|
|
185
|
+
*/
|
|
186
|
+
headers?: HeadersInit;
|
|
187
|
+
}
|
|
188
|
+
/** A same-origin endpoint replacement that inherits the configured origin. */
|
|
189
|
+
interface ClientPathEndpointOverride {
|
|
190
|
+
/** Replacement path on the inherited top-level origin. */
|
|
191
|
+
basePath: string;
|
|
192
|
+
/** A path-only replacement cannot partially replace the origin. */
|
|
193
|
+
baseURL?: never;
|
|
194
|
+
}
|
|
195
|
+
/** A complete endpoint replacement. A new origin never inherits only a path. */
|
|
196
|
+
interface ClientAbsoluteEndpointOverride extends ClientLocation {
|
|
197
|
+
}
|
|
198
|
+
/** A location override must replace a path, or an origin and path together. */
|
|
199
|
+
type ClientLocationOverride = ClientPathEndpointOverride | ClientAbsoluteEndpointOverride;
|
|
200
|
+
/**
|
|
201
|
+
* Per-plugin API replacement. Headers and credentials declared here are
|
|
202
|
+
* deliberately browser-safe and are the only transport additions projected to
|
|
203
|
+
* the provider. Server request headers are resolved independently.
|
|
204
|
+
*/
|
|
205
|
+
type ClientApiEndpointOverride = ClientLocationOverride & {
|
|
206
|
+
/** Explicit browser-safe headers used in both server and browser transports. */
|
|
207
|
+
browserHeaders?: HeadersInit;
|
|
208
|
+
/** Explicit browser Fetch credentials behavior for this endpoint. */
|
|
209
|
+
credentials?: RequestCredentials;
|
|
210
|
+
};
|
|
211
|
+
/**
|
|
212
|
+
* Stack-owned endpoint replacements for one registered client plugin. An empty
|
|
213
|
+
* object inherits both top-level locations unchanged.
|
|
214
|
+
*/
|
|
215
|
+
interface ClientPluginEndpointOverride {
|
|
216
|
+
/** Optional replacement for the plugin's BTST API endpoint. */
|
|
217
|
+
api?: ClientApiEndpointOverride;
|
|
218
|
+
/** Optional replacement for the plugin's rendered/public site location. */
|
|
219
|
+
site?: ClientLocationOverride;
|
|
220
|
+
}
|
|
221
|
+
/** Effective API transport captured by a resolved plugin definition. */
|
|
222
|
+
interface ResolvedClientApi extends ClientLocation {
|
|
223
|
+
/** Effective request headers for this stack instance. Never provider-facing. */
|
|
224
|
+
headers?: Headers;
|
|
225
|
+
/** Explicit browser-safe cross-origin credentials behavior. */
|
|
226
|
+
credentials?: RequestCredentials;
|
|
227
|
+
}
|
|
228
|
+
/** Shared runtime supplied when a client plugin definition is expanded. */
|
|
229
|
+
interface ResolvedClientPluginRuntime<TId extends string = string> {
|
|
230
|
+
/** Stable programmatic identifier bound by client-stack registration. */
|
|
231
|
+
id: TId;
|
|
232
|
+
/** Effective API endpoint and request-specific transport values. */
|
|
233
|
+
api: ResolvedClientApi;
|
|
234
|
+
/** Effective public site location for routes, metadata, and sitemap output. */
|
|
235
|
+
site: ClientLocation;
|
|
236
|
+
/** The one React Query client shared by every client-stack consumer. */
|
|
237
|
+
queryClient: QueryClient;
|
|
238
|
+
}
|
|
239
|
+
/** Provider-safe API transport; it can contain only explicitly public headers. */
|
|
240
|
+
interface ClientProviderApi extends ClientLocation {
|
|
241
|
+
/** Explicit browser-safe endpoint headers; never server request headers. */
|
|
242
|
+
browserHeaders?: Headers;
|
|
243
|
+
/** Explicit browser Fetch credentials behavior for this endpoint. */
|
|
244
|
+
credentials?: RequestCredentials;
|
|
245
|
+
}
|
|
246
|
+
/** Provider-safe endpoint view for one registered plugin. */
|
|
247
|
+
interface ClientProviderPluginRuntime<TId extends string = string, TConfig extends Readonly<Record<string, unknown>> = Readonly<Record<string, unknown>>> {
|
|
248
|
+
/** Stable programmatic identifier bound by client-stack registration. */
|
|
249
|
+
id: TId;
|
|
250
|
+
/** Provider-safe effective API endpoint for this plugin. */
|
|
251
|
+
api: ClientProviderApi;
|
|
252
|
+
/** Effective site location for this plugin. */
|
|
253
|
+
site: ClientLocation;
|
|
254
|
+
/**
|
|
255
|
+
* Browser-safe plugin factory values exposed to components. Never contains
|
|
256
|
+
* request headers, secrets, or server-only objects.
|
|
257
|
+
*/
|
|
258
|
+
config?: TConfig;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Context passed to backend plugins during route creation
|
|
262
|
+
* Provides access to all registered plugins for introspection (used by openAPI plugin)
|
|
263
|
+
*/
|
|
264
|
+
interface StackContext {
|
|
265
|
+
/** All registered backend plugins */
|
|
266
|
+
plugins: Record<string, BackendPlugin<any, any, any>>;
|
|
267
|
+
/** The API base path (e.g., "/api/data") */
|
|
268
|
+
basePath: string;
|
|
269
|
+
/** The database adapter */
|
|
270
|
+
adapter: DBAdapter;
|
|
271
|
+
/** The server-side auth provider, when configured on `createBackendStack()` */
|
|
272
|
+
auth?: ServerAuth<AnyAuthorization>;
|
|
273
|
+
/** Routes already constructed for each plugin, used by introspection plugins. */
|
|
274
|
+
pluginRoutes: Record<string, Record<string, Endpoint>>;
|
|
275
|
+
/** Validated, safe metadata for every operation-first/infrastructure route. */
|
|
276
|
+
readonly endpointInventory?: readonly ComposedEndpointInventoryEntry[];
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Context passed to client plugins during route creation
|
|
280
|
+
* Provides access to all registered plugins for introspection (used by routeDocs plugin)
|
|
281
|
+
*/
|
|
282
|
+
interface ClientStackContext<TPlugins extends Record<string, ClientPlugin<any, any>> = Record<string, ClientPlugin<any, any>>> {
|
|
283
|
+
/** All registered client plugins */
|
|
284
|
+
plugins: TPlugins;
|
|
285
|
+
/** The base path for the client (e.g., "/app") */
|
|
286
|
+
basePath?: string;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Backend plugin definition
|
|
290
|
+
* Defines API routes and data access for a feature
|
|
291
|
+
*
|
|
292
|
+
* Note: Each plugin defines its own schema using createDbPlugin().
|
|
293
|
+
* BTST composes all plugin schemas together at runtime using Better DB's .use() method.
|
|
294
|
+
* You can optionally provide a base schema via the dbSchema config option.
|
|
295
|
+
*
|
|
296
|
+
* @template TRoutes - The exact shape of routes this plugin provides (preserves keys and endpoint types)
|
|
297
|
+
* @template TRaw - The shape of the lower-level server surface exposed via `createBackendStack().raw`.
|
|
298
|
+
* Defaults to `never` so that plugins without a `raw` factory are excluded from the
|
|
299
|
+
* `createBackendStack().raw` namespace entirely, preventing accidental access of `undefined` at runtime.
|
|
300
|
+
*/
|
|
301
|
+
interface BackendPlugin<TRoutes extends Record<string, Endpoint> = Record<string, Endpoint>, TRaw extends Record<string, (...args: any[]) => any> = never, TOperations extends OperationRecord = never, TId extends string = string> {
|
|
302
|
+
/** Canonical stable programmatic identifier. */
|
|
303
|
+
readonly id: TId;
|
|
304
|
+
/**
|
|
305
|
+
* Create API endpoints for this plugin
|
|
306
|
+
* Returns an object with named endpoints that will be composed into the router
|
|
307
|
+
*
|
|
308
|
+
* @param adapter - Better DB adapter instance with methods:
|
|
309
|
+
* create, update, updateMany, delete, deleteMany, findOne, findMany, count
|
|
310
|
+
* @param context - Stack context with access to all plugins (for introspection)
|
|
311
|
+
* @param operations - Request-bound operations declared by this plugin. When
|
|
312
|
+
* the plugin declares operations, create every business endpoint with an
|
|
313
|
+
* `operations.operationKey.route(ctx => input)` handler.
|
|
314
|
+
*/
|
|
315
|
+
routes(adapter: DBAdapter, context: StackContext | undefined, operations: [TOperations] extends [never] ? Record<string, never> : RouteOperationApi<TOperations>): TRoutes;
|
|
316
|
+
dbPlugin: DbPlugin;
|
|
317
|
+
/**
|
|
318
|
+
* Optional factory that returns narrow lower-level helpers bound to the adapter.
|
|
319
|
+
* The returned object is merged into `createBackendStack().raw.<pluginName>.*` for deliberate
|
|
320
|
+
* lower-level or SSG data access without authorization or lifecycle composition.
|
|
321
|
+
*
|
|
322
|
+
* @param adapter - The adapter instance shared with `routes`
|
|
323
|
+
*/
|
|
324
|
+
raw?: (adapter: DBAdapter) => TRaw;
|
|
325
|
+
/**
|
|
326
|
+
* Define operations shared by HTTP, request-scoped, and trusted calls.
|
|
327
|
+
* When present, every composed route must resolve to a same-key operation,
|
|
328
|
+
* an explicit operationRouteMap entry, or an infrastructure declaration.
|
|
329
|
+
*/
|
|
330
|
+
operations?: (adapter: DBAdapter, context?: StackContext) => TOperations;
|
|
331
|
+
/**
|
|
332
|
+
* Explicit declarations for true infrastructure routes that cannot use a
|
|
333
|
+
* business operation. When present, all other routes must have same-key
|
|
334
|
+
* operations and stale declarations fail stack composition.
|
|
335
|
+
*/
|
|
336
|
+
infrastructureRoutes?: InfrastructureRouteInventory;
|
|
337
|
+
/** Explicit route-key to operation-key mapping when their public names differ. */
|
|
338
|
+
operationRouteMap?: Readonly<Record<string, string>>;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Frontend plugin definition
|
|
342
|
+
* Defines pages, components, loaders, and React Query hooks for a feature
|
|
343
|
+
*
|
|
344
|
+
* @template TOverrides - The shape of overridable components/functions this plugin requires
|
|
345
|
+
* Example: { Link: ComponentType<{href: string}>, navigate: (path: string) => void }
|
|
346
|
+
* @template TRoutes - The exact shape of routes this plugin provides (preserves keys and route types)
|
|
347
|
+
*/
|
|
348
|
+
interface ClientPlugin<TOverrides = Record<string, never>, TRoutes extends Record<string, Route> = Record<string, Route>, TId extends string = string> {
|
|
349
|
+
/** Canonical stable programmatic identifier. */
|
|
350
|
+
readonly id: TId;
|
|
351
|
+
/**
|
|
352
|
+
* Define routes (pages) for this plugin
|
|
353
|
+
* Returns yar routes that will be composed into the router
|
|
354
|
+
*
|
|
355
|
+
* @param context - Optional context with access to all plugins (for introspection)
|
|
356
|
+
*/
|
|
357
|
+
routes: (context?: ClientStackContext) => TRoutes;
|
|
358
|
+
/**
|
|
359
|
+
* Optional sitemap generator for this plugin. Should return absolute URLs.
|
|
360
|
+
* Implementations can call their own API endpoints to include dynamic routes.
|
|
361
|
+
*/
|
|
362
|
+
sitemap?: () => Promise<Sitemap> | Sitemap;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Runtime-independent client plugin definition. The definition remains safe to
|
|
366
|
+
* import on the server and is expanded against one resolved stack runtime.
|
|
367
|
+
*/
|
|
368
|
+
interface ClientPluginDefinition<TOverrides = Record<string, never>, TRoutes extends Record<string, Route> = Record<string, Route>, TId extends string = string, TProviderConfig extends Readonly<Record<string, unknown>> = Readonly<Record<string, unknown>>, TApiRuntimeFrom extends string = never> {
|
|
369
|
+
/** Canonical stable programmatic identifier. */
|
|
370
|
+
readonly id: TId;
|
|
371
|
+
/**
|
|
372
|
+
* Optional programmatic ID whose effective API transport this definition
|
|
373
|
+
* consumes. The dependent plugin may still resolve its own site endpoint.
|
|
374
|
+
*/
|
|
375
|
+
readonly apiRuntimeFrom?: TApiRuntimeFrom;
|
|
376
|
+
/**
|
|
377
|
+
* Small, browser-safe subset of factory values needed by components through
|
|
378
|
+
* `useStack().plugins[id].config`. Do not include secrets, request headers,
|
|
379
|
+
* server-only objects, or shared API/site/query runtime.
|
|
380
|
+
*/
|
|
381
|
+
providerConfig?: TProviderConfig;
|
|
382
|
+
/** Expand plugin-specific options against one resolved stack runtime. */
|
|
383
|
+
resolve: (runtime: ResolvedClientPluginRuntime<TId>) => Omit<ClientPlugin<TOverrides, TRoutes, TId>, "id">;
|
|
384
|
+
}
|
|
385
|
+
/** Runtime-independent client plugin registration resolved by the client stack. */
|
|
386
|
+
type ClientPluginRegistration<TOverrides = Record<string, never>, TRoutes extends Record<string, Route> = Record<string, Route>, TId extends string = string, TProviderConfig extends Readonly<Record<string, unknown>> = Readonly<Record<string, unknown>>, TApiRuntimeFrom extends string = never> = ClientPluginDefinition<TOverrides, TRoutes, TId, TProviderConfig, TApiRuntimeFrom>;
|
|
387
|
+
/**
|
|
388
|
+
* Utility type that maps each plugin key to the return type of its `raw` factory.
|
|
389
|
+
* Plugin keys whose `TRaw` resolves to `never` (i.e. plugins with no `raw` factory)
|
|
390
|
+
* are excluded from the resulting type via key remapping, preventing TypeScript from
|
|
391
|
+
* suggesting callable functions on what is actually `undefined` at runtime.
|
|
392
|
+
*/
|
|
393
|
+
type PluginRaw<TPlugins extends Record<string, BackendPlugin<any, any, any>>> = {
|
|
394
|
+
[K in keyof TPlugins as _RawOf<TPlugins[K]> extends never ? never : K]: _RawOf<TPlugins[K]>;
|
|
395
|
+
};
|
|
396
|
+
/** @internal Extract the TRaw parameter from a BackendPlugin type. */
|
|
397
|
+
type _RawOf<T> = T extends BackendPlugin<infer _TRoutes, infer TRaw, infer _TOps> ? TRaw : never;
|
|
398
|
+
type _OperationsOf<T> = T extends BackendPlugin<infer _TRoutes, infer _TRaw, infer TOperations> ? TOperations : never;
|
|
399
|
+
/** Bound operation APIs, keyed by their registered backend plugin IDs. */
|
|
400
|
+
type PluginOperations<TPlugins extends Record<string, BackendPlugin<any, any, any>>> = {
|
|
401
|
+
[K in keyof TPlugins as _OperationsOf<TPlugins[K]> extends never ? never : K]: OperationApi<_OperationsOf<TPlugins[K]>>;
|
|
402
|
+
};
|
|
403
|
+
type _OperationPermissionRequests<T> = T extends OperationRecord ? OperationPermissionRequest<T[keyof T]> : never;
|
|
404
|
+
/** Permission requests required by all operations in a plugin map. */
|
|
405
|
+
type PluginOperationPermissionRequests<TPlugins extends Record<string, BackendPlugin<any, any, any>>> = {
|
|
406
|
+
[K in keyof TPlugins]: _OperationPermissionRequests<_OperationsOf<TPlugins[K]>>;
|
|
407
|
+
}[keyof TPlugins];
|
|
408
|
+
type _RequestWithId<TRequest, TId> = TRequest extends {
|
|
409
|
+
readonly id: TId;
|
|
410
|
+
} ? TRequest : never;
|
|
411
|
+
type _RequestFacts<TRequest> = TRequest extends {
|
|
412
|
+
readonly facts: infer TFacts;
|
|
413
|
+
} ? TFacts : never;
|
|
414
|
+
type _IncompatibleOperationRequests<TOperationRequest, TAuthorizationRequest> = TOperationRequest extends {
|
|
415
|
+
readonly id: infer TId;
|
|
416
|
+
} ? _RequestWithId<TAuthorizationRequest, TId> extends infer TRegistered ? [TRegistered] extends [never] ? TOperationRequest : [_RequestFacts<TOperationRequest>] extends [
|
|
417
|
+
_RequestFacts<TRegistered>
|
|
418
|
+
] ? [_RequestFacts<TRegistered>] extends [
|
|
419
|
+
_RequestFacts<TOperationRequest>
|
|
420
|
+
] ? never : TOperationRequest : TOperationRequest : TOperationRequest : TOperationRequest;
|
|
421
|
+
/**
|
|
422
|
+
* Reject server adapters whose registered catalogs do not cover every
|
|
423
|
+
* operation descriptor in the composed stack.
|
|
424
|
+
*/
|
|
425
|
+
type CompatibleStackAuth<TPlugins extends Record<string, BackendPlugin<any, any, any>>, TAuth extends ServerAuth<AnyAuthorization> | undefined> = TAuth extends ServerAuth<infer TAuthorization extends AnyAuthorization> ? _IncompatibleOperationRequests<PluginOperationPermissionRequests<TPlugins>, AuthorizationPermissionRequest<TAuthorization>> extends never ? TAuth : never : TAuth;
|
|
426
|
+
/**
|
|
427
|
+
* Configuration for creating the backend stack
|
|
428
|
+
*/
|
|
429
|
+
interface BackendStackConfig<TPlugins extends Record<string, BackendPlugin<any, any, any>> = Record<string, BackendPlugin<any, any, any>>, TAuth extends ServerAuth<AnyAuthorization> | undefined = ServerAuth<AnyAuthorization> | undefined> {
|
|
430
|
+
basePath: string;
|
|
431
|
+
dbSchema?: DatabaseDefinition;
|
|
432
|
+
plugins: TPlugins & MatchingPluginRegistrations<TPlugins>;
|
|
433
|
+
adapter: (db: DatabaseDefinition) => DBAdapter;
|
|
434
|
+
/**
|
|
435
|
+
* Server authorization created by `createServerAuth()`. When set,
|
|
436
|
+
* request operations evaluate their schema-backed permission after trusted
|
|
437
|
+
* facts are derived. When omitted, request operations remain permissive;
|
|
438
|
+
* use `trusted` to make trusted intent explicit.
|
|
439
|
+
*/
|
|
440
|
+
auth?: TAuth;
|
|
441
|
+
}
|
|
442
|
+
type AnyClientPluginRegistration = ClientPluginRegistration<any, any, any, any, any>;
|
|
443
|
+
/** @internal Extract a plugin's required canonical ID. */
|
|
444
|
+
type _DeclaredPluginId<TPlugin> = TPlugin extends {
|
|
445
|
+
readonly id: infer TId extends string;
|
|
446
|
+
} ? TId : never;
|
|
447
|
+
/** @internal Extract browser-safe plugin-specific factory values. */
|
|
448
|
+
type _ClientProviderConfig<TPlugin> = TPlugin extends ClientPluginDefinition<any, any, any, infer TProviderConfig, any> ? TProviderConfig : Readonly<Record<string, never>>;
|
|
449
|
+
/** @internal Extract a plugin definition's API-runtime dependency. */
|
|
450
|
+
type _ClientApiRuntimeSource<TPlugin> = TPlugin extends {
|
|
451
|
+
readonly apiRuntimeFrom: infer TSource extends string;
|
|
452
|
+
} ? TSource : never;
|
|
453
|
+
/** Reject a registration key that differs from a plugin's declared canonical ID. */
|
|
454
|
+
type MatchingPluginRegistrations<TPlugins extends Record<string, unknown>> = {
|
|
455
|
+
[K in keyof TPlugins]: string extends _DeclaredPluginId<TPlugins[K]> ? TPlugins[K] : K extends _DeclaredPluginId<TPlugins[K]> ? _DeclaredPluginId<TPlugins[K]> extends K ? TPlugins[K] : never : never;
|
|
456
|
+
};
|
|
457
|
+
/** Stack-owned endpoint replacements, limited to registered plugin keys. */
|
|
458
|
+
type ClientPluginEndpointOverrides<TPlugins extends Record<string, AnyClientPluginRegistration>> = Partial<{
|
|
459
|
+
[K in keyof TPlugins]: [_ClientApiRuntimeSource<TPlugins[K]>] extends [never] ? ClientPluginEndpointOverride : {
|
|
460
|
+
/** API transport is inherited from the declared source plugin. */
|
|
461
|
+
api?: never;
|
|
462
|
+
/** Rendered/public pages may still have a plugin-specific location. */
|
|
463
|
+
site?: ClientLocationOverride;
|
|
464
|
+
};
|
|
465
|
+
}>;
|
|
466
|
+
/** Canonical shared runtime configured once for the complete client stack. */
|
|
467
|
+
interface ResolvedClientStackConfig<TPlugins extends Record<string, AnyClientPluginRegistration> = Record<string, AnyClientPluginRegistration>> {
|
|
468
|
+
/** Shared BTST API endpoint and optional request-specific server headers. */
|
|
469
|
+
api: ClientApiConfig;
|
|
470
|
+
/** Shared location of plugin-rendered public pages. */
|
|
471
|
+
site: ClientLocation;
|
|
472
|
+
/** The one React Query client used by loaders, hydration, and browser hooks. */
|
|
473
|
+
queryClient: QueryClient;
|
|
474
|
+
/** Runtime-independent plugin registrations. */
|
|
475
|
+
plugins: TPlugins & MatchingPluginRegistrations<TPlugins>;
|
|
476
|
+
/** Explicit endpoint replacements keyed by a registered plugin ID. */
|
|
477
|
+
endpoints?: ClientPluginEndpointOverrides<TPlugins>;
|
|
478
|
+
}
|
|
479
|
+
/** Canonical configuration for a resolved client stack. */
|
|
480
|
+
type ClientStackConfig<TPlugins extends Record<string, AnyClientPluginRegistration> = Record<string, AnyClientPluginRegistration>> = ResolvedClientStackConfig<TPlugins>;
|
|
481
|
+
/**
|
|
482
|
+
* Utility type to extract override types from plugins
|
|
483
|
+
* Maps plugin IDs to their override types
|
|
484
|
+
*/
|
|
485
|
+
declare const requiredClientPluginOverrides: unique symbol;
|
|
486
|
+
/** @internal Marks a client plugin's entire provider override block as required. */
|
|
487
|
+
type RequiredClientPluginOverrides<TOverrides> = TOverrides & {
|
|
488
|
+
readonly [requiredClientPluginOverrides]: true;
|
|
489
|
+
};
|
|
490
|
+
type _DeclaredPluginOverrides<TPlugin> = TPlugin extends ClientPlugin<infer TOverrides, any, any> ? TOverrides : TPlugin extends ClientPluginDefinition<infer TOverrides, any, any, any, any> ? TOverrides : never;
|
|
491
|
+
type _PublicPluginOverrides<TOverrides> = Omit<TOverrides, typeof requiredClientPluginOverrides>;
|
|
492
|
+
type InferPluginOverrides<TPlugins extends Record<string, AnyClientPluginRegistration>> = {
|
|
493
|
+
[K in keyof TPlugins]: _PublicPluginOverrides<_DeclaredPluginOverrides<TPlugins[K]>>;
|
|
494
|
+
};
|
|
495
|
+
type _HasNoConfigurableOverrides<TOverrides> = [TOverrides] extends [never] ? true : [keyof TOverrides] extends [never] ? true : TOverrides extends Record<string, never> ? true : false;
|
|
496
|
+
type _RequiresProviderOverrideBlock<TPlugin> = 0 extends 1 & _DeclaredPluginOverrides<TPlugin> ? false : [_DeclaredPluginOverrides<TPlugin>] extends [
|
|
497
|
+
{
|
|
498
|
+
readonly [requiredClientPluginOverrides]: true;
|
|
499
|
+
}
|
|
500
|
+
] ? true : false;
|
|
501
|
+
/**
|
|
502
|
+
* Provider overrides inferred from registered client definitions. Plugins with
|
|
503
|
+
* no configurable fields are omitted rather than requiring empty blocks.
|
|
504
|
+
*/
|
|
505
|
+
type InferredPluginOverrides<TPlugins extends Record<string, AnyClientPluginRegistration>> = keyof _ConfigurablePluginOverrides<TPlugins> extends never ? Record<string, never> : _ConfigurablePluginOverrides<TPlugins>;
|
|
506
|
+
type _ConfigurablePluginOverrides<TPlugins extends Record<string, AnyClientPluginRegistration>> = _RequiredConfigurablePluginOverrides<TPlugins> & _OptionalConfigurablePluginOverrides<TPlugins>;
|
|
507
|
+
type _RequiredConfigurablePluginOverrides<TPlugins extends Record<string, AnyClientPluginRegistration>> = {
|
|
508
|
+
[K in keyof TPlugins as _HasNoConfigurableOverrides<InferPluginOverrides<TPlugins>[K]> extends true ? never : _RequiresProviderOverrideBlock<TPlugins[K]> extends true ? K : never]-?: InferPluginOverrides<TPlugins>[K];
|
|
509
|
+
};
|
|
510
|
+
type _OptionalConfigurablePluginOverrides<TPlugins extends Record<string, AnyClientPluginRegistration>> = {
|
|
511
|
+
[K in keyof TPlugins as _HasNoConfigurableOverrides<InferPluginOverrides<TPlugins>[K]> extends true ? never : _RequiresProviderOverrideBlock<TPlugins[K]> extends true ? never : K]?: InferPluginOverrides<TPlugins>[K];
|
|
512
|
+
};
|
|
513
|
+
/**
|
|
514
|
+
* Type for the pluginOverrides prop in StackContext
|
|
515
|
+
* Allows partial overrides per plugin
|
|
516
|
+
*/
|
|
517
|
+
type PluginOverrides<TPlugins extends Record<string, AnyClientPluginRegistration>> = {
|
|
518
|
+
[K in keyof TPlugins]?: Partial<InferPluginOverrides<TPlugins>[K]>;
|
|
519
|
+
};
|
|
520
|
+
/**
|
|
521
|
+
* Extract all routes from all client plugins, merging them into a single record
|
|
522
|
+
*/
|
|
523
|
+
type PluginRoutes<TPlugins extends Record<string, AnyClientPluginRegistration>> = MergeAllPluginRoutes<TPlugins>;
|
|
524
|
+
/**
|
|
525
|
+
* Prefix all backend plugin route keys with the canonical plugin ID
|
|
526
|
+
* Example: { messages: { list: Endpoint } } => { messages_list: Endpoint }
|
|
527
|
+
*/
|
|
528
|
+
type PrefixedPluginRoutes<TPlugins extends Record<string, BackendPlugin<any, any, any>>> = UnionToIntersection<{
|
|
529
|
+
[PluginKey in keyof TPlugins]: TPlugins[PluginKey] extends BackendPlugin<infer TRoutes, any, any> ? {
|
|
530
|
+
[RouteKey in keyof TRoutes as `${PluginKey & string}_${RouteKey & string}`]: TRoutes[RouteKey];
|
|
531
|
+
} : never;
|
|
532
|
+
}[keyof TPlugins]> extends infer U ? U extends Record<string, Endpoint> ? U : Record<string, Endpoint> : Record<string, Endpoint>;
|
|
533
|
+
/**
|
|
534
|
+
* Result of creating the backend stack
|
|
535
|
+
*/
|
|
536
|
+
interface BackendStack<TRoutes extends Record<string, Endpoint> = Record<string, Endpoint>, TRaw extends Record<string, Record<string, (...args: any[]) => any>> = Record<string, Record<string, (...args: any[]) => any>>, TOperations extends Record<string, Record<string, (...args: any[]) => any>> = Record<string, Record<string, (...args: any[]) => any>>> {
|
|
537
|
+
handler: (request: Request) => Promise<Response>;
|
|
538
|
+
router: Omit<Router, "endpoints"> & {
|
|
539
|
+
endpoints: TRoutes;
|
|
540
|
+
};
|
|
541
|
+
dbSchema: DatabaseDefinition;
|
|
542
|
+
/** The database adapter shared across all plugins */
|
|
543
|
+
adapter: DBAdapter;
|
|
544
|
+
/** Narrow lower-level/SSG helpers that bypass operation composition. */
|
|
545
|
+
raw: TRaw;
|
|
546
|
+
/** User/request-scoped operations with automatic authorization. */
|
|
547
|
+
forRequest: (request: Request) => {
|
|
548
|
+
operations: TOperations;
|
|
549
|
+
};
|
|
550
|
+
/** Trusted operations that retain validation and lifecycle hooks. */
|
|
551
|
+
trusted: TOperations;
|
|
552
|
+
}
|
|
553
|
+
/**
|
|
554
|
+
* Helper type to extract routes from a client plugin
|
|
555
|
+
*/
|
|
556
|
+
type ExtractPluginRoutes<T> = T extends ClientPluginDefinition<any, infer TRoutes, any, any, any> ? TRoutes : never;
|
|
557
|
+
/**
|
|
558
|
+
* Helper type to merge all routes from all plugins into a single record
|
|
559
|
+
*/
|
|
560
|
+
type MergeAllPluginRoutes<TPlugins extends Record<string, AnyClientPluginRegistration>> = UnionToIntersection<{
|
|
561
|
+
[K in keyof TPlugins]: ExtractPluginRoutes<TPlugins[K]>;
|
|
562
|
+
}[keyof TPlugins]> extends infer U ? U extends Record<string, Route> ? U : Record<string, Route> : Record<string, Route>;
|
|
563
|
+
/**
|
|
564
|
+
* Utility type to convert union to intersection
|
|
565
|
+
*/
|
|
566
|
+
type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
567
|
+
/**
|
|
568
|
+
* Result of creating the client stack
|
|
569
|
+
*/
|
|
570
|
+
interface ClientStack<TRoutes extends Record<string, Route> = Record<string, Route>> {
|
|
571
|
+
/** Resolved plugin definitions for intentional client-side introspection. */
|
|
572
|
+
context: ClientStackContext;
|
|
573
|
+
router: ReturnType<typeof createRouter<TRoutes, {}>>;
|
|
574
|
+
generateSitemap: () => Promise<Sitemap>;
|
|
575
|
+
}
|
|
576
|
+
declare const resolvedClientStackPlugins: unique symbol;
|
|
577
|
+
/** Browser-safe runtime passed to `StackProvider` by the next composition slice. */
|
|
578
|
+
interface ClientProviderProjection<TPlugins extends Record<string, AnyClientPluginRegistration> = Record<string, AnyClientPluginRegistration>> {
|
|
579
|
+
/** Shared provider-safe API location. Never contains request headers. */
|
|
580
|
+
api: ClientLocation;
|
|
581
|
+
/** Shared provider-safe site location. */
|
|
582
|
+
site: ClientLocation;
|
|
583
|
+
/** The one React Query client supplied to the client stack. */
|
|
584
|
+
queryClient: QueryClient;
|
|
585
|
+
/** Effective provider-safe endpoint values for every registered plugin. */
|
|
586
|
+
plugins: {
|
|
587
|
+
[K in keyof TPlugins]: ClientProviderPluginRuntime<[
|
|
588
|
+
_DeclaredPluginId<TPlugins[K]>
|
|
589
|
+
] extends [never] ? K & string : _DeclaredPluginId<TPlugins[K]>, _ClientProviderConfig<TPlugins[K]>>;
|
|
590
|
+
};
|
|
591
|
+
}
|
|
592
|
+
/** Canonical client stack with a browser-safe provider projection. */
|
|
593
|
+
interface ResolvedClientStack<TRoutes extends Record<string, Route> = Record<string, Route>, TPlugins extends Record<string, AnyClientPluginRegistration> = Record<string, AnyClientPluginRegistration>> extends ClientStack<TRoutes> {
|
|
594
|
+
/** @internal Type-only registration map used for provider inference. */
|
|
595
|
+
readonly [resolvedClientStackPlugins]?: TPlugins;
|
|
596
|
+
/** Browser-safe projection for provider and browser resource consumers. */
|
|
597
|
+
provider: ClientProviderProjection<TPlugins>;
|
|
598
|
+
}
|
|
599
|
+
/** Registered plugin definitions carried by a resolved client stack type. */
|
|
600
|
+
type RegisteredClientPlugins<TStack> = TStack extends ResolvedClientStack<any, infer TPlugins> ? TPlugins : never;
|
|
601
|
+
/**
|
|
602
|
+
* Minimal sitemap entry shape aligned with Next.js MetadataRoute.Sitemap
|
|
603
|
+
*/
|
|
604
|
+
type SitemapEntry = {
|
|
605
|
+
url: string;
|
|
606
|
+
lastModified?: string | Date;
|
|
607
|
+
changeFrequency?: "always" | "hourly" | "daily" | "weekly" | "monthly" | "yearly" | "never";
|
|
608
|
+
priority?: number;
|
|
609
|
+
};
|
|
610
|
+
type Sitemap = Array<SitemapEntry>;
|
|
611
|
+
|
|
612
|
+
export { definePassthroughOperation as c, defineOperation as d, OperationHttpError as k };
|
|
613
|
+
export type { AnyOperation as A, BackendPlugin as B, ClientPlugin as C, DeepReadonly as D, ClientPluginEndpointOverride as E, ClientPluginEndpointOverrides as F, ClientProviderApi as G, ClientProviderPluginRuntime as H, InfrastructureRouteDeclaration as I, ClientProviderProjection as J, ClientStackContext as K, ResolvedClientApi as L, ResolvedClientStackConfig as M, ClientStack as N, OperationRecord as O, PluginOverrides as P, SitemapEntry as Q, RequiredClientPluginOverrides as R, StackContext as S, InferredPluginOverrides as T, RegisteredClientPlugins as U, PrefixedPluginRoutes as V, BackendStackConfig as W, CompatibleStackAuth as X, BackendStack as Y, PluginRaw as Z, PluginOperations as _, ComposedEndpointInventoryEntry as a, InfrastructureRouteInventory as b, Operation as e, OperationAccess as f, OperationApi as g, OperationContext as h, OperationData as i, OperationErrorContext as j, OperationPermissionRequest as l, OperationResultMode as m, RouteOperation as n, RouteOperationApi as o, ClientPluginDefinition as p, ClientPluginRegistration as q, ResolvedClientPluginRuntime as r, Sitemap as s, PluginRoutes as t, ClientStackConfig as u, ResolvedClientStack as v, ClientApiConfig as w, ClientApiEndpointOverride as x, ClientLocation as y, ClientLocationOverride as z };
|
|
@@ -9,6 +9,8 @@ type Asset = {
|
|
|
9
9
|
alt?: string;
|
|
10
10
|
tenantId?: string | null;
|
|
11
11
|
createdAt: Date;
|
|
12
|
+
/** Mutation version used for authoritative compare-and-swap checks. */
|
|
13
|
+
updatedAt?: Date;
|
|
12
14
|
};
|
|
13
15
|
type Folder = {
|
|
14
16
|
id: string;
|
|
@@ -16,11 +18,13 @@ type Folder = {
|
|
|
16
18
|
parentId?: string;
|
|
17
19
|
tenantId?: string | null;
|
|
18
20
|
createdAt: Date;
|
|
21
|
+
/** Mutation version used for authoritative compare-and-swap checks. */
|
|
22
|
+
updatedAt?: Date;
|
|
19
23
|
};
|
|
20
|
-
interface SerializedAsset extends Omit<Asset, "createdAt"> {
|
|
24
|
+
interface SerializedAsset extends Omit<Asset, "createdAt" | "updatedAt"> {
|
|
21
25
|
createdAt: string;
|
|
22
26
|
}
|
|
23
|
-
interface SerializedFolder extends Omit<Folder, "createdAt"> {
|
|
27
|
+
interface SerializedFolder extends Omit<Folder, "createdAt" | "updatedAt"> {
|
|
24
28
|
createdAt: string;
|
|
25
29
|
}
|
|
26
30
|
|
|
@@ -9,6 +9,8 @@ type Asset = {
|
|
|
9
9
|
alt?: string;
|
|
10
10
|
tenantId?: string | null;
|
|
11
11
|
createdAt: Date;
|
|
12
|
+
/** Mutation version used for authoritative compare-and-swap checks. */
|
|
13
|
+
updatedAt?: Date;
|
|
12
14
|
};
|
|
13
15
|
type Folder = {
|
|
14
16
|
id: string;
|
|
@@ -16,11 +18,13 @@ type Folder = {
|
|
|
16
18
|
parentId?: string;
|
|
17
19
|
tenantId?: string | null;
|
|
18
20
|
createdAt: Date;
|
|
21
|
+
/** Mutation version used for authoritative compare-and-swap checks. */
|
|
22
|
+
updatedAt?: Date;
|
|
19
23
|
};
|
|
20
|
-
interface SerializedAsset extends Omit<Asset, "createdAt"> {
|
|
24
|
+
interface SerializedAsset extends Omit<Asset, "createdAt" | "updatedAt"> {
|
|
21
25
|
createdAt: string;
|
|
22
26
|
}
|
|
23
|
-
interface SerializedFolder extends Omit<Folder, "createdAt"> {
|
|
27
|
+
interface SerializedFolder extends Omit<Folder, "createdAt" | "updatedAt"> {
|
|
24
28
|
createdAt: string;
|
|
25
29
|
}
|
|
26
30
|
|