@aglyn/aglyn 1.0.0-beta.143
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/LICENSE +201 -0
- package/README.md +11 -0
- package/package.json +66 -0
- package/src/index.d.ts +25 -0
- package/src/index.js +26 -0
- package/src/index.js.map +1 -0
- package/src/lib/aglyn.d.ts +31 -0
- package/src/lib/aglyn.js +114 -0
- package/src/lib/aglyn.js.map +1 -0
- package/src/lib/app-utils/abuse-report.d.ts +193 -0
- package/src/lib/app-utils/abuse-report.js +321 -0
- package/src/lib/app-utils/abuse-report.js.map +1 -0
- package/src/lib/app-utils/accept-negotiation.d.ts +129 -0
- package/src/lib/app-utils/accept-negotiation.js +266 -0
- package/src/lib/app-utils/accept-negotiation.js.map +1 -0
- package/src/lib/app-utils/account-emails.d.ts +263 -0
- package/src/lib/app-utils/account-emails.js +264 -0
- package/src/lib/app-utils/account-emails.js.map +1 -0
- package/src/lib/app-utils/actions.d.ts +717 -0
- package/src/lib/app-utils/actions.js +1031 -0
- package/src/lib/app-utils/actions.js.map +1 -0
- package/src/lib/app-utils/activity-presenter.d.ts +152 -0
- package/src/lib/app-utils/activity-presenter.js +326 -0
- package/src/lib/app-utils/activity-presenter.js.map +1 -0
- package/src/lib/app-utils/advertising-tag-mounts.d.ts +133 -0
- package/src/lib/app-utils/advertising-tag-mounts.js +118 -0
- package/src/lib/app-utils/advertising-tag-mounts.js.map +1 -0
- package/src/lib/app-utils/advertising-tags.d.ts +307 -0
- package/src/lib/app-utils/advertising-tags.js +525 -0
- package/src/lib/app-utils/advertising-tags.js.map +1 -0
- package/src/lib/app-utils/agent-api-catalog.d.ts +94 -0
- package/src/lib/app-utils/agent-api-catalog.js +106 -0
- package/src/lib/app-utils/agent-api-catalog.js.map +1 -0
- package/src/lib/app-utils/agent-openapi.d.ts +103 -0
- package/src/lib/app-utils/agent-openapi.js +1128 -0
- package/src/lib/app-utils/agent-openapi.js.map +1 -0
- package/src/lib/app-utils/analytics-beacon.d.ts +154 -0
- package/src/lib/app-utils/analytics-beacon.js +152 -0
- package/src/lib/app-utils/analytics-beacon.js.map +1 -0
- package/src/lib/app-utils/analytics-environment.d.ts +133 -0
- package/src/lib/app-utils/analytics-environment.js +152 -0
- package/src/lib/app-utils/analytics-environment.js.map +1 -0
- package/src/lib/app-utils/analytics-events.d.ts +744 -0
- package/src/lib/app-utils/analytics-events.js +650 -0
- package/src/lib/app-utils/analytics-events.js.map +1 -0
- package/src/lib/app-utils/analytics-link-clicks.d.ts +102 -0
- package/src/lib/app-utils/analytics-link-clicks.js +267 -0
- package/src/lib/app-utils/analytics-link-clicks.js.map +1 -0
- package/src/lib/app-utils/analytics-path-key.d.ts +46 -0
- package/src/lib/app-utils/analytics-path-key.js +46 -0
- package/src/lib/app-utils/analytics-path-key.js.map +1 -0
- package/src/lib/app-utils/api-adapter.d.ts +47 -0
- package/src/lib/app-utils/api-adapter.js +367 -0
- package/src/lib/app-utils/api-adapter.js.map +1 -0
- package/src/lib/app-utils/api-idempotency.d.ts +169 -0
- package/src/lib/app-utils/api-idempotency.js +213 -0
- package/src/lib/app-utils/api-idempotency.js.map +1 -0
- package/src/lib/app-utils/api-plugins.d.ts +210 -0
- package/src/lib/app-utils/api-plugins.js +221 -0
- package/src/lib/app-utils/api-plugins.js.map +1 -0
- package/src/lib/app-utils/assist-credits.d.ts +482 -0
- package/src/lib/app-utils/assist-credits.js +509 -0
- package/src/lib/app-utils/assist-credits.js.map +1 -0
- package/src/lib/app-utils/attribution-attribute.d.ts +34 -0
- package/src/lib/app-utils/attribution-attribute.js +34 -0
- package/src/lib/app-utils/attribution-attribute.js.map +1 -0
- package/src/lib/app-utils/attribution-guard.d.ts +130 -0
- package/src/lib/app-utils/attribution-guard.js +410 -0
- package/src/lib/app-utils/attribution-guard.js.map +1 -0
- package/src/lib/app-utils/author-css.d.ts +123 -0
- package/src/lib/app-utils/author-css.js +275 -0
- package/src/lib/app-utils/author-css.js.map +1 -0
- package/src/lib/app-utils/author-html-markdown.d.ts +31 -0
- package/src/lib/app-utils/author-html-markdown.js +497 -0
- package/src/lib/app-utils/author-html-markdown.js.map +1 -0
- package/src/lib/app-utils/author-html.d.ts +135 -0
- package/src/lib/app-utils/author-html.js +1037 -0
- package/src/lib/app-utils/author-html.js.map +1 -0
- package/src/lib/app-utils/automation-placeholders.d.ts +72 -0
- package/src/lib/app-utils/automation-placeholders.js +207 -0
- package/src/lib/app-utils/automation-placeholders.js.map +1 -0
- package/src/lib/app-utils/bandwidth-cap.d.ts +183 -0
- package/src/lib/app-utils/bandwidth-cap.js +193 -0
- package/src/lib/app-utils/bandwidth-cap.js.map +1 -0
- package/src/lib/app-utils/binding-token-catalog.d.ts +82 -0
- package/src/lib/app-utils/binding-token-catalog.js +293 -0
- package/src/lib/app-utils/binding-token-catalog.js.map +1 -0
- package/src/lib/app-utils/binding-tokens.d.ts +157 -0
- package/src/lib/app-utils/binding-tokens.js +251 -0
- package/src/lib/app-utils/binding-tokens.js.map +1 -0
- package/src/lib/app-utils/breadcrumb-json-ld.d.ts +57 -0
- package/src/lib/app-utils/breadcrumb-json-ld.js +67 -0
- package/src/lib/app-utils/breadcrumb-json-ld.js.map +1 -0
- package/src/lib/app-utils/campaign-attribution.d.ts +117 -0
- package/src/lib/app-utils/campaign-attribution.js +162 -0
- package/src/lib/app-utils/campaign-attribution.js.map +1 -0
- package/src/lib/app-utils/campaign-forwarding.d.ts +220 -0
- package/src/lib/app-utils/campaign-forwarding.js +332 -0
- package/src/lib/app-utils/campaign-forwarding.js.map +1 -0
- package/src/lib/app-utils/campaign-membership.d.ts +109 -0
- package/src/lib/app-utils/campaign-membership.js +176 -0
- package/src/lib/app-utils/campaign-membership.js.map +1 -0
- package/src/lib/app-utils/campaign-touch.d.ts +206 -0
- package/src/lib/app-utils/campaign-touch.js +326 -0
- package/src/lib/app-utils/campaign-touch.js.map +1 -0
- package/src/lib/app-utils/child-contract-compose.d.ts +28 -0
- package/src/lib/app-utils/child-contract-compose.js +140 -0
- package/src/lib/app-utils/child-contract-compose.js.map +1 -0
- package/src/lib/app-utils/child-contract.d.ts +129 -0
- package/src/lib/app-utils/child-contract.js +153 -0
- package/src/lib/app-utils/child-contract.js.map +1 -0
- package/src/lib/app-utils/collection-delete.d.ts +113 -0
- package/src/lib/app-utils/collection-delete.js +120 -0
- package/src/lib/app-utils/collection-delete.js.map +1 -0
- package/src/lib/app-utils/collection-entries.d.ts +833 -0
- package/src/lib/app-utils/collection-entries.js +1285 -0
- package/src/lib/app-utils/collection-entries.js.map +1 -0
- package/src/lib/app-utils/collection-entry-date.d.ts +129 -0
- package/src/lib/app-utils/collection-entry-date.js +183 -0
- package/src/lib/app-utils/collection-entry-date.js.map +1 -0
- package/src/lib/app-utils/collection-kind.d.ts +55 -0
- package/src/lib/app-utils/collection-kind.js +69 -0
- package/src/lib/app-utils/collection-kind.js.map +1 -0
- package/src/lib/app-utils/collection-slug.d.ts +79 -0
- package/src/lib/app-utils/collection-slug.js +70 -0
- package/src/lib/app-utils/collection-slug.js.map +1 -0
- package/src/lib/app-utils/compose-layout-nodes.d.ts +147 -0
- package/src/lib/app-utils/compose-layout-nodes.js +261 -0
- package/src/lib/app-utils/compose-layout-nodes.js.map +1 -0
- package/src/lib/app-utils/compose-layout-props.d.ts +71 -0
- package/src/lib/app-utils/compose-layout-props.js +61 -0
- package/src/lib/app-utils/compose-layout-props.js.map +1 -0
- package/src/lib/app-utils/compose-reusable-components.d.ts +504 -0
- package/src/lib/app-utils/compose-reusable-components.js +1366 -0
- package/src/lib/app-utils/compose-reusable-components.js.map +1 -0
- package/src/lib/app-utils/compress.d.ts +35 -0
- package/src/lib/app-utils/compress.js +38 -0
- package/src/lib/app-utils/compress.js.map +1 -0
- package/src/lib/app-utils/consent-banner-ui.d.ts +226 -0
- package/src/lib/app-utils/consent-banner-ui.js +583 -0
- package/src/lib/app-utils/consent-banner-ui.js.map +1 -0
- package/src/lib/app-utils/consent-groups.d.ts +189 -0
- package/src/lib/app-utils/consent-groups.js +219 -0
- package/src/lib/app-utils/consent-groups.js.map +1 -0
- package/src/lib/app-utils/consent-preferences-dialog.d.ts +58 -0
- package/src/lib/app-utils/consent-preferences-dialog.js +106 -0
- package/src/lib/app-utils/consent-preferences-dialog.js.map +1 -0
- package/src/lib/app-utils/console-record-links.d.ts +163 -0
- package/src/lib/app-utils/console-record-links.js +178 -0
- package/src/lib/app-utils/console-record-links.js.map +1 -0
- package/src/lib/app-utils/console-routes.d.ts +658 -0
- package/src/lib/app-utils/console-routes.js +489 -0
- package/src/lib/app-utils/console-routes.js.map +1 -0
- package/src/lib/app-utils/console-widget-slot-context.d.ts +46 -0
- package/src/lib/app-utils/console-widget-slot-context.js +23 -0
- package/src/lib/app-utils/console-widget-slot-context.js.map +1 -0
- package/src/lib/app-utils/contact-custom-fields.d.ts +191 -0
- package/src/lib/app-utils/contact-custom-fields.js +349 -0
- package/src/lib/app-utils/contact-custom-fields.js.map +1 -0
- package/src/lib/app-utils/contact-holder.d.ts +52 -0
- package/src/lib/app-utils/contact-holder.js +98 -0
- package/src/lib/app-utils/contact-holder.js.map +1 -0
- package/src/lib/app-utils/contact-merge.d.ts +136 -0
- package/src/lib/app-utils/contact-merge.js +379 -0
- package/src/lib/app-utils/contact-merge.js.map +1 -0
- package/src/lib/app-utils/contacts.d.ts +554 -0
- package/src/lib/app-utils/contacts.js +401 -0
- package/src/lib/app-utils/contacts.js.map +1 -0
- package/src/lib/app-utils/content-author-profile.d.ts +68 -0
- package/src/lib/app-utils/content-author-profile.js +118 -0
- package/src/lib/app-utils/content-author-profile.js.map +1 -0
- package/src/lib/app-utils/content-authors.d.ts +662 -0
- package/src/lib/app-utils/content-authors.js +771 -0
- package/src/lib/app-utils/content-authors.js.map +1 -0
- package/src/lib/app-utils/content-schema-type.d.ts +81 -0
- package/src/lib/app-utils/content-schema-type.js +87 -0
- package/src/lib/app-utils/content-schema-type.js.map +1 -0
- package/src/lib/app-utils/contexts.d.ts +35 -0
- package/src/lib/app-utils/contexts.js +35 -0
- package/src/lib/app-utils/contexts.js.map +1 -0
- package/src/lib/app-utils/create-resource-uid.d.ts +18 -0
- package/src/lib/app-utils/create-resource-uid.js +23 -0
- package/src/lib/app-utils/create-resource-uid.js.map +1 -0
- package/src/lib/app-utils/crm-booking.d.ts +75 -0
- package/src/lib/app-utils/crm-booking.js +133 -0
- package/src/lib/app-utils/crm-booking.js.map +1 -0
- package/src/lib/app-utils/crm-csv.d.ts +232 -0
- package/src/lib/app-utils/crm-csv.js +432 -0
- package/src/lib/app-utils/crm-csv.js.map +1 -0
- package/src/lib/app-utils/crm-digest.d.ts +179 -0
- package/src/lib/app-utils/crm-digest.js +271 -0
- package/src/lib/app-utils/crm-digest.js.map +1 -0
- package/src/lib/app-utils/crm-email-templates.d.ts +172 -0
- package/src/lib/app-utils/crm-email-templates.js +382 -0
- package/src/lib/app-utils/crm-email-templates.js.map +1 -0
- package/src/lib/app-utils/crm-inbound.d.ts +245 -0
- package/src/lib/app-utils/crm-inbound.js +407 -0
- package/src/lib/app-utils/crm-inbound.js.map +1 -0
- package/src/lib/app-utils/crm-kinds.d.ts +73 -0
- package/src/lib/app-utils/crm-kinds.js +92 -0
- package/src/lib/app-utils/crm-kinds.js.map +1 -0
- package/src/lib/app-utils/crm-next-activity.d.ts +107 -0
- package/src/lib/app-utils/crm-next-activity.js +140 -0
- package/src/lib/app-utils/crm-next-activity.js.map +1 -0
- package/src/lib/app-utils/crm-reports.d.ts +479 -0
- package/src/lib/app-utils/crm-reports.js +680 -0
- package/src/lib/app-utils/crm-reports.js.map +1 -0
- package/src/lib/app-utils/crm-task-reminders.d.ts +129 -0
- package/src/lib/app-utils/crm-task-reminders.js +139 -0
- package/src/lib/app-utils/crm-task-reminders.js.map +1 -0
- package/src/lib/app-utils/crm.d.ts +1546 -0
- package/src/lib/app-utils/crm.js +1814 -0
- package/src/lib/app-utils/crm.js.map +1 -0
- package/src/lib/app-utils/csp-report.d.ts +84 -0
- package/src/lib/app-utils/csp-report.js +177 -0
- package/src/lib/app-utils/csp-report.js.map +1 -0
- package/src/lib/app-utils/csv-import.d.ts +192 -0
- package/src/lib/app-utils/csv-import.js +279 -0
- package/src/lib/app-utils/csv-import.js.map +1 -0
- package/src/lib/app-utils/dataset-csv.d.ts +109 -0
- package/src/lib/app-utils/dataset-csv.js +235 -0
- package/src/lib/app-utils/dataset-csv.js.map +1 -0
- package/src/lib/app-utils/dataset-models.d.ts +194 -0
- package/src/lib/app-utils/dataset-models.js +409 -0
- package/src/lib/app-utils/dataset-models.js.map +1 -0
- package/src/lib/app-utils/dataset-query.d.ts +57 -0
- package/src/lib/app-utils/dataset-query.js +126 -0
- package/src/lib/app-utils/dataset-query.js.map +1 -0
- package/src/lib/app-utils/datasets.d.ts +136 -0
- package/src/lib/app-utils/datasets.js +177 -0
- package/src/lib/app-utils/datasets.js.map +1 -0
- package/src/lib/app-utils/decompress.d.ts +36 -0
- package/src/lib/app-utils/decompress.js +32 -0
- package/src/lib/app-utils/decompress.js.map +1 -0
- package/src/lib/app-utils/dedicated-sending-domain.d.ts +47 -0
- package/src/lib/app-utils/dedicated-sending-domain.js +114 -0
- package/src/lib/app-utils/dedicated-sending-domain.js.map +1 -0
- package/src/lib/app-utils/deferred-image.d.ts +86 -0
- package/src/lib/app-utils/deferred-image.js +83 -0
- package/src/lib/app-utils/deferred-image.js.map +1 -0
- package/src/lib/app-utils/definition-canvas-tree.d.ts +61 -0
- package/src/lib/app-utils/definition-canvas-tree.js +126 -0
- package/src/lib/app-utils/definition-canvas-tree.js.map +1 -0
- package/src/lib/app-utils/deployment-shape.d.ts +167 -0
- package/src/lib/app-utils/deployment-shape.js +238 -0
- package/src/lib/app-utils/deployment-shape.js.map +1 -0
- package/src/lib/app-utils/detect-template-placeholders.d.ts +30 -0
- package/src/lib/app-utils/detect-template-placeholders.js +53 -0
- package/src/lib/app-utils/detect-template-placeholders.js.map +1 -0
- package/src/lib/app-utils/dmca-counter-notice.d.ts +185 -0
- package/src/lib/app-utils/dmca-counter-notice.js +277 -0
- package/src/lib/app-utils/dmca-counter-notice.js.map +1 -0
- package/src/lib/app-utils/docs-deflection.d.ts +156 -0
- package/src/lib/app-utils/docs-deflection.js +547 -0
- package/src/lib/app-utils/docs-deflection.js.map +1 -0
- package/src/lib/app-utils/docs-help.d.ts +57 -0
- package/src/lib/app-utils/docs-help.generated.d.ts +303 -0
- package/src/lib/app-utils/docs-help.generated.js +867 -0
- package/src/lib/app-utils/docs-help.generated.js.map +1 -0
- package/src/lib/app-utils/docs-help.js +46 -0
- package/src/lib/app-utils/docs-help.js.map +1 -0
- package/src/lib/app-utils/docs-index.generated.d.ts +29 -0
- package/src/lib/app-utils/docs-index.generated.js +8388 -0
- package/src/lib/app-utils/docs-index.generated.js.map +1 -0
- package/src/lib/app-utils/docs-retrieval.d.ts +67 -0
- package/src/lib/app-utils/docs-retrieval.js +188 -0
- package/src/lib/app-utils/docs-retrieval.js.map +1 -0
- package/src/lib/app-utils/document-landmark.d.ts +50 -0
- package/src/lib/app-utils/document-landmark.js +100 -0
- package/src/lib/app-utils/document-landmark.js.map +1 -0
- package/src/lib/app-utils/duplicate-resource.d.ts +101 -0
- package/src/lib/app-utils/duplicate-resource.js +206 -0
- package/src/lib/app-utils/duplicate-resource.js.map +1 -0
- package/src/lib/app-utils/dynamic-list-rule.d.ts +471 -0
- package/src/lib/app-utils/dynamic-list-rule.js +914 -0
- package/src/lib/app-utils/dynamic-list-rule.js.map +1 -0
- package/src/lib/app-utils/element-animation.d.ts +200 -0
- package/src/lib/app-utils/element-animation.js +233 -0
- package/src/lib/app-utils/element-animation.js.map +1 -0
- package/src/lib/app-utils/element-hidden-style.d.ts +46 -0
- package/src/lib/app-utils/element-hidden-style.js +48 -0
- package/src/lib/app-utils/element-hidden-style.js.map +1 -0
- package/src/lib/app-utils/element-ui.d.ts +243 -0
- package/src/lib/app-utils/element-ui.js +459 -0
- package/src/lib/app-utils/element-ui.js.map +1 -0
- package/src/lib/app-utils/email-starter-policy.d.ts +160 -0
- package/src/lib/app-utils/email-starter-policy.js +327 -0
- package/src/lib/app-utils/email-starter-policy.js.map +1 -0
- package/src/lib/app-utils/email-topics.d.ts +310 -0
- package/src/lib/app-utils/email-topics.js +336 -0
- package/src/lib/app-utils/email-topics.js.map +1 -0
- package/src/lib/app-utils/enabled-plugins-context.d.ts +100 -0
- package/src/lib/app-utils/enabled-plugins-context.js +113 -0
- package/src/lib/app-utils/enabled-plugins-context.js.map +1 -0
- package/src/lib/app-utils/ensure-canvas-root.d.ts +38 -0
- package/src/lib/app-utils/ensure-canvas-root.js +61 -0
- package/src/lib/app-utils/ensure-canvas-root.js.map +1 -0
- package/src/lib/app-utils/entity-picker-context.d.ts +199 -0
- package/src/lib/app-utils/entity-picker-context.js +93 -0
- package/src/lib/app-utils/entity-picker-context.js.map +1 -0
- package/src/lib/app-utils/error-beacon.d.ts +107 -0
- package/src/lib/app-utils/error-beacon.js +296 -0
- package/src/lib/app-utils/error-beacon.js.map +1 -0
- package/src/lib/app-utils/expand-repeatables.d.ts +172 -0
- package/src/lib/app-utils/expand-repeatables.js +299 -0
- package/src/lib/app-utils/expand-repeatables.js.map +1 -0
- package/src/lib/app-utils/foreign-script.d.ts +82 -0
- package/src/lib/app-utils/foreign-script.js +102 -0
- package/src/lib/app-utils/foreign-script.js.map +1 -0
- package/src/lib/app-utils/form-abuse-ceiling.d.ts +146 -0
- package/src/lib/app-utils/form-abuse-ceiling.js +158 -0
- package/src/lib/app-utils/form-abuse-ceiling.js.map +1 -0
- package/src/lib/app-utils/form-contract.d.ts +198 -0
- package/src/lib/app-utils/form-contract.js +282 -0
- package/src/lib/app-utils/form-contract.js.map +1 -0
- package/src/lib/app-utils/form-dataset-binding.d.ts +50 -0
- package/src/lib/app-utils/form-dataset-binding.js +74 -0
- package/src/lib/app-utils/form-dataset-binding.js.map +1 -0
- package/src/lib/app-utils/forms.d.ts +727 -0
- package/src/lib/app-utils/forms.js +777 -0
- package/src/lib/app-utils/forms.js.map +1 -0
- package/src/lib/app-utils/functions.d.ts +188 -0
- package/src/lib/app-utils/functions.js +529 -0
- package/src/lib/app-utils/functions.js.map +1 -0
- package/src/lib/app-utils/guarded-version-save.d.ts +91 -0
- package/src/lib/app-utils/guarded-version-save.js +131 -0
- package/src/lib/app-utils/guarded-version-save.js.map +1 -0
- package/src/lib/app-utils/health-report.d.ts +1766 -0
- package/src/lib/app-utils/health-report.js +2072 -0
- package/src/lib/app-utils/health-report.js.map +1 -0
- package/src/lib/app-utils/host-naming.d.ts +135 -0
- package/src/lib/app-utils/host-naming.js +188 -0
- package/src/lib/app-utils/host-naming.js.map +1 -0
- package/src/lib/app-utils/host-permissions.d.ts +76 -0
- package/src/lib/app-utils/host-permissions.js +119 -0
- package/src/lib/app-utils/host-permissions.js.map +1 -0
- package/src/lib/app-utils/host-tokens.d.ts +228 -0
- package/src/lib/app-utils/host-tokens.js +304 -0
- package/src/lib/app-utils/host-tokens.js.map +1 -0
- package/src/lib/app-utils/idp-profile.d.ts +83 -0
- package/src/lib/app-utils/idp-profile.js +268 -0
- package/src/lib/app-utils/idp-profile.js.map +1 -0
- package/src/lib/app-utils/image-upload-types.d.ts +49 -0
- package/src/lib/app-utils/image-upload-types.js +86 -0
- package/src/lib/app-utils/image-upload-types.js.map +1 -0
- package/src/lib/app-utils/index.d.ts +18 -0
- package/src/lib/app-utils/index.js +23 -0
- package/src/lib/app-utils/index.js.map +1 -0
- package/src/lib/app-utils/internal-traffic.d.ts +197 -0
- package/src/lib/app-utils/internal-traffic.js +288 -0
- package/src/lib/app-utils/internal-traffic.js.map +1 -0
- package/src/lib/app-utils/lineal-order.d.ts +62 -0
- package/src/lib/app-utils/lineal-order.js +65 -0
- package/src/lib/app-utils/lineal-order.js.map +1 -0
- package/src/lib/app-utils/link-references.d.ts +36 -0
- package/src/lib/app-utils/link-references.js +89 -0
- package/src/lib/app-utils/link-references.js.map +1 -0
- package/src/lib/app-utils/link-target-search-context.d.ts +123 -0
- package/src/lib/app-utils/link-target-search-context.js +221 -0
- package/src/lib/app-utils/link-target-search-context.js.map +1 -0
- package/src/lib/app-utils/list-assignment-policy.d.ts +169 -0
- package/src/lib/app-utils/list-assignment-policy.js +170 -0
- package/src/lib/app-utils/list-assignment-policy.js.map +1 -0
- package/src/lib/app-utils/list-import.d.ts +158 -0
- package/src/lib/app-utils/list-import.js +332 -0
- package/src/lib/app-utils/list-import.js.map +1 -0
- package/src/lib/app-utils/llms-txt.d.ts +104 -0
- package/src/lib/app-utils/llms-txt.js +144 -0
- package/src/lib/app-utils/llms-txt.js.map +1 -0
- package/src/lib/app-utils/local-storage-budget.d.ts +75 -0
- package/src/lib/app-utils/local-storage-budget.js +153 -0
- package/src/lib/app-utils/local-storage-budget.js.map +1 -0
- package/src/lib/app-utils/lockdown.d.ts +698 -0
- package/src/lib/app-utils/lockdown.js +929 -0
- package/src/lib/app-utils/lockdown.js.map +1 -0
- package/src/lib/app-utils/margin-utilization.d.ts +267 -0
- package/src/lib/app-utils/margin-utilization.js +351 -0
- package/src/lib/app-utils/margin-utilization.js.map +1 -0
- package/src/lib/app-utils/markdown-lite.d.ts +297 -0
- package/src/lib/app-utils/markdown-lite.js +705 -0
- package/src/lib/app-utils/markdown-lite.js.map +1 -0
- package/src/lib/app-utils/marketing-consent.d.ts +704 -0
- package/src/lib/app-utils/marketing-consent.js +783 -0
- package/src/lib/app-utils/marketing-consent.js.map +1 -0
- package/src/lib/app-utils/marketplace-listing-visibility.d.ts +120 -0
- package/src/lib/app-utils/marketplace-listing-visibility.js +139 -0
- package/src/lib/app-utils/marketplace-listing-visibility.js.map +1 -0
- package/src/lib/app-utils/marketplace-overrides.d.ts +271 -0
- package/src/lib/app-utils/marketplace-overrides.js +462 -0
- package/src/lib/app-utils/marketplace-overrides.js.map +1 -0
- package/src/lib/app-utils/marketplace-provenance.d.ts +150 -0
- package/src/lib/app-utils/marketplace-provenance.js +136 -0
- package/src/lib/app-utils/marketplace-provenance.js.map +1 -0
- package/src/lib/app-utils/marketplace-theme.d.ts +237 -0
- package/src/lib/app-utils/marketplace-theme.js +525 -0
- package/src/lib/app-utils/marketplace-theme.js.map +1 -0
- package/src/lib/app-utils/marketplace-update-state.d.ts +119 -0
- package/src/lib/app-utils/marketplace-update-state.js +132 -0
- package/src/lib/app-utils/marketplace-update-state.js.map +1 -0
- package/src/lib/app-utils/marketplace-verification.d.ts +95 -0
- package/src/lib/app-utils/marketplace-verification.js +81 -0
- package/src/lib/app-utils/marketplace-verification.js.map +1 -0
- package/src/lib/app-utils/measure-node-map.d.ts +76 -0
- package/src/lib/app-utils/measure-node-map.js +111 -0
- package/src/lib/app-utils/measure-node-map.js.map +1 -0
- package/src/lib/app-utils/media-alt.d.ts +55 -0
- package/src/lib/app-utils/media-alt.js +58 -0
- package/src/lib/app-utils/media-alt.js.map +1 -0
- package/src/lib/app-utils/media-asset-facts.d.ts +125 -0
- package/src/lib/app-utils/media-asset-facts.js +467 -0
- package/src/lib/app-utils/media-asset-facts.js.map +1 -0
- package/src/lib/app-utils/media-cdn-scope.d.ts +65 -0
- package/src/lib/app-utils/media-cdn-scope.js +75 -0
- package/src/lib/app-utils/media-cdn-scope.js.map +1 -0
- package/src/lib/app-utils/media-folders.d.ts +161 -0
- package/src/lib/app-utils/media-folders.js +230 -0
- package/src/lib/app-utils/media-folders.js.map +1 -0
- package/src/lib/app-utils/media-metadata.d.ts +277 -0
- package/src/lib/app-utils/media-metadata.js +388 -0
- package/src/lib/app-utils/media-metadata.js.map +1 -0
- package/src/lib/app-utils/media-picker-context.d.ts +93 -0
- package/src/lib/app-utils/media-picker-context.js +26 -0
- package/src/lib/app-utils/media-picker-context.js.map +1 -0
- package/src/lib/app-utils/media-quarantine.d.ts +247 -0
- package/src/lib/app-utils/media-quarantine.js +323 -0
- package/src/lib/app-utils/media-quarantine.js.map +1 -0
- package/src/lib/app-utils/media-ref.d.ts +661 -0
- package/src/lib/app-utils/media-ref.js +1055 -0
- package/src/lib/app-utils/media-ref.js.map +1 -0
- package/src/lib/app-utils/media-takedown-reach.d.ts +126 -0
- package/src/lib/app-utils/media-takedown-reach.js +143 -0
- package/src/lib/app-utils/media-takedown-reach.js.map +1 -0
- package/src/lib/app-utils/member-email-aliases.d.ts +180 -0
- package/src/lib/app-utils/member-email-aliases.js +217 -0
- package/src/lib/app-utils/member-email-aliases.js.map +1 -0
- package/src/lib/app-utils/merge-node-sx.d.ts +47 -0
- package/src/lib/app-utils/merge-node-sx.js +123 -0
- package/src/lib/app-utils/merge-node-sx.js.map +1 -0
- package/src/lib/app-utils/name-match.d.ts +155 -0
- package/src/lib/app-utils/name-match.js +175 -0
- package/src/lib/app-utils/name-match.js.map +1 -0
- package/src/lib/app-utils/name-search.d.ts +117 -0
- package/src/lib/app-utils/name-search.js +145 -0
- package/src/lib/app-utils/name-search.js.map +1 -0
- package/src/lib/app-utils/node-capabilities.d.ts +85 -0
- package/src/lib/app-utils/node-capabilities.js +88 -0
- package/src/lib/app-utils/node-capabilities.js.map +1 -0
- package/src/lib/app-utils/node-definition-sanitizer.d.ts +164 -0
- package/src/lib/app-utils/node-definition-sanitizer.js +402 -0
- package/src/lib/app-utils/node-definition-sanitizer.js.map +1 -0
- package/src/lib/app-utils/node-identity.d.ts +47 -0
- package/src/lib/app-utils/node-identity.js +50 -0
- package/src/lib/app-utils/node-identity.js.map +1 -0
- package/src/lib/app-utils/node-interactions.d.ts +102 -0
- package/src/lib/app-utils/node-interactions.js +192 -0
- package/src/lib/app-utils/node-interactions.js.map +1 -0
- package/src/lib/app-utils/node-url-policy.d.ts +54 -0
- package/src/lib/app-utils/node-url-policy.js +72 -0
- package/src/lib/app-utils/node-url-policy.js.map +1 -0
- package/src/lib/app-utils/notifications.d.ts +71 -0
- package/src/lib/app-utils/notifications.js +101 -0
- package/src/lib/app-utils/notifications.js.map +1 -0
- package/src/lib/app-utils/onboarding-deep-link.d.ts +120 -0
- package/src/lib/app-utils/onboarding-deep-link.js +142 -0
- package/src/lib/app-utils/onboarding-deep-link.js.map +1 -0
- package/src/lib/app-utils/operator-identity.d.ts +207 -0
- package/src/lib/app-utils/operator-identity.js +186 -0
- package/src/lib/app-utils/operator-identity.js.map +1 -0
- package/src/lib/app-utils/org-billing-doc.d.ts +231 -0
- package/src/lib/app-utils/org-billing-doc.js +238 -0
- package/src/lib/app-utils/org-billing-doc.js.map +1 -0
- package/src/lib/app-utils/org-override-reason.d.ts +100 -0
- package/src/lib/app-utils/org-override-reason.js +116 -0
- package/src/lib/app-utils/org-override-reason.js.map +1 -0
- package/src/lib/app-utils/org-permissions.d.ts +194 -0
- package/src/lib/app-utils/org-permissions.js +357 -0
- package/src/lib/app-utils/org-permissions.js.map +1 -0
- package/src/lib/app-utils/org-roles.d.ts +72 -0
- package/src/lib/app-utils/org-roles.js +131 -0
- package/src/lib/app-utils/org-roles.js.map +1 -0
- package/src/lib/app-utils/organizations.d.ts +407 -0
- package/src/lib/app-utils/organizations.js +511 -0
- package/src/lib/app-utils/organizations.js.map +1 -0
- package/src/lib/app-utils/page-header-actions-context.d.ts +83 -0
- package/src/lib/app-utils/page-header-actions-context.js +58 -0
- package/src/lib/app-utils/page-header-actions-context.js.map +1 -0
- package/src/lib/app-utils/page-header-record-context.d.ts +80 -0
- package/src/lib/app-utils/page-header-record-context.js +64 -0
- package/src/lib/app-utils/page-header-record-context.js.map +1 -0
- package/src/lib/app-utils/page-markdown.d.ts +103 -0
- package/src/lib/app-utils/page-markdown.js +385 -0
- package/src/lib/app-utils/page-markdown.js.map +1 -0
- package/src/lib/app-utils/paid-media-source.d.ts +90 -0
- package/src/lib/app-utils/paid-media-source.js +184 -0
- package/src/lib/app-utils/paid-media-source.js.map +1 -0
- package/src/lib/app-utils/palette-sx.d.ts +34 -0
- package/src/lib/app-utils/palette-sx.js +150 -0
- package/src/lib/app-utils/palette-sx.js.map +1 -0
- package/src/lib/app-utils/password-policy.d.ts +47 -0
- package/src/lib/app-utils/password-policy.js +46 -0
- package/src/lib/app-utils/password-policy.js.map +1 -0
- package/src/lib/app-utils/payments-configured.d.ts +84 -0
- package/src/lib/app-utils/payments-configured.js +88 -0
- package/src/lib/app-utils/payments-configured.js.map +1 -0
- package/src/lib/app-utils/person-erasure.d.ts +126 -0
- package/src/lib/app-utils/person-erasure.js +121 -0
- package/src/lib/app-utils/person-erasure.js.map +1 -0
- package/src/lib/app-utils/person-key.d.ts +32 -0
- package/src/lib/app-utils/person-key.js +62 -0
- package/src/lib/app-utils/person-key.js.map +1 -0
- package/src/lib/app-utils/plan-entitlements.d.ts +2756 -0
- package/src/lib/app-utils/plan-entitlements.js +4085 -0
- package/src/lib/app-utils/plan-entitlements.js.map +1 -0
- package/src/lib/app-utils/platform-ad-conversions.d.ts +122 -0
- package/src/lib/app-utils/platform-ad-conversions.js +174 -0
- package/src/lib/app-utils/platform-ad-conversions.js.map +1 -0
- package/src/lib/app-utils/platform-advertising-tags.d.ts +139 -0
- package/src/lib/app-utils/platform-advertising-tags.js +203 -0
- package/src/lib/app-utils/platform-advertising-tags.js.map +1 -0
- package/src/lib/app-utils/platform-brand.d.ts +151 -0
- package/src/lib/app-utils/platform-brand.js +175 -0
- package/src/lib/app-utils/platform-brand.js.map +1 -0
- package/src/lib/app-utils/platform-consent-default.d.ts +142 -0
- package/src/lib/app-utils/platform-consent-default.js +295 -0
- package/src/lib/app-utils/platform-consent-default.js.map +1 -0
- package/src/lib/app-utils/platform-marketing-consent.d.ts +151 -0
- package/src/lib/app-utils/platform-marketing-consent.js +182 -0
- package/src/lib/app-utils/platform-marketing-consent.js.map +1 -0
- package/src/lib/app-utils/platform-marketing-host.d.ts +33 -0
- package/src/lib/app-utils/platform-marketing-host.js +97 -0
- package/src/lib/app-utils/platform-marketing-host.js.map +1 -0
- package/src/lib/app-utils/platform-visitor-consent.d.ts +252 -0
- package/src/lib/app-utils/platform-visitor-consent.js +533 -0
- package/src/lib/app-utils/platform-visitor-consent.js.map +1 -0
- package/src/lib/app-utils/plugin-api-cross-origin.d.ts +61 -0
- package/src/lib/app-utils/plugin-api-cross-origin.js +202 -0
- package/src/lib/app-utils/plugin-api-cross-origin.js.map +1 -0
- package/src/lib/app-utils/plugin-api-rate-limit.d.ts +192 -0
- package/src/lib/app-utils/plugin-api-rate-limit.js +270 -0
- package/src/lib/app-utils/plugin-api-rate-limit.js.map +1 -0
- package/src/lib/app-utils/plugin-artifact-path.d.ts +32 -0
- package/src/lib/app-utils/plugin-artifact-path.js +33 -0
- package/src/lib/app-utils/plugin-artifact-path.js.map +1 -0
- package/src/lib/app-utils/plugin-bundle-checks.d.ts +148 -0
- package/src/lib/app-utils/plugin-bundle-checks.js +989 -0
- package/src/lib/app-utils/plugin-bundle-checks.js.map +1 -0
- package/src/lib/app-utils/plugin-manifest.d.ts +516 -0
- package/src/lib/app-utils/plugin-manifest.js +687 -0
- package/src/lib/app-utils/plugin-manifest.js.map +1 -0
- package/src/lib/app-utils/published-legal-pages.d.ts +71 -0
- package/src/lib/app-utils/published-legal-pages.js +90 -0
- package/src/lib/app-utils/published-legal-pages.js.map +1 -0
- package/src/lib/app-utils/publisher-agreement.d.ts +254 -0
- package/src/lib/app-utils/publisher-agreement.js +274 -0
- package/src/lib/app-utils/publisher-agreement.js.map +1 -0
- package/src/lib/app-utils/publisher-attestation.d.ts +99 -0
- package/src/lib/app-utils/publisher-attestation.js +158 -0
- package/src/lib/app-utils/publisher-attestation.js.map +1 -0
- package/src/lib/app-utils/recipient-email-render.d.ts +216 -0
- package/src/lib/app-utils/recipient-email-render.js +221 -0
- package/src/lib/app-utils/recipient-email-render.js.map +1 -0
- package/src/lib/app-utils/redispatch-caught-error.d.ts +38 -0
- package/src/lib/app-utils/redispatch-caught-error.js +46 -0
- package/src/lib/app-utils/redispatch-caught-error.js.map +1 -0
- package/src/lib/app-utils/registering-plugin.d.ts +19 -0
- package/src/lib/app-utils/registering-plugin.js +38 -0
- package/src/lib/app-utils/registering-plugin.js.map +1 -0
- package/src/lib/app-utils/release-flags.d.ts +283 -0
- package/src/lib/app-utils/release-flags.js +518 -0
- package/src/lib/app-utils/release-flags.js.map +1 -0
- package/src/lib/app-utils/repair-canvas-nodes.d.ts +130 -0
- package/src/lib/app-utils/repair-canvas-nodes.js +298 -0
- package/src/lib/app-utils/repair-canvas-nodes.js.map +1 -0
- package/src/lib/app-utils/repeat-infringer.d.ts +166 -0
- package/src/lib/app-utils/repeat-infringer.js +188 -0
- package/src/lib/app-utils/repeat-infringer.js.map +1 -0
- package/src/lib/app-utils/repeat-sources.d.ts +115 -0
- package/src/lib/app-utils/repeat-sources.js +86 -0
- package/src/lib/app-utils/repeat-sources.js.map +1 -0
- package/src/lib/app-utils/request-geo.d.ts +114 -0
- package/src/lib/app-utils/request-geo.js +247 -0
- package/src/lib/app-utils/request-geo.js.map +1 -0
- package/src/lib/app-utils/request-ip.d.ts +213 -0
- package/src/lib/app-utils/request-ip.js +344 -0
- package/src/lib/app-utils/request-ip.js.map +1 -0
- package/src/lib/app-utils/resolve-named-tokens.d.ts +26 -0
- package/src/lib/app-utils/resolve-named-tokens.js +59 -0
- package/src/lib/app-utils/resolve-named-tokens.js.map +1 -0
- package/src/lib/app-utils/responsive-typography-sx.d.ts +77 -0
- package/src/lib/app-utils/responsive-typography-sx.js +122 -0
- package/src/lib/app-utils/responsive-typography-sx.js.map +1 -0
- package/src/lib/app-utils/reusable-component-keys.d.ts +135 -0
- package/src/lib/app-utils/reusable-component-keys.js +140 -0
- package/src/lib/app-utils/reusable-component-keys.js.map +1 -0
- package/src/lib/app-utils/reusable-prop-values.d.ts +199 -0
- package/src/lib/app-utils/reusable-prop-values.js +494 -0
- package/src/lib/app-utils/reusable-prop-values.js.map +1 -0
- package/src/lib/app-utils/safe-json-ld.d.ts +29 -0
- package/src/lib/app-utils/safe-json-ld.js +37 -0
- package/src/lib/app-utils/safe-json-ld.js.map +1 -0
- package/src/lib/app-utils/sanitize-svg.d.ts +55 -0
- package/src/lib/app-utils/sanitize-svg.js +460 -0
- package/src/lib/app-utils/sanitize-svg.js.map +1 -0
- package/src/lib/app-utils/scheme-sx.d.ts +84 -0
- package/src/lib/app-utils/scheme-sx.js +148 -0
- package/src/lib/app-utils/scheme-sx.js.map +1 -0
- package/src/lib/app-utils/scope-tokens.d.ts +249 -0
- package/src/lib/app-utils/scope-tokens.js +331 -0
- package/src/lib/app-utils/scope-tokens.js.map +1 -0
- package/src/lib/app-utils/screen-link-context-value.d.ts +57 -0
- package/src/lib/app-utils/screen-link-context-value.js +43 -0
- package/src/lib/app-utils/screen-link-context-value.js.map +1 -0
- package/src/lib/app-utils/screen-link-context.d.ts +185 -0
- package/src/lib/app-utils/screen-link-context.js +304 -0
- package/src/lib/app-utils/screen-link-context.js.map +1 -0
- package/src/lib/app-utils/screen-link-value.d.ts +269 -0
- package/src/lib/app-utils/screen-link-value.js +384 -0
- package/src/lib/app-utils/screen-link-value.js.map +1 -0
- package/src/lib/app-utils/screen-route.d.ts +669 -0
- package/src/lib/app-utils/screen-route.js +751 -0
- package/src/lib/app-utils/screen-route.js.map +1 -0
- package/src/lib/app-utils/screen-seo-fields.d.ts +37 -0
- package/src/lib/app-utils/screen-seo-fields.js +42 -0
- package/src/lib/app-utils/screen-seo-fields.js.map +1 -0
- package/src/lib/app-utils/search-indexing.d.ts +162 -0
- package/src/lib/app-utils/search-indexing.js +207 -0
- package/src/lib/app-utils/search-indexing.js.map +1 -0
- package/src/lib/app-utils/seo-listing-fields.d.ts +70 -0
- package/src/lib/app-utils/seo-listing-fields.js +75 -0
- package/src/lib/app-utils/seo-listing-fields.js.map +1 -0
- package/src/lib/app-utils/seo-locale.d.ts +119 -0
- package/src/lib/app-utils/seo-locale.js +133 -0
- package/src/lib/app-utils/seo-locale.js.map +1 -0
- package/src/lib/app-utils/seo-title-variables.d.ts +149 -0
- package/src/lib/app-utils/seo-title-variables.js +190 -0
- package/src/lib/app-utils/seo-title-variables.js.map +1 -0
- package/src/lib/app-utils/seo-title.d.ts +70 -0
- package/src/lib/app-utils/seo-title.js +117 -0
- package/src/lib/app-utils/seo-title.js.map +1 -0
- package/src/lib/app-utils/server.d.ts +174 -0
- package/src/lib/app-utils/server.js +314 -0
- package/src/lib/app-utils/server.js.map +1 -0
- package/src/lib/app-utils/site-context.d.ts +106 -0
- package/src/lib/app-utils/site-context.js +100 -0
- package/src/lib/app-utils/site-context.js.map +1 -0
- package/src/lib/app-utils/sitemap.d.ts +117 -0
- package/src/lib/app-utils/sitemap.js +183 -0
- package/src/lib/app-utils/sitemap.js.map +1 -0
- package/src/lib/app-utils/social-image.d.ts +112 -0
- package/src/lib/app-utils/social-image.js +191 -0
- package/src/lib/app-utils/social-image.js.map +1 -0
- package/src/lib/app-utils/starter-templates.d.ts +99 -0
- package/src/lib/app-utils/starter-templates.js +579 -0
- package/src/lib/app-utils/starter-templates.js.map +1 -0
- package/src/lib/app-utils/stored-nodes.d.ts +120 -0
- package/src/lib/app-utils/stored-nodes.js +174 -0
- package/src/lib/app-utils/stored-nodes.js.map +1 -0
- package/src/lib/app-utils/strip-undefined.d.ts +59 -0
- package/src/lib/app-utils/strip-undefined.js +95 -0
- package/src/lib/app-utils/strip-undefined.js.map +1 -0
- package/src/lib/app-utils/stripe-deployment-mode.d.ts +47 -0
- package/src/lib/app-utils/stripe-deployment-mode.js +70 -0
- package/src/lib/app-utils/stripe-deployment-mode.js.map +1 -0
- package/src/lib/app-utils/support-tiers.d.ts +108 -0
- package/src/lib/app-utils/support-tiers.js +201 -0
- package/src/lib/app-utils/support-tiers.js.map +1 -0
- package/src/lib/app-utils/timezone-geo-hint.d.ts +36 -0
- package/src/lib/app-utils/timezone-geo-hint.js +180 -0
- package/src/lib/app-utils/timezone-geo-hint.js.map +1 -0
- package/src/lib/app-utils/upload-cors.d.ts +155 -0
- package/src/lib/app-utils/upload-cors.js +254 -0
- package/src/lib/app-utils/upload-cors.js.map +1 -0
- package/src/lib/app-utils/upload-inspection.d.ts +159 -0
- package/src/lib/app-utils/upload-inspection.js +539 -0
- package/src/lib/app-utils/upload-inspection.js.map +1 -0
- package/src/lib/app-utils/url-slug.d.ts +40 -0
- package/src/lib/app-utils/url-slug.js +42 -0
- package/src/lib/app-utils/url-slug.js.map +1 -0
- package/src/lib/app-utils/usage-budget.d.ts +429 -0
- package/src/lib/app-utils/usage-budget.js +421 -0
- package/src/lib/app-utils/usage-budget.js.map +1 -0
- package/src/lib/app-utils/variables.d.ts +96 -0
- package/src/lib/app-utils/variables.js +233 -0
- package/src/lib/app-utils/variables.js.map +1 -0
- package/src/lib/app-utils/video-asset-facts.d.ts +61 -0
- package/src/lib/app-utils/video-asset-facts.js +70 -0
- package/src/lib/app-utils/video-asset-facts.js.map +1 -0
- package/src/lib/app-utils/video-object.d.ts +89 -0
- package/src/lib/app-utils/video-object.js +245 -0
- package/src/lib/app-utils/video-object.js.map +1 -0
- package/src/lib/app-utils/visitor-consent.d.ts +757 -0
- package/src/lib/app-utils/visitor-consent.js +981 -0
- package/src/lib/app-utils/visitor-consent.js.map +1 -0
- package/src/lib/app-utils/visitor-record-ceiling.d.ts +223 -0
- package/src/lib/app-utils/visitor-record-ceiling.js +215 -0
- package/src/lib/app-utils/visitor-record-ceiling.js.map +1 -0
- package/src/lib/app-utils/web-vitals-rum.d.ts +53 -0
- package/src/lib/app-utils/web-vitals-rum.js +278 -0
- package/src/lib/app-utils/web-vitals-rum.js.map +1 -0
- package/src/lib/app-utils/webhook-delivery.d.ts +324 -0
- package/src/lib/app-utils/webhook-delivery.js +413 -0
- package/src/lib/app-utils/webhook-delivery.js.map +1 -0
- package/src/lib/app-utils/where-used.d.ts +57 -0
- package/src/lib/app-utils/where-used.js +59 -0
- package/src/lib/app-utils/where-used.js.map +1 -0
- package/src/lib/app-utils/wistia-embed.d.ts +86 -0
- package/src/lib/app-utils/wistia-embed.js +119 -0
- package/src/lib/app-utils/wistia-embed.js.map +1 -0
- package/src/lib/app-utils/workflows.d.ts +136 -0
- package/src/lib/app-utils/workflows.js +346 -0
- package/src/lib/app-utils/workflows.js.map +1 -0
- package/src/lib/canvas-manager/canvas-manager-tree.d.ts +109 -0
- package/src/lib/canvas-manager/canvas-manager-tree.js +139 -0
- package/src/lib/canvas-manager/canvas-manager-tree.js.map +1 -0
- package/src/lib/canvas-manager/canvas-manager.d.ts +549 -0
- package/src/lib/canvas-manager/canvas-manager.js +1311 -0
- package/src/lib/canvas-manager/canvas-manager.js.map +1 -0
- package/src/lib/canvas-manager/index.d.ts +20 -0
- package/src/lib/canvas-manager/index.js +21 -0
- package/src/lib/canvas-manager/index.js.map +1 -0
- package/src/lib/canvas-manager/stores/index.d.ts +17 -0
- package/src/lib/canvas-manager/stores/index.js +18 -0
- package/src/lib/canvas-manager/stores/index.js.map +1 -0
- package/src/lib/canvas-manager/stores/node.store.d.ts +30 -0
- package/src/lib/canvas-manager/stores/node.store.js +45 -0
- package/src/lib/canvas-manager/stores/node.store.js.map +1 -0
- package/src/lib/components-manager/components-manager.d.ts +56 -0
- package/src/lib/components-manager/components-manager.js +191 -0
- package/src/lib/components-manager/components-manager.js.map +1 -0
- package/src/lib/components-manager/index.d.ts +18 -0
- package/src/lib/components-manager/index.js +19 -0
- package/src/lib/components-manager/index.js.map +1 -0
- package/src/lib/emit-manager/emit-manager.d.ts +56 -0
- package/src/lib/emit-manager/emit-manager.js +60 -0
- package/src/lib/emit-manager/emit-manager.js.map +1 -0
- package/src/lib/emit-manager/index.d.ts +18 -0
- package/src/lib/emit-manager/index.js +19 -0
- package/src/lib/emit-manager/index.js.map +1 -0
- package/src/lib/foundation/constants/_internal.d.ts +18 -0
- package/src/lib/foundation/constants/_internal.js +62 -0
- package/src/lib/foundation/constants/_internal.js.map +1 -0
- package/src/lib/foundation/constants/app.d.ts +23 -0
- package/src/lib/foundation/constants/app.js +25 -0
- package/src/lib/foundation/constants/app.js.map +1 -0
- package/src/lib/foundation/constants/canvas.d.ts +18 -0
- package/src/lib/foundation/constants/canvas.js +18 -0
- package/src/lib/foundation/constants/canvas.js.map +1 -0
- package/src/lib/foundation/constants/components.d.ts +54 -0
- package/src/lib/foundation/constants/components.js +61 -0
- package/src/lib/foundation/constants/components.js.map +1 -0
- package/src/lib/foundation/constants/shared.d.ts +50 -0
- package/src/lib/foundation/constants/shared.js +49 -0
- package/src/lib/foundation/constants/shared.js.map +1 -0
- package/src/lib/foundation/constants/symbol.d.ts +63 -0
- package/src/lib/foundation/constants/symbol.js +75 -0
- package/src/lib/foundation/constants/symbol.js.map +1 -0
- package/src/lib/foundation/definitions/components.types.d.ts +372 -0
- package/src/lib/foundation/definitions/components.types.js +180 -0
- package/src/lib/foundation/definitions/components.types.js.map +1 -0
- package/src/lib/foundation/definitions/contact.types.d.ts +73 -0
- package/src/lib/foundation/definitions/contact.types.js +107 -0
- package/src/lib/foundation/definitions/contact.types.js.map +1 -0
- package/src/lib/foundation/definitions/host-content-collections.d.ts +137 -0
- package/src/lib/foundation/definitions/host-content-collections.js +219 -0
- package/src/lib/foundation/definitions/host-content-collections.js.map +1 -0
- package/src/lib/foundation/definitions/org-billing.types.d.ts +1361 -0
- package/src/lib/foundation/definitions/org-billing.types.js +77 -0
- package/src/lib/foundation/definitions/org-billing.types.js.map +1 -0
- package/src/lib/foundation/definitions/organization.types.d.ts +307 -0
- package/src/lib/foundation/definitions/organization.types.js +42 -0
- package/src/lib/foundation/definitions/organization.types.js.map +1 -0
- package/src/lib/foundation/definitions/platform.types.d.ts +1326 -0
- package/src/lib/foundation/definitions/platform.types.js +124 -0
- package/src/lib/foundation/definitions/platform.types.js.map +1 -0
- package/src/lib/foundation/definitions/property-kinds.d.ts +189 -0
- package/src/lib/foundation/definitions/property-kinds.js +565 -0
- package/src/lib/foundation/definitions/property-kinds.js.map +1 -0
- package/src/lib/foundation/definitions/shared.d.ts +23 -0
- package/src/lib/foundation/definitions/shared.js +18 -0
- package/src/lib/foundation/definitions/shared.js.map +1 -0
- package/src/lib/foundation/definitions/write-deny-coverage.util.d.ts +249 -0
- package/src/lib/foundation/definitions/write-deny-coverage.util.js +499 -0
- package/src/lib/foundation/definitions/write-deny-coverage.util.js.map +1 -0
- package/src/lib/foundation/index.d.ts +32 -0
- package/src/lib/foundation/index.js +67 -0
- package/src/lib/foundation/index.js.map +1 -0
- package/src/lib/lifecycle.d.ts +24 -0
- package/src/lib/lifecycle.js +39 -0
- package/src/lib/lifecycle.js.map +1 -0
- package/src/lib/mst/common.d.ts +17 -0
- package/src/lib/mst/common.js +23 -0
- package/src/lib/mst/common.js.map +1 -0
- package/src/lib/mst/index.d.ts +19 -0
- package/src/lib/mst/index.js +20 -0
- package/src/lib/mst/index.js.map +1 -0
- package/src/lib/mst/json.d.ts +22 -0
- package/src/lib/mst/json.js +23 -0
- package/src/lib/mst/json.js.map +1 -0
- package/src/lib/mst/types.d.ts +20 -0
- package/src/lib/mst/types.js +18 -0
- package/src/lib/mst/types.js.map +1 -0
- package/src/lib/plugin-manager/billing-webhook-hooks.d.ts +77 -0
- package/src/lib/plugin-manager/billing-webhook-hooks.js +55 -0
- package/src/lib/plugin-manager/billing-webhook-hooks.js.map +1 -0
- package/src/lib/plugin-manager/commerce-zone-props.d.ts +172 -0
- package/src/lib/plugin-manager/commerce-zone-props.js +31 -0
- package/src/lib/plugin-manager/commerce-zone-props.js.map +1 -0
- package/src/lib/plugin-manager/custom-fields.d.ts +60 -0
- package/src/lib/plugin-manager/custom-fields.js +39 -0
- package/src/lib/plugin-manager/custom-fields.js.map +1 -0
- package/src/lib/plugin-manager/editor-sessions.d.ts +109 -0
- package/src/lib/plugin-manager/editor-sessions.js +137 -0
- package/src/lib/plugin-manager/editor-sessions.js.map +1 -0
- package/src/lib/plugin-manager/enabled-plugins.d.ts +438 -0
- package/src/lib/plugin-manager/enabled-plugins.js +403 -0
- package/src/lib/plugin-manager/enabled-plugins.js.map +1 -0
- package/src/lib/plugin-manager/feature-plugins.d.ts +1314 -0
- package/src/lib/plugin-manager/feature-plugins.js +609 -0
- package/src/lib/plugin-manager/feature-plugins.js.map +1 -0
- package/src/lib/plugin-manager/first-party-plugins.generated.d.ts +11 -0
- package/src/lib/plugin-manager/first-party-plugins.generated.js +149 -0
- package/src/lib/plugin-manager/first-party-plugins.generated.js.map +1 -0
- package/src/lib/plugin-manager/index.d.ts +42 -0
- package/src/lib/plugin-manager/index.js +46 -0
- package/src/lib/plugin-manager/index.js.map +1 -0
- package/src/lib/plugin-manager/install-presets.d.ts +93 -0
- package/src/lib/plugin-manager/install-presets.js +86 -0
- package/src/lib/plugin-manager/install-presets.js.map +1 -0
- package/src/lib/plugin-manager/media-delivery-provider.d.ts +124 -0
- package/src/lib/plugin-manager/media-delivery-provider.js +53 -0
- package/src/lib/plugin-manager/media-delivery-provider.js.map +1 -0
- package/src/lib/plugin-manager/order-fulfilment.d.ts +142 -0
- package/src/lib/plugin-manager/order-fulfilment.js +104 -0
- package/src/lib/plugin-manager/order-fulfilment.js.map +1 -0
- package/src/lib/plugin-manager/plugin-activity-actions.d.ts +122 -0
- package/src/lib/plugin-manager/plugin-activity-actions.js +140 -0
- package/src/lib/plugin-manager/plugin-activity-actions.js.map +1 -0
- package/src/lib/plugin-manager/plugin-bridge.d.ts +98 -0
- package/src/lib/plugin-manager/plugin-bridge.js +154 -0
- package/src/lib/plugin-manager/plugin-bridge.js.map +1 -0
- package/src/lib/plugin-manager/plugin-config.d.ts +148 -0
- package/src/lib/plugin-manager/plugin-config.js +228 -0
- package/src/lib/plugin-manager/plugin-config.js.map +1 -0
- package/src/lib/plugin-manager/plugin-console-crons.d.ts +139 -0
- package/src/lib/plugin-manager/plugin-console-crons.js +177 -0
- package/src/lib/plugin-manager/plugin-console-crons.js.map +1 -0
- package/src/lib/plugin-manager/plugin-contact-capture.d.ts +220 -0
- package/src/lib/plugin-manager/plugin-contact-capture.js +89 -0
- package/src/lib/plugin-manager/plugin-contact-capture.js.map +1 -0
- package/src/lib/plugin-manager/plugin-contributions.d.ts +244 -0
- package/src/lib/plugin-manager/plugin-contributions.js +283 -0
- package/src/lib/plugin-manager/plugin-contributions.js.map +1 -0
- package/src/lib/plugin-manager/plugin-entitlement-keys.d.ts +169 -0
- package/src/lib/plugin-manager/plugin-entitlement-keys.js +84 -0
- package/src/lib/plugin-manager/plugin-entitlement-keys.js.map +1 -0
- package/src/lib/plugin-manager/plugin-entitlements.d.ts +181 -0
- package/src/lib/plugin-manager/plugin-entitlements.js +188 -0
- package/src/lib/plugin-manager/plugin-entitlements.js.map +1 -0
- package/src/lib/plugin-manager/plugin-events.d.ts +145 -0
- package/src/lib/plugin-manager/plugin-events.js +79 -0
- package/src/lib/plugin-manager/plugin-events.js.map +1 -0
- package/src/lib/plugin-manager/plugin-figures.d.ts +251 -0
- package/src/lib/plugin-manager/plugin-figures.js +252 -0
- package/src/lib/plugin-manager/plugin-figures.js.map +1 -0
- package/src/lib/plugin-manager/plugin-host-collections.d.ts +146 -0
- package/src/lib/plugin-manager/plugin-host-collections.js +116 -0
- package/src/lib/plugin-manager/plugin-host-collections.js.map +1 -0
- package/src/lib/plugin-manager/plugin-jobs.d.ts +130 -0
- package/src/lib/plugin-manager/plugin-jobs.js +182 -0
- package/src/lib/plugin-manager/plugin-jobs.js.map +1 -0
- package/src/lib/plugin-manager/plugin-loader.d.ts +86 -0
- package/src/lib/plugin-manager/plugin-loader.js +223 -0
- package/src/lib/plugin-manager/plugin-loader.js.map +1 -0
- package/src/lib/plugin-manager/plugin-manager.d.ts +95 -0
- package/src/lib/plugin-manager/plugin-manager.js +343 -0
- package/src/lib/plugin-manager/plugin-manager.js.map +1 -0
- package/src/lib/plugin-manager/plugin-metered-lines.d.ts +97 -0
- package/src/lib/plugin-manager/plugin-metered-lines.js +123 -0
- package/src/lib/plugin-manager/plugin-metered-lines.js.map +1 -0
- package/src/lib/plugin-manager/plugin-org-erasure.d.ts +52 -0
- package/src/lib/plugin-manager/plugin-org-erasure.js +100 -0
- package/src/lib/plugin-manager/plugin-org-erasure.js.map +1 -0
- package/src/lib/plugin-manager/plugin-permissions.d.ts +69 -0
- package/src/lib/plugin-manager/plugin-permissions.js +77 -0
- package/src/lib/plugin-manager/plugin-permissions.js.map +1 -0
- package/src/lib/plugin-manager/plugin-person-erasure.d.ts +58 -0
- package/src/lib/plugin-manager/plugin-person-erasure.js +109 -0
- package/src/lib/plugin-manager/plugin-person-erasure.js.map +1 -0
- package/src/lib/plugin-manager/plugin-record-cards.d.ts +99 -0
- package/src/lib/plugin-manager/plugin-record-cards.js +59 -0
- package/src/lib/plugin-manager/plugin-record-cards.js.map +1 -0
- package/src/lib/plugin-manager/plugin-record-facts.d.ts +111 -0
- package/src/lib/plugin-manager/plugin-record-facts.js +51 -0
- package/src/lib/plugin-manager/plugin-record-facts.js.map +1 -0
- package/src/lib/plugin-manager/plugin-record-routes.d.ts +129 -0
- package/src/lib/plugin-manager/plugin-record-routes.js +93 -0
- package/src/lib/plugin-manager/plugin-record-routes.js.map +1 -0
- package/src/lib/plugin-manager/plugin-record-timeline.d.ts +147 -0
- package/src/lib/plugin-manager/plugin-record-timeline.js +39 -0
- package/src/lib/plugin-manager/plugin-record-timeline.js.map +1 -0
- package/src/lib/plugin-manager/plugin-resource-drafts.d.ts +137 -0
- package/src/lib/plugin-manager/plugin-resource-drafts.js +51 -0
- package/src/lib/plugin-manager/plugin-resource-drafts.js.map +1 -0
- package/src/lib/plugin-manager/plugin-services.d.ts +94 -0
- package/src/lib/plugin-manager/plugin-services.js +153 -0
- package/src/lib/plugin-manager/plugin-services.js.map +1 -0
- package/src/lib/plugin-manager/plugin-styles-ui.d.ts +71 -0
- package/src/lib/plugin-manager/plugin-styles-ui.js +80 -0
- package/src/lib/plugin-manager/plugin-styles-ui.js.map +1 -0
- package/src/lib/plugin-manager/plugin-styles.d.ts +176 -0
- package/src/lib/plugin-manager/plugin-styles.js +186 -0
- package/src/lib/plugin-manager/plugin-styles.js.map +1 -0
- package/src/lib/plugin-manager/plugin-subprocessors.d.ts +135 -0
- package/src/lib/plugin-manager/plugin-subprocessors.js +129 -0
- package/src/lib/plugin-manager/plugin-subprocessors.js.map +1 -0
- package/src/lib/plugin-manager/plugin-tax-profile.d.ts +84 -0
- package/src/lib/plugin-manager/plugin-tax-profile.js +39 -0
- package/src/lib/plugin-manager/plugin-tax-profile.js.map +1 -0
- package/src/lib/plugin-manager/plugin-user-erasure.d.ts +53 -0
- package/src/lib/plugin-manager/plugin-user-erasure.js +84 -0
- package/src/lib/plugin-manager/plugin-user-erasure.js.map +1 -0
- package/src/lib/plugin-manager/plugin-zones.d.ts +121 -0
- package/src/lib/plugin-manager/plugin-zones.js +74 -0
- package/src/lib/plugin-manager/plugin-zones.js.map +1 -0
- package/src/lib/plugin-manager/realm-plugins.d.ts +112 -0
- package/src/lib/plugin-manager/realm-plugins.js +196 -0
- package/src/lib/plugin-manager/realm-plugins.js.map +1 -0
- package/src/lib/plugin-manager/realm-server.d.ts +54 -0
- package/src/lib/plugin-manager/realm-server.js +88 -0
- package/src/lib/plugin-manager/realm-server.js.map +1 -0
- package/src/lib/plugin-manager/record-zone-props.d.ts +126 -0
- package/src/lib/plugin-manager/record-zone-props.js +31 -0
- package/src/lib/plugin-manager/record-zone-props.js.map +1 -0
- package/src/lib/plugin-manager/site-page-hooks.d.ts +102 -0
- package/src/lib/plugin-manager/site-page-hooks.js +114 -0
- package/src/lib/plugin-manager/site-page-hooks.js.map +1 -0
- package/src/lib/plugin-manager/site-runtime.d.ts +57 -0
- package/src/lib/plugin-manager/site-runtime.js +25 -0
- package/src/lib/plugin-manager/site-runtime.js.map +1 -0
- package/src/lib/plugin-manager/usage-alert-contributors.d.ts +115 -0
- package/src/lib/plugin-manager/usage-alert-contributors.js +106 -0
- package/src/lib/plugin-manager/usage-alert-contributors.js.map +1 -0
- package/src/lib/types/ast.d.ts +199 -0
- package/src/lib/types/ast.js +20 -0
- package/src/lib/types/ast.js.map +1 -0
- package/src/lib/types/index.d.ts +20 -0
- package/src/lib/types/index.js +21 -0
- package/src/lib/types/index.js.map +1 -0
- package/src/lib/types/nodes.d.ts +608 -0
- package/src/lib/types/nodes.js +28 -0
- package/src/lib/types/nodes.js.map +1 -0
- package/src/lib/types/routing.d.ts +17 -0
- package/src/lib/types/routing.js +18 -0
- package/src/lib/types/routing.js.map +1 -0
- package/src/lib/types/screen.d.ts +23 -0
- package/src/lib/types/screen.js +18 -0
- package/src/lib/types/screen.js.map +1 -0
- package/src/lib/utils.d.ts +25 -0
- package/src/lib/utils.js +42 -0
- package/src/lib/utils.js.map +1 -0
- package/src/server.d.ts +37 -0
- package/src/server.js +55 -0
- package/src/server.js.map +1 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* The GA4 event parameter GA's built-in internal-traffic data filter matches
|
|
19
|
+
* on, and the value its default rule uses.
|
|
20
|
+
*
|
|
21
|
+
* Named here rather than inlined because the strings have to agree with a
|
|
22
|
+
* setting in the GA UI that nothing in this repo can typecheck against — see
|
|
23
|
+
* `docs/ANALYTICS.md` §8 — and because THREE surfaces now stamp them: the
|
|
24
|
+
* console through Firebase's `setDefaultEventParameters`, the tenant runtime
|
|
25
|
+
* and the docs site through a raw `gtag('set', …)`. One definition is what
|
|
26
|
+
* keeps the console's parameter and the marketing site's parameter the same
|
|
27
|
+
* parameter; two spellings would read as two dimensions in GA and the filter
|
|
28
|
+
* would catch one of them.
|
|
29
|
+
*/
|
|
30
|
+
export declare const INTERNAL_TRAFFIC_PARAM = "traffic_type";
|
|
31
|
+
export declare const INTERNAL_TRAFFIC_VALUE = "internal";
|
|
32
|
+
/**
|
|
33
|
+
* Where a browser's opt-in is remembered, and the query parameter that sets
|
|
34
|
+
* it (AGL-2064 / AGL-2065).
|
|
35
|
+
*
|
|
36
|
+
* ## Why an explicit override exists at all
|
|
37
|
+
*
|
|
38
|
+
* The AGL-1582 predicate keys on ID-token claims — `staff` or `impersonatedBy`
|
|
39
|
+
* — which is right, and insufficient. Several release drills REQUIRE a
|
|
40
|
+
* non-staff account: the marketplace publisher drill cannot be run by staff at
|
|
41
|
+
* all, because the thing being exercised is a publisher installing their own
|
|
42
|
+
* unreviewed version. Those sessions emit `sign_up`, `org_created`,
|
|
43
|
+
* `host_created`, `site_published` and `begin_checkout` — precisely the
|
|
44
|
+
* activation and revenue events the September funnel is read from — and the
|
|
45
|
+
* claims predicate correctly declines to flag them.
|
|
46
|
+
*
|
|
47
|
+
* Widening the predicate would be the wrong repair. It would flag by identity,
|
|
48
|
+
* and a customer identity is the point of the drill. So the override is a
|
|
49
|
+
* property of the BROWSER, not of the account: a browser we have declared to
|
|
50
|
+
* be ours stays ours across sign-outs, re-auths and whichever test account is
|
|
51
|
+
* currently signed in.
|
|
52
|
+
*
|
|
53
|
+
* And the marketing surface has no account to consult in the first place —
|
|
54
|
+
* `aglyn.com`, `/pricing` and every published site are browsed logged out,
|
|
55
|
+
* which is why that leak is the larger one and why this is the only mechanism
|
|
56
|
+
* that can close it.
|
|
57
|
+
*
|
|
58
|
+
* ## Why `localStorage`, and what being origin-scoped costs
|
|
59
|
+
*
|
|
60
|
+
* It has to survive a reload and a full page navigation, which rules out
|
|
61
|
+
* module state, and it has to be readable by an inline script before the tag
|
|
62
|
+
* library loads, which rules out anything asynchronous. `localStorage` is
|
|
63
|
+
* both, and it was deliberately NOT a cookie: a cookie rides to the server on
|
|
64
|
+
* every request and ends up in logs.
|
|
65
|
+
*
|
|
66
|
+
* ## Why a cookie now rides ALONGSIDE it (AGL-3175)
|
|
67
|
+
*
|
|
68
|
+
* That reasoning held while the surfaces were a fixed list. They are not. The
|
|
69
|
+
* console is served on every `*.aglyn.com` hostname, and `WORKSPACE_DOMAIN` is
|
|
70
|
+
* `aglyn.com`, so EVERY ORG WORKSPACE IS ITS OWN ORIGIN — fourteen distinct
|
|
71
|
+
* hostnames have sent events to the property, among them generated slugs like
|
|
72
|
+
* `34kwy7hnbr`. Per-origin storage cannot be opted into on a hostname that
|
|
73
|
+
* does not exist yet, so the opt-in list was not merely incomplete, it was
|
|
74
|
+
* uncompletable. `auth.aglyn.com` sat unpinned for a month on exactly that.
|
|
75
|
+
*
|
|
76
|
+
* So the opt-in is ALSO written as a cookie scoped to the workspace domain,
|
|
77
|
+
* and either source turning it on is enough. What the cookie costs is what the
|
|
78
|
+
* paragraph above says it costs: the constant string `internal` now appears in
|
|
79
|
+
* request headers to our own hosts. It carries no identity — it says "this
|
|
80
|
+
* browser is ours" and nothing about who is using it — and it rides beside
|
|
81
|
+
* `__session`, which the same domain already carries.
|
|
82
|
+
*
|
|
83
|
+
* ## What still bounds it
|
|
84
|
+
*
|
|
85
|
+
* The cookie is written ONLY where a call site passes `cookieDomain`, and the
|
|
86
|
+
* console's helper passes it only when the current hostname is under that
|
|
87
|
+
* domain. Nothing here writes a cookie on a customer's custom domain, and
|
|
88
|
+
* nothing needs to: published sites are on `aglyn.app` and custom domains,
|
|
89
|
+
* which a `.aglyn.com` cookie cannot reach. That registrable-domain boundary
|
|
90
|
+
* — not per-origin storage — is what keeps an opt-in on our console out of a
|
|
91
|
+
* CUSTOMER's Analytics property while we click through their published site.
|
|
92
|
+
*
|
|
93
|
+
* `INTERNAL_TRAFFIC_GTAG_SNIPPET` is deliberately left on storage alone. It is
|
|
94
|
+
* a constant string inlined into ISR-cached customer HTML (with a verbatim
|
|
95
|
+
* copy in the docs site's config), it cannot be made hostname-aware, and every
|
|
96
|
+
* surface that uses it is a fixed origin that can be pinned directly.
|
|
97
|
+
*
|
|
98
|
+
* ## Bias
|
|
99
|
+
*
|
|
100
|
+
* Opt-in only, never inferred. Wrongly flagging a real customer erases them
|
|
101
|
+
* from every report and a GA4 data filter is not retroactive, so every
|
|
102
|
+
* ambiguous case here resolves to "not internal".
|
|
103
|
+
*/
|
|
104
|
+
export declare const INTERNAL_TRAFFIC_STORAGE_KEY = "aglyn_traffic_type";
|
|
105
|
+
export declare const INTERNAL_TRAFFIC_QUERY_PARAM = "aglyn_internal";
|
|
106
|
+
/**
|
|
107
|
+
* The cookie that carries the same opt-in across every origin under one
|
|
108
|
+
* domain. Same name as the storage key on purpose: one concept, and a browser
|
|
109
|
+
* inspector shows the two halves of it side by side under one label.
|
|
110
|
+
*/
|
|
111
|
+
export declare const INTERNAL_TRAFFIC_COOKIE_KEY = "aglyn_traffic_type";
|
|
112
|
+
/** The browser bits `readInternalTrafficOverride` needs, so a test can supply them. */
|
|
113
|
+
export interface InternalTrafficOverrideSource {
|
|
114
|
+
/** `window.location.search`, leading `?` optional. */
|
|
115
|
+
search?: string | null;
|
|
116
|
+
/** `window.localStorage`, or null where the browser refuses one. */
|
|
117
|
+
storage?: Pick<Storage, 'getItem' | 'setItem' | 'removeItem'> | null;
|
|
118
|
+
/** `document.cookie`, for the READ half. Absent means no cookie source. */
|
|
119
|
+
cookie?: string | null;
|
|
120
|
+
/**
|
|
121
|
+
* The domain to scope the cookie WRITE to, bare (`aglyn.com`). Absent means
|
|
122
|
+
* this call site does not write cookies at all, which is the default and
|
|
123
|
+
* what every shared caller does — see the module comment. Only a call site
|
|
124
|
+
* that has already established it is on a first-party host passes it.
|
|
125
|
+
*/
|
|
126
|
+
cookieDomain?: string | null;
|
|
127
|
+
/** Where a written cookie goes. Defaults to `document.cookie`. */
|
|
128
|
+
writeCookie?: ((serialized: string) => void) | null;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Whether THIS BROWSER has been declared one of ours, applying `?aglyn_internal`
|
|
132
|
+
* first if it is on the URL.
|
|
133
|
+
*
|
|
134
|
+
* Reading and writing in one call is deliberate: the query parameter has to
|
|
135
|
+
* take effect on the pageview that carries it, not on the next one, because
|
|
136
|
+
* the pageview that carries it is already a hit. Persisting it here is what
|
|
137
|
+
* makes the single `?aglyn_internal=1` visit enough.
|
|
138
|
+
*
|
|
139
|
+
* Never throws. A browser with `localStorage` disabled, a sandboxed iframe and
|
|
140
|
+
* a server render all resolve to `false` — the not-internal direction, which
|
|
141
|
+
* is the safe one.
|
|
142
|
+
*/
|
|
143
|
+
export declare function readInternalTrafficOverride(source?: InternalTrafficOverrideSource): boolean;
|
|
144
|
+
/**
|
|
145
|
+
* The override, pinned domain-wide rather than per origin (AGL-3175).
|
|
146
|
+
*
|
|
147
|
+
* For the console, which is the surface served on an open-ended set of
|
|
148
|
+
* `*.aglyn.com` origins. The hostname check is the gate the module comment
|
|
149
|
+
* describes: it is what guarantees no cookie is ever written on a customer's
|
|
150
|
+
* custom domain, and it also keeps `localhost` and preview deployments — where
|
|
151
|
+
* a `Secure` cookie for another domain would be rejected anyway — writing
|
|
152
|
+
* nothing but `localStorage`, exactly as before.
|
|
153
|
+
*/
|
|
154
|
+
export declare function readInternalTrafficOverrideForDomain(domain: string | null | undefined): boolean;
|
|
155
|
+
/**
|
|
156
|
+
* The same decision as `readInternalTrafficOverride`, as a CONSTANT string of
|
|
157
|
+
* JavaScript, for the surfaces that drive gtag directly (AGL-2064).
|
|
158
|
+
*
|
|
159
|
+
* ## Why a string, and why it must stay constant
|
|
160
|
+
*
|
|
161
|
+
* The tenant runtime serves ISR-cached HTML: one cached document is handed to
|
|
162
|
+
* every visitor, so nothing about this decision may be made while rendering.
|
|
163
|
+
* A server-side branch would bake one browser's answer into the cache for
|
|
164
|
+
* everyone, and a first-client-render branch would break hydration. Emitting
|
|
165
|
+
* the same bytes to everyone and letting them decide AT RUNTIME, in the
|
|
166
|
+
* browser, is the only shape that is both correct and cacheable — the same
|
|
167
|
+
* move `consent.ready` makes one layer up.
|
|
168
|
+
*
|
|
169
|
+
* ## Why it must run before `gtag('config', …)`
|
|
170
|
+
*
|
|
171
|
+
* GA4's internal-traffic filter matches per EVENT, and the events that leak
|
|
172
|
+
* are the ones no call site writes: `session_start`, `first_visit`,
|
|
173
|
+
* `user_engagement` and the automatic `page_view`. A `gtag('set', …)` applies
|
|
174
|
+
* to every hit gtag processes AFTER it in queue order, so placed between the
|
|
175
|
+
* `dataLayer` shim and the `config` call it rides all of them. Placed after
|
|
176
|
+
* `config` it would miss the session's first pageview — which is the whole
|
|
177
|
+
* session, for a marketing visit.
|
|
178
|
+
*
|
|
179
|
+
* ## Safe to inline
|
|
180
|
+
*
|
|
181
|
+
* No interpolation, so nothing can inject; contains no `<` at all, so it
|
|
182
|
+
* cannot close its own `<script>` element. It assumes only that a `gtag`
|
|
183
|
+
* function is already defined, which is the line immediately above it in every
|
|
184
|
+
* call site.
|
|
185
|
+
*/
|
|
186
|
+
export declare const INTERNAL_TRAFFIC_GTAG_SNIPPET: string;
|
|
187
|
+
/**
|
|
188
|
+
* The stamp with no opt-in check at all, for a build that has already decided
|
|
189
|
+
* every one of its hits is ours (AGL-2067).
|
|
190
|
+
*
|
|
191
|
+
* Used only where `analyticsEnvironmentForcesInternal()` holds: a
|
|
192
|
+
* non-production build running with the analytics escape hatch on. Nobody
|
|
193
|
+
* reaches that state by accident, so consulting the browser as well would only
|
|
194
|
+
* create a way for it to be wrong.
|
|
195
|
+
*/
|
|
196
|
+
export declare const INTERNAL_TRAFFIC_FORCED_SNIPPET = "gtag('set',{'traffic_type':'internal'});";
|
|
197
|
+
export default readInternalTrafficOverride;
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ /**
|
|
17
|
+
* The GA4 event parameter GA's built-in internal-traffic data filter matches
|
|
18
|
+
* on, and the value its default rule uses.
|
|
19
|
+
*
|
|
20
|
+
* Named here rather than inlined because the strings have to agree with a
|
|
21
|
+
* setting in the GA UI that nothing in this repo can typecheck against — see
|
|
22
|
+
* `docs/ANALYTICS.md` §8 — and because THREE surfaces now stamp them: the
|
|
23
|
+
* console through Firebase's `setDefaultEventParameters`, the tenant runtime
|
|
24
|
+
* and the docs site through a raw `gtag('set', …)`. One definition is what
|
|
25
|
+
* keeps the console's parameter and the marketing site's parameter the same
|
|
26
|
+
* parameter; two spellings would read as two dimensions in GA and the filter
|
|
27
|
+
* would catch one of them.
|
|
28
|
+
*/ export const INTERNAL_TRAFFIC_PARAM = 'traffic_type';
|
|
29
|
+
export const INTERNAL_TRAFFIC_VALUE = 'internal';
|
|
30
|
+
/**
|
|
31
|
+
* Where a browser's opt-in is remembered, and the query parameter that sets
|
|
32
|
+
* it (AGL-2064 / AGL-2065).
|
|
33
|
+
*
|
|
34
|
+
* ## Why an explicit override exists at all
|
|
35
|
+
*
|
|
36
|
+
* The AGL-1582 predicate keys on ID-token claims — `staff` or `impersonatedBy`
|
|
37
|
+
* — which is right, and insufficient. Several release drills REQUIRE a
|
|
38
|
+
* non-staff account: the marketplace publisher drill cannot be run by staff at
|
|
39
|
+
* all, because the thing being exercised is a publisher installing their own
|
|
40
|
+
* unreviewed version. Those sessions emit `sign_up`, `org_created`,
|
|
41
|
+
* `host_created`, `site_published` and `begin_checkout` — precisely the
|
|
42
|
+
* activation and revenue events the September funnel is read from — and the
|
|
43
|
+
* claims predicate correctly declines to flag them.
|
|
44
|
+
*
|
|
45
|
+
* Widening the predicate would be the wrong repair. It would flag by identity,
|
|
46
|
+
* and a customer identity is the point of the drill. So the override is a
|
|
47
|
+
* property of the BROWSER, not of the account: a browser we have declared to
|
|
48
|
+
* be ours stays ours across sign-outs, re-auths and whichever test account is
|
|
49
|
+
* currently signed in.
|
|
50
|
+
*
|
|
51
|
+
* And the marketing surface has no account to consult in the first place —
|
|
52
|
+
* `aglyn.com`, `/pricing` and every published site are browsed logged out,
|
|
53
|
+
* which is why that leak is the larger one and why this is the only mechanism
|
|
54
|
+
* that can close it.
|
|
55
|
+
*
|
|
56
|
+
* ## Why `localStorage`, and what being origin-scoped costs
|
|
57
|
+
*
|
|
58
|
+
* It has to survive a reload and a full page navigation, which rules out
|
|
59
|
+
* module state, and it has to be readable by an inline script before the tag
|
|
60
|
+
* library loads, which rules out anything asynchronous. `localStorage` is
|
|
61
|
+
* both, and it was deliberately NOT a cookie: a cookie rides to the server on
|
|
62
|
+
* every request and ends up in logs.
|
|
63
|
+
*
|
|
64
|
+
* ## Why a cookie now rides ALONGSIDE it (AGL-3175)
|
|
65
|
+
*
|
|
66
|
+
* That reasoning held while the surfaces were a fixed list. They are not. The
|
|
67
|
+
* console is served on every `*.aglyn.com` hostname, and `WORKSPACE_DOMAIN` is
|
|
68
|
+
* `aglyn.com`, so EVERY ORG WORKSPACE IS ITS OWN ORIGIN — fourteen distinct
|
|
69
|
+
* hostnames have sent events to the property, among them generated slugs like
|
|
70
|
+
* `34kwy7hnbr`. Per-origin storage cannot be opted into on a hostname that
|
|
71
|
+
* does not exist yet, so the opt-in list was not merely incomplete, it was
|
|
72
|
+
* uncompletable. `auth.aglyn.com` sat unpinned for a month on exactly that.
|
|
73
|
+
*
|
|
74
|
+
* So the opt-in is ALSO written as a cookie scoped to the workspace domain,
|
|
75
|
+
* and either source turning it on is enough. What the cookie costs is what the
|
|
76
|
+
* paragraph above says it costs: the constant string `internal` now appears in
|
|
77
|
+
* request headers to our own hosts. It carries no identity — it says "this
|
|
78
|
+
* browser is ours" and nothing about who is using it — and it rides beside
|
|
79
|
+
* `__session`, which the same domain already carries.
|
|
80
|
+
*
|
|
81
|
+
* ## What still bounds it
|
|
82
|
+
*
|
|
83
|
+
* The cookie is written ONLY where a call site passes `cookieDomain`, and the
|
|
84
|
+
* console's helper passes it only when the current hostname is under that
|
|
85
|
+
* domain. Nothing here writes a cookie on a customer's custom domain, and
|
|
86
|
+
* nothing needs to: published sites are on `aglyn.app` and custom domains,
|
|
87
|
+
* which a `.aglyn.com` cookie cannot reach. That registrable-domain boundary
|
|
88
|
+
* — not per-origin storage — is what keeps an opt-in on our console out of a
|
|
89
|
+
* CUSTOMER's Analytics property while we click through their published site.
|
|
90
|
+
*
|
|
91
|
+
* `INTERNAL_TRAFFIC_GTAG_SNIPPET` is deliberately left on storage alone. It is
|
|
92
|
+
* a constant string inlined into ISR-cached customer HTML (with a verbatim
|
|
93
|
+
* copy in the docs site's config), it cannot be made hostname-aware, and every
|
|
94
|
+
* surface that uses it is a fixed origin that can be pinned directly.
|
|
95
|
+
*
|
|
96
|
+
* ## Bias
|
|
97
|
+
*
|
|
98
|
+
* Opt-in only, never inferred. Wrongly flagging a real customer erases them
|
|
99
|
+
* from every report and a GA4 data filter is not retroactive, so every
|
|
100
|
+
* ambiguous case here resolves to "not internal".
|
|
101
|
+
*/ export const INTERNAL_TRAFFIC_STORAGE_KEY = 'aglyn_traffic_type';
|
|
102
|
+
export const INTERNAL_TRAFFIC_QUERY_PARAM = 'aglyn_internal';
|
|
103
|
+
/**
|
|
104
|
+
* The cookie that carries the same opt-in across every origin under one
|
|
105
|
+
* domain. Same name as the storage key on purpose: one concept, and a browser
|
|
106
|
+
* inspector shows the two halves of it side by side under one label.
|
|
107
|
+
*/ export const INTERNAL_TRAFFIC_COOKIE_KEY = 'aglyn_traffic_type';
|
|
108
|
+
/**
|
|
109
|
+
* 400 days, which is the ceiling Chrome clamps `Max-Age` to anyway. Expiry is
|
|
110
|
+
* not a feature here — the opt-in is meant to be permanent, and a browser that
|
|
111
|
+
* quietly forgets it puts our own browsing back into the launch metrics, which
|
|
112
|
+
* a GA4 data filter cannot undo after the fact.
|
|
113
|
+
*/ const INTERNAL_TRAFFIC_COOKIE_MAX_AGE = 34560000;
|
|
114
|
+
/**
|
|
115
|
+
* The values of `?aglyn_internal=` that turn the override OFF again. Anything
|
|
116
|
+
* else present turns it on, so `?aglyn_internal` with no value works — that is
|
|
117
|
+
* the form someone types from memory.
|
|
118
|
+
*/ const OFF_VALUES = new Set([
|
|
119
|
+
'0',
|
|
120
|
+
'false',
|
|
121
|
+
'off',
|
|
122
|
+
'no'
|
|
123
|
+
]);
|
|
124
|
+
/** Whether a `document.cookie` string carries our opt-in. Never throws. */ function cookieSaysInternal(cookie) {
|
|
125
|
+
if (!cookie) return false;
|
|
126
|
+
for (const part of cookie.split(';')){
|
|
127
|
+
const eq = part.indexOf('=');
|
|
128
|
+
if (eq < 0) continue;
|
|
129
|
+
if (part.slice(0, eq).trim() !== INTERNAL_TRAFFIC_COOKIE_KEY) continue;
|
|
130
|
+
return part.slice(eq + 1).trim() === INTERNAL_TRAFFIC_VALUE;
|
|
131
|
+
}
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Mirror the opt-in into the domain-wide cookie, when the call site asked for
|
|
136
|
+
* it. A no-op everywhere else, which is every shared caller.
|
|
137
|
+
*
|
|
138
|
+
* `SameSite=Lax` and `Secure` because this rides to our own hosts and has no
|
|
139
|
+
* cross-site job; clearing writes the same attributes with `Max-Age=0`,
|
|
140
|
+
* because a cookie is only replaced by one whose domain and path match.
|
|
141
|
+
*/ function writeInternalTrafficCookie(source, on) {
|
|
142
|
+
var _source_writeCookie;
|
|
143
|
+
const domain = source.cookieDomain;
|
|
144
|
+
if (!domain) return;
|
|
145
|
+
const write = (_source_writeCookie = source.writeCookie) != null ? _source_writeCookie : typeof document === 'undefined' ? null : (serialized)=>{
|
|
146
|
+
document.cookie = serialized;
|
|
147
|
+
};
|
|
148
|
+
if (!write) return;
|
|
149
|
+
try {
|
|
150
|
+
write(`${INTERNAL_TRAFFIC_COOKIE_KEY}=${on ? INTERNAL_TRAFFIC_VALUE : ''}` + `; Domain=.${domain}; Path=/; SameSite=Lax; Secure` + `; Max-Age=${on ? INTERNAL_TRAFFIC_COOKIE_MAX_AGE : 0}`);
|
|
151
|
+
} catch (unused) {
|
|
152
|
+
// A refused cookie jar leaves `localStorage` holding the opt-in for this
|
|
153
|
+
// origin, which is where it lived before this existed.
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Whether THIS BROWSER has been declared one of ours, applying `?aglyn_internal`
|
|
158
|
+
* first if it is on the URL.
|
|
159
|
+
*
|
|
160
|
+
* Reading and writing in one call is deliberate: the query parameter has to
|
|
161
|
+
* take effect on the pageview that carries it, not on the next one, because
|
|
162
|
+
* the pageview that carries it is already a hit. Persisting it here is what
|
|
163
|
+
* makes the single `?aglyn_internal=1` visit enough.
|
|
164
|
+
*
|
|
165
|
+
* Never throws. A browser with `localStorage` disabled, a sandboxed iframe and
|
|
166
|
+
* a server render all resolve to `false` — the not-internal direction, which
|
|
167
|
+
* is the safe one.
|
|
168
|
+
*/ export function readInternalTrafficOverride(source) {
|
|
169
|
+
var _window_location;
|
|
170
|
+
const resolved = source != null ? source : typeof window === 'undefined' ? {} : {
|
|
171
|
+
search: (_window_location = window.location) == null ? void 0 : _window_location.search,
|
|
172
|
+
storage: safeLocalStorage(),
|
|
173
|
+
cookie: safeDocumentCookie()
|
|
174
|
+
};
|
|
175
|
+
const storage = resolved.storage;
|
|
176
|
+
// Read the cookie BEFORE the storage gate. A browser that refuses
|
|
177
|
+
// `localStorage` outright — Safari private mode, a partitioned frame — can
|
|
178
|
+
// still be one of ours, and before AGL-3175 that browser was unpinnable.
|
|
179
|
+
let cookieOn = cookieSaysInternal(resolved.cookie);
|
|
180
|
+
if (!storage) return cookieOn;
|
|
181
|
+
try {
|
|
182
|
+
const search = resolved.search;
|
|
183
|
+
if (search) {
|
|
184
|
+
const requested = new URLSearchParams(search.startsWith('?') ? search.slice(1) : search).get(INTERNAL_TRAFFIC_QUERY_PARAM);
|
|
185
|
+
if (requested !== null) {
|
|
186
|
+
// Both halves move together, so `?aglyn_internal=0` really is an
|
|
187
|
+
// off switch: clearing storage while the cookie still said `internal`
|
|
188
|
+
// would leave the browser pinned with nothing local to show for it.
|
|
189
|
+
if (OFF_VALUES.has(requested.toLowerCase())) {
|
|
190
|
+
storage.removeItem(INTERNAL_TRAFFIC_STORAGE_KEY);
|
|
191
|
+
writeInternalTrafficCookie(resolved, false);
|
|
192
|
+
cookieOn = false;
|
|
193
|
+
} else {
|
|
194
|
+
storage.setItem(INTERNAL_TRAFFIC_STORAGE_KEY, INTERNAL_TRAFFIC_VALUE);
|
|
195
|
+
writeInternalTrafficCookie(resolved, true);
|
|
196
|
+
cookieOn = true;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return cookieOn || storage.getItem(INTERNAL_TRAFFIC_STORAGE_KEY) === INTERNAL_TRAFFIC_VALUE;
|
|
201
|
+
} catch (unused) {
|
|
202
|
+
// Storage access can throw outright (Safari private mode, a partitioned
|
|
203
|
+
// third-party context). The cookie is the other half and may still answer.
|
|
204
|
+
return cookieOn;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/** `document.cookie` where reaching for it does not throw, else null. */ function safeDocumentCookie() {
|
|
208
|
+
try {
|
|
209
|
+
return typeof document === 'undefined' ? null : document.cookie;
|
|
210
|
+
} catch (unused) {
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* The override, pinned domain-wide rather than per origin (AGL-3175).
|
|
216
|
+
*
|
|
217
|
+
* For the console, which is the surface served on an open-ended set of
|
|
218
|
+
* `*.aglyn.com` origins. The hostname check is the gate the module comment
|
|
219
|
+
* describes: it is what guarantees no cookie is ever written on a customer's
|
|
220
|
+
* custom domain, and it also keeps `localhost` and preview deployments — where
|
|
221
|
+
* a `Secure` cookie for another domain would be rejected anyway — writing
|
|
222
|
+
* nothing but `localStorage`, exactly as before.
|
|
223
|
+
*/ export function readInternalTrafficOverrideForDomain(domain) {
|
|
224
|
+
var _ref;
|
|
225
|
+
var _window_location, _window_location1;
|
|
226
|
+
if (typeof window === 'undefined') return false;
|
|
227
|
+
const host = (_ref = (_window_location = window.location) == null ? void 0 : _window_location.hostname) != null ? _ref : '';
|
|
228
|
+
const underDomain = !!domain && (host === domain || host.endsWith(`.${domain}`));
|
|
229
|
+
return readInternalTrafficOverride({
|
|
230
|
+
search: (_window_location1 = window.location) == null ? void 0 : _window_location1.search,
|
|
231
|
+
storage: safeLocalStorage(),
|
|
232
|
+
cookie: safeDocumentCookie(),
|
|
233
|
+
cookieDomain: underDomain ? domain : null
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
/** `window.localStorage` where reaching for it does not throw, else null. */ function safeLocalStorage() {
|
|
237
|
+
try {
|
|
238
|
+
var _window_localStorage;
|
|
239
|
+
return (_window_localStorage = window.localStorage) != null ? _window_localStorage : null;
|
|
240
|
+
} catch (unused) {
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* The same decision as `readInternalTrafficOverride`, as a CONSTANT string of
|
|
246
|
+
* JavaScript, for the surfaces that drive gtag directly (AGL-2064).
|
|
247
|
+
*
|
|
248
|
+
* ## Why a string, and why it must stay constant
|
|
249
|
+
*
|
|
250
|
+
* The tenant runtime serves ISR-cached HTML: one cached document is handed to
|
|
251
|
+
* every visitor, so nothing about this decision may be made while rendering.
|
|
252
|
+
* A server-side branch would bake one browser's answer into the cache for
|
|
253
|
+
* everyone, and a first-client-render branch would break hydration. Emitting
|
|
254
|
+
* the same bytes to everyone and letting them decide AT RUNTIME, in the
|
|
255
|
+
* browser, is the only shape that is both correct and cacheable — the same
|
|
256
|
+
* move `consent.ready` makes one layer up.
|
|
257
|
+
*
|
|
258
|
+
* ## Why it must run before `gtag('config', …)`
|
|
259
|
+
*
|
|
260
|
+
* GA4's internal-traffic filter matches per EVENT, and the events that leak
|
|
261
|
+
* are the ones no call site writes: `session_start`, `first_visit`,
|
|
262
|
+
* `user_engagement` and the automatic `page_view`. A `gtag('set', …)` applies
|
|
263
|
+
* to every hit gtag processes AFTER it in queue order, so placed between the
|
|
264
|
+
* `dataLayer` shim and the `config` call it rides all of them. Placed after
|
|
265
|
+
* `config` it would miss the session's first pageview — which is the whole
|
|
266
|
+
* session, for a marketing visit.
|
|
267
|
+
*
|
|
268
|
+
* ## Safe to inline
|
|
269
|
+
*
|
|
270
|
+
* No interpolation, so nothing can inject; contains no `<` at all, so it
|
|
271
|
+
* cannot close its own `<script>` element. It assumes only that a `gtag`
|
|
272
|
+
* function is already defined, which is the line immediately above it in every
|
|
273
|
+
* call site.
|
|
274
|
+
*/ export const INTERNAL_TRAFFIC_GTAG_SNIPPET = 'try{' + `var aq=new URLSearchParams(location.search).get('${INTERNAL_TRAFFIC_QUERY_PARAM}');` + 'if(aq!==null){' + `if(['${[
|
|
275
|
+
...OFF_VALUES
|
|
276
|
+
].join("','")}'].indexOf(aq.toLowerCase())>=0)` + `localStorage.removeItem('${INTERNAL_TRAFFIC_STORAGE_KEY}');` + `else localStorage.setItem('${INTERNAL_TRAFFIC_STORAGE_KEY}','${INTERNAL_TRAFFIC_VALUE}');` + '}' + `if(localStorage.getItem('${INTERNAL_TRAFFIC_STORAGE_KEY}')==='${INTERNAL_TRAFFIC_VALUE}')` + `gtag('set',{'${INTERNAL_TRAFFIC_PARAM}':'${INTERNAL_TRAFFIC_VALUE}'});` + '}catch(e){}';
|
|
277
|
+
/**
|
|
278
|
+
* The stamp with no opt-in check at all, for a build that has already decided
|
|
279
|
+
* every one of its hits is ours (AGL-2067).
|
|
280
|
+
*
|
|
281
|
+
* Used only where `analyticsEnvironmentForcesInternal()` holds: a
|
|
282
|
+
* non-production build running with the analytics escape hatch on. Nobody
|
|
283
|
+
* reaches that state by accident, so consulting the browser as well would only
|
|
284
|
+
* create a way for it to be wrong.
|
|
285
|
+
*/ export const INTERNAL_TRAFFIC_FORCED_SNIPPET = `gtag('set',{'${INTERNAL_TRAFFIC_PARAM}':'${INTERNAL_TRAFFIC_VALUE}'});`;
|
|
286
|
+
export default readInternalTrafficOverride;
|
|
287
|
+
|
|
288
|
+
//# sourceMappingURL=internal-traffic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/internal-traffic.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 * The GA4 event parameter GA's built-in internal-traffic data filter matches\n * on, and the value its default rule uses.\n *\n * Named here rather than inlined because the strings have to agree with a\n * setting in the GA UI that nothing in this repo can typecheck against — see\n * `docs/ANALYTICS.md` §8 — and because THREE surfaces now stamp them: the\n * console through Firebase's `setDefaultEventParameters`, the tenant runtime\n * and the docs site through a raw `gtag('set', …)`. One definition is what\n * keeps the console's parameter and the marketing site's parameter the same\n * parameter; two spellings would read as two dimensions in GA and the filter\n * would catch one of them.\n */\nexport const INTERNAL_TRAFFIC_PARAM = 'traffic_type'\nexport const INTERNAL_TRAFFIC_VALUE = 'internal'\n\n/**\n * Where a browser's opt-in is remembered, and the query parameter that sets\n * it (AGL-2064 / AGL-2065).\n *\n * ## Why an explicit override exists at all\n *\n * The AGL-1582 predicate keys on ID-token claims — `staff` or `impersonatedBy`\n * — which is right, and insufficient. Several release drills REQUIRE a\n * non-staff account: the marketplace publisher drill cannot be run by staff at\n * all, because the thing being exercised is a publisher installing their own\n * unreviewed version. Those sessions emit `sign_up`, `org_created`,\n * `host_created`, `site_published` and `begin_checkout` — precisely the\n * activation and revenue events the September funnel is read from — and the\n * claims predicate correctly declines to flag them.\n *\n * Widening the predicate would be the wrong repair. It would flag by identity,\n * and a customer identity is the point of the drill. So the override is a\n * property of the BROWSER, not of the account: a browser we have declared to\n * be ours stays ours across sign-outs, re-auths and whichever test account is\n * currently signed in.\n *\n * And the marketing surface has no account to consult in the first place —\n * `aglyn.com`, `/pricing` and every published site are browsed logged out,\n * which is why that leak is the larger one and why this is the only mechanism\n * that can close it.\n *\n * ## Why `localStorage`, and what being origin-scoped costs\n *\n * It has to survive a reload and a full page navigation, which rules out\n * module state, and it has to be readable by an inline script before the tag\n * library loads, which rules out anything asynchronous. `localStorage` is\n * both, and it was deliberately NOT a cookie: a cookie rides to the server on\n * every request and ends up in logs.\n *\n * ## Why a cookie now rides ALONGSIDE it (AGL-3175)\n *\n * That reasoning held while the surfaces were a fixed list. They are not. The\n * console is served on every `*.aglyn.com` hostname, and `WORKSPACE_DOMAIN` is\n * `aglyn.com`, so EVERY ORG WORKSPACE IS ITS OWN ORIGIN — fourteen distinct\n * hostnames have sent events to the property, among them generated slugs like\n * `34kwy7hnbr`. Per-origin storage cannot be opted into on a hostname that\n * does not exist yet, so the opt-in list was not merely incomplete, it was\n * uncompletable. `auth.aglyn.com` sat unpinned for a month on exactly that.\n *\n * So the opt-in is ALSO written as a cookie scoped to the workspace domain,\n * and either source turning it on is enough. What the cookie costs is what the\n * paragraph above says it costs: the constant string `internal` now appears in\n * request headers to our own hosts. It carries no identity — it says \"this\n * browser is ours\" and nothing about who is using it — and it rides beside\n * `__session`, which the same domain already carries.\n *\n * ## What still bounds it\n *\n * The cookie is written ONLY where a call site passes `cookieDomain`, and the\n * console's helper passes it only when the current hostname is under that\n * domain. Nothing here writes a cookie on a customer's custom domain, and\n * nothing needs to: published sites are on `aglyn.app` and custom domains,\n * which a `.aglyn.com` cookie cannot reach. That registrable-domain boundary\n * — not per-origin storage — is what keeps an opt-in on our console out of a\n * CUSTOMER's Analytics property while we click through their published site.\n *\n * `INTERNAL_TRAFFIC_GTAG_SNIPPET` is deliberately left on storage alone. It is\n * a constant string inlined into ISR-cached customer HTML (with a verbatim\n * copy in the docs site's config), it cannot be made hostname-aware, and every\n * surface that uses it is a fixed origin that can be pinned directly.\n *\n * ## Bias\n *\n * Opt-in only, never inferred. Wrongly flagging a real customer erases them\n * from every report and a GA4 data filter is not retroactive, so every\n * ambiguous case here resolves to \"not internal\".\n */\nexport const INTERNAL_TRAFFIC_STORAGE_KEY = 'aglyn_traffic_type'\nexport const INTERNAL_TRAFFIC_QUERY_PARAM = 'aglyn_internal'\n\n/**\n * The cookie that carries the same opt-in across every origin under one\n * domain. Same name as the storage key on purpose: one concept, and a browser\n * inspector shows the two halves of it side by side under one label.\n */\nexport const INTERNAL_TRAFFIC_COOKIE_KEY = 'aglyn_traffic_type'\n\n/**\n * 400 days, which is the ceiling Chrome clamps `Max-Age` to anyway. Expiry is\n * not a feature here — the opt-in is meant to be permanent, and a browser that\n * quietly forgets it puts our own browsing back into the launch metrics, which\n * a GA4 data filter cannot undo after the fact.\n */\nconst INTERNAL_TRAFFIC_COOKIE_MAX_AGE = 34_560_000\n\n/**\n * The values of `?aglyn_internal=` that turn the override OFF again. Anything\n * else present turns it on, so `?aglyn_internal` with no value works — that is\n * the form someone types from memory.\n */\nconst OFF_VALUES = new Set(['0', 'false', 'off', 'no'])\n\n/** The browser bits `readInternalTrafficOverride` needs, so a test can supply them. */\nexport interface InternalTrafficOverrideSource {\n /** `window.location.search`, leading `?` optional. */\n search?: string | null\n /** `window.localStorage`, or null where the browser refuses one. */\n storage?: Pick<Storage, 'getItem' | 'setItem' | 'removeItem'> | null\n /** `document.cookie`, for the READ half. Absent means no cookie source. */\n cookie?: string | null\n /**\n * The domain to scope the cookie WRITE to, bare (`aglyn.com`). Absent means\n * this call site does not write cookies at all, which is the default and\n * what every shared caller does — see the module comment. Only a call site\n * that has already established it is on a first-party host passes it.\n */\n cookieDomain?: string | null\n /** Where a written cookie goes. Defaults to `document.cookie`. */\n writeCookie?: ((serialized: string) => void) | null\n}\n\n/** Whether a `document.cookie` string carries our opt-in. Never throws. */\nfunction cookieSaysInternal(cookie: string | null | undefined): boolean {\n if (!cookie) return false\n for (const part of cookie.split(';')) {\n const eq = part.indexOf('=')\n if (eq < 0) continue\n if (part.slice(0, eq).trim() !== INTERNAL_TRAFFIC_COOKIE_KEY) continue\n return part.slice(eq + 1).trim() === INTERNAL_TRAFFIC_VALUE\n }\n return false\n}\n\n/**\n * Mirror the opt-in into the domain-wide cookie, when the call site asked for\n * it. A no-op everywhere else, which is every shared caller.\n *\n * `SameSite=Lax` and `Secure` because this rides to our own hosts and has no\n * cross-site job; clearing writes the same attributes with `Max-Age=0`,\n * because a cookie is only replaced by one whose domain and path match.\n */\nfunction writeInternalTrafficCookie(\n source: InternalTrafficOverrideSource,\n on: boolean,\n): void {\n const domain = source.cookieDomain\n if (!domain) return\n const write =\n source.writeCookie ??\n (typeof document === 'undefined'\n ? null\n : (serialized: string): void => {\n document.cookie = serialized\n })\n if (!write) return\n try {\n write(\n `${INTERNAL_TRAFFIC_COOKIE_KEY}=${on ? INTERNAL_TRAFFIC_VALUE : ''}` +\n `; Domain=.${domain}; Path=/; SameSite=Lax; Secure` +\n `; Max-Age=${on ? INTERNAL_TRAFFIC_COOKIE_MAX_AGE : 0}`,\n )\n } catch {\n // A refused cookie jar leaves `localStorage` holding the opt-in for this\n // origin, which is where it lived before this existed.\n }\n}\n\n/**\n * Whether THIS BROWSER has been declared one of ours, applying `?aglyn_internal`\n * first if it is on the URL.\n *\n * Reading and writing in one call is deliberate: the query parameter has to\n * take effect on the pageview that carries it, not on the next one, because\n * the pageview that carries it is already a hit. Persisting it here is what\n * makes the single `?aglyn_internal=1` visit enough.\n *\n * Never throws. A browser with `localStorage` disabled, a sandboxed iframe and\n * a server render all resolve to `false` — the not-internal direction, which\n * is the safe one.\n */\nexport function readInternalTrafficOverride(\n source?: InternalTrafficOverrideSource,\n): boolean {\n const resolved: InternalTrafficOverrideSource =\n source ??\n (typeof window === 'undefined'\n ? {}\n : {\n search: window.location?.search,\n storage: safeLocalStorage(),\n cookie: safeDocumentCookie(),\n })\n const storage = resolved.storage\n // Read the cookie BEFORE the storage gate. A browser that refuses\n // `localStorage` outright — Safari private mode, a partitioned frame — can\n // still be one of ours, and before AGL-3175 that browser was unpinnable.\n let cookieOn = cookieSaysInternal(resolved.cookie)\n if (!storage) return cookieOn\n try {\n const search = resolved.search\n if (search) {\n const requested = new URLSearchParams(\n search.startsWith('?') ? search.slice(1) : search,\n ).get(INTERNAL_TRAFFIC_QUERY_PARAM)\n if (requested !== null) {\n // Both halves move together, so `?aglyn_internal=0` really is an\n // off switch: clearing storage while the cookie still said `internal`\n // would leave the browser pinned with nothing local to show for it.\n if (OFF_VALUES.has(requested.toLowerCase())) {\n storage.removeItem(INTERNAL_TRAFFIC_STORAGE_KEY)\n writeInternalTrafficCookie(resolved, false)\n cookieOn = false\n } else {\n storage.setItem(INTERNAL_TRAFFIC_STORAGE_KEY, INTERNAL_TRAFFIC_VALUE)\n writeInternalTrafficCookie(resolved, true)\n cookieOn = true\n }\n }\n }\n return (\n cookieOn ||\n storage.getItem(INTERNAL_TRAFFIC_STORAGE_KEY) === INTERNAL_TRAFFIC_VALUE\n )\n } catch {\n // Storage access can throw outright (Safari private mode, a partitioned\n // third-party context). The cookie is the other half and may still answer.\n return cookieOn\n }\n}\n\n/** `document.cookie` where reaching for it does not throw, else null. */\nfunction safeDocumentCookie(): string | null {\n try {\n return typeof document === 'undefined' ? null : document.cookie\n } catch {\n return null\n }\n}\n\n/**\n * The override, pinned domain-wide rather than per origin (AGL-3175).\n *\n * For the console, which is the surface served on an open-ended set of\n * `*.aglyn.com` origins. The hostname check is the gate the module comment\n * describes: it is what guarantees no cookie is ever written on a customer's\n * custom domain, and it also keeps `localhost` and preview deployments — where\n * a `Secure` cookie for another domain would be rejected anyway — writing\n * nothing but `localStorage`, exactly as before.\n */\nexport function readInternalTrafficOverrideForDomain(\n domain: string | null | undefined,\n): boolean {\n if (typeof window === 'undefined') return false\n const host = window.location?.hostname ?? ''\n const underDomain =\n !!domain && (host === domain || host.endsWith(`.${domain}`))\n return readInternalTrafficOverride({\n search: window.location?.search,\n storage: safeLocalStorage(),\n cookie: safeDocumentCookie(),\n cookieDomain: underDomain ? domain : null,\n })\n}\n\n/** `window.localStorage` where reaching for it does not throw, else null. */\nfunction safeLocalStorage(): Storage | null {\n try {\n return window.localStorage ?? null\n } catch {\n return null\n }\n}\n\n/**\n * The same decision as `readInternalTrafficOverride`, as a CONSTANT string of\n * JavaScript, for the surfaces that drive gtag directly (AGL-2064).\n *\n * ## Why a string, and why it must stay constant\n *\n * The tenant runtime serves ISR-cached HTML: one cached document is handed to\n * every visitor, so nothing about this decision may be made while rendering.\n * A server-side branch would bake one browser's answer into the cache for\n * everyone, and a first-client-render branch would break hydration. Emitting\n * the same bytes to everyone and letting them decide AT RUNTIME, in the\n * browser, is the only shape that is both correct and cacheable — the same\n * move `consent.ready` makes one layer up.\n *\n * ## Why it must run before `gtag('config', …)`\n *\n * GA4's internal-traffic filter matches per EVENT, and the events that leak\n * are the ones no call site writes: `session_start`, `first_visit`,\n * `user_engagement` and the automatic `page_view`. A `gtag('set', …)` applies\n * to every hit gtag processes AFTER it in queue order, so placed between the\n * `dataLayer` shim and the `config` call it rides all of them. Placed after\n * `config` it would miss the session's first pageview — which is the whole\n * session, for a marketing visit.\n *\n * ## Safe to inline\n *\n * No interpolation, so nothing can inject; contains no `<` at all, so it\n * cannot close its own `<script>` element. It assumes only that a `gtag`\n * function is already defined, which is the line immediately above it in every\n * call site.\n */\nexport const INTERNAL_TRAFFIC_GTAG_SNIPPET =\n 'try{' +\n `var aq=new URLSearchParams(location.search).get('${INTERNAL_TRAFFIC_QUERY_PARAM}');` +\n 'if(aq!==null){' +\n `if(['${[...OFF_VALUES].join(\"','\")}'].indexOf(aq.toLowerCase())>=0)` +\n `localStorage.removeItem('${INTERNAL_TRAFFIC_STORAGE_KEY}');` +\n `else localStorage.setItem('${INTERNAL_TRAFFIC_STORAGE_KEY}','${INTERNAL_TRAFFIC_VALUE}');` +\n '}' +\n `if(localStorage.getItem('${INTERNAL_TRAFFIC_STORAGE_KEY}')==='${INTERNAL_TRAFFIC_VALUE}')` +\n `gtag('set',{'${INTERNAL_TRAFFIC_PARAM}':'${INTERNAL_TRAFFIC_VALUE}'});` +\n '}catch(e){}'\n\n/**\n * The stamp with no opt-in check at all, for a build that has already decided\n * every one of its hits is ours (AGL-2067).\n *\n * Used only where `analyticsEnvironmentForcesInternal()` holds: a\n * non-production build running with the analytics escape hatch on. Nobody\n * reaches that state by accident, so consulting the browser as well would only\n * create a way for it to be wrong.\n */\nexport const INTERNAL_TRAFFIC_FORCED_SNIPPET =\n `gtag('set',{'${INTERNAL_TRAFFIC_PARAM}':'${INTERNAL_TRAFFIC_VALUE}'});`\n\nexport default readInternalTrafficOverride\n"],"names":["INTERNAL_TRAFFIC_PARAM","INTERNAL_TRAFFIC_VALUE","INTERNAL_TRAFFIC_STORAGE_KEY","INTERNAL_TRAFFIC_QUERY_PARAM","INTERNAL_TRAFFIC_COOKIE_KEY","INTERNAL_TRAFFIC_COOKIE_MAX_AGE","OFF_VALUES","Set","cookieSaysInternal","cookie","part","split","eq","indexOf","slice","trim","writeInternalTrafficCookie","source","on","domain","cookieDomain","write","writeCookie","document","serialized","readInternalTrafficOverride","window","resolved","search","location","storage","safeLocalStorage","safeDocumentCookie","cookieOn","requested","URLSearchParams","startsWith","get","has","toLowerCase","removeItem","setItem","getItem","readInternalTrafficOverrideForDomain","host","hostname","underDomain","endsWith","localStorage","INTERNAL_TRAFFIC_GTAG_SNIPPET","join","INTERNAL_TRAFFIC_FORCED_SNIPPET"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;CAYC,GACD,OAAO,MAAMA,yBAAyB,eAAc;AACpD,OAAO,MAAMC,yBAAyB,WAAU;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuEC,GACD,OAAO,MAAMC,+BAA+B,qBAAoB;AAChE,OAAO,MAAMC,+BAA+B,iBAAgB;AAE5D;;;;CAIC,GACD,OAAO,MAAMC,8BAA8B,qBAAoB;AAE/D;;;;;CAKC,GACD,MAAMC,kCAAkC;AAExC;;;;CAIC,GACD,MAAMC,aAAa,IAAIC,IAAI;IAAC;IAAK;IAAS;IAAO;CAAK;AAqBtD,yEAAyE,GACzE,SAASC,mBAAmBC,MAAiC;IAC3D,IAAI,CAACA,QAAQ,OAAO;IACpB,KAAK,MAAMC,QAAQD,OAAOE,KAAK,CAAC,KAAM;QACpC,MAAMC,KAAKF,KAAKG,OAAO,CAAC;QACxB,IAAID,KAAK,GAAG;QACZ,IAAIF,KAAKI,KAAK,CAAC,GAAGF,IAAIG,IAAI,OAAOX,6BAA6B;QAC9D,OAAOM,KAAKI,KAAK,CAACF,KAAK,GAAGG,IAAI,OAAOd;IACvC;IACA,OAAO;AACT;AAEA;;;;;;;CAOC,GACD,SAASe,2BACPC,MAAqC,EACrCC,EAAW;QAKTD;IAHF,MAAME,SAASF,OAAOG,YAAY;IAClC,IAAI,CAACD,QAAQ;IACb,MAAME,SACJJ,sBAAAA,OAAOK,WAAW,YAAlBL,sBACC,OAAOM,aAAa,cACjB,OACA,CAACC;QACCD,SAASd,MAAM,GAAGe;IACpB;IACN,IAAI,CAACH,OAAO;IACZ,IAAI;QACFA,MACE,GAAGjB,4BAA4B,CAAC,EAAEc,KAAKjB,yBAAyB,IAAI,GAClE,CAAC,UAAU,EAAEkB,OAAO,8BAA8B,CAAC,GACnD,CAAC,UAAU,EAAED,KAAKb,kCAAkC,GAAG;IAE7D,EAAE,eAAM;IACN,yEAAyE;IACzE,uDAAuD;IACzD;AACF;AAEA;;;;;;;;;;;;CAYC,GACD,OAAO,SAASoB,4BACdR,MAAsC;QAOtBS;IALhB,MAAMC,WACJV,iBAAAA,SACC,OAAOS,WAAW,cACf,CAAC,IACD;QACEE,MAAM,GAAEF,mBAAAA,OAAOG,QAAQ,qBAAfH,iBAAiBE,MAAM;QAC/BE,SAASC;QACTtB,QAAQuB;IACV;IACN,MAAMF,UAAUH,SAASG,OAAO;IAChC,kEAAkE;IAClE,2EAA2E;IAC3E,yEAAyE;IACzE,IAAIG,WAAWzB,mBAAmBmB,SAASlB,MAAM;IACjD,IAAI,CAACqB,SAAS,OAAOG;IACrB,IAAI;QACF,MAAML,SAASD,SAASC,MAAM;QAC9B,IAAIA,QAAQ;YACV,MAAMM,YAAY,IAAIC,gBACpBP,OAAOQ,UAAU,CAAC,OAAOR,OAAOd,KAAK,CAAC,KAAKc,QAC3CS,GAAG,CAAClC;YACN,IAAI+B,cAAc,MAAM;gBACtB,iEAAiE;gBACjE,sEAAsE;gBACtE,oEAAoE;gBACpE,IAAI5B,WAAWgC,GAAG,CAACJ,UAAUK,WAAW,KAAK;oBAC3CT,QAAQU,UAAU,CAACtC;oBACnBc,2BAA2BW,UAAU;oBACrCM,WAAW;gBACb,OAAO;oBACLH,QAAQW,OAAO,CAACvC,8BAA8BD;oBAC9Ce,2BAA2BW,UAAU;oBACrCM,WAAW;gBACb;YACF;QACF;QACA,OACEA,YACAH,QAAQY,OAAO,CAACxC,kCAAkCD;IAEtD,EAAE,eAAM;QACN,wEAAwE;QACxE,2EAA2E;QAC3E,OAAOgC;IACT;AACF;AAEA,uEAAuE,GACvE,SAASD;IACP,IAAI;QACF,OAAO,OAAOT,aAAa,cAAc,OAAOA,SAASd,MAAM;IACjE,EAAE,eAAM;QACN,OAAO;IACT;AACF;AAEA;;;;;;;;;CASC,GACD,OAAO,SAASkC,qCACdxB,MAAiC;;QAGpBO,kBAIHA;IALV,IAAI,OAAOA,WAAW,aAAa,OAAO;IAC1C,MAAMkB,gBAAOlB,mBAAAA,OAAOG,QAAQ,qBAAfH,iBAAiBmB,QAAQ,mBAAI;IAC1C,MAAMC,cACJ,CAAC,CAAC3B,UAAWyB,CAAAA,SAASzB,UAAUyB,KAAKG,QAAQ,CAAC,CAAC,CAAC,EAAE5B,QAAQ,CAAA;IAC5D,OAAOM,4BAA4B;QACjCG,MAAM,GAAEF,oBAAAA,OAAOG,QAAQ,qBAAfH,kBAAiBE,MAAM;QAC/BE,SAASC;QACTtB,QAAQuB;QACRZ,cAAc0B,cAAc3B,SAAS;IACvC;AACF;AAEA,2EAA2E,GAC3E,SAASY;IACP,IAAI;YACKL;QAAP,QAAOA,uBAAAA,OAAOsB,YAAY,YAAnBtB,uBAAuB;IAChC,EAAE,eAAM;QACN,OAAO;IACT;AACF;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BC,GACD,OAAO,MAAMuB,gCACX,SACA,CAAC,iDAAiD,EAAE9C,6BAA6B,GAAG,CAAC,GACrF,mBACA,CAAC,KAAK,EAAE;OAAIG;CAAW,CAAC4C,IAAI,CAAC,OAAO,gCAAgC,CAAC,GACrE,CAAC,yBAAyB,EAAEhD,6BAA6B,GAAG,CAAC,GAC7D,CAAC,2BAA2B,EAAEA,6BAA6B,GAAG,EAAED,uBAAuB,GAAG,CAAC,GAC3F,MACA,CAAC,yBAAyB,EAAEC,6BAA6B,MAAM,EAAED,uBAAuB,EAAE,CAAC,GAC3F,CAAC,aAAa,EAAED,uBAAuB,GAAG,EAAEC,uBAAuB,IAAI,CAAC,GACxE,cAAa;AAEf;;;;;;;;CAQC,GACD,OAAO,MAAMkD,kCACX,CAAC,aAAa,EAAEnD,uBAAuB,GAAG,EAAEC,uBAAuB,IAAI,CAAC,CAAA;AAE1E,eAAewB,4BAA2B"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { LinealDirectiveFlag } from '../foundation/definitions/components.types';
|
|
18
|
+
import type { ComponentId, ComponentsLinealOrder, PluginId } from '../foundation/definitions/components.types';
|
|
19
|
+
/** A directive as a schema declares it, or as the generated palette carries it. */
|
|
20
|
+
/**
|
|
21
|
+
* A lineal order as a JSON emitter writes it (AGL-2905): the directive as
|
|
22
|
+
* the enum's string value rather than the enum, so a generated catalog can
|
|
23
|
+
* carry it and a validator can read it back without the enum in scope.
|
|
24
|
+
*/
|
|
25
|
+
export type JsonLinealOrder = [
|
|
26
|
+
directiveType: `${LinealDirectiveFlag}`,
|
|
27
|
+
directiveDefinition: string[] | {
|
|
28
|
+
plugins?: string[];
|
|
29
|
+
components?: string[];
|
|
30
|
+
}
|
|
31
|
+
];
|
|
32
|
+
export type LinealOrderLike = ComponentsLinealOrder | JsonLinealOrder;
|
|
33
|
+
/**
|
|
34
|
+
* Which half of a lineal directive a candidate fails, or `null` when the
|
|
35
|
+
* directive admits it.
|
|
36
|
+
*
|
|
37
|
+
* `restrictChildren` and `restrictParent` are one grammar — a `limitedTo` or
|
|
38
|
+
* `forbid` flag over a component list, a plugin list, or both — read from two
|
|
39
|
+
* sides: the besigner's drop check asks it about a dragged element, and the
|
|
40
|
+
* AI node-tree validator asks it about a node a model emitted. The answer has
|
|
41
|
+
* to be the same answer, so the rule lives here with no editor attached and
|
|
42
|
+
* both callers read it (AGL-2905).
|
|
43
|
+
*
|
|
44
|
+
* A `limitedTo` list that is present but empty admits nothing — that is how a
|
|
45
|
+
* component declares it takes no children at all (`layoutSlot`), and the
|
|
46
|
+
* child-contract audit reads the same shape the same way.
|
|
47
|
+
*/
|
|
48
|
+
export declare function checkLinealOrder(componentId: ComponentId | undefined, pluginId: PluginId | undefined, order: LinealOrderLike): 'component' | 'plugin' | null;
|
|
49
|
+
/**
|
|
50
|
+
* Whether `child` may sit directly under `parent`, reading the child's
|
|
51
|
+
* `restrictParent` and the parent's `restrictChildren` — the two directives
|
|
52
|
+
* the besigner's drop check consults, in that order.
|
|
53
|
+
*/
|
|
54
|
+
export declare function linealRelationshipPermits(child: {
|
|
55
|
+
componentId?: ComponentId;
|
|
56
|
+
pluginId?: PluginId;
|
|
57
|
+
restrictParent?: LinealOrderLike;
|
|
58
|
+
}, parent: {
|
|
59
|
+
componentId?: ComponentId;
|
|
60
|
+
pluginId?: PluginId;
|
|
61
|
+
restrictChildren?: LinealOrderLike;
|
|
62
|
+
}): boolean;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ import { LinealDirectiveFlag } from "../foundation/definitions/components.types.js";
|
|
17
|
+
/**
|
|
18
|
+
* Which half of a lineal directive a candidate fails, or `null` when the
|
|
19
|
+
* directive admits it.
|
|
20
|
+
*
|
|
21
|
+
* `restrictChildren` and `restrictParent` are one grammar — a `limitedTo` or
|
|
22
|
+
* `forbid` flag over a component list, a plugin list, or both — read from two
|
|
23
|
+
* sides: the besigner's drop check asks it about a dragged element, and the
|
|
24
|
+
* AI node-tree validator asks it about a node a model emitted. The answer has
|
|
25
|
+
* to be the same answer, so the rule lives here with no editor attached and
|
|
26
|
+
* both callers read it (AGL-2905).
|
|
27
|
+
*
|
|
28
|
+
* A `limitedTo` list that is present but empty admits nothing — that is how a
|
|
29
|
+
* component declares it takes no children at all (`layoutSlot`), and the
|
|
30
|
+
* child-contract audit reads the same shape the same way.
|
|
31
|
+
*/ export function checkLinealOrder(componentId, pluginId, order) {
|
|
32
|
+
const [directiveType, directiveDefinition] = order;
|
|
33
|
+
const flag = directiveType;
|
|
34
|
+
const components = Array.isArray(directiveDefinition) ? directiveDefinition : directiveDefinition == null ? void 0 : directiveDefinition.components;
|
|
35
|
+
const plugins = Array.isArray(directiveDefinition) ? undefined : directiveDefinition == null ? void 0 : directiveDefinition.plugins;
|
|
36
|
+
if (flag === LinealDirectiveFlag.DISALLOW) {
|
|
37
|
+
if (components == null ? void 0 : components.some((id)=>id === componentId)) return 'component';
|
|
38
|
+
if (plugins == null ? void 0 : plugins.some((id)=>id === pluginId)) return 'plugin';
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
if (flag === LinealDirectiveFlag.LIMIT_TO) {
|
|
42
|
+
if (Array.isArray(components) && (components.length === 0 || !components.some((id)=>id === componentId))) {
|
|
43
|
+
return 'component';
|
|
44
|
+
}
|
|
45
|
+
if (Array.isArray(plugins) && (plugins.length === 0 || !plugins.some((id)=>id === pluginId))) {
|
|
46
|
+
return 'plugin';
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Whether `child` may sit directly under `parent`, reading the child's
|
|
53
|
+
* `restrictParent` and the parent's `restrictChildren` — the two directives
|
|
54
|
+
* the besigner's drop check consults, in that order.
|
|
55
|
+
*/ export function linealRelationshipPermits(child, parent) {
|
|
56
|
+
if (child.restrictParent && checkLinealOrder(parent.componentId, parent.pluginId, child.restrictParent)) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
if (parent.restrictChildren && checkLinealOrder(child.componentId, child.pluginId, parent.restrictChildren)) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
//# sourceMappingURL=lineal-order.js.map
|