@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,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ /**
|
|
17
|
+
* The attribute that marks an element the attribution guard keeps visible.
|
|
18
|
+
*
|
|
19
|
+
* A module of its own so the PAGE can name the attribute without taking the
|
|
20
|
+
* guard with it (AGL-2706). The page renderer marks the credit badge and the
|
|
21
|
+
* abuse-report control with this on every render; the guard that repairs
|
|
22
|
+
* them runs from an effect, on the minority of sites that show them, and
|
|
23
|
+
* arrives through a dynamic `import()`.
|
|
24
|
+
*
|
|
25
|
+
* Splitting the constant out and leaving the guard statically imported was
|
|
26
|
+
* measured and came back HEAVIER — both modules shipped, plus a second
|
|
27
|
+
* module's overhead. It is the pair of changes that pays: the constant here,
|
|
28
|
+
* and `attribution-guard.component.tsx` reaching the installer lazily.
|
|
29
|
+
*
|
|
30
|
+
* `attribution-guard.ts` re-exports this, so `@aglyn/aglyn/server` still
|
|
31
|
+
* offers the whole surface under one name.
|
|
32
|
+
*/ export const ATTRIBUTION_ATTRIBUTE = 'data-aglyn-attribution';
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=attribution-attribute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/attribution-attribute.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * The attribute that marks an element the attribution guard keeps visible.\n *\n * A module of its own so the PAGE can name the attribute without taking the\n * guard with it (AGL-2706). The page renderer marks the credit badge and the\n * abuse-report control with this on every render; the guard that repairs\n * them runs from an effect, on the minority of sites that show them, and\n * arrives through a dynamic `import()`.\n *\n * Splitting the constant out and leaving the guard statically imported was\n * measured and came back HEAVIER — both modules shipped, plus a second\n * module's overhead. It is the pair of changes that pays: the constant here,\n * and `attribution-guard.component.tsx` reaching the installer lazily.\n *\n * `attribution-guard.ts` re-exports this, so `@aglyn/aglyn/server` still\n * offers the whole surface under one name.\n */\nexport const ATTRIBUTION_ATTRIBUTE = 'data-aglyn-attribution'\n"],"names":["ATTRIBUTION_ATTRIBUTE"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;CAgBC,GACD,OAAO,MAAMA,wBAAwB,yBAAwB"}
|
|
@@ -0,0 +1,130 @@
|
|
|
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
|
+
* Keeps the credit badge and the abuse-report control on the page.
|
|
19
|
+
*
|
|
20
|
+
* Both render as ordinary elements in the published document, which means the
|
|
21
|
+
* site's own author can take them off it. Not by breaking anything — by using
|
|
22
|
+
* the product as sold: a tag manager container, a custom-code block, or three
|
|
23
|
+
* lines of theme CSS. `a[href="/api/report-abuse"] { display: none }` is the
|
|
24
|
+
* whole exploit, and the report control is precisely the thing a phishing
|
|
25
|
+
* site's author wants gone.
|
|
26
|
+
*
|
|
27
|
+
* ## What this can and cannot do
|
|
28
|
+
*
|
|
29
|
+
* It cannot make suppression impossible. The author controls the page: they
|
|
30
|
+
* can run script before this does, and at the limit they can put a proxy in
|
|
31
|
+
* front of the whole site. Anyone who promises otherwise is selling something.
|
|
32
|
+
*
|
|
33
|
+
* What it CAN do is move suppression out of reach of the tools people
|
|
34
|
+
* actually reach for, and make the attempt visible when it happens:
|
|
35
|
+
*
|
|
36
|
+
* - **Restore into a closed shadow root.** No selector crosses a shadow
|
|
37
|
+
* boundary, so the CSS above stops matching, and `document.querySelector`
|
|
38
|
+
* cannot find the contents to remove them. The mount element carries a
|
|
39
|
+
* name minted per page load, so a stylesheet cannot name it either, and its
|
|
40
|
+
* own layout properties are set inline `!important` — the highest
|
|
41
|
+
* precedence an author-origin declaration has, which a stylesheet rule of
|
|
42
|
+
* any specificity cannot beat.
|
|
43
|
+
* - **Put it back.** Removing the mount re-appends it; overwriting its styles
|
|
44
|
+
* re-asserts them.
|
|
45
|
+
* - **Say so.** A suppression that had to be repaired is reported once per
|
|
46
|
+
* page view, so the site becomes reviewable rather than quietly
|
|
47
|
+
* unattributed. This is the part that actually matters: enforcement is a
|
|
48
|
+
* policy decision made by a person, and it needs a signal to act on.
|
|
49
|
+
*
|
|
50
|
+
* ## Deliberately not pre-emptive
|
|
51
|
+
*
|
|
52
|
+
* The badge is left in the light DOM until something tries to suppress it.
|
|
53
|
+
* It is the platform's only organic acquisition surface — one crawlable link
|
|
54
|
+
* on every free site — and burying it in a closed shadow root on every page
|
|
55
|
+
* load to defend against a minority would cost that on all of them.
|
|
56
|
+
*
|
|
57
|
+
* ## Why not `MuiShadowDom` / `shadowDomRootFactory`
|
|
58
|
+
*
|
|
59
|
+
* Both existing shadow-root helpers are React components that `createPortal`
|
|
60
|
+
* their children into the root, and React has to own the contents. That is
|
|
61
|
+
* the one thing this cannot have.
|
|
62
|
+
*
|
|
63
|
+
* The job is to put back a node that foreign script deleted, and React does
|
|
64
|
+
* not react to its own output being removed — the reconciler answers to state
|
|
65
|
+
* changes, not to DOM deletion, so a portalled subtree whose mount is taken
|
|
66
|
+
* off `document.body` simply stays gone. The MutationObserver below would be
|
|
67
|
+
* needed either way, and it would then be re-appending an element React
|
|
68
|
+
* believes it is managing, which is the shape that produces "removeChild on a
|
|
69
|
+
* node that is not a child" the next time React touches it.
|
|
70
|
+
*
|
|
71
|
+
* Plain DOM also means the repair outlives React: an unmount, an error
|
|
72
|
+
* boundary tripping, or the author's own script tearing out the root does not
|
|
73
|
+
* take it with them. (Both helpers also default to `mode: 'open'` and carry
|
|
74
|
+
* SSR and adopted-stylesheet machinery built for the besigner canvas, none of
|
|
75
|
+
* which applies here.)
|
|
76
|
+
*
|
|
77
|
+
* Framework-free, like `error-beacon` beside it, and for the same reason: the
|
|
78
|
+
* install must be able to run before any effect. Deliberately NO 'use client'
|
|
79
|
+
* directive — inside this shared lib the directive forks the module graph
|
|
80
|
+
* (AGL-52), and every importer is already a client module.
|
|
81
|
+
*
|
|
82
|
+
* ## Reached through a dynamic `import()`
|
|
83
|
+
*
|
|
84
|
+
* Nothing on the tenant's eager path names this module. The renderer marks
|
|
85
|
+
* its elements with `ATTRIBUTION_ATTRIBUTE`, which lives in a module of its
|
|
86
|
+
* own for exactly that reason, and `attribution-guard.component.tsx` imports
|
|
87
|
+
* this one from inside its effect — so the sites that show no attribution,
|
|
88
|
+
* which is every paid site, never fetch it (AGL-2706). The element copies the
|
|
89
|
+
* repair rebuilds from are taken by the component BEFORE the chunk is asked
|
|
90
|
+
* for; see `shipped` below.
|
|
91
|
+
*/
|
|
92
|
+
export { ATTRIBUTION_ATTRIBUTE } from './attribution-attribute';
|
|
93
|
+
/** Why a check failed. Reported verbatim, so keep these short and stable. */
|
|
94
|
+
export type AttributionSuppression = 'removed' | 'display' | 'visibility' | 'opacity' | 'collapsed' | 'pointer-events' | 'offscreen' | 'covered';
|
|
95
|
+
export interface AttributionGuardOptions {
|
|
96
|
+
/** Where a suppression is reported. Same-origin path, never a URL. */
|
|
97
|
+
endpoint?: string;
|
|
98
|
+
/** The site being checked, so the report names one without a lookup. */
|
|
99
|
+
hostId?: string;
|
|
100
|
+
/**
|
|
101
|
+
* What the page rendered, keyed by subject, captured before this module
|
|
102
|
+
* was even fetched.
|
|
103
|
+
*
|
|
104
|
+
* The caller takes these because the repair rebuilds a suppressed element
|
|
105
|
+
* from a copy of the original, and by the time one is missing there is
|
|
106
|
+
* nothing left to clone. This module arrives through a dynamic `import()`,
|
|
107
|
+
* so a capture taken here would be a capture taken a chunk fetch late.
|
|
108
|
+
*
|
|
109
|
+
* Omitted, the document is read directly — which is what a test does, and
|
|
110
|
+
* what any caller that is already on the page's critical path may do.
|
|
111
|
+
*/
|
|
112
|
+
shipped?: ReadonlyMap<string, Element>;
|
|
113
|
+
/** Overridable for tests; the real one is `window`. */
|
|
114
|
+
view?: Window & typeof globalThis;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Whether an element is actually presented to the reader.
|
|
118
|
+
*
|
|
119
|
+
* Computed style first, because that is what CSS suppression changes, and
|
|
120
|
+
* hit-testing last, because that is what a full-page overlay does — an
|
|
121
|
+
* element can be perfectly visible by every style property and still sit
|
|
122
|
+
* under something with a higher `z-index`.
|
|
123
|
+
*/
|
|
124
|
+
export declare function inspectAttributionElement(element: Element | null | undefined, view: Window & typeof globalThis): AttributionSuppression | null;
|
|
125
|
+
export declare function installAttributionGuard(options?: AttributionGuardOptions): void;
|
|
126
|
+
/**
|
|
127
|
+
* Test seam: forgets the install so a second one takes effect, and stops the
|
|
128
|
+
* keepers it armed. Nothing in a browser calls this — see `keepers`.
|
|
129
|
+
*/
|
|
130
|
+
export declare function resetAttributionGuard(): void;
|
|
@@ -0,0 +1,410 @@
|
|
|
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
|
+
* Keeps the credit badge and the abuse-report control on the page.
|
|
18
|
+
*
|
|
19
|
+
* Both render as ordinary elements in the published document, which means the
|
|
20
|
+
* site's own author can take them off it. Not by breaking anything — by using
|
|
21
|
+
* the product as sold: a tag manager container, a custom-code block, or three
|
|
22
|
+
* lines of theme CSS. `a[href="/api/report-abuse"] { display: none }` is the
|
|
23
|
+
* whole exploit, and the report control is precisely the thing a phishing
|
|
24
|
+
* site's author wants gone.
|
|
25
|
+
*
|
|
26
|
+
* ## What this can and cannot do
|
|
27
|
+
*
|
|
28
|
+
* It cannot make suppression impossible. The author controls the page: they
|
|
29
|
+
* can run script before this does, and at the limit they can put a proxy in
|
|
30
|
+
* front of the whole site. Anyone who promises otherwise is selling something.
|
|
31
|
+
*
|
|
32
|
+
* What it CAN do is move suppression out of reach of the tools people
|
|
33
|
+
* actually reach for, and make the attempt visible when it happens:
|
|
34
|
+
*
|
|
35
|
+
* - **Restore into a closed shadow root.** No selector crosses a shadow
|
|
36
|
+
* boundary, so the CSS above stops matching, and `document.querySelector`
|
|
37
|
+
* cannot find the contents to remove them. The mount element carries a
|
|
38
|
+
* name minted per page load, so a stylesheet cannot name it either, and its
|
|
39
|
+
* own layout properties are set inline `!important` — the highest
|
|
40
|
+
* precedence an author-origin declaration has, which a stylesheet rule of
|
|
41
|
+
* any specificity cannot beat.
|
|
42
|
+
* - **Put it back.** Removing the mount re-appends it; overwriting its styles
|
|
43
|
+
* re-asserts them.
|
|
44
|
+
* - **Say so.** A suppression that had to be repaired is reported once per
|
|
45
|
+
* page view, so the site becomes reviewable rather than quietly
|
|
46
|
+
* unattributed. This is the part that actually matters: enforcement is a
|
|
47
|
+
* policy decision made by a person, and it needs a signal to act on.
|
|
48
|
+
*
|
|
49
|
+
* ## Deliberately not pre-emptive
|
|
50
|
+
*
|
|
51
|
+
* The badge is left in the light DOM until something tries to suppress it.
|
|
52
|
+
* It is the platform's only organic acquisition surface — one crawlable link
|
|
53
|
+
* on every free site — and burying it in a closed shadow root on every page
|
|
54
|
+
* load to defend against a minority would cost that on all of them.
|
|
55
|
+
*
|
|
56
|
+
* ## Why not `MuiShadowDom` / `shadowDomRootFactory`
|
|
57
|
+
*
|
|
58
|
+
* Both existing shadow-root helpers are React components that `createPortal`
|
|
59
|
+
* their children into the root, and React has to own the contents. That is
|
|
60
|
+
* the one thing this cannot have.
|
|
61
|
+
*
|
|
62
|
+
* The job is to put back a node that foreign script deleted, and React does
|
|
63
|
+
* not react to its own output being removed — the reconciler answers to state
|
|
64
|
+
* changes, not to DOM deletion, so a portalled subtree whose mount is taken
|
|
65
|
+
* off `document.body` simply stays gone. The MutationObserver below would be
|
|
66
|
+
* needed either way, and it would then be re-appending an element React
|
|
67
|
+
* believes it is managing, which is the shape that produces "removeChild on a
|
|
68
|
+
* node that is not a child" the next time React touches it.
|
|
69
|
+
*
|
|
70
|
+
* Plain DOM also means the repair outlives React: an unmount, an error
|
|
71
|
+
* boundary tripping, or the author's own script tearing out the root does not
|
|
72
|
+
* take it with them. (Both helpers also default to `mode: 'open'` and carry
|
|
73
|
+
* SSR and adopted-stylesheet machinery built for the besigner canvas, none of
|
|
74
|
+
* which applies here.)
|
|
75
|
+
*
|
|
76
|
+
* Framework-free, like `error-beacon` beside it, and for the same reason: the
|
|
77
|
+
* install must be able to run before any effect. Deliberately NO 'use client'
|
|
78
|
+
* directive — inside this shared lib the directive forks the module graph
|
|
79
|
+
* (AGL-52), and every importer is already a client module.
|
|
80
|
+
*
|
|
81
|
+
* ## Reached through a dynamic `import()`
|
|
82
|
+
*
|
|
83
|
+
* Nothing on the tenant's eager path names this module. The renderer marks
|
|
84
|
+
* its elements with `ATTRIBUTION_ATTRIBUTE`, which lives in a module of its
|
|
85
|
+
* own for exactly that reason, and `attribution-guard.component.tsx` imports
|
|
86
|
+
* this one from inside its effect — so the sites that show no attribution,
|
|
87
|
+
* which is every paid site, never fetch it (AGL-2706). The element copies the
|
|
88
|
+
* repair rebuilds from are taken by the component BEFORE the chunk is asked
|
|
89
|
+
* for; see `shipped` below.
|
|
90
|
+
*/ // The attribute the page marks its elements with. Re-exported so this module
|
|
91
|
+
// still offers the whole surface under one name — the page itself takes it
|
|
92
|
+
// from the leaf, which is what keeps this file off the eager path.
|
|
93
|
+
export { ATTRIBUTION_ATTRIBUTE } from "./attribution-attribute.js";
|
|
94
|
+
import { ATTRIBUTION_ATTRIBUTE } from "./attribution-attribute.js";
|
|
95
|
+
const DEFAULT_ENDPOINT = '/api/attribution';
|
|
96
|
+
/**
|
|
97
|
+
* When the checks run, in ms after install.
|
|
98
|
+
*
|
|
99
|
+
* Front-loaded because the interesting case is a tag manager that fires on
|
|
100
|
+
* load and removes the control before anyone sees it; the long tail catches
|
|
101
|
+
* a rule that only applies after an interaction, or a script that waits.
|
|
102
|
+
* Bounded rather than a forever-interval: a permanently-armed timer on every
|
|
103
|
+
* published page is a cost on every visitor to defend against one author.
|
|
104
|
+
*/ const CHECK_SCHEDULE_MS = [
|
|
105
|
+
800,
|
|
106
|
+
2500,
|
|
107
|
+
6000,
|
|
108
|
+
15000,
|
|
109
|
+
40000
|
|
110
|
+
];
|
|
111
|
+
/** Below this, an element is not meaningfully on the page. */ const MIN_VISIBLE_PX = 4;
|
|
112
|
+
const MIN_OPACITY = 0.15;
|
|
113
|
+
let installed = false;
|
|
114
|
+
/**
|
|
115
|
+
* The observers this guard has armed.
|
|
116
|
+
*
|
|
117
|
+
* Kept so a test can take them off the document again. In a browser they run
|
|
118
|
+
* for the life of the page, which is the point — a keeper that stops keeping
|
|
119
|
+
* is the same as no keeper — but a test document outlives the test, and an
|
|
120
|
+
* observer left watching `body` puts its mount back the moment the next test
|
|
121
|
+
* clears the page.
|
|
122
|
+
*/ const keepers = [];
|
|
123
|
+
/**
|
|
124
|
+
* Whether an element is actually presented to the reader.
|
|
125
|
+
*
|
|
126
|
+
* Computed style first, because that is what CSS suppression changes, and
|
|
127
|
+
* hit-testing last, because that is what a full-page overlay does — an
|
|
128
|
+
* element can be perfectly visible by every style property and still sit
|
|
129
|
+
* under something with a higher `z-index`.
|
|
130
|
+
*/ export function inspectAttributionElement(element, view) {
|
|
131
|
+
var _element_ownerDocument;
|
|
132
|
+
if (!element || !element.isConnected) return 'removed';
|
|
133
|
+
const style = view.getComputedStyle(element);
|
|
134
|
+
if (style.display === 'none') return 'display';
|
|
135
|
+
if (style.visibility === 'hidden' || style.visibility === 'collapse') {
|
|
136
|
+
return 'visibility';
|
|
137
|
+
}
|
|
138
|
+
// An unreadable opacity is treated as fully opaque, not as zero. `opacity`
|
|
139
|
+
// has an initial value of 1 and every engine should report it, but a value
|
|
140
|
+
// this function cannot parse is a question it did not get an answer to —
|
|
141
|
+
// and the cost of guessing wrong is accusing a site of hiding something it
|
|
142
|
+
// is showing.
|
|
143
|
+
const opacity = Number.parseFloat(style.opacity);
|
|
144
|
+
if (Number.isFinite(opacity) && opacity < MIN_OPACITY) return 'opacity';
|
|
145
|
+
if (style.pointerEvents === 'none') return 'pointer-events';
|
|
146
|
+
const rect = element.getBoundingClientRect();
|
|
147
|
+
if (rect.width < MIN_VISIBLE_PX || rect.height < MIN_VISIBLE_PX) {
|
|
148
|
+
return 'collapsed';
|
|
149
|
+
}
|
|
150
|
+
// `position: fixed` with a large negative offset is the other classic —
|
|
151
|
+
// still rendered, still the right size, nowhere a reader will ever look.
|
|
152
|
+
const beyond = rect.right < 0 || rect.bottom < 0 || rect.left > view.innerWidth || rect.top > view.innerHeight;
|
|
153
|
+
if (beyond) return 'offscreen';
|
|
154
|
+
const x = Math.round(rect.left + rect.width / 2);
|
|
155
|
+
const y = Math.round(rect.top + rect.height / 2);
|
|
156
|
+
const hit = (_element_ownerDocument = element.ownerDocument) == null ? void 0 : _element_ownerDocument.elementFromPoint(x, y);
|
|
157
|
+
// A descendant is the element; an ancestor means nothing was drawn over it
|
|
158
|
+
// and the point landed on the parent's own box. Anything else is a cover.
|
|
159
|
+
if (hit && hit !== element && !element.contains(hit) && !hit.contains(element)) {
|
|
160
|
+
return 'covered';
|
|
161
|
+
}
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
/** A tag name no stylesheet written before this page load can name. */ function mintMountName(view) {
|
|
165
|
+
var _view_crypto;
|
|
166
|
+
const bytes = new Uint8Array(8);
|
|
167
|
+
if ((_view_crypto = view.crypto) == null ? void 0 : _view_crypto.getRandomValues) view.crypto.getRandomValues(bytes);
|
|
168
|
+
const suffix = Array.from(bytes, (byte)=>byte.toString(36).padStart(2, '0')).join('');
|
|
169
|
+
// Hyphenated, so the parser treats it as an unknown ELEMENT rather than
|
|
170
|
+
// trying to match a built-in, and it inherits nothing from a `div` rule.
|
|
171
|
+
return `a-${suffix}`.slice(0, 24);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* The layout properties an author's CSS would have to win to hide this, set
|
|
175
|
+
* inline and important. Re-applied rather than set once: a script can
|
|
176
|
+
* overwrite `style` as easily as a stylesheet can lose to it.
|
|
177
|
+
*
|
|
178
|
+
* Writes only what is actually wrong. The observer that calls this watches
|
|
179
|
+
* the mount's `style` attribute, so an unconditional write is a mutation that
|
|
180
|
+
* schedules the observer that performs the write — the loop does not
|
|
181
|
+
* terminate, and it is not slow enough to look like anything but a hang.
|
|
182
|
+
*/ function pinMountStyle(mount, corner) {
|
|
183
|
+
const pinned = [
|
|
184
|
+
[
|
|
185
|
+
'position',
|
|
186
|
+
'fixed'
|
|
187
|
+
],
|
|
188
|
+
[
|
|
189
|
+
'bottom',
|
|
190
|
+
'12px'
|
|
191
|
+
],
|
|
192
|
+
[
|
|
193
|
+
corner,
|
|
194
|
+
'12px'
|
|
195
|
+
],
|
|
196
|
+
[
|
|
197
|
+
'z-index',
|
|
198
|
+
'2147483000'
|
|
199
|
+
],
|
|
200
|
+
[
|
|
201
|
+
'display',
|
|
202
|
+
'block'
|
|
203
|
+
],
|
|
204
|
+
[
|
|
205
|
+
'visibility',
|
|
206
|
+
'visible'
|
|
207
|
+
],
|
|
208
|
+
[
|
|
209
|
+
'opacity',
|
|
210
|
+
'1'
|
|
211
|
+
],
|
|
212
|
+
[
|
|
213
|
+
'pointer-events',
|
|
214
|
+
'auto'
|
|
215
|
+
],
|
|
216
|
+
[
|
|
217
|
+
'transform',
|
|
218
|
+
'none'
|
|
219
|
+
],
|
|
220
|
+
[
|
|
221
|
+
'clip-path',
|
|
222
|
+
'none'
|
|
223
|
+
],
|
|
224
|
+
[
|
|
225
|
+
'filter',
|
|
226
|
+
'none'
|
|
227
|
+
],
|
|
228
|
+
[
|
|
229
|
+
'width',
|
|
230
|
+
'auto'
|
|
231
|
+
],
|
|
232
|
+
[
|
|
233
|
+
'height',
|
|
234
|
+
'auto'
|
|
235
|
+
],
|
|
236
|
+
[
|
|
237
|
+
'max-width',
|
|
238
|
+
'none'
|
|
239
|
+
],
|
|
240
|
+
[
|
|
241
|
+
'max-height',
|
|
242
|
+
'none'
|
|
243
|
+
]
|
|
244
|
+
];
|
|
245
|
+
for (const [property, value] of pinned){
|
|
246
|
+
if (mount.style.getPropertyValue(property) === value && mount.style.getPropertyPriority(property) === 'important') {
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
mount.style.setProperty(property, value, 'important');
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
export function installAttributionGuard(options = {}) {
|
|
253
|
+
var _options_view, _options_endpoint;
|
|
254
|
+
const view = (_options_view = options.view) != null ? _options_view : globalThis;
|
|
255
|
+
if (installed || typeof (view == null ? void 0 : view.document) === 'undefined') return;
|
|
256
|
+
installed = true;
|
|
257
|
+
const doc = view.document;
|
|
258
|
+
const endpoint = (_options_endpoint = options.endpoint) != null ? _options_endpoint : DEFAULT_ENDPOINT;
|
|
259
|
+
let reported = false;
|
|
260
|
+
const restored = new Set();
|
|
261
|
+
const report = (reason, subject)=>{
|
|
262
|
+
if (reported) return;
|
|
263
|
+
reported = true;
|
|
264
|
+
try {
|
|
265
|
+
var _options_hostId;
|
|
266
|
+
var _view_navigator;
|
|
267
|
+
const body = JSON.stringify({
|
|
268
|
+
hostId: (_options_hostId = options.hostId) != null ? _options_hostId : '',
|
|
269
|
+
reason,
|
|
270
|
+
subject,
|
|
271
|
+
// Origin + pathname only, like the error beacon: a query string on a
|
|
272
|
+
// published page carries search terms and campaign ids.
|
|
273
|
+
url: `${view.location.origin}${view.location.pathname}`
|
|
274
|
+
});
|
|
275
|
+
// `sendBeacon` survives the pagehide that a script removing the badge
|
|
276
|
+
// on the way out would otherwise win against; `fetch` with `keepalive`
|
|
277
|
+
// is the fallback where it is missing. Both are same-origin.
|
|
278
|
+
if ((_view_navigator = view.navigator) == null ? void 0 : _view_navigator.sendBeacon) {
|
|
279
|
+
view.navigator.sendBeacon(endpoint, body);
|
|
280
|
+
} else {
|
|
281
|
+
void fetch(endpoint, {
|
|
282
|
+
method: 'POST',
|
|
283
|
+
body,
|
|
284
|
+
keepalive: true
|
|
285
|
+
}).catch(()=>undefined);
|
|
286
|
+
}
|
|
287
|
+
} catch (unused) {
|
|
288
|
+
// A guard that throws is worse than a guard that misses one report.
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
/**
|
|
292
|
+
* Rebuilds one element inside a closed shadow root and keeps it there.
|
|
293
|
+
*
|
|
294
|
+
* The original is left where it is. It may be perfectly fine and merely
|
|
295
|
+
* covered; removing it would take away a working link on the chance that it
|
|
296
|
+
* is not, and a duplicate that cannot be seen costs nothing.
|
|
297
|
+
*/ const restore = (subject, original)=>{
|
|
298
|
+
if (restored.has(subject)) return;
|
|
299
|
+
restored.add(subject);
|
|
300
|
+
try {
|
|
301
|
+
const corner = subject === 'report' ? 'left' : 'right';
|
|
302
|
+
const mount = doc.createElement(mintMountName(view));
|
|
303
|
+
pinMountStyle(mount, corner);
|
|
304
|
+
const root = mount.attachShadow({
|
|
305
|
+
mode: 'closed'
|
|
306
|
+
});
|
|
307
|
+
const clone = original.cloneNode(true);
|
|
308
|
+
// The clone is positioned by its mount now, not by its own `fixed`
|
|
309
|
+
// coordinates, or the two would stack in the same corner.
|
|
310
|
+
clone.style.setProperty('position', 'static', 'important');
|
|
311
|
+
clone.style.setProperty('display', 'inline-flex', 'important');
|
|
312
|
+
root.appendChild(clone);
|
|
313
|
+
doc.body.appendChild(mount);
|
|
314
|
+
// Put it back if it is taken off, and re-pin the styles if they are
|
|
315
|
+
// overwritten. Watching the mount's own attributes as well as the body's
|
|
316
|
+
// children covers both moves with one observer.
|
|
317
|
+
const keeper = new MutationObserver(()=>{
|
|
318
|
+
try {
|
|
319
|
+
if (!mount.isConnected) doc.body.appendChild(mount);
|
|
320
|
+
pinMountStyle(mount, corner);
|
|
321
|
+
} catch (unused) {
|
|
322
|
+
// Ditto.
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
keeper.observe(doc.body, {
|
|
326
|
+
childList: true
|
|
327
|
+
});
|
|
328
|
+
keeper.observe(mount, {
|
|
329
|
+
attributes: true,
|
|
330
|
+
attributeFilter: [
|
|
331
|
+
'style'
|
|
332
|
+
]
|
|
333
|
+
});
|
|
334
|
+
keepers.push(keeper);
|
|
335
|
+
} catch (unused) {
|
|
336
|
+
// Ditto: a browser without shadow DOM keeps the original element and
|
|
337
|
+
// loses only the repair.
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
// What this page rendered, captured before anything has had a chance to
|
|
341
|
+
// take it away — the repair needs a copy of the element to rebuild, and by
|
|
342
|
+
// the time one is missing there is nothing left to clone. Supplied by the
|
|
343
|
+
// caller where it can be taken earlier than this module exists; see
|
|
344
|
+
// `shipped` on the options.
|
|
345
|
+
const templates = new Map();
|
|
346
|
+
try {
|
|
347
|
+
if (options.shipped) {
|
|
348
|
+
for (const [subject, element] of options.shipped){
|
|
349
|
+
if (subject) templates.set(subject, element);
|
|
350
|
+
}
|
|
351
|
+
} else {
|
|
352
|
+
for (const element of Array.from(doc.querySelectorAll(`[${ATTRIBUTION_ATTRIBUTE}]`))){
|
|
353
|
+
var _element_getAttribute;
|
|
354
|
+
const subject = (_element_getAttribute = element.getAttribute(ATTRIBUTION_ATTRIBUTE)) != null ? _element_getAttribute : '';
|
|
355
|
+
if (!subject || templates.has(subject)) continue;
|
|
356
|
+
templates.set(subject, element.cloneNode(true));
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
} catch (unused) {
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
const shipped = [
|
|
363
|
+
...templates.keys()
|
|
364
|
+
];
|
|
365
|
+
if (!shipped.length) return;
|
|
366
|
+
const check = ()=>{
|
|
367
|
+
let elements;
|
|
368
|
+
try {
|
|
369
|
+
elements = Array.from(doc.querySelectorAll(`[${ATTRIBUTION_ATTRIBUTE}]`));
|
|
370
|
+
} catch (unused) {
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
for (const element of elements){
|
|
374
|
+
var _element_getAttribute;
|
|
375
|
+
const subject = (_element_getAttribute = element.getAttribute(ATTRIBUTION_ATTRIBUTE)) != null ? _element_getAttribute : 'unknown';
|
|
376
|
+
if (restored.has(subject)) continue;
|
|
377
|
+
const suppression = inspectAttributionElement(element, view);
|
|
378
|
+
if (!suppression) continue;
|
|
379
|
+
restore(subject, element);
|
|
380
|
+
report(suppression, subject);
|
|
381
|
+
}
|
|
382
|
+
// A removed element has no node left to inspect, so the loop above cannot
|
|
383
|
+
// see it. The subjects this page shipped are the ones to account for.
|
|
384
|
+
for (const subject of shipped){
|
|
385
|
+
if (restored.has(subject)) continue;
|
|
386
|
+
if (doc.querySelector(`[${ATTRIBUTION_ATTRIBUTE}="${subject}"]`)) continue;
|
|
387
|
+
const template = templates.get(subject);
|
|
388
|
+
if (template) restore(subject, template);
|
|
389
|
+
report('removed', subject);
|
|
390
|
+
}
|
|
391
|
+
};
|
|
392
|
+
for (const delay of CHECK_SCHEDULE_MS){
|
|
393
|
+
view.setTimeout(()=>{
|
|
394
|
+
try {
|
|
395
|
+
check();
|
|
396
|
+
} catch (unused) {
|
|
397
|
+
// Ditto.
|
|
398
|
+
}
|
|
399
|
+
}, delay);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Test seam: forgets the install so a second one takes effect, and stops the
|
|
404
|
+
* keepers it armed. Nothing in a browser calls this — see `keepers`.
|
|
405
|
+
*/ export function resetAttributionGuard() {
|
|
406
|
+
installed = false;
|
|
407
|
+
for (const keeper of keepers.splice(0))keeper.disconnect();
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
//# sourceMappingURL=attribution-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/attribution-guard.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Keeps the credit badge and the abuse-report control on the page.\n *\n * Both render as ordinary elements in the published document, which means the\n * site's own author can take them off it. Not by breaking anything — by using\n * the product as sold: a tag manager container, a custom-code block, or three\n * lines of theme CSS. `a[href=\"/api/report-abuse\"] { display: none }` is the\n * whole exploit, and the report control is precisely the thing a phishing\n * site's author wants gone.\n *\n * ## What this can and cannot do\n *\n * It cannot make suppression impossible. The author controls the page: they\n * can run script before this does, and at the limit they can put a proxy in\n * front of the whole site. Anyone who promises otherwise is selling something.\n *\n * What it CAN do is move suppression out of reach of the tools people\n * actually reach for, and make the attempt visible when it happens:\n *\n * - **Restore into a closed shadow root.** No selector crosses a shadow\n * boundary, so the CSS above stops matching, and `document.querySelector`\n * cannot find the contents to remove them. The mount element carries a\n * name minted per page load, so a stylesheet cannot name it either, and its\n * own layout properties are set inline `!important` — the highest\n * precedence an author-origin declaration has, which a stylesheet rule of\n * any specificity cannot beat.\n * - **Put it back.** Removing the mount re-appends it; overwriting its styles\n * re-asserts them.\n * - **Say so.** A suppression that had to be repaired is reported once per\n * page view, so the site becomes reviewable rather than quietly\n * unattributed. This is the part that actually matters: enforcement is a\n * policy decision made by a person, and it needs a signal to act on.\n *\n * ## Deliberately not pre-emptive\n *\n * The badge is left in the light DOM until something tries to suppress it.\n * It is the platform's only organic acquisition surface — one crawlable link\n * on every free site — and burying it in a closed shadow root on every page\n * load to defend against a minority would cost that on all of them.\n *\n * ## Why not `MuiShadowDom` / `shadowDomRootFactory`\n *\n * Both existing shadow-root helpers are React components that `createPortal`\n * their children into the root, and React has to own the contents. That is\n * the one thing this cannot have.\n *\n * The job is to put back a node that foreign script deleted, and React does\n * not react to its own output being removed — the reconciler answers to state\n * changes, not to DOM deletion, so a portalled subtree whose mount is taken\n * off `document.body` simply stays gone. The MutationObserver below would be\n * needed either way, and it would then be re-appending an element React\n * believes it is managing, which is the shape that produces \"removeChild on a\n * node that is not a child\" the next time React touches it.\n *\n * Plain DOM also means the repair outlives React: an unmount, an error\n * boundary tripping, or the author's own script tearing out the root does not\n * take it with them. (Both helpers also default to `mode: 'open'` and carry\n * SSR and adopted-stylesheet machinery built for the besigner canvas, none of\n * which applies here.)\n *\n * Framework-free, like `error-beacon` beside it, and for the same reason: the\n * install must be able to run before any effect. Deliberately NO 'use client'\n * directive — inside this shared lib the directive forks the module graph\n * (AGL-52), and every importer is already a client module.\n *\n * ## Reached through a dynamic `import()`\n *\n * Nothing on the tenant's eager path names this module. The renderer marks\n * its elements with `ATTRIBUTION_ATTRIBUTE`, which lives in a module of its\n * own for exactly that reason, and `attribution-guard.component.tsx` imports\n * this one from inside its effect — so the sites that show no attribution,\n * which is every paid site, never fetch it (AGL-2706). The element copies the\n * repair rebuilds from are taken by the component BEFORE the chunk is asked\n * for; see `shipped` below.\n */\n\n// The attribute the page marks its elements with. Re-exported so this module\n// still offers the whole surface under one name — the page itself takes it\n// from the leaf, which is what keeps this file off the eager path.\nexport { ATTRIBUTION_ATTRIBUTE } from './attribution-attribute'\n\nimport { ATTRIBUTION_ATTRIBUTE } from './attribution-attribute'\n\n/** Why a check failed. Reported verbatim, so keep these short and stable. */\nexport type AttributionSuppression =\n | 'removed'\n | 'display'\n | 'visibility'\n | 'opacity'\n | 'collapsed'\n | 'pointer-events'\n | 'offscreen'\n | 'covered'\n\nexport interface AttributionGuardOptions {\n /** Where a suppression is reported. Same-origin path, never a URL. */\n endpoint?: string\n /** The site being checked, so the report names one without a lookup. */\n hostId?: string\n /**\n * What the page rendered, keyed by subject, captured before this module\n * was even fetched.\n *\n * The caller takes these because the repair rebuilds a suppressed element\n * from a copy of the original, and by the time one is missing there is\n * nothing left to clone. This module arrives through a dynamic `import()`,\n * so a capture taken here would be a capture taken a chunk fetch late.\n *\n * Omitted, the document is read directly — which is what a test does, and\n * what any caller that is already on the page's critical path may do.\n */\n shipped?: ReadonlyMap<string, Element>\n /** Overridable for tests; the real one is `window`. */\n view?: Window & typeof globalThis\n}\n\nconst DEFAULT_ENDPOINT = '/api/attribution'\n\n/**\n * When the checks run, in ms after install.\n *\n * Front-loaded because the interesting case is a tag manager that fires on\n * load and removes the control before anyone sees it; the long tail catches\n * a rule that only applies after an interaction, or a script that waits.\n * Bounded rather than a forever-interval: a permanently-armed timer on every\n * published page is a cost on every visitor to defend against one author.\n */\nconst CHECK_SCHEDULE_MS = [800, 2_500, 6_000, 15_000, 40_000] as const\n\n/** Below this, an element is not meaningfully on the page. */\nconst MIN_VISIBLE_PX = 4\nconst MIN_OPACITY = 0.15\n\nlet installed = false\n\n/**\n * The observers this guard has armed.\n *\n * Kept so a test can take them off the document again. In a browser they run\n * for the life of the page, which is the point — a keeper that stops keeping\n * is the same as no keeper — but a test document outlives the test, and an\n * observer left watching `body` puts its mount back the moment the next test\n * clears the page.\n */\nconst keepers: MutationObserver[] = []\n\n/**\n * Whether an element is actually presented to the reader.\n *\n * Computed style first, because that is what CSS suppression changes, and\n * hit-testing last, because that is what a full-page overlay does — an\n * element can be perfectly visible by every style property and still sit\n * under something with a higher `z-index`.\n */\nexport function inspectAttributionElement(\n element: Element | null | undefined,\n view: Window & typeof globalThis,\n): AttributionSuppression | null {\n if (!element || !element.isConnected) return 'removed'\n const style = view.getComputedStyle(element)\n if (style.display === 'none') return 'display'\n if (style.visibility === 'hidden' || style.visibility === 'collapse') {\n return 'visibility'\n }\n // An unreadable opacity is treated as fully opaque, not as zero. `opacity`\n // has an initial value of 1 and every engine should report it, but a value\n // this function cannot parse is a question it did not get an answer to —\n // and the cost of guessing wrong is accusing a site of hiding something it\n // is showing.\n const opacity = Number.parseFloat(style.opacity)\n if (Number.isFinite(opacity) && opacity < MIN_OPACITY) return 'opacity'\n if (style.pointerEvents === 'none') return 'pointer-events'\n const rect = element.getBoundingClientRect()\n if (rect.width < MIN_VISIBLE_PX || rect.height < MIN_VISIBLE_PX) {\n return 'collapsed'\n }\n // `position: fixed` with a large negative offset is the other classic —\n // still rendered, still the right size, nowhere a reader will ever look.\n const beyond =\n rect.right < 0 ||\n rect.bottom < 0 ||\n rect.left > view.innerWidth ||\n rect.top > view.innerHeight\n if (beyond) return 'offscreen'\n const x = Math.round(rect.left + rect.width / 2)\n const y = Math.round(rect.top + rect.height / 2)\n const hit = element.ownerDocument?.elementFromPoint(x, y)\n // A descendant is the element; an ancestor means nothing was drawn over it\n // and the point landed on the parent's own box. Anything else is a cover.\n if (hit && hit !== element && !element.contains(hit) && !hit.contains(element)) {\n return 'covered'\n }\n return null\n}\n\n/** A tag name no stylesheet written before this page load can name. */\nfunction mintMountName(view: Window & typeof globalThis): string {\n const bytes = new Uint8Array(8)\n if (view.crypto?.getRandomValues) view.crypto.getRandomValues(bytes)\n const suffix = Array.from(bytes, (byte) =>\n byte.toString(36).padStart(2, '0'),\n ).join('')\n // Hyphenated, so the parser treats it as an unknown ELEMENT rather than\n // trying to match a built-in, and it inherits nothing from a `div` rule.\n return `a-${suffix}`.slice(0, 24)\n}\n\n/**\n * The layout properties an author's CSS would have to win to hide this, set\n * inline and important. Re-applied rather than set once: a script can\n * overwrite `style` as easily as a stylesheet can lose to it.\n *\n * Writes only what is actually wrong. The observer that calls this watches\n * the mount's `style` attribute, so an unconditional write is a mutation that\n * schedules the observer that performs the write — the loop does not\n * terminate, and it is not slow enough to look like anything but a hang.\n */\nfunction pinMountStyle(mount: HTMLElement, corner: 'left' | 'right'): void {\n const pinned: Array<[string, string]> = [\n ['position', 'fixed'],\n ['bottom', '12px'],\n [corner, '12px'],\n ['z-index', '2147483000'],\n ['display', 'block'],\n ['visibility', 'visible'],\n ['opacity', '1'],\n ['pointer-events', 'auto'],\n ['transform', 'none'],\n ['clip-path', 'none'],\n ['filter', 'none'],\n ['width', 'auto'],\n ['height', 'auto'],\n ['max-width', 'none'],\n ['max-height', 'none'],\n ]\n for (const [property, value] of pinned) {\n if (\n mount.style.getPropertyValue(property) === value &&\n mount.style.getPropertyPriority(property) === 'important'\n ) {\n continue\n }\n mount.style.setProperty(property, value, 'important')\n }\n}\n\nexport function installAttributionGuard(\n options: AttributionGuardOptions = {},\n): void {\n const view = options.view ?? (globalThis as never as Window & typeof globalThis)\n if (installed || typeof view?.document === 'undefined') return\n installed = true\n const doc = view.document\n const endpoint = options.endpoint ?? DEFAULT_ENDPOINT\n\n let reported = false\n const restored = new Set<string>()\n\n const report = (\n reason: AttributionSuppression,\n subject: string,\n ): void => {\n if (reported) return\n reported = true\n try {\n const body = JSON.stringify({\n hostId: options.hostId ?? '',\n reason,\n subject,\n // Origin + pathname only, like the error beacon: a query string on a\n // published page carries search terms and campaign ids.\n url: `${view.location.origin}${view.location.pathname}`,\n })\n // `sendBeacon` survives the pagehide that a script removing the badge\n // on the way out would otherwise win against; `fetch` with `keepalive`\n // is the fallback where it is missing. Both are same-origin.\n if (view.navigator?.sendBeacon) {\n view.navigator.sendBeacon(endpoint, body)\n } else {\n void fetch(endpoint, { method: 'POST', body, keepalive: true }).catch(\n (): void => undefined,\n )\n }\n } catch {\n // A guard that throws is worse than a guard that misses one report.\n }\n }\n\n /**\n * Rebuilds one element inside a closed shadow root and keeps it there.\n *\n * The original is left where it is. It may be perfectly fine and merely\n * covered; removing it would take away a working link on the chance that it\n * is not, and a duplicate that cannot be seen costs nothing.\n */\n const restore = (subject: string, original: Element): void => {\n if (restored.has(subject)) return\n restored.add(subject)\n try {\n const corner = subject === 'report' ? 'left' : 'right'\n const mount = doc.createElement(mintMountName(view))\n pinMountStyle(mount as HTMLElement, corner)\n const root = mount.attachShadow({ mode: 'closed' })\n const clone = original.cloneNode(true) as HTMLElement\n // The clone is positioned by its mount now, not by its own `fixed`\n // coordinates, or the two would stack in the same corner.\n clone.style.setProperty('position', 'static', 'important')\n clone.style.setProperty('display', 'inline-flex', 'important')\n root.appendChild(clone)\n doc.body.appendChild(mount)\n\n // Put it back if it is taken off, and re-pin the styles if they are\n // overwritten. Watching the mount's own attributes as well as the body's\n // children covers both moves with one observer.\n const keeper = new MutationObserver(() => {\n try {\n if (!mount.isConnected) doc.body.appendChild(mount)\n pinMountStyle(mount as HTMLElement, corner)\n } catch {\n // Ditto.\n }\n })\n keeper.observe(doc.body, { childList: true })\n keeper.observe(mount, { attributes: true, attributeFilter: ['style'] })\n keepers.push(keeper)\n } catch {\n // Ditto: a browser without shadow DOM keeps the original element and\n // loses only the repair.\n }\n }\n\n // What this page rendered, captured before anything has had a chance to\n // take it away — the repair needs a copy of the element to rebuild, and by\n // the time one is missing there is nothing left to clone. Supplied by the\n // caller where it can be taken earlier than this module exists; see\n // `shipped` on the options.\n const templates = new Map<string, Element>()\n try {\n if (options.shipped) {\n for (const [subject, element] of options.shipped) {\n if (subject) templates.set(subject, element)\n }\n } else {\n for (const element of Array.from(\n doc.querySelectorAll(`[${ATTRIBUTION_ATTRIBUTE}]`),\n )) {\n const subject = element.getAttribute(ATTRIBUTION_ATTRIBUTE) ?? ''\n if (!subject || templates.has(subject)) continue\n templates.set(subject, element.cloneNode(true) as Element)\n }\n }\n } catch {\n return\n }\n const shipped = [...templates.keys()]\n if (!shipped.length) return\n\n const check = (): void => {\n let elements: Element[]\n try {\n elements = Array.from(doc.querySelectorAll(`[${ATTRIBUTION_ATTRIBUTE}]`))\n } catch {\n return\n }\n for (const element of elements) {\n const subject = element.getAttribute(ATTRIBUTION_ATTRIBUTE) ?? 'unknown'\n if (restored.has(subject)) continue\n const suppression = inspectAttributionElement(element, view)\n if (!suppression) continue\n restore(subject, element)\n report(suppression, subject)\n }\n // A removed element has no node left to inspect, so the loop above cannot\n // see it. The subjects this page shipped are the ones to account for.\n for (const subject of shipped) {\n if (restored.has(subject)) continue\n if (doc.querySelector(`[${ATTRIBUTION_ATTRIBUTE}=\"${subject}\"]`)) continue\n const template = templates.get(subject)\n if (template) restore(subject, template)\n report('removed', subject)\n }\n }\n\n for (const delay of CHECK_SCHEDULE_MS) {\n view.setTimeout(() => {\n try {\n check()\n } catch {\n // Ditto.\n }\n }, delay)\n }\n}\n\n/**\n * Test seam: forgets the install so a second one takes effect, and stops the\n * keepers it armed. Nothing in a browser calls this — see `keepers`.\n */\nexport function resetAttributionGuard(): void {\n installed = false\n for (const keeper of keepers.splice(0)) keeper.disconnect()\n}\n"],"names":["ATTRIBUTION_ATTRIBUTE","DEFAULT_ENDPOINT","CHECK_SCHEDULE_MS","MIN_VISIBLE_PX","MIN_OPACITY","installed","keepers","inspectAttributionElement","element","view","isConnected","style","getComputedStyle","display","visibility","opacity","Number","parseFloat","isFinite","pointerEvents","rect","getBoundingClientRect","width","height","beyond","right","bottom","left","innerWidth","top","innerHeight","x","Math","round","y","hit","ownerDocument","elementFromPoint","contains","mintMountName","bytes","Uint8Array","crypto","getRandomValues","suffix","Array","from","byte","toString","padStart","join","slice","pinMountStyle","mount","corner","pinned","property","value","getPropertyValue","getPropertyPriority","setProperty","installAttributionGuard","options","globalThis","document","doc","endpoint","reported","restored","Set","report","reason","subject","body","JSON","stringify","hostId","url","location","origin","pathname","navigator","sendBeacon","fetch","method","keepalive","catch","undefined","restore","original","has","add","createElement","root","attachShadow","mode","clone","cloneNode","appendChild","keeper","MutationObserver","observe","childList","attributes","attributeFilter","push","templates","Map","shipped","set","querySelectorAll","getAttribute","keys","length","check","elements","suppression","querySelector","template","get","delay","setTimeout","resetAttributionGuard","splice","disconnect"],"mappings":"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"}
|