@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,55 @@
|
|
|
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
|
+
/** What a sanitization pass took out, for the asset's audit trail. */
|
|
18
|
+
export interface SvgSanitizeResult {
|
|
19
|
+
/** The sanitized document. Only meaningful when `changed`. */
|
|
20
|
+
svg: string;
|
|
21
|
+
/** Whether anything was removed at all. */
|
|
22
|
+
changed: boolean;
|
|
23
|
+
/** Distinct reasons, e.g. `['script', 'event handler']`. */
|
|
24
|
+
removed: string[];
|
|
25
|
+
}
|
|
26
|
+
/** The one content type that is a document wearing an `image/` label. */
|
|
27
|
+
export declare function isSvgUploadType(contentType: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* A URL value the sanitizer will keep.
|
|
30
|
+
*
|
|
31
|
+
* Same-document fragments (`#gradient-1`, what `<use>` and `fill="url(#…)"`
|
|
32
|
+
* actually need) and raster data URIs. Everything else goes, including plain
|
|
33
|
+
* relative and `https:` references: AGL-1474 asks for external references to
|
|
34
|
+
* be stripped, and inside an `<img>`-embedded SVG — the way logos are used
|
|
35
|
+
* across this product — a browser refuses to load them anyway.
|
|
36
|
+
*
|
|
37
|
+
* `data:image/svg+xml` is NOT safe: it is another document, and nesting is how
|
|
38
|
+
* a sanitizer gets walked past.
|
|
39
|
+
*/
|
|
40
|
+
export declare function isSafeSvgUrl(raw: string): boolean;
|
|
41
|
+
/** Strips the executable and external-reference surface from an SVG source. */
|
|
42
|
+
export declare function sanitizeSvg(source: string): SvgSanitizeResult;
|
|
43
|
+
/**
|
|
44
|
+
* Buffer form for the upload routes.
|
|
45
|
+
*
|
|
46
|
+
* When nothing was removed the ORIGINAL buffer comes back untouched — not a
|
|
47
|
+
* re-encode of the parsed source. That is deliberate: it means a legitimate
|
|
48
|
+
* SVG in some encoding this scanner does not model can never be corrupted by
|
|
49
|
+
* merely passing through, and it keeps the stored content hash stable.
|
|
50
|
+
*/
|
|
51
|
+
export declare function sanitizeSvgBuffer(buffer: Buffer): {
|
|
52
|
+
buffer: Buffer;
|
|
53
|
+
changed: boolean;
|
|
54
|
+
removed: string[];
|
|
55
|
+
};
|
|
@@ -0,0 +1,460 @@
|
|
|
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
|
+
* SVG sanitization at the upload chokepoints (AGL-1474).
|
|
18
|
+
*
|
|
19
|
+
* An SVG is a DOCUMENT, not a picture. `image/*` has always been the one open
|
|
20
|
+
* family in the upload allowlist, the stored content type is whatever the
|
|
21
|
+
* client declared, and the CDN serves the bytes `inline` from the console's
|
|
22
|
+
* own origin — so `<script>alert(document.domain)</script>` inside an uploaded
|
|
23
|
+
* logo executes on `app.aglyn.com`, or on the customer's published domain,
|
|
24
|
+
* the moment the asset URL is opened top-level. Every editor could do it.
|
|
25
|
+
*
|
|
26
|
+
* **This file is the remediation, not the containment.** The containment is
|
|
27
|
+
* `mediaCdnContentSecurityPolicy` in `serve-media-cdn.ts`, which stamps a
|
|
28
|
+
* `sandbox` / `script-src 'none'` policy on the serve response and therefore
|
|
29
|
+
* covers every asset already in the bucket without touching a byte. This
|
|
30
|
+
* sanitizer is what keeps the STORED artifact clean — so the platform is not
|
|
31
|
+
* one header regression away from the same hole, and so an SVG handed to a
|
|
32
|
+
* customer through any other channel is not carrying a payload.
|
|
33
|
+
*
|
|
34
|
+
* Neither layer touches `<img src>`: a browser loading an SVG as an image
|
|
35
|
+
* never runs its script and never applies the response's CSP. The vector is
|
|
36
|
+
* top-level navigation (and `<object>`/`<iframe>` embedding), and that is
|
|
37
|
+
* exactly what both layers close.
|
|
38
|
+
*
|
|
39
|
+
* ## Why a scanner rather than a DOM
|
|
40
|
+
*
|
|
41
|
+
* `dompurify` is already a dependency, but only in `apps/docs` (mermaid) and
|
|
42
|
+
* only in a browser. Server-side it needs `jsdom`, which is a devDependency —
|
|
43
|
+
* promoting a full HTML engine into every serverless upload function to strip
|
|
44
|
+
* a handful of constructs is the wrong trade. So: a small XML-shaped scanner
|
|
45
|
+
* that keeps kept attributes VERBATIM (their raw source span, entities and
|
|
46
|
+
* all) and drops the rest. Nothing is re-encoded, so nothing can be mangled
|
|
47
|
+
* by a re-encode.
|
|
48
|
+
*
|
|
49
|
+
* ## What it removes
|
|
50
|
+
*
|
|
51
|
+
* - `<script>` and its content, at any nesting depth and under any namespace
|
|
52
|
+
* prefix (`<html:script>` has local name `script`).
|
|
53
|
+
* - `<foreignObject>` and its subtree — the documented HTML escape hatch.
|
|
54
|
+
* - `<iframe>`, `<frame>`, `<frameset>`, `<embed>`, `<object>`, `<handler>`,
|
|
55
|
+
* `<listener>`, `<animation>`, `<audio>`, `<video>` and their subtrees.
|
|
56
|
+
* - Every `on*` attribute (`onload`, `onclick`, `onbegin`, …).
|
|
57
|
+
* - Every URL-bearing attribute (`href`, `xlink:href`, `src`, `data`,
|
|
58
|
+
* `action`, `formaction`, `poster`) whose value is not a same-document
|
|
59
|
+
* `#fragment` or a raster `data:image/…` — which covers `javascript:`,
|
|
60
|
+
* `data:text/html`, nested `data:image/svg+xml`, and plain external refs.
|
|
61
|
+
* - Animation elements (`<set>`, `<animate>`, …) that target a URL attribute,
|
|
62
|
+
* because `<set attributeName="href" to="javascript:…">` reintroduces one.
|
|
63
|
+
* - `url(…)` references to anywhere but a `#fragment` inside `style=`,
|
|
64
|
+
* presentation attributes (`fill`, `filter`, `mask`, `clip-path`, …) and
|
|
65
|
+
* `<style>` text, plus `@import` and `expression(`.
|
|
66
|
+
* - `<?xml-stylesheet?>` and every other processing instruction — an external
|
|
67
|
+
* XSLT is a script engine.
|
|
68
|
+
* - A DOCTYPE with an internal subset, whose `<!ENTITY>` definitions expand
|
|
69
|
+
* into markup after every check here has run. A plain external-id DOCTYPE
|
|
70
|
+
* is inert and kept, because Illustrator has emitted one for twenty years
|
|
71
|
+
* and rewriting those files buys nothing.
|
|
72
|
+
*
|
|
73
|
+
* Scheme detection decodes numeric and named entities first and ignores
|
|
74
|
+
* control characters and whitespace, so `javascript:` and `java	script:`
|
|
75
|
+
* resolve the same way the browser resolves them.
|
|
76
|
+
*/ /** Elements dropped together with everything inside them. */ const REMOVED_ELEMENTS = new Set([
|
|
77
|
+
'script',
|
|
78
|
+
'foreignobject',
|
|
79
|
+
'iframe',
|
|
80
|
+
'frame',
|
|
81
|
+
'frameset',
|
|
82
|
+
'embed',
|
|
83
|
+
'object',
|
|
84
|
+
'handler',
|
|
85
|
+
'listener',
|
|
86
|
+
'animation',
|
|
87
|
+
'audio',
|
|
88
|
+
'video'
|
|
89
|
+
]);
|
|
90
|
+
/**
|
|
91
|
+
* Elements whose content is raw text rather than markup. Consumed to their
|
|
92
|
+
* close tag verbatim, so a `<` inside CSS or script source can never be
|
|
93
|
+
* mistaken for a tag and desynchronize the scan.
|
|
94
|
+
*/ const RAW_TEXT_ELEMENTS = new Set([
|
|
95
|
+
'script',
|
|
96
|
+
'style'
|
|
97
|
+
]);
|
|
98
|
+
/** SMIL animation elements — safe unless they animate a URL attribute. */ const ANIMATION_ELEMENTS = new Set([
|
|
99
|
+
'set',
|
|
100
|
+
'animate',
|
|
101
|
+
'animatetransform',
|
|
102
|
+
'animatemotion',
|
|
103
|
+
'animatecolor'
|
|
104
|
+
]);
|
|
105
|
+
/** Attributes whose whole value is a URL. */ const URL_ATTRIBUTES = new Set([
|
|
106
|
+
'href',
|
|
107
|
+
'src',
|
|
108
|
+
'data',
|
|
109
|
+
'action',
|
|
110
|
+
'formaction',
|
|
111
|
+
'poster'
|
|
112
|
+
]);
|
|
113
|
+
const ENTITIES = {
|
|
114
|
+
amp: '&',
|
|
115
|
+
lt: '<',
|
|
116
|
+
gt: '>',
|
|
117
|
+
quot: '"',
|
|
118
|
+
apos: "'",
|
|
119
|
+
colon: ':',
|
|
120
|
+
tab: '\t',
|
|
121
|
+
newline: '\n',
|
|
122
|
+
sol: '/'
|
|
123
|
+
};
|
|
124
|
+
/** The one content type that is a document wearing an `image/` label. */ export function isSvgUploadType(contentType) {
|
|
125
|
+
const type = String(contentType != null ? contentType : '').split(';')[0].trim().toLowerCase();
|
|
126
|
+
return type === 'image/svg+xml' || type === 'image/svg';
|
|
127
|
+
}
|
|
128
|
+
function decodeEntities(value) {
|
|
129
|
+
let out = String(value != null ? value : '');
|
|
130
|
+
// Bounded, because `&#106;` is a decode away from `j` and an
|
|
131
|
+
// attacker gets to pick the depth. Three passes is past anything a browser
|
|
132
|
+
// will itself resolve.
|
|
133
|
+
for(let pass = 0; pass < 3; pass++){
|
|
134
|
+
const next = out.replace(/&#x([0-9a-f]+);?/gi, (match, hex)=>codePoint(parseInt(hex, 16), match)).replace(/&#(\d+);?/g, (match, decimal)=>codePoint(parseInt(decimal, 10), match)).replace(/&([a-z]+);/gi, (match, name)=>{
|
|
135
|
+
var _ENTITIES_String_toLowerCase;
|
|
136
|
+
return (_ENTITIES_String_toLowerCase = ENTITIES[String(name).toLowerCase()]) != null ? _ENTITIES_String_toLowerCase : match;
|
|
137
|
+
});
|
|
138
|
+
if (next === out) break;
|
|
139
|
+
out = next;
|
|
140
|
+
}
|
|
141
|
+
return out;
|
|
142
|
+
}
|
|
143
|
+
function codePoint(value, fallback) {
|
|
144
|
+
if (!Number.isFinite(value) || value < 0 || value > 0x10ffff) return fallback;
|
|
145
|
+
try {
|
|
146
|
+
return String.fromCodePoint(value);
|
|
147
|
+
} catch (unused) {
|
|
148
|
+
return fallback;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Drops every character a browser ignores while resolving a URL's scheme —
|
|
153
|
+
* control characters and whitespace — so `java\tscript:` and a leading NUL
|
|
154
|
+
* both collapse to `javascript:` before the check below sees them.
|
|
155
|
+
*
|
|
156
|
+
* Written as a code-point filter rather than a character class because a
|
|
157
|
+
* control-character range in a regex is exactly what `no-control-regex`
|
|
158
|
+
* exists to flag, and silencing that rule here would be the wrong signal.
|
|
159
|
+
*/ function stripInsignificant(value) {
|
|
160
|
+
let out = '';
|
|
161
|
+
for (const character of value){
|
|
162
|
+
var _character_codePointAt;
|
|
163
|
+
const code = (_character_codePointAt = character.codePointAt(0)) != null ? _character_codePointAt : 0;
|
|
164
|
+
if (code > 0x20 && code !== 0x7f) out += character;
|
|
165
|
+
}
|
|
166
|
+
return out;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* A URL value the sanitizer will keep.
|
|
170
|
+
*
|
|
171
|
+
* Same-document fragments (`#gradient-1`, what `<use>` and `fill="url(#…)"`
|
|
172
|
+
* actually need) and raster data URIs. Everything else goes, including plain
|
|
173
|
+
* relative and `https:` references: AGL-1474 asks for external references to
|
|
174
|
+
* be stripped, and inside an `<img>`-embedded SVG — the way logos are used
|
|
175
|
+
* across this product — a browser refuses to load them anyway.
|
|
176
|
+
*
|
|
177
|
+
* `data:image/svg+xml` is NOT safe: it is another document, and nesting is how
|
|
178
|
+
* a sanitizer gets walked past.
|
|
179
|
+
*/ export function isSafeSvgUrl(raw) {
|
|
180
|
+
const value = stripInsignificant(decodeEntities(raw));
|
|
181
|
+
if (!value) return true;
|
|
182
|
+
if (value.startsWith('#')) return true;
|
|
183
|
+
const lower = value.toLowerCase();
|
|
184
|
+
if (lower.startsWith('data:image/') && !lower.startsWith('data:image/svg')) {
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
const URL_FUNCTION = /url\(\s*(['"]?)([^)'"]*)\1\s*\)/gi;
|
|
190
|
+
/** `url(…)`, `javascript:` or `expression(` pointing anywhere but this document. */ function hasUnsafeUrlReference(value) {
|
|
191
|
+
const decoded = decodeEntities(value);
|
|
192
|
+
const tight = stripInsignificant(decoded);
|
|
193
|
+
if (/javascript:/i.test(tight)) return true;
|
|
194
|
+
if (/expression\(/i.test(tight)) return true;
|
|
195
|
+
URL_FUNCTION.lastIndex = 0;
|
|
196
|
+
let match;
|
|
197
|
+
while((match = URL_FUNCTION.exec(decoded)) !== null){
|
|
198
|
+
if (!isSafeSvgUrl(match[2])) return true;
|
|
199
|
+
}
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* `<style>` text. Kept rather than dropped — class-based styling is how every
|
|
204
|
+
* exported SVG carries its colours, and removing it would visibly break
|
|
205
|
+
* legitimate assets — with the escapes neutralized in place.
|
|
206
|
+
*/ function sanitizeCss(css) {
|
|
207
|
+
let out = css.replace(/@import[^;}]*(;|(?=\}))/gi, '');
|
|
208
|
+
URL_FUNCTION.lastIndex = 0;
|
|
209
|
+
out = out.replace(URL_FUNCTION, (match, _quote, target)=>isSafeSvgUrl(String(target)) ? match : 'url(#)');
|
|
210
|
+
out = out.replace(/javascript:/gi, '');
|
|
211
|
+
out = out.replace(/expression\(/gi, '(');
|
|
212
|
+
return {
|
|
213
|
+
css: out,
|
|
214
|
+
changed: out !== css
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
function localNameOf(name) {
|
|
218
|
+
const lower = name.toLowerCase();
|
|
219
|
+
const colon = lower.lastIndexOf(':');
|
|
220
|
+
return colon >= 0 ? lower.slice(colon + 1) : lower;
|
|
221
|
+
}
|
|
222
|
+
const TAG_NAME = /^[A-Za-z_][A-Za-z0-9:._-]*/;
|
|
223
|
+
const ATTRIBUTE_NAME = /^[^\s=/>]+/;
|
|
224
|
+
const WHITESPACE = /\s/;
|
|
225
|
+
/** Reads one tag starting at `from` (the `<`), or `null` if it is not one. */ function readTag(source, from) {
|
|
226
|
+
let i = from + 1;
|
|
227
|
+
const closing = source[i] === '/';
|
|
228
|
+
if (closing) i++;
|
|
229
|
+
const nameMatch = TAG_NAME.exec(source.slice(i));
|
|
230
|
+
if (!nameMatch) return null;
|
|
231
|
+
const name = nameMatch[0];
|
|
232
|
+
i += name.length;
|
|
233
|
+
const attributes = [];
|
|
234
|
+
const tag = (selfClosing, end)=>({
|
|
235
|
+
name,
|
|
236
|
+
localName: localNameOf(name),
|
|
237
|
+
closing,
|
|
238
|
+
selfClosing,
|
|
239
|
+
attributes,
|
|
240
|
+
end
|
|
241
|
+
});
|
|
242
|
+
while(i < source.length){
|
|
243
|
+
const spanStart = i;
|
|
244
|
+
while(i < source.length && WHITESPACE.test(source[i]))i++;
|
|
245
|
+
if (i >= source.length) break;
|
|
246
|
+
if (source[i] === '>') return tag(false, i + 1);
|
|
247
|
+
if (source[i] === '/' && source[i + 1] === '>') return tag(true, i + 2);
|
|
248
|
+
const attributeMatch = ATTRIBUTE_NAME.exec(source.slice(i));
|
|
249
|
+
if (!attributeMatch) {
|
|
250
|
+
i++;
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
const attributeName = attributeMatch[0];
|
|
254
|
+
let cursor = i + attributeName.length;
|
|
255
|
+
let after = cursor;
|
|
256
|
+
while(after < source.length && WHITESPACE.test(source[after]))after++;
|
|
257
|
+
let value = '';
|
|
258
|
+
if (source[after] === '=') {
|
|
259
|
+
after++;
|
|
260
|
+
while(after < source.length && WHITESPACE.test(source[after]))after++;
|
|
261
|
+
const quote = source[after];
|
|
262
|
+
if (quote === '"' || quote === "'") {
|
|
263
|
+
const close = source.indexOf(quote, after + 1);
|
|
264
|
+
value = source.slice(after + 1, close < 0 ? source.length : close);
|
|
265
|
+
cursor = close < 0 ? source.length : close + 1;
|
|
266
|
+
} else {
|
|
267
|
+
const unquoted = /^[^\s>]*/.exec(source.slice(after));
|
|
268
|
+
value = unquoted[0];
|
|
269
|
+
cursor = after + unquoted[0].length;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
attributes.push({
|
|
273
|
+
raw: source.slice(spanStart, cursor),
|
|
274
|
+
name: attributeName,
|
|
275
|
+
localName: localNameOf(attributeName),
|
|
276
|
+
value
|
|
277
|
+
});
|
|
278
|
+
i = cursor;
|
|
279
|
+
}
|
|
280
|
+
return null;
|
|
281
|
+
}
|
|
282
|
+
/** Consumes an element's raw text content up to and including its close tag. */ function consumeRawText(source, from, name) {
|
|
283
|
+
const lower = source.toLowerCase();
|
|
284
|
+
const needle = `</${name.toLowerCase()}`;
|
|
285
|
+
let index = lower.indexOf(needle, from);
|
|
286
|
+
while(index >= 0){
|
|
287
|
+
const next = source[index + needle.length];
|
|
288
|
+
if (next === undefined || /[\s>/]/.test(next)) break;
|
|
289
|
+
index = lower.indexOf(needle, index + needle.length);
|
|
290
|
+
}
|
|
291
|
+
if (index < 0) return {
|
|
292
|
+
text: source.slice(from),
|
|
293
|
+
end: source.length
|
|
294
|
+
};
|
|
295
|
+
const gt = source.indexOf('>', index);
|
|
296
|
+
return {
|
|
297
|
+
text: source.slice(from, index),
|
|
298
|
+
end: gt < 0 ? source.length : gt + 1
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
function renderTag(tag, kept) {
|
|
302
|
+
return `<${tag.name}${kept.map((attribute)=>attribute.raw).join('')}${tag.selfClosing ? '/>' : '>'}`;
|
|
303
|
+
}
|
|
304
|
+
/** Strips the executable and external-reference surface from an SVG source. */ export function sanitizeSvg(source) {
|
|
305
|
+
const removed = new Set();
|
|
306
|
+
/** Stack of local names of removed subtrees; non-empty means "dropping". */ const skipping = [];
|
|
307
|
+
let out = '';
|
|
308
|
+
let i = 0;
|
|
309
|
+
const emit = (text)=>{
|
|
310
|
+
if (!skipping.length) out += text;
|
|
311
|
+
};
|
|
312
|
+
while(i < source.length){
|
|
313
|
+
const lt = source.indexOf('<', i);
|
|
314
|
+
if (lt < 0) {
|
|
315
|
+
emit(source.slice(i));
|
|
316
|
+
break;
|
|
317
|
+
}
|
|
318
|
+
emit(source.slice(i, lt));
|
|
319
|
+
if (source.startsWith('<!--', lt)) {
|
|
320
|
+
const end = source.indexOf('-->', lt + 4);
|
|
321
|
+
const stop = end < 0 ? source.length : end + 3;
|
|
322
|
+
emit(source.slice(lt, stop));
|
|
323
|
+
i = stop;
|
|
324
|
+
continue;
|
|
325
|
+
}
|
|
326
|
+
if (source.startsWith('<![CDATA[', lt)) {
|
|
327
|
+
const end = source.indexOf(']]>', lt + 9);
|
|
328
|
+
const stop = end < 0 ? source.length : end + 3;
|
|
329
|
+
emit(source.slice(lt, stop));
|
|
330
|
+
i = stop;
|
|
331
|
+
continue;
|
|
332
|
+
}
|
|
333
|
+
if (source.startsWith('<!', lt)) {
|
|
334
|
+
const bracket = source.indexOf('[', lt);
|
|
335
|
+
const close = source.indexOf('>', lt);
|
|
336
|
+
if (bracket >= 0 && close >= 0 && bracket < close) {
|
|
337
|
+
// Internal subset: `<!ENTITY payload "<script>…">` expands AFTER
|
|
338
|
+
// every check below. Drop the whole declaration.
|
|
339
|
+
const end = source.indexOf(']>', bracket);
|
|
340
|
+
removed.add('doctype entity subset');
|
|
341
|
+
i = end < 0 ? source.length : end + 2;
|
|
342
|
+
continue;
|
|
343
|
+
}
|
|
344
|
+
const stop = close < 0 ? source.length : close + 1;
|
|
345
|
+
emit(source.slice(lt, stop));
|
|
346
|
+
i = stop;
|
|
347
|
+
continue;
|
|
348
|
+
}
|
|
349
|
+
if (source.startsWith('<?', lt)) {
|
|
350
|
+
const end = source.indexOf('?>', lt + 2);
|
|
351
|
+
const stop = end < 0 ? source.length : end + 2;
|
|
352
|
+
const instruction = source.slice(lt, stop);
|
|
353
|
+
if (/^<\?xml[\s?]/i.test(instruction)) emit(instruction);
|
|
354
|
+
else removed.add('processing instruction');
|
|
355
|
+
i = stop;
|
|
356
|
+
continue;
|
|
357
|
+
}
|
|
358
|
+
const tag = readTag(source, lt);
|
|
359
|
+
if (!tag) {
|
|
360
|
+
emit('<');
|
|
361
|
+
i = lt + 1;
|
|
362
|
+
continue;
|
|
363
|
+
}
|
|
364
|
+
// Raw-text elements are consumed whole, in or out of a removed subtree —
|
|
365
|
+
// a `<` inside their content is content, not markup.
|
|
366
|
+
if (!tag.closing && !tag.selfClosing && RAW_TEXT_ELEMENTS.has(tag.localName)) {
|
|
367
|
+
const raw = consumeRawText(source, tag.end, tag.name);
|
|
368
|
+
if (skipping.length || REMOVED_ELEMENTS.has(tag.localName)) {
|
|
369
|
+
if (!skipping.length) removed.add(tag.localName);
|
|
370
|
+
} else {
|
|
371
|
+
const kept = tag.attributes.filter((attribute)=>keepAttribute(attribute, removed));
|
|
372
|
+
const styles = sanitizeCss(raw.text);
|
|
373
|
+
if (styles.changed) removed.add('external style reference');
|
|
374
|
+
emit(`${renderTag(tag, kept)}${styles.css}</${tag.name}>`);
|
|
375
|
+
}
|
|
376
|
+
i = raw.end;
|
|
377
|
+
continue;
|
|
378
|
+
}
|
|
379
|
+
if (tag.closing) {
|
|
380
|
+
if (skipping.length) {
|
|
381
|
+
if (skipping[skipping.length - 1] === tag.localName) skipping.pop();
|
|
382
|
+
} else {
|
|
383
|
+
emit(`</${tag.name}>`);
|
|
384
|
+
}
|
|
385
|
+
i = tag.end;
|
|
386
|
+
continue;
|
|
387
|
+
}
|
|
388
|
+
if (skipping.length) {
|
|
389
|
+
// Track same-name nesting so the matching close is the one that ends
|
|
390
|
+
// the removal, not the first one encountered.
|
|
391
|
+
if (!tag.selfClosing && skipping[skipping.length - 1] === tag.localName) {
|
|
392
|
+
skipping.push(tag.localName);
|
|
393
|
+
}
|
|
394
|
+
i = tag.end;
|
|
395
|
+
continue;
|
|
396
|
+
}
|
|
397
|
+
if (REMOVED_ELEMENTS.has(tag.localName)) {
|
|
398
|
+
removed.add(tag.localName);
|
|
399
|
+
if (!tag.selfClosing) skipping.push(tag.localName);
|
|
400
|
+
i = tag.end;
|
|
401
|
+
continue;
|
|
402
|
+
}
|
|
403
|
+
if (ANIMATION_ELEMENTS.has(tag.localName)) {
|
|
404
|
+
var _ref;
|
|
405
|
+
const target = tag.attributes.find((attribute)=>attribute.localName === 'attributename');
|
|
406
|
+
const animated = localNameOf(decodeEntities((_ref = target == null ? void 0 : target.value) != null ? _ref : '').trim());
|
|
407
|
+
if (target && (URL_ATTRIBUTES.has(animated) || animated === 'style')) {
|
|
408
|
+
removed.add('animated reference');
|
|
409
|
+
if (!tag.selfClosing) skipping.push(tag.localName);
|
|
410
|
+
i = tag.end;
|
|
411
|
+
continue;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
emit(renderTag(tag, tag.attributes.filter((attribute)=>keepAttribute(attribute, removed))));
|
|
415
|
+
i = tag.end;
|
|
416
|
+
}
|
|
417
|
+
return {
|
|
418
|
+
svg: out,
|
|
419
|
+
changed: removed.size > 0,
|
|
420
|
+
removed: [
|
|
421
|
+
...removed
|
|
422
|
+
].sort()
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
function keepAttribute(attribute, removed) {
|
|
426
|
+
// No standard SVG attribute begins with `on` except the event handlers.
|
|
427
|
+
if (/^on/i.test(attribute.localName) || /^on/i.test(attribute.name)) {
|
|
428
|
+
removed.add('event handler');
|
|
429
|
+
return false;
|
|
430
|
+
}
|
|
431
|
+
if (URL_ATTRIBUTES.has(attribute.localName)) {
|
|
432
|
+
if (isSafeSvgUrl(attribute.value)) return true;
|
|
433
|
+
removed.add('external reference');
|
|
434
|
+
return false;
|
|
435
|
+
}
|
|
436
|
+
// `style=`, and the presentation attributes that take a paint server
|
|
437
|
+
// (`fill`, `stroke`, `filter`, `mask`, `clip-path`, `marker-*`).
|
|
438
|
+
if (hasUnsafeUrlReference(attribute.value)) {
|
|
439
|
+
removed.add(attribute.localName === 'style' ? 'external style reference' : 'external reference');
|
|
440
|
+
return false;
|
|
441
|
+
}
|
|
442
|
+
return true;
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Buffer form for the upload routes.
|
|
446
|
+
*
|
|
447
|
+
* When nothing was removed the ORIGINAL buffer comes back untouched — not a
|
|
448
|
+
* re-encode of the parsed source. That is deliberate: it means a legitimate
|
|
449
|
+
* SVG in some encoding this scanner does not model can never be corrupted by
|
|
450
|
+
* merely passing through, and it keeps the stored content hash stable.
|
|
451
|
+
*/ export function sanitizeSvgBuffer(buffer) {
|
|
452
|
+
const result = sanitizeSvg(buffer.toString('utf8'));
|
|
453
|
+
return {
|
|
454
|
+
buffer: result.changed ? Buffer.from(result.svg, 'utf8') : buffer,
|
|
455
|
+
changed: result.changed,
|
|
456
|
+
removed: result.removed
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
//# sourceMappingURL=sanitize-svg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/sanitize-svg.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 * SVG sanitization at the upload chokepoints (AGL-1474).\n *\n * An SVG is a DOCUMENT, not a picture. `image/*` has always been the one open\n * family in the upload allowlist, the stored content type is whatever the\n * client declared, and the CDN serves the bytes `inline` from the console's\n * own origin — so `<script>alert(document.domain)</script>` inside an uploaded\n * logo executes on `app.aglyn.com`, or on the customer's published domain,\n * the moment the asset URL is opened top-level. Every editor could do it.\n *\n * **This file is the remediation, not the containment.** The containment is\n * `mediaCdnContentSecurityPolicy` in `serve-media-cdn.ts`, which stamps a\n * `sandbox` / `script-src 'none'` policy on the serve response and therefore\n * covers every asset already in the bucket without touching a byte. This\n * sanitizer is what keeps the STORED artifact clean — so the platform is not\n * one header regression away from the same hole, and so an SVG handed to a\n * customer through any other channel is not carrying a payload.\n *\n * Neither layer touches `<img src>`: a browser loading an SVG as an image\n * never runs its script and never applies the response's CSP. The vector is\n * top-level navigation (and `<object>`/`<iframe>` embedding), and that is\n * exactly what both layers close.\n *\n * ## Why a scanner rather than a DOM\n *\n * `dompurify` is already a dependency, but only in `apps/docs` (mermaid) and\n * only in a browser. Server-side it needs `jsdom`, which is a devDependency —\n * promoting a full HTML engine into every serverless upload function to strip\n * a handful of constructs is the wrong trade. So: a small XML-shaped scanner\n * that keeps kept attributes VERBATIM (their raw source span, entities and\n * all) and drops the rest. Nothing is re-encoded, so nothing can be mangled\n * by a re-encode.\n *\n * ## What it removes\n *\n * - `<script>` and its content, at any nesting depth and under any namespace\n * prefix (`<html:script>` has local name `script`).\n * - `<foreignObject>` and its subtree — the documented HTML escape hatch.\n * - `<iframe>`, `<frame>`, `<frameset>`, `<embed>`, `<object>`, `<handler>`,\n * `<listener>`, `<animation>`, `<audio>`, `<video>` and their subtrees.\n * - Every `on*` attribute (`onload`, `onclick`, `onbegin`, …).\n * - Every URL-bearing attribute (`href`, `xlink:href`, `src`, `data`,\n * `action`, `formaction`, `poster`) whose value is not a same-document\n * `#fragment` or a raster `data:image/…` — which covers `javascript:`,\n * `data:text/html`, nested `data:image/svg+xml`, and plain external refs.\n * - Animation elements (`<set>`, `<animate>`, …) that target a URL attribute,\n * because `<set attributeName=\"href\" to=\"javascript:…\">` reintroduces one.\n * - `url(…)` references to anywhere but a `#fragment` inside `style=`,\n * presentation attributes (`fill`, `filter`, `mask`, `clip-path`, …) and\n * `<style>` text, plus `@import` and `expression(`.\n * - `<?xml-stylesheet?>` and every other processing instruction — an external\n * XSLT is a script engine.\n * - A DOCTYPE with an internal subset, whose `<!ENTITY>` definitions expand\n * into markup after every check here has run. A plain external-id DOCTYPE\n * is inert and kept, because Illustrator has emitted one for twenty years\n * and rewriting those files buys nothing.\n *\n * Scheme detection decodes numeric and named entities first and ignores\n * control characters and whitespace, so `javascript:` and `java	script:`\n * resolve the same way the browser resolves them.\n */\n\n/** Elements dropped together with everything inside them. */\nconst REMOVED_ELEMENTS = new Set([\n 'script',\n 'foreignobject',\n 'iframe',\n 'frame',\n 'frameset',\n 'embed',\n 'object',\n 'handler',\n 'listener',\n 'animation',\n 'audio',\n 'video',\n])\n\n/**\n * Elements whose content is raw text rather than markup. Consumed to their\n * close tag verbatim, so a `<` inside CSS or script source can never be\n * mistaken for a tag and desynchronize the scan.\n */\nconst RAW_TEXT_ELEMENTS = new Set(['script', 'style'])\n\n/** SMIL animation elements — safe unless they animate a URL attribute. */\nconst ANIMATION_ELEMENTS = new Set([\n 'set',\n 'animate',\n 'animatetransform',\n 'animatemotion',\n 'animatecolor',\n])\n\n/** Attributes whose whole value is a URL. */\nconst URL_ATTRIBUTES = new Set([\n 'href',\n 'src',\n 'data',\n 'action',\n 'formaction',\n 'poster',\n])\n\nconst ENTITIES: Record<string, string> = {\n amp: '&',\n lt: '<',\n gt: '>',\n quot: '\"',\n apos: \"'\",\n colon: ':',\n tab: '\\t',\n newline: '\\n',\n sol: '/',\n}\n\n/** What a sanitization pass took out, for the asset's audit trail. */\nexport interface SvgSanitizeResult {\n /** The sanitized document. Only meaningful when `changed`. */\n svg: string\n /** Whether anything was removed at all. */\n changed: boolean\n /** Distinct reasons, e.g. `['script', 'event handler']`. */\n removed: string[]\n}\n\n/** The one content type that is a document wearing an `image/` label. */\nexport function isSvgUploadType(contentType: string): boolean {\n const type = String(contentType ?? '')\n .split(';')[0]\n .trim()\n .toLowerCase()\n return type === 'image/svg+xml' || type === 'image/svg'\n}\n\nfunction decodeEntities(value: string): string {\n let out = String(value ?? '')\n // Bounded, because `&#106;` is a decode away from `j` and an\n // attacker gets to pick the depth. Three passes is past anything a browser\n // will itself resolve.\n for (let pass = 0; pass < 3; pass++) {\n const next = out\n .replace(/&#x([0-9a-f]+);?/gi, (match, hex) => codePoint(parseInt(hex, 16), match))\n .replace(/&#(\\d+);?/g, (match, decimal) => codePoint(parseInt(decimal, 10), match))\n .replace(/&([a-z]+);/gi, (match, name) => ENTITIES[String(name).toLowerCase()] ?? match)\n if (next === out) break\n out = next\n }\n return out\n}\n\nfunction codePoint(value: number, fallback: string): string {\n if (!Number.isFinite(value) || value < 0 || value > 0x10ffff) return fallback\n try {\n return String.fromCodePoint(value)\n } catch {\n return fallback\n }\n}\n\n/**\n * Drops every character a browser ignores while resolving a URL's scheme —\n * control characters and whitespace — so `java\\tscript:` and a leading NUL\n * both collapse to `javascript:` before the check below sees them.\n *\n * Written as a code-point filter rather than a character class because a\n * control-character range in a regex is exactly what `no-control-regex`\n * exists to flag, and silencing that rule here would be the wrong signal.\n */\nfunction stripInsignificant(value: string): string {\n let out = ''\n for (const character of value) {\n const code = character.codePointAt(0) ?? 0\n if (code > 0x20 && code !== 0x7f) out += character\n }\n return out\n}\n\n/**\n * A URL value the sanitizer will keep.\n *\n * Same-document fragments (`#gradient-1`, what `<use>` and `fill=\"url(#…)\"`\n * actually need) and raster data URIs. Everything else goes, including plain\n * relative and `https:` references: AGL-1474 asks for external references to\n * be stripped, and inside an `<img>`-embedded SVG — the way logos are used\n * across this product — a browser refuses to load them anyway.\n *\n * `data:image/svg+xml` is NOT safe: it is another document, and nesting is how\n * a sanitizer gets walked past.\n */\nexport function isSafeSvgUrl(raw: string): boolean {\n const value = stripInsignificant(decodeEntities(raw))\n if (!value) return true\n if (value.startsWith('#')) return true\n const lower = value.toLowerCase()\n if (lower.startsWith('data:image/') && !lower.startsWith('data:image/svg')) {\n return true\n }\n return false\n}\n\nconst URL_FUNCTION = /url\\(\\s*(['\"]?)([^)'\"]*)\\1\\s*\\)/gi\n\n/** `url(…)`, `javascript:` or `expression(` pointing anywhere but this document. */\nfunction hasUnsafeUrlReference(value: string): boolean {\n const decoded = decodeEntities(value)\n const tight = stripInsignificant(decoded)\n if (/javascript:/i.test(tight)) return true\n if (/expression\\(/i.test(tight)) return true\n URL_FUNCTION.lastIndex = 0\n let match: RegExpExecArray | null\n while ((match = URL_FUNCTION.exec(decoded)) !== null) {\n if (!isSafeSvgUrl(match[2])) return true\n }\n return false\n}\n\n/**\n * `<style>` text. Kept rather than dropped — class-based styling is how every\n * exported SVG carries its colours, and removing it would visibly break\n * legitimate assets — with the escapes neutralized in place.\n */\nfunction sanitizeCss(css: string): { css: string; changed: boolean } {\n let out = css.replace(/@import[^;}]*(;|(?=\\}))/gi, '')\n URL_FUNCTION.lastIndex = 0\n out = out.replace(URL_FUNCTION, (match, _quote, target) =>\n isSafeSvgUrl(String(target)) ? match : 'url(#)',\n )\n out = out.replace(/javascript:/gi, '')\n out = out.replace(/expression\\(/gi, '(')\n return { css: out, changed: out !== css }\n}\n\ninterface ParsedAttribute {\n /** Raw source INCLUDING the leading whitespace run, so kept attributes\n * round-trip byte for byte. */\n raw: string\n name: string\n /** Lower-cased, namespace prefix removed: `xlink:href` → `href`. */\n localName: string\n value: string\n}\n\ninterface ParsedTag {\n name: string\n localName: string\n closing: boolean\n selfClosing: boolean\n attributes: ParsedAttribute[]\n /** Index just past the tag's `>`. */\n end: number\n}\n\nfunction localNameOf(name: string): string {\n const lower = name.toLowerCase()\n const colon = lower.lastIndexOf(':')\n return colon >= 0 ? lower.slice(colon + 1) : lower\n}\n\nconst TAG_NAME = /^[A-Za-z_][A-Za-z0-9:._-]*/\nconst ATTRIBUTE_NAME = /^[^\\s=/>]+/\nconst WHITESPACE = /\\s/\n\n/** Reads one tag starting at `from` (the `<`), or `null` if it is not one. */\nfunction readTag(source: string, from: number): ParsedTag | null {\n let i = from + 1\n const closing = source[i] === '/'\n if (closing) i++\n const nameMatch = TAG_NAME.exec(source.slice(i))\n if (!nameMatch) return null\n const name = nameMatch[0]\n i += name.length\n const attributes: ParsedAttribute[] = []\n const tag = (selfClosing: boolean, end: number): ParsedTag => ({\n name,\n localName: localNameOf(name),\n closing,\n selfClosing,\n attributes,\n end,\n })\n while (i < source.length) {\n const spanStart = i\n while (i < source.length && WHITESPACE.test(source[i])) i++\n if (i >= source.length) break\n if (source[i] === '>') return tag(false, i + 1)\n if (source[i] === '/' && source[i + 1] === '>') return tag(true, i + 2)\n const attributeMatch = ATTRIBUTE_NAME.exec(source.slice(i))\n if (!attributeMatch) {\n i++\n continue\n }\n const attributeName = attributeMatch[0]\n let cursor = i + attributeName.length\n let after = cursor\n while (after < source.length && WHITESPACE.test(source[after])) after++\n let value = ''\n if (source[after] === '=') {\n after++\n while (after < source.length && WHITESPACE.test(source[after])) after++\n const quote = source[after]\n if (quote === '\"' || quote === \"'\") {\n const close = source.indexOf(quote, after + 1)\n value = source.slice(after + 1, close < 0 ? source.length : close)\n cursor = close < 0 ? source.length : close + 1\n } else {\n const unquoted = /^[^\\s>]*/.exec(source.slice(after)) as RegExpExecArray\n value = unquoted[0]\n cursor = after + unquoted[0].length\n }\n }\n attributes.push({\n raw: source.slice(spanStart, cursor),\n name: attributeName,\n localName: localNameOf(attributeName),\n value,\n })\n i = cursor\n }\n return null\n}\n\n/** Consumes an element's raw text content up to and including its close tag. */\nfunction consumeRawText(\n source: string,\n from: number,\n name: string,\n): { text: string; end: number } {\n const lower = source.toLowerCase()\n const needle = `</${name.toLowerCase()}`\n let index = lower.indexOf(needle, from)\n while (index >= 0) {\n const next = source[index + needle.length]\n if (next === undefined || /[\\s>/]/.test(next)) break\n index = lower.indexOf(needle, index + needle.length)\n }\n if (index < 0) return { text: source.slice(from), end: source.length }\n const gt = source.indexOf('>', index)\n return {\n text: source.slice(from, index),\n end: gt < 0 ? source.length : gt + 1,\n }\n}\n\nfunction renderTag(tag: ParsedTag, kept: ParsedAttribute[]): string {\n return `<${tag.name}${kept.map((attribute) => attribute.raw).join('')}${\n tag.selfClosing ? '/>' : '>'\n }`\n}\n\n/** Strips the executable and external-reference surface from an SVG source. */\nexport function sanitizeSvg(source: string): SvgSanitizeResult {\n const removed = new Set<string>()\n /** Stack of local names of removed subtrees; non-empty means \"dropping\". */\n const skipping: string[] = []\n let out = ''\n let i = 0\n const emit = (text: string) => {\n if (!skipping.length) out += text\n }\n\n while (i < source.length) {\n const lt = source.indexOf('<', i)\n if (lt < 0) {\n emit(source.slice(i))\n break\n }\n emit(source.slice(i, lt))\n\n if (source.startsWith('<!--', lt)) {\n const end = source.indexOf('-->', lt + 4)\n const stop = end < 0 ? source.length : end + 3\n emit(source.slice(lt, stop))\n i = stop\n continue\n }\n if (source.startsWith('<![CDATA[', lt)) {\n const end = source.indexOf(']]>', lt + 9)\n const stop = end < 0 ? source.length : end + 3\n emit(source.slice(lt, stop))\n i = stop\n continue\n }\n if (source.startsWith('<!', lt)) {\n const bracket = source.indexOf('[', lt)\n const close = source.indexOf('>', lt)\n if (bracket >= 0 && close >= 0 && bracket < close) {\n // Internal subset: `<!ENTITY payload \"<script>…\">` expands AFTER\n // every check below. Drop the whole declaration.\n const end = source.indexOf(']>', bracket)\n removed.add('doctype entity subset')\n i = end < 0 ? source.length : end + 2\n continue\n }\n const stop = close < 0 ? source.length : close + 1\n emit(source.slice(lt, stop))\n i = stop\n continue\n }\n if (source.startsWith('<?', lt)) {\n const end = source.indexOf('?>', lt + 2)\n const stop = end < 0 ? source.length : end + 2\n const instruction = source.slice(lt, stop)\n if (/^<\\?xml[\\s?]/i.test(instruction)) emit(instruction)\n else removed.add('processing instruction')\n i = stop\n continue\n }\n\n const tag = readTag(source, lt)\n if (!tag) {\n emit('<')\n i = lt + 1\n continue\n }\n\n // Raw-text elements are consumed whole, in or out of a removed subtree —\n // a `<` inside their content is content, not markup.\n if (!tag.closing && !tag.selfClosing && RAW_TEXT_ELEMENTS.has(tag.localName)) {\n const raw = consumeRawText(source, tag.end, tag.name)\n if (skipping.length || REMOVED_ELEMENTS.has(tag.localName)) {\n if (!skipping.length) removed.add(tag.localName)\n } else {\n const kept = tag.attributes.filter((attribute) =>\n keepAttribute(attribute, removed),\n )\n const styles = sanitizeCss(raw.text)\n if (styles.changed) removed.add('external style reference')\n emit(`${renderTag(tag, kept)}${styles.css}</${tag.name}>`)\n }\n i = raw.end\n continue\n }\n\n if (tag.closing) {\n if (skipping.length) {\n if (skipping[skipping.length - 1] === tag.localName) skipping.pop()\n } else {\n emit(`</${tag.name}>`)\n }\n i = tag.end\n continue\n }\n\n if (skipping.length) {\n // Track same-name nesting so the matching close is the one that ends\n // the removal, not the first one encountered.\n if (!tag.selfClosing && skipping[skipping.length - 1] === tag.localName) {\n skipping.push(tag.localName)\n }\n i = tag.end\n continue\n }\n\n if (REMOVED_ELEMENTS.has(tag.localName)) {\n removed.add(tag.localName)\n if (!tag.selfClosing) skipping.push(tag.localName)\n i = tag.end\n continue\n }\n\n if (ANIMATION_ELEMENTS.has(tag.localName)) {\n const target = tag.attributes.find(\n (attribute) => attribute.localName === 'attributename',\n )\n const animated = localNameOf(decodeEntities(target?.value ?? '').trim())\n if (target && (URL_ATTRIBUTES.has(animated) || animated === 'style')) {\n removed.add('animated reference')\n if (!tag.selfClosing) skipping.push(tag.localName)\n i = tag.end\n continue\n }\n }\n\n emit(\n renderTag(\n tag,\n tag.attributes.filter((attribute) => keepAttribute(attribute, removed)),\n ),\n )\n i = tag.end\n }\n\n return { svg: out, changed: removed.size > 0, removed: [...removed].sort() }\n}\n\nfunction keepAttribute(\n attribute: ParsedAttribute,\n removed: Set<string>,\n): boolean {\n // No standard SVG attribute begins with `on` except the event handlers.\n if (/^on/i.test(attribute.localName) || /^on/i.test(attribute.name)) {\n removed.add('event handler')\n return false\n }\n if (URL_ATTRIBUTES.has(attribute.localName)) {\n if (isSafeSvgUrl(attribute.value)) return true\n removed.add('external reference')\n return false\n }\n // `style=`, and the presentation attributes that take a paint server\n // (`fill`, `stroke`, `filter`, `mask`, `clip-path`, `marker-*`).\n if (hasUnsafeUrlReference(attribute.value)) {\n removed.add(\n attribute.localName === 'style'\n ? 'external style reference'\n : 'external reference',\n )\n return false\n }\n return true\n}\n\n/**\n * Buffer form for the upload routes.\n *\n * When nothing was removed the ORIGINAL buffer comes back untouched — not a\n * re-encode of the parsed source. That is deliberate: it means a legitimate\n * SVG in some encoding this scanner does not model can never be corrupted by\n * merely passing through, and it keeps the stored content hash stable.\n */\nexport function sanitizeSvgBuffer(buffer: Buffer): {\n buffer: Buffer\n changed: boolean\n removed: string[]\n} {\n const result = sanitizeSvg(buffer.toString('utf8'))\n return {\n buffer: result.changed ? Buffer.from(result.svg, 'utf8') : buffer,\n changed: result.changed,\n removed: result.removed,\n }\n}\n"],"names":["REMOVED_ELEMENTS","Set","RAW_TEXT_ELEMENTS","ANIMATION_ELEMENTS","URL_ATTRIBUTES","ENTITIES","amp","lt","gt","quot","apos","colon","tab","newline","sol","isSvgUploadType","contentType","type","String","split","trim","toLowerCase","decodeEntities","value","out","pass","next","replace","match","hex","codePoint","parseInt","decimal","name","fallback","Number","isFinite","fromCodePoint","stripInsignificant","character","code","codePointAt","isSafeSvgUrl","raw","startsWith","lower","URL_FUNCTION","hasUnsafeUrlReference","decoded","tight","test","lastIndex","exec","sanitizeCss","css","_quote","target","changed","localNameOf","lastIndexOf","slice","TAG_NAME","ATTRIBUTE_NAME","WHITESPACE","readTag","source","from","i","closing","nameMatch","length","attributes","tag","selfClosing","end","localName","spanStart","attributeMatch","attributeName","cursor","after","quote","close","indexOf","unquoted","push","consumeRawText","needle","index","undefined","text","renderTag","kept","map","attribute","join","sanitizeSvg","removed","skipping","emit","stop","bracket","add","instruction","has","filter","keepAttribute","styles","pop","find","animated","svg","size","sort","sanitizeSvgBuffer","buffer","result","toString","Buffer"],"mappings":"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"}
|