@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,589 @@
|
|
|
1
|
+
// Programmatic access to the CMS D1 migration contract.
|
|
2
|
+
//
|
|
3
|
+
// The supported adoption path is `wrangler d1 migrations apply <BINDING>`
|
|
4
|
+
// against the package's `migrations/` directory — that is the canonical way a
|
|
5
|
+
// site provisions the schema. This module inlines the same statements so the
|
|
6
|
+
// package's own tests (and any tooling that wants the contract without disk
|
|
7
|
+
// access) can apply them in a Workers runtime where `node:fs` is unavailable.
|
|
8
|
+
//
|
|
9
|
+
// Do not call applyMigrations() from a request handler: applying migrations at
|
|
10
|
+
// request time has D1-session-primary pitfalls and adds cold-start latency. Run
|
|
11
|
+
// the wrangler migration during deploys instead.
|
|
12
|
+
/**
|
|
13
|
+
* The full CMS schema as a single SQL string. Byte-identical in intent to
|
|
14
|
+
* migrations/0001_create_cms_tables.sql. Statements are separated by `;` and
|
|
15
|
+
* may be split with {@link splitStatements} for drivers that require one
|
|
16
|
+
* statement per call (e.g. D1's `exec`).
|
|
17
|
+
*
|
|
18
|
+
* Divergence preserved: `media_assets` timestamps are TEXT `datetime('now')`
|
|
19
|
+
* while content tables are INTEGER `unixepoch()`. Do not normalize.
|
|
20
|
+
*/
|
|
21
|
+
export const CMS_MIGRATION_SQL = `
|
|
22
|
+
CREATE TABLE content_items (
|
|
23
|
+
id TEXT PRIMARY KEY,
|
|
24
|
+
type TEXT NOT NULL CHECK (type IN ('article','video','podcast','newsletter')),
|
|
25
|
+
status TEXT NOT NULL CHECK (status IN ('draft','scheduled','published','archived')),
|
|
26
|
+
visibility TEXT NOT NULL CHECK (visibility IN ('free','premium')),
|
|
27
|
+
slug TEXT NOT NULL UNIQUE,
|
|
28
|
+
title TEXT NOT NULL,
|
|
29
|
+
seo_title TEXT,
|
|
30
|
+
description TEXT,
|
|
31
|
+
excerpt TEXT,
|
|
32
|
+
byline TEXT,
|
|
33
|
+
channel TEXT,
|
|
34
|
+
primary_topic TEXT,
|
|
35
|
+
featured INTEGER NOT NULL DEFAULT 0,
|
|
36
|
+
author_id TEXT,
|
|
37
|
+
hero_image_id TEXT,
|
|
38
|
+
hero_image_alt TEXT,
|
|
39
|
+
hero_image_caption TEXT,
|
|
40
|
+
social_image_id TEXT,
|
|
41
|
+
canonical_url TEXT,
|
|
42
|
+
publish_at INTEGER,
|
|
43
|
+
published_at INTEGER,
|
|
44
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
45
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
46
|
+
publish_tz TEXT NOT NULL DEFAULT 'Europe/Paris',
|
|
47
|
+
ai_locked_fields TEXT NOT NULL DEFAULT '[]',
|
|
48
|
+
published_revision_id TEXT,
|
|
49
|
+
FOREIGN KEY (author_id) REFERENCES authors(id)
|
|
50
|
+
);
|
|
51
|
+
CREATE INDEX idx_content_items_status ON content_items(status);
|
|
52
|
+
CREATE INDEX idx_content_items_type ON content_items(type);
|
|
53
|
+
CREATE INDEX idx_content_items_publish_at ON content_items(publish_at DESC);
|
|
54
|
+
CREATE INDEX idx_content_items_channel ON content_items(channel);
|
|
55
|
+
CREATE INDEX idx_content_items_author_id ON content_items(author_id);
|
|
56
|
+
CREATE INDEX idx_content_items_topic_status_type_published
|
|
57
|
+
ON content_items(primary_topic, status, type, published_at DESC);
|
|
58
|
+
CREATE INDEX idx_content_items_published_at ON content_items(published_at DESC);
|
|
59
|
+
CREATE TABLE article_content (
|
|
60
|
+
content_id TEXT PRIMARY KEY,
|
|
61
|
+
body_markdown TEXT NOT NULL,
|
|
62
|
+
body_html TEXT,
|
|
63
|
+
word_count INTEGER,
|
|
64
|
+
read_time_minutes INTEGER,
|
|
65
|
+
subtitle TEXT,
|
|
66
|
+
ai_takeaways TEXT,
|
|
67
|
+
ai_takeaways_at INTEGER,
|
|
68
|
+
ai_takeaways_model TEXT,
|
|
69
|
+
editor_takeaways TEXT,
|
|
70
|
+
ai_takeaways_correlation_id TEXT,
|
|
71
|
+
faq_correlation_id TEXT,
|
|
72
|
+
faq_generated_at INTEGER,
|
|
73
|
+
faq_model TEXT,
|
|
74
|
+
FOREIGN KEY (content_id) REFERENCES content_items(id) ON DELETE CASCADE
|
|
75
|
+
);
|
|
76
|
+
CREATE TABLE video_content (
|
|
77
|
+
content_id TEXT PRIMARY KEY,
|
|
78
|
+
script TEXT NOT NULL,
|
|
79
|
+
video_id TEXT NOT NULL,
|
|
80
|
+
duration_seconds INTEGER,
|
|
81
|
+
thumbnail_image_id TEXT,
|
|
82
|
+
processing_state TEXT NOT NULL DEFAULT 'pending'
|
|
83
|
+
CHECK (processing_state IN ('pending','queued','fetching','transcribing','transcoding','ready','failed')),
|
|
84
|
+
processing_correlation_id TEXT,
|
|
85
|
+
processing_started_at INTEGER,
|
|
86
|
+
processing_completed_at INTEGER,
|
|
87
|
+
processing_last_event_at INTEGER,
|
|
88
|
+
processing_error TEXT,
|
|
89
|
+
processing_source_url TEXT,
|
|
90
|
+
processing_source_kind TEXT,
|
|
91
|
+
source_fetched INTEGER NOT NULL DEFAULT 0,
|
|
92
|
+
transcript_ready INTEGER NOT NULL DEFAULT 0,
|
|
93
|
+
hls_ready INTEGER NOT NULL DEFAULT 0,
|
|
94
|
+
transcript_url TEXT,
|
|
95
|
+
hls_manifest_url TEXT,
|
|
96
|
+
hls_poster_url TEXT,
|
|
97
|
+
FOREIGN KEY (content_id) REFERENCES content_items(id) ON DELETE CASCADE
|
|
98
|
+
);
|
|
99
|
+
CREATE TABLE podcast_content (
|
|
100
|
+
content_id TEXT PRIMARY KEY,
|
|
101
|
+
transcript TEXT NOT NULL,
|
|
102
|
+
audio_r2_key TEXT NOT NULL,
|
|
103
|
+
duration_seconds INTEGER,
|
|
104
|
+
FOREIGN KEY (content_id) REFERENCES content_items(id) ON DELETE CASCADE
|
|
105
|
+
);
|
|
106
|
+
CREATE TABLE content_revisions (
|
|
107
|
+
id TEXT PRIMARY KEY,
|
|
108
|
+
content_id TEXT NOT NULL,
|
|
109
|
+
payload_json TEXT NOT NULL,
|
|
110
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
111
|
+
created_by TEXT,
|
|
112
|
+
FOREIGN KEY (content_id) REFERENCES content_items(id) ON DELETE CASCADE
|
|
113
|
+
);
|
|
114
|
+
CREATE TABLE content_tags (
|
|
115
|
+
id TEXT PRIMARY KEY,
|
|
116
|
+
slug TEXT NOT NULL UNIQUE,
|
|
117
|
+
label TEXT NOT NULL
|
|
118
|
+
);
|
|
119
|
+
CREATE TABLE content_tag_links (
|
|
120
|
+
content_id TEXT NOT NULL,
|
|
121
|
+
tag_id TEXT NOT NULL,
|
|
122
|
+
PRIMARY KEY (content_id, tag_id),
|
|
123
|
+
FOREIGN KEY (content_id) REFERENCES content_items(id) ON DELETE CASCADE,
|
|
124
|
+
FOREIGN KEY (tag_id) REFERENCES content_tags(id) ON DELETE CASCADE
|
|
125
|
+
);
|
|
126
|
+
CREATE TABLE content_relations (
|
|
127
|
+
content_id TEXT NOT NULL,
|
|
128
|
+
related_id TEXT NOT NULL,
|
|
129
|
+
rank INTEGER NOT NULL DEFAULT 0,
|
|
130
|
+
reason TEXT,
|
|
131
|
+
PRIMARY KEY (content_id, related_id),
|
|
132
|
+
FOREIGN KEY (content_id) REFERENCES content_items(id) ON DELETE CASCADE,
|
|
133
|
+
FOREIGN KEY (related_id) REFERENCES content_items(id) ON DELETE CASCADE
|
|
134
|
+
);
|
|
135
|
+
CREATE TABLE media_assets (
|
|
136
|
+
id TEXT PRIMARY KEY,
|
|
137
|
+
site_id TEXT NOT NULL DEFAULT 'fronts',
|
|
138
|
+
asset_type TEXT NOT NULL DEFAULT 'image',
|
|
139
|
+
source_type TEXT,
|
|
140
|
+
original_filename TEXT,
|
|
141
|
+
status TEXT NOT NULL DEFAULT 'ready',
|
|
142
|
+
object_key TEXT,
|
|
143
|
+
public_url TEXT,
|
|
144
|
+
url TEXT,
|
|
145
|
+
width INTEGER,
|
|
146
|
+
height INTEGER,
|
|
147
|
+
variants_json TEXT,
|
|
148
|
+
r2_binding TEXT,
|
|
149
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
150
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
151
|
+
pinned INTEGER NOT NULL DEFAULT 0
|
|
152
|
+
);
|
|
153
|
+
CREATE INDEX idx_media_assets_site_id ON media_assets(site_id);
|
|
154
|
+
CREATE INDEX idx_media_assets_object_key ON media_assets(object_key);
|
|
155
|
+
CREATE INDEX idx_media_assets_type_status ON media_assets(asset_type, status);
|
|
156
|
+
CREATE INDEX idx_media_assets_pinned_created ON media_assets(pinned DESC, created_at DESC);
|
|
157
|
+
CREATE TABLE authors (
|
|
158
|
+
id TEXT PRIMARY KEY,
|
|
159
|
+
name TEXT NOT NULL,
|
|
160
|
+
slug TEXT NOT NULL UNIQUE,
|
|
161
|
+
bio TEXT,
|
|
162
|
+
avatar TEXT,
|
|
163
|
+
email TEXT,
|
|
164
|
+
social TEXT,
|
|
165
|
+
created_at INTEGER NOT NULL DEFAULT (strftime('%s','now')),
|
|
166
|
+
updated_at INTEGER NOT NULL DEFAULT (strftime('%s','now'))
|
|
167
|
+
);
|
|
168
|
+
CREATE TABLE foundry_callback_events (
|
|
169
|
+
event_id TEXT PRIMARY KEY,
|
|
170
|
+
event_kind TEXT NOT NULL,
|
|
171
|
+
correlation_id TEXT NOT NULL,
|
|
172
|
+
received_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
173
|
+
);
|
|
174
|
+
`;
|
|
175
|
+
/**
|
|
176
|
+
* Split {@link CMS_MIGRATION_SQL} into individual statements. Naive `;`-split is
|
|
177
|
+
* safe here because the contract contains no semicolons inside string literals
|
|
178
|
+
* or triggers. Empty fragments (whitespace/comments) are dropped.
|
|
179
|
+
*/
|
|
180
|
+
export function splitStatements(sql) {
|
|
181
|
+
return sql
|
|
182
|
+
.split(';')
|
|
183
|
+
.map((s) => s.trim())
|
|
184
|
+
.filter((s) => s.length > 0);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Masthead migrations layered on the 0001 baseline (spec §4). Applied in order
|
|
188
|
+
* AFTER CMS_MIGRATION_SQL. Same constraints as the baseline: no `;` inside a
|
|
189
|
+
* string literal or trigger (splitStatements is a naive `;`-split), statements
|
|
190
|
+
* semicolon-terminated, whitespace collapsed before D1 exec. AND: no `--`
|
|
191
|
+
* comments inside an inlined block — the whitespace-collapse would fold a
|
|
192
|
+
* comment onto the same line as the next statement and comment it out (the
|
|
193
|
+
* `.sql` files DO carry a leading `--` header; the alignment test strips it).
|
|
194
|
+
*
|
|
195
|
+
* 0002 is a TABLE REBUILD (D1 can't ALTER a CHECK in place); 0003+ are ADD
|
|
196
|
+
* COLUMN / CREATE TABLE. CRITICAL: seven tables (article_content, video_content,
|
|
197
|
+
* podcast_content, content_revisions, content_tag_links, content_relations, and
|
|
198
|
+
* content_contributors) reference content_items. The package declares those FKs
|
|
199
|
+
* ON DELETE CASCADE, but on the LIVE prod fronts-data DB some of those tables
|
|
200
|
+
* pre-date the package and carry NO `ON DELETE` clause (NO ACTION) — e.g.
|
|
201
|
+
* content_contributors from Fronts legacy migration 0035. The package's own
|
|
202
|
+
* `CREATE TABLE IF NOT EXISTS` NO-OPs against those pre-existing tables, so on
|
|
203
|
+
* prod neither a CASCADE nor a deferred pragma can be relied on to clear the child
|
|
204
|
+
* rows before the parent DROP. With FK enforcement ON (D1's default during apply),
|
|
205
|
+
* `DROP TABLE content_items` is REJECTED while ANY child still references it.
|
|
206
|
+
* So 0002 stashes each child into a `_cms0002_bk_*` table, then EXPLICITLY
|
|
207
|
+
* `DELETE FROM <child>` (clearing NO-ACTION *and* cascade references alike), does
|
|
208
|
+
* the parent rebuild, then restores the children from the stash. The explicit
|
|
209
|
+
* DELETE/restore is the load-bearing, FK-action-independent fix; the prepended
|
|
210
|
+
* `PRAGMA defer_foreign_keys = ON` is defense-in-depth only (it does not reliably
|
|
211
|
+
* span the per-statement exec runner). On an empty DB the stash/delete/restore is
|
|
212
|
+
* a no-op and the temp tables are dropped, so the net table set is unchanged.
|
|
213
|
+
*/
|
|
214
|
+
export const CMS_MIGRATIONS_0002_PLUS = [
|
|
215
|
+
{
|
|
216
|
+
id: '0002_review_softdelete_board',
|
|
217
|
+
sql: `
|
|
218
|
+
PRAGMA defer_foreign_keys = ON;
|
|
219
|
+
CREATE TABLE IF NOT EXISTS content_contributors (
|
|
220
|
+
content_id TEXT NOT NULL,
|
|
221
|
+
author_id TEXT NOT NULL,
|
|
222
|
+
role TEXT,
|
|
223
|
+
position INTEGER NOT NULL DEFAULT 0,
|
|
224
|
+
PRIMARY KEY (content_id, author_id),
|
|
225
|
+
FOREIGN KEY (content_id) REFERENCES content_items(id) ON DELETE CASCADE,
|
|
226
|
+
FOREIGN KEY (author_id) REFERENCES authors(id) ON DELETE CASCADE
|
|
227
|
+
);
|
|
228
|
+
CREATE INDEX IF NOT EXISTS idx_content_contributors_author ON content_contributors(author_id);
|
|
229
|
+
CREATE TABLE content_items_new (
|
|
230
|
+
id TEXT PRIMARY KEY,
|
|
231
|
+
type TEXT NOT NULL CHECK (type IN ('article','video','podcast','newsletter')),
|
|
232
|
+
status TEXT NOT NULL CHECK (status IN ('draft','scheduled','review','published','archived')),
|
|
233
|
+
visibility TEXT NOT NULL CHECK (visibility IN ('free','premium')),
|
|
234
|
+
slug TEXT NOT NULL UNIQUE,
|
|
235
|
+
title TEXT NOT NULL,
|
|
236
|
+
seo_title TEXT,
|
|
237
|
+
description TEXT,
|
|
238
|
+
excerpt TEXT,
|
|
239
|
+
byline TEXT,
|
|
240
|
+
channel TEXT,
|
|
241
|
+
primary_topic TEXT,
|
|
242
|
+
featured INTEGER NOT NULL DEFAULT 0,
|
|
243
|
+
author_id TEXT,
|
|
244
|
+
hero_image_id TEXT,
|
|
245
|
+
hero_image_alt TEXT,
|
|
246
|
+
hero_image_caption TEXT,
|
|
247
|
+
social_image_id TEXT,
|
|
248
|
+
canonical_url TEXT,
|
|
249
|
+
publish_at INTEGER,
|
|
250
|
+
published_at INTEGER,
|
|
251
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
252
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
253
|
+
publish_tz TEXT NOT NULL DEFAULT 'Europe/Paris',
|
|
254
|
+
ai_locked_fields TEXT NOT NULL DEFAULT '[]',
|
|
255
|
+
published_revision_id TEXT,
|
|
256
|
+
deleted_at INTEGER,
|
|
257
|
+
board_position INTEGER,
|
|
258
|
+
FOREIGN KEY (author_id) REFERENCES authors(id)
|
|
259
|
+
);
|
|
260
|
+
INSERT INTO content_items_new (
|
|
261
|
+
id, type, status, visibility, slug, title, seo_title, description, excerpt,
|
|
262
|
+
byline, channel, primary_topic, featured, author_id, hero_image_id,
|
|
263
|
+
hero_image_alt, hero_image_caption, social_image_id, canonical_url,
|
|
264
|
+
publish_at, published_at, created_at, updated_at, publish_tz,
|
|
265
|
+
ai_locked_fields, published_revision_id
|
|
266
|
+
) SELECT
|
|
267
|
+
id, type, status, visibility, slug, title, seo_title, description, excerpt,
|
|
268
|
+
byline, channel, primary_topic, featured, author_id, hero_image_id,
|
|
269
|
+
hero_image_alt, hero_image_caption, social_image_id, canonical_url,
|
|
270
|
+
publish_at, published_at, created_at, updated_at, publish_tz,
|
|
271
|
+
ai_locked_fields, published_revision_id
|
|
272
|
+
FROM content_items;
|
|
273
|
+
CREATE TABLE _cms0002_bk_article_content AS SELECT * FROM article_content;
|
|
274
|
+
CREATE TABLE _cms0002_bk_video_content AS SELECT * FROM video_content;
|
|
275
|
+
CREATE TABLE _cms0002_bk_podcast_content AS SELECT * FROM podcast_content;
|
|
276
|
+
CREATE TABLE _cms0002_bk_content_revisions AS SELECT * FROM content_revisions;
|
|
277
|
+
CREATE TABLE _cms0002_bk_content_tag_links AS SELECT * FROM content_tag_links;
|
|
278
|
+
CREATE TABLE _cms0002_bk_content_relations AS SELECT * FROM content_relations;
|
|
279
|
+
CREATE TABLE _cms0002_bk_content_contributors AS SELECT * FROM content_contributors;
|
|
280
|
+
DELETE FROM article_content;
|
|
281
|
+
DELETE FROM video_content;
|
|
282
|
+
DELETE FROM podcast_content;
|
|
283
|
+
DELETE FROM content_revisions;
|
|
284
|
+
DELETE FROM content_tag_links;
|
|
285
|
+
DELETE FROM content_relations;
|
|
286
|
+
DELETE FROM content_contributors;
|
|
287
|
+
DROP TABLE content_items;
|
|
288
|
+
ALTER TABLE content_items_new RENAME TO content_items;
|
|
289
|
+
INSERT INTO article_content SELECT * FROM _cms0002_bk_article_content;
|
|
290
|
+
INSERT INTO video_content SELECT * FROM _cms0002_bk_video_content;
|
|
291
|
+
INSERT INTO podcast_content SELECT * FROM _cms0002_bk_podcast_content;
|
|
292
|
+
INSERT INTO content_revisions SELECT * FROM _cms0002_bk_content_revisions;
|
|
293
|
+
INSERT INTO content_tag_links SELECT * FROM _cms0002_bk_content_tag_links;
|
|
294
|
+
INSERT INTO content_relations SELECT * FROM _cms0002_bk_content_relations;
|
|
295
|
+
INSERT INTO content_contributors SELECT * FROM _cms0002_bk_content_contributors;
|
|
296
|
+
DROP TABLE _cms0002_bk_article_content;
|
|
297
|
+
DROP TABLE _cms0002_bk_video_content;
|
|
298
|
+
DROP TABLE _cms0002_bk_podcast_content;
|
|
299
|
+
DROP TABLE _cms0002_bk_content_revisions;
|
|
300
|
+
DROP TABLE _cms0002_bk_content_tag_links;
|
|
301
|
+
DROP TABLE _cms0002_bk_content_relations;
|
|
302
|
+
DROP TABLE _cms0002_bk_content_contributors;
|
|
303
|
+
CREATE INDEX idx_content_items_status ON content_items(status);
|
|
304
|
+
CREATE INDEX idx_content_items_type ON content_items(type);
|
|
305
|
+
CREATE INDEX idx_content_items_publish_at ON content_items(publish_at DESC);
|
|
306
|
+
CREATE INDEX idx_content_items_channel ON content_items(channel);
|
|
307
|
+
CREATE INDEX idx_content_items_author_id ON content_items(author_id);
|
|
308
|
+
CREATE INDEX idx_content_items_topic_status_type_published
|
|
309
|
+
ON content_items(primary_topic, status, type, published_at DESC);
|
|
310
|
+
CREATE INDEX idx_content_items_published_at ON content_items(published_at DESC);
|
|
311
|
+
CREATE INDEX idx_content_items_deleted_at ON content_items(deleted_at);
|
|
312
|
+
`,
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
id: '0003_content_contributors',
|
|
316
|
+
sql: `
|
|
317
|
+
CREATE TABLE IF NOT EXISTS content_contributors (
|
|
318
|
+
content_id TEXT NOT NULL,
|
|
319
|
+
author_id TEXT NOT NULL,
|
|
320
|
+
role TEXT,
|
|
321
|
+
position INTEGER NOT NULL DEFAULT 0,
|
|
322
|
+
PRIMARY KEY (content_id, author_id),
|
|
323
|
+
FOREIGN KEY (content_id) REFERENCES content_items(id) ON DELETE CASCADE,
|
|
324
|
+
FOREIGN KEY (author_id) REFERENCES authors(id) ON DELETE CASCADE
|
|
325
|
+
);
|
|
326
|
+
CREATE INDEX IF NOT EXISTS idx_content_contributors_author ON content_contributors(author_id);
|
|
327
|
+
`,
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
id: '0004_seo_faq_columns',
|
|
331
|
+
sql: `
|
|
332
|
+
ALTER TABLE content_items ADD COLUMN seo_score INTEGER;
|
|
333
|
+
ALTER TABLE content_items ADD COLUMN seo_focus_keyword TEXT;
|
|
334
|
+
ALTER TABLE content_items ADD COLUMN ai_og_image_id TEXT;
|
|
335
|
+
ALTER TABLE article_content ADD COLUMN faq_json TEXT;
|
|
336
|
+
`,
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
id: '0005_revision_delta_columns',
|
|
340
|
+
sql: `
|
|
341
|
+
ALTER TABLE content_revisions ADD COLUMN words_added INTEGER;
|
|
342
|
+
ALTER TABLE content_revisions ADD COLUMN words_removed INTEGER;
|
|
343
|
+
ALTER TABLE content_revisions ADD COLUMN tag TEXT;
|
|
344
|
+
`,
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
id: '0006_processing_trigger_token',
|
|
348
|
+
sql: `
|
|
349
|
+
ALTER TABLE video_content ADD COLUMN processing_trigger_token TEXT;
|
|
350
|
+
ALTER TABLE podcast_content ADD COLUMN processing_trigger_token TEXT;
|
|
351
|
+
`,
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
id: '0007_content_slug_redirects',
|
|
355
|
+
sql: `
|
|
356
|
+
CREATE TABLE content_slug_redirects (
|
|
357
|
+
old_slug TEXT PRIMARY KEY,
|
|
358
|
+
content_id TEXT NOT NULL,
|
|
359
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
360
|
+
FOREIGN KEY (content_id) REFERENCES content_items(id) ON DELETE CASCADE
|
|
361
|
+
);
|
|
362
|
+
CREATE INDEX idx_content_slug_redirects_content ON content_slug_redirects(content_id);
|
|
363
|
+
`,
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
id: '0008_workspace_settings',
|
|
367
|
+
sql: `
|
|
368
|
+
CREATE TABLE workspace_settings (
|
|
369
|
+
workspace_id TEXT PRIMARY KEY,
|
|
370
|
+
publication_name TEXT,
|
|
371
|
+
tagline TEXT,
|
|
372
|
+
language TEXT NOT NULL DEFAULT 'en',
|
|
373
|
+
timezone TEXT NOT NULL DEFAULT 'Europe/Paris',
|
|
374
|
+
require_review INTEGER NOT NULL DEFAULT 0,
|
|
375
|
+
auto_seo INTEGER NOT NULL DEFAULT 0,
|
|
376
|
+
scheduled_publish INTEGER NOT NULL DEFAULT 1,
|
|
377
|
+
premium_default INTEGER NOT NULL DEFAULT 0,
|
|
378
|
+
accent_color TEXT,
|
|
379
|
+
display_typeface TEXT,
|
|
380
|
+
logo_r2_key TEXT,
|
|
381
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
382
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
383
|
+
);
|
|
384
|
+
`,
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
id: '0009_workspace_memberships',
|
|
388
|
+
sql: `
|
|
389
|
+
CREATE TABLE masthead_users (
|
|
390
|
+
id TEXT PRIMARY KEY,
|
|
391
|
+
email TEXT NOT NULL UNIQUE,
|
|
392
|
+
name TEXT,
|
|
393
|
+
image TEXT,
|
|
394
|
+
last_login_at INTEGER,
|
|
395
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
396
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
397
|
+
);
|
|
398
|
+
CREATE TABLE workspace_memberships (
|
|
399
|
+
workspace_id TEXT NOT NULL,
|
|
400
|
+
user_id TEXT NOT NULL,
|
|
401
|
+
role TEXT NOT NULL CHECK (role IN ('owner','senior_editor','editor','contributor','producer')),
|
|
402
|
+
invited_by TEXT,
|
|
403
|
+
invited_at INTEGER,
|
|
404
|
+
accepted_at INTEGER,
|
|
405
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
406
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
407
|
+
PRIMARY KEY (workspace_id, user_id)
|
|
408
|
+
);
|
|
409
|
+
CREATE INDEX idx_workspace_memberships_user ON workspace_memberships(user_id);
|
|
410
|
+
CREATE INDEX idx_workspace_memberships_pending ON workspace_memberships(workspace_id, accepted_at);
|
|
411
|
+
CREATE TABLE workspace_invites (
|
|
412
|
+
id TEXT PRIMARY KEY,
|
|
413
|
+
workspace_id TEXT NOT NULL,
|
|
414
|
+
email TEXT NOT NULL,
|
|
415
|
+
role TEXT NOT NULL CHECK (role IN ('owner','senior_editor','editor','contributor','producer')),
|
|
416
|
+
invited_by TEXT NOT NULL,
|
|
417
|
+
token_hash TEXT NOT NULL,
|
|
418
|
+
expires_at INTEGER NOT NULL,
|
|
419
|
+
accepted_at INTEGER,
|
|
420
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
421
|
+
);
|
|
422
|
+
CREATE INDEX idx_workspace_invites_workspace ON workspace_invites(workspace_id);
|
|
423
|
+
CREATE INDEX idx_workspace_invites_token_hash ON workspace_invites(token_hash);
|
|
424
|
+
`,
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
id: '0010_api_keys_webhooks',
|
|
428
|
+
sql: `
|
|
429
|
+
CREATE TABLE cms_api_keys (
|
|
430
|
+
id TEXT PRIMARY KEY,
|
|
431
|
+
workspace_id TEXT NOT NULL,
|
|
432
|
+
name TEXT NOT NULL,
|
|
433
|
+
key_hash TEXT NOT NULL,
|
|
434
|
+
scopes TEXT NOT NULL DEFAULT '[]',
|
|
435
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
436
|
+
last_used INTEGER
|
|
437
|
+
);
|
|
438
|
+
CREATE INDEX idx_cms_api_keys_workspace ON cms_api_keys(workspace_id);
|
|
439
|
+
CREATE TABLE cms_webhooks (
|
|
440
|
+
id TEXT PRIMARY KEY,
|
|
441
|
+
workspace_id TEXT NOT NULL,
|
|
442
|
+
event_type TEXT NOT NULL,
|
|
443
|
+
url TEXT NOT NULL,
|
|
444
|
+
last_status TEXT,
|
|
445
|
+
last_fired_at INTEGER,
|
|
446
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
447
|
+
);
|
|
448
|
+
CREATE INDEX idx_cms_webhooks_workspace ON cms_webhooks(workspace_id, event_type);
|
|
449
|
+
`,
|
|
450
|
+
},
|
|
451
|
+
{
|
|
452
|
+
id: '0011_notifications_activity',
|
|
453
|
+
sql: `
|
|
454
|
+
CREATE TABLE cms_notifications (
|
|
455
|
+
id TEXT PRIMARY KEY,
|
|
456
|
+
workspace_id TEXT NOT NULL,
|
|
457
|
+
user_id TEXT NOT NULL,
|
|
458
|
+
kind TEXT NOT NULL,
|
|
459
|
+
body TEXT,
|
|
460
|
+
read_at INTEGER,
|
|
461
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
462
|
+
);
|
|
463
|
+
CREATE INDEX idx_cms_notifications_user ON cms_notifications(workspace_id, user_id, read_at);
|
|
464
|
+
CREATE TABLE cms_activity_log (
|
|
465
|
+
id TEXT PRIMARY KEY,
|
|
466
|
+
workspace_id TEXT NOT NULL,
|
|
467
|
+
user_id TEXT,
|
|
468
|
+
action TEXT NOT NULL,
|
|
469
|
+
target_id TEXT,
|
|
470
|
+
target_title TEXT,
|
|
471
|
+
type TEXT,
|
|
472
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
473
|
+
);
|
|
474
|
+
CREATE INDEX idx_cms_activity_log_workspace ON cms_activity_log(workspace_id, created_at);
|
|
475
|
+
`,
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
id: '0012_content_imports',
|
|
479
|
+
sql: `
|
|
480
|
+
CREATE TABLE content_imports (
|
|
481
|
+
id TEXT PRIMARY KEY,
|
|
482
|
+
workspace_id TEXT NOT NULL,
|
|
483
|
+
source TEXT NOT NULL,
|
|
484
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
485
|
+
payload_json TEXT,
|
|
486
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
487
|
+
);
|
|
488
|
+
CREATE INDEX idx_content_imports_workspace ON content_imports(workspace_id, status);
|
|
489
|
+
`,
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
id: '0013_media_normalization',
|
|
493
|
+
sql: `
|
|
494
|
+
CREATE INDEX IF NOT EXISTS idx_media_assets_public_url ON media_assets(public_url);
|
|
495
|
+
`,
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
// Adds key_prefix to cms_api_keys so masked display can show '<prefix>••••<last4>'
|
|
499
|
+
// without storing the raw key or a reversible value. Additive / reversible.
|
|
500
|
+
id: '0014_api_key_prefix',
|
|
501
|
+
sql: `
|
|
502
|
+
ALTER TABLE cms_api_keys ADD COLUMN key_prefix TEXT;
|
|
503
|
+
`,
|
|
504
|
+
},
|
|
505
|
+
{
|
|
506
|
+
id: '0015_cms_topics',
|
|
507
|
+
sql: `
|
|
508
|
+
CREATE TABLE cms_topics (
|
|
509
|
+
slug TEXT PRIMARY KEY,
|
|
510
|
+
label TEXT NOT NULL,
|
|
511
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
512
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
513
|
+
);
|
|
514
|
+
CREATE INDEX idx_cms_topics_label ON cms_topics(label);
|
|
515
|
+
`,
|
|
516
|
+
},
|
|
517
|
+
{
|
|
518
|
+
id: '0016_content_insights',
|
|
519
|
+
sql: `
|
|
520
|
+
CREATE TABLE content_insights (
|
|
521
|
+
id TEXT PRIMARY KEY,
|
|
522
|
+
site_id TEXT NOT NULL,
|
|
523
|
+
run_id TEXT NOT NULL,
|
|
524
|
+
run_date TEXT NOT NULL,
|
|
525
|
+
desk TEXT NOT NULL,
|
|
526
|
+
suggestion_type TEXT NOT NULL CHECK (suggestion_type IN ('cluster','tracker')),
|
|
527
|
+
signal_type TEXT NOT NULL CHECK (signal_type IN ('demand','opportunity')),
|
|
528
|
+
is_best_bet INTEGER NOT NULL DEFAULT 0,
|
|
529
|
+
best_bet_rank INTEGER,
|
|
530
|
+
desk_rank INTEGER NOT NULL DEFAULT 0,
|
|
531
|
+
headline TEXT NOT NULL,
|
|
532
|
+
evidence TEXT NOT NULL,
|
|
533
|
+
brief TEXT NOT NULL,
|
|
534
|
+
intent_key TEXT NOT NULL,
|
|
535
|
+
beat TEXT CHECK (beat IS NULL OR beat IN ('defense','intelligence','diplomacy','analysis')),
|
|
536
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
537
|
+
);
|
|
538
|
+
CREATE INDEX idx_content_insights_site_run_desk ON content_insights(site_id, run_date, desk);
|
|
539
|
+
CREATE INDEX idx_content_insights_site_intent ON content_insights(site_id, intent_key);
|
|
540
|
+
CREATE TABLE content_insight_runs (
|
|
541
|
+
id TEXT PRIMARY KEY,
|
|
542
|
+
site_id TEXT NOT NULL,
|
|
543
|
+
run_date TEXT NOT NULL,
|
|
544
|
+
status TEXT NOT NULL CHECK (status IN ('running','completed','partial','failed')),
|
|
545
|
+
event_id TEXT NOT NULL,
|
|
546
|
+
run_attempt INTEGER NOT NULL,
|
|
547
|
+
generated_at INTEGER NOT NULL,
|
|
548
|
+
content_hash TEXT NOT NULL,
|
|
549
|
+
demand_count INTEGER NOT NULL DEFAULT 0,
|
|
550
|
+
opportunity_count INTEGER NOT NULL DEFAULT 0,
|
|
551
|
+
started_at INTEGER,
|
|
552
|
+
completed_at INTEGER,
|
|
553
|
+
error TEXT,
|
|
554
|
+
UNIQUE (site_id, run_date)
|
|
555
|
+
);
|
|
556
|
+
CREATE INDEX idx_content_insight_runs_event ON content_insight_runs(event_id);
|
|
557
|
+
CREATE TABLE content_insight_dismissals (
|
|
558
|
+
site_id TEXT NOT NULL,
|
|
559
|
+
intent_key TEXT NOT NULL,
|
|
560
|
+
dismissed_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
561
|
+
dismissed_by TEXT,
|
|
562
|
+
PRIMARY KEY (site_id, intent_key)
|
|
563
|
+
);
|
|
564
|
+
`,
|
|
565
|
+
},
|
|
566
|
+
];
|
|
567
|
+
/**
|
|
568
|
+
* Apply the CMS schema to a D1 database one statement at a time. D1's `exec`
|
|
569
|
+
* is newline-sensitive (it treats each line as a complete statement), so each
|
|
570
|
+
* statement is flattened to a single line first. Intended for tests and
|
|
571
|
+
* provisioning tooling, NOT request-time use. Prefer
|
|
572
|
+
* `wrangler d1 migrations apply` for real deploys.
|
|
573
|
+
*/
|
|
574
|
+
export async function applyMigrations(db) {
|
|
575
|
+
for (const statement of splitStatements(CMS_MIGRATION_SQL)) {
|
|
576
|
+
// Collapse internal whitespace/newlines so D1's per-line exec parser sees
|
|
577
|
+
// one complete statement.
|
|
578
|
+
await db.exec(`${statement.replace(/\s+/g, ' ').trim()};`);
|
|
579
|
+
}
|
|
580
|
+
for (const migration of CMS_MIGRATIONS_0002_PLUS) {
|
|
581
|
+
for (const statement of splitStatements(migration.sql)) {
|
|
582
|
+
await db.exec(`${statement.replace(/\s+/g, ' ').trim()};`);
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
// Re-export the table list so consumers can `import { CMS_TABLES } from
|
|
587
|
+
// '@growth-labs/cms/schema'` alongside the migration helpers.
|
|
588
|
+
export { CMS_TABLES } from './tables.js';
|
|
589
|
+
//# sourceMappingURL=migrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/schema/migrations.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,EAAE;AACF,0EAA0E;AAC1E,8EAA8E;AAC9E,6EAA6E;AAC7E,4EAA4E;AAC5E,8EAA8E;AAC9E,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,iDAAiD;AAEjD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyJhC,CAAA;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IAC1C,OAAO,GAAG;SACR,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AAC9B,CAAC;AAOD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAkC;IACtE;QACC,EAAE,EAAE,8BAA8B;QAClC,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+FN;KACC;IACD;QACC,EAAE,EAAE,2BAA2B;QAC/B,GAAG,EAAE;;;;;;;;;;;CAWN;KACC;IACD;QACC,EAAE,EAAE,sBAAsB;QAC1B,GAAG,EAAE;;;;;CAKN;KACC;IACD;QACC,EAAE,EAAE,6BAA6B;QACjC,GAAG,EAAE;;;;CAIN;KACC;IACD;QACC,EAAE,EAAE,+BAA+B;QACnC,GAAG,EAAE;;;CAGN;KACC;IACD;QACC,EAAE,EAAE,6BAA6B;QACjC,GAAG,EAAE;;;;;;;;CAQN;KACC;IACD;QACC,EAAE,EAAE,yBAAyB;QAC7B,GAAG,EAAE;;;;;;;;;;;;;;;;;CAiBN;KACC;IACD;QACC,EAAE,EAAE,4BAA4B;QAChC,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCN;KACC;IACD;QACC,EAAE,EAAE,wBAAwB;QAC5B,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;CAqBN;KACC;IACD;QACC,EAAE,EAAE,6BAA6B;QACjC,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;CAsBN;KACC;IACD;QACC,EAAE,EAAE,sBAAsB;QAC1B,GAAG,EAAE;;;;;;;;;;CAUN;KACC;IACD;QACC,EAAE,EAAE,0BAA0B;QAC9B,GAAG,EAAE;;CAEN;KACC;IACD;QACC,mFAAmF;QACnF,4EAA4E;QAC5E,EAAE,EAAE,qBAAqB;QACzB,GAAG,EAAE;;CAEN;KACC;IACD;QACC,EAAE,EAAE,iBAAiB;QACrB,GAAG,EAAE;;;;;;;;CAQN;KACC;IACD;QACC,EAAE,EAAE,uBAAuB;QAC3B,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6CN;KACC;CACD,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EAAU;IAC/C,KAAK,MAAM,SAAS,IAAI,eAAe,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC5D,0EAA0E;QAC1E,0BAA0B;QAC1B,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC3D,CAAC;IACD,KAAK,MAAM,SAAS,IAAI,wBAAwB,EAAE,CAAC;QAClD,KAAK,MAAM,SAAS,IAAI,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAC3D,CAAC;IACF,CAAC;AACF,CAAC;AAGD,wEAAwE;AACxE,8DAA8D;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Every table name in the CMS D1 contract, in migration creation order. */
|
|
2
|
+
export declare const CMS_TABLES: readonly ["content_items", "article_content", "video_content", "podcast_content", "content_revisions", "content_tags", "content_tag_links", "content_relations", "media_assets", "authors", "foundry_callback_events", "content_contributors", "content_slug_redirects", "workspace_settings", "masthead_users", "workspace_memberships", "workspace_invites", "cms_api_keys", "cms_webhooks", "cms_notifications", "cms_activity_log", "content_imports", "cms_topics", "content_insights", "content_insight_runs", "content_insight_dismissals"];
|
|
3
|
+
export type CmsTableName = (typeof CMS_TABLES)[number];
|
|
4
|
+
/**
|
|
5
|
+
* Tables that are explicitly NOT part of the CMS contract. Kept as a named
|
|
6
|
+
* negative-space assertion: the package must never create these — they are
|
|
7
|
+
* identity/entitlement-owned or analytics-owned. Used by the contract test to
|
|
8
|
+
* fail loudly if the boundary erodes.
|
|
9
|
+
*/
|
|
10
|
+
export declare const NON_CMS_TABLES: readonly ["gl_content_progress", "users", "subscriptions", "gl_identity_links"];
|
|
11
|
+
//# sourceMappingURL=tables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../src/schema/tables.ts"],"names":[],"mappings":"AASA,4EAA4E;AAC5E,eAAO,MAAM,UAAU,ohBA+Bb,CAAA;AAEV,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,iFAOjB,CAAA"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// The 11-table content/revision/media/authors/foundry-callback contract that
|
|
2
|
+
// `@growth-labs/cms` owns. Verified against prod `fronts-data` 2026-05-29.
|
|
3
|
+
//
|
|
4
|
+
// This list is the CMS boundary made executable: it is exactly the tables the
|
|
5
|
+
// package migration creates and nothing else. Identity/entitlement tables
|
|
6
|
+
// (users, subscription*, *_entitlements, gl_identity_links, CRM, mailer) and the
|
|
7
|
+
// analytics-owned `gl_content_progress` are deliberately absent — they belong to
|
|
8
|
+
// other workstreams. See docs/log/2026-05-29-cms-extraction-inventory.md.
|
|
9
|
+
/** Every table name in the CMS D1 contract, in migration creation order. */
|
|
10
|
+
export const CMS_TABLES = [
|
|
11
|
+
'content_items',
|
|
12
|
+
'article_content',
|
|
13
|
+
'video_content',
|
|
14
|
+
'podcast_content',
|
|
15
|
+
'content_revisions',
|
|
16
|
+
'content_tags',
|
|
17
|
+
'content_tag_links',
|
|
18
|
+
'content_relations',
|
|
19
|
+
'media_assets',
|
|
20
|
+
'authors',
|
|
21
|
+
'foundry_callback_events',
|
|
22
|
+
'content_contributors',
|
|
23
|
+
'content_slug_redirects',
|
|
24
|
+
// Masthead platform tables (migrations 0008–0011)
|
|
25
|
+
'workspace_settings',
|
|
26
|
+
'masthead_users',
|
|
27
|
+
'workspace_memberships',
|
|
28
|
+
'workspace_invites',
|
|
29
|
+
'cms_api_keys',
|
|
30
|
+
'cms_webhooks',
|
|
31
|
+
'cms_notifications',
|
|
32
|
+
'cms_activity_log',
|
|
33
|
+
// Content import staging (migration 0012)
|
|
34
|
+
'content_imports',
|
|
35
|
+
// Standalone taxonomy rows for zero-count topics (migration 0015)
|
|
36
|
+
'cms_topics',
|
|
37
|
+
// Content Insights demand-intelligence board (migration 0016)
|
|
38
|
+
'content_insights',
|
|
39
|
+
'content_insight_runs',
|
|
40
|
+
'content_insight_dismissals',
|
|
41
|
+
];
|
|
42
|
+
/**
|
|
43
|
+
* Tables that are explicitly NOT part of the CMS contract. Kept as a named
|
|
44
|
+
* negative-space assertion: the package must never create these — they are
|
|
45
|
+
* identity/entitlement-owned or analytics-owned. Used by the contract test to
|
|
46
|
+
* fail loudly if the boundary erodes.
|
|
47
|
+
*/
|
|
48
|
+
export const NON_CMS_TABLES = [
|
|
49
|
+
// analytics-owned
|
|
50
|
+
'gl_content_progress',
|
|
51
|
+
// identity / entitlement / CRM / mailer-owned
|
|
52
|
+
'users',
|
|
53
|
+
'subscriptions',
|
|
54
|
+
'gl_identity_links',
|
|
55
|
+
];
|
|
56
|
+
//# sourceMappingURL=tables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tables.js","sourceRoot":"","sources":["../../src/schema/tables.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,2EAA2E;AAC3E,EAAE;AACF,8EAA8E;AAC9E,0EAA0E;AAC1E,iFAAiF;AACjF,iFAAiF;AACjF,0EAA0E;AAE1E,4EAA4E;AAC5E,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,eAAe;IACf,iBAAiB;IACjB,eAAe;IACf,iBAAiB;IACjB,mBAAmB;IACnB,cAAc;IACd,mBAAmB;IACnB,mBAAmB;IACnB,cAAc;IACd,SAAS;IACT,yBAAyB;IACzB,sBAAsB;IACtB,wBAAwB;IACxB,kDAAkD;IAClD,oBAAoB;IACpB,gBAAgB;IAChB,uBAAuB;IACvB,mBAAmB;IACnB,cAAc;IACd,cAAc;IACd,mBAAmB;IACnB,kBAAkB;IAClB,0CAA0C;IAC1C,iBAAiB;IACjB,kEAAkE;IAClE,YAAY;IACZ,8DAA8D;IAC9D,kBAAkB;IAClB,sBAAsB;IACtB,4BAA4B;CACnB,CAAA;AAIV;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,kBAAkB;IAClB,qBAAqB;IACrB,8CAA8C;IAC9C,OAAO;IACP,eAAe;IACf,mBAAmB;CACV,CAAA"}
|