@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,201 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
declare const permissionSeedMarker: "__btst.authorization.permission-seed.v1";
|
|
4
|
+
declare const permissionDescriptorMarker: "__btst.authorization.permission-descriptor.v1";
|
|
5
|
+
declare const permissionCatalogMarker: "__btst.authorization.permission-catalog.v1";
|
|
6
|
+
declare const authorizationContractTypes: "__btst.authorization.contract-types.v1";
|
|
7
|
+
type AnySchema = z.ZodType<any, any>;
|
|
8
|
+
/** A permission declaration before its stable catalog id has been assigned. */
|
|
9
|
+
interface PermissionSeed<TSchema extends AnySchema | undefined> {
|
|
10
|
+
readonly [permissionSeedMarker]: true;
|
|
11
|
+
readonly schema: TSchema;
|
|
12
|
+
}
|
|
13
|
+
type PermissionFacts<TSchema extends AnySchema | undefined> = TSchema extends AnySchema ? z.output<TSchema> : undefined;
|
|
14
|
+
type PermissionInput<TSchema extends AnySchema | undefined> = TSchema extends AnySchema ? [facts: z.input<TSchema>] : [];
|
|
15
|
+
/** A validated permission request passed to client and server evaluators. */
|
|
16
|
+
interface PermissionRequest<TId extends string = string, TSchema extends AnySchema | undefined = AnySchema | undefined> {
|
|
17
|
+
readonly id: TId;
|
|
18
|
+
readonly permission: PermissionDescriptor<TId, TSchema>;
|
|
19
|
+
readonly facts: PermissionFacts<TSchema>;
|
|
20
|
+
}
|
|
21
|
+
/** A stable, callable permission descriptor produced by `definePermissions`. */
|
|
22
|
+
interface PermissionDescriptor<TId extends string = string, TSchema extends AnySchema | undefined = AnySchema | undefined> {
|
|
23
|
+
(...args: PermissionInput<TSchema>): PermissionRequest<TId, TSchema>;
|
|
24
|
+
readonly id: TId;
|
|
25
|
+
readonly schema: TSchema;
|
|
26
|
+
readonly [permissionDescriptorMarker]: true;
|
|
27
|
+
}
|
|
28
|
+
type PermissionTree = {
|
|
29
|
+
readonly [key: string]: PermissionTree | PermissionSeed<AnySchema | undefined>;
|
|
30
|
+
};
|
|
31
|
+
type AppendPath<TPath extends string, TKey extends string> = TPath extends "" ? TKey : `${TPath}.${TKey}`;
|
|
32
|
+
type BoundPermissionTree<TTree, TNamespace extends string, TPath extends string = ""> = TTree extends PermissionSeed<infer TSchema> ? PermissionDescriptor<`${TNamespace}:${TPath}`, TSchema> : {
|
|
33
|
+
readonly [TKey in keyof TTree]: TKey extends string ? BoundPermissionTree<TTree[TKey], TNamespace, AppendPath<TPath, TKey>> : never;
|
|
34
|
+
};
|
|
35
|
+
/** A named catalog of permission descriptors. */
|
|
36
|
+
type PermissionCatalog<TName extends string = string, TTree extends PermissionTree = {}> = BoundPermissionTree<TTree, TName> & {
|
|
37
|
+
readonly [permissionCatalogMarker]: {
|
|
38
|
+
readonly name: TName;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
type AnyPermissionCatalog = PermissionCatalog<string>;
|
|
42
|
+
/** Any schema-backed permission descriptor, for generic plugin APIs. */
|
|
43
|
+
type AnyPermissionDescriptor = PermissionDescriptor<string, AnySchema | undefined>;
|
|
44
|
+
type AnyPermissionRequest = PermissionRequest<string, AnySchema | undefined>;
|
|
45
|
+
/** Declare a permission whose checks do not need record facts. */
|
|
46
|
+
declare function permission(): PermissionSeed<undefined>;
|
|
47
|
+
/** Declare a permission whose fact type is inferred from its runtime schema. */
|
|
48
|
+
declare function permission<TSchema extends AnySchema>(schema: TSchema): PermissionSeed<TSchema>;
|
|
49
|
+
/**
|
|
50
|
+
* Assign stable ids to a plugin's schema-backed permission declarations.
|
|
51
|
+
* The returned tree is safe to import from both browser and server modules.
|
|
52
|
+
*/
|
|
53
|
+
declare function definePermissions<const TName extends string, const TTree extends PermissionTree>(name: TName, tree: TTree): PermissionCatalog<TName, TTree>;
|
|
54
|
+
type DescriptorsIn<T> = T extends AnyPermissionDescriptor ? T : T extends object ? {
|
|
55
|
+
[TKey in keyof T]: TKey extends typeof permissionCatalogMarker ? never : DescriptorsIn<T[TKey]>;
|
|
56
|
+
}[keyof T] : never;
|
|
57
|
+
type RegisteredDescriptor<TCatalogs extends readonly AnyPermissionCatalog[]> = DescriptorsIn<TCatalogs[number]>;
|
|
58
|
+
type RequestFor<TDescriptor> = TDescriptor extends PermissionDescriptor<infer TId, infer TSchema> ? PermissionRequest<TId, TSchema> : never;
|
|
59
|
+
/** Infer validated fact output for a permission descriptor. */
|
|
60
|
+
type PermissionFactsFor<TPermission> = TPermission extends PermissionDescriptor<infer _TId, infer TSchema> ? PermissionFacts<TSchema> : never;
|
|
61
|
+
/** Infer accepted fact input for a permission descriptor. */
|
|
62
|
+
type PermissionInputFor<TPermission> = TPermission extends PermissionDescriptor<infer _TId, infer TSchema> ? TSchema extends AnySchema ? z.input<TSchema> : undefined : never;
|
|
63
|
+
/** Infer the validated request created by a permission descriptor. */
|
|
64
|
+
type PermissionRequestFor<TPermission> = RequestFor<TPermission>;
|
|
65
|
+
interface AuthorizationRuleDefinition {
|
|
66
|
+
readonly permission: AnyPermissionDescriptor;
|
|
67
|
+
readonly evaluate: (input: {
|
|
68
|
+
identity: unknown;
|
|
69
|
+
facts: unknown;
|
|
70
|
+
}) => boolean;
|
|
71
|
+
}
|
|
72
|
+
type RulePermission<TPermission, TIdentity> = TPermission extends PermissionDescriptor<infer _TId, infer TSchema> ? {
|
|
73
|
+
allow: () => AuthorizationRuleDefinition;
|
|
74
|
+
when: (rule: (input: {
|
|
75
|
+
identity: TIdentity | null;
|
|
76
|
+
facts: PermissionFacts<TSchema>;
|
|
77
|
+
}) => boolean) => AuthorizationRuleDefinition;
|
|
78
|
+
} : never;
|
|
79
|
+
type RuleTree<TTree, TIdentity> = TTree extends AnyPermissionDescriptor ? RulePermission<TTree, TIdentity> : TTree extends object ? {
|
|
80
|
+
[TKey in keyof TTree as TKey extends typeof permissionCatalogMarker ? never : TKey]: RuleTree<TTree[TKey], TIdentity>;
|
|
81
|
+
} : never;
|
|
82
|
+
type CatalogRuleEntry<TCatalog, TIdentity> = TCatalog extends PermissionCatalog<infer TName, infer _TTree> ? {
|
|
83
|
+
[TKey in TName]: RuleTree<TCatalog, TIdentity>;
|
|
84
|
+
} : never;
|
|
85
|
+
type UnionToIntersection<T> = (T extends unknown ? (value: T) => void : never) extends (value: infer TIntersection) => void ? TIntersection : never;
|
|
86
|
+
type RuleCatalogs<TCatalogs extends readonly AnyPermissionCatalog[], TIdentity> = UnionToIntersection<CatalogRuleEntry<TCatalogs[number], TIdentity>>;
|
|
87
|
+
/**
|
|
88
|
+
* A rule-free authorization vocabulary that can be published independently of
|
|
89
|
+
* an application's backend implementation.
|
|
90
|
+
*/
|
|
91
|
+
interface AuthorizationContract<TIdentitySchema extends z.ZodType<{
|
|
92
|
+
id: string;
|
|
93
|
+
}, any>, TCatalogs extends readonly AnyPermissionCatalog[]> {
|
|
94
|
+
readonly [authorizationContractTypes]?: {
|
|
95
|
+
readonly identity: z.output<TIdentitySchema>;
|
|
96
|
+
readonly identityInput: z.input<TIdentitySchema>;
|
|
97
|
+
readonly permission: RequestFor<RegisteredDescriptor<TCatalogs>>;
|
|
98
|
+
};
|
|
99
|
+
readonly identitySchema: TIdentitySchema;
|
|
100
|
+
readonly permissions: TCatalogs;
|
|
101
|
+
readonly permissionIds: readonly string[];
|
|
102
|
+
readonly version: string;
|
|
103
|
+
parseIdentity(identity: unknown): z.output<TIdentitySchema> | null;
|
|
104
|
+
parsePermission(permission: unknown): RequestFor<RegisteredDescriptor<TCatalogs>>;
|
|
105
|
+
}
|
|
106
|
+
/** Any portable authorization contract, for generic adapter APIs. */
|
|
107
|
+
interface AnyAuthorizationContract {
|
|
108
|
+
readonly [authorizationContractTypes]?: {
|
|
109
|
+
readonly identity: {
|
|
110
|
+
id: string;
|
|
111
|
+
};
|
|
112
|
+
readonly identityInput: unknown;
|
|
113
|
+
readonly permission: any;
|
|
114
|
+
};
|
|
115
|
+
readonly identitySchema: z.ZodType<{
|
|
116
|
+
id: string;
|
|
117
|
+
}, any>;
|
|
118
|
+
readonly permissions: readonly AnyPermissionCatalog[];
|
|
119
|
+
readonly permissionIds: readonly string[];
|
|
120
|
+
readonly version: string;
|
|
121
|
+
parseIdentity(identity: unknown): {
|
|
122
|
+
id: string;
|
|
123
|
+
} | null;
|
|
124
|
+
parsePermission(permission: unknown): any;
|
|
125
|
+
}
|
|
126
|
+
type ContractIdentitySchema<TContract extends AnyAuthorizationContract> = TContract extends AuthorizationContract<infer TSchema, any> ? TSchema : never;
|
|
127
|
+
type ContractCatalogs<TContract extends AnyAuthorizationContract> = TContract extends AuthorizationContract<any, infer TCatalogs> ? TCatalogs : never;
|
|
128
|
+
/** Infer validated identity output from a portable contract. */
|
|
129
|
+
type AuthorizationContractIdentity<TContract> = TContract extends AnyAuthorizationContract ? NonNullable<TContract[typeof authorizationContractTypes]>["identity"] : never;
|
|
130
|
+
/** Infer accepted identity input from a portable contract. */
|
|
131
|
+
type AuthorizationContractIdentityInput<TContract> = TContract extends AnyAuthorizationContract ? NonNullable<TContract[typeof authorizationContractTypes]>["identityInput"] : never;
|
|
132
|
+
/** Infer registered permission requests from a portable contract. */
|
|
133
|
+
type AuthorizationContractPermissionRequest<TContract> = TContract extends AnyAuthorizationContract ? NonNullable<TContract[typeof authorizationContractTypes]>["permission"] : never;
|
|
134
|
+
/** Define a versioned identity and permission vocabulary without any rules. */
|
|
135
|
+
declare function defineAuthorizationContract<const TIdentitySchema extends z.ZodType<{
|
|
136
|
+
id: string;
|
|
137
|
+
}, any>, const TCatalogs extends readonly AnyPermissionCatalog[]>(config: {
|
|
138
|
+
identity: TIdentitySchema;
|
|
139
|
+
permissions: TCatalogs;
|
|
140
|
+
}): AuthorizationContract<TIdentitySchema, TCatalogs>;
|
|
141
|
+
/** The shared, synchronous authorization contract used by client and server. */
|
|
142
|
+
interface Authorization<TIdentitySchema extends z.ZodType<{
|
|
143
|
+
id: string;
|
|
144
|
+
}, any>, TCatalogs extends readonly AnyPermissionCatalog[]> {
|
|
145
|
+
readonly contract: AuthorizationContract<TIdentitySchema, TCatalogs>;
|
|
146
|
+
readonly identitySchema: TIdentitySchema;
|
|
147
|
+
readonly permissions: TCatalogs;
|
|
148
|
+
parseIdentity(identity: unknown): z.output<TIdentitySchema> | null;
|
|
149
|
+
can(request: RequestFor<RegisteredDescriptor<TCatalogs>>, identity: z.input<TIdentitySchema> | null): boolean;
|
|
150
|
+
}
|
|
151
|
+
/** Any one-rule authorization contract, for generic adapter APIs. */
|
|
152
|
+
interface AnyAuthorization {
|
|
153
|
+
readonly contract: AnyAuthorizationContract;
|
|
154
|
+
readonly identitySchema: z.ZodType<{
|
|
155
|
+
id: string;
|
|
156
|
+
}, any>;
|
|
157
|
+
readonly permissions: readonly AnyPermissionCatalog[];
|
|
158
|
+
parseIdentity(identity: unknown): {
|
|
159
|
+
id: string;
|
|
160
|
+
} | null;
|
|
161
|
+
can(request: any, identity: any): boolean;
|
|
162
|
+
}
|
|
163
|
+
/** Infer validated identity output from an authorization contract. */
|
|
164
|
+
type AuthorizationIdentity<TAuthorization> = TAuthorization extends {
|
|
165
|
+
readonly identitySchema: infer TSchema extends z.ZodType<{
|
|
166
|
+
id: string;
|
|
167
|
+
}, any>;
|
|
168
|
+
} ? z.output<TSchema> : never;
|
|
169
|
+
/** Infer accepted identity input from an authorization contract. */
|
|
170
|
+
type AuthorizationIdentityInput<TAuthorization> = TAuthorization extends {
|
|
171
|
+
readonly identitySchema: infer TSchema extends z.ZodType<{
|
|
172
|
+
id: string;
|
|
173
|
+
}, any>;
|
|
174
|
+
} ? z.input<TSchema> : never;
|
|
175
|
+
/** Infer registered permission requests from an authorization contract. */
|
|
176
|
+
type AuthorizationPermissionRequest<TAuthorization> = TAuthorization extends {
|
|
177
|
+
readonly permissions: infer TCatalogs extends readonly AnyPermissionCatalog[];
|
|
178
|
+
} ? RequestFor<RegisteredDescriptor<TCatalogs>> : never;
|
|
179
|
+
/** Infer stable permission ids registered by an authorization contract. */
|
|
180
|
+
type AuthorizationPermissionId<TAuthorization> = TAuthorization extends Authorization<any, infer TCatalogs> ? RegisteredDescriptor<TCatalogs> extends PermissionDescriptor<infer TId, any> ? TId : never : never;
|
|
181
|
+
/**
|
|
182
|
+
* Define one browser-safe rule set over a validated identity and registered
|
|
183
|
+
* permission catalogs. Missing rules deny; rule failures are allowed to
|
|
184
|
+
* propagate so outages never masquerade as ordinary denials.
|
|
185
|
+
*/
|
|
186
|
+
declare function defineAuthorization<const TContract extends AnyAuthorizationContract>(config: {
|
|
187
|
+
contract: TContract;
|
|
188
|
+
rules: (permissions: RuleCatalogs<ContractCatalogs<TContract>, z.output<ContractIdentitySchema<TContract>>>) => readonly AuthorizationRuleDefinition[];
|
|
189
|
+
}): Authorization<ContractIdentitySchema<TContract>, ContractCatalogs<TContract>>;
|
|
190
|
+
declare function defineAuthorization<const TIdentitySchema extends z.ZodType<{
|
|
191
|
+
id: string;
|
|
192
|
+
}, any>, const TCatalogs extends readonly AnyPermissionCatalog[]>(config: {
|
|
193
|
+
identity: TIdentitySchema;
|
|
194
|
+
permissions: TCatalogs;
|
|
195
|
+
rules: (permissions: RuleCatalogs<TCatalogs, z.output<TIdentitySchema>>) => readonly AuthorizationRuleDefinition[];
|
|
196
|
+
}): Authorization<TIdentitySchema, TCatalogs>;
|
|
197
|
+
/** Check whether a runtime value has the shape of a permission request. */
|
|
198
|
+
declare function isPermissionRequest(value: unknown): value is AnyPermissionRequest;
|
|
199
|
+
|
|
200
|
+
export { defineAuthorization, defineAuthorizationContract, definePermissions, isPermissionRequest, permission };
|
|
201
|
+
export type { AnyAuthorization, AnyAuthorizationContract, AnyPermissionDescriptor, Authorization, AuthorizationContract, AuthorizationContractIdentity, AuthorizationContractIdentityInput, AuthorizationContractPermissionRequest, AuthorizationIdentity, AuthorizationIdentityInput, AuthorizationPermissionId, AuthorizationPermissionRequest, PermissionCatalog, PermissionDescriptor, PermissionFactsFor, PermissionInputFor, PermissionRequest, PermissionRequestFor, PermissionSeed };
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
declare const permissionSeedMarker: "__btst.authorization.permission-seed.v1";
|
|
4
|
+
declare const permissionDescriptorMarker: "__btst.authorization.permission-descriptor.v1";
|
|
5
|
+
declare const permissionCatalogMarker: "__btst.authorization.permission-catalog.v1";
|
|
6
|
+
declare const authorizationContractTypes: "__btst.authorization.contract-types.v1";
|
|
7
|
+
type AnySchema = z.ZodType<any, any>;
|
|
8
|
+
/** A permission declaration before its stable catalog id has been assigned. */
|
|
9
|
+
interface PermissionSeed<TSchema extends AnySchema | undefined> {
|
|
10
|
+
readonly [permissionSeedMarker]: true;
|
|
11
|
+
readonly schema: TSchema;
|
|
12
|
+
}
|
|
13
|
+
type PermissionFacts<TSchema extends AnySchema | undefined> = TSchema extends AnySchema ? z.output<TSchema> : undefined;
|
|
14
|
+
type PermissionInput<TSchema extends AnySchema | undefined> = TSchema extends AnySchema ? [facts: z.input<TSchema>] : [];
|
|
15
|
+
/** A validated permission request passed to client and server evaluators. */
|
|
16
|
+
interface PermissionRequest<TId extends string = string, TSchema extends AnySchema | undefined = AnySchema | undefined> {
|
|
17
|
+
readonly id: TId;
|
|
18
|
+
readonly permission: PermissionDescriptor<TId, TSchema>;
|
|
19
|
+
readonly facts: PermissionFacts<TSchema>;
|
|
20
|
+
}
|
|
21
|
+
/** A stable, callable permission descriptor produced by `definePermissions`. */
|
|
22
|
+
interface PermissionDescriptor<TId extends string = string, TSchema extends AnySchema | undefined = AnySchema | undefined> {
|
|
23
|
+
(...args: PermissionInput<TSchema>): PermissionRequest<TId, TSchema>;
|
|
24
|
+
readonly id: TId;
|
|
25
|
+
readonly schema: TSchema;
|
|
26
|
+
readonly [permissionDescriptorMarker]: true;
|
|
27
|
+
}
|
|
28
|
+
type PermissionTree = {
|
|
29
|
+
readonly [key: string]: PermissionTree | PermissionSeed<AnySchema | undefined>;
|
|
30
|
+
};
|
|
31
|
+
type AppendPath<TPath extends string, TKey extends string> = TPath extends "" ? TKey : `${TPath}.${TKey}`;
|
|
32
|
+
type BoundPermissionTree<TTree, TNamespace extends string, TPath extends string = ""> = TTree extends PermissionSeed<infer TSchema> ? PermissionDescriptor<`${TNamespace}:${TPath}`, TSchema> : {
|
|
33
|
+
readonly [TKey in keyof TTree]: TKey extends string ? BoundPermissionTree<TTree[TKey], TNamespace, AppendPath<TPath, TKey>> : never;
|
|
34
|
+
};
|
|
35
|
+
/** A named catalog of permission descriptors. */
|
|
36
|
+
type PermissionCatalog<TName extends string = string, TTree extends PermissionTree = {}> = BoundPermissionTree<TTree, TName> & {
|
|
37
|
+
readonly [permissionCatalogMarker]: {
|
|
38
|
+
readonly name: TName;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
type AnyPermissionCatalog = PermissionCatalog<string>;
|
|
42
|
+
/** Any schema-backed permission descriptor, for generic plugin APIs. */
|
|
43
|
+
type AnyPermissionDescriptor = PermissionDescriptor<string, AnySchema | undefined>;
|
|
44
|
+
type AnyPermissionRequest = PermissionRequest<string, AnySchema | undefined>;
|
|
45
|
+
/** Declare a permission whose checks do not need record facts. */
|
|
46
|
+
declare function permission(): PermissionSeed<undefined>;
|
|
47
|
+
/** Declare a permission whose fact type is inferred from its runtime schema. */
|
|
48
|
+
declare function permission<TSchema extends AnySchema>(schema: TSchema): PermissionSeed<TSchema>;
|
|
49
|
+
/**
|
|
50
|
+
* Assign stable ids to a plugin's schema-backed permission declarations.
|
|
51
|
+
* The returned tree is safe to import from both browser and server modules.
|
|
52
|
+
*/
|
|
53
|
+
declare function definePermissions<const TName extends string, const TTree extends PermissionTree>(name: TName, tree: TTree): PermissionCatalog<TName, TTree>;
|
|
54
|
+
type DescriptorsIn<T> = T extends AnyPermissionDescriptor ? T : T extends object ? {
|
|
55
|
+
[TKey in keyof T]: TKey extends typeof permissionCatalogMarker ? never : DescriptorsIn<T[TKey]>;
|
|
56
|
+
}[keyof T] : never;
|
|
57
|
+
type RegisteredDescriptor<TCatalogs extends readonly AnyPermissionCatalog[]> = DescriptorsIn<TCatalogs[number]>;
|
|
58
|
+
type RequestFor<TDescriptor> = TDescriptor extends PermissionDescriptor<infer TId, infer TSchema> ? PermissionRequest<TId, TSchema> : never;
|
|
59
|
+
/** Infer validated fact output for a permission descriptor. */
|
|
60
|
+
type PermissionFactsFor<TPermission> = TPermission extends PermissionDescriptor<infer _TId, infer TSchema> ? PermissionFacts<TSchema> : never;
|
|
61
|
+
/** Infer accepted fact input for a permission descriptor. */
|
|
62
|
+
type PermissionInputFor<TPermission> = TPermission extends PermissionDescriptor<infer _TId, infer TSchema> ? TSchema extends AnySchema ? z.input<TSchema> : undefined : never;
|
|
63
|
+
/** Infer the validated request created by a permission descriptor. */
|
|
64
|
+
type PermissionRequestFor<TPermission> = RequestFor<TPermission>;
|
|
65
|
+
interface AuthorizationRuleDefinition {
|
|
66
|
+
readonly permission: AnyPermissionDescriptor;
|
|
67
|
+
readonly evaluate: (input: {
|
|
68
|
+
identity: unknown;
|
|
69
|
+
facts: unknown;
|
|
70
|
+
}) => boolean;
|
|
71
|
+
}
|
|
72
|
+
type RulePermission<TPermission, TIdentity> = TPermission extends PermissionDescriptor<infer _TId, infer TSchema> ? {
|
|
73
|
+
allow: () => AuthorizationRuleDefinition;
|
|
74
|
+
when: (rule: (input: {
|
|
75
|
+
identity: TIdentity | null;
|
|
76
|
+
facts: PermissionFacts<TSchema>;
|
|
77
|
+
}) => boolean) => AuthorizationRuleDefinition;
|
|
78
|
+
} : never;
|
|
79
|
+
type RuleTree<TTree, TIdentity> = TTree extends AnyPermissionDescriptor ? RulePermission<TTree, TIdentity> : TTree extends object ? {
|
|
80
|
+
[TKey in keyof TTree as TKey extends typeof permissionCatalogMarker ? never : TKey]: RuleTree<TTree[TKey], TIdentity>;
|
|
81
|
+
} : never;
|
|
82
|
+
type CatalogRuleEntry<TCatalog, TIdentity> = TCatalog extends PermissionCatalog<infer TName, infer _TTree> ? {
|
|
83
|
+
[TKey in TName]: RuleTree<TCatalog, TIdentity>;
|
|
84
|
+
} : never;
|
|
85
|
+
type UnionToIntersection<T> = (T extends unknown ? (value: T) => void : never) extends (value: infer TIntersection) => void ? TIntersection : never;
|
|
86
|
+
type RuleCatalogs<TCatalogs extends readonly AnyPermissionCatalog[], TIdentity> = UnionToIntersection<CatalogRuleEntry<TCatalogs[number], TIdentity>>;
|
|
87
|
+
/**
|
|
88
|
+
* A rule-free authorization vocabulary that can be published independently of
|
|
89
|
+
* an application's backend implementation.
|
|
90
|
+
*/
|
|
91
|
+
interface AuthorizationContract<TIdentitySchema extends z.ZodType<{
|
|
92
|
+
id: string;
|
|
93
|
+
}, any>, TCatalogs extends readonly AnyPermissionCatalog[]> {
|
|
94
|
+
readonly [authorizationContractTypes]?: {
|
|
95
|
+
readonly identity: z.output<TIdentitySchema>;
|
|
96
|
+
readonly identityInput: z.input<TIdentitySchema>;
|
|
97
|
+
readonly permission: RequestFor<RegisteredDescriptor<TCatalogs>>;
|
|
98
|
+
};
|
|
99
|
+
readonly identitySchema: TIdentitySchema;
|
|
100
|
+
readonly permissions: TCatalogs;
|
|
101
|
+
readonly permissionIds: readonly string[];
|
|
102
|
+
readonly version: string;
|
|
103
|
+
parseIdentity(identity: unknown): z.output<TIdentitySchema> | null;
|
|
104
|
+
parsePermission(permission: unknown): RequestFor<RegisteredDescriptor<TCatalogs>>;
|
|
105
|
+
}
|
|
106
|
+
/** Any portable authorization contract, for generic adapter APIs. */
|
|
107
|
+
interface AnyAuthorizationContract {
|
|
108
|
+
readonly [authorizationContractTypes]?: {
|
|
109
|
+
readonly identity: {
|
|
110
|
+
id: string;
|
|
111
|
+
};
|
|
112
|
+
readonly identityInput: unknown;
|
|
113
|
+
readonly permission: any;
|
|
114
|
+
};
|
|
115
|
+
readonly identitySchema: z.ZodType<{
|
|
116
|
+
id: string;
|
|
117
|
+
}, any>;
|
|
118
|
+
readonly permissions: readonly AnyPermissionCatalog[];
|
|
119
|
+
readonly permissionIds: readonly string[];
|
|
120
|
+
readonly version: string;
|
|
121
|
+
parseIdentity(identity: unknown): {
|
|
122
|
+
id: string;
|
|
123
|
+
} | null;
|
|
124
|
+
parsePermission(permission: unknown): any;
|
|
125
|
+
}
|
|
126
|
+
type ContractIdentitySchema<TContract extends AnyAuthorizationContract> = TContract extends AuthorizationContract<infer TSchema, any> ? TSchema : never;
|
|
127
|
+
type ContractCatalogs<TContract extends AnyAuthorizationContract> = TContract extends AuthorizationContract<any, infer TCatalogs> ? TCatalogs : never;
|
|
128
|
+
/** Infer validated identity output from a portable contract. */
|
|
129
|
+
type AuthorizationContractIdentity<TContract> = TContract extends AnyAuthorizationContract ? NonNullable<TContract[typeof authorizationContractTypes]>["identity"] : never;
|
|
130
|
+
/** Infer accepted identity input from a portable contract. */
|
|
131
|
+
type AuthorizationContractIdentityInput<TContract> = TContract extends AnyAuthorizationContract ? NonNullable<TContract[typeof authorizationContractTypes]>["identityInput"] : never;
|
|
132
|
+
/** Infer registered permission requests from a portable contract. */
|
|
133
|
+
type AuthorizationContractPermissionRequest<TContract> = TContract extends AnyAuthorizationContract ? NonNullable<TContract[typeof authorizationContractTypes]>["permission"] : never;
|
|
134
|
+
/** Define a versioned identity and permission vocabulary without any rules. */
|
|
135
|
+
declare function defineAuthorizationContract<const TIdentitySchema extends z.ZodType<{
|
|
136
|
+
id: string;
|
|
137
|
+
}, any>, const TCatalogs extends readonly AnyPermissionCatalog[]>(config: {
|
|
138
|
+
identity: TIdentitySchema;
|
|
139
|
+
permissions: TCatalogs;
|
|
140
|
+
}): AuthorizationContract<TIdentitySchema, TCatalogs>;
|
|
141
|
+
/** The shared, synchronous authorization contract used by client and server. */
|
|
142
|
+
interface Authorization<TIdentitySchema extends z.ZodType<{
|
|
143
|
+
id: string;
|
|
144
|
+
}, any>, TCatalogs extends readonly AnyPermissionCatalog[]> {
|
|
145
|
+
readonly contract: AuthorizationContract<TIdentitySchema, TCatalogs>;
|
|
146
|
+
readonly identitySchema: TIdentitySchema;
|
|
147
|
+
readonly permissions: TCatalogs;
|
|
148
|
+
parseIdentity(identity: unknown): z.output<TIdentitySchema> | null;
|
|
149
|
+
can(request: RequestFor<RegisteredDescriptor<TCatalogs>>, identity: z.input<TIdentitySchema> | null): boolean;
|
|
150
|
+
}
|
|
151
|
+
/** Any one-rule authorization contract, for generic adapter APIs. */
|
|
152
|
+
interface AnyAuthorization {
|
|
153
|
+
readonly contract: AnyAuthorizationContract;
|
|
154
|
+
readonly identitySchema: z.ZodType<{
|
|
155
|
+
id: string;
|
|
156
|
+
}, any>;
|
|
157
|
+
readonly permissions: readonly AnyPermissionCatalog[];
|
|
158
|
+
parseIdentity(identity: unknown): {
|
|
159
|
+
id: string;
|
|
160
|
+
} | null;
|
|
161
|
+
can(request: any, identity: any): boolean;
|
|
162
|
+
}
|
|
163
|
+
/** Infer validated identity output from an authorization contract. */
|
|
164
|
+
type AuthorizationIdentity<TAuthorization> = TAuthorization extends {
|
|
165
|
+
readonly identitySchema: infer TSchema extends z.ZodType<{
|
|
166
|
+
id: string;
|
|
167
|
+
}, any>;
|
|
168
|
+
} ? z.output<TSchema> : never;
|
|
169
|
+
/** Infer accepted identity input from an authorization contract. */
|
|
170
|
+
type AuthorizationIdentityInput<TAuthorization> = TAuthorization extends {
|
|
171
|
+
readonly identitySchema: infer TSchema extends z.ZodType<{
|
|
172
|
+
id: string;
|
|
173
|
+
}, any>;
|
|
174
|
+
} ? z.input<TSchema> : never;
|
|
175
|
+
/** Infer registered permission requests from an authorization contract. */
|
|
176
|
+
type AuthorizationPermissionRequest<TAuthorization> = TAuthorization extends {
|
|
177
|
+
readonly permissions: infer TCatalogs extends readonly AnyPermissionCatalog[];
|
|
178
|
+
} ? RequestFor<RegisteredDescriptor<TCatalogs>> : never;
|
|
179
|
+
/** Infer stable permission ids registered by an authorization contract. */
|
|
180
|
+
type AuthorizationPermissionId<TAuthorization> = TAuthorization extends Authorization<any, infer TCatalogs> ? RegisteredDescriptor<TCatalogs> extends PermissionDescriptor<infer TId, any> ? TId : never : never;
|
|
181
|
+
/**
|
|
182
|
+
* Define one browser-safe rule set over a validated identity and registered
|
|
183
|
+
* permission catalogs. Missing rules deny; rule failures are allowed to
|
|
184
|
+
* propagate so outages never masquerade as ordinary denials.
|
|
185
|
+
*/
|
|
186
|
+
declare function defineAuthorization<const TContract extends AnyAuthorizationContract>(config: {
|
|
187
|
+
contract: TContract;
|
|
188
|
+
rules: (permissions: RuleCatalogs<ContractCatalogs<TContract>, z.output<ContractIdentitySchema<TContract>>>) => readonly AuthorizationRuleDefinition[];
|
|
189
|
+
}): Authorization<ContractIdentitySchema<TContract>, ContractCatalogs<TContract>>;
|
|
190
|
+
declare function defineAuthorization<const TIdentitySchema extends z.ZodType<{
|
|
191
|
+
id: string;
|
|
192
|
+
}, any>, const TCatalogs extends readonly AnyPermissionCatalog[]>(config: {
|
|
193
|
+
identity: TIdentitySchema;
|
|
194
|
+
permissions: TCatalogs;
|
|
195
|
+
rules: (permissions: RuleCatalogs<TCatalogs, z.output<TIdentitySchema>>) => readonly AuthorizationRuleDefinition[];
|
|
196
|
+
}): Authorization<TIdentitySchema, TCatalogs>;
|
|
197
|
+
/** Check whether a runtime value has the shape of a permission request. */
|
|
198
|
+
declare function isPermissionRequest(value: unknown): value is AnyPermissionRequest;
|
|
199
|
+
|
|
200
|
+
export { defineAuthorization, defineAuthorizationContract, definePermissions, isPermissionRequest, permission };
|
|
201
|
+
export type { AnyAuthorization, AnyAuthorizationContract, AnyPermissionDescriptor, Authorization, AuthorizationContract, AuthorizationContractIdentity, AuthorizationContractIdentityInput, AuthorizationContractPermissionRequest, AuthorizationIdentity, AuthorizationIdentityInput, AuthorizationPermissionId, AuthorizationPermissionRequest, PermissionCatalog, PermissionDescriptor, PermissionFactsFor, PermissionInputFor, PermissionRequest, PermissionRequestFor, PermissionSeed };
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
declare const permissionSeedMarker: "__btst.authorization.permission-seed.v1";
|
|
4
|
+
declare const permissionDescriptorMarker: "__btst.authorization.permission-descriptor.v1";
|
|
5
|
+
declare const permissionCatalogMarker: "__btst.authorization.permission-catalog.v1";
|
|
6
|
+
declare const authorizationContractTypes: "__btst.authorization.contract-types.v1";
|
|
7
|
+
type AnySchema = z.ZodType<any, any>;
|
|
8
|
+
/** A permission declaration before its stable catalog id has been assigned. */
|
|
9
|
+
interface PermissionSeed<TSchema extends AnySchema | undefined> {
|
|
10
|
+
readonly [permissionSeedMarker]: true;
|
|
11
|
+
readonly schema: TSchema;
|
|
12
|
+
}
|
|
13
|
+
type PermissionFacts<TSchema extends AnySchema | undefined> = TSchema extends AnySchema ? z.output<TSchema> : undefined;
|
|
14
|
+
type PermissionInput<TSchema extends AnySchema | undefined> = TSchema extends AnySchema ? [facts: z.input<TSchema>] : [];
|
|
15
|
+
/** A validated permission request passed to client and server evaluators. */
|
|
16
|
+
interface PermissionRequest<TId extends string = string, TSchema extends AnySchema | undefined = AnySchema | undefined> {
|
|
17
|
+
readonly id: TId;
|
|
18
|
+
readonly permission: PermissionDescriptor<TId, TSchema>;
|
|
19
|
+
readonly facts: PermissionFacts<TSchema>;
|
|
20
|
+
}
|
|
21
|
+
/** A stable, callable permission descriptor produced by `definePermissions`. */
|
|
22
|
+
interface PermissionDescriptor<TId extends string = string, TSchema extends AnySchema | undefined = AnySchema | undefined> {
|
|
23
|
+
(...args: PermissionInput<TSchema>): PermissionRequest<TId, TSchema>;
|
|
24
|
+
readonly id: TId;
|
|
25
|
+
readonly schema: TSchema;
|
|
26
|
+
readonly [permissionDescriptorMarker]: true;
|
|
27
|
+
}
|
|
28
|
+
type PermissionTree = {
|
|
29
|
+
readonly [key: string]: PermissionTree | PermissionSeed<AnySchema | undefined>;
|
|
30
|
+
};
|
|
31
|
+
type AppendPath<TPath extends string, TKey extends string> = TPath extends "" ? TKey : `${TPath}.${TKey}`;
|
|
32
|
+
type BoundPermissionTree<TTree, TNamespace extends string, TPath extends string = ""> = TTree extends PermissionSeed<infer TSchema> ? PermissionDescriptor<`${TNamespace}:${TPath}`, TSchema> : {
|
|
33
|
+
readonly [TKey in keyof TTree]: TKey extends string ? BoundPermissionTree<TTree[TKey], TNamespace, AppendPath<TPath, TKey>> : never;
|
|
34
|
+
};
|
|
35
|
+
/** A named catalog of permission descriptors. */
|
|
36
|
+
type PermissionCatalog<TName extends string = string, TTree extends PermissionTree = {}> = BoundPermissionTree<TTree, TName> & {
|
|
37
|
+
readonly [permissionCatalogMarker]: {
|
|
38
|
+
readonly name: TName;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
type AnyPermissionCatalog = PermissionCatalog<string>;
|
|
42
|
+
/** Any schema-backed permission descriptor, for generic plugin APIs. */
|
|
43
|
+
type AnyPermissionDescriptor = PermissionDescriptor<string, AnySchema | undefined>;
|
|
44
|
+
type AnyPermissionRequest = PermissionRequest<string, AnySchema | undefined>;
|
|
45
|
+
/** Declare a permission whose checks do not need record facts. */
|
|
46
|
+
declare function permission(): PermissionSeed<undefined>;
|
|
47
|
+
/** Declare a permission whose fact type is inferred from its runtime schema. */
|
|
48
|
+
declare function permission<TSchema extends AnySchema>(schema: TSchema): PermissionSeed<TSchema>;
|
|
49
|
+
/**
|
|
50
|
+
* Assign stable ids to a plugin's schema-backed permission declarations.
|
|
51
|
+
* The returned tree is safe to import from both browser and server modules.
|
|
52
|
+
*/
|
|
53
|
+
declare function definePermissions<const TName extends string, const TTree extends PermissionTree>(name: TName, tree: TTree): PermissionCatalog<TName, TTree>;
|
|
54
|
+
type DescriptorsIn<T> = T extends AnyPermissionDescriptor ? T : T extends object ? {
|
|
55
|
+
[TKey in keyof T]: TKey extends typeof permissionCatalogMarker ? never : DescriptorsIn<T[TKey]>;
|
|
56
|
+
}[keyof T] : never;
|
|
57
|
+
type RegisteredDescriptor<TCatalogs extends readonly AnyPermissionCatalog[]> = DescriptorsIn<TCatalogs[number]>;
|
|
58
|
+
type RequestFor<TDescriptor> = TDescriptor extends PermissionDescriptor<infer TId, infer TSchema> ? PermissionRequest<TId, TSchema> : never;
|
|
59
|
+
/** Infer validated fact output for a permission descriptor. */
|
|
60
|
+
type PermissionFactsFor<TPermission> = TPermission extends PermissionDescriptor<infer _TId, infer TSchema> ? PermissionFacts<TSchema> : never;
|
|
61
|
+
/** Infer accepted fact input for a permission descriptor. */
|
|
62
|
+
type PermissionInputFor<TPermission> = TPermission extends PermissionDescriptor<infer _TId, infer TSchema> ? TSchema extends AnySchema ? z.input<TSchema> : undefined : never;
|
|
63
|
+
/** Infer the validated request created by a permission descriptor. */
|
|
64
|
+
type PermissionRequestFor<TPermission> = RequestFor<TPermission>;
|
|
65
|
+
interface AuthorizationRuleDefinition {
|
|
66
|
+
readonly permission: AnyPermissionDescriptor;
|
|
67
|
+
readonly evaluate: (input: {
|
|
68
|
+
identity: unknown;
|
|
69
|
+
facts: unknown;
|
|
70
|
+
}) => boolean;
|
|
71
|
+
}
|
|
72
|
+
type RulePermission<TPermission, TIdentity> = TPermission extends PermissionDescriptor<infer _TId, infer TSchema> ? {
|
|
73
|
+
allow: () => AuthorizationRuleDefinition;
|
|
74
|
+
when: (rule: (input: {
|
|
75
|
+
identity: TIdentity | null;
|
|
76
|
+
facts: PermissionFacts<TSchema>;
|
|
77
|
+
}) => boolean) => AuthorizationRuleDefinition;
|
|
78
|
+
} : never;
|
|
79
|
+
type RuleTree<TTree, TIdentity> = TTree extends AnyPermissionDescriptor ? RulePermission<TTree, TIdentity> : TTree extends object ? {
|
|
80
|
+
[TKey in keyof TTree as TKey extends typeof permissionCatalogMarker ? never : TKey]: RuleTree<TTree[TKey], TIdentity>;
|
|
81
|
+
} : never;
|
|
82
|
+
type CatalogRuleEntry<TCatalog, TIdentity> = TCatalog extends PermissionCatalog<infer TName, infer _TTree> ? {
|
|
83
|
+
[TKey in TName]: RuleTree<TCatalog, TIdentity>;
|
|
84
|
+
} : never;
|
|
85
|
+
type UnionToIntersection<T> = (T extends unknown ? (value: T) => void : never) extends (value: infer TIntersection) => void ? TIntersection : never;
|
|
86
|
+
type RuleCatalogs<TCatalogs extends readonly AnyPermissionCatalog[], TIdentity> = UnionToIntersection<CatalogRuleEntry<TCatalogs[number], TIdentity>>;
|
|
87
|
+
/**
|
|
88
|
+
* A rule-free authorization vocabulary that can be published independently of
|
|
89
|
+
* an application's backend implementation.
|
|
90
|
+
*/
|
|
91
|
+
interface AuthorizationContract<TIdentitySchema extends z.ZodType<{
|
|
92
|
+
id: string;
|
|
93
|
+
}, any>, TCatalogs extends readonly AnyPermissionCatalog[]> {
|
|
94
|
+
readonly [authorizationContractTypes]?: {
|
|
95
|
+
readonly identity: z.output<TIdentitySchema>;
|
|
96
|
+
readonly identityInput: z.input<TIdentitySchema>;
|
|
97
|
+
readonly permission: RequestFor<RegisteredDescriptor<TCatalogs>>;
|
|
98
|
+
};
|
|
99
|
+
readonly identitySchema: TIdentitySchema;
|
|
100
|
+
readonly permissions: TCatalogs;
|
|
101
|
+
readonly permissionIds: readonly string[];
|
|
102
|
+
readonly version: string;
|
|
103
|
+
parseIdentity(identity: unknown): z.output<TIdentitySchema> | null;
|
|
104
|
+
parsePermission(permission: unknown): RequestFor<RegisteredDescriptor<TCatalogs>>;
|
|
105
|
+
}
|
|
106
|
+
/** Any portable authorization contract, for generic adapter APIs. */
|
|
107
|
+
interface AnyAuthorizationContract {
|
|
108
|
+
readonly [authorizationContractTypes]?: {
|
|
109
|
+
readonly identity: {
|
|
110
|
+
id: string;
|
|
111
|
+
};
|
|
112
|
+
readonly identityInput: unknown;
|
|
113
|
+
readonly permission: any;
|
|
114
|
+
};
|
|
115
|
+
readonly identitySchema: z.ZodType<{
|
|
116
|
+
id: string;
|
|
117
|
+
}, any>;
|
|
118
|
+
readonly permissions: readonly AnyPermissionCatalog[];
|
|
119
|
+
readonly permissionIds: readonly string[];
|
|
120
|
+
readonly version: string;
|
|
121
|
+
parseIdentity(identity: unknown): {
|
|
122
|
+
id: string;
|
|
123
|
+
} | null;
|
|
124
|
+
parsePermission(permission: unknown): any;
|
|
125
|
+
}
|
|
126
|
+
type ContractIdentitySchema<TContract extends AnyAuthorizationContract> = TContract extends AuthorizationContract<infer TSchema, any> ? TSchema : never;
|
|
127
|
+
type ContractCatalogs<TContract extends AnyAuthorizationContract> = TContract extends AuthorizationContract<any, infer TCatalogs> ? TCatalogs : never;
|
|
128
|
+
/** Infer validated identity output from a portable contract. */
|
|
129
|
+
type AuthorizationContractIdentity<TContract> = TContract extends AnyAuthorizationContract ? NonNullable<TContract[typeof authorizationContractTypes]>["identity"] : never;
|
|
130
|
+
/** Infer accepted identity input from a portable contract. */
|
|
131
|
+
type AuthorizationContractIdentityInput<TContract> = TContract extends AnyAuthorizationContract ? NonNullable<TContract[typeof authorizationContractTypes]>["identityInput"] : never;
|
|
132
|
+
/** Infer registered permission requests from a portable contract. */
|
|
133
|
+
type AuthorizationContractPermissionRequest<TContract> = TContract extends AnyAuthorizationContract ? NonNullable<TContract[typeof authorizationContractTypes]>["permission"] : never;
|
|
134
|
+
/** Define a versioned identity and permission vocabulary without any rules. */
|
|
135
|
+
declare function defineAuthorizationContract<const TIdentitySchema extends z.ZodType<{
|
|
136
|
+
id: string;
|
|
137
|
+
}, any>, const TCatalogs extends readonly AnyPermissionCatalog[]>(config: {
|
|
138
|
+
identity: TIdentitySchema;
|
|
139
|
+
permissions: TCatalogs;
|
|
140
|
+
}): AuthorizationContract<TIdentitySchema, TCatalogs>;
|
|
141
|
+
/** The shared, synchronous authorization contract used by client and server. */
|
|
142
|
+
interface Authorization<TIdentitySchema extends z.ZodType<{
|
|
143
|
+
id: string;
|
|
144
|
+
}, any>, TCatalogs extends readonly AnyPermissionCatalog[]> {
|
|
145
|
+
readonly contract: AuthorizationContract<TIdentitySchema, TCatalogs>;
|
|
146
|
+
readonly identitySchema: TIdentitySchema;
|
|
147
|
+
readonly permissions: TCatalogs;
|
|
148
|
+
parseIdentity(identity: unknown): z.output<TIdentitySchema> | null;
|
|
149
|
+
can(request: RequestFor<RegisteredDescriptor<TCatalogs>>, identity: z.input<TIdentitySchema> | null): boolean;
|
|
150
|
+
}
|
|
151
|
+
/** Any one-rule authorization contract, for generic adapter APIs. */
|
|
152
|
+
interface AnyAuthorization {
|
|
153
|
+
readonly contract: AnyAuthorizationContract;
|
|
154
|
+
readonly identitySchema: z.ZodType<{
|
|
155
|
+
id: string;
|
|
156
|
+
}, any>;
|
|
157
|
+
readonly permissions: readonly AnyPermissionCatalog[];
|
|
158
|
+
parseIdentity(identity: unknown): {
|
|
159
|
+
id: string;
|
|
160
|
+
} | null;
|
|
161
|
+
can(request: any, identity: any): boolean;
|
|
162
|
+
}
|
|
163
|
+
/** Infer validated identity output from an authorization contract. */
|
|
164
|
+
type AuthorizationIdentity<TAuthorization> = TAuthorization extends {
|
|
165
|
+
readonly identitySchema: infer TSchema extends z.ZodType<{
|
|
166
|
+
id: string;
|
|
167
|
+
}, any>;
|
|
168
|
+
} ? z.output<TSchema> : never;
|
|
169
|
+
/** Infer accepted identity input from an authorization contract. */
|
|
170
|
+
type AuthorizationIdentityInput<TAuthorization> = TAuthorization extends {
|
|
171
|
+
readonly identitySchema: infer TSchema extends z.ZodType<{
|
|
172
|
+
id: string;
|
|
173
|
+
}, any>;
|
|
174
|
+
} ? z.input<TSchema> : never;
|
|
175
|
+
/** Infer registered permission requests from an authorization contract. */
|
|
176
|
+
type AuthorizationPermissionRequest<TAuthorization> = TAuthorization extends {
|
|
177
|
+
readonly permissions: infer TCatalogs extends readonly AnyPermissionCatalog[];
|
|
178
|
+
} ? RequestFor<RegisteredDescriptor<TCatalogs>> : never;
|
|
179
|
+
/** Infer stable permission ids registered by an authorization contract. */
|
|
180
|
+
type AuthorizationPermissionId<TAuthorization> = TAuthorization extends Authorization<any, infer TCatalogs> ? RegisteredDescriptor<TCatalogs> extends PermissionDescriptor<infer TId, any> ? TId : never : never;
|
|
181
|
+
/**
|
|
182
|
+
* Define one browser-safe rule set over a validated identity and registered
|
|
183
|
+
* permission catalogs. Missing rules deny; rule failures are allowed to
|
|
184
|
+
* propagate so outages never masquerade as ordinary denials.
|
|
185
|
+
*/
|
|
186
|
+
declare function defineAuthorization<const TContract extends AnyAuthorizationContract>(config: {
|
|
187
|
+
contract: TContract;
|
|
188
|
+
rules: (permissions: RuleCatalogs<ContractCatalogs<TContract>, z.output<ContractIdentitySchema<TContract>>>) => readonly AuthorizationRuleDefinition[];
|
|
189
|
+
}): Authorization<ContractIdentitySchema<TContract>, ContractCatalogs<TContract>>;
|
|
190
|
+
declare function defineAuthorization<const TIdentitySchema extends z.ZodType<{
|
|
191
|
+
id: string;
|
|
192
|
+
}, any>, const TCatalogs extends readonly AnyPermissionCatalog[]>(config: {
|
|
193
|
+
identity: TIdentitySchema;
|
|
194
|
+
permissions: TCatalogs;
|
|
195
|
+
rules: (permissions: RuleCatalogs<TCatalogs, z.output<TIdentitySchema>>) => readonly AuthorizationRuleDefinition[];
|
|
196
|
+
}): Authorization<TIdentitySchema, TCatalogs>;
|
|
197
|
+
/** Check whether a runtime value has the shape of a permission request. */
|
|
198
|
+
declare function isPermissionRequest(value: unknown): value is AnyPermissionRequest;
|
|
199
|
+
|
|
200
|
+
export { defineAuthorization, defineAuthorizationContract, definePermissions, isPermissionRequest, permission };
|
|
201
|
+
export type { AnyAuthorization, AnyAuthorizationContract, AnyPermissionDescriptor, Authorization, AuthorizationContract, AuthorizationContractIdentity, AuthorizationContractIdentityInput, AuthorizationContractPermissionRequest, AuthorizationIdentity, AuthorizationIdentityInput, AuthorizationPermissionId, AuthorizationPermissionRequest, PermissionCatalog, PermissionDescriptor, PermissionFactsFor, PermissionInputFor, PermissionRequest, PermissionRequestFor, PermissionSeed };
|