@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,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* A MEMBER'S OWN ADDRESSES (AGL-2975): the pure half.
|
|
19
|
+
*
|
|
20
|
+
* A member signs in with one address and may write from others — a Gmail
|
|
21
|
+
* send-as alias on an outbound domain, a role mailbox their client lets them
|
|
22
|
+
* send as. Anything that asks "did one of our own people write this?" by the
|
|
23
|
+
* sign-in address alone answers no for every one of those messages. This
|
|
24
|
+
* module is what such a reader needs instead: the addresses a member has
|
|
25
|
+
* added in a workspace, which of them the member has CONFIRMED, and which
|
|
26
|
+
* member an address belongs to.
|
|
27
|
+
*
|
|
28
|
+
* ## Confirmed, or nothing
|
|
29
|
+
*
|
|
30
|
+
* An address a member merely typed is a claim. Treating it as theirs would
|
|
31
|
+
* let a typo — or a prospect's address pasted into the wrong field — decide
|
|
32
|
+
* whose timeline a stranger's mail lands on. So an address counts only once
|
|
33
|
+
* a confirmation link sent TO it was opened by the member who added it, and
|
|
34
|
+
* every reader here that answers "whose is this" reads confirmed addresses
|
|
35
|
+
* and nothing else. `verifiedAtMs` is written by the server alone; the
|
|
36
|
+
* rules deny the whole collection to every client.
|
|
37
|
+
*
|
|
38
|
+
* ## Org-scoped, beside the roster
|
|
39
|
+
*
|
|
40
|
+
* `orgs/{orgId}/memberEmailAliases/{uid}` — one document per member who has
|
|
41
|
+
* added an address, keyed like the roster row it belongs to. Kept OFF the
|
|
42
|
+
* roster row on purpose: `orgs/{orgId}/members/{uid}` is the permissions
|
|
43
|
+
* document every rules evaluation reads, it is readable by every org-wide
|
|
44
|
+
* member, and a write that lands on it while the member is being removed
|
|
45
|
+
* can conjure a membership back into existence (AGL-1766). An address
|
|
46
|
+
* somebody has not yet confirmed is not the team's business, and a stray
|
|
47
|
+
* write here grants nothing: every reader intersects it with the roster.
|
|
48
|
+
*
|
|
49
|
+
* ## Normalized the way member addresses are
|
|
50
|
+
*
|
|
51
|
+
* Trimmed and lower-cased by `normalizeContactEmail`, the function every
|
|
52
|
+
* member address and every message address is compared through, so an
|
|
53
|
+
* alias typed `Avery@Example.ORG ` matches a From of `avery@example.org`. Plus
|
|
54
|
+
* addressing is NOT folded, for the reason `account-emails.ts` gives:
|
|
55
|
+
* `a+b@x.com` is another mailbox almost everywhere but Gmail, so
|
|
56
|
+
* `avery+news@example.org` is a different address from a confirmed
|
|
57
|
+
* `avery@example.org`, exactly as it is from a sign-in address of that name.
|
|
58
|
+
*/
|
|
59
|
+
/** The collection under an org that holds each member's added addresses. */
|
|
60
|
+
export declare const MEMBER_EMAIL_ALIASES_COLLECTION = "memberEmailAliases";
|
|
61
|
+
/**
|
|
62
|
+
* How many addresses one member may add in one workspace, unconfirmed
|
|
63
|
+
* ones included. Each costs a confirmation email, and the point is "the
|
|
64
|
+
* address my outreach leaves from", not address collecting — the same
|
|
65
|
+
* ceiling `MAX_ACCOUNT_EMAILS` puts on an account.
|
|
66
|
+
*/
|
|
67
|
+
export declare const MEMBER_EMAIL_ALIASES_MAX = 5;
|
|
68
|
+
/** How long a confirmation link works: a day, as an account address's does. */
|
|
69
|
+
export declare const MEMBER_EMAIL_ALIAS_CONFIRM_TTL_MS: number;
|
|
70
|
+
/** The query parameter a confirmation link carries its token in. */
|
|
71
|
+
export declare const MEMBER_EMAIL_ALIAS_CONFIRM_PARAM = "confirmEmailAlias";
|
|
72
|
+
/**
|
|
73
|
+
* The console route a member manages their addresses through. One spelling
|
|
74
|
+
* for the route file's readers and every card that calls it.
|
|
75
|
+
*/
|
|
76
|
+
export declare const MEMBER_EMAIL_ALIASES_ROUTE = "/api/orgs/members/email-aliases";
|
|
77
|
+
/** One address a member added. */
|
|
78
|
+
export interface MemberEmailAlias {
|
|
79
|
+
/** Normalized — see the module comment. */
|
|
80
|
+
address: string;
|
|
81
|
+
/**
|
|
82
|
+
* When the member added it. A confirmation link names this instant, so
|
|
83
|
+
* removing the address and adding it again retires every link sent for
|
|
84
|
+
* the earlier one.
|
|
85
|
+
*/
|
|
86
|
+
addedAtMs: number;
|
|
87
|
+
/**
|
|
88
|
+
* When the member who added it opened a confirmation link. Absent until
|
|
89
|
+
* then, and an address without it is never treated as theirs.
|
|
90
|
+
*/
|
|
91
|
+
verifiedAtMs?: number;
|
|
92
|
+
}
|
|
93
|
+
/** `orgs/{orgId}/memberEmailAliases/{uid}`. */
|
|
94
|
+
export interface MemberEmailAliasesDocument {
|
|
95
|
+
uid: string;
|
|
96
|
+
aliases: MemberEmailAlias[];
|
|
97
|
+
updatedAtMs: number;
|
|
98
|
+
}
|
|
99
|
+
/** A stored or typed address, normalized, or `null` when it is not one. */
|
|
100
|
+
export declare function normalizeMemberEmailAlias(input: unknown): string | null;
|
|
101
|
+
/**
|
|
102
|
+
* The addresses a stored document holds, read defensively: an entry that is
|
|
103
|
+
* not an address is skipped, a repeated address keeps its first entry, and
|
|
104
|
+
* the list is bounded by {@link MEMBER_EMAIL_ALIASES_MAX}, so no reader walks
|
|
105
|
+
* more than the writer could ever have stored.
|
|
106
|
+
*/
|
|
107
|
+
export declare function readMemberEmailAliases(document: unknown): MemberEmailAlias[];
|
|
108
|
+
/** Whether the member who added the address has confirmed it. */
|
|
109
|
+
export declare function isVerifiedMemberEmailAlias(alias: Pick<MemberEmailAlias, 'verifiedAtMs'> | null | undefined): boolean;
|
|
110
|
+
/**
|
|
111
|
+
* The CONFIRMED addresses a stored document holds — the only answer any
|
|
112
|
+
* reader deciding "whose address is this" may use.
|
|
113
|
+
*/
|
|
114
|
+
export declare function verifiedMemberEmailAliases(document: unknown): string[];
|
|
115
|
+
/** One member, as a reader of their addresses needs them. */
|
|
116
|
+
export interface MemberAddresses {
|
|
117
|
+
/** The address they sign in with, as their roster row carries it. */
|
|
118
|
+
email?: string | null;
|
|
119
|
+
/**
|
|
120
|
+
* The addresses they have confirmed — {@link verifiedMemberEmailAliases}.
|
|
121
|
+
* An unconfirmed address never belongs here.
|
|
122
|
+
*/
|
|
123
|
+
verifiedAliases?: readonly string[];
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Every address that is this member's — the sign-in address first, then
|
|
127
|
+
* each confirmed alias — normalized, each once.
|
|
128
|
+
*/
|
|
129
|
+
export declare function memberEmailAddresses(member: MemberAddresses | null | undefined): string[];
|
|
130
|
+
/**
|
|
131
|
+
* The member an address belongs to, or `null`.
|
|
132
|
+
*
|
|
133
|
+
* A sign-in address decides first: one account signs in with it, so it
|
|
134
|
+
* names one person. Otherwise the member who confirmed it as an alias —
|
|
135
|
+
* when exactly one did. Two members who each confirmed a shared mailbox
|
|
136
|
+
* both own it, and naming either as the author of its mail would be a
|
|
137
|
+
* guess, so the answer is nobody in particular. Whether the address is
|
|
138
|
+
* the TEAM's is a different question, which {@link memberEmailAddresses}
|
|
139
|
+
* over the whole roster answers yes to either way.
|
|
140
|
+
*/
|
|
141
|
+
export declare function findMemberByEmailAddress<T extends MemberAddresses>(members: readonly T[], address: unknown): T | null;
|
|
142
|
+
/** Why an address could not be added. */
|
|
143
|
+
export type MemberEmailAliasAddRefusal = 'invalid-address' | 'sign-in-address' | 'reserved-domain' | 'already-confirmed' | 'limit-reached';
|
|
144
|
+
export type MemberEmailAliasAddVerdict = {
|
|
145
|
+
ok: true;
|
|
146
|
+
address: string;
|
|
147
|
+
/**
|
|
148
|
+
* The unconfirmed entry already holding the address, or `null` when it
|
|
149
|
+
* is new. Adding an address again is how a member asks for another
|
|
150
|
+
* link, so an unconfirmed duplicate is not a refusal.
|
|
151
|
+
*/
|
|
152
|
+
existing: MemberEmailAlias | null;
|
|
153
|
+
} | {
|
|
154
|
+
ok: false;
|
|
155
|
+
refusal: MemberEmailAliasAddRefusal;
|
|
156
|
+
message: string;
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* May this member add this address? Pure, so the card that greys out the
|
|
160
|
+
* field and the route that refuses the write give one answer.
|
|
161
|
+
*
|
|
162
|
+
* `reservedDomains` are domains the deployment itself receives mail at —
|
|
163
|
+
* the capture domain — whose addresses are the platform's, and a
|
|
164
|
+
* confirmation email sent to one would only be read back by the platform.
|
|
165
|
+
*/
|
|
166
|
+
export declare function evaluateMemberEmailAliasAdd(input: {
|
|
167
|
+
address: unknown;
|
|
168
|
+
signInEmail?: string | null;
|
|
169
|
+
aliases: readonly MemberEmailAlias[];
|
|
170
|
+
reservedDomains?: readonly string[];
|
|
171
|
+
}): MemberEmailAliasAddVerdict;
|
|
172
|
+
/** One address as the management route answers it. */
|
|
173
|
+
export interface MemberEmailAliasRow {
|
|
174
|
+
address: string;
|
|
175
|
+
addedAtMs: number;
|
|
176
|
+
verified: boolean;
|
|
177
|
+
verifiedAtMs: number | null;
|
|
178
|
+
}
|
|
179
|
+
/** The rows the management route answers with, in the order they were added. */
|
|
180
|
+
export declare function memberEmailAliasRows(aliases: readonly MemberEmailAlias[]): MemberEmailAliasRow[];
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2026 Aglyn LLC
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/ import { ACCOUNT_EMAIL_MAX_LENGTH, ACCOUNT_EMAIL_PATTERN } from "./account-emails.js";
|
|
18
|
+
import { normalizeContactEmail } from "./contacts.js";
|
|
19
|
+
/**
|
|
20
|
+
* A MEMBER'S OWN ADDRESSES (AGL-2975): the pure half.
|
|
21
|
+
*
|
|
22
|
+
* A member signs in with one address and may write from others — a Gmail
|
|
23
|
+
* send-as alias on an outbound domain, a role mailbox their client lets them
|
|
24
|
+
* send as. Anything that asks "did one of our own people write this?" by the
|
|
25
|
+
* sign-in address alone answers no for every one of those messages. This
|
|
26
|
+
* module is what such a reader needs instead: the addresses a member has
|
|
27
|
+
* added in a workspace, which of them the member has CONFIRMED, and which
|
|
28
|
+
* member an address belongs to.
|
|
29
|
+
*
|
|
30
|
+
* ## Confirmed, or nothing
|
|
31
|
+
*
|
|
32
|
+
* An address a member merely typed is a claim. Treating it as theirs would
|
|
33
|
+
* let a typo — or a prospect's address pasted into the wrong field — decide
|
|
34
|
+
* whose timeline a stranger's mail lands on. So an address counts only once
|
|
35
|
+
* a confirmation link sent TO it was opened by the member who added it, and
|
|
36
|
+
* every reader here that answers "whose is this" reads confirmed addresses
|
|
37
|
+
* and nothing else. `verifiedAtMs` is written by the server alone; the
|
|
38
|
+
* rules deny the whole collection to every client.
|
|
39
|
+
*
|
|
40
|
+
* ## Org-scoped, beside the roster
|
|
41
|
+
*
|
|
42
|
+
* `orgs/{orgId}/memberEmailAliases/{uid}` — one document per member who has
|
|
43
|
+
* added an address, keyed like the roster row it belongs to. Kept OFF the
|
|
44
|
+
* roster row on purpose: `orgs/{orgId}/members/{uid}` is the permissions
|
|
45
|
+
* document every rules evaluation reads, it is readable by every org-wide
|
|
46
|
+
* member, and a write that lands on it while the member is being removed
|
|
47
|
+
* can conjure a membership back into existence (AGL-1766). An address
|
|
48
|
+
* somebody has not yet confirmed is not the team's business, and a stray
|
|
49
|
+
* write here grants nothing: every reader intersects it with the roster.
|
|
50
|
+
*
|
|
51
|
+
* ## Normalized the way member addresses are
|
|
52
|
+
*
|
|
53
|
+
* Trimmed and lower-cased by `normalizeContactEmail`, the function every
|
|
54
|
+
* member address and every message address is compared through, so an
|
|
55
|
+
* alias typed `Avery@Example.ORG ` matches a From of `avery@example.org`. Plus
|
|
56
|
+
* addressing is NOT folded, for the reason `account-emails.ts` gives:
|
|
57
|
+
* `a+b@x.com` is another mailbox almost everywhere but Gmail, so
|
|
58
|
+
* `avery+news@example.org` is a different address from a confirmed
|
|
59
|
+
* `avery@example.org`, exactly as it is from a sign-in address of that name.
|
|
60
|
+
*/ /** The collection under an org that holds each member's added addresses. */ export const MEMBER_EMAIL_ALIASES_COLLECTION = 'memberEmailAliases';
|
|
61
|
+
/**
|
|
62
|
+
* How many addresses one member may add in one workspace, unconfirmed
|
|
63
|
+
* ones included. Each costs a confirmation email, and the point is "the
|
|
64
|
+
* address my outreach leaves from", not address collecting — the same
|
|
65
|
+
* ceiling `MAX_ACCOUNT_EMAILS` puts on an account.
|
|
66
|
+
*/ export const MEMBER_EMAIL_ALIASES_MAX = 5;
|
|
67
|
+
/** How long a confirmation link works: a day, as an account address's does. */ export const MEMBER_EMAIL_ALIAS_CONFIRM_TTL_MS = 24 * 60 * 60 * 1000;
|
|
68
|
+
/** The query parameter a confirmation link carries its token in. */ export const MEMBER_EMAIL_ALIAS_CONFIRM_PARAM = 'confirmEmailAlias';
|
|
69
|
+
/**
|
|
70
|
+
* The console route a member manages their addresses through. One spelling
|
|
71
|
+
* for the route file's readers and every card that calls it.
|
|
72
|
+
*/ export const MEMBER_EMAIL_ALIASES_ROUTE = '/api/orgs/members/email-aliases';
|
|
73
|
+
/** A stored or typed address, normalized, or `null` when it is not one. */ export function normalizeMemberEmailAlias(input) {
|
|
74
|
+
return normalizeContactEmail(input);
|
|
75
|
+
}
|
|
76
|
+
const positiveMs = (value)=>typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : null;
|
|
77
|
+
/**
|
|
78
|
+
* The addresses a stored document holds, read defensively: an entry that is
|
|
79
|
+
* not an address is skipped, a repeated address keeps its first entry, and
|
|
80
|
+
* the list is bounded by {@link MEMBER_EMAIL_ALIASES_MAX}, so no reader walks
|
|
81
|
+
* more than the writer could ever have stored.
|
|
82
|
+
*/ export function readMemberEmailAliases(document) {
|
|
83
|
+
const raw = document == null ? void 0 : document.aliases;
|
|
84
|
+
if (!Array.isArray(raw)) return [];
|
|
85
|
+
const seen = new Set();
|
|
86
|
+
const aliases = [];
|
|
87
|
+
for (const entry of raw){
|
|
88
|
+
if (aliases.length >= MEMBER_EMAIL_ALIASES_MAX) break;
|
|
89
|
+
const record = entry != null ? entry : {};
|
|
90
|
+
const address = normalizeMemberEmailAlias(record['address']);
|
|
91
|
+
const addedAtMs = positiveMs(record['addedAtMs']);
|
|
92
|
+
if (!address || addedAtMs === null || seen.has(address)) continue;
|
|
93
|
+
seen.add(address);
|
|
94
|
+
const verifiedAtMs = positiveMs(record['verifiedAtMs']);
|
|
95
|
+
aliases.push(_extends({
|
|
96
|
+
address,
|
|
97
|
+
addedAtMs
|
|
98
|
+
}, verifiedAtMs !== null ? {
|
|
99
|
+
verifiedAtMs
|
|
100
|
+
} : {}));
|
|
101
|
+
}
|
|
102
|
+
return aliases;
|
|
103
|
+
}
|
|
104
|
+
/** Whether the member who added the address has confirmed it. */ export function isVerifiedMemberEmailAlias(alias) {
|
|
105
|
+
return positiveMs(alias == null ? void 0 : alias.verifiedAtMs) !== null;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* The CONFIRMED addresses a stored document holds — the only answer any
|
|
109
|
+
* reader deciding "whose address is this" may use.
|
|
110
|
+
*/ export function verifiedMemberEmailAliases(document) {
|
|
111
|
+
return readMemberEmailAliases(document).filter(isVerifiedMemberEmailAlias).map((alias)=>alias.address);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Every address that is this member's — the sign-in address first, then
|
|
115
|
+
* each confirmed alias — normalized, each once.
|
|
116
|
+
*/ export function memberEmailAddresses(member) {
|
|
117
|
+
var _ref;
|
|
118
|
+
const addresses = [];
|
|
119
|
+
const add = (value)=>{
|
|
120
|
+
const address = normalizeMemberEmailAlias(value);
|
|
121
|
+
if (address && !addresses.includes(address)) addresses.push(address);
|
|
122
|
+
};
|
|
123
|
+
add(member == null ? void 0 : member.email);
|
|
124
|
+
for (const alias of (_ref = member == null ? void 0 : member.verifiedAliases) != null ? _ref : [])add(alias);
|
|
125
|
+
return addresses;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* The member an address belongs to, or `null`.
|
|
129
|
+
*
|
|
130
|
+
* A sign-in address decides first: one account signs in with it, so it
|
|
131
|
+
* names one person. Otherwise the member who confirmed it as an alias —
|
|
132
|
+
* when exactly one did. Two members who each confirmed a shared mailbox
|
|
133
|
+
* both own it, and naming either as the author of its mail would be a
|
|
134
|
+
* guess, so the answer is nobody in particular. Whether the address is
|
|
135
|
+
* the TEAM's is a different question, which {@link memberEmailAddresses}
|
|
136
|
+
* over the whole roster answers yes to either way.
|
|
137
|
+
*/ export function findMemberByEmailAddress(members, address) {
|
|
138
|
+
const wanted = normalizeMemberEmailAlias(address);
|
|
139
|
+
if (!wanted) return null;
|
|
140
|
+
const bySignIn = members.find((member)=>normalizeMemberEmailAlias(member.email) === wanted);
|
|
141
|
+
if (bySignIn) return bySignIn;
|
|
142
|
+
const holders = members.filter((member)=>{
|
|
143
|
+
var _member_verifiedAliases;
|
|
144
|
+
return ((_member_verifiedAliases = member.verifiedAliases) != null ? _member_verifiedAliases : []).some((alias)=>normalizeMemberEmailAlias(alias) === wanted);
|
|
145
|
+
});
|
|
146
|
+
return holders.length === 1 ? holders[0] : null;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* May this member add this address? Pure, so the card that greys out the
|
|
150
|
+
* field and the route that refuses the write give one answer.
|
|
151
|
+
*
|
|
152
|
+
* `reservedDomains` are domains the deployment itself receives mail at —
|
|
153
|
+
* the capture domain — whose addresses are the platform's, and a
|
|
154
|
+
* confirmation email sent to one would only be read back by the platform.
|
|
155
|
+
*/ export function evaluateMemberEmailAliasAdd(input) {
|
|
156
|
+
var _input_reservedDomains, _input_aliases_find;
|
|
157
|
+
// Stored only when it is a mailbox address in the narrower shape an
|
|
158
|
+
// account address must have: the address is mailed a link and printed in
|
|
159
|
+
// the console, so a string the loose comparison pattern admits — quotes,
|
|
160
|
+
// angle brackets, commas — is refused here rather than carried around.
|
|
161
|
+
const address = normalizeMemberEmailAlias(input.address);
|
|
162
|
+
if (!address || address.length > ACCOUNT_EMAIL_MAX_LENGTH || !ACCOUNT_EMAIL_PATTERN.test(address)) {
|
|
163
|
+
return {
|
|
164
|
+
ok: false,
|
|
165
|
+
refusal: 'invalid-address',
|
|
166
|
+
message: 'Enter a valid email address.'
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
if (address === normalizeMemberEmailAlias(input.signInEmail)) {
|
|
170
|
+
return {
|
|
171
|
+
ok: false,
|
|
172
|
+
refusal: 'sign-in-address',
|
|
173
|
+
message: 'That is the address you sign in with, which already counts as yours.'
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
const domain = address.slice(address.lastIndexOf('@') + 1);
|
|
177
|
+
const reserved = ((_input_reservedDomains = input.reservedDomains) != null ? _input_reservedDomains : []).map((value)=>String(value).trim().toLowerCase());
|
|
178
|
+
if (reserved.includes(domain)) {
|
|
179
|
+
return {
|
|
180
|
+
ok: false,
|
|
181
|
+
refusal: 'reserved-domain',
|
|
182
|
+
message: 'Addresses at that domain belong to the platform and cannot be added.'
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
const existing = (_input_aliases_find = input.aliases.find((alias)=>alias.address === address)) != null ? _input_aliases_find : null;
|
|
186
|
+
if (existing && isVerifiedMemberEmailAlias(existing)) {
|
|
187
|
+
return {
|
|
188
|
+
ok: false,
|
|
189
|
+
refusal: 'already-confirmed',
|
|
190
|
+
message: 'That address is already confirmed.'
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
if (!existing && input.aliases.length >= MEMBER_EMAIL_ALIASES_MAX) {
|
|
194
|
+
return {
|
|
195
|
+
ok: false,
|
|
196
|
+
refusal: 'limit-reached',
|
|
197
|
+
message: `You can add up to ${MEMBER_EMAIL_ALIASES_MAX} addresses. Remove one before adding another.`
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
ok: true,
|
|
202
|
+
address,
|
|
203
|
+
existing
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/** The rows the management route answers with, in the order they were added. */ export function memberEmailAliasRows(aliases) {
|
|
207
|
+
return [
|
|
208
|
+
...aliases
|
|
209
|
+
].sort((a, b)=>a.addedAtMs - b.addedAtMs).map((alias)=>({
|
|
210
|
+
address: alias.address,
|
|
211
|
+
addedAtMs: alias.addedAtMs,
|
|
212
|
+
verified: isVerifiedMemberEmailAlias(alias),
|
|
213
|
+
verifiedAtMs: positiveMs(alias.verifiedAtMs)
|
|
214
|
+
}));
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
//# sourceMappingURL=member-email-aliases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/member-email-aliases.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ACCOUNT_EMAIL_MAX_LENGTH, ACCOUNT_EMAIL_PATTERN } from './account-emails'\nimport { normalizeContactEmail } from './contacts'\n\n/**\n * A MEMBER'S OWN ADDRESSES (AGL-2975): the pure half.\n *\n * A member signs in with one address and may write from others — a Gmail\n * send-as alias on an outbound domain, a role mailbox their client lets them\n * send as. Anything that asks \"did one of our own people write this?\" by the\n * sign-in address alone answers no for every one of those messages. This\n * module is what such a reader needs instead: the addresses a member has\n * added in a workspace, which of them the member has CONFIRMED, and which\n * member an address belongs to.\n *\n * ## Confirmed, or nothing\n *\n * An address a member merely typed is a claim. Treating it as theirs would\n * let a typo — or a prospect's address pasted into the wrong field — decide\n * whose timeline a stranger's mail lands on. So an address counts only once\n * a confirmation link sent TO it was opened by the member who added it, and\n * every reader here that answers \"whose is this\" reads confirmed addresses\n * and nothing else. `verifiedAtMs` is written by the server alone; the\n * rules deny the whole collection to every client.\n *\n * ## Org-scoped, beside the roster\n *\n * `orgs/{orgId}/memberEmailAliases/{uid}` — one document per member who has\n * added an address, keyed like the roster row it belongs to. Kept OFF the\n * roster row on purpose: `orgs/{orgId}/members/{uid}` is the permissions\n * document every rules evaluation reads, it is readable by every org-wide\n * member, and a write that lands on it while the member is being removed\n * can conjure a membership back into existence (AGL-1766). An address\n * somebody has not yet confirmed is not the team's business, and a stray\n * write here grants nothing: every reader intersects it with the roster.\n *\n * ## Normalized the way member addresses are\n *\n * Trimmed and lower-cased by `normalizeContactEmail`, the function every\n * member address and every message address is compared through, so an\n * alias typed `Avery@Example.ORG ` matches a From of `avery@example.org`. Plus\n * addressing is NOT folded, for the reason `account-emails.ts` gives:\n * `a+b@x.com` is another mailbox almost everywhere but Gmail, so\n * `avery+news@example.org` is a different address from a confirmed\n * `avery@example.org`, exactly as it is from a sign-in address of that name.\n */\n\n/** The collection under an org that holds each member's added addresses. */\nexport const MEMBER_EMAIL_ALIASES_COLLECTION = 'memberEmailAliases'\n\n/**\n * How many addresses one member may add in one workspace, unconfirmed\n * ones included. Each costs a confirmation email, and the point is \"the\n * address my outreach leaves from\", not address collecting — the same\n * ceiling `MAX_ACCOUNT_EMAILS` puts on an account.\n */\nexport const MEMBER_EMAIL_ALIASES_MAX = 5\n\n/** How long a confirmation link works: a day, as an account address's does. */\nexport const MEMBER_EMAIL_ALIAS_CONFIRM_TTL_MS = 24 * 60 * 60 * 1000\n\n/** The query parameter a confirmation link carries its token in. */\nexport const MEMBER_EMAIL_ALIAS_CONFIRM_PARAM = 'confirmEmailAlias'\n\n/**\n * The console route a member manages their addresses through. One spelling\n * for the route file's readers and every card that calls it.\n */\nexport const MEMBER_EMAIL_ALIASES_ROUTE = '/api/orgs/members/email-aliases'\n\n/** One address a member added. */\nexport interface MemberEmailAlias {\n /** Normalized — see the module comment. */\n address: string\n /**\n * When the member added it. A confirmation link names this instant, so\n * removing the address and adding it again retires every link sent for\n * the earlier one.\n */\n addedAtMs: number\n /**\n * When the member who added it opened a confirmation link. Absent until\n * then, and an address without it is never treated as theirs.\n */\n verifiedAtMs?: number\n}\n\n/** `orgs/{orgId}/memberEmailAliases/{uid}`. */\nexport interface MemberEmailAliasesDocument {\n uid: string\n aliases: MemberEmailAlias[]\n updatedAtMs: number\n}\n\n/** A stored or typed address, normalized, or `null` when it is not one. */\nexport function normalizeMemberEmailAlias(input: unknown): string | null {\n return normalizeContactEmail(input)\n}\n\nconst positiveMs = (value: unknown): number | null =>\n typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : null\n\n/**\n * The addresses a stored document holds, read defensively: an entry that is\n * not an address is skipped, a repeated address keeps its first entry, and\n * the list is bounded by {@link MEMBER_EMAIL_ALIASES_MAX}, so no reader walks\n * more than the writer could ever have stored.\n */\nexport function readMemberEmailAliases(document: unknown): MemberEmailAlias[] {\n const raw = (document as { aliases?: unknown } | null | undefined)?.aliases\n if (!Array.isArray(raw)) return []\n const seen = new Set<string>()\n const aliases: MemberEmailAlias[] = []\n for (const entry of raw) {\n if (aliases.length >= MEMBER_EMAIL_ALIASES_MAX) break\n const record = (entry ?? {}) as Record<string, unknown>\n const address = normalizeMemberEmailAlias(record['address'])\n const addedAtMs = positiveMs(record['addedAtMs'])\n if (!address || addedAtMs === null || seen.has(address)) continue\n seen.add(address)\n const verifiedAtMs = positiveMs(record['verifiedAtMs'])\n aliases.push({ address, addedAtMs, ...(verifiedAtMs !== null ? { verifiedAtMs } : {}) })\n }\n return aliases\n}\n\n/** Whether the member who added the address has confirmed it. */\nexport function isVerifiedMemberEmailAlias(\n alias: Pick<MemberEmailAlias, 'verifiedAtMs'> | null | undefined,\n): boolean {\n return positiveMs(alias?.verifiedAtMs) !== null\n}\n\n/**\n * The CONFIRMED addresses a stored document holds — the only answer any\n * reader deciding \"whose address is this\" may use.\n */\nexport function verifiedMemberEmailAliases(document: unknown): string[] {\n return readMemberEmailAliases(document)\n .filter(isVerifiedMemberEmailAlias)\n .map((alias) => alias.address)\n}\n\n/** One member, as a reader of their addresses needs them. */\nexport interface MemberAddresses {\n /** The address they sign in with, as their roster row carries it. */\n email?: string | null\n /**\n * The addresses they have confirmed — {@link verifiedMemberEmailAliases}.\n * An unconfirmed address never belongs here.\n */\n verifiedAliases?: readonly string[]\n}\n\n/**\n * Every address that is this member's — the sign-in address first, then\n * each confirmed alias — normalized, each once.\n */\nexport function memberEmailAddresses(member: MemberAddresses | null | undefined): string[] {\n const addresses: string[] = []\n const add = (value: unknown) => {\n const address = normalizeMemberEmailAlias(value)\n if (address && !addresses.includes(address)) addresses.push(address)\n }\n add(member?.email)\n for (const alias of member?.verifiedAliases ?? []) add(alias)\n return addresses\n}\n\n/**\n * The member an address belongs to, or `null`.\n *\n * A sign-in address decides first: one account signs in with it, so it\n * names one person. Otherwise the member who confirmed it as an alias —\n * when exactly one did. Two members who each confirmed a shared mailbox\n * both own it, and naming either as the author of its mail would be a\n * guess, so the answer is nobody in particular. Whether the address is\n * the TEAM's is a different question, which {@link memberEmailAddresses}\n * over the whole roster answers yes to either way.\n */\nexport function findMemberByEmailAddress<T extends MemberAddresses>(\n members: readonly T[],\n address: unknown,\n): T | null {\n const wanted = normalizeMemberEmailAlias(address)\n if (!wanted) return null\n const bySignIn = members.find((member) => normalizeMemberEmailAlias(member.email) === wanted)\n if (bySignIn) return bySignIn\n const holders = members.filter((member) =>\n (member.verifiedAliases ?? []).some((alias) => normalizeMemberEmailAlias(alias) === wanted),\n )\n return holders.length === 1 ? holders[0] : null\n}\n\n/** Why an address could not be added. */\nexport type MemberEmailAliasAddRefusal =\n | 'invalid-address'\n | 'sign-in-address'\n | 'reserved-domain'\n | 'already-confirmed'\n | 'limit-reached'\n\nexport type MemberEmailAliasAddVerdict =\n | {\n ok: true\n address: string\n /**\n * The unconfirmed entry already holding the address, or `null` when it\n * is new. Adding an address again is how a member asks for another\n * link, so an unconfirmed duplicate is not a refusal.\n */\n existing: MemberEmailAlias | null\n }\n | { ok: false; refusal: MemberEmailAliasAddRefusal; message: string }\n\n/**\n * May this member add this address? Pure, so the card that greys out the\n * field and the route that refuses the write give one answer.\n *\n * `reservedDomains` are domains the deployment itself receives mail at —\n * the capture domain — whose addresses are the platform's, and a\n * confirmation email sent to one would only be read back by the platform.\n */\nexport function evaluateMemberEmailAliasAdd(input: {\n address: unknown\n signInEmail?: string | null\n aliases: readonly MemberEmailAlias[]\n reservedDomains?: readonly string[]\n}): MemberEmailAliasAddVerdict {\n // Stored only when it is a mailbox address in the narrower shape an\n // account address must have: the address is mailed a link and printed in\n // the console, so a string the loose comparison pattern admits — quotes,\n // angle brackets, commas — is refused here rather than carried around.\n const address = normalizeMemberEmailAlias(input.address)\n if (!address || address.length > ACCOUNT_EMAIL_MAX_LENGTH || !ACCOUNT_EMAIL_PATTERN.test(address)) {\n return { ok: false, refusal: 'invalid-address', message: 'Enter a valid email address.' }\n }\n if (address === normalizeMemberEmailAlias(input.signInEmail)) {\n return {\n ok: false,\n refusal: 'sign-in-address',\n message: 'That is the address you sign in with, which already counts as yours.',\n }\n }\n const domain = address.slice(address.lastIndexOf('@') + 1)\n const reserved = (input.reservedDomains ?? []).map((value) => String(value).trim().toLowerCase())\n if (reserved.includes(domain)) {\n return {\n ok: false,\n refusal: 'reserved-domain',\n message: 'Addresses at that domain belong to the platform and cannot be added.',\n }\n }\n const existing = input.aliases.find((alias) => alias.address === address) ?? null\n if (existing && isVerifiedMemberEmailAlias(existing)) {\n return { ok: false, refusal: 'already-confirmed', message: 'That address is already confirmed.' }\n }\n if (!existing && input.aliases.length >= MEMBER_EMAIL_ALIASES_MAX) {\n return {\n ok: false,\n refusal: 'limit-reached',\n message: `You can add up to ${MEMBER_EMAIL_ALIASES_MAX} addresses. Remove one before adding another.`,\n }\n }\n return { ok: true, address, existing }\n}\n\n/** One address as the management route answers it. */\nexport interface MemberEmailAliasRow {\n address: string\n addedAtMs: number\n verified: boolean\n verifiedAtMs: number | null\n}\n\n/** The rows the management route answers with, in the order they were added. */\nexport function memberEmailAliasRows(aliases: readonly MemberEmailAlias[]): MemberEmailAliasRow[] {\n return [...aliases]\n .sort((a, b) => a.addedAtMs - b.addedAtMs)\n .map((alias) => ({\n address: alias.address,\n addedAtMs: alias.addedAtMs,\n verified: isVerifiedMemberEmailAlias(alias),\n verifiedAtMs: positiveMs(alias.verifiedAtMs),\n }))\n}\n"],"names":["ACCOUNT_EMAIL_MAX_LENGTH","ACCOUNT_EMAIL_PATTERN","normalizeContactEmail","MEMBER_EMAIL_ALIASES_COLLECTION","MEMBER_EMAIL_ALIASES_MAX","MEMBER_EMAIL_ALIAS_CONFIRM_TTL_MS","MEMBER_EMAIL_ALIAS_CONFIRM_PARAM","MEMBER_EMAIL_ALIASES_ROUTE","normalizeMemberEmailAlias","input","positiveMs","value","Number","isFinite","readMemberEmailAliases","document","raw","aliases","Array","isArray","seen","Set","entry","length","record","address","addedAtMs","has","add","verifiedAtMs","push","isVerifiedMemberEmailAlias","alias","verifiedMemberEmailAliases","filter","map","memberEmailAddresses","member","addresses","includes","email","verifiedAliases","findMemberByEmailAddress","members","wanted","bySignIn","find","holders","some","evaluateMemberEmailAliasAdd","test","ok","refusal","message","signInEmail","domain","slice","lastIndexOf","reserved","reservedDomains","String","trim","toLowerCase","existing","memberEmailAliasRows","sort","a","b","verified"],"mappings":";AAAA;;;;;;;;;;;;;;;CAeC,GAED,SAASA,wBAAwB,EAAEC,qBAAqB,QAAQ,sBAAkB;AAClF,SAASC,qBAAqB,QAAQ,gBAAY;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCC,GAED,0EAA0E,GAC1E,OAAO,MAAMC,kCAAkC,qBAAoB;AAEnE;;;;;CAKC,GACD,OAAO,MAAMC,2BAA2B,EAAC;AAEzC,6EAA6E,GAC7E,OAAO,MAAMC,oCAAoC,KAAK,KAAK,KAAK,KAAI;AAEpE,kEAAkE,GAClE,OAAO,MAAMC,mCAAmC,oBAAmB;AAEnE;;;CAGC,GACD,OAAO,MAAMC,6BAA6B,kCAAiC;AA0B3E,yEAAyE,GACzE,OAAO,SAASC,0BAA0BC,KAAc;IACtD,OAAOP,sBAAsBO;AAC/B;AAEA,MAAMC,aAAa,CAACC,QAClB,OAAOA,UAAU,YAAYC,OAAOC,QAAQ,CAACF,UAAUA,QAAQ,IAAIA,QAAQ;AAE7E;;;;;CAKC,GACD,OAAO,SAASG,uBAAuBC,QAAiB;IACtD,MAAMC,MAAOD,4BAAD,AAACA,SAAuDE,OAAO;IAC3E,IAAI,CAACC,MAAMC,OAAO,CAACH,MAAM,OAAO,EAAE;IAClC,MAAMI,OAAO,IAAIC;IACjB,MAAMJ,UAA8B,EAAE;IACtC,KAAK,MAAMK,SAASN,IAAK;QACvB,IAAIC,QAAQM,MAAM,IAAInB,0BAA0B;QAChD,MAAMoB,SAAUF,gBAAAA,QAAS,CAAC;QAC1B,MAAMG,UAAUjB,0BAA0BgB,MAAM,CAAC,UAAU;QAC3D,MAAME,YAAYhB,WAAWc,MAAM,CAAC,YAAY;QAChD,IAAI,CAACC,WAAWC,cAAc,QAAQN,KAAKO,GAAG,CAACF,UAAU;QACzDL,KAAKQ,GAAG,CAACH;QACT,MAAMI,eAAenB,WAAWc,MAAM,CAAC,eAAe;QACtDP,QAAQa,IAAI,CAAC;YAAEL;YAASC;WAAeG,iBAAiB,OAAO;YAAEA;QAAa,IAAI,CAAC;IACrF;IACA,OAAOZ;AACT;AAEA,+DAA+D,GAC/D,OAAO,SAASc,2BACdC,KAAgE;IAEhE,OAAOtB,WAAWsB,yBAAAA,MAAOH,YAAY,MAAM;AAC7C;AAEA;;;CAGC,GACD,OAAO,SAASI,2BAA2BlB,QAAiB;IAC1D,OAAOD,uBAAuBC,UAC3BmB,MAAM,CAACH,4BACPI,GAAG,CAAC,CAACH,QAAUA,MAAMP,OAAO;AACjC;AAaA;;;CAGC,GACD,OAAO,SAASW,qBAAqBC,MAA0C;;IAC7E,MAAMC,YAAsB,EAAE;IAC9B,MAAMV,MAAM,CAACjB;QACX,MAAMc,UAAUjB,0BAA0BG;QAC1C,IAAIc,WAAW,CAACa,UAAUC,QAAQ,CAACd,UAAUa,UAAUR,IAAI,CAACL;IAC9D;IACAG,IAAIS,0BAAAA,OAAQG,KAAK;IACjB,KAAK,MAAMR,iBAASK,0BAAAA,OAAQI,eAAe,mBAAI,EAAE,CAAEb,IAAII;IACvD,OAAOM;AACT;AAEA;;;;;;;;;;CAUC,GACD,OAAO,SAASI,yBACdC,OAAqB,EACrBlB,OAAgB;IAEhB,MAAMmB,SAASpC,0BAA0BiB;IACzC,IAAI,CAACmB,QAAQ,OAAO;IACpB,MAAMC,WAAWF,QAAQG,IAAI,CAAC,CAACT,SAAW7B,0BAA0B6B,OAAOG,KAAK,MAAMI;IACtF,IAAIC,UAAU,OAAOA;IACrB,MAAME,UAAUJ,QAAQT,MAAM,CAAC,CAACG;YAC7BA;eAAD,EAACA,0BAAAA,OAAOI,eAAe,YAAtBJ,0BAA0B,EAAE,EAAEW,IAAI,CAAC,CAAChB,QAAUxB,0BAA0BwB,WAAWY;;IAEtF,OAAOG,QAAQxB,MAAM,KAAK,IAAIwB,OAAO,CAAC,EAAE,GAAG;AAC7C;AAuBA;;;;;;;CAOC,GACD,OAAO,SAASE,4BAA4BxC,KAK3C;QAiBmBA,wBAQDA;IAxBjB,oEAAoE;IACpE,yEAAyE;IACzE,yEAAyE;IACzE,uEAAuE;IACvE,MAAMgB,UAAUjB,0BAA0BC,MAAMgB,OAAO;IACvD,IAAI,CAACA,WAAWA,QAAQF,MAAM,GAAGvB,4BAA4B,CAACC,sBAAsBiD,IAAI,CAACzB,UAAU;QACjG,OAAO;YAAE0B,IAAI;YAAOC,SAAS;YAAmBC,SAAS;QAA+B;IAC1F;IACA,IAAI5B,YAAYjB,0BAA0BC,MAAM6C,WAAW,GAAG;QAC5D,OAAO;YACLH,IAAI;YACJC,SAAS;YACTC,SAAS;QACX;IACF;IACA,MAAME,SAAS9B,QAAQ+B,KAAK,CAAC/B,QAAQgC,WAAW,CAAC,OAAO;IACxD,MAAMC,WAAW,EAACjD,yBAAAA,MAAMkD,eAAe,YAArBlD,yBAAyB,EAAE,EAAE0B,GAAG,CAAC,CAACxB,QAAUiD,OAAOjD,OAAOkD,IAAI,GAAGC,WAAW;IAC9F,IAAIJ,SAASnB,QAAQ,CAACgB,SAAS;QAC7B,OAAO;YACLJ,IAAI;YACJC,SAAS;YACTC,SAAS;QACX;IACF;IACA,MAAMU,YAAWtD,sBAAAA,MAAMQ,OAAO,CAAC6B,IAAI,CAAC,CAACd,QAAUA,MAAMP,OAAO,KAAKA,oBAAhDhB,sBAA4D;IAC7E,IAAIsD,YAAYhC,2BAA2BgC,WAAW;QACpD,OAAO;YAAEZ,IAAI;YAAOC,SAAS;YAAqBC,SAAS;QAAqC;IAClG;IACA,IAAI,CAACU,YAAYtD,MAAMQ,OAAO,CAACM,MAAM,IAAInB,0BAA0B;QACjE,OAAO;YACL+C,IAAI;YACJC,SAAS;YACTC,SAAS,CAAC,kBAAkB,EAAEjD,yBAAyB,6CAA6C,CAAC;QACvG;IACF;IACA,OAAO;QAAE+C,IAAI;QAAM1B;QAASsC;IAAS;AACvC;AAUA,8EAA8E,GAC9E,OAAO,SAASC,qBAAqB/C,OAAoC;IACvE,OAAO;WAAIA;KAAQ,CAChBgD,IAAI,CAAC,CAACC,GAAGC,IAAMD,EAAExC,SAAS,GAAGyC,EAAEzC,SAAS,EACxCS,GAAG,CAAC,CAACH,QAAW,CAAA;YACfP,SAASO,MAAMP,OAAO;YACtBC,WAAWM,MAAMN,SAAS;YAC1B0C,UAAUrC,2BAA2BC;YACrCH,cAAcnB,WAAWsB,MAAMH,YAAY;QAC7C,CAAA;AACJ"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Merges an sx-shaped override over a base sx record with REAL merge
|
|
19
|
+
* semantics — the compose point for a component instance's root style
|
|
20
|
+
* overrides (AGL-1306): the component root's own sx is the base, the
|
|
21
|
+
* instance's `styleOverrides.root` is the override, and the grafted root
|
|
22
|
+
* renders the merged result on every surface (canvas, Preview, tenant
|
|
23
|
+
* SSR) because the graft itself calls this.
|
|
24
|
+
*
|
|
25
|
+
* Property-level behaviour (see {@link mergeSxProperty}):
|
|
26
|
+
*
|
|
27
|
+
* - A plain property replaces exactly the leaf it names; the base's
|
|
28
|
+
* other properties survive.
|
|
29
|
+
* - Responsive breakpoint objects merge with mobile-first cascade
|
|
30
|
+
* semantics via `mergeSchemeValue` — a partial `{ md: … }` override
|
|
31
|
+
* keeps the base's values below `md` instead of silently dropping
|
|
32
|
+
* them.
|
|
33
|
+
* - The `@scheme dark` slice is a plain record of style properties, so
|
|
34
|
+
* it merges key-by-key: overriding one dark colour keeps the base
|
|
35
|
+
* slice's siblings. A base-scope override does NOT erase the base's
|
|
36
|
+
* dark slice — the slice is a more specific selector of the same
|
|
37
|
+
* stylesheet, exactly as it behaves within a single node's sx.
|
|
38
|
+
* - Nested selector records (`&:hover`, `@media …`) merge key-by-key
|
|
39
|
+
* for the same reason.
|
|
40
|
+
*
|
|
41
|
+
* Non-record forms degrade honestly: when either side is an array, a
|
|
42
|
+
* function, or a scalar there is no record to merge into, so the pair
|
|
43
|
+
* composes in MUI's array form (later entries win per property at style
|
|
44
|
+
* resolution). Inputs are never mutated.
|
|
45
|
+
*/
|
|
46
|
+
export declare function mergeNodeSx(base: unknown, override: unknown): unknown;
|
|
47
|
+
export default mergeNodeSx;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2026 Aglyn LLC
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/ // Subpath, NOT the `@aglyn/shared-data-enums` barrel (AGL-2486). That barrel
|
|
18
|
+
// re-exports `lib/firebase-auth`, which imports `AuthErrorCodes` from
|
|
19
|
+
// `firebase/auth` as a VALUE — so a styling helper on the node-render path
|
|
20
|
+
// dragged the Firebase auth graph into the client bundle of every published
|
|
21
|
+
// customer page. This module and `palette-sx` were the only two edges from
|
|
22
|
+
// `@aglyn/aglyn` to that barrel; pointing both at the file they actually want
|
|
23
|
+
// measured -48,643 B GZIPPED off the `/[host]/[scheme]/[[...slug]]` route's client
|
|
24
|
+
// chunks (694,808 -> 646,165 B gz, Turbopack production build).
|
|
25
|
+
import { expandSxAliases } from "@aglyn/shared-data-enums/sx-property-aliases";
|
|
26
|
+
import { isResponsiveSxObject, mergeSchemeValue } from "./scheme-sx.js";
|
|
27
|
+
const isPlainObject = (value)=>typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
28
|
+
/**
|
|
29
|
+
* Merges one sx PROPERTY value over another, following the two house
|
|
30
|
+
* rules this codebase already enforces elsewhere:
|
|
31
|
+
*
|
|
32
|
+
* - `mergeThemeOptions` (host-theme): an override replaces the LEAF it
|
|
33
|
+
* names, never the whole record — so two plain objects (a `&:hover`
|
|
34
|
+
* block, a `@media` block) merge key-by-key rather than the override
|
|
35
|
+
* clobbering the base's siblings.
|
|
36
|
+
* - `mergeSchemeValue` (scheme-sx): responsive breakpoint objects merge
|
|
37
|
+
* with real mobile-first cascade semantics — a `{ md: … }` override
|
|
38
|
+
* keeps the base's xs–sm values, and a plain override applies at every
|
|
39
|
+
* width.
|
|
40
|
+
*
|
|
41
|
+
* Everything else (scalars, arrays, theme callbacks) is a leaf: the
|
|
42
|
+
* override replaces it.
|
|
43
|
+
*/ function mergeSxProperty(base, override) {
|
|
44
|
+
if (override === undefined) return base;
|
|
45
|
+
if (base === undefined) return override;
|
|
46
|
+
if (isResponsiveSxObject(base) || isResponsiveSxObject(override)) {
|
|
47
|
+
return mergeSchemeValue(base, override);
|
|
48
|
+
}
|
|
49
|
+
if (isPlainObject(base) && isPlainObject(override)) {
|
|
50
|
+
const merged = _extends({}, base);
|
|
51
|
+
for (const [key, value] of Object.entries(override)){
|
|
52
|
+
const next = mergeSxProperty(base[key], value);
|
|
53
|
+
if (next === undefined) delete merged[key];
|
|
54
|
+
else merged[key] = next;
|
|
55
|
+
}
|
|
56
|
+
return merged;
|
|
57
|
+
}
|
|
58
|
+
return override;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Merges an sx-shaped override over a base sx record with REAL merge
|
|
62
|
+
* semantics — the compose point for a component instance's root style
|
|
63
|
+
* overrides (AGL-1306): the component root's own sx is the base, the
|
|
64
|
+
* instance's `styleOverrides.root` is the override, and the grafted root
|
|
65
|
+
* renders the merged result on every surface (canvas, Preview, tenant
|
|
66
|
+
* SSR) because the graft itself calls this.
|
|
67
|
+
*
|
|
68
|
+
* Property-level behaviour (see {@link mergeSxProperty}):
|
|
69
|
+
*
|
|
70
|
+
* - A plain property replaces exactly the leaf it names; the base's
|
|
71
|
+
* other properties survive.
|
|
72
|
+
* - Responsive breakpoint objects merge with mobile-first cascade
|
|
73
|
+
* semantics via `mergeSchemeValue` — a partial `{ md: … }` override
|
|
74
|
+
* keeps the base's values below `md` instead of silently dropping
|
|
75
|
+
* them.
|
|
76
|
+
* - The `@scheme dark` slice is a plain record of style properties, so
|
|
77
|
+
* it merges key-by-key: overriding one dark colour keeps the base
|
|
78
|
+
* slice's siblings. A base-scope override does NOT erase the base's
|
|
79
|
+
* dark slice — the slice is a more specific selector of the same
|
|
80
|
+
* stylesheet, exactly as it behaves within a single node's sx.
|
|
81
|
+
* - Nested selector records (`&:hover`, `@media …`) merge key-by-key
|
|
82
|
+
* for the same reason.
|
|
83
|
+
*
|
|
84
|
+
* Non-record forms degrade honestly: when either side is an array, a
|
|
85
|
+
* function, or a scalar there is no record to merge into, so the pair
|
|
86
|
+
* composes in MUI's array form (later entries win per property at style
|
|
87
|
+
* resolution). Inputs are never mutated.
|
|
88
|
+
*/ export function mergeNodeSx(base, override) {
|
|
89
|
+
if (override === null || override === undefined) return base;
|
|
90
|
+
if (isPlainObject(override) && Object.keys(override).length === 0) {
|
|
91
|
+
return base;
|
|
92
|
+
}
|
|
93
|
+
if (base === null || base === undefined) return override;
|
|
94
|
+
if (!isPlainObject(base) || !isPlainObject(override)) {
|
|
95
|
+
return [
|
|
96
|
+
base,
|
|
97
|
+
override
|
|
98
|
+
].flat();
|
|
99
|
+
}
|
|
100
|
+
// Both sides speak ONE spelling before the key-level merge (AGL-2209).
|
|
101
|
+
// `py` and `paddingTop` are different keys, so without this an instance
|
|
102
|
+
// override never REPLACES an aliased definition value — it lands beside
|
|
103
|
+
// it, and a Padding Top override on a node whose definition says `py: 8`
|
|
104
|
+
// moves the top edge while the bottom silently keeps the component's 8.
|
|
105
|
+
// Semantics-preserving and identity-returning: an sx with no alias is the
|
|
106
|
+
// same object, so a corpus that never used one pays a key scan.
|
|
107
|
+
const canonicalBase = expandSxAliases(base, {
|
|
108
|
+
deep: true
|
|
109
|
+
});
|
|
110
|
+
const canonicalOverride = expandSxAliases(override, {
|
|
111
|
+
deep: true
|
|
112
|
+
});
|
|
113
|
+
const merged = _extends({}, canonicalBase);
|
|
114
|
+
for (const [key, value] of Object.entries(canonicalOverride)){
|
|
115
|
+
const next = mergeSxProperty(canonicalBase[key], value);
|
|
116
|
+
if (next === undefined) delete merged[key];
|
|
117
|
+
else merged[key] = next;
|
|
118
|
+
}
|
|
119
|
+
return merged;
|
|
120
|
+
}
|
|
121
|
+
export default mergeNodeSx;
|
|
122
|
+
|
|
123
|
+
//# sourceMappingURL=merge-node-sx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/merge-node-sx.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// Subpath, NOT the `@aglyn/shared-data-enums` barrel (AGL-2486). That barrel\n// re-exports `lib/firebase-auth`, which imports `AuthErrorCodes` from\n// `firebase/auth` as a VALUE — so a styling helper on the node-render path\n// dragged the Firebase auth graph into the client bundle of every published\n// customer page. This module and `palette-sx` were the only two edges from\n// `@aglyn/aglyn` to that barrel; pointing both at the file they actually want\n// measured -48,643 B GZIPPED off the `/[host]/[scheme]/[[...slug]]` route's client\n// chunks (694,808 -> 646,165 B gz, Turbopack production build).\nimport { expandSxAliases } from '@aglyn/shared-data-enums/sx-property-aliases'\nimport {\n isResponsiveSxObject,\n mergeSchemeValue,\n} from './scheme-sx'\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\n/**\n * Merges one sx PROPERTY value over another, following the two house\n * rules this codebase already enforces elsewhere:\n *\n * - `mergeThemeOptions` (host-theme): an override replaces the LEAF it\n * names, never the whole record — so two plain objects (a `&:hover`\n * block, a `@media` block) merge key-by-key rather than the override\n * clobbering the base's siblings.\n * - `mergeSchemeValue` (scheme-sx): responsive breakpoint objects merge\n * with real mobile-first cascade semantics — a `{ md: … }` override\n * keeps the base's xs–sm values, and a plain override applies at every\n * width.\n *\n * Everything else (scalars, arrays, theme callbacks) is a leaf: the\n * override replaces it.\n */\nfunction mergeSxProperty(base: unknown, override: unknown): unknown {\n if (override === undefined) return base\n if (base === undefined) return override\n if (isResponsiveSxObject(base) || isResponsiveSxObject(override)) {\n return mergeSchemeValue(base, override)\n }\n if (isPlainObject(base) && isPlainObject(override)) {\n const merged: Record<string, unknown> = { ...base }\n for (const [key, value] of Object.entries(override)) {\n const next = mergeSxProperty(base[key], value)\n if (next === undefined) delete merged[key]\n else merged[key] = next\n }\n return merged\n }\n return override\n}\n\n/**\n * Merges an sx-shaped override over a base sx record with REAL merge\n * semantics — the compose point for a component instance's root style\n * overrides (AGL-1306): the component root's own sx is the base, the\n * instance's `styleOverrides.root` is the override, and the grafted root\n * renders the merged result on every surface (canvas, Preview, tenant\n * SSR) because the graft itself calls this.\n *\n * Property-level behaviour (see {@link mergeSxProperty}):\n *\n * - A plain property replaces exactly the leaf it names; the base's\n * other properties survive.\n * - Responsive breakpoint objects merge with mobile-first cascade\n * semantics via `mergeSchemeValue` — a partial `{ md: … }` override\n * keeps the base's values below `md` instead of silently dropping\n * them.\n * - The `@scheme dark` slice is a plain record of style properties, so\n * it merges key-by-key: overriding one dark colour keeps the base\n * slice's siblings. A base-scope override does NOT erase the base's\n * dark slice — the slice is a more specific selector of the same\n * stylesheet, exactly as it behaves within a single node's sx.\n * - Nested selector records (`&:hover`, `@media …`) merge key-by-key\n * for the same reason.\n *\n * Non-record forms degrade honestly: when either side is an array, a\n * function, or a scalar there is no record to merge into, so the pair\n * composes in MUI's array form (later entries win per property at style\n * resolution). Inputs are never mutated.\n */\nexport function mergeNodeSx(base: unknown, override: unknown): unknown {\n if (override === null || override === undefined) return base\n if (isPlainObject(override) && Object.keys(override).length === 0) {\n return base\n }\n if (base === null || base === undefined) return override\n if (!isPlainObject(base) || !isPlainObject(override)) {\n return [base, override].flat()\n }\n // Both sides speak ONE spelling before the key-level merge (AGL-2209).\n // `py` and `paddingTop` are different keys, so without this an instance\n // override never REPLACES an aliased definition value — it lands beside\n // it, and a Padding Top override on a node whose definition says `py: 8`\n // moves the top edge while the bottom silently keeps the component's 8.\n // Semantics-preserving and identity-returning: an sx with no alias is the\n // same object, so a corpus that never used one pays a key scan.\n const canonicalBase = expandSxAliases(base, { deep: true })\n const canonicalOverride = expandSxAliases(override, { deep: true })\n const merged: Record<string, unknown> = { ...canonicalBase }\n for (const [key, value] of Object.entries(canonicalOverride)) {\n const next = mergeSxProperty(canonicalBase[key], value)\n if (next === undefined) delete merged[key]\n else merged[key] = next\n }\n return merged\n}\n\nexport default mergeNodeSx\n"],"names":["expandSxAliases","isResponsiveSxObject","mergeSchemeValue","isPlainObject","value","Array","isArray","mergeSxProperty","base","override","undefined","merged","key","Object","entries","next","mergeNodeSx","keys","length","flat","canonicalBase","deep","canonicalOverride"],"mappings":";AAAA;;;;;;;;;;;;;;;CAeC,GAED,6EAA6E;AAC7E,sEAAsE;AACtE,2EAA2E;AAC3E,4EAA4E;AAC5E,2EAA2E;AAC3E,8EAA8E;AAC9E,mFAAmF;AACnF,gEAAgE;AAChE,SAASA,eAAe,QAAQ,+CAA8C;AAC9E,SACEC,oBAAoB,EACpBC,gBAAgB,QACX,iBAAa;AAEpB,MAAMC,gBAAgB,CAACC,QACrB,OAAOA,UAAU,YAAYA,UAAU,QAAQ,CAACC,MAAMC,OAAO,CAACF;AAEhE;;;;;;;;;;;;;;;CAeC,GACD,SAASG,gBAAgBC,IAAa,EAAEC,QAAiB;IACvD,IAAIA,aAAaC,WAAW,OAAOF;IACnC,IAAIA,SAASE,WAAW,OAAOD;IAC/B,IAAIR,qBAAqBO,SAASP,qBAAqBQ,WAAW;QAChE,OAAOP,iBAAiBM,MAAMC;IAChC;IACA,IAAIN,cAAcK,SAASL,cAAcM,WAAW;QAClD,MAAME,SAAkC,aAAKH;QAC7C,KAAK,MAAM,CAACI,KAAKR,MAAM,IAAIS,OAAOC,OAAO,CAACL,UAAW;YACnD,MAAMM,OAAOR,gBAAgBC,IAAI,CAACI,IAAI,EAAER;YACxC,IAAIW,SAASL,WAAW,OAAOC,MAAM,CAACC,IAAI;iBACrCD,MAAM,CAACC,IAAI,GAAGG;QACrB;QACA,OAAOJ;IACT;IACA,OAAOF;AACT;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BC,GACD,OAAO,SAASO,YAAYR,IAAa,EAAEC,QAAiB;IAC1D,IAAIA,aAAa,QAAQA,aAAaC,WAAW,OAAOF;IACxD,IAAIL,cAAcM,aAAaI,OAAOI,IAAI,CAACR,UAAUS,MAAM,KAAK,GAAG;QACjE,OAAOV;IACT;IACA,IAAIA,SAAS,QAAQA,SAASE,WAAW,OAAOD;IAChD,IAAI,CAACN,cAAcK,SAAS,CAACL,cAAcM,WAAW;QACpD,OAAO;YAACD;YAAMC;SAAS,CAACU,IAAI;IAC9B;IACA,uEAAuE;IACvE,wEAAwE;IACxE,wEAAwE;IACxE,yEAAyE;IACzE,wEAAwE;IACxE,0EAA0E;IAC1E,gEAAgE;IAChE,MAAMC,gBAAgBpB,gBAAgBQ,MAAM;QAAEa,MAAM;IAAK;IACzD,MAAMC,oBAAoBtB,gBAAgBS,UAAU;QAAEY,MAAM;IAAK;IACjE,MAAMV,SAAkC,aAAKS;IAC7C,KAAK,MAAM,CAACR,KAAKR,MAAM,IAAIS,OAAOC,OAAO,CAACQ,mBAAoB;QAC5D,MAAMP,OAAOR,gBAAgBa,aAAa,CAACR,IAAI,EAAER;QACjD,IAAIW,SAASL,WAAW,OAAOC,MAAM,CAACC,IAAI;aACrCD,MAAM,CAACC,IAAI,GAAGG;IACrB;IACA,OAAOJ;AACT;AAEA,eAAeK,YAAW"}
|