@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,142 @@
|
|
|
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
|
+
/** A single consent-mode signal value. */
|
|
18
|
+
export type PlatformConsentSignal = 'granted' | 'denied';
|
|
19
|
+
/**
|
|
20
|
+
* Switzerland, and why it is here but NOT in the tenant's set.
|
|
21
|
+
*
|
|
22
|
+
* Aglyn's own consent brief treats the EEA, the UK **and Switzerland** as
|
|
23
|
+
* prior opt-in, and none of those regions may be defaulted on. The tenant's
|
|
24
|
+
* {@link PRIOR_CONSENT_COUNTRY_CODES} does not include `CH` — defensibly, the
|
|
25
|
+
* revised FADP has no ePrivacy-style prior-consent rule and regulates on a
|
|
26
|
+
* transparency/opt-out basis — so the two sets genuinely disagree.
|
|
27
|
+
*
|
|
28
|
+
* That disagreement is resolved in the only direction that is safe to resolve
|
|
29
|
+
* unilaterally: Aglyn's OWN surfaces take the stricter reading, and the tenant
|
|
30
|
+
* set is left exactly as it is. Widening
|
|
31
|
+
* `PRIOR_CONSENT_COUNTRY_CODES` would flip Swiss visitors on every CUSTOMER
|
|
32
|
+
* site from tracked to banner-gated — a change to customers' compliance
|
|
33
|
+
* posture, made on their behalf, which is the specific thing this work is
|
|
34
|
+
* scoped out of.
|
|
35
|
+
*/
|
|
36
|
+
export declare const PLATFORM_EXTRA_PRIOR_CONSENT_CODES: readonly string[];
|
|
37
|
+
/**
|
|
38
|
+
* The regions whose analytics default is DENIED on Aglyn's own surfaces.
|
|
39
|
+
*
|
|
40
|
+
* DERIVED from the tenant's canonical prior-consent set rather than retyped
|
|
41
|
+
* beside it. Two hand-maintained country lists is how one of them ends up a
|
|
42
|
+
* year behind the other, and the failure is silent in both directions: a
|
|
43
|
+
* missing code tracks a European visitor by default, a stale extra one just
|
|
44
|
+
* loses data. Deriving means an EU membership change is edited once.
|
|
45
|
+
*
|
|
46
|
+
* Sorted so the emitted snippet is byte-stable across builds — the docs
|
|
47
|
+
* site's copy of it is checked character-for-character.
|
|
48
|
+
*/
|
|
49
|
+
export declare const PLATFORM_PRIOR_CONSENT_REGIONS: readonly string[];
|
|
50
|
+
/**
|
|
51
|
+
* The four signals a consent-mode declaration carries.
|
|
52
|
+
*
|
|
53
|
+
* All four are the full signal type. Pinning the three advertising ones to the
|
|
54
|
+
* literal `'denied'` made the type a second, silent policy — a declaration that
|
|
55
|
+
* granted advertising anywhere would not compile, so the surface could never
|
|
56
|
+
* take an ad tag without someone first noticing the type was the thing
|
|
57
|
+
* refusing. The policy belongs in the values below, where it can be read.
|
|
58
|
+
*/
|
|
59
|
+
export interface PlatformConsentSignals {
|
|
60
|
+
analytics_storage: PlatformConsentSignal;
|
|
61
|
+
ad_storage: PlatformConsentSignal;
|
|
62
|
+
ad_user_data: PlatformConsentSignal;
|
|
63
|
+
ad_personalization: PlatformConsentSignal;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* One `gtag('consent', 'default', …)` payload. `region` absent means the
|
|
67
|
+
* declaration applies wherever no region-scoped one matches.
|
|
68
|
+
*/
|
|
69
|
+
export interface PlatformConsentDefaultCommand extends PlatformConsentSignals {
|
|
70
|
+
region?: readonly string[];
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The declaration, in emission order.
|
|
74
|
+
*
|
|
75
|
+
* The global default comes first and grants analytics — the implied-consent
|
|
76
|
+
* posture, lawful in the US and most of the world. The region-scoped
|
|
77
|
+
* declaration follows and denies it for the prior-consent regions. Both are
|
|
78
|
+
* `default` (never `update`): a default is read before the tag's first hit,
|
|
79
|
+
* whereas an update arrives after `config` and would leave the session's
|
|
80
|
+
* first pageview — often the whole session — in the wrong state.
|
|
81
|
+
*/
|
|
82
|
+
export declare const PLATFORM_CONSENT_DEFAULT_COMMANDS: readonly PlatformConsentDefaultCommand[];
|
|
83
|
+
/**
|
|
84
|
+
* What the declaration above actually MEANS for a visitor in `country`.
|
|
85
|
+
*
|
|
86
|
+
* This exists so the defaults can be tested against the thing that ships
|
|
87
|
+
* rather than against a second copy of the same opinion. It reads
|
|
88
|
+
* {@link PLATFORM_CONSENT_DEFAULT_COMMANDS} and applies Google's documented
|
|
89
|
+
* resolution rule — the most specific matching `region` wins, and a
|
|
90
|
+
* declaration with no `region` is the fallback — so a test that asserts
|
|
91
|
+
* "DE is denied" fails the moment `DE` stops being in the emitted payload.
|
|
92
|
+
*
|
|
93
|
+
* `null`/unknown resolves to the GLOBAL default, which is `granted`. That is
|
|
94
|
+
* the declaration modelled honestly, not a wish: region matching is done by
|
|
95
|
+
* Google from the request IP, not by us, so "we do not know the country" is
|
|
96
|
+
* not a state this mechanism can act on. It is also the one place this module
|
|
97
|
+
* is weaker than the tenant gate, which resolves unknown-region to opt-in —
|
|
98
|
+
* another reason the tenant gate is the better mechanism where it can run.
|
|
99
|
+
*/
|
|
100
|
+
export declare function resolvePlatformConsentDefault(country: string | null | undefined): PlatformConsentSignals;
|
|
101
|
+
/**
|
|
102
|
+
* The declaration as an inline-script snippet.
|
|
103
|
+
*
|
|
104
|
+
* Built by serializing {@link PLATFORM_CONSENT_DEFAULT_COMMANDS} — no caller
|
|
105
|
+
* input reaches it and every value is a literal fixed at module load, which
|
|
106
|
+
* matters because it lands inside an inline `<script>` (the AGL-138 concern).
|
|
107
|
+
*
|
|
108
|
+
* Assumes the canonical `function gtag(){dataLayer.push(arguments);}` shim is
|
|
109
|
+
* already defined ABOVE it. gtag.js processes `arguments` objects, not plain
|
|
110
|
+
* arrays, so a `dataLayer.push([...])` here would be the classic silent
|
|
111
|
+
* no-op: no error, no consent declaration, and nothing in any GA report to
|
|
112
|
+
* show for it.
|
|
113
|
+
*
|
|
114
|
+
* `apps/docs` cannot import from `libs/` (AGL-1595), so the docs site carries
|
|
115
|
+
* a VERBATIM COPY of this string and
|
|
116
|
+
* `apps/console/specs/docs-platform-consent-snippet.spec.ts` fails if the two
|
|
117
|
+
* ever drift — the same treatment `INTERNAL_TRAFFIC_GTAG_SNIPPET` gets, and
|
|
118
|
+
* for the same reason: a stale copy still runs without error and still reads
|
|
119
|
+
* like a working declaration.
|
|
120
|
+
*/
|
|
121
|
+
export declare const PLATFORM_CONSENT_DEFAULT_SNIPPET: string;
|
|
122
|
+
/** The `dataLayer`-bearing window this module writes to. */
|
|
123
|
+
export interface ConsentDataLayerWindow {
|
|
124
|
+
dataLayer?: unknown[];
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Declare the defaults on a window, for surfaces that boot their tag from JS
|
|
128
|
+
* rather than from an inline script — i.e. the console, whose gtag is
|
|
129
|
+
* injected by the Firebase Analytics SDK.
|
|
130
|
+
*
|
|
131
|
+
* MUST be called before the SDK initializes, because a `default` read after
|
|
132
|
+
* the tag's `config` is not a default at all. The queue is what makes that
|
|
133
|
+
* orderable: pushing here lands the declaration in `dataLayer` ahead of
|
|
134
|
+
* everything gtag.js later processes, even though gtag.js is not loaded yet.
|
|
135
|
+
*
|
|
136
|
+
* Pushes a real `arguments` object, never an array literal — see the snippet
|
|
137
|
+
* note above for what the array form silently does.
|
|
138
|
+
*
|
|
139
|
+
* Idempotent per window: a second call is a no-op, so a remount or a
|
|
140
|
+
* re-entrant services boot cannot stack duplicate declarations.
|
|
141
|
+
*/
|
|
142
|
+
export declare function pushPlatformConsentDefault(win: ConsentDataLayerWindow | null | undefined): boolean;
|
|
@@ -0,0 +1,295 @@
|
|
|
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 Consent Mode v2 `default` declaration for AGLYN'S OWN surfaces — the
|
|
18
|
+
* console (`app.aglyn.com`) and the docs site (`docs.aglyn.com`) (AGL-1597).
|
|
19
|
+
*
|
|
20
|
+
* the decision, 2026-08-20: analytics is ENABLED BY DEFAULT with implied
|
|
21
|
+
* consent **where that is lawful**, and denied by default where prior consent
|
|
22
|
+
* is required. This module is the "where applicable" half, expressed in the
|
|
23
|
+
* one mechanism that can carry it on a surface with no consent gate: a
|
|
24
|
+
* region-scoped `gtag('consent', 'default', …)`.
|
|
25
|
+
*
|
|
26
|
+
* ## Which surfaces this is for, and — load-bearing — which it is NOT
|
|
27
|
+
*
|
|
28
|
+
* Aglyn runs GA4 `G-YW5PG16YTM` on three of its own domains, and they did not
|
|
29
|
+
* arrive at the same posture:
|
|
30
|
+
*
|
|
31
|
+
* - **`aglyn.com`** — served by the TENANT runtime, so it already runs the
|
|
32
|
+
* full AGL-1498 gate: a Firestore `consent.mode`, `/api/consent/region`, a
|
|
33
|
+
* per-visitor record in localStorage, and a tag that never LOADS for a
|
|
34
|
+
* visitor who has not granted. It is already default-on outside the
|
|
35
|
+
* prior-consent regions. **This module does not touch it and must not.**
|
|
36
|
+
*
|
|
37
|
+
* ⚠️ Its AD signals DIVERGE from this module's, and that is expected rather
|
|
38
|
+
* than a defect — the two domains answer to different rules and always have.
|
|
39
|
+
* The history is worth carrying because the divergence has flipped twice:
|
|
40
|
+
* AGL-2402 (2026-08-21) let the implied default carry advertising, the
|
|
41
|
+
* marketing host had opted into asking, and a US visitor was measured on
|
|
42
|
+
* 2026-08-23 with the record
|
|
43
|
+
* `{"status":"implied","analytics":true,"advertising":true,"country":"US"}`
|
|
44
|
+
* and a collect hit carrying `gcs=G111` — ad storage GRANTED. That was
|
|
45
|
+
* narrowed back on 2026-08-24 and widened again on 2026-08-25 once the
|
|
46
|
+
* Cookie Policy master was rewritten to match the Privacy Policy's opt-out
|
|
47
|
+
* description, so the 2026-08-23 measurement is once more the shape the
|
|
48
|
+
* current rule produces.
|
|
49
|
+
*
|
|
50
|
+
* This module now takes the SAME advertising posture for `app.aglyn.com`,
|
|
51
|
+
* which stopped being the asymmetry it once was once the console grew the
|
|
52
|
+
* surfaces an implied grant rests on: a per-visitor record, an account-menu
|
|
53
|
+
* control, and the CCPA §7015 pill on the unauthenticated pages. An implied
|
|
54
|
+
* grant needs a visitor who COULD have said no, and there they can.
|
|
55
|
+
*
|
|
56
|
+
* `docs.aglyn.com` still cannot ask anybody anything, which is exactly why
|
|
57
|
+
* its non-Google advertising tags do not run on this declaration at all —
|
|
58
|
+
* they run on the console's record, mirrored across the registrable domain.
|
|
59
|
+
* This declaration reaches the tags that read Consent Mode, and nothing
|
|
60
|
+
* else does read it.
|
|
61
|
+
*
|
|
62
|
+
* ⛔ Re-measure `aglyn.com` before relying on any comparison here; the
|
|
63
|
+
* numbers above are a record of what was seen, not a claim about today.
|
|
64
|
+
* - **`app.aglyn.com` and `docs.aglyn.com`** — GA loads unconditionally on
|
|
65
|
+
* both (no gate can run here), and BEFORE this module they carried no
|
|
66
|
+
* consent declaration of any kind. That was not "default on where lawful";
|
|
67
|
+
* it was default on EVERYWHERE, prior-consent regions included, which is the
|
|
68
|
+
* gap AGL-1597 was filed for. These two are what this module is wired into.
|
|
69
|
+
*
|
|
70
|
+
* On the docs side, being wired in was not enough on its own: the
|
|
71
|
+
* declaration was emitted but landed AFTER the gtag preset's `config`, which
|
|
72
|
+
* makes it a no-op. See the `ssrTemplate` note in
|
|
73
|
+
* `apps/docs/docusaurus.config.ts` — position matters as much as presence.
|
|
74
|
+
* - **Customer/tenant sites** — NOT in scope by a wide margin. Aglyn ships
|
|
75
|
+
* the consent gate to customers as a product (AGL-1498) and the host
|
|
76
|
+
* chooses the posture. Changing their default would configure a customer's
|
|
77
|
+
* compliance posture for them, for visitors who may well be European. The
|
|
78
|
+
* separation here is structural rather than a matter of care: this module
|
|
79
|
+
* is imported only by the console's Firebase Analytics boot and copied into
|
|
80
|
+
* the docs site's `ssrTemplate` bootstrap. Nothing in the tenant runtime
|
|
81
|
+
* reads it, and
|
|
82
|
+
* `visitor-consent.ts` — the tenant's decision module — is unchanged.
|
|
83
|
+
*
|
|
84
|
+
* ## Why a region-scoped `default` here, and not the tenant's gate
|
|
85
|
+
*
|
|
86
|
+
* The tenant gate is strictly stronger: the tag never loads at all for a
|
|
87
|
+
* gated visitor. It is also unavailable here. It needs a host document, a
|
|
88
|
+
* per-host storage key and a region endpoint, none of which exist on a static
|
|
89
|
+
* Docusaurus build or on the console's Firebase-owned tag — and porting it
|
|
90
|
+
* would be a third implementation of consent, the outcome AGL-1579 explicitly
|
|
91
|
+
* ruled out. So this is the weaker mechanism applied where the stronger one
|
|
92
|
+
* cannot reach, and it is strictly better than what it replaces (nothing).
|
|
93
|
+
*
|
|
94
|
+
* It is NOT equivalent, and the difference should be stated rather than
|
|
95
|
+
* glossed: under a denied `analytics_storage` the tag still LOADS and still
|
|
96
|
+
* sends cookieless pings. That is a real residual question for the EEA/UK,
|
|
97
|
+
* and it is flagged on AGL-1597 rather than papered over here.
|
|
98
|
+
*
|
|
99
|
+
* ## The ad signals
|
|
100
|
+
*
|
|
101
|
+
* `ad_storage`, `ad_user_data` and `ad_personalization` are GRANTED in the
|
|
102
|
+
* global default and DENIED in the region-scoped one, which is the same split
|
|
103
|
+
* `analytics_storage` takes and for the same reason: outside the prior-consent
|
|
104
|
+
* regions the posture is implied consent, and Aglyn advertises, remarkets and
|
|
105
|
+
* retargets across all of its own surfaces. A visitor in the EEA, the UK or
|
|
106
|
+
* Switzerland gets all four denied until they accept.
|
|
107
|
+
*
|
|
108
|
+
* All three signals matter separately and Google treats them separately. A
|
|
109
|
+
* declaration granting `ad_storage` alone leaves remarketing collecting
|
|
110
|
+
* nothing while the tag looks perfectly healthy in GA4 — hits are sent, the
|
|
111
|
+
* property fills up, and the audience stays empty. Read
|
|
112
|
+
* {@link PLATFORM_CONSENT_DEFAULT_COMMANDS} rather than this paragraph if the
|
|
113
|
+
* two ever disagree; the commands are what ships.
|
|
114
|
+
*
|
|
115
|
+
* The console does have a place to record an answer — a per-visitor record,
|
|
116
|
+
* an account-menu control and the CCPA §7015 pill on its unauthenticated
|
|
117
|
+
* pages — and {@link platformAsksAboutAdvertising} derives the question from
|
|
118
|
+
* these very commands, so the control and the declaration cannot drift apart.
|
|
119
|
+
* The docs site has neither, which is why the tags it mounts are gated on the
|
|
120
|
+
* console's record rather than on this declaration; see
|
|
121
|
+
* `apps/docs/src/advertising-tags.ts`.
|
|
122
|
+
*
|
|
123
|
+
* Before this module these surfaces declared nothing at all, which left a
|
|
124
|
+
* freshly loaded tag with ad storage UNRESTRICTED in every region — so the
|
|
125
|
+
* region-scoped denial below was a tightening, not a preference.
|
|
126
|
+
*/ import { PRIOR_CONSENT_COUNTRY_CODES } from "./visitor-consent.js";
|
|
127
|
+
/**
|
|
128
|
+
* Switzerland, and why it is here but NOT in the tenant's set.
|
|
129
|
+
*
|
|
130
|
+
* Aglyn's own consent brief treats the EEA, the UK **and Switzerland** as
|
|
131
|
+
* prior opt-in, and none of those regions may be defaulted on. The tenant's
|
|
132
|
+
* {@link PRIOR_CONSENT_COUNTRY_CODES} does not include `CH` — defensibly, the
|
|
133
|
+
* revised FADP has no ePrivacy-style prior-consent rule and regulates on a
|
|
134
|
+
* transparency/opt-out basis — so the two sets genuinely disagree.
|
|
135
|
+
*
|
|
136
|
+
* That disagreement is resolved in the only direction that is safe to resolve
|
|
137
|
+
* unilaterally: Aglyn's OWN surfaces take the stricter reading, and the tenant
|
|
138
|
+
* set is left exactly as it is. Widening
|
|
139
|
+
* `PRIOR_CONSENT_COUNTRY_CODES` would flip Swiss visitors on every CUSTOMER
|
|
140
|
+
* site from tracked to banner-gated — a change to customers' compliance
|
|
141
|
+
* posture, made on their behalf, which is the specific thing this work is
|
|
142
|
+
* scoped out of.
|
|
143
|
+
*/ export const PLATFORM_EXTRA_PRIOR_CONSENT_CODES = [
|
|
144
|
+
'CH'
|
|
145
|
+
];
|
|
146
|
+
/**
|
|
147
|
+
* The regions whose analytics default is DENIED on Aglyn's own surfaces.
|
|
148
|
+
*
|
|
149
|
+
* DERIVED from the tenant's canonical prior-consent set rather than retyped
|
|
150
|
+
* beside it. Two hand-maintained country lists is how one of them ends up a
|
|
151
|
+
* year behind the other, and the failure is silent in both directions: a
|
|
152
|
+
* missing code tracks a European visitor by default, a stale extra one just
|
|
153
|
+
* loses data. Deriving means an EU membership change is edited once.
|
|
154
|
+
*
|
|
155
|
+
* Sorted so the emitted snippet is byte-stable across builds — the docs
|
|
156
|
+
* site's copy of it is checked character-for-character.
|
|
157
|
+
*/ export const PLATFORM_PRIOR_CONSENT_REGIONS = [
|
|
158
|
+
...new Set([
|
|
159
|
+
...PRIOR_CONSENT_COUNTRY_CODES,
|
|
160
|
+
...PLATFORM_EXTRA_PRIOR_CONSENT_CODES
|
|
161
|
+
])
|
|
162
|
+
].sort();
|
|
163
|
+
/**
|
|
164
|
+
* The declaration, in emission order.
|
|
165
|
+
*
|
|
166
|
+
* The global default comes first and grants analytics — the implied-consent
|
|
167
|
+
* posture, lawful in the US and most of the world. The region-scoped
|
|
168
|
+
* declaration follows and denies it for the prior-consent regions. Both are
|
|
169
|
+
* `default` (never `update`): a default is read before the tag's first hit,
|
|
170
|
+
* whereas an update arrives after `config` and would leave the session's
|
|
171
|
+
* first pageview — often the whole session — in the wrong state.
|
|
172
|
+
*/ export const PLATFORM_CONSENT_DEFAULT_COMMANDS = [
|
|
173
|
+
{
|
|
174
|
+
analytics_storage: 'granted',
|
|
175
|
+
/*
|
|
176
|
+
* Advertising is granted here for the same reason analytics is: outside
|
|
177
|
+
* the prior-consent regions the posture is implied consent, and Aglyn
|
|
178
|
+
* advertises, remarkets and retargets across all of its own surfaces —
|
|
179
|
+
* the marketing site, this console and the docs. The Privacy Policy names
|
|
180
|
+
* the console among them.
|
|
181
|
+
*
|
|
182
|
+
* The region-scoped declaration below still denies all four for the
|
|
183
|
+
* UK/EU/EEA/CH set, and a visitor there gets nothing until they accept.
|
|
184
|
+
*/ ad_storage: 'granted',
|
|
185
|
+
ad_user_data: 'granted',
|
|
186
|
+
ad_personalization: 'granted'
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
analytics_storage: 'denied',
|
|
190
|
+
ad_storage: 'denied',
|
|
191
|
+
ad_user_data: 'denied',
|
|
192
|
+
ad_personalization: 'denied',
|
|
193
|
+
region: PLATFORM_PRIOR_CONSENT_REGIONS
|
|
194
|
+
}
|
|
195
|
+
];
|
|
196
|
+
/**
|
|
197
|
+
* What the declaration above actually MEANS for a visitor in `country`.
|
|
198
|
+
*
|
|
199
|
+
* This exists so the defaults can be tested against the thing that ships
|
|
200
|
+
* rather than against a second copy of the same opinion. It reads
|
|
201
|
+
* {@link PLATFORM_CONSENT_DEFAULT_COMMANDS} and applies Google's documented
|
|
202
|
+
* resolution rule — the most specific matching `region` wins, and a
|
|
203
|
+
* declaration with no `region` is the fallback — so a test that asserts
|
|
204
|
+
* "DE is denied" fails the moment `DE` stops being in the emitted payload.
|
|
205
|
+
*
|
|
206
|
+
* `null`/unknown resolves to the GLOBAL default, which is `granted`. That is
|
|
207
|
+
* the declaration modelled honestly, not a wish: region matching is done by
|
|
208
|
+
* Google from the request IP, not by us, so "we do not know the country" is
|
|
209
|
+
* not a state this mechanism can act on. It is also the one place this module
|
|
210
|
+
* is weaker than the tenant gate, which resolves unknown-region to opt-in —
|
|
211
|
+
* another reason the tenant gate is the better mechanism where it can run.
|
|
212
|
+
*/ export function resolvePlatformConsentDefault(country) {
|
|
213
|
+
const code = typeof country === 'string' ? country.trim().toUpperCase() : '';
|
|
214
|
+
let fallback = null;
|
|
215
|
+
let matched = null;
|
|
216
|
+
for (const command of PLATFORM_CONSENT_DEFAULT_COMMANDS){
|
|
217
|
+
if (command.region === undefined) {
|
|
218
|
+
fallback = command;
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
// `strictNullChecks` is off repo-wide, so `!code` would also swallow a
|
|
222
|
+
// genuine miss; compare explicitly.
|
|
223
|
+
if (code !== '' && command.region.indexOf(code) >= 0) matched = command;
|
|
224
|
+
}
|
|
225
|
+
const winner = matched === null ? fallback : matched;
|
|
226
|
+
/*
|
|
227
|
+
* Every signal is READ off the winning command. Restating the advertising
|
|
228
|
+
* three as literals here made this resolver a second declaration that could
|
|
229
|
+
* disagree with the one that ships — and it did: the emitted global default
|
|
230
|
+
* granted them while this said denied, so a test asserting the resolver
|
|
231
|
+
* proved nothing about the snippet in the page.
|
|
232
|
+
*/ return {
|
|
233
|
+
analytics_storage: winner.analytics_storage,
|
|
234
|
+
ad_storage: winner.ad_storage,
|
|
235
|
+
ad_user_data: winner.ad_user_data,
|
|
236
|
+
ad_personalization: winner.ad_personalization
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* The declaration as an inline-script snippet.
|
|
241
|
+
*
|
|
242
|
+
* Built by serializing {@link PLATFORM_CONSENT_DEFAULT_COMMANDS} — no caller
|
|
243
|
+
* input reaches it and every value is a literal fixed at module load, which
|
|
244
|
+
* matters because it lands inside an inline `<script>` (the AGL-138 concern).
|
|
245
|
+
*
|
|
246
|
+
* Assumes the canonical `function gtag(){dataLayer.push(arguments);}` shim is
|
|
247
|
+
* already defined ABOVE it. gtag.js processes `arguments` objects, not plain
|
|
248
|
+
* arrays, so a `dataLayer.push([...])` here would be the classic silent
|
|
249
|
+
* no-op: no error, no consent declaration, and nothing in any GA report to
|
|
250
|
+
* show for it.
|
|
251
|
+
*
|
|
252
|
+
* `apps/docs` cannot import from `libs/` (AGL-1595), so the docs site carries
|
|
253
|
+
* a VERBATIM COPY of this string and
|
|
254
|
+
* `apps/console/specs/docs-platform-consent-snippet.spec.ts` fails if the two
|
|
255
|
+
* ever drift — the same treatment `INTERNAL_TRAFFIC_GTAG_SNIPPET` gets, and
|
|
256
|
+
* for the same reason: a stale copy still runs without error and still reads
|
|
257
|
+
* like a working declaration.
|
|
258
|
+
*/ export const PLATFORM_CONSENT_DEFAULT_SNIPPET = PLATFORM_CONSENT_DEFAULT_COMMANDS.map((command)=>`gtag('consent','default',${JSON.stringify(command)});`).join('');
|
|
259
|
+
/**
|
|
260
|
+
* Declare the defaults on a window, for surfaces that boot their tag from JS
|
|
261
|
+
* rather than from an inline script — i.e. the console, whose gtag is
|
|
262
|
+
* injected by the Firebase Analytics SDK.
|
|
263
|
+
*
|
|
264
|
+
* MUST be called before the SDK initializes, because a `default` read after
|
|
265
|
+
* the tag's `config` is not a default at all. The queue is what makes that
|
|
266
|
+
* orderable: pushing here lands the declaration in `dataLayer` ahead of
|
|
267
|
+
* everything gtag.js later processes, even though gtag.js is not loaded yet.
|
|
268
|
+
*
|
|
269
|
+
* Pushes a real `arguments` object, never an array literal — see the snippet
|
|
270
|
+
* note above for what the array form silently does.
|
|
271
|
+
*
|
|
272
|
+
* Idempotent per window: a second call is a no-op, so a remount or a
|
|
273
|
+
* re-entrant services boot cannot stack duplicate declarations.
|
|
274
|
+
*/ export function pushPlatformConsentDefault(win) {
|
|
275
|
+
if (!win) return false;
|
|
276
|
+
const marked = win;
|
|
277
|
+
if (marked.__aglynConsentDefaultPushed === true) return false;
|
|
278
|
+
const layer = win.dataLayer === undefined ? [] : win.dataLayer;
|
|
279
|
+
win.dataLayer = layer;
|
|
280
|
+
// Declared without parameters ON PURPOSE: the body forwards the live
|
|
281
|
+
// `arguments` object, and a rest parameter would hand gtag.js a plain
|
|
282
|
+
// array instead.
|
|
283
|
+
function gtag() {
|
|
284
|
+
// eslint-disable-next-line prefer-rest-params
|
|
285
|
+
layer.push(arguments);
|
|
286
|
+
}
|
|
287
|
+
const queue = gtag;
|
|
288
|
+
for (const command of PLATFORM_CONSENT_DEFAULT_COMMANDS){
|
|
289
|
+
queue('consent', 'default', command);
|
|
290
|
+
}
|
|
291
|
+
marked.__aglynConsentDefaultPushed = true;
|
|
292
|
+
return true;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
//# sourceMappingURL=platform-consent-default.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/platform-consent-default.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 Consent Mode v2 `default` declaration for AGLYN'S OWN surfaces — the\n * console (`app.aglyn.com`) and the docs site (`docs.aglyn.com`) (AGL-1597).\n *\n * the decision, 2026-08-20: analytics is ENABLED BY DEFAULT with implied\n * consent **where that is lawful**, and denied by default where prior consent\n * is required. This module is the \"where applicable\" half, expressed in the\n * one mechanism that can carry it on a surface with no consent gate: a\n * region-scoped `gtag('consent', 'default', …)`.\n *\n * ## Which surfaces this is for, and — load-bearing — which it is NOT\n *\n * Aglyn runs GA4 `G-YW5PG16YTM` on three of its own domains, and they did not\n * arrive at the same posture:\n *\n * - **`aglyn.com`** — served by the TENANT runtime, so it already runs the\n * full AGL-1498 gate: a Firestore `consent.mode`, `/api/consent/region`, a\n * per-visitor record in localStorage, and a tag that never LOADS for a\n * visitor who has not granted. It is already default-on outside the\n * prior-consent regions. **This module does not touch it and must not.**\n *\n * ⚠️ Its AD signals DIVERGE from this module's, and that is expected rather\n * than a defect — the two domains answer to different rules and always have.\n * The history is worth carrying because the divergence has flipped twice:\n * AGL-2402 (2026-08-21) let the implied default carry advertising, the\n * marketing host had opted into asking, and a US visitor was measured on\n * 2026-08-23 with the record\n * `{\"status\":\"implied\",\"analytics\":true,\"advertising\":true,\"country\":\"US\"}`\n * and a collect hit carrying `gcs=G111` — ad storage GRANTED. That was\n * narrowed back on 2026-08-24 and widened again on 2026-08-25 once the\n * Cookie Policy master was rewritten to match the Privacy Policy's opt-out\n * description, so the 2026-08-23 measurement is once more the shape the\n * current rule produces.\n *\n * This module now takes the SAME advertising posture for `app.aglyn.com`,\n * which stopped being the asymmetry it once was once the console grew the\n * surfaces an implied grant rests on: a per-visitor record, an account-menu\n * control, and the CCPA §7015 pill on the unauthenticated pages. An implied\n * grant needs a visitor who COULD have said no, and there they can.\n *\n * `docs.aglyn.com` still cannot ask anybody anything, which is exactly why\n * its non-Google advertising tags do not run on this declaration at all —\n * they run on the console's record, mirrored across the registrable domain.\n * This declaration reaches the tags that read Consent Mode, and nothing\n * else does read it.\n *\n * ⛔ Re-measure `aglyn.com` before relying on any comparison here; the\n * numbers above are a record of what was seen, not a claim about today.\n * - **`app.aglyn.com` and `docs.aglyn.com`** — GA loads unconditionally on\n * both (no gate can run here), and BEFORE this module they carried no\n * consent declaration of any kind. That was not \"default on where lawful\";\n * it was default on EVERYWHERE, prior-consent regions included, which is the\n * gap AGL-1597 was filed for. These two are what this module is wired into.\n *\n * On the docs side, being wired in was not enough on its own: the\n * declaration was emitted but landed AFTER the gtag preset's `config`, which\n * makes it a no-op. See the `ssrTemplate` note in\n * `apps/docs/docusaurus.config.ts` — position matters as much as presence.\n * - **Customer/tenant sites** — NOT in scope by a wide margin. Aglyn ships\n * the consent gate to customers as a product (AGL-1498) and the host\n * chooses the posture. Changing their default would configure a customer's\n * compliance posture for them, for visitors who may well be European. The\n * separation here is structural rather than a matter of care: this module\n * is imported only by the console's Firebase Analytics boot and copied into\n * the docs site's `ssrTemplate` bootstrap. Nothing in the tenant runtime\n * reads it, and\n * `visitor-consent.ts` — the tenant's decision module — is unchanged.\n *\n * ## Why a region-scoped `default` here, and not the tenant's gate\n *\n * The tenant gate is strictly stronger: the tag never loads at all for a\n * gated visitor. It is also unavailable here. It needs a host document, a\n * per-host storage key and a region endpoint, none of which exist on a static\n * Docusaurus build or on the console's Firebase-owned tag — and porting it\n * would be a third implementation of consent, the outcome AGL-1579 explicitly\n * ruled out. So this is the weaker mechanism applied where the stronger one\n * cannot reach, and it is strictly better than what it replaces (nothing).\n *\n * It is NOT equivalent, and the difference should be stated rather than\n * glossed: under a denied `analytics_storage` the tag still LOADS and still\n * sends cookieless pings. That is a real residual question for the EEA/UK,\n * and it is flagged on AGL-1597 rather than papered over here.\n *\n * ## The ad signals\n *\n * `ad_storage`, `ad_user_data` and `ad_personalization` are GRANTED in the\n * global default and DENIED in the region-scoped one, which is the same split\n * `analytics_storage` takes and for the same reason: outside the prior-consent\n * regions the posture is implied consent, and Aglyn advertises, remarkets and\n * retargets across all of its own surfaces. A visitor in the EEA, the UK or\n * Switzerland gets all four denied until they accept.\n *\n * All three signals matter separately and Google treats them separately. A\n * declaration granting `ad_storage` alone leaves remarketing collecting\n * nothing while the tag looks perfectly healthy in GA4 — hits are sent, the\n * property fills up, and the audience stays empty. Read\n * {@link PLATFORM_CONSENT_DEFAULT_COMMANDS} rather than this paragraph if the\n * two ever disagree; the commands are what ships.\n *\n * The console does have a place to record an answer — a per-visitor record,\n * an account-menu control and the CCPA §7015 pill on its unauthenticated\n * pages — and {@link platformAsksAboutAdvertising} derives the question from\n * these very commands, so the control and the declaration cannot drift apart.\n * The docs site has neither, which is why the tags it mounts are gated on the\n * console's record rather than on this declaration; see\n * `apps/docs/src/advertising-tags.ts`.\n *\n * Before this module these surfaces declared nothing at all, which left a\n * freshly loaded tag with ad storage UNRESTRICTED in every region — so the\n * region-scoped denial below was a tightening, not a preference.\n */\n\nimport { PRIOR_CONSENT_COUNTRY_CODES } from './visitor-consent'\n\n/** A single consent-mode signal value. */\nexport type PlatformConsentSignal = 'granted' | 'denied'\n\n/**\n * Switzerland, and why it is here but NOT in the tenant's set.\n *\n * Aglyn's own consent brief treats the EEA, the UK **and Switzerland** as\n * prior opt-in, and none of those regions may be defaulted on. The tenant's\n * {@link PRIOR_CONSENT_COUNTRY_CODES} does not include `CH` — defensibly, the\n * revised FADP has no ePrivacy-style prior-consent rule and regulates on a\n * transparency/opt-out basis — so the two sets genuinely disagree.\n *\n * That disagreement is resolved in the only direction that is safe to resolve\n * unilaterally: Aglyn's OWN surfaces take the stricter reading, and the tenant\n * set is left exactly as it is. Widening\n * `PRIOR_CONSENT_COUNTRY_CODES` would flip Swiss visitors on every CUSTOMER\n * site from tracked to banner-gated — a change to customers' compliance\n * posture, made on their behalf, which is the specific thing this work is\n * scoped out of.\n */\nexport const PLATFORM_EXTRA_PRIOR_CONSENT_CODES: readonly string[] = ['CH']\n\n/**\n * The regions whose analytics default is DENIED on Aglyn's own surfaces.\n *\n * DERIVED from the tenant's canonical prior-consent set rather than retyped\n * beside it. Two hand-maintained country lists is how one of them ends up a\n * year behind the other, and the failure is silent in both directions: a\n * missing code tracks a European visitor by default, a stale extra one just\n * loses data. Deriving means an EU membership change is edited once.\n *\n * Sorted so the emitted snippet is byte-stable across builds — the docs\n * site's copy of it is checked character-for-character.\n */\nexport const PLATFORM_PRIOR_CONSENT_REGIONS: readonly string[] = [\n ...new Set([\n ...PRIOR_CONSENT_COUNTRY_CODES,\n ...PLATFORM_EXTRA_PRIOR_CONSENT_CODES,\n ]),\n].sort()\n\n/**\n * The four signals a consent-mode declaration carries.\n *\n * All four are the full signal type. Pinning the three advertising ones to the\n * literal `'denied'` made the type a second, silent policy — a declaration that\n * granted advertising anywhere would not compile, so the surface could never\n * take an ad tag without someone first noticing the type was the thing\n * refusing. The policy belongs in the values below, where it can be read.\n */\nexport interface PlatformConsentSignals {\n analytics_storage: PlatformConsentSignal\n ad_storage: PlatformConsentSignal\n ad_user_data: PlatformConsentSignal\n ad_personalization: PlatformConsentSignal\n}\n\n/**\n * One `gtag('consent', 'default', …)` payload. `region` absent means the\n * declaration applies wherever no region-scoped one matches.\n */\nexport interface PlatformConsentDefaultCommand extends PlatformConsentSignals {\n region?: readonly string[]\n}\n\n/**\n * The declaration, in emission order.\n *\n * The global default comes first and grants analytics — the implied-consent\n * posture, lawful in the US and most of the world. The region-scoped\n * declaration follows and denies it for the prior-consent regions. Both are\n * `default` (never `update`): a default is read before the tag's first hit,\n * whereas an update arrives after `config` and would leave the session's\n * first pageview — often the whole session — in the wrong state.\n */\nexport const PLATFORM_CONSENT_DEFAULT_COMMANDS: readonly PlatformConsentDefaultCommand[] =\n [\n {\n analytics_storage: 'granted',\n /*\n * Advertising is granted here for the same reason analytics is: outside\n * the prior-consent regions the posture is implied consent, and Aglyn\n * advertises, remarkets and retargets across all of its own surfaces —\n * the marketing site, this console and the docs. The Privacy Policy names\n * the console among them.\n *\n * The region-scoped declaration below still denies all four for the\n * UK/EU/EEA/CH set, and a visitor there gets nothing until they accept.\n */\n ad_storage: 'granted',\n ad_user_data: 'granted',\n ad_personalization: 'granted',\n },\n {\n analytics_storage: 'denied',\n ad_storage: 'denied',\n ad_user_data: 'denied',\n ad_personalization: 'denied',\n region: PLATFORM_PRIOR_CONSENT_REGIONS,\n },\n ]\n\n/**\n * What the declaration above actually MEANS for a visitor in `country`.\n *\n * This exists so the defaults can be tested against the thing that ships\n * rather than against a second copy of the same opinion. It reads\n * {@link PLATFORM_CONSENT_DEFAULT_COMMANDS} and applies Google's documented\n * resolution rule — the most specific matching `region` wins, and a\n * declaration with no `region` is the fallback — so a test that asserts\n * \"DE is denied\" fails the moment `DE` stops being in the emitted payload.\n *\n * `null`/unknown resolves to the GLOBAL default, which is `granted`. That is\n * the declaration modelled honestly, not a wish: region matching is done by\n * Google from the request IP, not by us, so \"we do not know the country\" is\n * not a state this mechanism can act on. It is also the one place this module\n * is weaker than the tenant gate, which resolves unknown-region to opt-in —\n * another reason the tenant gate is the better mechanism where it can run.\n */\nexport function resolvePlatformConsentDefault(\n country: string | null | undefined,\n): PlatformConsentSignals {\n const code = typeof country === 'string' ? country.trim().toUpperCase() : ''\n let fallback: PlatformConsentDefaultCommand | null = null\n let matched: PlatformConsentDefaultCommand | null = null\n for (const command of PLATFORM_CONSENT_DEFAULT_COMMANDS) {\n if (command.region === undefined) {\n fallback = command\n continue\n }\n // `strictNullChecks` is off repo-wide, so `!code` would also swallow a\n // genuine miss; compare explicitly.\n if (code !== '' && command.region.indexOf(code) >= 0) matched = command\n }\n const winner = matched === null ? fallback : matched\n /*\n * Every signal is READ off the winning command. Restating the advertising\n * three as literals here made this resolver a second declaration that could\n * disagree with the one that ships — and it did: the emitted global default\n * granted them while this said denied, so a test asserting the resolver\n * proved nothing about the snippet in the page.\n */\n return {\n analytics_storage: winner.analytics_storage,\n ad_storage: winner.ad_storage,\n ad_user_data: winner.ad_user_data,\n ad_personalization: winner.ad_personalization,\n }\n}\n\n/**\n * The declaration as an inline-script snippet.\n *\n * Built by serializing {@link PLATFORM_CONSENT_DEFAULT_COMMANDS} — no caller\n * input reaches it and every value is a literal fixed at module load, which\n * matters because it lands inside an inline `<script>` (the AGL-138 concern).\n *\n * Assumes the canonical `function gtag(){dataLayer.push(arguments);}` shim is\n * already defined ABOVE it. gtag.js processes `arguments` objects, not plain\n * arrays, so a `dataLayer.push([...])` here would be the classic silent\n * no-op: no error, no consent declaration, and nothing in any GA report to\n * show for it.\n *\n * `apps/docs` cannot import from `libs/` (AGL-1595), so the docs site carries\n * a VERBATIM COPY of this string and\n * `apps/console/specs/docs-platform-consent-snippet.spec.ts` fails if the two\n * ever drift — the same treatment `INTERNAL_TRAFFIC_GTAG_SNIPPET` gets, and\n * for the same reason: a stale copy still runs without error and still reads\n * like a working declaration.\n */\nexport const PLATFORM_CONSENT_DEFAULT_SNIPPET =\n PLATFORM_CONSENT_DEFAULT_COMMANDS.map(\n (command) => `gtag('consent','default',${JSON.stringify(command)});`,\n ).join('')\n\n/** The `dataLayer`-bearing window this module writes to. */\nexport interface ConsentDataLayerWindow {\n dataLayer?: unknown[]\n}\n\n/**\n * Declare the defaults on a window, for surfaces that boot their tag from JS\n * rather than from an inline script — i.e. the console, whose gtag is\n * injected by the Firebase Analytics SDK.\n *\n * MUST be called before the SDK initializes, because a `default` read after\n * the tag's `config` is not a default at all. The queue is what makes that\n * orderable: pushing here lands the declaration in `dataLayer` ahead of\n * everything gtag.js later processes, even though gtag.js is not loaded yet.\n *\n * Pushes a real `arguments` object, never an array literal — see the snippet\n * note above for what the array form silently does.\n *\n * Idempotent per window: a second call is a no-op, so a remount or a\n * re-entrant services boot cannot stack duplicate declarations.\n */\nexport function pushPlatformConsentDefault(\n win: ConsentDataLayerWindow | null | undefined,\n): boolean {\n if (!win) return false\n const marked = win as { __aglynConsentDefaultPushed?: boolean }\n if (marked.__aglynConsentDefaultPushed === true) return false\n const layer = win.dataLayer === undefined ? [] : win.dataLayer\n win.dataLayer = layer\n // Declared without parameters ON PURPOSE: the body forwards the live\n // `arguments` object, and a rest parameter would hand gtag.js a plain\n // array instead.\n function gtag(): void {\n // eslint-disable-next-line prefer-rest-params\n layer.push(arguments)\n }\n const queue = gtag as (...args: unknown[]) => void\n for (const command of PLATFORM_CONSENT_DEFAULT_COMMANDS) {\n queue('consent', 'default', command)\n }\n marked.__aglynConsentDefaultPushed = true\n return true\n}\n"],"names":["PRIOR_CONSENT_COUNTRY_CODES","PLATFORM_EXTRA_PRIOR_CONSENT_CODES","PLATFORM_PRIOR_CONSENT_REGIONS","Set","sort","PLATFORM_CONSENT_DEFAULT_COMMANDS","analytics_storage","ad_storage","ad_user_data","ad_personalization","region","resolvePlatformConsentDefault","country","code","trim","toUpperCase","fallback","matched","command","undefined","indexOf","winner","PLATFORM_CONSENT_DEFAULT_SNIPPET","map","JSON","stringify","join","pushPlatformConsentDefault","win","marked","__aglynConsentDefaultPushed","layer","dataLayer","gtag","push","arguments","queue"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8GC,GAED,SAASA,2BAA2B,QAAQ,uBAAmB;AAK/D;;;;;;;;;;;;;;;;CAgBC,GACD,OAAO,MAAMC,qCAAwD;IAAC;CAAK,CAAA;AAE3E;;;;;;;;;;;CAWC,GACD,OAAO,MAAMC,iCAAoD;OAC5D,IAAIC,IAAI;WACNH;WACAC;KACJ;CACF,CAACG,IAAI,GAAE;AA0BR;;;;;;;;;CASC,GACD,OAAO,MAAMC,oCACX;IACE;QACEC,mBAAmB;QACnB;;;;;;;;;OASC,GACDC,YAAY;QACZC,cAAc;QACdC,oBAAoB;IACtB;IACA;QACEH,mBAAmB;QACnBC,YAAY;QACZC,cAAc;QACdC,oBAAoB;QACpBC,QAAQR;IACV;CACD,CAAA;AAEH;;;;;;;;;;;;;;;;CAgBC,GACD,OAAO,SAASS,8BACdC,OAAkC;IAElC,MAAMC,OAAO,OAAOD,YAAY,WAAWA,QAAQE,IAAI,GAAGC,WAAW,KAAK;IAC1E,IAAIC,WAAiD;IACrD,IAAIC,UAAgD;IACpD,KAAK,MAAMC,WAAWb,kCAAmC;QACvD,IAAIa,QAAQR,MAAM,KAAKS,WAAW;YAChCH,WAAWE;YACX;QACF;QACA,uEAAuE;QACvE,oCAAoC;QACpC,IAAIL,SAAS,MAAMK,QAAQR,MAAM,CAACU,OAAO,CAACP,SAAS,GAAGI,UAAUC;IAClE;IACA,MAAMG,SAASJ,YAAY,OAAOD,WAAWC;IAC7C;;;;;;GAMC,GACD,OAAO;QACLX,mBAAmBe,OAAOf,iBAAiB;QAC3CC,YAAYc,OAAOd,UAAU;QAC7BC,cAAca,OAAOb,YAAY;QACjCC,oBAAoBY,OAAOZ,kBAAkB;IAC/C;AACF;AAEA;;;;;;;;;;;;;;;;;;;CAmBC,GACD,OAAO,MAAMa,mCACXjB,kCAAkCkB,GAAG,CACnC,CAACL,UAAY,CAAC,yBAAyB,EAAEM,KAAKC,SAAS,CAACP,SAAS,EAAE,CAAC,EACpEQ,IAAI,CAAC,IAAG;AAOZ;;;;;;;;;;;;;;;CAeC,GACD,OAAO,SAASC,2BACdC,GAA8C;IAE9C,IAAI,CAACA,KAAK,OAAO;IACjB,MAAMC,SAASD;IACf,IAAIC,OAAOC,2BAA2B,KAAK,MAAM,OAAO;IACxD,MAAMC,QAAQH,IAAII,SAAS,KAAKb,YAAY,EAAE,GAAGS,IAAII,SAAS;IAC9DJ,IAAII,SAAS,GAAGD;IAChB,qEAAqE;IACrE,sEAAsE;IACtE,iBAAiB;IACjB,SAASE;QACP,8CAA8C;QAC9CF,MAAMG,IAAI,CAACC;IACb;IACA,MAAMC,QAAQH;IACd,KAAK,MAAMf,WAAWb,kCAAmC;QACvD+B,MAAM,WAAW,WAAWlB;IAC9B;IACAW,OAAOC,2BAA2B,GAAG;IACrC,OAAO;AACT"}
|
|
@@ -0,0 +1,151 @@
|
|
|
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
|
+
* Marketing consent for the PLATFORM's own product email (AGL-3185).
|
|
19
|
+
*
|
|
20
|
+
* The strict policy (`marketing-consent.ts`) means a person with no declared
|
|
21
|
+
* basis is unsendable, and until this module the only doors that declared
|
|
22
|
+
* one were the marketing site's forms. Somebody who created a console account
|
|
23
|
+
* — the warmest audience the platform has — was never asked. Three console
|
|
24
|
+
* doors ask now: a checkbox on the sign-up form, a switch in the account
|
|
25
|
+
* preferences, and a one-time prompt for accounts that predate the checkbox.
|
|
26
|
+
*
|
|
27
|
+
* ## One wording, versioned
|
|
28
|
+
*
|
|
29
|
+
* Every door shows {@link PLATFORM_MARKETING_CONSENT_TEXT} and every record
|
|
30
|
+
* stores {@link PLATFORM_MARKETING_CONSENT_TEXT_VERSION} beside the exact
|
|
31
|
+
* timestamp, so "what did this person agree to" is answered by a version and
|
|
32
|
+
* not by whatever the checkbox says today. Changing the sentence is a bump of
|
|
33
|
+
* the version in the same edit.
|
|
34
|
+
*
|
|
35
|
+
* ## The record lives in two places, and the two do not disagree
|
|
36
|
+
*
|
|
37
|
+
* The decision is written by the server onto the person's own `users/{uid}`
|
|
38
|
+
* document, so the console can show a preference without reading the
|
|
39
|
+
* operator's CRM, and onto the operator's marketing contact for the same
|
|
40
|
+
* person, so the send path sees a declared basis with provenance. The
|
|
41
|
+
* contact half is written only when the deployment names a marketing host
|
|
42
|
+
* (`PLATFORM_MARKETING_HOST_ID`, read in `@aglyn/tenant-data-admin`); a
|
|
43
|
+
* self-hosted install with no audience of its own records the preference
|
|
44
|
+
* and skips the contact.
|
|
45
|
+
*
|
|
46
|
+
* ## Absence is not refusal
|
|
47
|
+
*
|
|
48
|
+
* An unticked sign-up checkbox records nothing. A switch turned off and a
|
|
49
|
+
* prompt answered "no" record a refusal, which the strict policy already
|
|
50
|
+
* honors. A prompt dismissed without an answer records only the dismissal,
|
|
51
|
+
* and the prompt stays away for {@link PLATFORM_MARKETING_PROMPT_SNOOZE_MS}.
|
|
52
|
+
*
|
|
53
|
+
* Pure and dependency-light on purpose: the sign-up page renders the text,
|
|
54
|
+
* the console route validates the body, and the server library writes the
|
|
55
|
+
* record, all from this one module.
|
|
56
|
+
*/
|
|
57
|
+
import { type MarketingConsentSource } from './marketing-consent';
|
|
58
|
+
/** The console doors a decision can come through, as the record names them. */
|
|
59
|
+
export declare const PLATFORM_MARKETING_CONSENT_SOURCE_KINDS: readonly ["console-signup", "console-preferences", "console-prompt"];
|
|
60
|
+
export type PlatformMarketingConsentSourceKind = (typeof PLATFORM_MARKETING_CONSENT_SOURCE_KINDS)[number];
|
|
61
|
+
export declare function isPlatformMarketingConsentSourceKind(value: unknown): value is PlatformMarketingConsentSourceKind;
|
|
62
|
+
/** What a door records: a grant or a refusal. Absence is never recorded. */
|
|
63
|
+
export declare const PLATFORM_MARKETING_CONSENT_DECISIONS: readonly ["granted", "declined"];
|
|
64
|
+
export type PlatformMarketingConsentDecision = (typeof PLATFORM_MARKETING_CONSENT_DECISIONS)[number];
|
|
65
|
+
export declare function isPlatformMarketingConsentDecision(value: unknown): value is PlatformMarketingConsentDecision;
|
|
66
|
+
/**
|
|
67
|
+
* The version of the consent wording every door shows. Bumped in the same
|
|
68
|
+
* edit as {@link platformMarketingConsentText}; a record stores the version
|
|
69
|
+
* it was shown under, so the two must move together.
|
|
70
|
+
*/
|
|
71
|
+
export declare const PLATFORM_MARKETING_CONSENT_TEXT_VERSION = "2026-09-20";
|
|
72
|
+
/**
|
|
73
|
+
* The sentence the person agrees to, with the deployment's brand in it.
|
|
74
|
+
*
|
|
75
|
+
* Affirmative and standalone: it names what is sent, who sends it, and that
|
|
76
|
+
* it can be stopped — never bundled with the terms acceptance, and never
|
|
77
|
+
* pre-ticked anywhere it is rendered.
|
|
78
|
+
*/
|
|
79
|
+
export declare function platformMarketingConsentText(brandName: string): string;
|
|
80
|
+
/** {@link platformMarketingConsentText} for the brand this deployment wears. */
|
|
81
|
+
export declare const PLATFORM_MARKETING_CONSENT_TEXT: string;
|
|
82
|
+
/**
|
|
83
|
+
* The `users/{uid}` fields the decision is mirrored onto.
|
|
84
|
+
*
|
|
85
|
+
* The same names the contact record uses for the same facts, so one reader
|
|
86
|
+
* can parse either document. The prompt-dismissal stamp has no contact
|
|
87
|
+
* counterpart: it is about what the console asked, not what the person
|
|
88
|
+
* agreed to.
|
|
89
|
+
*/
|
|
90
|
+
export declare const USER_MARKETING_CONSENT_FIELD = "marketingConsent";
|
|
91
|
+
export declare const USER_MARKETING_CONSENT_AT_FIELD = "marketingConsentAtMs";
|
|
92
|
+
export declare const USER_MARKETING_CONSENT_SOURCE_FIELD = "marketingConsentSource";
|
|
93
|
+
export declare const USER_MARKETING_PROMPT_DISMISSED_AT_FIELD = "marketingConsentPromptDismissedAtMs";
|
|
94
|
+
/** How long a dismissed prompt stays away: ninety days. */
|
|
95
|
+
export declare const PLATFORM_MARKETING_PROMPT_SNOOZE_MS: number;
|
|
96
|
+
/** What the person's own document says about product email. */
|
|
97
|
+
export interface PlatformMarketingConsentState {
|
|
98
|
+
/** `null` when nothing has been recorded — asked, but not answered. */
|
|
99
|
+
decision: PlatformMarketingConsentDecision | null;
|
|
100
|
+
/** When the decision was recorded. */
|
|
101
|
+
atMs: number | null;
|
|
102
|
+
/** The wording version the decision was made under. */
|
|
103
|
+
textVersion: string | null;
|
|
104
|
+
/** Which console door recorded it; `null` for a record another writer left. */
|
|
105
|
+
sourceKind: PlatformMarketingConsentSourceKind | null;
|
|
106
|
+
/** When the prompt was last dismissed without an answer. */
|
|
107
|
+
promptDismissedAtMs: number | null;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Reads the decision off a `users/{uid}` document, or off no document.
|
|
111
|
+
*
|
|
112
|
+
* Every unusable value reads as its absent case rather than throwing: a
|
|
113
|
+
* malformed field must degrade to "nothing recorded", which asks again,
|
|
114
|
+
* never to a grant.
|
|
115
|
+
*/
|
|
116
|
+
export declare function readPlatformMarketingConsent(document: Record<string, unknown> | null | undefined): PlatformMarketingConsentState;
|
|
117
|
+
/**
|
|
118
|
+
* Whether the console should ask this person now.
|
|
119
|
+
*
|
|
120
|
+
* Never after a decision, in either direction: a "no" is an answer and a
|
|
121
|
+
* "yes" needs no repeating. A dismissal is not an answer, so the prompt
|
|
122
|
+
* returns once the snooze has run out.
|
|
123
|
+
*/
|
|
124
|
+
export declare function platformMarketingPromptDue(state: Pick<PlatformMarketingConsentState, 'decision' | 'promptDismissedAtMs'>, nowMs: number): boolean;
|
|
125
|
+
/**
|
|
126
|
+
* The provenance stored with a console decision, on both documents.
|
|
127
|
+
*
|
|
128
|
+
* `actor: 'person'` is what keeps {@link MarketingConsentSource} honest here:
|
|
129
|
+
* the reader treats provenance as an operator's assertion unless it says
|
|
130
|
+
* otherwise, and this is the person's own click, carrying which door and
|
|
131
|
+
* which wording. `by` is the account that clicked — the subject and the
|
|
132
|
+
* actor are the same human, which is the fact the field records.
|
|
133
|
+
*/
|
|
134
|
+
export declare function platformMarketingConsentSource(input: {
|
|
135
|
+
kind: PlatformMarketingConsentSourceKind;
|
|
136
|
+
decision: PlatformMarketingConsentDecision;
|
|
137
|
+
uid: string;
|
|
138
|
+
atMs: number;
|
|
139
|
+
textVersion: string;
|
|
140
|
+
}): MarketingConsentSource;
|
|
141
|
+
/**
|
|
142
|
+
* The `users/{uid}` fields a decision writes, as one merge-able object.
|
|
143
|
+
*
|
|
144
|
+
* `false` for a refusal, not a deleted field: absence is the third state and
|
|
145
|
+
* means "never asked", which a person who said no must never read as again.
|
|
146
|
+
*/
|
|
147
|
+
export declare function platformMarketingUserFields(input: {
|
|
148
|
+
decision: PlatformMarketingConsentDecision;
|
|
149
|
+
atMs: number;
|
|
150
|
+
source: MarketingConsentSource;
|
|
151
|
+
}): Record<string, unknown>;
|