@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,704 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* The READ side of marketing consent (`docs/specs/email-overhaul.md` §3f).
|
|
19
|
+
*
|
|
20
|
+
* `marketingConsent` has seven writers and, until this module, no reader on
|
|
21
|
+
* any send path: `performCampaignSend` filtered on the suppression list and
|
|
22
|
+
* on nothing else, so a recorded opt-in and a recorded opt-OUT reached the
|
|
23
|
+
* same inbox. This is the join that makes the field mean something.
|
|
24
|
+
*
|
|
25
|
+
* ## A basis is DECLARED, never inferred
|
|
26
|
+
*
|
|
27
|
+
* Nothing here treats an act as consent. Submitting a form, buying, booking,
|
|
28
|
+
* or holding an account are all things a person did for their own reasons,
|
|
29
|
+
* and none of them is an opt-in to marketing email. The only input is a
|
|
30
|
+
* stored `marketingConsent` written from a checkbox the person ticked. That
|
|
31
|
+
* is why {@link readMarketingBasis} takes a document rather than a silo name:
|
|
32
|
+
* there is no silo whose mere membership grants a basis.
|
|
33
|
+
*
|
|
34
|
+
* ## Three states, not two
|
|
35
|
+
*
|
|
36
|
+
* The field is written `true` by six capture paths and `false` by exactly one
|
|
37
|
+
* (`POST /v1/contacts`), so absence is not refusal — it is the far commoner
|
|
38
|
+
* case of a record captured before the checkbox existed. Collapsing absent
|
|
39
|
+
* into refused is what would empty an existing audience overnight; collapsing
|
|
40
|
+
* it into granted is what the product does today. Both are wrong, so the
|
|
41
|
+
* split is carried through to the caller as three counts rather than a
|
|
42
|
+
* boolean.
|
|
43
|
+
*
|
|
44
|
+
* ## A basis also records WHOSE act it was
|
|
45
|
+
*
|
|
46
|
+
* A basis an operator asserted over existing records — see
|
|
47
|
+
* `tools/scripts/backfill-marketing-consent.mjs` — is mailable, because an
|
|
48
|
+
* org that asserted it meant that data to be reachable. It is not, however,
|
|
49
|
+
* the same fact as a checkbox somebody ticked, and two fields that store
|
|
50
|
+
* only `true` and a date cannot tell the difference. So an asserted basis
|
|
51
|
+
* carries {@link MARKETING_CONSENT_SOURCE_FIELD} naming who asserted it,
|
|
52
|
+
* when, and why, and every reader gets that distinction back as
|
|
53
|
+
* {@link MarketingConsentRecord.assertedBy}. Consent is only evidence for as
|
|
54
|
+
* long as its origin survives with it.
|
|
55
|
+
*
|
|
56
|
+
* ## A basis also records WHICH BRAND it was given to
|
|
57
|
+
*
|
|
58
|
+
* Contacts are ORG-scoped and shared across every site in the org, which is
|
|
59
|
+
* deliberate: an agency running many client brands out of one account keeps
|
|
60
|
+
* one address book. Consent is not shareable on the same terms. It runs to a
|
|
61
|
+
* controller — the brand named on the form, in the sender line and in the
|
|
62
|
+
* privacy notice the person read — and not to the account that happens to
|
|
63
|
+
* hold the row. One boolean per person cannot express that, so somebody who
|
|
64
|
+
* opted in to one client's newsletter was mailable by every other client in
|
|
65
|
+
* the agency, on a basis none of them was given.
|
|
66
|
+
*
|
|
67
|
+
* So a basis is stored per (person, host), under
|
|
68
|
+
* {@link MARKETING_CONSENT_BY_HOST_FIELD}, and {@link readMarketingBasis}
|
|
69
|
+
* takes the host it is being read FOR. The host argument is required and has
|
|
70
|
+
* no default: a reader that has not said which brand is asking cannot
|
|
71
|
+
* compile, which is the same guarantee `newResourceScopeFields` gives on the
|
|
72
|
+
* write side of scoped resources.
|
|
73
|
+
*
|
|
74
|
+
* ## FIVE states, because collapsing any two of them is a bug in one
|
|
75
|
+
* direction or the other
|
|
76
|
+
*
|
|
77
|
+
* "This host has no basis for this person" and "another host has one" and "a
|
|
78
|
+
* grant exists that names no host at all" and "this person refused" are
|
|
79
|
+
* different facts, and every pair of them collapses into either a leak or a
|
|
80
|
+
* silent failure to mail somebody who did opt in. They are carried apart all
|
|
81
|
+
* the way to the caller as {@link MarketingConsentReason}, and
|
|
82
|
+
* {@link MarketingConsentSplit} counts them separately rather than reporting
|
|
83
|
+
* one `withheld` total that cannot be explained to a merchant.
|
|
84
|
+
*
|
|
85
|
+
* ## A REFUSAL over-applies; a GRANT never does
|
|
86
|
+
*
|
|
87
|
+
* The pre-host field is still read, and asymmetrically. A stored
|
|
88
|
+
* `marketingConsent: false` refuses for every host, because a refusal
|
|
89
|
+
* recorded against nobody in particular is most safely honored against
|
|
90
|
+
* everybody, and withholding mail is recoverable where sending it is not. A
|
|
91
|
+
* stored `marketingConsent: true` grants to NO host: it is a claim with no
|
|
92
|
+
* controller attached, and spreading it across an agency's unrelated clients
|
|
93
|
+
* is precisely the defect this module exists to end. Such a record reports
|
|
94
|
+
* {@link MarketingConsentRecord.otherGrant} as `'unscoped'` so a console can
|
|
95
|
+
* say why somebody stopped being mailable, and so
|
|
96
|
+
* `tools/scripts/backfill-consent-host.mjs` can find them.
|
|
97
|
+
*/
|
|
98
|
+
import { type ConsentGroup } from './consent-groups';
|
|
99
|
+
/**
|
|
100
|
+
* The document field carrying WHO asserted a stored basis, and why.
|
|
101
|
+
*
|
|
102
|
+
* `marketingConsent` on its own records only WHAT the basis is. A record
|
|
103
|
+
* written by an operator and a record written from a checkbox a person
|
|
104
|
+
* ticked are the same two fields with the same two values, so nothing
|
|
105
|
+
* downstream — a console readout, an export, a regulator's question — can
|
|
106
|
+
* tell them apart. That is the difference between consent that is evidence
|
|
107
|
+
* and consent that is an assertion, so it is carried on the record itself
|
|
108
|
+
* rather than left to be reconstructed from when a script happened to run.
|
|
109
|
+
*
|
|
110
|
+
* Absent on every record written from a site's capture surface, which is why
|
|
111
|
+
* {@link readMarketingBasis} reads its absence as the person's own act: the
|
|
112
|
+
* six checkbox writers are the norm and an operator assertion is the thing
|
|
113
|
+
* that has to announce itself. The platform's own console doors (AGL-3185)
|
|
114
|
+
* do write it — which door, which wording version — and say whose act it
|
|
115
|
+
* describes with {@link MarketingConsentSource.actor}, so a record can carry
|
|
116
|
+
* provenance without being read as an assertion made on the person's behalf.
|
|
117
|
+
*/
|
|
118
|
+
export declare const MARKETING_CONSENT_SOURCE_FIELD = "marketingConsentSource";
|
|
119
|
+
/**
|
|
120
|
+
* The `kind` an operator backfill stamps. A named constant because the
|
|
121
|
+
* script that writes it and the reader that finds it are in different
|
|
122
|
+
* languages and cannot share a type.
|
|
123
|
+
*/
|
|
124
|
+
export declare const OPERATOR_BACKFILL_CONSENT_KIND = "operator-backfill";
|
|
125
|
+
/**
|
|
126
|
+
* The document field a LIST MEMBERSHIP carries beside `marketingConsent`,
|
|
127
|
+
* naming which of the two ways in produced it.
|
|
128
|
+
*
|
|
129
|
+
* `list-members.ts` writes it, with `'contact-opt-in'` for a basis carried
|
|
130
|
+
* across from the person's own record and
|
|
131
|
+
* {@link OPERATOR_ATTESTED_CONSENT_BASIS} for one a console account asserted.
|
|
132
|
+
* It is read here because a membership is a person record like any other to
|
|
133
|
+
* every reader in the send path, and a reader that knew only about
|
|
134
|
+
* {@link MARKETING_CONSENT_SOURCE_FIELD} would report an attestation as the
|
|
135
|
+
* person's own act.
|
|
136
|
+
*/
|
|
137
|
+
export declare const MARKETING_CONSENT_BASIS_FIELD = "marketingConsentBasis";
|
|
138
|
+
/**
|
|
139
|
+
* The value of {@link MARKETING_CONSENT_BASIS_FIELD} that means an operator
|
|
140
|
+
* stated they have this person's permission.
|
|
141
|
+
*
|
|
142
|
+
* A string literal shared by the writer and the reader rather than a type,
|
|
143
|
+
* for the reason above: the enrollment path stores this on a document and
|
|
144
|
+
* this module reads it back off one, and a document has no types.
|
|
145
|
+
*/
|
|
146
|
+
export declare const OPERATOR_ATTESTED_CONSENT_BASIS = "operator-attested";
|
|
147
|
+
/**
|
|
148
|
+
* The `kind` synthesized for an attested membership that carries no
|
|
149
|
+
* {@link MARKETING_CONSENT_SOURCE_FIELD} of its own.
|
|
150
|
+
*
|
|
151
|
+
* The console's one-address add path stores the attesting account in
|
|
152
|
+
* `marketingConsentByUid` and no provenance object, so the provenance a
|
|
153
|
+
* reader can honestly report for those rows is exactly "an account attested
|
|
154
|
+
* this" plus the account. Naming the kind rather than leaving the source
|
|
155
|
+
* `null` is what lets a console readout say WHO, which is the whole reason
|
|
156
|
+
* the attribution is stored.
|
|
157
|
+
*/
|
|
158
|
+
export declare const OPERATOR_ATTESTED_CONSENT_KIND = "operator-attested";
|
|
159
|
+
/**
|
|
160
|
+
* The boolean field a basis has always been stored in.
|
|
161
|
+
*
|
|
162
|
+
* Named rather than spelled out at each site because it now appears in two
|
|
163
|
+
* positions — at the top of a person document, and again inside every entry
|
|
164
|
+
* of {@link MARKETING_CONSENT_BY_HOST_FIELD} — and the second position is
|
|
165
|
+
* only readable by the same parser as the first while both agree on the name.
|
|
166
|
+
*/
|
|
167
|
+
export declare const MARKETING_CONSENT_FIELD = "marketingConsent";
|
|
168
|
+
/**
|
|
169
|
+
* The map field holding one consent entry per host: `{ [hostId]: entry }`,
|
|
170
|
+
* where an entry carries exactly the fields the top level carries.
|
|
171
|
+
*
|
|
172
|
+
* ## Why a map on the person document and not a subcollection
|
|
173
|
+
*
|
|
174
|
+
* The send path reads consent out of the audience sweep, while the person's
|
|
175
|
+
* document is already in hand — that placement is what keeps the consent join
|
|
176
|
+
* free. A subcollection would make it one extra read PER RECIPIENT PER
|
|
177
|
+
* CAMPAIGN, on the one path in the product whose cost scales with the size of
|
|
178
|
+
* a customer's list. The map rides along with a document that is being read
|
|
179
|
+
* anyway.
|
|
180
|
+
*
|
|
181
|
+
* ## Why keyed by host id
|
|
182
|
+
*
|
|
183
|
+
* `entry = map[hostId]` is a lookup that has no way to return another host's
|
|
184
|
+
* grant. A list of entries carrying a `hostId` field would have to be
|
|
185
|
+
* searched, and a search is something a caller can get wrong — a `.find()`
|
|
186
|
+
* whose predicate is dropped still returns a grant, just somebody else's.
|
|
187
|
+
* There is no expression of this shape that reads host B's consent while
|
|
188
|
+
* asking about host A.
|
|
189
|
+
*
|
|
190
|
+
* ## Why the entries repeat the top-level field names
|
|
191
|
+
*
|
|
192
|
+
* So that one parser reads both. Provenance, the attested-basis marker, the
|
|
193
|
+
* attesting account and the timestamp all mean the same thing wherever they
|
|
194
|
+
* sit, and a second set of names would be a second set of rules for the two
|
|
195
|
+
* positions to disagree about — which is how the attested-membership case
|
|
196
|
+
* came to be reported as a person's own act in the first place.
|
|
197
|
+
*/
|
|
198
|
+
export declare const MARKETING_CONSENT_BY_HOST_FIELD = "marketingConsentByHost";
|
|
199
|
+
/**
|
|
200
|
+
* The field naming every host that has CAPTURED a person record.
|
|
201
|
+
*
|
|
202
|
+
* Not consent, and deliberately not stored with it. Somebody captured by one
|
|
203
|
+
* brand may go on to consent to two, or to none; conflating capture with
|
|
204
|
+
* permission is how an act a person took for their own reasons — booking a
|
|
205
|
+
* table, buying a thing — comes to be read as an opt-in. It is here because a
|
|
206
|
+
* grandfathered basis is a claim about WHEN a record was captured, and that
|
|
207
|
+
* claim only ever belonged to the brands that captured it.
|
|
208
|
+
*
|
|
209
|
+
* ## An ARRAY, and top-level, because it has to be a QUERY
|
|
210
|
+
*
|
|
211
|
+
* It serves both organizations from one field. An agency filters to "the
|
|
212
|
+
* people MY site captured"; a business running three sites as one asks for
|
|
213
|
+
* "everyone captured on A, B or C". Both are `array-contains-any` over this
|
|
214
|
+
* field, which is why it is a top-level array of ids and not a label on a
|
|
215
|
+
* detail page and not a map: Firestore can filter this shape and cannot
|
|
216
|
+
* filter an array of objects.
|
|
217
|
+
*
|
|
218
|
+
* It GROWS. A person who fills in a second site's form is captured by that
|
|
219
|
+
* site too, and the write is an `arrayUnion` on the merge branch as well as
|
|
220
|
+
* on the create — which is exactly what the create-only `hostId` beside it
|
|
221
|
+
* could never record.
|
|
222
|
+
*
|
|
223
|
+
* Read with the scalar `hostId` as a fallback on `contacts`, which has
|
|
224
|
+
* stamped its FIRST capturing host under that name since the collection
|
|
225
|
+
* existed. That is a strict subset of this fact under an older name, and a
|
|
226
|
+
* reader that ignored it would report every existing contact as unattributed.
|
|
227
|
+
*/
|
|
228
|
+
export declare const CAPTURED_BY_HOST_FIELD = "capturedByHostIds";
|
|
229
|
+
/**
|
|
230
|
+
* The consent group a stored grant was given to, recorded ON THE ENTRY.
|
|
231
|
+
*
|
|
232
|
+
* The declaration lives on the org and can change; this is what was DISCLOSED
|
|
233
|
+
* to this person at the moment they agreed. Reading pooling from the org's
|
|
234
|
+
* current declaration instead would let adding a site to a group widen every
|
|
235
|
+
* grant ever made, which is the leak with a configuration screen in front of
|
|
236
|
+
* it. So the group travels with the grant, and a group that grows reaches
|
|
237
|
+
* only the captures that come after it.
|
|
238
|
+
*/
|
|
239
|
+
export declare const CONSENT_GROUP_ID_FIELD = "consentGroupId";
|
|
240
|
+
/**
|
|
241
|
+
* The group's display name as the capture surface showed it.
|
|
242
|
+
*
|
|
243
|
+
* Stored beside the id because the id is not evidence: answering "what was
|
|
244
|
+
* this person told" with a document key is answering a different question.
|
|
245
|
+
* A group can also be renamed, and the name that matters is the one on the
|
|
246
|
+
* screen they were looking at.
|
|
247
|
+
*/
|
|
248
|
+
export declare const CONSENT_GROUP_NAME_FIELD = "consentGroupName";
|
|
249
|
+
/**
|
|
250
|
+
* The provenance stored alongside a basis: who recorded it, when, and why.
|
|
251
|
+
*
|
|
252
|
+
* Written by the operator backfill and, since AGL-3185, by the platform's
|
|
253
|
+
* own console doors for the person's own decision.
|
|
254
|
+
*/
|
|
255
|
+
export interface MarketingConsentSource {
|
|
256
|
+
/**
|
|
257
|
+
* What kind of record this is — {@link OPERATOR_BACKFILL_CONSENT_KIND}, or
|
|
258
|
+
* the console door that captured a person's own decision.
|
|
259
|
+
*/
|
|
260
|
+
kind: string;
|
|
261
|
+
/**
|
|
262
|
+
* Who recorded it: the operator who asserted it, or the account that made
|
|
263
|
+
* its own decision. Never blank on a well-formed record.
|
|
264
|
+
*/
|
|
265
|
+
by: string;
|
|
266
|
+
/** When it was recorded. */
|
|
267
|
+
atMs: number | null;
|
|
268
|
+
/** Why, in prose, for whoever audits this later. */
|
|
269
|
+
reason: string;
|
|
270
|
+
/**
|
|
271
|
+
* Whose act this provenance describes.
|
|
272
|
+
*
|
|
273
|
+
* Absent on every record the operator writers stamp, and read as
|
|
274
|
+
* `'operator'`: an assertion is what provenance meant before a door
|
|
275
|
+
* existed that records the person's own click WITH provenance. Such a door
|
|
276
|
+
* writes `'person'`, which is the only way a record carrying this field
|
|
277
|
+
* reads as the person's own act.
|
|
278
|
+
*/
|
|
279
|
+
actor?: MarketingConsentAssertedBy;
|
|
280
|
+
/**
|
|
281
|
+
* The version of the consent wording the person was shown, when the door
|
|
282
|
+
* versions its wording. Absent on an operator assertion, which showed the
|
|
283
|
+
* person nothing.
|
|
284
|
+
*/
|
|
285
|
+
textVersion?: string;
|
|
286
|
+
}
|
|
287
|
+
/** Whose act a stored basis represents. */
|
|
288
|
+
export type MarketingConsentAssertedBy = 'person' | 'operator';
|
|
289
|
+
/** What a person's stored consent record says, if anything. */
|
|
290
|
+
export type MarketingBasis =
|
|
291
|
+
/** A checkbox was ticked and stored. Mailable under every policy. */
|
|
292
|
+
'granted'
|
|
293
|
+
/** A stored refusal. Never mailable, under every policy. */
|
|
294
|
+
| 'declined'
|
|
295
|
+
/** No consent field on the record at all — see {@link MarketingConsentPolicy}. */
|
|
296
|
+
| 'unrecorded';
|
|
297
|
+
/**
|
|
298
|
+
* A grant this host may not use, and which kind it is.
|
|
299
|
+
*
|
|
300
|
+
* Reported so that "nobody has ever consented for this person" and "somebody
|
|
301
|
+
* consented, to a brand that is not the one asking" stay distinguishable. The
|
|
302
|
+
* two produce the same verdict and must not produce the same explanation: the
|
|
303
|
+
* first is a list that was never opted in, and the second is an agency's
|
|
304
|
+
* client reaching for another client's audience.
|
|
305
|
+
*
|
|
306
|
+
* `'other-host'` outranks `'unscoped'` when both are true. Operationally they
|
|
307
|
+
* are the same refusal, and the named host is the more useful half to show.
|
|
308
|
+
*/
|
|
309
|
+
export type MarketingConsentOtherGrant = 'none' | 'other-host' | 'unscoped';
|
|
310
|
+
/** One recipient's consent facts, as read off whichever silo produced them. */
|
|
311
|
+
export interface MarketingConsentRecord {
|
|
312
|
+
/**
|
|
313
|
+
* The host this record was read FOR. Every field below answers about this
|
|
314
|
+
* host and no other.
|
|
315
|
+
*
|
|
316
|
+
* Carried on the record rather than remembered by the caller because a
|
|
317
|
+
* consent map is built in one place and consumed in another —
|
|
318
|
+
* {@link splitByMarketingConsent} refuses a map whose records were read for
|
|
319
|
+
* a different host, and it can only do that if the records say.
|
|
320
|
+
*/
|
|
321
|
+
hostId: string;
|
|
322
|
+
/**
|
|
323
|
+
* The consent group the read was made against — the declared set of sites
|
|
324
|
+
* that are ONE sender, or the site alone when nothing was declared.
|
|
325
|
+
*
|
|
326
|
+
* A grant is looked up under {@link hostId} alone, because pooling is
|
|
327
|
+
* written forward at capture. A REFUSAL is honored across every site in
|
|
328
|
+
* this group, because a person who unsubscribed from one of three sites
|
|
329
|
+
* that present as one sender has left the sender, and asking them to do it
|
|
330
|
+
* twice more is both hostile and wrong.
|
|
331
|
+
*/
|
|
332
|
+
groupId: string;
|
|
333
|
+
/**
|
|
334
|
+
* A grant that exists but is not this host's — see
|
|
335
|
+
* {@link MarketingConsentOtherGrant}. `'none'` when there is no such grant,
|
|
336
|
+
* which is the only value under which an absent basis may grandfather.
|
|
337
|
+
*/
|
|
338
|
+
otherGrant: MarketingConsentOtherGrant;
|
|
339
|
+
/**
|
|
340
|
+
* Every host that captured the underlying person record; empty when none
|
|
341
|
+
* is attributed.
|
|
342
|
+
*
|
|
343
|
+
* Attribution, not permission. It is read here for exactly one decision:
|
|
344
|
+
* a record grandfathers on its capture date, and a date another brand
|
|
345
|
+
* earned is not this brand's to rely on. An EMPTY list is the honest
|
|
346
|
+
* unattributed case and grandfathers, for the reason a missing capture
|
|
347
|
+
* DATE does — the unknown leans toward reachable.
|
|
348
|
+
*/
|
|
349
|
+
capturedByHostIds: string[];
|
|
350
|
+
/**
|
|
351
|
+
* Whether any of {@link capturedByHostIds} is a member of the group this
|
|
352
|
+
* record was read for.
|
|
353
|
+
*
|
|
354
|
+
* Derived at read time, because the raw list is a fact about the person and
|
|
355
|
+
* this is a fact about the relationship — and only the reader holds the
|
|
356
|
+
* group's membership. It is the input to grandfathering: the argument that
|
|
357
|
+
* a record predates enforcement belongs to whoever collected the address,
|
|
358
|
+
* and three sites declared as one sender collected it together.
|
|
359
|
+
*/
|
|
360
|
+
capturedByGroup: boolean;
|
|
361
|
+
basis: MarketingBasis;
|
|
362
|
+
/**
|
|
363
|
+
* Whose act the basis represents, or `null` when there is no basis to
|
|
364
|
+
* attribute. `'person'` for the capture surfaces and for a console door
|
|
365
|
+
* whose provenance says so, `'operator'` for a basis an operator asserted
|
|
366
|
+
* on somebody's behalf.
|
|
367
|
+
*
|
|
368
|
+
* Not a second grade of mailability — {@link marketingConsentVerdict}
|
|
369
|
+
* ignores it, because an org that asserted a basis for its own seed data
|
|
370
|
+
* meant that data to be reachable. It exists so every surface that reports
|
|
371
|
+
* consent can report which kind it has, instead of presenting an assertion
|
|
372
|
+
* as evidence.
|
|
373
|
+
*/
|
|
374
|
+
assertedBy: MarketingConsentAssertedBy | null;
|
|
375
|
+
/**
|
|
376
|
+
* The provenance behind the basis; `null` when the writer stamped none,
|
|
377
|
+
* which every site capture surface does. Present for an operator assertion
|
|
378
|
+
* and for a console door's record of the person's own decision — the two
|
|
379
|
+
* are told apart by {@link assertedBy}, not by this being set.
|
|
380
|
+
*/
|
|
381
|
+
source: MarketingConsentSource | null;
|
|
382
|
+
/** When the basis was recorded, when the writer stamped it. */
|
|
383
|
+
basisAtMs: number | null;
|
|
384
|
+
/**
|
|
385
|
+
* When the underlying person record was captured, when the silo stores it.
|
|
386
|
+
*
|
|
387
|
+
* `null` is the honest answer for a hand-typed address, which has no record
|
|
388
|
+
* behind it at all, and it is treated as "captured before enforcement" for
|
|
389
|
+
* the reason given on {@link MarketingConsentPolicy.enforceFromMs}.
|
|
390
|
+
*/
|
|
391
|
+
capturedAtMs: number | null;
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* How strictly `unrecorded` is treated. `granted` and `declined` are not
|
|
395
|
+
* affected by this: a stored refusal is honored under every mode, which is
|
|
396
|
+
* the one piece of enforcement that is safe to switch on with no decision
|
|
397
|
+
* from anyone.
|
|
398
|
+
*/
|
|
399
|
+
export interface MarketingConsentPolicy {
|
|
400
|
+
/**
|
|
401
|
+
* `'forward'` — NOT retroactive. A record captured on or after
|
|
402
|
+
* {@link enforceFromMs} needs a recorded basis; one captured before it
|
|
403
|
+
* stays reachable and is reported as grandfathered. Turning this on drops
|
|
404
|
+
* nobody who is currently in an audience, which is what makes it the mode
|
|
405
|
+
* a deployment with a real back catalog wants.
|
|
406
|
+
*
|
|
407
|
+
* `'strict'` — retroactive. Every recipient needs a recorded basis, and
|
|
408
|
+
* nothing grandfathers. It can shrink an existing audience sharply,
|
|
409
|
+
* possibly to near zero.
|
|
410
|
+
*
|
|
411
|
+
* `'strict'` is the current default; see
|
|
412
|
+
* {@link DEFAULT_MARKETING_CONSENT_POLICY} for the pre-release condition
|
|
413
|
+
* that makes a retroactive default safe, and for when it stops being so.
|
|
414
|
+
*/
|
|
415
|
+
mode: 'forward' | 'strict';
|
|
416
|
+
/**
|
|
417
|
+
* The forward cutoff, in epoch millis.
|
|
418
|
+
*
|
|
419
|
+
* A record with no capture timestamp is treated as captured BEFORE this,
|
|
420
|
+
* because the silos that omit one are the older ones — the direction of the
|
|
421
|
+
* unknown is toward grandfathering, so a missing field can only ever leave
|
|
422
|
+
* somebody reachable, never silently withhold their mail.
|
|
423
|
+
*/
|
|
424
|
+
enforceFromMs: number;
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* The default forward cutoff: 2026-09-01T00:00:00Z.
|
|
428
|
+
*
|
|
429
|
+
* A date rather than a per-org stamp, so the rule has an answer on an org that
|
|
430
|
+
* has never opened the setting.
|
|
431
|
+
*
|
|
432
|
+
* It divides the audience only under `'forward'`, where a record predating it
|
|
433
|
+
* grandfathers and every capture from the checkbox-bearing surfaces onward
|
|
434
|
+
* carries a basis or is withheld. Under `'strict'` it decides nothing, since
|
|
435
|
+
* no record grandfathers at any date.
|
|
436
|
+
*
|
|
437
|
+
* An org may move it later (a longer grace period) or earlier (voluntarily
|
|
438
|
+
* enforcing over more of its own back catalog) through
|
|
439
|
+
* {@link resolveMarketingConsentPolicy}.
|
|
440
|
+
*/
|
|
441
|
+
export declare const MARKETING_CONSENT_ENFORCED_FROM_MS: number;
|
|
442
|
+
/**
|
|
443
|
+
* The policy an org gets when it has never configured one.
|
|
444
|
+
*
|
|
445
|
+
* `'strict'` — every recipient needs a recorded basis, and nothing is
|
|
446
|
+
* grandfathered. That is defensible because of WHEN it ships: the product is
|
|
447
|
+
* pre-release with no real customers, so the population a retroactive rule
|
|
448
|
+
* removes is test and seeded demo data. The usual objection to retroactive
|
|
449
|
+
* enforcement — that it silently shrinks a live audience, sometimes to
|
|
450
|
+
* nothing — has nobody here to injure.
|
|
451
|
+
*
|
|
452
|
+
* ⚠️ It stops being defensible the moment real addresses exist. A deployment
|
|
453
|
+
* that has already collected an audience under the old rule sets `'forward'`
|
|
454
|
+
* on its orgs rather than inheriting this, because flipping to strict over a
|
|
455
|
+
* live back catalog withholds mail from people who were legitimately
|
|
456
|
+
* reachable the day before.
|
|
457
|
+
*
|
|
458
|
+
* `enforceFromMs` stays populated and is still read: under `'strict'` it
|
|
459
|
+
* decides nothing, but an org moving back to `'forward'` gets a real cutoff
|
|
460
|
+
* rather than a missing field.
|
|
461
|
+
*/
|
|
462
|
+
export declare const DEFAULT_MARKETING_CONSENT_POLICY: MarketingConsentPolicy;
|
|
463
|
+
/**
|
|
464
|
+
* Reads an org's stored `marketingConsentPolicy` into a usable policy.
|
|
465
|
+
*
|
|
466
|
+
* Every unusable value falls back to the default rather than to "off": there
|
|
467
|
+
* is no off. A malformed setting must not be a way to switch the join back
|
|
468
|
+
* out, because the failure mode of that is mail to people who declined.
|
|
469
|
+
*
|
|
470
|
+
* The fallback is {@link DEFAULT_MARKETING_CONSENT_POLICY} itself rather than
|
|
471
|
+
* a mode repeated here. This function is the ONLY path by which any send
|
|
472
|
+
* reaches a policy, so a literal in it would be the real default and the
|
|
473
|
+
* exported constant would be a decoration: changing the constant would move
|
|
474
|
+
* what `marketing-consent.spec.ts` asserts and nothing that mails anybody.
|
|
475
|
+
* Only the two modes a caller may actually store are honored, so a stored
|
|
476
|
+
* value that means neither lands on the default with everything else.
|
|
477
|
+
*/
|
|
478
|
+
export declare function resolveMarketingConsentPolicy(stored: unknown): MarketingConsentPolicy;
|
|
479
|
+
/**
|
|
480
|
+
* Reads the consent facts off one person record from any silo.
|
|
481
|
+
*
|
|
482
|
+
* The field names differ by collection and the capture timestamp does too —
|
|
483
|
+
* `contacts`, `leads` and `siteMembers` stamp `createdAt`, a list membership
|
|
484
|
+
* stamps `addedAt` — so both are read from a small set of aliases rather than
|
|
485
|
+
* one name per caller. A caller that has to remember which name its silo uses
|
|
486
|
+
* is a caller that can read the wrong one and silently get `undefined`, which
|
|
487
|
+
* is exactly how `siteMembers` came to be addressed by a blank merge tag.
|
|
488
|
+
*
|
|
489
|
+
* ## TWO fields can say "an operator asserted this", and both are read
|
|
490
|
+
*
|
|
491
|
+
* A backfilled CRM record announces itself with {@link
|
|
492
|
+
* MARKETING_CONSENT_SOURCE_FIELD}; a LIST MEMBERSHIP announces itself with
|
|
493
|
+
* {@link MARKETING_CONSENT_BASIS_FIELD} set to {@link
|
|
494
|
+
* OPERATOR_ATTESTED_CONSENT_BASIS}, because the enrollment path stores what
|
|
495
|
+
* KIND of basis a membership carries and stores the attesting account beside
|
|
496
|
+
* it. Reading only the first would report every attested enrollment — every
|
|
497
|
+
* address a merchant added by hand, and every address an import brings in —
|
|
498
|
+
* as a checkbox the person ticked, which is precisely the conflation the
|
|
499
|
+
* attribution exists to prevent. The send-time consent join reads a
|
|
500
|
+
* membership through this function, so the wrong answer here is the wrong
|
|
501
|
+
* answer in a compliance response.
|
|
502
|
+
*
|
|
503
|
+
* ## The basis comes from `hostId`'s ENTRY, and from nowhere else
|
|
504
|
+
*
|
|
505
|
+
* `entry = map[hostId]` — a lookup with no way to reach another host's grant.
|
|
506
|
+
* The pre-host top-level field is consulted only for the asymmetry the module
|
|
507
|
+
* note states: a `false` there refuses for every host, a `true` there grants
|
|
508
|
+
* to none and reports itself as {@link MarketingConsentOtherGrant} `'unscoped'`
|
|
509
|
+
* instead.
|
|
510
|
+
*
|
|
511
|
+
* @param record any silo's person document data, or `null` for an address
|
|
512
|
+
* with no record behind it (a hand-typed manual audience).
|
|
513
|
+
* @param hostId the site asking. Required and undefaulted: a caller that has
|
|
514
|
+
* not said which brand wants to mail this person has not asked
|
|
515
|
+
* a question this function can answer.
|
|
516
|
+
*/
|
|
517
|
+
export declare function readMarketingBasis(record: Record<string, unknown> | null | undefined, group: ConsentGroup): MarketingConsentRecord;
|
|
518
|
+
/**
|
|
519
|
+
* Every host that holds a GRANT for this person, sorted.
|
|
520
|
+
*
|
|
521
|
+
* The console readout and the API projection both need it, and the agency
|
|
522
|
+
* handoff is the third caller: "which of these rows are this client's" is
|
|
523
|
+
* this list intersected with one host.
|
|
524
|
+
*
|
|
525
|
+
* A refusal is not reported here. The question is which brands may mail this
|
|
526
|
+
* person, and an unscoped refusal answers it for all of them at once — see
|
|
527
|
+
* {@link readMarketingBasis}, which is where that asymmetry is decided.
|
|
528
|
+
*/
|
|
529
|
+
export declare function marketingConsentHostIds(record: Record<string, unknown> | null | undefined): string[];
|
|
530
|
+
/**
|
|
531
|
+
* The document fields that RECORD a basis for one host, as a spreadable
|
|
532
|
+
* object to merge onto a person document.
|
|
533
|
+
*
|
|
534
|
+
* The one writer helper for eleven capture doors. They wrote
|
|
535
|
+
* `{ marketingConsent: true, marketingConsentAtMs: … }` inline, eleven times,
|
|
536
|
+
* and every one of those grants applied to every brand in the org. A helper
|
|
537
|
+
* that takes the host is what makes the omission impossible: there is no
|
|
538
|
+
* spelling of this call that records a grant without saying whose it is.
|
|
539
|
+
*
|
|
540
|
+
* ⛔ It writes a grant and never a refusal. An opt-out is not the inverse of
|
|
541
|
+
* an opt-in — it belongs beside the site's suppression list, has to survive a
|
|
542
|
+
* later capture that would otherwise overwrite it, and is recorded by
|
|
543
|
+
* `declineMarketingConsentFields` instead.
|
|
544
|
+
*
|
|
545
|
+
* Nested rather than dot-pathed so it composes with a `{ merge: true }` set,
|
|
546
|
+
* which deep-merges maps: writing one host's entry leaves every other host's
|
|
547
|
+
* untouched. A dotted `update` would do the same but cannot be spread into
|
|
548
|
+
* the object literals these doors already build, and cannot create the
|
|
549
|
+
* document when it is new.
|
|
550
|
+
*
|
|
551
|
+
* @param atMs when the person gave it. Defaulted by the caller, not here: a
|
|
552
|
+
* clock read hidden in a helper is one a test cannot pin.
|
|
553
|
+
*/
|
|
554
|
+
export declare function marketingConsentFieldsForGroup(group: ConsentGroup, atMs: number, extra?: Readonly<Record<string, unknown>>): Record<string, unknown>;
|
|
555
|
+
/**
|
|
556
|
+
* The group-of-one convenience, for a writer that has a site and no org.
|
|
557
|
+
*
|
|
558
|
+
* Narrow by construction, which is the safe direction: a door that should
|
|
559
|
+
* have pooled and did not withholds mail, where a door that pooled without a
|
|
560
|
+
* disclosure sends it.
|
|
561
|
+
*/
|
|
562
|
+
export declare function marketingConsentFieldsForHost(hostId: string, atMs: number, extra?: Readonly<Record<string, unknown>>): Record<string, unknown>;
|
|
563
|
+
/**
|
|
564
|
+
* The document fields that record a REFUSAL for one host.
|
|
565
|
+
*
|
|
566
|
+
* Separate from the grant helper because the two are not one function with a
|
|
567
|
+
* boolean. A refusal is written by the unsubscribe path and by the API's
|
|
568
|
+
* explicit `marketingConsent: false`, neither of which carries provenance a
|
|
569
|
+
* person supplied, and — unlike a grant — the pre-host field is still honored
|
|
570
|
+
* against every host, so the two are not symmetric anywhere in this module.
|
|
571
|
+
*
|
|
572
|
+
* @param extra fields stored on the entry beside the refusal — the console
|
|
573
|
+
* doors pass the person's own provenance here (AGL-3185), the
|
|
574
|
+
* same way the grant helper takes it.
|
|
575
|
+
*/
|
|
576
|
+
export declare function declineMarketingConsentFields(hostId: string, atMs: number, extra?: Readonly<Record<string, unknown>>): Record<string, unknown>;
|
|
577
|
+
/** What a policy decided about one recipient. */
|
|
578
|
+
export type MarketingConsentVerdict =
|
|
579
|
+
/** A recorded basis. Mailable. */
|
|
580
|
+
'consented'
|
|
581
|
+
/** No recorded basis, captured before the cutoff. Mailable, and reported. */
|
|
582
|
+
| 'grandfathered'
|
|
583
|
+
/** Not mailable: a stored refusal, or no basis under an enforcing policy. */
|
|
584
|
+
| 'withheld';
|
|
585
|
+
/**
|
|
586
|
+
* WHY a record landed on its verdict — the states that must not collapse.
|
|
587
|
+
*
|
|
588
|
+
* Three of these are `withheld`, and the whole point is that they are three.
|
|
589
|
+
* A merchant told "412 withheld" cannot act; a merchant told which of these
|
|
590
|
+
* 412 are their own un-opted-in list, which belong to a sister brand, and
|
|
591
|
+
* which said no, can. And every pair of them, merged, is a defect: merge
|
|
592
|
+
* `'other-host'` into `'granted'` and an agency's client mails another
|
|
593
|
+
* client's subscribers; merge it into `'no-basis'` and nobody can see that
|
|
594
|
+
* the leak was ever closed.
|
|
595
|
+
*/
|
|
596
|
+
export type MarketingConsentReason =
|
|
597
|
+
/** This host holds a recorded basis. */
|
|
598
|
+
'granted'
|
|
599
|
+
/** No basis, captured before the cutoff by this host or by nobody. */
|
|
600
|
+
| 'grandfathered'
|
|
601
|
+
/** This host holds a recorded refusal, or an unscoped one does. */
|
|
602
|
+
| 'declined'
|
|
603
|
+
/** A grant exists, and it is not this host's. */
|
|
604
|
+
| 'other-host'
|
|
605
|
+
/** Nobody holds a basis for this person. */
|
|
606
|
+
| 'no-basis'
|
|
607
|
+
/** No basis, and the record's capture date falls under an enforcing rule. */
|
|
608
|
+
| 'not-grandfathered';
|
|
609
|
+
/** One record's verdict and the reason behind it. */
|
|
610
|
+
export interface MarketingConsentDecision {
|
|
611
|
+
verdict: MarketingConsentVerdict;
|
|
612
|
+
reason: MarketingConsentReason;
|
|
613
|
+
}
|
|
614
|
+
/**
|
|
615
|
+
* Applies a policy to one record. Pure, and the only place the rule lives.
|
|
616
|
+
*
|
|
617
|
+
* ## Grandfathering is a claim about a CAPTURE, so it belongs to the capturer
|
|
618
|
+
*
|
|
619
|
+
* Under `'forward'`, a record with no basis stays reachable because it
|
|
620
|
+
* predates enforcement. That argument is made on behalf of the brand that
|
|
621
|
+
* collected the address — it had a relationship with this person before there
|
|
622
|
+
* was a checkbox to tick. A sister brand in the same agency has no such
|
|
623
|
+
* history and inherits none by sharing an address book, so a record captured
|
|
624
|
+
* by another host does not grandfather here. Where no host is attributed the
|
|
625
|
+
* argument has nobody to belong to and nobody to exclude, so it holds: the
|
|
626
|
+
* unknown leans toward reachable, exactly as a missing capture DATE does.
|
|
627
|
+
*
|
|
628
|
+
* ## A grant elsewhere ends grandfathering outright
|
|
629
|
+
*
|
|
630
|
+
* `otherGrant` is evidence that consent WAS collected for this person and
|
|
631
|
+
* that this host is not who it was given to. Grandfathering on top of that
|
|
632
|
+
* would let the agency case back in through the one door the policy leaves
|
|
633
|
+
* open, which is the same leak in a longer sentence.
|
|
634
|
+
*/
|
|
635
|
+
export declare function marketingConsentDecision(record: MarketingConsentRecord, policy: MarketingConsentPolicy): MarketingConsentDecision;
|
|
636
|
+
/**
|
|
637
|
+
* The verdict alone, for the callers that only decide whether to send.
|
|
638
|
+
*
|
|
639
|
+
* Delegated rather than reimplemented so there is one rule and not two that
|
|
640
|
+
* agree today.
|
|
641
|
+
*/
|
|
642
|
+
export declare function marketingConsentVerdict(record: MarketingConsentRecord, policy: MarketingConsentPolicy): MarketingConsentVerdict;
|
|
643
|
+
/** The split of one audience, kept as counts so a caller can display it. */
|
|
644
|
+
export interface MarketingConsentSplit {
|
|
645
|
+
/** The addresses that may actually be mailed, in the order given. */
|
|
646
|
+
mailable: string[];
|
|
647
|
+
/** Of `mailable`, how many carry a recorded basis. */
|
|
648
|
+
consented: number;
|
|
649
|
+
/**
|
|
650
|
+
* Of `consented`, how many hold a basis an OPERATOR asserted rather than
|
|
651
|
+
* one the person gave — see {@link MarketingConsentRecord.assertedBy}.
|
|
652
|
+
*
|
|
653
|
+
* A subset of `consented` and not a fourth population, because it is not a
|
|
654
|
+
* different mailability. It is reported separately so a surface showing
|
|
655
|
+
* "N consented" can avoid presenting a backfill as N opt-ins.
|
|
656
|
+
*/
|
|
657
|
+
consentedByOperator: number;
|
|
658
|
+
/** Of `mailable`, how many are reachable only because of grandfathering. */
|
|
659
|
+
grandfathered: number;
|
|
660
|
+
/** Refused by the consent rule, and therefore never metered or mailed. */
|
|
661
|
+
withheld: number;
|
|
662
|
+
/**
|
|
663
|
+
* Of `withheld`, how many hold a recorded refusal.
|
|
664
|
+
*
|
|
665
|
+
* The three counts below partition `withheld` — they exist because one
|
|
666
|
+
* total cannot be acted on. A merchant looking at a short audience needs to
|
|
667
|
+
* know whether they are looking at people who said no, people nobody ever
|
|
668
|
+
* asked, or people who opted in to a DIFFERENT brand in the same account
|
|
669
|
+
* and were correctly left alone.
|
|
670
|
+
*/
|
|
671
|
+
withheldDeclined: number;
|
|
672
|
+
/** Of `withheld`, how many hold a grant that belongs to another brand. */
|
|
673
|
+
withheldOtherHost: number;
|
|
674
|
+
/** Of `withheld`, how many hold no basis anywhere. */
|
|
675
|
+
withheldNoBasis: number;
|
|
676
|
+
}
|
|
677
|
+
/**
|
|
678
|
+
* Splits an audience into who may be mailed and who may not, FOR ONE HOST.
|
|
679
|
+
*
|
|
680
|
+
* Returns counts rather than addresses for the reported populations: the
|
|
681
|
+
* console surface that shows this figure is telling a merchant how their
|
|
682
|
+
* audience divides, and handing back the withheld ADDRESSES would turn a
|
|
683
|
+
* consent readout into a way to export the people who declined.
|
|
684
|
+
*
|
|
685
|
+
* ## The host argument, and why a mismatch throws
|
|
686
|
+
*
|
|
687
|
+
* A consent map is built where the person documents are read and consumed
|
|
688
|
+
* somewhere else. Between those two points the host can be lost — a helper
|
|
689
|
+
* that takes one hostId and passes another, a cached map reused for a second
|
|
690
|
+
* site, a merge of two audiences. The result would be host A's grants
|
|
691
|
+
* deciding host B's send, silently and with every count still adding up.
|
|
692
|
+
*
|
|
693
|
+
* So the host is stated at both ends and compared. A mismatch is a wiring
|
|
694
|
+
* defect that no runtime value can produce, and it fails loudly rather than
|
|
695
|
+
* mailing somebody on a basis they gave to a different company. This is the
|
|
696
|
+
* same refusal `newResourceScopeFields` makes over an empty scope, for the
|
|
697
|
+
* same reason: a caller that computed the wrong thing is worth a stack trace.
|
|
698
|
+
*
|
|
699
|
+
* @param emails normalized, de-duplicated recipient addresses.
|
|
700
|
+
* @param records consent facts by address, every one read for `hostId`; a
|
|
701
|
+
* missing entry reads as a record-less address.
|
|
702
|
+
* @param hostId the site sending. Every record must have been read for it.
|
|
703
|
+
*/
|
|
704
|
+
export declare function splitByMarketingConsent(emails: readonly string[], records: ReadonlyMap<string, MarketingConsentRecord>, policy: MarketingConsentPolicy, group: ConsentGroup): MarketingConsentSplit;
|