@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,135 @@
|
|
|
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 plugin's subprocessors, and the other hosts its code names (AGL-2984,
|
|
19
|
+
* AGL-2978).
|
|
20
|
+
*
|
|
21
|
+
* The published subprocessor list is derived from a host-keyed registry of
|
|
22
|
+
* every third-party host the platform's code reaches. A plugin whose code
|
|
23
|
+
* sends data to a third party declares that recipient here, in the fields
|
|
24
|
+
* the published list carries, and the registry folds the declaration in
|
|
25
|
+
* beside the hosts it declares for itself. The plugin that reaches a vendor
|
|
26
|
+
* is the one place that vendor's row is written, and the registry names no
|
|
27
|
+
* plugin's vendor.
|
|
28
|
+
*
|
|
29
|
+
* The registry keys on every host the code NAMES, not only on recipients, so
|
|
30
|
+
* a plugin declares its other hosts the same way:
|
|
31
|
+
*
|
|
32
|
+
* - `hosts` — a host that is not a published recipient, on the registry's
|
|
33
|
+
* own two terms: `not-a-subprocessor` (a request really is made, and no
|
|
34
|
+
* personal data reaches the host, or the customer rather than Aglyn chose
|
|
35
|
+
* it) or `no-request` (nothing of ours ever requests it). The entry carries
|
|
36
|
+
* the evidence for the claim, exactly as the registry's own do.
|
|
37
|
+
* - `uses` — a host already declared, by the registry or by another plugin,
|
|
38
|
+
* that this plugin's code reaches as well. The host keeps its one
|
|
39
|
+
* declaration and its disposition; the use adds why this plugin reaches it
|
|
40
|
+
* and what it receives from this plugin, so the entry a reader lands on
|
|
41
|
+
* names every use of the host.
|
|
42
|
+
*
|
|
43
|
+
* Declarations reach an app as DATA. A plugin names the function that
|
|
44
|
+
* returns them under `subprocessors` in `plugins.config.json`; the manifest
|
|
45
|
+
* generator calls it and writes what it returns into a generated module, so
|
|
46
|
+
* an app reads a plugin's declarations synchronously and without importing
|
|
47
|
+
* the plugin.
|
|
48
|
+
*
|
|
49
|
+
* A host carries one declaration. The fold refuses a host the registry
|
|
50
|
+
* already declares, or that another plugin declared first, and names both
|
|
51
|
+
* claimants: a record keyed by host would otherwise keep whichever
|
|
52
|
+
* declaration was folded last, and publish it. A use is the one way to add
|
|
53
|
+
* to a declared host, and the fold refuses a use of a host nothing declares.
|
|
54
|
+
*/
|
|
55
|
+
/** One third-party recipient of a plugin's data, as the published list carries it. */
|
|
56
|
+
export interface PluginSubprocessorDeclaration {
|
|
57
|
+
/** The host the plugin's code reaches, as a bare hostname: the registry's key. */
|
|
58
|
+
readonly host: string;
|
|
59
|
+
/** The legal entity that receives the data. */
|
|
60
|
+
readonly entity: string;
|
|
61
|
+
/** Where it processes, as the published table states it. */
|
|
62
|
+
readonly region: string;
|
|
63
|
+
/** The published purpose cell. */
|
|
64
|
+
readonly purpose: string;
|
|
65
|
+
/** The published list's change-log date for the entity, `YYYY-MM-DD`. */
|
|
66
|
+
readonly publishedOn: string;
|
|
67
|
+
/** Why the plugin reaches the host, in the words the next reader needs. */
|
|
68
|
+
readonly reason: string;
|
|
69
|
+
/** What the recipient receives, written from the code. */
|
|
70
|
+
readonly dataReceived: string;
|
|
71
|
+
}
|
|
72
|
+
/** The dispositions a host that is not a published recipient may carry. */
|
|
73
|
+
export declare const PLUGIN_EGRESS_HOST_DISPOSITIONS: readonly ["not-a-subprocessor", "no-request"];
|
|
74
|
+
export type PluginEgressHostDisposition = (typeof PLUGIN_EGRESS_HOST_DISPOSITIONS)[number];
|
|
75
|
+
/** A host a plugin's code names that is not a published recipient. */
|
|
76
|
+
export interface PluginEgressHostDeclaration {
|
|
77
|
+
/** The host, as a bare hostname: the registry's key. */
|
|
78
|
+
readonly host: string;
|
|
79
|
+
readonly disposition: PluginEgressHostDisposition;
|
|
80
|
+
/** Why the host is in the plugin's code: the evidence for the disposition. */
|
|
81
|
+
readonly reason: string;
|
|
82
|
+
/** What the host receives, and for these dispositions what does NOT go. */
|
|
83
|
+
readonly dataReceived: string;
|
|
84
|
+
}
|
|
85
|
+
/** A host declared elsewhere that a plugin's code reaches as well. */
|
|
86
|
+
export interface PluginEgressUseDeclaration {
|
|
87
|
+
/** The declared host, as a bare hostname. */
|
|
88
|
+
readonly host: string;
|
|
89
|
+
/** Why this plugin reaches it, written to follow the declaration's own reason. */
|
|
90
|
+
readonly reason: string;
|
|
91
|
+
/** What the host receives from this plugin, written to follow the declaration's own. */
|
|
92
|
+
readonly dataReceived: string;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* What a plugin's `subprocessors` entry answers: its published recipients,
|
|
96
|
+
* or those with its other hosts and its uses of hosts declared elsewhere.
|
|
97
|
+
*/
|
|
98
|
+
export type PluginSubprocessorsAnswer = readonly PluginSubprocessorDeclaration[] | {
|
|
99
|
+
readonly subprocessors?: readonly PluginSubprocessorDeclaration[];
|
|
100
|
+
readonly hosts?: readonly PluginEgressHostDeclaration[];
|
|
101
|
+
readonly uses?: readonly PluginEgressUseDeclaration[];
|
|
102
|
+
};
|
|
103
|
+
/** One plugin's declarations, as the generated manifest lists them. */
|
|
104
|
+
export interface PluginSubprocessorManifestEntry {
|
|
105
|
+
readonly pluginId: string;
|
|
106
|
+
readonly subprocessors: readonly PluginSubprocessorDeclaration[];
|
|
107
|
+
/** Hosts the plugin's code names that are not published recipients. */
|
|
108
|
+
readonly hosts?: readonly PluginEgressHostDeclaration[];
|
|
109
|
+
/** Hosts declared elsewhere that the plugin's code reaches as well. */
|
|
110
|
+
readonly uses?: readonly PluginEgressUseDeclaration[];
|
|
111
|
+
}
|
|
112
|
+
/** How a consumer builds the entries the fold cannot build from `toEntry`. */
|
|
113
|
+
export interface FoldPluginEgressOptions<Entry> {
|
|
114
|
+
/** The entry for a host a plugin declares that is not a published recipient. */
|
|
115
|
+
toHostEntry?: (declaration: PluginEgressHostDeclaration) => Entry;
|
|
116
|
+
/**
|
|
117
|
+
* The entry with one more use added, as a new value: the entry given is the
|
|
118
|
+
* registry's or another plugin's, and is left as it is.
|
|
119
|
+
*/
|
|
120
|
+
withUse?: (entry: Entry, use: PluginEgressUseDeclaration, pluginId: string) => Entry;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* The registry with every plugin's declarations folded in: a new record
|
|
124
|
+
* holding `base`, one entry per declared recipient built by `toEntry`, one
|
|
125
|
+
* per declared host built by `options.toHostEntry`, and every use added to
|
|
126
|
+
* its host's entry by `options.withUse`. `base` is left as it is.
|
|
127
|
+
*
|
|
128
|
+
* Throws on a declaration with no host; on a host already declared by `base`
|
|
129
|
+
* or by an earlier plugin in `manifest`, naming both claimants; on a host
|
|
130
|
+
* with a disposition the registry does not know; on a use of a host nothing
|
|
131
|
+
* declares, or of a host its own plugin declares; and on hosts or uses the
|
|
132
|
+
* consumer gave no way to fold. Uses are folded after every declaration, so
|
|
133
|
+
* a use may name a host a later plugin declares.
|
|
134
|
+
*/
|
|
135
|
+
export declare function foldPluginSubprocessors<Entry>(base: Readonly<Record<string, Entry>>, manifest: readonly PluginSubprocessorManifestEntry[], toEntry: (declaration: PluginSubprocessorDeclaration) => Entry, options?: FoldPluginEgressOptions<Entry>): Record<string, Entry>;
|
|
@@ -0,0 +1,129 @@
|
|
|
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
|
+
* A plugin's subprocessors, and the other hosts its code names (AGL-2984,
|
|
18
|
+
* AGL-2978).
|
|
19
|
+
*
|
|
20
|
+
* The published subprocessor list is derived from a host-keyed registry of
|
|
21
|
+
* every third-party host the platform's code reaches. A plugin whose code
|
|
22
|
+
* sends data to a third party declares that recipient here, in the fields
|
|
23
|
+
* the published list carries, and the registry folds the declaration in
|
|
24
|
+
* beside the hosts it declares for itself. The plugin that reaches a vendor
|
|
25
|
+
* is the one place that vendor's row is written, and the registry names no
|
|
26
|
+
* plugin's vendor.
|
|
27
|
+
*
|
|
28
|
+
* The registry keys on every host the code NAMES, not only on recipients, so
|
|
29
|
+
* a plugin declares its other hosts the same way:
|
|
30
|
+
*
|
|
31
|
+
* - `hosts` — a host that is not a published recipient, on the registry's
|
|
32
|
+
* own two terms: `not-a-subprocessor` (a request really is made, and no
|
|
33
|
+
* personal data reaches the host, or the customer rather than Aglyn chose
|
|
34
|
+
* it) or `no-request` (nothing of ours ever requests it). The entry carries
|
|
35
|
+
* the evidence for the claim, exactly as the registry's own do.
|
|
36
|
+
* - `uses` — a host already declared, by the registry or by another plugin,
|
|
37
|
+
* that this plugin's code reaches as well. The host keeps its one
|
|
38
|
+
* declaration and its disposition; the use adds why this plugin reaches it
|
|
39
|
+
* and what it receives from this plugin, so the entry a reader lands on
|
|
40
|
+
* names every use of the host.
|
|
41
|
+
*
|
|
42
|
+
* Declarations reach an app as DATA. A plugin names the function that
|
|
43
|
+
* returns them under `subprocessors` in `plugins.config.json`; the manifest
|
|
44
|
+
* generator calls it and writes what it returns into a generated module, so
|
|
45
|
+
* an app reads a plugin's declarations synchronously and without importing
|
|
46
|
+
* the plugin.
|
|
47
|
+
*
|
|
48
|
+
* A host carries one declaration. The fold refuses a host the registry
|
|
49
|
+
* already declares, or that another plugin declared first, and names both
|
|
50
|
+
* claimants: a record keyed by host would otherwise keep whichever
|
|
51
|
+
* declaration was folded last, and publish it. A use is the one way to add
|
|
52
|
+
* to a declared host, and the fold refuses a use of a host nothing declares.
|
|
53
|
+
*/ /** One third-party recipient of a plugin's data, as the published list carries it. */ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
54
|
+
/** The dispositions a host that is not a published recipient may carry. */ export const PLUGIN_EGRESS_HOST_DISPOSITIONS = [
|
|
55
|
+
'not-a-subprocessor',
|
|
56
|
+
'no-request'
|
|
57
|
+
];
|
|
58
|
+
/**
|
|
59
|
+
* The registry with every plugin's declarations folded in: a new record
|
|
60
|
+
* holding `base`, one entry per declared recipient built by `toEntry`, one
|
|
61
|
+
* per declared host built by `options.toHostEntry`, and every use added to
|
|
62
|
+
* its host's entry by `options.withUse`. `base` is left as it is.
|
|
63
|
+
*
|
|
64
|
+
* Throws on a declaration with no host; on a host already declared by `base`
|
|
65
|
+
* or by an earlier plugin in `manifest`, naming both claimants; on a host
|
|
66
|
+
* with a disposition the registry does not know; on a use of a host nothing
|
|
67
|
+
* declares, or of a host its own plugin declares; and on hosts or uses the
|
|
68
|
+
* consumer gave no way to fold. Uses are folded after every declaration, so
|
|
69
|
+
* a use may name a host a later plugin declares.
|
|
70
|
+
*/ export function foldPluginSubprocessors(base, manifest, toEntry, options = {}) {
|
|
71
|
+
const registry = _extends({}, base);
|
|
72
|
+
const declaredBy = new Map(Object.keys(base).map((host)=>[
|
|
73
|
+
host,
|
|
74
|
+
'the base registry'
|
|
75
|
+
]));
|
|
76
|
+
const claim = (host, claimant)=>{
|
|
77
|
+
const earlier = declaredBy.get(host);
|
|
78
|
+
if (earlier) {
|
|
79
|
+
throw new Error(`${host} is declared by ${earlier} and by ${claimant}: a host carries one declaration`);
|
|
80
|
+
}
|
|
81
|
+
declaredBy.set(host, claimant);
|
|
82
|
+
};
|
|
83
|
+
for (const { pluginId, subprocessors, hosts = [] } of manifest){
|
|
84
|
+
const claimant = `plugin '${pluginId}'`;
|
|
85
|
+
for (const declaration of subprocessors){
|
|
86
|
+
const { host } = declaration;
|
|
87
|
+
if (!host) {
|
|
88
|
+
throw new Error(`${claimant} declares a subprocessor (${declaration.entity}) with no host`);
|
|
89
|
+
}
|
|
90
|
+
claim(host, claimant);
|
|
91
|
+
registry[host] = toEntry(declaration);
|
|
92
|
+
}
|
|
93
|
+
for (const declaration of hosts){
|
|
94
|
+
const { host } = declaration;
|
|
95
|
+
if (!host) {
|
|
96
|
+
throw new Error(`${claimant} declares a ${declaration.disposition} host with no host`);
|
|
97
|
+
}
|
|
98
|
+
if (!PLUGIN_EGRESS_HOST_DISPOSITIONS.includes(declaration.disposition)) {
|
|
99
|
+
throw new Error(`${claimant} declares ${host} as '${String(declaration.disposition)}', which is not a disposition a host may carry`);
|
|
100
|
+
}
|
|
101
|
+
if (!options.toHostEntry) {
|
|
102
|
+
throw new Error(`${claimant} declares ${host}, and this registry folds no hosts`);
|
|
103
|
+
}
|
|
104
|
+
claim(host, claimant);
|
|
105
|
+
registry[host] = options.toHostEntry(declaration);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
for (const { pluginId, uses = [] } of manifest){
|
|
109
|
+
const claimant = `plugin '${pluginId}'`;
|
|
110
|
+
for (const use of uses){
|
|
111
|
+
const { host } = use;
|
|
112
|
+
if (!host) throw new Error(`${claimant} declares a use with no host`);
|
|
113
|
+
const owner = declaredBy.get(host);
|
|
114
|
+
if (!owner) {
|
|
115
|
+
throw new Error(`${claimant} declares a use of ${host}, which nothing declares: declare the host instead`);
|
|
116
|
+
}
|
|
117
|
+
if (owner === claimant) {
|
|
118
|
+
throw new Error(`${claimant} declares both ${host} and a use of it: write the use into the declaration`);
|
|
119
|
+
}
|
|
120
|
+
if (!options.withUse) {
|
|
121
|
+
throw new Error(`${claimant} declares a use of ${host}, and this registry folds no uses`);
|
|
122
|
+
}
|
|
123
|
+
registry[host] = options.withUse(registry[host], use, pluginId);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return registry;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
//# sourceMappingURL=plugin-subprocessors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/plugin-manager/plugin-subprocessors.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 * A plugin's subprocessors, and the other hosts its code names (AGL-2984,\n * AGL-2978).\n *\n * The published subprocessor list is derived from a host-keyed registry of\n * every third-party host the platform's code reaches. A plugin whose code\n * sends data to a third party declares that recipient here, in the fields\n * the published list carries, and the registry folds the declaration in\n * beside the hosts it declares for itself. The plugin that reaches a vendor\n * is the one place that vendor's row is written, and the registry names no\n * plugin's vendor.\n *\n * The registry keys on every host the code NAMES, not only on recipients, so\n * a plugin declares its other hosts the same way:\n *\n * - `hosts` — a host that is not a published recipient, on the registry's\n * own two terms: `not-a-subprocessor` (a request really is made, and no\n * personal data reaches the host, or the customer rather than Aglyn chose\n * it) or `no-request` (nothing of ours ever requests it). The entry carries\n * the evidence for the claim, exactly as the registry's own do.\n * - `uses` — a host already declared, by the registry or by another plugin,\n * that this plugin's code reaches as well. The host keeps its one\n * declaration and its disposition; the use adds why this plugin reaches it\n * and what it receives from this plugin, so the entry a reader lands on\n * names every use of the host.\n *\n * Declarations reach an app as DATA. A plugin names the function that\n * returns them under `subprocessors` in `plugins.config.json`; the manifest\n * generator calls it and writes what it returns into a generated module, so\n * an app reads a plugin's declarations synchronously and without importing\n * the plugin.\n *\n * A host carries one declaration. The fold refuses a host the registry\n * already declares, or that another plugin declared first, and names both\n * claimants: a record keyed by host would otherwise keep whichever\n * declaration was folded last, and publish it. A use is the one way to add\n * to a declared host, and the fold refuses a use of a host nothing declares.\n */\n\n/** One third-party recipient of a plugin's data, as the published list carries it. */\nexport interface PluginSubprocessorDeclaration {\n /** The host the plugin's code reaches, as a bare hostname: the registry's key. */\n readonly host: string\n /** The legal entity that receives the data. */\n readonly entity: string\n /** Where it processes, as the published table states it. */\n readonly region: string\n /** The published purpose cell. */\n readonly purpose: string\n /** The published list's change-log date for the entity, `YYYY-MM-DD`. */\n readonly publishedOn: string\n /** Why the plugin reaches the host, in the words the next reader needs. */\n readonly reason: string\n /** What the recipient receives, written from the code. */\n readonly dataReceived: string\n}\n\n/** The dispositions a host that is not a published recipient may carry. */\nexport const PLUGIN_EGRESS_HOST_DISPOSITIONS = ['not-a-subprocessor', 'no-request'] as const\nexport type PluginEgressHostDisposition = (typeof PLUGIN_EGRESS_HOST_DISPOSITIONS)[number]\n\n/** A host a plugin's code names that is not a published recipient. */\nexport interface PluginEgressHostDeclaration {\n /** The host, as a bare hostname: the registry's key. */\n readonly host: string\n readonly disposition: PluginEgressHostDisposition\n /** Why the host is in the plugin's code: the evidence for the disposition. */\n readonly reason: string\n /** What the host receives, and for these dispositions what does NOT go. */\n readonly dataReceived: string\n}\n\n/** A host declared elsewhere that a plugin's code reaches as well. */\nexport interface PluginEgressUseDeclaration {\n /** The declared host, as a bare hostname. */\n readonly host: string\n /** Why this plugin reaches it, written to follow the declaration's own reason. */\n readonly reason: string\n /** What the host receives from this plugin, written to follow the declaration's own. */\n readonly dataReceived: string\n}\n\n/**\n * What a plugin's `subprocessors` entry answers: its published recipients,\n * or those with its other hosts and its uses of hosts declared elsewhere.\n */\nexport type PluginSubprocessorsAnswer =\n | readonly PluginSubprocessorDeclaration[]\n | {\n readonly subprocessors?: readonly PluginSubprocessorDeclaration[]\n readonly hosts?: readonly PluginEgressHostDeclaration[]\n readonly uses?: readonly PluginEgressUseDeclaration[]\n }\n\n/** One plugin's declarations, as the generated manifest lists them. */\nexport interface PluginSubprocessorManifestEntry {\n readonly pluginId: string\n readonly subprocessors: readonly PluginSubprocessorDeclaration[]\n /** Hosts the plugin's code names that are not published recipients. */\n readonly hosts?: readonly PluginEgressHostDeclaration[]\n /** Hosts declared elsewhere that the plugin's code reaches as well. */\n readonly uses?: readonly PluginEgressUseDeclaration[]\n}\n\n/** How a consumer builds the entries the fold cannot build from `toEntry`. */\nexport interface FoldPluginEgressOptions<Entry> {\n /** The entry for a host a plugin declares that is not a published recipient. */\n toHostEntry?: (declaration: PluginEgressHostDeclaration) => Entry\n /**\n * The entry with one more use added, as a new value: the entry given is the\n * registry's or another plugin's, and is left as it is.\n */\n withUse?: (entry: Entry, use: PluginEgressUseDeclaration, pluginId: string) => Entry\n}\n\n/**\n * The registry with every plugin's declarations folded in: a new record\n * holding `base`, one entry per declared recipient built by `toEntry`, one\n * per declared host built by `options.toHostEntry`, and every use added to\n * its host's entry by `options.withUse`. `base` is left as it is.\n *\n * Throws on a declaration with no host; on a host already declared by `base`\n * or by an earlier plugin in `manifest`, naming both claimants; on a host\n * with a disposition the registry does not know; on a use of a host nothing\n * declares, or of a host its own plugin declares; and on hosts or uses the\n * consumer gave no way to fold. Uses are folded after every declaration, so\n * a use may name a host a later plugin declares.\n */\nexport function foldPluginSubprocessors<Entry>(\n base: Readonly<Record<string, Entry>>,\n manifest: readonly PluginSubprocessorManifestEntry[],\n toEntry: (declaration: PluginSubprocessorDeclaration) => Entry,\n options: FoldPluginEgressOptions<Entry> = {},\n): Record<string, Entry> {\n const registry: Record<string, Entry> = { ...base }\n const declaredBy = new Map<string, string>(\n Object.keys(base).map((host) => [host, 'the base registry']),\n )\n const claim = (host: string, claimant: string) => {\n const earlier = declaredBy.get(host)\n if (earlier) {\n throw new Error(\n `${host} is declared by ${earlier} and by ${claimant}: a host carries one declaration`,\n )\n }\n declaredBy.set(host, claimant)\n }\n\n for (const { pluginId, subprocessors, hosts = [] } of manifest) {\n const claimant = `plugin '${pluginId}'`\n for (const declaration of subprocessors) {\n const { host } = declaration\n if (!host) {\n throw new Error(\n `${claimant} declares a subprocessor (${declaration.entity}) with no host`,\n )\n }\n claim(host, claimant)\n registry[host] = toEntry(declaration)\n }\n for (const declaration of hosts) {\n const { host } = declaration\n if (!host) {\n throw new Error(`${claimant} declares a ${declaration.disposition} host with no host`)\n }\n if (!PLUGIN_EGRESS_HOST_DISPOSITIONS.includes(declaration.disposition)) {\n throw new Error(\n `${claimant} declares ${host} as '${String(declaration.disposition)}', which is not a disposition a host may carry`,\n )\n }\n if (!options.toHostEntry) {\n throw new Error(`${claimant} declares ${host}, and this registry folds no hosts`)\n }\n claim(host, claimant)\n registry[host] = options.toHostEntry(declaration)\n }\n }\n\n for (const { pluginId, uses = [] } of manifest) {\n const claimant = `plugin '${pluginId}'`\n for (const use of uses) {\n const { host } = use\n if (!host) throw new Error(`${claimant} declares a use with no host`)\n const owner = declaredBy.get(host)\n if (!owner) {\n throw new Error(\n `${claimant} declares a use of ${host}, which nothing declares: declare the host instead`,\n )\n }\n if (owner === claimant) {\n throw new Error(\n `${claimant} declares both ${host} and a use of it: write the use into the declaration`,\n )\n }\n if (!options.withUse) {\n throw new Error(`${claimant} declares a use of ${host}, and this registry folds no uses`)\n }\n registry[host] = options.withUse(registry[host], use, pluginId)\n }\n }\n return registry\n}\n"],"names":["PLUGIN_EGRESS_HOST_DISPOSITIONS","foldPluginSubprocessors","base","manifest","toEntry","options","registry","declaredBy","Map","Object","keys","map","host","claim","claimant","earlier","get","Error","set","pluginId","subprocessors","hosts","declaration","entity","disposition","includes","String","toHostEntry","uses","use","owner","withUse"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCC,GAED,oFAAoF;AAkBpF,yEAAyE,GACzE,OAAO,MAAMA,kCAAkC;IAAC;IAAsB;CAAa,CAAS;AAyD5F;;;;;;;;;;;;CAYC,GACD,OAAO,SAASC,wBACdC,IAAqC,EACrCC,QAAoD,EACpDC,OAA8D,EAC9DC,UAA0C,CAAC,CAAC;IAE5C,MAAMC,WAAkC,aAAKJ;IAC7C,MAAMK,aAAa,IAAIC,IACrBC,OAAOC,IAAI,CAACR,MAAMS,GAAG,CAAC,CAACC,OAAS;YAACA;YAAM;SAAoB;IAE7D,MAAMC,QAAQ,CAACD,MAAcE;QAC3B,MAAMC,UAAUR,WAAWS,GAAG,CAACJ;QAC/B,IAAIG,SAAS;YACX,MAAM,IAAIE,MACR,GAAGL,KAAK,gBAAgB,EAAEG,QAAQ,QAAQ,EAAED,SAAS,gCAAgC,CAAC;QAE1F;QACAP,WAAWW,GAAG,CAACN,MAAME;IACvB;IAEA,KAAK,MAAM,EAAEK,QAAQ,EAAEC,aAAa,EAAEC,QAAQ,EAAE,EAAE,IAAIlB,SAAU;QAC9D,MAAMW,WAAW,CAAC,QAAQ,EAAEK,SAAS,CAAC,CAAC;QACvC,KAAK,MAAMG,eAAeF,cAAe;YACvC,MAAM,EAAER,IAAI,EAAE,GAAGU;YACjB,IAAI,CAACV,MAAM;gBACT,MAAM,IAAIK,MACR,GAAGH,SAAS,0BAA0B,EAAEQ,YAAYC,MAAM,CAAC,cAAc,CAAC;YAE9E;YACAV,MAAMD,MAAME;YACZR,QAAQ,CAACM,KAAK,GAAGR,QAAQkB;QAC3B;QACA,KAAK,MAAMA,eAAeD,MAAO;YAC/B,MAAM,EAAET,IAAI,EAAE,GAAGU;YACjB,IAAI,CAACV,MAAM;gBACT,MAAM,IAAIK,MAAM,GAAGH,SAAS,YAAY,EAAEQ,YAAYE,WAAW,CAAC,kBAAkB,CAAC;YACvF;YACA,IAAI,CAACxB,gCAAgCyB,QAAQ,CAACH,YAAYE,WAAW,GAAG;gBACtE,MAAM,IAAIP,MACR,GAAGH,SAAS,UAAU,EAAEF,KAAK,KAAK,EAAEc,OAAOJ,YAAYE,WAAW,EAAE,8CAA8C,CAAC;YAEvH;YACA,IAAI,CAACnB,QAAQsB,WAAW,EAAE;gBACxB,MAAM,IAAIV,MAAM,GAAGH,SAAS,UAAU,EAAEF,KAAK,kCAAkC,CAAC;YAClF;YACAC,MAAMD,MAAME;YACZR,QAAQ,CAACM,KAAK,GAAGP,QAAQsB,WAAW,CAACL;QACvC;IACF;IAEA,KAAK,MAAM,EAAEH,QAAQ,EAAES,OAAO,EAAE,EAAE,IAAIzB,SAAU;QAC9C,MAAMW,WAAW,CAAC,QAAQ,EAAEK,SAAS,CAAC,CAAC;QACvC,KAAK,MAAMU,OAAOD,KAAM;YACtB,MAAM,EAAEhB,IAAI,EAAE,GAAGiB;YACjB,IAAI,CAACjB,MAAM,MAAM,IAAIK,MAAM,GAAGH,SAAS,4BAA4B,CAAC;YACpE,MAAMgB,QAAQvB,WAAWS,GAAG,CAACJ;YAC7B,IAAI,CAACkB,OAAO;gBACV,MAAM,IAAIb,MACR,GAAGH,SAAS,mBAAmB,EAAEF,KAAK,kDAAkD,CAAC;YAE7F;YACA,IAAIkB,UAAUhB,UAAU;gBACtB,MAAM,IAAIG,MACR,GAAGH,SAAS,eAAe,EAAEF,KAAK,oDAAoD,CAAC;YAE3F;YACA,IAAI,CAACP,QAAQ0B,OAAO,EAAE;gBACpB,MAAM,IAAId,MAAM,GAAGH,SAAS,mBAAmB,EAAEF,KAAK,iCAAiC,CAAC;YAC1F;YACAN,QAAQ,CAACM,KAAK,GAAGP,QAAQ0B,OAAO,CAACzB,QAAQ,CAACM,KAAK,EAAEiB,KAAKV;QACxD;IACF;IACA,OAAOb;AACT"}
|
|
@@ -0,0 +1,84 @@
|
|
|
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
|
+
* The tenant's tax rule, answered by the one plugin that owns it (AGL-3080).
|
|
19
|
+
*
|
|
20
|
+
* More than one plugin takes money — a storefront sells goods, a calendar
|
|
21
|
+
* sells appointments — and a merchant has ONE tax profile. The plugin that
|
|
22
|
+
* keeps it works out what a flat rate adds to a charge and which regime a
|
|
23
|
+
* settled payment was taxed under; any other plugin that charges asks here.
|
|
24
|
+
* Importing the owner's model instead is how two money paths end up with two
|
|
25
|
+
* rounding rules, and the second is found by an accountant.
|
|
26
|
+
*
|
|
27
|
+
* ## Pure, synchronous, and unauthenticated
|
|
28
|
+
*
|
|
29
|
+
* Both questions are arithmetic over values the caller already holds: a rate
|
|
30
|
+
* off the settings it read, a charge in cents, a settled payment object.
|
|
31
|
+
* Nothing is read and nobody is asked who they are.
|
|
32
|
+
*
|
|
33
|
+
* ## No profile is a refusal, never a zero
|
|
34
|
+
*
|
|
35
|
+
* {@link pluginTaxProfile} THROWS when no plugin registered one. Every other
|
|
36
|
+
* seam here answers `null` for "nobody home", and this one must not: a caller
|
|
37
|
+
* that read `null` as "no tax" would charge a customer an untaxed total and
|
|
38
|
+
* record it as untaxed, silently, and the merchant would owe the difference.
|
|
39
|
+
* A refused sale is seen the same day.
|
|
40
|
+
*
|
|
41
|
+
* It cannot happen in a working build. Both apps load every plugin's server
|
|
42
|
+
* entry before a plugin handler, a cron or the billing webhook runs
|
|
43
|
+
* (`ensureAll`), so the owner's registration is in place wherever a charge is
|
|
44
|
+
* priced; `tax-profile-is-registered.spec.ts` in each app holds that.
|
|
45
|
+
*
|
|
46
|
+
* ## One owner
|
|
47
|
+
*
|
|
48
|
+
* A workspace has one tax profile, so the contract is a slot: a second
|
|
49
|
+
* plugin's profile is refused naming both and the incumbent keeps serving.
|
|
50
|
+
*
|
|
51
|
+
* Import this module by its own subpath
|
|
52
|
+
* (`@aglyn/aglyn/plugin-manager/plugin-tax-profile`); it is not in the barrel.
|
|
53
|
+
*/
|
|
54
|
+
/** What a flat rate adds to one charge. All zero and empty when it adds nothing. */
|
|
55
|
+
export interface PluginResolvedFlatTax {
|
|
56
|
+
taxCents: number;
|
|
57
|
+
/** What the line is called on the receipt. */
|
|
58
|
+
label: string;
|
|
59
|
+
pct: number;
|
|
60
|
+
}
|
|
61
|
+
export interface PluginTaxProfile {
|
|
62
|
+
/**
|
|
63
|
+
* Tax, EXCLUSIVE, for a flat merchant rate on one charged amount. `rate` is
|
|
64
|
+
* the merchant's stored setting, passed as read: the owner decides what a
|
|
65
|
+
* usable rate is, and an absent, zero, negative or out-of-range one answers
|
|
66
|
+
* zero rather than throwing.
|
|
67
|
+
*/
|
|
68
|
+
flatTax(rate: unknown, chargeCents: number, fallbackLabel: string): PluginResolvedFlatTax;
|
|
69
|
+
/**
|
|
70
|
+
* Which regime a settled payment was taxed under, as the owner records it.
|
|
71
|
+
* `manualTaxCents` is the tax this caller added as a line of its own, which
|
|
72
|
+
* the payment processor reports as no tax at all.
|
|
73
|
+
*/
|
|
74
|
+
taxModeOf(settledPayment: unknown, manualTaxCents?: number): string;
|
|
75
|
+
}
|
|
76
|
+
export declare const PLUGIN_TAX_PROFILE: import("./plugin-services").PluginServiceContract<PluginTaxProfile>;
|
|
77
|
+
/** Registers the plugin that owns the tenant's tax rule. */
|
|
78
|
+
export declare function registerPluginTaxProfile(profile: PluginTaxProfile, options?: {
|
|
79
|
+
pluginId?: string;
|
|
80
|
+
}): void;
|
|
81
|
+
/** The owner, or `null` — for a caller that only wants to know who it is. */
|
|
82
|
+
export declare function pluginTaxProfileOwner(): string | null;
|
|
83
|
+
/** The tax rule. THROWS when no plugin registered one; see the module note. */
|
|
84
|
+
export declare function pluginTaxProfile(): PluginTaxProfile;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2026 Aglyn LLC
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/ import { definePluginServiceContract, registerPluginService, resolvePluginServices } from "./plugin-services.js";
|
|
18
|
+
export const PLUGIN_TAX_PROFILE = definePluginServiceContract('core.tax-profile', {
|
|
19
|
+
multiple: false
|
|
20
|
+
});
|
|
21
|
+
/** Registers the plugin that owns the tenant's tax rule. */ export function registerPluginTaxProfile(profile, options) {
|
|
22
|
+
registerPluginService(PLUGIN_TAX_PROFILE, profile, _extends({}, (options == null ? void 0 : options.pluginId) ? {
|
|
23
|
+
pluginId: options.pluginId
|
|
24
|
+
} : {}));
|
|
25
|
+
}
|
|
26
|
+
/** The owner, or `null` — for a caller that only wants to know who it is. */ export function pluginTaxProfileOwner() {
|
|
27
|
+
var _ref;
|
|
28
|
+
var _resolvePluginServices_;
|
|
29
|
+
return (_ref = (_resolvePluginServices_ = resolvePluginServices(PLUGIN_TAX_PROFILE)[0]) == null ? void 0 : _resolvePluginServices_.pluginId) != null ? _ref : null;
|
|
30
|
+
}
|
|
31
|
+
/** The tax rule. THROWS when no plugin registered one; see the module note. */ export function pluginTaxProfile() {
|
|
32
|
+
const entry = resolvePluginServices(PLUGIN_TAX_PROFILE)[0];
|
|
33
|
+
if (!entry) {
|
|
34
|
+
throw new Error('no plugin registered a tax profile, so this charge cannot be priced: ' + 'refusing rather than charging it untaxed');
|
|
35
|
+
}
|
|
36
|
+
return entry.impl;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=plugin-tax-profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/plugin-manager/plugin-tax-profile.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 {\n definePluginServiceContract,\n registerPluginService,\n resolvePluginServices,\n} from './plugin-services'\n\n/**\n * The tenant's tax rule, answered by the one plugin that owns it (AGL-3080).\n *\n * More than one plugin takes money — a storefront sells goods, a calendar\n * sells appointments — and a merchant has ONE tax profile. The plugin that\n * keeps it works out what a flat rate adds to a charge and which regime a\n * settled payment was taxed under; any other plugin that charges asks here.\n * Importing the owner's model instead is how two money paths end up with two\n * rounding rules, and the second is found by an accountant.\n *\n * ## Pure, synchronous, and unauthenticated\n *\n * Both questions are arithmetic over values the caller already holds: a rate\n * off the settings it read, a charge in cents, a settled payment object.\n * Nothing is read and nobody is asked who they are.\n *\n * ## No profile is a refusal, never a zero\n *\n * {@link pluginTaxProfile} THROWS when no plugin registered one. Every other\n * seam here answers `null` for \"nobody home\", and this one must not: a caller\n * that read `null` as \"no tax\" would charge a customer an untaxed total and\n * record it as untaxed, silently, and the merchant would owe the difference.\n * A refused sale is seen the same day.\n *\n * It cannot happen in a working build. Both apps load every plugin's server\n * entry before a plugin handler, a cron or the billing webhook runs\n * (`ensureAll`), so the owner's registration is in place wherever a charge is\n * priced; `tax-profile-is-registered.spec.ts` in each app holds that.\n *\n * ## One owner\n *\n * A workspace has one tax profile, so the contract is a slot: a second\n * plugin's profile is refused naming both and the incumbent keeps serving.\n *\n * Import this module by its own subpath\n * (`@aglyn/aglyn/plugin-manager/plugin-tax-profile`); it is not in the barrel.\n */\n\n/** What a flat rate adds to one charge. All zero and empty when it adds nothing. */\nexport interface PluginResolvedFlatTax {\n taxCents: number\n /** What the line is called on the receipt. */\n label: string\n pct: number\n}\n\nexport interface PluginTaxProfile {\n /**\n * Tax, EXCLUSIVE, for a flat merchant rate on one charged amount. `rate` is\n * the merchant's stored setting, passed as read: the owner decides what a\n * usable rate is, and an absent, zero, negative or out-of-range one answers\n * zero rather than throwing.\n */\n flatTax(\n rate: unknown,\n chargeCents: number,\n fallbackLabel: string,\n ): PluginResolvedFlatTax\n /**\n * Which regime a settled payment was taxed under, as the owner records it.\n * `manualTaxCents` is the tax this caller added as a line of its own, which\n * the payment processor reports as no tax at all.\n */\n taxModeOf(settledPayment: unknown, manualTaxCents?: number): string\n}\n\nexport const PLUGIN_TAX_PROFILE = definePluginServiceContract<PluginTaxProfile>(\n 'core.tax-profile',\n { multiple: false },\n)\n\n/** Registers the plugin that owns the tenant's tax rule. */\nexport function registerPluginTaxProfile(\n profile: PluginTaxProfile,\n options?: { pluginId?: string },\n): void {\n registerPluginService(PLUGIN_TAX_PROFILE, profile, {\n ...(options?.pluginId ? { pluginId: options.pluginId } : {}),\n })\n}\n\n/** The owner, or `null` — for a caller that only wants to know who it is. */\nexport function pluginTaxProfileOwner(): string | null {\n return resolvePluginServices(PLUGIN_TAX_PROFILE)[0]?.pluginId ?? null\n}\n\n/** The tax rule. THROWS when no plugin registered one; see the module note. */\nexport function pluginTaxProfile(): PluginTaxProfile {\n const entry = resolvePluginServices(PLUGIN_TAX_PROFILE)[0]\n if (!entry) {\n throw new Error(\n 'no plugin registered a tax profile, so this charge cannot be priced: ' +\n 'refusing rather than charging it untaxed',\n )\n }\n return entry.impl\n}\n"],"names":["definePluginServiceContract","registerPluginService","resolvePluginServices","PLUGIN_TAX_PROFILE","multiple","registerPluginTaxProfile","profile","options","pluginId","pluginTaxProfileOwner","pluginTaxProfile","entry","Error","impl"],"mappings":";AAAA;;;;;;;;;;;;;;;CAeC,GAED,SACEA,2BAA2B,EAC3BC,qBAAqB,EACrBC,qBAAqB,QAChB,uBAAmB;AAoE1B,OAAO,MAAMC,qBAAqBH,4BAChC,oBACA;IAAEI,UAAU;AAAM,GACnB;AAED,0DAA0D,GAC1D,OAAO,SAASC,yBACdC,OAAyB,EACzBC,OAA+B;IAE/BN,sBAAsBE,oBAAoBG,SAAS,aAC7CC,CAAAA,2BAAAA,QAASC,QAAQ,IAAG;QAAEA,UAAUD,QAAQC,QAAQ;IAAC,IAAI,CAAC;AAE9D;AAEA,2EAA2E,GAC3E,OAAO,SAASC;;QACPP;IAAP,gBAAOA,0BAAAA,sBAAsBC,mBAAmB,CAAC,EAAE,qBAA5CD,wBAA8CM,QAAQ,mBAAI;AACnE;AAEA,6EAA6E,GAC7E,OAAO,SAASE;IACd,MAAMC,QAAQT,sBAAsBC,mBAAmB,CAAC,EAAE;IAC1D,IAAI,CAACQ,OAAO;QACV,MAAM,IAAIC,MACR,0EACE;IAEN;IACA,OAAOD,MAAME,IAAI;AACnB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
/** What an eraser is asked to erase. */
|
|
18
|
+
export interface PluginUserErasureRequest {
|
|
19
|
+
/** The account being erased. */
|
|
20
|
+
uid: string;
|
|
21
|
+
/**
|
|
22
|
+
* Every workspace the person belonged to when the erasure began. Their
|
|
23
|
+
* memberships are removed before the erasers run, so this is the only
|
|
24
|
+
* record of them an eraser gets.
|
|
25
|
+
*/
|
|
26
|
+
orgIds: readonly string[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* What an eraser reports for the erasure's audit record: counts and flags,
|
|
30
|
+
* never the erased content, because the record outlives the data by design.
|
|
31
|
+
* A `null` field is a figure the eraser could not measure, which is not zero.
|
|
32
|
+
*/
|
|
33
|
+
export type PluginUserErasureReport = Readonly<Record<string, number | boolean | null>>;
|
|
34
|
+
export type PluginUserEraser = (request: PluginUserErasureRequest) => Promise<PluginUserErasureReport>;
|
|
35
|
+
/**
|
|
36
|
+
* Registers a plugin's eraser. Owner = the loader's marker inside a register
|
|
37
|
+
* fn, else `options.pluginId`; an eraser with neither throws. One eraser per
|
|
38
|
+
* plugin: registering again replaces the plugin's earlier eraser in place,
|
|
39
|
+
* so a module evaluated twice does not erase twice.
|
|
40
|
+
*/
|
|
41
|
+
export declare function registerPluginUserEraser(eraser: PluginUserEraser, options?: {
|
|
42
|
+
pluginId?: string;
|
|
43
|
+
}): void;
|
|
44
|
+
/**
|
|
45
|
+
* Runs every eraser, in registration order, and answers each plugin's
|
|
46
|
+
* report by plugin id: the eraser's own report, or `null` for one that
|
|
47
|
+
* threw.
|
|
48
|
+
*/
|
|
49
|
+
export declare function runPluginUserErasers(request: PluginUserErasureRequest): Promise<Record<string, PluginUserErasureReport | null>>;
|
|
50
|
+
/** The plugins with an eraser, in the order they run. */
|
|
51
|
+
export declare function listPluginUserErasers(): string[];
|
|
52
|
+
/** Test seam: forget every eraser. */
|
|
53
|
+
export declare function resetPluginUserErasersForTests(): void;
|
|
@@ -0,0 +1,84 @@
|
|
|
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
|
+
* A plugin's share of an account erasure (AGL-2939).
|
|
18
|
+
*
|
|
19
|
+
* The account erasure deletes what core stores about a person: the user
|
|
20
|
+
* document and its subcollections, the memberships, the public profile, the
|
|
21
|
+
* delivery log and the auth record. A plugin that keeps data ABOUT a person
|
|
22
|
+
* where none of that reaches — documents under an org keyed by the uid, a
|
|
23
|
+
* collection carrying the uid as a field — registers an eraser here, and
|
|
24
|
+
* the erasure runs every eraser with the person's uid and the workspaces
|
|
25
|
+
* they belonged to.
|
|
26
|
+
*
|
|
27
|
+
* Erasers run in registration order and are ISOLATED: a throw is logged
|
|
28
|
+
* against its plugin, recorded as `null`, and does not stop the next one.
|
|
29
|
+
* An erasure runs against a legal clock, and one plugin's outage must not
|
|
30
|
+
* keep every other plugin's data past it. The `null` is how the erasure's
|
|
31
|
+
* audit record says that plugin's data may remain, which a report of zero
|
|
32
|
+
* would hide.
|
|
33
|
+
*
|
|
34
|
+
* Registered from a plugin's `serverDeclarations` entry, so the eraser is in
|
|
35
|
+
* place in a server process that never loaded the plugin's API surface.
|
|
36
|
+
*/ import { getRegisteringPluginId } from "../app-utils/registering-plugin.js";
|
|
37
|
+
const registrations = [];
|
|
38
|
+
/**
|
|
39
|
+
* Registers a plugin's eraser. Owner = the loader's marker inside a register
|
|
40
|
+
* fn, else `options.pluginId`; an eraser with neither throws. One eraser per
|
|
41
|
+
* plugin: registering again replaces the plugin's earlier eraser in place,
|
|
42
|
+
* so a module evaluated twice does not erase twice.
|
|
43
|
+
*/ export function registerPluginUserEraser(eraser, options) {
|
|
44
|
+
var _ref, _getRegisteringPluginId;
|
|
45
|
+
const pluginId = ((_ref = (_getRegisteringPluginId = getRegisteringPluginId()) != null ? _getRegisteringPluginId : options == null ? void 0 : options.pluginId) != null ? _ref : '').trim();
|
|
46
|
+
if (!pluginId) {
|
|
47
|
+
throw new Error('a plugin user eraser was registered with no owner: pass { pluginId } ' + 'when registering outside a plugin register fn');
|
|
48
|
+
}
|
|
49
|
+
const index = registrations.findIndex((entry)=>entry.pluginId === pluginId);
|
|
50
|
+
if (index >= 0) registrations[index] = {
|
|
51
|
+
pluginId,
|
|
52
|
+
eraser
|
|
53
|
+
};
|
|
54
|
+
else registrations.push({
|
|
55
|
+
pluginId,
|
|
56
|
+
eraser
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Runs every eraser, in registration order, and answers each plugin's
|
|
61
|
+
* report by plugin id: the eraser's own report, or `null` for one that
|
|
62
|
+
* threw.
|
|
63
|
+
*/ export async function runPluginUserErasers(request) {
|
|
64
|
+
const reports = {};
|
|
65
|
+
for (const { pluginId, eraser } of [
|
|
66
|
+
...registrations
|
|
67
|
+
]){
|
|
68
|
+
try {
|
|
69
|
+
reports[pluginId] = await eraser(request);
|
|
70
|
+
} catch (error) {
|
|
71
|
+
reports[pluginId] = null;
|
|
72
|
+
console.error(`[plugins] ${pluginId} failed to erase user ${request.uid}`, error);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return reports;
|
|
76
|
+
}
|
|
77
|
+
/** The plugins with an eraser, in the order they run. */ export function listPluginUserErasers() {
|
|
78
|
+
return registrations.map((entry)=>entry.pluginId);
|
|
79
|
+
}
|
|
80
|
+
/** Test seam: forget every eraser. */ export function resetPluginUserErasersForTests() {
|
|
81
|
+
registrations.length = 0;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
//# sourceMappingURL=plugin-user-erasure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/plugin-manager/plugin-user-erasure.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 * A plugin's share of an account erasure (AGL-2939).\n *\n * The account erasure deletes what core stores about a person: the user\n * document and its subcollections, the memberships, the public profile, the\n * delivery log and the auth record. A plugin that keeps data ABOUT a person\n * where none of that reaches — documents under an org keyed by the uid, a\n * collection carrying the uid as a field — registers an eraser here, and\n * the erasure runs every eraser with the person's uid and the workspaces\n * they belonged to.\n *\n * Erasers run in registration order and are ISOLATED: a throw is logged\n * against its plugin, recorded as `null`, and does not stop the next one.\n * An erasure runs against a legal clock, and one plugin's outage must not\n * keep every other plugin's data past it. The `null` is how the erasure's\n * audit record says that plugin's data may remain, which a report of zero\n * would hide.\n *\n * Registered from a plugin's `serverDeclarations` entry, so the eraser is in\n * place in a server process that never loaded the plugin's API surface.\n */\n\nimport { getRegisteringPluginId } from '../app-utils/registering-plugin'\n\n/** What an eraser is asked to erase. */\nexport interface PluginUserErasureRequest {\n /** The account being erased. */\n uid: string\n /**\n * Every workspace the person belonged to when the erasure began. Their\n * memberships are removed before the erasers run, so this is the only\n * record of them an eraser gets.\n */\n orgIds: readonly string[]\n}\n\n/**\n * What an eraser reports for the erasure's audit record: counts and flags,\n * never the erased content, because the record outlives the data by design.\n * A `null` field is a figure the eraser could not measure, which is not zero.\n */\nexport type PluginUserErasureReport = Readonly<Record<string, number | boolean | null>>\n\nexport type PluginUserEraser = (\n request: PluginUserErasureRequest,\n) => Promise<PluginUserErasureReport>\n\ninterface Registration {\n pluginId: string\n eraser: PluginUserEraser\n}\n\nconst registrations: Registration[] = []\n\n/**\n * Registers a plugin's eraser. Owner = the loader's marker inside a register\n * fn, else `options.pluginId`; an eraser with neither throws. One eraser per\n * plugin: registering again replaces the plugin's earlier eraser in place,\n * so a module evaluated twice does not erase twice.\n */\nexport function registerPluginUserEraser(\n eraser: PluginUserEraser,\n options?: { pluginId?: string },\n): void {\n const pluginId = (getRegisteringPluginId() ?? options?.pluginId ?? '').trim()\n if (!pluginId) {\n throw new Error(\n 'a plugin user eraser was registered with no owner: pass { pluginId } ' +\n 'when registering outside a plugin register fn',\n )\n }\n const index = registrations.findIndex((entry) => entry.pluginId === pluginId)\n if (index >= 0) registrations[index] = { pluginId, eraser }\n else registrations.push({ pluginId, eraser })\n}\n\n/**\n * Runs every eraser, in registration order, and answers each plugin's\n * report by plugin id: the eraser's own report, or `null` for one that\n * threw.\n */\nexport async function runPluginUserErasers(\n request: PluginUserErasureRequest,\n): Promise<Record<string, PluginUserErasureReport | null>> {\n const reports: Record<string, PluginUserErasureReport | null> = {}\n for (const { pluginId, eraser } of [...registrations]) {\n try {\n reports[pluginId] = await eraser(request)\n } catch (error) {\n reports[pluginId] = null\n console.error(`[plugins] ${pluginId} failed to erase user ${request.uid}`, error)\n }\n }\n return reports\n}\n\n/** The plugins with an eraser, in the order they run. */\nexport function listPluginUserErasers(): string[] {\n return registrations.map((entry) => entry.pluginId)\n}\n\n/** Test seam: forget every eraser. */\nexport function resetPluginUserErasersForTests(): void {\n registrations.length = 0\n}\n"],"names":["getRegisteringPluginId","registrations","registerPluginUserEraser","eraser","options","pluginId","trim","Error","index","findIndex","entry","push","runPluginUserErasers","request","reports","error","console","uid","listPluginUserErasers","map","resetPluginUserErasersForTests","length"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;;;;;CAoBC,GAED,SAASA,sBAAsB,QAAQ,qCAAiC;AA8BxE,MAAMC,gBAAgC,EAAE;AAExC;;;;;CAKC,GACD,OAAO,SAASC,yBACdC,MAAwB,EACxBC,OAA+B;QAEbJ,MAAAA;IAAlB,MAAMK,WAAW,EAACL,QAAAA,0BAAAA,oCAAAA,0BAA4BI,2BAAAA,QAASC,QAAQ,YAA7CL,OAAiD,IAAIM,IAAI;IAC3E,IAAI,CAACD,UAAU;QACb,MAAM,IAAIE,MACR,0EACE;IAEN;IACA,MAAMC,QAAQP,cAAcQ,SAAS,CAAC,CAACC,QAAUA,MAAML,QAAQ,KAAKA;IACpE,IAAIG,SAAS,GAAGP,aAAa,CAACO,MAAM,GAAG;QAAEH;QAAUF;IAAO;SACrDF,cAAcU,IAAI,CAAC;QAAEN;QAAUF;IAAO;AAC7C;AAEA;;;;CAIC,GACD,OAAO,eAAeS,qBACpBC,OAAiC;IAEjC,MAAMC,UAA0D,CAAC;IACjE,KAAK,MAAM,EAAET,QAAQ,EAAEF,MAAM,EAAE,IAAI;WAAIF;KAAc,CAAE;QACrD,IAAI;YACFa,OAAO,CAACT,SAAS,GAAG,MAAMF,OAAOU;QACnC,EAAE,OAAOE,OAAO;YACdD,OAAO,CAACT,SAAS,GAAG;YACpBW,QAAQD,KAAK,CAAC,CAAC,UAAU,EAAEV,SAAS,sBAAsB,EAAEQ,QAAQI,GAAG,EAAE,EAAEF;QAC7E;IACF;IACA,OAAOD;AACT;AAEA,uDAAuD,GACvD,OAAO,SAASI;IACd,OAAOjB,cAAckB,GAAG,CAAC,CAACT,QAAUA,MAAML,QAAQ;AACpD;AAEA,oCAAoC,GACpC,OAAO,SAASe;IACdnB,cAAcoB,MAAM,GAAG;AACzB"}
|