@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 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/visitor-record-ceiling.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 * Flat platform ceilings on the two host subcollections an ANONYMOUS VISITOR\n * can create documents in (AGL-1529).\n *\n * ## What this is\n *\n * A platform-wide ceiling, and deliberately NOT a plan dimension — so\n * \"unlimited member accounts on every plan\" stays true, because an abuse\n * control is not something we sell. The same instrument is already in place\n * twice: AGL-1655 for forms and AGL-2155 for bandwidth.\n *\n * ## Why it is not a plan dimension, and must never become one\n *\n * AGL-889 decided member accounts are UNLIMITED on every plan as a PRICING\n * matter, and `/pricing` says so. A cap that varied by plan would make that\n * sentence false the moment it shipped. So there is no `OrgEntitlements` key\n * here, no `PLAN_ENTITLEMENTS` row, no band and nothing to re-price: every\n * plan, free through enterprise, gets the same number, and the number exists\n * only to answer the question `checkFormSubmissionAbuseCeiling`'s docblock\n * poses — *\"is this still a customer's traffic at all?\"* A plan gate asks\n * whether the customer bought this; this asks whether a customer is involved.\n *\n * ## The hole this closes\n *\n * `hosts/{hostId}/siteMembers` and `hosts/{hostId}/leads` were bounded by\n * NOTHING. Both are written on behalf of anonymous visitors on a public site\n * (`membershipRegisterHandler`, the two bookings lead paths), and the only\n * bound was `visitorWriteRateLimitRefusal` — keyed on (host, IP), fails soft,\n * and bounds the RATE rather than the TOTAL. That is verbatim the sentence\n * AGL-2265 used as its reason for adding the free-workspace ceiling, and the\n * shape AGL-2266 closed for `actions` and `entries`: unbounded Firestore\n * documents behind a $0 subscription.\n *\n * ## Why the shape here is the FLAT family, not the MULTIPLE family\n *\n * The two ceilings named as precedent — `FORM_ABUSE_CEILING_*` and\n * `BANDWIDTH_ABUSE_CEILING_*` — are both `max(floor, included × 10)`. They\n * can be, because forms and bandwidth each have an *included band* on the\n * price list to multiply. Members and leads have no included band by\n * construction (that is the whole point of AGL-889), so there is nothing to\n * multiply and a multiple would have to invent a plan dimension to have an\n * operand — the exact thing the decision forbids.\n *\n * The repo already has the family for that case, and those same docblocks\n * point at it: `WEBHOOK_MAX_PER_HOST` (AGL-1360), `NON_PAGE_SCREEN_MAX_PER_HOST`\n * (AGL-1399), `ACTIONS_MAX_PER_HOST` / `ENTRIES_MAX_PER_COLLECTION` (AGL-2266),\n * `AUTHORS_MAX_PER_HOST` (AGL-2486) — *\"a flat PLATFORM cap with no\n * `OrgEntitlements` key, no variation by plan, and nothing on the price list\n * to explain.\"* So the two named precedents supply the POSTURE (containment,\n * not capacity; a trip is an incident, not a quota; the refusal must be\n * visible to the host and opaque to the visitor) and the flat family supplies\n * the SHAPE. They do not disagree; they answer different halves.\n *\n * ## A TOTAL, not a monthly count — the one place the posture differs\n *\n * `FORM_ABUSE_CEILING` and `BANDWIDTH_ABUSE_CEILING` both count a month and\n * therefore self-clear at the month boundary with nobody doing anything. These\n * count LIVE DOCUMENTS, which do not. The refusal counters below are still\n * month-keyed — that is a rate of refusals, and it is what the owner's notice\n * reports — but the ceiling itself is cleared by deleting members or leads (or\n * by support raising it), and the owner's notice must not promise a date. A\n * notice that said \"accepting again on 1 September\" would be a promise the\n * platform does not keep.\n */\n\n/**\n * How many member accounts one site may hold (AGL-1529). the figure.\n *\n * Sized to the busiest plausible membership site rather than to today's data,\n * which is the only property a flat ceiling needs. A site member is a human\n * who chose a password on ONE site; 50,000 of them is a large membership\n * roster — larger than anything on the platform and larger than anything the\n * beta will produce — while a script wants millions and reaches this in an\n * afternoon. Every account past it is refused, none is billed, and none of\n * it changes what any plan includes.\n *\n * Counted as LIVE documents, so removing a member in the inbox frees the\n * slot. Counting tombstones would be AGL-1173's bug one collection over.\n */\nexport const SITE_MEMBERS_MAX_PER_HOST = 50_000\n\n/**\n * How many lead records one site may hold (AGL-1529).\n *\n * **Deliberately NOT the same number as {@link SITE_MEMBERS_MAX_PER_HOST}**,\n * and the reason changed when leads were deduped.\n *\n * A lead used to be APPEND-ONLY, keyed by nothing: every sign-up wrote one\n * and so did every booking, so one returning customer legitimately produced\n * many rows. 4× was sized to keep the MEMBER ceiling the binding one on the\n * path they share, rather than refusing a record on a site doing nothing\n * wrong. Since `docs/specs/reusable-forms.md` §4 a lead is one document per\n * person per host, keyed on `personKey`, so leads and members now count the\n * same population and that arithmetic no longer applies.\n *\n * **The number stays where it is.** Lowering it because the collection stopped\n * growing per event would convert a safety margin into a plan limit, which\n * `docs/DECISION_LOG.md` forbids — the 2026-08-23 entry made this ceiling a\n * flat platform abuse control precisely so \"unlimited leads on every plan\"\n * stays literally true. What the headroom now buys is a ceiling that is very\n * unlikely to trip at all, which is the right shape for a control that\n * refuses a person: 200,000 lead rows at ~200 bytes is ~40 MB, which is a\n * number, and unbounded is not.\n *\n * ⚠️ It must stay ABOVE {@link SITE_MEMBERS_MAX_PER_HOST}. A site member is\n * also a lead, so an equal or lower lead ceiling would refuse the side effect\n * of a sign-up the member ceiling had just allowed.\n */\nexport const LEADS_MAX_PER_HOST = 200_000\n\n/**\n * Refusal code carried by the sign-up 429 (AGL-1529).\n *\n * The dispatcher's per-(host, IP) rate limiter answers 429 too, so the STATUS\n * discriminates nothing — this code is the whole discriminator, and one means\n * \"slow down\" while the other means \"this site is not taking new accounts\".\n * Shared rather than restated so producer and consumer cannot drift, exactly\n * as `FORM_ABUSE_CEILING_CODE` is.\n */\nexport const SITE_MEMBER_CEILING_CODE = 'site-member-ceiling'\n\n/**\n * The visitor's sentence, under the three rules `FORM_UNAVAILABLE_MESSAGE`\n * established (AGL-1666) and for the identical reason: the person reading it\n * is a stranger to the site and NOT our customer.\n *\n * 1. **It does not blame them.** They filled the form in correctly. Nothing\n * about their address, their password or their retry is the reason.\n * 2. **It does not explain.** \"Unusual volume\", \"this site is at its member\n * limit\", or anything naming Aglyn, tells a stranger something about the\n * site owner's account that the owner never chose to publish — and names\n * a platform the visitor did not come here to hear about.\n * 3. **It does not sound successful.** It says, in as many words, that the\n * account was not created, so nobody walks away believing they have one\n * and waiting for an email that is never coming.\n */\nexport const SITE_MEMBER_UNAVAILABLE_MESSAGE =\n 'This site isn’t accepting new accounts right now, so your account was ' +\n 'not created. Please try again later.'\n\n/** The verdict every enforcement point below asks for. */\nexport interface VisitorRecordCeilingResult {\n /** True once the live document count has REACHED the ceiling. */\n exceeded: boolean\n /** The ceiling that was compared against. Always a finite integer. */\n ceiling: number\n /** The count that was compared, floored at 0. */\n used: number\n}\n\n/**\n * Is this site at a flat visitor-record ceiling?\n *\n * The ceiling is an explicit argument rather than read from a table, so the\n * suite can re-drive the SAME usage against a ceiling one higher and require\n * it to succeed — the causation leg of `free-tier-caps-refuse.spec.ts`, which\n * is the only thing that distinguishes \"refused by THIS cap\" from \"refuses\n * everything\". No production caller passes anything but the two constants\n * above; {@link checkSiteMemberCeiling} and {@link checkLeadCeiling} bind them.\n *\n * `strictNullChecks` is OFF repo-wide, so both inputs are normalised rather\n * than trusted, and the two directions are deliberately NOT symmetric:\n *\n * - `used` folds a missing/NaN count to 0, matching `checkBandwidthAbuseCeiling`.\n * An unreadable count must not refuse a site; the count is read inside a\n * transaction that throws rather than returning nothing, so this is a\n * belt, not a path.\n * - `ceiling` folds a missing/NaN ceiling to 0, and a ceiling of 0 REFUSES\n * EVERYTHING. `0` is a legitimate ceiling meaning \"none allowed\" and must\n * never read as unlimited — the `if (!count)` trap this repo keeps being\n * bitten by, in the argument that decides the refusal.\n */\nexport function checkVisitorRecordCeiling(\n used: number,\n ceiling: number,\n): VisitorRecordCeilingResult {\n const resolvedCeiling = Math.max(0, Math.floor(Number(ceiling) || 0))\n const resolvedUsed = Math.max(0, Math.floor(Number(used) || 0))\n return {\n exceeded: resolvedUsed >= resolvedCeiling,\n ceiling: resolvedCeiling,\n used: resolvedUsed,\n }\n}\n\n/** {@link checkVisitorRecordCeiling} bound to {@link SITE_MEMBERS_MAX_PER_HOST}. */\nexport function checkSiteMemberCeiling(\n used: number,\n): VisitorRecordCeilingResult {\n return checkVisitorRecordCeiling(used, SITE_MEMBERS_MAX_PER_HOST)\n}\n\n/** {@link checkVisitorRecordCeiling} bound to {@link LEADS_MAX_PER_HOST}. */\nexport function checkLeadCeiling(used: number): VisitorRecordCeilingResult {\n return checkVisitorRecordCeiling(used, LEADS_MAX_PER_HOST)\n}\n\n/** Which collection a trip belongs to — the counter id and the notice differ. */\nexport type VisitorRecordKind = 'siteMembers' | 'leads'\n\n/**\n * `hosts/{hostId}/counters/{…}` — the durable, client-unwritable record of a\n * trip, in the same counters-document shape `formSubmissionsRefused` uses\n * (AGL-1367/1655). Named through a function so the writer in\n * `@aglyn/tenant-data-admin` and the reader in the inbox console page cannot\n * spell it two different ways.\n */\nexport function visitorRecordRefusedCounterId(kind: VisitorRecordKind): string {\n return kind === 'leads' ? 'leadsRefused' : 'siteMembersRefused'\n}\n\n/** What the site's owner is shown. Shaped like `FormsPausedOwnerNotice`. */\nexport interface VisitorRecordsPausedNotice {\n title: string\n /** What happened, how many, and what actually clears it. */\n message: string\n}\n\n/**\n * The owner's notice — the half deliberately withheld from the visitor.\n *\n * Two `{title, message}` lines rather than `LockdownRefusalNotice`'s three:\n * there is **no `until`**, and its absence is the point. The form and\n * bandwidth ceilings count a month and genuinely do lift on the 1st, so their\n * notices name a date. This ceiling counts live documents, so no date lifts\n * it — deleting records does, or support raising it does. Borrowing the third\n * line for symmetry would print a date that means nothing.\n *\n * Returns `null` below one refusal, the same rule as\n * `formSubmissionsPausedNotice` and for the same reason: the counter document\n * persists from its first trip forever, and \"0 refused\" on every later month\n * trains the owner to ignore the row that will one day be real.\n */\nexport function visitorRecordsPausedNotice(input: {\n kind: VisitorRecordKind\n /** Refusals recorded for the month being displayed. */\n refused: number\n /** The ceiling that was crossed, from the counter document. */\n ceiling?: number\n}): VisitorRecordsPausedNotice | null {\n const refused = Math.floor(Number(input.refused) || 0)\n if (refused < 1) return null\n const ceiling =\n typeof input.ceiling === 'number' && Number.isFinite(input.ceiling)\n ? Math.floor(input.ceiling)\n : undefined\n const leads = input.kind === 'leads'\n const noun = leads ? 'lead' : 'sign-up'\n return {\n title: leads\n ? 'Lead capture is paused'\n : 'New member sign-ups are paused',\n message:\n `${refused.toLocaleString()} ${noun}${refused === 1 ? '' : 's'} on ` +\n `this site ${refused === 1 ? 'has' : 'have'} been refused this month` +\n (ceiling\n ? ` after it reached ${ceiling.toLocaleString()} ` +\n `${leads ? 'leads' : 'member accounts'}`\n : '') +\n '. Refused records are not stored and are not billed. This is a ' +\n 'platform safety limit, not part of your plan — every plan includes ' +\n `unlimited ${leads ? 'leads' : 'member accounts'}. Removing ` +\n `${leads ? 'leads' : 'members'} below the limit starts acceptance ` +\n 'again immediately; if this is real traffic, contact support and we ' +\n 'will raise it.',\n }\n}\n"],"names":["SITE_MEMBERS_MAX_PER_HOST","LEADS_MAX_PER_HOST","SITE_MEMBER_CEILING_CODE","SITE_MEMBER_UNAVAILABLE_MESSAGE","checkVisitorRecordCeiling","used","ceiling","resolvedCeiling","Math","max","floor","Number","resolvedUsed","exceeded","checkSiteMemberCeiling","checkLeadCeiling","visitorRecordRefusedCounterId","kind","visitorRecordsPausedNotice","input","refused","isFinite","undefined","leads","noun","title","message","toLocaleString"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+DC,GAED;;;;;;;;;;;;;CAaC,GACD,OAAO,MAAMA,4BAA4B,MAAM;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BC,GACD,OAAO,MAAMC,qBAAqB,OAAO;AAEzC;;;;;;;;CAQC,GACD,OAAO,MAAMC,2BAA2B,sBAAqB;AAE7D;;;;;;;;;;;;;;CAcC,GACD,OAAO,MAAMC,kCACX,2EACA,uCAAsC;AAYxC;;;;;;;;;;;;;;;;;;;;;CAqBC,GACD,OAAO,SAASC,0BACdC,IAAY,EACZC,OAAe;IAEf,MAAMC,kBAAkBC,KAAKC,GAAG,CAAC,GAAGD,KAAKE,KAAK,CAACC,OAAOL,YAAY;IAClE,MAAMM,eAAeJ,KAAKC,GAAG,CAAC,GAAGD,KAAKE,KAAK,CAACC,OAAON,SAAS;IAC5D,OAAO;QACLQ,UAAUD,gBAAgBL;QAC1BD,SAASC;QACTF,MAAMO;IACR;AACF;AAEA,kFAAkF,GAClF,OAAO,SAASE,uBACdT,IAAY;IAEZ,OAAOD,0BAA0BC,MAAML;AACzC;AAEA,2EAA2E,GAC3E,OAAO,SAASe,iBAAiBV,IAAY;IAC3C,OAAOD,0BAA0BC,MAAMJ;AACzC;AAKA;;;;;;CAMC,GACD,OAAO,SAASe,8BAA8BC,IAAuB;IACnE,OAAOA,SAAS,UAAU,iBAAiB;AAC7C;AASA;;;;;;;;;;;;;;CAcC,GACD,OAAO,SAASC,2BAA2BC,KAM1C;IACC,MAAMC,UAAUZ,KAAKE,KAAK,CAACC,OAAOQ,MAAMC,OAAO,KAAK;IACpD,IAAIA,UAAU,GAAG,OAAO;IACxB,MAAMd,UACJ,OAAOa,MAAMb,OAAO,KAAK,YAAYK,OAAOU,QAAQ,CAACF,MAAMb,OAAO,IAC9DE,KAAKE,KAAK,CAACS,MAAMb,OAAO,IACxBgB;IACN,MAAMC,QAAQJ,MAAMF,IAAI,KAAK;IAC7B,MAAMO,OAAOD,QAAQ,SAAS;IAC9B,OAAO;QACLE,OAAOF,QACH,2BACA;QACJG,SACE,GAAGN,QAAQO,cAAc,GAAG,CAAC,EAAEH,OAAOJ,YAAY,IAAI,KAAK,IAAI,IAAI,CAAC,GACpE,CAAC,UAAU,EAAEA,YAAY,IAAI,QAAQ,OAAO,wBAAwB,CAAC,GACpEd,CAAAA,UACG,CAAC,kBAAkB,EAAEA,QAAQqB,cAAc,GAAG,CAAC,CAAC,GAChD,GAAGJ,QAAQ,UAAU,mBAAmB,GACxC,EAAC,IACL,oEACA,wEACA,CAAC,UAAU,EAAEA,QAAQ,UAAU,kBAAkB,WAAW,CAAC,GAC7D,GAAGA,QAAQ,UAAU,UAAU,mCAAmC,CAAC,GACnE,wEACA;IACJ;AACF"}
|
|
@@ -0,0 +1,53 @@
|
|
|
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
|
+
export interface WebVitalsReportingOptions {
|
|
18
|
+
/**
|
|
19
|
+
* Which product surface produced the measurement — `site` for a tenant
|
|
20
|
+
* published page, `console` for the console. Same axis as the link-click
|
|
21
|
+
* listener's `surface`.
|
|
22
|
+
*/
|
|
23
|
+
surface: string;
|
|
24
|
+
/**
|
|
25
|
+
* Whether this visitor's consent currently permits analytics.
|
|
26
|
+
*
|
|
27
|
+
* Optional, and ABSENT MEANS ALLOWED — on a tenant page the absence of
|
|
28
|
+
* `window.gtag` is already the gate, because the tag only loads for a
|
|
29
|
+
* visitor who granted (AGL-1498), and a self-hosted surface answers to its
|
|
30
|
+
* operator's own configuration.
|
|
31
|
+
*
|
|
32
|
+
* The console needs it because its gate has a different shape. Firebase
|
|
33
|
+
* injects gtag.js and a page cannot unload a script, so a visitor who
|
|
34
|
+
* WITHDRAWS mid-session leaves `window.gtag` resident — and this module
|
|
35
|
+
* calls it directly rather than through `deliver()`, so the console's
|
|
36
|
+
* refusing transport does not cover it. Re-read on every delivery rather
|
|
37
|
+
* than captured at install, since the whole point is that the answer
|
|
38
|
+
* changes within one document.
|
|
39
|
+
*/
|
|
40
|
+
allowed?: () => boolean;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Start reporting Core Web Vitals for this page load. Safe to call from
|
|
44
|
+
* render (installs once, touches no render output, never throws) — the same
|
|
45
|
+
* contract as `installLinkClickTracking`, and it is mounted beside it.
|
|
46
|
+
*
|
|
47
|
+
* The library loads via dynamic `import()`: an async chunk off the critical
|
|
48
|
+
* path of the surface whose performance is being measured. If the chunk
|
|
49
|
+
* fails to load there is simply no measurement — never an error.
|
|
50
|
+
*/
|
|
51
|
+
export declare function installWebVitalsReporting(options: WebVitalsReportingOptions): void;
|
|
52
|
+
/** Test seam — forgets the install, the held metrics and the tag watcher. */
|
|
53
|
+
export declare function resetWebVitalsReporting(): void;
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2026 Aglyn LLC
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/ import { sanitizeEventParams } from "./analytics-events.js";
|
|
18
|
+
// The reader the consent sweep already uses to find which GA properties this
|
|
19
|
+
// page has resident, reused rather than a second scan of the same document —
|
|
20
|
+
// it is format-checked and it sees a tag that arrived through GTM as well as
|
|
21
|
+
// one we mounted ourselves.
|
|
22
|
+
import { residentGaMeasurementIds } from "./visitor-consent.js";
|
|
23
|
+
/**
|
|
24
|
+
* Real-user Core Web Vitals → GA4 events (AGL-1642).
|
|
25
|
+
*
|
|
26
|
+
* Until this module there was no field performance telemetry of any kind in
|
|
27
|
+
* the repo, and the cost was concrete: AGL-1538 recorded a tenant hydration
|
|
28
|
+
* stall of 30s+ that could never be quantified, and the hydration window is
|
|
29
|
+
* also an ATTRIBUTION hole — a signup CTA clicked before gtag hydrates
|
|
30
|
+
* crosses to the console with no `_gl` linker, deleting the acquisition
|
|
31
|
+
* source. "How long does hydration take for real visitors" was unanswerable.
|
|
32
|
+
*
|
|
33
|
+
* ## Why `web-vitals` → GA4, not Speed Insights or Firebase Performance
|
|
34
|
+
*
|
|
35
|
+
* The GA4 property (`G-YW5PG16YTM`) is already consolidated across every
|
|
36
|
+
* first-party surface, already consent-gated correctly per surface, and
|
|
37
|
+
* already carries the funnel these numbers need to sit beside — slow LCP on
|
|
38
|
+
* the pricing page matters BECAUSE of what it does to `begin_checkout`.
|
|
39
|
+
* Sending CWV there adds zero new subprocessors, zero spend, and one ~2KB
|
|
40
|
+
* lazy chunk; `web-vitals` is Google's own library and is ALREADY in
|
|
41
|
+
* `node_modules` as a dependency of `@firebase/performance`. Vercel Speed
|
|
42
|
+
* Insights would add a vendor surface and a paid tier; Firebase Performance
|
|
43
|
+
* is the weakest web product of the three and puts a second SDK on the
|
|
44
|
+
* tenant's critical path (see AGL-1642 for the full comparison).
|
|
45
|
+
*
|
|
46
|
+
* ## Event shape — GA's own `web_vitals` pattern
|
|
47
|
+
*
|
|
48
|
+
* One event per metric, named by the metric (`LCP`, `CLS`, `INP`, `TTFB`),
|
|
49
|
+
* exactly as web.dev's "send to Google Analytics" snippet shapes them:
|
|
50
|
+
*
|
|
51
|
+
* - `value: delta` — GA sums event `value`, and summing DELTAS is what makes
|
|
52
|
+
* per-page totals right when a metric reports more than once;
|
|
53
|
+
* - `metric_id` — web-vitals' per-pageview id, the deduplication/grouping key
|
|
54
|
+
* (needs dimension registration to report on — AGL-1637);
|
|
55
|
+
* - `metric_value` / `metric_delta` — the current value and its change;
|
|
56
|
+
* - `metric_rating` — `good` / `needs-improvement` / `poor`, the one
|
|
57
|
+
* dimension that makes a report readable without percentile math;
|
|
58
|
+
* - `surface` — same param the link-click listener sends: GA's Hostname
|
|
59
|
+
* dimension separates domains, `surface` separates product surfaces.
|
|
60
|
+
*
|
|
61
|
+
* ## Consent — the same gate as every other tenant event, plus one nuance
|
|
62
|
+
*
|
|
63
|
+
* Delivery is `window.gtag`, which on a tenant site exists only once a
|
|
64
|
+
* granting consent state has loaded it (AGL-1498). No gtag, no hit.
|
|
65
|
+
*
|
|
66
|
+
* The nuance is TIMING, not posture. TTFB reports the moment the reporter
|
|
67
|
+
* installs, and both gtag mounts load late by design — `afterInteractive` on
|
|
68
|
+
* the tenant, Firebase's runtime injection on the console — so "no gtag YET"
|
|
69
|
+
* is the normal state for the first metrics of every pageview, granting
|
|
70
|
+
* visitors included. Dropping on first miss would silently discard TTFB (and
|
|
71
|
+
* often LCP) on every surface, which reads in GA exactly like fast pages.
|
|
72
|
+
* So a metric that finds no tag is held IN MEMORY and re-offered briefly
|
|
73
|
+
* (~60s at 500ms); if the tag never arrives it is discarded, unsent.
|
|
74
|
+
*
|
|
75
|
+
* That is not the queue `analytics-events.ts` forbids, and the distinction
|
|
76
|
+
* is worth stating: the forbidden queue replays a visitor's pre-consent
|
|
77
|
+
* BEHAVIOUR (pageviews, clicks — the record consent exists to prevent) after
|
|
78
|
+
* a later grant. These are timings of the page's own load, sitting in the
|
|
79
|
+
* browser's performance timeline regardless; and a tag that loads on a late
|
|
80
|
+
* same-pageview grant reports its own `page_view` for this page at that
|
|
81
|
+
* moment — the vitals that then flush describe the exact pageview the tag
|
|
82
|
+
* itself just reported. A visitor who never grants still produces nothing:
|
|
83
|
+
* no tag ever appears, the buffer dies with the page, unsent.
|
|
84
|
+
*
|
|
85
|
+
* ## Why installing early still measures the whole page
|
|
86
|
+
*
|
|
87
|
+
* `web-vitals` reads buffered `PerformanceObserver` entries, so registration
|
|
88
|
+
* order does not truncate the metrics; and CLS/INP/LCP report at
|
|
89
|
+
* interaction/page-hide time anyway. The library itself is loaded with a
|
|
90
|
+
* dynamic `import()` so the tenant's critical path pays nothing for it.
|
|
91
|
+
*
|
|
92
|
+
* The console's `traffic_type: 'internal'` stamp (AGL-1582) rides these hits
|
|
93
|
+
* unchanged: Firebase's `setDefaultEventParameters` issues a global
|
|
94
|
+
* `gtag('set', …)`, which applies to every later event on the page —
|
|
95
|
+
* including these direct `window.gtag` calls (verified against the SDK's
|
|
96
|
+
* `wrapGtag`, not assumed).
|
|
97
|
+
*/ /** The four metrics worth a GA event, per web.dev's GA4 guidance. */ const METRIC_HANDLER_NAMES = [
|
|
98
|
+
'onCLS',
|
|
99
|
+
'onINP',
|
|
100
|
+
'onLCP',
|
|
101
|
+
'onTTFB'
|
|
102
|
+
];
|
|
103
|
+
/** How long a metric waits for a tag before being discarded, unsent. */ const TAG_WAIT_INTERVAL_MS = 500;
|
|
104
|
+
const TAG_WAIT_MAX_TRIES = 120;
|
|
105
|
+
let installed = false;
|
|
106
|
+
let consentGate = null;
|
|
107
|
+
let pending = [];
|
|
108
|
+
let watcher = null;
|
|
109
|
+
let watcherTries = 0;
|
|
110
|
+
/** The consent verdict, with no gate registered reading as "allowed". */ function consentAllows() {
|
|
111
|
+
if (consentGate === null) return true;
|
|
112
|
+
try {
|
|
113
|
+
return consentGate() === true;
|
|
114
|
+
} catch (unused) {
|
|
115
|
+
// A gate that throws cannot be read as consent — storage can throw in
|
|
116
|
+
// private mode, and "we could not tell" resolves to no.
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function residentGtag() {
|
|
121
|
+
if (typeof window === 'undefined') return null;
|
|
122
|
+
const gtag = window.gtag;
|
|
123
|
+
return typeof gtag === 'function' ? gtag : null;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Send one metric event to the MEASUREMENT properties only (AGL-2710).
|
|
127
|
+
*
|
|
128
|
+
* A gtag event with no `send_to` goes to every destination the loader has
|
|
129
|
+
* configured, and on a surface that also runs Google Ads that includes the
|
|
130
|
+
* ads account. This module's whole subject is "Core Web Vitals → GA4", and an
|
|
131
|
+
* ads destination has nothing to do with a layout shift: measured on
|
|
132
|
+
* `aglyn.com`, one such event attempted seven requests to
|
|
133
|
+
* `googleads.g.doubleclick.net` and `google.com/{pagead,rmkt,ccm}` — per
|
|
134
|
+
* metric, per pageview, four metrics deep — and Google Ads has no report that
|
|
135
|
+
* reads any of them. Naming the GA4 ids drops all seven and leaves the GA hit
|
|
136
|
+
* exactly as it was.
|
|
137
|
+
*
|
|
138
|
+
* The ids are read at DELIVERY time, from the page, through the reader the
|
|
139
|
+
* consent sweep already uses: the tag routinely arrives after the first
|
|
140
|
+
* metric, and what has to be addressed is whatever gtag is configured for now
|
|
141
|
+
* — which on a customer site is their own property and not ours.
|
|
142
|
+
*
|
|
143
|
+
* No ids found means no `send_to` and the event goes wherever it went before.
|
|
144
|
+
* That is the fail-open side on purpose: a tag that arrived through GTM with
|
|
145
|
+
* an id this reader never saw would otherwise be handed an empty destination
|
|
146
|
+
* list, and losing the measurement is a worse outcome than an ads account
|
|
147
|
+
* receiving a metric it ignores.
|
|
148
|
+
*/ function sendMetricEvent(gtag, name, params) {
|
|
149
|
+
try {
|
|
150
|
+
const destinations = residentGaMeasurementIds();
|
|
151
|
+
gtag('event', name, destinations.length ? _extends({}, params, {
|
|
152
|
+
send_to: destinations
|
|
153
|
+
}) : params);
|
|
154
|
+
} catch (unused) {
|
|
155
|
+
// Analytics never breaks the page.
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
function flushPending(gtag) {
|
|
159
|
+
const held = pending;
|
|
160
|
+
pending = [];
|
|
161
|
+
for (const event of held){
|
|
162
|
+
sendMetricEvent(gtag, event.name, event.params);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function stopWatcher() {
|
|
166
|
+
if (watcher !== null) {
|
|
167
|
+
clearInterval(watcher);
|
|
168
|
+
watcher = null;
|
|
169
|
+
}
|
|
170
|
+
watcherTries = 0;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Offer one metric to the tag, or hold it while the tag is still loading.
|
|
174
|
+
* See the module comment for why holding briefly is not the forbidden queue.
|
|
175
|
+
*/ function deliverMetricEvent(name, params) {
|
|
176
|
+
// Checked HERE rather than at install, and before anything is held: a
|
|
177
|
+
// withdrawal mid-session has to drop what is already waiting as well as what
|
|
178
|
+
// comes next, or the held metrics simply arrive later against a visitor who
|
|
179
|
+
// has said no.
|
|
180
|
+
if (!consentAllows()) {
|
|
181
|
+
pending = [];
|
|
182
|
+
stopWatcher();
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
const gtag = residentGtag();
|
|
186
|
+
if (gtag) {
|
|
187
|
+
// Anything held arrived before this one; keep GA's receive order honest.
|
|
188
|
+
if (pending.length) flushPending(gtag);
|
|
189
|
+
stopWatcher();
|
|
190
|
+
sendMetricEvent(gtag, name, params);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
pending.push({
|
|
194
|
+
name,
|
|
195
|
+
params
|
|
196
|
+
});
|
|
197
|
+
if (watcher !== null) return;
|
|
198
|
+
watcherTries = 0;
|
|
199
|
+
watcher = setInterval(()=>{
|
|
200
|
+
watcherTries += 1;
|
|
201
|
+
// The visitor can refuse while the tag is still being waited for, which is
|
|
202
|
+
// exactly the prior-consent case: no tag yet, metrics held, and a Decline
|
|
203
|
+
// click that must empty the hold rather than let it flush later.
|
|
204
|
+
if (!consentAllows()) {
|
|
205
|
+
pending = [];
|
|
206
|
+
stopWatcher();
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
const resident = residentGtag();
|
|
210
|
+
if (resident) {
|
|
211
|
+
flushPending(resident);
|
|
212
|
+
stopWatcher();
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
if (watcherTries >= TAG_WAIT_MAX_TRIES) {
|
|
216
|
+
// The tag never came — an ungranted visitor, an ad blocker, or a site
|
|
217
|
+
// with no analytics configured. Dropped, permanently, like every other
|
|
218
|
+
// consentless event.
|
|
219
|
+
pending = [];
|
|
220
|
+
stopWatcher();
|
|
221
|
+
}
|
|
222
|
+
}, TAG_WAIT_INTERVAL_MS);
|
|
223
|
+
}
|
|
224
|
+
function reportMetric(metric, surface) {
|
|
225
|
+
// The same sanitizer every payload passes (AGL-1561) — these values are
|
|
226
|
+
// library-generated and carry nothing identifying, but the guarantee should
|
|
227
|
+
// hold because the sanitizer ran, not because this caller was careful.
|
|
228
|
+
const params = sanitizeEventParams(_extends({
|
|
229
|
+
// GA sums event `value`; summing DELTAS keeps a twice-reported metric's
|
|
230
|
+
// page total correct. web.dev's canonical GA4 mapping.
|
|
231
|
+
value: metric.delta,
|
|
232
|
+
metric_id: metric.id,
|
|
233
|
+
metric_value: metric.value,
|
|
234
|
+
metric_delta: metric.delta
|
|
235
|
+
}, metric.rating ? {
|
|
236
|
+
metric_rating: metric.rating
|
|
237
|
+
} : {}, {
|
|
238
|
+
surface
|
|
239
|
+
}));
|
|
240
|
+
deliverMetricEvent(metric.name, params);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Start reporting Core Web Vitals for this page load. Safe to call from
|
|
244
|
+
* render (installs once, touches no render output, never throws) — the same
|
|
245
|
+
* contract as `installLinkClickTracking`, and it is mounted beside it.
|
|
246
|
+
*
|
|
247
|
+
* The library loads via dynamic `import()`: an async chunk off the critical
|
|
248
|
+
* path of the surface whose performance is being measured. If the chunk
|
|
249
|
+
* fails to load there is simply no measurement — never an error.
|
|
250
|
+
*/ export function installWebVitalsReporting(options) {
|
|
251
|
+
var _options_allowed;
|
|
252
|
+
if (typeof window === 'undefined') return;
|
|
253
|
+
if (installed) return;
|
|
254
|
+
installed = true;
|
|
255
|
+
consentGate = (_options_allowed = options.allowed) != null ? _options_allowed : null;
|
|
256
|
+
const surface = options.surface;
|
|
257
|
+
import("web-vitals").then((vitals)=>{
|
|
258
|
+
for (const handlerName of METRIC_HANDLER_NAMES){
|
|
259
|
+
const register = vitals[handlerName];
|
|
260
|
+
if (typeof register !== 'function') continue;
|
|
261
|
+
try {
|
|
262
|
+
register((metric)=>reportMetric(metric, surface));
|
|
263
|
+
} catch (unused) {
|
|
264
|
+
// One broken observer must not take the others down.
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}).catch(()=>{
|
|
268
|
+
// No chunk, no measurement — analytics never breaks the page.
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
/** Test seam — forgets the install, the held metrics and the tag watcher. */ export function resetWebVitalsReporting() {
|
|
272
|
+
installed = false;
|
|
273
|
+
consentGate = null;
|
|
274
|
+
pending = [];
|
|
275
|
+
stopWatcher();
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
//# sourceMappingURL=web-vitals-rum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/web-vitals-rum.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\nimport { sanitizeEventParams } from './analytics-events'\n// The reader the consent sweep already uses to find which GA properties this\n// page has resident, reused rather than a second scan of the same document —\n// it is format-checked and it sees a tag that arrived through GTM as well as\n// one we mounted ourselves.\nimport { residentGaMeasurementIds } from './visitor-consent'\n\n/**\n * Real-user Core Web Vitals → GA4 events (AGL-1642).\n *\n * Until this module there was no field performance telemetry of any kind in\n * the repo, and the cost was concrete: AGL-1538 recorded a tenant hydration\n * stall of 30s+ that could never be quantified, and the hydration window is\n * also an ATTRIBUTION hole — a signup CTA clicked before gtag hydrates\n * crosses to the console with no `_gl` linker, deleting the acquisition\n * source. \"How long does hydration take for real visitors\" was unanswerable.\n *\n * ## Why `web-vitals` → GA4, not Speed Insights or Firebase Performance\n *\n * The GA4 property (`G-YW5PG16YTM`) is already consolidated across every\n * first-party surface, already consent-gated correctly per surface, and\n * already carries the funnel these numbers need to sit beside — slow LCP on\n * the pricing page matters BECAUSE of what it does to `begin_checkout`.\n * Sending CWV there adds zero new subprocessors, zero spend, and one ~2KB\n * lazy chunk; `web-vitals` is Google's own library and is ALREADY in\n * `node_modules` as a dependency of `@firebase/performance`. Vercel Speed\n * Insights would add a vendor surface and a paid tier; Firebase Performance\n * is the weakest web product of the three and puts a second SDK on the\n * tenant's critical path (see AGL-1642 for the full comparison).\n *\n * ## Event shape — GA's own `web_vitals` pattern\n *\n * One event per metric, named by the metric (`LCP`, `CLS`, `INP`, `TTFB`),\n * exactly as web.dev's \"send to Google Analytics\" snippet shapes them:\n *\n * - `value: delta` — GA sums event `value`, and summing DELTAS is what makes\n * per-page totals right when a metric reports more than once;\n * - `metric_id` — web-vitals' per-pageview id, the deduplication/grouping key\n * (needs dimension registration to report on — AGL-1637);\n * - `metric_value` / `metric_delta` — the current value and its change;\n * - `metric_rating` — `good` / `needs-improvement` / `poor`, the one\n * dimension that makes a report readable without percentile math;\n * - `surface` — same param the link-click listener sends: GA's Hostname\n * dimension separates domains, `surface` separates product surfaces.\n *\n * ## Consent — the same gate as every other tenant event, plus one nuance\n *\n * Delivery is `window.gtag`, which on a tenant site exists only once a\n * granting consent state has loaded it (AGL-1498). No gtag, no hit.\n *\n * The nuance is TIMING, not posture. TTFB reports the moment the reporter\n * installs, and both gtag mounts load late by design — `afterInteractive` on\n * the tenant, Firebase's runtime injection on the console — so \"no gtag YET\"\n * is the normal state for the first metrics of every pageview, granting\n * visitors included. Dropping on first miss would silently discard TTFB (and\n * often LCP) on every surface, which reads in GA exactly like fast pages.\n * So a metric that finds no tag is held IN MEMORY and re-offered briefly\n * (~60s at 500ms); if the tag never arrives it is discarded, unsent.\n *\n * That is not the queue `analytics-events.ts` forbids, and the distinction\n * is worth stating: the forbidden queue replays a visitor's pre-consent\n * BEHAVIOUR (pageviews, clicks — the record consent exists to prevent) after\n * a later grant. These are timings of the page's own load, sitting in the\n * browser's performance timeline regardless; and a tag that loads on a late\n * same-pageview grant reports its own `page_view` for this page at that\n * moment — the vitals that then flush describe the exact pageview the tag\n * itself just reported. A visitor who never grants still produces nothing:\n * no tag ever appears, the buffer dies with the page, unsent.\n *\n * ## Why installing early still measures the whole page\n *\n * `web-vitals` reads buffered `PerformanceObserver` entries, so registration\n * order does not truncate the metrics; and CLS/INP/LCP report at\n * interaction/page-hide time anyway. The library itself is loaded with a\n * dynamic `import()` so the tenant's critical path pays nothing for it.\n *\n * The console's `traffic_type: 'internal'` stamp (AGL-1582) rides these hits\n * unchanged: Firebase's `setDefaultEventParameters` issues a global\n * `gtag('set', …)`, which applies to every later event on the page —\n * including these direct `window.gtag` calls (verified against the SDK's\n * `wrapGtag`, not assumed).\n */\n\n/** The four metrics worth a GA event, per web.dev's GA4 guidance. */\nconst METRIC_HANDLER_NAMES = ['onCLS', 'onINP', 'onLCP', 'onTTFB'] as const\n\n/** How long a metric waits for a tag before being discarded, unsent. */\nconst TAG_WAIT_INTERVAL_MS = 500\nconst TAG_WAIT_MAX_TRIES = 120\n\n/** Shape of the web-vitals metric object this module consumes. */\ninterface ReportedMetric {\n name: string\n id: string\n value: number\n delta: number\n rating?: string\n}\n\nexport interface WebVitalsReportingOptions {\n /**\n * Which product surface produced the measurement — `site` for a tenant\n * published page, `console` for the console. Same axis as the link-click\n * listener's `surface`.\n */\n surface: string\n /**\n * Whether this visitor's consent currently permits analytics.\n *\n * Optional, and ABSENT MEANS ALLOWED — on a tenant page the absence of\n * `window.gtag` is already the gate, because the tag only loads for a\n * visitor who granted (AGL-1498), and a self-hosted surface answers to its\n * operator's own configuration.\n *\n * The console needs it because its gate has a different shape. Firebase\n * injects gtag.js and a page cannot unload a script, so a visitor who\n * WITHDRAWS mid-session leaves `window.gtag` resident — and this module\n * calls it directly rather than through `deliver()`, so the console's\n * refusing transport does not cover it. Re-read on every delivery rather\n * than captured at install, since the whole point is that the answer\n * changes within one document.\n */\n allowed?: () => boolean\n}\n\nlet installed = false\nlet consentGate: (() => boolean) | null = null\nlet pending: Array<{ name: string; params: Record<string, unknown> }> = []\nlet watcher: ReturnType<typeof setInterval> | null = null\nlet watcherTries = 0\n\n/** The consent verdict, with no gate registered reading as \"allowed\". */\nfunction consentAllows(): boolean {\n if (consentGate === null) return true\n try {\n return consentGate() === true\n } catch {\n // A gate that throws cannot be read as consent — storage can throw in\n // private mode, and \"we could not tell\" resolves to no.\n return false\n }\n}\n\nfunction residentGtag(): ((...args: unknown[]) => void) | null {\n if (typeof window === 'undefined') return null\n const gtag = (window as unknown as { gtag?: unknown }).gtag\n return typeof gtag === 'function'\n ? (gtag as (...args: unknown[]) => void)\n : null\n}\n\n/**\n * Send one metric event to the MEASUREMENT properties only (AGL-2710).\n *\n * A gtag event with no `send_to` goes to every destination the loader has\n * configured, and on a surface that also runs Google Ads that includes the\n * ads account. This module's whole subject is \"Core Web Vitals → GA4\", and an\n * ads destination has nothing to do with a layout shift: measured on\n * `aglyn.com`, one such event attempted seven requests to\n * `googleads.g.doubleclick.net` and `google.com/{pagead,rmkt,ccm}` — per\n * metric, per pageview, four metrics deep — and Google Ads has no report that\n * reads any of them. Naming the GA4 ids drops all seven and leaves the GA hit\n * exactly as it was.\n *\n * The ids are read at DELIVERY time, from the page, through the reader the\n * consent sweep already uses: the tag routinely arrives after the first\n * metric, and what has to be addressed is whatever gtag is configured for now\n * — which on a customer site is their own property and not ours.\n *\n * No ids found means no `send_to` and the event goes wherever it went before.\n * That is the fail-open side on purpose: a tag that arrived through GTM with\n * an id this reader never saw would otherwise be handed an empty destination\n * list, and losing the measurement is a worse outcome than an ads account\n * receiving a metric it ignores.\n */\nfunction sendMetricEvent(\n gtag: (...args: unknown[]) => void,\n name: string,\n params: Record<string, unknown>,\n): void {\n try {\n const destinations = residentGaMeasurementIds()\n gtag(\n 'event',\n name,\n destinations.length ? { ...params, send_to: destinations } : params,\n )\n } catch {\n // Analytics never breaks the page.\n }\n}\n\nfunction flushPending(gtag: (...args: unknown[]) => void): void {\n const held = pending\n pending = []\n for (const event of held) {\n sendMetricEvent(gtag, event.name, event.params)\n }\n}\n\nfunction stopWatcher(): void {\n if (watcher !== null) {\n clearInterval(watcher)\n watcher = null\n }\n watcherTries = 0\n}\n\n/**\n * Offer one metric to the tag, or hold it while the tag is still loading.\n * See the module comment for why holding briefly is not the forbidden queue.\n */\nfunction deliverMetricEvent(\n name: string,\n params: Record<string, unknown>,\n): void {\n // Checked HERE rather than at install, and before anything is held: a\n // withdrawal mid-session has to drop what is already waiting as well as what\n // comes next, or the held metrics simply arrive later against a visitor who\n // has said no.\n if (!consentAllows()) {\n pending = []\n stopWatcher()\n return\n }\n const gtag = residentGtag()\n if (gtag) {\n // Anything held arrived before this one; keep GA's receive order honest.\n if (pending.length) flushPending(gtag)\n stopWatcher()\n sendMetricEvent(gtag, name, params)\n return\n }\n pending.push({ name, params })\n if (watcher !== null) return\n watcherTries = 0\n watcher = setInterval(() => {\n watcherTries += 1\n // The visitor can refuse while the tag is still being waited for, which is\n // exactly the prior-consent case: no tag yet, metrics held, and a Decline\n // click that must empty the hold rather than let it flush later.\n if (!consentAllows()) {\n pending = []\n stopWatcher()\n return\n }\n const resident = residentGtag()\n if (resident) {\n flushPending(resident)\n stopWatcher()\n return\n }\n if (watcherTries >= TAG_WAIT_MAX_TRIES) {\n // The tag never came — an ungranted visitor, an ad blocker, or a site\n // with no analytics configured. Dropped, permanently, like every other\n // consentless event.\n pending = []\n stopWatcher()\n }\n }, TAG_WAIT_INTERVAL_MS)\n}\n\nfunction reportMetric(metric: ReportedMetric, surface: string): void {\n // The same sanitizer every payload passes (AGL-1561) — these values are\n // library-generated and carry nothing identifying, but the guarantee should\n // hold because the sanitizer ran, not because this caller was careful.\n const params = sanitizeEventParams({\n // GA sums event `value`; summing DELTAS keeps a twice-reported metric's\n // page total correct. web.dev's canonical GA4 mapping.\n value: metric.delta,\n metric_id: metric.id,\n metric_value: metric.value,\n metric_delta: metric.delta,\n ...(metric.rating ? { metric_rating: metric.rating } : {}),\n surface,\n })\n deliverMetricEvent(metric.name, params)\n}\n\n/**\n * Start reporting Core Web Vitals for this page load. Safe to call from\n * render (installs once, touches no render output, never throws) — the same\n * contract as `installLinkClickTracking`, and it is mounted beside it.\n *\n * The library loads via dynamic `import()`: an async chunk off the critical\n * path of the surface whose performance is being measured. If the chunk\n * fails to load there is simply no measurement — never an error.\n */\nexport function installWebVitalsReporting(\n options: WebVitalsReportingOptions,\n): void {\n if (typeof window === 'undefined') return\n if (installed) return\n installed = true\n consentGate = options.allowed ?? null\n const surface = options.surface\n import('web-vitals')\n .then((vitals) => {\n for (const handlerName of METRIC_HANDLER_NAMES) {\n const register = (\n vitals as unknown as Record<\n string,\n ((callback: (metric: ReportedMetric) => void) => void) | undefined\n >\n )[handlerName]\n if (typeof register !== 'function') continue\n try {\n register((metric) => reportMetric(metric, surface))\n } catch {\n // One broken observer must not take the others down.\n }\n }\n })\n .catch(() => {\n // No chunk, no measurement — analytics never breaks the page.\n })\n}\n\n/** Test seam — forgets the install, the held metrics and the tag watcher. */\nexport function resetWebVitalsReporting(): void {\n installed = false\n consentGate = null\n pending = []\n stopWatcher()\n}\n"],"names":["sanitizeEventParams","residentGaMeasurementIds","METRIC_HANDLER_NAMES","TAG_WAIT_INTERVAL_MS","TAG_WAIT_MAX_TRIES","installed","consentGate","pending","watcher","watcherTries","consentAllows","residentGtag","window","gtag","sendMetricEvent","name","params","destinations","length","send_to","flushPending","held","event","stopWatcher","clearInterval","deliverMetricEvent","push","setInterval","resident","reportMetric","metric","surface","value","delta","metric_id","id","metric_value","metric_delta","rating","metric_rating","installWebVitalsReporting","options","allowed","then","vitals","handlerName","register","catch","resetWebVitalsReporting"],"mappings":";AAAA;;;;;;;;;;;;;;;CAeC,GAED,SAASA,mBAAmB,QAAQ,wBAAoB;AACxD,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,4BAA4B;AAC5B,SAASC,wBAAwB,QAAQ,uBAAmB;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0EC,GAED,mEAAmE,GACnE,MAAMC,uBAAuB;IAAC;IAAS;IAAS;IAAS;CAAS;AAElE,sEAAsE,GACtE,MAAMC,uBAAuB;AAC7B,MAAMC,qBAAqB;AAqC3B,IAAIC,YAAY;AAChB,IAAIC,cAAsC;AAC1C,IAAIC,UAAoE,EAAE;AAC1E,IAAIC,UAAiD;AACrD,IAAIC,eAAe;AAEnB,uEAAuE,GACvE,SAASC;IACP,IAAIJ,gBAAgB,MAAM,OAAO;IACjC,IAAI;QACF,OAAOA,kBAAkB;IAC3B,EAAE,eAAM;QACN,sEAAsE;QACtE,wDAAwD;QACxD,OAAO;IACT;AACF;AAEA,SAASK;IACP,IAAI,OAAOC,WAAW,aAAa,OAAO;IAC1C,MAAMC,OAAO,AAACD,OAAyCC,IAAI;IAC3D,OAAO,OAAOA,SAAS,aAClBA,OACD;AACN;AAEA;;;;;;;;;;;;;;;;;;;;;;;CAuBC,GACD,SAASC,gBACPD,IAAkC,EAClCE,IAAY,EACZC,MAA+B;IAE/B,IAAI;QACF,MAAMC,eAAehB;QACrBY,KACE,SACAE,MACAE,aAAaC,MAAM,GAAG,aAAKF;YAAQG,SAASF;aAAiBD;IAEjE,EAAE,eAAM;IACN,mCAAmC;IACrC;AACF;AAEA,SAASI,aAAaP,IAAkC;IACtD,MAAMQ,OAAOd;IACbA,UAAU,EAAE;IACZ,KAAK,MAAMe,SAASD,KAAM;QACxBP,gBAAgBD,MAAMS,MAAMP,IAAI,EAAEO,MAAMN,MAAM;IAChD;AACF;AAEA,SAASO;IACP,IAAIf,YAAY,MAAM;QACpBgB,cAAchB;QACdA,UAAU;IACZ;IACAC,eAAe;AACjB;AAEA;;;CAGC,GACD,SAASgB,mBACPV,IAAY,EACZC,MAA+B;IAE/B,sEAAsE;IACtE,6EAA6E;IAC7E,4EAA4E;IAC5E,eAAe;IACf,IAAI,CAACN,iBAAiB;QACpBH,UAAU,EAAE;QACZgB;QACA;IACF;IACA,MAAMV,OAAOF;IACb,IAAIE,MAAM;QACR,yEAAyE;QACzE,IAAIN,QAAQW,MAAM,EAAEE,aAAaP;QACjCU;QACAT,gBAAgBD,MAAME,MAAMC;QAC5B;IACF;IACAT,QAAQmB,IAAI,CAAC;QAAEX;QAAMC;IAAO;IAC5B,IAAIR,YAAY,MAAM;IACtBC,eAAe;IACfD,UAAUmB,YAAY;QACpBlB,gBAAgB;QAChB,2EAA2E;QAC3E,0EAA0E;QAC1E,iEAAiE;QACjE,IAAI,CAACC,iBAAiB;YACpBH,UAAU,EAAE;YACZgB;YACA;QACF;QACA,MAAMK,WAAWjB;QACjB,IAAIiB,UAAU;YACZR,aAAaQ;YACbL;YACA;QACF;QACA,IAAId,gBAAgBL,oBAAoB;YACtC,sEAAsE;YACtE,uEAAuE;YACvE,qBAAqB;YACrBG,UAAU,EAAE;YACZgB;QACF;IACF,GAAGpB;AACL;AAEA,SAAS0B,aAAaC,MAAsB,EAAEC,OAAe;IAC3D,wEAAwE;IACxE,4EAA4E;IAC5E,uEAAuE;IACvE,MAAMf,SAAShB,oBAAoB;QACjC,wEAAwE;QACxE,uDAAuD;QACvDgC,OAAOF,OAAOG,KAAK;QACnBC,WAAWJ,OAAOK,EAAE;QACpBC,cAAcN,OAAOE,KAAK;QAC1BK,cAAcP,OAAOG,KAAK;OACtBH,OAAOQ,MAAM,GAAG;QAAEC,eAAeT,OAAOQ,MAAM;IAAC,IAAI,CAAC;QACxDP;;IAEFN,mBAAmBK,OAAOf,IAAI,EAAEC;AAClC;AAEA;;;;;;;;CAQC,GACD,OAAO,SAASwB,0BACdC,OAAkC;QAKpBA;IAHd,IAAI,OAAO7B,WAAW,aAAa;IACnC,IAAIP,WAAW;IACfA,YAAY;IACZC,eAAcmC,mBAAAA,QAAQC,OAAO,YAAfD,mBAAmB;IACjC,MAAMV,UAAUU,QAAQV,OAAO;IAC/B,MAAM,CAAC,cACJY,IAAI,CAAC,CAACC;QACL,KAAK,MAAMC,eAAe3C,qBAAsB;YAC9C,MAAM4C,WAAW,AACfF,MAID,CAACC,YAAY;YACd,IAAI,OAAOC,aAAa,YAAY;YACpC,IAAI;gBACFA,SAAS,CAAChB,SAAWD,aAAaC,QAAQC;YAC5C,EAAE,eAAM;YACN,qDAAqD;YACvD;QACF;IACF,GACCgB,KAAK,CAAC;IACL,8DAA8D;IAChE;AACJ;AAEA,2EAA2E,GAC3E,OAAO,SAASC;IACd3C,YAAY;IACZC,cAAc;IACdC,UAAU,EAAE;IACZgB;AACF"}
|