@kywi-software/core 0.1.0 → 0.2.1
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/kywi-logo.d.ts +21 -0
- package/dist/admin/kywi-logo.d.ts.map +1 -0
- package/dist/admin/kywi-logo.js +123 -0
- package/dist/admin/kywi-logo.js.map +1 -0
- 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 +71 -6
- package/dist/admin/shell.js.map +1 -1
- package/dist/admin/styles/admin.css +113 -23
- 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 +93 -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,51 @@
|
|
|
1
|
+
import { type KywiRole } from '../auth/roles.js';
|
|
2
|
+
import { type AdminSurface, type AdminConfigCeiling, type AdminFeatureFlags } from './registry.js';
|
|
3
|
+
export interface SurfaceMatch {
|
|
4
|
+
surface: AdminSurface;
|
|
5
|
+
params: Record<string, string>;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Match admin path segments (already stripped of the `/admin` prefix) to a
|
|
9
|
+
* surface. Empty segments (`/admin`) resolve to the index surface (dashboard).
|
|
10
|
+
* Config/flag/role gating is NOT applied here — see `resolveSurface` /
|
|
11
|
+
* `isSurfaceEnabled`. Returns null for no match.
|
|
12
|
+
*/
|
|
13
|
+
export declare function matchSurface(segments: string[]): SurfaceMatch | null;
|
|
14
|
+
/**
|
|
15
|
+
* The precedence gate: a surface is enabled iff it passes the config ceiling
|
|
16
|
+
* (hard) AND the runtime flag (soft) AND the role check — each optional and
|
|
17
|
+
* skipped when its argument is omitted.
|
|
18
|
+
*
|
|
19
|
+
* effective = config ceiling ∧ runtime flag ∧ hasMinRole(role, surface.minRole)
|
|
20
|
+
*
|
|
21
|
+
* Config-off beats runtime/role-on; a runtime-off never resurrects a config-off.
|
|
22
|
+
* (Runtime flags param is the T16 placeholder; full storage lands in T16.)
|
|
23
|
+
*/
|
|
24
|
+
export declare function isSurfaceEnabled(surface: AdminSurface, adminConfig?: AdminConfigCeiling, flags?: AdminFeatureFlags, role?: KywiRole): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Match segments then apply the CONFIG CEILING only (the hard, server-side gate
|
|
27
|
+
* used by the generated catch-all to decide a real 404). Role/flags are soft,
|
|
28
|
+
* client-side gates and are intentionally not applied here. Returns null when
|
|
29
|
+
* unmatched or config-disabled.
|
|
30
|
+
*
|
|
31
|
+
* The Admin Features surface is exempt from the area/surface-level config
|
|
32
|
+
* denylist (escape hatch) — only the master `enabled: false` switch can 404 it.
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveSurface(segments: string[], adminConfig?: AdminConfigCeiling): SurfaceMatch | null;
|
|
35
|
+
/**
|
|
36
|
+
* The visibility gate used by BOTH the nav derivation (`buildAdminNav`) and the
|
|
37
|
+
* router's client-side surface gate (`KywiAdminApp`): identical to
|
|
38
|
+
* `isSurfaceEnabled` for every ordinary surface, but with the Admin Features
|
|
39
|
+
* escape-hatch special-case folded in (T16).
|
|
40
|
+
*
|
|
41
|
+
* For the Admin Features surface:
|
|
42
|
+
* - the config-area (`features.settings`) and runtime flags NEVER hide it;
|
|
43
|
+
* - the master switch (`enabled: false`) still does;
|
|
44
|
+
* - the role gate still applies AND it is only ever shown to a CONFIRMED
|
|
45
|
+
* superAdmin — when `role` is omitted (e.g. the legacy reference nav that
|
|
46
|
+
* passes no role) it is hidden, so it never leaks into a role-agnostic nav.
|
|
47
|
+
*
|
|
48
|
+
* For every other surface this delegates to the frozen `isSurfaceEnabled`.
|
|
49
|
+
*/
|
|
50
|
+
export declare function isSurfaceVisible(surface: AdminSurface, adminConfig?: AdminConfigCeiling, flags?: AdminFeatureFlags, role?: KywiRole): boolean;
|
|
51
|
+
//# sourceMappingURL=surface-matcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface-matcher.d.ts","sourceRoot":"","sources":["../../src/admin/surface-matcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,eAAe,CAAA;AA+EtB,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,YAAY,CAAA;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,GAAG,IAAI,CASpE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,YAAY,EACrB,WAAW,CAAC,EAAE,kBAAkB,EAChC,KAAK,CAAC,EAAE,iBAAiB,EACzB,IAAI,CAAC,EAAE,QAAQ,GACd,OAAO,CAeT;AAkBD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,EAAE,kBAAkB,GAAG,YAAY,GAAG,IAAI,CASxG;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,YAAY,EACrB,WAAW,CAAC,EAAE,kBAAkB,EAChC,KAAK,CAAC,EAAE,iBAAiB,EACzB,IAAI,CAAC,EAAE,QAAQ,GACd,OAAO,CAOT"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { hasMinRole } from '../auth/roles.js';
|
|
2
|
+
import { ADMIN_SURFACES, ADMIN_INDEX_SURFACE_ID, } from './registry.js';
|
|
3
|
+
import { ADMIN_FEATURES_SURFACE_ID } from '../config/types.js';
|
|
4
|
+
function parsePattern(pattern) {
|
|
5
|
+
const raw = pattern.startsWith('/') ? pattern.slice(1) : pattern;
|
|
6
|
+
const parts = raw.split('/');
|
|
7
|
+
const catchAllIndex = parts.findIndex(p => p.startsWith('*'));
|
|
8
|
+
if (catchAllIndex >= 0) {
|
|
9
|
+
return { segments: parts.slice(0, catchAllIndex), catchAllParam: parts[catchAllIndex].slice(1) };
|
|
10
|
+
}
|
|
11
|
+
return { segments: parts };
|
|
12
|
+
}
|
|
13
|
+
function matchParsed(parsed, pathSegments) {
|
|
14
|
+
const { segments, catchAllParam } = parsed;
|
|
15
|
+
const params = {};
|
|
16
|
+
if (catchAllParam) {
|
|
17
|
+
if (pathSegments.length < segments.length)
|
|
18
|
+
return null;
|
|
19
|
+
for (let i = 0; i < segments.length; i++) {
|
|
20
|
+
const routeSeg = segments[i];
|
|
21
|
+
const pathSeg = pathSegments[i];
|
|
22
|
+
if (routeSeg.startsWith(':'))
|
|
23
|
+
params[routeSeg.slice(1)] = pathSeg;
|
|
24
|
+
else if (routeSeg !== pathSeg)
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
params[catchAllParam] = pathSegments.slice(segments.length).join('/');
|
|
28
|
+
return params;
|
|
29
|
+
}
|
|
30
|
+
if (segments.length !== pathSegments.length)
|
|
31
|
+
return null;
|
|
32
|
+
for (let i = 0; i < segments.length; i++) {
|
|
33
|
+
const routeSeg = segments[i];
|
|
34
|
+
const pathSeg = pathSegments[i];
|
|
35
|
+
if (routeSeg.startsWith(':'))
|
|
36
|
+
params[routeSeg.slice(1)] = pathSeg;
|
|
37
|
+
else if (routeSeg !== pathSeg)
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
return params;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Order two patterns most-specific → least-specific, matching
|
|
44
|
+
* `api/router.ts#compareRouteSpecificity`: (1) more fixed segments first;
|
|
45
|
+
* (2) at equal length a literal beats a `:param` left-to-right; (3) a
|
|
46
|
+
* non-catch-all beats an otherwise-equal catch-all.
|
|
47
|
+
*/
|
|
48
|
+
function compareSpecificity(a, b) {
|
|
49
|
+
if (a.segments.length !== b.segments.length)
|
|
50
|
+
return b.segments.length - a.segments.length;
|
|
51
|
+
for (let i = 0; i < a.segments.length; i++) {
|
|
52
|
+
const aParam = a.segments[i].startsWith(':');
|
|
53
|
+
const bParam = b.segments[i].startsWith(':');
|
|
54
|
+
if (aParam !== bParam)
|
|
55
|
+
return aParam ? 1 : -1;
|
|
56
|
+
}
|
|
57
|
+
const aCatch = a.catchAllParam ? 1 : 0;
|
|
58
|
+
const bCatch = b.catchAllParam ? 1 : 0;
|
|
59
|
+
return aCatch - bCatch;
|
|
60
|
+
}
|
|
61
|
+
// Pre-parse + specificity-sort once at module load (surfaces are static).
|
|
62
|
+
const SORTED_PATTERNS = ADMIN_SURFACES.map(surface => {
|
|
63
|
+
const { segments, catchAllParam } = parsePattern(surface.pattern);
|
|
64
|
+
const parsed = { surface, segments };
|
|
65
|
+
if (catchAllParam !== undefined)
|
|
66
|
+
parsed.catchAllParam = catchAllParam;
|
|
67
|
+
return parsed;
|
|
68
|
+
}).sort(compareSpecificity);
|
|
69
|
+
const INDEX_SURFACE = ADMIN_SURFACES.find(s => s.id === ADMIN_INDEX_SURFACE_ID);
|
|
70
|
+
/**
|
|
71
|
+
* Match admin path segments (already stripped of the `/admin` prefix) to a
|
|
72
|
+
* surface. Empty segments (`/admin`) resolve to the index surface (dashboard).
|
|
73
|
+
* Config/flag/role gating is NOT applied here — see `resolveSurface` /
|
|
74
|
+
* `isSurfaceEnabled`. Returns null for no match.
|
|
75
|
+
*/
|
|
76
|
+
export function matchSurface(segments) {
|
|
77
|
+
if (segments.length === 0) {
|
|
78
|
+
return INDEX_SURFACE ? { surface: INDEX_SURFACE, params: {} } : null;
|
|
79
|
+
}
|
|
80
|
+
for (const parsed of SORTED_PATTERNS) {
|
|
81
|
+
const params = matchParsed(parsed, segments);
|
|
82
|
+
if (params !== null)
|
|
83
|
+
return { surface: parsed.surface, params };
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* The precedence gate: a surface is enabled iff it passes the config ceiling
|
|
89
|
+
* (hard) AND the runtime flag (soft) AND the role check — each optional and
|
|
90
|
+
* skipped when its argument is omitted.
|
|
91
|
+
*
|
|
92
|
+
* effective = config ceiling ∧ runtime flag ∧ hasMinRole(role, surface.minRole)
|
|
93
|
+
*
|
|
94
|
+
* Config-off beats runtime/role-on; a runtime-off never resurrects a config-off.
|
|
95
|
+
* (Runtime flags param is the T16 placeholder; full storage lands in T16.)
|
|
96
|
+
*/
|
|
97
|
+
export function isSurfaceEnabled(surface, adminConfig, flags, role) {
|
|
98
|
+
// config ceiling (hard)
|
|
99
|
+
if (adminConfig) {
|
|
100
|
+
if (adminConfig.enabled === false)
|
|
101
|
+
return false;
|
|
102
|
+
if (adminConfig.features && adminConfig.features[surface.area] === false)
|
|
103
|
+
return false;
|
|
104
|
+
if (adminConfig.disableSurfaces && adminConfig.disableSurfaces.includes(surface.id))
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
// runtime flag (soft) — missing entry = enabled
|
|
108
|
+
if (flags) {
|
|
109
|
+
if (flags[surface.id] === false)
|
|
110
|
+
return false;
|
|
111
|
+
if (flags[surface.area] === false)
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
// role
|
|
115
|
+
if (role !== undefined && !hasMinRole(role, surface.minRole))
|
|
116
|
+
return false;
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* The T16 self-lockout escape hatch (contract documented on
|
|
121
|
+
* `ADMIN_FEATURES_SURFACE_ID` in `config/types.ts`). The superAdmin "Admin
|
|
122
|
+
* Features" surface must stay reachable so a superAdmin can always undo a
|
|
123
|
+
* runtime lockout: disabling the `settings` AREA — at config time
|
|
124
|
+
* (`admin.features.settings = false`) OR at runtime (a `settings` /
|
|
125
|
+
* `settings.adminFeatures` flag = false) — must NOT hide THIS surface. Only the
|
|
126
|
+
* master switch (`admin.enabled = false`, i.e. a fully headless host) removes
|
|
127
|
+
* it, and the role gate (superAdmin) still applies. `admin.disableSurfaces`
|
|
128
|
+
* naming this id is already a config-validation hard error, so it need not be
|
|
129
|
+
* re-checked here.
|
|
130
|
+
*/
|
|
131
|
+
function isAdminFeaturesSurface(surface) {
|
|
132
|
+
return surface.id === ADMIN_FEATURES_SURFACE_ID;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Match segments then apply the CONFIG CEILING only (the hard, server-side gate
|
|
136
|
+
* used by the generated catch-all to decide a real 404). Role/flags are soft,
|
|
137
|
+
* client-side gates and are intentionally not applied here. Returns null when
|
|
138
|
+
* unmatched or config-disabled.
|
|
139
|
+
*
|
|
140
|
+
* The Admin Features surface is exempt from the area/surface-level config
|
|
141
|
+
* denylist (escape hatch) — only the master `enabled: false` switch can 404 it.
|
|
142
|
+
*/
|
|
143
|
+
export function resolveSurface(segments, adminConfig) {
|
|
144
|
+
const match = matchSurface(segments);
|
|
145
|
+
if (!match)
|
|
146
|
+
return null;
|
|
147
|
+
if (isAdminFeaturesSurface(match.surface)) {
|
|
148
|
+
if (adminConfig?.enabled === false)
|
|
149
|
+
return null;
|
|
150
|
+
return match;
|
|
151
|
+
}
|
|
152
|
+
if (!isSurfaceEnabled(match.surface, adminConfig))
|
|
153
|
+
return null;
|
|
154
|
+
return match;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* The visibility gate used by BOTH the nav derivation (`buildAdminNav`) and the
|
|
158
|
+
* router's client-side surface gate (`KywiAdminApp`): identical to
|
|
159
|
+
* `isSurfaceEnabled` for every ordinary surface, but with the Admin Features
|
|
160
|
+
* escape-hatch special-case folded in (T16).
|
|
161
|
+
*
|
|
162
|
+
* For the Admin Features surface:
|
|
163
|
+
* - the config-area (`features.settings`) and runtime flags NEVER hide it;
|
|
164
|
+
* - the master switch (`enabled: false`) still does;
|
|
165
|
+
* - the role gate still applies AND it is only ever shown to a CONFIRMED
|
|
166
|
+
* superAdmin — when `role` is omitted (e.g. the legacy reference nav that
|
|
167
|
+
* passes no role) it is hidden, so it never leaks into a role-agnostic nav.
|
|
168
|
+
*
|
|
169
|
+
* For every other surface this delegates to the frozen `isSurfaceEnabled`.
|
|
170
|
+
*/
|
|
171
|
+
export function isSurfaceVisible(surface, adminConfig, flags, role) {
|
|
172
|
+
if (isAdminFeaturesSurface(surface)) {
|
|
173
|
+
if (adminConfig?.enabled === false)
|
|
174
|
+
return false;
|
|
175
|
+
if (role === undefined)
|
|
176
|
+
return false;
|
|
177
|
+
return hasMinRole(role, surface.minRole);
|
|
178
|
+
}
|
|
179
|
+
return isSurfaceEnabled(surface, adminConfig, flags, role);
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=surface-matcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface-matcher.js","sourceRoot":"","sources":["../../src/admin/surface-matcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ApprovalQueueItem } from '../../approval-queue.js';
|
|
2
|
+
/** A queue item plus the content-type name needed to build the transition URL. */
|
|
3
|
+
export interface ApprovalItem extends ApprovalQueueItem {
|
|
4
|
+
contentTypeName: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Load the pending queue. Submitter ids and the site id are resolved to human
|
|
8
|
+
* names via the users/sites lists when available; a failed/forbidden lookup
|
|
9
|
+
* degrades to the raw id so the queue still renders. (The Site column value
|
|
10
|
+
* doubles as its filter key, so resolving it in place keeps the filter human.)
|
|
11
|
+
*/
|
|
12
|
+
export declare function loadApprovals(): Promise<ApprovalItem[]>;
|
|
13
|
+
/** Approve a submission: version + publish it via the engine workflow. */
|
|
14
|
+
export declare function approveSubmission(contentTypeName: string, id: string, comment?: string): Promise<void>;
|
|
15
|
+
/** Reject a submission back to draft, recording the comment as the reason. */
|
|
16
|
+
export declare function rejectSubmission(contentTypeName: string, id: string, comment?: string): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=approvals-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approvals-data.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/approvals/approvals-data.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAehE,kFAAkF;AAClF,MAAM,WAAW,YAAa,SAAQ,iBAAiB;IACrD,eAAe,EAAE,MAAM,CAAA;CACxB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAoB7D;AAED,0EAA0E;AAC1E,wBAAsB,iBAAiB,CACrC,eAAe,EAAE,MAAM,EACvB,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,8EAA8E;AAC9E,wBAAsB,gBAAgB,CACpC,eAAe,EAAE,MAAM,EACvB,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAIf"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data helpers for the Approvals surface (`/admin/approvals`) — 0.2.0 T6
|
|
3
|
+
* migration.
|
|
4
|
+
*
|
|
5
|
+
* Ported verbatim from `apps/reference/app/admin/approvals/approvals-data.ts`;
|
|
6
|
+
* only the import source changes: `getJson`/`sendJson`/`loadUserDisplayMap`/
|
|
7
|
+
* `loadSiteDisplayMap` now come directly from `@kywi-software/core/host-client`
|
|
8
|
+
* instead of the app's `lib/admin-api` re-export shim.
|
|
9
|
+
*
|
|
10
|
+
* Pending submissions come from GET /content/pending (editor+). Approving from
|
|
11
|
+
* the queue publishes in one engine transition (approve route with
|
|
12
|
+
* `{ publish: true }`) so the content is both versioned and made live.
|
|
13
|
+
* Rejecting sends it back to draft with the comment as the reason.
|
|
14
|
+
*/
|
|
15
|
+
import { getJson, sendJson, loadUserDisplayMap, loadSiteDisplayMap } from '../../../host-client/index.js';
|
|
16
|
+
/**
|
|
17
|
+
* Load the pending queue. Submitter ids and the site id are resolved to human
|
|
18
|
+
* names via the users/sites lists when available; a failed/forbidden lookup
|
|
19
|
+
* degrades to the raw id so the queue still renders. (The Site column value
|
|
20
|
+
* doubles as its filter key, so resolving it in place keeps the filter human.)
|
|
21
|
+
*/
|
|
22
|
+
export async function loadApprovals() {
|
|
23
|
+
const [rows, userMap, siteMap] = await Promise.all([
|
|
24
|
+
getJson('/api/v1/content/pending'),
|
|
25
|
+
loadUserDisplayMap(),
|
|
26
|
+
loadSiteDisplayMap(),
|
|
27
|
+
]);
|
|
28
|
+
return rows.map(row => {
|
|
29
|
+
const submitterId = row.updatedBy ?? row.createdBy ?? '';
|
|
30
|
+
return {
|
|
31
|
+
id: row.id,
|
|
32
|
+
title: row.title,
|
|
33
|
+
contentType: row.contentTypeName,
|
|
34
|
+
contentTypeName: row.contentTypeName,
|
|
35
|
+
siteId: siteMap.get(row.siteId) ?? row.siteId,
|
|
36
|
+
submittedBy: userMap.get(submitterId) ?? submitterId,
|
|
37
|
+
submittedAt: row.updatedAt ?? row.createdAt,
|
|
38
|
+
status: 'pending',
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/** Approve a submission: version + publish it via the engine workflow. */
|
|
43
|
+
export async function approveSubmission(contentTypeName, id, comment) {
|
|
44
|
+
await sendJson(`/api/v1/content/${contentTypeName}/${id}/approve`, 'POST', {
|
|
45
|
+
publish: true,
|
|
46
|
+
...(comment ? { comment } : {}),
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/** Reject a submission back to draft, recording the comment as the reason. */
|
|
50
|
+
export async function rejectSubmission(contentTypeName, id, comment) {
|
|
51
|
+
await sendJson(`/api/v1/content/${contentTypeName}/${id}/reject`, 'POST', {
|
|
52
|
+
...(comment ? { reason: comment } : {}),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=approvals-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approvals-data.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/approvals/approvals-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAqBzG;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACjD,OAAO,CAAsB,yBAAyB,CAAC;QACvD,kBAAkB,EAAE;QACpB,kBAAkB,EAAE;KACrB,CAAC,CAAA;IAEF,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACpB,MAAM,WAAW,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,IAAI,EAAE,CAAA;QACxD,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,WAAW,EAAE,GAAG,CAAC,eAAe;YAChC,eAAe,EAAE,GAAG,CAAC,eAAe;YACpC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM;YAC7C,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,WAAW;YACpD,WAAW,EAAE,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS;YAC3C,MAAM,EAAE,SAAkB;SAC3B,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,eAAuB,EACvB,EAAU,EACV,OAAgB;IAEhB,MAAM,QAAQ,CAAC,mBAAmB,eAAe,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;QACzE,OAAO,EAAE,IAAI;QACb,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChC,CAAC,CAAA;AACJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,eAAuB,EACvB,EAAU,EACV,OAAgB;IAEhB,MAAM,QAAQ,CAAC,mBAAmB,eAAe,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE;QACxE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approvals-index.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/approvals/approvals-index.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAKrD,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,MAAM,EAAE,YAAY,2CAsFjE"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* Approvals surface (`/admin/approvals`) — 0.2.0 T6 migration.
|
|
5
|
+
*
|
|
6
|
+
* Ported verbatim from `apps/reference/app/admin/approvals/page.tsx`. The
|
|
7
|
+
* `approvals-data.ts` sidecar moves alongside it (`./approvals-data.js`).
|
|
8
|
+
* `Loading`/`ErrorBox` → core `admin/primitives`; the outer
|
|
9
|
+
* `AdminShellWrapper` is dropped — chrome renders once around every surface
|
|
10
|
+
* via `KywiAdminApp`/`AdminChrome`. `ApprovalQueue` was already a core
|
|
11
|
+
* component (`admin/approval-queue.tsx`); only the local import path changes.
|
|
12
|
+
*/
|
|
13
|
+
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
14
|
+
import { ApprovalQueue } from '../../approval-queue.js';
|
|
15
|
+
import { Loading, ErrorBox } from '../../primitives.js';
|
|
16
|
+
import { loadApprovals, approveSubmission, rejectSubmission } from './approvals-data.js';
|
|
17
|
+
export default function ApprovalsIndexSurface(_props) {
|
|
18
|
+
const [items, setItems] = useState([]);
|
|
19
|
+
const [loading, setLoading] = useState(true);
|
|
20
|
+
const [error, setError] = useState(null);
|
|
21
|
+
const [busy, setBusy] = useState(false);
|
|
22
|
+
const [notice, setNotice] = useState(null);
|
|
23
|
+
const load = useCallback(async () => {
|
|
24
|
+
setLoading(true);
|
|
25
|
+
setError(null);
|
|
26
|
+
try {
|
|
27
|
+
setItems(await loadApprovals());
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
setError(e instanceof Error ? e.message : 'Failed to load approvals');
|
|
31
|
+
}
|
|
32
|
+
finally {
|
|
33
|
+
setLoading(false);
|
|
34
|
+
}
|
|
35
|
+
}, []);
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
load();
|
|
38
|
+
}, [load]);
|
|
39
|
+
// Filter dropdowns are populated from the items actually in the queue.
|
|
40
|
+
const filterOptions = useMemo(() => {
|
|
41
|
+
const uniq = (values) => Array.from(new Set(values.filter(Boolean)));
|
|
42
|
+
return {
|
|
43
|
+
sites: uniq(items.map(i => i.siteId)),
|
|
44
|
+
contentTypes: uniq(items.map(i => i.contentType)),
|
|
45
|
+
submitters: uniq(items.map(i => i.submittedBy)),
|
|
46
|
+
};
|
|
47
|
+
}, [items]);
|
|
48
|
+
const runAction = useCallback(async (id, comment, verb) => {
|
|
49
|
+
const item = items.find(i => i.id === id);
|
|
50
|
+
if (!item)
|
|
51
|
+
return;
|
|
52
|
+
setBusy(true);
|
|
53
|
+
setError(null);
|
|
54
|
+
setNotice(null);
|
|
55
|
+
try {
|
|
56
|
+
if (verb === 'approve') {
|
|
57
|
+
await approveSubmission(item.contentTypeName, id, comment);
|
|
58
|
+
setNotice(`“${item.title}” approved and published.`);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
await rejectSubmission(item.contentTypeName, id, comment);
|
|
62
|
+
setNotice(`“${item.title}” rejected and returned to draft.`);
|
|
63
|
+
}
|
|
64
|
+
await load();
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
setError(e instanceof Error ? e.message : `Failed to ${verb} submission`);
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
setBusy(false);
|
|
71
|
+
}
|
|
72
|
+
}, [items, load]);
|
|
73
|
+
return (_jsxs(_Fragment, { children: [notice && (_jsx("div", { className: "kywi-admin-callout kywi-admin-callout-success", role: "status", children: notice })), !loading && error && (_jsx("div", { className: "kywi-admin-callout kywi-admin-callout-danger", role: "alert", children: error })), loading ? (_jsx(Loading, { label: "Loading approvals\u2026" })) : error && items.length === 0 ? (_jsx(ErrorBox, { message: error, onRetry: load })) : (_jsx(ApprovalQueue, { items: items, filterOptions: filterOptions, busy: busy, onApprove: (id, comment) => runAction(id, comment, 'approve'), onReject: (id, comment) => runAction(id, comment, 'reject') }))] }));
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=approvals-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approvals-index.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/approvals/approvals-index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared data helpers for the admin Personalization (Audiences) surface.
|
|
3
|
+
* All calls go through the DB-backed /api/v1 handler via adminFetch; the
|
|
4
|
+
* httpOnly session cookie is bridged to Authorization by middleware.
|
|
5
|
+
*
|
|
6
|
+
* Response envelope: success is `{ data }`, failure is `{ error: { message } }`.
|
|
7
|
+
*
|
|
8
|
+
* Ported verbatim from `apps/reference/app/admin/audiences/audiences-data.ts`
|
|
9
|
+
* (0.2.0 T11). The only wiring substitutions (plan §1.3) are the import
|
|
10
|
+
* rewires: the `adminFetch` + JSON layer now source from
|
|
11
|
+
* `@kywi-software/core/host-client`, and the admin/evaluator types resolve to
|
|
12
|
+
* core's own modules rather than the package self-reference.
|
|
13
|
+
*/
|
|
14
|
+
import { getJson } from '../../../host-client/index.js';
|
|
15
|
+
import type { Audience, SelfIdField, SelfIdWidgetConfig } from '../../../audiences/types.js';
|
|
16
|
+
import type { EvaluationTrace } from '../../../audiences/evaluator/index.js';
|
|
17
|
+
import type { ConditionGroupInput } from '../../condition-builder.js';
|
|
18
|
+
import type { SignalOption } from '../../signal-options.js';
|
|
19
|
+
export { getJson };
|
|
20
|
+
export declare function loadAudiences(): Promise<Audience[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Load the dynamic condition-builder signal catalogue (base signals + self-ID
|
|
23
|
+
* fields + registered adapter fields). Degrades gracefully: on failure the
|
|
24
|
+
* editor falls back to its built-in base catalogue.
|
|
25
|
+
*/
|
|
26
|
+
export declare function loadSignalOptions(): Promise<SignalOption[] | undefined>;
|
|
27
|
+
/** Persist the audience list order (priorities) via the reorder API. */
|
|
28
|
+
export declare function reorderAudiences(orderedIds: string[]): Promise<void>;
|
|
29
|
+
export declare function loadAudience(id: string): Promise<Audience>;
|
|
30
|
+
/** Payload accepted by both create and update audience routes. */
|
|
31
|
+
export interface AudienceSubmitValues {
|
|
32
|
+
name?: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
status?: 'active' | 'draft' | 'archived';
|
|
35
|
+
priority?: number;
|
|
36
|
+
scoreThreshold?: number | null;
|
|
37
|
+
conditionGroups?: ConditionGroupInput[];
|
|
38
|
+
}
|
|
39
|
+
export declare function createAudience(v: AudienceSubmitValues): Promise<Audience>;
|
|
40
|
+
export declare function updateAudience(id: string, v: AudienceSubmitValues): Promise<Audience>;
|
|
41
|
+
export declare function deleteAudience(id: string): Promise<void>;
|
|
42
|
+
/** Map a stored Audience into the editor's initialValues shape. */
|
|
43
|
+
export declare function toEditorValues(a: Audience): {
|
|
44
|
+
name: string;
|
|
45
|
+
description: string;
|
|
46
|
+
status: 'active' | 'draft' | 'archived';
|
|
47
|
+
priority: number;
|
|
48
|
+
scoreThreshold: number | null;
|
|
49
|
+
conditionGroups: ConditionGroupInput[];
|
|
50
|
+
};
|
|
51
|
+
/** Next free priority (max + 1), so the "New" default doesn't collide with the
|
|
52
|
+
* (siteId, priority) unique index. */
|
|
53
|
+
export declare function nextPriority(audiences: Audience[]): number;
|
|
54
|
+
/** One audience's match analytics, as returned by GET /audiences/analytics. */
|
|
55
|
+
export interface AudienceAnalytics {
|
|
56
|
+
audienceId: string;
|
|
57
|
+
matchCount: number;
|
|
58
|
+
matchRate: number;
|
|
59
|
+
uniqueVisitors: number;
|
|
60
|
+
period: 'day' | 'week' | 'month';
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Load match analytics for a single audience. Returns null when the endpoint
|
|
64
|
+
* reports no record for it (e.g. it has never been evaluated).
|
|
65
|
+
*/
|
|
66
|
+
export declare function loadAudienceAnalytics(id: string, period?: 'day' | 'week' | 'month'): Promise<AudienceAnalytics | null>;
|
|
67
|
+
export declare function loadSelfIdFields(): Promise<SelfIdField[]>;
|
|
68
|
+
export declare function saveSelfIdField(field: Omit<SelfIdField, 'siteId'>): Promise<SelfIdField>;
|
|
69
|
+
export declare function deleteSelfIdField(fieldId: string): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Returns null when no config has been saved yet. The API returns 200 with a
|
|
72
|
+
* null body in that case (avoids a console 404); a legacy 404 is tolerated too.
|
|
73
|
+
*/
|
|
74
|
+
export declare function loadWidgetConfig(): Promise<SelfIdWidgetConfig | null>;
|
|
75
|
+
export declare function saveWidgetConfig(config: Omit<SelfIdWidgetConfig, 'id' | 'siteId'>): Promise<SelfIdWidgetConfig>;
|
|
76
|
+
/** The flat signal bag the RuleTester hands back. */
|
|
77
|
+
export interface FlatRuleTesterSignals {
|
|
78
|
+
utmSource: string;
|
|
79
|
+
utmMedium: string;
|
|
80
|
+
utmCampaign: string;
|
|
81
|
+
utmTerm: string;
|
|
82
|
+
utmContent: string;
|
|
83
|
+
referrerRaw: string;
|
|
84
|
+
referrerDomain: string;
|
|
85
|
+
referrerSourceType: string;
|
|
86
|
+
pageViews: number;
|
|
87
|
+
totalPageViews: number;
|
|
88
|
+
timeOnSite: number;
|
|
89
|
+
entryPage: string;
|
|
90
|
+
pagesVisited: string[];
|
|
91
|
+
categoryScores: Record<string, number>;
|
|
92
|
+
behavioralTotalScore: number;
|
|
93
|
+
selfId: Record<string, string>;
|
|
94
|
+
visitorId: string;
|
|
95
|
+
isKnown: boolean;
|
|
96
|
+
}
|
|
97
|
+
/** POST to /audiences/evaluate and return the trace for this audience. */
|
|
98
|
+
export declare function evaluateAudience(audienceId: string, signals: FlatRuleTesterSignals): Promise<EvaluationTrace | null>;
|
|
99
|
+
export interface IssuedPreviewToken {
|
|
100
|
+
jti: string;
|
|
101
|
+
jwt: string;
|
|
102
|
+
audienceId: string;
|
|
103
|
+
expiresAt: number;
|
|
104
|
+
}
|
|
105
|
+
export declare function issuePreviewToken(audienceId: string): Promise<IssuedPreviewToken>;
|
|
106
|
+
export declare function revokePreviewToken(jti: string, audienceId: string): Promise<void>;
|
|
107
|
+
//# sourceMappingURL=audiences-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audiences-data.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/audiences/audiences-data.ts"],"names":[],"mappings":"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"}
|