@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,120 @@
|
|
|
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 version document's `nodes` field, decoded to the map every reader wants
|
|
19
|
+
* (AGL-1223).
|
|
20
|
+
*
|
|
21
|
+
* **`nodes` is stored in TWO live forms and both must be handled.** A plain
|
|
22
|
+
* Firestore map, and msgpack bytes: `screenVersionConverter` compresses on
|
|
23
|
+
* write (AGL-1151) and decodes only binary payloads on read, because "nodes
|
|
24
|
+
* saved while updateDoc bypassed the client converter are plain maps rather
|
|
25
|
+
* than compressed bytes". Server code that reads `snapshot.get('nodes')` raw
|
|
26
|
+
* therefore gets a Node `Buffer` for the compressed majority.
|
|
27
|
+
*
|
|
28
|
+
* That is a SILENT failure, not a loud one, which is why this exists as a
|
|
29
|
+
* shared helper rather than a note. Every scan predicate in this library
|
|
30
|
+
* walks the map with `Object.values(nodes)`; over a Buffer that yields the
|
|
31
|
+
* individual byte NUMBERS, none of which has a `props` or a `componentId`, so
|
|
32
|
+
* the loop completes and reports no matches. The endpoint answers "used
|
|
33
|
+
* nowhere" — for `/api/hosts/where-used` an invitation to delete something a
|
|
34
|
+
* live page renders, and for the media scan the sentence the AGL-1045 scope
|
|
35
|
+
* confirmation quotes before telling an author it is safe to restrict an
|
|
36
|
+
* asset.
|
|
37
|
+
*
|
|
38
|
+
* Returns `null` for absent AND for undecodable, logging the latter: a caller
|
|
39
|
+
* skipping a document is the same shape either way, and a decode failure that
|
|
40
|
+
* threw would fail the whole scan rather than one document.
|
|
41
|
+
*
|
|
42
|
+
* Every write path encodes, but the corpus does not: documents written before
|
|
43
|
+
* a given path learned to are still plain maps and nothing migrates them.
|
|
44
|
+
* Passing one through here is correct and is the point — a plain map returns
|
|
45
|
+
* unchanged, so a reader never has to know which it has.
|
|
46
|
+
*
|
|
47
|
+
* The bytes arrive as a Node `Buffer` on the server and as a Firestore
|
|
48
|
+
* `Bytes` on the CLIENT (AGL-1397), and only the first is an `ArrayBuffer`
|
|
49
|
+
* view. `Bytes` is a wrapper — `decompress` has always accepted it via
|
|
50
|
+
* `ByteSource`, but this helper used to route only views into `decompress`, so
|
|
51
|
+
* a `Bytes` fell through to the plain-map branch and came back UNCHANGED.
|
|
52
|
+
* That is the worst possible outcome for a client caller, because the wrapper
|
|
53
|
+
* is walkable: its `_byteString.binaryString` is the msgpack payload held as a
|
|
54
|
+
* latin-1 string, so `rewriteBindingTokensDeep` reads the page's text right
|
|
55
|
+
* out of the encoded bytes, "normalizes" a token inside them, and hands back
|
|
56
|
+
* `{_byteString: {binaryString: …}}` for something to write.
|
|
57
|
+
*
|
|
58
|
+
* A THIRD form arrives from outside Firestore: `{type: 'Buffer', data: […]}`,
|
|
59
|
+
* which is what `JSON.stringify` makes of a Node `Buffer` (AGL-1391). Site
|
|
60
|
+
* export bundles downloaded before that fix carry it, and it is the nastiest
|
|
61
|
+
* of the three — an `ArrayBuffer` view survives this helper, but a envelope is
|
|
62
|
+
* a plain object, so without this branch it returns UNCHANGED and every reader
|
|
63
|
+
* downstream walks an object whose only keys are `type` and `data`.
|
|
64
|
+
*/
|
|
65
|
+
export declare function decodeStoredNodes<T = Record<string, any>>(raw: unknown): T | null;
|
|
66
|
+
/**
|
|
67
|
+
* Which live storage form a `nodes` field is in.
|
|
68
|
+
*
|
|
69
|
+
* `absent` covers both "no field" and a scalar, because the only two things a
|
|
70
|
+
* caller does with either are skip the document or write a fresh tree.
|
|
71
|
+
*/
|
|
72
|
+
export type StoredNodesForm = 'bytes' | 'map' | 'absent';
|
|
73
|
+
/**
|
|
74
|
+
* Read the form off a stored field, so a partial update can write back the
|
|
75
|
+
* way the document came out.
|
|
76
|
+
*
|
|
77
|
+
* Rewriting a compressed document as a plain map inflates it by roughly 1.4x,
|
|
78
|
+
* which is the whole hazard this module exists to keep away from Firestore's
|
|
79
|
+
* per-document ceiling. A writer that merges one field into a document it did
|
|
80
|
+
* not fully read has no business changing the encoding of another.
|
|
81
|
+
*
|
|
82
|
+
* Recognises every form {@link decodeStoredNodes} does, and answers from the
|
|
83
|
+
* same predicates, so "what form is this" and "how do I read it" can never
|
|
84
|
+
* drift apart.
|
|
85
|
+
*/
|
|
86
|
+
export declare function storedNodesForm(raw: unknown): StoredNodesForm;
|
|
87
|
+
/**
|
|
88
|
+
* A node map in the form it should be STORED in — msgpack bytes.
|
|
89
|
+
*
|
|
90
|
+
* The write-side twin of {@link decodeStoredNodes}, and deliberately in the
|
|
91
|
+
* same file: a reader who finds one finds the other, which is what stops the
|
|
92
|
+
* next write path from being added without an encoding.
|
|
93
|
+
*
|
|
94
|
+
* Returns a bare `Uint8Array` and knows NOTHING about Firestore, for the
|
|
95
|
+
* reason `compress` documents — one value import of the client SDK's `Bytes`
|
|
96
|
+
* pulls the whole Firestore client into the tenant bundle. The caller wraps:
|
|
97
|
+
* `Bytes.fromUint8Array(...)` on the client SDK, `Buffer.from(...)` on the
|
|
98
|
+
* Admin SDK, which is what each accepts for a bytes field.
|
|
99
|
+
*
|
|
100
|
+
* ALREADY-encoded input passes through rather than being encoded again. A
|
|
101
|
+
* write path that copies a stored document — a version snapshot, an install
|
|
102
|
+
* from a published artifact — receives whichever form that document held, and
|
|
103
|
+
* msgpack of msgpack is a tree no reader can decode.
|
|
104
|
+
*
|
|
105
|
+
* Returns `null` for an absent field, so a caller can omit the key entirely
|
|
106
|
+
* rather than writing an empty map over a real tree (AGL-1250).
|
|
107
|
+
*/
|
|
108
|
+
export declare function encodeStoredNodes(nodes: unknown): Uint8Array | null;
|
|
109
|
+
/**
|
|
110
|
+
* The tree in the form the document already used.
|
|
111
|
+
*
|
|
112
|
+
* For the partial-update case: a writer that changes one field of a document
|
|
113
|
+
* it did not create must not also change how `nodes` is encoded. Pass the
|
|
114
|
+
* form read off the stored field and this hands back something to write.
|
|
115
|
+
*
|
|
116
|
+
* `absent` encodes, because a document with no stored form yet is a new one
|
|
117
|
+
* and new documents are compressed.
|
|
118
|
+
*/
|
|
119
|
+
export declare function matchStoredNodesForm<T>(nodes: T, form: StoredNodesForm): Uint8Array | T | null;
|
|
120
|
+
export default decodeStoredNodes;
|
|
@@ -0,0 +1,174 @@
|
|
|
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
|
+
*/ import { compress } from "./compress.js";
|
|
17
|
+
import { decompress } from "./decompress.js";
|
|
18
|
+
/**
|
|
19
|
+
* A version document's `nodes` field, decoded to the map every reader wants
|
|
20
|
+
* (AGL-1223).
|
|
21
|
+
*
|
|
22
|
+
* **`nodes` is stored in TWO live forms and both must be handled.** A plain
|
|
23
|
+
* Firestore map, and msgpack bytes: `screenVersionConverter` compresses on
|
|
24
|
+
* write (AGL-1151) and decodes only binary payloads on read, because "nodes
|
|
25
|
+
* saved while updateDoc bypassed the client converter are plain maps rather
|
|
26
|
+
* than compressed bytes". Server code that reads `snapshot.get('nodes')` raw
|
|
27
|
+
* therefore gets a Node `Buffer` for the compressed majority.
|
|
28
|
+
*
|
|
29
|
+
* That is a SILENT failure, not a loud one, which is why this exists as a
|
|
30
|
+
* shared helper rather than a note. Every scan predicate in this library
|
|
31
|
+
* walks the map with `Object.values(nodes)`; over a Buffer that yields the
|
|
32
|
+
* individual byte NUMBERS, none of which has a `props` or a `componentId`, so
|
|
33
|
+
* the loop completes and reports no matches. The endpoint answers "used
|
|
34
|
+
* nowhere" — for `/api/hosts/where-used` an invitation to delete something a
|
|
35
|
+
* live page renders, and for the media scan the sentence the AGL-1045 scope
|
|
36
|
+
* confirmation quotes before telling an author it is safe to restrict an
|
|
37
|
+
* asset.
|
|
38
|
+
*
|
|
39
|
+
* Returns `null` for absent AND for undecodable, logging the latter: a caller
|
|
40
|
+
* skipping a document is the same shape either way, and a decode failure that
|
|
41
|
+
* threw would fail the whole scan rather than one document.
|
|
42
|
+
*
|
|
43
|
+
* Every write path encodes, but the corpus does not: documents written before
|
|
44
|
+
* a given path learned to are still plain maps and nothing migrates them.
|
|
45
|
+
* Passing one through here is correct and is the point — a plain map returns
|
|
46
|
+
* unchanged, so a reader never has to know which it has.
|
|
47
|
+
*
|
|
48
|
+
* The bytes arrive as a Node `Buffer` on the server and as a Firestore
|
|
49
|
+
* `Bytes` on the CLIENT (AGL-1397), and only the first is an `ArrayBuffer`
|
|
50
|
+
* view. `Bytes` is a wrapper — `decompress` has always accepted it via
|
|
51
|
+
* `ByteSource`, but this helper used to route only views into `decompress`, so
|
|
52
|
+
* a `Bytes` fell through to the plain-map branch and came back UNCHANGED.
|
|
53
|
+
* That is the worst possible outcome for a client caller, because the wrapper
|
|
54
|
+
* is walkable: its `_byteString.binaryString` is the msgpack payload held as a
|
|
55
|
+
* latin-1 string, so `rewriteBindingTokensDeep` reads the page's text right
|
|
56
|
+
* out of the encoded bytes, "normalizes" a token inside them, and hands back
|
|
57
|
+
* `{_byteString: {binaryString: …}}` for something to write.
|
|
58
|
+
*
|
|
59
|
+
* A THIRD form arrives from outside Firestore: `{type: 'Buffer', data: […]}`,
|
|
60
|
+
* which is what `JSON.stringify` makes of a Node `Buffer` (AGL-1391). Site
|
|
61
|
+
* export bundles downloaded before that fix carry it, and it is the nastiest
|
|
62
|
+
* of the three — an `ArrayBuffer` view survives this helper, but a envelope is
|
|
63
|
+
* a plain object, so without this branch it returns UNCHANGED and every reader
|
|
64
|
+
* downstream walks an object whose only keys are `type` and `data`.
|
|
65
|
+
*/ export function decodeStoredNodes(raw) {
|
|
66
|
+
var _byteSource;
|
|
67
|
+
if (raw === null || raw === undefined) return null;
|
|
68
|
+
const bytes = ArrayBuffer.isView(raw) ? raw : (_byteSource = byteSource(raw)) != null ? _byteSource : bufferEnvelopeBytes(raw);
|
|
69
|
+
if (bytes) {
|
|
70
|
+
try {
|
|
71
|
+
return decompress(bytes);
|
|
72
|
+
} catch (error) {
|
|
73
|
+
// Undecodable nodes must never read as "no references".
|
|
74
|
+
console.error('could not decode stored nodes', error);
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return raw;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Read the form off a stored field, so a partial update can write back the
|
|
82
|
+
* way the document came out.
|
|
83
|
+
*
|
|
84
|
+
* Rewriting a compressed document as a plain map inflates it by roughly 1.4x,
|
|
85
|
+
* which is the whole hazard this module exists to keep away from Firestore's
|
|
86
|
+
* per-document ceiling. A writer that merges one field into a document it did
|
|
87
|
+
* not fully read has no business changing the encoding of another.
|
|
88
|
+
*
|
|
89
|
+
* Recognises every form {@link decodeStoredNodes} does, and answers from the
|
|
90
|
+
* same predicates, so "what form is this" and "how do I read it" can never
|
|
91
|
+
* drift apart.
|
|
92
|
+
*/ export function storedNodesForm(raw) {
|
|
93
|
+
if (raw === null || raw === undefined) return 'absent';
|
|
94
|
+
if (ArrayBuffer.isView(raw)) return 'bytes';
|
|
95
|
+
if (typeof raw !== 'object') return 'absent';
|
|
96
|
+
if (byteSource(raw) || bufferEnvelopeBytes(raw)) return 'bytes';
|
|
97
|
+
return 'map';
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* A node map in the form it should be STORED in — msgpack bytes.
|
|
101
|
+
*
|
|
102
|
+
* The write-side twin of {@link decodeStoredNodes}, and deliberately in the
|
|
103
|
+
* same file: a reader who finds one finds the other, which is what stops the
|
|
104
|
+
* next write path from being added without an encoding.
|
|
105
|
+
*
|
|
106
|
+
* Returns a bare `Uint8Array` and knows NOTHING about Firestore, for the
|
|
107
|
+
* reason `compress` documents — one value import of the client SDK's `Bytes`
|
|
108
|
+
* pulls the whole Firestore client into the tenant bundle. The caller wraps:
|
|
109
|
+
* `Bytes.fromUint8Array(...)` on the client SDK, `Buffer.from(...)` on the
|
|
110
|
+
* Admin SDK, which is what each accepts for a bytes field.
|
|
111
|
+
*
|
|
112
|
+
* ALREADY-encoded input passes through rather than being encoded again. A
|
|
113
|
+
* write path that copies a stored document — a version snapshot, an install
|
|
114
|
+
* from a published artifact — receives whichever form that document held, and
|
|
115
|
+
* msgpack of msgpack is a tree no reader can decode.
|
|
116
|
+
*
|
|
117
|
+
* Returns `null` for an absent field, so a caller can omit the key entirely
|
|
118
|
+
* rather than writing an empty map over a real tree (AGL-1250).
|
|
119
|
+
*/ export function encodeStoredNodes(nodes) {
|
|
120
|
+
if (nodes === null || nodes === undefined) return null;
|
|
121
|
+
if (ArrayBuffer.isView(nodes)) {
|
|
122
|
+
// Offset and length, for the reason `decompress` documents: firebase-admin
|
|
123
|
+
// hands back POOLED Buffers, so the whole backing ArrayBuffer is usually
|
|
124
|
+
// somebody else's data.
|
|
125
|
+
return new Uint8Array(nodes.buffer, nodes.byteOffset, nodes.byteLength);
|
|
126
|
+
}
|
|
127
|
+
if (typeof nodes !== 'object') return null;
|
|
128
|
+
const source = byteSource(nodes);
|
|
129
|
+
if (source) return source.toUint8Array();
|
|
130
|
+
const envelope = bufferEnvelopeBytes(nodes);
|
|
131
|
+
if (envelope) return envelope;
|
|
132
|
+
return compress(nodes);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* The tree in the form the document already used.
|
|
136
|
+
*
|
|
137
|
+
* For the partial-update case: a writer that changes one field of a document
|
|
138
|
+
* it did not create must not also change how `nodes` is encoded. Pass the
|
|
139
|
+
* form read off the stored field and this hands back something to write.
|
|
140
|
+
*
|
|
141
|
+
* `absent` encodes, because a document with no stored form yet is a new one
|
|
142
|
+
* and new documents are compressed.
|
|
143
|
+
*/ export function matchStoredNodesForm(nodes, form) {
|
|
144
|
+
return form === 'map' ? nodes : encodeStoredNodes(nodes);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* The client SDK's `Bytes`, structurally, or `null` for anything else.
|
|
148
|
+
*
|
|
149
|
+
* Matched on the method rather than the class so `firebase/firestore` stays
|
|
150
|
+
* out of this library — the same reason `decompress` types its input as
|
|
151
|
+
* `ByteSource`. A node map cannot collide: its values are node OBJECTS, never
|
|
152
|
+
* functions.
|
|
153
|
+
*/ function byteSource(raw) {
|
|
154
|
+
if (typeof raw !== 'object') return null;
|
|
155
|
+
return typeof raw.toUint8Array === 'function' ? raw : null;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* A JSON-serialized Node `Buffer`, or `null` for anything else.
|
|
159
|
+
*
|
|
160
|
+
* The test is deliberately exact — `type === 'Buffer'`, an array `data`, and
|
|
161
|
+
* NOTHING else — because the alternative reading of this object is a node map
|
|
162
|
+
* with nodes called `type` and `data`. That map cannot exist: a node map's
|
|
163
|
+
* values are node objects, so `type` would have to hold the literal string
|
|
164
|
+
* `'Buffer'` and `data` an array, at the same time, in the same document.
|
|
165
|
+
*/ function bufferEnvelopeBytes(raw) {
|
|
166
|
+
if (typeof raw !== 'object' || Array.isArray(raw)) return null;
|
|
167
|
+
const value = raw;
|
|
168
|
+
if (value.type !== 'Buffer' || !Array.isArray(value.data)) return null;
|
|
169
|
+
if (Object.keys(value).length !== 2) return null;
|
|
170
|
+
return Uint8Array.from(value.data);
|
|
171
|
+
}
|
|
172
|
+
export default decodeStoredNodes;
|
|
173
|
+
|
|
174
|
+
//# sourceMappingURL=stored-nodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/stored-nodes.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 { compress } from './compress'\nimport { decompress, type ByteSource } from './decompress'\n\n/**\n * A version document's `nodes` field, decoded to the map every reader wants\n * (AGL-1223).\n *\n * **`nodes` is stored in TWO live forms and both must be handled.** A plain\n * Firestore map, and msgpack bytes: `screenVersionConverter` compresses on\n * write (AGL-1151) and decodes only binary payloads on read, because \"nodes\n * saved while updateDoc bypassed the client converter are plain maps rather\n * than compressed bytes\". Server code that reads `snapshot.get('nodes')` raw\n * therefore gets a Node `Buffer` for the compressed majority.\n *\n * That is a SILENT failure, not a loud one, which is why this exists as a\n * shared helper rather than a note. Every scan predicate in this library\n * walks the map with `Object.values(nodes)`; over a Buffer that yields the\n * individual byte NUMBERS, none of which has a `props` or a `componentId`, so\n * the loop completes and reports no matches. The endpoint answers \"used\n * nowhere\" — for `/api/hosts/where-used` an invitation to delete something a\n * live page renders, and for the media scan the sentence the AGL-1045 scope\n * confirmation quotes before telling an author it is safe to restrict an\n * asset.\n *\n * Returns `null` for absent AND for undecodable, logging the latter: a caller\n * skipping a document is the same shape either way, and a decode failure that\n * threw would fail the whole scan rather than one document.\n *\n * Every write path encodes, but the corpus does not: documents written before\n * a given path learned to are still plain maps and nothing migrates them.\n * Passing one through here is correct and is the point — a plain map returns\n * unchanged, so a reader never has to know which it has.\n *\n * The bytes arrive as a Node `Buffer` on the server and as a Firestore\n * `Bytes` on the CLIENT (AGL-1397), and only the first is an `ArrayBuffer`\n * view. `Bytes` is a wrapper — `decompress` has always accepted it via\n * `ByteSource`, but this helper used to route only views into `decompress`, so\n * a `Bytes` fell through to the plain-map branch and came back UNCHANGED.\n * That is the worst possible outcome for a client caller, because the wrapper\n * is walkable: its `_byteString.binaryString` is the msgpack payload held as a\n * latin-1 string, so `rewriteBindingTokensDeep` reads the page's text right\n * out of the encoded bytes, \"normalizes\" a token inside them, and hands back\n * `{_byteString: {binaryString: …}}` for something to write.\n *\n * A THIRD form arrives from outside Firestore: `{type: 'Buffer', data: […]}`,\n * which is what `JSON.stringify` makes of a Node `Buffer` (AGL-1391). Site\n * export bundles downloaded before that fix carry it, and it is the nastiest\n * of the three — an `ArrayBuffer` view survives this helper, but a envelope is\n * a plain object, so without this branch it returns UNCHANGED and every reader\n * downstream walks an object whose only keys are `type` and `data`.\n */\nexport function decodeStoredNodes<T = Record<string, any>>(\n raw: unknown,\n): T | null {\n if (raw === null || raw === undefined) return null\n const bytes = ArrayBuffer.isView(raw)\n ? raw\n : byteSource(raw) ?? bufferEnvelopeBytes(raw)\n if (bytes) {\n try {\n return decompress<T>(bytes)\n } catch (error) {\n // Undecodable nodes must never read as \"no references\".\n console.error('could not decode stored nodes', error)\n return null\n }\n }\n return raw as T\n}\n\n/**\n * Which live storage form a `nodes` field is in.\n *\n * `absent` covers both \"no field\" and a scalar, because the only two things a\n * caller does with either are skip the document or write a fresh tree.\n */\nexport type StoredNodesForm = 'bytes' | 'map' | 'absent'\n\n/**\n * Read the form off a stored field, so a partial update can write back the\n * way the document came out.\n *\n * Rewriting a compressed document as a plain map inflates it by roughly 1.4x,\n * which is the whole hazard this module exists to keep away from Firestore's\n * per-document ceiling. A writer that merges one field into a document it did\n * not fully read has no business changing the encoding of another.\n *\n * Recognises every form {@link decodeStoredNodes} does, and answers from the\n * same predicates, so \"what form is this\" and \"how do I read it\" can never\n * drift apart.\n */\nexport function storedNodesForm(raw: unknown): StoredNodesForm {\n if (raw === null || raw === undefined) return 'absent'\n if (ArrayBuffer.isView(raw)) return 'bytes'\n if (typeof raw !== 'object') return 'absent'\n if (byteSource(raw) || bufferEnvelopeBytes(raw)) return 'bytes'\n return 'map'\n}\n\n/**\n * A node map in the form it should be STORED in — msgpack bytes.\n *\n * The write-side twin of {@link decodeStoredNodes}, and deliberately in the\n * same file: a reader who finds one finds the other, which is what stops the\n * next write path from being added without an encoding.\n *\n * Returns a bare `Uint8Array` and knows NOTHING about Firestore, for the\n * reason `compress` documents — one value import of the client SDK's `Bytes`\n * pulls the whole Firestore client into the tenant bundle. The caller wraps:\n * `Bytes.fromUint8Array(...)` on the client SDK, `Buffer.from(...)` on the\n * Admin SDK, which is what each accepts for a bytes field.\n *\n * ALREADY-encoded input passes through rather than being encoded again. A\n * write path that copies a stored document — a version snapshot, an install\n * from a published artifact — receives whichever form that document held, and\n * msgpack of msgpack is a tree no reader can decode.\n *\n * Returns `null` for an absent field, so a caller can omit the key entirely\n * rather than writing an empty map over a real tree (AGL-1250).\n */\nexport function encodeStoredNodes(nodes: unknown): Uint8Array | null {\n if (nodes === null || nodes === undefined) return null\n if (ArrayBuffer.isView(nodes)) {\n // Offset and length, for the reason `decompress` documents: firebase-admin\n // hands back POOLED Buffers, so the whole backing ArrayBuffer is usually\n // somebody else's data.\n return new Uint8Array(nodes.buffer, nodes.byteOffset, nodes.byteLength)\n }\n if (typeof nodes !== 'object') return null\n const source = byteSource(nodes)\n if (source) return source.toUint8Array()\n const envelope = bufferEnvelopeBytes(nodes)\n if (envelope) return envelope\n return compress(nodes)\n}\n\n/**\n * The tree in the form the document already used.\n *\n * For the partial-update case: a writer that changes one field of a document\n * it did not create must not also change how `nodes` is encoded. Pass the\n * form read off the stored field and this hands back something to write.\n *\n * `absent` encodes, because a document with no stored form yet is a new one\n * and new documents are compressed.\n */\nexport function matchStoredNodesForm<T>(\n nodes: T,\n form: StoredNodesForm,\n): Uint8Array | T | null {\n return form === 'map' ? nodes : encodeStoredNodes(nodes)\n}\n\n/**\n * The client SDK's `Bytes`, structurally, or `null` for anything else.\n *\n * Matched on the method rather than the class so `firebase/firestore` stays\n * out of this library — the same reason `decompress` types its input as\n * `ByteSource`. A node map cannot collide: its values are node OBJECTS, never\n * functions.\n */\nfunction byteSource(raw: unknown): ByteSource | null {\n if (typeof raw !== 'object') return null\n return typeof (raw as ByteSource).toUint8Array === 'function'\n ? (raw as ByteSource)\n : null\n}\n\n/**\n * A JSON-serialized Node `Buffer`, or `null` for anything else.\n *\n * The test is deliberately exact — `type === 'Buffer'`, an array `data`, and\n * NOTHING else — because the alternative reading of this object is a node map\n * with nodes called `type` and `data`. That map cannot exist: a node map's\n * values are node objects, so `type` would have to hold the literal string\n * `'Buffer'` and `data` an array, at the same time, in the same document.\n */\nfunction bufferEnvelopeBytes(raw: unknown): Uint8Array | null {\n if (typeof raw !== 'object' || Array.isArray(raw)) return null\n const value = raw as { type?: unknown; data?: unknown }\n if (value.type !== 'Buffer' || !Array.isArray(value.data)) return null\n if (Object.keys(value).length !== 2) return null\n return Uint8Array.from(value.data as number[])\n}\n\nexport default decodeStoredNodes\n"],"names":["compress","decompress","decodeStoredNodes","raw","byteSource","undefined","bytes","ArrayBuffer","isView","bufferEnvelopeBytes","error","console","storedNodesForm","encodeStoredNodes","nodes","Uint8Array","buffer","byteOffset","byteLength","source","toUint8Array","envelope","matchStoredNodesForm","form","Array","isArray","value","type","data","Object","keys","length","from"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED,SAASA,QAAQ,QAAQ,gBAAY;AACrC,SAASC,UAAU,QAAyB,kBAAc;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CC,GACD,OAAO,SAASC,kBACdC,GAAY;QAKRC;IAHJ,IAAID,QAAQ,QAAQA,QAAQE,WAAW,OAAO;IAC9C,MAAMC,QAAQC,YAAYC,MAAM,CAACL,OAC7BA,OACAC,cAAAA,WAAWD,gBAAXC,cAAmBK,oBAAoBN;IAC3C,IAAIG,OAAO;QACT,IAAI;YACF,OAAOL,WAAcK;QACvB,EAAE,OAAOI,OAAO;YACd,wDAAwD;YACxDC,QAAQD,KAAK,CAAC,iCAAiCA;YAC/C,OAAO;QACT;IACF;IACA,OAAOP;AACT;AAUA;;;;;;;;;;;;CAYC,GACD,OAAO,SAASS,gBAAgBT,GAAY;IAC1C,IAAIA,QAAQ,QAAQA,QAAQE,WAAW,OAAO;IAC9C,IAAIE,YAAYC,MAAM,CAACL,MAAM,OAAO;IACpC,IAAI,OAAOA,QAAQ,UAAU,OAAO;IACpC,IAAIC,WAAWD,QAAQM,oBAAoBN,MAAM,OAAO;IACxD,OAAO;AACT;AAEA;;;;;;;;;;;;;;;;;;;;CAoBC,GACD,OAAO,SAASU,kBAAkBC,KAAc;IAC9C,IAAIA,UAAU,QAAQA,UAAUT,WAAW,OAAO;IAClD,IAAIE,YAAYC,MAAM,CAACM,QAAQ;QAC7B,2EAA2E;QAC3E,yEAAyE;QACzE,wBAAwB;QACxB,OAAO,IAAIC,WAAWD,MAAME,MAAM,EAAEF,MAAMG,UAAU,EAAEH,MAAMI,UAAU;IACxE;IACA,IAAI,OAAOJ,UAAU,UAAU,OAAO;IACtC,MAAMK,SAASf,WAAWU;IAC1B,IAAIK,QAAQ,OAAOA,OAAOC,YAAY;IACtC,MAAMC,WAAWZ,oBAAoBK;IACrC,IAAIO,UAAU,OAAOA;IACrB,OAAOrB,SAASc;AAClB;AAEA;;;;;;;;;CASC,GACD,OAAO,SAASQ,qBACdR,KAAQ,EACRS,IAAqB;IAErB,OAAOA,SAAS,QAAQT,QAAQD,kBAAkBC;AACpD;AAEA;;;;;;;CAOC,GACD,SAASV,WAAWD,GAAY;IAC9B,IAAI,OAAOA,QAAQ,UAAU,OAAO;IACpC,OAAO,OAAO,AAACA,IAAmBiB,YAAY,KAAK,aAC9CjB,MACD;AACN;AAEA;;;;;;;;CAQC,GACD,SAASM,oBAAoBN,GAAY;IACvC,IAAI,OAAOA,QAAQ,YAAYqB,MAAMC,OAAO,CAACtB,MAAM,OAAO;IAC1D,MAAMuB,QAAQvB;IACd,IAAIuB,MAAMC,IAAI,KAAK,YAAY,CAACH,MAAMC,OAAO,CAACC,MAAME,IAAI,GAAG,OAAO;IAClE,IAAIC,OAAOC,IAAI,CAACJ,OAAOK,MAAM,KAAK,GAAG,OAAO;IAC5C,OAAOhB,WAAWiB,IAAI,CAACN,MAAME,IAAI;AACnC;AAEA,eAAe1B,kBAAiB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
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
|
+
* Remove every `undefined` value from a serialized node payload (AGL-1334).
|
|
19
|
+
*
|
|
20
|
+
* An editor form hands back its whole field set, so an optional attribute the
|
|
21
|
+
* author never set — or cleared — arrives as an OWN key whose value is
|
|
22
|
+
* `undefined` (the icon pickers do exactly this: `startIconPath` is written on
|
|
23
|
+
* every edit of a Button whose Start icon reads `(NONE)`). `undefined` is not
|
|
24
|
+
* a storable value, and the two besigner write paths disagreed about it in the
|
|
25
|
+
* worst possible way:
|
|
26
|
+
*
|
|
27
|
+
* - A **save** goes through a version-doc converter that msgpack-encodes the
|
|
28
|
+
* node map, and msgpack encodes an `undefined` member as nil — so the write
|
|
29
|
+
* succeeded and quietly persisted `startIconPath: null`. That null is the
|
|
30
|
+
* exact shape `dropClearedProps` has to defend against at RENDER time
|
|
31
|
+
* (AGL-1226), where it once 500'd every `/product/*` page.
|
|
32
|
+
* - A **publish** copies the same map onto the component document as a plain
|
|
33
|
+
* Firestore map, and `updateDoc()` rejects `undefined` outright:
|
|
34
|
+
* `Unsupported field value: undefined (found in field nodes.<id>.props.…)`.
|
|
35
|
+
*
|
|
36
|
+
* So the author saved, saw `UP TO DATE`, clicked Publish, and got a raw
|
|
37
|
+
* Firestore error — with every instance still rendering the old markup.
|
|
38
|
+
*
|
|
39
|
+
* Dropping the key is what "cleared" means for an optional prop: absent, so
|
|
40
|
+
* the component's own default applies. Not `null`, which is a value, and not
|
|
41
|
+
* `deleteField()`, which cannot appear inside a nested map written wholesale.
|
|
42
|
+
* Applied at the ONE place both write paths serialize from
|
|
43
|
+
* (`AglynNode.toJSON`), so save and publish agree by construction rather than
|
|
44
|
+
* by two strippers that can drift.
|
|
45
|
+
*
|
|
46
|
+
* `null`, `0`, `''` and `false` are kept — those are values an author can mean
|
|
47
|
+
* (and, unlike `undefined`, all four store fine).
|
|
48
|
+
*
|
|
49
|
+
* Recurses into plain objects and arrays only: a `Date`, a Firestore
|
|
50
|
+
* `Timestamp`, a `Bytes` or any other class instance is a leaf and is passed
|
|
51
|
+
* through untouched. An `undefined` array ELEMENT is dropped rather than
|
|
52
|
+
* held as a hole, because Firestore rejects those too and a node's arrays are
|
|
53
|
+
* id lists and sx layers, where a hole means nothing.
|
|
54
|
+
*
|
|
55
|
+
* Returns the input by reference when there is nothing to strip, so the common
|
|
56
|
+
* case allocates nothing and identity-based memoization is undisturbed.
|
|
57
|
+
*/
|
|
58
|
+
export declare function stripUndefinedDeep<T>(value: T): T;
|
|
59
|
+
export default stripUndefinedDeep;
|
|
@@ -0,0 +1,95 @@
|
|
|
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
|
+
*/ const isPlainObject = (value)=>{
|
|
17
|
+
if (typeof value !== 'object' || value === null) return false;
|
|
18
|
+
const proto = Object.getPrototypeOf(value);
|
|
19
|
+
return proto === Object.prototype || proto === null;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Remove every `undefined` value from a serialized node payload (AGL-1334).
|
|
23
|
+
*
|
|
24
|
+
* An editor form hands back its whole field set, so an optional attribute the
|
|
25
|
+
* author never set — or cleared — arrives as an OWN key whose value is
|
|
26
|
+
* `undefined` (the icon pickers do exactly this: `startIconPath` is written on
|
|
27
|
+
* every edit of a Button whose Start icon reads `(NONE)`). `undefined` is not
|
|
28
|
+
* a storable value, and the two besigner write paths disagreed about it in the
|
|
29
|
+
* worst possible way:
|
|
30
|
+
*
|
|
31
|
+
* - A **save** goes through a version-doc converter that msgpack-encodes the
|
|
32
|
+
* node map, and msgpack encodes an `undefined` member as nil — so the write
|
|
33
|
+
* succeeded and quietly persisted `startIconPath: null`. That null is the
|
|
34
|
+
* exact shape `dropClearedProps` has to defend against at RENDER time
|
|
35
|
+
* (AGL-1226), where it once 500'd every `/product/*` page.
|
|
36
|
+
* - A **publish** copies the same map onto the component document as a plain
|
|
37
|
+
* Firestore map, and `updateDoc()` rejects `undefined` outright:
|
|
38
|
+
* `Unsupported field value: undefined (found in field nodes.<id>.props.…)`.
|
|
39
|
+
*
|
|
40
|
+
* So the author saved, saw `UP TO DATE`, clicked Publish, and got a raw
|
|
41
|
+
* Firestore error — with every instance still rendering the old markup.
|
|
42
|
+
*
|
|
43
|
+
* Dropping the key is what "cleared" means for an optional prop: absent, so
|
|
44
|
+
* the component's own default applies. Not `null`, which is a value, and not
|
|
45
|
+
* `deleteField()`, which cannot appear inside a nested map written wholesale.
|
|
46
|
+
* Applied at the ONE place both write paths serialize from
|
|
47
|
+
* (`AglynNode.toJSON`), so save and publish agree by construction rather than
|
|
48
|
+
* by two strippers that can drift.
|
|
49
|
+
*
|
|
50
|
+
* `null`, `0`, `''` and `false` are kept — those are values an author can mean
|
|
51
|
+
* (and, unlike `undefined`, all four store fine).
|
|
52
|
+
*
|
|
53
|
+
* Recurses into plain objects and arrays only: a `Date`, a Firestore
|
|
54
|
+
* `Timestamp`, a `Bytes` or any other class instance is a leaf and is passed
|
|
55
|
+
* through untouched. An `undefined` array ELEMENT is dropped rather than
|
|
56
|
+
* held as a hole, because Firestore rejects those too and a node's arrays are
|
|
57
|
+
* id lists and sx layers, where a hole means nothing.
|
|
58
|
+
*
|
|
59
|
+
* Returns the input by reference when there is nothing to strip, so the common
|
|
60
|
+
* case allocates nothing and identity-based memoization is undisturbed.
|
|
61
|
+
*/ export function stripUndefinedDeep(value) {
|
|
62
|
+
if (Array.isArray(value)) {
|
|
63
|
+
let changed = false;
|
|
64
|
+
const next = [];
|
|
65
|
+
for (const item of value){
|
|
66
|
+
if (item === undefined) {
|
|
67
|
+
changed = true;
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const stripped = stripUndefinedDeep(item);
|
|
71
|
+
if (stripped !== item) changed = true;
|
|
72
|
+
next.push(stripped);
|
|
73
|
+
}
|
|
74
|
+
return changed ? next : value;
|
|
75
|
+
}
|
|
76
|
+
if (isPlainObject(value)) {
|
|
77
|
+
let changed = false;
|
|
78
|
+
const next = {};
|
|
79
|
+
for (const key of Object.keys(value)){
|
|
80
|
+
const item = value[key];
|
|
81
|
+
if (item === undefined) {
|
|
82
|
+
changed = true;
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const stripped = stripUndefinedDeep(item);
|
|
86
|
+
if (stripped !== item) changed = true;
|
|
87
|
+
next[key] = stripped;
|
|
88
|
+
}
|
|
89
|
+
return changed ? next : value;
|
|
90
|
+
}
|
|
91
|
+
return value;
|
|
92
|
+
}
|
|
93
|
+
export default stripUndefinedDeep;
|
|
94
|
+
|
|
95
|
+
//# sourceMappingURL=strip-undefined.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/strip-undefined.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\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (typeof value !== 'object' || value === null) return false\n const proto = Object.getPrototypeOf(value)\n return proto === Object.prototype || proto === null\n}\n\n/**\n * Remove every `undefined` value from a serialized node payload (AGL-1334).\n *\n * An editor form hands back its whole field set, so an optional attribute the\n * author never set — or cleared — arrives as an OWN key whose value is\n * `undefined` (the icon pickers do exactly this: `startIconPath` is written on\n * every edit of a Button whose Start icon reads `(NONE)`). `undefined` is not\n * a storable value, and the two besigner write paths disagreed about it in the\n * worst possible way:\n *\n * - A **save** goes through a version-doc converter that msgpack-encodes the\n * node map, and msgpack encodes an `undefined` member as nil — so the write\n * succeeded and quietly persisted `startIconPath: null`. That null is the\n * exact shape `dropClearedProps` has to defend against at RENDER time\n * (AGL-1226), where it once 500'd every `/product/*` page.\n * - A **publish** copies the same map onto the component document as a plain\n * Firestore map, and `updateDoc()` rejects `undefined` outright:\n * `Unsupported field value: undefined (found in field nodes.<id>.props.…)`.\n *\n * So the author saved, saw `UP TO DATE`, clicked Publish, and got a raw\n * Firestore error — with every instance still rendering the old markup.\n *\n * Dropping the key is what \"cleared\" means for an optional prop: absent, so\n * the component's own default applies. Not `null`, which is a value, and not\n * `deleteField()`, which cannot appear inside a nested map written wholesale.\n * Applied at the ONE place both write paths serialize from\n * (`AglynNode.toJSON`), so save and publish agree by construction rather than\n * by two strippers that can drift.\n *\n * `null`, `0`, `''` and `false` are kept — those are values an author can mean\n * (and, unlike `undefined`, all four store fine).\n *\n * Recurses into plain objects and arrays only: a `Date`, a Firestore\n * `Timestamp`, a `Bytes` or any other class instance is a leaf and is passed\n * through untouched. An `undefined` array ELEMENT is dropped rather than\n * held as a hole, because Firestore rejects those too and a node's arrays are\n * id lists and sx layers, where a hole means nothing.\n *\n * Returns the input by reference when there is nothing to strip, so the common\n * case allocates nothing and identity-based memoization is undisturbed.\n */\nexport function stripUndefinedDeep<T>(value: T): T {\n if (Array.isArray(value)) {\n let changed = false\n const next: unknown[] = []\n for (const item of value) {\n if (item === undefined) {\n changed = true\n continue\n }\n const stripped = stripUndefinedDeep(item)\n if (stripped !== item) changed = true\n next.push(stripped)\n }\n return (changed ? next : value) as T\n }\n\n if (isPlainObject(value)) {\n let changed = false\n const next: Record<string, unknown> = {}\n for (const key of Object.keys(value)) {\n const item = value[key]\n if (item === undefined) {\n changed = true\n continue\n }\n const stripped = stripUndefinedDeep(item)\n if (stripped !== item) changed = true\n next[key] = stripped\n }\n return (changed ? next : value) as T\n }\n\n return value\n}\n\nexport default stripUndefinedDeep\n"],"names":["isPlainObject","value","proto","Object","getPrototypeOf","prototype","stripUndefinedDeep","Array","isArray","changed","next","item","undefined","stripped","push","key","keys"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED,MAAMA,gBAAgB,CAACC;IACrB,IAAI,OAAOA,UAAU,YAAYA,UAAU,MAAM,OAAO;IACxD,MAAMC,QAAQC,OAAOC,cAAc,CAACH;IACpC,OAAOC,UAAUC,OAAOE,SAAS,IAAIH,UAAU;AACjD;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCC,GACD,OAAO,SAASI,mBAAsBL,KAAQ;IAC5C,IAAIM,MAAMC,OAAO,CAACP,QAAQ;QACxB,IAAIQ,UAAU;QACd,MAAMC,OAAkB,EAAE;QAC1B,KAAK,MAAMC,QAAQV,MAAO;YACxB,IAAIU,SAASC,WAAW;gBACtBH,UAAU;gBACV;YACF;YACA,MAAMI,WAAWP,mBAAmBK;YACpC,IAAIE,aAAaF,MAAMF,UAAU;YACjCC,KAAKI,IAAI,CAACD;QACZ;QACA,OAAQJ,UAAUC,OAAOT;IAC3B;IAEA,IAAID,cAAcC,QAAQ;QACxB,IAAIQ,UAAU;QACd,MAAMC,OAAgC,CAAC;QACvC,KAAK,MAAMK,OAAOZ,OAAOa,IAAI,CAACf,OAAQ;YACpC,MAAMU,OAAOV,KAAK,CAACc,IAAI;YACvB,IAAIJ,SAASC,WAAW;gBACtBH,UAAU;gBACV;YACF;YACA,MAAMI,WAAWP,mBAAmBK;YACpC,IAAIE,aAAaF,MAAMF,UAAU;YACjCC,IAAI,CAACK,IAAI,GAAGF;QACd;QACA,OAAQJ,UAAUC,OAAOT;IAC3B;IAEA,OAAOA;AACT;AAEA,eAAeK,mBAAkB"}
|
|
@@ -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
|
+
* Whether THIS deployment is the live one.
|
|
19
|
+
*
|
|
20
|
+
* Derived from `STRIPE_SECRET_KEY`'s prefix, with an explicit
|
|
21
|
+
* `STRIPE_LIVEMODE=true|false` override that wins when set. Note the
|
|
22
|
+
* asymmetry, which is deliberate: only `sk_live_` yields `true`. An unset or
|
|
23
|
+
* unrecognised key is NOT a live deployment, because a deployment with no
|
|
24
|
+
* Stripe secret key cannot be charging anyone.
|
|
25
|
+
*/
|
|
26
|
+
export declare function deploymentLivemode(env?: Partial<Record<string, string>>): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Whether a Stripe object id belongs to TEST mode.
|
|
29
|
+
*
|
|
30
|
+
* Stripe stamps the environment into the id itself — `cs_test_…`, `pi_test_…`,
|
|
31
|
+
* `in_test_…` — and that is the only signal a stored document carries when
|
|
32
|
+
* nothing recorded `livemode` beside it.
|
|
33
|
+
*
|
|
34
|
+
* ONE NAMED PLACE, and that is the point of the function rather than a
|
|
35
|
+
* `.startsWith()` at each call site. This is STRIPE'S convention, not our
|
|
36
|
+
* data: it is a fact about a third party's id format that we happen to depend
|
|
37
|
+
* on, so it needs somewhere to be documented, somewhere to be changed, and
|
|
38
|
+
* somewhere a reader can find every consumer of it. A recorded `livemode`
|
|
39
|
+
* beats it and callers should prefer one; this is the fallback for documents
|
|
40
|
+
* written before anything recorded the fact.
|
|
41
|
+
*
|
|
42
|
+
* Strict prefix match on the segment, never `includes('test')`: a live id can
|
|
43
|
+
* contain the letters `test` anywhere in its random tail, and a substring
|
|
44
|
+
* check would read a real sale as a rehearsal — the direction that erases
|
|
45
|
+
* revenue.
|
|
46
|
+
*/
|
|
47
|
+
export declare function stripeIdIsTestMode(id: unknown): boolean;
|
|
@@ -0,0 +1,70 @@
|
|
|
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
|
+
* Which Stripe world THIS deployment lives in (AGL-2040, shared in AGL-2486).
|
|
18
|
+
*
|
|
19
|
+
* Lifted out of `apps/console/utils/server/stripe-livemode.ts` verbatim so a
|
|
20
|
+
* LIBRARY can ask the question too — `org-billing.ts` now keys the stored
|
|
21
|
+
* Stripe customer id by mode, and a lib cannot import from an app. That file
|
|
22
|
+
* re-exports this one, so the webhook's livemode gate and its spec are
|
|
23
|
+
* untouched and there is still exactly ONE definition of "are we live".
|
|
24
|
+
*
|
|
25
|
+
* Duplicating the `sk_live_` inference instead would have put a second answer
|
|
26
|
+
* to a money-path question in the tree, and the two would drift the first time
|
|
27
|
+
* the override was extended.
|
|
28
|
+
*/ /** Explicit ops override, for the case where key-prefix inference is wrong. */ const LIVEMODE_OVERRIDE = 'STRIPE_LIVEMODE';
|
|
29
|
+
/**
|
|
30
|
+
* Whether THIS deployment is the live one.
|
|
31
|
+
*
|
|
32
|
+
* Derived from `STRIPE_SECRET_KEY`'s prefix, with an explicit
|
|
33
|
+
* `STRIPE_LIVEMODE=true|false` override that wins when set. Note the
|
|
34
|
+
* asymmetry, which is deliberate: only `sk_live_` yields `true`. An unset or
|
|
35
|
+
* unrecognised key is NOT a live deployment, because a deployment with no
|
|
36
|
+
* Stripe secret key cannot be charging anyone.
|
|
37
|
+
*/ export function deploymentLivemode(env = process.env) {
|
|
38
|
+
var _env_STRIPE_SECRET_KEY;
|
|
39
|
+
const override = env[LIVEMODE_OVERRIDE];
|
|
40
|
+
if (override === 'true') return true;
|
|
41
|
+
if (override === 'false') return false;
|
|
42
|
+
return String((_env_STRIPE_SECRET_KEY = env['STRIPE_SECRET_KEY']) != null ? _env_STRIPE_SECRET_KEY : '').startsWith('sk_live_');
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Whether a Stripe object id belongs to TEST mode.
|
|
46
|
+
*
|
|
47
|
+
* Stripe stamps the environment into the id itself — `cs_test_…`, `pi_test_…`,
|
|
48
|
+
* `in_test_…` — and that is the only signal a stored document carries when
|
|
49
|
+
* nothing recorded `livemode` beside it.
|
|
50
|
+
*
|
|
51
|
+
* ONE NAMED PLACE, and that is the point of the function rather than a
|
|
52
|
+
* `.startsWith()` at each call site. This is STRIPE'S convention, not our
|
|
53
|
+
* data: it is a fact about a third party's id format that we happen to depend
|
|
54
|
+
* on, so it needs somewhere to be documented, somewhere to be changed, and
|
|
55
|
+
* somewhere a reader can find every consumer of it. A recorded `livemode`
|
|
56
|
+
* beats it and callers should prefer one; this is the fallback for documents
|
|
57
|
+
* written before anything recorded the fact.
|
|
58
|
+
*
|
|
59
|
+
* Strict prefix match on the segment, never `includes('test')`: a live id can
|
|
60
|
+
* contain the letters `test` anywhere in its random tail, and a substring
|
|
61
|
+
* check would read a real sale as a rehearsal — the direction that erases
|
|
62
|
+
* revenue.
|
|
63
|
+
*/ export function stripeIdIsTestMode(id) {
|
|
64
|
+
const value = typeof id === 'string' ? id.trim() : '';
|
|
65
|
+
if (!value) return false;
|
|
66
|
+
// `cs_test_…`, and also the `_test_` infix Stripe uses on some prefixed ids.
|
|
67
|
+
return /^[a-z]+_test_/.test(value);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=stripe-deployment-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/stripe-deployment-mode.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Which Stripe world THIS deployment lives in (AGL-2040, shared in AGL-2486).\n *\n * Lifted out of `apps/console/utils/server/stripe-livemode.ts` verbatim so a\n * LIBRARY can ask the question too — `org-billing.ts` now keys the stored\n * Stripe customer id by mode, and a lib cannot import from an app. That file\n * re-exports this one, so the webhook's livemode gate and its spec are\n * untouched and there is still exactly ONE definition of \"are we live\".\n *\n * Duplicating the `sk_live_` inference instead would have put a second answer\n * to a money-path question in the tree, and the two would drift the first time\n * the override was extended.\n */\n\n/** Explicit ops override, for the case where key-prefix inference is wrong. */\nconst LIVEMODE_OVERRIDE = 'STRIPE_LIVEMODE'\n\n/**\n * Whether THIS deployment is the live one.\n *\n * Derived from `STRIPE_SECRET_KEY`'s prefix, with an explicit\n * `STRIPE_LIVEMODE=true|false` override that wins when set. Note the\n * asymmetry, which is deliberate: only `sk_live_` yields `true`. An unset or\n * unrecognised key is NOT a live deployment, because a deployment with no\n * Stripe secret key cannot be charging anyone.\n */\nexport function deploymentLivemode(\n env: Partial<Record<string, string>> = process.env,\n): boolean {\n const override = env[LIVEMODE_OVERRIDE]\n if (override === 'true') return true\n if (override === 'false') return false\n return String(env['STRIPE_SECRET_KEY'] ?? '').startsWith('sk_live_')\n}\n\n/**\n * Whether a Stripe object id belongs to TEST mode.\n *\n * Stripe stamps the environment into the id itself — `cs_test_…`, `pi_test_…`,\n * `in_test_…` — and that is the only signal a stored document carries when\n * nothing recorded `livemode` beside it.\n *\n * ONE NAMED PLACE, and that is the point of the function rather than a\n * `.startsWith()` at each call site. This is STRIPE'S convention, not our\n * data: it is a fact about a third party's id format that we happen to depend\n * on, so it needs somewhere to be documented, somewhere to be changed, and\n * somewhere a reader can find every consumer of it. A recorded `livemode`\n * beats it and callers should prefer one; this is the fallback for documents\n * written before anything recorded the fact.\n *\n * Strict prefix match on the segment, never `includes('test')`: a live id can\n * contain the letters `test` anywhere in its random tail, and a substring\n * check would read a real sale as a rehearsal — the direction that erases\n * revenue.\n */\nexport function stripeIdIsTestMode(id: unknown): boolean {\n const value = typeof id === 'string' ? id.trim() : ''\n if (!value) return false\n // `cs_test_…`, and also the `_test_` infix Stripe uses on some prefixed ids.\n return /^[a-z]+_test_/.test(value)\n}\n"],"names":["LIVEMODE_OVERRIDE","deploymentLivemode","env","process","override","String","startsWith","stripeIdIsTestMode","id","value","trim","test"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;CAYC,GAED,6EAA6E,GAC7E,MAAMA,oBAAoB;AAE1B;;;;;;;;CAQC,GACD,OAAO,SAASC,mBACdC,MAAuCC,QAAQD,GAAG;QAKpCA;IAHd,MAAME,WAAWF,GAAG,CAACF,kBAAkB;IACvC,IAAII,aAAa,QAAQ,OAAO;IAChC,IAAIA,aAAa,SAAS,OAAO;IACjC,OAAOC,QAAOH,yBAAAA,GAAG,CAAC,oBAAoB,YAAxBA,yBAA4B,IAAII,UAAU,CAAC;AAC3D;AAEA;;;;;;;;;;;;;;;;;;;CAmBC,GACD,OAAO,SAASC,mBAAmBC,EAAW;IAC5C,MAAMC,QAAQ,OAAOD,OAAO,WAAWA,GAAGE,IAAI,KAAK;IACnD,IAAI,CAACD,OAAO,OAAO;IACnB,6EAA6E;IAC7E,OAAO,gBAAgBE,IAAI,CAACF;AAC9B"}
|