@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,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verbatim merchant microcopy for the Review-and-Release surface — the single
|
|
3
|
+
* source of truth for the exact state labels, sub-lines, headings, bodies, and
|
|
4
|
+
* action labels the two-decision UX renders. Every string here is copied
|
|
5
|
+
* verbatim from `docs/review-release-ux-contract.md` §5 and the machine-readable
|
|
6
|
+
* `docs/review-release-ux-acceptance.json`; a conformance test asserts they match.
|
|
7
|
+
*
|
|
8
|
+
* Interpolation tokens `{n}`, `{store}`, `{date}` are left in the templates and
|
|
9
|
+
* substituted by the view-model builder (see `viewModel.ts`) — never hand-mirrored
|
|
10
|
+
* at a call site, so a copy change lands in exactly one place.
|
|
11
|
+
*/
|
|
12
|
+
import type {
|
|
13
|
+
MerchantChangeStateId,
|
|
14
|
+
MerchantReleaseStateId,
|
|
15
|
+
} from "./types.js";
|
|
16
|
+
|
|
17
|
+
/** Per-state merchant change copy (contract §2/§5). `action` is the one decision the state carries. */
|
|
18
|
+
export interface ChangeStateCopy {
|
|
19
|
+
id: MerchantChangeStateId;
|
|
20
|
+
/** The status chip word — always present, never a bare colored dot (a11y §8). */
|
|
21
|
+
label: string;
|
|
22
|
+
/** Helper sub-line under the status. */
|
|
23
|
+
subline: string;
|
|
24
|
+
/** The reassuring sub-line shown once preparation crosses the slow threshold. */
|
|
25
|
+
sublineSlow?: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const CHANGE_STATE_COPY: Record<MerchantChangeStateId, ChangeStateCopy> = {
|
|
29
|
+
preparing: {
|
|
30
|
+
id: "preparing",
|
|
31
|
+
label: "Preparing",
|
|
32
|
+
subline: "We're building and checking this change. No action needed.",
|
|
33
|
+
sublineSlow: "Still working on this one — checks can take a few minutes.",
|
|
34
|
+
},
|
|
35
|
+
"ready-to-add": {
|
|
36
|
+
id: "ready-to-add",
|
|
37
|
+
label: "Ready to add",
|
|
38
|
+
subline: "Checks passed. Add it to your next release when you're ready.",
|
|
39
|
+
},
|
|
40
|
+
"in-next-release": {
|
|
41
|
+
id: "in-next-release",
|
|
42
|
+
label: "In next release",
|
|
43
|
+
subline: "Staged to go live with your next release.",
|
|
44
|
+
},
|
|
45
|
+
"needs-attention": {
|
|
46
|
+
id: "needs-attention",
|
|
47
|
+
label: "Needs attention",
|
|
48
|
+
subline: "This change needs a developer before it can go live. We've let them know.",
|
|
49
|
+
},
|
|
50
|
+
published: {
|
|
51
|
+
id: "published",
|
|
52
|
+
label: "Published",
|
|
53
|
+
// `{date}` interpolated by the builder.
|
|
54
|
+
subline: "Went live on {date}.",
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/** Per-state next-release copy (contract §3/§5). `heading` is the panel title. */
|
|
59
|
+
export interface ReleaseStateCopy {
|
|
60
|
+
id: MerchantReleaseStateId;
|
|
61
|
+
heading: string;
|
|
62
|
+
/** Body text; may carry `{n}`/`{date}` tokens the builder substitutes. */
|
|
63
|
+
body: string;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export const RELEASE_STATE_COPY: Record<MerchantReleaseStateId, ReleaseStateCopy> = {
|
|
67
|
+
empty: {
|
|
68
|
+
id: "empty",
|
|
69
|
+
heading: "Nothing staged yet",
|
|
70
|
+
body: "Your next release is empty. Add a ready change to start building it.",
|
|
71
|
+
},
|
|
72
|
+
"preparing-release": {
|
|
73
|
+
id: "preparing-release",
|
|
74
|
+
heading: "Preparing your next release",
|
|
75
|
+
body: "We're putting your staged changes together and checking them. This is automatic.",
|
|
76
|
+
},
|
|
77
|
+
"ready-to-publish": {
|
|
78
|
+
id: "ready-to-publish",
|
|
79
|
+
heading: "Your next release is ready",
|
|
80
|
+
body: "{n} change(s) are staged and checked. Publish now to take them live.",
|
|
81
|
+
},
|
|
82
|
+
publishing: {
|
|
83
|
+
id: "publishing",
|
|
84
|
+
heading: "Publishing…",
|
|
85
|
+
body: "Taking your release live. This usually takes a few seconds.",
|
|
86
|
+
},
|
|
87
|
+
live: {
|
|
88
|
+
id: "live",
|
|
89
|
+
heading: "Your release is live",
|
|
90
|
+
body: "Published on {date}. Your store is up to date.",
|
|
91
|
+
},
|
|
92
|
+
"needs-attention": {
|
|
93
|
+
id: "needs-attention",
|
|
94
|
+
heading: "We hit a snag with this release",
|
|
95
|
+
body: "One of the staged changes needs a developer. We're sorting it out — nothing you need to do.",
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
// ── Action labels ──────────────────────────────────────────────────────────────
|
|
100
|
+
|
|
101
|
+
/** Change-row primary action (on `ready-to-add`). */
|
|
102
|
+
export const ADD_TO_NEXT_RELEASE_LABEL = "Add to next release";
|
|
103
|
+
/** Next-release primary action (on `ready-to-publish`). */
|
|
104
|
+
export const PUBLISH_NOW_LABEL = "Publish now";
|
|
105
|
+
/** Next-release action (on `live`). */
|
|
106
|
+
export const VIEW_LIVE_STORE_LABEL = "View your live store";
|
|
107
|
+
|
|
108
|
+
/** The single publish confirmation dialog (contract §4/§5). */
|
|
109
|
+
export const PUBLISH_CONFIRM_COPY = {
|
|
110
|
+
heading: "Publish your next release?",
|
|
111
|
+
body: "This takes {n} change(s) live on {store} right away.",
|
|
112
|
+
confirm: PUBLISH_NOW_LABEL,
|
|
113
|
+
cancel: "Cancel",
|
|
114
|
+
} as const;
|
|
115
|
+
|
|
116
|
+
/** Post-publish success + its live-store link. */
|
|
117
|
+
export const PUBLISH_SUCCESS_COPY = {
|
|
118
|
+
message: "Your release is live.",
|
|
119
|
+
link: VIEW_LIVE_STORE_LABEL,
|
|
120
|
+
} as const;
|
|
121
|
+
|
|
122
|
+
/** "What's in this release" summary (Ready to publish). */
|
|
123
|
+
export const WHATS_IN_RELEASE_HEADING = "What's in this release";
|
|
124
|
+
/** Fallback line when a change title is unavailable. */
|
|
125
|
+
export const whatsInReleaseFallback = (n: number): string =>
|
|
126
|
+
`${n} change(s) ready to publish.`;
|
|
127
|
+
|
|
128
|
+
/** Undo toast for "Add to next release". */
|
|
129
|
+
export const UNDO_TOAST_COPY = "Added to your next release · Undo";
|
|
130
|
+
|
|
131
|
+
// ── Empty / zero states (contract §5) ────────────────────────────────────────────
|
|
132
|
+
|
|
133
|
+
/** Shown when there are no changes at all. */
|
|
134
|
+
export const NO_CHANGES_COPY =
|
|
135
|
+
"Nothing to review right now. New changes appear here when a developer submits them.";
|
|
136
|
+
/** Shown to a read-only viewer in place of the two action buttons. */
|
|
137
|
+
export const READ_ONLY_NOTE =
|
|
138
|
+
"You can review changes here. Adding to a release and publishing needs an owner or admin sign-in.";
|
|
139
|
+
/** Shown in place of Publish on an internal test store (contract §6). */
|
|
140
|
+
export const INTERNAL_TEST_STORE_NOTE =
|
|
141
|
+
"This is a testing-only store — publishing to a live storefront is disabled here.";
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The merchant Review-and-Release model — the seam between the internal publish
|
|
3
|
+
* pipeline and the two-decision merchant surface. Import from here.
|
|
4
|
+
*
|
|
5
|
+
* `docs/review-release-ux-contract.md` is the authoritative spec; this module is
|
|
6
|
+
* its typed, tested implementation. The downstream `review-release-workspace` unit
|
|
7
|
+
* builds its UI on `buildReviewReleaseViewModel` and the `ChangeCardView` /
|
|
8
|
+
* `NextReleaseView` shapes.
|
|
9
|
+
*/
|
|
10
|
+
export * from "./types.js";
|
|
11
|
+
export * from "./copy.js";
|
|
12
|
+
export {
|
|
13
|
+
resolveChangeState,
|
|
14
|
+
type ChangeStateFacts,
|
|
15
|
+
} from "./changeState.js";
|
|
16
|
+
export {
|
|
17
|
+
resolveReleaseState,
|
|
18
|
+
type ReleaseStateFacts,
|
|
19
|
+
} from "./releaseState.js";
|
|
20
|
+
export {
|
|
21
|
+
resolveMerchantPermissions,
|
|
22
|
+
type MerchantPermissions,
|
|
23
|
+
type MerchantPermissionContext,
|
|
24
|
+
} from "./permissions.js";
|
|
25
|
+
export {
|
|
26
|
+
buildReviewReleaseViewModel,
|
|
27
|
+
formatReleaseDate,
|
|
28
|
+
type ReviewReleaseViewModel,
|
|
29
|
+
type ReviewReleaseContext,
|
|
30
|
+
type ChangeCardView,
|
|
31
|
+
type NextReleaseView,
|
|
32
|
+
type PublishConfirmView,
|
|
33
|
+
type MerchantChangeAction,
|
|
34
|
+
type MerchantReleaseAction,
|
|
35
|
+
type ChangesPayload,
|
|
36
|
+
type ChangesPayloadChange,
|
|
37
|
+
type ChangesPayloadAggregate,
|
|
38
|
+
type ChangesPayloadIncludedPr,
|
|
39
|
+
type ChangesPayloadPlan,
|
|
40
|
+
type ChangesPayloadCurrent,
|
|
41
|
+
} from "./viewModel.js";
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merchant-surface permission + paywall resolution (contract §6) — a UX-only
|
|
3
|
+
* MIRROR of the server-authoritative gating (`resolveViewerShipCapability`,
|
|
4
|
+
* `AggregateShipOrchestrator` paywall verdict, internal-test-store block). The
|
|
5
|
+
* server re-authorizes every action; this only decides what the merchant surface
|
|
6
|
+
* shows (and, per contract, NEVER hides an action — it shows why it's unavailable).
|
|
7
|
+
*/
|
|
8
|
+
import { READ_ONLY_NOTE, INTERNAL_TEST_STORE_NOTE } from "./copy.js";
|
|
9
|
+
|
|
10
|
+
/** The server-resolved facts the merchant surface mirrors. */
|
|
11
|
+
export interface MerchantPermissionContext {
|
|
12
|
+
/** Owner, admin, or an explicit ship-on-behalf grant (mirrors `canShip`). */
|
|
13
|
+
canShip: boolean;
|
|
14
|
+
/** The store's storefront subscription does not permit go-live (plan paywalled). */
|
|
15
|
+
paywalled: boolean;
|
|
16
|
+
/** An internal test store — blocked from publishing to a live storefront. */
|
|
17
|
+
internalTestStore: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** The merchant-surface permission verdict the view model carries. */
|
|
21
|
+
export interface MerchantPermissions {
|
|
22
|
+
/** May add a change to the release AND publish (owner/admin/ship-on-behalf). */
|
|
23
|
+
canAddAndPublish: boolean;
|
|
24
|
+
/** No add/publish capability — the surface shows the two actions replaced by a note. */
|
|
25
|
+
readOnly: boolean;
|
|
26
|
+
/** The read-only explanation (present iff `readOnly`), else null. */
|
|
27
|
+
readOnlyNote: string | null;
|
|
28
|
+
/** Paywall overlay on the Publish action (shown as an upgrade prompt, never hidden). */
|
|
29
|
+
paywall: { active: boolean };
|
|
30
|
+
/** Internal test store: Publish is replaced by the testing-only notice. */
|
|
31
|
+
internalTestStore: boolean;
|
|
32
|
+
/** The testing-only notice (present iff `internalTestStore`), else null. */
|
|
33
|
+
internalTestStoreNote: string | null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function resolveMerchantPermissions(
|
|
37
|
+
ctx: MerchantPermissionContext,
|
|
38
|
+
): MerchantPermissions {
|
|
39
|
+
return {
|
|
40
|
+
canAddAndPublish: ctx.canShip,
|
|
41
|
+
readOnly: !ctx.canShip,
|
|
42
|
+
readOnlyNote: ctx.canShip ? null : READ_ONLY_NOTE,
|
|
43
|
+
paywall: { active: ctx.paywalled },
|
|
44
|
+
internalTestStore: ctx.internalTestStore,
|
|
45
|
+
internalTestStoreNote: ctx.internalTestStore ? INTERNAL_TEST_STORE_NOTE : null,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure state machine: collapse the internal aggregate/ship-plan facts onto the ONE
|
|
3
|
+
* merchant-facing next-release state (contract §3). Single authority for the
|
|
4
|
+
* internal→merchant release mapping; total and side-effect-free.
|
|
5
|
+
*
|
|
6
|
+
* "Preparing release" absorbs `integrating` + automatic retries; a red aggregate
|
|
7
|
+
* is "Needs attention" (recovered underneath, never a merchant retry button);
|
|
8
|
+
* "Ready to publish" is the ONLY state carrying the Publish action, and only when
|
|
9
|
+
* the exact-digest plan is green (`planOk`).
|
|
10
|
+
*/
|
|
11
|
+
import type { InternalAggregateState, MerchantReleaseStateId } from "./types.js";
|
|
12
|
+
|
|
13
|
+
/** The facts that determine the next-release state. Derived from `aggregate`/`plan`/`current`. */
|
|
14
|
+
export interface ReleaseStateFacts {
|
|
15
|
+
/** The aggregate's internal queue state. */
|
|
16
|
+
queueState: InternalAggregateState;
|
|
17
|
+
/** A shippable exact-digest plan exists (green + plan `ok`). */
|
|
18
|
+
planOk: boolean;
|
|
19
|
+
/** A publish POST is in flight right now (client-owned transient — no server queueState for it). */
|
|
20
|
+
shipInFlight: boolean;
|
|
21
|
+
/** The staged aggregate sha equals the live version id — what's staged is exactly what's live. */
|
|
22
|
+
matchesLive: boolean;
|
|
23
|
+
/** At least one change is staged into the release. */
|
|
24
|
+
hasStaged: boolean;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Resolve the single merchant release state. A `shipped` aggregate is Live and
|
|
29
|
+
* outranks a stale in-flight flag; otherwise an in-flight publish shows
|
|
30
|
+
* "Publishing…". A green aggregate is "Ready to publish" only once its plan pins
|
|
31
|
+
* (until then it is still assembling → "Preparing release").
|
|
32
|
+
*/
|
|
33
|
+
export function resolveReleaseState(f: ReleaseStateFacts): MerchantReleaseStateId {
|
|
34
|
+
if (f.queueState === "shipped") return "live";
|
|
35
|
+
if (f.shipInFlight) return "publishing";
|
|
36
|
+
if (f.queueState === "red") return "needs-attention";
|
|
37
|
+
if (f.queueState === "green") return f.planOk ? "ready-to-publish" : "preparing-release";
|
|
38
|
+
if (f.queueState === "queued" || f.queueState === "integrating") return "preparing-release";
|
|
39
|
+
// queueState === "empty": staged-but-empty-queueState is a transient assembling
|
|
40
|
+
// window; treat any staged content as preparing, else the true empty state.
|
|
41
|
+
return f.hasStaged ? "preparing-release" : "empty";
|
|
42
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The merchant two-decision model's type vocabulary — the seam between the
|
|
3
|
+
* internal/mechanical publish pipeline (candidate reconcile, integration runs,
|
|
4
|
+
* exact-digest ship plans) and the merchant-facing Review-and-Release surface.
|
|
5
|
+
*
|
|
6
|
+
* A merchant only ever makes two decisions: (1) add a ready change to the next
|
|
7
|
+
* release, and (2) publish the next release live. These ids/labels are the
|
|
8
|
+
* exhaustive, closed vocabulary that surface renders; they are validated against
|
|
9
|
+
* `docs/review-release-ux-acceptance.json`.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/** The five merchant-facing change states (contract §2). */
|
|
13
|
+
export type MerchantChangeStateId =
|
|
14
|
+
| "preparing"
|
|
15
|
+
| "ready-to-add"
|
|
16
|
+
| "in-next-release"
|
|
17
|
+
| "needs-attention"
|
|
18
|
+
| "published";
|
|
19
|
+
|
|
20
|
+
/** The six merchant-facing next-release states (contract §3). */
|
|
21
|
+
export type MerchantReleaseStateId =
|
|
22
|
+
| "empty"
|
|
23
|
+
| "preparing-release"
|
|
24
|
+
| "ready-to-publish"
|
|
25
|
+
| "publishing"
|
|
26
|
+
| "live"
|
|
27
|
+
| "needs-attention";
|
|
28
|
+
|
|
29
|
+
/** The only action exposed on a change (contract §4). `needs-attention` carries none —
|
|
30
|
+
* the developer handoff is fully automatic, never a merchant-triggered action. */
|
|
31
|
+
export type MerchantChangeActionId = "add-to-next-release";
|
|
32
|
+
|
|
33
|
+
/** The only actions exposed on the next release (contract §4). */
|
|
34
|
+
export type MerchantReleaseActionId = "publish-now" | "view-live-store";
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* The internal change status the pipeline carries on a `/api/changes` row, before
|
|
38
|
+
* it is collapsed onto a merchant state. `not-built` is the synthetic forge-PR
|
|
39
|
+
* entry; the merchant never sees any of these names.
|
|
40
|
+
*/
|
|
41
|
+
export type InternalChangeStatus =
|
|
42
|
+
| "queued"
|
|
43
|
+
| "reconciling"
|
|
44
|
+
| "ready"
|
|
45
|
+
| "blocked"
|
|
46
|
+
| "not-built"
|
|
47
|
+
| "building"
|
|
48
|
+
| "accepted"
|
|
49
|
+
| "merged"
|
|
50
|
+
| "closed";
|
|
51
|
+
|
|
52
|
+
/** The internal aggregate queue state (contract §3, `adminPublishTab.ts` AGG_STATE_CHIP). */
|
|
53
|
+
export type InternalAggregateState =
|
|
54
|
+
| "empty"
|
|
55
|
+
| "queued"
|
|
56
|
+
| "integrating"
|
|
57
|
+
| "green"
|
|
58
|
+
| "red"
|
|
59
|
+
| "shipped";
|