@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,188 @@
|
|
|
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
|
+
* REPEAT-INFRINGER POLICY — the §512(i) condition, with a counter behind it
|
|
18
|
+
* (AGL-1983).
|
|
19
|
+
*
|
|
20
|
+
* §512(i)(1)(A) conditions the ENTIRE safe harbour — every limitation in
|
|
21
|
+
* §512, not just the hosting one — on a provider having "adopted and
|
|
22
|
+
* reasonably implemented" a policy for terminating repeat infringers, and on
|
|
23
|
+
* informing subscribers of it. This is the condition providers most often
|
|
24
|
+
* lose on, and they lose on the second half: courts have declined to credit a
|
|
25
|
+
* policy that existed as prose while nothing in the product counted anything.
|
|
26
|
+
* A policy page alone would not close AGL-1983 and the issue says so.
|
|
27
|
+
*
|
|
28
|
+
* So this module is the counting. It answers three questions and nothing else:
|
|
29
|
+
* what is a strike, when does one go away, and what happens at the threshold.
|
|
30
|
+
*
|
|
31
|
+
* ## A strike is an ACTIONED notice, counted against the ACCOUNT
|
|
32
|
+
*
|
|
33
|
+
* Not a received notice — anyone can send one, and counting receipts would
|
|
34
|
+
* let a competitor terminate a customer by filing three complaints. A strike
|
|
35
|
+
* is recorded when staff action a DMCA report: the point at which a human
|
|
36
|
+
* looked and took content down.
|
|
37
|
+
*
|
|
38
|
+
* Counted against the **org**, not the site. A repeat infringer who loses one
|
|
39
|
+
* site and opens another inside the same workspace has not been terminated in
|
|
40
|
+
* any sense the statute would recognise, and the org is the account we bill,
|
|
41
|
+
* suspend and close. {@link STRIKE_LEDGER_SUBCOLLECTION} therefore hangs off
|
|
42
|
+
* `orgs/{orgId}`.
|
|
43
|
+
*
|
|
44
|
+
* ## A strike is keyed by its report, which is what makes withdrawal work
|
|
45
|
+
*
|
|
46
|
+
* One ledger document per actioned report, with the report's id AS the
|
|
47
|
+
* document id. Two properties fall out of that and both are load-bearing:
|
|
48
|
+
*
|
|
49
|
+
* - **Idempotence.** Staff re-actioning a report they already actioned — or
|
|
50
|
+
* a route retried — cannot inflate the count. A counter that can be pumped
|
|
51
|
+
* by clicking twice is not one anybody should terminate an account on.
|
|
52
|
+
* - **Exact withdrawal.** When a notice is withdrawn, or a counter-notice
|
|
53
|
+
* leads to a restoration, the strike it created has to come off — and only
|
|
54
|
+
* that one. §512(g) restoration means the takedown is being reversed; a
|
|
55
|
+
* strike surviving it would count an infringement the process just
|
|
56
|
+
* declined to affirm, which is the shape of unfairness that makes a policy
|
|
57
|
+
* look unreasonable rather than reasonable. Deleting by report id removes
|
|
58
|
+
* exactly the right strike without recomputing anything.
|
|
59
|
+
*
|
|
60
|
+
* {@link strikeWithdrawalReason} names the three ways a strike comes off, so
|
|
61
|
+
* the ledger records WHY rather than silently shrinking.
|
|
62
|
+
*
|
|
63
|
+
* ## The threshold has to do something
|
|
64
|
+
*
|
|
65
|
+
* "Reasonably implemented" is the whole fight, so the escalation is defined
|
|
66
|
+
* here as data rather than left to whoever reads the queue:
|
|
67
|
+
* {@link repeatInfringerVerdict} maps a count onto a level, and each level
|
|
68
|
+
* names the consequence in terms of levers this product actually has. At
|
|
69
|
+
* `terminate` the staff queue refuses to close a DMCA report without an
|
|
70
|
+
* explicit recorded decision — see the admin route — so the threshold cannot
|
|
71
|
+
* be passed silently. That refusal is the difference between a counter and a
|
|
72
|
+
* policy.
|
|
73
|
+
*
|
|
74
|
+
* What this module deliberately does NOT do is suspend anything by itself. An
|
|
75
|
+
* automatic termination on a third strike would be a product that closes a
|
|
76
|
+
* paying customer's account on three unverified assertions by strangers, with
|
|
77
|
+
* no human in the loop — and §512 nowhere asks for that. The policy is
|
|
78
|
+
* "terminate in appropriate circumstances", and judging the circumstances is
|
|
79
|
+
* exactly the part a person must do. The counter makes the decision
|
|
80
|
+
* unavoidable and recorded; it does not make it automatically.
|
|
81
|
+
*/ /** Per-org strike ledger. One document per actioned DMCA report. */ export const STRIKE_LEDGER_SUBCOLLECTION = 'dmcaStrikes';
|
|
82
|
+
/**
|
|
83
|
+
* Strikes at which each consequence begins.
|
|
84
|
+
*
|
|
85
|
+
* Three is the termination threshold, which is the number the phrase "repeat
|
|
86
|
+
* infringer" is conventionally read against and the number the operator's own
|
|
87
|
+
* published repeat-infringer policy has to state — §512(i)(1)(A) conditions the
|
|
88
|
+
* whole safe harbour on subscribers having been *informed* of the policy, so a
|
|
89
|
+
* threshold this ledger enforces silently earns nothing (AGL-2044, AGL-2007).
|
|
90
|
+
* On a self-host install that policy is the operator's document, not ours: they
|
|
91
|
+
* inherit a working ledger and owe their own text. The two below it exist so
|
|
92
|
+
* termination is never the first
|
|
93
|
+
* thing a customer hears about a problem: a subscriber who does not know they
|
|
94
|
+
* are on a strike cannot correct their behaviour, and a policy that only
|
|
95
|
+
* speaks at the end is one a court can call unreasonable in its
|
|
96
|
+
* implementation.
|
|
97
|
+
*/ export const STRIKE_WARN_AT = 1;
|
|
98
|
+
export const STRIKE_FINAL_AT = 2;
|
|
99
|
+
export const STRIKE_TERMINATE_AT = 3;
|
|
100
|
+
/**
|
|
101
|
+
* Strikes → verdict.
|
|
102
|
+
*
|
|
103
|
+
* A pure function of the count, so the staff surface, the admin route and the
|
|
104
|
+
* docs cannot disagree about where the line is. Anything at or above
|
|
105
|
+
* {@link STRIKE_TERMINATE_AT} is `terminate`, including a count that somehow
|
|
106
|
+
* ran past it — a fourth strike must not read as less serious than the third.
|
|
107
|
+
*/ export function repeatInfringerVerdict(strikes) {
|
|
108
|
+
const count = typeof strikes === 'number' && Number.isFinite(strikes) && strikes > 0 ? Math.floor(strikes) : 0;
|
|
109
|
+
if (count >= STRIKE_TERMINATE_AT) {
|
|
110
|
+
return {
|
|
111
|
+
strikes: count,
|
|
112
|
+
level: 'terminate',
|
|
113
|
+
decisionRequired: true,
|
|
114
|
+
consequence: 'Termination threshold reached. A staff decision to terminate or to ' + 'record why not is required before any further copyright report on ' + 'this account can be closed.'
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
if (count >= STRIKE_FINAL_AT) {
|
|
118
|
+
return {
|
|
119
|
+
strikes: count,
|
|
120
|
+
level: 'final',
|
|
121
|
+
decisionRequired: false,
|
|
122
|
+
consequence: 'Final warning. One more upheld copyright notice reaches the ' + 'termination threshold.'
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
if (count >= STRIKE_WARN_AT) {
|
|
126
|
+
return {
|
|
127
|
+
strikes: count,
|
|
128
|
+
level: 'warn',
|
|
129
|
+
decisionRequired: false,
|
|
130
|
+
consequence: 'Warned. The account has one upheld copyright notice on record.'
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
strikes: 0,
|
|
135
|
+
level: 'none',
|
|
136
|
+
decisionRequired: false,
|
|
137
|
+
consequence: 'No upheld copyright notices on record.'
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/** Why a strike came off the ledger. Recorded, never silent. */ export const STRIKE_WITHDRAWAL_REASONS = [
|
|
141
|
+
/** The complainant retracted the notice. */ 'noticeWithdrawn',
|
|
142
|
+
/** A §512(g) counter-notice ran its course and access was restored. */ 'counterNoticeRestored',
|
|
143
|
+
/** Staff decided the notice should not have been actioned. */ 'staffReversed'
|
|
144
|
+
];
|
|
145
|
+
export function isStrikeWithdrawalReason(value) {
|
|
146
|
+
return typeof value === 'string' && STRIKE_WITHDRAWAL_REASONS.includes(value);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Does moving a DMCA report to `status` earn a strike?
|
|
150
|
+
*
|
|
151
|
+
* `actioned` only. `dismissed` is staff saying the notice did not hold up, so
|
|
152
|
+
* it must not count — and neither must `open` or `reviewing`, which are a
|
|
153
|
+
* report nobody has adjudicated yet. Counting anything but `actioned` would
|
|
154
|
+
* make the ledger a record of accusations rather than of upheld ones.
|
|
155
|
+
*
|
|
156
|
+
* The category gate matters as much as the status: the queue carries phishing
|
|
157
|
+
* and malware reports too, and a phishing takedown is not a copyright
|
|
158
|
+
* infringement. §512(i) is about infringement, so only `dmca` reports reach
|
|
159
|
+
* the ledger.
|
|
160
|
+
*/ export function strikeEarnedBy(category, status) {
|
|
161
|
+
return category === 'dmca' && status === 'actioned';
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Does moving a DMCA report to `status` REMOVE a strike it previously earned?
|
|
165
|
+
*
|
|
166
|
+
* The mirror of {@link strikeEarnedBy}, and the reason the pair is written as
|
|
167
|
+
* two functions rather than one: a report that goes `actioned` → `dismissed`
|
|
168
|
+
* has to give its strike back, and a naive "recount the actioned ones"
|
|
169
|
+
* implementation would get that right by accident while getting the
|
|
170
|
+
* counter-notice case wrong, because a restored counter-notice leaves the
|
|
171
|
+
* report `actioned` and reverses it by a different route.
|
|
172
|
+
*/ export function strikeRemovedBy(category, status) {
|
|
173
|
+
return category === 'dmca' && (status === 'dismissed' || status === 'open' || status === 'reviewing');
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Count the strikes standing, given ledger rows.
|
|
177
|
+
*
|
|
178
|
+
* Rows carry a `withdrawnAt` when they have been reversed rather than being
|
|
179
|
+
* deleted, so the ledger stays a complete history — "did we know, and when"
|
|
180
|
+
* is the question the abuse queue exists to answer, and a strike that was
|
|
181
|
+
* lifted is part of that answer. Only rows without one count.
|
|
182
|
+
*/ export function countStandingStrikes(rows) {
|
|
183
|
+
if (!rows) return 0;
|
|
184
|
+
return rows.filter((row)=>(row == null ? void 0 : row.withdrawnAt) == null).length;
|
|
185
|
+
}
|
|
186
|
+
export default repeatInfringerVerdict;
|
|
187
|
+
|
|
188
|
+
//# sourceMappingURL=repeat-infringer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/repeat-infringer.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 * REPEAT-INFRINGER POLICY — the §512(i) condition, with a counter behind it\n * (AGL-1983).\n *\n * §512(i)(1)(A) conditions the ENTIRE safe harbour — every limitation in\n * §512, not just the hosting one — on a provider having \"adopted and\n * reasonably implemented\" a policy for terminating repeat infringers, and on\n * informing subscribers of it. This is the condition providers most often\n * lose on, and they lose on the second half: courts have declined to credit a\n * policy that existed as prose while nothing in the product counted anything.\n * A policy page alone would not close AGL-1983 and the issue says so.\n *\n * So this module is the counting. It answers three questions and nothing else:\n * what is a strike, when does one go away, and what happens at the threshold.\n *\n * ## A strike is an ACTIONED notice, counted against the ACCOUNT\n *\n * Not a received notice — anyone can send one, and counting receipts would\n * let a competitor terminate a customer by filing three complaints. A strike\n * is recorded when staff action a DMCA report: the point at which a human\n * looked and took content down.\n *\n * Counted against the **org**, not the site. A repeat infringer who loses one\n * site and opens another inside the same workspace has not been terminated in\n * any sense the statute would recognise, and the org is the account we bill,\n * suspend and close. {@link STRIKE_LEDGER_SUBCOLLECTION} therefore hangs off\n * `orgs/{orgId}`.\n *\n * ## A strike is keyed by its report, which is what makes withdrawal work\n *\n * One ledger document per actioned report, with the report's id AS the\n * document id. Two properties fall out of that and both are load-bearing:\n *\n * - **Idempotence.** Staff re-actioning a report they already actioned — or\n * a route retried — cannot inflate the count. A counter that can be pumped\n * by clicking twice is not one anybody should terminate an account on.\n * - **Exact withdrawal.** When a notice is withdrawn, or a counter-notice\n * leads to a restoration, the strike it created has to come off — and only\n * that one. §512(g) restoration means the takedown is being reversed; a\n * strike surviving it would count an infringement the process just\n * declined to affirm, which is the shape of unfairness that makes a policy\n * look unreasonable rather than reasonable. Deleting by report id removes\n * exactly the right strike without recomputing anything.\n *\n * {@link strikeWithdrawalReason} names the three ways a strike comes off, so\n * the ledger records WHY rather than silently shrinking.\n *\n * ## The threshold has to do something\n *\n * \"Reasonably implemented\" is the whole fight, so the escalation is defined\n * here as data rather than left to whoever reads the queue:\n * {@link repeatInfringerVerdict} maps a count onto a level, and each level\n * names the consequence in terms of levers this product actually has. At\n * `terminate` the staff queue refuses to close a DMCA report without an\n * explicit recorded decision — see the admin route — so the threshold cannot\n * be passed silently. That refusal is the difference between a counter and a\n * policy.\n *\n * What this module deliberately does NOT do is suspend anything by itself. An\n * automatic termination on a third strike would be a product that closes a\n * paying customer's account on three unverified assertions by strangers, with\n * no human in the loop — and §512 nowhere asks for that. The policy is\n * \"terminate in appropriate circumstances\", and judging the circumstances is\n * exactly the part a person must do. The counter makes the decision\n * unavoidable and recorded; it does not make it automatically.\n */\n\n/** Per-org strike ledger. One document per actioned DMCA report. */\nexport const STRIKE_LEDGER_SUBCOLLECTION = 'dmcaStrikes'\n\n/**\n * Strikes at which each consequence begins.\n *\n * Three is the termination threshold, which is the number the phrase \"repeat\n * infringer\" is conventionally read against and the number the operator's own\n * published repeat-infringer policy has to state — §512(i)(1)(A) conditions the\n * whole safe harbour on subscribers having been *informed* of the policy, so a\n * threshold this ledger enforces silently earns nothing (AGL-2044, AGL-2007).\n * On a self-host install that policy is the operator's document, not ours: they\n * inherit a working ledger and owe their own text. The two below it exist so\n * termination is never the first\n * thing a customer hears about a problem: a subscriber who does not know they\n * are on a strike cannot correct their behaviour, and a policy that only\n * speaks at the end is one a court can call unreasonable in its\n * implementation.\n */\nexport const STRIKE_WARN_AT = 1\nexport const STRIKE_FINAL_AT = 2\nexport const STRIKE_TERMINATE_AT = 3\n\nexport type RepeatInfringerLevel = 'none' | 'warn' | 'final' | 'terminate'\n\nexport interface RepeatInfringerVerdict {\n /** Strikes currently standing against the account. */\n strikes: number\n level: RepeatInfringerLevel\n /**\n * Does the account-level consequence require a recorded human decision\n * before any further DMCA report on this org can be closed?\n */\n decisionRequired: boolean\n /** One line naming the consequence, shown to staff and quoted to the org. */\n consequence: string\n}\n\n/**\n * Strikes → verdict.\n *\n * A pure function of the count, so the staff surface, the admin route and the\n * docs cannot disagree about where the line is. Anything at or above\n * {@link STRIKE_TERMINATE_AT} is `terminate`, including a count that somehow\n * ran past it — a fourth strike must not read as less serious than the third.\n */\nexport function repeatInfringerVerdict(strikes: unknown): RepeatInfringerVerdict {\n const count =\n typeof strikes === 'number' && Number.isFinite(strikes) && strikes > 0\n ? Math.floor(strikes)\n : 0\n if (count >= STRIKE_TERMINATE_AT) {\n return {\n strikes: count,\n level: 'terminate',\n decisionRequired: true,\n consequence:\n 'Termination threshold reached. A staff decision to terminate or to ' +\n 'record why not is required before any further copyright report on ' +\n 'this account can be closed.',\n }\n }\n if (count >= STRIKE_FINAL_AT) {\n return {\n strikes: count,\n level: 'final',\n decisionRequired: false,\n consequence:\n 'Final warning. One more upheld copyright notice reaches the ' +\n 'termination threshold.',\n }\n }\n if (count >= STRIKE_WARN_AT) {\n return {\n strikes: count,\n level: 'warn',\n decisionRequired: false,\n consequence:\n 'Warned. The account has one upheld copyright notice on record.',\n }\n }\n return {\n strikes: 0,\n level: 'none',\n decisionRequired: false,\n consequence: 'No upheld copyright notices on record.',\n }\n}\n\n/** Why a strike came off the ledger. Recorded, never silent. */\nexport const STRIKE_WITHDRAWAL_REASONS = [\n /** The complainant retracted the notice. */\n 'noticeWithdrawn',\n /** A §512(g) counter-notice ran its course and access was restored. */\n 'counterNoticeRestored',\n /** Staff decided the notice should not have been actioned. */\n 'staffReversed',\n] as const\nexport type StrikeWithdrawalReason = (typeof STRIKE_WITHDRAWAL_REASONS)[number]\n\nexport function isStrikeWithdrawalReason(\n value: unknown,\n): value is StrikeWithdrawalReason {\n return (\n typeof value === 'string' &&\n (STRIKE_WITHDRAWAL_REASONS as readonly string[]).includes(value)\n )\n}\n\n/**\n * Does moving a DMCA report to `status` earn a strike?\n *\n * `actioned` only. `dismissed` is staff saying the notice did not hold up, so\n * it must not count — and neither must `open` or `reviewing`, which are a\n * report nobody has adjudicated yet. Counting anything but `actioned` would\n * make the ledger a record of accusations rather than of upheld ones.\n *\n * The category gate matters as much as the status: the queue carries phishing\n * and malware reports too, and a phishing takedown is not a copyright\n * infringement. §512(i) is about infringement, so only `dmca` reports reach\n * the ledger.\n */\nexport function strikeEarnedBy(category: unknown, status: unknown): boolean {\n return category === 'dmca' && status === 'actioned'\n}\n\n/**\n * Does moving a DMCA report to `status` REMOVE a strike it previously earned?\n *\n * The mirror of {@link strikeEarnedBy}, and the reason the pair is written as\n * two functions rather than one: a report that goes `actioned` → `dismissed`\n * has to give its strike back, and a naive \"recount the actioned ones\"\n * implementation would get that right by accident while getting the\n * counter-notice case wrong, because a restored counter-notice leaves the\n * report `actioned` and reverses it by a different route.\n */\nexport function strikeRemovedBy(category: unknown, status: unknown): boolean {\n return (\n category === 'dmca' && (status === 'dismissed' || status === 'open' || status === 'reviewing')\n )\n}\n\n/**\n * Count the strikes standing, given ledger rows.\n *\n * Rows carry a `withdrawnAt` when they have been reversed rather than being\n * deleted, so the ledger stays a complete history — \"did we know, and when\"\n * is the question the abuse queue exists to answer, and a strike that was\n * lifted is part of that answer. Only rows without one count.\n */\nexport function countStandingStrikes(\n rows: readonly { withdrawnAt?: unknown }[] | null | undefined,\n): number {\n if (!rows) return 0\n return rows.filter((row) => row?.withdrawnAt == null).length\n}\n\nexport default repeatInfringerVerdict\n"],"names":["STRIKE_LEDGER_SUBCOLLECTION","STRIKE_WARN_AT","STRIKE_FINAL_AT","STRIKE_TERMINATE_AT","repeatInfringerVerdict","strikes","count","Number","isFinite","Math","floor","level","decisionRequired","consequence","STRIKE_WITHDRAWAL_REASONS","isStrikeWithdrawalReason","value","includes","strikeEarnedBy","category","status","strikeRemovedBy","countStandingStrikes","rows","filter","row","withdrawnAt","length"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiEC,GAED,kEAAkE,GAClE,OAAO,MAAMA,8BAA8B,cAAa;AAExD;;;;;;;;;;;;;;;CAeC,GACD,OAAO,MAAMC,iBAAiB,EAAC;AAC/B,OAAO,MAAMC,kBAAkB,EAAC;AAChC,OAAO,MAAMC,sBAAsB,EAAC;AAiBpC;;;;;;;CAOC,GACD,OAAO,SAASC,uBAAuBC,OAAgB;IACrD,MAAMC,QACJ,OAAOD,YAAY,YAAYE,OAAOC,QAAQ,CAACH,YAAYA,UAAU,IACjEI,KAAKC,KAAK,CAACL,WACX;IACN,IAAIC,SAASH,qBAAqB;QAChC,OAAO;YACLE,SAASC;YACTK,OAAO;YACPC,kBAAkB;YAClBC,aACE,wEACA,uEACA;QACJ;IACF;IACA,IAAIP,SAASJ,iBAAiB;QAC5B,OAAO;YACLG,SAASC;YACTK,OAAO;YACPC,kBAAkB;YAClBC,aACE,iEACA;QACJ;IACF;IACA,IAAIP,SAASL,gBAAgB;QAC3B,OAAO;YACLI,SAASC;YACTK,OAAO;YACPC,kBAAkB;YAClBC,aACE;QACJ;IACF;IACA,OAAO;QACLR,SAAS;QACTM,OAAO;QACPC,kBAAkB;QAClBC,aAAa;IACf;AACF;AAEA,8DAA8D,GAC9D,OAAO,MAAMC,4BAA4B;IACvC,0CAA0C,GAC1C;IACA,qEAAqE,GACrE;IACA,4DAA4D,GAC5D;CACD,CAAS;AAGV,OAAO,SAASC,yBACdC,KAAc;IAEd,OACE,OAAOA,UAAU,YACjB,AAACF,0BAAgDG,QAAQ,CAACD;AAE9D;AAEA;;;;;;;;;;;;CAYC,GACD,OAAO,SAASE,eAAeC,QAAiB,EAAEC,MAAe;IAC/D,OAAOD,aAAa,UAAUC,WAAW;AAC3C;AAEA;;;;;;;;;CASC,GACD,OAAO,SAASC,gBAAgBF,QAAiB,EAAEC,MAAe;IAChE,OACED,aAAa,UAAWC,CAAAA,WAAW,eAAeA,WAAW,UAAUA,WAAW,WAAU;AAEhG;AAEA;;;;;;;CAOC,GACD,OAAO,SAASE,qBACdC,IAA6D;IAE7D,IAAI,CAACA,MAAM,OAAO;IAClB,OAAOA,KAAKC,MAAM,CAAC,CAACC,MAAQA,CAAAA,uBAAAA,IAAKC,WAAW,KAAI,MAAMC,MAAM;AAC9D;AAEA,eAAevB,uBAAsB"}
|
|
@@ -0,0 +1,115 @@
|
|
|
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
|
+
import type { AglynAttributeSchema } from '../foundation/definitions/components.types';
|
|
18
|
+
import type { RepeatableDataset } from './expand-repeatables';
|
|
19
|
+
/**
|
|
20
|
+
* Where a repeat's rows come from, for the editor (AGL-3111).
|
|
21
|
+
*
|
|
22
|
+
* Any element can repeat, and the platform decides what a repeat MEANS — the
|
|
23
|
+
* scope, the copies, the bounds (`expand-repeatables.ts`). What it does not
|
|
24
|
+
* decide is what an element repeats OVER. That belongs to the plugin that owns
|
|
25
|
+
* the rows, which registers a source here from the registration function its
|
|
26
|
+
* loader calls by name. Core names no source.
|
|
27
|
+
*
|
|
28
|
+
* Reached by path, never through a barrel: nothing on a published page asks
|
|
29
|
+
* where rows come from, so nothing here is in a published page's download.
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* What a source answers for one key.
|
|
33
|
+
*
|
|
34
|
+
* - `loading` — no answer yet.
|
|
35
|
+
* - `missing` — the key names nothing this site may use. The published page
|
|
36
|
+
* renders the element once, as written.
|
|
37
|
+
* - `error` — the read failed. Nothing is known about the rows.
|
|
38
|
+
* - `ready` — the rows, read and bounded exactly as the published page's
|
|
39
|
+
* composition reads them.
|
|
40
|
+
*/
|
|
41
|
+
export type RepeatRowsAnswer = {
|
|
42
|
+
status: 'loading';
|
|
43
|
+
} | {
|
|
44
|
+
status: 'missing';
|
|
45
|
+
} | {
|
|
46
|
+
status: 'error';
|
|
47
|
+
} | {
|
|
48
|
+
status: 'ready';
|
|
49
|
+
/** The name authors know the entry by, for the canvas badge. */
|
|
50
|
+
label: string;
|
|
51
|
+
/**
|
|
52
|
+
* The rows under every key the expansion looks them up by: the key as
|
|
53
|
+
* the node stores it, the entry's id, and each entry a one-hop reference
|
|
54
|
+
* in the rows reads (`{{item.ref.field}}`).
|
|
55
|
+
*/
|
|
56
|
+
rowsByKey: Readonly<Record<string, RepeatableDataset>>;
|
|
57
|
+
};
|
|
58
|
+
/** One read a source is asked for. */
|
|
59
|
+
export interface RepeatRowsRequest {
|
|
60
|
+
/** The site the canvas edits. A source answers only what it may show. */
|
|
61
|
+
hostId: string;
|
|
62
|
+
/** The key exactly as the node stores it. */
|
|
63
|
+
key: string;
|
|
64
|
+
}
|
|
65
|
+
/** One kind of thing an element can repeat over. */
|
|
66
|
+
export interface RepeatSource {
|
|
67
|
+
/** Stable id, e.g. the plugin's name for the kind. */
|
|
68
|
+
id: string;
|
|
69
|
+
/** What the Attributes panel calls the kind. */
|
|
70
|
+
label: string;
|
|
71
|
+
/**
|
|
72
|
+
* The node prop the chosen key persists under. Persisted in documents, so a
|
|
73
|
+
* source never renames it.
|
|
74
|
+
*/
|
|
75
|
+
keyProp: string;
|
|
76
|
+
/**
|
|
77
|
+
* The attribute that picks a key, drawn by the Attributes panel as any
|
|
78
|
+
* component attribute is. The panel names the field after `keyProp`.
|
|
79
|
+
*/
|
|
80
|
+
keyAttribute: Omit<AglynAttributeSchema, 'name'>;
|
|
81
|
+
/**
|
|
82
|
+
* Reads one key's rows for the besigner's canvas preview and badge. A React
|
|
83
|
+
* hook: the editor mounts one reader per key and calls it unconditionally,
|
|
84
|
+
* so its identity must not change after registration.
|
|
85
|
+
*/
|
|
86
|
+
useRows(request: RepeatRowsRequest): RepeatRowsAnswer;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Registers a source, replacing any registered under its id. Returns the
|
|
90
|
+
* unregister, which removes the source only if it is still the one registered.
|
|
91
|
+
*
|
|
92
|
+
* Call it from a registration function the plugin loader calls BY NAME, never
|
|
93
|
+
* from a module's top level: a bundler deletes a module imported only for its
|
|
94
|
+
* side effect when its package says it has none (AGL-3025).
|
|
95
|
+
*/
|
|
96
|
+
export declare function registerRepeatSource(source: RepeatSource): () => void;
|
|
97
|
+
/**
|
|
98
|
+
* Every registered source, in registration order. The SAME array until the
|
|
99
|
+
* registered set changes, so it can be read as a store snapshot.
|
|
100
|
+
*/
|
|
101
|
+
export declare function listRepeatSources(): readonly RepeatSource[];
|
|
102
|
+
/** The source registered under `id`. */
|
|
103
|
+
export declare function getRepeatSource(id: string): RepeatSource | undefined;
|
|
104
|
+
/** Called after the registered set changes. Returns the unsubscribe. */
|
|
105
|
+
export declare function subscribeRepeatSources(listener: () => void): () => void;
|
|
106
|
+
/** Moves on every change — the snapshot `useSyncExternalStore` reads. */
|
|
107
|
+
export declare function getRepeatSourcesVersion(): number;
|
|
108
|
+
/**
|
|
109
|
+
* The registered source a node repeats over, and the key it names, trimmed.
|
|
110
|
+
* `undefined` for a node that repeats over nothing a registered source owns.
|
|
111
|
+
*/
|
|
112
|
+
export declare function repeatSourceOf(node: unknown): {
|
|
113
|
+
source: RepeatSource;
|
|
114
|
+
key: string;
|
|
115
|
+
} | undefined;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ const sources = new Map();
|
|
17
|
+
const listeners = new Set();
|
|
18
|
+
let version = 0;
|
|
19
|
+
/**
|
|
20
|
+
* Replaced only when the registered set changes, never rebuilt per call: it is
|
|
21
|
+
* the snapshot `useSyncExternalStore` compares, and a fresh array every time
|
|
22
|
+
* is a render loop rather than a wasted allocation.
|
|
23
|
+
*/ let snapshot = [];
|
|
24
|
+
const notify = ()=>{
|
|
25
|
+
version += 1;
|
|
26
|
+
snapshot = [
|
|
27
|
+
...sources.values()
|
|
28
|
+
];
|
|
29
|
+
for (const listener of [
|
|
30
|
+
...listeners
|
|
31
|
+
])listener();
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Registers a source, replacing any registered under its id. Returns the
|
|
35
|
+
* unregister, which removes the source only if it is still the one registered.
|
|
36
|
+
*
|
|
37
|
+
* Call it from a registration function the plugin loader calls BY NAME, never
|
|
38
|
+
* from a module's top level: a bundler deletes a module imported only for its
|
|
39
|
+
* side effect when its package says it has none (AGL-3025).
|
|
40
|
+
*/ export function registerRepeatSource(source) {
|
|
41
|
+
if (sources.get(source.id) !== source) {
|
|
42
|
+
sources.set(source.id, source);
|
|
43
|
+
notify();
|
|
44
|
+
}
|
|
45
|
+
return ()=>{
|
|
46
|
+
if (sources.get(source.id) !== source) return;
|
|
47
|
+
sources.delete(source.id);
|
|
48
|
+
notify();
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Every registered source, in registration order. The SAME array until the
|
|
53
|
+
* registered set changes, so it can be read as a store snapshot.
|
|
54
|
+
*/ export function listRepeatSources() {
|
|
55
|
+
return snapshot;
|
|
56
|
+
}
|
|
57
|
+
/** The source registered under `id`. */ export function getRepeatSource(id) {
|
|
58
|
+
return sources.get(id);
|
|
59
|
+
}
|
|
60
|
+
/** Called after the registered set changes. Returns the unsubscribe. */ export function subscribeRepeatSources(listener) {
|
|
61
|
+
listeners.add(listener);
|
|
62
|
+
return ()=>{
|
|
63
|
+
listeners.delete(listener);
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/** Moves on every change — the snapshot `useSyncExternalStore` reads. */ export function getRepeatSourcesVersion() {
|
|
67
|
+
return version;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The registered source a node repeats over, and the key it names, trimmed.
|
|
71
|
+
* `undefined` for a node that repeats over nothing a registered source owns.
|
|
72
|
+
*/ export function repeatSourceOf(node) {
|
|
73
|
+
const props = node == null ? void 0 : node.props;
|
|
74
|
+
if (!props) return undefined;
|
|
75
|
+
for (const source of sources.values()){
|
|
76
|
+
const value = props[source.keyProp];
|
|
77
|
+
const key = typeof value === 'string' ? value.trim() : '';
|
|
78
|
+
if (key) return {
|
|
79
|
+
source,
|
|
80
|
+
key
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
//# sourceMappingURL=repeat-sources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/repeat-sources.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 type { AglynAttributeSchema } from '../foundation/definitions/components.types'\nimport type { RepeatableDataset } from './expand-repeatables'\n\n/**\n * Where a repeat's rows come from, for the editor (AGL-3111).\n *\n * Any element can repeat, and the platform decides what a repeat MEANS — the\n * scope, the copies, the bounds (`expand-repeatables.ts`). What it does not\n * decide is what an element repeats OVER. That belongs to the plugin that owns\n * the rows, which registers a source here from the registration function its\n * loader calls by name. Core names no source.\n *\n * Reached by path, never through a barrel: nothing on a published page asks\n * where rows come from, so nothing here is in a published page's download.\n */\n\n/**\n * What a source answers for one key.\n *\n * - `loading` — no answer yet.\n * - `missing` — the key names nothing this site may use. The published page\n * renders the element once, as written.\n * - `error` — the read failed. Nothing is known about the rows.\n * - `ready` — the rows, read and bounded exactly as the published page's\n * composition reads them.\n */\nexport type RepeatRowsAnswer =\n | { status: 'loading' }\n | { status: 'missing' }\n | { status: 'error' }\n | {\n status: 'ready'\n /** The name authors know the entry by, for the canvas badge. */\n label: string\n /**\n * The rows under every key the expansion looks them up by: the key as\n * the node stores it, the entry's id, and each entry a one-hop reference\n * in the rows reads (`{{item.ref.field}}`).\n */\n rowsByKey: Readonly<Record<string, RepeatableDataset>>\n }\n\n/** One read a source is asked for. */\nexport interface RepeatRowsRequest {\n /** The site the canvas edits. A source answers only what it may show. */\n hostId: string\n /** The key exactly as the node stores it. */\n key: string\n}\n\n/** One kind of thing an element can repeat over. */\nexport interface RepeatSource {\n /** Stable id, e.g. the plugin's name for the kind. */\n id: string\n /** What the Attributes panel calls the kind. */\n label: string\n /**\n * The node prop the chosen key persists under. Persisted in documents, so a\n * source never renames it.\n */\n keyProp: string\n /**\n * The attribute that picks a key, drawn by the Attributes panel as any\n * component attribute is. The panel names the field after `keyProp`.\n */\n keyAttribute: Omit<AglynAttributeSchema, 'name'>\n /**\n * Reads one key's rows for the besigner's canvas preview and badge. A React\n * hook: the editor mounts one reader per key and calls it unconditionally,\n * so its identity must not change after registration.\n */\n useRows(request: RepeatRowsRequest): RepeatRowsAnswer\n}\n\nconst sources = new Map<string, RepeatSource>()\nconst listeners = new Set<() => void>()\nlet version = 0\n/**\n * Replaced only when the registered set changes, never rebuilt per call: it is\n * the snapshot `useSyncExternalStore` compares, and a fresh array every time\n * is a render loop rather than a wasted allocation.\n */\nlet snapshot: readonly RepeatSource[] = []\n\nconst notify = () => {\n version += 1\n snapshot = [...sources.values()]\n for (const listener of [...listeners]) listener()\n}\n\n/**\n * Registers a source, replacing any registered under its id. Returns the\n * unregister, which removes the source only if it is still the one registered.\n *\n * Call it from a registration function the plugin loader calls BY NAME, never\n * from a module's top level: a bundler deletes a module imported only for its\n * side effect when its package says it has none (AGL-3025).\n */\nexport function registerRepeatSource(source: RepeatSource): () => void {\n if (sources.get(source.id) !== source) {\n sources.set(source.id, source)\n notify()\n }\n return () => {\n if (sources.get(source.id) !== source) return\n sources.delete(source.id)\n notify()\n }\n}\n\n/**\n * Every registered source, in registration order. The SAME array until the\n * registered set changes, so it can be read as a store snapshot.\n */\nexport function listRepeatSources(): readonly RepeatSource[] {\n return snapshot\n}\n\n/** The source registered under `id`. */\nexport function getRepeatSource(id: string): RepeatSource | undefined {\n return sources.get(id)\n}\n\n/** Called after the registered set changes. Returns the unsubscribe. */\nexport function subscribeRepeatSources(listener: () => void): () => void {\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n}\n\n/** Moves on every change — the snapshot `useSyncExternalStore` reads. */\nexport function getRepeatSourcesVersion(): number {\n return version\n}\n\n/**\n * The registered source a node repeats over, and the key it names, trimmed.\n * `undefined` for a node that repeats over nothing a registered source owns.\n */\nexport function repeatSourceOf(\n node: unknown,\n): { source: RepeatSource; key: string } | undefined {\n const props = (node as { props?: Record<string, unknown> } | undefined)?.props\n if (!props) return undefined\n for (const source of sources.values()) {\n const value = props[source.keyProp]\n const key = typeof value === 'string' ? value.trim() : ''\n if (key) return { source, key }\n }\n return undefined\n}\n"],"names":["sources","Map","listeners","Set","version","snapshot","notify","values","listener","registerRepeatSource","source","get","id","set","delete","listRepeatSources","getRepeatSource","subscribeRepeatSources","add","getRepeatSourcesVersion","repeatSourceOf","node","props","undefined","value","keyProp","key","trim"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GA4ED,MAAMA,UAAU,IAAIC;AACpB,MAAMC,YAAY,IAAIC;AACtB,IAAIC,UAAU;AACd;;;;CAIC,GACD,IAAIC,WAAoC,EAAE;AAE1C,MAAMC,SAAS;IACbF,WAAW;IACXC,WAAW;WAAIL,QAAQO,MAAM;KAAG;IAChC,KAAK,MAAMC,YAAY;WAAIN;KAAU,CAAEM;AACzC;AAEA;;;;;;;CAOC,GACD,OAAO,SAASC,qBAAqBC,MAAoB;IACvD,IAAIV,QAAQW,GAAG,CAACD,OAAOE,EAAE,MAAMF,QAAQ;QACrCV,QAAQa,GAAG,CAACH,OAAOE,EAAE,EAAEF;QACvBJ;IACF;IACA,OAAO;QACL,IAAIN,QAAQW,GAAG,CAACD,OAAOE,EAAE,MAAMF,QAAQ;QACvCV,QAAQc,MAAM,CAACJ,OAAOE,EAAE;QACxBN;IACF;AACF;AAEA;;;CAGC,GACD,OAAO,SAASS;IACd,OAAOV;AACT;AAEA,sCAAsC,GACtC,OAAO,SAASW,gBAAgBJ,EAAU;IACxC,OAAOZ,QAAQW,GAAG,CAACC;AACrB;AAEA,sEAAsE,GACtE,OAAO,SAASK,uBAAuBT,QAAoB;IACzDN,UAAUgB,GAAG,CAACV;IACd,OAAO;QACLN,UAAUY,MAAM,CAACN;IACnB;AACF;AAEA,uEAAuE,GACvE,OAAO,SAASW;IACd,OAAOf;AACT;AAEA;;;CAGC,GACD,OAAO,SAASgB,eACdC,IAAa;IAEb,MAAMC,QAASD,wBAAD,AAACA,KAA0DC,KAAK;IAC9E,IAAI,CAACA,OAAO,OAAOC;IACnB,KAAK,MAAMb,UAAUV,QAAQO,MAAM,GAAI;QACrC,MAAMiB,QAAQF,KAAK,CAACZ,OAAOe,OAAO,CAAC;QACnC,MAAMC,MAAM,OAAOF,UAAU,WAAWA,MAAMG,IAAI,KAAK;QACvD,IAAID,KAAK,OAAO;YAAEhB;YAAQgB;QAAI;IAChC;IACA,OAAOH;AACT"}
|
|
@@ -0,0 +1,114 @@
|
|
|
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 ONE request-geo reader (AGL-1492/1498).
|
|
19
|
+
*
|
|
20
|
+
* Extracted from the console's sanctions module so the tenant's consent-mode
|
|
21
|
+
* endpoint reads the identical signal the sanctions gate does — two geo
|
|
22
|
+
* layers would eventually disagree about the same request. The sanctions
|
|
23
|
+
* POLICY (embargo sets, verdicts, the 451) stays in
|
|
24
|
+
* `apps/console/constants/sanctions-geo.ts`; this is only the signal.
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* The headers carrying the request's country, subdivision and city, named by
|
|
28
|
+
* configuration with Vercel's own as the default (AGL-2436).
|
|
29
|
+
*
|
|
30
|
+
* These were bare `x-vercel-*` literals, under a comment calling them "the
|
|
31
|
+
* only geo signal this deployment has" — true of Aglyn's cloud and false of
|
|
32
|
+
* every self-host install, where no edge sets them. Nothing else supplies the
|
|
33
|
+
* signal, so on a container `readRequestGeo` returned `null` for every request
|
|
34
|
+
* and the two things built on it were off in production:
|
|
35
|
+
*
|
|
36
|
+
* - the sanctions gate FAILED OPEN on every request, logging it once per
|
|
37
|
+
* instance — an embargo control that is silently not running,
|
|
38
|
+
* - the tenant's consent-region endpoint had no region to answer with,
|
|
39
|
+
* - the new-device sign-in alert reported "Unknown location" to every user,
|
|
40
|
+
* and stored that string, so the breach-notification report that reads a
|
|
41
|
+
* data subject's country back off it counted nobody.
|
|
42
|
+
*
|
|
43
|
+
* An operator's proxy has the signal under its own name: Cloudflare sends
|
|
44
|
+
* `cf-ipcountry`, and Caddy/nginx/Traefik can set whatever they are told to.
|
|
45
|
+
* Naming the header is all that was missing.
|
|
46
|
+
*
|
|
47
|
+
* ⚠️ Read with DOT notation and mapped through the `env` block of both
|
|
48
|
+
* `next.config.js` files, because `apps/console/middleware.ts` imports the
|
|
49
|
+
* sanctions gate and therefore this module into the EDGE bundle. Next inlines
|
|
50
|
+
* `process.env.NAME` there at build time and never the bracket form (AGL-2037)
|
|
51
|
+
* — so these are fixed when the image is built, not when it starts, exactly
|
|
52
|
+
* like `AGLYN_TENANT_HOST_CNAME`.
|
|
53
|
+
*
|
|
54
|
+
* Lower-cased because the value is used as a `Vary` header, where it is echoed
|
|
55
|
+
* verbatim rather than matched case-insensitively.
|
|
56
|
+
*/
|
|
57
|
+
export declare const GEO_COUNTRY_HEADER: string;
|
|
58
|
+
export declare const GEO_REGION_HEADER: string;
|
|
59
|
+
export declare const GEO_CITY_HEADER: string;
|
|
60
|
+
export interface RequestGeo {
|
|
61
|
+
/** ISO 3166-1 alpha-2, uppercased. `null` when the edge sent no signal. */
|
|
62
|
+
country: string | null;
|
|
63
|
+
/** Bare ISO 3166-2 subdivision code, uppercased. `null` when absent. */
|
|
64
|
+
region: string | null;
|
|
65
|
+
}
|
|
66
|
+
/** A minimal `Headers`, so route handlers and middleware share one reader. */
|
|
67
|
+
export interface HeaderReader {
|
|
68
|
+
get(name: string): string | null;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Every header consulted for the country, in order, configured one first.
|
|
72
|
+
*
|
|
73
|
+
* Exported because a caller that varies a cached response on the country has
|
|
74
|
+
* to name ALL of them: a `Vary` that lists only the configured header is
|
|
75
|
+
* correct on the one platform whose header that is, and on every other one it
|
|
76
|
+
* lets a CDN serve a US answer to a European visitor from cache. Aglyn is
|
|
77
|
+
* self-hostable on Docker with the operator's own Firebase and no particular
|
|
78
|
+
* edge, so "the one platform" is not an assumption this may make.
|
|
79
|
+
*/
|
|
80
|
+
export declare const GEO_COUNTRY_HEADERS: readonly string[];
|
|
81
|
+
/** Every header consulted for the subdivision, in order, configured one first. */
|
|
82
|
+
export declare const GEO_REGION_HEADERS: readonly string[];
|
|
83
|
+
export declare function readRequestGeo(headers: HeaderReader): RequestGeo;
|
|
84
|
+
/**
|
|
85
|
+
* The subdivision as a person should read it, rather than as an embargo set
|
|
86
|
+
* matches it.
|
|
87
|
+
*
|
|
88
|
+
* `readRequestGeo().region` is upper-cased and zero-padded because
|
|
89
|
+
* `EMBARGOED_UA_REGIONS` is an exact-membership test that every spelling of a
|
|
90
|
+
* code has to land on. That normalization is wrong for anything a person
|
|
91
|
+
* reads: a proxy configured to send a subdivision NAME rather than a code
|
|
92
|
+
* reaches a user's security email shouting `CAPITAL`.
|
|
93
|
+
*
|
|
94
|
+
* Same headers, same precedence — only the normalization differs, so the two
|
|
95
|
+
* readers can never disagree about WHICH subdivision a request came from.
|
|
96
|
+
*/
|
|
97
|
+
export declare function readRequestRegionLabel(headers: HeaderReader): string | null;
|
|
98
|
+
/** Every header consulted for the city, in order, configured one first. */
|
|
99
|
+
export declare const GEO_CITY_HEADERS: readonly string[];
|
|
100
|
+
/**
|
|
101
|
+
* The request's city, decoded, or `null` when no edge sent one.
|
|
102
|
+
*
|
|
103
|
+
* Percent-decoded because every edge that sends this header sends non-ASCII
|
|
104
|
+
* names encoded (`S%C3%A3o%20Paulo`), and an undecoded value reaches a person
|
|
105
|
+
* as mojibake in a security email. A value that is not valid percent-encoding
|
|
106
|
+
* is kept verbatim rather than dropped — a literal `%` in a name is not a
|
|
107
|
+
* reason to lose the city.
|
|
108
|
+
*
|
|
109
|
+
* Commas become spaces. Callers join city, region and country with `", "`
|
|
110
|
+
* into one stored string, and `deviceLocationCountry` reads the country back
|
|
111
|
+
* off the LAST comma-separated token; a comma arriving inside the city half
|
|
112
|
+
* would add a token to a string that a breach-notification report parses.
|
|
113
|
+
*/
|
|
114
|
+
export declare function readRequestCity(headers: HeaderReader): string | null;
|