@aglyn/aglyn 1.0.0-beta.217 → 1.0.0-beta.219
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/package.json +14 -14
- package/src/lib/app-utils/actions.d.ts +25 -374
- package/src/lib/app-utils/actions.js +101 -561
- package/src/lib/app-utils/actions.js.map +1 -1
- package/src/lib/app-utils/activity-presenter.d.ts +3 -3
- package/src/lib/app-utils/activity-presenter.js +36 -52
- package/src/lib/app-utils/activity-presenter.js.map +1 -1
- package/src/lib/app-utils/admin-audit-index.js +2 -2
- package/src/lib/app-utils/admin-audit-index.js.map +1 -1
- package/src/lib/app-utils/analytics-events.d.ts +11 -2
- package/src/lib/app-utils/analytics-events.js +11 -2
- package/src/lib/app-utils/analytics-events.js.map +1 -1
- package/src/lib/app-utils/analytics-provider.d.ts +182 -0
- package/src/lib/app-utils/analytics-provider.js +133 -0
- package/src/lib/app-utils/analytics-provider.js.map +1 -0
- package/src/lib/app-utils/api-plugins.d.ts +46 -0
- package/src/lib/app-utils/api-plugins.js +19 -0
- package/src/lib/app-utils/api-plugins.js.map +1 -1
- package/src/lib/app-utils/{marketplace-overrides.d.ts → artifact-overrides.d.ts} +9 -6
- package/src/lib/app-utils/{marketplace-overrides.js → artifact-overrides.js} +10 -7
- package/src/lib/app-utils/artifact-overrides.js.map +1 -0
- package/src/lib/app-utils/{marketplace-provenance.d.ts → artifact-provenance.d.ts} +12 -10
- package/src/lib/app-utils/{marketplace-provenance.js → artifact-provenance.js} +9 -7
- package/src/lib/app-utils/artifact-provenance.js.map +1 -0
- package/src/lib/app-utils/assist-credits.js +2 -1
- package/src/lib/app-utils/assist-credits.js.map +1 -1
- package/src/lib/app-utils/binding-token-catalog.d.ts +5 -13
- package/src/lib/app-utils/binding-token-catalog.js +17 -41
- package/src/lib/app-utils/binding-token-catalog.js.map +1 -1
- package/src/lib/app-utils/binding-tokens.js +1 -1
- package/src/lib/app-utils/binding-tokens.js.map +1 -1
- package/src/lib/app-utils/brand-support-line.d.ts +36 -0
- package/src/lib/app-utils/brand-support-line.js +38 -0
- package/src/lib/app-utils/brand-support-line.js.map +1 -0
- package/src/lib/app-utils/campaign-touch.d.ts +5 -5
- package/src/lib/app-utils/campaign-touch.js +8 -8
- package/src/lib/app-utils/campaign-touch.js.map +1 -1
- package/src/lib/app-utils/collection-entries.d.ts +2 -2
- package/src/lib/app-utils/collection-entries.js.map +1 -1
- package/src/lib/app-utils/consent-group-change.d.ts +4 -0
- package/src/lib/app-utils/consent-group-change.js.map +1 -1
- package/src/lib/app-utils/console-record-links.d.ts +10 -89
- package/src/lib/app-utils/console-record-links.js +3 -107
- package/src/lib/app-utils/console-record-links.js.map +1 -1
- package/src/lib/app-utils/console-routes.d.ts +16 -7
- package/src/lib/app-utils/console-routes.js +9 -3
- package/src/lib/app-utils/console-routes.js.map +1 -1
- package/src/lib/app-utils/contacts.d.ts +23 -1
- package/src/lib/app-utils/contacts.js +21 -5
- package/src/lib/app-utils/contacts.js.map +1 -1
- package/src/lib/app-utils/cross-pool-desync.d.ts +39 -0
- package/src/lib/app-utils/cross-pool-desync.js +47 -0
- package/src/lib/app-utils/cross-pool-desync.js.map +1 -0
- package/src/lib/app-utils/csv-upload.d.ts +29 -0
- package/src/lib/app-utils/csv-upload.js +29 -0
- package/src/lib/app-utils/csv-upload.js.map +1 -0
- package/src/lib/app-utils/dataset-models.d.ts +5 -5
- package/src/lib/app-utils/dataset-models.js +19 -2
- package/src/lib/app-utils/dataset-models.js.map +1 -1
- package/src/lib/app-utils/datasets.d.ts +65 -11
- package/src/lib/app-utils/datasets.js +74 -11
- package/src/lib/app-utils/datasets.js.map +1 -1
- package/src/lib/app-utils/docs-deflection.d.ts +6 -6
- package/src/lib/app-utils/docs-deflection.js.map +1 -1
- package/src/lib/app-utils/docs-help.generated.d.ts +12 -6
- package/src/lib/app-utils/docs-help.generated.js +21 -6
- package/src/lib/app-utils/docs-help.generated.js.map +1 -1
- package/src/lib/app-utils/docs-index.generated.d.ts +2 -2
- package/src/lib/app-utils/docs-index.generated.js +514 -318
- package/src/lib/app-utils/docs-index.generated.js.map +1 -1
- package/src/lib/app-utils/docs-retrieval.d.ts +3 -3
- package/src/lib/app-utils/docs-retrieval.js +14 -10
- package/src/lib/app-utils/docs-retrieval.js.map +1 -1
- package/src/lib/app-utils/duplicate-resource.d.ts +4 -1
- package/src/lib/app-utils/duplicate-resource.js +7 -4
- package/src/lib/app-utils/duplicate-resource.js.map +1 -1
- package/src/lib/app-utils/dynamic-list-rule.d.ts +1 -1
- package/src/lib/app-utils/dynamic-list-rule.js.map +1 -1
- package/src/lib/app-utils/element-ui.d.ts +1 -1
- package/src/lib/app-utils/element-ui.js +1 -1
- package/src/lib/app-utils/element-ui.js.map +1 -1
- package/src/lib/app-utils/email-starter-policy.js +3 -3
- package/src/lib/app-utils/email-starter-policy.js.map +1 -1
- package/src/lib/app-utils/entity-picker-context.d.ts +10 -5
- package/src/lib/app-utils/entity-picker-context.js.map +1 -1
- package/src/lib/app-utils/error-beacon.d.ts +75 -6
- package/src/lib/app-utils/error-beacon.js +160 -21
- package/src/lib/app-utils/error-beacon.js.map +1 -1
- package/src/lib/app-utils/expand-repeatables.d.ts +10 -10
- package/src/lib/app-utils/expand-repeatables.js +10 -10
- package/src/lib/app-utils/expand-repeatables.js.map +1 -1
- package/src/lib/app-utils/host-events.d.ts +82 -0
- package/src/lib/app-utils/host-events.js +62 -0
- package/src/lib/app-utils/host-events.js.map +1 -0
- package/src/lib/app-utils/lockdown.d.ts +33 -1
- package/src/lib/app-utils/lockdown.js +45 -4
- package/src/lib/app-utils/lockdown.js.map +1 -1
- package/src/lib/app-utils/margin-utilization.d.ts +4 -69
- package/src/lib/app-utils/margin-utilization.js +82 -69
- package/src/lib/app-utils/margin-utilization.js.map +1 -1
- package/src/lib/app-utils/node-definition-sanitizer.d.ts +16 -16
- package/src/lib/app-utils/node-definition-sanitizer.js +24 -20
- package/src/lib/app-utils/node-definition-sanitizer.js.map +1 -1
- package/src/lib/app-utils/node-interactions.d.ts +7 -7
- package/src/lib/app-utils/node-interactions.js.map +1 -1
- package/src/lib/app-utils/notifications.d.ts +78 -47
- package/src/lib/app-utils/notifications.js +63 -44
- package/src/lib/app-utils/notifications.js.map +1 -1
- package/src/lib/app-utils/payments-configured.d.ts +8 -21
- package/src/lib/app-utils/payments-configured.js +8 -23
- package/src/lib/app-utils/payments-configured.js.map +1 -1
- package/src/lib/app-utils/plan-entitlements.d.ts +43 -128
- package/src/lib/app-utils/plan-entitlements.js +145 -304
- package/src/lib/app-utils/plan-entitlements.js.map +1 -1
- package/src/lib/app-utils/platform-brand.d.ts +10 -0
- package/src/lib/app-utils/platform-brand.js +14 -3
- package/src/lib/app-utils/platform-brand.js.map +1 -1
- package/src/lib/app-utils/plugin-api-rate-limit.d.ts +7 -1
- package/src/lib/app-utils/plugin-api-rate-limit.js +11 -3
- package/src/lib/app-utils/plugin-api-rate-limit.js.map +1 -1
- package/src/lib/app-utils/plugin-bundle-checks.js +2 -2
- package/src/lib/app-utils/plugin-bundle-checks.js.map +1 -1
- package/src/lib/app-utils/plugin-host-events.generated.d.ts +12 -0
- package/src/lib/app-utils/plugin-host-events.generated.js +169 -0
- package/src/lib/app-utils/plugin-host-events.generated.js.map +1 -0
- package/src/lib/app-utils/plugin-release-flags.generated.d.ts +12 -0
- package/src/lib/app-utils/plugin-release-flags.generated.js +106 -0
- package/src/lib/app-utils/plugin-release-flags.generated.js.map +1 -0
- package/src/lib/app-utils/realm-host-surface.generated.js +2 -0
- package/src/lib/app-utils/realm-host-surface.generated.js.map +1 -1
- package/src/lib/app-utils/release-flags.d.ts +14 -5
- package/src/lib/app-utils/release-flags.js +21 -125
- package/src/lib/app-utils/release-flags.js.map +1 -1
- package/src/lib/app-utils/repeat-sources.d.ts +9 -0
- package/src/lib/app-utils/repeat-sources.js.map +1 -1
- package/src/lib/app-utils/retained-refusals.d.ts +73 -0
- package/src/lib/app-utils/retained-refusals.js +186 -0
- package/src/lib/app-utils/retained-refusals.js.map +1 -0
- package/src/lib/app-utils/scope-tokens.d.ts +27 -0
- package/src/lib/app-utils/scope-tokens.js +61 -0
- package/src/lib/app-utils/scope-tokens.js.map +1 -1
- package/src/lib/app-utils/screen-link-context.js +3 -3
- package/src/lib/app-utils/screen-link-context.js.map +1 -1
- package/src/lib/app-utils/screen-route.d.ts +15 -0
- package/src/lib/app-utils/screen-route.js +21 -1
- package/src/lib/app-utils/screen-route.js.map +1 -1
- package/src/lib/app-utils/seo-audit.d.ts +132 -0
- package/src/lib/app-utils/seo-audit.js +246 -0
- package/src/lib/app-utils/seo-audit.js.map +1 -0
- package/src/lib/app-utils/seo-keywords.d.ts +48 -0
- package/src/lib/app-utils/seo-keywords.js +60 -0
- package/src/lib/app-utils/seo-keywords.js.map +1 -0
- package/src/lib/app-utils/seo-page-facts.d.ts +66 -0
- package/src/lib/app-utils/seo-page-facts.js +155 -0
- package/src/lib/app-utils/seo-page-facts.js.map +1 -0
- package/src/lib/app-utils/seo-site-scan.d.ts +126 -0
- package/src/lib/app-utils/seo-site-scan.js +162 -0
- package/src/lib/app-utils/seo-site-scan.js.map +1 -0
- package/src/lib/app-utils/seo-title-variables.js +1 -1
- package/src/lib/app-utils/seo-title-variables.js.map +1 -1
- package/src/lib/app-utils/server.d.ts +6 -9
- package/src/lib/app-utils/server.js +17 -27
- package/src/lib/app-utils/server.js.map +1 -1
- package/src/lib/app-utils/site-interactions.d.ts +501 -0
- package/src/lib/app-utils/site-interactions.js +554 -0
- package/src/lib/app-utils/site-interactions.js.map +1 -0
- package/src/lib/app-utils/{marketplace-theme.d.ts → site-theme.d.ts} +13 -2
- package/src/lib/app-utils/{marketplace-theme.js → site-theme.js} +5 -2
- package/src/lib/app-utils/site-theme.js.map +1 -0
- package/src/lib/app-utils/sitemap.d.ts +4 -3
- package/src/lib/app-utils/sitemap.js +9 -7
- package/src/lib/app-utils/sitemap.js.map +1 -1
- package/src/lib/app-utils/stale-build-error.d.ts +51 -0
- package/src/lib/app-utils/stale-build-error.js +100 -1
- package/src/lib/app-utils/stale-build-error.js.map +1 -1
- package/src/lib/app-utils/starter-templates.d.ts +20 -0
- package/src/lib/app-utils/starter-templates.js +49 -0
- package/src/lib/app-utils/starter-templates.js.map +1 -1
- package/src/lib/app-utils/tax-jurisdiction-figures.d.ts +118 -0
- package/src/lib/app-utils/tax-jurisdiction-figures.js +123 -0
- package/src/lib/app-utils/tax-jurisdiction-figures.js.map +1 -0
- package/src/lib/app-utils/theme-library.d.ts +10 -3
- package/src/lib/app-utils/theme-library.js +13 -4
- package/src/lib/app-utils/theme-library.js.map +1 -1
- package/src/lib/app-utils/{campaign-attribution.d.ts → utm-attribution.d.ts} +11 -6
- package/src/lib/app-utils/{campaign-attribution.js → utm-attribution.js} +13 -8
- package/src/lib/app-utils/utm-attribution.js.map +1 -0
- package/src/lib/app-utils/{campaign-forwarding.d.ts → utm-forwarding.d.ts} +14 -14
- package/src/lib/app-utils/{campaign-forwarding.js → utm-forwarding.js} +26 -26
- package/src/lib/app-utils/utm-forwarding.js.map +1 -0
- package/src/lib/app-utils/video-object.js +6 -5
- package/src/lib/app-utils/video-object.js.map +1 -1
- package/src/lib/app-utils/visitor-consent.d.ts +41 -164
- package/src/lib/app-utils/visitor-consent.js +66 -277
- package/src/lib/app-utils/visitor-consent.js.map +1 -1
- package/src/lib/app-utils/web-vitals-rum.d.ts +7 -7
- package/src/lib/app-utils/web-vitals-rum.js +31 -63
- package/src/lib/app-utils/web-vitals-rum.js.map +1 -1
- package/src/lib/app-utils/where-used.d.ts +11 -6
- package/src/lib/app-utils/where-used.js +3 -8
- package/src/lib/app-utils/where-used.js.map +1 -1
- package/src/lib/canvas-manager/canvas-manager.js +3 -3
- package/src/lib/canvas-manager/canvas-manager.js.map +1 -1
- package/src/lib/foundation/definitions/components.types.d.ts +1 -1
- package/src/lib/foundation/definitions/components.types.js +1 -1
- package/src/lib/foundation/definitions/components.types.js.map +1 -1
- package/src/lib/foundation/definitions/org-billing.types.d.ts +18 -135
- package/src/lib/foundation/definitions/org-billing.types.js.map +1 -1
- package/src/lib/foundation/definitions/organization.types.d.ts +6 -3
- package/src/lib/foundation/definitions/organization.types.js.map +1 -1
- package/src/lib/foundation/definitions/platform.types.d.ts +27 -5
- package/src/lib/foundation/definitions/platform.types.js.map +1 -1
- package/src/lib/foundation/definitions/write-deny-coverage.util.d.ts +16 -0
- package/src/lib/foundation/definitions/write-deny-coverage.util.js +20 -0
- package/src/lib/foundation/definitions/write-deny-coverage.util.js.map +1 -1
- package/src/lib/foundation/index.d.ts +1 -1
- package/src/lib/foundation/index.js.map +1 -1
- package/src/lib/plugin-manager/besigner-documents.d.ts +96 -0
- package/src/lib/plugin-manager/besigner-documents.js +61 -0
- package/src/lib/plugin-manager/besigner-documents.js.map +1 -0
- package/src/lib/plugin-manager/computed-variables.d.ts +71 -0
- package/src/lib/plugin-manager/computed-variables.js +74 -0
- package/src/lib/plugin-manager/computed-variables.js.map +1 -0
- package/src/lib/plugin-manager/custom-fields.d.ts +29 -2
- package/src/lib/plugin-manager/custom-fields.js +47 -1
- package/src/lib/plugin-manager/custom-fields.js.map +1 -1
- package/src/lib/plugin-manager/feature-plugins.d.ts +292 -20
- package/src/lib/plugin-manager/feature-plugins.js +105 -17
- package/src/lib/plugin-manager/feature-plugins.js.map +1 -1
- package/src/lib/plugin-manager/first-party-plugins.generated.d.ts +123 -0
- package/src/lib/plugin-manager/first-party-plugins.generated.js +785 -14
- package/src/lib/plugin-manager/first-party-plugins.generated.js.map +1 -1
- package/src/lib/plugin-manager/plugin-activity-actions.d.ts +12 -0
- package/src/lib/plugin-manager/plugin-activity-actions.js +25 -0
- package/src/lib/plugin-manager/plugin-activity-actions.js.map +1 -1
- package/src/lib/plugin-manager/plugin-contributions.d.ts +1 -1
- package/src/lib/plugin-manager/plugin-contributions.js.map +1 -1
- package/src/lib/plugin-manager/plugin-declarations-repair.d.ts +36 -0
- package/src/lib/plugin-manager/plugin-declarations-repair.js +64 -0
- package/src/lib/plugin-manager/plugin-declarations-repair.js.map +1 -0
- package/src/lib/plugin-manager/plugin-dependents.d.ts +101 -0
- package/src/lib/plugin-manager/plugin-dependents.js +75 -0
- package/src/lib/plugin-manager/plugin-dependents.js.map +1 -0
- package/src/lib/plugin-manager/plugin-distribution.d.ts +55 -0
- package/src/lib/plugin-manager/plugin-distribution.js +45 -0
- package/src/lib/plugin-manager/plugin-distribution.js.map +1 -0
- package/src/lib/plugin-manager/plugin-host-collections.d.ts +17 -0
- package/src/lib/plugin-manager/plugin-host-collections.js +6 -0
- package/src/lib/plugin-manager/plugin-host-collections.js.map +1 -1
- package/src/lib/plugin-manager/plugin-host-resources.d.ts +133 -0
- package/src/lib/plugin-manager/plugin-host-resources.js +52 -0
- package/src/lib/plugin-manager/plugin-host-resources.js.map +1 -0
- package/src/lib/plugin-manager/plugin-org-erasure.d.ts +28 -2
- package/src/lib/plugin-manager/plugin-org-erasure.js +61 -2
- package/src/lib/plugin-manager/plugin-org-erasure.js.map +1 -1
- package/src/lib/plugin-manager/plugin-plan-entitlements.d.ts +123 -0
- package/src/lib/plugin-manager/plugin-plan-entitlements.js +101 -0
- package/src/lib/plugin-manager/plugin-plan-entitlements.js.map +1 -0
- package/src/lib/plugin-manager/plugin-record-index.d.ts +95 -0
- package/src/lib/plugin-manager/plugin-record-index.js +51 -0
- package/src/lib/plugin-manager/plugin-record-index.js.map +1 -0
- package/src/lib/plugin-manager/plugin-record-written.d.ts +58 -0
- package/src/lib/plugin-manager/plugin-record-written.js +42 -0
- package/src/lib/plugin-manager/plugin-record-written.js.map +1 -0
- package/src/lib/plugin-manager/plugin-revenue-sources.d.ts +213 -0
- package/src/lib/plugin-manager/plugin-revenue-sources.js +194 -0
- package/src/lib/plugin-manager/plugin-revenue-sources.js.map +1 -0
- package/src/lib/plugin-manager/plugin-site-bundle.d.ts +145 -0
- package/src/lib/plugin-manager/plugin-site-bundle.js +78 -0
- package/src/lib/plugin-manager/plugin-site-bundle.js.map +1 -0
- package/src/lib/plugin-manager/plugin-site-cache.d.ts +12 -0
- package/src/lib/plugin-manager/plugin-site-cache.js.map +1 -1
- package/src/lib/plugin-manager/plugin-site-export.d.ts +81 -0
- package/src/lib/plugin-manager/plugin-site-export.js +40 -0
- package/src/lib/plugin-manager/plugin-site-export.js.map +1 -0
- package/src/lib/plugin-manager/plugin-sitemap-sections.d.ts +88 -0
- package/src/lib/plugin-manager/plugin-sitemap-sections.js +29 -0
- package/src/lib/plugin-manager/plugin-sitemap-sections.js.map +1 -0
- package/src/lib/plugin-manager/plugin-tax-profile.d.ts +20 -4
- package/src/lib/plugin-manager/plugin-tax-profile.js.map +1 -1
- package/src/lib/plugin-manager/plugin-tax-return-sources.d.ts +255 -0
- package/src/lib/plugin-manager/plugin-tax-return-sources.js +191 -0
- package/src/lib/plugin-manager/plugin-tax-return-sources.js.map +1 -0
- package/src/lib/plugin-manager/plugin-template-sources.d.ts +75 -0
- package/src/lib/plugin-manager/plugin-template-sources.js +37 -0
- package/src/lib/plugin-manager/plugin-template-sources.js.map +1 -0
- package/src/lib/plugin-manager/plugin-usage-axes.d.ts +107 -0
- package/src/lib/plugin-manager/plugin-usage-axes.js +107 -0
- package/src/lib/plugin-manager/plugin-usage-axes.js.map +1 -0
- package/src/lib/plugin-manager/plugin-zones.d.ts +4 -5
- package/src/lib/plugin-manager/plugin-zones.js.map +1 -1
- package/src/lib/plugin-manager/realm-host-aglyn.generated.js +2 -0
- package/src/lib/plugin-manager/realm-host-aglyn.generated.js.map +1 -1
- package/src/lib/plugin-manager/record-captured-contact.d.ts +1 -14
- package/src/lib/plugin-manager/record-captured-contact.js +10 -32
- package/src/lib/plugin-manager/record-captured-contact.js.map +1 -1
- package/src/lib/plugin-manager/repeat-rows.d.ts +124 -0
- package/src/lib/plugin-manager/repeat-rows.js +108 -0
- package/src/lib/plugin-manager/repeat-rows.js.map +1 -0
- package/src/lib/plugin-manager/submission-record-target.d.ts +144 -0
- package/src/lib/plugin-manager/submission-record-target.js +125 -0
- package/src/lib/plugin-manager/submission-record-target.js.map +1 -0
- package/src/lib/plugin-manager/video-embed-provider.d.ts +108 -0
- package/src/lib/plugin-manager/video-embed-provider.js +165 -0
- package/src/lib/plugin-manager/video-embed-provider.js.map +1 -0
- package/src/lib/types/nodes.d.ts +2 -2
- package/src/lib/types/nodes.js.map +1 -1
- package/src/lib/app-utils/campaign-attribution.js.map +0 -1
- package/src/lib/app-utils/campaign-forwarding.js.map +0 -1
- package/src/lib/app-utils/contact-holder.d.ts +0 -68
- package/src/lib/app-utils/contact-holder.js +0 -129
- package/src/lib/app-utils/contact-holder.js.map +0 -1
- package/src/lib/app-utils/contact-merge.d.ts +0 -136
- package/src/lib/app-utils/contact-merge.js +0 -412
- package/src/lib/app-utils/contact-merge.js.map +0 -1
- package/src/lib/app-utils/crm-csv.d.ts +0 -239
- package/src/lib/app-utils/crm-csv.js +0 -467
- package/src/lib/app-utils/crm-csv.js.map +0 -1
- package/src/lib/app-utils/crm-digest.d.ts +0 -185
- package/src/lib/app-utils/crm-digest.js +0 -272
- package/src/lib/app-utils/crm-digest.js.map +0 -1
- package/src/lib/app-utils/form-dataset-binding.d.ts +0 -50
- package/src/lib/app-utils/form-dataset-binding.js +0 -74
- package/src/lib/app-utils/form-dataset-binding.js.map +0 -1
- package/src/lib/app-utils/list-import.d.ts +0 -158
- package/src/lib/app-utils/list-import.js +0 -332
- package/src/lib/app-utils/list-import.js.map +0 -1
- package/src/lib/app-utils/marketplace-listing-visibility.d.ts +0 -122
- package/src/lib/app-utils/marketplace-listing-visibility.js +0 -147
- package/src/lib/app-utils/marketplace-listing-visibility.js.map +0 -1
- package/src/lib/app-utils/marketplace-overrides.js.map +0 -1
- package/src/lib/app-utils/marketplace-provenance.js.map +0 -1
- package/src/lib/app-utils/marketplace-theme.js.map +0 -1
- package/src/lib/app-utils/marketplace-update-state.d.ts +0 -119
- package/src/lib/app-utils/marketplace-update-state.js +0 -132
- package/src/lib/app-utils/marketplace-update-state.js.map +0 -1
- package/src/lib/app-utils/publisher-agreement.d.ts +0 -289
- package/src/lib/app-utils/publisher-agreement.js +0 -321
- package/src/lib/app-utils/publisher-agreement.js.map +0 -1
- package/src/lib/app-utils/wistia-embed.d.ts +0 -104
- package/src/lib/app-utils/wistia-embed.js +0 -138
- package/src/lib/app-utils/wistia-embed.js.map +0 -1
- package/src/lib/app-utils/workflows.d.ts +0 -136
- package/src/lib/app-utils/workflows.js +0 -346
- package/src/lib/app-utils/workflows.js.map +0 -1
- package/src/lib/plugin-manager/commerce-zone-props.d.ts +0 -172
- package/src/lib/plugin-manager/commerce-zone-props.js +0 -31
- package/src/lib/plugin-manager/commerce-zone-props.js.map +0 -1
|
@@ -1,321 +0,0 @@
|
|
|
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
|
-
* The marketplace publisher agreement, and whether an org has accepted the
|
|
18
|
-
* current one (AGL-1077).
|
|
19
|
-
*
|
|
20
|
-
* Deliberately NOT the per-version attestation (AGL-969). An attestation is
|
|
21
|
-
* a statement about *specific bytes* and re-asks on every republish, because
|
|
22
|
-
* the bytes changed. This is about the *relationship*: what we may do with a
|
|
23
|
-
* listing, what the publisher warrants, indemnity, takedown, payouts, what
|
|
24
|
-
* survives termination. It is accepted once, by an org, and re-asked only
|
|
25
|
-
* when we change it.
|
|
26
|
-
*
|
|
27
|
-
* Shared like the attestation model is, and for the same reason: the publish
|
|
28
|
-
* route enforces it, the profile page collects it, and the review page shows
|
|
29
|
-
* staff which terms a publisher is actually under. Three copies of a version
|
|
30
|
-
* string would drift, and a drifted version is one that either re-asks
|
|
31
|
-
* forever or never re-asks at all.
|
|
32
|
-
*/ import { LEGAL_ORIGIN, isPublishedLegalUrl } from "./published-legal-pages.js";
|
|
33
|
-
/**
|
|
34
|
-
* The version of the agreement currently in force.
|
|
35
|
-
*
|
|
36
|
-
* Matches the `Agreement version` header of the document itself, which is now
|
|
37
|
-
* besigner content at {@link PUBLISHER_AGREEMENT_URL} rather than a repo file
|
|
38
|
-
* (same practice as the Terms of Service). Bump this **only** when the
|
|
39
|
-
* substance changes in a way a publisher should re-read — a typo fix is not a
|
|
40
|
-
* bump. Bumping it stops every publisher at their next publish until they
|
|
41
|
-
* accept again.
|
|
42
|
-
*
|
|
43
|
-
* Moved off `2026-07-28.1` on 2026-08-14 (AGL-1674). That string named the
|
|
44
|
-
* July draft, which was never published and whose §8 said the publisher is the
|
|
45
|
-
* seller of record. The published text says the opposite — Aglyn processes the
|
|
46
|
-
* sale and remits transaction tax — so it is a different document in
|
|
47
|
-
* substance, not a reissue, and re-asking is the point rather than a cost.
|
|
48
|
-
*
|
|
49
|
-
* Moved to `2026-08-18.1` on 2026-08-18 (AGL-1840 + AGL-1661). Two body-text
|
|
50
|
-
* changes: §1 now says "the Aglyn marketplace" (the AGL-975 rename, and the
|
|
51
|
-
* reason this snapshot must NOT need the AGL-975 naming-guard exemption that
|
|
52
|
-
* the `2026-08-14.1` one still carries), and §1's cross-reference to
|
|
53
|
-
* the "End User Licence Agreement"
|
|
54
|
-
* becomes "License" to match the document that agreement actually is, which
|
|
55
|
-
* was renamed on the same day.
|
|
56
|
-
*
|
|
57
|
-
* ⚠️ Read against the "a typo fix is not a bump" rule above, both edits are
|
|
58
|
-
* closer to a typo than to substance, and the tension is real. The bump was
|
|
59
|
-
* taken anyway on the decision (2026-08-18), for a reason the rule does not
|
|
60
|
-
* cover: the served page changed, so keeping `2026-08-14.1` would leave the
|
|
61
|
-
* pin below asserting a hash for text nobody is shown any more — a FALSE
|
|
62
|
-
* RECORD, which is the exact failure the pin exists to detect. The choice is
|
|
63
|
-
* therefore between a bump and a broken pin, not between a bump and nothing.
|
|
64
|
-
*
|
|
65
|
-
* ## 2026-08-22 — the page changed and this string DELIBERATELY did not
|
|
66
|
-
*
|
|
67
|
-
* Three clauses were added on 2026-08-22 (§3(h) listing conduct, §8.6 sales
|
|
68
|
-
* through the Marketplace, §13.6 marks) and the pin below moved with them, but
|
|
69
|
-
* `2026-08-18.1` stayed. That is not the third option the paragraph above says
|
|
70
|
-
* does not exist — it is the same choice with one input changed. A bump exists
|
|
71
|
-
* to re-ask publishers who accepted the OLD text; production holds exactly one
|
|
72
|
-
* acceptance record and it is the own, so there is nobody to re-ask and the
|
|
73
|
-
* bump would buy nothing. the decision, 2026-08-22.
|
|
74
|
-
*
|
|
75
|
-
* The pin still had to move, for precisely the reason given above: the served
|
|
76
|
-
* bytes changed, so leaving the old hash here would assert a document nobody
|
|
77
|
-
* is shown. Version unchanged + pin re-captured is coherent ONLY while the
|
|
78
|
-
* acceptance set is empty. The first real publisher acceptance ends that, and
|
|
79
|
-
* from then on any body-text change costs a bump — see the same rule in
|
|
80
|
-
* `apps/console/constants/legal-documents.ts`, where the clickwrap snapshots
|
|
81
|
-
* collapsed back to `v1` on the identical argument.
|
|
82
|
-
*
|
|
83
|
-
* ## 2026-08-24 — `2026-08-24.1`, and why this one CANNOT be folded (AGL-1956)
|
|
84
|
-
*
|
|
85
|
-
* §13.3 changed twice in one sentence. The venue moved from Williamson County
|
|
86
|
-
* to TRAVIS County (decided) — Williamson entered from the former
|
|
87
|
-
* Jarrell residential address, while every published Aglyn address is 5900
|
|
88
|
-
* Balcones Dr STE 100, Austin, TX 78731, which is Travis. And the clause cited
|
|
89
|
-
* "Terms of Service Section 19" for governing law and venue when those live at
|
|
90
|
-
* §18.6; §19 is General. A wrong cross-reference in a forum-selection clause is
|
|
91
|
-
* the kind of defect that gets argued about, so it was corrected in the same
|
|
92
|
-
* pass.
|
|
93
|
-
*
|
|
94
|
-
* Unlike 2026-08-22, this one takes the bump rather than only re-pinning, and
|
|
95
|
-
* the deciding reason is mechanical rather than editorial: THIS VERSION STRING
|
|
96
|
-
* IS PUBLISHED IN THE DOCUMENT. The page at {@link PUBLISHER_AGREEMENT_URL}
|
|
97
|
-
* serves `Agreement version: 2026-08-24.1` in its own second line, so the
|
|
98
|
-
* capture below contains it, and `publisher-agreement-version.spec.ts` asserts
|
|
99
|
-
* the snapshot contains `Agreement version: ${PUBLISHER_AGREEMENT_VERSION}`.
|
|
100
|
-
* Holding the constant at `2026-08-18.1` against that text would need the page
|
|
101
|
-
* republished to say so, and would otherwise record a publisher as having
|
|
102
|
-
* accepted `2026-08-18.1` while naming bytes that call themselves
|
|
103
|
-
* `2026-08-24.1`. That is a false record of exactly the shape the pin exists
|
|
104
|
-
* to prevent.
|
|
105
|
-
*
|
|
106
|
-
* ⚠️ THIS IS THE ONE PLACE THE CLICKWRAP ARGUMENT DOES NOT REACH. The signup
|
|
107
|
-
* clickwrap folded its 2026-08-24 corrections into `v1` and did not bump
|
|
108
|
-
* (`apps/console/constants/legal-documents.ts`) — decided: no v2
|
|
109
|
-
* before launch. That works there because `v1` is a REPO-SIDE label: the
|
|
110
|
-
* published Terms carry a "Last updated" date and no version string at all, so
|
|
111
|
-
* the label can stay still while the text moves. Here the label is part of the
|
|
112
|
-
* document a publisher reads. The two schemes are not the same kind of thing
|
|
113
|
-
* and must not be reasoned about as one — that difference is the whole content
|
|
114
|
-
* of this paragraph.
|
|
115
|
-
*
|
|
116
|
-
* On the merits it would have been a bump anyway: a forum-selection clause is
|
|
117
|
-
* substance, not a typo — it names the court a publisher would have to travel
|
|
118
|
-
* to. The 2026-08-22 cost argument is unchanged and still cheap, production
|
|
119
|
-
* holding exactly one acceptance record which is the own.
|
|
120
|
-
*
|
|
121
|
-
* §8.1 and §8.3 are UNTOUCHED and were already correct: they have said Aglyn is
|
|
122
|
-
* merchant of record and determines, collects and remits transaction tax since
|
|
123
|
-
* 2026-08-14. The Terms of Service moved TO them in this pass (new ToS §10.7),
|
|
124
|
-
* not the other way around.
|
|
125
|
-
*/ export const PUBLISHER_AGREEMENT_VERSION = '2026-08-24.1';
|
|
126
|
-
export const PUBLISHER_AGREEMENT_TITLE = 'Marketplace Publisher Agreement';
|
|
127
|
-
/**
|
|
128
|
-
* The snapshot pin for the version above (AGL-1678).
|
|
129
|
-
*
|
|
130
|
-
* A version string is a label we control and can reuse, so on its own it
|
|
131
|
-
* proves nothing about what a publisher actually read. These two values pin
|
|
132
|
-
* the archived snapshot at
|
|
133
|
-
* `legal/publisher-agreement/{PUBLISHER_AGREEMENT_VERSION}/marketplace-publisher-agreement.txt`
|
|
134
|
-
* (beside this module), captured FROM THE LIVE PAGE after publication — the
|
|
135
|
-
* same publication-first machinery as the signup clickwrap
|
|
136
|
-
* (`apps/console/constants/legal-documents.ts`, AGL-1497), and deliberately a
|
|
137
|
-
* PARALLEL manifest rather than an entry in `LEGAL_DOCUMENTS`: ToS §19.1 makes
|
|
138
|
-
* that set the entire signup agreement, and the publisher agreement is
|
|
139
|
-
* deliberately not part of it. Mixing them would widen what a signup
|
|
140
|
-
* acceptance covers.
|
|
141
|
-
*
|
|
142
|
-
* Both values go onto every acceptance record, so a record is self-contained
|
|
143
|
-
* evidence of content and later tampering with the archive is detectable
|
|
144
|
-
* rather than invisible. `publisher-agreement-version.spec.ts` re-hashes the
|
|
145
|
-
* snapshot, so one version string can never come to mean two different
|
|
146
|
-
* documents.
|
|
147
|
-
*
|
|
148
|
-
* Capture method (proven byte-for-byte against the clickwrap v4 hashes before
|
|
149
|
-
* this snapshot was taken): fetch the live page, walk its HTML text nodes
|
|
150
|
-
* skipping script/style, trim each, drop empties, take the document's content
|
|
151
|
-
* block (first line `Last updated: …` through its closing `© …` line,
|
|
152
|
-
* excluding site chrome and the table of contents), join with `\n`, and end
|
|
153
|
-
* with a trailing newline. UTF-8 throughout.
|
|
154
|
-
*
|
|
155
|
-
* TO PUBLISH A CHANGE: publish the besigner edit first, confirm the live page
|
|
156
|
-
* serves it, capture a new snapshot under the new version's directory, then
|
|
157
|
-
* bump `PUBLISHER_AGREEMENT_VERSION` and these two values together, and add
|
|
158
|
-
* the version's entry to `PUBLISHER_AGREEMENT_CHANGES` below. Never
|
|
159
|
-
* hand-write a snapshot: it is evidence of what a publisher was shown, and a
|
|
160
|
-
* snapshot of unpublished text is a false record.
|
|
161
|
-
*/ export const PUBLISHER_AGREEMENT_SHA256 = '2df6e940f037b4630e53c8f63bad8604ef4bf370374b89afcd4ea7f9fe8e8d63';
|
|
162
|
-
/** Byte length of the same snapshot — a cheap second check on the content. */ export const PUBLISHER_AGREEMENT_BYTES = 13730;
|
|
163
|
-
/**
|
|
164
|
-
* Canonical document, on the operator's legal origin beside the other terms.
|
|
165
|
-
*
|
|
166
|
-
* Built from `LEGAL_ORIGIN` (AGL-2196), which this module already depends on:
|
|
167
|
-
* `publisherAgreementIsPublished` below calls `isPublishedLegalUrl`, and that
|
|
168
|
-
* accepts ONLY `LEGAL_ORIGIN`. So the gate was operator-aware while the link
|
|
169
|
-
* it gates was a bare `aglyn.com` literal — meaning on a self-host install
|
|
170
|
-
* with `NEXT_PUBLIC_OPERATOR_LEGAL_ORIGIN` set, the gate rejected the very URL
|
|
171
|
-
* this file handed it, and every publisher was blocked from accepting. One
|
|
172
|
-
* origin for both closes that, and leaves Aglyn's own URL byte-identical.
|
|
173
|
-
*/ export const PUBLISHER_AGREEMENT_URL = `${LEGAL_ORIGIN}/legal/marketplace-publisher-agreement`;
|
|
174
|
-
/**
|
|
175
|
-
* Whether that document can actually be read (AGL-1660).
|
|
176
|
-
*
|
|
177
|
-
* It could not, from the day this gate shipped until the day this check did:
|
|
178
|
-
* the URL above 404ed, and the console still rendered it as "Read the full
|
|
179
|
-
* Marketplace Publisher Agreement" above an Accept button. An acceptance
|
|
180
|
-
* collected that way is a signature on a blank page — the same
|
|
181
|
-
* publication-first principle the clickwrap snapshots are built on, failing in
|
|
182
|
-
* the one place the text was never published at all.
|
|
183
|
-
*
|
|
184
|
-
* Derived, not a second flag: it reads `PUBLISHED_LEGAL_PATHS`, so the ONE
|
|
185
|
-
* edit that adds the path when the page goes live is what re-opens acceptance
|
|
186
|
-
* everywhere. There is no boolean to forget to flip, and no way for the link
|
|
187
|
-
* and the gate to disagree.
|
|
188
|
-
*/ export function publisherAgreementIsPublished(url = PUBLISHER_AGREEMENT_URL) {
|
|
189
|
-
return isPublishedLegalUrl(url);
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* What a publisher is told while the document has no page.
|
|
193
|
-
*
|
|
194
|
-
* Deliberately not "try again later" — it names the reason, because the fix is
|
|
195
|
-
* ours and the publisher can do nothing about it. It must never read as though
|
|
196
|
-
* accepting is something they merely have not got round to.
|
|
197
|
-
*/ export const PUBLISHER_AGREEMENT_UNAVAILABLE_NOTICE = `The ${PUBLISHER_AGREEMENT_TITLE} is not published yet, so there is ` + 'nothing here for you to read — and we will not ask you to agree to a ' + 'document we have not shown you. Acceptance is paused until it is ' + 'available, which also means marketplace publishing is paused. Nothing is ' + 'required of you in the meantime.';
|
|
198
|
-
/**
|
|
199
|
-
* What the agreement actually commits a publisher to.
|
|
200
|
-
*
|
|
201
|
-
* Shown above the accept control. A link alone is the pattern that produces
|
|
202
|
-
* agreements nobody has read; these are the terms most likely to surprise
|
|
203
|
-
* someone later, in the words they would need at that moment. They summarise
|
|
204
|
-
* the document — they are not it, and the copy says so.
|
|
205
|
-
*/ export const PUBLISHER_AGREEMENT_POINTS = [
|
|
206
|
-
{
|
|
207
|
-
id: 'hosting-license',
|
|
208
|
-
label: 'We may host, verify and distribute what you publish',
|
|
209
|
-
detail: 'Including keeping an immutable copy of every version, inspecting its code, and showing your listing content in the marketplace and console.'
|
|
210
|
-
},
|
|
211
|
-
{
|
|
212
|
-
id: 'warranties',
|
|
213
|
-
label: 'You warrant each version as you publish it',
|
|
214
|
-
detail: 'That you have the right to publish it, that its license is accurate and compatible, that it carries no malware or hidden telemetry, and that its documentation describes what it does with data.'
|
|
215
|
-
},
|
|
216
|
-
{
|
|
217
|
-
id: 'immutable',
|
|
218
|
-
label: 'You cannot recall code that is already installed',
|
|
219
|
-
detail: 'Installs pin an exact version and hash. A mistake ships until an installer chooses to upgrade — publishing a new version is the only remedy you have.'
|
|
220
|
-
},
|
|
221
|
-
{
|
|
222
|
-
id: 'revocation',
|
|
223
|
-
label: 'We can disable a version everywhere, without notice',
|
|
224
|
-
detail: 'If a version looks like a security, legal or privacy risk we stop it on every site running it, and tell you afterwards. Operating a platform that executes other people’s code requires this.'
|
|
225
|
-
},
|
|
226
|
-
{
|
|
227
|
-
id: 'review',
|
|
228
|
-
label: 'Review is a safety screen, not an endorsement',
|
|
229
|
-
detail: 'Approval is not an audit and not a guarantee your plugin works. We may decline, delist or unsign anything, for reasons that may have nothing to do with your code.'
|
|
230
|
-
},
|
|
231
|
-
{
|
|
232
|
-
id: 'payouts',
|
|
233
|
-
label: 'On paid listings we process the sale and take a fee',
|
|
234
|
-
detail: 'We process the purchase and pay your share into your own Stripe Connect account, less a platform fee that may change. We collect and remit sales tax on Marketplace sales; refunds, chargebacks and support on your Artifacts are yours.'
|
|
235
|
-
},
|
|
236
|
-
{
|
|
237
|
-
id: 'indemnity',
|
|
238
|
-
label: 'You indemnify us for claims arising from what you publish',
|
|
239
|
-
detail: 'Including infringement claims and disputes with the organizations that install it.'
|
|
240
|
-
}
|
|
241
|
-
];
|
|
242
|
-
/**
|
|
243
|
-
* What each version changed from the one before it, in the words a publisher
|
|
244
|
-
* re-accepting needs (AGL-3407).
|
|
245
|
-
*
|
|
246
|
-
* An org that accepted an older version is asked again, and "the terms
|
|
247
|
-
* changed" with nothing more is a request to re-read thirteen sections to
|
|
248
|
-
* find two edited clauses. Each entry names the sections that moved, read off
|
|
249
|
-
* the archived snapshots beside this module (`legal/publisher-agreement/`) —
|
|
250
|
-
* never written from memory of the edit, for the same reason a snapshot is
|
|
251
|
-
* never hand-written.
|
|
252
|
-
*
|
|
253
|
-
* Oldest first. The last entry is always {@link PUBLISHER_AGREEMENT_VERSION}:
|
|
254
|
-
* a bump adds its entry in the same change, and
|
|
255
|
-
* `publisher-agreement-version.spec.ts` fails a bump that did not. The first
|
|
256
|
-
* published version has no entry, because nothing preceded it that anyone
|
|
257
|
-
* accepted.
|
|
258
|
-
*/ export const PUBLISHER_AGREEMENT_CHANGES = [
|
|
259
|
-
{
|
|
260
|
-
version: '2026-08-18.1',
|
|
261
|
-
changes: [
|
|
262
|
-
'§1 names the marketplace and the End User License Agreement by their current names.',
|
|
263
|
-
'§3(h), new: listing conduct — what an Artifact and its listing may not claim about the platform, its plans or its prices.',
|
|
264
|
-
'§8.6, new: a paid Artifact, tier or license key must be sold through the Marketplace.',
|
|
265
|
-
'§13.6, new: how you may use the platform’s names and marks.'
|
|
266
|
-
]
|
|
267
|
-
},
|
|
268
|
-
{
|
|
269
|
-
version: '2026-08-24.1',
|
|
270
|
-
changes: [
|
|
271
|
-
'§13.3: venue moves to Travis County, Texas, and governing law now cites Terms of Service Section 18.6.'
|
|
272
|
-
]
|
|
273
|
-
}
|
|
274
|
-
];
|
|
275
|
-
/**
|
|
276
|
-
* The changes an org has not yet accepted, oldest first.
|
|
277
|
-
*
|
|
278
|
-
* Versions are dated strings (`YYYY-MM-DD.n`), so they order as text. An
|
|
279
|
-
* acceptance of a version this list does not name — one older than the first
|
|
280
|
-
* entry — gets every entry, which is the honest answer: all of it is new to
|
|
281
|
-
* them. No acceptance at all gets none, because a first acceptance is of the
|
|
282
|
-
* whole document, not a set of edits.
|
|
283
|
-
*/ export function publisherAgreementChangesSince(acceptedVersion, currentVersion = PUBLISHER_AGREEMENT_VERSION) {
|
|
284
|
-
const accepted = typeof acceptedVersion === 'string' ? acceptedVersion.trim() : '';
|
|
285
|
-
if (!accepted) return [];
|
|
286
|
-
return PUBLISHER_AGREEMENT_CHANGES.filter((entry)=>entry.version > accepted && entry.version <= currentVersion);
|
|
287
|
-
}
|
|
288
|
-
export function publisherAgreementState(acceptance, currentVersion = PUBLISHER_AGREEMENT_VERSION) {
|
|
289
|
-
const accepted = acceptance == null ? void 0 : acceptance.version;
|
|
290
|
-
if (typeof accepted !== 'string' || !accepted.trim()) return 'none';
|
|
291
|
-
return accepted === currentVersion ? 'current' : 'outdated';
|
|
292
|
-
}
|
|
293
|
-
/**
|
|
294
|
-
* Whether a publish may proceed.
|
|
295
|
-
*
|
|
296
|
-
* An older acceptance is NOT carried forward. Whoever publishes next reads
|
|
297
|
-
* the changed agreement and accepts it, or does not publish — silently
|
|
298
|
-
* inheriting an acceptance across a rewrite is precisely what makes the
|
|
299
|
-
* record worthless.
|
|
300
|
-
*/ export function hasCurrentPublisherAgreement(acceptance, currentVersion = PUBLISHER_AGREEMENT_VERSION) {
|
|
301
|
-
return publisherAgreementState(acceptance, currentVersion) === 'current';
|
|
302
|
-
}
|
|
303
|
-
export function publisherAgreementPresentation(state, published = publisherAgreementIsPublished()) {
|
|
304
|
-
return {
|
|
305
|
-
documentUrl: published ? PUBLISHER_AGREEMENT_URL : null,
|
|
306
|
-
// Already current is not "cannot accept because unpublished" — it is
|
|
307
|
-
// nothing left to do, and the panel says so separately.
|
|
308
|
-
canAccept: published && state !== 'current',
|
|
309
|
-
unavailableNotice: published ? null : PUBLISHER_AGREEMENT_UNAVAILABLE_NOTICE
|
|
310
|
-
};
|
|
311
|
-
}
|
|
312
|
-
/** The refusal a publisher sees, saying which of the two problems it is. */ export function publisherAgreementRefusal(state, published = publisherAgreementIsPublished()) {
|
|
313
|
-
// Sending someone to a control we have disabled is worse than saying
|
|
314
|
-
// nothing: they go, find no button, and conclude the console is broken.
|
|
315
|
-
if (!published) {
|
|
316
|
-
return `The ${PUBLISHER_AGREEMENT_TITLE} is not published yet, so it cannot ` + 'be accepted and publishing is paused for everyone. This is on us, not ' + 'on your organization.';
|
|
317
|
-
}
|
|
318
|
-
return state === 'outdated' ? `The ${PUBLISHER_AGREEMENT_TITLE} has changed since your organization ` + 'accepted it. Review and accept the current version in Marketplace → ' + 'Publisher Profile, then publish.' : `Your organization has not accepted the ${PUBLISHER_AGREEMENT_TITLE}. ` + 'Accept it in Marketplace → Publisher Profile, then publish.';
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
//# sourceMappingURL=publisher-agreement.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/publisher-agreement.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 * The marketplace publisher agreement, and whether an org has accepted the\n * current one (AGL-1077).\n *\n * Deliberately NOT the per-version attestation (AGL-969). An attestation is\n * a statement about *specific bytes* and re-asks on every republish, because\n * the bytes changed. This is about the *relationship*: what we may do with a\n * listing, what the publisher warrants, indemnity, takedown, payouts, what\n * survives termination. It is accepted once, by an org, and re-asked only\n * when we change it.\n *\n * Shared like the attestation model is, and for the same reason: the publish\n * route enforces it, the profile page collects it, and the review page shows\n * staff which terms a publisher is actually under. Three copies of a version\n * string would drift, and a drifted version is one that either re-asks\n * forever or never re-asks at all.\n */\n\nimport { LEGAL_ORIGIN, isPublishedLegalUrl } from './published-legal-pages'\n\n/**\n * The version of the agreement currently in force.\n *\n * Matches the `Agreement version` header of the document itself, which is now\n * besigner content at {@link PUBLISHER_AGREEMENT_URL} rather than a repo file\n * (same practice as the Terms of Service). Bump this **only** when the\n * substance changes in a way a publisher should re-read — a typo fix is not a\n * bump. Bumping it stops every publisher at their next publish until they\n * accept again.\n *\n * Moved off `2026-07-28.1` on 2026-08-14 (AGL-1674). That string named the\n * July draft, which was never published and whose §8 said the publisher is the\n * seller of record. The published text says the opposite — Aglyn processes the\n * sale and remits transaction tax — so it is a different document in\n * substance, not a reissue, and re-asking is the point rather than a cost.\n *\n * Moved to `2026-08-18.1` on 2026-08-18 (AGL-1840 + AGL-1661). Two body-text\n * changes: §1 now says \"the Aglyn marketplace\" (the AGL-975 rename, and the\n * reason this snapshot must NOT need the AGL-975 naming-guard exemption that\n * the `2026-08-14.1` one still carries), and §1's cross-reference to\n * the \"End User Licence Agreement\"\n * becomes \"License\" to match the document that agreement actually is, which\n * was renamed on the same day.\n *\n * ⚠️ Read against the \"a typo fix is not a bump\" rule above, both edits are\n * closer to a typo than to substance, and the tension is real. The bump was\n * taken anyway on the decision (2026-08-18), for a reason the rule does not\n * cover: the served page changed, so keeping `2026-08-14.1` would leave the\n * pin below asserting a hash for text nobody is shown any more — a FALSE\n * RECORD, which is the exact failure the pin exists to detect. The choice is\n * therefore between a bump and a broken pin, not between a bump and nothing.\n *\n * ## 2026-08-22 — the page changed and this string DELIBERATELY did not\n *\n * Three clauses were added on 2026-08-22 (§3(h) listing conduct, §8.6 sales\n * through the Marketplace, §13.6 marks) and the pin below moved with them, but\n * `2026-08-18.1` stayed. That is not the third option the paragraph above says\n * does not exist — it is the same choice with one input changed. A bump exists\n * to re-ask publishers who accepted the OLD text; production holds exactly one\n * acceptance record and it is the own, so there is nobody to re-ask and the\n * bump would buy nothing. the decision, 2026-08-22.\n *\n * The pin still had to move, for precisely the reason given above: the served\n * bytes changed, so leaving the old hash here would assert a document nobody\n * is shown. Version unchanged + pin re-captured is coherent ONLY while the\n * acceptance set is empty. The first real publisher acceptance ends that, and\n * from then on any body-text change costs a bump — see the same rule in\n * `apps/console/constants/legal-documents.ts`, where the clickwrap snapshots\n * collapsed back to `v1` on the identical argument.\n *\n * ## 2026-08-24 — `2026-08-24.1`, and why this one CANNOT be folded (AGL-1956)\n *\n * §13.3 changed twice in one sentence. The venue moved from Williamson County\n * to TRAVIS County (decided) — Williamson entered from the former\n * Jarrell residential address, while every published Aglyn address is 5900\n * Balcones Dr STE 100, Austin, TX 78731, which is Travis. And the clause cited\n * \"Terms of Service Section 19\" for governing law and venue when those live at\n * §18.6; §19 is General. A wrong cross-reference in a forum-selection clause is\n * the kind of defect that gets argued about, so it was corrected in the same\n * pass.\n *\n * Unlike 2026-08-22, this one takes the bump rather than only re-pinning, and\n * the deciding reason is mechanical rather than editorial: THIS VERSION STRING\n * IS PUBLISHED IN THE DOCUMENT. The page at {@link PUBLISHER_AGREEMENT_URL}\n * serves `Agreement version: 2026-08-24.1` in its own second line, so the\n * capture below contains it, and `publisher-agreement-version.spec.ts` asserts\n * the snapshot contains `Agreement version: ${PUBLISHER_AGREEMENT_VERSION}`.\n * Holding the constant at `2026-08-18.1` against that text would need the page\n * republished to say so, and would otherwise record a publisher as having\n * accepted `2026-08-18.1` while naming bytes that call themselves\n * `2026-08-24.1`. That is a false record of exactly the shape the pin exists\n * to prevent.\n *\n * ⚠️ THIS IS THE ONE PLACE THE CLICKWRAP ARGUMENT DOES NOT REACH. The signup\n * clickwrap folded its 2026-08-24 corrections into `v1` and did not bump\n * (`apps/console/constants/legal-documents.ts`) — decided: no v2\n * before launch. That works there because `v1` is a REPO-SIDE label: the\n * published Terms carry a \"Last updated\" date and no version string at all, so\n * the label can stay still while the text moves. Here the label is part of the\n * document a publisher reads. The two schemes are not the same kind of thing\n * and must not be reasoned about as one — that difference is the whole content\n * of this paragraph.\n *\n * On the merits it would have been a bump anyway: a forum-selection clause is\n * substance, not a typo — it names the court a publisher would have to travel\n * to. The 2026-08-22 cost argument is unchanged and still cheap, production\n * holding exactly one acceptance record which is the own.\n *\n * §8.1 and §8.3 are UNTOUCHED and were already correct: they have said Aglyn is\n * merchant of record and determines, collects and remits transaction tax since\n * 2026-08-14. The Terms of Service moved TO them in this pass (new ToS §10.7),\n * not the other way around.\n */\nexport const PUBLISHER_AGREEMENT_VERSION = '2026-08-24.1'\n\nexport const PUBLISHER_AGREEMENT_TITLE = 'Marketplace Publisher Agreement'\n\n/**\n * The snapshot pin for the version above (AGL-1678).\n *\n * A version string is a label we control and can reuse, so on its own it\n * proves nothing about what a publisher actually read. These two values pin\n * the archived snapshot at\n * `legal/publisher-agreement/{PUBLISHER_AGREEMENT_VERSION}/marketplace-publisher-agreement.txt`\n * (beside this module), captured FROM THE LIVE PAGE after publication — the\n * same publication-first machinery as the signup clickwrap\n * (`apps/console/constants/legal-documents.ts`, AGL-1497), and deliberately a\n * PARALLEL manifest rather than an entry in `LEGAL_DOCUMENTS`: ToS §19.1 makes\n * that set the entire signup agreement, and the publisher agreement is\n * deliberately not part of it. Mixing them would widen what a signup\n * acceptance covers.\n *\n * Both values go onto every acceptance record, so a record is self-contained\n * evidence of content and later tampering with the archive is detectable\n * rather than invisible. `publisher-agreement-version.spec.ts` re-hashes the\n * snapshot, so one version string can never come to mean two different\n * documents.\n *\n * Capture method (proven byte-for-byte against the clickwrap v4 hashes before\n * this snapshot was taken): fetch the live page, walk its HTML text nodes\n * skipping script/style, trim each, drop empties, take the document's content\n * block (first line `Last updated: …` through its closing `© …` line,\n * excluding site chrome and the table of contents), join with `\\n`, and end\n * with a trailing newline. UTF-8 throughout.\n *\n * TO PUBLISH A CHANGE: publish the besigner edit first, confirm the live page\n * serves it, capture a new snapshot under the new version's directory, then\n * bump `PUBLISHER_AGREEMENT_VERSION` and these two values together, and add\n * the version's entry to `PUBLISHER_AGREEMENT_CHANGES` below. Never\n * hand-write a snapshot: it is evidence of what a publisher was shown, and a\n * snapshot of unpublished text is a false record.\n */\nexport const PUBLISHER_AGREEMENT_SHA256 =\n '2df6e940f037b4630e53c8f63bad8604ef4bf370374b89afcd4ea7f9fe8e8d63'\n\n/** Byte length of the same snapshot — a cheap second check on the content. */\nexport const PUBLISHER_AGREEMENT_BYTES = 13730\n\n/**\n * Canonical document, on the operator's legal origin beside the other terms.\n *\n * Built from `LEGAL_ORIGIN` (AGL-2196), which this module already depends on:\n * `publisherAgreementIsPublished` below calls `isPublishedLegalUrl`, and that\n * accepts ONLY `LEGAL_ORIGIN`. So the gate was operator-aware while the link\n * it gates was a bare `aglyn.com` literal — meaning on a self-host install\n * with `NEXT_PUBLIC_OPERATOR_LEGAL_ORIGIN` set, the gate rejected the very URL\n * this file handed it, and every publisher was blocked from accepting. One\n * origin for both closes that, and leaves Aglyn's own URL byte-identical.\n */\nexport const PUBLISHER_AGREEMENT_URL = `${LEGAL_ORIGIN}/legal/marketplace-publisher-agreement`\n\n/**\n * Whether that document can actually be read (AGL-1660).\n *\n * It could not, from the day this gate shipped until the day this check did:\n * the URL above 404ed, and the console still rendered it as \"Read the full\n * Marketplace Publisher Agreement\" above an Accept button. An acceptance\n * collected that way is a signature on a blank page — the same\n * publication-first principle the clickwrap snapshots are built on, failing in\n * the one place the text was never published at all.\n *\n * Derived, not a second flag: it reads `PUBLISHED_LEGAL_PATHS`, so the ONE\n * edit that adds the path when the page goes live is what re-opens acceptance\n * everywhere. There is no boolean to forget to flip, and no way for the link\n * and the gate to disagree.\n */\nexport function publisherAgreementIsPublished(\n url: string = PUBLISHER_AGREEMENT_URL,\n): boolean {\n return isPublishedLegalUrl(url)\n}\n\n/**\n * What a publisher is told while the document has no page.\n *\n * Deliberately not \"try again later\" — it names the reason, because the fix is\n * ours and the publisher can do nothing about it. It must never read as though\n * accepting is something they merely have not got round to.\n */\nexport const PUBLISHER_AGREEMENT_UNAVAILABLE_NOTICE =\n `The ${PUBLISHER_AGREEMENT_TITLE} is not published yet, so there is ` +\n 'nothing here for you to read — and we will not ask you to agree to a ' +\n 'document we have not shown you. Acceptance is paused until it is ' +\n 'available, which also means marketplace publishing is paused. Nothing is ' +\n 'required of you in the meantime.'\n\n/**\n * What the agreement actually commits a publisher to.\n *\n * Shown above the accept control. A link alone is the pattern that produces\n * agreements nobody has read; these are the terms most likely to surprise\n * someone later, in the words they would need at that moment. They summarise\n * the document — they are not it, and the copy says so.\n */\nexport const PUBLISHER_AGREEMENT_POINTS: readonly {\n id: string\n label: string\n detail: string\n}[] = [\n {\n id: 'hosting-license',\n label: 'We may host, verify and distribute what you publish',\n detail:\n 'Including keeping an immutable copy of every version, inspecting its code, and showing your listing content in the marketplace and console.',\n },\n {\n id: 'warranties',\n label: 'You warrant each version as you publish it',\n detail:\n 'That you have the right to publish it, that its license is accurate and compatible, that it carries no malware or hidden telemetry, and that its documentation describes what it does with data.',\n },\n {\n id: 'immutable',\n label: 'You cannot recall code that is already installed',\n detail:\n 'Installs pin an exact version and hash. A mistake ships until an installer chooses to upgrade — publishing a new version is the only remedy you have.',\n },\n {\n id: 'revocation',\n label: 'We can disable a version everywhere, without notice',\n detail:\n 'If a version looks like a security, legal or privacy risk we stop it on every site running it, and tell you afterwards. Operating a platform that executes other people’s code requires this.',\n },\n {\n id: 'review',\n label: 'Review is a safety screen, not an endorsement',\n detail:\n 'Approval is not an audit and not a guarantee your plugin works. We may decline, delist or unsign anything, for reasons that may have nothing to do with your code.',\n },\n {\n id: 'payouts',\n label: 'On paid listings we process the sale and take a fee',\n detail:\n 'We process the purchase and pay your share into your own Stripe Connect account, less a platform fee that may change. We collect and remit sales tax on Marketplace sales; refunds, chargebacks and support on your Artifacts are yours.',\n },\n {\n id: 'indemnity',\n label: 'You indemnify us for claims arising from what you publish',\n detail:\n 'Including infringement claims and disputes with the organizations that install it.',\n },\n]\n\n/**\n * What each version changed from the one before it, in the words a publisher\n * re-accepting needs (AGL-3407).\n *\n * An org that accepted an older version is asked again, and \"the terms\n * changed\" with nothing more is a request to re-read thirteen sections to\n * find two edited clauses. Each entry names the sections that moved, read off\n * the archived snapshots beside this module (`legal/publisher-agreement/`) —\n * never written from memory of the edit, for the same reason a snapshot is\n * never hand-written.\n *\n * Oldest first. The last entry is always {@link PUBLISHER_AGREEMENT_VERSION}:\n * a bump adds its entry in the same change, and\n * `publisher-agreement-version.spec.ts` fails a bump that did not. The first\n * published version has no entry, because nothing preceded it that anyone\n * accepted.\n */\nexport const PUBLISHER_AGREEMENT_CHANGES: readonly {\n version: string\n changes: readonly string[]\n}[] = [\n {\n version: '2026-08-18.1',\n changes: [\n '§1 names the marketplace and the End User License Agreement by their current names.',\n '§3(h), new: listing conduct — what an Artifact and its listing may not claim about the platform, its plans or its prices.',\n '§8.6, new: a paid Artifact, tier or license key must be sold through the Marketplace.',\n '§13.6, new: how you may use the platform’s names and marks.',\n ],\n },\n {\n version: '2026-08-24.1',\n changes: [\n '§13.3: venue moves to Travis County, Texas, and governing law now cites Terms of Service Section 18.6.',\n ],\n },\n]\n\n/**\n * The changes an org has not yet accepted, oldest first.\n *\n * Versions are dated strings (`YYYY-MM-DD.n`), so they order as text. An\n * acceptance of a version this list does not name — one older than the first\n * entry — gets every entry, which is the honest answer: all of it is new to\n * them. No acceptance at all gets none, because a first acceptance is of the\n * whole document, not a set of edits.\n */\nexport function publisherAgreementChangesSince(\n acceptedVersion: string | null | undefined,\n currentVersion: string = PUBLISHER_AGREEMENT_VERSION,\n): readonly { version: string; changes: readonly string[] }[] {\n const accepted = typeof acceptedVersion === 'string' ? acceptedVersion.trim() : ''\n if (!accepted) return []\n return PUBLISHER_AGREEMENT_CHANGES.filter(\n (entry) => entry.version > accepted && entry.version <= currentVersion,\n )\n}\n\n/**\n * A recorded acceptance: which version, of which exact bytes, by whom, when.\n *\n * `sha256`/`bytes` (AGL-1678) pin the acceptance to the archived snapshot of\n * the text the publisher was shown. Optional because records written before\n * the pin existed carry only the version string — absence means \"accepted\n * before 2026-08-17\", not \"accepted nothing\".\n */\nexport interface PublisherAgreementAcceptance {\n version?: string\n sha256?: string\n bytes?: number\n acceptedBy?: string\n acceptedAt?: unknown\n}\n\n/**\n * Where an org stands with the agreement.\n *\n * `none` and `outdated` are deliberately different answers. \"You have never\n * agreed to anything\" and \"the terms changed since you agreed\" are different\n * situations with different copy, and collapsing them into a boolean is how\n * a re-acceptance ends up reading like a first-time setup step.\n */\nexport type PublisherAgreementState = 'none' | 'outdated' | 'current'\n\nexport function publisherAgreementState(\n acceptance: PublisherAgreementAcceptance | null | undefined,\n currentVersion: string = PUBLISHER_AGREEMENT_VERSION,\n): PublisherAgreementState {\n const accepted = acceptance?.version\n if (typeof accepted !== 'string' || !accepted.trim()) return 'none'\n return accepted === currentVersion ? 'current' : 'outdated'\n}\n\n/**\n * Whether a publish may proceed.\n *\n * An older acceptance is NOT carried forward. Whoever publishes next reads\n * the changed agreement and accepts it, or does not publish — silently\n * inheriting an acceptance across a rewrite is precisely what makes the\n * record worthless.\n */\nexport function hasCurrentPublisherAgreement(\n acceptance: PublisherAgreementAcceptance | null | undefined,\n currentVersion: string = PUBLISHER_AGREEMENT_VERSION,\n): boolean {\n return publisherAgreementState(acceptance, currentVersion) === 'current'\n}\n\n/**\n * What the acceptance UI may show (AGL-1660).\n *\n * The gate lives HERE rather than in the panel, for the reason every \"check it\n * in the component\" control eventually fails: the component is not the only\n * caller. The accept route consults the same function, so a client that skips\n * the UI entirely meets the same answer.\n *\n * `documentUrl` is null, not the URL, when the document is unpublished — the\n * console reads the link target from this, so an unreadable document is\n * structurally unable to reach an href.\n */\nexport interface PublisherAgreementPresentation {\n /** The document to link, or null when there is no page to link to. */\n documentUrl: string | null\n /** Whether the accept control may be offered at all. */\n canAccept: boolean\n /** Why acceptance is unavailable, or null when it is available. */\n unavailableNotice: string | null\n}\n\nexport function publisherAgreementPresentation(\n state: PublisherAgreementState,\n published: boolean = publisherAgreementIsPublished(),\n): PublisherAgreementPresentation {\n return {\n documentUrl: published ? PUBLISHER_AGREEMENT_URL : null,\n // Already current is not \"cannot accept because unpublished\" — it is\n // nothing left to do, and the panel says so separately.\n canAccept: published && state !== 'current',\n unavailableNotice: published ? null : PUBLISHER_AGREEMENT_UNAVAILABLE_NOTICE,\n }\n}\n\n/** The refusal a publisher sees, saying which of the two problems it is. */\nexport function publisherAgreementRefusal(\n state: PublisherAgreementState,\n published: boolean = publisherAgreementIsPublished(),\n): string {\n // Sending someone to a control we have disabled is worse than saying\n // nothing: they go, find no button, and conclude the console is broken.\n if (!published) {\n return (\n `The ${PUBLISHER_AGREEMENT_TITLE} is not published yet, so it cannot ` +\n 'be accepted and publishing is paused for everyone. This is on us, not ' +\n 'on your organization.'\n )\n }\n return state === 'outdated'\n ? `The ${PUBLISHER_AGREEMENT_TITLE} has changed since your organization ` +\n 'accepted it. Review and accept the current version in Marketplace → ' +\n 'Publisher Profile, then publish.'\n : `Your organization has not accepted the ${PUBLISHER_AGREEMENT_TITLE}. ` +\n 'Accept it in Marketplace → Publisher Profile, then publish.'\n}\n"],"names":["LEGAL_ORIGIN","isPublishedLegalUrl","PUBLISHER_AGREEMENT_VERSION","PUBLISHER_AGREEMENT_TITLE","PUBLISHER_AGREEMENT_SHA256","PUBLISHER_AGREEMENT_BYTES","PUBLISHER_AGREEMENT_URL","publisherAgreementIsPublished","url","PUBLISHER_AGREEMENT_UNAVAILABLE_NOTICE","PUBLISHER_AGREEMENT_POINTS","id","label","detail","PUBLISHER_AGREEMENT_CHANGES","version","changes","publisherAgreementChangesSince","acceptedVersion","currentVersion","accepted","trim","filter","entry","publisherAgreementState","acceptance","hasCurrentPublisherAgreement","publisherAgreementPresentation","state","published","documentUrl","canAccept","unavailableNotice","publisherAgreementRefusal"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;CAgBC,GAED,SAASA,YAAY,EAAEC,mBAAmB,QAAQ,6BAAyB;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4FC,GACD,OAAO,MAAMC,8BAA8B,eAAc;AAEzD,OAAO,MAAMC,4BAA4B,kCAAiC;AAE1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCC,GACD,OAAO,MAAMC,6BACX,mEAAkE;AAEpE,4EAA4E,GAC5E,OAAO,MAAMC,4BAA4B,MAAK;AAE9C;;;;;;;;;;CAUC,GACD,OAAO,MAAMC,0BAA0B,GAAGN,aAAa,sCAAsC,CAAC,CAAA;AAE9F;;;;;;;;;;;;;;CAcC,GACD,OAAO,SAASO,8BACdC,MAAcF,uBAAuB;IAErC,OAAOL,oBAAoBO;AAC7B;AAEA;;;;;;CAMC,GACD,OAAO,MAAMC,yCACX,CAAC,IAAI,EAAEN,0BAA0B,mCAAmC,CAAC,GACrE,0EACA,sEACA,8EACA,mCAAkC;AAEpC;;;;;;;CAOC,GACD,OAAO,MAAMO,6BAIP;IACJ;QACEC,IAAI;QACJC,OAAO;QACPC,QACE;IACJ;IACA;QACEF,IAAI;QACJC,OAAO;QACPC,QACE;IACJ;IACA;QACEF,IAAI;QACJC,OAAO;QACPC,QACE;IACJ;IACA;QACEF,IAAI;QACJC,OAAO;QACPC,QACE;IACJ;IACA;QACEF,IAAI;QACJC,OAAO;QACPC,QACE;IACJ;IACA;QACEF,IAAI;QACJC,OAAO;QACPC,QACE;IACJ;IACA;QACEF,IAAI;QACJC,OAAO;QACPC,QACE;IACJ;CACD,CAAA;AAED;;;;;;;;;;;;;;;;CAgBC,GACD,OAAO,MAAMC,8BAGP;IACJ;QACEC,SAAS;QACTC,SAAS;YACP;YACA;YACA;YACA;SACD;IACH;IACA;QACED,SAAS;QACTC,SAAS;YACP;SACD;IACH;CACD,CAAA;AAED;;;;;;;;CAQC,GACD,OAAO,SAASC,+BACdC,eAA0C,EAC1CC,iBAAyBjB,2BAA2B;IAEpD,MAAMkB,WAAW,OAAOF,oBAAoB,WAAWA,gBAAgBG,IAAI,KAAK;IAChF,IAAI,CAACD,UAAU,OAAO,EAAE;IACxB,OAAON,4BAA4BQ,MAAM,CACvC,CAACC,QAAUA,MAAMR,OAAO,GAAGK,YAAYG,MAAMR,OAAO,IAAII;AAE5D;AA4BA,OAAO,SAASK,wBACdC,UAA2D,EAC3DN,iBAAyBjB,2BAA2B;IAEpD,MAAMkB,WAAWK,8BAAAA,WAAYV,OAAO;IACpC,IAAI,OAAOK,aAAa,YAAY,CAACA,SAASC,IAAI,IAAI,OAAO;IAC7D,OAAOD,aAAaD,iBAAiB,YAAY;AACnD;AAEA;;;;;;;CAOC,GACD,OAAO,SAASO,6BACdD,UAA2D,EAC3DN,iBAAyBjB,2BAA2B;IAEpD,OAAOsB,wBAAwBC,YAAYN,oBAAoB;AACjE;AAuBA,OAAO,SAASQ,+BACdC,KAA8B,EAC9BC,YAAqBtB,+BAA+B;IAEpD,OAAO;QACLuB,aAAaD,YAAYvB,0BAA0B;QACnD,qEAAqE;QACrE,wDAAwD;QACxDyB,WAAWF,aAAaD,UAAU;QAClCI,mBAAmBH,YAAY,OAAOpB;IACxC;AACF;AAEA,0EAA0E,GAC1E,OAAO,SAASwB,0BACdL,KAA8B,EAC9BC,YAAqBtB,+BAA+B;IAEpD,qEAAqE;IACrE,wEAAwE;IACxE,IAAI,CAACsB,WAAW;QACd,OACE,CAAC,IAAI,EAAE1B,0BAA0B,oCAAoC,CAAC,GACtE,2EACA;IAEJ;IACA,OAAOyB,UAAU,aACb,CAAC,IAAI,EAAEzB,0BAA0B,qCAAqC,CAAC,GACrE,yEACA,qCACF,CAAC,uCAAuC,EAAEA,0BAA0B,EAAE,CAAC,GACrE;AACR"}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2026 Aglyn LLC
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
16
|
-
*/
|
|
17
|
-
/**
|
|
18
|
-
* A Wistia video, as the Video element plays it (AGL-2826).
|
|
19
|
-
*
|
|
20
|
-
* ## Only the media id survives
|
|
21
|
-
*
|
|
22
|
-
* An author pastes whatever link Wistia showed them. That string never reaches
|
|
23
|
-
* a frame: every builder below reads the media's hashed id out of it and
|
|
24
|
-
* rebuilds the address, so the only frame this module can produce is on
|
|
25
|
-
* {@link WISTIA_PLAYER_ORIGIN}. That closed set is what lets the tenant's
|
|
26
|
-
* `frame-src` name the origin for every site, and it is the rule
|
|
27
|
-
* `parseVideoEmbedSrc` already holds YouTube and Vimeo to.
|
|
28
|
-
*
|
|
29
|
-
* ## The iframe embed, not the player script
|
|
30
|
-
*
|
|
31
|
-
* Wistia offers two embeds. The script embed runs Wistia's JavaScript in the
|
|
32
|
-
* page itself, so every site would need `connect-src`, `img-src` and
|
|
33
|
-
* `media-src` grants for Wistia's hosts, and the player's storage and beacons
|
|
34
|
-
* would run as the site. The iframe embed runs all of that inside a document on
|
|
35
|
-
* Wistia's origin, under Wistia's own policy: the page needs one `frame-src`
|
|
36
|
-
* entry, and whatever the player stores is keyed to Wistia inside the site's
|
|
37
|
-
* partition rather than written as the site.
|
|
38
|
-
*
|
|
39
|
-
* Measured on 2026-09-10: `fast.wistia.net/embed/iframe/{id}` answers 200 with
|
|
40
|
-
* no redirect, so no second origin is involved in loading the frame.
|
|
41
|
-
*/
|
|
42
|
-
/** The only origin a Wistia player frame is ever loaded from. */
|
|
43
|
-
export declare const WISTIA_PLAYER_ORIGIN = "https://fast.wistia.net";
|
|
44
|
-
/**
|
|
45
|
-
* The hashed id a Wistia link names, or `undefined` for anything else.
|
|
46
|
-
*
|
|
47
|
-
* A share link (`/s/{slug}`) names no id and is refused rather than guessed
|
|
48
|
-
* at, as is a value that is not an http(s) URL.
|
|
49
|
-
*/
|
|
50
|
-
export declare function wistiaMediaId(value: unknown): string | undefined;
|
|
51
|
-
/**
|
|
52
|
-
* The player page for a Wistia link, with no per-visit options: what
|
|
53
|
-
* `VideoObject.embedUrl` names.
|
|
54
|
-
*/
|
|
55
|
-
export declare function wistiaEmbedUrl(value: unknown): string | undefined;
|
|
56
|
-
export interface WistiaPlayerOptions {
|
|
57
|
-
/**
|
|
58
|
-
* Start playing as soon as the player is ready. On unless this is exactly
|
|
59
|
-
* `false`; see {@link wistiaPlayerSrc} for which frame turns it off.
|
|
60
|
-
*/
|
|
61
|
-
autoPlay?: boolean;
|
|
62
|
-
/**
|
|
63
|
-
* Ask Wistia not to record the viewing session (its `doNotTrack` embed
|
|
64
|
-
* option). The element sets it for every visitor whose analytics consent is
|
|
65
|
-
* not on record.
|
|
66
|
-
*/
|
|
67
|
-
doNotTrack?: boolean;
|
|
68
|
-
/** Start without sound. */
|
|
69
|
-
muted?: boolean;
|
|
70
|
-
/** Restart at the end (`endVideoBehavior=loop`). */
|
|
71
|
-
loop?: boolean;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* The address of a Wistia player frame.
|
|
75
|
-
*
|
|
76
|
-
* `autoPlay` is on by default, because the usual frame is the one a visitor's
|
|
77
|
-
* press loads: it exists only because somebody pressed play, and a second play
|
|
78
|
-
* button inside the player would ask them twice.
|
|
79
|
-
*
|
|
80
|
-
* The frame a page loads before anyone has pressed anything ("Load the player
|
|
81
|
-
* with the page", AGL-2962) passes `autoPlay: false`. The address then says
|
|
82
|
-
* `autoPlay=false` rather than leaving the option out: an option in the embed
|
|
83
|
-
* overrides the media's own settings in the Wistia account, and those may be
|
|
84
|
-
* set to autoplay.
|
|
85
|
-
*
|
|
86
|
-
* ## The corners belong to the page (AGL-3209)
|
|
87
|
-
*
|
|
88
|
-
* `roundedPlayer=false` is stated on every address, and is not an option a
|
|
89
|
-
* caller may turn back on. Wistia's rounded chrome rounds and clips INSIDE the
|
|
90
|
-
* frame, where the document's own canvas is white: on a dark page the corner
|
|
91
|
-
* arcs and the clip's antialiased edge composite as a white ring around the
|
|
92
|
-
* film rather than as the page behind them.
|
|
93
|
-
*
|
|
94
|
-
* Measured on 2026-09-21 against the live videos page, whose background is
|
|
95
|
-
* `rgb(42 52 64)` and whose film is `rgb(22 30 52)`: the frame's first column
|
|
96
|
-
* read `rgb(137 141 152)` and its top-left corner `rgb(195 198 201)` —
|
|
97
|
-
* lighter than either, so painted rather than blended. With the option off
|
|
98
|
-
* the same pixels are the film.
|
|
99
|
-
*
|
|
100
|
-
* The shape is the placement's to decide in any case: `VideoPlayerFrame` takes
|
|
101
|
-
* a `radius` from the element's own control and puts it on the frame, which a
|
|
102
|
-
* second rounding inside the frame can only fight.
|
|
103
|
-
*/
|
|
104
|
-
export declare function wistiaPlayerSrc(value: unknown, options?: WistiaPlayerOptions): string | undefined;
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2026 Aglyn LLC
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
16
|
-
*/ /**
|
|
17
|
-
* A Wistia video, as the Video element plays it (AGL-2826).
|
|
18
|
-
*
|
|
19
|
-
* ## Only the media id survives
|
|
20
|
-
*
|
|
21
|
-
* An author pastes whatever link Wistia showed them. That string never reaches
|
|
22
|
-
* a frame: every builder below reads the media's hashed id out of it and
|
|
23
|
-
* rebuilds the address, so the only frame this module can produce is on
|
|
24
|
-
* {@link WISTIA_PLAYER_ORIGIN}. That closed set is what lets the tenant's
|
|
25
|
-
* `frame-src` name the origin for every site, and it is the rule
|
|
26
|
-
* `parseVideoEmbedSrc` already holds YouTube and Vimeo to.
|
|
27
|
-
*
|
|
28
|
-
* ## The iframe embed, not the player script
|
|
29
|
-
*
|
|
30
|
-
* Wistia offers two embeds. The script embed runs Wistia's JavaScript in the
|
|
31
|
-
* page itself, so every site would need `connect-src`, `img-src` and
|
|
32
|
-
* `media-src` grants for Wistia's hosts, and the player's storage and beacons
|
|
33
|
-
* would run as the site. The iframe embed runs all of that inside a document on
|
|
34
|
-
* Wistia's origin, under Wistia's own policy: the page needs one `frame-src`
|
|
35
|
-
* entry, and whatever the player stores is keyed to Wistia inside the site's
|
|
36
|
-
* partition rather than written as the site.
|
|
37
|
-
*
|
|
38
|
-
* Measured on 2026-09-10: `fast.wistia.net/embed/iframe/{id}` answers 200 with
|
|
39
|
-
* no redirect, so no second origin is involved in loading the frame.
|
|
40
|
-
*/ /** The only origin a Wistia player frame is ever loaded from. */ export const WISTIA_PLAYER_ORIGIN = 'https://fast.wistia.net';
|
|
41
|
-
/** A hashed id: ten lowercase letters and digits, e.g. `e4a27b971d`. */ const HASHED_ID = /^[a-z0-9]{10}$/;
|
|
42
|
-
/**
|
|
43
|
-
* The paths a Wistia link carries a media id in. Wistia's oEmbed endpoint
|
|
44
|
-
* matches on the path rather than the host, and so does this; the host is
|
|
45
|
-
* checked separately by {@link isWistiaHostname}.
|
|
46
|
-
*/ const MEDIA_ID_PATHS = [
|
|
47
|
-
// A media page: `https://acme.wistia.com/medias/{id}`, and its `/manage`.
|
|
48
|
-
/^\/medias\/([^/]+)(?:\/manage)?\/?$/,
|
|
49
|
-
// The short form of the same page.
|
|
50
|
-
/^\/m\/([^/]+)\/?$/,
|
|
51
|
-
// An iframe embed's own address.
|
|
52
|
-
/^\/embed\/iframe\/([^/]+)\/?$/,
|
|
53
|
-
// A script embed's media address, with or without its `.jsonp` suffix.
|
|
54
|
-
/^\/embed\/medias\/([^/.]+)(?:\.jsonp?)?\/?$/
|
|
55
|
-
];
|
|
56
|
-
/**
|
|
57
|
-
* Whether a hostname is Wistia's. Exact or dot-anchored matches only, so
|
|
58
|
-
* `wistia.com.example.net` and `notwistia.com` are refused.
|
|
59
|
-
*/ function isWistiaHostname(hostname) {
|
|
60
|
-
return [
|
|
61
|
-
'wistia.com',
|
|
62
|
-
'wistia.net',
|
|
63
|
-
'wi.st'
|
|
64
|
-
].some((domain)=>hostname === domain || hostname.endsWith(`.${domain}`));
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* The hashed id a Wistia link names, or `undefined` for anything else.
|
|
68
|
-
*
|
|
69
|
-
* A share link (`/s/{slug}`) names no id and is refused rather than guessed
|
|
70
|
-
* at, as is a value that is not an http(s) URL.
|
|
71
|
-
*/ export function wistiaMediaId(value) {
|
|
72
|
-
if (typeof value !== 'string') return undefined;
|
|
73
|
-
let url;
|
|
74
|
-
try {
|
|
75
|
-
url = new URL(value.trim());
|
|
76
|
-
} catch (unused) {
|
|
77
|
-
return undefined;
|
|
78
|
-
}
|
|
79
|
-
if (url.protocol !== 'https:' && url.protocol !== 'http:') return undefined;
|
|
80
|
-
if (!isWistiaHostname(url.hostname)) return undefined;
|
|
81
|
-
for (const pattern of MEDIA_ID_PATHS){
|
|
82
|
-
var _pattern_exec;
|
|
83
|
-
const id = (_pattern_exec = pattern.exec(url.pathname)) == null ? void 0 : _pattern_exec[1];
|
|
84
|
-
if (id && HASHED_ID.test(id)) return id;
|
|
85
|
-
}
|
|
86
|
-
return undefined;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* The player page for a Wistia link, with no per-visit options: what
|
|
90
|
-
* `VideoObject.embedUrl` names.
|
|
91
|
-
*/ export function wistiaEmbedUrl(value) {
|
|
92
|
-
const id = wistiaMediaId(value);
|
|
93
|
-
return id ? `${WISTIA_PLAYER_ORIGIN}/embed/iframe/${id}` : undefined;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* The address of a Wistia player frame.
|
|
97
|
-
*
|
|
98
|
-
* `autoPlay` is on by default, because the usual frame is the one a visitor's
|
|
99
|
-
* press loads: it exists only because somebody pressed play, and a second play
|
|
100
|
-
* button inside the player would ask them twice.
|
|
101
|
-
*
|
|
102
|
-
* The frame a page loads before anyone has pressed anything ("Load the player
|
|
103
|
-
* with the page", AGL-2962) passes `autoPlay: false`. The address then says
|
|
104
|
-
* `autoPlay=false` rather than leaving the option out: an option in the embed
|
|
105
|
-
* overrides the media's own settings in the Wistia account, and those may be
|
|
106
|
-
* set to autoplay.
|
|
107
|
-
*
|
|
108
|
-
* ## The corners belong to the page (AGL-3209)
|
|
109
|
-
*
|
|
110
|
-
* `roundedPlayer=false` is stated on every address, and is not an option a
|
|
111
|
-
* caller may turn back on. Wistia's rounded chrome rounds and clips INSIDE the
|
|
112
|
-
* frame, where the document's own canvas is white: on a dark page the corner
|
|
113
|
-
* arcs and the clip's antialiased edge composite as a white ring around the
|
|
114
|
-
* film rather than as the page behind them.
|
|
115
|
-
*
|
|
116
|
-
* Measured on 2026-09-21 against the live videos page, whose background is
|
|
117
|
-
* `rgb(42 52 64)` and whose film is `rgb(22 30 52)`: the frame's first column
|
|
118
|
-
* read `rgb(137 141 152)` and its top-left corner `rgb(195 198 201)` —
|
|
119
|
-
* lighter than either, so painted rather than blended. With the option off
|
|
120
|
-
* the same pixels are the film.
|
|
121
|
-
*
|
|
122
|
-
* The shape is the placement's to decide in any case: `VideoPlayerFrame` takes
|
|
123
|
-
* a `radius` from the element's own control and puts it on the frame, which a
|
|
124
|
-
* second rounding inside the frame can only fight.
|
|
125
|
-
*/ export function wistiaPlayerSrc(value, options = {}) {
|
|
126
|
-
const embedUrl = wistiaEmbedUrl(value);
|
|
127
|
-
if (!embedUrl) return undefined;
|
|
128
|
-
const params = new URLSearchParams({
|
|
129
|
-
autoPlay: options.autoPlay === false ? 'false' : 'true',
|
|
130
|
-
roundedPlayer: 'false'
|
|
131
|
-
});
|
|
132
|
-
if (options.doNotTrack) params.set('doNotTrack', 'true');
|
|
133
|
-
if (options.muted) params.set('muted', 'true');
|
|
134
|
-
if (options.loop) params.set('endVideoBehavior', 'loop');
|
|
135
|
-
return `${embedUrl}?${params.toString()}`;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
//# sourceMappingURL=wistia-embed.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/wistia-embed.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * A Wistia video, as the Video element plays it (AGL-2826).\n *\n * ## Only the media id survives\n *\n * An author pastes whatever link Wistia showed them. That string never reaches\n * a frame: every builder below reads the media's hashed id out of it and\n * rebuilds the address, so the only frame this module can produce is on\n * {@link WISTIA_PLAYER_ORIGIN}. That closed set is what lets the tenant's\n * `frame-src` name the origin for every site, and it is the rule\n * `parseVideoEmbedSrc` already holds YouTube and Vimeo to.\n *\n * ## The iframe embed, not the player script\n *\n * Wistia offers two embeds. The script embed runs Wistia's JavaScript in the\n * page itself, so every site would need `connect-src`, `img-src` and\n * `media-src` grants for Wistia's hosts, and the player's storage and beacons\n * would run as the site. The iframe embed runs all of that inside a document on\n * Wistia's origin, under Wistia's own policy: the page needs one `frame-src`\n * entry, and whatever the player stores is keyed to Wistia inside the site's\n * partition rather than written as the site.\n *\n * Measured on 2026-09-10: `fast.wistia.net/embed/iframe/{id}` answers 200 with\n * no redirect, so no second origin is involved in loading the frame.\n */\n\n/** The only origin a Wistia player frame is ever loaded from. */\nexport const WISTIA_PLAYER_ORIGIN = 'https://fast.wistia.net'\n\n/** A hashed id: ten lowercase letters and digits, e.g. `e4a27b971d`. */\nconst HASHED_ID = /^[a-z0-9]{10}$/\n\n/**\n * The paths a Wistia link carries a media id in. Wistia's oEmbed endpoint\n * matches on the path rather than the host, and so does this; the host is\n * checked separately by {@link isWistiaHostname}.\n */\nconst MEDIA_ID_PATHS: readonly RegExp[] = [\n // A media page: `https://acme.wistia.com/medias/{id}`, and its `/manage`.\n /^\\/medias\\/([^/]+)(?:\\/manage)?\\/?$/,\n // The short form of the same page.\n /^\\/m\\/([^/]+)\\/?$/,\n // An iframe embed's own address.\n /^\\/embed\\/iframe\\/([^/]+)\\/?$/,\n // A script embed's media address, with or without its `.jsonp` suffix.\n /^\\/embed\\/medias\\/([^/.]+)(?:\\.jsonp?)?\\/?$/,\n]\n\n/**\n * Whether a hostname is Wistia's. Exact or dot-anchored matches only, so\n * `wistia.com.example.net` and `notwistia.com` are refused.\n */\nfunction isWistiaHostname(hostname: string): boolean {\n return ['wistia.com', 'wistia.net', 'wi.st'].some(\n (domain) => hostname === domain || hostname.endsWith(`.${domain}`),\n )\n}\n\n/**\n * The hashed id a Wistia link names, or `undefined` for anything else.\n *\n * A share link (`/s/{slug}`) names no id and is refused rather than guessed\n * at, as is a value that is not an http(s) URL.\n */\nexport function wistiaMediaId(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined\n let url: URL\n try {\n url = new URL(value.trim())\n } catch {\n return undefined\n }\n if (url.protocol !== 'https:' && url.protocol !== 'http:') return undefined\n if (!isWistiaHostname(url.hostname)) return undefined\n for (const pattern of MEDIA_ID_PATHS) {\n const id = pattern.exec(url.pathname)?.[1]\n if (id && HASHED_ID.test(id)) return id\n }\n return undefined\n}\n\n/**\n * The player page for a Wistia link, with no per-visit options: what\n * `VideoObject.embedUrl` names.\n */\nexport function wistiaEmbedUrl(value: unknown): string | undefined {\n const id = wistiaMediaId(value)\n return id ? `${WISTIA_PLAYER_ORIGIN}/embed/iframe/${id}` : undefined\n}\n\nexport interface WistiaPlayerOptions {\n /**\n * Start playing as soon as the player is ready. On unless this is exactly\n * `false`; see {@link wistiaPlayerSrc} for which frame turns it off.\n */\n autoPlay?: boolean\n /**\n * Ask Wistia not to record the viewing session (its `doNotTrack` embed\n * option). The element sets it for every visitor whose analytics consent is\n * not on record.\n */\n doNotTrack?: boolean\n /** Start without sound. */\n muted?: boolean\n /** Restart at the end (`endVideoBehavior=loop`). */\n loop?: boolean\n}\n\n/**\n * The address of a Wistia player frame.\n *\n * `autoPlay` is on by default, because the usual frame is the one a visitor's\n * press loads: it exists only because somebody pressed play, and a second play\n * button inside the player would ask them twice.\n *\n * The frame a page loads before anyone has pressed anything (\"Load the player\n * with the page\", AGL-2962) passes `autoPlay: false`. The address then says\n * `autoPlay=false` rather than leaving the option out: an option in the embed\n * overrides the media's own settings in the Wistia account, and those may be\n * set to autoplay.\n *\n * ## The corners belong to the page (AGL-3209)\n *\n * `roundedPlayer=false` is stated on every address, and is not an option a\n * caller may turn back on. Wistia's rounded chrome rounds and clips INSIDE the\n * frame, where the document's own canvas is white: on a dark page the corner\n * arcs and the clip's antialiased edge composite as a white ring around the\n * film rather than as the page behind them.\n *\n * Measured on 2026-09-21 against the live videos page, whose background is\n * `rgb(42 52 64)` and whose film is `rgb(22 30 52)`: the frame's first column\n * read `rgb(137 141 152)` and its top-left corner `rgb(195 198 201)` —\n * lighter than either, so painted rather than blended. With the option off\n * the same pixels are the film.\n *\n * The shape is the placement's to decide in any case: `VideoPlayerFrame` takes\n * a `radius` from the element's own control and puts it on the frame, which a\n * second rounding inside the frame can only fight.\n */\nexport function wistiaPlayerSrc(\n value: unknown,\n options: WistiaPlayerOptions = {},\n): string | undefined {\n const embedUrl = wistiaEmbedUrl(value)\n if (!embedUrl) return undefined\n const params = new URLSearchParams({\n autoPlay: options.autoPlay === false ? 'false' : 'true',\n roundedPlayer: 'false',\n })\n if (options.doNotTrack) params.set('doNotTrack', 'true')\n if (options.muted) params.set('muted', 'true')\n if (options.loop) params.set('endVideoBehavior', 'loop')\n return `${embedUrl}?${params.toString()}`\n}\n"],"names":["WISTIA_PLAYER_ORIGIN","HASHED_ID","MEDIA_ID_PATHS","isWistiaHostname","hostname","some","domain","endsWith","wistiaMediaId","value","undefined","url","URL","trim","protocol","pattern","id","exec","pathname","test","wistiaEmbedUrl","wistiaPlayerSrc","options","embedUrl","params","URLSearchParams","autoPlay","roundedPlayer","doNotTrack","set","muted","loop","toString"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;;;;;;;;;CAwBC,GAED,+DAA+D,GAC/D,OAAO,MAAMA,uBAAuB,0BAAyB;AAE7D,sEAAsE,GACtE,MAAMC,YAAY;AAElB;;;;CAIC,GACD,MAAMC,iBAAoC;IACxC,0EAA0E;IAC1E;IACA,mCAAmC;IACnC;IACA,iCAAiC;IACjC;IACA,uEAAuE;IACvE;CACD;AAED;;;CAGC,GACD,SAASC,iBAAiBC,QAAgB;IACxC,OAAO;QAAC;QAAc;QAAc;KAAQ,CAACC,IAAI,CAC/C,CAACC,SAAWF,aAAaE,UAAUF,SAASG,QAAQ,CAAC,CAAC,CAAC,EAAED,QAAQ;AAErE;AAEA;;;;;CAKC,GACD,OAAO,SAASE,cAAcC,KAAc;IAC1C,IAAI,OAAOA,UAAU,UAAU,OAAOC;IACtC,IAAIC;IACJ,IAAI;QACFA,MAAM,IAAIC,IAAIH,MAAMI,IAAI;IAC1B,EAAE,eAAM;QACN,OAAOH;IACT;IACA,IAAIC,IAAIG,QAAQ,KAAK,YAAYH,IAAIG,QAAQ,KAAK,SAAS,OAAOJ;IAClE,IAAI,CAACP,iBAAiBQ,IAAIP,QAAQ,GAAG,OAAOM;IAC5C,KAAK,MAAMK,WAAWb,eAAgB;YACzBa;QAAX,MAAMC,MAAKD,gBAAAA,QAAQE,IAAI,CAACN,IAAIO,QAAQ,sBAAzBH,aAA4B,CAAC,EAAE;QAC1C,IAAIC,MAAMf,UAAUkB,IAAI,CAACH,KAAK,OAAOA;IACvC;IACA,OAAON;AACT;AAEA;;;CAGC,GACD,OAAO,SAASU,eAAeX,KAAc;IAC3C,MAAMO,KAAKR,cAAcC;IACzB,OAAOO,KAAK,GAAGhB,qBAAqB,cAAc,EAAEgB,IAAI,GAAGN;AAC7D;AAoBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BC,GACD,OAAO,SAASW,gBACdZ,KAAc,EACda,UAA+B,CAAC,CAAC;IAEjC,MAAMC,WAAWH,eAAeX;IAChC,IAAI,CAACc,UAAU,OAAOb;IACtB,MAAMc,SAAS,IAAIC,gBAAgB;QACjCC,UAAUJ,QAAQI,QAAQ,KAAK,QAAQ,UAAU;QACjDC,eAAe;IACjB;IACA,IAAIL,QAAQM,UAAU,EAAEJ,OAAOK,GAAG,CAAC,cAAc;IACjD,IAAIP,QAAQQ,KAAK,EAAEN,OAAOK,GAAG,CAAC,SAAS;IACvC,IAAIP,QAAQS,IAAI,EAAEP,OAAOK,GAAG,CAAC,oBAAoB;IACjD,OAAO,GAAGN,SAAS,CAAC,EAAEC,OAAOQ,QAAQ,IAAI;AAC3C"}
|