@tokenoftrust/storefront-runner 1.4.1 → 2.0.0
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/apps/storefront/astro.config.mjs +17 -1
- package/apps/storefront/env.d.ts +54 -5
- package/apps/storefront/integrations/materialize-guard.mjs +54 -0
- package/apps/storefront/migrations-apps/0002_good_switch.sql +26 -0
- package/apps/storefront/migrations-apps/0003_mute_marauders.sql +12 -0
- package/apps/storefront/migrations-apps/0004_deep_morph.sql +36 -0
- package/apps/storefront/migrations-apps/0005_common_mystique.sql +23 -0
- package/apps/storefront/migrations-apps/0006_broad_microchip.sql +16 -0
- package/apps/storefront/migrations-apps/0007_brave_outlaw_kid.sql +15 -0
- package/apps/storefront/migrations-apps/0008_blue_dazzler.sql +11 -0
- package/apps/storefront/migrations-apps/0009_bored_shinobi_shaw.sql +15 -0
- package/apps/storefront/migrations-apps/0010_ws4_verified_provider_measurement.sql +35 -0
- package/apps/storefront/migrations-apps/meta/0002_snapshot.json +1160 -0
- package/apps/storefront/migrations-apps/meta/0003_snapshot.json +1235 -0
- package/apps/storefront/migrations-apps/meta/0004_snapshot.json +1474 -0
- package/apps/storefront/migrations-apps/meta/0005_snapshot.json +1617 -0
- package/apps/storefront/migrations-apps/meta/0006_snapshot.json +1716 -0
- package/apps/storefront/migrations-apps/meta/0007_snapshot.json +1812 -0
- package/apps/storefront/migrations-apps/meta/0008_snapshot.json +1881 -0
- package/apps/storefront/migrations-apps/meta/0009_snapshot.json +1979 -0
- package/apps/storefront/migrations-apps/meta/_journal.json +56 -0
- package/apps/storefront/public/apps/tot.demo.analytics/0.1.0/entry.js +42 -0
- package/apps/storefront/public/js/dashboard-team.js +38 -2
- package/apps/storefront/public/platform/amplitude-http/v1/entry.mjs +19 -0
- package/apps/storefront/public/platform/google-measurement/v1/entry.mjs +19 -0
- package/apps/storefront/public/shared/commerce-chrome.css +20 -2
- package/apps/storefront/scripts/build-v84-clean-clone-standalone.mjs +68 -0
- package/apps/storefront/scripts/deny-v84-clean-clone-standalone-capabilities.mjs +111 -0
- package/apps/storefront/scripts/deny-v84-dogfood-capabilities.mjs +2 -0
- package/apps/storefront/scripts/deny-v84-lifecycle-capabilities.mjs +247 -0
- package/apps/storefront/scripts/dogfood-v84-nonportable-routes.ts +73 -0
- package/apps/storefront/scripts/fixed-v84-native-install-producer.ts +79 -0
- package/apps/storefront/scripts/generated/v84-clean-clone-replay.bundle.mjs +10982 -0
- package/apps/storefront/scripts/import-v84-through-ws2.ts +38 -0
- package/apps/storefront/scripts/initialize-v84-lifecycle-tooling-dependency.ts +2 -0
- package/apps/storefront/scripts/initialize-v84-lifecycle-tooling.ts +4 -0
- package/apps/storefront/scripts/install-v84-native-through-ws1.ts +185 -0
- package/apps/storefront/scripts/prove-clone-isolation.ts +506 -0
- package/apps/storefront/scripts/replay-v84-clean-clone-pass.ts +148 -0
- package/apps/storefront/scripts/replay-v84-clean-clone-standalone.ts +35 -0
- package/apps/storefront/scripts/replay-v84-clean-clone.ts +214 -0
- package/apps/storefront/scripts/run-fixed-v84-native-install-producer.mjs +18 -0
- package/apps/storefront/scripts/run-v84-clone-isolation-proof.mjs +18 -0
- package/apps/storefront/scripts/run-v84-clone-lifecycle-proof.mjs +18 -0
- package/apps/storefront/scripts/run-v84-import-through-ws2-proof.mjs +17 -0
- package/apps/storefront/scripts/run-v84-nonportable-route-dogfood.mjs +15 -0
- package/apps/storefront/scripts/sanitize-v84-proof-environment.mjs +21 -0
- package/apps/storefront/scripts/v84CleanCloneGraphPin.ts +42 -0
- package/apps/storefront/scripts/v84CleanCloneSourceGraph.ts +145 -0
- package/apps/storefront/scripts/validate-v84-clone-lifecycle.ts +18 -0
- package/apps/storefront/src/components/Img.astro +1 -1
- package/apps/storefront/src/components/Seo.astro +65 -1
- package/apps/storefront/src/components/admin/AdminBlogDetailRail.astro +878 -0
- package/apps/storefront/src/components/admin/AdminBlogTab.astro +1435 -0
- package/apps/storefront/src/components/admin/AdminCustomersTab.astro +3 -7
- package/apps/storefront/src/components/admin/AdminIntegrationsTab.astro +105 -0
- package/apps/storefront/src/components/admin/AdminPublishTab.astro +1980 -2564
- package/apps/storefront/src/components/admin/AdminSettingsTab.astro +2 -2
- package/apps/storefront/src/components/admin/AdminSubscriptionsTab.astro +1 -3
- package/apps/storefront/src/components/admin/orders/OrdersWorkspace.astro +5 -5
- package/apps/storefront/src/components/blog/BlogPaywall.astro +87 -0
- package/apps/storefront/src/components/blog/PostAccessBadge.astro +43 -0
- package/apps/storefront/src/components/blog/PostGrid.astro +57 -0
- package/apps/storefront/src/components/blog/ReactionBar.astro +214 -0
- package/apps/storefront/src/components/chrome/NavDropdown.astro +12 -0
- package/apps/storefront/src/components/chrome/SiteFooter.astro +7 -2
- package/apps/storefront/src/components/chrome/SiteHeader.astro +46 -10
- package/apps/storefront/src/components/compliance/AdultSignatureNotice.astro +1 -1
- package/apps/storefront/src/components/compliance/ComplianceNotice.astro +1 -2
- package/apps/storefront/src/components/compliance/ExciseTaxNotice.astro +1 -2
- package/apps/storefront/src/components/compliance/PactActNotice.astro +1 -1
- package/apps/storefront/src/components/compliance/Prop65Warning.astro +1 -2
- package/apps/storefront/src/components/compliance/PurchaseLimitNotice.astro +2 -3
- package/apps/storefront/src/components/compliance/ShippingRestrictionNotice.astro +2 -2
- package/apps/storefront/src/components/compliance/StateEligibilityNotice.astro +2 -3
- package/apps/storefront/src/components/content/TrustStrip.astro +4 -4
- package/apps/storefront/src/components/islands/MobileNav.tsx +26 -1
- package/apps/storefront/src/components/islands/VariantSelector.tsx +27 -2
- package/apps/storefront/src/components/islands/useCheckoutHandoffCorrelation.ts +75 -0
- package/apps/storefront/src/components/membership/IllustrativeLabel.astro +1 -2
- package/apps/storefront/src/components/membership/TierCards.astro +2 -2
- package/apps/storefront/src/components/membership/TierComparisonTable.astro +2 -2
- package/apps/storefront/src/components/subscription/SavingsExplainer.astro +2 -2
- package/apps/storefront/src/config/adminTenantLookup.ts +35 -0
- package/apps/storefront/src/config/devTenantSeed.ts +9 -9
- package/apps/storefront/src/config/resolver.ts +4 -4
- package/apps/storefront/src/layouts/Layout.astro +146 -21
- package/apps/storefront/src/lib/activity/alerts.ts +17 -19
- package/apps/storefront/src/lib/activity/candidateSubmitLease.ts +87 -0
- package/apps/storefront/src/lib/activity/changeActorAttribution.ts +89 -9
- package/apps/storefront/src/lib/activity/deployVersion.ts +20 -27
- package/apps/storefront/src/lib/activity/ingest.ts +8 -8
- package/apps/storefront/src/lib/activity/ingestAuth.ts +1 -1
- package/apps/storefront/src/lib/activity/killSwitch.ts +6 -6
- package/apps/storefront/src/lib/activity/query.ts +9 -9
- package/apps/storefront/src/lib/activity/recordActivity.ts +11 -15
- package/apps/storefront/src/lib/activity/store.ts +4 -6
- package/apps/storefront/src/lib/activity/uiActor.ts +12 -12
- package/apps/storefront/src/lib/activity/workerCommit.ts +6 -6
- package/apps/storefront/src/lib/admin/adminShell.ts +292 -0
- package/apps/storefront/src/lib/admin/ai/approvalMode.ts +2 -3
- package/apps/storefront/src/lib/admin/ai/audit.ts +3 -5
- package/apps/storefront/src/lib/admin/checkoutStyleInput.ts +7 -7
- package/apps/storefront/src/lib/admin/checkoutStyleTarget.ts +3 -3
- package/apps/storefront/src/lib/admin/envelope.ts +1 -2
- package/apps/storefront/src/lib/admin/orderClient.ts +3 -5
- package/apps/storefront/src/lib/admin/services/orders.ts +17 -19
- package/apps/storefront/src/lib/admin/viewmodels/aiWorkflows.ts +4 -6
- package/apps/storefront/src/lib/admin/viewmodels/settings.ts +1 -1
- package/apps/storefront/src/lib/apps/adminService.ts +14 -4
- package/apps/storefront/src/lib/apps/adminSession.ts +54 -45
- package/apps/storefront/src/lib/apps/apiAuth.ts +2 -2
- package/apps/storefront/src/lib/apps/apiRoute.ts +2 -2
- package/apps/storefront/src/lib/apps/appVersionStore.ts +281 -0
- package/apps/storefront/src/lib/apps/catalogMapper.ts +1 -1
- package/apps/storefront/src/lib/apps/consentConfigStore.ts +228 -0
- package/apps/storefront/src/lib/apps/credentials.ts +2 -2
- package/apps/storefront/src/lib/apps/gatewayKeys.ts +4 -4
- package/apps/storefront/src/lib/apps/gtmMigrationInstall.ts +447 -0
- package/apps/storefront/src/lib/apps/gtmMigrationReport.ts +367 -0
- package/apps/storefront/src/lib/apps/gtmMigrationTab.ts +315 -0
- package/apps/storefront/src/lib/apps/healthAggregate.ts +5 -5
- package/apps/storefront/src/lib/apps/integrationLifecycle.ts +614 -0
- package/apps/storefront/src/lib/apps/integrationLifecycleController.ts +125 -0
- package/apps/storefront/src/lib/apps/integrationReadModel.ts +563 -0
- package/apps/storefront/src/lib/apps/integrationsTab.ts +547 -0
- package/apps/storefront/src/lib/apps/integrationsView.ts +106 -0
- package/apps/storefront/src/lib/apps/managedAnalyticsService.ts +599 -0
- package/apps/storefront/src/lib/apps/orders/attributionService.ts +2 -2
- package/apps/storefront/src/lib/apps/orders/customerHash.ts +1 -1
- package/apps/storefront/src/lib/apps/orders/foxyOrderClient.ts +12 -12
- package/apps/storefront/src/lib/apps/orders/idempotency.ts +7 -7
- package/apps/storefront/src/lib/apps/orders/orderConversionD1.ts +150 -0
- package/apps/storefront/src/lib/apps/orders/orderForwardReceiver.ts +9 -1
- package/apps/storefront/src/lib/apps/orders/orderMapper.ts +2 -2
- package/apps/storefront/src/lib/apps/orders/ordersStore.ts +7 -7
- package/apps/storefront/src/lib/apps/orders/verifiedProviderMeasurement.ts +117 -0
- package/apps/storefront/src/lib/apps/registryService.ts +270 -16
- package/apps/storefront/src/lib/apps/scopes.ts +2 -2
- package/apps/storefront/src/lib/apps/tenantIntegrationMaterialization.ts +170 -0
- package/apps/storefront/src/lib/apps/tokenIssuer.ts +4 -4
- package/apps/storefront/src/lib/apps/tokenVerifier.ts +6 -6
- package/apps/storefront/src/lib/apps/v84CleanCloneReplayContext.ts +16 -0
- package/apps/storefront/src/lib/apps/v84CloneLifecycleCacheEvidence.ts +105 -0
- package/apps/storefront/src/lib/apps/v84CloneLifecycleEvidence.ts +177 -0
- package/apps/storefront/src/lib/apps/v84CloneLifecycleMaterialization.ts +251 -0
- package/apps/storefront/src/lib/apps/v84CloneLifecycleSemantics.ts +241 -0
- package/apps/storefront/src/lib/apps/v84CloneMigrationEvidence.ts +211 -0
- package/apps/storefront/src/lib/apps/v84CloneNativeInstallEvidence.ts +409 -0
- package/apps/storefront/src/lib/apps/v84NonportableCodeCoaching.ts +368 -0
- package/apps/storefront/src/lib/apps/v84NonportableRouteContract.ts +188 -0
- package/apps/storefront/src/lib/apps/v84NonportableRouteDogfood.ts +291 -0
- package/apps/storefront/src/lib/apps/widgets/eligibility.ts +2 -2
- package/apps/storefront/src/lib/apps/widgets/frameProps.ts +3 -3
- package/apps/storefront/src/lib/apps/widgets/launchToken.ts +4 -4
- package/apps/storefront/src/lib/apps/widgets/placements.ts +2 -2
- package/apps/storefront/src/lib/apps/widgets/renderSlot.ts +1 -1
- package/apps/storefront/src/lib/apps/ws1ManagedAnalyticsClient.ts +95 -0
- package/apps/storefront/src/lib/auth/adminApiGuard.ts +66 -0
- package/apps/storefront/src/lib/auth/adminEntry.ts +11 -11
- package/apps/storefront/src/lib/auth/adminLanding.ts +88 -0
- package/apps/storefront/src/lib/auth/identityToken.ts +6 -14
- package/apps/storefront/src/lib/auth/loginGate.ts +75 -13
- package/apps/storefront/src/lib/auth/mcpClientAssertion.ts +2 -4
- package/apps/storefront/src/lib/auth/operatorSession.ts +113 -0
- package/apps/storefront/src/lib/auth/session.ts +7 -8
- package/apps/storefront/src/lib/auth/totAccessClient.ts +8 -18
- package/apps/storefront/src/lib/basePath.ts +9 -2
- package/apps/storefront/src/lib/blog/access.ts +29 -0
- package/apps/storefront/src/lib/blog/collection.ts +400 -0
- package/apps/storefront/src/lib/blog/markdown.ts +174 -0
- package/apps/storefront/src/lib/blog/provider.ts +62 -3
- package/apps/storefront/src/lib/blog/reactions.ts +87 -0
- package/apps/storefront/src/lib/blog/rss.ts +92 -0
- package/apps/storefront/src/lib/blog/teaser.ts +83 -0
- package/apps/storefront/src/lib/blog/types.ts +34 -0
- package/apps/storefront/src/lib/blog/viewCounts.ts +243 -0
- package/apps/storefront/src/lib/chrome/examples/tokenoftrust.chrome-assignments.example.json +6 -0
- package/apps/storefront/src/lib/chrome/examples/tokenoftrust.chrome.example.json +79 -0
- package/apps/storefront/src/lib/chrome/model.ts +48 -253
- package/apps/storefront/src/lib/chrome/navCurrent.ts +29 -0
- package/apps/storefront/src/lib/chrome/parseConfig.ts +18 -32
- package/apps/storefront/src/lib/chrome/variant.ts +39 -0
- package/apps/storefront/src/lib/commerce/checkoutHandoffCorrelation.ts +105 -0
- package/apps/storefront/src/lib/compliance/tamper-sentinel-boot.ts +152 -0
- package/apps/storefront/src/lib/compliance/tamper-sentinel.ts +327 -0
- package/apps/storefront/src/lib/content/index.ts +5 -5
- package/apps/storefront/src/lib/content-edit/applyDiff.ts +1 -1
- package/apps/storefront/src/lib/content-edit/route.ts +1 -1
- package/apps/storefront/src/lib/d1/catalog.ts +14 -2
- package/apps/storefront/src/lib/d1/schema-apps.ts +372 -17
- package/apps/storefront/src/lib/dev/activityIngestToken.ts +2 -4
- package/apps/storefront/src/lib/dev/activityStore.ts +3 -5
- package/apps/storefront/src/lib/dev/apiBase.ts +1 -4
- package/apps/storefront/src/lib/dev/cockpit/ask.ts +49 -0
- package/apps/storefront/src/lib/dev/cockpit/clickToSource.ts +71 -0
- package/apps/storefront/src/lib/dev/cockpit/copyCommand.ts +227 -0
- package/apps/storefront/src/lib/dev/cockpit/files.ts +249 -0
- package/apps/storefront/src/lib/dev/cockpit/hostedActivity.ts +500 -0
- package/apps/storefront/src/lib/dev/cockpit/infoPopover.ts +12 -0
- package/apps/storefront/src/lib/dev/cockpit/mcpCopy.ts +34 -0
- package/apps/storefront/src/lib/dev/cockpit/monitor.ts +107 -0
- package/apps/storefront/src/lib/dev/cockpit/stepper.ts +116 -0
- package/apps/storefront/src/lib/dev/cockpit/themeToggle.ts +23 -0
- package/apps/storefront/src/lib/dev/cockpitStore.ts +1 -9
- package/apps/storefront/src/lib/dev/devDraft.ts +1 -1
- package/apps/storefront/src/lib/dev/previewStatus.ts +9 -21
- package/apps/storefront/src/lib/dev/rendezvousBroker.ts +9 -24
- package/apps/storefront/src/lib/dev/runtimeStore.ts +1 -1
- package/apps/storefront/src/lib/edgeCache.ts +34 -5
- package/apps/storefront/src/lib/email/candidateConflictEmail.ts +80 -0
- package/apps/storefront/src/lib/http/fetchTransport.ts +63 -0
- package/apps/storefront/src/lib/i18n.ts +25 -0
- package/apps/storefront/src/lib/integration/browserEnvironment.ts +137 -0
- package/apps/storefront/src/lib/integration/managedInstallDeclarations.ts +72 -0
- package/apps/storefront/src/lib/integration/nonceStamp.ts +49 -0
- package/apps/storefront/src/lib/integration/tenantDeclarations.ts +116 -0
- package/apps/storefront/src/lib/jsonld.ts +118 -0
- package/apps/storefront/src/lib/membership/eligibility.ts +1 -1
- package/apps/storefront/src/lib/membership/model.ts +1 -2
- package/apps/storefront/src/lib/monitoring/manifest.ts +11 -11
- package/apps/storefront/src/lib/newsletter/confirmationEmail.ts +30 -0
- package/apps/storefront/src/lib/newsletter/consent.ts +23 -0
- package/apps/storefront/src/lib/newsletter/digest.ts +117 -0
- package/apps/storefront/src/lib/newsletter/resendClient.ts +79 -0
- package/apps/storefront/src/lib/newsletter/send.ts +265 -0
- package/apps/storefront/src/lib/newsletter/subscribers.ts +156 -0
- package/apps/storefront/src/lib/previewReload.ts +57 -1
- package/apps/storefront/src/lib/publish/adminPublishTab.ts +4625 -0
- package/apps/storefront/src/lib/publish/apex-readiness.ts +41 -18
- package/apps/storefront/src/lib/publish/buildStream.ts +269 -0
- package/apps/storefront/src/lib/publish/collapsePersistence.ts +72 -0
- package/apps/storefront/src/lib/publish/dispatchHealth.ts +5 -7
- package/apps/storefront/src/lib/publish/domainState.ts +22 -13
- package/apps/storefront/src/lib/publish/lifecycleState.ts +369 -0
- package/apps/storefront/src/lib/publish/liveReleaseSummary.ts +29 -0
- package/apps/storefront/src/lib/publish/mergeDoctorOnFailure.ts +78 -0
- package/apps/storefront/src/lib/publish/mergeHealthBanner.ts +62 -0
- package/apps/storefront/src/lib/publish/mergeRowFindings.ts +124 -0
- package/apps/storefront/src/lib/publish/mergeSupportEscalation.ts +75 -0
- package/apps/storefront/src/lib/publish/panelPolling.ts +78 -0
- package/apps/storefront/src/lib/publish/publish-guard.ts +88 -0
- package/apps/storefront/src/lib/publish/publishFormat.ts +165 -0
- package/apps/storefront/src/lib/publish/publishHero.ts +177 -0
- package/apps/storefront/src/lib/publish/reviewRelease/changeState.ts +66 -0
- package/apps/storefront/src/lib/publish/reviewRelease/copy.ts +141 -0
- package/apps/storefront/src/lib/publish/reviewRelease/index.ts +41 -0
- package/apps/storefront/src/lib/publish/reviewRelease/permissions.ts +47 -0
- package/apps/storefront/src/lib/publish/reviewRelease/releaseState.ts +42 -0
- package/apps/storefront/src/lib/publish/reviewRelease/types.ts +59 -0
- package/apps/storefront/src/lib/publish/reviewRelease/viewModel.ts +440 -0
- package/apps/storefront/src/lib/publish/reviewReleaseWorkspace/actions.ts +161 -0
- package/apps/storefront/src/lib/publish/reviewReleaseWorkspace/controller.ts +325 -0
- package/apps/storefront/src/lib/publish/reviewReleaseWorkspace/render.ts +241 -0
- package/apps/storefront/src/lib/publish/shipWorkspace.ts +121 -51
- package/apps/storefront/src/lib/publish/sseRoute.ts +119 -0
- package/apps/storefront/src/lib/publish/stageBundleUpload.ts +215 -0
- package/apps/storefront/src/lib/publish/streamLogConsole.ts +142 -0
- package/apps/storefront/src/lib/publish/versionNumber.ts +52 -0
- package/apps/storefront/src/lib/rate/kvWindow.ts +53 -0
- package/apps/storefront/src/lib/rawChrome.ts +125 -47
- package/apps/storefront/src/lib/rawMarketingHtml.ts +74 -3
- package/apps/storefront/src/lib/search/index.ts +2 -2
- package/apps/storefront/src/lib/seo/alternates.ts +42 -0
- package/apps/storefront/src/lib/seo/meta.ts +65 -0
- package/apps/storefront/src/lib/social/golive.ts +212 -0
- package/apps/storefront/src/lib/social/notify.ts +32 -0
- package/apps/storefront/src/lib/social/tokenStore.ts +171 -0
- package/apps/storefront/src/lib/storyblok/content-model.ts +7 -33
- package/apps/storefront/src/lib/storyblok/provider.ts +168 -60
- package/apps/storefront/src/lib/subscription/model.ts +4 -4
- package/apps/storefront/src/lib/the-build/provider.ts +32 -0
- package/apps/storefront/src/lib/the-build/readingTime.ts +35 -0
- package/apps/storefront/src/lib/the-build/toc.ts +95 -0
- package/apps/storefront/src/lib/tot/ToTClient.ts +1 -1
- package/apps/storefront/src/lib/tot/d1Client.ts +2 -2
- package/apps/storefront/src/lib/tot/totClientInterface.ts +3 -4
- package/apps/storefront/src/lib/webhooks/deliveryStore.ts +16 -17
- package/apps/storefront/src/middleware/index.ts +385 -52
- package/apps/storefront/src/pages/[...slug].astro +9 -4
- package/apps/storefront/src/pages/admin/review-release.astro +265 -0
- package/apps/storefront/src/pages/admin/select.astro +96 -0
- package/apps/storefront/src/pages/admin.astro +25 -1313
- package/apps/storefront/src/pages/api/activity.ts +8 -8
- package/apps/storefront/src/pages/api/admin/activity-alerts.ts +5 -20
- package/apps/storefront/src/pages/api/admin/orders/[id].ts +7 -2
- package/apps/storefront/src/pages/api/admin/orders.ts +8 -2
- package/apps/storefront/src/pages/api/apps/admin/gtm-migration-install.ts +174 -0
- package/apps/storefront/src/pages/api/apps/admin/gtm-migration.ts +96 -0
- package/apps/storefront/src/pages/api/apps/admin/integration-lifecycle.ts +118 -0
- package/apps/storefront/src/pages/api/apps/admin/integrations.ts +89 -0
- package/apps/storefront/src/pages/api/apps/admin/platform-adapters.ts +85 -0
- package/apps/storefront/src/pages/api/apps/internal/order-forward.ts +74 -2
- package/apps/storefront/src/pages/api/blog/[collection]/[slug]/react.ts +104 -0
- package/apps/storefront/src/pages/api/commerce/checkout-handoff.ts +77 -0
- package/apps/storefront/src/pages/api/compliance/tamper.ts +88 -0
- package/apps/storefront/src/pages/api/integrations/v1/[operation].ts +108 -0
- package/apps/storefront/src/pages/api/newsletter/[collection]/subscribe.ts +146 -0
- package/apps/storefront/src/pages/api/newsletter/confirm.ts +75 -0
- package/apps/storefront/src/pages/api/newsletter/unsubscribe.ts +90 -0
- package/apps/storefront/src/pages/api/publish/stage-bundle.ts +70 -0
- package/apps/storefront/src/pages/api/rum/vitals.ts +20 -2
- package/apps/storefront/src/pages/blog/[slug].astro +99 -19
- package/apps/storefront/src/pages/blog/author/[author].astro +140 -0
- package/apps/storefront/src/pages/blog/category/[category].astro +67 -0
- package/apps/storefront/src/pages/blog/index.astro +4 -2
- package/apps/storefront/src/pages/blog/tag/[tag].astro +65 -0
- package/apps/storefront/src/pages/cockpit.astro +77 -1353
- package/apps/storefront/src/pages/dashboard/[appDomain]/team.astro +15 -11
- package/apps/storefront/src/pages/index.astro +10 -5
- package/apps/storefront/src/pages/llms.txt.ts +1 -1
- package/apps/storefront/src/pages/products/[handle].astro +7 -6
- package/apps/storefront/src/pages/search.astro +1 -1
- package/apps/storefront/src/pages/sitemap.xml.ts +21 -1
- package/apps/storefront/src/pages/style-guide/[tenant]/[theme].astro +31 -27
- package/apps/storefront/src/pages/style-guide/[tenant]/chrome/[theme].astro +1 -1
- package/apps/storefront/src/pages/tenants/[id]/[...path].ts +38 -2
- package/apps/storefront/src/pages/the-build/[slug].astro +129 -0
- package/apps/storefront/src/pages/the-build/index.astro +146 -0
- package/apps/storefront/src/pages/the-build/rss.xml.ts +33 -0
- package/apps/storefront/src/styles/admin.css +1106 -0
- package/apps/storefront/tsconfig.json +6 -1
- package/package.json +1 -1
- package/packages/public-runtime/package.json +3 -1
- package/packages/public-runtime/schemas/managed-analytics/v1/adapter-definition.schema.json +427 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/create-integration-install-request.schema.json +161 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/create-migration-draft-request.schema.json +157 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/delete-integration-install-request.schema.json +84 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/delete-migration-draft-request.schema.json +84 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/error-envelope.schema.json +180 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/get-adapter-definition-request.schema.json +52 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/get-integration-install-request.schema.json +52 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/get-integration-revision-request.schema.json +79 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/get-migration-draft-request.schema.json +52 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/integration-install.schema.json +167 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/integration-revision.schema.json +208 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/list-adapter-definitions-request.schema.json +53 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/list-integration-installs-request.schema.json +53 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/list-integration-revisions-request.schema.json +82 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/migration-draft.schema.json +218 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/mutation-request.schema.json +52 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/mutation-success-envelope.schema.json +49 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/read-request.schema.json +20 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/read-success-envelope.schema.json +45 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/revise-integration-install-request.schema.json +156 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/set-integration-install-status-request.schema.json +92 -0
- package/packages/public-runtime/schemas/managed-analytics/v1/update-migration-draft-request.schema.json +184 -0
- package/packages/public-runtime/scripts/generate-managed-analytics-api-v1-schemas.mjs +13 -0
- package/packages/public-runtime/src/activity/catalog.ts +89 -33
- package/packages/public-runtime/src/activity/event.ts +6 -6
- package/packages/public-runtime/src/activity/index.ts +2 -2
- package/packages/public-runtime/src/activity/redaction.ts +4 -4
- package/packages/public-runtime/src/candidate-index.ts +42 -8
- package/packages/public-runtime/src/catalog-d1.ts +1 -1
- package/packages/public-runtime/src/checkout-orders.ts +2 -2
- package/packages/public-runtime/src/checkout-style-publish.ts +2 -2
- package/packages/public-runtime/src/checkout-style.ts +7 -7
- package/packages/public-runtime/src/checkout.ts +3 -3
- package/packages/public-runtime/src/chrome.ts +777 -0
- package/packages/public-runtime/src/compliance-obligations.ts +310 -0
- package/packages/public-runtime/src/csp.ts +99 -0
- package/packages/public-runtime/src/customization-preview.ts +25 -2
- package/packages/public-runtime/src/customization-runtime.ts +156 -3
- package/packages/public-runtime/src/customization-versioning.ts +10 -0
- package/packages/public-runtime/src/destination-webhook/contract.ts +353 -0
- package/packages/public-runtime/src/embed-catalog.d.mts +9 -0
- package/packages/public-runtime/src/embed-catalog.mjs +40 -0
- package/packages/public-runtime/src/evidence.ts +288 -0
- package/packages/public-runtime/src/gtm-migration/bounds.ts +138 -0
- package/packages/public-runtime/src/gtm-migration/disposition-rules.ts +361 -0
- package/packages/public-runtime/src/gtm-migration/dispositions.ts +181 -0
- package/packages/public-runtime/src/gtm-migration/draft-generator.ts +400 -0
- package/packages/public-runtime/src/gtm-migration/graph.ts +468 -0
- package/packages/public-runtime/src/gtm-migration/index.ts +95 -0
- package/packages/public-runtime/src/gtm-migration/parse.ts +410 -0
- package/packages/public-runtime/src/gtm-migration/references.ts +266 -0
- package/packages/public-runtime/src/gtm-migration/types.ts +86 -0
- package/packages/public-runtime/src/index.ts +17 -1
- package/packages/public-runtime/src/integration/assurance-decision.ts +259 -0
- package/packages/public-runtime/src/integration/assurance.ts +228 -0
- package/packages/public-runtime/src/integration/candidate-evidence.ts +377 -0
- package/packages/public-runtime/src/integration/commerce-broker.ts +497 -0
- package/packages/public-runtime/src/integration/consent-broker.ts +337 -0
- package/packages/public-runtime/src/integration/consent-cmp-demand.ts +115 -0
- package/packages/public-runtime/src/integration/consent-config.ts +260 -0
- package/packages/public-runtime/src/integration/consent-preview.ts +125 -0
- package/packages/public-runtime/src/integration/correlation-token.ts +444 -0
- package/packages/public-runtime/src/integration/csp-compiler.ts +267 -0
- package/packages/public-runtime/src/integration/csp.ts +105 -0
- package/packages/public-runtime/src/integration/digest.ts +43 -0
- package/packages/public-runtime/src/integration/environment.ts +228 -0
- package/packages/public-runtime/src/integration/events-catalog.ts +186 -0
- package/packages/public-runtime/src/integration/events.ts +701 -0
- package/packages/public-runtime/src/integration/g2-action-boundary.ts +106 -0
- package/packages/public-runtime/src/integration/index.ts +90 -0
- package/packages/public-runtime/src/integration/interim-bridge.ts +138 -0
- package/packages/public-runtime/src/integration/lifecycle-boot.ts +317 -0
- package/packages/public-runtime/src/integration/lifecycle-runtime.ts +393 -0
- package/packages/public-runtime/src/integration/lifecycle.ts +94 -0
- package/packages/public-runtime/src/integration/managed-analytics-api-v1-safety.d.mts +2 -0
- package/packages/public-runtime/src/integration/managed-analytics-api-v1-safety.mjs +10 -0
- package/packages/public-runtime/src/integration/managed-analytics-api-v1.schemas.ts +382 -0
- package/packages/public-runtime/src/integration/managed-analytics-api-v1.ts +684 -0
- package/packages/public-runtime/src/integration/managed-analytics-bridge.ts +383 -0
- package/packages/public-runtime/src/integration/managed-analytics-value-safety.ts +14 -0
- package/packages/public-runtime/src/integration/managed-analytics.ts +277 -0
- package/packages/public-runtime/src/integration/manifest.ts +470 -0
- package/packages/public-runtime/src/integration/native-amplitude.ts +362 -0
- package/packages/public-runtime/src/integration/native-ga4.ts +352 -0
- package/packages/public-runtime/src/integration/observability.ts +451 -0
- package/packages/public-runtime/src/integration/order-conversion.ts +0 -0
- package/packages/public-runtime/src/integration/phases.ts +182 -0
- package/packages/public-runtime/src/integration/plan.ts +112 -0
- package/packages/public-runtime/src/integration/platform-adapter-runtime.ts +146 -0
- package/packages/public-runtime/src/integration/platform-adapters.ts +671 -0
- package/packages/public-runtime/src/integration/promotion-gate.ts +451 -0
- package/packages/public-runtime/src/integration/provider-checkout-extension.ts +425 -0
- package/packages/public-runtime/src/integration/receipt-measurement.ts +370 -0
- package/packages/public-runtime/src/integration/regulated-parent-cert.ts +311 -0
- package/packages/public-runtime/src/integration/render-phases.ts +267 -0
- package/packages/public-runtime/src/integration/resolve.ts +465 -0
- package/packages/public-runtime/src/integration/result.ts +239 -0
- package/packages/public-runtime/src/integration/secrets.ts +92 -0
- package/packages/public-runtime/src/integration/tamper-evidence.ts +205 -0
- package/packages/public-runtime/src/integration/tamper-recovery.ts +127 -0
- package/packages/public-runtime/src/integration/version.ts +92 -0
- package/packages/public-runtime/src/integration-capabilities.ts +520 -0
- package/packages/public-runtime/src/membership.ts +2 -2
- package/packages/public-runtime/src/raw-html-policy.ts +2 -4
- package/packages/public-runtime/src/regulated-commerce/broker/consent-dedupe.ts +144 -0
- package/packages/public-runtime/src/regulated-commerce/correlation/contract.ts +177 -0
- package/packages/public-runtime/src/regulated-commerce/diagnostics/local-dispatch.ts +24 -0
- package/packages/public-runtime/src/regulated-commerce/diagnostics/read-model.ts +69 -0
- package/packages/public-runtime/src/regulated-commerce/dispatch/core.ts +134 -0
- package/packages/public-runtime/src/regulated-commerce/events/contract.ts +113 -0
- package/packages/public-runtime/src/regulated-commerce/ledger/core.ts +81 -0
- package/packages/public-runtime/src/regulated-commerce/mappings/ga4-ads.ts +87 -0
- package/packages/public-runtime/src/regulated-commerce/provider-order/bridge.ts +52 -0
- package/packages/public-runtime/src/regulated-commerce/purchase-truth/contract.ts +252 -0
- package/packages/public-runtime/src/regulated-commerce/sources/accepted-browser-operation.ts +67 -0
- package/packages/public-runtime/src/regulated-commerce/testing/fake-destination.ts +93 -0
- package/packages/public-runtime/src/static-bundle.ts +357 -0
- package/packages/public-runtime/src/tenant-assets.ts +143 -4
- package/packages/public-runtime/src/tenant.ts +81 -17
- package/packages/public-runtime/tests/fixtures/integration/browser-environment.example.json +8 -0
- package/packages/public-runtime/tests/fixtures/integration/commerce-event.example.json +44 -0
- package/packages/public-runtime/tests/fixtures/integration/commerce-order-event.example.json +44 -0
- package/packages/public-runtime/tests/fixtures/integration/compliance-assurance-record.example.json +50 -0
- package/packages/public-runtime/tests/fixtures/integration/integration-manifest-v2.example.json +120 -0
- package/packages/public-runtime/tests/fixtures/integration/managed-analytics-v1/fake-adapter-catalog.json +35 -0
- package/packages/public-runtime/tests/fixtures/integration/tenant-action-registry.example.json +11 -0
- package/packages/public-runtime/tests/fixtures/integration/tenant-local-example/README.md +22 -0
- package/packages/public-runtime/tests/fixtures/integration/tenant-local-example/entry.js +30 -0
- package/packages/public-runtime/tests/fixtures/integration/tenant-local-example/manifest.json +75 -0
- package/packages/public-runtime/tests/fixtures/integration/tenant-local-example/public-config.json +3 -0
- package/packages/public-runtime/tests/fixtures/regulated-commerce/fake-destinations.ts +38 -0
- package/packages/public-runtime/tests/gtm-migration/fixtures/gtm-sample-container-v84.provenance.json +29 -0
- package/packages/public-runtime/tests/gtm-migration/fixtures/gtm-sample-container-v84.redacted.json +3397 -0
- package/scripts/build/copy-tenant-assets.mjs +14 -4
- package/scripts/dev/ai-edit.mjs +1 -1
- package/scripts/dev/checkout-watch.mjs +2 -2
- package/scripts/dev/file-browser.mjs +4 -6
- package/scripts/dev/file-writer.mjs +3 -3
- package/scripts/dev/git-status.mjs +2 -2
- package/scripts/dev/integration-guardrails.mjs +498 -0
- package/scripts/dev/locate-handler.mjs +3 -3
- package/scripts/dev/port-check.mjs +3 -3
- package/scripts/dev/publish.mjs +5 -9
- package/scripts/dev/safe-path.mjs +2 -2
- package/scripts/dev/shot.mjs +1 -1
- package/scripts/dev/tenant-source-root.mjs +1 -1
- package/scripts/dev/unified-diff.mjs +8 -3
- package/scripts/tot-dev.mjs +8 -11
- package/apps/storefront/src/lib/dev/vcBinding.ts +0 -80
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exact-clone, transport-free proof that reviewed GA4 and Amplitude destinations
|
|
3
|
+
* can be drafted and installed through WS1's public Integration Management API.
|
|
4
|
+
* The injected client is the only authority: this module has no database,
|
|
5
|
+
* environment/config, network, lifecycle-publish, or runtime execution seam.
|
|
6
|
+
*/
|
|
7
|
+
import {
|
|
8
|
+
APPROVED_MARKETING_ACTION_NAMES,
|
|
9
|
+
MANAGED_ANALYTICS_SCHEMA_VERSION,
|
|
10
|
+
MANAGED_ANALYTICS_API_VERSION,
|
|
11
|
+
eventDedupeKey,
|
|
12
|
+
platformAdapterCatalog,
|
|
13
|
+
sha256Hex,
|
|
14
|
+
snapshotManagedAnalyticsDeclarativeInput,
|
|
15
|
+
stableIntegrationStringify,
|
|
16
|
+
validateAdapterDefinition,
|
|
17
|
+
validateCreateMigrationDraftRequest,
|
|
18
|
+
validateManagedAnalyticsSafePayload,
|
|
19
|
+
validateMigrationDraftV1,
|
|
20
|
+
type AdapterDefinition,
|
|
21
|
+
type CreateMigrationDraftRequest,
|
|
22
|
+
type MigrationDraftV1,
|
|
23
|
+
} from "@tot/public-runtime";
|
|
24
|
+
import {
|
|
25
|
+
prepareWs1ApiResponse,
|
|
26
|
+
reviewInstallDraft,
|
|
27
|
+
} from "./gtmMigrationInstall.js";
|
|
28
|
+
import type { Ws1ManagedAnalyticsMigrationClient } from "./ws1ManagedAnalyticsClient.js";
|
|
29
|
+
import type { V84CloneMigrationEvidence } from "./v84CloneMigrationEvidence.js";
|
|
30
|
+
|
|
31
|
+
export const V84_NATIVE_SOURCE_TENANT = "tokenoftrust.com" as const;
|
|
32
|
+
export const V84_NATIVE_CLONE_TENANT = "tokenoftrust.com~clone~gtm-migration-v84" as const;
|
|
33
|
+
export const V84_WS1_FINAL = "13feb8eeb80a5f86d133c50d5a0246b43a2634ea" as const;
|
|
34
|
+
export const V84_WS1_API_CONTRACT = "8d8b1a5807fa5e4a22ef9060470da958c70ac691" as const;
|
|
35
|
+
export const V84_WS2_FINAL = "1c9accab31aff3e72ccd435ce7b6f85e683d105d" as const;
|
|
36
|
+
/** SHA-256 of the complete deterministic WS2 evidence pinned by V84_WS2_FINAL. */
|
|
37
|
+
export const V84_WS2_EVIDENCE_SHA256 = "7156b52af31f29a1055e60bdbc5488cc06bedf68e8ab89325d92ae542b303881" as const;
|
|
38
|
+
|
|
39
|
+
const DESTINATIONS = [
|
|
40
|
+
{
|
|
41
|
+
key: "ga4",
|
|
42
|
+
adapterId: "platform.google-measurement",
|
|
43
|
+
destinationId: "G-V84FAKE01",
|
|
44
|
+
findings: ["v84.ga4.reviewed", "canonical.actions.allowlisted"],
|
|
45
|
+
provenance: "ws2-draft-plus-reviewed-fake-configuration" as const,
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
key: "amplitude",
|
|
49
|
+
adapterId: "platform.amplitude",
|
|
50
|
+
destinationId: "0123456789abcdef0123456789abcdef",
|
|
51
|
+
findings: ["v84.amplitude.reviewed", "canonical.actions.allowlisted"],
|
|
52
|
+
provenance: "separately-reviewed-native-addition" as const,
|
|
53
|
+
},
|
|
54
|
+
] as const;
|
|
55
|
+
|
|
56
|
+
/** Public-runtime-only adapter snapshots for the offline WS1 fake client. */
|
|
57
|
+
export function v84PublicAdapterDefinitions(): AdapterDefinition[] {
|
|
58
|
+
return platformAdapterCatalog().map((card) => {
|
|
59
|
+
const checked = validateAdapterDefinition({
|
|
60
|
+
schemaVersion: MANAGED_ANALYTICS_SCHEMA_VERSION,
|
|
61
|
+
adapterId: card.adapterId,
|
|
62
|
+
adapterVersion: "1.0.0",
|
|
63
|
+
displayName: card.name,
|
|
64
|
+
description: card.purpose,
|
|
65
|
+
availability: "available",
|
|
66
|
+
configuration: [{
|
|
67
|
+
key: "destinationId",
|
|
68
|
+
label: card.idLabel,
|
|
69
|
+
description: "Public destination identifier used by this reviewed adapter.",
|
|
70
|
+
kind: "string",
|
|
71
|
+
required: true,
|
|
72
|
+
}],
|
|
73
|
+
eventTypes: [...card.eventTypes],
|
|
74
|
+
consentPurposes: [...card.consentPurposes],
|
|
75
|
+
collectionOrigins: [...card.cspOrigins].sort(),
|
|
76
|
+
});
|
|
77
|
+
if (!checked.ok) throw new Error("The public adapter catalog failed its pinned WS1 contract.");
|
|
78
|
+
return checked.value;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export interface V84NativeInstallEvidence {
|
|
83
|
+
readonly schemaVersion: 1;
|
|
84
|
+
readonly scope: {
|
|
85
|
+
readonly sourceTenant: typeof V84_NATIVE_SOURCE_TENANT;
|
|
86
|
+
readonly sourceMode: "read-only";
|
|
87
|
+
readonly cloneTenant: typeof V84_NATIVE_CLONE_TENANT;
|
|
88
|
+
readonly environment: "diagnostic-clone";
|
|
89
|
+
readonly destinationMode: "offline-in-memory-fake-only";
|
|
90
|
+
readonly publicClientTransport: "tenant-bound-http-adapter-with-injected-no-network-fetch";
|
|
91
|
+
};
|
|
92
|
+
readonly contractPins: {
|
|
93
|
+
readonly ws1Final: typeof V84_WS1_FINAL;
|
|
94
|
+
readonly ws1ApiContract: typeof V84_WS1_API_CONTRACT;
|
|
95
|
+
readonly ws2Final: typeof V84_WS2_FINAL;
|
|
96
|
+
readonly ws2EvidenceSha256: typeof V84_WS2_EVIDENCE_SHA256;
|
|
97
|
+
};
|
|
98
|
+
readonly installations: readonly {
|
|
99
|
+
readonly adapterId: string;
|
|
100
|
+
readonly adapterVersion: string;
|
|
101
|
+
readonly configurationKeys: readonly ["destinationId"];
|
|
102
|
+
readonly destinationValueRedacted: true;
|
|
103
|
+
readonly consentPurposes: readonly string[];
|
|
104
|
+
readonly collectionOrigins: readonly string[];
|
|
105
|
+
readonly eventTypes: readonly string[];
|
|
106
|
+
readonly adapterSnapshotCount: 1;
|
|
107
|
+
readonly provenance: "ws2-draft-plus-reviewed-fake-configuration" | "separately-reviewed-native-addition";
|
|
108
|
+
readonly desired: {
|
|
109
|
+
readonly installStatus: "disabled";
|
|
110
|
+
readonly revisionStatus: "draft";
|
|
111
|
+
readonly configured: true;
|
|
112
|
+
};
|
|
113
|
+
readonly effective: {
|
|
114
|
+
readonly activeRevisionId: null;
|
|
115
|
+
readonly materialized: false;
|
|
116
|
+
};
|
|
117
|
+
}[];
|
|
118
|
+
readonly semanticActions: readonly string[];
|
|
119
|
+
readonly eventIdentity: {
|
|
120
|
+
readonly logicalId: "evt-v84-proof";
|
|
121
|
+
readonly dedupeKey: "evt-v84-proof";
|
|
122
|
+
readonly duplicateActionNames: 0;
|
|
123
|
+
};
|
|
124
|
+
readonly operationCounts: {
|
|
125
|
+
readonly createMigrationDraft: 2;
|
|
126
|
+
readonly getMigrationDraft: 2;
|
|
127
|
+
/** Reads performed by this install composition, independent of prior evidence production. */
|
|
128
|
+
readonly getAdapterDefinition: 2;
|
|
129
|
+
readonly createIntegrationInstall: 2;
|
|
130
|
+
readonly reviseIntegrationInstall: 0;
|
|
131
|
+
readonly setIntegrationInstallStatus: 0;
|
|
132
|
+
readonly publish: 0;
|
|
133
|
+
};
|
|
134
|
+
readonly priorEvidenceOperationCounts: {
|
|
135
|
+
/** The validated catalog snapshot already represented by the supplied WS2 evidence. */
|
|
136
|
+
readonly getAdapterDefinition: 1;
|
|
137
|
+
};
|
|
138
|
+
readonly composedOperationCounts: {
|
|
139
|
+
readonly createMigrationDraft: 2;
|
|
140
|
+
readonly getMigrationDraft: 2;
|
|
141
|
+
readonly getAdapterDefinition: 3;
|
|
142
|
+
readonly createIntegrationInstall: 2;
|
|
143
|
+
readonly reviseIntegrationInstall: 0;
|
|
144
|
+
readonly setIntegrationInstallStatus: 0;
|
|
145
|
+
readonly publish: 0;
|
|
146
|
+
};
|
|
147
|
+
readonly assurances: {
|
|
148
|
+
readonly hostileInputSnapshot: "frozen-public-validator";
|
|
149
|
+
readonly draftAndInstallWritesIdempotencyKeyed: true;
|
|
150
|
+
readonly adapterVersionSource: "one-getAdapterDefinition-snapshot-per-install";
|
|
151
|
+
readonly responseValidation: "frozen-public-validator";
|
|
152
|
+
readonly diagnosticsCarryDestinationValues: false;
|
|
153
|
+
};
|
|
154
|
+
readonly safety: {
|
|
155
|
+
readonly sourceMutationCount: 0;
|
|
156
|
+
readonly liveDestinationCount: 0;
|
|
157
|
+
readonly externalNetworkRequestCount: 0;
|
|
158
|
+
readonly importedCodeExecuted: false;
|
|
159
|
+
readonly runtimeLoaded: false;
|
|
160
|
+
readonly lifecycle: "reviewed-disabled-draft-only";
|
|
161
|
+
readonly diagnostics: "redacted";
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
async function createAndReviewFixedDestination(
|
|
166
|
+
client: Ws1ManagedAnalyticsMigrationClient,
|
|
167
|
+
destination: (typeof DESTINATIONS)[number],
|
|
168
|
+
) {
|
|
169
|
+
const request: CreateMigrationDraftRequest = {
|
|
170
|
+
apiVersion: MANAGED_ANALYTICS_API_VERSION,
|
|
171
|
+
idempotencyKey: `v84-${destination.key}-draft-create`,
|
|
172
|
+
expectedRevision: 0,
|
|
173
|
+
body: {
|
|
174
|
+
proposedAdapterId: destination.adapterId,
|
|
175
|
+
proposedConfiguration: { destinationId: destination.destinationId },
|
|
176
|
+
findings: [...destination.findings],
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
const checked = validateCreateMigrationDraftRequest(request);
|
|
180
|
+
if (!checked.ok) throw new Error(`The fixed ${destination.key} migration draft request failed validation.`);
|
|
181
|
+
|
|
182
|
+
let rawResponse: Awaited<ReturnType<typeof client.createMigrationDraft>>;
|
|
183
|
+
try {
|
|
184
|
+
rawResponse = await client.createMigrationDraft(checked.value);
|
|
185
|
+
} catch {
|
|
186
|
+
throw new Error(`The fixed ${destination.key} migration draft request failed safely.`);
|
|
187
|
+
}
|
|
188
|
+
const response = prepareWs1ApiResponse<MigrationDraftV1>(
|
|
189
|
+
rawResponse,
|
|
190
|
+
`corr-v84-${destination.key}-draft`,
|
|
191
|
+
"mutation",
|
|
192
|
+
);
|
|
193
|
+
if (!response.ok) {
|
|
194
|
+
throw new Error(`The fixed ${destination.key} migration draft response was refused.`);
|
|
195
|
+
}
|
|
196
|
+
const draftCheck = validateMigrationDraftV1(response.value.data);
|
|
197
|
+
if (!draftCheck.ok) throw new Error(`The fixed ${destination.key} migration draft response failed validation.`);
|
|
198
|
+
const draft = draftCheck.value;
|
|
199
|
+
if (
|
|
200
|
+
draft.proposedAdapterId !== checked.value.body.proposedAdapterId ||
|
|
201
|
+
stableIntegrationStringify(draft.proposedConfiguration) !== stableIntegrationStringify(checked.value.body.proposedConfiguration) ||
|
|
202
|
+
stableIntegrationStringify(draft.findings) !== stableIntegrationStringify(checked.value.body.findings)
|
|
203
|
+
) {
|
|
204
|
+
throw new Error(`The fixed ${destination.key} migration draft response changed reviewed input.`);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
const result = await reviewInstallDraft(client, {
|
|
208
|
+
draftId: draft.draftId,
|
|
209
|
+
idempotencyKey: `v84-${destination.key}-install-create`,
|
|
210
|
+
correlationId: `corr-v84-${destination.key}-install`,
|
|
211
|
+
}, draft);
|
|
212
|
+
if (!result.ok) throw new Error(`The fixed ${destination.key} review/install proof was refused: ${result.code ?? "unknown"}.`);
|
|
213
|
+
return { ...result, draft };
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const EXACT_WS2_SCOPE = {
|
|
217
|
+
sourceTenant: V84_NATIVE_SOURCE_TENANT,
|
|
218
|
+
sourceMode: "read-only-fixture",
|
|
219
|
+
cloneTenant: V84_NATIVE_CLONE_TENANT,
|
|
220
|
+
destinationMode: "offline-in-memory-only",
|
|
221
|
+
} as const;
|
|
222
|
+
const EXACT_WS2_ACCOUNTING = {
|
|
223
|
+
parsedRecords: 86,
|
|
224
|
+
syntheticNodes: 3,
|
|
225
|
+
classifiedObjects: 89,
|
|
226
|
+
classifiedDanglingReferences: 0,
|
|
227
|
+
accountedTotal: 89,
|
|
228
|
+
} as const;
|
|
229
|
+
const EXACT_WS2_ADAPTER_RESOLUTION = {
|
|
230
|
+
operation: "getAdapterDefinition",
|
|
231
|
+
request: { apiVersion: "v1", query: { adapterId: "platform.google-measurement" } },
|
|
232
|
+
adapterId: "platform.google-measurement",
|
|
233
|
+
adapterVersion: "1.0.0",
|
|
234
|
+
snapshotCount: 1,
|
|
235
|
+
} as const;
|
|
236
|
+
const EXACT_WS2_SAFETY = {
|
|
237
|
+
sourceMutationCount: 0,
|
|
238
|
+
cloneMutationCount: 0,
|
|
239
|
+
installMutationCount: 0,
|
|
240
|
+
networkRequestCount: 0,
|
|
241
|
+
listenerCount: 0,
|
|
242
|
+
markupAdded: false,
|
|
243
|
+
cspChanged: false,
|
|
244
|
+
runtimeLoaded: false,
|
|
245
|
+
importedCodeExecuted: false,
|
|
246
|
+
draftStatus: "draft",
|
|
247
|
+
draftEnabled: false,
|
|
248
|
+
draftPublishes: false,
|
|
249
|
+
lifecycle: "draft-only",
|
|
250
|
+
} as const;
|
|
251
|
+
|
|
252
|
+
function sameEvidenceValue(left: unknown, right: unknown): boolean {
|
|
253
|
+
return stableIntegrationStringify(left) === stableIntegrationStringify(right);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/** Fail closed unless this is the complete deterministic evidence pinned by WS2 final. */
|
|
257
|
+
async function assertV84ImportProvenance(input: unknown): Promise<V84CloneMigrationEvidence> {
|
|
258
|
+
const snapshot = snapshotManagedAnalyticsDeclarativeInput<V84CloneMigrationEvidence>(input);
|
|
259
|
+
if (!snapshot.ok) {
|
|
260
|
+
throw new Error("The native install proof requires the exact inert v84 WS2 draft evidence.");
|
|
261
|
+
}
|
|
262
|
+
const importEvidence = snapshot.value;
|
|
263
|
+
const draft = importEvidence.draftEvidence?.draft;
|
|
264
|
+
const draftCheck = validateMigrationDraftV1(draft);
|
|
265
|
+
const evidenceDigest = await sha256Hex(stableIntegrationStringify(importEvidence));
|
|
266
|
+
if (
|
|
267
|
+
importEvidence.schemaVersion !== 1 ||
|
|
268
|
+
!sameEvidenceValue(importEvidence.scope, EXACT_WS2_SCOPE) ||
|
|
269
|
+
!sameEvidenceValue(importEvidence.accounting, EXACT_WS2_ACCOUNTING) ||
|
|
270
|
+
!draftCheck.ok ||
|
|
271
|
+
draft?.proposedAdapterId !== "platform.google-measurement" ||
|
|
272
|
+
!sameEvidenceValue(draft?.proposedConfiguration, {}) ||
|
|
273
|
+
draft?.enabled !== false ||
|
|
274
|
+
draft?.publishes !== false ||
|
|
275
|
+
!validateManagedAnalyticsSafePayload(draft).ok ||
|
|
276
|
+
importEvidence.draftEvidence?.mappedConcepts?.length !== 44 ||
|
|
277
|
+
importEvidence.draftEvidence?.unresolvedInventory?.length !== 45 ||
|
|
278
|
+
importEvidence.analysis?.graph?.nodes?.length !== 89 ||
|
|
279
|
+
importEvidence.analysis?.graph?.edges?.length !== 150 ||
|
|
280
|
+
importEvidence.analysis?.dispositions?.length !== 89 ||
|
|
281
|
+
importEvidence.analysis?.graph?.danglingReferences?.length !== 0 ||
|
|
282
|
+
!sameEvidenceValue(importEvidence.adapterResolution, EXACT_WS2_ADAPTER_RESOLUTION) ||
|
|
283
|
+
importEvidence.codeExecutionUnsupported?.length !== 8 ||
|
|
284
|
+
importEvidence.nonportableCodeCoaching?.dossiers?.length !== 8 ||
|
|
285
|
+
!sameEvidenceValue(importEvidence.approvedSemanticActions, APPROVED_MARKETING_ACTION_NAMES) ||
|
|
286
|
+
!sameEvidenceValue(importEvidence.safety, EXACT_WS2_SAFETY) ||
|
|
287
|
+
evidenceDigest !== V84_WS2_EVIDENCE_SHA256
|
|
288
|
+
) {
|
|
289
|
+
throw new Error("The native install proof requires the exact inert v84 WS2 draft evidence.");
|
|
290
|
+
}
|
|
291
|
+
return importEvidence;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/** Configure, review, and install both fake destinations through the public client. */
|
|
295
|
+
export async function buildV84CloneNativeInstallEvidence(
|
|
296
|
+
client: Ws1ManagedAnalyticsMigrationClient,
|
|
297
|
+
importEvidence: V84CloneMigrationEvidence,
|
|
298
|
+
): Promise<V84NativeInstallEvidence> {
|
|
299
|
+
const exactImportEvidence = await assertV84ImportProvenance(importEvidence);
|
|
300
|
+
const currentCatalogReads = 2 as const;
|
|
301
|
+
const priorCatalogReads = exactImportEvidence.adapterResolution.snapshotCount;
|
|
302
|
+
const composedCatalogReads = currentCatalogReads + priorCatalogReads;
|
|
303
|
+
if (priorCatalogReads !== 1 || composedCatalogReads !== 3) {
|
|
304
|
+
throw new Error("The native install proof catalog-read ledger did not compose exactly.");
|
|
305
|
+
}
|
|
306
|
+
const installations: V84NativeInstallEvidence["installations"][number][] = [];
|
|
307
|
+
|
|
308
|
+
for (const destination of DESTINATIONS) {
|
|
309
|
+
if (destination.key === "ga4" && destination.adapterId !== exactImportEvidence.draftEvidence.draft.proposedAdapterId) {
|
|
310
|
+
throw new Error("The reviewed GA4 destination no longer matches the v84 WS2 draft.");
|
|
311
|
+
}
|
|
312
|
+
const result = await createAndReviewFixedDestination(client, destination);
|
|
313
|
+
if (
|
|
314
|
+
result.install.status !== "disabled" ||
|
|
315
|
+
result.install.activeRevisionId !== null ||
|
|
316
|
+
result.revision.status !== "draft" ||
|
|
317
|
+
result.revision.adapterVersion !== result.adapter.adapterVersion ||
|
|
318
|
+
result.adapter.adapterId !== destination.adapterId
|
|
319
|
+
) {
|
|
320
|
+
throw new Error(`The offline ${destination.key} install did not remain a disabled draft.`);
|
|
321
|
+
}
|
|
322
|
+
if (!result.adapter.eventTypes.includes("storefront.action.activated.v1")) {
|
|
323
|
+
throw new Error(`The offline ${destination.key} adapter omitted the canonical semantic action event.`);
|
|
324
|
+
}
|
|
325
|
+
installations.push({
|
|
326
|
+
adapterId: result.adapter.adapterId,
|
|
327
|
+
adapterVersion: result.adapter.adapterVersion,
|
|
328
|
+
configurationKeys: ["destinationId"],
|
|
329
|
+
destinationValueRedacted: true,
|
|
330
|
+
consentPurposes: [...result.adapter.consentPurposes],
|
|
331
|
+
collectionOrigins: [...result.adapter.collectionOrigins],
|
|
332
|
+
eventTypes: [...result.adapter.eventTypes],
|
|
333
|
+
adapterSnapshotCount: 1,
|
|
334
|
+
provenance: destination.provenance,
|
|
335
|
+
desired: { installStatus: "disabled", revisionStatus: "draft", configured: true },
|
|
336
|
+
effective: { activeRevisionId: null, materialized: false },
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
const semanticActions = [...APPROVED_MARKETING_ACTION_NAMES];
|
|
341
|
+
if (eventDedupeKey({ id: "evt-v84-proof" }) !== "evt-v84-proof") {
|
|
342
|
+
throw new Error("The canonical event identity did not remain its dedupe key.");
|
|
343
|
+
}
|
|
344
|
+
if (new Set(semanticActions).size !== semanticActions.length) {
|
|
345
|
+
throw new Error("The canonical semantic action allowlist contains a duplicate.");
|
|
346
|
+
}
|
|
347
|
+
const evidence: V84NativeInstallEvidence = {
|
|
348
|
+
schemaVersion: 1,
|
|
349
|
+
scope: {
|
|
350
|
+
sourceTenant: V84_NATIVE_SOURCE_TENANT,
|
|
351
|
+
sourceMode: "read-only",
|
|
352
|
+
cloneTenant: V84_NATIVE_CLONE_TENANT,
|
|
353
|
+
environment: "diagnostic-clone",
|
|
354
|
+
destinationMode: "offline-in-memory-fake-only",
|
|
355
|
+
publicClientTransport: "tenant-bound-http-adapter-with-injected-no-network-fetch",
|
|
356
|
+
},
|
|
357
|
+
contractPins: {
|
|
358
|
+
ws1Final: V84_WS1_FINAL,
|
|
359
|
+
ws1ApiContract: V84_WS1_API_CONTRACT,
|
|
360
|
+
ws2Final: V84_WS2_FINAL,
|
|
361
|
+
ws2EvidenceSha256: V84_WS2_EVIDENCE_SHA256,
|
|
362
|
+
},
|
|
363
|
+
installations,
|
|
364
|
+
semanticActions,
|
|
365
|
+
eventIdentity: {
|
|
366
|
+
logicalId: "evt-v84-proof",
|
|
367
|
+
dedupeKey: "evt-v84-proof",
|
|
368
|
+
duplicateActionNames: 0,
|
|
369
|
+
},
|
|
370
|
+
operationCounts: {
|
|
371
|
+
createMigrationDraft: 2,
|
|
372
|
+
getMigrationDraft: 2,
|
|
373
|
+
getAdapterDefinition: currentCatalogReads,
|
|
374
|
+
createIntegrationInstall: 2,
|
|
375
|
+
reviseIntegrationInstall: 0,
|
|
376
|
+
setIntegrationInstallStatus: 0,
|
|
377
|
+
publish: 0,
|
|
378
|
+
},
|
|
379
|
+
priorEvidenceOperationCounts: {
|
|
380
|
+
getAdapterDefinition: priorCatalogReads,
|
|
381
|
+
},
|
|
382
|
+
composedOperationCounts: {
|
|
383
|
+
createMigrationDraft: 2,
|
|
384
|
+
getMigrationDraft: 2,
|
|
385
|
+
getAdapterDefinition: composedCatalogReads,
|
|
386
|
+
createIntegrationInstall: 2,
|
|
387
|
+
reviseIntegrationInstall: 0,
|
|
388
|
+
setIntegrationInstallStatus: 0,
|
|
389
|
+
publish: 0,
|
|
390
|
+
},
|
|
391
|
+
assurances: {
|
|
392
|
+
hostileInputSnapshot: "frozen-public-validator",
|
|
393
|
+
draftAndInstallWritesIdempotencyKeyed: true,
|
|
394
|
+
adapterVersionSource: "one-getAdapterDefinition-snapshot-per-install",
|
|
395
|
+
responseValidation: "frozen-public-validator",
|
|
396
|
+
diagnosticsCarryDestinationValues: false,
|
|
397
|
+
},
|
|
398
|
+
safety: {
|
|
399
|
+
sourceMutationCount: 0,
|
|
400
|
+
liveDestinationCount: 0,
|
|
401
|
+
externalNetworkRequestCount: 0,
|
|
402
|
+
importedCodeExecuted: false,
|
|
403
|
+
runtimeLoaded: false,
|
|
404
|
+
lifecycle: "reviewed-disabled-draft-only",
|
|
405
|
+
diagnostics: "redacted",
|
|
406
|
+
},
|
|
407
|
+
};
|
|
408
|
+
return evidence;
|
|
409
|
+
}
|