@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,185 @@
|
|
|
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
|
+
/** Firestore collection holding counter-notices. Staff-read, Admin-SDK-written. */
|
|
18
|
+
export declare const DMCA_COUNTER_NOTICE_COLLECTION = "dmcaCounterNotices";
|
|
19
|
+
/**
|
|
20
|
+
* Business days from receipt to automatic restoration.
|
|
21
|
+
*
|
|
22
|
+
* Inside §512(g)(2)(C)'s 10-to-14 window with room for holidays at both ends.
|
|
23
|
+
* See the module comment for why the middle of the window is the safe target
|
|
24
|
+
* for a weekend-only counter.
|
|
25
|
+
*/
|
|
26
|
+
export declare const COUNTER_NOTICE_RESTORE_BUSINESS_DAYS = 12;
|
|
27
|
+
/** The statutory floor, kept for the record we show staff and the complainant. */
|
|
28
|
+
export declare const COUNTER_NOTICE_MIN_BUSINESS_DAYS = 10;
|
|
29
|
+
/** The statutory ceiling. Restoration later than this is its own violation. */
|
|
30
|
+
export declare const COUNTER_NOTICE_MAX_BUSINESS_DAYS = 14;
|
|
31
|
+
/** Maximum characters of subscriber prose stored. */
|
|
32
|
+
export declare const COUNTER_NOTICE_MAX_DETAILS = 5000;
|
|
33
|
+
/** Maximum length of a contact field. */
|
|
34
|
+
export declare const COUNTER_NOTICE_MAX_CONTACT = 254;
|
|
35
|
+
/** Maximum length of the postal address — a jurisdiction fact, not free text. */
|
|
36
|
+
export declare const COUNTER_NOTICE_MAX_ADDRESS = 1000;
|
|
37
|
+
/**
|
|
38
|
+
* The workflow states a counter-notice moves through.
|
|
39
|
+
*
|
|
40
|
+
* `received` → `forwarded` is the §512(g)(2)(A) obligation discharged, and it
|
|
41
|
+
* is the transition that starts the clock in the record. `restored` is the
|
|
42
|
+
* put-back having happened; `withdrawn` is the subscriber taking it back;
|
|
43
|
+
* `suitFiled` is the one lawful reason NOT to restore — the complainant told
|
|
44
|
+
* us they went to court, and the material stays down.
|
|
45
|
+
*
|
|
46
|
+
* `rejected` exists for a submission that is not a counter-notice at all
|
|
47
|
+
* (blank statutory elements survive validation only as a malformed row, and a
|
|
48
|
+
* mis-filed support question does not belong in a legal queue). It is
|
|
49
|
+
* deliberately NOT a merits judgement, and the staff surface says so.
|
|
50
|
+
*/
|
|
51
|
+
export declare const COUNTER_NOTICE_STATUSES: readonly ["received", "forwarded", "restored", "suitFiled", "withdrawn", "rejected"];
|
|
52
|
+
export type CounterNoticeStatus = (typeof COUNTER_NOTICE_STATUSES)[number];
|
|
53
|
+
export declare function isCounterNoticeStatus(value: unknown): value is CounterNoticeStatus;
|
|
54
|
+
/**
|
|
55
|
+
* The statuses that mean this counter-notice will NOT lead to a restoration.
|
|
56
|
+
*
|
|
57
|
+
* Named rather than open-coded because two different places have to agree
|
|
58
|
+
* about it: the clock (which must not keep counting toward a put-back that is
|
|
59
|
+
* never coming) and the strike ledger (which must not go on suppressing a
|
|
60
|
+
* strike the subscriber withdrew).
|
|
61
|
+
*/
|
|
62
|
+
export declare const COUNTER_NOTICE_TERMINAL_STATUSES: readonly CounterNoticeStatus[];
|
|
63
|
+
/**
|
|
64
|
+
* The §512(g)(3) elements, after validation.
|
|
65
|
+
*
|
|
66
|
+
* Each field is one of the statute's four subparagraphs, and the names say
|
|
67
|
+
* which. Collecting them as prose next to a tick-box is the ordinary web-form
|
|
68
|
+
* rendering of a sworn document — the same shape `AbuseReportDmcaAffirmations`
|
|
69
|
+
* takes for the notice on the other side.
|
|
70
|
+
*/
|
|
71
|
+
export interface CounterNoticeInput {
|
|
72
|
+
/** (A) Typed name standing as the electronic signature. */
|
|
73
|
+
signature: string;
|
|
74
|
+
/**
|
|
75
|
+
* (B) Identification of the material removed and where it appeared before
|
|
76
|
+
* removal. The URL is captured separately so staff can act on it directly.
|
|
77
|
+
*/
|
|
78
|
+
material: string;
|
|
79
|
+
/** (B) The location the material appeared at, normalized to an http(s) URL. */
|
|
80
|
+
url: string;
|
|
81
|
+
/** Hostname of {@link url}, so the row can be joined to a host. */
|
|
82
|
+
reportedHostname: string;
|
|
83
|
+
/**
|
|
84
|
+
* Our own reference for the notice being answered (`AR-…`), when the
|
|
85
|
+
* subscriber has it. Optional: a subscriber who lost the email must still be
|
|
86
|
+
* able to file, and staff can match on the URL.
|
|
87
|
+
*/
|
|
88
|
+
reference: string | null;
|
|
89
|
+
/** (D) Subscriber's legal name. */
|
|
90
|
+
name: string;
|
|
91
|
+
/** (D) Subscriber's postal address — the address that fixes the district. */
|
|
92
|
+
address: string;
|
|
93
|
+
/** (D) Subscriber's telephone number. */
|
|
94
|
+
phone: string;
|
|
95
|
+
/** Reply address. Not statutory, but the channel the procedure runs on. */
|
|
96
|
+
email: string;
|
|
97
|
+
/**
|
|
98
|
+
* (C) "Under penalty of perjury, I have a good faith belief the material was
|
|
99
|
+
* removed as a result of mistake or misidentification."
|
|
100
|
+
*/
|
|
101
|
+
goodFaithMistake: boolean;
|
|
102
|
+
/**
|
|
103
|
+
* (D) Consent to the jurisdiction of the Federal District Court for the
|
|
104
|
+
* district of the given address — or, for a subscriber outside the United
|
|
105
|
+
* States, any district in which we may be found.
|
|
106
|
+
*/
|
|
107
|
+
consentJurisdiction: boolean;
|
|
108
|
+
/** (D) Agreement to accept service of process from the complainant. */
|
|
109
|
+
acceptService: boolean;
|
|
110
|
+
}
|
|
111
|
+
export interface CounterNoticeValidationFailure {
|
|
112
|
+
ok: false;
|
|
113
|
+
/** Stable machine code, for tests and for the form to highlight a field. */
|
|
114
|
+
code: string;
|
|
115
|
+
/** Sentence shown to the subscriber. */
|
|
116
|
+
message: string;
|
|
117
|
+
}
|
|
118
|
+
export interface CounterNoticeValidationSuccess {
|
|
119
|
+
ok: true;
|
|
120
|
+
value: CounterNoticeInput;
|
|
121
|
+
}
|
|
122
|
+
export type CounterNoticeValidation = CounterNoticeValidationSuccess | CounterNoticeValidationFailure;
|
|
123
|
+
/** `AR-XXXXXXXXXX` as minted by the abuse intake, or `null`. */
|
|
124
|
+
export declare function normalizeNoticeReference(value: unknown): string | null;
|
|
125
|
+
/**
|
|
126
|
+
* Validate and normalize a submitted counter-notice.
|
|
127
|
+
*
|
|
128
|
+
* Accepts the shape of BOTH a JSON body and a urlencoded no-JS form post.
|
|
129
|
+
*
|
|
130
|
+
* Unlike {@link validateAbuseReport}, the bar here is deliberately HIGH, and
|
|
131
|
+
* for the opposite reason to the one that keeps the notice bar low. A missing
|
|
132
|
+
* field on an abuse report costs us a report; a missing element on a
|
|
133
|
+
* counter-notice makes the document legally ineffective, so accepting it
|
|
134
|
+
* would be worse than refusing it — we would owe the complainant a forward
|
|
135
|
+
* and the subscriber a restoration on the strength of a paper that does not
|
|
136
|
+
* do what it has to do. Refusing tells the subscriber what to add while they
|
|
137
|
+
* are still in front of the form.
|
|
138
|
+
*
|
|
139
|
+
* The `normalizeUrl` dependency is injected rather than imported so this
|
|
140
|
+
* module does not reach across into the notice side for one function; the
|
|
141
|
+
* route hands it `normalizeReportedUrl`, which already refuses `javascript:`
|
|
142
|
+
* and `data:` for the stored-XSS reason recorded there.
|
|
143
|
+
*/
|
|
144
|
+
export declare function validateCounterNotice(payload: Record<string, unknown>, normalizeUrl: (value: unknown) => string | null, hostnameOf: (url: string) => string): CounterNoticeValidation;
|
|
145
|
+
/** The three instants §512(g)(2)(C) defines, relative to receipt. */
|
|
146
|
+
export interface CounterNoticeClock {
|
|
147
|
+
/** When we received the counter-notice. The statute counts from here. */
|
|
148
|
+
receivedAtMs: number;
|
|
149
|
+
/** The statutory floor — restoring before this is too early. */
|
|
150
|
+
earliestMs: number;
|
|
151
|
+
/** When we will actually restore access. */
|
|
152
|
+
restoreAtMs: number;
|
|
153
|
+
/** The statutory ceiling — restoring after this is too late. */
|
|
154
|
+
latestMs: number;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* The put-back schedule for a counter-notice received at `receivedAtMs`.
|
|
158
|
+
*
|
|
159
|
+
* Returns all three boundaries rather than just the one we act on, because
|
|
160
|
+
* the other two are what let a staff surface — and, later, an argument —
|
|
161
|
+
* show that the instant we chose sits inside the window the statute drew,
|
|
162
|
+
* instead of asserting it.
|
|
163
|
+
*/
|
|
164
|
+
export declare function counterNoticeClock(receivedAtMs: number): CounterNoticeClock;
|
|
165
|
+
/**
|
|
166
|
+
* Is this counter-notice still heading for a restoration?
|
|
167
|
+
*
|
|
168
|
+
* `false` for the three terminal statuses — the complainant went to court,
|
|
169
|
+
* the subscriber withdrew, or the submission was not a counter-notice. A
|
|
170
|
+
* `restored` row is also done: the put-back already happened, and a scheduler
|
|
171
|
+
* that kept acting on it would re-lift a suspension staff may have re-imposed
|
|
172
|
+
* for an entirely different reason.
|
|
173
|
+
*
|
|
174
|
+
* Returns a plain `boolean`, NOT a `status is CounterNoticeStatus` predicate,
|
|
175
|
+
* and the distinction is not cosmetic. This answers a question about a SUBSET
|
|
176
|
+
* of the statuses — `restored` is a perfectly valid `CounterNoticeStatus` and
|
|
177
|
+
* still gets `false` — so a type predicate here would be a lie the compiler
|
|
178
|
+
* believes: narrowing on it would hand a caller a type that includes the very
|
|
179
|
+
* values the function just rejected. `strictNullChecks` is off repo-wide,
|
|
180
|
+
* which already makes boolean-discriminant narrowing unreliable in this
|
|
181
|
+
* codebase; a predicate that is wrong even when narrowing DOES fire is worse
|
|
182
|
+
* than none. Callers ask this as a question and branch on the answer.
|
|
183
|
+
*/
|
|
184
|
+
export declare function counterNoticeAwaitsRestoration(status: unknown): boolean;
|
|
185
|
+
export default validateCounterNotice;
|
|
@@ -0,0 +1,277 @@
|
|
|
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
|
+
* DMCA COUNTER-NOTICE — the put-back half of §512 (AGL-1983).
|
|
18
|
+
*
|
|
19
|
+
* AGL-1964 built the intake, so we can RECEIVE a copyright notice; AGL-1965
|
|
20
|
+
* made a host-scope takedown actually stick in Firestore rules, so we can
|
|
21
|
+
* ENFORCE one. Those two together are the dangerous shape: we could take a
|
|
22
|
+
* customer's site down and had no lawful way to put it back. §512(g) is the
|
|
23
|
+
* procedure that closes it, and it is also the thing that shields us from
|
|
24
|
+
* being sued by our own customer for the takedown we performed on somebody
|
|
25
|
+
* else's say-so.
|
|
26
|
+
*
|
|
27
|
+
* ## The clock is the feature
|
|
28
|
+
*
|
|
29
|
+
* §512(g)(2) is not "accept a form". It is a sequence with a deadline in it:
|
|
30
|
+
*
|
|
31
|
+
* (A) promptly send the complainant a copy of the counter-notice and tell
|
|
32
|
+
* them the material goes back up;
|
|
33
|
+
* (B) put it back **not less than 10 nor more than 14 business days** after
|
|
34
|
+
* receiving the counter-notice, UNLESS the complainant first tells us
|
|
35
|
+
* they have filed an action seeking a court order.
|
|
36
|
+
*
|
|
37
|
+
* A counter-notice route that recorded a submission and left restoration to
|
|
38
|
+
* whoever next reads the queue is not that procedure — it is a form that
|
|
39
|
+
* makes us feel compliant while a customer stays locked out. So the artefact
|
|
40
|
+
* this module produces is a **scheduled reversal**: {@link counterNoticeClock}
|
|
41
|
+
* computes the two boundaries, and the caller stamps the restore instant onto
|
|
42
|
+
* the suspension's own `suspendedUntilMs` so the lock lifts itself.
|
|
43
|
+
*
|
|
44
|
+
* That is why AGL-1981 had to be fixed in the same pass. Until it was,
|
|
45
|
+
* `suspendedUntilMs` was honoured by the server-side lockdown helpers and
|
|
46
|
+
* ignored by Firestore rules — so a "restored" site would have come back,
|
|
47
|
+
* served traffic, and refused every client write, which is the whole
|
|
48
|
+
* authoring experience. Scheduling a restoration onto a mechanism that never
|
|
49
|
+
* fires is theatre, and it would have been indistinguishable from working
|
|
50
|
+
* right up until a customer tried to edit.
|
|
51
|
+
*
|
|
52
|
+
* ## Why 12 business days and not 10
|
|
53
|
+
*
|
|
54
|
+
* The statute gives a WINDOW, not an instant, and the window is the slack
|
|
55
|
+
* that makes an honest implementation possible. Counting business days by
|
|
56
|
+
* skipping weekends alone is simple and testable, but it treats a federal
|
|
57
|
+
* holiday as a working day — so a weekend-only count of 10 can land on fewer
|
|
58
|
+
* than 10 true business days, which is the one direction that is unlawful
|
|
59
|
+
* (restoring too early denies the complainant days the statute gives them).
|
|
60
|
+
*
|
|
61
|
+
* Rather than carry a holiday calendar that would need maintaining every
|
|
62
|
+
* year — and would be wrong for a year nobody updated — we target the middle
|
|
63
|
+
* of the window. A weekend-only count is always an OVER-estimate of true
|
|
64
|
+
* business days elapsed, never an under-estimate: holidays only ever remove
|
|
65
|
+
* working days. So:
|
|
66
|
+
*
|
|
67
|
+
* - 12 weekend-only business days is at most 12 true business days, which is
|
|
68
|
+
* inside the 14-day ceiling however the holidays fall;
|
|
69
|
+
* - it is at least 10 true business days unless three or more federal
|
|
70
|
+
* holidays fall inside one ~17-calendar-day span, which no pair of US
|
|
71
|
+
* federal holidays is close enough to produce (the tightest is Dec 25 /
|
|
72
|
+
* Jan 1, which is two).
|
|
73
|
+
*
|
|
74
|
+
* So the arithmetic satisfies both bounds without knowing what day
|
|
75
|
+
* Thanksgiving is. {@link COUNTER_NOTICE_RESTORE_BUSINESS_DAYS} carries the
|
|
76
|
+
* number and this reasoning travels with it.
|
|
77
|
+
*
|
|
78
|
+
* ## What this module refuses to decide
|
|
79
|
+
*
|
|
80
|
+
* Nothing here adjudicates. It does not judge whether the counter-notice is
|
|
81
|
+
* truthful, and it must not: §512's whole design is that the provider is a
|
|
82
|
+
* conduit that follows a procedure, and a provider who starts weighing the
|
|
83
|
+
* merits is a provider making itself a party. It records what was sworn, by
|
|
84
|
+
* whom, when, and what that obliges us to do next.
|
|
85
|
+
*/ /**
|
|
86
|
+
* The weekend-skipping day arithmetic, borrowed from the support-SLA clock
|
|
87
|
+
* rather than restated.
|
|
88
|
+
*
|
|
89
|
+
* `support-tiers.ts` already needed exactly this — UTC, Saturday and Sunday
|
|
90
|
+
* skipped, holidays deliberately unknown — and carries the same reasoning
|
|
91
|
+
* about why a half-right holiday calendar is worse than none. Two copies of a
|
|
92
|
+
* date rule are two chances to disagree about which day a deadline falls on,
|
|
93
|
+
* and this one decides when a customer's site comes back.
|
|
94
|
+
*/ import { addBusinessDays } from "./support-tiers.js";
|
|
95
|
+
/** Firestore collection holding counter-notices. Staff-read, Admin-SDK-written. */ export const DMCA_COUNTER_NOTICE_COLLECTION = 'dmcaCounterNotices';
|
|
96
|
+
/**
|
|
97
|
+
* Business days from receipt to automatic restoration.
|
|
98
|
+
*
|
|
99
|
+
* Inside §512(g)(2)(C)'s 10-to-14 window with room for holidays at both ends.
|
|
100
|
+
* See the module comment for why the middle of the window is the safe target
|
|
101
|
+
* for a weekend-only counter.
|
|
102
|
+
*/ export const COUNTER_NOTICE_RESTORE_BUSINESS_DAYS = 12;
|
|
103
|
+
/** The statutory floor, kept for the record we show staff and the complainant. */ export const COUNTER_NOTICE_MIN_BUSINESS_DAYS = 10;
|
|
104
|
+
/** The statutory ceiling. Restoration later than this is its own violation. */ export const COUNTER_NOTICE_MAX_BUSINESS_DAYS = 14;
|
|
105
|
+
/** Maximum characters of subscriber prose stored. */ export const COUNTER_NOTICE_MAX_DETAILS = 5000;
|
|
106
|
+
/** Maximum length of a contact field. */ export const COUNTER_NOTICE_MAX_CONTACT = 254;
|
|
107
|
+
/** Maximum length of the postal address — a jurisdiction fact, not free text. */ export const COUNTER_NOTICE_MAX_ADDRESS = 1000;
|
|
108
|
+
/**
|
|
109
|
+
* The workflow states a counter-notice moves through.
|
|
110
|
+
*
|
|
111
|
+
* `received` → `forwarded` is the §512(g)(2)(A) obligation discharged, and it
|
|
112
|
+
* is the transition that starts the clock in the record. `restored` is the
|
|
113
|
+
* put-back having happened; `withdrawn` is the subscriber taking it back;
|
|
114
|
+
* `suitFiled` is the one lawful reason NOT to restore — the complainant told
|
|
115
|
+
* us they went to court, and the material stays down.
|
|
116
|
+
*
|
|
117
|
+
* `rejected` exists for a submission that is not a counter-notice at all
|
|
118
|
+
* (blank statutory elements survive validation only as a malformed row, and a
|
|
119
|
+
* mis-filed support question does not belong in a legal queue). It is
|
|
120
|
+
* deliberately NOT a merits judgement, and the staff surface says so.
|
|
121
|
+
*/ export const COUNTER_NOTICE_STATUSES = [
|
|
122
|
+
'received',
|
|
123
|
+
'forwarded',
|
|
124
|
+
'restored',
|
|
125
|
+
'suitFiled',
|
|
126
|
+
'withdrawn',
|
|
127
|
+
'rejected'
|
|
128
|
+
];
|
|
129
|
+
export function isCounterNoticeStatus(value) {
|
|
130
|
+
return typeof value === 'string' && COUNTER_NOTICE_STATUSES.includes(value);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* The statuses that mean this counter-notice will NOT lead to a restoration.
|
|
134
|
+
*
|
|
135
|
+
* Named rather than open-coded because two different places have to agree
|
|
136
|
+
* about it: the clock (which must not keep counting toward a put-back that is
|
|
137
|
+
* never coming) and the strike ledger (which must not go on suppressing a
|
|
138
|
+
* strike the subscriber withdrew).
|
|
139
|
+
*/ export const COUNTER_NOTICE_TERMINAL_STATUSES = [
|
|
140
|
+
'suitFiled',
|
|
141
|
+
'withdrawn',
|
|
142
|
+
'rejected'
|
|
143
|
+
];
|
|
144
|
+
const fail = (code, message)=>({
|
|
145
|
+
ok: false,
|
|
146
|
+
code,
|
|
147
|
+
message
|
|
148
|
+
});
|
|
149
|
+
const text = (value, max)=>typeof value === 'string' ? value.trim().slice(0, max) : '';
|
|
150
|
+
/**
|
|
151
|
+
* Truthy checkbox, matching {@link validateAbuseReport}'s reading exactly.
|
|
152
|
+
*
|
|
153
|
+
* A no-JavaScript HTML form sends `on` for a ticked box and omits the field
|
|
154
|
+
* entirely when unticked; a JSON client sends `true`. The two must mean the
|
|
155
|
+
* same thing, or a sworn statement would depend on how the subscriber's
|
|
156
|
+
* browser is configured — and here the stakes are higher than on the notice
|
|
157
|
+
* side, because the person filing this one is our own locked-out customer.
|
|
158
|
+
*/ const checked = (value)=>value === true || value === 'on' || value === 'true' || value === '1' || value === 'yes';
|
|
159
|
+
/** `AR-XXXXXXXXXX` as minted by the abuse intake, or `null`. */ export function normalizeNoticeReference(value) {
|
|
160
|
+
const raw = text(value, 64).toUpperCase();
|
|
161
|
+
if (!raw) return null;
|
|
162
|
+
const match = /^(?:AR-)?([A-F0-9]{4,40})$/.exec(raw);
|
|
163
|
+
return match ? `AR-${match[1]}` : null;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Validate and normalize a submitted counter-notice.
|
|
167
|
+
*
|
|
168
|
+
* Accepts the shape of BOTH a JSON body and a urlencoded no-JS form post.
|
|
169
|
+
*
|
|
170
|
+
* Unlike {@link validateAbuseReport}, the bar here is deliberately HIGH, and
|
|
171
|
+
* for the opposite reason to the one that keeps the notice bar low. A missing
|
|
172
|
+
* field on an abuse report costs us a report; a missing element on a
|
|
173
|
+
* counter-notice makes the document legally ineffective, so accepting it
|
|
174
|
+
* would be worse than refusing it — we would owe the complainant a forward
|
|
175
|
+
* and the subscriber a restoration on the strength of a paper that does not
|
|
176
|
+
* do what it has to do. Refusing tells the subscriber what to add while they
|
|
177
|
+
* are still in front of the form.
|
|
178
|
+
*
|
|
179
|
+
* The `normalizeUrl` dependency is injected rather than imported so this
|
|
180
|
+
* module does not reach across into the notice side for one function; the
|
|
181
|
+
* route hands it `normalizeReportedUrl`, which already refuses `javascript:`
|
|
182
|
+
* and `data:` for the stored-XSS reason recorded there.
|
|
183
|
+
*/ export function validateCounterNotice(payload, normalizeUrl, hostnameOf) {
|
|
184
|
+
const url = normalizeUrl(payload['url']);
|
|
185
|
+
if (!url) {
|
|
186
|
+
return fail('url', 'Enter the full web address the removed material appeared at, starting with https://.');
|
|
187
|
+
}
|
|
188
|
+
const material = text(payload['material'], COUNTER_NOTICE_MAX_DETAILS);
|
|
189
|
+
if (material.length < 10) {
|
|
190
|
+
return fail('material', 'Describe the material that was removed and where it was on your site.');
|
|
191
|
+
}
|
|
192
|
+
const name = text(payload['name'], COUNTER_NOTICE_MAX_CONTACT);
|
|
193
|
+
if (!name) {
|
|
194
|
+
return fail('name', 'Enter your full legal name.');
|
|
195
|
+
}
|
|
196
|
+
const address = text(payload['address'], COUNTER_NOTICE_MAX_ADDRESS);
|
|
197
|
+
if (address.length < 10) {
|
|
198
|
+
return fail('address', 'Enter your full postal address — the law requires it, and it decides which court would hear a dispute.');
|
|
199
|
+
}
|
|
200
|
+
const phone = text(payload['phone'], COUNTER_NOTICE_MAX_CONTACT);
|
|
201
|
+
if (!phone) {
|
|
202
|
+
return fail('phone', 'Enter a telephone number the complainant can reach you on.');
|
|
203
|
+
}
|
|
204
|
+
const email = text(payload['email'], COUNTER_NOTICE_MAX_CONTACT);
|
|
205
|
+
if (!email || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
|
|
206
|
+
return fail('email', 'Enter an email address we can reply to.');
|
|
207
|
+
}
|
|
208
|
+
const signature = text(payload['signature'], COUNTER_NOTICE_MAX_CONTACT);
|
|
209
|
+
if (!signature) {
|
|
210
|
+
return fail('signature', 'Type your full legal name — it stands as your electronic signature.');
|
|
211
|
+
}
|
|
212
|
+
if (!checked(payload['goodFaithMistake'])) {
|
|
213
|
+
return fail('goodFaithMistake', 'A counter-notice needs the statement, under penalty of perjury, that the material was removed by mistake or misidentification.');
|
|
214
|
+
}
|
|
215
|
+
if (!checked(payload['consentJurisdiction'])) {
|
|
216
|
+
return fail('consentJurisdiction', 'A counter-notice needs your consent to the jurisdiction of the Federal District Court for your address.');
|
|
217
|
+
}
|
|
218
|
+
if (!checked(payload['acceptService'])) {
|
|
219
|
+
return fail('acceptService', 'A counter-notice needs your agreement to accept service of process from the person who complained.');
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
ok: true,
|
|
223
|
+
value: {
|
|
224
|
+
signature,
|
|
225
|
+
material,
|
|
226
|
+
url,
|
|
227
|
+
reportedHostname: hostnameOf(url),
|
|
228
|
+
reference: normalizeNoticeReference(payload['reference']),
|
|
229
|
+
name,
|
|
230
|
+
address,
|
|
231
|
+
phone,
|
|
232
|
+
email,
|
|
233
|
+
goodFaithMistake: true,
|
|
234
|
+
consentJurisdiction: true,
|
|
235
|
+
acceptService: true
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* The put-back schedule for a counter-notice received at `receivedAtMs`.
|
|
241
|
+
*
|
|
242
|
+
* Returns all three boundaries rather than just the one we act on, because
|
|
243
|
+
* the other two are what let a staff surface — and, later, an argument —
|
|
244
|
+
* show that the instant we chose sits inside the window the statute drew,
|
|
245
|
+
* instead of asserting it.
|
|
246
|
+
*/ export function counterNoticeClock(receivedAtMs) {
|
|
247
|
+
return {
|
|
248
|
+
receivedAtMs,
|
|
249
|
+
earliestMs: addBusinessDays(receivedAtMs, COUNTER_NOTICE_MIN_BUSINESS_DAYS),
|
|
250
|
+
restoreAtMs: addBusinessDays(receivedAtMs, COUNTER_NOTICE_RESTORE_BUSINESS_DAYS),
|
|
251
|
+
latestMs: addBusinessDays(receivedAtMs, COUNTER_NOTICE_MAX_BUSINESS_DAYS)
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Is this counter-notice still heading for a restoration?
|
|
256
|
+
*
|
|
257
|
+
* `false` for the three terminal statuses — the complainant went to court,
|
|
258
|
+
* the subscriber withdrew, or the submission was not a counter-notice. A
|
|
259
|
+
* `restored` row is also done: the put-back already happened, and a scheduler
|
|
260
|
+
* that kept acting on it would re-lift a suspension staff may have re-imposed
|
|
261
|
+
* for an entirely different reason.
|
|
262
|
+
*
|
|
263
|
+
* Returns a plain `boolean`, NOT a `status is CounterNoticeStatus` predicate,
|
|
264
|
+
* and the distinction is not cosmetic. This answers a question about a SUBSET
|
|
265
|
+
* of the statuses — `restored` is a perfectly valid `CounterNoticeStatus` and
|
|
266
|
+
* still gets `false` — so a type predicate here would be a lie the compiler
|
|
267
|
+
* believes: narrowing on it would hand a caller a type that includes the very
|
|
268
|
+
* values the function just rejected. `strictNullChecks` is off repo-wide,
|
|
269
|
+
* which already makes boolean-discriminant narrowing unreliable in this
|
|
270
|
+
* codebase; a predicate that is wrong even when narrowing DOES fire is worse
|
|
271
|
+
* than none. Callers ask this as a question and branch on the answer.
|
|
272
|
+
*/ export function counterNoticeAwaitsRestoration(status) {
|
|
273
|
+
return isCounterNoticeStatus(status) && status !== 'restored' && !COUNTER_NOTICE_TERMINAL_STATUSES.includes(status);
|
|
274
|
+
}
|
|
275
|
+
export default validateCounterNotice;
|
|
276
|
+
|
|
277
|
+
//# sourceMappingURL=dmca-counter-notice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/dmca-counter-notice.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 * DMCA COUNTER-NOTICE — the put-back half of §512 (AGL-1983).\n *\n * AGL-1964 built the intake, so we can RECEIVE a copyright notice; AGL-1965\n * made a host-scope takedown actually stick in Firestore rules, so we can\n * ENFORCE one. Those two together are the dangerous shape: we could take a\n * customer's site down and had no lawful way to put it back. §512(g) is the\n * procedure that closes it, and it is also the thing that shields us from\n * being sued by our own customer for the takedown we performed on somebody\n * else's say-so.\n *\n * ## The clock is the feature\n *\n * §512(g)(2) is not \"accept a form\". It is a sequence with a deadline in it:\n *\n * (A) promptly send the complainant a copy of the counter-notice and tell\n * them the material goes back up;\n * (B) put it back **not less than 10 nor more than 14 business days** after\n * receiving the counter-notice, UNLESS the complainant first tells us\n * they have filed an action seeking a court order.\n *\n * A counter-notice route that recorded a submission and left restoration to\n * whoever next reads the queue is not that procedure — it is a form that\n * makes us feel compliant while a customer stays locked out. So the artefact\n * this module produces is a **scheduled reversal**: {@link counterNoticeClock}\n * computes the two boundaries, and the caller stamps the restore instant onto\n * the suspension's own `suspendedUntilMs` so the lock lifts itself.\n *\n * That is why AGL-1981 had to be fixed in the same pass. Until it was,\n * `suspendedUntilMs` was honoured by the server-side lockdown helpers and\n * ignored by Firestore rules — so a \"restored\" site would have come back,\n * served traffic, and refused every client write, which is the whole\n * authoring experience. Scheduling a restoration onto a mechanism that never\n * fires is theatre, and it would have been indistinguishable from working\n * right up until a customer tried to edit.\n *\n * ## Why 12 business days and not 10\n *\n * The statute gives a WINDOW, not an instant, and the window is the slack\n * that makes an honest implementation possible. Counting business days by\n * skipping weekends alone is simple and testable, but it treats a federal\n * holiday as a working day — so a weekend-only count of 10 can land on fewer\n * than 10 true business days, which is the one direction that is unlawful\n * (restoring too early denies the complainant days the statute gives them).\n *\n * Rather than carry a holiday calendar that would need maintaining every\n * year — and would be wrong for a year nobody updated — we target the middle\n * of the window. A weekend-only count is always an OVER-estimate of true\n * business days elapsed, never an under-estimate: holidays only ever remove\n * working days. So:\n *\n * - 12 weekend-only business days is at most 12 true business days, which is\n * inside the 14-day ceiling however the holidays fall;\n * - it is at least 10 true business days unless three or more federal\n * holidays fall inside one ~17-calendar-day span, which no pair of US\n * federal holidays is close enough to produce (the tightest is Dec 25 /\n * Jan 1, which is two).\n *\n * So the arithmetic satisfies both bounds without knowing what day\n * Thanksgiving is. {@link COUNTER_NOTICE_RESTORE_BUSINESS_DAYS} carries the\n * number and this reasoning travels with it.\n *\n * ## What this module refuses to decide\n *\n * Nothing here adjudicates. It does not judge whether the counter-notice is\n * truthful, and it must not: §512's whole design is that the provider is a\n * conduit that follows a procedure, and a provider who starts weighing the\n * merits is a provider making itself a party. It records what was sworn, by\n * whom, when, and what that obliges us to do next.\n */\n\n/**\n * The weekend-skipping day arithmetic, borrowed from the support-SLA clock\n * rather than restated.\n *\n * `support-tiers.ts` already needed exactly this — UTC, Saturday and Sunday\n * skipped, holidays deliberately unknown — and carries the same reasoning\n * about why a half-right holiday calendar is worse than none. Two copies of a\n * date rule are two chances to disagree about which day a deadline falls on,\n * and this one decides when a customer's site comes back.\n */\nimport { addBusinessDays } from './support-tiers'\n\n/** Firestore collection holding counter-notices. Staff-read, Admin-SDK-written. */\nexport const DMCA_COUNTER_NOTICE_COLLECTION = 'dmcaCounterNotices'\n\n/**\n * Business days from receipt to automatic restoration.\n *\n * Inside §512(g)(2)(C)'s 10-to-14 window with room for holidays at both ends.\n * See the module comment for why the middle of the window is the safe target\n * for a weekend-only counter.\n */\nexport const COUNTER_NOTICE_RESTORE_BUSINESS_DAYS = 12\n\n/** The statutory floor, kept for the record we show staff and the complainant. */\nexport const COUNTER_NOTICE_MIN_BUSINESS_DAYS = 10\n/** The statutory ceiling. Restoration later than this is its own violation. */\nexport const COUNTER_NOTICE_MAX_BUSINESS_DAYS = 14\n\n/** Maximum characters of subscriber prose stored. */\nexport const COUNTER_NOTICE_MAX_DETAILS = 5000\n/** Maximum length of a contact field. */\nexport const COUNTER_NOTICE_MAX_CONTACT = 254\n/** Maximum length of the postal address — a jurisdiction fact, not free text. */\nexport const COUNTER_NOTICE_MAX_ADDRESS = 1000\n\n/**\n * The workflow states a counter-notice moves through.\n *\n * `received` → `forwarded` is the §512(g)(2)(A) obligation discharged, and it\n * is the transition that starts the clock in the record. `restored` is the\n * put-back having happened; `withdrawn` is the subscriber taking it back;\n * `suitFiled` is the one lawful reason NOT to restore — the complainant told\n * us they went to court, and the material stays down.\n *\n * `rejected` exists for a submission that is not a counter-notice at all\n * (blank statutory elements survive validation only as a malformed row, and a\n * mis-filed support question does not belong in a legal queue). It is\n * deliberately NOT a merits judgement, and the staff surface says so.\n */\nexport const COUNTER_NOTICE_STATUSES = [\n 'received',\n 'forwarded',\n 'restored',\n 'suitFiled',\n 'withdrawn',\n 'rejected',\n] as const\nexport type CounterNoticeStatus = (typeof COUNTER_NOTICE_STATUSES)[number]\n\nexport function isCounterNoticeStatus(\n value: unknown,\n): value is CounterNoticeStatus {\n return (\n typeof value === 'string' &&\n (COUNTER_NOTICE_STATUSES as readonly string[]).includes(value)\n )\n}\n\n/**\n * The statuses that mean this counter-notice will NOT lead to a restoration.\n *\n * Named rather than open-coded because two different places have to agree\n * about it: the clock (which must not keep counting toward a put-back that is\n * never coming) and the strike ledger (which must not go on suppressing a\n * strike the subscriber withdrew).\n */\nexport const COUNTER_NOTICE_TERMINAL_STATUSES: readonly CounterNoticeStatus[] = [\n 'suitFiled',\n 'withdrawn',\n 'rejected',\n]\n\n/**\n * The §512(g)(3) elements, after validation.\n *\n * Each field is one of the statute's four subparagraphs, and the names say\n * which. Collecting them as prose next to a tick-box is the ordinary web-form\n * rendering of a sworn document — the same shape `AbuseReportDmcaAffirmations`\n * takes for the notice on the other side.\n */\nexport interface CounterNoticeInput {\n /** (A) Typed name standing as the electronic signature. */\n signature: string\n /**\n * (B) Identification of the material removed and where it appeared before\n * removal. The URL is captured separately so staff can act on it directly.\n */\n material: string\n /** (B) The location the material appeared at, normalized to an http(s) URL. */\n url: string\n /** Hostname of {@link url}, so the row can be joined to a host. */\n reportedHostname: string\n /**\n * Our own reference for the notice being answered (`AR-…`), when the\n * subscriber has it. Optional: a subscriber who lost the email must still be\n * able to file, and staff can match on the URL.\n */\n reference: string | null\n /** (D) Subscriber's legal name. */\n name: string\n /** (D) Subscriber's postal address — the address that fixes the district. */\n address: string\n /** (D) Subscriber's telephone number. */\n phone: string\n /** Reply address. Not statutory, but the channel the procedure runs on. */\n email: string\n /**\n * (C) \"Under penalty of perjury, I have a good faith belief the material was\n * removed as a result of mistake or misidentification.\"\n */\n goodFaithMistake: boolean\n /**\n * (D) Consent to the jurisdiction of the Federal District Court for the\n * district of the given address — or, for a subscriber outside the United\n * States, any district in which we may be found.\n */\n consentJurisdiction: boolean\n /** (D) Agreement to accept service of process from the complainant. */\n acceptService: boolean\n}\n\nexport interface CounterNoticeValidationFailure {\n ok: false\n /** Stable machine code, for tests and for the form to highlight a field. */\n code: string\n /** Sentence shown to the subscriber. */\n message: string\n}\n\nexport interface CounterNoticeValidationSuccess {\n ok: true\n value: CounterNoticeInput\n}\n\nexport type CounterNoticeValidation =\n | CounterNoticeValidationSuccess\n | CounterNoticeValidationFailure\n\nconst fail = (\n code: string,\n message: string,\n): CounterNoticeValidationFailure => ({ ok: false, code, message })\n\nconst text = (value: unknown, max: number): string =>\n typeof value === 'string' ? value.trim().slice(0, max) : ''\n\n/**\n * Truthy checkbox, matching {@link validateAbuseReport}'s reading exactly.\n *\n * A no-JavaScript HTML form sends `on` for a ticked box and omits the field\n * entirely when unticked; a JSON client sends `true`. The two must mean the\n * same thing, or a sworn statement would depend on how the subscriber's\n * browser is configured — and here the stakes are higher than on the notice\n * side, because the person filing this one is our own locked-out customer.\n */\nconst checked = (value: unknown): boolean =>\n value === true ||\n value === 'on' ||\n value === 'true' ||\n value === '1' ||\n value === 'yes'\n\n/** `AR-XXXXXXXXXX` as minted by the abuse intake, or `null`. */\nexport function normalizeNoticeReference(value: unknown): string | null {\n const raw = text(value, 64).toUpperCase()\n if (!raw) return null\n const match = /^(?:AR-)?([A-F0-9]{4,40})$/.exec(raw)\n return match ? `AR-${match[1]}` : null\n}\n\n/**\n * Validate and normalize a submitted counter-notice.\n *\n * Accepts the shape of BOTH a JSON body and a urlencoded no-JS form post.\n *\n * Unlike {@link validateAbuseReport}, the bar here is deliberately HIGH, and\n * for the opposite reason to the one that keeps the notice bar low. A missing\n * field on an abuse report costs us a report; a missing element on a\n * counter-notice makes the document legally ineffective, so accepting it\n * would be worse than refusing it — we would owe the complainant a forward\n * and the subscriber a restoration on the strength of a paper that does not\n * do what it has to do. Refusing tells the subscriber what to add while they\n * are still in front of the form.\n *\n * The `normalizeUrl` dependency is injected rather than imported so this\n * module does not reach across into the notice side for one function; the\n * route hands it `normalizeReportedUrl`, which already refuses `javascript:`\n * and `data:` for the stored-XSS reason recorded there.\n */\nexport function validateCounterNotice(\n payload: Record<string, unknown>,\n normalizeUrl: (value: unknown) => string | null,\n hostnameOf: (url: string) => string,\n): CounterNoticeValidation {\n const url = normalizeUrl(payload['url'])\n if (!url) {\n return fail(\n 'url',\n 'Enter the full web address the removed material appeared at, starting with https://.',\n )\n }\n\n const material = text(payload['material'], COUNTER_NOTICE_MAX_DETAILS)\n if (material.length < 10) {\n return fail(\n 'material',\n 'Describe the material that was removed and where it was on your site.',\n )\n }\n\n const name = text(payload['name'], COUNTER_NOTICE_MAX_CONTACT)\n if (!name) {\n return fail('name', 'Enter your full legal name.')\n }\n\n const address = text(payload['address'], COUNTER_NOTICE_MAX_ADDRESS)\n if (address.length < 10) {\n return fail(\n 'address',\n 'Enter your full postal address — the law requires it, and it decides which court would hear a dispute.',\n )\n }\n\n const phone = text(payload['phone'], COUNTER_NOTICE_MAX_CONTACT)\n if (!phone) {\n return fail('phone', 'Enter a telephone number the complainant can reach you on.')\n }\n\n const email = text(payload['email'], COUNTER_NOTICE_MAX_CONTACT)\n if (!email || !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) {\n return fail('email', 'Enter an email address we can reply to.')\n }\n\n const signature = text(payload['signature'], COUNTER_NOTICE_MAX_CONTACT)\n if (!signature) {\n return fail(\n 'signature',\n 'Type your full legal name — it stands as your electronic signature.',\n )\n }\n\n if (!checked(payload['goodFaithMistake'])) {\n return fail(\n 'goodFaithMistake',\n 'A counter-notice needs the statement, under penalty of perjury, that the material was removed by mistake or misidentification.',\n )\n }\n if (!checked(payload['consentJurisdiction'])) {\n return fail(\n 'consentJurisdiction',\n 'A counter-notice needs your consent to the jurisdiction of the Federal District Court for your address.',\n )\n }\n if (!checked(payload['acceptService'])) {\n return fail(\n 'acceptService',\n 'A counter-notice needs your agreement to accept service of process from the person who complained.',\n )\n }\n\n return {\n ok: true,\n value: {\n signature,\n material,\n url,\n reportedHostname: hostnameOf(url),\n reference: normalizeNoticeReference(payload['reference']),\n name,\n address,\n phone,\n email,\n goodFaithMistake: true,\n consentJurisdiction: true,\n acceptService: true,\n },\n }\n}\n\n/** The three instants §512(g)(2)(C) defines, relative to receipt. */\nexport interface CounterNoticeClock {\n /** When we received the counter-notice. The statute counts from here. */\n receivedAtMs: number\n /** The statutory floor — restoring before this is too early. */\n earliestMs: number\n /** When we will actually restore access. */\n restoreAtMs: number\n /** The statutory ceiling — restoring after this is too late. */\n latestMs: number\n}\n\n/**\n * The put-back schedule for a counter-notice received at `receivedAtMs`.\n *\n * Returns all three boundaries rather than just the one we act on, because\n * the other two are what let a staff surface — and, later, an argument —\n * show that the instant we chose sits inside the window the statute drew,\n * instead of asserting it.\n */\nexport function counterNoticeClock(receivedAtMs: number): CounterNoticeClock {\n return {\n receivedAtMs,\n earliestMs: addBusinessDays(receivedAtMs, COUNTER_NOTICE_MIN_BUSINESS_DAYS),\n restoreAtMs: addBusinessDays(\n receivedAtMs,\n COUNTER_NOTICE_RESTORE_BUSINESS_DAYS,\n ),\n latestMs: addBusinessDays(receivedAtMs, COUNTER_NOTICE_MAX_BUSINESS_DAYS),\n }\n}\n\n/**\n * Is this counter-notice still heading for a restoration?\n *\n * `false` for the three terminal statuses — the complainant went to court,\n * the subscriber withdrew, or the submission was not a counter-notice. A\n * `restored` row is also done: the put-back already happened, and a scheduler\n * that kept acting on it would re-lift a suspension staff may have re-imposed\n * for an entirely different reason.\n *\n * Returns a plain `boolean`, NOT a `status is CounterNoticeStatus` predicate,\n * and the distinction is not cosmetic. This answers a question about a SUBSET\n * of the statuses — `restored` is a perfectly valid `CounterNoticeStatus` and\n * still gets `false` — so a type predicate here would be a lie the compiler\n * believes: narrowing on it would hand a caller a type that includes the very\n * values the function just rejected. `strictNullChecks` is off repo-wide,\n * which already makes boolean-discriminant narrowing unreliable in this\n * codebase; a predicate that is wrong even when narrowing DOES fire is worse\n * than none. Callers ask this as a question and branch on the answer.\n */\nexport function counterNoticeAwaitsRestoration(status: unknown): boolean {\n return (\n isCounterNoticeStatus(status) &&\n status !== 'restored' &&\n !COUNTER_NOTICE_TERMINAL_STATUSES.includes(status)\n )\n}\n\nexport default validateCounterNotice\n"],"names":["addBusinessDays","DMCA_COUNTER_NOTICE_COLLECTION","COUNTER_NOTICE_RESTORE_BUSINESS_DAYS","COUNTER_NOTICE_MIN_BUSINESS_DAYS","COUNTER_NOTICE_MAX_BUSINESS_DAYS","COUNTER_NOTICE_MAX_DETAILS","COUNTER_NOTICE_MAX_CONTACT","COUNTER_NOTICE_MAX_ADDRESS","COUNTER_NOTICE_STATUSES","isCounterNoticeStatus","value","includes","COUNTER_NOTICE_TERMINAL_STATUSES","fail","code","message","ok","text","max","trim","slice","checked","normalizeNoticeReference","raw","toUpperCase","match","exec","validateCounterNotice","payload","normalizeUrl","hostnameOf","url","material","length","name","address","phone","email","test","signature","reportedHostname","reference","goodFaithMistake","consentJurisdiction","acceptService","counterNoticeClock","receivedAtMs","earliestMs","restoreAtMs","latestMs","counterNoticeAwaitsRestoration","status"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqEC,GAED;;;;;;;;;CASC,GACD,SAASA,eAAe,QAAQ,qBAAiB;AAEjD,iFAAiF,GACjF,OAAO,MAAMC,iCAAiC,qBAAoB;AAElE;;;;;;CAMC,GACD,OAAO,MAAMC,uCAAuC,GAAE;AAEtD,gFAAgF,GAChF,OAAO,MAAMC,mCAAmC,GAAE;AAClD,6EAA6E,GAC7E,OAAO,MAAMC,mCAAmC,GAAE;AAElD,mDAAmD,GACnD,OAAO,MAAMC,6BAA6B,KAAI;AAC9C,uCAAuC,GACvC,OAAO,MAAMC,6BAA6B,IAAG;AAC7C,+EAA+E,GAC/E,OAAO,MAAMC,6BAA6B,KAAI;AAE9C;;;;;;;;;;;;;CAaC,GACD,OAAO,MAAMC,0BAA0B;IACrC;IACA;IACA;IACA;IACA;IACA;CACD,CAAS;AAGV,OAAO,SAASC,sBACdC,KAAc;IAEd,OACE,OAAOA,UAAU,YACjB,AAACF,wBAA8CG,QAAQ,CAACD;AAE5D;AAEA;;;;;;;CAOC,GACD,OAAO,MAAME,mCAAmE;IAC9E;IACA;IACA;CACD,CAAA;AAoED,MAAMC,OAAO,CACXC,MACAC,UACoC,CAAA;QAAEC,IAAI;QAAOF;QAAMC;IAAQ,CAAA;AAEjE,MAAME,OAAO,CAACP,OAAgBQ,MAC5B,OAAOR,UAAU,WAAWA,MAAMS,IAAI,GAAGC,KAAK,CAAC,GAAGF,OAAO;AAE3D;;;;;;;;CAQC,GACD,MAAMG,UAAU,CAACX,QACfA,UAAU,QACVA,UAAU,QACVA,UAAU,UACVA,UAAU,OACVA,UAAU;AAEZ,8DAA8D,GAC9D,OAAO,SAASY,yBAAyBZ,KAAc;IACrD,MAAMa,MAAMN,KAAKP,OAAO,IAAIc,WAAW;IACvC,IAAI,CAACD,KAAK,OAAO;IACjB,MAAME,QAAQ,6BAA6BC,IAAI,CAACH;IAChD,OAAOE,QAAQ,CAAC,GAAG,EAAEA,KAAK,CAAC,EAAE,EAAE,GAAG;AACpC;AAEA;;;;;;;;;;;;;;;;;;CAkBC,GACD,OAAO,SAASE,sBACdC,OAAgC,EAChCC,YAA+C,EAC/CC,UAAmC;IAEnC,MAAMC,MAAMF,aAAaD,OAAO,CAAC,MAAM;IACvC,IAAI,CAACG,KAAK;QACR,OAAOlB,KACL,OACA;IAEJ;IAEA,MAAMmB,WAAWf,KAAKW,OAAO,CAAC,WAAW,EAAEvB;IAC3C,IAAI2B,SAASC,MAAM,GAAG,IAAI;QACxB,OAAOpB,KACL,YACA;IAEJ;IAEA,MAAMqB,OAAOjB,KAAKW,OAAO,CAAC,OAAO,EAAEtB;IACnC,IAAI,CAAC4B,MAAM;QACT,OAAOrB,KAAK,QAAQ;IACtB;IAEA,MAAMsB,UAAUlB,KAAKW,OAAO,CAAC,UAAU,EAAErB;IACzC,IAAI4B,QAAQF,MAAM,GAAG,IAAI;QACvB,OAAOpB,KACL,WACA;IAEJ;IAEA,MAAMuB,QAAQnB,KAAKW,OAAO,CAAC,QAAQ,EAAEtB;IACrC,IAAI,CAAC8B,OAAO;QACV,OAAOvB,KAAK,SAAS;IACvB;IAEA,MAAMwB,QAAQpB,KAAKW,OAAO,CAAC,QAAQ,EAAEtB;IACrC,IAAI,CAAC+B,SAAS,CAAC,6BAA6BC,IAAI,CAACD,QAAQ;QACvD,OAAOxB,KAAK,SAAS;IACvB;IAEA,MAAM0B,YAAYtB,KAAKW,OAAO,CAAC,YAAY,EAAEtB;IAC7C,IAAI,CAACiC,WAAW;QACd,OAAO1B,KACL,aACA;IAEJ;IAEA,IAAI,CAACQ,QAAQO,OAAO,CAAC,mBAAmB,GAAG;QACzC,OAAOf,KACL,oBACA;IAEJ;IACA,IAAI,CAACQ,QAAQO,OAAO,CAAC,sBAAsB,GAAG;QAC5C,OAAOf,KACL,uBACA;IAEJ;IACA,IAAI,CAACQ,QAAQO,OAAO,CAAC,gBAAgB,GAAG;QACtC,OAAOf,KACL,iBACA;IAEJ;IAEA,OAAO;QACLG,IAAI;QACJN,OAAO;YACL6B;YACAP;YACAD;YACAS,kBAAkBV,WAAWC;YAC7BU,WAAWnB,yBAAyBM,OAAO,CAAC,YAAY;YACxDM;YACAC;YACAC;YACAC;YACAK,kBAAkB;YAClBC,qBAAqB;YACrBC,eAAe;QACjB;IACF;AACF;AAcA;;;;;;;CAOC,GACD,OAAO,SAASC,mBAAmBC,YAAoB;IACrD,OAAO;QACLA;QACAC,YAAY/C,gBAAgB8C,cAAc3C;QAC1C6C,aAAahD,gBACX8C,cACA5C;QAEF+C,UAAUjD,gBAAgB8C,cAAc1C;IAC1C;AACF;AAEA;;;;;;;;;;;;;;;;;;CAkBC,GACD,OAAO,SAAS8C,+BAA+BC,MAAe;IAC5D,OACE1C,sBAAsB0C,WACtBA,WAAW,cACX,CAACvC,iCAAiCD,QAAQ,CAACwC;AAE/C;AAEA,eAAexB,sBAAqB"}
|