@growth-labs/cms 0.1.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/README.md +165 -0
- package/dist/engine/activity-log.d.ts +17 -0
- package/dist/engine/activity-log.d.ts.map +1 -0
- package/dist/engine/activity-log.js +17 -0
- package/dist/engine/activity-log.js.map +1 -0
- package/dist/engine/ai-prompts.d.ts +57 -0
- package/dist/engine/ai-prompts.d.ts.map +1 -0
- package/dist/engine/ai-prompts.js +90 -0
- package/dist/engine/ai-prompts.js.map +1 -0
- package/dist/engine/ai-writeback.d.ts +36 -0
- package/dist/engine/ai-writeback.d.ts.map +1 -0
- package/dist/engine/ai-writeback.js +45 -0
- package/dist/engine/ai-writeback.js.map +1 -0
- package/dist/engine/api-keys.d.ts +76 -0
- package/dist/engine/api-keys.d.ts.map +1 -0
- package/dist/engine/api-keys.js +165 -0
- package/dist/engine/api-keys.js.map +1 -0
- package/dist/engine/content-insights.d.ts +36 -0
- package/dist/engine/content-insights.d.ts.map +1 -0
- package/dist/engine/content-insights.js +114 -0
- package/dist/engine/content-insights.js.map +1 -0
- package/dist/engine/contributors.d.ts +25 -0
- package/dist/engine/contributors.d.ts.map +1 -0
- package/dist/engine/contributors.js +59 -0
- package/dist/engine/contributors.js.map +1 -0
- package/dist/engine/cron.d.ts +15 -0
- package/dist/engine/cron.d.ts.map +1 -0
- package/dist/engine/cron.js +33 -0
- package/dist/engine/cron.js.map +1 -0
- package/dist/engine/d1.d.ts +16 -0
- package/dist/engine/d1.d.ts.map +1 -0
- package/dist/engine/d1.js +13 -0
- package/dist/engine/d1.js.map +1 -0
- package/dist/engine/foundry-dispatch.d.ts +52 -0
- package/dist/engine/foundry-dispatch.d.ts.map +1 -0
- package/dist/engine/foundry-dispatch.js +290 -0
- package/dist/engine/foundry-dispatch.js.map +1 -0
- package/dist/engine/import-parsers.d.ts +11 -0
- package/dist/engine/import-parsers.d.ts.map +1 -0
- package/dist/engine/import-parsers.js +373 -0
- package/dist/engine/import-parsers.js.map +1 -0
- package/dist/engine/index.d.ts +28 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +57 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/invites.d.ts +78 -0
- package/dist/engine/invites.d.ts.map +1 -0
- package/dist/engine/invites.js +158 -0
- package/dist/engine/invites.js.map +1 -0
- package/dist/engine/members.d.ts +59 -0
- package/dist/engine/members.d.ts.map +1 -0
- package/dist/engine/members.js +124 -0
- package/dist/engine/members.js.map +1 -0
- package/dist/engine/membership-rules.d.ts +25 -0
- package/dist/engine/membership-rules.d.ts.map +1 -0
- package/dist/engine/membership-rules.js +44 -0
- package/dist/engine/membership-rules.js.map +1 -0
- package/dist/engine/og-render.d.ts +40 -0
- package/dist/engine/og-render.d.ts.map +1 -0
- package/dist/engine/og-render.js +26 -0
- package/dist/engine/og-render.js.map +1 -0
- package/dist/engine/publish-guard.d.ts +58 -0
- package/dist/engine/publish-guard.d.ts.map +1 -0
- package/dist/engine/publish-guard.js +80 -0
- package/dist/engine/publish-guard.js.map +1 -0
- package/dist/engine/publisher.d.ts +171 -0
- package/dist/engine/publisher.d.ts.map +1 -0
- package/dist/engine/publisher.js +597 -0
- package/dist/engine/publisher.js.map +1 -0
- package/dist/engine/revisions.d.ts +39 -0
- package/dist/engine/revisions.d.ts.map +1 -0
- package/dist/engine/revisions.js +203 -0
- package/dist/engine/revisions.js.map +1 -0
- package/dist/engine/sanitize.d.ts +52 -0
- package/dist/engine/sanitize.d.ts.map +1 -0
- package/dist/engine/sanitize.js +155 -0
- package/dist/engine/sanitize.js.map +1 -0
- package/dist/engine/seed-membership.d.ts +29 -0
- package/dist/engine/seed-membership.d.ts.map +1 -0
- package/dist/engine/seed-membership.js +65 -0
- package/dist/engine/seed-membership.js.map +1 -0
- package/dist/engine/seo.d.ts +20 -0
- package/dist/engine/seo.d.ts.map +1 -0
- package/dist/engine/seo.js +50 -0
- package/dist/engine/seo.js.map +1 -0
- package/dist/engine/slug-redirects.d.ts +8 -0
- package/dist/engine/slug-redirects.d.ts.map +1 -0
- package/dist/engine/slug-redirects.js +26 -0
- package/dist/engine/slug-redirects.js.map +1 -0
- package/dist/engine/slug.d.ts +6 -0
- package/dist/engine/slug.d.ts.map +1 -0
- package/dist/engine/slug.js +28 -0
- package/dist/engine/slug.js.map +1 -0
- package/dist/engine/soft-delete.d.ts +8 -0
- package/dist/engine/soft-delete.d.ts.map +1 -0
- package/dist/engine/soft-delete.js +28 -0
- package/dist/engine/soft-delete.js.map +1 -0
- package/dist/engine/tags.d.ts +14 -0
- package/dist/engine/tags.d.ts.map +1 -0
- package/dist/engine/tags.js +79 -0
- package/dist/engine/tags.js.map +1 -0
- package/dist/engine/topics.d.ts +10 -0
- package/dist/engine/topics.d.ts.map +1 -0
- package/dist/engine/topics.js +140 -0
- package/dist/engine/topics.js.map +1 -0
- package/dist/engine/url-guard.d.ts +12 -0
- package/dist/engine/url-guard.d.ts.map +1 -0
- package/dist/engine/url-guard.js +129 -0
- package/dist/engine/url-guard.js.map +1 -0
- package/dist/engine/validator/checks/bare-url-not-autolinked.d.ts +20 -0
- package/dist/engine/validator/checks/bare-url-not-autolinked.d.ts.map +1 -0
- package/dist/engine/validator/checks/bare-url-not-autolinked.js +54 -0
- package/dist/engine/validator/checks/bare-url-not-autolinked.js.map +1 -0
- package/dist/engine/validator/checks/broken-footnote-label.d.ts +16 -0
- package/dist/engine/validator/checks/broken-footnote-label.d.ts.map +1 -0
- package/dist/engine/validator/checks/broken-footnote-label.js +17 -0
- package/dist/engine/validator/checks/broken-footnote-label.js.map +1 -0
- package/dist/engine/validator/checks/double-encoded-entities.d.ts +18 -0
- package/dist/engine/validator/checks/double-encoded-entities.d.ts.map +1 -0
- package/dist/engine/validator/checks/double-encoded-entities.js +23 -0
- package/dist/engine/validator/checks/double-encoded-entities.js.map +1 -0
- package/dist/engine/validator/checks/empty-alt-text.d.ts +14 -0
- package/dist/engine/validator/checks/empty-alt-text.d.ts.map +1 -0
- package/dist/engine/validator/checks/empty-alt-text.js +23 -0
- package/dist/engine/validator/checks/empty-alt-text.js.map +1 -0
- package/dist/engine/validator/checks/heading-hierarchy-skip.d.ts +11 -0
- package/dist/engine/validator/checks/heading-hierarchy-skip.d.ts.map +1 -0
- package/dist/engine/validator/checks/heading-hierarchy-skip.js +20 -0
- package/dist/engine/validator/checks/heading-hierarchy-skip.js.map +1 -0
- package/dist/engine/validator/checks/html-comment-leak.d.ts +20 -0
- package/dist/engine/validator/checks/html-comment-leak.d.ts.map +1 -0
- package/dist/engine/validator/checks/html-comment-leak.js +30 -0
- package/dist/engine/validator/checks/html-comment-leak.js.map +1 -0
- package/dist/engine/validator/checks/iframe-missing-dims-and-wrapper.d.ts +12 -0
- package/dist/engine/validator/checks/iframe-missing-dims-and-wrapper.d.ts.map +1 -0
- package/dist/engine/validator/checks/iframe-missing-dims-and-wrapper.js +17 -0
- package/dist/engine/validator/checks/iframe-missing-dims-and-wrapper.js.map +1 -0
- package/dist/engine/validator/checks/invisible-control-chars.d.ts +24 -0
- package/dist/engine/validator/checks/invisible-control-chars.d.ts.map +1 -0
- package/dist/engine/validator/checks/invisible-control-chars.js +30 -0
- package/dist/engine/validator/checks/invisible-control-chars.js.map +1 -0
- package/dist/engine/validator/checks/paywall-marker-leak.d.ts +17 -0
- package/dist/engine/validator/checks/paywall-marker-leak.d.ts.map +1 -0
- package/dist/engine/validator/checks/paywall-marker-leak.js +22 -0
- package/dist/engine/validator/checks/paywall-marker-leak.js.map +1 -0
- package/dist/engine/validator/checks/raw-block-html.d.ts +28 -0
- package/dist/engine/validator/checks/raw-block-html.d.ts.map +1 -0
- package/dist/engine/validator/checks/raw-block-html.js +38 -0
- package/dist/engine/validator/checks/raw-block-html.js.map +1 -0
- package/dist/engine/validator/checks/stale-body-html.d.ts +28 -0
- package/dist/engine/validator/checks/stale-body-html.d.ts.map +1 -0
- package/dist/engine/validator/checks/stale-body-html.js +15 -0
- package/dist/engine/validator/checks/stale-body-html.js.map +1 -0
- package/dist/engine/validator/checks/unresolved-footnote-anchor.d.ts +11 -0
- package/dist/engine/validator/checks/unresolved-footnote-anchor.d.ts.map +1 -0
- package/dist/engine/validator/checks/unresolved-footnote-anchor.js +48 -0
- package/dist/engine/validator/checks/unresolved-footnote-anchor.js.map +1 -0
- package/dist/engine/validator/checks/word-gdocs-paste-artifacts.d.ts +23 -0
- package/dist/engine/validator/checks/word-gdocs-paste-artifacts.d.ts.map +1 -0
- package/dist/engine/validator/checks/word-gdocs-paste-artifacts.js +47 -0
- package/dist/engine/validator/checks/word-gdocs-paste-artifacts.js.map +1 -0
- package/dist/engine/validator/index.d.ts +75 -0
- package/dist/engine/validator/index.d.ts.map +1 -0
- package/dist/engine/validator/index.js +313 -0
- package/dist/engine/validator/index.js.map +1 -0
- package/dist/engine/validator/scan.d.ts +28 -0
- package/dist/engine/validator/scan.d.ts.map +1 -0
- package/dist/engine/validator/scan.js +97 -0
- package/dist/engine/validator/scan.js.map +1 -0
- package/dist/engine/validator/types.d.ts +50 -0
- package/dist/engine/validator/types.d.ts.map +1 -0
- package/dist/engine/validator/types.js +51 -0
- package/dist/engine/validator/types.js.map +1 -0
- package/dist/engine/webhook-signer.d.ts +39 -0
- package/dist/engine/webhook-signer.d.ts.map +1 -0
- package/dist/engine/webhook-signer.js +117 -0
- package/dist/engine/webhook-signer.js.map +1 -0
- package/dist/engine/webhooks.d.ts +75 -0
- package/dist/engine/webhooks.d.ts.map +1 -0
- package/dist/engine/webhooks.js +139 -0
- package/dist/engine/webhooks.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/integration/index.d.ts +6 -0
- package/dist/integration/index.d.ts.map +1 -0
- package/dist/integration/index.js +294 -0
- package/dist/integration/index.js.map +1 -0
- package/dist/integration/options.d.ts +105 -0
- package/dist/integration/options.d.ts.map +1 -0
- package/dist/integration/options.js +25 -0
- package/dist/integration/options.js.map +1 -0
- package/dist/integration/vite-plugin.d.ts +4 -0
- package/dist/integration/vite-plugin.d.ts.map +1 -0
- package/dist/integration/vite-plugin.js +37 -0
- package/dist/integration/vite-plugin.js.map +1 -0
- package/dist/providers/index.d.ts +3 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +3 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/null.d.ts +9 -0
- package/dist/providers/null.d.ts.map +1 -0
- package/dist/providers/null.js +144 -0
- package/dist/providers/null.js.map +1 -0
- package/dist/providers/types.d.ts +277 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/routes/ai.d.ts +25 -0
- package/dist/routes/ai.d.ts.map +1 -0
- package/dist/routes/ai.js +381 -0
- package/dist/routes/ai.js.map +1 -0
- package/dist/routes/analytics.d.ts +15 -0
- package/dist/routes/analytics.d.ts.map +1 -0
- package/dist/routes/analytics.js +61 -0
- package/dist/routes/analytics.js.map +1 -0
- package/dist/routes/api-keys.d.ts +13 -0
- package/dist/routes/api-keys.d.ts.map +1 -0
- package/dist/routes/api-keys.js +109 -0
- package/dist/routes/api-keys.js.map +1 -0
- package/dist/routes/authors.d.ts +19 -0
- package/dist/routes/authors.d.ts.map +1 -0
- package/dist/routes/authors.js +202 -0
- package/dist/routes/authors.js.map +1 -0
- package/dist/routes/authz-matrix.d.ts +78 -0
- package/dist/routes/authz-matrix.d.ts.map +1 -0
- package/dist/routes/authz-matrix.js +170 -0
- package/dist/routes/authz-matrix.js.map +1 -0
- package/dist/routes/calendar.d.ts +19 -0
- package/dist/routes/calendar.d.ts.map +1 -0
- package/dist/routes/calendar.js +89 -0
- package/dist/routes/calendar.js.map +1 -0
- package/dist/routes/config.d.ts +70 -0
- package/dist/routes/config.d.ts.map +1 -0
- package/dist/routes/config.js +23 -0
- package/dist/routes/config.js.map +1 -0
- package/dist/routes/content-insights.d.ts +18 -0
- package/dist/routes/content-insights.d.ts.map +1 -0
- package/dist/routes/content-insights.js +137 -0
- package/dist/routes/content-insights.js.map +1 -0
- package/dist/routes/content.d.ts +145 -0
- package/dist/routes/content.d.ts.map +1 -0
- package/dist/routes/content.js +1374 -0
- package/dist/routes/content.js.map +1 -0
- package/dist/routes/context.d.ts +104 -0
- package/dist/routes/context.d.ts.map +1 -0
- package/dist/routes/context.js +26 -0
- package/dist/routes/context.js.map +1 -0
- package/dist/routes/cron.d.ts +8 -0
- package/dist/routes/cron.d.ts.map +1 -0
- package/dist/routes/cron.js +20 -0
- package/dist/routes/cron.js.map +1 -0
- package/dist/routes/dashboard.d.ts +12 -0
- package/dist/routes/dashboard.d.ts.map +1 -0
- package/dist/routes/dashboard.js +113 -0
- package/dist/routes/dashboard.js.map +1 -0
- package/dist/routes/imports.d.ts +10 -0
- package/dist/routes/imports.d.ts.map +1 -0
- package/dist/routes/imports.js +149 -0
- package/dist/routes/imports.js.map +1 -0
- package/dist/routes/index.d.ts +75 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +141 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/media-lib.d.ts +75 -0
- package/dist/routes/media-lib.d.ts.map +1 -0
- package/dist/routes/media-lib.js +305 -0
- package/dist/routes/media-lib.js.map +1 -0
- package/dist/routes/media.d.ts +32 -0
- package/dist/routes/media.d.ts.map +1 -0
- package/dist/routes/media.js +756 -0
- package/dist/routes/media.js.map +1 -0
- package/dist/routes/preview.d.ts +19 -0
- package/dist/routes/preview.d.ts.map +1 -0
- package/dist/routes/preview.js +150 -0
- package/dist/routes/preview.js.map +1 -0
- package/dist/routes/rbac-invites.d.ts +31 -0
- package/dist/routes/rbac-invites.d.ts.map +1 -0
- package/dist/routes/rbac-invites.js +174 -0
- package/dist/routes/rbac-invites.js.map +1 -0
- package/dist/routes/rbac.d.ts +12 -0
- package/dist/routes/rbac.d.ts.map +1 -0
- package/dist/routes/rbac.js +126 -0
- package/dist/routes/rbac.js.map +1 -0
- package/dist/routes/shell.d.ts +22 -0
- package/dist/routes/shell.d.ts.map +1 -0
- package/dist/routes/shell.js +123 -0
- package/dist/routes/shell.js.map +1 -0
- package/dist/routes/subscriptions.d.ts +21 -0
- package/dist/routes/subscriptions.d.ts.map +1 -0
- package/dist/routes/subscriptions.js +127 -0
- package/dist/routes/subscriptions.js.map +1 -0
- package/dist/routes/tags.d.ts +23 -0
- package/dist/routes/tags.d.ts.map +1 -0
- package/dist/routes/tags.js +68 -0
- package/dist/routes/tags.js.map +1 -0
- package/dist/routes/topics.d.ts +12 -0
- package/dist/routes/topics.d.ts.map +1 -0
- package/dist/routes/topics.js +49 -0
- package/dist/routes/topics.js.map +1 -0
- package/dist/routes/webhooks.d.ts +31 -0
- package/dist/routes/webhooks.d.ts.map +1 -0
- package/dist/routes/webhooks.js +173 -0
- package/dist/routes/webhooks.js.map +1 -0
- package/dist/schema/index.d.ts +4 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +6 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/insights-ingest.d.ts +959 -0
- package/dist/schema/insights-ingest.d.ts.map +1 -0
- package/dist/schema/insights-ingest.js +112 -0
- package/dist/schema/insights-ingest.js.map +1 -0
- package/dist/schema/migrations.d.ts +63 -0
- package/dist/schema/migrations.d.ts.map +1 -0
- package/dist/schema/migrations.js +589 -0
- package/dist/schema/migrations.js.map +1 -0
- package/dist/schema/tables.d.ts +11 -0
- package/dist/schema/tables.d.ts.map +1 -0
- package/dist/schema/tables.js +56 -0
- package/dist/schema/tables.js.map +1 -0
- package/dist/schema/types.d.ts +476 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +37 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/ui/api/_authz.d.ts +6 -0
- package/dist/ui/api/_authz.d.ts.map +1 -0
- package/dist/ui/api/_authz.js +74 -0
- package/dist/ui/api/_authz.js.map +1 -0
- package/dist/ui/api/_content-config.d.ts +22 -0
- package/dist/ui/api/_content-config.d.ts.map +1 -0
- package/dist/ui/api/_content-config.js +50 -0
- package/dist/ui/api/_content-config.js.map +1 -0
- package/dist/ui/api/activity.d.ts +3 -0
- package/dist/ui/api/activity.d.ts.map +1 -0
- package/dist/ui/api/activity.js +28 -0
- package/dist/ui/api/activity.js.map +1 -0
- package/dist/ui/api/analytics.d.ts +3 -0
- package/dist/ui/api/analytics.d.ts.map +1 -0
- package/dist/ui/api/analytics.js +36 -0
- package/dist/ui/api/analytics.js.map +1 -0
- package/dist/ui/api/authors/[id].d.ts +4 -0
- package/dist/ui/api/authors/[id].d.ts.map +1 -0
- package/dist/ui/api/authors/[id].js +17 -0
- package/dist/ui/api/authors/[id].js.map +1 -0
- package/dist/ui/api/authors.d.ts +4 -0
- package/dist/ui/api/authors.d.ts.map +1 -0
- package/dist/ui/api/authors.js +12 -0
- package/dist/ui/api/authors.js.map +1 -0
- package/dist/ui/api/calendar.d.ts +3 -0
- package/dist/ui/api/calendar.d.ts.map +1 -0
- package/dist/ui/api/calendar.js +16 -0
- package/dist/ui/api/calendar.js.map +1 -0
- package/dist/ui/api/content/[id]/ai/headlines.d.ts +3 -0
- package/dist/ui/api/content/[id]/ai/headlines.d.ts.map +1 -0
- package/dist/ui/api/content/[id]/ai/headlines.js +7 -0
- package/dist/ui/api/content/[id]/ai/headlines.js.map +1 -0
- package/dist/ui/api/content/[id]/ai/meta-description.d.ts +3 -0
- package/dist/ui/api/content/[id]/ai/meta-description.d.ts.map +1 -0
- package/dist/ui/api/content/[id]/ai/meta-description.js +6 -0
- package/dist/ui/api/content/[id]/ai/meta-description.js.map +1 -0
- package/dist/ui/api/content/[id]/ai/og-image.d.ts +3 -0
- package/dist/ui/api/content/[id]/ai/og-image.d.ts.map +1 -0
- package/dist/ui/api/content/[id]/ai/og-image.js +7 -0
- package/dist/ui/api/content/[id]/ai/og-image.js.map +1 -0
- package/dist/ui/api/content/[id]/ai/proofread.d.ts +3 -0
- package/dist/ui/api/content/[id]/ai/proofread.d.ts.map +1 -0
- package/dist/ui/api/content/[id]/ai/proofread.js +7 -0
- package/dist/ui/api/content/[id]/ai/proofread.js.map +1 -0
- package/dist/ui/api/content/[id]/ai/takeaways.d.ts +3 -0
- package/dist/ui/api/content/[id]/ai/takeaways.d.ts.map +1 -0
- package/dist/ui/api/content/[id]/ai/takeaways.js +6 -0
- package/dist/ui/api/content/[id]/ai/takeaways.js.map +1 -0
- package/dist/ui/api/content/[id]/contributors.d.ts +4 -0
- package/dist/ui/api/content/[id]/contributors.d.ts.map +1 -0
- package/dist/ui/api/content/[id]/contributors.js +8 -0
- package/dist/ui/api/content/[id]/contributors.js.map +1 -0
- package/dist/ui/api/content/[id]/preview-token.d.ts +3 -0
- package/dist/ui/api/content/[id]/preview-token.d.ts.map +1 -0
- package/dist/ui/api/content/[id]/preview-token.js +16 -0
- package/dist/ui/api/content/[id]/preview-token.js.map +1 -0
- package/dist/ui/api/content/[id]/revisions/[rev]/restore.d.ts +3 -0
- package/dist/ui/api/content/[id]/revisions/[rev]/restore.d.ts.map +1 -0
- package/dist/ui/api/content/[id]/revisions/[rev]/restore.js +7 -0
- package/dist/ui/api/content/[id]/revisions/[rev]/restore.js.map +1 -0
- package/dist/ui/api/content/[id]/revisions/[rev].d.ts +3 -0
- package/dist/ui/api/content/[id]/revisions/[rev].d.ts.map +1 -0
- package/dist/ui/api/content/[id]/revisions/[rev].js +6 -0
- package/dist/ui/api/content/[id]/revisions/[rev].js.map +1 -0
- package/dist/ui/api/content/[id]/revisions.d.ts +3 -0
- package/dist/ui/api/content/[id]/revisions.d.ts.map +1 -0
- package/dist/ui/api/content/[id]/revisions.js +6 -0
- package/dist/ui/api/content/[id]/revisions.js.map +1 -0
- package/dist/ui/api/content/[id]/seo-score.d.ts +3 -0
- package/dist/ui/api/content/[id]/seo-score.d.ts.map +1 -0
- package/dist/ui/api/content/[id]/seo-score.js +7 -0
- package/dist/ui/api/content/[id]/seo-score.js.map +1 -0
- package/dist/ui/api/content/[id].d.ts +5 -0
- package/dist/ui/api/content/[id].d.ts.map +1 -0
- package/dist/ui/api/content/[id].js +17 -0
- package/dist/ui/api/content/[id].js.map +1 -0
- package/dist/ui/api/content/bulk.d.ts +3 -0
- package/dist/ui/api/content/bulk.d.ts.map +1 -0
- package/dist/ui/api/content/bulk.js +7 -0
- package/dist/ui/api/content/bulk.js.map +1 -0
- package/dist/ui/api/content/counts.d.ts +3 -0
- package/dist/ui/api/content/counts.d.ts.map +1 -0
- package/dist/ui/api/content/counts.js +8 -0
- package/dist/ui/api/content/counts.js.map +1 -0
- package/dist/ui/api/content/foundry-callback.d.ts +3 -0
- package/dist/ui/api/content/foundry-callback.d.ts.map +1 -0
- package/dist/ui/api/content/foundry-callback.js +8 -0
- package/dist/ui/api/content/foundry-callback.js.map +1 -0
- package/dist/ui/api/content/import/confirm.d.ts +3 -0
- package/dist/ui/api/content/import/confirm.d.ts.map +1 -0
- package/dist/ui/api/content/import/confirm.js +11 -0
- package/dist/ui/api/content/import/confirm.js.map +1 -0
- package/dist/ui/api/content/import/parse.d.ts +3 -0
- package/dist/ui/api/content/import/parse.d.ts.map +1 -0
- package/dist/ui/api/content/import/parse.js +11 -0
- package/dist/ui/api/content/import/parse.js.map +1 -0
- package/dist/ui/api/content/insights-ingest.d.ts +3 -0
- package/dist/ui/api/content/insights-ingest.d.ts.map +1 -0
- package/dist/ui/api/content/insights-ingest.js +15 -0
- package/dist/ui/api/content/insights-ingest.js.map +1 -0
- package/dist/ui/api/content-insights/dismiss.d.ts +3 -0
- package/dist/ui/api/content-insights/dismiss.d.ts.map +1 -0
- package/dist/ui/api/content-insights/dismiss.js +16 -0
- package/dist/ui/api/content-insights/dismiss.js.map +1 -0
- package/dist/ui/api/content-insights/index.d.ts +3 -0
- package/dist/ui/api/content-insights/index.d.ts.map +1 -0
- package/dist/ui/api/content-insights/index.js +12 -0
- package/dist/ui/api/content-insights/index.js.map +1 -0
- package/dist/ui/api/content-insights/undismiss.d.ts +3 -0
- package/dist/ui/api/content-insights/undismiss.d.ts.map +1 -0
- package/dist/ui/api/content-insights/undismiss.js +16 -0
- package/dist/ui/api/content-insights/undismiss.js.map +1 -0
- package/dist/ui/api/content.d.ts +4 -0
- package/dist/ui/api/content.d.ts.map +1 -0
- package/dist/ui/api/content.js +16 -0
- package/dist/ui/api/content.js.map +1 -0
- package/dist/ui/api/dashboard.d.ts +3 -0
- package/dist/ui/api/dashboard.d.ts.map +1 -0
- package/dist/ui/api/dashboard.js +22 -0
- package/dist/ui/api/dashboard.js.map +1 -0
- package/dist/ui/api/me.d.ts +3 -0
- package/dist/ui/api/me.d.ts.map +1 -0
- package/dist/ui/api/me.js +18 -0
- package/dist/ui/api/me.js.map +1 -0
- package/dist/ui/api/media/[id].d.ts +3 -0
- package/dist/ui/api/media/[id].d.ts.map +1 -0
- package/dist/ui/api/media/[id].js +17 -0
- package/dist/ui/api/media/[id].js.map +1 -0
- package/dist/ui/api/media/images.d.ts +3 -0
- package/dist/ui/api/media/images.d.ts.map +1 -0
- package/dist/ui/api/media/images.js +6 -0
- package/dist/ui/api/media/images.js.map +1 -0
- package/dist/ui/api/media/library/[id].d.ts +3 -0
- package/dist/ui/api/media/library/[id].d.ts.map +1 -0
- package/dist/ui/api/media/library/[id].js +6 -0
- package/dist/ui/api/media/library/[id].js.map +1 -0
- package/dist/ui/api/media/library.d.ts +3 -0
- package/dist/ui/api/media/library.d.ts.map +1 -0
- package/dist/ui/api/media/library.js +17 -0
- package/dist/ui/api/media/library.js.map +1 -0
- package/dist/ui/api/media/podcast/abort.d.ts +3 -0
- package/dist/ui/api/media/podcast/abort.d.ts.map +1 -0
- package/dist/ui/api/media/podcast/abort.js +4 -0
- package/dist/ui/api/media/podcast/abort.js.map +1 -0
- package/dist/ui/api/media/podcast/complete.d.ts +3 -0
- package/dist/ui/api/media/podcast/complete.d.ts.map +1 -0
- package/dist/ui/api/media/podcast/complete.js +4 -0
- package/dist/ui/api/media/podcast/complete.js.map +1 -0
- package/dist/ui/api/media/podcast/init.d.ts +3 -0
- package/dist/ui/api/media/podcast/init.d.ts.map +1 -0
- package/dist/ui/api/media/podcast/init.js +4 -0
- package/dist/ui/api/media/podcast/init.js.map +1 -0
- package/dist/ui/api/media/podcast/part.d.ts +3 -0
- package/dist/ui/api/media/podcast/part.d.ts.map +1 -0
- package/dist/ui/api/media/podcast/part.js +4 -0
- package/dist/ui/api/media/podcast/part.js.map +1 -0
- package/dist/ui/api/media/podcast.d.ts +3 -0
- package/dist/ui/api/media/podcast.d.ts.map +1 -0
- package/dist/ui/api/media/podcast.js +6 -0
- package/dist/ui/api/media/podcast.js.map +1 -0
- package/dist/ui/api/media/videos/abort.d.ts +3 -0
- package/dist/ui/api/media/videos/abort.d.ts.map +1 -0
- package/dist/ui/api/media/videos/abort.js +6 -0
- package/dist/ui/api/media/videos/abort.js.map +1 -0
- package/dist/ui/api/media/videos/complete.d.ts +3 -0
- package/dist/ui/api/media/videos/complete.d.ts.map +1 -0
- package/dist/ui/api/media/videos/complete.js +6 -0
- package/dist/ui/api/media/videos/complete.js.map +1 -0
- package/dist/ui/api/media/videos/init.d.ts +3 -0
- package/dist/ui/api/media/videos/init.d.ts.map +1 -0
- package/dist/ui/api/media/videos/init.js +6 -0
- package/dist/ui/api/media/videos/init.js.map +1 -0
- package/dist/ui/api/media/videos/part.d.ts +3 -0
- package/dist/ui/api/media/videos/part.d.ts.map +1 -0
- package/dist/ui/api/media/videos/part.js +6 -0
- package/dist/ui/api/media/videos/part.js.map +1 -0
- package/dist/ui/api/notifications.d.ts +4 -0
- package/dist/ui/api/notifications.d.ts.map +1 -0
- package/dist/ui/api/notifications.js +20 -0
- package/dist/ui/api/notifications.js.map +1 -0
- package/dist/ui/api/search.d.ts +3 -0
- package/dist/ui/api/search.d.ts.map +1 -0
- package/dist/ui/api/search.js +18 -0
- package/dist/ui/api/search.js.map +1 -0
- package/dist/ui/api/settings/api-keys/[id].d.ts +3 -0
- package/dist/ui/api/settings/api-keys/[id].d.ts.map +1 -0
- package/dist/ui/api/settings/api-keys/[id].js +22 -0
- package/dist/ui/api/settings/api-keys/[id].js.map +1 -0
- package/dist/ui/api/settings/api-keys.d.ts +4 -0
- package/dist/ui/api/settings/api-keys.d.ts.map +1 -0
- package/dist/ui/api/settings/api-keys.js +19 -0
- package/dist/ui/api/settings/api-keys.js.map +1 -0
- package/dist/ui/api/settings/domains.d.ts +3 -0
- package/dist/ui/api/settings/domains.d.ts.map +1 -0
- package/dist/ui/api/settings/domains.js +32 -0
- package/dist/ui/api/settings/domains.js.map +1 -0
- package/dist/ui/api/settings/integrations.d.ts +3 -0
- package/dist/ui/api/settings/integrations.d.ts.map +1 -0
- package/dist/ui/api/settings/integrations.js +32 -0
- package/dist/ui/api/settings/integrations.js.map +1 -0
- package/dist/ui/api/settings/members/[userId].d.ts +4 -0
- package/dist/ui/api/settings/members/[userId].d.ts.map +1 -0
- package/dist/ui/api/settings/members/[userId].js +26 -0
- package/dist/ui/api/settings/members/[userId].js.map +1 -0
- package/dist/ui/api/settings/members/invite.d.ts +3 -0
- package/dist/ui/api/settings/members/invite.d.ts.map +1 -0
- package/dist/ui/api/settings/members/invite.js +21 -0
- package/dist/ui/api/settings/members/invite.js.map +1 -0
- package/dist/ui/api/settings/members.d.ts +3 -0
- package/dist/ui/api/settings/members.d.ts.map +1 -0
- package/dist/ui/api/settings/members.js +17 -0
- package/dist/ui/api/settings/members.js.map +1 -0
- package/dist/ui/api/settings/webhooks/[id]/test.d.ts +3 -0
- package/dist/ui/api/settings/webhooks/[id]/test.d.ts.map +1 -0
- package/dist/ui/api/settings/webhooks/[id]/test.js +24 -0
- package/dist/ui/api/settings/webhooks/[id]/test.js.map +1 -0
- package/dist/ui/api/settings/webhooks/[id].d.ts +3 -0
- package/dist/ui/api/settings/webhooks/[id].d.ts.map +1 -0
- package/dist/ui/api/settings/webhooks/[id].js +23 -0
- package/dist/ui/api/settings/webhooks/[id].js.map +1 -0
- package/dist/ui/api/settings/webhooks.d.ts +4 -0
- package/dist/ui/api/settings/webhooks.d.ts.map +1 -0
- package/dist/ui/api/settings/webhooks.js +21 -0
- package/dist/ui/api/settings/webhooks.js.map +1 -0
- package/dist/ui/api/subscriptions.d.ts +4 -0
- package/dist/ui/api/subscriptions.d.ts.map +1 -0
- package/dist/ui/api/subscriptions.js +47 -0
- package/dist/ui/api/subscriptions.js.map +1 -0
- package/dist/ui/api/tags/[id].d.ts +4 -0
- package/dist/ui/api/tags/[id].d.ts.map +1 -0
- package/dist/ui/api/tags/[id].js +18 -0
- package/dist/ui/api/tags/[id].js.map +1 -0
- package/dist/ui/api/tags/index.d.ts +4 -0
- package/dist/ui/api/tags/index.d.ts.map +1 -0
- package/dist/ui/api/tags/index.js +13 -0
- package/dist/ui/api/tags/index.js.map +1 -0
- package/dist/ui/api/topics/[id].d.ts +3 -0
- package/dist/ui/api/topics/[id].d.ts.map +1 -0
- package/dist/ui/api/topics/[id].js +15 -0
- package/dist/ui/api/topics/[id].js.map +1 -0
- package/dist/ui/api/topics/index.d.ts +4 -0
- package/dist/ui/api/topics/index.d.ts.map +1 -0
- package/dist/ui/api/topics/index.js +12 -0
- package/dist/ui/api/topics/index.js.map +1 -0
- package/dist/ui/api/workspace-settings.d.ts +4 -0
- package/dist/ui/api/workspace-settings.d.ts.map +1 -0
- package/dist/ui/api/workspace-settings.js +20 -0
- package/dist/ui/api/workspace-settings.js.map +1 -0
- package/dist/ui/client/boot-state.d.ts +15 -0
- package/dist/ui/client/boot-state.d.ts.map +1 -0
- package/dist/ui/client/boot-state.js +36 -0
- package/dist/ui/client/boot-state.js.map +1 -0
- package/dist/ui/client/mount.d.ts +3 -0
- package/dist/ui/client/mount.d.ts.map +1 -0
- package/dist/ui/client/mount.js +37 -0
- package/dist/ui/client/mount.js.map +1 -0
- package/dist/ui/commands.d.ts +23 -0
- package/dist/ui/commands.d.ts.map +1 -0
- package/dist/ui/commands.js +48 -0
- package/dist/ui/commands.js.map +1 -0
- package/dist/ui/components/CmsApp.d.ts +16 -0
- package/dist/ui/components/CmsApp.d.ts.map +1 -0
- package/dist/ui/components/CmsApp.js +74 -0
- package/dist/ui/components/CmsApp.js.map +1 -0
- package/dist/ui/components/CommandPalette.d.ts +7 -0
- package/dist/ui/components/CommandPalette.d.ts.map +1 -0
- package/dist/ui/components/CommandPalette.js +61 -0
- package/dist/ui/components/CommandPalette.js.map +1 -0
- package/dist/ui/components/NoAccessScreen.d.ts +2 -0
- package/dist/ui/components/NoAccessScreen.d.ts.map +1 -0
- package/dist/ui/components/NoAccessScreen.js +42 -0
- package/dist/ui/components/NoAccessScreen.js.map +1 -0
- package/dist/ui/components/ShareModal.d.ts +27 -0
- package/dist/ui/components/ShareModal.d.ts.map +1 -0
- package/dist/ui/components/ShareModal.js +208 -0
- package/dist/ui/components/ShareModal.js.map +1 -0
- package/dist/ui/components/SharePickers.d.ts +39 -0
- package/dist/ui/components/SharePickers.d.ts.map +1 -0
- package/dist/ui/components/SharePickers.js +352 -0
- package/dist/ui/components/SharePickers.js.map +1 -0
- package/dist/ui/components/ShareStatsPanel.d.ts +22 -0
- package/dist/ui/components/ShareStatsPanel.d.ts.map +1 -0
- package/dist/ui/components/ShareStatsPanel.js +317 -0
- package/dist/ui/components/ShareStatsPanel.js.map +1 -0
- package/dist/ui/components/Sidebar.d.ts +7 -0
- package/dist/ui/components/Sidebar.d.ts.map +1 -0
- package/dist/ui/components/Sidebar.js +20 -0
- package/dist/ui/components/Sidebar.js.map +1 -0
- package/dist/ui/components/SiteSwitcher.d.ts +4 -0
- package/dist/ui/components/SiteSwitcher.d.ts.map +1 -0
- package/dist/ui/components/SiteSwitcher.js +35 -0
- package/dist/ui/components/SiteSwitcher.js.map +1 -0
- package/dist/ui/components/Topbar.d.ts +9 -0
- package/dist/ui/components/Topbar.d.ts.map +1 -0
- package/dist/ui/components/Topbar.js +20 -0
- package/dist/ui/components/Topbar.js.map +1 -0
- package/dist/ui/editor/AiAssistPanel.d.ts +8 -0
- package/dist/ui/editor/AiAssistPanel.d.ts.map +1 -0
- package/dist/ui/editor/AiAssistPanel.js +221 -0
- package/dist/ui/editor/AiAssistPanel.js.map +1 -0
- package/dist/ui/editor/ContentForm.d.ts +46 -0
- package/dist/ui/editor/ContentForm.d.ts.map +1 -0
- package/dist/ui/editor/ContentForm.js +821 -0
- package/dist/ui/editor/ContentForm.js.map +1 -0
- package/dist/ui/editor/Rte.d.ts +16 -0
- package/dist/ui/editor/Rte.d.ts.map +1 -0
- package/dist/ui/editor/Rte.js +272 -0
- package/dist/ui/editor/Rte.js.map +1 -0
- package/dist/ui/editor/ai-assist.d.ts +43 -0
- package/dist/ui/editor/ai-assist.d.ts.map +1 -0
- package/dist/ui/editor/ai-assist.js +114 -0
- package/dist/ui/editor/ai-assist.js.map +1 -0
- package/dist/ui/editor/autosave.d.ts +18 -0
- package/dist/ui/editor/autosave.d.ts.map +1 -0
- package/dist/ui/editor/autosave.js +23 -0
- package/dist/ui/editor/autosave.js.map +1 -0
- package/dist/ui/editor/content-payload.d.ts +19 -0
- package/dist/ui/editor/content-payload.d.ts.map +1 -0
- package/dist/ui/editor/content-payload.js +97 -0
- package/dist/ui/editor/content-payload.js.map +1 -0
- package/dist/ui/editor/editor-media-upload.d.ts +6 -0
- package/dist/ui/editor/editor-media-upload.d.ts.map +1 -0
- package/dist/ui/editor/editor-media-upload.js +20 -0
- package/dist/ui/editor/editor-media-upload.js.map +1 -0
- package/dist/ui/editor/serialize.d.ts +6 -0
- package/dist/ui/editor/serialize.d.ts.map +1 -0
- package/dist/ui/editor/serialize.js +479 -0
- package/dist/ui/editor/serialize.js.map +1 -0
- package/dist/ui/editor/tweet-embed.d.ts +4 -0
- package/dist/ui/editor/tweet-embed.d.ts.map +1 -0
- package/dist/ui/editor/tweet-embed.js +49 -0
- package/dist/ui/editor/tweet-embed.js.map +1 -0
- package/dist/ui/hash-router.d.ts +5 -0
- package/dist/ui/hash-router.d.ts.map +1 -0
- package/dist/ui/hash-router.js +25 -0
- package/dist/ui/hash-router.js.map +1 -0
- package/dist/ui/icons.d.ts +32 -0
- package/dist/ui/icons.d.ts.map +1 -0
- package/dist/ui/icons.js +86 -0
- package/dist/ui/icons.js.map +1 -0
- package/dist/ui/inspector/Field.d.ts +12 -0
- package/dist/ui/inspector/Field.d.ts.map +1 -0
- package/dist/ui/inspector/Field.js +8 -0
- package/dist/ui/inspector/Field.js.map +1 -0
- package/dist/ui/inspector/FoundryTab.d.ts +9 -0
- package/dist/ui/inspector/FoundryTab.d.ts.map +1 -0
- package/dist/ui/inspector/FoundryTab.js +362 -0
- package/dist/ui/inspector/FoundryTab.js.map +1 -0
- package/dist/ui/inspector/HistoryTab.d.ts +7 -0
- package/dist/ui/inspector/HistoryTab.d.ts.map +1 -0
- package/dist/ui/inspector/HistoryTab.js +289 -0
- package/dist/ui/inspector/HistoryTab.js.map +1 -0
- package/dist/ui/inspector/Inspector.d.ts +13 -0
- package/dist/ui/inspector/Inspector.d.ts.map +1 -0
- package/dist/ui/inspector/Inspector.js +163 -0
- package/dist/ui/inspector/Inspector.js.map +1 -0
- package/dist/ui/inspector/OrganizeTab.d.ts +15 -0
- package/dist/ui/inspector/OrganizeTab.d.ts.map +1 -0
- package/dist/ui/inspector/OrganizeTab.js +319 -0
- package/dist/ui/inspector/OrganizeTab.js.map +1 -0
- package/dist/ui/inspector/PublishTab.d.ts +18 -0
- package/dist/ui/inspector/PublishTab.d.ts.map +1 -0
- package/dist/ui/inspector/PublishTab.js +339 -0
- package/dist/ui/inspector/PublishTab.js.map +1 -0
- package/dist/ui/inspector/Section.d.ts +10 -0
- package/dist/ui/inspector/Section.d.ts.map +1 -0
- package/dist/ui/inspector/Section.js +40 -0
- package/dist/ui/inspector/Section.js.map +1 -0
- package/dist/ui/inspector/SeoTab.d.ts +19 -0
- package/dist/ui/inspector/SeoTab.d.ts.map +1 -0
- package/dist/ui/inspector/SeoTab.js +328 -0
- package/dist/ui/inspector/SeoTab.js.map +1 -0
- package/dist/ui/inspector/foundry-stages.d.ts +36 -0
- package/dist/ui/inspector/foundry-stages.d.ts.map +1 -0
- package/dist/ui/inspector/foundry-stages.js +101 -0
- package/dist/ui/inspector/foundry-stages.js.map +1 -0
- package/dist/ui/inspector/inspector-data.d.ts +80 -0
- package/dist/ui/inspector/inspector-data.d.ts.map +1 -0
- package/dist/ui/inspector/inspector-data.js +172 -0
- package/dist/ui/inspector/inspector-data.js.map +1 -0
- package/dist/ui/inspector/organize-data.d.ts +23 -0
- package/dist/ui/inspector/organize-data.d.ts.map +1 -0
- package/dist/ui/inspector/organize-data.js +28 -0
- package/dist/ui/inspector/organize-data.js.map +1 -0
- package/dist/ui/inspector/revision-diff.d.ts +49 -0
- package/dist/ui/inspector/revision-diff.d.ts.map +1 -0
- package/dist/ui/inspector/revision-diff.js +166 -0
- package/dist/ui/inspector/revision-diff.js.map +1 -0
- package/dist/ui/inspector/seo-helpers.d.ts +37 -0
- package/dist/ui/inspector/seo-helpers.d.ts.map +1 -0
- package/dist/ui/inspector/seo-helpers.js +37 -0
- package/dist/ui/inspector/seo-helpers.js.map +1 -0
- package/dist/ui/inspector/tab-visibility.d.ts +14 -0
- package/dist/ui/inspector/tab-visibility.d.ts.map +1 -0
- package/dist/ui/inspector/tab-visibility.js +28 -0
- package/dist/ui/inspector/tab-visibility.js.map +1 -0
- package/dist/ui/nav.d.ts +16 -0
- package/dist/ui/nav.d.ts.map +1 -0
- package/dist/ui/nav.js +33 -0
- package/dist/ui/nav.js.map +1 -0
- package/dist/ui/pages/admin.astro +32 -0
- package/dist/ui/preview/draft-page.d.ts +37 -0
- package/dist/ui/preview/draft-page.d.ts.map +1 -0
- package/dist/ui/preview/draft-page.js +212 -0
- package/dist/ui/preview/draft-page.js.map +1 -0
- package/dist/ui/preview/preview-layout.d.ts +23 -0
- package/dist/ui/preview/preview-layout.d.ts.map +1 -0
- package/dist/ui/preview/preview-layout.js +30 -0
- package/dist/ui/preview/preview-layout.js.map +1 -0
- package/dist/ui/screens/AnalyticsScreen.d.ts +2 -0
- package/dist/ui/screens/AnalyticsScreen.d.ts.map +1 -0
- package/dist/ui/screens/AnalyticsScreen.js +408 -0
- package/dist/ui/screens/AnalyticsScreen.js.map +1 -0
- package/dist/ui/screens/AuthorsScreen.d.ts +2 -0
- package/dist/ui/screens/AuthorsScreen.d.ts.map +1 -0
- package/dist/ui/screens/AuthorsScreen.js +225 -0
- package/dist/ui/screens/AuthorsScreen.js.map +1 -0
- package/dist/ui/screens/CalendarScreen.d.ts +6 -0
- package/dist/ui/screens/CalendarScreen.d.ts.map +1 -0
- package/dist/ui/screens/CalendarScreen.js +327 -0
- package/dist/ui/screens/CalendarScreen.js.map +1 -0
- package/dist/ui/screens/ContentInsightsScreen.d.ts +2 -0
- package/dist/ui/screens/ContentInsightsScreen.d.ts.map +1 -0
- package/dist/ui/screens/ContentInsightsScreen.js +129 -0
- package/dist/ui/screens/ContentInsightsScreen.js.map +1 -0
- package/dist/ui/screens/ContentRoute.d.ts +2 -0
- package/dist/ui/screens/ContentRoute.d.ts.map +1 -0
- package/dist/ui/screens/ContentRoute.js +32 -0
- package/dist/ui/screens/ContentRoute.js.map +1 -0
- package/dist/ui/screens/DashboardScreen.d.ts +6 -0
- package/dist/ui/screens/DashboardScreen.d.ts.map +1 -0
- package/dist/ui/screens/DashboardScreen.js +273 -0
- package/dist/ui/screens/DashboardScreen.js.map +1 -0
- package/dist/ui/screens/EditorScreen.d.ts +7 -0
- package/dist/ui/screens/EditorScreen.d.ts.map +1 -0
- package/dist/ui/screens/EditorScreen.js +426 -0
- package/dist/ui/screens/EditorScreen.js.map +1 -0
- package/dist/ui/screens/LibraryScreen.d.ts +6 -0
- package/dist/ui/screens/LibraryScreen.d.ts.map +1 -0
- package/dist/ui/screens/LibraryScreen.js +580 -0
- package/dist/ui/screens/LibraryScreen.js.map +1 -0
- package/dist/ui/screens/MediaScreen.d.ts +2 -0
- package/dist/ui/screens/MediaScreen.d.ts.map +1 -0
- package/dist/ui/screens/MediaScreen.js +173 -0
- package/dist/ui/screens/MediaScreen.js.map +1 -0
- package/dist/ui/screens/SettingsScreen.d.ts +4 -0
- package/dist/ui/screens/SettingsScreen.d.ts.map +1 -0
- package/dist/ui/screens/SettingsScreen.js +751 -0
- package/dist/ui/screens/SettingsScreen.js.map +1 -0
- package/dist/ui/screens/SocialShareScreen.d.ts +2 -0
- package/dist/ui/screens/SocialShareScreen.d.ts.map +1 -0
- package/dist/ui/screens/SocialShareScreen.js +224 -0
- package/dist/ui/screens/SocialShareScreen.js.map +1 -0
- package/dist/ui/screens/SubscriptionsScreen.d.ts +2 -0
- package/dist/ui/screens/SubscriptionsScreen.d.ts.map +1 -0
- package/dist/ui/screens/SubscriptionsScreen.js +441 -0
- package/dist/ui/screens/SubscriptionsScreen.js.map +1 -0
- package/dist/ui/screens/TopicsScreen.d.ts +2 -0
- package/dist/ui/screens/TopicsScreen.d.ts.map +1 -0
- package/dist/ui/screens/TopicsScreen.js +360 -0
- package/dist/ui/screens/TopicsScreen.js.map +1 -0
- package/dist/ui/screens/analytics-data.d.ts +19 -0
- package/dist/ui/screens/analytics-data.d.ts.map +1 -0
- package/dist/ui/screens/analytics-data.js +42 -0
- package/dist/ui/screens/analytics-data.js.map +1 -0
- package/dist/ui/screens/calendar-data.d.ts +45 -0
- package/dist/ui/screens/calendar-data.d.ts.map +1 -0
- package/dist/ui/screens/calendar-data.js +70 -0
- package/dist/ui/screens/calendar-data.js.map +1 -0
- package/dist/ui/screens/content-insights-data.d.ts +54 -0
- package/dist/ui/screens/content-insights-data.d.ts.map +1 -0
- package/dist/ui/screens/content-insights-data.js +82 -0
- package/dist/ui/screens/content-insights-data.js.map +1 -0
- package/dist/ui/screens/content-view.d.ts +21 -0
- package/dist/ui/screens/content-view.d.ts.map +1 -0
- package/dist/ui/screens/content-view.js +17 -0
- package/dist/ui/screens/content-view.js.map +1 -0
- package/dist/ui/screens/library-data.d.ts +76 -0
- package/dist/ui/screens/library-data.d.ts.map +1 -0
- package/dist/ui/screens/library-data.js +116 -0
- package/dist/ui/screens/library-data.js.map +1 -0
- package/dist/ui/screens/media-upload.d.ts +19 -0
- package/dist/ui/screens/media-upload.d.ts.map +1 -0
- package/dist/ui/screens/media-upload.js +187 -0
- package/dist/ui/screens/media-upload.js.map +1 -0
- package/dist/ui/screens/public-url.d.ts +24 -0
- package/dist/ui/screens/public-url.d.ts.map +1 -0
- package/dist/ui/screens/public-url.js +74 -0
- package/dist/ui/screens/public-url.js.map +1 -0
- package/dist/ui/screens/registry.d.ts +3 -0
- package/dist/ui/screens/registry.d.ts.map +1 -0
- package/dist/ui/screens/registry.js +38 -0
- package/dist/ui/screens/registry.js.map +1 -0
- package/dist/ui/screens/render-state.d.ts +105 -0
- package/dist/ui/screens/render-state.d.ts.map +1 -0
- package/dist/ui/screens/render-state.js +127 -0
- package/dist/ui/screens/render-state.js.map +1 -0
- package/dist/ui/screens/settings-data.d.ts +55 -0
- package/dist/ui/screens/settings-data.d.ts.map +1 -0
- package/dist/ui/screens/settings-data.js +89 -0
- package/dist/ui/screens/settings-data.js.map +1 -0
- package/dist/ui/screens/settings-panels-data.d.ts +58 -0
- package/dist/ui/screens/settings-panels-data.d.ts.map +1 -0
- package/dist/ui/screens/settings-panels-data.js +88 -0
- package/dist/ui/screens/settings-panels-data.js.map +1 -0
- package/dist/ui/screens/social-share-data.d.ts +307 -0
- package/dist/ui/screens/social-share-data.d.ts.map +1 -0
- package/dist/ui/screens/social-share-data.js +447 -0
- package/dist/ui/screens/social-share-data.js.map +1 -0
- package/dist/ui/screens/topics-data.d.ts +38 -0
- package/dist/ui/screens/topics-data.d.ts.map +1 -0
- package/dist/ui/screens/topics-data.js +50 -0
- package/dist/ui/screens/topics-data.js.map +1 -0
- package/dist/ui/styles/broadsheet.css +394 -0
- package/dist/ui/theme.d.ts +23 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +87 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/ui/tweaks.d.ts +7 -0
- package/dist/ui/tweaks.d.ts.map +1 -0
- package/dist/ui/tweaks.js +31 -0
- package/dist/ui/tweaks.js.map +1 -0
- package/dist/ui/use-hash-router.d.ts +6 -0
- package/dist/ui/use-hash-router.d.ts.map +1 -0
- package/dist/ui/use-hash-router.js +15 -0
- package/dist/ui/use-hash-router.js.map +1 -0
- package/dist/ui/use-tweaks.d.ts +6 -0
- package/dist/ui/use-tweaks.d.ts.map +1 -0
- package/dist/ui/use-tweaks.js +24 -0
- package/dist/ui/use-tweaks.js.map +1 -0
- package/dist/ui/workspace-context.d.ts +34 -0
- package/dist/ui/workspace-context.d.ts.map +1 -0
- package/dist/ui/workspace-context.js +32 -0
- package/dist/ui/workspace-context.js.map +1 -0
- package/migrations/0001_create_cms_tables.sql +200 -0
- package/migrations/0002_review_softdelete_board.sql +112 -0
- package/migrations/0003_content_contributors.sql +16 -0
- package/migrations/0004_seo_faq_columns.sql +6 -0
- package/migrations/0005_revision_delta_columns.sql +5 -0
- package/migrations/0006_processing_trigger_token.sql +4 -0
- package/migrations/0007_content_slug_redirects.sql +9 -0
- package/migrations/0008_workspace_settings.sql +17 -0
- package/migrations/0009_workspace_memberships.sql +36 -0
- package/migrations/0010_api_keys_webhooks.sql +21 -0
- package/migrations/0011_notifications_activity.sql +22 -0
- package/migrations/0012_content_imports.sql +10 -0
- package/migrations/0013_media_normalization.sql +4 -0
- package/migrations/0014_api_key_prefix.sql +3 -0
- package/migrations/0015_cms_topics.sql +7 -0
- package/migrations/0016_content_insights.sql +53 -0
- package/package.json +82 -0
- package/src/engine/activity-log.ts +39 -0
- package/src/engine/ai-prompts.ts +124 -0
- package/src/engine/ai-writeback.ts +62 -0
- package/src/engine/api-keys.ts +239 -0
- package/src/engine/content-insights.ts +198 -0
- package/src/engine/contributors.ts +95 -0
- package/src/engine/cron.ts +62 -0
- package/src/engine/d1.ts +29 -0
- package/src/engine/foundry-dispatch.ts +417 -0
- package/src/engine/import-parsers.ts +478 -0
- package/src/engine/index.ts +230 -0
- package/src/engine/invites.ts +271 -0
- package/src/engine/members.ts +216 -0
- package/src/engine/membership-rules.ts +63 -0
- package/src/engine/og-render.ts +59 -0
- package/src/engine/publish-guard.ts +123 -0
- package/src/engine/publisher.ts +1032 -0
- package/src/engine/revisions.ts +292 -0
- package/src/engine/sanitize.ts +183 -0
- package/src/engine/seed-membership.ts +92 -0
- package/src/engine/seo.ts +72 -0
- package/src/engine/slug-redirects.ts +34 -0
- package/src/engine/slug.ts +33 -0
- package/src/engine/soft-delete.ts +42 -0
- package/src/engine/tags.ts +95 -0
- package/src/engine/topics.ts +158 -0
- package/src/engine/url-guard.ts +136 -0
- package/src/engine/validator/checks/bare-url-not-autolinked.ts +78 -0
- package/src/engine/validator/checks/broken-footnote-label.ts +33 -0
- package/src/engine/validator/checks/double-encoded-entities.ts +46 -0
- package/src/engine/validator/checks/empty-alt-text.ts +35 -0
- package/src/engine/validator/checks/heading-hierarchy-skip.ts +33 -0
- package/src/engine/validator/checks/html-comment-leak.ts +58 -0
- package/src/engine/validator/checks/iframe-missing-dims-and-wrapper.ts +34 -0
- package/src/engine/validator/checks/invisible-control-chars.ts +58 -0
- package/src/engine/validator/checks/paywall-marker-leak.ts +43 -0
- package/src/engine/validator/checks/raw-block-html.ts +65 -0
- package/src/engine/validator/checks/stale-body-html.ts +39 -0
- package/src/engine/validator/checks/unresolved-footnote-anchor.ts +61 -0
- package/src/engine/validator/checks/word-gdocs-paste-artifacts.ts +72 -0
- package/src/engine/validator/index.ts +385 -0
- package/src/engine/validator/scan.ts +103 -0
- package/src/engine/validator/types.ts +114 -0
- package/src/engine/webhook-signer.ts +139 -0
- package/src/engine/webhooks.ts +224 -0
- package/src/index.ts +79 -0
- package/src/integration/index.ts +298 -0
- package/src/integration/options.ts +30 -0
- package/src/integration/vite-plugin.ts +37 -0
- package/src/providers/index.ts +2 -0
- package/src/providers/null.ts +160 -0
- package/src/providers/types.ts +284 -0
- package/src/routes/ai.ts +461 -0
- package/src/routes/analytics.ts +78 -0
- package/src/routes/api-keys.ts +133 -0
- package/src/routes/authors.ts +282 -0
- package/src/routes/authz-matrix.ts +239 -0
- package/src/routes/calendar.ts +127 -0
- package/src/routes/config.ts +99 -0
- package/src/routes/content-insights.ts +159 -0
- package/src/routes/content.ts +1753 -0
- package/src/routes/context.ts +146 -0
- package/src/routes/cron.ts +27 -0
- package/src/routes/dashboard.ts +174 -0
- package/src/routes/imports.ts +190 -0
- package/src/routes/index.ts +295 -0
- package/src/routes/media-lib.ts +405 -0
- package/src/routes/media.ts +944 -0
- package/src/routes/preview.ts +182 -0
- package/src/routes/rbac-invites.ts +220 -0
- package/src/routes/rbac.ts +155 -0
- package/src/routes/shell.ts +163 -0
- package/src/routes/subscriptions.ts +167 -0
- package/src/routes/tags.ts +93 -0
- package/src/routes/topics.ts +58 -0
- package/src/routes/webhooks.ts +233 -0
- package/src/schema/index.ts +45 -0
- package/src/schema/insights-ingest.ts +126 -0
- package/src/schema/migrations.ts +599 -0
- package/src/schema/tables.ts +59 -0
- package/src/schema/types.ts +576 -0
- package/src/ui/api/_authz.ts +100 -0
- package/src/ui/api/_content-config.ts +75 -0
- package/src/ui/api/activity.ts +33 -0
- package/src/ui/api/analytics.ts +42 -0
- package/src/ui/api/authors/[id].ts +23 -0
- package/src/ui/api/authors.ts +19 -0
- package/src/ui/api/calendar.ts +21 -0
- package/src/ui/api/content/[id]/ai/headlines.ts +10 -0
- package/src/ui/api/content/[id]/ai/meta-description.ts +11 -0
- package/src/ui/api/content/[id]/ai/og-image.ts +10 -0
- package/src/ui/api/content/[id]/ai/proofread.ts +10 -0
- package/src/ui/api/content/[id]/ai/takeaways.ts +11 -0
- package/src/ui/api/content/[id]/contributors.ts +13 -0
- package/src/ui/api/content/[id]/preview-token.ts +21 -0
- package/src/ui/api/content/[id]/revisions/[rev]/restore.ts +12 -0
- package/src/ui/api/content/[id]/revisions/[rev].ts +11 -0
- package/src/ui/api/content/[id]/revisions.ts +9 -0
- package/src/ui/api/content/[id]/seo-score.ts +10 -0
- package/src/ui/api/content/[id].ts +23 -0
- package/src/ui/api/content/bulk.ts +10 -0
- package/src/ui/api/content/counts.ts +11 -0
- package/src/ui/api/content/foundry-callback.ts +11 -0
- package/src/ui/api/content/import/confirm.ts +16 -0
- package/src/ui/api/content/import/parse.ts +16 -0
- package/src/ui/api/content/insights-ingest.ts +24 -0
- package/src/ui/api/content-insights/dismiss.ts +23 -0
- package/src/ui/api/content-insights/index.ts +21 -0
- package/src/ui/api/content-insights/undismiss.ts +23 -0
- package/src/ui/api/content.ts +21 -0
- package/src/ui/api/dashboard.ts +28 -0
- package/src/ui/api/me.ts +23 -0
- package/src/ui/api/media/[id].ts +22 -0
- package/src/ui/api/media/images.ts +9 -0
- package/src/ui/api/media/library/[id].ts +9 -0
- package/src/ui/api/media/library.ts +22 -0
- package/src/ui/api/media/podcast/abort.ts +6 -0
- package/src/ui/api/media/podcast/complete.ts +6 -0
- package/src/ui/api/media/podcast/init.ts +6 -0
- package/src/ui/api/media/podcast/part.ts +6 -0
- package/src/ui/api/media/podcast.ts +9 -0
- package/src/ui/api/media/videos/abort.ts +9 -0
- package/src/ui/api/media/videos/complete.ts +9 -0
- package/src/ui/api/media/videos/init.ts +9 -0
- package/src/ui/api/media/videos/part.ts +9 -0
- package/src/ui/api/notifications.ts +26 -0
- package/src/ui/api/search.ts +23 -0
- package/src/ui/api/settings/api-keys/[id].ts +28 -0
- package/src/ui/api/settings/api-keys.ts +25 -0
- package/src/ui/api/settings/domains.ts +37 -0
- package/src/ui/api/settings/integrations.ts +40 -0
- package/src/ui/api/settings/members/[userId].ts +33 -0
- package/src/ui/api/settings/members/invite.ts +27 -0
- package/src/ui/api/settings/members.ts +23 -0
- package/src/ui/api/settings/webhooks/[id]/test.ts +30 -0
- package/src/ui/api/settings/webhooks/[id].ts +29 -0
- package/src/ui/api/settings/webhooks.ts +27 -0
- package/src/ui/api/subscriptions.ts +56 -0
- package/src/ui/api/tags/[id].ts +24 -0
- package/src/ui/api/tags/index.ts +18 -0
- package/src/ui/api/topics/[id].ts +20 -0
- package/src/ui/api/topics/index.ts +17 -0
- package/src/ui/api/workspace-settings.ts +26 -0
- package/src/ui/client/boot-state.ts +42 -0
- package/src/ui/client/mount.tsx +41 -0
- package/src/ui/commands.ts +62 -0
- package/src/ui/components/CmsApp.tsx +149 -0
- package/src/ui/components/CommandPalette.tsx +118 -0
- package/src/ui/components/NoAccessScreen.tsx +79 -0
- package/src/ui/components/ShareModal.tsx +650 -0
- package/src/ui/components/SharePickers.tsx +790 -0
- package/src/ui/components/ShareStatsPanel.tsx +721 -0
- package/src/ui/components/Sidebar.tsx +86 -0
- package/src/ui/components/SiteSwitcher.tsx +100 -0
- package/src/ui/components/Topbar.tsx +93 -0
- package/src/ui/editor/AiAssistPanel.tsx +407 -0
- package/src/ui/editor/ContentForm.tsx +1462 -0
- package/src/ui/editor/Rte.tsx +382 -0
- package/src/ui/editor/ai-assist.ts +139 -0
- package/src/ui/editor/autosave.ts +36 -0
- package/src/ui/editor/content-payload.ts +125 -0
- package/src/ui/editor/editor-media-upload.ts +26 -0
- package/src/ui/editor/serialize.ts +522 -0
- package/src/ui/editor/tweet-embed.ts +60 -0
- package/src/ui/hash-router.ts +30 -0
- package/src/ui/icons.tsx +208 -0
- package/src/ui/inspector/Field.tsx +30 -0
- package/src/ui/inspector/FoundryTab.tsx +613 -0
- package/src/ui/inspector/HistoryTab.tsx +482 -0
- package/src/ui/inspector/Inspector.tsx +328 -0
- package/src/ui/inspector/OrganizeTab.tsx +534 -0
- package/src/ui/inspector/PublishTab.tsx +626 -0
- package/src/ui/inspector/Section.tsx +81 -0
- package/src/ui/inspector/SeoTab.tsx +573 -0
- package/src/ui/inspector/foundry-stages.ts +140 -0
- package/src/ui/inspector/inspector-data.ts +232 -0
- package/src/ui/inspector/organize-data.ts +51 -0
- package/src/ui/inspector/revision-diff.ts +213 -0
- package/src/ui/inspector/seo-helpers.ts +71 -0
- package/src/ui/inspector/tab-visibility.ts +37 -0
- package/src/ui/nav.ts +48 -0
- package/src/ui/pages/admin.astro +32 -0
- package/src/ui/preview/draft-page.tsx +395 -0
- package/src/ui/preview/preview-layout.ts +49 -0
- package/src/ui/screens/AnalyticsScreen.tsx +938 -0
- package/src/ui/screens/AuthorsScreen.tsx +524 -0
- package/src/ui/screens/CalendarScreen.tsx +694 -0
- package/src/ui/screens/ContentInsightsScreen.tsx +417 -0
- package/src/ui/screens/ContentRoute.tsx +35 -0
- package/src/ui/screens/DashboardScreen.tsx +654 -0
- package/src/ui/screens/EditorScreen.tsx +673 -0
- package/src/ui/screens/LibraryScreen.tsx +1350 -0
- package/src/ui/screens/MediaScreen.tsx +357 -0
- package/src/ui/screens/SettingsScreen.tsx +1841 -0
- package/src/ui/screens/SocialShareScreen.tsx +670 -0
- package/src/ui/screens/SubscriptionsScreen.tsx +1240 -0
- package/src/ui/screens/TopicsScreen.tsx +912 -0
- package/src/ui/screens/analytics-data.ts +68 -0
- package/src/ui/screens/calendar-data.ts +126 -0
- package/src/ui/screens/content-insights-data.ts +127 -0
- package/src/ui/screens/content-view.ts +30 -0
- package/src/ui/screens/library-data.ts +177 -0
- package/src/ui/screens/media-upload.ts +283 -0
- package/src/ui/screens/public-url.ts +81 -0
- package/src/ui/screens/registry.tsx +53 -0
- package/src/ui/screens/render-state.ts +228 -0
- package/src/ui/screens/settings-data.ts +140 -0
- package/src/ui/screens/settings-panels-data.ts +142 -0
- package/src/ui/screens/social-share-data.ts +753 -0
- package/src/ui/screens/topics-data.ts +75 -0
- package/src/ui/styles/broadsheet.css +394 -0
- package/src/ui/theme.ts +104 -0
- package/src/ui/tweaks.ts +37 -0
- package/src/ui/use-hash-router.ts +17 -0
- package/src/ui/use-tweaks.ts +31 -0
- package/src/ui/workspace-context.tsx +62 -0
- package/src/virtual.d.ts +4 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-context.d.ts","sourceRoot":"","sources":["../../src/ui/workspace-context.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,SAAS,EAA0B,MAAM,OAAO,CAAA;AAC7E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAEnD,MAAM,WAAW,mBAAmB;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,cAAc;IAC9B,UAAU,EAAE,mBAAmB,EAAE,CAAA;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;CACpB;AAED,MAAM,MAAM,eAAe,GACxB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;CAAE,CAAA;AAE7C,wBAAgB,qBAAqB,CACpC,UAAU,EAAE,mBAAmB,EAAE,EACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,GAAG,IAAI,GAClB,cAAc,CAEhB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,GAAG,cAAc,CAW/F;AAED,UAAU,qBAAqB;IAC9B,KAAK,EAAE,cAAc,CAAA;IACrB,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAA;IAC3C,MAAM,EAAE,mBAAmB,GAAG,SAAS,CAAA;CACvC;AAID,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAIxF;AAED,wBAAgB,YAAY,IAAI,qBAAqB,CAIpD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// src/ui/workspace-context.tsx — the SPA-wide workspace + current-user context.
|
|
3
|
+
// The reducer is pure (and unit-tested); the Provider wraps it for React.
|
|
4
|
+
import { createContext, useContext, useReducer } from 'react';
|
|
5
|
+
export function initialWorkspaceState(workspaces, activeId, user) {
|
|
6
|
+
return { workspaces, activeId, user };
|
|
7
|
+
}
|
|
8
|
+
export function workspaceReducer(state, action) {
|
|
9
|
+
switch (action.type) {
|
|
10
|
+
case 'switch':
|
|
11
|
+
return state.workspaces.some((w) => w.id === action.id)
|
|
12
|
+
? { ...state, activeId: action.id }
|
|
13
|
+
: state;
|
|
14
|
+
case 'set-user':
|
|
15
|
+
return { ...state, user: action.user };
|
|
16
|
+
default:
|
|
17
|
+
return state;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const Ctx = createContext(null);
|
|
21
|
+
export function WorkspaceProvider(props) {
|
|
22
|
+
const [state, dispatch] = useReducer(workspaceReducer, props.initial);
|
|
23
|
+
const active = state.workspaces.find((w) => w.id === state.activeId);
|
|
24
|
+
return _jsx(Ctx.Provider, { value: { state, dispatch, active }, children: props.children });
|
|
25
|
+
}
|
|
26
|
+
export function useWorkspace() {
|
|
27
|
+
const v = useContext(Ctx);
|
|
28
|
+
if (!v)
|
|
29
|
+
throw new Error('useWorkspace must be used within a WorkspaceProvider');
|
|
30
|
+
return v;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=workspace-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-context.js","sourceRoot":"","sources":["../../src/ui/workspace-context.tsx"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,OAAO,EAAE,aAAa,EAAkB,UAAU,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAoB7E,MAAM,UAAU,qBAAqB,CACpC,UAAiC,EACjC,QAAgB,EAChB,IAAoB;IAEpB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAqB,EAAE,MAAuB;IAC9E,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,QAAQ;YACZ,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;gBACtD,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE;gBACnC,CAAC,CAAC,KAAK,CAAA;QACT,KAAK,UAAU;YACd,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAA;QACvC;YACC,OAAO,KAAK,CAAA;IACd,CAAC;AACF,CAAC;AAQD,MAAM,GAAG,GAAG,aAAa,CAA+B,IAAI,CAAC,CAAA;AAE7D,MAAM,UAAU,iBAAiB,CAAC,KAAuD;IACxF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IACrE,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAA;IACpE,OAAO,KAAC,GAAG,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAG,KAAK,CAAC,QAAQ,GAAgB,CAAA;AACzF,CAAC;AAED,MAAM,UAAU,YAAY;IAC3B,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;IACzB,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;IAC/E,OAAO,CAAC,CAAA;AACT,CAAC"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
-- @growth-labs/cms — content/revision/media/authors/foundry-callback D1 contract.
|
|
2
|
+
--
|
|
3
|
+
-- The 11-table publishing-engine contract, verified against prod `fronts-data`
|
|
4
|
+
-- (uuid 151d5fd3-dbb8-403d-82b4-51361a932575) `sqlite_master` 2026-05-29. This is
|
|
5
|
+
-- the PROD-CURRENT shape, not the original 0007 migration: `content_items` /
|
|
6
|
+
-- `video_content` were rebuilt via __new-table swaps (0024 newsletter add, 0018
|
|
7
|
+
-- stream_uid -> video_id). A fresh site applies this set verbatim.
|
|
8
|
+
--
|
|
9
|
+
-- Boundary (the anti-monolith gate — see
|
|
10
|
+
-- docs/log/2026-05-29-cms-extraction-inventory.md): this set EXCLUDES every
|
|
11
|
+
-- identity/entitlement table (users, subscription*, *_entitlements,
|
|
12
|
+
-- gl_identity_links, gifts, CRM/customerio, mailer) and the analytics-owned
|
|
13
|
+
-- gl_content_progress. Those belong to other workstreams and MUST NOT be pulled
|
|
14
|
+
-- into the CMS package.
|
|
15
|
+
--
|
|
16
|
+
-- Intentional divergence (DO NOT NORMALIZE): `media_assets` timestamps are TEXT
|
|
17
|
+
-- `datetime('now')` while the content tables use INTEGER `unixepoch()`. The
|
|
18
|
+
-- engine code handles both conventions; normalizing breaks prod parity.
|
|
19
|
+
--
|
|
20
|
+
-- Theme-token defaults baked here are site-supplied config in practice
|
|
21
|
+
-- (`publish_tz='Europe/Paris'`, `media_assets.site_id='fronts'`); they are kept
|
|
22
|
+
-- as DEFAULTs only to match prod exactly.
|
|
23
|
+
|
|
24
|
+
-- content_items — core. type CHECK includes 'newsletter' (prod 0024); status
|
|
25
|
+
-- draft/scheduled/published/archived; visibility free/premium. `channel` and
|
|
26
|
+
-- `primary_topic` are theme-token taxonomy.
|
|
27
|
+
CREATE TABLE content_items (
|
|
28
|
+
id TEXT PRIMARY KEY,
|
|
29
|
+
type TEXT NOT NULL CHECK (type IN ('article','video','podcast','newsletter')),
|
|
30
|
+
status TEXT NOT NULL CHECK (status IN ('draft','scheduled','published','archived')),
|
|
31
|
+
visibility TEXT NOT NULL CHECK (visibility IN ('free','premium')),
|
|
32
|
+
slug TEXT NOT NULL UNIQUE,
|
|
33
|
+
title TEXT NOT NULL,
|
|
34
|
+
seo_title TEXT,
|
|
35
|
+
description TEXT,
|
|
36
|
+
excerpt TEXT,
|
|
37
|
+
byline TEXT,
|
|
38
|
+
channel TEXT,
|
|
39
|
+
primary_topic TEXT,
|
|
40
|
+
featured INTEGER NOT NULL DEFAULT 0,
|
|
41
|
+
author_id TEXT,
|
|
42
|
+
hero_image_id TEXT,
|
|
43
|
+
hero_image_alt TEXT,
|
|
44
|
+
hero_image_caption TEXT,
|
|
45
|
+
social_image_id TEXT,
|
|
46
|
+
canonical_url TEXT,
|
|
47
|
+
publish_at INTEGER,
|
|
48
|
+
published_at INTEGER,
|
|
49
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
50
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
51
|
+
publish_tz TEXT NOT NULL DEFAULT 'Europe/Paris',
|
|
52
|
+
ai_locked_fields TEXT NOT NULL DEFAULT '[]',
|
|
53
|
+
published_revision_id TEXT,
|
|
54
|
+
FOREIGN KEY (author_id) REFERENCES authors(id)
|
|
55
|
+
);
|
|
56
|
+
CREATE INDEX idx_content_items_status ON content_items(status);
|
|
57
|
+
CREATE INDEX idx_content_items_type ON content_items(type);
|
|
58
|
+
CREATE INDEX idx_content_items_publish_at ON content_items(publish_at DESC);
|
|
59
|
+
CREATE INDEX idx_content_items_channel ON content_items(channel);
|
|
60
|
+
CREATE INDEX idx_content_items_author_id ON content_items(author_id);
|
|
61
|
+
CREATE INDEX idx_content_items_topic_status_type_published
|
|
62
|
+
ON content_items(primary_topic, status, type, published_at DESC);
|
|
63
|
+
CREATE INDEX idx_content_items_published_at ON content_items(published_at DESC);
|
|
64
|
+
|
|
65
|
+
-- article_content — body + Hermes-fed takeaways/FAQ columns (KEPT per OD-EST1;
|
|
66
|
+
-- generated via Foundry callAgent, never env.AI.run).
|
|
67
|
+
CREATE TABLE article_content (
|
|
68
|
+
content_id TEXT PRIMARY KEY,
|
|
69
|
+
body_markdown TEXT NOT NULL,
|
|
70
|
+
body_html TEXT,
|
|
71
|
+
word_count INTEGER,
|
|
72
|
+
read_time_minutes INTEGER,
|
|
73
|
+
subtitle TEXT,
|
|
74
|
+
ai_takeaways TEXT,
|
|
75
|
+
ai_takeaways_at INTEGER,
|
|
76
|
+
ai_takeaways_model TEXT,
|
|
77
|
+
editor_takeaways TEXT,
|
|
78
|
+
ai_takeaways_correlation_id TEXT,
|
|
79
|
+
faq_correlation_id TEXT,
|
|
80
|
+
faq_generated_at INTEGER,
|
|
81
|
+
faq_model TEXT,
|
|
82
|
+
FOREIGN KEY (content_id) REFERENCES content_items(id) ON DELETE CASCADE
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
-- video_content — prod column is `video_id` (NOT 0007's `stream_uid`; renamed
|
|
86
|
+
-- in 0018). Full processing_* state machine (bead 08).
|
|
87
|
+
CREATE TABLE video_content (
|
|
88
|
+
content_id TEXT PRIMARY KEY,
|
|
89
|
+
script TEXT NOT NULL,
|
|
90
|
+
video_id TEXT NOT NULL,
|
|
91
|
+
duration_seconds INTEGER,
|
|
92
|
+
thumbnail_image_id TEXT,
|
|
93
|
+
processing_state TEXT NOT NULL DEFAULT 'pending'
|
|
94
|
+
CHECK (processing_state IN ('pending','queued','fetching','transcribing','transcoding','ready','failed')),
|
|
95
|
+
processing_correlation_id TEXT,
|
|
96
|
+
processing_started_at INTEGER,
|
|
97
|
+
processing_completed_at INTEGER,
|
|
98
|
+
processing_last_event_at INTEGER,
|
|
99
|
+
processing_error TEXT,
|
|
100
|
+
processing_source_url TEXT,
|
|
101
|
+
processing_source_kind TEXT,
|
|
102
|
+
source_fetched INTEGER NOT NULL DEFAULT 0,
|
|
103
|
+
transcript_ready INTEGER NOT NULL DEFAULT 0,
|
|
104
|
+
hls_ready INTEGER NOT NULL DEFAULT 0,
|
|
105
|
+
transcript_url TEXT,
|
|
106
|
+
hls_manifest_url TEXT,
|
|
107
|
+
hls_poster_url TEXT,
|
|
108
|
+
FOREIGN KEY (content_id) REFERENCES content_items(id) ON DELETE CASCADE
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
CREATE TABLE podcast_content (
|
|
112
|
+
content_id TEXT PRIMARY KEY,
|
|
113
|
+
transcript TEXT NOT NULL,
|
|
114
|
+
audio_r2_key TEXT NOT NULL,
|
|
115
|
+
duration_seconds INTEGER,
|
|
116
|
+
FOREIGN KEY (content_id) REFERENCES content_items(id) ON DELETE CASCADE
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
-- content_revisions — version history; payload_json snapshots.
|
|
120
|
+
CREATE TABLE content_revisions (
|
|
121
|
+
id TEXT PRIMARY KEY,
|
|
122
|
+
content_id TEXT NOT NULL,
|
|
123
|
+
payload_json TEXT NOT NULL,
|
|
124
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
125
|
+
created_by TEXT,
|
|
126
|
+
FOREIGN KEY (content_id) REFERENCES content_items(id) ON DELETE CASCADE
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
CREATE TABLE content_tags (
|
|
130
|
+
id TEXT PRIMARY KEY,
|
|
131
|
+
slug TEXT NOT NULL UNIQUE,
|
|
132
|
+
label TEXT NOT NULL
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
CREATE TABLE content_tag_links (
|
|
136
|
+
content_id TEXT NOT NULL,
|
|
137
|
+
tag_id TEXT NOT NULL,
|
|
138
|
+
PRIMARY KEY (content_id, tag_id),
|
|
139
|
+
FOREIGN KEY (content_id) REFERENCES content_items(id) ON DELETE CASCADE,
|
|
140
|
+
FOREIGN KEY (tag_id) REFERENCES content_tags(id) ON DELETE CASCADE
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
CREATE TABLE content_relations (
|
|
144
|
+
content_id TEXT NOT NULL,
|
|
145
|
+
related_id TEXT NOT NULL,
|
|
146
|
+
rank INTEGER NOT NULL DEFAULT 0,
|
|
147
|
+
reason TEXT,
|
|
148
|
+
PRIMARY KEY (content_id, related_id),
|
|
149
|
+
FOREIGN KEY (content_id) REFERENCES content_items(id) ON DELETE CASCADE,
|
|
150
|
+
FOREIGN KEY (related_id) REFERENCES content_items(id) ON DELETE CASCADE
|
|
151
|
+
);
|
|
152
|
+
|
|
153
|
+
-- media_assets — NOTE created_at/updated_at are TEXT datetime('now') here, NOT
|
|
154
|
+
-- INTEGER unixepoch like the content tables. This divergence is intentional and
|
|
155
|
+
-- matches prod; the engine's insertMediaAsset writes datetime('now'). Do not
|
|
156
|
+
-- normalize. `site_id` default 'fronts' is a theme-token.
|
|
157
|
+
CREATE TABLE media_assets (
|
|
158
|
+
id TEXT PRIMARY KEY,
|
|
159
|
+
site_id TEXT NOT NULL DEFAULT 'fronts',
|
|
160
|
+
asset_type TEXT NOT NULL DEFAULT 'image',
|
|
161
|
+
source_type TEXT,
|
|
162
|
+
original_filename TEXT,
|
|
163
|
+
status TEXT NOT NULL DEFAULT 'ready',
|
|
164
|
+
object_key TEXT,
|
|
165
|
+
public_url TEXT,
|
|
166
|
+
url TEXT,
|
|
167
|
+
width INTEGER,
|
|
168
|
+
height INTEGER,
|
|
169
|
+
variants_json TEXT,
|
|
170
|
+
r2_binding TEXT,
|
|
171
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
172
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
173
|
+
pinned INTEGER NOT NULL DEFAULT 0
|
|
174
|
+
);
|
|
175
|
+
CREATE INDEX idx_media_assets_site_id ON media_assets(site_id);
|
|
176
|
+
CREATE INDEX idx_media_assets_object_key ON media_assets(object_key);
|
|
177
|
+
CREATE INDEX idx_media_assets_type_status ON media_assets(asset_type, status);
|
|
178
|
+
CREATE INDEX idx_media_assets_pinned_created ON media_assets(pinned DESC, created_at DESC);
|
|
179
|
+
|
|
180
|
+
-- authors — core CMS authorship. NOTE timestamps use strftime('%s','now')
|
|
181
|
+
-- (INTEGER unix seconds), matching prod.
|
|
182
|
+
CREATE TABLE authors (
|
|
183
|
+
id TEXT PRIMARY KEY,
|
|
184
|
+
name TEXT NOT NULL,
|
|
185
|
+
slug TEXT NOT NULL UNIQUE,
|
|
186
|
+
bio TEXT,
|
|
187
|
+
avatar TEXT,
|
|
188
|
+
email TEXT,
|
|
189
|
+
social TEXT,
|
|
190
|
+
created_at INTEGER NOT NULL DEFAULT (strftime('%s','now')),
|
|
191
|
+
updated_at INTEGER NOT NULL DEFAULT (strftime('%s','now'))
|
|
192
|
+
);
|
|
193
|
+
|
|
194
|
+
-- foundry_callback_events — HMAC callback dedupe (bead 08; takeaways/faq/hls).
|
|
195
|
+
CREATE TABLE foundry_callback_events (
|
|
196
|
+
event_id TEXT PRIMARY KEY,
|
|
197
|
+
event_kind TEXT NOT NULL,
|
|
198
|
+
correlation_id TEXT NOT NULL,
|
|
199
|
+
received_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
200
|
+
);
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
-- 0002_review_softdelete_board: rebuild content_items with widened status CHECK,
|
|
2
|
+
-- deleted_at (soft-delete), and board_position (editorial board). D1 cannot ALTER
|
|
3
|
+
-- a CHECK constraint in place, so this rebuilds the table. Seven tables reference
|
|
4
|
+
-- content_items (article_content, video_content, podcast_content,
|
|
5
|
+
-- content_revisions, content_tag_links, content_relations, and
|
|
6
|
+
-- content_contributors). The package declares those FKs ON DELETE CASCADE, but on
|
|
7
|
+
-- the LIVE prod fronts-data DB some of those tables pre-date the package and carry
|
|
8
|
+
-- NO `ON DELETE` clause (NO ACTION) — e.g. content_contributors from Fronts legacy
|
|
9
|
+
-- migration 0035. The package's own `CREATE TABLE IF NOT EXISTS` NO-OPs against
|
|
10
|
+
-- those pre-existing tables, so neither a CASCADE nor a deferred pragma can be
|
|
11
|
+
-- relied on to clear their rows before the parent DROP. With FK enforcement ON
|
|
12
|
+
-- (D1's default during apply) `DROP TABLE content_items` is REJECTED while ANY
|
|
13
|
+
-- child still references it. The robust, FK-action-independent fix: after stashing
|
|
14
|
+
-- every child into `_cms0002_bk_*`, EXPLICITLY DELETE each child so no NO-ACTION or
|
|
15
|
+
-- cascade reference remains, DROP+rename content_items, then RESTORE each child
|
|
16
|
+
-- from its backup. PRAGMA defer_foreign_keys is prepended as defense-in-depth only
|
|
17
|
+
-- (it does not reliably span the runner's per-statement exec); the DELETE/restore
|
|
18
|
+
-- is the load-bearing fix. The stash/delete/restore is a no-op on an empty/fresh DB.
|
|
19
|
+
PRAGMA defer_foreign_keys = ON;
|
|
20
|
+
CREATE TABLE IF NOT EXISTS content_contributors (
|
|
21
|
+
content_id TEXT NOT NULL,
|
|
22
|
+
author_id TEXT NOT NULL,
|
|
23
|
+
role TEXT,
|
|
24
|
+
position INTEGER NOT NULL DEFAULT 0,
|
|
25
|
+
PRIMARY KEY (content_id, author_id),
|
|
26
|
+
FOREIGN KEY (content_id) REFERENCES content_items(id) ON DELETE CASCADE,
|
|
27
|
+
FOREIGN KEY (author_id) REFERENCES authors(id) ON DELETE CASCADE
|
|
28
|
+
);
|
|
29
|
+
CREATE INDEX IF NOT EXISTS idx_content_contributors_author ON content_contributors(author_id);
|
|
30
|
+
CREATE TABLE content_items_new (
|
|
31
|
+
id TEXT PRIMARY KEY,
|
|
32
|
+
type TEXT NOT NULL CHECK (type IN ('article','video','podcast','newsletter')),
|
|
33
|
+
status TEXT NOT NULL CHECK (status IN ('draft','scheduled','review','published','archived')),
|
|
34
|
+
visibility TEXT NOT NULL CHECK (visibility IN ('free','premium')),
|
|
35
|
+
slug TEXT NOT NULL UNIQUE,
|
|
36
|
+
title TEXT NOT NULL,
|
|
37
|
+
seo_title TEXT,
|
|
38
|
+
description TEXT,
|
|
39
|
+
excerpt TEXT,
|
|
40
|
+
byline TEXT,
|
|
41
|
+
channel TEXT,
|
|
42
|
+
primary_topic TEXT,
|
|
43
|
+
featured INTEGER NOT NULL DEFAULT 0,
|
|
44
|
+
author_id TEXT,
|
|
45
|
+
hero_image_id TEXT,
|
|
46
|
+
hero_image_alt TEXT,
|
|
47
|
+
hero_image_caption TEXT,
|
|
48
|
+
social_image_id TEXT,
|
|
49
|
+
canonical_url TEXT,
|
|
50
|
+
publish_at INTEGER,
|
|
51
|
+
published_at INTEGER,
|
|
52
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
53
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
54
|
+
publish_tz TEXT NOT NULL DEFAULT 'Europe/Paris',
|
|
55
|
+
ai_locked_fields TEXT NOT NULL DEFAULT '[]',
|
|
56
|
+
published_revision_id TEXT,
|
|
57
|
+
deleted_at INTEGER,
|
|
58
|
+
board_position INTEGER,
|
|
59
|
+
FOREIGN KEY (author_id) REFERENCES authors(id)
|
|
60
|
+
);
|
|
61
|
+
INSERT INTO content_items_new (
|
|
62
|
+
id, type, status, visibility, slug, title, seo_title, description, excerpt,
|
|
63
|
+
byline, channel, primary_topic, featured, author_id, hero_image_id,
|
|
64
|
+
hero_image_alt, hero_image_caption, social_image_id, canonical_url,
|
|
65
|
+
publish_at, published_at, created_at, updated_at, publish_tz,
|
|
66
|
+
ai_locked_fields, published_revision_id
|
|
67
|
+
) SELECT
|
|
68
|
+
id, type, status, visibility, slug, title, seo_title, description, excerpt,
|
|
69
|
+
byline, channel, primary_topic, featured, author_id, hero_image_id,
|
|
70
|
+
hero_image_alt, hero_image_caption, social_image_id, canonical_url,
|
|
71
|
+
publish_at, published_at, created_at, updated_at, publish_tz,
|
|
72
|
+
ai_locked_fields, published_revision_id
|
|
73
|
+
FROM content_items;
|
|
74
|
+
CREATE TABLE _cms0002_bk_article_content AS SELECT * FROM article_content;
|
|
75
|
+
CREATE TABLE _cms0002_bk_video_content AS SELECT * FROM video_content;
|
|
76
|
+
CREATE TABLE _cms0002_bk_podcast_content AS SELECT * FROM podcast_content;
|
|
77
|
+
CREATE TABLE _cms0002_bk_content_revisions AS SELECT * FROM content_revisions;
|
|
78
|
+
CREATE TABLE _cms0002_bk_content_tag_links AS SELECT * FROM content_tag_links;
|
|
79
|
+
CREATE TABLE _cms0002_bk_content_relations AS SELECT * FROM content_relations;
|
|
80
|
+
CREATE TABLE _cms0002_bk_content_contributors AS SELECT * FROM content_contributors;
|
|
81
|
+
DELETE FROM article_content;
|
|
82
|
+
DELETE FROM video_content;
|
|
83
|
+
DELETE FROM podcast_content;
|
|
84
|
+
DELETE FROM content_revisions;
|
|
85
|
+
DELETE FROM content_tag_links;
|
|
86
|
+
DELETE FROM content_relations;
|
|
87
|
+
DELETE FROM content_contributors;
|
|
88
|
+
DROP TABLE content_items;
|
|
89
|
+
ALTER TABLE content_items_new RENAME TO content_items;
|
|
90
|
+
INSERT INTO article_content SELECT * FROM _cms0002_bk_article_content;
|
|
91
|
+
INSERT INTO video_content SELECT * FROM _cms0002_bk_video_content;
|
|
92
|
+
INSERT INTO podcast_content SELECT * FROM _cms0002_bk_podcast_content;
|
|
93
|
+
INSERT INTO content_revisions SELECT * FROM _cms0002_bk_content_revisions;
|
|
94
|
+
INSERT INTO content_tag_links SELECT * FROM _cms0002_bk_content_tag_links;
|
|
95
|
+
INSERT INTO content_relations SELECT * FROM _cms0002_bk_content_relations;
|
|
96
|
+
INSERT INTO content_contributors SELECT * FROM _cms0002_bk_content_contributors;
|
|
97
|
+
DROP TABLE _cms0002_bk_article_content;
|
|
98
|
+
DROP TABLE _cms0002_bk_video_content;
|
|
99
|
+
DROP TABLE _cms0002_bk_podcast_content;
|
|
100
|
+
DROP TABLE _cms0002_bk_content_revisions;
|
|
101
|
+
DROP TABLE _cms0002_bk_content_tag_links;
|
|
102
|
+
DROP TABLE _cms0002_bk_content_relations;
|
|
103
|
+
DROP TABLE _cms0002_bk_content_contributors;
|
|
104
|
+
CREATE INDEX idx_content_items_status ON content_items(status);
|
|
105
|
+
CREATE INDEX idx_content_items_type ON content_items(type);
|
|
106
|
+
CREATE INDEX idx_content_items_publish_at ON content_items(publish_at DESC);
|
|
107
|
+
CREATE INDEX idx_content_items_channel ON content_items(channel);
|
|
108
|
+
CREATE INDEX idx_content_items_author_id ON content_items(author_id);
|
|
109
|
+
CREATE INDEX idx_content_items_topic_status_type_published
|
|
110
|
+
ON content_items(primary_topic, status, type, published_at DESC);
|
|
111
|
+
CREATE INDEX idx_content_items_published_at ON content_items(published_at DESC);
|
|
112
|
+
CREATE INDEX idx_content_items_deleted_at ON content_items(deleted_at);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
-- 0003_content_contributors: multi-byline contributor table linking authors to
|
|
2
|
+
-- content with an optional role and a position for ordering.
|
|
3
|
+
-- The ordering column is `position` to match the live prod fronts-data table
|
|
4
|
+
-- (created by Fronts migration 0035) and the Fronts public byline renderer,
|
|
5
|
+
-- which both read/ORDER BY `position`. Because this is CREATE TABLE IF NOT
|
|
6
|
+
-- EXISTS it NO-OPs against that pre-existing prod table.
|
|
7
|
+
CREATE TABLE IF NOT EXISTS content_contributors (
|
|
8
|
+
content_id TEXT NOT NULL,
|
|
9
|
+
author_id TEXT NOT NULL,
|
|
10
|
+
role TEXT,
|
|
11
|
+
position INTEGER NOT NULL DEFAULT 0,
|
|
12
|
+
PRIMARY KEY (content_id, author_id),
|
|
13
|
+
FOREIGN KEY (content_id) REFERENCES content_items(id) ON DELETE CASCADE,
|
|
14
|
+
FOREIGN KEY (author_id) REFERENCES authors(id) ON DELETE CASCADE
|
|
15
|
+
);
|
|
16
|
+
CREATE INDEX IF NOT EXISTS idx_content_contributors_author ON content_contributors(author_id);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
-- 0004_seo_faq_columns: SEO scoring columns on content_items and FAQ storage
|
|
2
|
+
-- on article_content.
|
|
3
|
+
ALTER TABLE content_items ADD COLUMN seo_score INTEGER;
|
|
4
|
+
ALTER TABLE content_items ADD COLUMN seo_focus_keyword TEXT;
|
|
5
|
+
ALTER TABLE content_items ADD COLUMN ai_og_image_id TEXT;
|
|
6
|
+
ALTER TABLE article_content ADD COLUMN faq_json TEXT;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
-- 0005_revision_delta_columns: word-delta tracking and manual label on
|
|
2
|
+
-- content_revisions for the History tab.
|
|
3
|
+
ALTER TABLE content_revisions ADD COLUMN words_added INTEGER;
|
|
4
|
+
ALTER TABLE content_revisions ADD COLUMN words_removed INTEGER;
|
|
5
|
+
ALTER TABLE content_revisions ADD COLUMN tag TEXT;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
-- 0007_content_slug_redirects: redirect table keyed on old_slug for slug
|
|
2
|
+
-- rename history and SEO-safe redirects.
|
|
3
|
+
CREATE TABLE content_slug_redirects (
|
|
4
|
+
old_slug TEXT PRIMARY KEY,
|
|
5
|
+
content_id TEXT NOT NULL,
|
|
6
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
7
|
+
FOREIGN KEY (content_id) REFERENCES content_items(id) ON DELETE CASCADE
|
|
8
|
+
);
|
|
9
|
+
CREATE INDEX idx_content_slug_redirects_content ON content_slug_redirects(content_id);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
-- 0008_workspace_settings
|
|
2
|
+
CREATE TABLE workspace_settings (
|
|
3
|
+
workspace_id TEXT PRIMARY KEY,
|
|
4
|
+
publication_name TEXT,
|
|
5
|
+
tagline TEXT,
|
|
6
|
+
language TEXT NOT NULL DEFAULT 'en',
|
|
7
|
+
timezone TEXT NOT NULL DEFAULT 'Europe/Paris',
|
|
8
|
+
require_review INTEGER NOT NULL DEFAULT 0,
|
|
9
|
+
auto_seo INTEGER NOT NULL DEFAULT 0,
|
|
10
|
+
scheduled_publish INTEGER NOT NULL DEFAULT 1,
|
|
11
|
+
premium_default INTEGER NOT NULL DEFAULT 0,
|
|
12
|
+
accent_color TEXT,
|
|
13
|
+
display_typeface TEXT,
|
|
14
|
+
logo_r2_key TEXT,
|
|
15
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
16
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
17
|
+
);
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
-- 0009_workspace_memberships
|
|
2
|
+
CREATE TABLE masthead_users (
|
|
3
|
+
id TEXT PRIMARY KEY,
|
|
4
|
+
email TEXT NOT NULL UNIQUE,
|
|
5
|
+
name TEXT,
|
|
6
|
+
image TEXT,
|
|
7
|
+
last_login_at INTEGER,
|
|
8
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
9
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
10
|
+
);
|
|
11
|
+
CREATE TABLE workspace_memberships (
|
|
12
|
+
workspace_id TEXT NOT NULL,
|
|
13
|
+
user_id TEXT NOT NULL,
|
|
14
|
+
role TEXT NOT NULL CHECK (role IN ('owner','senior_editor','editor','contributor','producer')),
|
|
15
|
+
invited_by TEXT,
|
|
16
|
+
invited_at INTEGER,
|
|
17
|
+
accepted_at INTEGER,
|
|
18
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
19
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
20
|
+
PRIMARY KEY (workspace_id, user_id)
|
|
21
|
+
);
|
|
22
|
+
CREATE INDEX idx_workspace_memberships_user ON workspace_memberships(user_id);
|
|
23
|
+
CREATE INDEX idx_workspace_memberships_pending ON workspace_memberships(workspace_id, accepted_at);
|
|
24
|
+
CREATE TABLE workspace_invites (
|
|
25
|
+
id TEXT PRIMARY KEY,
|
|
26
|
+
workspace_id TEXT NOT NULL,
|
|
27
|
+
email TEXT NOT NULL,
|
|
28
|
+
role TEXT NOT NULL CHECK (role IN ('owner','senior_editor','editor','contributor','producer')),
|
|
29
|
+
invited_by TEXT NOT NULL,
|
|
30
|
+
token_hash TEXT NOT NULL,
|
|
31
|
+
expires_at INTEGER NOT NULL,
|
|
32
|
+
accepted_at INTEGER,
|
|
33
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
34
|
+
);
|
|
35
|
+
CREATE INDEX idx_workspace_invites_workspace ON workspace_invites(workspace_id);
|
|
36
|
+
CREATE INDEX idx_workspace_invites_token_hash ON workspace_invites(token_hash);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
-- 0010_api_keys_webhooks
|
|
2
|
+
CREATE TABLE cms_api_keys (
|
|
3
|
+
id TEXT PRIMARY KEY,
|
|
4
|
+
workspace_id TEXT NOT NULL,
|
|
5
|
+
name TEXT NOT NULL,
|
|
6
|
+
key_hash TEXT NOT NULL,
|
|
7
|
+
scopes TEXT NOT NULL DEFAULT '[]',
|
|
8
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
9
|
+
last_used INTEGER
|
|
10
|
+
);
|
|
11
|
+
CREATE INDEX idx_cms_api_keys_workspace ON cms_api_keys(workspace_id);
|
|
12
|
+
CREATE TABLE cms_webhooks (
|
|
13
|
+
id TEXT PRIMARY KEY,
|
|
14
|
+
workspace_id TEXT NOT NULL,
|
|
15
|
+
event_type TEXT NOT NULL,
|
|
16
|
+
url TEXT NOT NULL,
|
|
17
|
+
last_status TEXT,
|
|
18
|
+
last_fired_at INTEGER,
|
|
19
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
20
|
+
);
|
|
21
|
+
CREATE INDEX idx_cms_webhooks_workspace ON cms_webhooks(workspace_id, event_type);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
-- 0011_notifications_activity
|
|
2
|
+
CREATE TABLE cms_notifications (
|
|
3
|
+
id TEXT PRIMARY KEY,
|
|
4
|
+
workspace_id TEXT NOT NULL,
|
|
5
|
+
user_id TEXT NOT NULL,
|
|
6
|
+
kind TEXT NOT NULL,
|
|
7
|
+
body TEXT,
|
|
8
|
+
read_at INTEGER,
|
|
9
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
10
|
+
);
|
|
11
|
+
CREATE INDEX idx_cms_notifications_user ON cms_notifications(workspace_id, user_id, read_at);
|
|
12
|
+
CREATE TABLE cms_activity_log (
|
|
13
|
+
id TEXT PRIMARY KEY,
|
|
14
|
+
workspace_id TEXT NOT NULL,
|
|
15
|
+
user_id TEXT,
|
|
16
|
+
action TEXT NOT NULL,
|
|
17
|
+
target_id TEXT,
|
|
18
|
+
target_title TEXT,
|
|
19
|
+
type TEXT,
|
|
20
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
21
|
+
);
|
|
22
|
+
CREATE INDEX idx_cms_activity_log_workspace ON cms_activity_log(workspace_id, created_at);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
-- 0012_content_imports: staging table for external content ingestion
|
|
2
|
+
CREATE TABLE content_imports (
|
|
3
|
+
id TEXT PRIMARY KEY,
|
|
4
|
+
workspace_id TEXT NOT NULL,
|
|
5
|
+
source TEXT NOT NULL,
|
|
6
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
7
|
+
payload_json TEXT,
|
|
8
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
9
|
+
);
|
|
10
|
+
CREATE INDEX idx_content_imports_workspace ON content_imports(workspace_id, status);
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
-- 0013_media_normalization: document public_url as canonical; add lookup index.
|
|
2
|
+
-- Non-destructive: no column changes, no data migration. Both 'audio' and
|
|
3
|
+
-- 'podcast' asset_type values remain valid (podcast = episode, audio = other).
|
|
4
|
+
CREATE INDEX IF NOT EXISTS idx_media_assets_public_url ON media_assets(public_url);
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
-- 0016_content_insights: editorial demand-intelligence board (Content Insights engine).
|
|
2
|
+
-- Three tables materialized per site DB by the Foundry discover.content_insights
|
|
3
|
+
-- capability over the HMAC insights-ingest route (sibling of foundry-callback).
|
|
4
|
+
--
|
|
5
|
+
-- Replace-by-run model: content_insights holds ONLY the current board for a
|
|
6
|
+
-- (site_id, run_date); the ingest route DELETEs by (site_id, run_date) then
|
|
7
|
+
-- bulk-inserts. content_insight_runs is the per-(site_id, run_date) replay guard
|
|
8
|
+
-- (UNIQUE) carrying event_id/run_attempt/generated_at/content_hash. content_insight_dismissals
|
|
9
|
+
-- persists independently of the daily replace, keyed (site_id, intent_key).
|
|
10
|
+
CREATE TABLE content_insights (
|
|
11
|
+
id TEXT PRIMARY KEY,
|
|
12
|
+
site_id TEXT NOT NULL,
|
|
13
|
+
run_id TEXT NOT NULL,
|
|
14
|
+
run_date TEXT NOT NULL,
|
|
15
|
+
desk TEXT NOT NULL,
|
|
16
|
+
suggestion_type TEXT NOT NULL CHECK (suggestion_type IN ('cluster','tracker')),
|
|
17
|
+
signal_type TEXT NOT NULL CHECK (signal_type IN ('demand','opportunity')),
|
|
18
|
+
is_best_bet INTEGER NOT NULL DEFAULT 0,
|
|
19
|
+
best_bet_rank INTEGER,
|
|
20
|
+
desk_rank INTEGER NOT NULL DEFAULT 0,
|
|
21
|
+
headline TEXT NOT NULL,
|
|
22
|
+
evidence TEXT NOT NULL,
|
|
23
|
+
brief TEXT NOT NULL,
|
|
24
|
+
intent_key TEXT NOT NULL,
|
|
25
|
+
beat TEXT CHECK (beat IS NULL OR beat IN ('defense','intelligence','diplomacy','analysis')),
|
|
26
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
27
|
+
);
|
|
28
|
+
CREATE INDEX idx_content_insights_site_run_desk ON content_insights(site_id, run_date, desk);
|
|
29
|
+
CREATE INDEX idx_content_insights_site_intent ON content_insights(site_id, intent_key);
|
|
30
|
+
CREATE TABLE content_insight_runs (
|
|
31
|
+
id TEXT PRIMARY KEY,
|
|
32
|
+
site_id TEXT NOT NULL,
|
|
33
|
+
run_date TEXT NOT NULL,
|
|
34
|
+
status TEXT NOT NULL CHECK (status IN ('running','completed','partial','failed')),
|
|
35
|
+
event_id TEXT NOT NULL,
|
|
36
|
+
run_attempt INTEGER NOT NULL,
|
|
37
|
+
generated_at INTEGER NOT NULL,
|
|
38
|
+
content_hash TEXT NOT NULL,
|
|
39
|
+
demand_count INTEGER NOT NULL DEFAULT 0,
|
|
40
|
+
opportunity_count INTEGER NOT NULL DEFAULT 0,
|
|
41
|
+
started_at INTEGER,
|
|
42
|
+
completed_at INTEGER,
|
|
43
|
+
error TEXT,
|
|
44
|
+
UNIQUE (site_id, run_date)
|
|
45
|
+
);
|
|
46
|
+
CREATE INDEX idx_content_insight_runs_event ON content_insight_runs(event_id);
|
|
47
|
+
CREATE TABLE content_insight_dismissals (
|
|
48
|
+
site_id TEXT NOT NULL,
|
|
49
|
+
intent_key TEXT NOT NULL,
|
|
50
|
+
dismissed_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
51
|
+
dismissed_by TEXT,
|
|
52
|
+
PRIMARY KEY (site_id, intent_key)
|
|
53
|
+
);
|