@aglyn/aglyn 1.0.0-beta.221 → 1.0.0-beta.223
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/package.json +15 -11
- package/src/lib/app-utils/agent-openapi.js +1 -1
- package/src/lib/app-utils/agent-openapi.js.map +1 -1
- package/src/lib/app-utils/analytics-events.d.ts +3 -2
- package/src/lib/app-utils/analytics-events.js +3 -2
- package/src/lib/app-utils/analytics-events.js.map +1 -1
- package/src/lib/app-utils/api-plugins.d.ts +30 -0
- package/src/lib/app-utils/api-plugins.js +24 -1
- package/src/lib/app-utils/api-plugins.js.map +1 -1
- package/src/lib/app-utils/author-html.d.ts +1 -1
- package/src/lib/app-utils/author-html.js.map +1 -1
- package/src/lib/app-utils/bandwidth-cap.d.ts +12 -1
- package/src/lib/app-utils/bandwidth-cap.js +17 -1
- package/src/lib/app-utils/bandwidth-cap.js.map +1 -1
- package/src/lib/app-utils/compose-reusable-components.d.ts +19 -0
- package/src/lib/app-utils/compose-reusable-components.js +116 -26
- package/src/lib/app-utils/compose-reusable-components.js.map +1 -1
- package/src/lib/app-utils/console-routes.d.ts +4 -0
- package/src/lib/app-utils/console-routes.js +3 -0
- package/src/lib/app-utils/console-routes.js.map +1 -1
- package/src/lib/app-utils/contacts.d.ts +71 -0
- package/src/lib/app-utils/contacts.js +55 -0
- package/src/lib/app-utils/contacts.js.map +1 -1
- package/src/lib/app-utils/contexts.d.ts +1 -0
- package/src/lib/app-utils/contexts.js +1 -0
- package/src/lib/app-utils/contexts.js.map +1 -1
- package/src/lib/app-utils/crm-email-templates.js +27 -8
- package/src/lib/app-utils/crm-email-templates.js.map +1 -1
- package/src/lib/app-utils/crm-kinds.d.ts +2 -0
- package/src/lib/app-utils/crm-kinds.js +1 -0
- package/src/lib/app-utils/crm-kinds.js.map +1 -1
- package/src/lib/app-utils/crm.d.ts +1200 -68
- package/src/lib/app-utils/crm.js +1951 -310
- package/src/lib/app-utils/crm.js.map +1 -1
- package/src/lib/app-utils/csv-import.d.ts +10 -38
- package/src/lib/app-utils/csv-import.js +17 -42
- package/src/lib/app-utils/csv-import.js.map +1 -1
- package/src/lib/app-utils/csv.d.ts +32 -11
- package/src/lib/app-utils/csv.js +43 -5
- package/src/lib/app-utils/csv.js.map +1 -1
- package/src/lib/app-utils/default-site.d.ts +116 -0
- package/src/lib/app-utils/default-site.js +1024 -0
- package/src/lib/app-utils/default-site.js.map +1 -0
- package/src/lib/app-utils/docs-help.generated.d.ts +23 -23
- package/src/lib/app-utils/docs-help.generated.js +50 -10
- package/src/lib/app-utils/docs-help.generated.js.map +1 -1
- package/src/lib/app-utils/docs-index.generated.js +753 -158
- package/src/lib/app-utils/docs-index.generated.js.map +1 -1
- package/src/lib/app-utils/draft-placeholders.d.ts +76 -0
- package/src/lib/app-utils/draft-placeholders.js +115 -0
- package/src/lib/app-utils/draft-placeholders.js.map +1 -0
- package/src/lib/app-utils/entity-picker-context.d.ts +19 -15
- package/src/lib/app-utils/entity-picker-context.js +4 -4
- package/src/lib/app-utils/entity-picker-context.js.map +1 -1
- package/src/lib/app-utils/expand-repeatables.d.ts +66 -10
- package/src/lib/app-utils/expand-repeatables.js +88 -14
- package/src/lib/app-utils/expand-repeatables.js.map +1 -1
- package/src/lib/app-utils/forms.d.ts +33 -22
- package/src/lib/app-utils/forms.js +47 -28
- package/src/lib/app-utils/forms.js.map +1 -1
- package/src/lib/app-utils/full-use-cost.d.ts +277 -0
- package/src/lib/app-utils/full-use-cost.js +421 -0
- package/src/lib/app-utils/full-use-cost.js.map +1 -0
- package/src/lib/app-utils/functions.d.ts +10 -0
- package/src/lib/app-utils/functions.js +78 -0
- package/src/lib/app-utils/functions.js.map +1 -1
- package/src/lib/app-utils/health-report.js +23 -0
- package/src/lib/app-utils/health-report.js.map +1 -1
- package/src/lib/app-utils/host-events.d.ts +14 -0
- package/src/lib/app-utils/host-events.js +8 -0
- package/src/lib/app-utils/host-events.js.map +1 -1
- package/src/lib/app-utils/llms-txt.d.ts +20 -0
- package/src/lib/app-utils/llms-txt.js +7 -1
- package/src/lib/app-utils/llms-txt.js.map +1 -1
- package/src/lib/app-utils/media-asset-facts.d.ts +16 -1
- package/src/lib/app-utils/media-asset-facts.js +40 -13
- package/src/lib/app-utils/media-asset-facts.js.map +1 -1
- package/src/lib/app-utils/media-bandwidth.d.ts +52 -0
- package/src/lib/app-utils/media-bandwidth.js +94 -0
- package/src/lib/app-utils/media-bandwidth.js.map +1 -0
- package/src/lib/app-utils/media-ref.d.ts +241 -33
- package/src/lib/app-utils/media-ref.js +324 -43
- package/src/lib/app-utils/media-ref.js.map +1 -1
- package/src/lib/app-utils/media-src.d.ts +8 -8
- package/src/lib/app-utils/media-src.js +27 -11
- package/src/lib/app-utils/media-src.js.map +1 -1
- package/src/lib/app-utils/media-takedown-reach.d.ts +4 -1
- package/src/lib/app-utils/media-takedown-reach.js +6 -3
- package/src/lib/app-utils/media-takedown-reach.js.map +1 -1
- package/src/lib/app-utils/notifications.d.ts +1 -1
- package/src/lib/app-utils/notifications.js +2 -0
- package/src/lib/app-utils/notifications.js.map +1 -1
- package/src/lib/app-utils/operator-alerts.js +52 -0
- package/src/lib/app-utils/operator-alerts.js.map +1 -1
- package/src/lib/app-utils/organizations.d.ts +51 -2
- package/src/lib/app-utils/organizations.js +56 -3
- package/src/lib/app-utils/organizations.js.map +1 -1
- package/src/lib/app-utils/page-record-sources.d.ts +87 -0
- package/src/lib/app-utils/page-record-sources.js +53 -0
- package/src/lib/app-utils/page-record-sources.js.map +1 -0
- package/src/lib/app-utils/paid-media-source.d.ts +3 -7
- package/src/lib/app-utils/paid-media-source.js +5 -19
- package/src/lib/app-utils/paid-media-source.js.map +1 -1
- package/src/lib/app-utils/person-erasure.d.ts +5 -2
- package/src/lib/app-utils/person-erasure.js.map +1 -1
- package/src/lib/app-utils/picklists.d.ts +187 -0
- package/src/lib/app-utils/picklists.js +320 -0
- package/src/lib/app-utils/picklists.js.map +1 -0
- package/src/lib/app-utils/plan-entitlements.d.ts +220 -50
- package/src/lib/app-utils/plan-entitlements.js +309 -115
- package/src/lib/app-utils/plan-entitlements.js.map +1 -1
- package/src/lib/app-utils/plugin-host-events.generated.js +14 -5
- package/src/lib/app-utils/plugin-host-events.generated.js.map +1 -1
- package/src/lib/app-utils/realm-host-surface.generated.js +3 -0
- package/src/lib/app-utils/realm-host-surface.generated.js.map +1 -1
- package/src/lib/app-utils/release-flags.d.ts +1 -1
- package/src/lib/app-utils/release-flags.js +11 -0
- package/src/lib/app-utils/release-flags.js.map +1 -1
- package/src/lib/app-utils/rendered-widths.d.ts +121 -0
- package/src/lib/app-utils/rendered-widths.js +211 -0
- package/src/lib/app-utils/rendered-widths.js.map +1 -0
- package/src/lib/app-utils/repeat-sources.d.ts +2 -1
- package/src/lib/app-utils/repeat-sources.js.map +1 -1
- package/src/lib/app-utils/screen-route.d.ts +165 -36
- package/src/lib/app-utils/screen-route.js +201 -40
- package/src/lib/app-utils/screen-route.js.map +1 -1
- package/src/lib/app-utils/seo-audit.d.ts +11 -1
- package/src/lib/app-utils/seo-audit.js +33 -13
- package/src/lib/app-utils/seo-audit.js.map +1 -1
- package/src/lib/app-utils/seo-keywords.d.ts +11 -0
- package/src/lib/app-utils/seo-keywords.js +19 -5
- package/src/lib/app-utils/seo-keywords.js.map +1 -1
- package/src/lib/app-utils/seo-page-facts.d.ts +47 -4
- package/src/lib/app-utils/seo-page-facts.js +136 -31
- package/src/lib/app-utils/seo-page-facts.js.map +1 -1
- package/src/lib/app-utils/seo-site-scan.d.ts +42 -4
- package/src/lib/app-utils/seo-site-scan.js +113 -12
- package/src/lib/app-utils/seo-site-scan.js.map +1 -1
- package/src/lib/app-utils/server.d.ts +5 -6
- package/src/lib/app-utils/server.js +14 -10
- package/src/lib/app-utils/server.js.map +1 -1
- package/src/lib/app-utils/site-icon-set.d.ts +195 -0
- package/src/lib/app-utils/site-icon-set.js +351 -0
- package/src/lib/app-utils/site-icon-set.js.map +1 -0
- package/src/lib/app-utils/site-interactions.d.ts +124 -4
- package/src/lib/app-utils/site-interactions.js +159 -6
- package/src/lib/app-utils/site-interactions.js.map +1 -1
- package/src/lib/app-utils/starter-template-nodes.d.ts +7 -0
- package/src/lib/app-utils/starter-template-nodes.js +3 -0
- package/src/lib/app-utils/starter-template-nodes.js.map +1 -1
- package/src/lib/app-utils/starter-templates.d.ts +5 -19
- package/src/lib/app-utils/starter-templates.js +5 -49
- package/src/lib/app-utils/starter-templates.js.map +1 -1
- package/src/lib/app-utils/transfer-launcher-context.d.ts +136 -0
- package/src/lib/app-utils/transfer-launcher-context.js +23 -0
- package/src/lib/app-utils/transfer-launcher-context.js.map +1 -0
- package/src/lib/app-utils/transfer-resume-import.d.ts +39 -0
- package/src/lib/app-utils/transfer-resume-import.js +128 -0
- package/src/lib/app-utils/transfer-resume-import.js.map +1 -0
- package/src/lib/app-utils/upgrade-proposal.d.ts +66 -0
- package/src/lib/app-utils/upgrade-proposal.js +95 -0
- package/src/lib/app-utils/upgrade-proposal.js.map +1 -0
- package/src/lib/app-utils/utc-month.d.ts +33 -0
- package/src/lib/app-utils/utc-month.js +35 -0
- package/src/lib/app-utils/utc-month.js.map +1 -0
- package/src/lib/app-utils/utm-touch.d.ts +109 -4
- package/src/lib/app-utils/utm-touch.js +364 -33
- package/src/lib/app-utils/utm-touch.js.map +1 -1
- package/src/lib/app-utils/visitor-record-ceiling.d.ts +4 -4
- package/src/lib/app-utils/visitor-record-ceiling.js +4 -4
- package/src/lib/app-utils/visitor-record-ceiling.js.map +1 -1
- package/src/lib/app-utils/wire-nodes.d.ts +39 -19
- package/src/lib/app-utils/wire-nodes.js +120 -34
- package/src/lib/app-utils/wire-nodes.js.map +1 -1
- package/src/lib/data-transfer/access.d.ts +74 -0
- package/src/lib/data-transfer/access.js +93 -0
- package/src/lib/data-transfer/access.js.map +1 -0
- package/src/lib/data-transfer/derive.d.ts +246 -0
- package/src/lib/data-transfer/derive.js +1007 -0
- package/src/lib/data-transfer/derive.js.map +1 -0
- package/src/lib/data-transfer/export-file.d.ts +46 -0
- package/src/lib/data-transfer/export-file.js +146 -0
- package/src/lib/data-transfer/export-file.js.map +1 -0
- package/src/lib/data-transfer/field-catalog.d.ts +134 -0
- package/src/lib/data-transfer/field-catalog.js +278 -0
- package/src/lib/data-transfer/field-catalog.js.map +1 -0
- package/src/lib/data-transfer/header-match.d.ts +129 -0
- package/src/lib/data-transfer/header-match.js +367 -0
- package/src/lib/data-transfer/header-match.js.map +1 -0
- package/src/lib/data-transfer/index.d.ts +34 -0
- package/src/lib/data-transfer/index.js +40 -0
- package/src/lib/data-transfer/index.js.map +1 -0
- package/src/lib/data-transfer/job.d.ts +190 -0
- package/src/lib/data-transfer/job.js +229 -0
- package/src/lib/data-transfer/job.js.map +1 -0
- package/src/lib/data-transfer/lookup.d.ts +45 -0
- package/src/lib/data-transfer/lookup.js +71 -0
- package/src/lib/data-transfer/lookup.js.map +1 -0
- package/src/lib/data-transfer/match.d.ts +99 -0
- package/src/lib/data-transfer/match.js +244 -0
- package/src/lib/data-transfer/match.js.map +1 -0
- package/src/lib/data-transfer/package-plan.d.ts +205 -0
- package/src/lib/data-transfer/package-plan.js +475 -0
- package/src/lib/data-transfer/package-plan.js.map +1 -0
- package/src/lib/data-transfer/package.d.ts +181 -0
- package/src/lib/data-transfer/package.js +426 -0
- package/src/lib/data-transfer/package.js.map +1 -0
- package/src/lib/data-transfer/picklist-map.d.ts +139 -0
- package/src/lib/data-transfer/picklist-map.js +271 -0
- package/src/lib/data-transfer/picklist-map.js.map +1 -0
- package/src/lib/data-transfer/plan.d.ts +176 -0
- package/src/lib/data-transfer/plan.js +451 -0
- package/src/lib/data-transfer/plan.js.map +1 -0
- package/src/lib/data-transfer/policy.d.ts +170 -0
- package/src/lib/data-transfer/policy.js +378 -0
- package/src/lib/data-transfer/policy.js.map +1 -0
- package/src/lib/data-transfer/resource.d.ts +211 -0
- package/src/lib/data-transfer/resource.js +241 -0
- package/src/lib/data-transfer/resource.js.map +1 -0
- package/src/lib/data-transfer/review.d.ts +70 -0
- package/src/lib/data-transfer/review.js +233 -0
- package/src/lib/data-transfer/review.js.map +1 -0
- package/src/lib/data-transfer/similarity.d.ts +40 -0
- package/src/lib/data-transfer/similarity.js +106 -0
- package/src/lib/data-transfer/similarity.js.map +1 -0
- package/src/lib/data-transfer/site-package.d.ts +365 -0
- package/src/lib/data-transfer/site-package.js +1077 -0
- package/src/lib/data-transfer/site-package.js.map +1 -0
- package/src/lib/data-transfer/source.d.ts +74 -0
- package/src/lib/data-transfer/source.js +293 -0
- package/src/lib/data-transfer/source.js.map +1 -0
- package/src/lib/data-transfer/transfer-api.d.ts +898 -0
- package/src/lib/data-transfer/transfer-api.js +107 -0
- package/src/lib/data-transfer/transfer-api.js.map +1 -0
- package/src/lib/foundation/definitions/org-billing.types.d.ts +31 -0
- package/src/lib/foundation/definitions/org-billing.types.js.map +1 -1
- package/src/lib/foundation/definitions/organization.types.d.ts +42 -1
- package/src/lib/foundation/definitions/organization.types.js.map +1 -1
- package/src/lib/foundation/definitions/platform.types.d.ts +6 -4
- package/src/lib/foundation/definitions/platform.types.js.map +1 -1
- package/src/lib/foundation/index.d.ts +1 -1
- package/src/lib/foundation/index.js.map +1 -1
- package/src/lib/plugin-manager/feature-plugins.d.ts +91 -2
- package/src/lib/plugin-manager/feature-plugins.js +48 -3
- package/src/lib/plugin-manager/feature-plugins.js.map +1 -1
- package/src/lib/plugin-manager/first-party-plugins.generated.d.ts +50 -0
- package/src/lib/plugin-manager/first-party-plugins.generated.js +1133 -28
- package/src/lib/plugin-manager/first-party-plugins.generated.js.map +1 -1
- package/src/lib/plugin-manager/index.d.ts +0 -1
- package/src/lib/plugin-manager/index.js +0 -1
- package/src/lib/plugin-manager/index.js.map +1 -1
- package/src/lib/plugin-manager/interaction-recipes.d.ts +148 -0
- package/src/lib/plugin-manager/interaction-recipes.js +104 -0
- package/src/lib/plugin-manager/interaction-recipes.js.map +1 -0
- package/src/lib/plugin-manager/interaction-step-checks.d.ts +66 -0
- package/src/lib/plugin-manager/interaction-step-checks.js +86 -0
- package/src/lib/plugin-manager/interaction-step-checks.js.map +1 -0
- package/src/lib/plugin-manager/plugin-artifact-types.d.ts +235 -0
- package/src/lib/plugin-manager/plugin-artifact-types.js +99 -0
- package/src/lib/plugin-manager/plugin-artifact-types.js.map +1 -0
- package/src/lib/plugin-manager/plugin-contact-capture.d.ts +8 -0
- package/src/lib/plugin-manager/plugin-contact-capture.js.map +1 -1
- package/src/lib/plugin-manager/plugin-conversion-credit.d.ts +267 -0
- package/src/lib/plugin-manager/plugin-conversion-credit.js +130 -0
- package/src/lib/plugin-manager/plugin-conversion-credit.js.map +1 -0
- package/src/lib/plugin-manager/plugin-entity-pickers.d.ts +83 -0
- package/src/lib/plugin-manager/plugin-entity-pickers.js +87 -0
- package/src/lib/plugin-manager/plugin-entity-pickers.js.map +1 -0
- package/src/lib/plugin-manager/plugin-host-resources.d.ts +6 -0
- package/src/lib/plugin-manager/plugin-host-resources.js +6 -1
- package/src/lib/plugin-manager/plugin-host-resources.js.map +1 -1
- package/src/lib/plugin-manager/plugin-intake-gates.d.ts +75 -0
- package/src/lib/plugin-manager/plugin-intake-gates.js +49 -0
- package/src/lib/plugin-manager/plugin-intake-gates.js.map +1 -0
- package/src/lib/plugin-manager/plugin-jobs.d.ts +5 -5
- package/src/lib/plugin-manager/plugin-jobs.js +7 -7
- package/src/lib/plugin-manager/plugin-jobs.js.map +1 -1
- package/src/lib/plugin-manager/plugin-live-paths.d.ts +70 -0
- package/src/lib/plugin-manager/plugin-live-paths.js +66 -0
- package/src/lib/plugin-manager/plugin-live-paths.js.map +1 -0
- package/src/lib/plugin-manager/plugin-org-erasure.d.ts +3 -2
- package/src/lib/plugin-manager/plugin-org-erasure.js +30 -5
- package/src/lib/plugin-manager/plugin-org-erasure.js.map +1 -1
- package/src/lib/plugin-manager/plugin-person-erasure.d.ts +68 -9
- package/src/lib/plugin-manager/plugin-person-erasure.js +196 -51
- package/src/lib/plugin-manager/plugin-person-erasure.js.map +1 -1
- package/src/lib/plugin-manager/plugin-person-records.d.ts +275 -0
- package/src/lib/plugin-manager/plugin-person-records.js +107 -0
- package/src/lib/plugin-manager/plugin-person-records.js.map +1 -0
- package/src/lib/plugin-manager/plugin-record-counts.d.ts +76 -0
- package/src/lib/plugin-manager/plugin-record-counts.js +49 -0
- package/src/lib/plugin-manager/plugin-record-counts.js.map +1 -0
- package/src/lib/plugin-manager/plugin-record-email-state.d.ts +26 -0
- package/src/lib/plugin-manager/plugin-record-email-state.js +16 -0
- package/src/lib/plugin-manager/plugin-record-email-state.js.map +1 -1
- package/src/lib/plugin-manager/plugin-record-index.d.ts +10 -0
- package/src/lib/plugin-manager/plugin-record-index.js.map +1 -1
- package/src/lib/plugin-manager/plugin-record-lists.d.ts +86 -6
- package/src/lib/plugin-manager/plugin-record-lists.js +42 -5
- package/src/lib/plugin-manager/plugin-record-lists.js.map +1 -1
- package/src/lib/plugin-manager/plugin-record-origin.d.ts +79 -0
- package/src/lib/plugin-manager/plugin-record-origin.js +46 -0
- package/src/lib/plugin-manager/plugin-record-origin.js.map +1 -0
- package/src/lib/plugin-manager/plugin-record-pages.d.ts +51 -0
- package/src/lib/plugin-manager/plugin-record-pages.js +64 -0
- package/src/lib/plugin-manager/plugin-record-pages.js.map +1 -0
- package/src/lib/plugin-manager/plugin-record-timeline.d.ts +91 -0
- package/src/lib/plugin-manager/plugin-record-timeline.js +30 -0
- package/src/lib/plugin-manager/plugin-record-timeline.js.map +1 -1
- package/src/lib/plugin-manager/plugin-resource-drafts.d.ts +5 -5
- package/src/lib/plugin-manager/plugin-resource-drafts.js.map +1 -1
- package/src/lib/plugin-manager/plugin-revocations.d.ts +64 -0
- package/src/lib/plugin-manager/plugin-revocations.js +47 -0
- package/src/lib/plugin-manager/plugin-revocations.js.map +1 -0
- package/src/lib/plugin-manager/plugin-send-tallies.d.ts +69 -0
- package/src/lib/plugin-manager/plugin-send-tallies.js +45 -0
- package/src/lib/plugin-manager/plugin-send-tallies.js.map +1 -0
- package/src/lib/plugin-manager/plugin-site-bundle.d.ts +40 -0
- package/src/lib/plugin-manager/plugin-site-bundle.js +4 -0
- package/src/lib/plugin-manager/plugin-site-bundle.js.map +1 -1
- package/src/lib/plugin-manager/plugin-site-export.d.ts +57 -1
- package/src/lib/plugin-manager/plugin-site-export.js +23 -10
- package/src/lib/plugin-manager/plugin-site-export.js.map +1 -1
- package/src/lib/plugin-manager/plugin-sitemap-readers.d.ts +146 -0
- package/src/lib/plugin-manager/plugin-sitemap-readers.js +110 -0
- package/src/lib/plugin-manager/plugin-sitemap-readers.js.map +1 -0
- package/src/lib/plugin-manager/plugin-transfer-resources.d.ts +714 -0
- package/src/lib/plugin-manager/plugin-transfer-resources.js +443 -0
- package/src/lib/plugin-manager/plugin-transfer-resources.js.map +1 -0
- package/src/lib/plugin-manager/plugin-usage-axes.d.ts +54 -5
- package/src/lib/plugin-manager/plugin-usage-axes.js +11 -3
- package/src/lib/plugin-manager/plugin-usage-axes.js.map +1 -1
- package/src/lib/plugin-manager/plugin-user-erasure.js +9 -1
- package/src/lib/plugin-manager/plugin-user-erasure.js.map +1 -1
- package/src/lib/plugin-manager/plugin-visitor-doors.d.ts +104 -0
- package/src/lib/plugin-manager/plugin-visitor-doors.js +108 -0
- package/src/lib/plugin-manager/plugin-visitor-doors.js.map +1 -0
- package/src/lib/plugin-manager/realm-host-aglyn.generated.js +3 -0
- package/src/lib/plugin-manager/realm-host-aglyn.generated.js.map +1 -1
- package/src/lib/plugin-manager/repeat-rows.d.ts +5 -6
- package/src/lib/plugin-manager/repeat-rows.js.map +1 -1
- package/src/lib/app-utils/actions.d.ts +0 -310
- package/src/lib/app-utils/actions.js +0 -506
- package/src/lib/app-utils/actions.js.map +0 -1
- package/src/lib/app-utils/automation-placeholders.d.ts +0 -72
- package/src/lib/app-utils/automation-placeholders.js +0 -207
- package/src/lib/app-utils/automation-placeholders.js.map +0 -1
- package/src/lib/app-utils/crm-next-activity.d.ts +0 -107
- package/src/lib/app-utils/crm-next-activity.js +0 -140
- package/src/lib/app-utils/crm-next-activity.js.map +0 -1
- package/src/lib/app-utils/crm-task-reminders.d.ts +0 -152
- package/src/lib/app-utils/crm-task-reminders.js +0 -161
- package/src/lib/app-utils/crm-task-reminders.js.map +0 -1
- package/src/lib/app-utils/dataset-models.d.ts +0 -339
- package/src/lib/app-utils/dataset-models.js +0 -722
- package/src/lib/app-utils/dataset-models.js.map +0 -1
- package/src/lib/app-utils/datasets.d.ts +0 -171
- package/src/lib/app-utils/datasets.js +0 -227
- package/src/lib/app-utils/datasets.js.map +0 -1
- package/src/lib/app-utils/form-abuse-ceiling.d.ts +0 -146
- package/src/lib/app-utils/form-abuse-ceiling.js +0 -158
- package/src/lib/app-utils/form-abuse-ceiling.js.map +0 -1
- package/src/lib/plugin-manager/order-fulfilment.d.ts +0 -142
- package/src/lib/plugin-manager/order-fulfilment.js +0 -104
- package/src/lib/plugin-manager/order-fulfilment.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aglyn/aglyn",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.223",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"homepage": "https://aglyn.com",
|
|
6
6
|
"repository": {
|
|
@@ -26,6 +26,10 @@
|
|
|
26
26
|
"types": "./src/lib/foundation/index.d.ts",
|
|
27
27
|
"default": "./src/lib/foundation/index.js"
|
|
28
28
|
},
|
|
29
|
+
"./data-transfer": {
|
|
30
|
+
"types": "./src/lib/data-transfer/index.d.ts",
|
|
31
|
+
"default": "./src/lib/data-transfer/index.js"
|
|
32
|
+
},
|
|
29
33
|
"./*": {
|
|
30
34
|
"types": "./src/lib/*.d.ts",
|
|
31
35
|
"default": "./src/lib/*.js"
|
|
@@ -33,16 +37,16 @@
|
|
|
33
37
|
"./package.json": "./package.json"
|
|
34
38
|
},
|
|
35
39
|
"dependencies": {
|
|
36
|
-
"@aglyn/shared-data-enums": "1.0.0-beta.
|
|
37
|
-
"@aglyn/shared-data-mdi": "1.0.0-beta.
|
|
38
|
-
"@aglyn/shared-data-types": "1.0.0-beta.
|
|
39
|
-
"@aglyn/shared-util-email": "1.0.0-beta.
|
|
40
|
-
"@aglyn/shared-util-first-touch": "1.0.0-beta.
|
|
41
|
-
"@aglyn/shared-util-http": "1.0.0-beta.
|
|
42
|
-
"@aglyn/shared-util-logger": "1.0.0-beta.
|
|
43
|
-
"@aglyn/shared-util-timestamp": "1.0.0-beta.
|
|
44
|
-
"@aglyn/shared-util-tools": "1.0.0-beta.
|
|
45
|
-
"@aglyn/shared-util-vendor": "1.0.0-beta.
|
|
40
|
+
"@aglyn/shared-data-enums": "1.0.0-beta.223",
|
|
41
|
+
"@aglyn/shared-data-mdi": "1.0.0-beta.223",
|
|
42
|
+
"@aglyn/shared-data-types": "1.0.0-beta.223",
|
|
43
|
+
"@aglyn/shared-util-email": "1.0.0-beta.223",
|
|
44
|
+
"@aglyn/shared-util-first-touch": "1.0.0-beta.223",
|
|
45
|
+
"@aglyn/shared-util-http": "1.0.0-beta.223",
|
|
46
|
+
"@aglyn/shared-util-logger": "1.0.0-beta.223",
|
|
47
|
+
"@aglyn/shared-util-timestamp": "1.0.0-beta.223",
|
|
48
|
+
"@aglyn/shared-util-tools": "1.0.0-beta.223",
|
|
49
|
+
"@aglyn/shared-util-vendor": "1.0.0-beta.223",
|
|
46
50
|
"@data-driven-forms/react-form-renderer": "^4.2.0",
|
|
47
51
|
"@msgpack/msgpack": "^3.1.3",
|
|
48
52
|
"@types/unist": "^3.0.3",
|
|
@@ -988,7 +988,7 @@ const TOO_MANY_REQUESTS = {
|
|
|
988
988
|
},
|
|
989
989
|
parentId: {
|
|
990
990
|
type: 'string',
|
|
991
|
-
description: '
|
|
991
|
+
description: 'Nearest parent page, for a nested page. Page groups are ' + 'skipped: they hold pages in the editor and have no address.'
|
|
992
992
|
},
|
|
993
993
|
order: {
|
|
994
994
|
type: 'integer',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/agent-openapi.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * `/openapi.json` for a tenant site (AGL-2716) — the machine-readable\n * description of what a site serves, per host.\n *\n * ## Why this is generated and not a checked-in file\n *\n * The document is a function of the SITE: its name, its origin, the content\n * collections it publishes. A static file would describe one site, and every\n * other host on the platform would publish a spec naming somebody else's\n * domain in `servers[]` — which is worse than no spec, because a client that\n * trusts it makes requests to the wrong origin.\n *\n * ## Read-only, deliberately\n *\n * Only GET operations are described. The tenant does serve writes — form\n * submissions, membership, consent — and each is reachable, rate-limited and\n * public, so listing them would be truthful. It would also be an invitation:\n * a spec is a list of things to call, an agent that reads one calls them, and\n * \"submit this form\" is not an operation a site owner asked to publish to\n * every crawler on the internet. Writes stay discoverable the way they always\n * were, from the page that carries the form.\n *\n * That decision belongs in the document, not just in this comment, so the\n * `description` says so — a reader who needs a write endpoint is told where to\n * look rather than left assuming none exists.\n *\n * ## Shaped for function calling\n *\n * Every operation carries a unique `operationId`, a `summary`, a `description`\n * and typed parameters, and every response names a schema. That is exactly the\n * subset an LLM tool-calling bridge reads when it turns a spec into callable\n * functions — a missing `operationId` becomes a generated name nobody can\n * predict, and a missing parameter type becomes a string the model guesses at.\n *\n * OpenAPI **3.1.0** rather than 3.0: 3.1 aligns its schema dialect with JSON\n * Schema 2020-12, which is the dialect the function-calling formats already\n * speak, so a bridge converts without a lossy pass.\n */\n\n/** A content collection the site publishes, as the feed operation names it. */\nexport interface AgentOpenApiCollection {\n slug: string\n name?: string\n}\n\nexport interface AgentOpenApiOptions {\n /** The site's name, for `info.title`. */\n siteName: string\n /** Absolute origin, no trailing slash — the single `servers[]` entry. */\n origin: string\n /** The site's own description, for `info.description`. */\n description?: string\n /** Published content collections, for the feed operation's enum. */\n collections?: readonly AgentOpenApiCollection[]\n /** Whether the site serves `/search`. */\n hasSearch?: boolean\n /** Platform version, so a consumer can tell two documents apart. */\n version?: string\n /** Contact email published in `info.contact`, when the site has one. */\n contactEmail?: string\n /** Absolute URL of the site's terms, when it publishes any. */\n termsOfServiceUrl?: string\n}\n\nimport { API_CATALOG_MEDIA_TYPE } from './agent-api-catalog'\n\n/** A JSON-Schema-shaped object; loose on purpose — this is a document, not a type. */\ntype Schema = Record<string, unknown>\n\n/** `text/markdown`, per RFC 7763. */\nconst MARKDOWN = 'text/markdown'\n\n/**\n * The header that carries the API version, in both directions (AGL-2722).\n *\n * A header and not a URL segment, because most of this surface sits at a\n * location some other specification fixed — `/openapi.json`, `/robots.txt`,\n * `/llms.txt`, `/sitemap.xml`, `/manifest.webmanifest`. `/v1/robots.txt` is\n * not a robots.txt: the crawler that needs it looks at the root and nowhere\n * else. Versioning only the `/api/*` half would leave one surface running two\n * rules, which is worse than either rule alone.\n */\nexport const API_VERSION_HEADER = 'Aglyn-API-Version'\n\n/**\n * The version this description and these responses are.\n *\n * ⚠️ Independent of the platform's release version, and deliberately so. The\n * platform ships several times a day; this shape is a promise to strangers and\n * moves only when the promise does. Bump it when a field is removed or\n * renamed, or when an operation narrows what it accepts — never for an\n * addition, which is why a consumer is told to parse leniently.\n */\nexport const API_VERSION = '1.0.0'\n\n/**\n * The RFC 9331 headers, and the 429, for the two operations that actually\n * meter (AGL-2722).\n *\n * Declared on those two only, never blanket-applied. `/api/health` is an\n * uptime probe answering from several regions on a schedule — metering it\n * would turn a bookkeeping limit into a false outage — and the static files\n * are served from the edge cache without ever reaching a counter. A header\n * describing a limit that is not enforced is worse than no header, because a\n * caller paces against it.\n */\nconst RATE_LIMIT_HEADERS: Schema = {\n 'RateLimit-Limit': { $ref: '#/components/headers/RateLimitLimit' },\n 'RateLimit-Remaining': { $ref: '#/components/headers/RateLimitRemaining' },\n 'RateLimit-Reset': { $ref: '#/components/headers/RateLimitReset' },\n}\n\nconst TOO_MANY_REQUESTS: Schema = {\n description:\n 'The address exceeded its per-minute budget. `Retry-After` names the ' +\n 'seconds to wait. Reaching this from ordinary reading would be ' +\n 'surprising — the budget is set well above what reading a whole site ' +\n 'costs.',\n headers: {\n ...RATE_LIMIT_HEADERS,\n 'Retry-After': { $ref: '#/components/headers/RetryAfter' },\n },\n content: {\n 'application/json': { schema: { $ref: '#/components/schemas/Error' } },\n },\n}\n\n/**\n * The `Accept` parameter, declared once and referenced by every page\n * operation.\n *\n * A header parameter rather than prose, because it is the ONLY way a client\n * discovers the Markdown representation from the document alone — and a\n * function-calling bridge that reads this turns it into an argument the model\n * can set, which is the whole point of publishing it.\n */\nconst ACCEPT_PARAMETER: Schema = {\n name: 'Accept',\n in: 'header',\n required: false,\n description:\n 'Content negotiation, per RFC 9110. `text/markdown` returns a clean ' +\n 'Markdown rendering of the page with the navigation, styling and scripts ' +\n 'removed; anything else returns HTML. Quality values are honored, and a ' +\n 'request that accepts neither representation is answered `406`. ' +\n 'Responses carry `Vary: Accept`.',\n schema: {\n type: 'string',\n enum: ['text/html', MARKDOWN],\n default: 'text/html',\n },\n}\n\n/** Error envelope shared by the JSON operations. */\nconst ERROR_SCHEMA: Schema = {\n type: 'object',\n description: 'The error envelope every JSON endpoint on this site returns.',\n properties: {\n status: { type: 'string', enum: ['error'], description: 'Always `error`.' },\n statusMessage: { type: 'string', description: 'Human-readable reason.' },\n errorCode: { type: 'string', description: 'Stable machine-readable code.' },\n },\n required: ['status'],\n}\n\n/** The `seo` block both the site and page schemas carry. */\nconst SEO_SCHEMA: Schema = {\n type: 'object',\n description: 'Search and social metadata.',\n properties: {\n title: { type: 'string', description: 'Title used in the page head.' },\n description: { type: 'string', description: 'Meta description.' },\n image: { type: 'string', description: 'Social card image reference.' },\n imageWidth: { type: 'integer', description: 'Social card width in pixels.' },\n imageHeight: { type: 'integer', description: 'Social card height in pixels.' },\n imageAlt: {\n type: 'string',\n description: 'Alternative text for the social card image.',\n },\n },\n}\n\n/** Build the OpenAPI 3.1 document for one site. */\nexport function buildAgentOpenApi(options: AgentOpenApiOptions): Schema {\n const origin = options.origin.replace(/\\/+$/, '')\n const collections = options.collections ?? []\n const collectionSlugs = collections.map((collection) => collection.slug)\n\n const paths: Schema = {\n '/openapi.json': {\n get: {\n operationId: 'getOpenApiDocument',\n summary: 'This document',\n description:\n 'The OpenAPI 3.1 description of everything this site serves. ' +\n 'Generated per site, so `servers[0].url` always names this origin.',\n tags: ['Discovery'],\n responses: {\n '200': {\n description: 'The OpenAPI document.',\n content: {\n 'application/json': {\n schema: { $ref: '#/components/schemas/OpenApiDocument' },\n },\n },\n },\n },\n },\n },\n '/.well-known/api-catalog': {\n get: {\n operationId: 'getApiCatalog',\n summary: 'API catalog',\n description:\n 'Every API that answers for this site, as an RFC 9727 catalog in ' +\n 'RFC 9264 linkset form. Two of them exist and they are not ' +\n 'interchangeable: this site’s own API, described by the document ' +\n 'you are reading, is anonymous and read-only; the platform API it ' +\n 'names is keyed, typed and writes. Each entry carries the API’s ' +\n '`service-desc` (its OpenAPI description), `service-doc` and, where ' +\n 'there is one, `status`.',\n tags: ['Discovery'],\n responses: {\n '200': {\n description: 'The catalog.',\n content: {\n [API_CATALOG_MEDIA_TYPE]: {\n schema: { $ref: '#/components/schemas/ApiCatalog' },\n },\n },\n },\n },\n },\n },\n '/llms.txt': {\n get: {\n operationId: 'getAgentGuidance',\n summary: 'Agent guidance (llms.txt)',\n description:\n 'What this site is for, when an agent should reach for it, and the ' +\n 'entry points that lead to everything else. Follows the ' +\n 'llmstxt.org format: an H1 name, a summary blockquote, and ' +\n 'H2-delimited link lists.',\n tags: ['Discovery'],\n responses: {\n '200': {\n description: 'The guidance file.',\n content: { [MARKDOWN]: { schema: { type: 'string' } } },\n },\n },\n },\n },\n '/robots.txt': {\n get: {\n operationId: 'getRobotsTxt',\n summary: 'Crawler policy',\n description:\n 'The exclusion rules this site asks crawlers to honor, and the ' +\n 'address of its sitemap index.',\n tags: ['Discovery'],\n responses: {\n '200': {\n description: 'The robots policy.',\n content: { 'text/plain': { schema: { type: 'string' } } },\n },\n },\n },\n },\n '/sitemap.xml': {\n get: {\n operationId: 'getSitemapIndex',\n summary: 'Sitemap index',\n description:\n 'A sitemap INDEX — it names child sitemaps rather than URLs. Each ' +\n 'child lists up to 5,000 URLs with their last-modified dates.',\n tags: ['Discovery'],\n responses: {\n '200': {\n description: 'A `<sitemapindex>` document.',\n content: { 'application/xml': { schema: { type: 'string' } } },\n },\n },\n },\n },\n '/manifest.webmanifest': {\n get: {\n operationId: 'getWebAppManifest',\n summary: 'Web app manifest',\n description: \"The site's installable web app manifest.\",\n tags: ['Discovery'],\n responses: {\n '200': {\n description: 'The manifest.',\n content: {\n 'application/manifest+json': {\n schema: { $ref: '#/components/schemas/WebAppManifest' },\n },\n },\n },\n },\n },\n },\n '/{path}': {\n get: {\n operationId: 'getPage',\n summary: 'Fetch one page',\n description:\n 'Any page on this site, in HTML or Markdown. `path` is the page ' +\n 'path without a leading slash — use an empty string for the home ' +\n 'page — and MAY contain `/` for a nested page. Two ways to ask for ' +\n 'Markdown: send `Accept: text/markdown`, or append `.md` to the ' +\n 'path. Enumerate the available paths with `listPublishedPages` or ' +\n 'from the sitemap index.',\n tags: ['Content'],\n parameters: [\n {\n name: 'path',\n in: 'path',\n required: true,\n description:\n 'Page path without a leading slash, e.g. `pricing` or ' +\n '`blog/hello-world`. May end in `.md` to request Markdown ' +\n 'without a content-negotiation header.',\n schema: { type: 'string' },\n example: 'pricing',\n },\n ACCEPT_PARAMETER,\n ],\n responses: {\n '200': {\n description: 'The page.',\n headers: {\n Vary: {\n description:\n 'Includes `Accept`, so a cache cannot serve one ' +\n 'representation in answer to a request for the other.',\n schema: { type: 'string' },\n },\n },\n content: {\n 'text/html': { schema: { type: 'string' } },\n [MARKDOWN]: {\n schema: {\n type: 'string',\n description:\n 'The page as Markdown: an H1 title, a blockquote ' +\n 'summary, the content region, and a `Source:` line ' +\n 'carrying the canonical URL. Navigation and footer are ' +\n 'omitted.',\n },\n },\n },\n },\n '404': { description: 'No page answers at that path.' },\n '406': {\n description:\n 'The request accepts neither `text/html` nor `text/markdown`. ' +\n 'The body lists the representations that are available.',\n content: { 'text/plain': { schema: { type: 'string' } } },\n },\n },\n },\n },\n '/api/host': {\n get: {\n operationId: 'getSiteIdentity',\n summary: 'Who publishes this site',\n description:\n \"The site's public identity: display name, logo, locales and the \" +\n 'search/social metadata it defaults to. Anonymous, cacheable, and ' +\n 'an allow-listed projection — never the underlying document.',\n tags: ['Site'],\n parameters: [\n {\n name: 'host',\n in: 'query',\n required: false,\n description:\n // NO PLATFORM APEX HERE. This string is published in the\n // OpenAPI document of EVERY site, including a self-hosted\n // operator's — naming Aglyn's own apex would tell their callers\n // to address a domain that is not theirs (the self-host ratchet\n // in `selfhost-hardcoded-hosts.spec.ts` is what caught it).\n 'Which site to describe: its custom domain, its platform ' +\n 'subdomain address, or its bare subdomain. ' +\n 'Defaults to the domain the request was sent to, so an agent ' +\n 'talking to one site never needs it.',\n schema: { type: 'string' },\n },\n ],\n responses: {\n '200': {\n description: 'The site identity.',\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n status: { type: 'string', enum: ['success'] },\n data: {\n type: 'object',\n properties: {\n host: { $ref: '#/components/schemas/SiteIdentity' },\n },\n },\n },\n required: ['status'],\n },\n },\n },\n },\n '400': {\n description: 'The site could not be resolved.',\n content: {\n 'application/json': { schema: { $ref: '#/components/schemas/Error' } },\n },\n },\n },\n },\n },\n '/api/screen': {\n get: {\n operationId: 'listPublishedPages',\n summary: 'List published pages',\n description:\n 'Every published, indexable page on this site, with its title, ' +\n 'description and dates. Gated pages — private, password-protected, ' +\n 'members-only and unlisted — are omitted, so this listing never ' +\n 'advertises an address a visitor cannot open. Paginate by passing ' +\n 'the previous response’s `cursor`; an empty cursor means the last ' +\n 'page.',\n tags: ['Content'],\n parameters: [\n {\n name: 'host',\n in: 'query',\n required: false,\n description:\n 'Which site to list. Defaults to the domain the request was ' +\n 'sent to.',\n schema: { type: 'string' },\n },\n {\n name: 'cursor',\n in: 'query',\n required: false,\n description:\n 'Cursor from the previous response. Omit for the first page.',\n schema: { type: 'string' },\n },\n {\n name: 'limit',\n in: 'query',\n required: false,\n description: 'Pages per response.',\n schema: { type: 'integer', minimum: 1, maximum: 100, default: 50 },\n },\n ],\n responses: {\n '200': {\n description: 'One page of the listing.',\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n status: { type: 'string', enum: ['success'] },\n data: {\n type: 'object',\n properties: {\n screens: {\n type: 'array',\n items: { $ref: '#/components/schemas/PublishedPage' },\n },\n cursor: {\n type: 'string',\n description:\n 'Cursor for the next request; empty on the last page.',\n },\n },\n required: ['screens', 'cursor'],\n },\n },\n required: ['status'],\n },\n },\n },\n },\n '400': {\n description: 'The site could not be resolved.',\n content: {\n 'application/json': { schema: { $ref: '#/components/schemas/Error' } },\n },\n },\n },\n },\n },\n '/api/health': {\n get: {\n operationId: 'getSiteHealth',\n summary: 'Service health',\n description:\n 'Whether the site runtime and its datastore are answering. `200` ' +\n 'when healthy, `503` when not; the body names which check failed.',\n tags: ['Site'],\n responses: {\n '200': {\n description: 'Healthy.',\n content: {\n 'application/json': { schema: { $ref: '#/components/schemas/Health' } },\n },\n },\n '503': {\n description: 'A dependency is unavailable.',\n content: {\n 'application/json': { schema: { $ref: '#/components/schemas/Health' } },\n },\n },\n },\n },\n },\n }\n\n /*\n The feed operation exists only where a feed does. A site with no content\n collection has no `/{slug}/rss.xml` to serve, and publishing the operation\n anyway would put an endpoint in the document that answers 404 — the one\n defect that makes a client distrust the rest of the spec.\n */\n if (collectionSlugs.length > 0) {\n paths['/{collectionSlug}/rss.xml'] = {\n get: {\n operationId: 'getCollectionFeed',\n summary: 'Collection feed',\n description:\n \"A content collection's newest entries as RSS 2.0, newest first.\",\n tags: ['Content'],\n parameters: [\n {\n name: 'collectionSlug',\n in: 'path',\n required: true,\n description: 'Which collection to read.',\n // An enum rather than a bare string: this site's collections are\n // known here, and a function-calling bridge turns an enum into a\n // constrained argument the model cannot get wrong.\n schema: { type: 'string', enum: collectionSlugs },\n example: collectionSlugs[0],\n },\n ],\n responses: {\n '200': {\n description: 'An RSS 2.0 document.',\n content: { 'application/rss+xml': { schema: { type: 'string' } } },\n },\n '404': { description: 'No collection answers at that slug.' },\n },\n },\n }\n }\n\n if (options.hasSearch) {\n paths['/search'] = {\n get: {\n operationId: 'searchSite',\n summary: 'Search this site',\n description:\n \"Full-text search across this site's published pages and content \" +\n 'entries. HTML only — unlike every other page here, the results are ' +\n 'computed in the browser, so a Markdown variant would be a heading ' +\n 'with no results under it. To read the matches as Markdown, follow ' +\n 'the result links and fetch each page with `Accept: text/markdown`.',\n tags: ['Content'],\n parameters: [\n {\n name: 'q',\n in: 'query',\n required: true,\n description: 'The query.',\n schema: { type: 'string', minLength: 1 },\n },\n ],\n responses: {\n '200': {\n description: 'The results page.',\n content: { 'text/html': { schema: { type: 'string' } } },\n },\n },\n },\n }\n }\n\n const info: Schema = {\n title: `${options.siteName} — public API`,\n /*\n The CONTRACT version, not the build. `info.version` carrying the platform\n release meant it changed several times a day, so a consumer reading it as\n \"the shape I was built against\" was tracking deploy noise and had nothing\n to pin. The build identifier keeps its purpose — telling two documents\n apart — under its own key.\n */\n version: API_VERSION,\n ...(options.version ? { 'x-aglyn-platform-version': options.version } : {}),\n summary: `Everything ${options.siteName} publishes for machine consumption.`,\n description:\n `The read-only surface of ${options.siteName}. Every operation is ` +\n 'anonymous — no key, no session — and every page can be fetched as ' +\n 'Markdown instead of HTML by sending `Accept: text/markdown` or by ' +\n 'appending `.md` to its path.\\n\\n' +\n 'Write endpoints are deliberately not described here. This site does ' +\n 'accept form submissions and account actions, but those belong to the ' +\n 'page that carries them rather than to a spec published to every ' +\n 'crawler; follow the form on the relevant page.\\n\\n' +\n `Start at [/llms.txt](${origin}/llms.txt) for what this site is for, ` +\n `or [/sitemap.xml](${origin}/sitemap.xml) for every indexable URL.\\n\\n` +\n '## Versioning and deprecation\\n\\n' +\n 'This surface is versioned by HEADER, not by URL. Send ' +\n `\\`${API_VERSION_HEADER}: ${API_VERSION}\\` to pin the shape you were ` +\n 'built against; omit it and you get the current version. Every ' +\n `response names the version that served it in the same header.\\n\\n` +\n 'A path version was the alternative and it does not fit this surface: ' +\n 'most of what is described here lives at a location some other ' +\n 'specification fixed — `/openapi.json`, `/robots.txt`, `/llms.txt`, ' +\n '`/sitemap.xml`, `/manifest.webmanifest`. Moving those under `/v1/` ' +\n 'would break the specs that define them, and versioning only the ' +\n '`/api/*` half would leave one surface with two rules.\\n\\n' +\n 'Additive changes — a new operation, a new optional field — ship ' +\n 'without a version bump, so parse leniently and ignore what you do ' +\n 'not recognise. Anything that removes or renames a field, or narrows ' +\n 'what an operation accepts, does bump it.\\n\\n' +\n 'Removal is announced on the responses themselves, not only in a ' +\n 'changelog. A deprecated operation answers with `Deprecation` (RFC ' +\n '9745) from the moment it is deprecated, and `Sunset` (RFC 8594) ' +\n 'naming the date it stops answering. Both are HTTP dates. An ' +\n 'operation that has never carried either is not scheduled for ' +\n 'removal.',\n ...(options.contactEmail\n ? { contact: { name: options.siteName, email: options.contactEmail } }\n : {}),\n ...(options.termsOfServiceUrl ? { termsOfService: options.termsOfServiceUrl } : {}),\n }\n\n /*\n Every response names the version that served it and declares the two\n headers a removal is announced on; every operation accepts the version\n request header. Attached by a walk rather than written into each operation\n by hand — a policy stated in `info` and then missing from an operation is\n not a policy, and eleven hand-copied blocks is exactly how that happens.\n */\n const versionedHeaders: Schema = {\n [API_VERSION_HEADER]: { $ref: '#/components/headers/ApiVersion' },\n Deprecation: { $ref: '#/components/headers/Deprecation' },\n Sunset: { $ref: '#/components/headers/Sunset' },\n }\n /** The paths `publicReadApiGate` actually meters. Kept in step by AGL-2722's spec. */\n const METERED = new Set(['/api/host', '/api/screen'])\n for (const [pathName, pathItem] of Object.entries(paths as Record<string, Schema>)) {\n const metered = METERED.has(pathName)\n for (const operation of Object.values(pathItem)) {\n if (!operation || typeof operation !== 'object') continue\n const verb = operation as Schema\n const responses = verb.responses as Record<string, Schema> | undefined\n if (!responses) continue\n if (metered && !responses['429']) responses['429'] = { ...TOO_MANY_REQUESTS }\n for (const response of Object.values(responses)) {\n // The operation's own headers win: a walk that overwrote them would\n // silently drop something an operation deliberately said.\n response.headers = {\n ...versionedHeaders,\n ...(metered ? RATE_LIMIT_HEADERS : {}),\n ...((response.headers as Schema) ?? {}),\n }\n }\n verb.parameters = [\n ...((verb.parameters as unknown[]) ?? []),\n { $ref: '#/components/parameters/ApiVersionRequest' },\n ]\n }\n }\n\n return {\n openapi: '3.1.0',\n // The dialect, stated rather than assumed. It is what tells a consumer the\n // schemas below are JSON Schema 2020-12 and not OpenAPI 3.0's dialect.\n jsonSchemaDialect: 'https://json-schema.org/draft/2020-12/schema',\n info,\n servers: [{ url: origin, description: options.siteName }],\n tags: [\n {\n name: 'Discovery',\n description: 'Files that describe the site to a machine.',\n },\n { name: 'Content', description: 'The pages and entries the site publishes.' },\n { name: 'Site', description: 'Identity and operational status.' },\n ],\n paths,\n components: {\n schemas: {\n Error: ERROR_SCHEMA,\n ApiCatalog: {\n type: 'object',\n description:\n 'An RFC 9264 linkset. Each member of `linkset` is a link ' +\n 'CONTEXT keyed by its `anchor`: the first is anchored at the ' +\n 'catalog and lists its members under `item`, and each one after ' +\n 'it is anchored at a single API and carries that API’s links.',\n required: ['linkset'],\n properties: {\n linkset: {\n type: 'array',\n items: {\n type: 'object',\n required: ['anchor'],\n properties: {\n anchor: {\n type: 'string',\n format: 'uri',\n description:\n 'What every link in this object is a link FROM.',\n },\n item: {\n type: 'array',\n description: 'Catalog membership — the APIs listed.',\n items: { $ref: '#/components/schemas/CatalogLink' },\n },\n 'service-desc': {\n type: 'array',\n description:\n 'Machine-readable description of the anchored API.',\n items: { $ref: '#/components/schemas/CatalogLink' },\n },\n 'service-doc': {\n type: 'array',\n description: 'Documentation written for a person.',\n items: { $ref: '#/components/schemas/CatalogLink' },\n },\n status: {\n type: 'array',\n description: 'Where the anchored API reports its health.',\n items: { $ref: '#/components/schemas/CatalogLink' },\n },\n },\n },\n },\n },\n },\n CatalogLink: {\n type: 'object',\n description: 'One link in a linkset.',\n required: ['href'],\n properties: {\n href: { type: 'string', format: 'uri' },\n type: {\n type: 'string',\n description: 'Media type of the target, when it is known.',\n },\n title: { type: 'string', description: 'Human label.' },\n },\n },\n OpenApiDocument: {\n type: 'object',\n description:\n 'An OpenAPI 3.1 description — this document. Described rather ' +\n 'than left as a bare object so a consumer knows which dialect ' +\n 'the schemas inside it use before it fetches them.',\n required: ['openapi', 'info', 'paths'],\n properties: {\n openapi: {\n type: 'string',\n description: 'OpenAPI specification version, e.g. `3.1.0`.',\n },\n jsonSchemaDialect: {\n type: 'string',\n description: 'The JSON Schema dialect the schemas below use.',\n },\n info: {\n type: 'object',\n description: 'Title, version, summary and description.',\n },\n servers: {\n type: 'array',\n description: 'Origins this description applies to.',\n items: { type: 'object' },\n },\n tags: {\n type: 'array',\n description: 'Operation groupings.',\n items: { type: 'object' },\n },\n paths: {\n type: 'object',\n description: 'Every path, keyed by template, each with its verbs.',\n },\n components: {\n type: 'object',\n description: 'Reusable schemas, parameters and headers.',\n },\n },\n },\n WebAppManifest: {\n type: 'object',\n description:\n 'A W3C web app manifest. Only the members this site actually ' +\n 'emits are described; the specification allows more.',\n properties: {\n name: { type: 'string', description: 'Full name of the site.' },\n short_name: {\n type: 'string',\n description: 'Name used where space is tight.',\n },\n description: { type: 'string', description: 'What the site is.' },\n start_url: {\n type: 'string',\n description: 'Where an installed instance opens.',\n },\n scope: { type: 'string', description: 'URLs the install covers.' },\n display: {\n type: 'string',\n description: 'Preferred display mode, e.g. `standalone`.',\n },\n theme_color: {\n type: 'string',\n description: 'CSS color for the surrounding UI.',\n },\n background_color: {\n type: 'string',\n description: 'CSS color painted before the site renders.',\n },\n icons: {\n type: 'array',\n description: 'Installable icons.',\n items: {\n type: 'object',\n properties: {\n src: { type: 'string' },\n sizes: { type: 'string' },\n type: { type: 'string' },\n purpose: { type: 'string' },\n },\n },\n },\n },\n },\n SiteIdentity: {\n type: 'object',\n description: \"A site's public identity.\",\n properties: {\n $id: { type: 'string', description: 'Stable site identifier.' },\n displayName: { type: 'string', description: 'Human-readable name.' },\n logoUrl: { type: 'string', description: \"The site's logo.\" },\n subdomain: {\n type: 'string',\n description: 'Platform subdomain, without the apex.',\n },\n cname: { type: 'string', description: 'Custom domain, when set.' },\n locales: {\n type: 'array',\n items: { type: 'string' },\n description: 'BCP-47 locales this site publishes.',\n },\n defaultLocale: { type: 'string', description: 'The default locale.' },\n seo: SEO_SCHEMA,\n },\n },\n PublishedPage: {\n type: 'object',\n description: 'One published, indexable page.',\n properties: {\n $id: { type: 'string', description: 'Stable page identifier.' },\n slug: { type: 'string', description: 'The page’s own path segment.' },\n parentId: {\n type: 'string',\n description: 'Parent page, for a nested page.',\n },\n order: { type: 'integer', description: 'Sort order among siblings.' },\n displayName: { type: 'string', description: 'The page’s name.' },\n description: { type: 'string', description: 'Author’s summary.' },\n locale: { type: 'string', description: 'BCP-47 locale.' },\n publishedAt: {\n type: 'string',\n format: 'date-time',\n description: 'When this page was last published.',\n },\n updatedAt: {\n type: 'string',\n format: 'date-time',\n description: 'When this page was last saved.',\n },\n seo: SEO_SCHEMA,\n },\n required: ['$id'],\n },\n Health: {\n type: 'object',\n description: 'Service health.',\n properties: {\n status: {\n type: 'string',\n enum: ['ok', 'degraded', 'down'],\n description: 'Overall verdict.',\n },\n service: { type: 'string', description: 'Which service answered.' },\n version: { type: 'string', description: 'Platform version.' },\n environment: { type: 'string', description: 'Deployment environment.' },\n checks: {\n type: 'object',\n description: 'Per-dependency results.',\n additionalProperties: { type: 'object' },\n },\n },\n required: ['status'],\n },\n },\n headers: {\n ApiVersion: {\n description:\n 'The API version that produced this response. Compare it with ' +\n 'the version you were built against; they differ only when ' +\n 'something was removed, renamed, or narrowed.',\n schema: { type: 'string', examples: [API_VERSION] },\n },\n Deprecation: {\n description:\n 'Present only on a deprecated operation, per RFC 9745: the HTTP ' +\n 'date the deprecation took effect. Its absence is meaningful — ' +\n 'an operation that has never carried this is not scheduled for ' +\n 'removal.',\n schema: { type: 'string' },\n },\n Sunset: {\n description:\n 'Present only once a removal date is set, per RFC 8594: the ' +\n 'HTTP date after which this operation stops answering. Always ' +\n 'accompanied by `Deprecation`.',\n schema: { type: 'string' },\n },\n RateLimitLimit: {\n description:\n 'Requests this address may make per window, per RFC 9331.',\n schema: { type: 'integer' },\n },\n RateLimitRemaining: {\n description:\n 'Requests left in the current window.\\n\\n' +\n '⚠️ Counted PER SERVING INSTANCE, not across the deployment. ' +\n 'The limit is a backstop set far above ordinary reading, and an ' +\n 'exact global counter would cost every request two round trips ' +\n 'to enforce a number nobody should reach. Pace against it as a ' +\n 'courtesy signal, not as an exact budget.',\n schema: { type: 'integer' },\n },\n RateLimitReset: {\n description:\n 'Seconds until the current window resets — a duration, not a ' +\n 'timestamp, so a caller uses its own clock rather than trusting ' +\n 'ours.',\n schema: { type: 'integer' },\n },\n RetryAfter: {\n description:\n 'Seconds to wait before retrying. Sent only with a 429.',\n schema: { type: 'integer' },\n },\n },\n parameters: {\n ApiVersionRequest: {\n name: API_VERSION_HEADER,\n in: 'header',\n required: false,\n description:\n 'Pin the response shape to a version you were built against. ' +\n 'Omit it to get the current version, which is what most callers ' +\n 'want — additive changes never bump it.',\n schema: { type: 'string', examples: [API_VERSION] },\n },\n },\n },\n }\n}\n"],"names":["API_CATALOG_MEDIA_TYPE","MARKDOWN","API_VERSION_HEADER","API_VERSION","RATE_LIMIT_HEADERS","$ref","TOO_MANY_REQUESTS","description","headers","content","schema","ACCEPT_PARAMETER","name","in","required","type","enum","default","ERROR_SCHEMA","properties","status","statusMessage","errorCode","SEO_SCHEMA","title","image","imageWidth","imageHeight","imageAlt","buildAgentOpenApi","options","origin","replace","collections","collectionSlugs","map","collection","slug","paths","get","operationId","summary","tags","responses","parameters","example","Vary","data","host","minimum","maximum","screens","items","cursor","length","hasSearch","minLength","info","siteName","version","contactEmail","contact","email","termsOfServiceUrl","termsOfService","versionedHeaders","Deprecation","Sunset","METERED","Set","pathName","pathItem","Object","entries","metered","has","operation","values","verb","response","openapi","jsonSchemaDialect","servers","url","components","schemas","Error","ApiCatalog","linkset","anchor","format","item","CatalogLink","href","OpenApiDocument","WebAppManifest","short_name","start_url","scope","display","theme_color","background_color","icons","src","sizes","purpose","SiteIdentity","$id","displayName","logoUrl","subdomain","cname","locales","defaultLocale","seo","PublishedPage","parentId","order","locale","publishedAt","updatedAt","Health","service","environment","checks","additionalProperties","ApiVersion","examples","RateLimitLimit","RateLimitRemaining","RateLimitReset","RetryAfter","ApiVersionRequest"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/agent-openapi.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * `/openapi.json` for a tenant site (AGL-2716) — the machine-readable\n * description of what a site serves, per host.\n *\n * ## Why this is generated and not a checked-in file\n *\n * The document is a function of the SITE: its name, its origin, the content\n * collections it publishes. A static file would describe one site, and every\n * other host on the platform would publish a spec naming somebody else's\n * domain in `servers[]` — which is worse than no spec, because a client that\n * trusts it makes requests to the wrong origin.\n *\n * ## Read-only, deliberately\n *\n * Only GET operations are described. The tenant does serve writes — form\n * submissions, membership, consent — and each is reachable, rate-limited and\n * public, so listing them would be truthful. It would also be an invitation:\n * a spec is a list of things to call, an agent that reads one calls them, and\n * \"submit this form\" is not an operation a site owner asked to publish to\n * every crawler on the internet. Writes stay discoverable the way they always\n * were, from the page that carries the form.\n *\n * That decision belongs in the document, not just in this comment, so the\n * `description` says so — a reader who needs a write endpoint is told where to\n * look rather than left assuming none exists.\n *\n * ## Shaped for function calling\n *\n * Every operation carries a unique `operationId`, a `summary`, a `description`\n * and typed parameters, and every response names a schema. That is exactly the\n * subset an LLM tool-calling bridge reads when it turns a spec into callable\n * functions — a missing `operationId` becomes a generated name nobody can\n * predict, and a missing parameter type becomes a string the model guesses at.\n *\n * OpenAPI **3.1.0** rather than 3.0: 3.1 aligns its schema dialect with JSON\n * Schema 2020-12, which is the dialect the function-calling formats already\n * speak, so a bridge converts without a lossy pass.\n */\n\n/** A content collection the site publishes, as the feed operation names it. */\nexport interface AgentOpenApiCollection {\n slug: string\n name?: string\n}\n\nexport interface AgentOpenApiOptions {\n /** The site's name, for `info.title`. */\n siteName: string\n /** Absolute origin, no trailing slash — the single `servers[]` entry. */\n origin: string\n /** The site's own description, for `info.description`. */\n description?: string\n /** Published content collections, for the feed operation's enum. */\n collections?: readonly AgentOpenApiCollection[]\n /** Whether the site serves `/search`. */\n hasSearch?: boolean\n /** Platform version, so a consumer can tell two documents apart. */\n version?: string\n /** Contact email published in `info.contact`, when the site has one. */\n contactEmail?: string\n /** Absolute URL of the site's terms, when it publishes any. */\n termsOfServiceUrl?: string\n}\n\nimport { API_CATALOG_MEDIA_TYPE } from './agent-api-catalog'\n\n/** A JSON-Schema-shaped object; loose on purpose — this is a document, not a type. */\ntype Schema = Record<string, unknown>\n\n/** `text/markdown`, per RFC 7763. */\nconst MARKDOWN = 'text/markdown'\n\n/**\n * The header that carries the API version, in both directions (AGL-2722).\n *\n * A header and not a URL segment, because most of this surface sits at a\n * location some other specification fixed — `/openapi.json`, `/robots.txt`,\n * `/llms.txt`, `/sitemap.xml`, `/manifest.webmanifest`. `/v1/robots.txt` is\n * not a robots.txt: the crawler that needs it looks at the root and nowhere\n * else. Versioning only the `/api/*` half would leave one surface running two\n * rules, which is worse than either rule alone.\n */\nexport const API_VERSION_HEADER = 'Aglyn-API-Version'\n\n/**\n * The version this description and these responses are.\n *\n * ⚠️ Independent of the platform's release version, and deliberately so. The\n * platform ships several times a day; this shape is a promise to strangers and\n * moves only when the promise does. Bump it when a field is removed or\n * renamed, or when an operation narrows what it accepts — never for an\n * addition, which is why a consumer is told to parse leniently.\n */\nexport const API_VERSION = '1.0.0'\n\n/**\n * The RFC 9331 headers, and the 429, for the two operations that actually\n * meter (AGL-2722).\n *\n * Declared on those two only, never blanket-applied. `/api/health` is an\n * uptime probe answering from several regions on a schedule — metering it\n * would turn a bookkeeping limit into a false outage — and the static files\n * are served from the edge cache without ever reaching a counter. A header\n * describing a limit that is not enforced is worse than no header, because a\n * caller paces against it.\n */\nconst RATE_LIMIT_HEADERS: Schema = {\n 'RateLimit-Limit': { $ref: '#/components/headers/RateLimitLimit' },\n 'RateLimit-Remaining': { $ref: '#/components/headers/RateLimitRemaining' },\n 'RateLimit-Reset': { $ref: '#/components/headers/RateLimitReset' },\n}\n\nconst TOO_MANY_REQUESTS: Schema = {\n description:\n 'The address exceeded its per-minute budget. `Retry-After` names the ' +\n 'seconds to wait. Reaching this from ordinary reading would be ' +\n 'surprising — the budget is set well above what reading a whole site ' +\n 'costs.',\n headers: {\n ...RATE_LIMIT_HEADERS,\n 'Retry-After': { $ref: '#/components/headers/RetryAfter' },\n },\n content: {\n 'application/json': { schema: { $ref: '#/components/schemas/Error' } },\n },\n}\n\n/**\n * The `Accept` parameter, declared once and referenced by every page\n * operation.\n *\n * A header parameter rather than prose, because it is the ONLY way a client\n * discovers the Markdown representation from the document alone — and a\n * function-calling bridge that reads this turns it into an argument the model\n * can set, which is the whole point of publishing it.\n */\nconst ACCEPT_PARAMETER: Schema = {\n name: 'Accept',\n in: 'header',\n required: false,\n description:\n 'Content negotiation, per RFC 9110. `text/markdown` returns a clean ' +\n 'Markdown rendering of the page with the navigation, styling and scripts ' +\n 'removed; anything else returns HTML. Quality values are honored, and a ' +\n 'request that accepts neither representation is answered `406`. ' +\n 'Responses carry `Vary: Accept`.',\n schema: {\n type: 'string',\n enum: ['text/html', MARKDOWN],\n default: 'text/html',\n },\n}\n\n/** Error envelope shared by the JSON operations. */\nconst ERROR_SCHEMA: Schema = {\n type: 'object',\n description: 'The error envelope every JSON endpoint on this site returns.',\n properties: {\n status: { type: 'string', enum: ['error'], description: 'Always `error`.' },\n statusMessage: { type: 'string', description: 'Human-readable reason.' },\n errorCode: { type: 'string', description: 'Stable machine-readable code.' },\n },\n required: ['status'],\n}\n\n/** The `seo` block both the site and page schemas carry. */\nconst SEO_SCHEMA: Schema = {\n type: 'object',\n description: 'Search and social metadata.',\n properties: {\n title: { type: 'string', description: 'Title used in the page head.' },\n description: { type: 'string', description: 'Meta description.' },\n image: { type: 'string', description: 'Social card image reference.' },\n imageWidth: { type: 'integer', description: 'Social card width in pixels.' },\n imageHeight: { type: 'integer', description: 'Social card height in pixels.' },\n imageAlt: {\n type: 'string',\n description: 'Alternative text for the social card image.',\n },\n },\n}\n\n/** Build the OpenAPI 3.1 document for one site. */\nexport function buildAgentOpenApi(options: AgentOpenApiOptions): Schema {\n const origin = options.origin.replace(/\\/+$/, '')\n const collections = options.collections ?? []\n const collectionSlugs = collections.map((collection) => collection.slug)\n\n const paths: Schema = {\n '/openapi.json': {\n get: {\n operationId: 'getOpenApiDocument',\n summary: 'This document',\n description:\n 'The OpenAPI 3.1 description of everything this site serves. ' +\n 'Generated per site, so `servers[0].url` always names this origin.',\n tags: ['Discovery'],\n responses: {\n '200': {\n description: 'The OpenAPI document.',\n content: {\n 'application/json': {\n schema: { $ref: '#/components/schemas/OpenApiDocument' },\n },\n },\n },\n },\n },\n },\n '/.well-known/api-catalog': {\n get: {\n operationId: 'getApiCatalog',\n summary: 'API catalog',\n description:\n 'Every API that answers for this site, as an RFC 9727 catalog in ' +\n 'RFC 9264 linkset form. Two of them exist and they are not ' +\n 'interchangeable: this site’s own API, described by the document ' +\n 'you are reading, is anonymous and read-only; the platform API it ' +\n 'names is keyed, typed and writes. Each entry carries the API’s ' +\n '`service-desc` (its OpenAPI description), `service-doc` and, where ' +\n 'there is one, `status`.',\n tags: ['Discovery'],\n responses: {\n '200': {\n description: 'The catalog.',\n content: {\n [API_CATALOG_MEDIA_TYPE]: {\n schema: { $ref: '#/components/schemas/ApiCatalog' },\n },\n },\n },\n },\n },\n },\n '/llms.txt': {\n get: {\n operationId: 'getAgentGuidance',\n summary: 'Agent guidance (llms.txt)',\n description:\n 'What this site is for, when an agent should reach for it, and the ' +\n 'entry points that lead to everything else. Follows the ' +\n 'llmstxt.org format: an H1 name, a summary blockquote, and ' +\n 'H2-delimited link lists.',\n tags: ['Discovery'],\n responses: {\n '200': {\n description: 'The guidance file.',\n content: { [MARKDOWN]: { schema: { type: 'string' } } },\n },\n },\n },\n },\n '/robots.txt': {\n get: {\n operationId: 'getRobotsTxt',\n summary: 'Crawler policy',\n description:\n 'The exclusion rules this site asks crawlers to honor, and the ' +\n 'address of its sitemap index.',\n tags: ['Discovery'],\n responses: {\n '200': {\n description: 'The robots policy.',\n content: { 'text/plain': { schema: { type: 'string' } } },\n },\n },\n },\n },\n '/sitemap.xml': {\n get: {\n operationId: 'getSitemapIndex',\n summary: 'Sitemap index',\n description:\n 'A sitemap INDEX — it names child sitemaps rather than URLs. Each ' +\n 'child lists up to 5,000 URLs with their last-modified dates.',\n tags: ['Discovery'],\n responses: {\n '200': {\n description: 'A `<sitemapindex>` document.',\n content: { 'application/xml': { schema: { type: 'string' } } },\n },\n },\n },\n },\n '/manifest.webmanifest': {\n get: {\n operationId: 'getWebAppManifest',\n summary: 'Web app manifest',\n description: \"The site's installable web app manifest.\",\n tags: ['Discovery'],\n responses: {\n '200': {\n description: 'The manifest.',\n content: {\n 'application/manifest+json': {\n schema: { $ref: '#/components/schemas/WebAppManifest' },\n },\n },\n },\n },\n },\n },\n '/{path}': {\n get: {\n operationId: 'getPage',\n summary: 'Fetch one page',\n description:\n 'Any page on this site, in HTML or Markdown. `path` is the page ' +\n 'path without a leading slash — use an empty string for the home ' +\n 'page — and MAY contain `/` for a nested page. Two ways to ask for ' +\n 'Markdown: send `Accept: text/markdown`, or append `.md` to the ' +\n 'path. Enumerate the available paths with `listPublishedPages` or ' +\n 'from the sitemap index.',\n tags: ['Content'],\n parameters: [\n {\n name: 'path',\n in: 'path',\n required: true,\n description:\n 'Page path without a leading slash, e.g. `pricing` or ' +\n '`blog/hello-world`. May end in `.md` to request Markdown ' +\n 'without a content-negotiation header.',\n schema: { type: 'string' },\n example: 'pricing',\n },\n ACCEPT_PARAMETER,\n ],\n responses: {\n '200': {\n description: 'The page.',\n headers: {\n Vary: {\n description:\n 'Includes `Accept`, so a cache cannot serve one ' +\n 'representation in answer to a request for the other.',\n schema: { type: 'string' },\n },\n },\n content: {\n 'text/html': { schema: { type: 'string' } },\n [MARKDOWN]: {\n schema: {\n type: 'string',\n description:\n 'The page as Markdown: an H1 title, a blockquote ' +\n 'summary, the content region, and a `Source:` line ' +\n 'carrying the canonical URL. Navigation and footer are ' +\n 'omitted.',\n },\n },\n },\n },\n '404': { description: 'No page answers at that path.' },\n '406': {\n description:\n 'The request accepts neither `text/html` nor `text/markdown`. ' +\n 'The body lists the representations that are available.',\n content: { 'text/plain': { schema: { type: 'string' } } },\n },\n },\n },\n },\n '/api/host': {\n get: {\n operationId: 'getSiteIdentity',\n summary: 'Who publishes this site',\n description:\n \"The site's public identity: display name, logo, locales and the \" +\n 'search/social metadata it defaults to. Anonymous, cacheable, and ' +\n 'an allow-listed projection — never the underlying document.',\n tags: ['Site'],\n parameters: [\n {\n name: 'host',\n in: 'query',\n required: false,\n description:\n // NO PLATFORM APEX HERE. This string is published in the\n // OpenAPI document of EVERY site, including a self-hosted\n // operator's — naming Aglyn's own apex would tell their callers\n // to address a domain that is not theirs (the self-host ratchet\n // in `selfhost-hardcoded-hosts.spec.ts` is what caught it).\n 'Which site to describe: its custom domain, its platform ' +\n 'subdomain address, or its bare subdomain. ' +\n 'Defaults to the domain the request was sent to, so an agent ' +\n 'talking to one site never needs it.',\n schema: { type: 'string' },\n },\n ],\n responses: {\n '200': {\n description: 'The site identity.',\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n status: { type: 'string', enum: ['success'] },\n data: {\n type: 'object',\n properties: {\n host: { $ref: '#/components/schemas/SiteIdentity' },\n },\n },\n },\n required: ['status'],\n },\n },\n },\n },\n '400': {\n description: 'The site could not be resolved.',\n content: {\n 'application/json': { schema: { $ref: '#/components/schemas/Error' } },\n },\n },\n },\n },\n },\n '/api/screen': {\n get: {\n operationId: 'listPublishedPages',\n summary: 'List published pages',\n description:\n 'Every published, indexable page on this site, with its title, ' +\n 'description and dates. Gated pages — private, password-protected, ' +\n 'members-only and unlisted — are omitted, so this listing never ' +\n 'advertises an address a visitor cannot open. Paginate by passing ' +\n 'the previous response’s `cursor`; an empty cursor means the last ' +\n 'page.',\n tags: ['Content'],\n parameters: [\n {\n name: 'host',\n in: 'query',\n required: false,\n description:\n 'Which site to list. Defaults to the domain the request was ' +\n 'sent to.',\n schema: { type: 'string' },\n },\n {\n name: 'cursor',\n in: 'query',\n required: false,\n description:\n 'Cursor from the previous response. Omit for the first page.',\n schema: { type: 'string' },\n },\n {\n name: 'limit',\n in: 'query',\n required: false,\n description: 'Pages per response.',\n schema: { type: 'integer', minimum: 1, maximum: 100, default: 50 },\n },\n ],\n responses: {\n '200': {\n description: 'One page of the listing.',\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n status: { type: 'string', enum: ['success'] },\n data: {\n type: 'object',\n properties: {\n screens: {\n type: 'array',\n items: { $ref: '#/components/schemas/PublishedPage' },\n },\n cursor: {\n type: 'string',\n description:\n 'Cursor for the next request; empty on the last page.',\n },\n },\n required: ['screens', 'cursor'],\n },\n },\n required: ['status'],\n },\n },\n },\n },\n '400': {\n description: 'The site could not be resolved.',\n content: {\n 'application/json': { schema: { $ref: '#/components/schemas/Error' } },\n },\n },\n },\n },\n },\n '/api/health': {\n get: {\n operationId: 'getSiteHealth',\n summary: 'Service health',\n description:\n 'Whether the site runtime and its datastore are answering. `200` ' +\n 'when healthy, `503` when not; the body names which check failed.',\n tags: ['Site'],\n responses: {\n '200': {\n description: 'Healthy.',\n content: {\n 'application/json': { schema: { $ref: '#/components/schemas/Health' } },\n },\n },\n '503': {\n description: 'A dependency is unavailable.',\n content: {\n 'application/json': { schema: { $ref: '#/components/schemas/Health' } },\n },\n },\n },\n },\n },\n }\n\n /*\n The feed operation exists only where a feed does. A site with no content\n collection has no `/{slug}/rss.xml` to serve, and publishing the operation\n anyway would put an endpoint in the document that answers 404 — the one\n defect that makes a client distrust the rest of the spec.\n */\n if (collectionSlugs.length > 0) {\n paths['/{collectionSlug}/rss.xml'] = {\n get: {\n operationId: 'getCollectionFeed',\n summary: 'Collection feed',\n description:\n \"A content collection's newest entries as RSS 2.0, newest first.\",\n tags: ['Content'],\n parameters: [\n {\n name: 'collectionSlug',\n in: 'path',\n required: true,\n description: 'Which collection to read.',\n // An enum rather than a bare string: this site's collections are\n // known here, and a function-calling bridge turns an enum into a\n // constrained argument the model cannot get wrong.\n schema: { type: 'string', enum: collectionSlugs },\n example: collectionSlugs[0],\n },\n ],\n responses: {\n '200': {\n description: 'An RSS 2.0 document.',\n content: { 'application/rss+xml': { schema: { type: 'string' } } },\n },\n '404': { description: 'No collection answers at that slug.' },\n },\n },\n }\n }\n\n if (options.hasSearch) {\n paths['/search'] = {\n get: {\n operationId: 'searchSite',\n summary: 'Search this site',\n description:\n \"Full-text search across this site's published pages and content \" +\n 'entries. HTML only — unlike every other page here, the results are ' +\n 'computed in the browser, so a Markdown variant would be a heading ' +\n 'with no results under it. To read the matches as Markdown, follow ' +\n 'the result links and fetch each page with `Accept: text/markdown`.',\n tags: ['Content'],\n parameters: [\n {\n name: 'q',\n in: 'query',\n required: true,\n description: 'The query.',\n schema: { type: 'string', minLength: 1 },\n },\n ],\n responses: {\n '200': {\n description: 'The results page.',\n content: { 'text/html': { schema: { type: 'string' } } },\n },\n },\n },\n }\n }\n\n const info: Schema = {\n title: `${options.siteName} — public API`,\n /*\n The CONTRACT version, not the build. `info.version` carrying the platform\n release meant it changed several times a day, so a consumer reading it as\n \"the shape I was built against\" was tracking deploy noise and had nothing\n to pin. The build identifier keeps its purpose — telling two documents\n apart — under its own key.\n */\n version: API_VERSION,\n ...(options.version ? { 'x-aglyn-platform-version': options.version } : {}),\n summary: `Everything ${options.siteName} publishes for machine consumption.`,\n description:\n `The read-only surface of ${options.siteName}. Every operation is ` +\n 'anonymous — no key, no session — and every page can be fetched as ' +\n 'Markdown instead of HTML by sending `Accept: text/markdown` or by ' +\n 'appending `.md` to its path.\\n\\n' +\n 'Write endpoints are deliberately not described here. This site does ' +\n 'accept form submissions and account actions, but those belong to the ' +\n 'page that carries them rather than to a spec published to every ' +\n 'crawler; follow the form on the relevant page.\\n\\n' +\n `Start at [/llms.txt](${origin}/llms.txt) for what this site is for, ` +\n `or [/sitemap.xml](${origin}/sitemap.xml) for every indexable URL.\\n\\n` +\n '## Versioning and deprecation\\n\\n' +\n 'This surface is versioned by HEADER, not by URL. Send ' +\n `\\`${API_VERSION_HEADER}: ${API_VERSION}\\` to pin the shape you were ` +\n 'built against; omit it and you get the current version. Every ' +\n `response names the version that served it in the same header.\\n\\n` +\n 'A path version was the alternative and it does not fit this surface: ' +\n 'most of what is described here lives at a location some other ' +\n 'specification fixed — `/openapi.json`, `/robots.txt`, `/llms.txt`, ' +\n '`/sitemap.xml`, `/manifest.webmanifest`. Moving those under `/v1/` ' +\n 'would break the specs that define them, and versioning only the ' +\n '`/api/*` half would leave one surface with two rules.\\n\\n' +\n 'Additive changes — a new operation, a new optional field — ship ' +\n 'without a version bump, so parse leniently and ignore what you do ' +\n 'not recognise. Anything that removes or renames a field, or narrows ' +\n 'what an operation accepts, does bump it.\\n\\n' +\n 'Removal is announced on the responses themselves, not only in a ' +\n 'changelog. A deprecated operation answers with `Deprecation` (RFC ' +\n '9745) from the moment it is deprecated, and `Sunset` (RFC 8594) ' +\n 'naming the date it stops answering. Both are HTTP dates. An ' +\n 'operation that has never carried either is not scheduled for ' +\n 'removal.',\n ...(options.contactEmail\n ? { contact: { name: options.siteName, email: options.contactEmail } }\n : {}),\n ...(options.termsOfServiceUrl ? { termsOfService: options.termsOfServiceUrl } : {}),\n }\n\n /*\n Every response names the version that served it and declares the two\n headers a removal is announced on; every operation accepts the version\n request header. Attached by a walk rather than written into each operation\n by hand — a policy stated in `info` and then missing from an operation is\n not a policy, and eleven hand-copied blocks is exactly how that happens.\n */\n const versionedHeaders: Schema = {\n [API_VERSION_HEADER]: { $ref: '#/components/headers/ApiVersion' },\n Deprecation: { $ref: '#/components/headers/Deprecation' },\n Sunset: { $ref: '#/components/headers/Sunset' },\n }\n /** The paths `publicReadApiGate` actually meters. Kept in step by AGL-2722's spec. */\n const METERED = new Set(['/api/host', '/api/screen'])\n for (const [pathName, pathItem] of Object.entries(paths as Record<string, Schema>)) {\n const metered = METERED.has(pathName)\n for (const operation of Object.values(pathItem)) {\n if (!operation || typeof operation !== 'object') continue\n const verb = operation as Schema\n const responses = verb.responses as Record<string, Schema> | undefined\n if (!responses) continue\n if (metered && !responses['429']) responses['429'] = { ...TOO_MANY_REQUESTS }\n for (const response of Object.values(responses)) {\n // The operation's own headers win: a walk that overwrote them would\n // silently drop something an operation deliberately said.\n response.headers = {\n ...versionedHeaders,\n ...(metered ? RATE_LIMIT_HEADERS : {}),\n ...((response.headers as Schema) ?? {}),\n }\n }\n verb.parameters = [\n ...((verb.parameters as unknown[]) ?? []),\n { $ref: '#/components/parameters/ApiVersionRequest' },\n ]\n }\n }\n\n return {\n openapi: '3.1.0',\n // The dialect, stated rather than assumed. It is what tells a consumer the\n // schemas below are JSON Schema 2020-12 and not OpenAPI 3.0's dialect.\n jsonSchemaDialect: 'https://json-schema.org/draft/2020-12/schema',\n info,\n servers: [{ url: origin, description: options.siteName }],\n tags: [\n {\n name: 'Discovery',\n description: 'Files that describe the site to a machine.',\n },\n { name: 'Content', description: 'The pages and entries the site publishes.' },\n { name: 'Site', description: 'Identity and operational status.' },\n ],\n paths,\n components: {\n schemas: {\n Error: ERROR_SCHEMA,\n ApiCatalog: {\n type: 'object',\n description:\n 'An RFC 9264 linkset. Each member of `linkset` is a link ' +\n 'CONTEXT keyed by its `anchor`: the first is anchored at the ' +\n 'catalog and lists its members under `item`, and each one after ' +\n 'it is anchored at a single API and carries that API’s links.',\n required: ['linkset'],\n properties: {\n linkset: {\n type: 'array',\n items: {\n type: 'object',\n required: ['anchor'],\n properties: {\n anchor: {\n type: 'string',\n format: 'uri',\n description:\n 'What every link in this object is a link FROM.',\n },\n item: {\n type: 'array',\n description: 'Catalog membership — the APIs listed.',\n items: { $ref: '#/components/schemas/CatalogLink' },\n },\n 'service-desc': {\n type: 'array',\n description:\n 'Machine-readable description of the anchored API.',\n items: { $ref: '#/components/schemas/CatalogLink' },\n },\n 'service-doc': {\n type: 'array',\n description: 'Documentation written for a person.',\n items: { $ref: '#/components/schemas/CatalogLink' },\n },\n status: {\n type: 'array',\n description: 'Where the anchored API reports its health.',\n items: { $ref: '#/components/schemas/CatalogLink' },\n },\n },\n },\n },\n },\n },\n CatalogLink: {\n type: 'object',\n description: 'One link in a linkset.',\n required: ['href'],\n properties: {\n href: { type: 'string', format: 'uri' },\n type: {\n type: 'string',\n description: 'Media type of the target, when it is known.',\n },\n title: { type: 'string', description: 'Human label.' },\n },\n },\n OpenApiDocument: {\n type: 'object',\n description:\n 'An OpenAPI 3.1 description — this document. Described rather ' +\n 'than left as a bare object so a consumer knows which dialect ' +\n 'the schemas inside it use before it fetches them.',\n required: ['openapi', 'info', 'paths'],\n properties: {\n openapi: {\n type: 'string',\n description: 'OpenAPI specification version, e.g. `3.1.0`.',\n },\n jsonSchemaDialect: {\n type: 'string',\n description: 'The JSON Schema dialect the schemas below use.',\n },\n info: {\n type: 'object',\n description: 'Title, version, summary and description.',\n },\n servers: {\n type: 'array',\n description: 'Origins this description applies to.',\n items: { type: 'object' },\n },\n tags: {\n type: 'array',\n description: 'Operation groupings.',\n items: { type: 'object' },\n },\n paths: {\n type: 'object',\n description: 'Every path, keyed by template, each with its verbs.',\n },\n components: {\n type: 'object',\n description: 'Reusable schemas, parameters and headers.',\n },\n },\n },\n WebAppManifest: {\n type: 'object',\n description:\n 'A W3C web app manifest. Only the members this site actually ' +\n 'emits are described; the specification allows more.',\n properties: {\n name: { type: 'string', description: 'Full name of the site.' },\n short_name: {\n type: 'string',\n description: 'Name used where space is tight.',\n },\n description: { type: 'string', description: 'What the site is.' },\n start_url: {\n type: 'string',\n description: 'Where an installed instance opens.',\n },\n scope: { type: 'string', description: 'URLs the install covers.' },\n display: {\n type: 'string',\n description: 'Preferred display mode, e.g. `standalone`.',\n },\n theme_color: {\n type: 'string',\n description: 'CSS color for the surrounding UI.',\n },\n background_color: {\n type: 'string',\n description: 'CSS color painted before the site renders.',\n },\n icons: {\n type: 'array',\n description: 'Installable icons.',\n items: {\n type: 'object',\n properties: {\n src: { type: 'string' },\n sizes: { type: 'string' },\n type: { type: 'string' },\n purpose: { type: 'string' },\n },\n },\n },\n },\n },\n SiteIdentity: {\n type: 'object',\n description: \"A site's public identity.\",\n properties: {\n $id: { type: 'string', description: 'Stable site identifier.' },\n displayName: { type: 'string', description: 'Human-readable name.' },\n logoUrl: { type: 'string', description: \"The site's logo.\" },\n subdomain: {\n type: 'string',\n description: 'Platform subdomain, without the apex.',\n },\n cname: { type: 'string', description: 'Custom domain, when set.' },\n locales: {\n type: 'array',\n items: { type: 'string' },\n description: 'BCP-47 locales this site publishes.',\n },\n defaultLocale: { type: 'string', description: 'The default locale.' },\n seo: SEO_SCHEMA,\n },\n },\n PublishedPage: {\n type: 'object',\n description: 'One published, indexable page.',\n properties: {\n $id: { type: 'string', description: 'Stable page identifier.' },\n slug: { type: 'string', description: 'The page’s own path segment.' },\n parentId: {\n type: 'string',\n description:\n 'Nearest parent page, for a nested page. Page groups are ' +\n 'skipped: they hold pages in the editor and have no address.',\n },\n order: { type: 'integer', description: 'Sort order among siblings.' },\n displayName: { type: 'string', description: 'The page’s name.' },\n description: { type: 'string', description: 'Author’s summary.' },\n locale: { type: 'string', description: 'BCP-47 locale.' },\n publishedAt: {\n type: 'string',\n format: 'date-time',\n description: 'When this page was last published.',\n },\n updatedAt: {\n type: 'string',\n format: 'date-time',\n description: 'When this page was last saved.',\n },\n seo: SEO_SCHEMA,\n },\n required: ['$id'],\n },\n Health: {\n type: 'object',\n description: 'Service health.',\n properties: {\n status: {\n type: 'string',\n enum: ['ok', 'degraded', 'down'],\n description: 'Overall verdict.',\n },\n service: { type: 'string', description: 'Which service answered.' },\n version: { type: 'string', description: 'Platform version.' },\n environment: { type: 'string', description: 'Deployment environment.' },\n checks: {\n type: 'object',\n description: 'Per-dependency results.',\n additionalProperties: { type: 'object' },\n },\n },\n required: ['status'],\n },\n },\n headers: {\n ApiVersion: {\n description:\n 'The API version that produced this response. Compare it with ' +\n 'the version you were built against; they differ only when ' +\n 'something was removed, renamed, or narrowed.',\n schema: { type: 'string', examples: [API_VERSION] },\n },\n Deprecation: {\n description:\n 'Present only on a deprecated operation, per RFC 9745: the HTTP ' +\n 'date the deprecation took effect. Its absence is meaningful — ' +\n 'an operation that has never carried this is not scheduled for ' +\n 'removal.',\n schema: { type: 'string' },\n },\n Sunset: {\n description:\n 'Present only once a removal date is set, per RFC 8594: the ' +\n 'HTTP date after which this operation stops answering. Always ' +\n 'accompanied by `Deprecation`.',\n schema: { type: 'string' },\n },\n RateLimitLimit: {\n description:\n 'Requests this address may make per window, per RFC 9331.',\n schema: { type: 'integer' },\n },\n RateLimitRemaining: {\n description:\n 'Requests left in the current window.\\n\\n' +\n '⚠️ Counted PER SERVING INSTANCE, not across the deployment. ' +\n 'The limit is a backstop set far above ordinary reading, and an ' +\n 'exact global counter would cost every request two round trips ' +\n 'to enforce a number nobody should reach. Pace against it as a ' +\n 'courtesy signal, not as an exact budget.',\n schema: { type: 'integer' },\n },\n RateLimitReset: {\n description:\n 'Seconds until the current window resets — a duration, not a ' +\n 'timestamp, so a caller uses its own clock rather than trusting ' +\n 'ours.',\n schema: { type: 'integer' },\n },\n RetryAfter: {\n description:\n 'Seconds to wait before retrying. Sent only with a 429.',\n schema: { type: 'integer' },\n },\n },\n parameters: {\n ApiVersionRequest: {\n name: API_VERSION_HEADER,\n in: 'header',\n required: false,\n description:\n 'Pin the response shape to a version you were built against. ' +\n 'Omit it to get the current version, which is what most callers ' +\n 'want — additive changes never bump it.',\n schema: { type: 'string', examples: [API_VERSION] },\n },\n },\n },\n }\n}\n"],"names":["API_CATALOG_MEDIA_TYPE","MARKDOWN","API_VERSION_HEADER","API_VERSION","RATE_LIMIT_HEADERS","$ref","TOO_MANY_REQUESTS","description","headers","content","schema","ACCEPT_PARAMETER","name","in","required","type","enum","default","ERROR_SCHEMA","properties","status","statusMessage","errorCode","SEO_SCHEMA","title","image","imageWidth","imageHeight","imageAlt","buildAgentOpenApi","options","origin","replace","collections","collectionSlugs","map","collection","slug","paths","get","operationId","summary","tags","responses","parameters","example","Vary","data","host","minimum","maximum","screens","items","cursor","length","hasSearch","minLength","info","siteName","version","contactEmail","contact","email","termsOfServiceUrl","termsOfService","versionedHeaders","Deprecation","Sunset","METERED","Set","pathName","pathItem","Object","entries","metered","has","operation","values","verb","response","openapi","jsonSchemaDialect","servers","url","components","schemas","Error","ApiCatalog","linkset","anchor","format","item","CatalogLink","href","OpenApiDocument","WebAppManifest","short_name","start_url","scope","display","theme_color","background_color","icons","src","sizes","purpose","SiteIdentity","$id","displayName","logoUrl","subdomain","cname","locales","defaultLocale","seo","PublishedPage","parentId","order","locale","publishedAt","updatedAt","Health","service","environment","checks","additionalProperties","ApiVersion","examples","RateLimitLimit","RateLimitRemaining","RateLimitReset","RetryAfter","ApiVersionRequest"],"mappings":"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"}
|
|
@@ -684,7 +684,8 @@ export declare function buildAddToCartParams(input: {
|
|
|
684
684
|
* publish. The host's `defaultHomeScreenId` names that placeholder, and its
|
|
685
685
|
* entry is not counted: the site "came alive" when its owner put something on
|
|
686
686
|
* it, not when the platform did. Republishing the placeholder itself after
|
|
687
|
-
* editing it counts, which is the same act
|
|
687
|
+
* editing it counts, which is the same act: that publish is read against the
|
|
688
|
+
* map with the marker still set, and clears it in the same write (AGL-3478).
|
|
688
689
|
*/
|
|
689
690
|
export declare function isFirstPublishedRoute(routing: Record<string, unknown> | null | undefined, defaultHomeScreenId?: string | null): boolean;
|
|
690
691
|
/** The taxonomy, enumerable. */
|
|
@@ -744,7 +745,7 @@ export declare function resolveAuthoredEventName(raw: string | undefined | null)
|
|
|
744
745
|
* surfaced in the page. Nothing here can reach the author — the code is
|
|
745
746
|
* running for a VISITOR of their site, and turning the author's configuration
|
|
746
747
|
* mistake into something a visitor sees would be a worse bug than the missing
|
|
747
|
-
* metric. The author-facing half lives in `
|
|
748
|
+
* metric. The author-facing half lives in `validateInteraction`, which refuses
|
|
748
749
|
* to save a name this function would refuse to send, so a silent drop should
|
|
749
750
|
* only ever happen to a step authored before AGL-1587.
|
|
750
751
|
*/
|
|
@@ -429,7 +429,8 @@ function scrubValue(value) {
|
|
|
429
429
|
* publish. The host's `defaultHomeScreenId` names that placeholder, and its
|
|
430
430
|
* entry is not counted: the site "came alive" when its owner put something on
|
|
431
431
|
* it, not when the platform did. Republishing the placeholder itself after
|
|
432
|
-
* editing it counts, which is the same act
|
|
432
|
+
* editing it counts, which is the same act: that publish is read against the
|
|
433
|
+
* map with the marker still set, and clears it in the same write (AGL-3478).
|
|
433
434
|
*/ export function isFirstPublishedRoute(routing, defaultHomeScreenId) {
|
|
434
435
|
return !Object.keys(routing != null ? routing : {}).some((screenId)=>screenId !== defaultHomeScreenId);
|
|
435
436
|
}
|
|
@@ -633,7 +634,7 @@ function scrubValue(value) {
|
|
|
633
634
|
* surfaced in the page. Nothing here can reach the author — the code is
|
|
634
635
|
* running for a VISITOR of their site, and turning the author's configuration
|
|
635
636
|
* mistake into something a visitor sees would be a worse bug than the missing
|
|
636
|
-
* metric. The author-facing half lives in `
|
|
637
|
+
* metric. The author-facing half lives in `validateInteraction`, which refuses
|
|
637
638
|
* to save a name this function would refuse to send, so a silent drop should
|
|
638
639
|
* only ever happen to a step authored before AGL-1587.
|
|
639
640
|
*/ export function trackAuthoredEvent(name, params) {
|