@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.
Files changed (474) hide show
  1. package/apps/storefront/astro.config.mjs +17 -1
  2. package/apps/storefront/env.d.ts +54 -5
  3. package/apps/storefront/integrations/materialize-guard.mjs +54 -0
  4. package/apps/storefront/migrations-apps/0002_good_switch.sql +26 -0
  5. package/apps/storefront/migrations-apps/0003_mute_marauders.sql +12 -0
  6. package/apps/storefront/migrations-apps/0004_deep_morph.sql +36 -0
  7. package/apps/storefront/migrations-apps/0005_common_mystique.sql +23 -0
  8. package/apps/storefront/migrations-apps/0006_broad_microchip.sql +16 -0
  9. package/apps/storefront/migrations-apps/0007_brave_outlaw_kid.sql +15 -0
  10. package/apps/storefront/migrations-apps/0008_blue_dazzler.sql +11 -0
  11. package/apps/storefront/migrations-apps/0009_bored_shinobi_shaw.sql +15 -0
  12. package/apps/storefront/migrations-apps/0010_ws4_verified_provider_measurement.sql +35 -0
  13. package/apps/storefront/migrations-apps/meta/0002_snapshot.json +1160 -0
  14. package/apps/storefront/migrations-apps/meta/0003_snapshot.json +1235 -0
  15. package/apps/storefront/migrations-apps/meta/0004_snapshot.json +1474 -0
  16. package/apps/storefront/migrations-apps/meta/0005_snapshot.json +1617 -0
  17. package/apps/storefront/migrations-apps/meta/0006_snapshot.json +1716 -0
  18. package/apps/storefront/migrations-apps/meta/0007_snapshot.json +1812 -0
  19. package/apps/storefront/migrations-apps/meta/0008_snapshot.json +1881 -0
  20. package/apps/storefront/migrations-apps/meta/0009_snapshot.json +1979 -0
  21. package/apps/storefront/migrations-apps/meta/_journal.json +56 -0
  22. package/apps/storefront/public/apps/tot.demo.analytics/0.1.0/entry.js +42 -0
  23. package/apps/storefront/public/js/dashboard-team.js +38 -2
  24. package/apps/storefront/public/platform/amplitude-http/v1/entry.mjs +19 -0
  25. package/apps/storefront/public/platform/google-measurement/v1/entry.mjs +19 -0
  26. package/apps/storefront/public/shared/commerce-chrome.css +20 -2
  27. package/apps/storefront/scripts/build-v84-clean-clone-standalone.mjs +68 -0
  28. package/apps/storefront/scripts/deny-v84-clean-clone-standalone-capabilities.mjs +111 -0
  29. package/apps/storefront/scripts/deny-v84-dogfood-capabilities.mjs +2 -0
  30. package/apps/storefront/scripts/deny-v84-lifecycle-capabilities.mjs +247 -0
  31. package/apps/storefront/scripts/dogfood-v84-nonportable-routes.ts +73 -0
  32. package/apps/storefront/scripts/fixed-v84-native-install-producer.ts +79 -0
  33. package/apps/storefront/scripts/generated/v84-clean-clone-replay.bundle.mjs +10982 -0
  34. package/apps/storefront/scripts/import-v84-through-ws2.ts +38 -0
  35. package/apps/storefront/scripts/initialize-v84-lifecycle-tooling-dependency.ts +2 -0
  36. package/apps/storefront/scripts/initialize-v84-lifecycle-tooling.ts +4 -0
  37. package/apps/storefront/scripts/install-v84-native-through-ws1.ts +185 -0
  38. package/apps/storefront/scripts/prove-clone-isolation.ts +506 -0
  39. package/apps/storefront/scripts/replay-v84-clean-clone-pass.ts +148 -0
  40. package/apps/storefront/scripts/replay-v84-clean-clone-standalone.ts +35 -0
  41. package/apps/storefront/scripts/replay-v84-clean-clone.ts +214 -0
  42. package/apps/storefront/scripts/run-fixed-v84-native-install-producer.mjs +18 -0
  43. package/apps/storefront/scripts/run-v84-clone-isolation-proof.mjs +18 -0
  44. package/apps/storefront/scripts/run-v84-clone-lifecycle-proof.mjs +18 -0
  45. package/apps/storefront/scripts/run-v84-import-through-ws2-proof.mjs +17 -0
  46. package/apps/storefront/scripts/run-v84-nonportable-route-dogfood.mjs +15 -0
  47. package/apps/storefront/scripts/sanitize-v84-proof-environment.mjs +21 -0
  48. package/apps/storefront/scripts/v84CleanCloneGraphPin.ts +42 -0
  49. package/apps/storefront/scripts/v84CleanCloneSourceGraph.ts +145 -0
  50. package/apps/storefront/scripts/validate-v84-clone-lifecycle.ts +18 -0
  51. package/apps/storefront/src/components/Img.astro +1 -1
  52. package/apps/storefront/src/components/Seo.astro +65 -1
  53. package/apps/storefront/src/components/admin/AdminBlogDetailRail.astro +878 -0
  54. package/apps/storefront/src/components/admin/AdminBlogTab.astro +1435 -0
  55. package/apps/storefront/src/components/admin/AdminCustomersTab.astro +3 -7
  56. package/apps/storefront/src/components/admin/AdminIntegrationsTab.astro +105 -0
  57. package/apps/storefront/src/components/admin/AdminPublishTab.astro +1980 -2564
  58. package/apps/storefront/src/components/admin/AdminSettingsTab.astro +2 -2
  59. package/apps/storefront/src/components/admin/AdminSubscriptionsTab.astro +1 -3
  60. package/apps/storefront/src/components/admin/orders/OrdersWorkspace.astro +5 -5
  61. package/apps/storefront/src/components/blog/BlogPaywall.astro +87 -0
  62. package/apps/storefront/src/components/blog/PostAccessBadge.astro +43 -0
  63. package/apps/storefront/src/components/blog/PostGrid.astro +57 -0
  64. package/apps/storefront/src/components/blog/ReactionBar.astro +214 -0
  65. package/apps/storefront/src/components/chrome/NavDropdown.astro +12 -0
  66. package/apps/storefront/src/components/chrome/SiteFooter.astro +7 -2
  67. package/apps/storefront/src/components/chrome/SiteHeader.astro +46 -10
  68. package/apps/storefront/src/components/compliance/AdultSignatureNotice.astro +1 -1
  69. package/apps/storefront/src/components/compliance/ComplianceNotice.astro +1 -2
  70. package/apps/storefront/src/components/compliance/ExciseTaxNotice.astro +1 -2
  71. package/apps/storefront/src/components/compliance/PactActNotice.astro +1 -1
  72. package/apps/storefront/src/components/compliance/Prop65Warning.astro +1 -2
  73. package/apps/storefront/src/components/compliance/PurchaseLimitNotice.astro +2 -3
  74. package/apps/storefront/src/components/compliance/ShippingRestrictionNotice.astro +2 -2
  75. package/apps/storefront/src/components/compliance/StateEligibilityNotice.astro +2 -3
  76. package/apps/storefront/src/components/content/TrustStrip.astro +4 -4
  77. package/apps/storefront/src/components/islands/MobileNav.tsx +26 -1
  78. package/apps/storefront/src/components/islands/VariantSelector.tsx +27 -2
  79. package/apps/storefront/src/components/islands/useCheckoutHandoffCorrelation.ts +75 -0
  80. package/apps/storefront/src/components/membership/IllustrativeLabel.astro +1 -2
  81. package/apps/storefront/src/components/membership/TierCards.astro +2 -2
  82. package/apps/storefront/src/components/membership/TierComparisonTable.astro +2 -2
  83. package/apps/storefront/src/components/subscription/SavingsExplainer.astro +2 -2
  84. package/apps/storefront/src/config/adminTenantLookup.ts +35 -0
  85. package/apps/storefront/src/config/devTenantSeed.ts +9 -9
  86. package/apps/storefront/src/config/resolver.ts +4 -4
  87. package/apps/storefront/src/layouts/Layout.astro +146 -21
  88. package/apps/storefront/src/lib/activity/alerts.ts +17 -19
  89. package/apps/storefront/src/lib/activity/candidateSubmitLease.ts +87 -0
  90. package/apps/storefront/src/lib/activity/changeActorAttribution.ts +89 -9
  91. package/apps/storefront/src/lib/activity/deployVersion.ts +20 -27
  92. package/apps/storefront/src/lib/activity/ingest.ts +8 -8
  93. package/apps/storefront/src/lib/activity/ingestAuth.ts +1 -1
  94. package/apps/storefront/src/lib/activity/killSwitch.ts +6 -6
  95. package/apps/storefront/src/lib/activity/query.ts +9 -9
  96. package/apps/storefront/src/lib/activity/recordActivity.ts +11 -15
  97. package/apps/storefront/src/lib/activity/store.ts +4 -6
  98. package/apps/storefront/src/lib/activity/uiActor.ts +12 -12
  99. package/apps/storefront/src/lib/activity/workerCommit.ts +6 -6
  100. package/apps/storefront/src/lib/admin/adminShell.ts +292 -0
  101. package/apps/storefront/src/lib/admin/ai/approvalMode.ts +2 -3
  102. package/apps/storefront/src/lib/admin/ai/audit.ts +3 -5
  103. package/apps/storefront/src/lib/admin/checkoutStyleInput.ts +7 -7
  104. package/apps/storefront/src/lib/admin/checkoutStyleTarget.ts +3 -3
  105. package/apps/storefront/src/lib/admin/envelope.ts +1 -2
  106. package/apps/storefront/src/lib/admin/orderClient.ts +3 -5
  107. package/apps/storefront/src/lib/admin/services/orders.ts +17 -19
  108. package/apps/storefront/src/lib/admin/viewmodels/aiWorkflows.ts +4 -6
  109. package/apps/storefront/src/lib/admin/viewmodels/settings.ts +1 -1
  110. package/apps/storefront/src/lib/apps/adminService.ts +14 -4
  111. package/apps/storefront/src/lib/apps/adminSession.ts +54 -45
  112. package/apps/storefront/src/lib/apps/apiAuth.ts +2 -2
  113. package/apps/storefront/src/lib/apps/apiRoute.ts +2 -2
  114. package/apps/storefront/src/lib/apps/appVersionStore.ts +281 -0
  115. package/apps/storefront/src/lib/apps/catalogMapper.ts +1 -1
  116. package/apps/storefront/src/lib/apps/consentConfigStore.ts +228 -0
  117. package/apps/storefront/src/lib/apps/credentials.ts +2 -2
  118. package/apps/storefront/src/lib/apps/gatewayKeys.ts +4 -4
  119. package/apps/storefront/src/lib/apps/gtmMigrationInstall.ts +447 -0
  120. package/apps/storefront/src/lib/apps/gtmMigrationReport.ts +367 -0
  121. package/apps/storefront/src/lib/apps/gtmMigrationTab.ts +315 -0
  122. package/apps/storefront/src/lib/apps/healthAggregate.ts +5 -5
  123. package/apps/storefront/src/lib/apps/integrationLifecycle.ts +614 -0
  124. package/apps/storefront/src/lib/apps/integrationLifecycleController.ts +125 -0
  125. package/apps/storefront/src/lib/apps/integrationReadModel.ts +563 -0
  126. package/apps/storefront/src/lib/apps/integrationsTab.ts +547 -0
  127. package/apps/storefront/src/lib/apps/integrationsView.ts +106 -0
  128. package/apps/storefront/src/lib/apps/managedAnalyticsService.ts +599 -0
  129. package/apps/storefront/src/lib/apps/orders/attributionService.ts +2 -2
  130. package/apps/storefront/src/lib/apps/orders/customerHash.ts +1 -1
  131. package/apps/storefront/src/lib/apps/orders/foxyOrderClient.ts +12 -12
  132. package/apps/storefront/src/lib/apps/orders/idempotency.ts +7 -7
  133. package/apps/storefront/src/lib/apps/orders/orderConversionD1.ts +150 -0
  134. package/apps/storefront/src/lib/apps/orders/orderForwardReceiver.ts +9 -1
  135. package/apps/storefront/src/lib/apps/orders/orderMapper.ts +2 -2
  136. package/apps/storefront/src/lib/apps/orders/ordersStore.ts +7 -7
  137. package/apps/storefront/src/lib/apps/orders/verifiedProviderMeasurement.ts +117 -0
  138. package/apps/storefront/src/lib/apps/registryService.ts +270 -16
  139. package/apps/storefront/src/lib/apps/scopes.ts +2 -2
  140. package/apps/storefront/src/lib/apps/tenantIntegrationMaterialization.ts +170 -0
  141. package/apps/storefront/src/lib/apps/tokenIssuer.ts +4 -4
  142. package/apps/storefront/src/lib/apps/tokenVerifier.ts +6 -6
  143. package/apps/storefront/src/lib/apps/v84CleanCloneReplayContext.ts +16 -0
  144. package/apps/storefront/src/lib/apps/v84CloneLifecycleCacheEvidence.ts +105 -0
  145. package/apps/storefront/src/lib/apps/v84CloneLifecycleEvidence.ts +177 -0
  146. package/apps/storefront/src/lib/apps/v84CloneLifecycleMaterialization.ts +251 -0
  147. package/apps/storefront/src/lib/apps/v84CloneLifecycleSemantics.ts +241 -0
  148. package/apps/storefront/src/lib/apps/v84CloneMigrationEvidence.ts +211 -0
  149. package/apps/storefront/src/lib/apps/v84CloneNativeInstallEvidence.ts +409 -0
  150. package/apps/storefront/src/lib/apps/v84NonportableCodeCoaching.ts +368 -0
  151. package/apps/storefront/src/lib/apps/v84NonportableRouteContract.ts +188 -0
  152. package/apps/storefront/src/lib/apps/v84NonportableRouteDogfood.ts +291 -0
  153. package/apps/storefront/src/lib/apps/widgets/eligibility.ts +2 -2
  154. package/apps/storefront/src/lib/apps/widgets/frameProps.ts +3 -3
  155. package/apps/storefront/src/lib/apps/widgets/launchToken.ts +4 -4
  156. package/apps/storefront/src/lib/apps/widgets/placements.ts +2 -2
  157. package/apps/storefront/src/lib/apps/widgets/renderSlot.ts +1 -1
  158. package/apps/storefront/src/lib/apps/ws1ManagedAnalyticsClient.ts +95 -0
  159. package/apps/storefront/src/lib/auth/adminApiGuard.ts +66 -0
  160. package/apps/storefront/src/lib/auth/adminEntry.ts +11 -11
  161. package/apps/storefront/src/lib/auth/adminLanding.ts +88 -0
  162. package/apps/storefront/src/lib/auth/identityToken.ts +6 -14
  163. package/apps/storefront/src/lib/auth/loginGate.ts +75 -13
  164. package/apps/storefront/src/lib/auth/mcpClientAssertion.ts +2 -4
  165. package/apps/storefront/src/lib/auth/operatorSession.ts +113 -0
  166. package/apps/storefront/src/lib/auth/session.ts +7 -8
  167. package/apps/storefront/src/lib/auth/totAccessClient.ts +8 -18
  168. package/apps/storefront/src/lib/basePath.ts +9 -2
  169. package/apps/storefront/src/lib/blog/access.ts +29 -0
  170. package/apps/storefront/src/lib/blog/collection.ts +400 -0
  171. package/apps/storefront/src/lib/blog/markdown.ts +174 -0
  172. package/apps/storefront/src/lib/blog/provider.ts +62 -3
  173. package/apps/storefront/src/lib/blog/reactions.ts +87 -0
  174. package/apps/storefront/src/lib/blog/rss.ts +92 -0
  175. package/apps/storefront/src/lib/blog/teaser.ts +83 -0
  176. package/apps/storefront/src/lib/blog/types.ts +34 -0
  177. package/apps/storefront/src/lib/blog/viewCounts.ts +243 -0
  178. package/apps/storefront/src/lib/chrome/examples/tokenoftrust.chrome-assignments.example.json +6 -0
  179. package/apps/storefront/src/lib/chrome/examples/tokenoftrust.chrome.example.json +79 -0
  180. package/apps/storefront/src/lib/chrome/model.ts +48 -253
  181. package/apps/storefront/src/lib/chrome/navCurrent.ts +29 -0
  182. package/apps/storefront/src/lib/chrome/parseConfig.ts +18 -32
  183. package/apps/storefront/src/lib/chrome/variant.ts +39 -0
  184. package/apps/storefront/src/lib/commerce/checkoutHandoffCorrelation.ts +105 -0
  185. package/apps/storefront/src/lib/compliance/tamper-sentinel-boot.ts +152 -0
  186. package/apps/storefront/src/lib/compliance/tamper-sentinel.ts +327 -0
  187. package/apps/storefront/src/lib/content/index.ts +5 -5
  188. package/apps/storefront/src/lib/content-edit/applyDiff.ts +1 -1
  189. package/apps/storefront/src/lib/content-edit/route.ts +1 -1
  190. package/apps/storefront/src/lib/d1/catalog.ts +14 -2
  191. package/apps/storefront/src/lib/d1/schema-apps.ts +372 -17
  192. package/apps/storefront/src/lib/dev/activityIngestToken.ts +2 -4
  193. package/apps/storefront/src/lib/dev/activityStore.ts +3 -5
  194. package/apps/storefront/src/lib/dev/apiBase.ts +1 -4
  195. package/apps/storefront/src/lib/dev/cockpit/ask.ts +49 -0
  196. package/apps/storefront/src/lib/dev/cockpit/clickToSource.ts +71 -0
  197. package/apps/storefront/src/lib/dev/cockpit/copyCommand.ts +227 -0
  198. package/apps/storefront/src/lib/dev/cockpit/files.ts +249 -0
  199. package/apps/storefront/src/lib/dev/cockpit/hostedActivity.ts +500 -0
  200. package/apps/storefront/src/lib/dev/cockpit/infoPopover.ts +12 -0
  201. package/apps/storefront/src/lib/dev/cockpit/mcpCopy.ts +34 -0
  202. package/apps/storefront/src/lib/dev/cockpit/monitor.ts +107 -0
  203. package/apps/storefront/src/lib/dev/cockpit/stepper.ts +116 -0
  204. package/apps/storefront/src/lib/dev/cockpit/themeToggle.ts +23 -0
  205. package/apps/storefront/src/lib/dev/cockpitStore.ts +1 -9
  206. package/apps/storefront/src/lib/dev/devDraft.ts +1 -1
  207. package/apps/storefront/src/lib/dev/previewStatus.ts +9 -21
  208. package/apps/storefront/src/lib/dev/rendezvousBroker.ts +9 -24
  209. package/apps/storefront/src/lib/dev/runtimeStore.ts +1 -1
  210. package/apps/storefront/src/lib/edgeCache.ts +34 -5
  211. package/apps/storefront/src/lib/email/candidateConflictEmail.ts +80 -0
  212. package/apps/storefront/src/lib/http/fetchTransport.ts +63 -0
  213. package/apps/storefront/src/lib/i18n.ts +25 -0
  214. package/apps/storefront/src/lib/integration/browserEnvironment.ts +137 -0
  215. package/apps/storefront/src/lib/integration/managedInstallDeclarations.ts +72 -0
  216. package/apps/storefront/src/lib/integration/nonceStamp.ts +49 -0
  217. package/apps/storefront/src/lib/integration/tenantDeclarations.ts +116 -0
  218. package/apps/storefront/src/lib/jsonld.ts +118 -0
  219. package/apps/storefront/src/lib/membership/eligibility.ts +1 -1
  220. package/apps/storefront/src/lib/membership/model.ts +1 -2
  221. package/apps/storefront/src/lib/monitoring/manifest.ts +11 -11
  222. package/apps/storefront/src/lib/newsletter/confirmationEmail.ts +30 -0
  223. package/apps/storefront/src/lib/newsletter/consent.ts +23 -0
  224. package/apps/storefront/src/lib/newsletter/digest.ts +117 -0
  225. package/apps/storefront/src/lib/newsletter/resendClient.ts +79 -0
  226. package/apps/storefront/src/lib/newsletter/send.ts +265 -0
  227. package/apps/storefront/src/lib/newsletter/subscribers.ts +156 -0
  228. package/apps/storefront/src/lib/previewReload.ts +57 -1
  229. package/apps/storefront/src/lib/publish/adminPublishTab.ts +4625 -0
  230. package/apps/storefront/src/lib/publish/apex-readiness.ts +41 -18
  231. package/apps/storefront/src/lib/publish/buildStream.ts +269 -0
  232. package/apps/storefront/src/lib/publish/collapsePersistence.ts +72 -0
  233. package/apps/storefront/src/lib/publish/dispatchHealth.ts +5 -7
  234. package/apps/storefront/src/lib/publish/domainState.ts +22 -13
  235. package/apps/storefront/src/lib/publish/lifecycleState.ts +369 -0
  236. package/apps/storefront/src/lib/publish/liveReleaseSummary.ts +29 -0
  237. package/apps/storefront/src/lib/publish/mergeDoctorOnFailure.ts +78 -0
  238. package/apps/storefront/src/lib/publish/mergeHealthBanner.ts +62 -0
  239. package/apps/storefront/src/lib/publish/mergeRowFindings.ts +124 -0
  240. package/apps/storefront/src/lib/publish/mergeSupportEscalation.ts +75 -0
  241. package/apps/storefront/src/lib/publish/panelPolling.ts +78 -0
  242. package/apps/storefront/src/lib/publish/publish-guard.ts +88 -0
  243. package/apps/storefront/src/lib/publish/publishFormat.ts +165 -0
  244. package/apps/storefront/src/lib/publish/publishHero.ts +177 -0
  245. package/apps/storefront/src/lib/publish/reviewRelease/changeState.ts +66 -0
  246. package/apps/storefront/src/lib/publish/reviewRelease/copy.ts +141 -0
  247. package/apps/storefront/src/lib/publish/reviewRelease/index.ts +41 -0
  248. package/apps/storefront/src/lib/publish/reviewRelease/permissions.ts +47 -0
  249. package/apps/storefront/src/lib/publish/reviewRelease/releaseState.ts +42 -0
  250. package/apps/storefront/src/lib/publish/reviewRelease/types.ts +59 -0
  251. package/apps/storefront/src/lib/publish/reviewRelease/viewModel.ts +440 -0
  252. package/apps/storefront/src/lib/publish/reviewReleaseWorkspace/actions.ts +161 -0
  253. package/apps/storefront/src/lib/publish/reviewReleaseWorkspace/controller.ts +325 -0
  254. package/apps/storefront/src/lib/publish/reviewReleaseWorkspace/render.ts +241 -0
  255. package/apps/storefront/src/lib/publish/shipWorkspace.ts +121 -51
  256. package/apps/storefront/src/lib/publish/sseRoute.ts +119 -0
  257. package/apps/storefront/src/lib/publish/stageBundleUpload.ts +215 -0
  258. package/apps/storefront/src/lib/publish/streamLogConsole.ts +142 -0
  259. package/apps/storefront/src/lib/publish/versionNumber.ts +52 -0
  260. package/apps/storefront/src/lib/rate/kvWindow.ts +53 -0
  261. package/apps/storefront/src/lib/rawChrome.ts +125 -47
  262. package/apps/storefront/src/lib/rawMarketingHtml.ts +74 -3
  263. package/apps/storefront/src/lib/search/index.ts +2 -2
  264. package/apps/storefront/src/lib/seo/alternates.ts +42 -0
  265. package/apps/storefront/src/lib/seo/meta.ts +65 -0
  266. package/apps/storefront/src/lib/social/golive.ts +212 -0
  267. package/apps/storefront/src/lib/social/notify.ts +32 -0
  268. package/apps/storefront/src/lib/social/tokenStore.ts +171 -0
  269. package/apps/storefront/src/lib/storyblok/content-model.ts +7 -33
  270. package/apps/storefront/src/lib/storyblok/provider.ts +168 -60
  271. package/apps/storefront/src/lib/subscription/model.ts +4 -4
  272. package/apps/storefront/src/lib/the-build/provider.ts +32 -0
  273. package/apps/storefront/src/lib/the-build/readingTime.ts +35 -0
  274. package/apps/storefront/src/lib/the-build/toc.ts +95 -0
  275. package/apps/storefront/src/lib/tot/ToTClient.ts +1 -1
  276. package/apps/storefront/src/lib/tot/d1Client.ts +2 -2
  277. package/apps/storefront/src/lib/tot/totClientInterface.ts +3 -4
  278. package/apps/storefront/src/lib/webhooks/deliveryStore.ts +16 -17
  279. package/apps/storefront/src/middleware/index.ts +385 -52
  280. package/apps/storefront/src/pages/[...slug].astro +9 -4
  281. package/apps/storefront/src/pages/admin/review-release.astro +265 -0
  282. package/apps/storefront/src/pages/admin/select.astro +96 -0
  283. package/apps/storefront/src/pages/admin.astro +25 -1313
  284. package/apps/storefront/src/pages/api/activity.ts +8 -8
  285. package/apps/storefront/src/pages/api/admin/activity-alerts.ts +5 -20
  286. package/apps/storefront/src/pages/api/admin/orders/[id].ts +7 -2
  287. package/apps/storefront/src/pages/api/admin/orders.ts +8 -2
  288. package/apps/storefront/src/pages/api/apps/admin/gtm-migration-install.ts +174 -0
  289. package/apps/storefront/src/pages/api/apps/admin/gtm-migration.ts +96 -0
  290. package/apps/storefront/src/pages/api/apps/admin/integration-lifecycle.ts +118 -0
  291. package/apps/storefront/src/pages/api/apps/admin/integrations.ts +89 -0
  292. package/apps/storefront/src/pages/api/apps/admin/platform-adapters.ts +85 -0
  293. package/apps/storefront/src/pages/api/apps/internal/order-forward.ts +74 -2
  294. package/apps/storefront/src/pages/api/blog/[collection]/[slug]/react.ts +104 -0
  295. package/apps/storefront/src/pages/api/commerce/checkout-handoff.ts +77 -0
  296. package/apps/storefront/src/pages/api/compliance/tamper.ts +88 -0
  297. package/apps/storefront/src/pages/api/integrations/v1/[operation].ts +108 -0
  298. package/apps/storefront/src/pages/api/newsletter/[collection]/subscribe.ts +146 -0
  299. package/apps/storefront/src/pages/api/newsletter/confirm.ts +75 -0
  300. package/apps/storefront/src/pages/api/newsletter/unsubscribe.ts +90 -0
  301. package/apps/storefront/src/pages/api/publish/stage-bundle.ts +70 -0
  302. package/apps/storefront/src/pages/api/rum/vitals.ts +20 -2
  303. package/apps/storefront/src/pages/blog/[slug].astro +99 -19
  304. package/apps/storefront/src/pages/blog/author/[author].astro +140 -0
  305. package/apps/storefront/src/pages/blog/category/[category].astro +67 -0
  306. package/apps/storefront/src/pages/blog/index.astro +4 -2
  307. package/apps/storefront/src/pages/blog/tag/[tag].astro +65 -0
  308. package/apps/storefront/src/pages/cockpit.astro +77 -1353
  309. package/apps/storefront/src/pages/dashboard/[appDomain]/team.astro +15 -11
  310. package/apps/storefront/src/pages/index.astro +10 -5
  311. package/apps/storefront/src/pages/llms.txt.ts +1 -1
  312. package/apps/storefront/src/pages/products/[handle].astro +7 -6
  313. package/apps/storefront/src/pages/search.astro +1 -1
  314. package/apps/storefront/src/pages/sitemap.xml.ts +21 -1
  315. package/apps/storefront/src/pages/style-guide/[tenant]/[theme].astro +31 -27
  316. package/apps/storefront/src/pages/style-guide/[tenant]/chrome/[theme].astro +1 -1
  317. package/apps/storefront/src/pages/tenants/[id]/[...path].ts +38 -2
  318. package/apps/storefront/src/pages/the-build/[slug].astro +129 -0
  319. package/apps/storefront/src/pages/the-build/index.astro +146 -0
  320. package/apps/storefront/src/pages/the-build/rss.xml.ts +33 -0
  321. package/apps/storefront/src/styles/admin.css +1106 -0
  322. package/apps/storefront/tsconfig.json +6 -1
  323. package/package.json +1 -1
  324. package/packages/public-runtime/package.json +3 -1
  325. package/packages/public-runtime/schemas/managed-analytics/v1/adapter-definition.schema.json +427 -0
  326. package/packages/public-runtime/schemas/managed-analytics/v1/create-integration-install-request.schema.json +161 -0
  327. package/packages/public-runtime/schemas/managed-analytics/v1/create-migration-draft-request.schema.json +157 -0
  328. package/packages/public-runtime/schemas/managed-analytics/v1/delete-integration-install-request.schema.json +84 -0
  329. package/packages/public-runtime/schemas/managed-analytics/v1/delete-migration-draft-request.schema.json +84 -0
  330. package/packages/public-runtime/schemas/managed-analytics/v1/error-envelope.schema.json +180 -0
  331. package/packages/public-runtime/schemas/managed-analytics/v1/get-adapter-definition-request.schema.json +52 -0
  332. package/packages/public-runtime/schemas/managed-analytics/v1/get-integration-install-request.schema.json +52 -0
  333. package/packages/public-runtime/schemas/managed-analytics/v1/get-integration-revision-request.schema.json +79 -0
  334. package/packages/public-runtime/schemas/managed-analytics/v1/get-migration-draft-request.schema.json +52 -0
  335. package/packages/public-runtime/schemas/managed-analytics/v1/integration-install.schema.json +167 -0
  336. package/packages/public-runtime/schemas/managed-analytics/v1/integration-revision.schema.json +208 -0
  337. package/packages/public-runtime/schemas/managed-analytics/v1/list-adapter-definitions-request.schema.json +53 -0
  338. package/packages/public-runtime/schemas/managed-analytics/v1/list-integration-installs-request.schema.json +53 -0
  339. package/packages/public-runtime/schemas/managed-analytics/v1/list-integration-revisions-request.schema.json +82 -0
  340. package/packages/public-runtime/schemas/managed-analytics/v1/migration-draft.schema.json +218 -0
  341. package/packages/public-runtime/schemas/managed-analytics/v1/mutation-request.schema.json +52 -0
  342. package/packages/public-runtime/schemas/managed-analytics/v1/mutation-success-envelope.schema.json +49 -0
  343. package/packages/public-runtime/schemas/managed-analytics/v1/read-request.schema.json +20 -0
  344. package/packages/public-runtime/schemas/managed-analytics/v1/read-success-envelope.schema.json +45 -0
  345. package/packages/public-runtime/schemas/managed-analytics/v1/revise-integration-install-request.schema.json +156 -0
  346. package/packages/public-runtime/schemas/managed-analytics/v1/set-integration-install-status-request.schema.json +92 -0
  347. package/packages/public-runtime/schemas/managed-analytics/v1/update-migration-draft-request.schema.json +184 -0
  348. package/packages/public-runtime/scripts/generate-managed-analytics-api-v1-schemas.mjs +13 -0
  349. package/packages/public-runtime/src/activity/catalog.ts +89 -33
  350. package/packages/public-runtime/src/activity/event.ts +6 -6
  351. package/packages/public-runtime/src/activity/index.ts +2 -2
  352. package/packages/public-runtime/src/activity/redaction.ts +4 -4
  353. package/packages/public-runtime/src/candidate-index.ts +42 -8
  354. package/packages/public-runtime/src/catalog-d1.ts +1 -1
  355. package/packages/public-runtime/src/checkout-orders.ts +2 -2
  356. package/packages/public-runtime/src/checkout-style-publish.ts +2 -2
  357. package/packages/public-runtime/src/checkout-style.ts +7 -7
  358. package/packages/public-runtime/src/checkout.ts +3 -3
  359. package/packages/public-runtime/src/chrome.ts +777 -0
  360. package/packages/public-runtime/src/compliance-obligations.ts +310 -0
  361. package/packages/public-runtime/src/csp.ts +99 -0
  362. package/packages/public-runtime/src/customization-preview.ts +25 -2
  363. package/packages/public-runtime/src/customization-runtime.ts +156 -3
  364. package/packages/public-runtime/src/customization-versioning.ts +10 -0
  365. package/packages/public-runtime/src/destination-webhook/contract.ts +353 -0
  366. package/packages/public-runtime/src/embed-catalog.d.mts +9 -0
  367. package/packages/public-runtime/src/embed-catalog.mjs +40 -0
  368. package/packages/public-runtime/src/evidence.ts +288 -0
  369. package/packages/public-runtime/src/gtm-migration/bounds.ts +138 -0
  370. package/packages/public-runtime/src/gtm-migration/disposition-rules.ts +361 -0
  371. package/packages/public-runtime/src/gtm-migration/dispositions.ts +181 -0
  372. package/packages/public-runtime/src/gtm-migration/draft-generator.ts +400 -0
  373. package/packages/public-runtime/src/gtm-migration/graph.ts +468 -0
  374. package/packages/public-runtime/src/gtm-migration/index.ts +95 -0
  375. package/packages/public-runtime/src/gtm-migration/parse.ts +410 -0
  376. package/packages/public-runtime/src/gtm-migration/references.ts +266 -0
  377. package/packages/public-runtime/src/gtm-migration/types.ts +86 -0
  378. package/packages/public-runtime/src/index.ts +17 -1
  379. package/packages/public-runtime/src/integration/assurance-decision.ts +259 -0
  380. package/packages/public-runtime/src/integration/assurance.ts +228 -0
  381. package/packages/public-runtime/src/integration/candidate-evidence.ts +377 -0
  382. package/packages/public-runtime/src/integration/commerce-broker.ts +497 -0
  383. package/packages/public-runtime/src/integration/consent-broker.ts +337 -0
  384. package/packages/public-runtime/src/integration/consent-cmp-demand.ts +115 -0
  385. package/packages/public-runtime/src/integration/consent-config.ts +260 -0
  386. package/packages/public-runtime/src/integration/consent-preview.ts +125 -0
  387. package/packages/public-runtime/src/integration/correlation-token.ts +444 -0
  388. package/packages/public-runtime/src/integration/csp-compiler.ts +267 -0
  389. package/packages/public-runtime/src/integration/csp.ts +105 -0
  390. package/packages/public-runtime/src/integration/digest.ts +43 -0
  391. package/packages/public-runtime/src/integration/environment.ts +228 -0
  392. package/packages/public-runtime/src/integration/events-catalog.ts +186 -0
  393. package/packages/public-runtime/src/integration/events.ts +701 -0
  394. package/packages/public-runtime/src/integration/g2-action-boundary.ts +106 -0
  395. package/packages/public-runtime/src/integration/index.ts +90 -0
  396. package/packages/public-runtime/src/integration/interim-bridge.ts +138 -0
  397. package/packages/public-runtime/src/integration/lifecycle-boot.ts +317 -0
  398. package/packages/public-runtime/src/integration/lifecycle-runtime.ts +393 -0
  399. package/packages/public-runtime/src/integration/lifecycle.ts +94 -0
  400. package/packages/public-runtime/src/integration/managed-analytics-api-v1-safety.d.mts +2 -0
  401. package/packages/public-runtime/src/integration/managed-analytics-api-v1-safety.mjs +10 -0
  402. package/packages/public-runtime/src/integration/managed-analytics-api-v1.schemas.ts +382 -0
  403. package/packages/public-runtime/src/integration/managed-analytics-api-v1.ts +684 -0
  404. package/packages/public-runtime/src/integration/managed-analytics-bridge.ts +383 -0
  405. package/packages/public-runtime/src/integration/managed-analytics-value-safety.ts +14 -0
  406. package/packages/public-runtime/src/integration/managed-analytics.ts +277 -0
  407. package/packages/public-runtime/src/integration/manifest.ts +470 -0
  408. package/packages/public-runtime/src/integration/native-amplitude.ts +362 -0
  409. package/packages/public-runtime/src/integration/native-ga4.ts +352 -0
  410. package/packages/public-runtime/src/integration/observability.ts +451 -0
  411. package/packages/public-runtime/src/integration/order-conversion.ts +0 -0
  412. package/packages/public-runtime/src/integration/phases.ts +182 -0
  413. package/packages/public-runtime/src/integration/plan.ts +112 -0
  414. package/packages/public-runtime/src/integration/platform-adapter-runtime.ts +146 -0
  415. package/packages/public-runtime/src/integration/platform-adapters.ts +671 -0
  416. package/packages/public-runtime/src/integration/promotion-gate.ts +451 -0
  417. package/packages/public-runtime/src/integration/provider-checkout-extension.ts +425 -0
  418. package/packages/public-runtime/src/integration/receipt-measurement.ts +370 -0
  419. package/packages/public-runtime/src/integration/regulated-parent-cert.ts +311 -0
  420. package/packages/public-runtime/src/integration/render-phases.ts +267 -0
  421. package/packages/public-runtime/src/integration/resolve.ts +465 -0
  422. package/packages/public-runtime/src/integration/result.ts +239 -0
  423. package/packages/public-runtime/src/integration/secrets.ts +92 -0
  424. package/packages/public-runtime/src/integration/tamper-evidence.ts +205 -0
  425. package/packages/public-runtime/src/integration/tamper-recovery.ts +127 -0
  426. package/packages/public-runtime/src/integration/version.ts +92 -0
  427. package/packages/public-runtime/src/integration-capabilities.ts +520 -0
  428. package/packages/public-runtime/src/membership.ts +2 -2
  429. package/packages/public-runtime/src/raw-html-policy.ts +2 -4
  430. package/packages/public-runtime/src/regulated-commerce/broker/consent-dedupe.ts +144 -0
  431. package/packages/public-runtime/src/regulated-commerce/correlation/contract.ts +177 -0
  432. package/packages/public-runtime/src/regulated-commerce/diagnostics/local-dispatch.ts +24 -0
  433. package/packages/public-runtime/src/regulated-commerce/diagnostics/read-model.ts +69 -0
  434. package/packages/public-runtime/src/regulated-commerce/dispatch/core.ts +134 -0
  435. package/packages/public-runtime/src/regulated-commerce/events/contract.ts +113 -0
  436. package/packages/public-runtime/src/regulated-commerce/ledger/core.ts +81 -0
  437. package/packages/public-runtime/src/regulated-commerce/mappings/ga4-ads.ts +87 -0
  438. package/packages/public-runtime/src/regulated-commerce/provider-order/bridge.ts +52 -0
  439. package/packages/public-runtime/src/regulated-commerce/purchase-truth/contract.ts +252 -0
  440. package/packages/public-runtime/src/regulated-commerce/sources/accepted-browser-operation.ts +67 -0
  441. package/packages/public-runtime/src/regulated-commerce/testing/fake-destination.ts +93 -0
  442. package/packages/public-runtime/src/static-bundle.ts +357 -0
  443. package/packages/public-runtime/src/tenant-assets.ts +143 -4
  444. package/packages/public-runtime/src/tenant.ts +81 -17
  445. package/packages/public-runtime/tests/fixtures/integration/browser-environment.example.json +8 -0
  446. package/packages/public-runtime/tests/fixtures/integration/commerce-event.example.json +44 -0
  447. package/packages/public-runtime/tests/fixtures/integration/commerce-order-event.example.json +44 -0
  448. package/packages/public-runtime/tests/fixtures/integration/compliance-assurance-record.example.json +50 -0
  449. package/packages/public-runtime/tests/fixtures/integration/integration-manifest-v2.example.json +120 -0
  450. package/packages/public-runtime/tests/fixtures/integration/managed-analytics-v1/fake-adapter-catalog.json +35 -0
  451. package/packages/public-runtime/tests/fixtures/integration/tenant-action-registry.example.json +11 -0
  452. package/packages/public-runtime/tests/fixtures/integration/tenant-local-example/README.md +22 -0
  453. package/packages/public-runtime/tests/fixtures/integration/tenant-local-example/entry.js +30 -0
  454. package/packages/public-runtime/tests/fixtures/integration/tenant-local-example/manifest.json +75 -0
  455. package/packages/public-runtime/tests/fixtures/integration/tenant-local-example/public-config.json +3 -0
  456. package/packages/public-runtime/tests/fixtures/regulated-commerce/fake-destinations.ts +38 -0
  457. package/packages/public-runtime/tests/gtm-migration/fixtures/gtm-sample-container-v84.provenance.json +29 -0
  458. package/packages/public-runtime/tests/gtm-migration/fixtures/gtm-sample-container-v84.redacted.json +3397 -0
  459. package/scripts/build/copy-tenant-assets.mjs +14 -4
  460. package/scripts/dev/ai-edit.mjs +1 -1
  461. package/scripts/dev/checkout-watch.mjs +2 -2
  462. package/scripts/dev/file-browser.mjs +4 -6
  463. package/scripts/dev/file-writer.mjs +3 -3
  464. package/scripts/dev/git-status.mjs +2 -2
  465. package/scripts/dev/integration-guardrails.mjs +498 -0
  466. package/scripts/dev/locate-handler.mjs +3 -3
  467. package/scripts/dev/port-check.mjs +3 -3
  468. package/scripts/dev/publish.mjs +5 -9
  469. package/scripts/dev/safe-path.mjs +2 -2
  470. package/scripts/dev/shot.mjs +1 -1
  471. package/scripts/dev/tenant-source-root.mjs +1 -1
  472. package/scripts/dev/unified-diff.mjs +8 -3
  473. package/scripts/tot-dev.mjs +8 -11
  474. package/apps/storefront/src/lib/dev/vcBinding.ts +0 -80
@@ -8,6 +8,7 @@
8
8
  import type { ManagedCheckoutConfig } from "./checkout.js";
9
9
  import type { CapabilityConfig } from "./capabilities.js";
10
10
  import type { AutopilotConfig, MembershipProgramConfig } from "./membership.js";
11
+ import type { IntegrationDeclarationInput } from "./integration/resolve.js";
11
12
 
12
13
  /**
13
14
  * The shared semantic COLOR contract — the widget library's public API.
@@ -65,7 +66,7 @@ export interface ThemeColorTokens {
65
66
  /** Hover/active shade of `accent`. Default: a derived darken of `accent`. */
66
67
  "accent-hover"?: string;
67
68
 
68
- // --- Interaction/quality-bar extensions (unit F6). Same "always resolvable"
69
+ // --- Interaction/quality-bar extensions. Same "always resolvable"
69
70
  // contract: each carries a derived @theme-bridge default so a component may
70
71
  // read it unconditionally; a theme sets one only to brand-tune it. ---
71
72
  /** Keyboard focus-ring color (`:focus-visible` outline). Default: `accent`. */
@@ -272,7 +273,7 @@ export interface ComplianceConfig {
272
273
  export type SiteType = "commerce" | "marketing";
273
274
 
274
275
  /**
275
- * The storefront paywall mode (decision `golive-paywall-storefront-mode-enabled`).
276
+ * The storefront paywall mode.
276
277
  * `"enabled"` is the ONLY value that permits go-live; `"disabled"` (or an absent
277
278
  * `storefront.mode`) fails the paywall closed. Kept OPEN as a string union with an
278
279
  * `enabled` member so a future billing state (e.g. "trial", "past_due") can be added
@@ -286,7 +287,7 @@ export const STOREFRONT_MODE_ENABLED = "enabled" as const;
286
287
 
287
288
  /**
288
289
  * PURE paywall predicate: does this storefront mode permit go-live? True iff the
289
- * mode is exactly `"enabled"` (decision `golive-paywall-storefront-mode-enabled`).
290
+ * mode is exactly `"enabled"`.
290
291
  * Generic — takes the mode value, NEVER a domain — so there is no per-store
291
292
  * special-case. Undefined/unknown → false (fail-closed).
292
293
  */
@@ -390,8 +391,47 @@ export interface TenantConfig {
390
391
  siteType?: SiteType;
391
392
  /** Explicit feature overrides layered atop the siteType defaults. */
392
393
  features?: Partial<TenantFeatures>;
394
+ /**
395
+ * Third-party embeds this tenant is allowed to render, as provider slugs from
396
+ * the platform's `EMBED_PROVIDERS` catalog (e.g. `["pipedrive"]`) — NOT raw
397
+ * origins. The platform owns each provider's exact CSP origins; listing a slug
398
+ * here opts the tenant in, and the strict CSP then permits that embed only on
399
+ * the pages that actually contain it (see `embedCspAdditions`). A provider not
400
+ * in the catalog needs a reviewed platform addition, not a config edit — so
401
+ * this stays an auditable allow-list, never an escape hatch to arbitrary hosts.
402
+ * Declared in the tenant's platform config alongside `siteType`/`capabilities`.
403
+ */
404
+ embeds?: string[];
393
405
  /** Regulated-commerce affordances; undefined for unregulated tenants. */
394
406
  compliance?: ComplianceConfig;
407
+ /**
408
+ * Per-tenant newsletter compliance/sender config. Sourced when a digest is
409
+ * built and sent (the send pipeline is a later unit). Distinct from the
410
+ * {@link TenantFeatures} `newsletter` flag, which only gates the CAPTURE form:
411
+ * this object supplies the CAN-SPAM physical postal address rendered in every
412
+ * email footer, plus the sender identity. Absent for tenants that don't send a
413
+ * newsletter; a sender falls back to a platform default when a field is unset.
414
+ */
415
+ newsletter?: {
416
+ /**
417
+ * Physical postal mailing address rendered in every newsletter email footer
418
+ * (CAN-SPAM §5(a)(5) requirement). Plain text; multi-line allowed.
419
+ */
420
+ postalAddress: string;
421
+ /** Display name on the `From:` header; falls back to `displayName`. */
422
+ fromName?: string;
423
+ /** `Reply-To:` address for the newsletter; falls back to a platform default. */
424
+ replyTo?: string;
425
+ /**
426
+ * Verified sending address on the `From:` header, e.g.
427
+ * `the-build@mail.tokenoftrust.store`. MUST be an address on a domain that is
428
+ * SPF/DKIM/DMARC-verified with the ESP (Resend) — NOT the tenant's own store
429
+ * domain, which is not a verified sending domain and would fail alignment.
430
+ * Unset → the send path derives `<collection>@mail.tokenoftrust.store` (the
431
+ * shared verified domain). Override only to use a per-tenant verified sender.
432
+ */
433
+ fromAddress?: string;
434
+ };
395
435
  /**
396
436
  * Cart/checkout engine wiring (Track A). Present on commerce tenants
397
437
  * that have a checkout store; drives the loader + signed add-to-cart. The
@@ -403,14 +443,14 @@ export interface TenantConfig {
403
443
  commerce?: {
404
444
  checkout?: ManagedCheckoutConfig;
405
445
  /**
406
- * Autopilot (subscription) program visibility (F10). Absent → subscription
446
+ * Autopilot (subscription) program visibility. Absent → subscription
407
447
  * purchase options render wherever a product authors them (framework/dev
408
448
  * default). `enabled: false` HIDES Autopilot at launch — the first-class
409
449
  * hide-at-launch state for a tenant that isn't selling recurring orders yet.
410
450
  */
411
451
  autopilot?: AutopilotConfig;
412
452
  /**
413
- * Membership pricing program (F10): member-vs-list pricing + how a member
453
+ * Membership pricing program: member-vs-list pricing + how a member
414
454
  * discount stacks with a subscription discount. Absent/`enabled:false` → no
415
455
  * member pricing renders (the launch default; shopper membership accounts are
416
456
  * a Phase-2 managed-checkout capability).
@@ -426,24 +466,34 @@ export interface TenantConfig {
426
466
  */
427
467
  capabilities?: Partial<CapabilityConfig>;
428
468
  /**
429
- * Static-publish target (T5, tokenoftrust-com-static-publish epic). This
430
- * tenant's PUBLIC site is materialized to an external static host
431
- * (S3/CloudFront) OFF the Worker and republished on go-live. A per-tenant
432
- * PROPERTY, not a global dark flag: presence opts the tenant in (default ON);
433
- * `enabled: false` opts back out without dropping the target coordinates. The
434
- * dispatch credentials/coordinates live in env/secrets, NEVER here. `target` is
435
- * an opaque, TARGET-NEUTRAL label (S3 now, R2 later) forwarded verbatim into the
436
- * publish job so ONE reconcile publish-sink drives any target.
469
+ * Static-publish target. This tenant's PUBLIC site is served by the Worker+R2
470
+ * pointer/digest plane (ADR 0012): go-live and rollback are instant, in-request
471
+ * KV `live` pointer flips over an already-staged, content-addressed bundle in
472
+ * R2. A per-tenant PROPERTY, not a global dark flag: presence opts the tenant in
473
+ * (default ON); `enabled: false` opts back out without dropping the target
474
+ * coordinates. The dispatch credentials/coordinates live in env/secrets, NEVER
475
+ * here. `target` is an opaque, TARGET-NEUTRAL label forwarded verbatim into the
476
+ * background stage/publish job so ONE reconcile publish-sink drives any target.
437
477
  */
438
478
  staticPublish?: {
439
479
  /** Target-neutral label, e.g. "www-s3". Forwarded into the dispatch payload. */
440
480
  target: string;
441
481
  /** Opt back out without removing the target. Default true when present. */
442
482
  enabled?: boolean;
483
+ /**
484
+ * Where THIS tenant's LIVE public site actually serves its `live/manifest.json`
485
+ * — the per-tenant override for the public-site freshness read-back AND the admin
486
+ * "Live Site" link (see `staticLiveManifestUrl`). Defaults to
487
+ * `https://<canonicalDomain>/manifest.json` when unset; set it only while a
488
+ * tenant's live site serves somewhere OTHER than its canonical apex (e.g. a
489
+ * pre-apex-cutover host). Per-tenant so it never bleeds across stores the way a
490
+ * single global env override would.
491
+ */
492
+ verifyUrl?: string;
443
493
  };
444
494
  /**
445
495
  * Storefront product/subscription state — the paywall the platform gates GO-LIVE
446
- * on (decision `golive-paywall-storefront-mode-enabled`). This is the storefront's
496
+ * on. This is the storefront's
447
497
  * analog of the ToT platform SDK's `apiClient.options.storefront.mode`: a per-store
448
498
  * PROPERTY set from the merchant's account/subscription, NEVER a per-domain
449
499
  * special-case in code. Go-live (the public LIVE publish, `POST /api/changes/accept`)
@@ -467,6 +517,20 @@ export interface TenantConfig {
467
517
  * (candidate create/ship/rollback) against a CLONE of a real tenant.
468
518
  */
469
519
  classification?: "internal-test";
520
+ /**
521
+ * Tenant-local browser-integration declarations (ext-kernel-09) — the tenant's
522
+ * OWN, exact-version integrations (`origin: "tenant-local"`), each a fully
523
+ * materialized {@link IntegrationDeclarationInput}: the shared browser manifest,
524
+ * the resolved public config values, and the set of asset paths present for the
525
+ * declared version. The middleware feeds these to the interim marketing bridge
526
+ * (`resolveInterimBridgePlan`), which refuses a regulated tenant and otherwise
527
+ * resolves them into the effective plan the render engine serves — so a declared
528
+ * unregulated tenant boots its integration on-by-default (consent-gated), and a
529
+ * tenant with NO declaration is byte-identical to environment-only behavior.
530
+ * Distinct from `embeds` (opt-in slugs into a platform-owned catalog): this is a
531
+ * complete self-owned declaration, not a reference into a vetted list.
532
+ */
533
+ integrations?: readonly IntegrationDeclarationInput[];
470
534
  }
471
535
 
472
536
  /**
@@ -483,7 +547,7 @@ export function isInternalTestTenant(
483
547
  }
484
548
 
485
549
  // ---------------------------------------------------------------------------
486
- // Non-premium (self-serve) tenant identity — D4.
550
+ // Non-premium (self-serve) tenant identity.
487
551
  //
488
552
  // A NEW self-serve / non-premium shop is minted with its identity anchored to a
489
553
  // per-tenant subdomain on our own Cloudflare zone: `<label>.tokenoftrust.store`.
@@ -494,7 +558,7 @@ export function isInternalTestTenant(
494
558
  // A custom `.com` is layered on LATER as an optional premium alias/upgrade
495
559
  // (`rebindPremiumDomain`), never a precondition for a preview.
496
560
  //
497
- // See docs/epics/proposed/invite-gated-auto-build.md §D4.
561
+ // See docs/epics/proposed/invite-gated-auto-build.md.
498
562
  // ---------------------------------------------------------------------------
499
563
 
500
564
  /**
@@ -546,7 +610,7 @@ export function isHostedStoreDomain(domain: string): boolean {
546
610
  }
547
611
 
548
612
  /**
549
- * Mint the identity for a NEW self-serve / non-premium tenant (D4).
613
+ * Mint the identity for a NEW self-serve / non-premium tenant.
550
614
  *
551
615
  * tenant_id == appDomain == canonicalDomain == tot_data_scope ==
552
616
  * `<label>.tokenoftrust.store`, with that single hostname as the sole `domains`
@@ -0,0 +1,8 @@
1
+ {
2
+ "$comment": "Public browser-safe example. Missing, malformed, or unknown values must never be treated as live.",
3
+ "schemaVersion": 1,
4
+ "siteSurface": "storefront",
5
+ "environment": "candidate",
6
+ "canonicalHost": "shop.example.com",
7
+ "revision": "sha256:example-non-sensitive-render-revision"
8
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "$comment": "Architectural browser-event example; contains no customer identity, payment data, signed-cart material, or preview token.",
3
+ "specversion": "1.0",
4
+ "id": "01J6EXAMPLE7J6JX18R2X8P4Y5Q",
5
+ "source": "urn:tokenoftrust:storefront:site-public-example",
6
+ "type": "storefront.checkout.handoff.v1",
7
+ "subject": "cart:anonymous-session-item-set",
8
+ "time": "2026-08-28T20:15:30.000Z",
9
+ "datacontenttype": "application/json",
10
+ "dataschema": "https://schemas.tokenoftrust.example/storefront/events/checkout-handoff-v1.json",
11
+ "storefront": {
12
+ "schemaVersion": 1,
13
+ "tenant": "site_public_example",
14
+ "environment": "staged",
15
+ "siteSurface": "storefront",
16
+ "emitter": "browser",
17
+ "sequence": 7
18
+ },
19
+ "correlation": {
20
+ "id": "corr_public_01J6EXAMPLE",
21
+ "expiresAt": "2026-08-28T21:15:30.000Z"
22
+ },
23
+ "consent": {
24
+ "schemaVersion": 1,
25
+ "snapshotId": "consent_public_01J6EXAMPLE",
26
+ "eligiblePurposes": [
27
+ "essential",
28
+ "analytics"
29
+ ]
30
+ },
31
+ "data": {
32
+ "currency": "USD",
33
+ "value": "42.50",
34
+ "itemCount": 2,
35
+ "items": [
36
+ {
37
+ "productId": "product_public_example",
38
+ "variantId": "variant_public_example",
39
+ "quantity": 2,
40
+ "unitPrice": "21.25"
41
+ }
42
+ ]
43
+ }
44
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "$comment": "Server-authoritative conversion example; emitted from a verified provider webhook, shares the handoff's correlation thread, carries no customer identity or payment data.",
3
+ "specversion": "1.0",
4
+ "id": "01J6EXAMPLEORDER9Q2K7M3ZC4T",
5
+ "source": "urn:tokenoftrust:storefront:site-public-example",
6
+ "type": "storefront.order.created.v1",
7
+ "subject": "order:external-public-example",
8
+ "time": "2026-08-28T20:31:12.000Z",
9
+ "datacontenttype": "application/json",
10
+ "dataschema": "https://schemas.tokenoftrust.example/storefront/events/order-created-v1.json",
11
+ "storefront": {
12
+ "schemaVersion": 1,
13
+ "tenant": "site_public_example",
14
+ "environment": "staged",
15
+ "siteSurface": "storefront",
16
+ "emitter": "server"
17
+ },
18
+ "correlation": {
19
+ "id": "corr_public_01J6EXAMPLE",
20
+ "expiresAt": "2026-08-28T21:15:30.000Z"
21
+ },
22
+ "consent": {
23
+ "schemaVersion": 1,
24
+ "snapshotId": "consent_public_01J6EXAMPLE",
25
+ "eligiblePurposes": [
26
+ "essential",
27
+ "analytics"
28
+ ]
29
+ },
30
+ "data": {
31
+ "orderId": "order_public_example",
32
+ "currency": "USD",
33
+ "value": "42.50",
34
+ "itemCount": 2,
35
+ "items": [
36
+ {
37
+ "productId": "product_public_example",
38
+ "variantId": "variant_public_example",
39
+ "quantity": 2,
40
+ "unitPrice": "21.25"
41
+ }
42
+ ]
43
+ }
44
+ }
@@ -0,0 +1,50 @@
1
+ {
2
+ "$comment": "Architectural audit example; not an authorization token or approved production schema.",
3
+ "schemaVersion": 1,
4
+ "recordId": "assurance_public_01J6EXAMPLE",
5
+ "tenantPublicId": "site_public_example",
6
+ "environment": "live",
7
+ "surface": "unregulated-marketing",
8
+ "classification": "elevated-supported",
9
+ "integration": {
10
+ "appId": "com.example.analytics-adapter",
11
+ "version": "2.1.0",
12
+ "digest": "sha256:example-immutable-package-digest",
13
+ "executionTier": "elevated-parent"
14
+ },
15
+ "declaredEffects": {
16
+ "capabilities": [
17
+ "parent-document.full",
18
+ "events.page-and-cart.anonymous"
19
+ ],
20
+ "consentPurposes": [
21
+ "analytics"
22
+ ],
23
+ "cspOrigins": [
24
+ "https://cdn.analytics.example",
25
+ "https://collect.analytics.example",
26
+ "https://pixel.analytics.example"
27
+ ],
28
+ "dataClasses": [
29
+ "public-catalog",
30
+ "anonymous-cart-summary"
31
+ ]
32
+ },
33
+ "compliance": {
34
+ "regulatedSharedRuntimeWaiver": false,
35
+ "configuredObligations": [],
36
+ "eligibleForOutsideGuarantee": true,
37
+ "protectedSurfaceEvidence": "evidence://candidate/example-assurance-proof"
38
+ },
39
+ "acknowledgement": {
40
+ "actorId": "operator_public_example",
41
+ "actorRole": "tenant-owner",
42
+ "reason": "Approved analytics integration after candidate privacy, performance, and CSP review.",
43
+ "recordedAt": "2026-08-28T20:30:00.000Z",
44
+ "expiresAt": "2027-02-28T20:30:00.000Z"
45
+ },
46
+ "rollback": {
47
+ "knownGoodVersion": "2.0.3",
48
+ "knownGoodRevision": "sha256:example-known-good-revision"
49
+ }
50
+ }
@@ -0,0 +1,120 @@
1
+ {
2
+ "$comment": "Architectural example only; field names and schema URI are not approved production contracts.",
3
+ "$schema": "https://schemas.tokenoftrust.example/storefront/integration-manifest-v2.schema.json",
4
+ "schemaVersion": 2,
5
+ "app": {
6
+ "id": "com.example.analytics-adapter",
7
+ "name": "Example Analytics Adapter",
8
+ "version": "2.1.0",
9
+ "digest": "sha256:example-immutable-package-digest",
10
+ "publisher": "Example Vendor",
11
+ "supportUrl": "https://support.example.invalid/storefront"
12
+ },
13
+ "compatibility": {
14
+ "storefrontBrowserContract": ">=2.0.0 <3.0.0",
15
+ "configurationSchemaVersion": 3
16
+ },
17
+ "browser": {
18
+ "executionTier": "elevated-parent",
19
+ "entry": {
20
+ "asset": "public/apps/example-analytics/entry.v2.1.0.js",
21
+ "format": "module",
22
+ "phase": "document.deferred"
23
+ },
24
+ "contributions": [
25
+ {
26
+ "id": "consent-defaults",
27
+ "phase": "consent.defaults",
28
+ "kind": "platform-template",
29
+ "template": "consent-defaults.v1"
30
+ },
31
+ {
32
+ "id": "fallback-markup",
33
+ "phase": "body.start",
34
+ "kind": "platform-template",
35
+ "template": "vendor-fallback-frame.v1"
36
+ }
37
+ ],
38
+ "dependencies": [
39
+ {
40
+ "contribution": "entry",
41
+ "after": "consent-defaults"
42
+ }
43
+ ],
44
+ "publicConfigSchema": {
45
+ "type": "object",
46
+ "additionalProperties": false,
47
+ "required": [
48
+ "destinationId"
49
+ ],
50
+ "properties": {
51
+ "destinationId": {
52
+ "type": "string",
53
+ "pattern": "^[A-Z0-9_-]{3,64}$",
54
+ "description": "Public vendor destination identifier; never a credential."
55
+ },
56
+ "debugInNonLive": {
57
+ "type": "boolean",
58
+ "default": false
59
+ }
60
+ }
61
+ },
62
+ "consent": {
63
+ "purposes": [
64
+ "analytics"
65
+ ],
66
+ "loadWhen": "all-declared-purposes-eligible",
67
+ "unknownState": "block"
68
+ },
69
+ "csp": {
70
+ "profiles": [],
71
+ "sources": {
72
+ "script-src": [
73
+ "https://cdn.analytics.example"
74
+ ],
75
+ "connect-src": [
76
+ "https://collect.analytics.example"
77
+ ],
78
+ "frame-src": [],
79
+ "img-src": [
80
+ "https://pixel.analytics.example"
81
+ ],
82
+ "style-src": []
83
+ }
84
+ },
85
+ "permissions": {
86
+ "events": [
87
+ "storefront.page.viewed.v1",
88
+ "storefront.product.viewed.v1",
89
+ "storefront.cart.updated.v1"
90
+ ],
91
+ "data": [
92
+ "catalog.product.public",
93
+ "cart.summary.anonymous"
94
+ ],
95
+ "actions": [],
96
+ "domIntent": "full-parent-authority-review-metadata-only"
97
+ },
98
+ "performanceBudget": {
99
+ "maxTransferredBytes": 75000,
100
+ "maxAdditionalRequests": 4,
101
+ "maxMainThreadMilliseconds": 50,
102
+ "mustBeAsyncOrDeferred": true
103
+ }
104
+ },
105
+ "server": {
106
+ "topics": [],
107
+ "secretRequirements": []
108
+ },
109
+ "assurance": {
110
+ "requestedClassification": "elevated-supported",
111
+ "regulatedTenantDefault": "disabled-until-certified"
112
+ },
113
+ "configurationMigrations": [
114
+ {
115
+ "from": 2,
116
+ "to": 3,
117
+ "migration": "migrations/public-config-2-to-3.v1.json"
118
+ }
119
+ ]
120
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "apiVersion": "v1",
3
+ "requestId": "req_fake_catalog_1",
4
+ "data": {
5
+ "items": [
6
+ {
7
+ "schemaVersion": 1,
8
+ "adapterId": "fake.metrics",
9
+ "adapterVersion": "1.0.0",
10
+ "displayName": "Fake Metrics",
11
+ "description": "A deterministic fake catalog adapter for consumers and tests.",
12
+ "availability": "available",
13
+ "configuration": [
14
+ {
15
+ "key": "datasetId",
16
+ "label": "Dataset id",
17
+ "description": "Public identifier for the fake dataset.",
18
+ "kind": "string",
19
+ "required": true
20
+ },
21
+ {
22
+ "key": "sampleRate",
23
+ "label": "Sample rate",
24
+ "description": "Integer sampling percentage.",
25
+ "kind": "integer",
26
+ "required": false
27
+ }
28
+ ],
29
+ "eventTypes": ["storefront.page.viewed.v1"],
30
+ "consentPurposes": ["analytics"],
31
+ "collectionOrigins": ["https://collector.invalid"]
32
+ }
33
+ ]
34
+ }
35
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "$comment": "Canonical v1 action names are explicit authored data and are never inferred from markup or labels.",
3
+ "schemaVersion": 1,
4
+ "actions": [
5
+ { "name": "user_clicked_contact_sales_mktg" },
6
+ { "name": "user_clicked_create_account_mktg" },
7
+ { "name": "user_clicked_login_mktg" },
8
+ { "name": "user_clicked_contact_support_consumer_mktg" },
9
+ { "name": "user_clicked_contact_support_partner_mktg" }
10
+ ]
11
+ }
@@ -0,0 +1,22 @@
1
+ # Tenant-local example integration
2
+
3
+ The smallest complete, valid tenant-local integration declaration: one
4
+ `document.deferred` entry module plus one `body.start` fallback contribution,
5
+ gated on the `analytics` consent purpose and the curated `plausible` CSP
6
+ profile. It validates through `validateIntegrationManifest` — the identical
7
+ function a managed app's manifest validates through (ADR 0014 C1) — so
8
+ nothing here is a tenant-local special case.
9
+
10
+ | File | What it is |
11
+ |---|---|
12
+ | `manifest.json` | The `IntegrationManifest` — the same contract a managed app ships. |
13
+ | `public-config.json` | Resolved tenant values for `manifest.json`'s `browser.publicConfigSchema`. |
14
+ | `entry.js` | The `document.deferred` entry module (`IntegrationLifecycleModule`: `init`/`update`/`dispose`). |
15
+
16
+ Walked end to end — validate → resolve → render → boot → update → dispose →
17
+ remove — by
18
+ [`../../../integration/kernel-docs-harness.test.ts`](../../../integration/kernel-docs-harness.test.ts).
19
+ Run it with `pnpm --filter @tot/public-runtime test kernel-docs-harness`.
20
+
21
+ Full contract reference, ordering/failure guide, and removal walkthrough:
22
+ [`docs/architecture/browser-integration-kernel.md`](../../../../../../docs/architecture/browser-integration-kernel.md).
@@ -0,0 +1,30 @@
1
+ /**
2
+ * A minimal tenant-local integration entry module — the shape every entry
3
+ * asset exports (IntegrationLifecycleModule from
4
+ * packages/public-runtime/src/integration/lifecycle.ts): `init` is required,
5
+ * `update`/`dispose` are optional.
6
+ *
7
+ * The deferred lifecycle runtime (lifecycle-runtime.ts's IntegrationLifecycle)
8
+ * calls these hooks exactly once per document; it never imports this file by
9
+ * name. An entry-asset layer maps this integration's appId/version (from the
10
+ * boot descriptor) to this file via an injected IntegrationModuleLoader — see
11
+ * kernel-docs-harness.test.ts, which dynamically imports this exact file
12
+ * through that same loader shape.
13
+ *
14
+ * `calls` is test/demo-only bookkeeping, not part of the contract — it lets
15
+ * the harness assert exactly-once init, in-place update, and terminal dispose
16
+ * without any DOM.
17
+ */
18
+ export const calls = [];
19
+
20
+ export function init() {
21
+ calls.push("init");
22
+ }
23
+
24
+ export function update(reason) {
25
+ calls.push(`update:${reason}`);
26
+ }
27
+
28
+ export function dispose() {
29
+ calls.push("dispose");
30
+ }
@@ -0,0 +1,75 @@
1
+ {
2
+ "$comment": "A minimal, valid tenant-local integration declaration. Validated by validateIntegrationManifest — the SAME function that validates a managed app (ADR 0014 C1 integration-schema-shared); nothing here is special-cased for tenant-local. Walked end to end by ../../integration/kernel-docs-harness.test.ts; see docs/architecture/browser-integration-kernel.md.",
3
+ "schemaVersion": 2,
4
+ "app": {
5
+ "id": "site.acme.analytics",
6
+ "name": "Acme Analytics (tenant-local)",
7
+ "version": "1.0.0",
8
+ "digest": "sha256:tenant-local-example-fixture",
9
+ "publisher": "Acme (tenant-local)",
10
+ "supportUrl": "https://acme.example/support"
11
+ },
12
+ "compatibility": {
13
+ "storefrontBrowserContract": ">=2.0.0 <3.0.0",
14
+ "configurationSchemaVersion": 2
15
+ },
16
+ "browser": {
17
+ "executionTier": "sandbox",
18
+ "entry": {
19
+ "asset": "public/apps/site.acme.analytics/entry.1.0.0.js",
20
+ "format": "module",
21
+ "phase": "document.deferred"
22
+ },
23
+ "contributions": [
24
+ {
25
+ "id": "fallback-badge",
26
+ "phase": "body.start",
27
+ "kind": "platform-template",
28
+ "template": "vendor-fallback-frame.v1"
29
+ }
30
+ ],
31
+ "dependencies": [
32
+ { "contribution": "entry", "after": "fallback-badge" }
33
+ ],
34
+ "publicConfigSchema": {
35
+ "type": "object",
36
+ "additionalProperties": false,
37
+ "required": ["siteId"],
38
+ "properties": {
39
+ "siteId": {
40
+ "type": "string",
41
+ "description": "Public Plausible site identifier; never a credential."
42
+ }
43
+ }
44
+ },
45
+ "consent": {
46
+ "purposes": ["analytics"],
47
+ "loadWhen": "all-declared-purposes-eligible",
48
+ "unknownState": "block"
49
+ },
50
+ "csp": {
51
+ "profiles": ["plausible"],
52
+ "sources": {}
53
+ },
54
+ "permissions": {
55
+ "events": ["storefront.page.viewed.v1"],
56
+ "data": [],
57
+ "actions": [],
58
+ "domIntent": "none"
59
+ },
60
+ "performanceBudget": {
61
+ "maxTransferredBytes": 15000,
62
+ "maxAdditionalRequests": 1,
63
+ "maxMainThreadMilliseconds": 20,
64
+ "mustBeAsyncOrDeferred": true
65
+ }
66
+ },
67
+ "server": { "topics": [], "secretRequirements": [] },
68
+ "assurance": {
69
+ "requestedClassification": "baseline",
70
+ "regulatedTenantDefault": "disabled-until-certified"
71
+ },
72
+ "configurationMigrations": [
73
+ { "from": 1, "to": 2, "migration": "migrations/public-config-1-to-2.v1.json" }
74
+ ]
75
+ }