@kywi-software/core 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/app.d.ts +69 -0
- package/dist/admin/app.d.ts.map +1 -0
- package/dist/admin/app.js +98 -0
- package/dist/admin/app.js.map +1 -0
- package/dist/admin/chrome.d.ts +37 -0
- package/dist/admin/chrome.d.ts.map +1 -0
- package/dist/admin/chrome.js +162 -0
- package/dist/admin/chrome.js.map +1 -0
- package/dist/admin/context.d.ts +58 -0
- package/dist/admin/context.d.ts.map +1 -0
- package/dist/admin/context.js +31 -0
- package/dist/admin/context.js.map +1 -0
- package/dist/admin/index.d.ts +9 -1
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +12 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/nav.d.ts +21 -1
- package/dist/admin/nav.d.ts.map +1 -1
- package/dist/admin/nav.js +45 -88
- package/dist/admin/nav.js.map +1 -1
- package/dist/admin/primitives.d.ts +52 -0
- package/dist/admin/primitives.d.ts.map +1 -0
- package/dist/admin/primitives.js +78 -0
- package/dist/admin/primitives.js.map +1 -0
- package/dist/admin/registry.d.ts +130 -0
- package/dist/admin/registry.d.ts.map +1 -0
- package/dist/admin/registry.js +456 -0
- package/dist/admin/registry.js.map +1 -0
- package/dist/admin/server.d.ts +154 -0
- package/dist/admin/server.d.ts.map +1 -0
- package/dist/admin/server.js +121 -0
- package/dist/admin/server.js.map +1 -0
- package/dist/admin/shell.d.ts +27 -1
- package/dist/admin/shell.d.ts.map +1 -1
- package/dist/admin/shell.js +10 -4
- package/dist/admin/shell.js.map +1 -1
- package/dist/admin/styles/admin.css +24 -0
- package/dist/admin/surface-matcher.d.ts +51 -0
- package/dist/admin/surface-matcher.d.ts.map +1 -0
- package/dist/admin/surface-matcher.js +181 -0
- package/dist/admin/surface-matcher.js.map +1 -0
- package/dist/admin/surfaces/approvals/approvals-data.d.ts +17 -0
- package/dist/admin/surfaces/approvals/approvals-data.d.ts.map +1 -0
- package/dist/admin/surfaces/approvals/approvals-data.js +55 -0
- package/dist/admin/surfaces/approvals/approvals-data.js.map +1 -0
- package/dist/admin/surfaces/approvals/approvals-index.d.ts +3 -0
- package/dist/admin/surfaces/approvals/approvals-index.d.ts.map +1 -0
- package/dist/admin/surfaces/approvals/approvals-index.js +75 -0
- package/dist/admin/surfaces/approvals/approvals-index.js.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-data.d.ts +107 -0
- package/dist/admin/surfaces/audiences/audiences-data.d.ts.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-data.js +216 -0
- package/dist/admin/surfaces/audiences/audiences-data.js.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-detail.d.ts +3 -0
- package/dist/admin/surfaces/audiences/audiences-detail.d.ts.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-detail.js +78 -0
- package/dist/admin/surfaces/audiences/audiences-detail.js.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-edit.d.ts +3 -0
- package/dist/admin/surfaces/audiences/audiences-edit.d.ts.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-edit.js +55 -0
- package/dist/admin/surfaces/audiences/audiences-edit.js.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-fields.d.ts +3 -0
- package/dist/admin/surfaces/audiences/audiences-fields.d.ts.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-fields.js +56 -0
- package/dist/admin/surfaces/audiences/audiences-fields.js.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-list.d.ts +3 -0
- package/dist/admin/surfaces/audiences/audiences-list.d.ts.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-list.js +50 -0
- package/dist/admin/surfaces/audiences/audiences-list.js.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-new.d.ts +3 -0
- package/dist/admin/surfaces/audiences/audiences-new.d.ts.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-new.js +54 -0
- package/dist/admin/surfaces/audiences/audiences-new.js.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-preview-tokens.d.ts +3 -0
- package/dist/admin/surfaces/audiences/audiences-preview-tokens.d.ts.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-preview-tokens.js +123 -0
- package/dist/admin/surfaces/audiences/audiences-preview-tokens.js.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-selfid-widget.d.ts +3 -0
- package/dist/admin/surfaces/audiences/audiences-selfid-widget.d.ts.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-selfid-widget.js +50 -0
- package/dist/admin/surfaces/audiences/audiences-selfid-widget.js.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-test.d.ts +3 -0
- package/dist/admin/surfaces/audiences/audiences-test.d.ts.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-test.js +39 -0
- package/dist/admin/surfaces/audiences/audiences-test.js.map +1 -0
- package/dist/admin/surfaces/audiences/states.d.ts +10 -0
- package/dist/admin/surfaces/audiences/states.d.ts.map +1 -0
- package/dist/admin/surfaces/audiences/states.js +11 -0
- package/dist/admin/surfaces/audiences/states.js.map +1 -0
- package/dist/admin/surfaces/changesets/changesets-data.d.ts +35 -0
- package/dist/admin/surfaces/changesets/changesets-data.d.ts.map +1 -0
- package/dist/admin/surfaces/changesets/changesets-data.js +151 -0
- package/dist/admin/surfaces/changesets/changesets-data.js.map +1 -0
- package/dist/admin/surfaces/changesets/changesets-detail.d.ts +3 -0
- package/dist/admin/surfaces/changesets/changesets-detail.d.ts.map +1 -0
- package/dist/admin/surfaces/changesets/changesets-detail.js +84 -0
- package/dist/admin/surfaces/changesets/changesets-detail.js.map +1 -0
- package/dist/admin/surfaces/changesets/changesets-index.d.ts +3 -0
- package/dist/admin/surfaces/changesets/changesets-index.d.ts.map +1 -0
- package/dist/admin/surfaces/changesets/changesets-index.js +62 -0
- package/dist/admin/surfaces/changesets/changesets-index.js.map +1 -0
- package/dist/admin/surfaces/comments/comment-moderation.d.ts +18 -0
- package/dist/admin/surfaces/comments/comment-moderation.d.ts.map +1 -0
- package/dist/admin/surfaces/comments/comment-moderation.js +36 -0
- package/dist/admin/surfaces/comments/comment-moderation.js.map +1 -0
- package/dist/admin/surfaces/comments/comments-data.d.ts +23 -0
- package/dist/admin/surfaces/comments/comments-data.d.ts.map +1 -0
- package/dist/admin/surfaces/comments/comments-data.js +81 -0
- package/dist/admin/surfaces/comments/comments-data.js.map +1 -0
- package/dist/admin/surfaces/comments/comments-index.d.ts +3 -0
- package/dist/admin/surfaces/comments/comments-index.d.ts.map +1 -0
- package/dist/admin/surfaces/comments/comments-index.js +73 -0
- package/dist/admin/surfaces/comments/comments-index.js.map +1 -0
- package/dist/admin/surfaces/content/content-edit.d.ts +3 -0
- package/dist/admin/surfaces/content/content-edit.d.ts.map +1 -0
- package/dist/admin/surfaces/content/content-edit.js +321 -0
- package/dist/admin/surfaces/content/content-edit.js.map +1 -0
- package/dist/admin/surfaces/content/content-index.d.ts +3 -0
- package/dist/admin/surfaces/content/content-index.d.ts.map +1 -0
- package/dist/admin/surfaces/content/content-index.js +21 -0
- package/dist/admin/surfaces/content/content-index.js.map +1 -0
- package/dist/admin/surfaces/content/content-list.d.ts +3 -0
- package/dist/admin/surfaces/content/content-list.d.ts.map +1 -0
- package/dist/admin/surfaces/content/content-list.js +70 -0
- package/dist/admin/surfaces/content/content-list.js.map +1 -0
- package/dist/admin/surfaces/content/content-new.d.ts +3 -0
- package/dist/admin/surfaces/content/content-new.d.ts.map +1 -0
- package/dist/admin/surfaces/content/content-new.js +109 -0
- package/dist/admin/surfaces/content/content-new.js.map +1 -0
- package/dist/admin/surfaces/content/content-translation-bar.d.ts +12 -0
- package/dist/admin/surfaces/content/content-translation-bar.d.ts.map +1 -0
- package/dist/admin/surfaces/content/content-translation-bar.js +65 -0
- package/dist/admin/surfaces/content/content-translation-bar.js.map +1 -0
- package/dist/admin/surfaces/content/runtime-content-types.d.ts +41 -0
- package/dist/admin/surfaces/content/runtime-content-types.d.ts.map +1 -0
- package/dist/admin/surfaces/content/runtime-content-types.js +51 -0
- package/dist/admin/surfaces/content/runtime-content-types.js.map +1 -0
- package/dist/admin/surfaces/contentTree/content-tree.d.ts +3 -0
- package/dist/admin/surfaces/contentTree/content-tree.d.ts.map +1 -0
- package/dist/admin/surfaces/contentTree/content-tree.js +179 -0
- package/dist/admin/surfaces/contentTree/content-tree.js.map +1 -0
- package/dist/admin/surfaces/contentTree/move-to-picker.d.ts +12 -0
- package/dist/admin/surfaces/contentTree/move-to-picker.d.ts.map +1 -0
- package/dist/admin/surfaces/contentTree/move-to-picker.js +77 -0
- package/dist/admin/surfaces/contentTree/move-to-picker.js.map +1 -0
- package/dist/admin/surfaces/contentTypes/content-types-designer.d.ts +3 -0
- package/dist/admin/surfaces/contentTypes/content-types-designer.d.ts.map +1 -0
- package/dist/admin/surfaces/contentTypes/content-types-designer.js +260 -0
- package/dist/admin/surfaces/contentTypes/content-types-designer.js.map +1 -0
- package/dist/admin/surfaces/contentTypes/content-types-list.d.ts +3 -0
- package/dist/admin/surfaces/contentTypes/content-types-list.d.ts.map +1 -0
- package/dist/admin/surfaces/contentTypes/content-types-list.js +69 -0
- package/dist/admin/surfaces/contentTypes/content-types-list.js.map +1 -0
- package/dist/admin/surfaces/dashboard/dashboard-index.d.ts +3 -0
- package/dist/admin/surfaces/dashboard/dashboard-index.d.ts.map +1 -0
- package/dist/admin/surfaces/dashboard/dashboard-index.js +100 -0
- package/dist/admin/surfaces/dashboard/dashboard-index.js.map +1 -0
- package/dist/admin/surfaces/experiments/experiments-data.d.ts +12 -0
- package/dist/admin/surfaces/experiments/experiments-data.d.ts.map +1 -0
- package/dist/admin/surfaces/experiments/experiments-data.js +89 -0
- package/dist/admin/surfaces/experiments/experiments-data.js.map +1 -0
- package/dist/admin/surfaces/experiments/experiments-detail.d.ts +3 -0
- package/dist/admin/surfaces/experiments/experiments-detail.d.ts.map +1 -0
- package/dist/admin/surfaces/experiments/experiments-detail.js +87 -0
- package/dist/admin/surfaces/experiments/experiments-detail.js.map +1 -0
- package/dist/admin/surfaces/experiments/experiments-list.d.ts +3 -0
- package/dist/admin/surfaces/experiments/experiments-list.d.ts.map +1 -0
- package/dist/admin/surfaces/experiments/experiments-list.js +37 -0
- package/dist/admin/surfaces/experiments/experiments-list.js.map +1 -0
- package/dist/admin/surfaces/experiments/experiments-new.d.ts +3 -0
- package/dist/admin/surfaces/experiments/experiments-new.d.ts.map +1 -0
- package/dist/admin/surfaces/experiments/experiments-new.js +33 -0
- package/dist/admin/surfaces/experiments/experiments-new.js.map +1 -0
- package/dist/admin/surfaces/experiments/states.d.ts +10 -0
- package/dist/admin/surfaces/experiments/states.d.ts.map +1 -0
- package/dist/admin/surfaces/experiments/states.js +11 -0
- package/dist/admin/surfaces/experiments/states.js.map +1 -0
- package/dist/admin/surfaces/extensions/extensions-data.d.ts +59 -0
- package/dist/admin/surfaces/extensions/extensions-data.d.ts.map +1 -0
- package/dist/admin/surfaces/extensions/extensions-data.js +71 -0
- package/dist/admin/surfaces/extensions/extensions-data.js.map +1 -0
- package/dist/admin/surfaces/extensions/extensions-import-export.d.ts +3 -0
- package/dist/admin/surfaces/extensions/extensions-import-export.d.ts.map +1 -0
- package/dist/admin/surfaces/extensions/extensions-import-export.js +77 -0
- package/dist/admin/surfaces/extensions/extensions-import-export.js.map +1 -0
- package/dist/admin/surfaces/extensions/extensions-list.d.ts +3 -0
- package/dist/admin/surfaces/extensions/extensions-list.d.ts.map +1 -0
- package/dist/admin/surfaces/extensions/extensions-list.js +106 -0
- package/dist/admin/surfaces/extensions/extensions-list.js.map +1 -0
- package/dist/admin/surfaces/extensions/form-modal.d.ts +17 -0
- package/dist/admin/surfaces/extensions/form-modal.d.ts.map +1 -0
- package/dist/admin/surfaces/extensions/form-modal.js +27 -0
- package/dist/admin/surfaces/extensions/form-modal.js.map +1 -0
- package/dist/admin/surfaces/feeds/feed-editor.d.ts +8 -0
- package/dist/admin/surfaces/feeds/feed-editor.d.ts.map +1 -0
- package/dist/admin/surfaces/feeds/feed-editor.js +120 -0
- package/dist/admin/surfaces/feeds/feed-editor.js.map +1 -0
- package/dist/admin/surfaces/feeds/feeds-data.d.ts +35 -0
- package/dist/admin/surfaces/feeds/feeds-data.d.ts.map +1 -0
- package/dist/admin/surfaces/feeds/feeds-data.js +81 -0
- package/dist/admin/surfaces/feeds/feeds-data.js.map +1 -0
- package/dist/admin/surfaces/feeds/feeds-detail.d.ts +3 -0
- package/dist/admin/surfaces/feeds/feeds-detail.d.ts.map +1 -0
- package/dist/admin/surfaces/feeds/feeds-detail.js +36 -0
- package/dist/admin/surfaces/feeds/feeds-detail.js.map +1 -0
- package/dist/admin/surfaces/feeds/feeds-list.d.ts +3 -0
- package/dist/admin/surfaces/feeds/feeds-list.d.ts.map +1 -0
- package/dist/admin/surfaces/feeds/feeds-list.js +49 -0
- package/dist/admin/surfaces/feeds/feeds-list.js.map +1 -0
- package/dist/admin/surfaces/feeds/feeds-new.d.ts +3 -0
- package/dist/admin/surfaces/feeds/feeds-new.d.ts.map +1 -0
- package/dist/admin/surfaces/feeds/feeds-new.js +7 -0
- package/dist/admin/surfaces/feeds/feeds-new.js.map +1 -0
- package/dist/admin/surfaces/forms/form-editor.d.ts +5 -0
- package/dist/admin/surfaces/forms/form-editor.d.ts.map +1 -0
- package/dist/admin/surfaces/forms/form-editor.js +59 -0
- package/dist/admin/surfaces/forms/form-editor.js.map +1 -0
- package/dist/admin/surfaces/forms/forms-data.d.ts +52 -0
- package/dist/admin/surfaces/forms/forms-data.d.ts.map +1 -0
- package/dist/admin/surfaces/forms/forms-data.js +106 -0
- package/dist/admin/surfaces/forms/forms-data.js.map +1 -0
- package/dist/admin/surfaces/forms/forms-edit.d.ts +3 -0
- package/dist/admin/surfaces/forms/forms-edit.d.ts.map +1 -0
- package/dist/admin/surfaces/forms/forms-edit.js +40 -0
- package/dist/admin/surfaces/forms/forms-edit.js.map +1 -0
- package/dist/admin/surfaces/forms/forms-list.d.ts +3 -0
- package/dist/admin/surfaces/forms/forms-list.d.ts.map +1 -0
- package/dist/admin/surfaces/forms/forms-list.js +53 -0
- package/dist/admin/surfaces/forms/forms-list.js.map +1 -0
- package/dist/admin/surfaces/forms/forms-new.d.ts +3 -0
- package/dist/admin/surfaces/forms/forms-new.d.ts.map +1 -0
- package/dist/admin/surfaces/forms/forms-new.js +7 -0
- package/dist/admin/surfaces/forms/forms-new.js.map +1 -0
- package/dist/admin/surfaces/forms/forms-submissions.d.ts +3 -0
- package/dist/admin/surfaces/forms/forms-submissions.d.ts.map +1 -0
- package/dist/admin/surfaces/forms/forms-submissions.js +125 -0
- package/dist/admin/surfaces/forms/forms-submissions.js.map +1 -0
- package/dist/admin/surfaces/layouts/layout-editor-client.d.ts +8 -0
- package/dist/admin/surfaces/layouts/layout-editor-client.d.ts.map +1 -0
- package/dist/admin/surfaces/layouts/layout-editor-client.js +77 -0
- package/dist/admin/surfaces/layouts/layout-editor-client.js.map +1 -0
- package/dist/admin/surfaces/layouts/layouts-data.d.ts +53 -0
- package/dist/admin/surfaces/layouts/layouts-data.d.ts.map +1 -0
- package/dist/admin/surfaces/layouts/layouts-data.js +61 -0
- package/dist/admin/surfaces/layouts/layouts-data.js.map +1 -0
- package/dist/admin/surfaces/layouts/layouts-detail.d.ts +3 -0
- package/dist/admin/surfaces/layouts/layouts-detail.d.ts.map +1 -0
- package/dist/admin/surfaces/layouts/layouts-detail.js +38 -0
- package/dist/admin/surfaces/layouts/layouts-detail.js.map +1 -0
- package/dist/admin/surfaces/layouts/layouts-list.d.ts +3 -0
- package/dist/admin/surfaces/layouts/layouts-list.d.ts.map +1 -0
- package/dist/admin/surfaces/layouts/layouts-list.js +62 -0
- package/dist/admin/surfaces/layouts/layouts-list.js.map +1 -0
- package/dist/admin/surfaces/layouts/layouts-new.d.ts +3 -0
- package/dist/admin/surfaces/layouts/layouts-new.d.ts.map +1 -0
- package/dist/admin/surfaces/layouts/layouts-new.js +7 -0
- package/dist/admin/surfaces/layouts/layouts-new.js.map +1 -0
- package/dist/admin/surfaces/login.d.ts +20 -0
- package/dist/admin/surfaces/login.d.ts.map +1 -0
- package/dist/admin/surfaces/login.js +92 -0
- package/dist/admin/surfaces/login.js.map +1 -0
- package/dist/admin/surfaces/media/library.d.ts +3 -0
- package/dist/admin/surfaces/media/library.d.ts.map +1 -0
- package/dist/admin/surfaces/media/library.js +7 -0
- package/dist/admin/surfaces/media/library.js.map +1 -0
- package/dist/admin/surfaces/media/media-client.d.ts +4 -0
- package/dist/admin/surfaces/media/media-client.d.ts.map +1 -0
- package/dist/admin/surfaces/media/media-client.js +203 -0
- package/dist/admin/surfaces/media/media-client.js.map +1 -0
- package/dist/admin/surfaces/media/upload.d.ts +3 -0
- package/dist/admin/surfaces/media/upload.d.ts.map +1 -0
- package/dist/admin/surfaces/media/upload.js +7 -0
- package/dist/admin/surfaces/media/upload.js.map +1 -0
- package/dist/admin/surfaces/plugins/plugins-data.d.ts +37 -0
- package/dist/admin/surfaces/plugins/plugins-data.d.ts.map +1 -0
- package/dist/admin/surfaces/plugins/plugins-data.js +31 -0
- package/dist/admin/surfaces/plugins/plugins-data.js.map +1 -0
- package/dist/admin/surfaces/plugins/plugins-index.d.ts +3 -0
- package/dist/admin/surfaces/plugins/plugins-index.d.ts.map +1 -0
- package/dist/admin/surfaces/plugins/plugins-index.js +72 -0
- package/dist/admin/surfaces/plugins/plugins-index.js.map +1 -0
- package/dist/admin/surfaces/search/search-index.d.ts +3 -0
- package/dist/admin/surfaces/search/search-index.d.ts.map +1 -0
- package/dist/admin/surfaces/search/search-index.js +76 -0
- package/dist/admin/surfaces/search/search-index.js.map +1 -0
- package/dist/admin/surfaces/settings/admin-features.d.ts +3 -0
- package/dist/admin/surfaces/settings/admin-features.d.ts.map +1 -0
- package/dist/admin/surfaces/settings/admin-features.js +138 -0
- package/dist/admin/surfaces/settings/admin-features.js.map +1 -0
- package/dist/admin/surfaces/settings/settings-ax.d.ts +3 -0
- package/dist/admin/surfaces/settings/settings-ax.d.ts.map +1 -0
- package/dist/admin/surfaces/settings/settings-ax.js +63 -0
- package/dist/admin/surfaces/settings/settings-ax.js.map +1 -0
- package/dist/admin/surfaces/settings/settings-cache.d.ts +3 -0
- package/dist/admin/surfaces/settings/settings-cache.d.ts.map +1 -0
- package/dist/admin/surfaces/settings/settings-cache.js +64 -0
- package/dist/admin/surfaces/settings/settings-cache.js.map +1 -0
- package/dist/admin/surfaces/settings/settings-email.d.ts +3 -0
- package/dist/admin/surfaces/settings/settings-email.d.ts.map +1 -0
- package/dist/admin/surfaces/settings/settings-email.js +89 -0
- package/dist/admin/surfaces/settings/settings-email.js.map +1 -0
- package/dist/admin/surfaces/settings/settings-general.d.ts +3 -0
- package/dist/admin/surfaces/settings/settings-general.d.ts.map +1 -0
- package/dist/admin/surfaces/settings/settings-general.js +91 -0
- package/dist/admin/surfaces/settings/settings-general.js.map +1 -0
- package/dist/admin/surfaces/settings/settings-site.d.ts +3 -0
- package/dist/admin/surfaces/settings/settings-site.d.ts.map +1 -0
- package/dist/admin/surfaces/settings/settings-site.js +14 -0
- package/dist/admin/surfaces/settings/settings-site.js.map +1 -0
- package/dist/admin/surfaces/settings/settings-sites.d.ts +3 -0
- package/dist/admin/surfaces/settings/settings-sites.d.ts.map +1 -0
- package/dist/admin/surfaces/settings/settings-sites.js +134 -0
- package/dist/admin/surfaces/settings/settings-sites.js.map +1 -0
- package/dist/admin/surfaces/settings/states.d.ts +33 -0
- package/dist/admin/surfaces/settings/states.d.ts.map +1 -0
- package/dist/admin/surfaces/settings/states.js +33 -0
- package/dist/admin/surfaces/settings/states.js.map +1 -0
- package/dist/admin/surfaces/taxonomy/categories.d.ts +3 -0
- package/dist/admin/surfaces/taxonomy/categories.d.ts.map +1 -0
- package/dist/admin/surfaces/taxonomy/categories.js +162 -0
- package/dist/admin/surfaces/taxonomy/categories.js.map +1 -0
- package/dist/admin/surfaces/taxonomy/tags.d.ts +3 -0
- package/dist/admin/surfaces/taxonomy/tags.d.ts.map +1 -0
- package/dist/admin/surfaces/taxonomy/tags.js +112 -0
- package/dist/admin/surfaces/taxonomy/tags.js.map +1 -0
- package/dist/admin/surfaces/taxonomy/taxonomy-ui.d.ts +39 -0
- package/dist/admin/surfaces/taxonomy/taxonomy-ui.d.ts.map +1 -0
- package/dist/admin/surfaces/taxonomy/taxonomy-ui.js +66 -0
- package/dist/admin/surfaces/taxonomy/taxonomy-ui.js.map +1 -0
- package/dist/admin/surfaces/translations/states.d.ts +10 -0
- package/dist/admin/surfaces/translations/states.d.ts.map +1 -0
- package/dist/admin/surfaces/translations/states.js +11 -0
- package/dist/admin/surfaces/translations/states.js.map +1 -0
- package/dist/admin/surfaces/translations/translations-index.d.ts +3 -0
- package/dist/admin/surfaces/translations/translations-index.d.ts.map +1 -0
- package/dist/admin/surfaces/translations/translations-index.js +99 -0
- package/dist/admin/surfaces/translations/translations-index.js.map +1 -0
- package/dist/admin/surfaces/trash/trash-index.d.ts +3 -0
- package/dist/admin/surfaces/trash/trash-index.d.ts.map +1 -0
- package/dist/admin/surfaces/trash/trash-index.js +96 -0
- package/dist/admin/surfaces/trash/trash-index.js.map +1 -0
- package/dist/admin/surfaces/users/users-data.d.ts +51 -0
- package/dist/admin/surfaces/users/users-data.d.ts.map +1 -0
- package/dist/admin/surfaces/users/users-data.js +60 -0
- package/dist/admin/surfaces/users/users-data.js.map +1 -0
- package/dist/admin/surfaces/users/users-detail.d.ts +3 -0
- package/dist/admin/surfaces/users/users-detail.d.ts.map +1 -0
- package/dist/admin/surfaces/users/users-detail.js +148 -0
- package/dist/admin/surfaces/users/users-detail.js.map +1 -0
- package/dist/admin/surfaces/users/users-groups.d.ts +3 -0
- package/dist/admin/surfaces/users/users-groups.d.ts.map +1 -0
- package/dist/admin/surfaces/users/users-groups.js +136 -0
- package/dist/admin/surfaces/users/users-groups.js.map +1 -0
- package/dist/admin/surfaces/users/users-list.d.ts +3 -0
- package/dist/admin/surfaces/users/users-list.d.ts.map +1 -0
- package/dist/admin/surfaces/users/users-list.js +119 -0
- package/dist/admin/surfaces/users/users-list.js.map +1 -0
- package/dist/admin/surfaces/users/users-new.d.ts +3 -0
- package/dist/admin/surfaces/users/users-new.d.ts.map +1 -0
- package/dist/admin/surfaces/users/users-new.js +78 -0
- package/dist/admin/surfaces/users/users-new.js.map +1 -0
- package/dist/admin/surfaces/users/users-permissions.d.ts +3 -0
- package/dist/admin/surfaces/users/users-permissions.d.ts.map +1 -0
- package/dist/admin/surfaces/users/users-permissions.js +135 -0
- package/dist/admin/surfaces/users/users-permissions.js.map +1 -0
- package/dist/admin/surfaces/webServices/api-keys.d.ts +3 -0
- package/dist/admin/surfaces/webServices/api-keys.d.ts.map +1 -0
- package/dist/admin/surfaces/webServices/api-keys.js +65 -0
- package/dist/admin/surfaces/webServices/api-keys.js.map +1 -0
- package/dist/admin/surfaces/webServices/oauth.d.ts +3 -0
- package/dist/admin/surfaces/webServices/oauth.d.ts.map +1 -0
- package/dist/admin/surfaces/webServices/oauth.js +75 -0
- package/dist/admin/surfaces/webServices/oauth.js.map +1 -0
- package/dist/admin/surfaces/webServices/secret-reveal-modal.d.ts +8 -0
- package/dist/admin/surfaces/webServices/secret-reveal-modal.d.ts.map +1 -0
- package/dist/admin/surfaces/webServices/secret-reveal-modal.js +30 -0
- package/dist/admin/surfaces/webServices/secret-reveal-modal.js.map +1 -0
- package/dist/admin/surfaces/webServices/web-services-data.d.ts +38 -0
- package/dist/admin/surfaces/webServices/web-services-data.d.ts.map +1 -0
- package/dist/admin/surfaces/webServices/web-services-data.js +52 -0
- package/dist/admin/surfaces/webServices/web-services-data.js.map +1 -0
- package/dist/api/admin-features-routes.d.ts +10 -0
- package/dist/api/admin-features-routes.d.ts.map +1 -0
- package/dist/api/admin-features-routes.js +61 -0
- package/dist/api/admin-features-routes.js.map +1 -0
- package/dist/api/graphql/resolvers.d.ts +6 -6
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +2 -0
- package/dist/api/index.js.map +1 -1
- package/dist/config/define.d.ts +22 -1
- package/dist/config/define.d.ts.map +1 -1
- package/dist/config/define.js +44 -0
- package/dist/config/define.js.map +1 -1
- package/dist/config/parse.d.ts.map +1 -1
- package/dist/config/parse.js +8 -2
- package/dist/config/parse.js.map +1 -1
- package/dist/config/types.d.ts +60 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +20 -1
- package/dist/config/types.js.map +1 -1
- package/dist/config/validate.d.ts.map +1 -1
- package/dist/config/validate.js +60 -0
- package/dist/config/validate.js.map +1 -1
- package/dist/db/admin-features-queries.d.ts +29 -0
- package/dist/db/admin-features-queries.d.ts.map +1 -0
- package/dist/db/admin-features-queries.js +46 -0
- package/dist/db/admin-features-queries.js.map +1 -0
- package/dist/db/analytics-queries.d.ts +2 -2
- package/dist/db/audit-queries.d.ts +3 -3
- package/dist/db/category-queries.d.ts +6 -6
- package/dist/db/changeset-audit-queries.d.ts +2 -2
- package/dist/db/changeset-queries.d.ts +8 -8
- package/dist/db/extension-queries.d.ts +17 -17
- package/dist/db/feed-queries.d.ts +6 -6
- package/dist/db/media-queries.d.ts +12 -12
- package/dist/db/site-admin-queries.d.ts +1 -1
- package/dist/db/site-queries.d.ts +3 -3
- package/dist/db/tag-queries.d.ts +4 -4
- package/dist/db/webhook-queries.d.ts +8 -8
- package/dist/db/workflow-queries.d.ts +5 -5
- package/dist/experiments/schema.d.ts +1 -1
- package/dist/host-client/index.d.ts +1 -0
- package/dist/host-client/index.d.ts.map +1 -1
- package/dist/host-client/index.js +4 -0
- package/dist/host-client/index.js.map +1 -1
- package/dist/host-client/json.d.ts +36 -0
- package/dist/host-client/json.d.ts.map +1 -0
- package/dist/host-client/json.js +106 -0
- package/dist/host-client/json.js.map +1 -0
- package/dist/layout/modules-extended.d.ts.map +1 -1
- package/dist/layout/modules-extended.js +9 -8
- package/dist/layout/modules-extended.js.map +1 -1
- package/dist/layout/modules.js +5 -5
- package/dist/layout/modules.js.map +1 -1
- package/dist/schema/base.d.ts +1 -1
- package/dist/scope/breadcrumbs.d.ts.map +1 -1
- package/dist/scope/breadcrumbs.js +4 -1
- package/dist/scope/breadcrumbs.js.map +1 -1
- package/dist/scope/head-foot.d.ts +12 -4
- package/dist/scope/head-foot.d.ts.map +1 -1
- package/dist/scope/head-foot.js +14 -6
- package/dist/scope/head-foot.js.map +1 -1
- package/dist/scope/jsonld.d.ts.map +1 -1
- package/dist/scope/jsonld.js +1 -11
- package/dist/scope/jsonld.js.map +1 -1
- package/dist/scope/kywi-form.d.ts.map +1 -1
- package/dist/scope/kywi-form.js +3 -3
- package/dist/scope/kywi-form.js.map +1 -1
- package/dist/scope/kywi-wizard-form.d.ts.map +1 -1
- package/dist/scope/kywi-wizard-form.js +3 -3
- package/dist/scope/kywi-wizard-form.js.map +1 -1
- package/dist/scope/rendering.d.ts.map +1 -1
- package/dist/scope/rendering.js +7 -6
- package/dist/scope/rendering.js.map +1 -1
- package/dist/util/jsonld.d.ts +13 -0
- package/dist/util/jsonld.d.ts.map +1 -0
- package/dist/util/jsonld.js +15 -0
- package/dist/util/jsonld.js.map +1 -0
- package/dist/util/sanitize.d.ts +6 -0
- package/dist/util/sanitize.d.ts.map +1 -0
- package/dist/util/sanitize.js +156 -0
- package/dist/util/sanitize.js.map +1 -0
- package/package.json +12 -3
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* `users.permissions` surface — the capability matrix + per-content ACL
|
|
5
|
+
* browser, ported verbatim from `apps/reference/app/admin/users/permissions/
|
|
6
|
+
* page.tsx` (0.2.0 T9). Markup / copy unchanged; wiring substitutions (plan
|
|
7
|
+
* §1.3): `adminFetch` → `useAdminContext().fetch`. `AdminShellWrapper` is gone
|
|
8
|
+
* — chrome is rendered once by `KywiAdminApp` (T14).
|
|
9
|
+
*/
|
|
10
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
11
|
+
import { useAdminContext } from '../../context.js';
|
|
12
|
+
import { PermissionMatrix } from '../../permission-matrix.js';
|
|
13
|
+
import { ContentPermissionBrowser, } from '../../content-permission-browser.js';
|
|
14
|
+
import { loadUsers, loadGroups, fullName } from './users-data.js';
|
|
15
|
+
/** Depth-first flatten of the nested site tree into a flat option list. */
|
|
16
|
+
function flattenTree(nodes, out = []) {
|
|
17
|
+
for (const node of nodes) {
|
|
18
|
+
out.push({ id: node.id, title: node.title, path: node.path });
|
|
19
|
+
if (node.children?.length)
|
|
20
|
+
flattenTree(node.children, out);
|
|
21
|
+
}
|
|
22
|
+
return out;
|
|
23
|
+
}
|
|
24
|
+
export default function UsersPermissionsSurface(_props) {
|
|
25
|
+
const { fetch: adminFetch } = useAdminContext();
|
|
26
|
+
const [nodes, setNodes] = useState([]);
|
|
27
|
+
const [users, setUsers] = useState([]);
|
|
28
|
+
const [groups, setGroups] = useState([]);
|
|
29
|
+
const [selectedNodeId, setSelectedNodeId] = useState(null);
|
|
30
|
+
const [entries, setEntries] = useState([]);
|
|
31
|
+
const [aclLoading, setAclLoading] = useState(false);
|
|
32
|
+
const [aclError, setAclError] = useState(null);
|
|
33
|
+
const [busy, setBusy] = useState(false);
|
|
34
|
+
// Load the pickers' data once: site tree (content nodes), users, and groups.
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
let cancelled = false;
|
|
37
|
+
async function load() {
|
|
38
|
+
try {
|
|
39
|
+
const [treeRes, rawUsers, rawGroups] = await Promise.all([
|
|
40
|
+
adminFetch('/api/v1/tree'),
|
|
41
|
+
loadUsers(adminFetch),
|
|
42
|
+
loadGroups(adminFetch),
|
|
43
|
+
]);
|
|
44
|
+
const treeBody = treeRes.ok ? await treeRes.json() : { data: [] };
|
|
45
|
+
if (cancelled)
|
|
46
|
+
return;
|
|
47
|
+
setNodes(flattenTree(treeBody.data ?? []));
|
|
48
|
+
setUsers(rawUsers.map((u) => ({ id: u.id, label: fullName(u) })));
|
|
49
|
+
setGroups(rawGroups.map((g) => ({ id: g.id, label: g.name })));
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
/* pickers stay empty; the ACL panel still reports its own errors */
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
load();
|
|
56
|
+
return () => { cancelled = true; };
|
|
57
|
+
}, [adminFetch]);
|
|
58
|
+
const loadEntries = useCallback(async (nodeId) => {
|
|
59
|
+
setAclLoading(true);
|
|
60
|
+
setAclError(null);
|
|
61
|
+
try {
|
|
62
|
+
const res = await adminFetch(`/api/v1/content/${nodeId}/permissions`);
|
|
63
|
+
if (!res.ok) {
|
|
64
|
+
const body = await res.json().catch(() => null);
|
|
65
|
+
throw new Error(body?.error?.message ?? `Failed to load permissions (${res.status})`);
|
|
66
|
+
}
|
|
67
|
+
const body = await res.json();
|
|
68
|
+
setEntries(body.data ?? []);
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
setAclError(e instanceof Error ? e.message : 'Failed to load permissions');
|
|
72
|
+
setEntries([]);
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
setAclLoading(false);
|
|
76
|
+
}
|
|
77
|
+
}, [adminFetch]);
|
|
78
|
+
const handleSelectNode = useCallback((id) => {
|
|
79
|
+
setSelectedNodeId(id || null);
|
|
80
|
+
setEntries([]);
|
|
81
|
+
setAclError(null);
|
|
82
|
+
if (id)
|
|
83
|
+
loadEntries(id);
|
|
84
|
+
}, [loadEntries]);
|
|
85
|
+
const handleGrant = useCallback(async (input) => {
|
|
86
|
+
if (!selectedNodeId)
|
|
87
|
+
return;
|
|
88
|
+
setBusy(true);
|
|
89
|
+
setAclError(null);
|
|
90
|
+
try {
|
|
91
|
+
const payload = input.subjectType === 'user'
|
|
92
|
+
? { userId: input.subjectId, action: input.action }
|
|
93
|
+
: { groupId: input.subjectId, action: input.action };
|
|
94
|
+
const res = await adminFetch(`/api/v1/content/${selectedNodeId}/permissions`, {
|
|
95
|
+
method: 'POST',
|
|
96
|
+
body: JSON.stringify(payload),
|
|
97
|
+
});
|
|
98
|
+
if (!res.ok) {
|
|
99
|
+
const body = await res.json().catch(() => null);
|
|
100
|
+
throw new Error(body?.error?.message ?? `Failed to add permission (${res.status})`);
|
|
101
|
+
}
|
|
102
|
+
await loadEntries(selectedNodeId);
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
setAclError(e instanceof Error ? e.message : 'Failed to add permission');
|
|
106
|
+
}
|
|
107
|
+
finally {
|
|
108
|
+
setBusy(false);
|
|
109
|
+
}
|
|
110
|
+
}, [selectedNodeId, loadEntries, adminFetch]);
|
|
111
|
+
const handleRevoke = useCallback(async (permissionId) => {
|
|
112
|
+
if (!selectedNodeId)
|
|
113
|
+
return;
|
|
114
|
+
setBusy(true);
|
|
115
|
+
setAclError(null);
|
|
116
|
+
try {
|
|
117
|
+
const res = await adminFetch(`/api/v1/content/${selectedNodeId}/permissions/${permissionId}`, {
|
|
118
|
+
method: 'DELETE',
|
|
119
|
+
});
|
|
120
|
+
if (!res.ok) {
|
|
121
|
+
const body = await res.json().catch(() => null);
|
|
122
|
+
throw new Error(body?.error?.message ?? `Failed to remove permission (${res.status})`);
|
|
123
|
+
}
|
|
124
|
+
await loadEntries(selectedNodeId);
|
|
125
|
+
}
|
|
126
|
+
catch (e) {
|
|
127
|
+
setAclError(e instanceof Error ? e.message : 'Failed to remove permission');
|
|
128
|
+
}
|
|
129
|
+
finally {
|
|
130
|
+
setBusy(false);
|
|
131
|
+
}
|
|
132
|
+
}, [selectedNodeId, loadEntries, adminFetch]);
|
|
133
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", { className: "kywi-admin-page-header", children: _jsx("h1", { children: "Permissions" }) }), _jsx(PermissionMatrix, {}), _jsx(ContentPermissionBrowser, { nodes: nodes, users: users, groups: groups, selectedNodeId: selectedNodeId, entries: entries, loading: aclLoading, error: aclError, busy: busy, onSelectNode: handleSelectNode, onGrant: handleGrant, onRevoke: handleRevoke })] }));
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=users-permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users-permissions.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/users/users-permissions.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/webServices/api-keys.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAarD,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAAC,MAAM,EAAE,YAAY,2CAyFrE"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* `webServices.apiKeys` surface — personal API key management, ported verbatim
|
|
5
|
+
* from `apps/reference/app/admin/web-services/api-keys/page.tsx` (0.2.0 T9).
|
|
6
|
+
* Markup / copy unchanged; wiring substitutions (plan §1.3): `adminFetch` →
|
|
7
|
+
* `useAdminContext().fetch`. `AdminShellWrapper` is gone — chrome is rendered
|
|
8
|
+
* once by `KywiAdminApp` (T14). Reuses core's existing `ApiKeyManager` and the
|
|
9
|
+
* shared `SecretRevealModal` — only the page orchestration is migrated here.
|
|
10
|
+
*/
|
|
11
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
12
|
+
import { useAdminContext } from '../../context.js';
|
|
13
|
+
import { LoadingState, ErrorState } from '../../primitives.js';
|
|
14
|
+
import { SecretRevealModal } from './secret-reveal-modal.js';
|
|
15
|
+
import { ApiKeyManager } from '../../api-key-manager.js';
|
|
16
|
+
import { loadApiKeys, createApiKey, revokeApiKey, } from './web-services-data.js';
|
|
17
|
+
export default function WebServicesApiKeysSurface(_props) {
|
|
18
|
+
const { fetch: adminFetch } = useAdminContext();
|
|
19
|
+
const [apiKeys, setApiKeys] = useState([]);
|
|
20
|
+
const [loading, setLoading] = useState(true);
|
|
21
|
+
const [error, setError] = useState(null);
|
|
22
|
+
const [revealed, setRevealed] = useState(null);
|
|
23
|
+
const load = useCallback(async () => {
|
|
24
|
+
setLoading(true);
|
|
25
|
+
setError(null);
|
|
26
|
+
try {
|
|
27
|
+
const list = await loadApiKeys(adminFetch);
|
|
28
|
+
list.sort((a, b) => (b.createdAt ?? '').localeCompare(a.createdAt ?? ''));
|
|
29
|
+
setApiKeys(list);
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
setError(e instanceof Error ? e.message : 'Failed to load API keys');
|
|
33
|
+
}
|
|
34
|
+
finally {
|
|
35
|
+
setLoading(false);
|
|
36
|
+
}
|
|
37
|
+
}, [adminFetch]);
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
load();
|
|
40
|
+
}, [load]);
|
|
41
|
+
const handleCreate = useCallback(async (data) => {
|
|
42
|
+
setError(null);
|
|
43
|
+
try {
|
|
44
|
+
const { rawKey, row } = await createApiKey(adminFetch, data);
|
|
45
|
+
// Reveal the full key exactly once — only its prefix is stored/listed.
|
|
46
|
+
setRevealed({ name: row.name, key: rawKey });
|
|
47
|
+
await load();
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
setError(e instanceof Error ? e.message : 'Failed to create API key');
|
|
51
|
+
}
|
|
52
|
+
}, [load, adminFetch]);
|
|
53
|
+
const handleRevoke = useCallback(async (id) => {
|
|
54
|
+
setError(null);
|
|
55
|
+
try {
|
|
56
|
+
await revokeApiKey(adminFetch, id);
|
|
57
|
+
await load();
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
setError(e instanceof Error ? e.message : 'Failed to revoke API key');
|
|
61
|
+
}
|
|
62
|
+
}, [load, adminFetch]);
|
|
63
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", { className: "kywi-admin-page-header", children: _jsxs("div", { children: [_jsx("h1", { children: "API Keys" }), _jsx("p", { className: "kywi-admin-section-hint", children: "Personal API keys authenticate server-to-server requests to the Kywi API. Each key carries the scopes you assign and inherits your role. The full key is shown once at creation \u2014 afterwards only its prefix is listed." })] }) }), error && _jsx(ErrorState, { message: error, onRetry: load }), loading ? (_jsx(LoadingState, { label: "Loading API keys\u2026" })) : (_jsx(ApiKeyManager, { apiKeys: apiKeys, onCreateKey: data => void handleCreate(data), onRevokeKey: id => void handleRevoke(id) })), revealed && (_jsx(SecretRevealModal, { title: "API key", intro: `Copy the API key “${revealed.name}” now. For security it is stored only as a hash and will never be shown again.`, label: "API key", value: revealed.key, onClose: () => setRevealed(null) }))] }));
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=api-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-keys.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/webServices/api-keys.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/webServices/oauth.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAerD,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,MAAM,EAAE,YAAY,2CAsGnE"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* `webServices.oauth` surface — OAuth client management, ported verbatim from
|
|
5
|
+
* `apps/reference/app/admin/web-services/oauth/page.tsx` (0.2.0 T9). Markup /
|
|
6
|
+
* copy unchanged; wiring substitutions (plan §1.3): `adminFetch` →
|
|
7
|
+
* `useAdminContext().fetch`. `AdminShellWrapper` is gone — chrome is rendered
|
|
8
|
+
* once by `KywiAdminApp` (T14). Reuses core's existing `OAuthManager` and the
|
|
9
|
+
* shared `SecretRevealModal` — only the page orchestration is migrated here.
|
|
10
|
+
*/
|
|
11
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
12
|
+
import { useAdminContext } from '../../context.js';
|
|
13
|
+
import { LoadingState, ErrorState } from '../../primitives.js';
|
|
14
|
+
import { SecretRevealModal } from './secret-reveal-modal.js';
|
|
15
|
+
import { OAuthManager } from '../../oauth-manager.js';
|
|
16
|
+
import { loadOAuthClients, createOAuthClient, updateOAuthClient, deleteOAuthClient, } from './web-services-data.js';
|
|
17
|
+
export default function WebServicesOAuthSurface(_props) {
|
|
18
|
+
const { fetch: adminFetch } = useAdminContext();
|
|
19
|
+
const [clients, setClients] = useState([]);
|
|
20
|
+
const [loading, setLoading] = useState(true);
|
|
21
|
+
const [error, setError] = useState(null);
|
|
22
|
+
const [revealed, setRevealed] = useState(null);
|
|
23
|
+
const load = useCallback(async () => {
|
|
24
|
+
setLoading(true);
|
|
25
|
+
setError(null);
|
|
26
|
+
try {
|
|
27
|
+
const list = await loadOAuthClients(adminFetch);
|
|
28
|
+
list.sort((a, b) => (b.createdAt ?? '').localeCompare(a.createdAt ?? ''));
|
|
29
|
+
setClients(list);
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
setError(e instanceof Error ? e.message : 'Failed to load OAuth clients');
|
|
33
|
+
}
|
|
34
|
+
finally {
|
|
35
|
+
setLoading(false);
|
|
36
|
+
}
|
|
37
|
+
}, [adminFetch]);
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
load();
|
|
40
|
+
}, [load]);
|
|
41
|
+
const handleCreate = useCallback(async (data) => {
|
|
42
|
+
setError(null);
|
|
43
|
+
try {
|
|
44
|
+
const { clientSecret, client } = await createOAuthClient(adminFetch, data);
|
|
45
|
+
// Reveal the plaintext secret exactly once — it is never returned again.
|
|
46
|
+
setRevealed({ name: client.name, secret: clientSecret });
|
|
47
|
+
await load();
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
setError(e instanceof Error ? e.message : 'Failed to create OAuth client');
|
|
51
|
+
}
|
|
52
|
+
}, [load, adminFetch]);
|
|
53
|
+
const handleUpdate = useCallback(async (id, data) => {
|
|
54
|
+
setError(null);
|
|
55
|
+
try {
|
|
56
|
+
await updateOAuthClient(adminFetch, id, data);
|
|
57
|
+
await load();
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
setError(e instanceof Error ? e.message : 'Failed to update OAuth client');
|
|
61
|
+
}
|
|
62
|
+
}, [load, adminFetch]);
|
|
63
|
+
const handleDelete = useCallback(async (id) => {
|
|
64
|
+
setError(null);
|
|
65
|
+
try {
|
|
66
|
+
await deleteOAuthClient(adminFetch, id);
|
|
67
|
+
await load();
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
setError(e instanceof Error ? e.message : 'Failed to delete OAuth client');
|
|
71
|
+
}
|
|
72
|
+
}, [load, adminFetch]);
|
|
73
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", { className: "kywi-admin-page-header", children: _jsxs("div", { children: [_jsx("h1", { children: "OAuth Clients" }), _jsx("p", { className: "kywi-admin-section-hint", children: "Register confidential OAuth clients that can call the Kywi API on a user\u2019s behalf. The client secret is shown once at creation and stored only as a hash." })] }) }), error && _jsx(ErrorState, { message: error, onRetry: load }), loading ? (_jsx(LoadingState, { label: "Loading OAuth clients\u2026" })) : (_jsx(OAuthManager, { clients: clients, onCreateClient: data => void handleCreate(data), onUpdateClient: (id, data) => void handleUpdate(id, data), onDeleteClient: id => void handleDelete(id) })), revealed && (_jsx(SecretRevealModal, { title: "Client secret", intro: `Copy the client secret for “${revealed.name}” now. For security it is stored only as a hash and will never be shown again.`, label: "Client secret", value: revealed.secret, onClose: () => setRevealed(null) }))] }));
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/webServices/oauth.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function SecretRevealModal({ title, intro, label, value, onClose, }: {
|
|
2
|
+
title: string;
|
|
3
|
+
intro: string;
|
|
4
|
+
label: string;
|
|
5
|
+
value: string;
|
|
6
|
+
onClose: () => void;
|
|
7
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=secret-reveal-modal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-reveal-modal.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/webServices/secret-reveal-modal.tsx"],"names":[],"mappings":"AAkBA,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,OAAO,GACR,EAAE;IACD,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,2CAkEA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* Reveal-once secret modal, ported verbatim from
|
|
5
|
+
* `apps/reference/components/secret-reveal-modal.tsx` (0.2.0 admin-app
|
|
6
|
+
* migration, plan §1.3 / §2, T9). No wiring substitutions — this component is
|
|
7
|
+
* purely presentational (no fetch/router/session dependency) and is shared by
|
|
8
|
+
* both `webServices.oauth` and `webServices.apiKeys`.
|
|
9
|
+
*
|
|
10
|
+
* OAuth client secrets and API keys are returned in plaintext exactly once, at
|
|
11
|
+
* creation time — the server only ever stores a hash. This modal surfaces that
|
|
12
|
+
* value with a copy button and an explicit "you won't see this again" warning,
|
|
13
|
+
* then discards it when the admin dismisses the dialog. The value lives only in
|
|
14
|
+
* this component's props for the lifetime of the modal; it is never persisted.
|
|
15
|
+
*/
|
|
16
|
+
import { useState } from 'react';
|
|
17
|
+
export function SecretRevealModal({ title, intro, label, value, onClose, }) {
|
|
18
|
+
const [copied, setCopied] = useState(false);
|
|
19
|
+
async function handleCopy() {
|
|
20
|
+
try {
|
|
21
|
+
await navigator.clipboard.writeText(value);
|
|
22
|
+
setCopied(true);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
setCopied(false);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return (_jsx("div", { className: "kywi-overlay-shell", role: "dialog", "aria-modal": "true", "aria-label": title, onClick: onClose, children: _jsxs("div", { className: "kywi-admin-secret-modal", onClick: e => e.stopPropagation(), children: [_jsxs("div", { className: "kywi-admin-picker-header", children: [_jsx("h2", { className: "kywi-admin-picker-title", children: title }), _jsx("button", { type: "button", className: "kywi-admin-picker-close", onClick: onClose, "aria-label": "Close", children: "\u00D7" })] }), _jsxs("div", { className: "kywi-admin-secret-modal-body", children: [_jsxs("div", { className: "kywi-admin-secret-warning", role: "alert", children: [_jsx("span", { "aria-hidden": "true", children: "\u26A0" }), _jsx("span", { children: intro })] }), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { className: "kywi-field-label", htmlFor: "kywi-secret-value", children: label }), _jsxs("div", { className: "kywi-admin-secret-field", children: [_jsx("code", { id: "kywi-secret-value", className: "kywi-admin-secret-value", children: value }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary", onClick: handleCopy, children: copied ? 'Copied!' : 'Copy' })] })] }), _jsx("div", { className: "kywi-admin-secret-actions", children: _jsx("button", { type: "button", className: "kywi-btn kywi-btn-primary", onClick: onClose, children: "Done" }) })] })] }) }));
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=secret-reveal-modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-reveal-modal.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/webServices/secret-reveal-modal.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;GAYG;AAEH,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEvC,MAAM,UAAU,iBAAiB,CAAC,EAChC,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,OAAO,GAOR;IACC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE3C,KAAK,UAAU,UAAU;QACvB,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YAC1C,SAAS,CAAC,IAAI,CAAC,CAAA;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,CAAC,KAAK,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IAED,OAAO,CACL,cACE,SAAS,EAAC,oBAAoB,EAC9B,IAAI,EAAC,QAAQ,gBACF,MAAM,gBACL,KAAK,EACjB,OAAO,EAAE,OAAO,YAEhB,eAAK,SAAS,EAAC,yBAAyB,EAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,aACxE,eAAK,SAAS,EAAC,0BAA0B,aACvC,aAAI,SAAS,EAAC,yBAAyB,YAAE,KAAK,GAAM,EACpD,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,yBAAyB,EACnC,OAAO,EAAE,OAAO,gBACL,OAAO,uBAGX,IACL,EAEN,eAAK,SAAS,EAAC,8BAA8B,aAC3C,eAAK,SAAS,EAAC,2BAA2B,EAAC,IAAI,EAAC,OAAO,aACrD,8BAAkB,MAAM,uBAAS,EACjC,yBAAO,KAAK,GAAQ,IAChB,EAEN,eAAK,SAAS,EAAC,YAAY,aACzB,gBAAO,SAAS,EAAC,kBAAkB,EAAC,OAAO,EAAC,mBAAmB,YAC5D,KAAK,GACA,EACR,eAAK,SAAS,EAAC,yBAAyB,aACtC,eAAM,EAAE,EAAC,mBAAmB,EAAC,SAAS,EAAC,yBAAyB,YAC7D,KAAK,GACD,EACP,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,6BAA6B,EACvC,OAAO,EAAE,UAAU,YAElB,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,GACrB,IACL,IACF,EAEN,cAAK,SAAS,EAAC,2BAA2B,YACxC,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,2BAA2B,EAAC,OAAO,EAAE,OAAO,qBAEnE,GACL,IACF,IACF,GACF,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data helpers for the admin Web Services surface (OAuth clients + API keys),
|
|
3
|
+
* ported verbatim from `apps/reference/app/admin/web-services/
|
|
4
|
+
* web-services-data.ts` (0.2.0 admin-app migration, plan §1.3 / §2, T9).
|
|
5
|
+
*
|
|
6
|
+
* OAuth client management is backed by /auth/oauth-clients (kywi_oauth_clients);
|
|
7
|
+
* API keys by /auth/api-keys (kywi_api_keys). Both create endpoints return a
|
|
8
|
+
* plaintext secret ONCE at creation — the server only stores a hash — so the
|
|
9
|
+
* surfaces capture it from the create response and reveal it a single time.
|
|
10
|
+
*
|
|
11
|
+
* The only substitution from the reference original: `adminFetch` (app-local
|
|
12
|
+
* `lib/admin-auth`) is now injected as a `FetchLike` parameter, sourced by each
|
|
13
|
+
* surface from `useAdminContext().fetch` (same pattern as
|
|
14
|
+
* `surfaces/users/users-data.ts`). All requests flow through the DB-backed
|
|
15
|
+
* /api/v1 handler.
|
|
16
|
+
*/
|
|
17
|
+
import type { FetchLike } from '../../content-editor-api.js';
|
|
18
|
+
import type { OAuthClientSummary, OAuthClientCreateData, OAuthClientUpdateData } from '../../oauth-manager.js';
|
|
19
|
+
import type { ApiKeySummary, ApiKeyCreateData } from '../../api-key-manager.js';
|
|
20
|
+
export type { OAuthClientSummary, OAuthClientCreateData, OAuthClientUpdateData, ApiKeySummary, ApiKeyCreateData, };
|
|
21
|
+
/** Shape of the POST /auth/oauth-clients response — secret shown once. */
|
|
22
|
+
export interface OAuthClientCreated {
|
|
23
|
+
clientSecret: string;
|
|
24
|
+
client: OAuthClientSummary;
|
|
25
|
+
}
|
|
26
|
+
/** Shape of the POST /auth/api-keys response — raw key shown once. */
|
|
27
|
+
export interface ApiKeyCreated {
|
|
28
|
+
rawKey: string;
|
|
29
|
+
row: ApiKeySummary;
|
|
30
|
+
}
|
|
31
|
+
export declare function loadOAuthClients(fetchFn: FetchLike): Promise<OAuthClientSummary[]>;
|
|
32
|
+
export declare function createOAuthClient(fetchFn: FetchLike, data: OAuthClientCreateData): Promise<OAuthClientCreated>;
|
|
33
|
+
export declare function updateOAuthClient(fetchFn: FetchLike, id: string, data: OAuthClientUpdateData): Promise<OAuthClientSummary>;
|
|
34
|
+
export declare function deleteOAuthClient(fetchFn: FetchLike, id: string): Promise<void>;
|
|
35
|
+
export declare function loadApiKeys(fetchFn: FetchLike): Promise<ApiKeySummary[]>;
|
|
36
|
+
export declare function createApiKey(fetchFn: FetchLike, data: ApiKeyCreateData): Promise<ApiKeyCreated>;
|
|
37
|
+
export declare function revokeApiKey(fetchFn: FetchLike, id: string): Promise<void>;
|
|
38
|
+
//# sourceMappingURL=web-services-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-services-data.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/webServices/web-services-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE/E,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACb,gBAAgB,GACjB,CAAA;AAED,0EAA0E;AAC1E,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,kBAAkB,CAAA;CAC3B;AAED,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,aAAa,CAAA;CACnB;AA+BD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAExF;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAIpH;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAIhI;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErF;AAID,wBAAsB,WAAW,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAE9E;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAIrG;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
async function readData(res) {
|
|
2
|
+
if (!res.ok) {
|
|
3
|
+
let message = `Request failed (${res.status})`;
|
|
4
|
+
try {
|
|
5
|
+
const body = await res.json();
|
|
6
|
+
message = body?.error?.message ?? message;
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
/* keep default */
|
|
10
|
+
}
|
|
11
|
+
throw new Error(message);
|
|
12
|
+
}
|
|
13
|
+
const body = await res.json();
|
|
14
|
+
return body.data;
|
|
15
|
+
}
|
|
16
|
+
async function expectOk(res) {
|
|
17
|
+
if (res.ok)
|
|
18
|
+
return;
|
|
19
|
+
let message = `Request failed (${res.status})`;
|
|
20
|
+
try {
|
|
21
|
+
const body = await res.json();
|
|
22
|
+
message = body?.error?.message ?? message;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
/* keep default */
|
|
26
|
+
}
|
|
27
|
+
throw new Error(message);
|
|
28
|
+
}
|
|
29
|
+
// ─── OAuth clients ────────────────────────────────────────────────────────────
|
|
30
|
+
export async function loadOAuthClients(fetchFn) {
|
|
31
|
+
return readData(await fetchFn('/api/v1/auth/oauth-clients'));
|
|
32
|
+
}
|
|
33
|
+
export async function createOAuthClient(fetchFn, data) {
|
|
34
|
+
return readData(await fetchFn('/api/v1/auth/oauth-clients', { method: 'POST', body: JSON.stringify(data) }));
|
|
35
|
+
}
|
|
36
|
+
export async function updateOAuthClient(fetchFn, id, data) {
|
|
37
|
+
return readData(await fetchFn(`/api/v1/auth/oauth-clients/${id}`, { method: 'PUT', body: JSON.stringify(data) }));
|
|
38
|
+
}
|
|
39
|
+
export async function deleteOAuthClient(fetchFn, id) {
|
|
40
|
+
await expectOk(await fetchFn(`/api/v1/auth/oauth-clients/${id}`, { method: 'DELETE' }));
|
|
41
|
+
}
|
|
42
|
+
// ─── API keys ─────────────────────────────────────────────────────────────────
|
|
43
|
+
export async function loadApiKeys(fetchFn) {
|
|
44
|
+
return readData(await fetchFn('/api/v1/auth/api-keys'));
|
|
45
|
+
}
|
|
46
|
+
export async function createApiKey(fetchFn, data) {
|
|
47
|
+
return readData(await fetchFn('/api/v1/auth/api-keys', { method: 'POST', body: JSON.stringify(data) }));
|
|
48
|
+
}
|
|
49
|
+
export async function revokeApiKey(fetchFn, id) {
|
|
50
|
+
await expectOk(await fetchFn(`/api/v1/auth/api-keys/${id}`, { method: 'DELETE' }));
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=web-services-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-services-data.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/webServices/web-services-data.ts"],"names":[],"mappings":"AA4CA,KAAK,UAAU,QAAQ,CAAI,GAAa;IACtC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,IAAI,OAAO,GAAG,mBAAmB,GAAG,CAAC,MAAM,GAAG,CAAA;QAC9C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;YAC7B,OAAO,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,OAAO,CAAA;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,kBAAkB;QACpB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;IAC1B,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;IAC7B,OAAO,IAAI,CAAC,IAAS,CAAA;AACvB,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAa;IACnC,IAAI,GAAG,CAAC,EAAE;QAAE,OAAM;IAClB,IAAI,OAAO,GAAG,mBAAmB,GAAG,CAAC,MAAM,GAAG,CAAA;IAC9C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;QAC7B,OAAO,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,OAAO,CAAA;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,kBAAkB;IACpB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;AAC1B,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAkB;IACvD,OAAO,QAAQ,CAAuB,MAAM,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAA;AACpF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAkB,EAAE,IAA2B;IACrF,OAAO,QAAQ,CACb,MAAM,OAAO,CAAC,4BAA4B,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAC5F,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAkB,EAAE,EAAU,EAAE,IAA2B;IACjG,OAAO,QAAQ,CACb,MAAM,OAAO,CAAC,8BAA8B,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CACjG,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAkB,EAAE,EAAU;IACpE,MAAM,QAAQ,CAAC,MAAM,OAAO,CAAC,8BAA8B,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;AACzF,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAkB;IAClD,OAAO,QAAQ,CAAkB,MAAM,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAA;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAkB,EAAE,IAAsB;IAC3E,OAAO,QAAQ,CACb,MAAM,OAAO,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CACvF,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAkB,EAAE,EAAU;IAC/D,MAAM,QAAQ,CAAC,MAAM,OAAO,CAAC,yBAAyB,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;AACpF,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Router } from './router.js';
|
|
2
|
+
import type { KywiDb } from '../db/client.js';
|
|
3
|
+
import type { KywiConfig } from '../config/types.js';
|
|
4
|
+
export interface AdminFeaturesRouteContext {
|
|
5
|
+
config: KywiConfig;
|
|
6
|
+
db: KywiDb;
|
|
7
|
+
authSecret: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function registerAdminFeaturesRoutes(router: Router, ctx: AdminFeaturesRouteContext): void;
|
|
10
|
+
//# sourceMappingURL=admin-features-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-features-routes.d.ts","sourceRoot":"","sources":["../../src/api/admin-features-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AA2BpD,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,UAAU,CAAA;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,yBAAyB,GAAG,IAAI,CAiChG"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { jsonOk, jsonError, unauthorized, forbidden, validationError } from './response.js';
|
|
3
|
+
import { resolveAuth } from './auth.js';
|
|
4
|
+
import { hasMinRole } from '../auth/roles.js';
|
|
5
|
+
import { toSiteUuid } from './site-context.js';
|
|
6
|
+
import { getAdminFeatureFlags, setAdminFeatureFlags } from '../db/admin-features-queries.js';
|
|
7
|
+
/**
|
|
8
|
+
* T16 runtime admin feature-flag routes (plan §4). Thin wrappers over the
|
|
9
|
+
* per-site `admin.features` settings-key queries.
|
|
10
|
+
*
|
|
11
|
+
* Authz is deliberately asymmetric:
|
|
12
|
+
* - `GET /admin-features?siteId=` is readable by ANY authenticated admin, because
|
|
13
|
+
* every signed-in role needs the flag map to render its nav (the map decides
|
|
14
|
+
* which surfaces are hidden). No role floor beyond a valid session.
|
|
15
|
+
* - `PUT /admin-features?siteId=` is superAdmin-ONLY — stricter than the
|
|
16
|
+
* siteAdmin+ general `/sites/:siteId/settings` routes — since flipping these
|
|
17
|
+
* flags reshapes the admin for everyone on the site.
|
|
18
|
+
*
|
|
19
|
+
* The runtime toggle is a UI gate, not a security boundary: the underlying
|
|
20
|
+
* `/api/v1` endpoints stay governed by roles regardless of these flags
|
|
21
|
+
* (plan §4, risk 4). `siteId` (config slug or DB UUID, or omitted) is resolved
|
|
22
|
+
* to a DB UUID via `toSiteUuid`, falling back to the first configured site.
|
|
23
|
+
*/
|
|
24
|
+
const flagsSchema = z.record(z.boolean());
|
|
25
|
+
export function registerAdminFeaturesRoutes(router, ctx) {
|
|
26
|
+
const { config, db, authSecret } = ctx;
|
|
27
|
+
// GET /admin-features?siteId= — any authenticated admin (needed to render nav).
|
|
28
|
+
router.get('/admin-features', async (req) => {
|
|
29
|
+
const auth = await resolveAuth(req.headers.get('authorization'), authSecret, db);
|
|
30
|
+
if (!auth.user)
|
|
31
|
+
return unauthorized();
|
|
32
|
+
const url = new URL(req.url);
|
|
33
|
+
const siteId = await toSiteUuid(db, url.searchParams.get('siteId'), config);
|
|
34
|
+
const flags = await getAdminFeatureFlags(db, siteId);
|
|
35
|
+
return jsonOk({ siteId, flags });
|
|
36
|
+
});
|
|
37
|
+
// PUT /admin-features?siteId= — superAdmin only. Body = flag map { id: boolean }.
|
|
38
|
+
router.put('/admin-features', async (req) => {
|
|
39
|
+
const auth = await resolveAuth(req.headers.get('authorization'), authSecret, db);
|
|
40
|
+
if (!auth.user)
|
|
41
|
+
return unauthorized();
|
|
42
|
+
if (!hasMinRole(auth.user.role, 'superAdmin'))
|
|
43
|
+
return forbidden();
|
|
44
|
+
let body;
|
|
45
|
+
try {
|
|
46
|
+
body = await req.json();
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return jsonError('BAD_REQUEST', 'Invalid JSON', 400);
|
|
50
|
+
}
|
|
51
|
+
const parsed = flagsSchema.safeParse(body);
|
|
52
|
+
if (!parsed.success) {
|
|
53
|
+
return validationError(parsed.error.errors.map(e => ({ path: e.path.join('.'), message: e.message })));
|
|
54
|
+
}
|
|
55
|
+
const url = new URL(req.url);
|
|
56
|
+
const siteId = await toSiteUuid(db, url.searchParams.get('siteId'), config);
|
|
57
|
+
const flags = await setAdminFeatureFlags(db, siteId, parsed.data);
|
|
58
|
+
return jsonOk({ siteId, flags });
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=admin-features-routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-features-routes.js","sourceRoot":"","sources":["../../src/api/admin-features-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,10 +30,10 @@ export declare function createResolvers(db: KywiDb, config: KywiConfig): {
|
|
|
30
30
|
slug: string;
|
|
31
31
|
sortOrder: number;
|
|
32
32
|
updatedAt: Date;
|
|
33
|
-
createdAt: Date;
|
|
34
33
|
name: string;
|
|
35
|
-
isActive: boolean;
|
|
36
34
|
description: string | null;
|
|
35
|
+
createdAt: Date;
|
|
36
|
+
isActive: boolean;
|
|
37
37
|
isInterestGroup: boolean;
|
|
38
38
|
notes: string | null;
|
|
39
39
|
}[]>;
|
|
@@ -46,18 +46,18 @@ export declare function createResolvers(db: KywiDb, config: KywiConfig): {
|
|
|
46
46
|
id: string;
|
|
47
47
|
siteId: string;
|
|
48
48
|
updatedAt: Date;
|
|
49
|
+
caption: string | null;
|
|
50
|
+
width: number | null;
|
|
51
|
+
height: number | null;
|
|
52
|
+
tags: unknown;
|
|
49
53
|
createdAt: Date;
|
|
50
54
|
deletedAt: Date | null;
|
|
51
55
|
filename: string;
|
|
52
56
|
mimeType: string;
|
|
53
57
|
fileSize: number;
|
|
54
|
-
width: number | null;
|
|
55
|
-
height: number | null;
|
|
56
58
|
duration: number | null;
|
|
57
59
|
originalFilename: string;
|
|
58
60
|
altText: string | null;
|
|
59
|
-
caption: string | null;
|
|
60
|
-
tags: unknown;
|
|
61
61
|
uploadedBy: string | null;
|
|
62
62
|
storageKey: string;
|
|
63
63
|
} | null>;
|
package/dist/api/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AA4BvD,OAAO,KAAK,EAAE,UAAU,EAAmD,MAAM,oBAAoB,CAAA;AACrG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,WAAW,CAAA;AACzB,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,8BAA8B,CAAA;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAA;AAChF,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,CAAA;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,aAAa,CAAC,EAAE,iBAAiB,CAAA;IACjC,mFAAmF;IACnF,eAAe,CAAC,EAAE,eAAe,CAAA;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CAChE;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAya3F"}
|