@forumone/throughline 0.0.0-stage → 1.0.0-next.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/CHANGELOG.md +584 -0
- package/LICENSE +21 -0
- package/README.md +351 -2
- package/bin/payload-cli.mjs +443 -0
- package/bin/throughline-payload.mjs +6 -0
- package/dist/access/coreCollections.d.ts +18 -0
- package/dist/access/coreCollections.d.ts.map +1 -0
- package/dist/access/coreCollections.js +56 -0
- package/dist/access/coreCollections.js.map +1 -0
- package/dist/approvals/collection.d.ts +21 -0
- package/dist/approvals/collection.d.ts.map +1 -0
- package/dist/approvals/collection.js +99 -0
- package/dist/approvals/collection.js.map +1 -0
- package/dist/approvals/endpoints/action.d.ts +31 -0
- package/dist/approvals/endpoints/action.d.ts.map +1 -0
- package/dist/approvals/endpoints/action.js +205 -0
- package/dist/approvals/endpoints/action.js.map +1 -0
- package/dist/approvals/index.d.ts +19 -0
- package/dist/approvals/index.d.ts.map +1 -0
- package/dist/approvals/index.js +13 -0
- package/dist/approvals/index.js.map +1 -0
- package/dist/approvals/jobs/expire-stale-approvals.d.ts +14 -0
- package/dist/approvals/jobs/expire-stale-approvals.d.ts.map +1 -0
- package/dist/approvals/jobs/expire-stale-approvals.js +101 -0
- package/dist/approvals/jobs/expire-stale-approvals.js.map +1 -0
- package/dist/approvals/options.d.ts +76 -0
- package/dist/approvals/options.d.ts.map +1 -0
- package/dist/approvals/options.js +47 -0
- package/dist/approvals/options.js.map +1 -0
- package/dist/approvals/plugin.d.ts +4 -0
- package/dist/approvals/plugin.d.ts.map +1 -0
- package/dist/approvals/plugin.js +92 -0
- package/dist/approvals/plugin.js.map +1 -0
- package/dist/approvals/resolver.d.ts +18 -0
- package/dist/approvals/resolver.d.ts.map +1 -0
- package/dist/approvals/resolver.js +57 -0
- package/dist/approvals/resolver.js.map +1 -0
- package/dist/approvals/symbol.d.ts +12 -0
- package/dist/approvals/symbol.d.ts.map +1 -0
- package/dist/approvals/symbol.js +12 -0
- package/dist/approvals/symbol.js.map +1 -0
- package/dist/approvals/tokens.d.ts +48 -0
- package/dist/approvals/tokens.d.ts.map +1 -0
- package/dist/approvals/tokens.js +123 -0
- package/dist/approvals/tokens.js.map +1 -0
- package/dist/approvals/tools/descriptors.d.ts +26 -0
- package/dist/approvals/tools/descriptors.d.ts.map +1 -0
- package/dist/approvals/tools/descriptors.js +35 -0
- package/dist/approvals/tools/descriptors.js.map +1 -0
- package/dist/approvals/tools/get-approval-status.d.ts +11 -0
- package/dist/approvals/tools/get-approval-status.d.ts.map +1 -0
- package/dist/approvals/tools/get-approval-status.js +94 -0
- package/dist/approvals/tools/get-approval-status.js.map +1 -0
- package/dist/approvals/tools/index.d.ts +7 -0
- package/dist/approvals/tools/index.d.ts.map +1 -0
- package/dist/approvals/tools/index.js +7 -0
- package/dist/approvals/tools/index.js.map +1 -0
- package/dist/approvals/tools/list-my-requests.d.ts +11 -0
- package/dist/approvals/tools/list-my-requests.d.ts.map +1 -0
- package/dist/approvals/tools/list-my-requests.js +55 -0
- package/dist/approvals/tools/list-my-requests.js.map +1 -0
- package/dist/approvals/tools/list-pending-approvals.d.ts +11 -0
- package/dist/approvals/tools/list-pending-approvals.d.ts.map +1 -0
- package/dist/approvals/tools/list-pending-approvals.js +53 -0
- package/dist/approvals/tools/list-pending-approvals.js.map +1 -0
- package/dist/approvals/tools/request-approval.d.ts +13 -0
- package/dist/approvals/tools/request-approval.d.ts.map +1 -0
- package/dist/approvals/tools/request-approval.js +123 -0
- package/dist/approvals/tools/request-approval.js.map +1 -0
- package/dist/approvals/tools/respond-to-approval.d.ts +13 -0
- package/dist/approvals/tools/respond-to-approval.d.ts.map +1 -0
- package/dist/approvals/tools/respond-to-approval.js +98 -0
- package/dist/approvals/tools/respond-to-approval.js.map +1 -0
- package/dist/audit/collection.d.ts +22 -0
- package/dist/audit/collection.d.ts.map +1 -0
- package/dist/audit/collection.js +109 -0
- package/dist/audit/collection.js.map +1 -0
- package/dist/audit/index.d.ts +16 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +11 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/jobs/audit-event-echo.d.ts +14 -0
- package/dist/audit/jobs/audit-event-echo.d.ts.map +1 -0
- package/dist/audit/jobs/audit-event-echo.js +61 -0
- package/dist/audit/jobs/audit-event-echo.js.map +1 -0
- package/dist/audit/plugin.d.ts +20 -0
- package/dist/audit/plugin.d.ts.map +1 -0
- package/dist/audit/plugin.js +55 -0
- package/dist/audit/plugin.js.map +1 -0
- package/dist/audit/query/formatting/index.d.ts +40 -0
- package/dist/audit/query/formatting/index.d.ts.map +1 -0
- package/dist/audit/query/formatting/index.js +73 -0
- package/dist/audit/query/formatting/index.js.map +1 -0
- package/dist/audit/query/options.d.ts +34 -0
- package/dist/audit/query/options.d.ts.map +1 -0
- package/dist/audit/query/options.js +8 -0
- package/dist/audit/query/options.js.map +1 -0
- package/dist/audit/query/plugin.d.ts +11 -0
- package/dist/audit/query/plugin.d.ts.map +1 -0
- package/dist/audit/query/plugin.js +68 -0
- package/dist/audit/query/plugin.js.map +1 -0
- package/dist/audit/query/tools/access.d.ts +9 -0
- package/dist/audit/query/tools/access.d.ts.map +1 -0
- package/dist/audit/query/tools/access.js +14 -0
- package/dist/audit/query/tools/access.js.map +1 -0
- package/dist/audit/query/tools/descriptors.d.ts +26 -0
- package/dist/audit/query/tools/descriptors.d.ts.map +1 -0
- package/dist/audit/query/tools/descriptors.js +35 -0
- package/dist/audit/query/tools/descriptors.js.map +1 -0
- package/dist/audit/query/tools/get-change-history.d.ts +23 -0
- package/dist/audit/query/tools/get-change-history.d.ts.map +1 -0
- package/dist/audit/query/tools/get-change-history.js +44 -0
- package/dist/audit/query/tools/get-change-history.js.map +1 -0
- package/dist/audit/query/tools/get-recent-failures.d.ts +23 -0
- package/dist/audit/query/tools/get-recent-failures.d.ts.map +1 -0
- package/dist/audit/query/tools/get-recent-failures.js +56 -0
- package/dist/audit/query/tools/get-recent-failures.js.map +1 -0
- package/dist/audit/query/tools/index.d.ts +13 -0
- package/dist/audit/query/tools/index.d.ts.map +1 -0
- package/dist/audit/query/tools/index.js +8 -0
- package/dist/audit/query/tools/index.js.map +1 -0
- package/dist/audit/query/tools/query-audit.d.ts +53 -0
- package/dist/audit/query/tools/query-audit.d.ts.map +1 -0
- package/dist/audit/query/tools/query-audit.js +78 -0
- package/dist/audit/query/tools/query-audit.js.map +1 -0
- package/dist/audit/query/tools/what-changed-in-range.d.ts +23 -0
- package/dist/audit/query/tools/what-changed-in-range.d.ts.map +1 -0
- package/dist/audit/query/tools/what-changed-in-range.js +86 -0
- package/dist/audit/query/tools/what-changed-in-range.js.map +1 -0
- package/dist/audit/query/tools/who-changed-what.d.ts +38 -0
- package/dist/audit/query/tools/who-changed-what.d.ts.map +1 -0
- package/dist/audit/query/tools/who-changed-what.js +66 -0
- package/dist/audit/query/tools/who-changed-what.js.map +1 -0
- package/dist/audit/types.d.ts +11 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/audit/types.js +45 -0
- package/dist/audit/types.js.map +1 -0
- package/dist/audit/writer.d.ts +50 -0
- package/dist/audit/writer.d.ts.map +1 -0
- package/dist/audit/writer.js +101 -0
- package/dist/audit/writer.js.map +1 -0
- package/dist/cache-tags.d.ts +31 -0
- package/dist/cache-tags.d.ts.map +1 -0
- package/dist/cache-tags.js +53 -0
- package/dist/cache-tags.js.map +1 -0
- package/dist/components/index.d.ts +8 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +7 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/manifest-source.d.ts +17 -0
- package/dist/components/manifest-source.d.ts.map +1 -0
- package/dist/components/manifest-source.js +60 -0
- package/dist/components/manifest-source.js.map +1 -0
- package/dist/components/matching/index.d.ts +3 -0
- package/dist/components/matching/index.d.ts.map +1 -0
- package/dist/components/matching/index.js +2 -0
- package/dist/components/matching/index.js.map +1 -0
- package/dist/components/matching/tfidf.d.ts +13 -0
- package/dist/components/matching/tfidf.d.ts.map +1 -0
- package/dist/components/matching/tfidf.js +118 -0
- package/dist/components/matching/tfidf.js.map +1 -0
- package/dist/components/matching/types.d.ts +22 -0
- package/dist/components/matching/types.d.ts.map +1 -0
- package/dist/components/matching/types.js +2 -0
- package/dist/components/matching/types.js.map +1 -0
- package/dist/components/options.d.ts +136 -0
- package/dist/components/options.d.ts.map +1 -0
- package/dist/components/options.js +40 -0
- package/dist/components/options.js.map +1 -0
- package/dist/components/plugin.d.ts +4 -0
- package/dist/components/plugin.d.ts.map +1 -0
- package/dist/components/plugin.js +95 -0
- package/dist/components/plugin.js.map +1 -0
- package/dist/components/tools/descriptors.d.ts +34 -0
- package/dist/components/tools/descriptors.d.ts.map +1 -0
- package/dist/components/tools/descriptors.js +43 -0
- package/dist/components/tools/descriptors.js.map +1 -0
- package/dist/components/tools/find-anti-pattern.d.ts +9 -0
- package/dist/components/tools/find-anti-pattern.d.ts.map +1 -0
- package/dist/components/tools/find-anti-pattern.js +31 -0
- package/dist/components/tools/find-anti-pattern.js.map +1 -0
- package/dist/components/tools/get-contract.d.ts +4 -0
- package/dist/components/tools/get-contract.d.ts.map +1 -0
- package/dist/components/tools/get-contract.js +19 -0
- package/dist/components/tools/get-contract.js.map +1 -0
- package/dist/components/tools/get-tokens.d.ts +4 -0
- package/dist/components/tools/get-tokens.d.ts.map +1 -0
- package/dist/components/tools/get-tokens.js +19 -0
- package/dist/components/tools/get-tokens.js.map +1 -0
- package/dist/components/tools/get-variants.d.ts +4 -0
- package/dist/components/tools/get-variants.d.ts.map +1 -0
- package/dist/components/tools/get-variants.js +19 -0
- package/dist/components/tools/get-variants.js.map +1 -0
- package/dist/components/tools/index.d.ts +9 -0
- package/dist/components/tools/index.d.ts.map +1 -0
- package/dist/components/tools/index.js +9 -0
- package/dist/components/tools/index.js.map +1 -0
- package/dist/components/tools/list-components.d.ts +4 -0
- package/dist/components/tools/list-components.d.ts.map +1 -0
- package/dist/components/tools/list-components.js +25 -0
- package/dist/components/tools/list-components.js.map +1 -0
- package/dist/components/tools/suggest-for-intent.d.ts +12 -0
- package/dist/components/tools/suggest-for-intent.d.ts.map +1 -0
- package/dist/components/tools/suggest-for-intent.js +83 -0
- package/dist/components/tools/suggest-for-intent.js.map +1 -0
- package/dist/components/tools/validate-composition.d.ts +9 -0
- package/dist/components/tools/validate-composition.d.ts.map +1 -0
- package/dist/components/tools/validate-composition.js +31 -0
- package/dist/components/tools/validate-composition.js.map +1 -0
- package/dist/components/validation/composition.d.ts +38 -0
- package/dist/components/validation/composition.d.ts.map +1 -0
- package/dist/components/validation/composition.js +135 -0
- package/dist/components/validation/composition.js.map +1 -0
- package/dist/editorial/calendar/ContentCalendarReport.d.ts +9 -0
- package/dist/editorial/calendar/ContentCalendarReport.d.ts.map +1 -0
- package/dist/editorial/calendar/ContentCalendarReport.js +47 -0
- package/dist/editorial/calendar/ContentCalendarReport.js.map +1 -0
- package/dist/editorial/calendar/ContentCalendarView.d.ts +3 -0
- package/dist/editorial/calendar/ContentCalendarView.d.ts.map +1 -0
- package/dist/editorial/calendar/ContentCalendarView.js +36 -0
- package/dist/editorial/calendar/ContentCalendarView.js.map +1 -0
- package/dist/editorial/calendar/calendar.d.ts +30 -0
- package/dist/editorial/calendar/calendar.d.ts.map +1 -0
- package/dist/editorial/calendar/calendar.js +23 -0
- package/dist/editorial/calendar/calendar.js.map +1 -0
- package/dist/editorial/calendar/find.d.ts +41 -0
- package/dist/editorial/calendar/find.d.ts.map +1 -0
- package/dist/editorial/calendar/find.js +108 -0
- package/dist/editorial/calendar/find.js.map +1 -0
- package/dist/editorial/calendar/month.d.ts +45 -0
- package/dist/editorial/calendar/month.d.ts.map +1 -0
- package/dist/editorial/calendar/month.js +120 -0
- package/dist/editorial/calendar/month.js.map +1 -0
- package/dist/editorial/calendar/tool.d.ts +50 -0
- package/dist/editorial/calendar/tool.d.ts.map +1 -0
- package/dist/editorial/calendar/tool.js +68 -0
- package/dist/editorial/calendar/tool.js.map +1 -0
- package/dist/editorial/config.d.ts +25 -0
- package/dist/editorial/config.d.ts.map +1 -0
- package/dist/editorial/config.js +12 -0
- package/dist/editorial/config.js.map +1 -0
- package/dist/editorial/health/ContentHealthReport.d.ts +7 -0
- package/dist/editorial/health/ContentHealthReport.d.ts.map +1 -0
- package/dist/editorial/health/ContentHealthReport.js +29 -0
- package/dist/editorial/health/ContentHealthReport.js.map +1 -0
- package/dist/editorial/health/ContentHealthView.d.ts +3 -0
- package/dist/editorial/health/ContentHealthView.d.ts.map +1 -0
- package/dist/editorial/health/ContentHealthView.js +29 -0
- package/dist/editorial/health/ContentHealthView.js.map +1 -0
- package/dist/editorial/health/HealthSummary.d.ts +6 -0
- package/dist/editorial/health/HealthSummary.d.ts.map +1 -0
- package/dist/editorial/health/HealthSummary.js +39 -0
- package/dist/editorial/health/HealthSummary.js.map +1 -0
- package/dist/editorial/health/checks.d.ts +104 -0
- package/dist/editorial/health/checks.d.ts.map +1 -0
- package/dist/editorial/health/checks.js +188 -0
- package/dist/editorial/health/checks.js.map +1 -0
- package/dist/editorial/health/find.d.ts +43 -0
- package/dist/editorial/health/find.d.ts.map +1 -0
- package/dist/editorial/health/find.js +97 -0
- package/dist/editorial/health/find.js.map +1 -0
- package/dist/editorial/health/tool.d.ts +53 -0
- package/dist/editorial/health/tool.d.ts.map +1 -0
- package/dist/editorial/health/tool.js +80 -0
- package/dist/editorial/health/tool.js.map +1 -0
- package/dist/editorial/index.d.ts +25 -0
- package/dist/editorial/index.d.ts.map +1 -0
- package/dist/editorial/index.js +15 -0
- package/dist/editorial/index.js.map +1 -0
- package/dist/editorial/palette/CommandPalette.d.ts +15 -0
- package/dist/editorial/palette/CommandPalette.d.ts.map +1 -0
- package/dist/editorial/palette/CommandPalette.js +319 -0
- package/dist/editorial/palette/CommandPalette.js.map +1 -0
- package/dist/editorial/palette/ReportsNav.d.ts +5 -0
- package/dist/editorial/palette/ReportsNav.d.ts.map +1 -0
- package/dist/editorial/palette/ReportsNav.js +31 -0
- package/dist/editorial/palette/ReportsNav.js.map +1 -0
- package/dist/editorial/palette/search.d.ts +18 -0
- package/dist/editorial/palette/search.d.ts.map +1 -0
- package/dist/editorial/palette/search.js +41 -0
- package/dist/editorial/palette/search.js.map +1 -0
- package/dist/editorial/palette/sources.d.ts +64 -0
- package/dist/editorial/palette/sources.d.ts.map +1 -0
- package/dist/editorial/palette/sources.js +103 -0
- package/dist/editorial/palette/sources.js.map +1 -0
- package/dist/editorial/palette/styles.d.ts +2 -0
- package/dist/editorial/palette/styles.d.ts.map +1 -0
- package/dist/editorial/palette/styles.js +76 -0
- package/dist/editorial/palette/styles.js.map +1 -0
- package/dist/editorial/palette/tool.d.ts +31 -0
- package/dist/editorial/palette/tool.d.ts.map +1 -0
- package/dist/editorial/palette/tool.js +63 -0
- package/dist/editorial/palette/tool.js.map +1 -0
- package/dist/editorial/plugin.d.ts +76 -0
- package/dist/editorial/plugin.d.ts.map +1 -0
- package/dist/editorial/plugin.js +186 -0
- package/dist/editorial/plugin.js.map +1 -0
- package/dist/editorial/relativeTime.d.ts +3 -0
- package/dist/editorial/relativeTime.d.ts.map +1 -0
- package/dist/editorial/relativeTime.js +27 -0
- package/dist/editorial/relativeTime.js.map +1 -0
- package/dist/editorial/styles.d.ts +2 -0
- package/dist/editorial/styles.d.ts.map +1 -0
- package/dist/editorial/styles.js +191 -0
- package/dist/editorial/styles.js.map +1 -0
- package/dist/editorial/work/YourWork.d.ts +13 -0
- package/dist/editorial/work/YourWork.d.ts.map +1 -0
- package/dist/editorial/work/YourWork.js +40 -0
- package/dist/editorial/work/YourWork.js.map +1 -0
- package/dist/editorial/work/tool.d.ts +45 -0
- package/dist/editorial/work/tool.d.ts.map +1 -0
- package/dist/editorial/work/tool.js +54 -0
- package/dist/editorial/work/tool.js.map +1 -0
- package/dist/editorial/work/work.d.ts +31 -0
- package/dist/editorial/work/work.d.ts.map +1 -0
- package/dist/editorial/work/work.js +68 -0
- package/dist/editorial/work/work.js.map +1 -0
- package/dist/email/client.d.ts +78 -0
- package/dist/email/client.d.ts.map +1 -0
- package/dist/email/client.js +63 -0
- package/dist/email/client.js.map +1 -0
- package/dist/email/functions/_shared.d.ts +17 -0
- package/dist/email/functions/_shared.d.ts.map +1 -0
- package/dist/email/functions/_shared.js +40 -0
- package/dist/email/functions/_shared.js.map +1 -0
- package/dist/email/functions/index.d.ts +7 -0
- package/dist/email/functions/index.d.ts.map +1 -0
- package/dist/email/functions/index.js +4 -0
- package/dist/email/functions/index.js.map +1 -0
- package/dist/email/functions/notify-approval-decision.d.ts +34 -0
- package/dist/email/functions/notify-approval-decision.d.ts.map +1 -0
- package/dist/email/functions/notify-approval-decision.js +77 -0
- package/dist/email/functions/notify-approval-decision.js.map +1 -0
- package/dist/email/functions/notify-approval-expired.d.ts +32 -0
- package/dist/email/functions/notify-approval-expired.d.ts.map +1 -0
- package/dist/email/functions/notify-approval-expired.js +54 -0
- package/dist/email/functions/notify-approval-expired.js.map +1 -0
- package/dist/email/functions/notify-approval-request.d.ts +35 -0
- package/dist/email/functions/notify-approval-request.d.ts.map +1 -0
- package/dist/email/functions/notify-approval-request.js +89 -0
- package/dist/email/functions/notify-approval-request.js.map +1 -0
- package/dist/email/index.d.ts +17 -0
- package/dist/email/index.d.ts.map +1 -0
- package/dist/email/index.js +12 -0
- package/dist/email/index.js.map +1 -0
- package/dist/email/options.d.ts +100 -0
- package/dist/email/options.d.ts.map +1 -0
- package/dist/email/options.js +55 -0
- package/dist/email/options.js.map +1 -0
- package/dist/email/plugin.d.ts +28 -0
- package/dist/email/plugin.d.ts.map +1 -0
- package/dist/email/plugin.js +113 -0
- package/dist/email/plugin.js.map +1 -0
- package/dist/email/templates/ApprovalDecision.d.ts +15 -0
- package/dist/email/templates/ApprovalDecision.d.ts.map +1 -0
- package/dist/email/templates/ApprovalDecision.js +56 -0
- package/dist/email/templates/ApprovalDecision.js.map +1 -0
- package/dist/email/templates/ApprovalExpired.d.ts +10 -0
- package/dist/email/templates/ApprovalExpired.d.ts.map +1 -0
- package/dist/email/templates/ApprovalExpired.js +8 -0
- package/dist/email/templates/ApprovalExpired.js.map +1 -0
- package/dist/email/templates/ApprovalRequest.d.ts +24 -0
- package/dist/email/templates/ApprovalRequest.d.ts.map +1 -0
- package/dist/email/templates/ApprovalRequest.js +58 -0
- package/dist/email/templates/ApprovalRequest.js.map +1 -0
- package/dist/email/templates/_layout.d.ts +17 -0
- package/dist/email/templates/_layout.d.ts.map +1 -0
- package/dist/email/templates/_layout.js +39 -0
- package/dist/email/templates/_layout.js.map +1 -0
- package/dist/email/templates/index.d.ts +9 -0
- package/dist/email/templates/index.d.ts.map +1 -0
- package/dist/email/templates/index.js +5 -0
- package/dist/email/templates/index.js.map +1 -0
- package/dist/email/tokens.d.ts +39 -0
- package/dist/email/tokens.d.ts.map +1 -0
- package/dist/email/tokens.js +17 -0
- package/dist/email/tokens.js.map +1 -0
- package/dist/env/index.d.ts +54 -0
- package/dist/env/index.d.ts.map +1 -0
- package/dist/env/index.js +113 -0
- package/dist/env/index.js.map +1 -0
- package/dist/events/inngest.d.ts +24 -0
- package/dist/events/inngest.d.ts.map +1 -0
- package/dist/events/inngest.js +24 -0
- package/dist/events/inngest.js.map +1 -0
- package/dist/events/taxonomy.d.ts +84 -0
- package/dist/events/taxonomy.d.ts.map +1 -0
- package/dist/events/taxonomy.js +10 -0
- package/dist/events/taxonomy.js.map +1 -0
- package/dist/events/vercel.d.ts +47 -0
- package/dist/events/vercel.d.ts.map +1 -0
- package/dist/events/vercel.js +69 -0
- package/dist/events/vercel.js.map +1 -0
- package/dist/exports/client.d.ts +24 -0
- package/dist/exports/client.d.ts.map +1 -0
- package/dist/exports/client.js +21 -0
- package/dist/exports/client.js.map +1 -0
- package/dist/exports/rsc.d.ts +17 -0
- package/dist/exports/rsc.d.ts.map +1 -0
- package/dist/exports/rsc.js +19 -0
- package/dist/exports/rsc.js.map +1 -0
- package/dist/fields/CharacterCountField.d.ts +4 -0
- package/dist/fields/CharacterCountField.d.ts.map +1 -0
- package/dist/fields/CharacterCountField.js +94 -0
- package/dist/fields/CharacterCountField.js.map +1 -0
- package/dist/fields/characterCount.d.ts +15 -0
- package/dist/fields/characterCount.d.ts.map +1 -0
- package/dist/fields/characterCount.js +92 -0
- package/dist/fields/characterCount.js.map +1 -0
- package/dist/fields/checkSlug.d.ts +62 -0
- package/dist/fields/checkSlug.d.ts.map +1 -0
- package/dist/fields/checkSlug.js +119 -0
- package/dist/fields/checkSlug.js.map +1 -0
- package/dist/fields/index.d.ts +9 -0
- package/dist/fields/index.d.ts.map +1 -0
- package/dist/fields/index.js +9 -0
- package/dist/fields/index.js.map +1 -0
- package/dist/fields/mapFields.d.ts +13 -0
- package/dist/fields/mapFields.d.ts.map +1 -0
- package/dist/fields/mapFields.js +32 -0
- package/dist/fields/mapFields.js.map +1 -0
- package/dist/fields/publishing.d.ts +33 -0
- package/dist/fields/publishing.d.ts.map +1 -0
- package/dist/fields/publishing.js +81 -0
- package/dist/fields/publishing.js.map +1 -0
- package/dist/fields/revisedAt.d.ts +15 -0
- package/dist/fields/revisedAt.d.ts.map +1 -0
- package/dist/fields/revisedAt.js +79 -0
- package/dist/fields/revisedAt.js.map +1 -0
- package/dist/fields/slug.d.ts +21 -0
- package/dist/fields/slug.d.ts.map +1 -0
- package/dist/fields/slug.js +102 -0
- package/dist/fields/slug.js.map +1 -0
- package/dist/fields/unlisted.d.ts +13 -0
- package/dist/fields/unlisted.d.ts.map +1 -0
- package/dist/fields/unlisted.js +35 -0
- package/dist/fields/unlisted.js.map +1 -0
- package/dist/fields/usedBy.d.ts +12 -0
- package/dist/fields/usedBy.d.ts.map +1 -0
- package/dist/fields/usedBy.js +36 -0
- package/dist/fields/usedBy.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/admin/SyncButton.d.ts +27 -0
- package/dist/integrations/admin/SyncButton.d.ts.map +1 -0
- package/dist/integrations/admin/SyncButton.js +134 -0
- package/dist/integrations/admin/SyncButton.js.map +1 -0
- package/dist/integrations/admin/sync-client.d.ts +83 -0
- package/dist/integrations/admin/sync-client.d.ts.map +1 -0
- package/dist/integrations/admin/sync-client.js +121 -0
- package/dist/integrations/admin/sync-client.js.map +1 -0
- package/dist/integrations/collection.d.ts +26 -0
- package/dist/integrations/collection.d.ts.map +1 -0
- package/dist/integrations/collection.js +193 -0
- package/dist/integrations/collection.js.map +1 -0
- package/dist/integrations/endpoints/sync.d.ts +27 -0
- package/dist/integrations/endpoints/sync.d.ts.map +1 -0
- package/dist/integrations/endpoints/sync.js +90 -0
- package/dist/integrations/endpoints/sync.js.map +1 -0
- package/dist/integrations/index.d.ts +22 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +15 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/integrations/index.d.ts +3 -0
- package/dist/integrations/integrations/index.d.ts.map +1 -0
- package/dist/integrations/integrations/index.js +2 -0
- package/dist/integrations/integrations/index.js.map +1 -0
- package/dist/integrations/integrations/webhook/config-fields.d.ts +33 -0
- package/dist/integrations/integrations/webhook/config-fields.d.ts.map +1 -0
- package/dist/integrations/integrations/webhook/config-fields.js +54 -0
- package/dist/integrations/integrations/webhook/config-fields.js.map +1 -0
- package/dist/integrations/integrations/webhook/functions.d.ts +24 -0
- package/dist/integrations/integrations/webhook/functions.d.ts.map +1 -0
- package/dist/integrations/integrations/webhook/functions.js +139 -0
- package/dist/integrations/integrations/webhook/functions.js.map +1 -0
- package/dist/integrations/integrations/webhook/healthcheck.d.ts +10 -0
- package/dist/integrations/integrations/webhook/healthcheck.d.ts.map +1 -0
- package/dist/integrations/integrations/webhook/healthcheck.js +26 -0
- package/dist/integrations/integrations/webhook/healthcheck.js.map +1 -0
- package/dist/integrations/integrations/webhook/hmac.d.ts +11 -0
- package/dist/integrations/integrations/webhook/hmac.d.ts.map +1 -0
- package/dist/integrations/integrations/webhook/hmac.js +25 -0
- package/dist/integrations/integrations/webhook/hmac.js.map +1 -0
- package/dist/integrations/integrations/webhook/index.d.ts +6 -0
- package/dist/integrations/integrations/webhook/index.d.ts.map +1 -0
- package/dist/integrations/integrations/webhook/index.js +47 -0
- package/dist/integrations/integrations/webhook/index.js.map +1 -0
- package/dist/integrations/integrations/webhook/payload.d.ts +9 -0
- package/dist/integrations/integrations/webhook/payload.d.ts.map +1 -0
- package/dist/integrations/integrations/webhook/payload.js +19 -0
- package/dist/integrations/integrations/webhook/payload.js.map +1 -0
- package/dist/integrations/jobs/healthcheck.d.ts +24 -0
- package/dist/integrations/jobs/healthcheck.d.ts.map +1 -0
- package/dist/integrations/jobs/healthcheck.js +133 -0
- package/dist/integrations/jobs/healthcheck.js.map +1 -0
- package/dist/integrations/options.d.ts +54 -0
- package/dist/integrations/options.d.ts.map +1 -0
- package/dist/integrations/options.js +8 -0
- package/dist/integrations/options.js.map +1 -0
- package/dist/integrations/plugin.d.ts +51 -0
- package/dist/integrations/plugin.d.ts.map +1 -0
- package/dist/integrations/plugin.js +215 -0
- package/dist/integrations/plugin.js.map +1 -0
- package/dist/integrations/registry.d.ts +27 -0
- package/dist/integrations/registry.d.ts.map +1 -0
- package/dist/integrations/registry.js +39 -0
- package/dist/integrations/registry.js.map +1 -0
- package/dist/integrations/sync/manual-sync.d.ts +70 -0
- package/dist/integrations/sync/manual-sync.d.ts.map +1 -0
- package/dist/integrations/sync/manual-sync.js +91 -0
- package/dist/integrations/sync/manual-sync.js.map +1 -0
- package/dist/integrations/sync/problems.d.ts +31 -0
- package/dist/integrations/sync/problems.d.ts.map +1 -0
- package/dist/integrations/sync/problems.js +40 -0
- package/dist/integrations/sync/problems.js.map +1 -0
- package/dist/integrations/sync/status.d.ts +15 -0
- package/dist/integrations/sync/status.d.ts.map +1 -0
- package/dist/integrations/sync/status.js +31 -0
- package/dist/integrations/sync/status.js.map +1 -0
- package/dist/integrations/tools/access.d.ts +5 -0
- package/dist/integrations/tools/access.d.ts.map +1 -0
- package/dist/integrations/tools/access.js +14 -0
- package/dist/integrations/tools/access.js.map +1 -0
- package/dist/integrations/tools/descriptors.d.ts +26 -0
- package/dist/integrations/tools/descriptors.d.ts.map +1 -0
- package/dist/integrations/tools/descriptors.js +35 -0
- package/dist/integrations/tools/descriptors.js.map +1 -0
- package/dist/integrations/tools/get-integration-status.d.ts +17 -0
- package/dist/integrations/tools/get-integration-status.d.ts.map +1 -0
- package/dist/integrations/tools/get-integration-status.js +41 -0
- package/dist/integrations/tools/get-integration-status.js.map +1 -0
- package/dist/integrations/tools/index.d.ts +13 -0
- package/dist/integrations/tools/index.d.ts.map +1 -0
- package/dist/integrations/tools/index.js +8 -0
- package/dist/integrations/tools/index.js.map +1 -0
- package/dist/integrations/tools/list-integration-types.d.ts +10 -0
- package/dist/integrations/tools/list-integration-types.d.ts.map +1 -0
- package/dist/integrations/tools/list-integration-types.js +22 -0
- package/dist/integrations/tools/list-integration-types.js.map +1 -0
- package/dist/integrations/tools/list-integrations.d.ts +20 -0
- package/dist/integrations/tools/list-integrations.d.ts.map +1 -0
- package/dist/integrations/tools/list-integrations.js +49 -0
- package/dist/integrations/tools/list-integrations.js.map +1 -0
- package/dist/integrations/tools/test-integration.d.ts +19 -0
- package/dist/integrations/tools/test-integration.d.ts.map +1 -0
- package/dist/integrations/tools/test-integration.js +51 -0
- package/dist/integrations/tools/test-integration.js.map +1 -0
- package/dist/integrations/tools/trigger-sync.d.ts +26 -0
- package/dist/integrations/tools/trigger-sync.d.ts.map +1 -0
- package/dist/integrations/tools/trigger-sync.js +44 -0
- package/dist/integrations/tools/trigger-sync.js.map +1 -0
- package/dist/integrations/types.d.ts +183 -0
- package/dist/integrations/types.d.ts.map +1 -0
- package/dist/integrations/types.js +2 -0
- package/dist/integrations/types.js.map +1 -0
- package/dist/jobs/define.d.ts +17 -0
- package/dist/jobs/define.d.ts.map +1 -0
- package/dist/jobs/define.js +39 -0
- package/dist/jobs/define.js.map +1 -0
- package/dist/jobs/failure-handler.d.ts +39 -0
- package/dist/jobs/failure-handler.d.ts.map +1 -0
- package/dist/jobs/failure-handler.js +62 -0
- package/dist/jobs/failure-handler.js.map +1 -0
- package/dist/jobs/index.d.ts +28 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +7 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/inngest/adapter.d.ts +39 -0
- package/dist/jobs/inngest/adapter.d.ts.map +1 -0
- package/dist/jobs/inngest/adapter.js +81 -0
- package/dist/jobs/inngest/adapter.js.map +1 -0
- package/dist/jobs/inngest/index.d.ts +15 -0
- package/dist/jobs/inngest/index.d.ts.map +1 -0
- package/dist/jobs/inngest/index.js +13 -0
- package/dist/jobs/inngest/index.js.map +1 -0
- package/dist/jobs/options.d.ts +18 -0
- package/dist/jobs/options.d.ts.map +1 -0
- package/dist/jobs/options.js +12 -0
- package/dist/jobs/options.js.map +1 -0
- package/dist/jobs/payload/adapter.d.ts +33 -0
- package/dist/jobs/payload/adapter.d.ts.map +1 -0
- package/dist/jobs/payload/adapter.js +257 -0
- package/dist/jobs/payload/adapter.js.map +1 -0
- package/dist/jobs/payload/index.d.ts +8 -0
- package/dist/jobs/payload/index.d.ts.map +1 -0
- package/dist/jobs/payload/index.js +7 -0
- package/dist/jobs/payload/index.js.map +1 -0
- package/dist/jobs/sender.d.ts +4 -0
- package/dist/jobs/sender.d.ts.map +1 -0
- package/dist/jobs/sender.js +19 -0
- package/dist/jobs/sender.js.map +1 -0
- package/dist/jobs/types.d.ts +105 -0
- package/dist/jobs/types.d.ts.map +1 -0
- package/dist/jobs/types.js +2 -0
- package/dist/jobs/types.js.map +1 -0
- package/dist/jobs/workflow-types.d.ts +280 -0
- package/dist/jobs/workflow-types.d.ts.map +1 -0
- package/dist/jobs/workflow-types.js +22 -0
- package/dist/jobs/workflow-types.js.map +1 -0
- package/dist/logger/index.d.ts +9 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +41 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/mcp/api-key-access.d.ts +50 -0
- package/dist/mcp/api-key-access.d.ts.map +1 -0
- package/dist/mcp/api-key-access.js +94 -0
- package/dist/mcp/api-key-access.js.map +1 -0
- package/dist/mcp/audit-context.d.ts +39 -0
- package/dist/mcp/audit-context.d.ts.map +1 -0
- package/dist/mcp/audit-context.js +36 -0
- package/dist/mcp/audit-context.js.map +1 -0
- package/dist/mcp/audit-server.d.ts +13 -0
- package/dist/mcp/audit-server.d.ts.map +1 -0
- package/dist/mcp/audit-server.js +68 -0
- package/dist/mcp/audit-server.js.map +1 -0
- package/dist/mcp/collector.d.ts +51 -0
- package/dist/mcp/collector.d.ts.map +1 -0
- package/dist/mcp/collector.js +96 -0
- package/dist/mcp/collector.js.map +1 -0
- package/dist/mcp/envelope.d.ts +22 -0
- package/dist/mcp/envelope.d.ts.map +1 -0
- package/dist/mcp/envelope.js +22 -0
- package/dist/mcp/envelope.js.map +1 -0
- package/dist/mcp/index.d.ts +12 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +8 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/meta.d.ts +74 -0
- package/dist/mcp/meta.d.ts.map +1 -0
- package/dist/mcp/meta.js +27 -0
- package/dist/mcp/meta.js.map +1 -0
- package/dist/mcp/payload-mcp.d.ts +68 -0
- package/dist/mcp/payload-mcp.d.ts.map +1 -0
- package/dist/mcp/payload-mcp.js +175 -0
- package/dist/mcp/payload-mcp.js.map +1 -0
- package/dist/media/hooks.d.ts +70 -0
- package/dist/media/hooks.d.ts.map +1 -0
- package/dist/media/hooks.js +200 -0
- package/dist/media/hooks.js.map +1 -0
- package/dist/media/index.d.ts +8 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/index.js +7 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/svg.d.ts +17 -0
- package/dist/media/svg.d.ts.map +1 -0
- package/dist/media/svg.js +241 -0
- package/dist/media/svg.js.map +1 -0
- package/dist/media/uploadKey.d.ts +25 -0
- package/dist/media/uploadKey.d.ts.map +1 -0
- package/dist/media/uploadKey.js +70 -0
- package/dist/media/uploadKey.js.map +1 -0
- package/dist/observability/collection.d.ts +13 -0
- package/dist/observability/collection.d.ts.map +1 -0
- package/dist/observability/collection.js +76 -0
- package/dist/observability/collection.js.map +1 -0
- package/dist/observability/index.d.ts +10 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +6 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/plugin.d.ts +24 -0
- package/dist/observability/plugin.d.ts.map +1 -0
- package/dist/observability/plugin.js +59 -0
- package/dist/observability/plugin.js.map +1 -0
- package/dist/observability/report.d.ts +175 -0
- package/dist/observability/report.d.ts.map +1 -0
- package/dist/observability/report.js +274 -0
- package/dist/observability/report.js.map +1 -0
- package/dist/observability/tool.d.ts +33 -0
- package/dist/observability/tool.d.ts.map +1 -0
- package/dist/observability/tool.js +75 -0
- package/dist/observability/tool.js.map +1 -0
- package/dist/observability/writer.d.ts +24 -0
- package/dist/observability/writer.d.ts.map +1 -0
- package/dist/observability/writer.js +72 -0
- package/dist/observability/writer.js.map +1 -0
- package/dist/plugin-contract/admin.d.ts +45 -0
- package/dist/plugin-contract/admin.d.ts.map +1 -0
- package/dist/plugin-contract/admin.js +12 -0
- package/dist/plugin-contract/admin.js.map +1 -0
- package/dist/plugin-contract/env.d.ts +29 -0
- package/dist/plugin-contract/env.d.ts.map +1 -0
- package/dist/plugin-contract/env.js +2 -0
- package/dist/plugin-contract/env.js.map +1 -0
- package/dist/plugin-contract/index.d.ts +39 -0
- package/dist/plugin-contract/index.d.ts.map +1 -0
- package/dist/plugin-contract/index.js +5 -0
- package/dist/plugin-contract/index.js.map +1 -0
- package/dist/plugin-contract/mcp.d.ts +51 -0
- package/dist/plugin-contract/mcp.d.ts.map +1 -0
- package/dist/plugin-contract/mcp.js +2 -0
- package/dist/plugin-contract/mcp.js.map +1 -0
- package/dist/plugin-contract/registry.d.ts +23 -0
- package/dist/plugin-contract/registry.d.ts.map +1 -0
- package/dist/plugin-contract/registry.js +51 -0
- package/dist/plugin-contract/registry.js.map +1 -0
- package/dist/publishing/admin/PublishButton.d.ts +22 -0
- package/dist/publishing/admin/PublishButton.d.ts.map +1 -0
- package/dist/publishing/admin/PublishButton.js +164 -0
- package/dist/publishing/admin/PublishButton.js.map +1 -0
- package/dist/publishing/admin/SchedulePublishField.d.ts +24 -0
- package/dist/publishing/admin/SchedulePublishField.d.ts.map +1 -0
- package/dist/publishing/admin/SchedulePublishField.js +160 -0
- package/dist/publishing/admin/SchedulePublishField.js.map +1 -0
- package/dist/publishing/admin/UnpublishButton.d.ts +15 -0
- package/dist/publishing/admin/UnpublishButton.d.ts.map +1 -0
- package/dist/publishing/admin/UnpublishButton.js +90 -0
- package/dist/publishing/admin/UnpublishButton.js.map +1 -0
- package/dist/publishing/admin/publishing-client.d.ts +105 -0
- package/dist/publishing/admin/publishing-client.d.ts.map +1 -0
- package/dist/publishing/admin/publishing-client.js +139 -0
- package/dist/publishing/admin/publishing-client.js.map +1 -0
- package/dist/publishing/admin/schedule-state.d.ts +30 -0
- package/dist/publishing/admin/schedule-state.d.ts.map +1 -0
- package/dist/publishing/admin/schedule-state.js +39 -0
- package/dist/publishing/admin/schedule-state.js.map +1 -0
- package/dist/publishing/checks/alt-text.d.ts +17 -0
- package/dist/publishing/checks/alt-text.d.ts.map +1 -0
- package/dist/publishing/checks/alt-text.js +63 -0
- package/dist/publishing/checks/alt-text.js.map +1 -0
- package/dist/publishing/checks/heading-hierarchy.d.ts +11 -0
- package/dist/publishing/checks/heading-hierarchy.d.ts.map +1 -0
- package/dist/publishing/checks/heading-hierarchy.js +32 -0
- package/dist/publishing/checks/heading-hierarchy.js.map +1 -0
- package/dist/publishing/checks/index.d.ts +6 -0
- package/dist/publishing/checks/index.d.ts.map +1 -0
- package/dist/publishing/checks/index.js +13 -0
- package/dist/publishing/checks/index.js.map +1 -0
- package/dist/publishing/checks/link-labels.d.ts +9 -0
- package/dist/publishing/checks/link-labels.d.ts.map +1 -0
- package/dist/publishing/checks/link-labels.js +44 -0
- package/dist/publishing/checks/link-labels.js.map +1 -0
- package/dist/publishing/endpoints/admin.d.ts +19 -0
- package/dist/publishing/endpoints/admin.d.ts.map +1 -0
- package/dist/publishing/endpoints/admin.js +112 -0
- package/dist/publishing/endpoints/admin.js.map +1 -0
- package/dist/publishing/events.d.ts +16 -0
- package/dist/publishing/events.d.ts.map +1 -0
- package/dist/publishing/events.js +30 -0
- package/dist/publishing/events.js.map +1 -0
- package/dist/publishing/hooks/block-status-writes.d.ts +52 -0
- package/dist/publishing/hooks/block-status-writes.d.ts.map +1 -0
- package/dist/publishing/hooks/block-status-writes.js +242 -0
- package/dist/publishing/hooks/block-status-writes.js.map +1 -0
- package/dist/publishing/hooks/draft-writes.d.ts +32 -0
- package/dist/publishing/hooks/draft-writes.d.ts.map +1 -0
- package/dist/publishing/hooks/draft-writes.js +76 -0
- package/dist/publishing/hooks/draft-writes.js.map +1 -0
- package/dist/publishing/hooks/schedule-events.d.ts +26 -0
- package/dist/publishing/hooks/schedule-events.d.ts.map +1 -0
- package/dist/publishing/hooks/schedule-events.js +54 -0
- package/dist/publishing/hooks/schedule-events.js.map +1 -0
- package/dist/publishing/index.d.ts +35 -0
- package/dist/publishing/index.d.ts.map +1 -0
- package/dist/publishing/index.js +32 -0
- package/dist/publishing/index.js.map +1 -0
- package/dist/publishing/jobs/execute-scheduled-publishes.d.ts +24 -0
- package/dist/publishing/jobs/execute-scheduled-publishes.d.ts.map +1 -0
- package/dist/publishing/jobs/execute-scheduled-publishes.js +114 -0
- package/dist/publishing/jobs/execute-scheduled-publishes.js.map +1 -0
- package/dist/publishing/jobs/next-revalidate.d.ts +43 -0
- package/dist/publishing/jobs/next-revalidate.d.ts.map +1 -0
- package/dist/publishing/jobs/next-revalidate.js +42 -0
- package/dist/publishing/jobs/next-revalidate.js.map +1 -0
- package/dist/publishing/jobs/publish-at-scheduled-time.d.ts +24 -0
- package/dist/publishing/jobs/publish-at-scheduled-time.d.ts.map +1 -0
- package/dist/publishing/jobs/publish-at-scheduled-time.js +136 -0
- package/dist/publishing/jobs/publish-at-scheduled-time.js.map +1 -0
- package/dist/publishing/jobs/revalidate-on-publish.d.ts +24 -0
- package/dist/publishing/jobs/revalidate-on-publish.d.ts.map +1 -0
- package/dist/publishing/jobs/revalidate-on-publish.js +78 -0
- package/dist/publishing/jobs/revalidate-on-publish.js.map +1 -0
- package/dist/publishing/jobs/revalidate-tag-hooks.d.ts +80 -0
- package/dist/publishing/jobs/revalidate-tag-hooks.d.ts.map +1 -0
- package/dist/publishing/jobs/revalidate-tag-hooks.js +116 -0
- package/dist/publishing/jobs/revalidate-tag-hooks.js.map +1 -0
- package/dist/publishing/options.d.ts +100 -0
- package/dist/publishing/options.d.ts.map +1 -0
- package/dist/publishing/options.js +56 -0
- package/dist/publishing/options.js.map +1 -0
- package/dist/publishing/pipeline/index.d.ts +20 -0
- package/dist/publishing/pipeline/index.d.ts.map +1 -0
- package/dist/publishing/pipeline/index.js +88 -0
- package/dist/publishing/pipeline/index.js.map +1 -0
- package/dist/publishing/pipeline/steps/accessibility.d.ts +13 -0
- package/dist/publishing/pipeline/steps/accessibility.d.ts.map +1 -0
- package/dist/publishing/pipeline/steps/accessibility.js +37 -0
- package/dist/publishing/pipeline/steps/accessibility.js.map +1 -0
- package/dist/publishing/pipeline/steps/approval.d.ts +14 -0
- package/dist/publishing/pipeline/steps/approval.d.ts.map +1 -0
- package/dist/publishing/pipeline/steps/approval.js +54 -0
- package/dist/publishing/pipeline/steps/approval.js.map +1 -0
- package/dist/publishing/pipeline/steps/composition.d.ts +14 -0
- package/dist/publishing/pipeline/steps/composition.d.ts.map +1 -0
- package/dist/publishing/pipeline/steps/composition.js +63 -0
- package/dist/publishing/pipeline/steps/composition.js.map +1 -0
- package/dist/publishing/pipeline/steps/embargo.d.ts +12 -0
- package/dist/publishing/pipeline/steps/embargo.d.ts.map +1 -0
- package/dist/publishing/pipeline/steps/embargo.js +41 -0
- package/dist/publishing/pipeline/steps/embargo.js.map +1 -0
- package/dist/publishing/pipeline/steps/execute.d.ts +52 -0
- package/dist/publishing/pipeline/steps/execute.d.ts.map +1 -0
- package/dist/publishing/pipeline/steps/execute.js +161 -0
- package/dist/publishing/pipeline/steps/execute.js.map +1 -0
- package/dist/publishing/pipeline/steps/exist.d.ts +9 -0
- package/dist/publishing/pipeline/steps/exist.d.ts.map +1 -0
- package/dist/publishing/pipeline/steps/exist.js +31 -0
- package/dist/publishing/pipeline/steps/exist.js.map +1 -0
- package/dist/publishing/pipeline/steps/required-fields.d.ts +9 -0
- package/dist/publishing/pipeline/steps/required-fields.d.ts.map +1 -0
- package/dist/publishing/pipeline/steps/required-fields.js +63 -0
- package/dist/publishing/pipeline/steps/required-fields.js.map +1 -0
- package/dist/publishing/pipeline/types.d.ts +72 -0
- package/dist/publishing/pipeline/types.d.ts.map +1 -0
- package/dist/publishing/pipeline/types.js +2 -0
- package/dist/publishing/pipeline/types.js.map +1 -0
- package/dist/publishing/plugin.d.ts +4 -0
- package/dist/publishing/plugin.d.ts.map +1 -0
- package/dist/publishing/plugin.js +196 -0
- package/dist/publishing/plugin.js.map +1 -0
- package/dist/publishing/service.d.ts +149 -0
- package/dist/publishing/service.d.ts.map +1 -0
- package/dist/publishing/service.js +474 -0
- package/dist/publishing/service.js.map +1 -0
- package/dist/publishing/tools/actor.d.ts +32 -0
- package/dist/publishing/tools/actor.d.ts.map +1 -0
- package/dist/publishing/tools/actor.js +40 -0
- package/dist/publishing/tools/actor.js.map +1 -0
- package/dist/publishing/tools/descriptors.d.ts +26 -0
- package/dist/publishing/tools/descriptors.d.ts.map +1 -0
- package/dist/publishing/tools/descriptors.js +38 -0
- package/dist/publishing/tools/descriptors.js.map +1 -0
- package/dist/publishing/tools/get-publish-status.d.ts +12 -0
- package/dist/publishing/tools/get-publish-status.d.ts.map +1 -0
- package/dist/publishing/tools/get-publish-status.js +45 -0
- package/dist/publishing/tools/get-publish-status.js.map +1 -0
- package/dist/publishing/tools/index.d.ts +7 -0
- package/dist/publishing/tools/index.d.ts.map +1 -0
- package/dist/publishing/tools/index.js +7 -0
- package/dist/publishing/tools/index.js.map +1 -0
- package/dist/publishing/tools/publish.d.ts +14 -0
- package/dist/publishing/tools/publish.d.ts.map +1 -0
- package/dist/publishing/tools/publish.js +35 -0
- package/dist/publishing/tools/publish.js.map +1 -0
- package/dist/publishing/tools/rollback.d.ts +11 -0
- package/dist/publishing/tools/rollback.d.ts.map +1 -0
- package/dist/publishing/tools/rollback.js +98 -0
- package/dist/publishing/tools/rollback.js.map +1 -0
- package/dist/publishing/tools/schedule-publish.d.ts +20 -0
- package/dist/publishing/tools/schedule-publish.d.ts.map +1 -0
- package/dist/publishing/tools/schedule-publish.js +49 -0
- package/dist/publishing/tools/schedule-publish.js.map +1 -0
- package/dist/publishing/tools/unpublish.d.ts +14 -0
- package/dist/publishing/tools/unpublish.d.ts.map +1 -0
- package/dist/publishing/tools/unpublish.js +29 -0
- package/dist/publishing/tools/unpublish.js.map +1 -0
- package/dist/references/UsedOnPanel.d.ts +3 -0
- package/dist/references/UsedOnPanel.d.ts.map +1 -0
- package/dist/references/UsedOnPanel.js +47 -0
- package/dist/references/UsedOnPanel.js.map +1 -0
- package/dist/references/find.d.ts +46 -0
- package/dist/references/find.d.ts.map +1 -0
- package/dist/references/find.js +142 -0
- package/dist/references/find.js.map +1 -0
- package/dist/references/guards.d.ts +32 -0
- package/dist/references/guards.d.ts.map +1 -0
- package/dist/references/guards.js +76 -0
- package/dist/references/guards.js.map +1 -0
- package/dist/references/index.d.ts +11 -0
- package/dist/references/index.d.ts.map +1 -0
- package/dist/references/index.js +6 -0
- package/dist/references/index.js.map +1 -0
- package/dist/references/plugin.d.ts +51 -0
- package/dist/references/plugin.d.ts.map +1 -0
- package/dist/references/plugin.js +111 -0
- package/dist/references/plugin.js.map +1 -0
- package/dist/references/tools.d.ts +54 -0
- package/dist/references/tools.d.ts.map +1 -0
- package/dist/references/tools.js +124 -0
- package/dist/references/tools.js.map +1 -0
- package/dist/references/walk.d.ts +43 -0
- package/dist/references/walk.d.ts.map +1 -0
- package/dist/references/walk.js +214 -0
- package/dist/references/walk.js.map +1 -0
- package/dist/testing/anonymousAccess.d.ts +111 -0
- package/dist/testing/anonymousAccess.d.ts.map +1 -0
- package/dist/testing/anonymousAccess.js +185 -0
- package/dist/testing/anonymousAccess.js.map +1 -0
- package/dist/testing/describeAnonymousAccess.d.ts +26 -0
- package/dist/testing/describeAnonymousAccess.d.ts.map +1 -0
- package/dist/testing/describeAnonymousAccess.js +76 -0
- package/dist/testing/describeAnonymousAccess.js.map +1 -0
- package/dist/testing/index.d.ts +11 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +9 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/utils/content-hash.d.ts +31 -0
- package/dist/utils/content-hash.d.ts.map +1 -0
- package/dist/utils/content-hash.js +94 -0
- package/dist/utils/content-hash.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/relationships.d.ts +17 -0
- package/dist/utils/relationships.d.ts.map +1 -0
- package/dist/utils/relationships.js +26 -0
- package/dist/utils/relationships.js.map +1 -0
- package/dist/utils/sha256.d.ts +10 -0
- package/dist/utils/sha256.d.ts.map +1 -0
- package/dist/utils/sha256.js +16 -0
- package/dist/utils/sha256.js.map +1 -0
- package/dist/utils/zod-issues.d.ts +19 -0
- package/dist/utils/zod-issues.d.ts.map +1 -0
- package/dist/utils/zod-issues.js +22 -0
- package/dist/utils/zod-issues.js.map +1 -0
- package/package.json +180 -3
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,584 @@
|
|
|
1
|
+
# @forumone/throughline
|
|
2
|
+
|
|
3
|
+
## 1.0.0-next.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- fb0b908: Jobs move in from `@forumone/throughline-workflows`, split by owner, by `docs/spec/1.0-exports.md`:
|
|
8
|
+
|
|
9
|
+
- `defineJob`, the job types, `jobPayload`, `eventSenderFor`, `failureOptions` and the two failure handlers are on `@forumone/throughline/jobs`.
|
|
10
|
+
- `inngestJobs` is on `/jobs/inngest`, beside the Inngest client; `payloadJobs` is on `/jobs/payload`.
|
|
11
|
+
- `revalidateOnPublishJob`, `publishAtScheduledTimeJob`, `executeScheduledPublishesJob` and `createTagRevalidationHooks` are on `/publishing`; `expireStaleApprovalsJob` on `/approvals`; `auditEventEchoJob` on `/audit`; `healthcheckJob` and its checks on `/integrations`.
|
|
12
|
+
- `createCacheTags` is on `/cache-tags`, which still imports nothing.
|
|
13
|
+
|
|
14
|
+
**Removed:** the six Inngest-shaped factories, `createRevalidateOnPublishFunction`, `createPublishAtScheduledTimeFunction`, `createExecuteScheduledPublishesFunction`, `createExpireStaleApprovalsFunction`, `createAuditEventEchoFunction` and `createHealthcheckFunction`. Each was `inngestJobs(inngest).toFunction(<job>(options))`; write that instead, or better, give the adapter `onFailure` and `payload` once and pass the jobs to `jobs.functions([...])`. Function ids are unchanged. `BaseWorkflowOptions` and `AuditEventEchoOptions` no longer take an `inngest`.
|
|
15
|
+
|
|
16
|
+
- cb29249: `@forumone/throughline`: the 1.0 package, starting from `@forumone/throughline-core` and `@forumone/throughline-plugin-contract`.
|
|
17
|
+
|
|
18
|
+
The root holds what is shared: environment checks, access helpers, the logger, utilities, the plugin and MCP tool types, and the MCP collector until `throughline()` wires it. Everything else is on a subpath: `/audit`, `/fields`, `/jobs`, `/jobs/inngest`, `/media` (now including reference tracking), `/observability`, `/testing`, `/client` and `/rsc`. The `throughline-payload` bin is unchanged.
|
|
19
|
+
|
|
20
|
+
Moving from 0.x, by `docs/spec/1.0-exports.md`:
|
|
21
|
+
|
|
22
|
+
- core's root no longer re-exports audit, events, references or observability; import them from `/audit`, `/jobs` and `/jobs/inngest`, `/media` and `/observability`.
|
|
23
|
+
- `/events` is now `/jobs` (the event taxonomy) and `/jobs/inngest` (the Inngest client and Vercel environment pinning). Augment `CoreEvents` on `@forumone/throughline/jobs`.
|
|
24
|
+
- `/references` is part of `/media`; `/env` and `/mcp` are part of the root; `/auth` is gone.
|
|
25
|
+
- plugin-contract's types are on the root. Its separate `McpMeta` interface is gone; the root's `McpMeta` is the one.
|
|
26
|
+
- Admin component paths are `@forumone/throughline/client#…` and `@forumone/throughline/rsc#UsedOnPanel`, so a site's `importMap.js` changes.
|
|
27
|
+
|
|
28
|
+
- 3b467f0: The last five 0.x server packages move in, by `docs/spec/1.0-exports.md`:
|
|
29
|
+
|
|
30
|
+
- `@forumone/throughline-audit` joins core's audit writer on `@forumone/throughline/audit`. `DEFAULT_AUDIT_COLLECTION_SLUG` is gone; use `DEFAULT_AUDIT_SLUG`, the same value.
|
|
31
|
+
- `@forumone/throughline-approvals` is `/approvals`. `APPROVALS_RESOLVER_SYMBOL` is internal.
|
|
32
|
+
- `@forumone/throughline-components` is `/components`.
|
|
33
|
+
- `@forumone/throughline-integrations` is `/integrations`; its `/client` (`SyncButton` and helpers) joins `@forumone/throughline/client`.
|
|
34
|
+
- `@forumone/throughline-email` and its `/templates` are `/email`. `DEFAULT_APPROVALS_COLLECTION_SLUG` is gone; use `DEFAULT_APPROVALS_SLUG` from `/approvals`, the same value. `validateOptions` is internal.
|
|
35
|
+
|
|
36
|
+
**Removed:** `createNotifyApprovalRequestFunction`, `createNotifyApprovalDecisionFunction` and `createNotifyApprovalExpiredFunction`. `emailPlugin` builds the same three Inngest functions itself, so `getEmailFunctions` and the function ids are unchanged; run `notify…Job` through an adapter to build one by hand.
|
|
37
|
+
|
|
38
|
+
Admin component paths follow: `@forumone/throughline/client#SyncButton`. Plugin ids in the registry are `@forumone/throughline/<subpath>`, with the audit query plugin at `/audit-query`.
|
|
39
|
+
|
|
40
|
+
- ea3754f: Publishing moves in from `@forumone/throughline-publishing`, by `docs/spec/1.0-exports.md`:
|
|
41
|
+
|
|
42
|
+
- `@forumone/throughline-publishing` and its `/checks` are `@forumone/throughline/publishing`.
|
|
43
|
+
- `/editorial` is `@forumone/throughline/editorial`.
|
|
44
|
+
- `/client` and `/rsc` are `@forumone/throughline/client` and `/rsc`, beside core's admin components.
|
|
45
|
+
|
|
46
|
+
Admin component paths follow, so a site's `importMap.js` changes: `@forumone/throughline/client#PublishButton`, `#UnpublishButton`, `#SchedulePublishField`, `#CommandPalette` and `#ReportsNav`, and `@forumone/throughline/rsc#ContentHealthView`, `#ContentCalendarView` and `#YourWorkDashboard`. `next` and `@payloadcms/next` are optional peers, used only by those components.
|
|
47
|
+
|
|
48
|
+
The 0.x entries below are `@forumone/throughline-core`'s, which this package grew from.
|
|
49
|
+
|
|
50
|
+
## 0.15.0
|
|
51
|
+
|
|
52
|
+
### Minor Changes
|
|
53
|
+
|
|
54
|
+
- 430f566: Adds hardening for client uploads to Vercel Blob, moved from forumone-2026, at `@forumone/throughline-core/media`. Additive.
|
|
55
|
+
|
|
56
|
+
With `@payloadcms/storage-vercel-blob`'s `clientUploads: true`, the browser PUTs straight to Blob, so Payload's own `upload.mimeTypes` and `validateSvg` never run, and the token is minted with `allowOverwrite: true`, so the object key is the only access control. These are the checks that do run:
|
|
57
|
+
|
|
58
|
+
- **`uploadPrefixField()`, `uniqueUploadPrefix()`, `storageKey()`.** A random folder per upload, so a second upload of `hero.mp4` cannot replace the first's bytes, and the store cannot be enumerated by filename. Add the column with a migration that backfills `''`: an existing document must never get a prefix, or every file 404s.
|
|
59
|
+
- **`refuseMimeTypesOutside(list, message?)`** (`beforeChange`) refuses a type off the list.
|
|
60
|
+
- **`refuseStorageKeyMismatch()`** (`beforeChange`) refuses a client upload whose stored key and recorded key disagree, which would leave a link that 404s.
|
|
61
|
+
- **`sanitizeStoredSvg()`** (`afterChange`) re-reads an SVG and writes back the allowlist-sanitised version (`sanitizeSvg`) when anything was removed.
|
|
62
|
+
- **`recordStoredFacts({ mimeTypes })`** (`afterChange`) corrects `filesize` and `mimeType` to the stored object, not the in-memory conversion Payload measured.
|
|
63
|
+
|
|
64
|
+
`@vercel/blob` and `@payloadcms/plugin-cloud-storage` are new optional peers, needed only by this subpath.
|
|
65
|
+
|
|
66
|
+
## 0.14.0
|
|
67
|
+
|
|
68
|
+
### Minor Changes
|
|
69
|
+
|
|
70
|
+
- fd4f42d: Three small 1.0 P2 items. Additive.
|
|
71
|
+
|
|
72
|
+
- **`hardenCoreCollections(config, { canLock? })`** (core), moved from forumone-2026. It narrows `payload-locked-documents`, which Payload ships open to any authenticated principal, to editors and admins. Before, an approver or an MCP API key could delete the locks that `overrideLock: false` depends on, or lock every document. Apply it to the sanitized config: `buildConfig({...}).then(hardenCoreCollections)`. It throws if Payload ever renames the collection, rather than becoming a no-op.
|
|
73
|
+
- **`list_job_failures`** (core): `jobFailuresPlugin({ mcpTools })` adds an MCP tool over the `job-failures` collection. It lists what failed, most recent first, filtered by `source`, `kind` or `sinceHours`, and reads as the caller, so the collection's read rule (admins, by default) decides who sees it.
|
|
74
|
+
- **Terminal-failure handlers for the email and webhook functions.** `emailPlugin`'s three notifications and the webhook integration's two functions ran with no `onFailure`, so a run that exhausted its retries was silent. Both now default to `createTerminalFailureHandler({ payload })`, which records a `job-failures` row, logs and reports. `emailPlugin` and `integrationsPlugin` take `onTerminalFailure` to replace it. Integrations get it as `ctx.onFailure`, for their own functions: `inngestJobs(ctx.inngest, { onFailure: ctx.onFailure })`. Function ids and triggers are unchanged; Inngest adds a "(failure)" registration for each.
|
|
75
|
+
|
|
76
|
+
## 0.13.0
|
|
77
|
+
|
|
78
|
+
### Minor Changes
|
|
79
|
+
|
|
80
|
+
- 841b91b: Adds the field kit, moved from forumone-2026, at `@forumone/throughline-core/fields`, and the `check_slug` MCP tool. Additive.
|
|
81
|
+
|
|
82
|
+
- `slugField`, `slugify`, and `refuseSlugHeldInTrash`. The slug follows the title until set, is normalised whenever it is set, and is never re-derived. The trash guard names the trashed document that holds a slug before the unique index refuses it with a bare error.
|
|
83
|
+
- `publishedAtField` and `publishingFields`. The date is stamped on first publish, and kept when an open editor sends it back empty. `scheduledPublishField` is the field `publishingPlugin` schedules by.
|
|
84
|
+
- `revisedAtField` and `contentRevisedAt`. They record when a person's change to a published document went public, not when the row last changed.
|
|
85
|
+
- `unlistedField` and `LISTED`: live at its URL, absent from automatic lists.
|
|
86
|
+
- `usedBy`: a signed-in-only join field for "where is this used?".
|
|
87
|
+
- `mapFields`.
|
|
88
|
+
- `characterCountPlugin`. Every capped text field gets a counter and a cap it can't be typed past. Its controls are at `@forumone/throughline-core/client`, and `@payloadcms/ui` is a new optional peer. Register it after every plugin that adds fields.
|
|
89
|
+
- `fieldsPlugin({ mcpTools })` binds `check_slug`. The tool normalises a slug, says whether it's free in a collection (the trash included) and who holds it, and suggests the first free alternative.
|
|
90
|
+
|
|
91
|
+
Every field keeps the name, type and index it had in forumone-2026, so adopting it changes no schema. The tool adds a checkbox to `payload-mcp-api-keys`, so a site that passes `mcpTools` needs a migration.
|
|
92
|
+
|
|
93
|
+
## 0.12.0
|
|
94
|
+
|
|
95
|
+
### Minor Changes
|
|
96
|
+
|
|
97
|
+
- 4289ee2: Adds reference tracking, moved from forumone-2026: what uses a document, a refusal to delete or trash it while anything does, a "Used on" panel, and the `find_references` and `can_delete` MCP tools. Additive.
|
|
98
|
+
|
|
99
|
+
It works with blocks stored as JSON, which Payload cannot query. An upload inside a block has no foreign key, so deleting the image succeeded and it vanished from every page that showed it. The scan walks each collection's field config alongside its data, so it needs no list of field names, and reads both the published and draft state of every document.
|
|
100
|
+
|
|
101
|
+
- `referencesPlugin({ collections, mcpTools })` guards each listed collection. It puts a `beforeDelete` refusal and a `beforeChange` trash refusal first in each hook list, and by default adds the panel as the first sidebar field. The refusal names the documents, says which use it inside a block, and fails closed: a scan that throws refuses rather than allows.
|
|
102
|
+
- `findReferences`, `findReferencedIds`, `referencesIn` and the guard factories are exported for hosts that want them alone, from the root and from `@forumone/throughline-core/references`.
|
|
103
|
+
- The panel is a server component at `@forumone/throughline-core/rsc#UsedOnPanel`, so a consumer that never renders the admin never loads React. React is an optional peer.
|
|
104
|
+
- Blocks resolve from each `blocks` field, its `blockReferences` and the config's `blocks` registry, so no block list needs passing. Rich text is covered: `upload` and `relationship` nodes, and `block` and `inlineBlock` nodes walked as the block they name. forumone-2026's version missed blocks inside rich text.
|
|
105
|
+
- The target's own collection is scanned too, skipping the document itself, so a taxonomy term's children are found without a second query.
|
|
106
|
+
|
|
107
|
+
The two tools add two checkboxes to `payload-mcp-api-keys`, so a site that passes `mcpTools` needs a migration.
|
|
108
|
+
|
|
109
|
+
## 0.11.0
|
|
110
|
+
|
|
111
|
+
### Minor Changes
|
|
112
|
+
|
|
113
|
+
- a8e06fc: Adds Inngest environment pinning for Vercel, moved from forumone-2026. Additive.
|
|
114
|
+
|
|
115
|
+
- `resolveInngestEnv()` returns `production` on Vercel production, `preview` for every Vercel preview, and `undefined` elsewhere, for `createInngestClient`'s `env`. Without it, the SDK names an environment after each branch, and each one runs a full copy of every cron. An explicit `INNGEST_ENV` still wins, and local dev is left alone even when `.env.local` came from `vercel env pull`.
|
|
116
|
+
- `registrableInngestFunctions(functions)` drops the cron-only functions in a preview, and keeps any function an event also triggers. `registersInngestCrons()` is the predicate on its own.
|
|
117
|
+
|
|
118
|
+
## 0.10.0
|
|
119
|
+
|
|
120
|
+
### Minor Changes
|
|
121
|
+
|
|
122
|
+
- 006ae30: A missing environment variable is reported together with every other one, in a
|
|
123
|
+
single error, instead of one plugin at a time.
|
|
124
|
+
|
|
125
|
+
The plugins that read the environment at init now declare what they cannot
|
|
126
|
+
start without, as data: `approvalsEnv` (`APPROVAL_TOKEN_SECRET`, 32+
|
|
127
|
+
characters), `emailEnv` (`RESEND_API_KEY`, `EMAIL_FROM_ADDRESS`) and `formsEnv`
|
|
128
|
+
(`FORMS_IP_HASH_SECRET`, 32+ characters). Each is a list of `EnvRequirement`
|
|
129
|
+
(`{ name, minLength?, why }`), a new type in `plugin-contract`, and each
|
|
130
|
+
plugin's own init check now reads the same entries, so the two cannot drift.
|
|
131
|
+
An empty or whitespace-only value now counts as missing in those checks.
|
|
132
|
+
|
|
133
|
+
Core exports `assertEnvironment(...checks)`. Call it first in
|
|
134
|
+
`payload.config.ts` with the plugins' lists and your own variables; it throws
|
|
135
|
+
one `EnvironmentError` whose first line reads "Configuration problem: N
|
|
136
|
+
environment variables are missing or invalid", followed by every missing or
|
|
137
|
+
too-short variable and why it is needed. Values are never printed. An argument
|
|
138
|
+
can also be a function, for a rule that is not "this name, this long", such as
|
|
139
|
+
a database URL accepted under several names. `checkEnvValue` is the one-value
|
|
140
|
+
check behind it, for a plugin's own backstop.
|
|
141
|
+
|
|
142
|
+
New projects call `assertEnvironment` at the top of `payload.config.ts` with
|
|
143
|
+
`approvalsEnv`, `emailEnv`, `formsEnv`, `PAYLOAD_SECRET` (32+ characters),
|
|
144
|
+
`NEXT_PUBLIC_SERVER_URL` and the database resolver, and `.env.example` marks
|
|
145
|
+
which variables are checked. An existing site can do the same and delete any
|
|
146
|
+
hand-kept copy of the plugins' requirements.
|
|
147
|
+
|
|
148
|
+
- 549d292: A `throughline-payload` bin: the Payload CLI, run so a hung command cannot outlive the shell that started it. pnpm does not forward signals to the node process it spawns, so a killed shell left `payload generate:types` running, and a hung one spinning on a core indefinitely.
|
|
149
|
+
|
|
150
|
+
- Payload runs in its own process group; SIGINT, SIGTERM and SIGHUP are forwarded to the group, then SIGKILL after `PAYLOAD_CLI_GRACE_MS` (default 5s)
|
|
151
|
+
- a wall clock, `PAYLOAD_CLI_TIMEOUT_MS` (default 5 minutes, `0` disables; none by default for `migrate*`), exits 124
|
|
152
|
+
- each run is recorded in `.payload-cli-pids` at the workspace root, and the next run — or `throughline-payload --reap` — kills a recorded group whose runner was killed, after checking its pid, start time and command line
|
|
153
|
+
|
|
154
|
+
- 70385c4: A failed background job has somewhere to be recorded, and core can report errors.
|
|
155
|
+
|
|
156
|
+
- **`job-failures` collection.** `jobFailuresPlugin()` from the new `@forumone/throughline-core/observability` subpath adds a read-only `job-failures` collection (admin-only by default) and attaches a writer that never throws; a row it cannot write is logged at `error` with the failure's summary and message. It is deliberately not the audit log: `audit-events` records MCP tool calls, its `mcpServer` column is required and constrained to MCP server names, and a cron that wrote there with any other value was rejected by Payload and silently dropped.
|
|
157
|
+
- **Error reporting.** `createErrorReporter` / `reportError` post JSON reports to `ERROR_WEBHOOK_URL` (or a URL you pass), with a one-line `text` so a Slack incoming webhook works as-is, a 3-second timeout, and no throw on any failure. `buildRequestErrorReport` shapes what Next's `onRequestError` receives and copies request headers from an allowlist; `authorization`, `cookie`, `x-api-key` and `x-forwarded-for` are never copied. `describeErrorReporting` gives a boot-log sentence for on, off or misconfigured.
|
|
158
|
+
|
|
159
|
+
**Migration required.** Registering `jobFailuresPlugin` adds a table (`job_failures`) and an enum (`enum_job_failures_kind`). Run `payload migrate:create` after adding it and commit the migration. The audit collection is unchanged.
|
|
160
|
+
|
|
161
|
+
- c8a86bf: Adds a `./testing` subpath with `describeAnonymousAccess(config, buckets)`. It registers a vitest suite that checks every collection's `read` rule against an anonymous request, with no database. Every collection in the config, including those added by plugins and by Payload, must be in exactly one bucket:
|
|
162
|
+
|
|
163
|
+
- `renderPath`: read by the public site, so an anonymous read must be allowed. A collection with drafts must narrow that read with a query.
|
|
164
|
+
- `private`: an anonymous read must be refused.
|
|
165
|
+
|
|
166
|
+
A collection in no bucket fails, so adding a collection fails until somebody decides where it goes. `checkAnonymousAccess` returns the same findings as a list. `vitest` is an optional peer, and the main entry does not re-export the subpath.
|
|
167
|
+
|
|
168
|
+
- ab623e1: `mcpApiKeyAccess(isAdmin)` makes `payload-mcp-api-keys`, the key collection `@payloadcms/plugin-mcp` brings, admin-only. Pass it as `mcpPlugin({ overrideApiKeyCollection: mcpApiKeyAccess(isAdmin) })`. It applies the site's admin rule to `read`, `create`, `update`, `delete` and `unlock`, and refuses an MCP key principal before it asks the rule, so a key can never manage keys. It changes `access` and nothing else, so it composes with an override that also sets, say, `admin.group`.
|
|
169
|
+
|
|
170
|
+
`isSignedIn(user)` and its `Access` form `signedIn` are a "signed in" check to use instead of `Boolean(req.user)`. They refuse an MCP key document on `req.user`, which Payload before 3.89.0 could put there on any REST route. `isMcpApiKeyPrincipal(user)` and `MCP_API_KEYS_SLUG` are exported for rules that need to tell the two apart directly. None of these affects `/api/mcp`, where a tool runs as the key's user.
|
|
171
|
+
|
|
172
|
+
- ab623e1: The `payload` peer range moves from `^3.0.0` to `^3.89.0` for every package that has one. **A site on Payload older than 3.89.0 must upgrade Payload before upgrading these packages.**
|
|
173
|
+
|
|
174
|
+
Before 3.89.0, the `payload-mcp-api-keys` collection that `@payloadcms/plugin-mcp` adds registered Payload's API-key strategy on every REST route. Any key could then become `req.user` outside `/api/mcp` and pass access rules written as `Boolean(req.user)`. Every Throughline site runs that plugin, so the floor is the same for every package. No package's code changes with this bump.
|
|
175
|
+
|
|
176
|
+
- 36728c4: Collections that Throughline plugins declare now sit in a `Throughline` group in the admin sidebar, instead of loose at the top of it above every group. That covers `audit-events` (`auditPlugin`), the approvals collection (`approvalsPlugin`), `integrations` (`integrationsPlugin`), and `forms` and `form-submissions` (`formsPlugin`).
|
|
177
|
+
|
|
178
|
+
Each of those plugins accepts `admin: { group }`, which applies to every collection it declares:
|
|
179
|
+
|
|
180
|
+
- omitted: the `Throughline` group.
|
|
181
|
+
- a string, or a locale map such as `{ en: 'Workflow', fr: 'Flux' }`: that group.
|
|
182
|
+
- `false`: ungrouped, in Payload's default "Collections" section. This does not hide the collection, which is what `false` means on a collection's own `admin.group`.
|
|
183
|
+
|
|
184
|
+
A site that groups these collections with its own config plugin can pass `admin: { group }` to each plugin and delete that code. `createAuditCollection`, `createApprovalsCollection` and `createIntegrationsCollection` accept the same `admin` option.
|
|
185
|
+
|
|
186
|
+
`@forumone/throughline-plugin-contract` exports the shared pieces: `CollectionPluginOptions`, `PluginAdminOptions`, `PluginAdminGroup`, `DEFAULT_ADMIN_GROUP` and `resolveAdminGroup`, the helper a plugin spreads into each collection's `admin` block. `@forumone/throughline-core` re-exports the types.
|
|
187
|
+
|
|
188
|
+
### Patch Changes
|
|
189
|
+
|
|
190
|
+
- Updated dependencies [006ae30]
|
|
191
|
+
- Updated dependencies [ab623e1]
|
|
192
|
+
- Updated dependencies [36728c4]
|
|
193
|
+
- @forumone/throughline-plugin-contract@0.5.0
|
|
194
|
+
|
|
195
|
+
## 0.9.1
|
|
196
|
+
|
|
197
|
+
### Patch Changes
|
|
198
|
+
|
|
199
|
+
- d02772f: A refused MCP tool call now carries MCP's `isError` flag.
|
|
200
|
+
|
|
201
|
+
Every server in the suite answers a refusal with `{ error: … }` and returns it
|
|
202
|
+
rather than throwing, so that a denial reads to the model as a denial rather
|
|
203
|
+
than as a server fault. None of them set `isError`, so the refusal arrived as a
|
|
204
|
+
**successful** tool result that happened to contain an `error` key: a client
|
|
205
|
+
checking the protocol's flag instead of parsing the body read every refusal as
|
|
206
|
+
a success.
|
|
207
|
+
|
|
208
|
+
The publishing tools are where this was found, and they are the worst case for
|
|
209
|
+
it. `@payloadcms/plugin-mcp` assigns no `req.user` — it mutates `docs[0].user`
|
|
210
|
+
and passes it separately to its own CRUD tools — so `contextFrom(req)` reads
|
|
211
|
+
`null` and _every_ `Bearer`-authenticated publishing call is refused at
|
|
212
|
+
`actor.ts`'s identity guard. All of those refusals reported success.
|
|
213
|
+
|
|
214
|
+
Fixed in `toPayloadMcpTool`, which is the one adapter every tool in all six
|
|
215
|
+
servers passes through, so a tool written tomorrow is covered without its
|
|
216
|
+
author knowing the file exists.
|
|
217
|
+
|
|
218
|
+
**Nothing changes for a client that parses the body.** The content block is
|
|
219
|
+
byte-identical, and `isError` is absent rather than `false` on a success, so a
|
|
220
|
+
consumer reading `{ error }` today sees no difference. A consumer reading the
|
|
221
|
+
flag now sees the truth instead of its opposite.
|
|
222
|
+
|
|
223
|
+
The test is a non-empty string `error`, so a refusal that later grows a second
|
|
224
|
+
field — a code, a retry hint — keeps its flag. The corollary is now documented
|
|
225
|
+
on `deniedEnvelope`: `error` is reserved for refusals, and a success result
|
|
226
|
+
reports failure through `ok`, `healthy`, `message` or `details`.
|
|
227
|
+
|
|
228
|
+
Found exercising audit `04` F-02 against a real MCP key; forumone-2026#614.
|
|
229
|
+
|
|
230
|
+
## 0.9.0
|
|
231
|
+
|
|
232
|
+
### Minor Changes
|
|
233
|
+
|
|
234
|
+
- debfcd2: `system.error` now has a writer. Every MCP tool handler the suite serves is
|
|
235
|
+
wrapped, so a tool that throws records one `system.error` audit row — the
|
|
236
|
+
server, the tool, the caller, the caller's `_meta`, and the error's message —
|
|
237
|
+
before the throw propagates to the MCP client as it did before.
|
|
238
|
+
|
|
239
|
+
The row carries no stack and no arguments: `error_message` is readable by every
|
|
240
|
+
admin and editor, a stack names file paths, and a tool's input can hold a draft
|
|
241
|
+
body or a form submission. A failure inside the recording is logged and
|
|
242
|
+
swallowed, so this wrapper can never replace a tool's real error with its own.
|
|
243
|
+
|
|
244
|
+
`mcpServer` is resolved through a map rather than from the collector's own
|
|
245
|
+
server name, because the two vocabularies disagree: the components server
|
|
246
|
+
declares itself `components` and the audit enum's value is `component`. A
|
|
247
|
+
server that passes an audit writer and has no name in that map is now a
|
|
248
|
+
boot-time refusal instead of a row Payload silently rejects. New export:
|
|
249
|
+
`auditServerFor`.
|
|
250
|
+
|
|
251
|
+
Each of the six servers passes its audit writer to `collector.add`, alongside
|
|
252
|
+
the logger it already passed. A host wiring a tool by hand passes none and gets
|
|
253
|
+
the previous behaviour.
|
|
254
|
+
|
|
255
|
+
## 0.8.2
|
|
256
|
+
|
|
257
|
+
### Patch Changes
|
|
258
|
+
|
|
259
|
+
- 262768a: The five publishing MCP tools now refuse an unauthenticated call and run their
|
|
260
|
+
reads and writes as the caller.
|
|
261
|
+
|
|
262
|
+
`publish`, `unpublish`, `rollback`, `schedulePublish` and `getPublishStatus`
|
|
263
|
+
built their actor without `enforceAccessAs`, which is the only thing that makes
|
|
264
|
+
the service pass `{ user, overrideAccess: false }` to Payload. So every one of
|
|
265
|
+
them ran at the Local API default of `overrideAccess: true` — publish,
|
|
266
|
+
unpublish, roll back or schedule any document in any collection with no
|
|
267
|
+
authorization check. `rollback` called `restoreVersion` with no user and no
|
|
268
|
+
override flag at all.
|
|
269
|
+
|
|
270
|
+
`tools/actor.ts` refuses when there is no identity and hands the caller to the
|
|
271
|
+
service as the principal to enforce against. Deliberately not a role gate: the
|
|
272
|
+
admin HTTP path already requires a user, sets `enforceAccessAs`, and lets the
|
|
273
|
+
collection's own `update` rule decide. The MCP path now participates in that
|
|
274
|
+
rather than carrying a second policy.
|
|
275
|
+
|
|
276
|
+
**Behavioural change for consumers.** A tool call arriving with no `ctx.user`
|
|
277
|
+
now returns `{ error: 'Must be authenticated…' }` instead of performing the
|
|
278
|
+
operation. In practice that is every `Bearer`-authenticated MCP call, because
|
|
279
|
+
`@payloadcms/plugin-mcp` does not assign `req.user` — which is why the audit,
|
|
280
|
+
integrations and approvals servers already denied and these five did not.
|
|
281
|
+
|
|
282
|
+
`@forumone/throughline-core`'s README claimed `requiredScope` is enforced —
|
|
283
|
+
hidden from `tools/list` and refused unless granted. It was, by an `auth.ts`
|
|
284
|
+
that "one MCP transport, not seven" (#80) removed along with the six
|
|
285
|
+
per-server endpoints. The declarations survived; the enforcement did not. The
|
|
286
|
+
README now says so, and says what gates a tool instead.
|
|
287
|
+
|
|
288
|
+
## 0.8.1
|
|
289
|
+
|
|
290
|
+
### Patch Changes
|
|
291
|
+
|
|
292
|
+
- 957403b: One `@types/node`, so a host does not end up with two copies of `@payloadcms/ui`
|
|
293
|
+
|
|
294
|
+
Twelve packages asked for `@types/node@^20.17.0` and `design-system-payload`
|
|
295
|
+
asked for `^24.13.2`. Inside this repository that is untidy. Inside a host that
|
|
296
|
+
consumes the suite from source — which is how `forumone/forumone-2026` uses it,
|
|
297
|
+
as a git submodule in one pnpm workspace — it is a runtime failure.
|
|
298
|
+
|
|
299
|
+
pnpm hashes a package's identity with its resolved peers. `publishing` and
|
|
300
|
+
`integrations` both take `@payloadcms/ui` as a peer _and_ as a devDependency, so
|
|
301
|
+
each got its own copy resolved against `@types/node@20`, while the host's copy
|
|
302
|
+
resolved against `@types/node@24`. Same version, 3.87.1, two directories:
|
|
303
|
+
|
|
304
|
+
apps/web → @payloadcms+ui@3.87.1_…_9ce0de5c…
|
|
305
|
+
packages/publishing → @payloadcms+ui@3.87.1_…_13184ec4…
|
|
306
|
+
packages/integrations → @payloadcms+ui@3.87.1_…_13184ec4…
|
|
307
|
+
|
|
308
|
+
Two directories are two module instances. Two instances of `@payloadcms/ui` are
|
|
309
|
+
two `ConfigContext` objects, and `PublishButton` read the one the admin's
|
|
310
|
+
provider had never populated:
|
|
311
|
+
|
|
312
|
+
TypeError: Cannot destructure property 'config' of useConfig() as it is undefined
|
|
313
|
+
|
|
314
|
+
The host saw an intermittent 500 on every admin document view — `PublishButton`
|
|
315
|
+
is installed on each collection with a publish policy, so lists, `/admin` and
|
|
316
|
+
the login screen were all fine and only editing broke. Nothing caught it:
|
|
317
|
+
install, `--frozen-lockfile`, typecheck, lint and every test passed, because the
|
|
318
|
+
two copies are byte-identical and the split exists only at module resolution.
|
|
319
|
+
forumone/forumone-2026#498.
|
|
320
|
+
|
|
321
|
+
Aligning on `^24.13.2` collapses them to one instance. Nothing here targets a
|
|
322
|
+
Node 20 API deliberately; the packages typecheck and test unchanged against the
|
|
323
|
+
newer types.
|
|
324
|
+
|
|
325
|
+
`create-throughline` keeps `^20.17.0` on purpose. It is the one package
|
|
326
|
+
declaring `engines.node: >=20.9.0`, and typechecking a CLI against types newer
|
|
327
|
+
than the runtime it promises to support is how a Node 24-only call ships to
|
|
328
|
+
somebody on Node 20.
|
|
329
|
+
|
|
330
|
+
- Updated dependencies [957403b]
|
|
331
|
+
- @forumone/throughline-plugin-contract@0.4.1
|
|
332
|
+
|
|
333
|
+
## 0.8.0
|
|
334
|
+
|
|
335
|
+
### Minor Changes
|
|
336
|
+
|
|
337
|
+
- a9262da: Per-tool gating works, because tool names no longer wait for `onInit`
|
|
338
|
+
|
|
339
|
+
`@payloadcms/plugin-mcp` generates one per-key checkbox per tool while the host's
|
|
340
|
+
config is being built, and then gates every call on the checkbox matching the
|
|
341
|
+
tool's name. Every Throughline tool was built at `onInit` — each closes over
|
|
342
|
+
`payload`, the publishing service or the manifest loader — so the array it maps
|
|
343
|
+
over was empty, no checkboxes were generated, and its `?? false` denied all 27
|
|
344
|
+
tools to every key. A valid key got a 200 and an empty `tools/list`, with nothing
|
|
345
|
+
wrong on either side.
|
|
346
|
+
|
|
347
|
+
The plugin needs only `name` and `description` then, and neither needs a Payload.
|
|
348
|
+
So a server now **declares** its tools as the config is built and **binds** their
|
|
349
|
+
handlers at `onInit`:
|
|
350
|
+
|
|
351
|
+
```ts
|
|
352
|
+
options.mcpTools?.declare(PUBLISHING_TOOL_DESCRIPTORS, { serverName: 'publishing' })
|
|
353
|
+
// …later, at onInit:
|
|
354
|
+
options.mcpTools?.add(tools, { serverName: 'publishing' })
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
Each package gained a `tools/descriptors.ts` holding every tool's name and
|
|
358
|
+
description; the factories spread from it, so the checkbox and the MCP client
|
|
359
|
+
cannot describe a tool differently. A `descriptors.test.ts` in each package
|
|
360
|
+
asserts the two sets match, without needing a database.
|
|
361
|
+
|
|
362
|
+
`createMcpToolCollector` gains `declare()` and an `unbound` list. Both mismatches
|
|
363
|
+
are refused rather than absorbed: a tool built but never declared throws at
|
|
364
|
+
`onInit` (it would otherwise be denied to every key, silently), and a tool
|
|
365
|
+
declared but never bound stays advertised with a handler that explains itself.
|
|
366
|
+
|
|
367
|
+
**Order in the host's plugin array is now load-bearing.** Every tool-bearing
|
|
368
|
+
server must come before `mcpPlugin`, or it declares into an array that has
|
|
369
|
+
already been read. It was only a convention before; it is a requirement now, and
|
|
370
|
+
the failure mode — a server's tools missing from every key — is the one this
|
|
371
|
+
change exists to remove.
|
|
372
|
+
|
|
373
|
+
`requiredScope` stays declared and read by nothing. Enforcement is the checkbox;
|
|
374
|
+
these record which tools are consequential, and are the mapping a scope-aware
|
|
375
|
+
default would be built from.
|
|
376
|
+
|
|
377
|
+
The playground registers `mcpPlugin` for the first time, so the suite's only
|
|
378
|
+
end-to-end host now exercises the tools rather than just their composition.
|
|
379
|
+
|
|
380
|
+
## 0.7.0
|
|
381
|
+
|
|
382
|
+
### Minor Changes
|
|
383
|
+
|
|
384
|
+
- 3140ea0: One MCP transport, not seven
|
|
385
|
+
|
|
386
|
+
Every plugin served its own `POST /<prefix>/mcp` on a 146-line JSON-RPC subset of
|
|
387
|
+
the protocol that spoke `tools/list` and `tools/call` and nothing else. Payload
|
|
388
|
+
ships an MCP server built on the official SDK — streamable HTTP, sessions, per-key
|
|
389
|
+
capability checkboxes — and the tools were never the transport. They now reach a
|
|
390
|
+
client through the host's `@payloadcms/plugin-mcp`, on one `/api/mcp`, via the
|
|
391
|
+
collector `createMcpToolCollector` already provided.
|
|
392
|
+
|
|
393
|
+
**Breaking.** Removed from `@forumone/throughline-core`: `createMcpHandler`,
|
|
394
|
+
`McpHandlerOptions`, `createApiKeysCollection`, `ApiKeysCollectionOptions`,
|
|
395
|
+
`DEFAULT_API_KEYS_SLUG`, `createBearerTokenAuthenticator`,
|
|
396
|
+
`BearerTokenAuthenticatorOptions`, `generateApiKey`. Removed from
|
|
397
|
+
`@forumone/throughline-plugin-contract`: `McpAuthenticator`, `McpAuthResult`.
|
|
398
|
+
`sha256Hex` stays exported, from `./utils` rather than `./auth`.
|
|
399
|
+
|
|
400
|
+
`routePrefix` is gone from `auditQueryPlugin`, `componentsPlugin` and
|
|
401
|
+
`integrationsPlugin` — omitted from their options types, so passing one is a
|
|
402
|
+
compile error rather than config that reads as if it does something. `/mcp` was
|
|
403
|
+
the only endpoint any of the three served. `publishingPlugin`, `approvalsPlugin`
|
|
404
|
+
and `formsPlugin` keep theirs; they still serve admin controls, the approval
|
|
405
|
+
action link and the public form post.
|
|
406
|
+
|
|
407
|
+
**A host that passes no `mcpTools` collector now has no MCP surface.** There is no
|
|
408
|
+
per-server endpoint left as a fallback. This is a config change of one line per
|
|
409
|
+
plugin, and `createMcpToolCollector`'s own docs carry the shape.
|
|
410
|
+
|
|
411
|
+
**What this costs, stated plainly.** `requiredScope` is now read by nothing —
|
|
412
|
+
`plugin-mcp` gates on checkboxes generated at config time, which this suite cannot
|
|
413
|
+
fill because every tool is built at `onInit`. So a key that authenticates reaches
|
|
414
|
+
every collected tool, exactly as an all-or-nothing per-server key did. The
|
|
415
|
+
declarations are kept because they are the mapping those checkboxes need; #78
|
|
416
|
+
tracks restoring enforcement, and the type's own doc comment says so.
|
|
417
|
+
|
|
418
|
+
Also drops the key collection from the playground, which leaves that app with no
|
|
419
|
+
MCP surface at all until `mcpPlugin` can be wired there — #79, blocked on moving
|
|
420
|
+
it off `payload@^3.83.0`.
|
|
421
|
+
|
|
422
|
+
### Patch Changes
|
|
423
|
+
|
|
424
|
+
- Updated dependencies [3140ea0]
|
|
425
|
+
- @forumone/throughline-plugin-contract@0.4.0
|
|
426
|
+
|
|
427
|
+
## 0.6.0
|
|
428
|
+
|
|
429
|
+
### Minor Changes
|
|
430
|
+
|
|
431
|
+
- 9131065: Three helpers that existed once per package now exist once
|
|
432
|
+
- **`unwrapRelationshipId`** had four definitions — three private to `approvals`, one exported from `email` — differing only in a null guard that `typeof value === 'string'` already covers. One deliberate change comes with the move: none of the four handled a _numeric_ id, so on Postgres at `depth: 0` they returned `null` for a relationship that was populated fine. No caller reads at depth 0 today, so this fixes nothing and stops a shared helper being wrong for the first caller that does.
|
|
433
|
+
- **`deniedEnvelope`** had three identical definitions, one per server with an access predicate. The role predicates stay where they are: what counts as an audit reader is not what counts as a forms author, and collapsing those would put one package's policy in another's file.
|
|
434
|
+
- **The MCP handler rebuilt `createNamedLogger` inline**, forty lines from the real one in the same package.
|
|
435
|
+
|
|
436
|
+
Nothing else in the duplication audit survived checking. `createFakePayload` has six definitions and three distinct implementations — a query engine, a two-line map read, and a stateful form store — which share a name and nothing else; merging them means building a fake that does all three jobs. `createFakeInngest` has one definition and three importers. The six MCP endpoint stanzas are real duplication that should be deleted rather than merged, once hosts move to `@payloadcms/plugin-mcp`.
|
|
437
|
+
|
|
438
|
+
## 0.5.0
|
|
439
|
+
|
|
440
|
+
### Minor Changes
|
|
441
|
+
|
|
442
|
+
- 1a4a441: Let every server's tools be served by Payload's own MCP plugin
|
|
443
|
+
|
|
444
|
+
`createMcpToolCollector()` in core, and an `mcpTools` option on all six servers. The host hands the collector's array to `@payloadcms/plugin-mcp` at config time and each plugin fills it at `onInit` — which works because the plugin reads `mcp.tools` inside the handler it builds per request, so an array handed over empty is read populated.
|
|
445
|
+
|
|
446
|
+
That ordering is the whole problem this solves: every tool in the suite is built at `onInit` because every one closes over `payload`, and `mcpPlugin` takes its tools as a config option.
|
|
447
|
+
|
|
448
|
+
Omit `mcpTools` and nothing changes — each server keeps its own `/mcp` endpoint, which is what lets a host move one at a time rather than all six at once.
|
|
449
|
+
|
|
450
|
+
Duplicate tool names are refused, naming both servers. Six servers each owning a `publish` was fine while each had its own endpoint; one server is one namespace, and an MCP client offered two tools under one name gets whichever registered last.
|
|
451
|
+
|
|
452
|
+
**Also fixes a defect the integration test found.** `service.loadDocument` called `findByID` without `disableErrors`, so a missing document threw `NotFound` before the pipeline ran — which made the `exist` step's `not-found` branch unreachable from every caller, and turned "publish a document that does not exist" into a thrown error instead of the diagnostic the pipeline exists to return. The step's own tests passed it an empty document and so never noticed. `unpublish` now distinguishes a missing document from one that is merely already a draft.
|
|
453
|
+
|
|
454
|
+
## 0.4.0
|
|
455
|
+
|
|
456
|
+
### Minor Changes
|
|
457
|
+
|
|
458
|
+
- 40839b5: Stop publishing code nothing imports
|
|
459
|
+
|
|
460
|
+
`@forumone/throughline-core` loses three things no package in the suite, and no consumer, has ever called:
|
|
461
|
+
- **`./env`** — `ENV_VARS`, `validateBaseEnv`, `requireEnv`, `optionalEnv`, and the subpath export that served them. The idea was that plugins would read `process.env` through shared constants instead of hard-coded strings; every plugin hard-codes the string, including the ones in this repo. A convention with no adherents is not a convention.
|
|
462
|
+
- **`shallowDiff`** — written for the audit writer's `diff` field, never wired to it. The writer still takes a caller-supplied diff, and Payload's own version diffing is the better answer if one is ever wanted.
|
|
463
|
+
- **`generateId`** — an id generator in a framework where Payload assigns the ids.
|
|
464
|
+
|
|
465
|
+
`@forumone/throughline-plugin-contract` stops shipping `examplePlugin`. It is documentation of a shape, and it now lives in the playground, which is where a shape gets demonstrated — the published package was carrying 74 lines of example for every consumer that installs it.
|
|
466
|
+
|
|
467
|
+
Removing exports from a published package, hence minor rather than patch. Nothing in this repository, and nothing in the suite's only consumer, imports any of it.
|
|
468
|
+
|
|
469
|
+
- 9f39ace: Enforce API-key scopes, which until now were only a label
|
|
470
|
+
|
|
471
|
+
The API-keys collection has always had a required `scopes` field, the README has always told you to mint keys with `--scopes publishing.execute`, and the scheduled-publish factory documents that its key "must carry `publishing.execute` scope". Nothing read the field. Every key could do whatever its linked user could, whatever it said on the label.
|
|
472
|
+
|
|
473
|
+
A tool may now declare `requiredScope`, and the handler holds callers to it: the tool is hidden from `tools/list` and refused on a direct call unless the key names that scope. Hidden as well as refused, because an agent shown a tool it will be turned away from will try it, fail, and report the tool as broken when what is narrow is the key.
|
|
474
|
+
|
|
475
|
+
The consequential tools are annotated — `publish`, `unpublish`, `schedule_publish`, `rollback` (`publishing.execute`); `request_approval` (`approvals.request`); `respond_to_approval` (`approvals.decide`); the three form writers (`forms.manage`); `trigger_sync` and `test_integration` (`integrations.trigger`). Reads are left unscoped, which is the right default for a read.
|
|
476
|
+
|
|
477
|
+
**This narrows existing keys.** A key minted with one scope could previously call every tool on every server and now cannot. That is the point, but it will change what an existing MCP client can do — check the scopes on your keys before upgrading. A key carrying no scopes at all passes nothing scoped: absent is read as none, not as everything.
|
|
478
|
+
|
|
479
|
+
- f138b3d: One audit actor shape for every tool, and stop recording agents as people
|
|
480
|
+
|
|
481
|
+
Ten tools built the audit actor by hand and four of them disagreed. Three were only untidy — a dropped `userName`, conditional spreads, an assumption that `ctx.user` is non-null. The fourth was wrong: the component tools wrote `type: 'user'` unconditionally, so a call made with an API key and no linked user was recorded as a person. An audit log that cannot tell an agent from an editor is not an audit log.
|
|
482
|
+
|
|
483
|
+
`auditContext(ctx, meta)` is now exported from core and used at all eight tool call sites. `type` follows the rule the publishing service already used — a call carrying a user is that user's, one without is the system's — and `apiKeyName` rides along either way, because a key acting for a linked user is still worth naming.
|
|
484
|
+
|
|
485
|
+
It also passes `sessionId` through for the first time. The column has been on the audit collection since it was written and nothing ever filled it; it is what lets somebody reading the log group one conversation's writes instead of reading them one at a time.
|
|
486
|
+
|
|
487
|
+
- 6fac789: Add `toPayloadMcpTool`, so Throughline's tools can be served by Payload's own MCP plugin
|
|
488
|
+
|
|
489
|
+
Payload ships `@payloadcms/plugin-mcp`, exact-pinned to the Payload version, built on the official MCP SDK: streamable HTTP, sessions, per-key per-tool capability checkboxes, and generic CRUD tools derived from the field configs. Against that, `createMcpHandler` here is a 146-line JSON-RPC subset speaking `tools/list` and `tools/call`, mounted six times over.
|
|
490
|
+
|
|
491
|
+
The transport was never the product. The tools are. This adapter is what makes moving between the two a configuration change rather than a rewrite of every tool: it translates the input schema (`withMeta`'s `z.object` to the raw shape the plugin registers), the context (a `PayloadRequest` to an `McpToolContext`), and the result (a tool's own object to MCP content blocks).
|
|
492
|
+
|
|
493
|
+
Nothing is wired to it. It is the outcome of a spike, and the servers move over one at a time.
|
|
494
|
+
|
|
495
|
+
### Patch Changes
|
|
496
|
+
|
|
497
|
+
- Updated dependencies [40839b5]
|
|
498
|
+
- Updated dependencies [9f39ace]
|
|
499
|
+
- @forumone/throughline-plugin-contract@0.3.0
|
|
500
|
+
|
|
501
|
+
## 0.3.0
|
|
502
|
+
|
|
503
|
+
### Minor Changes
|
|
504
|
+
|
|
505
|
+
- d20f909: Bind an approval to the document's content rather than to its `updatedAt`.
|
|
506
|
+
|
|
507
|
+
`request_approval` stored `String(document['updatedAt'] ?? …)` as `targetVersion`,
|
|
508
|
+
and publishing's approval step recomputed the same expression at publish time. So
|
|
509
|
+
an approval was tied to a timestamp that moves on **every** save. An editor fixing
|
|
510
|
+
a typo between an approver opening the request and clicking approve invalidated the
|
|
511
|
+
approval — and the approver spent that time reading a version that no longer
|
|
512
|
+
existed.
|
|
513
|
+
|
|
514
|
+
Requiring re-approval after an edit is a defensible rule. Inheriting it from
|
|
515
|
+
whichever timestamp field happened to be nearby is not, and it is why **autosave
|
|
516
|
+
could not be turned on** anywhere the approvals plugin is installed: autosave moves
|
|
517
|
+
`updatedAt` every couple of seconds of typing, so a pending approval would be
|
|
518
|
+
invalidated continuously.
|
|
519
|
+
|
|
520
|
+
Both sides now call `documentContentHash(document)`, new in
|
|
521
|
+
`@forumone/throughline-core`. It hashes the document with the metadata that moves
|
|
522
|
+
without the content moving stripped at every level — `id`, `createdAt`,
|
|
523
|
+
`updatedAt`, `_status`, `__v`, `_id`, `globalType` — over keys in sorted order,
|
|
524
|
+
since blocks come back out of JSONB in no promised order. Array order is preserved,
|
|
525
|
+
because that is the order of the blocks on the page. `{ exclude }` adds
|
|
526
|
+
app-specific bookkeeping fields to the strip list.
|
|
527
|
+
|
|
528
|
+
The rule is now the one that was wanted all along: a save that changed nothing
|
|
529
|
+
keeps a granted approval, a save that changed something invalidates it, and an edit
|
|
530
|
+
that is reverted brings the approval back. That last one is why this is a content
|
|
531
|
+
hash rather than a version id — a version id moves whether or not the content did.
|
|
532
|
+
|
|
533
|
+
The two sides only agree because they load the document identically, with
|
|
534
|
+
`payload.findByID({ collection, id, draft: true })` at the config's default depth.
|
|
535
|
+
A populated relationship and a bare relationship id are different values and no
|
|
536
|
+
normalising makes them one, so a caller hashing a document fetched at some other
|
|
537
|
+
depth gets a hash that matches nothing. That is stated on the function.
|
|
538
|
+
|
|
539
|
+
**Approvals pending at upgrade must be re-requested.** Their `targetVersion` holds
|
|
540
|
+
an ISO timestamp; the publish step now computes a hash, so nothing matches and
|
|
541
|
+
those documents report `approval-required` until a fresh request is granted. No
|
|
542
|
+
migration is offered, because the old value cannot be converted — the content it
|
|
543
|
+
was granted against is not recoverable from a timestamp. Grant a moment for
|
|
544
|
+
in-flight requests to clear before upgrading, or expect approvers to be asked once
|
|
545
|
+
more.
|
|
546
|
+
|
|
547
|
+
Also exports `isDraftWrite` from `@forumone/throughline-publishing`. It is the
|
|
548
|
+
predicate the plugin's own trust boundary uses to tell a "Save draft" apart from
|
|
549
|
+
an unpublish, and it is unavailable to host code that needs the same answer: an
|
|
550
|
+
`afterChange` hook cannot work it out, because Payload sets `data._status =
|
|
551
|
+
'draft'` on any `draft: true` update before the hooks run and `previousDoc` is the
|
|
552
|
+
latest _version_ rather than the live document. With autosave on, a host hook that
|
|
553
|
+
drops a cache or sends a notification fires every few seconds of typing unless it
|
|
554
|
+
asks this first.
|
|
555
|
+
|
|
556
|
+
Minor rather than patch on all three: `documentContentHash` and `isDraftWrite` are
|
|
557
|
+
new public API, and the stored meaning of `targetVersion` changes.
|
|
558
|
+
|
|
559
|
+
## 0.2.2
|
|
560
|
+
|
|
561
|
+
### Patch Changes
|
|
562
|
+
|
|
563
|
+
- 7ee992d: Fix broken external installs of the core plugins.
|
|
564
|
+
|
|
565
|
+
Every core plugin emits a runtime `import { getPluginRegistry } from '@forumone/throughline-plugin-contract'`, but `plugin-contract` was marked `private` and never published — so the published plugins pinned `@forumone/throughline-plugin-contract: 0.0.0`, a version that does not exist on npm, and any external `pnpm install` failed with a 404.
|
|
566
|
+
|
|
567
|
+
`plugin-contract` is now published, so the dependent plugins re-pin a real version. The cross-plugin registry is keyed on a global `Symbol.for(...)` and stored on the Payload instance, so behavior is unchanged.
|
|
568
|
+
|
|
569
|
+
Also fixes the scaffolder, which pinned `@forumone/throughline-reference-ds@^0.1.0` (latest is `0.2.0`) in the generated `apps/web` and `design-system` packages.
|
|
570
|
+
|
|
571
|
+
- Updated dependencies [7ee992d]
|
|
572
|
+
- @forumone/throughline-plugin-contract@0.2.1
|
|
573
|
+
|
|
574
|
+
## 0.2.1
|
|
575
|
+
|
|
576
|
+
### Patch Changes
|
|
577
|
+
|
|
578
|
+
- a4b5108: Initial release of the forms package. Wraps Payload's Form Builder plugin with the Throughline policy layer: mandatory privacy notice, consent enforcement (server-side), honeypot spam protection, Postgres-backed per-IP rate limiting, a destination allowlist (the security perimeter), and submitter confirmations. Six MCP tools (`list_allowed_destinations`, `validate_form`, `create_form`, `update_form_fields`, `update_form_destinations`, `get_form_submissions`) and four Inngest functions (`form-fan-out`, `form-email-destination`, `form-webhook-destination`, `form-submitter-confirmation`) drive the conversational flow and the async destination delivery. Includes `FormSubmissionEmail` and `SubmitterConfirmationEmail` React Email templates. Allowlist enforcement runs at three layers (MCP tool, collection beforeChange hook, fan-out worker) so prompt injection or admin direct-API writes can't bypass it. IPs are HMAC-hashed; raw IPs are never persisted. Adds `form.updated` to the core audit-action taxonomy used by the two update tools.
|
|
579
|
+
|
|
580
|
+
## 0.2.0
|
|
581
|
+
|
|
582
|
+
### Minor Changes
|
|
583
|
+
|
|
584
|
+
- [#14](https://github.com/forumone/throughline/pull/14) [`5329d97`](https://github.com/forumone/throughline/commit/5329d97363099a54bcae2516a8aa9eff8cd735fc) Thanks [@briangraves](https://github.com/briangraves)! - Initial release. Provides the audit log (collection + fire-and-forget writer + plugin), MCP authentication (bearer-token authenticator + API-keys collection with SHA-256 hashed keys), event taxonomy and Inngest client factory, MCP handler infrastructure (JSON-RPC over HTTP) with the `_meta` helper for prompt/reasoning capture, standard env-var conventions, a default logger, and shared utilities. Every server package in the framework depends on this.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Forum One Communications Corporation
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|