@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
@@ -57,6 +57,7 @@ const gitSha = (() => {
57
57
  import preact from "@astrojs/preact";
58
58
  import tailwindcss from "@tailwindcss/vite";
59
59
  import { tenantHotReload } from "./dev-plugins/tenant-hot-reload.mjs";
60
+ import { materializeGuard } from "./integrations/materialize-guard.mjs";
60
61
 
61
62
  // SSR on Cloudflare Workers. `output: 'server'` because every response is
62
63
  // tenant-resolved at the edge from the Host header (see src/middleware).
@@ -88,7 +89,22 @@ export default defineConfig({
88
89
  // images get rehosted to R2 in Phase 1 ETL (see DECISIONS.md).
89
90
  imageService: "compile",
90
91
  }),
91
- integrations: [preact({ compat: true })],
92
+ integrations: [
93
+ // A framework Worker build requires no real-tenant checkout: tenant content
94
+ // resolves from KV/R2 at request time. The same integration becomes strict
95
+ // only when TOT_BUILD_TENANTS names a per-tenant static publish input.
96
+ materializeGuard(),
97
+ preact({ compat: true }),
98
+ // Astro's file-based router ignores ANY path segment starting with "_" (see
99
+ // `astro/dist/core/routing/create-manifest.js`), so a page literally named
100
+ // `pages/__evidence.astro` silently never becomes a route (confirmed by build:
101
+ // no "/__evidence" entry lands in the route manifest, and it 404s in dev — the
102
+ // SAME latent gap `pages/__preview/version.ts` has, pre-existing and out of
103
+ // scope here). `injectRoute` is the supported way to bind an arbitrary URL
104
+ // pattern to a component that lives OUTSIDE `src/pages` (so it never competes
105
+ // with file-based routing), which is how `/__evidence` — the diagnostic evidence
106
+ // instrument panel — is wired to a real route.
107
+ ],
92
108
  vite: {
93
109
  // Build-time constants: the CLI install spec the cockpit hands out (next vs latest),
94
110
  // and this build's commit SHA reported by /health.
@@ -7,6 +7,9 @@ import type {
7
7
  TenantFeatures,
8
8
  ResolvedManagedCheckout,
9
9
  CapabilityConfig,
10
+ BrowserEnvironment,
11
+ CompiledIntegrationCsp,
12
+ EffectivePlan,
10
13
  } from "@tot/public-runtime";
11
14
  import type { ToTClient } from "@/lib/tot/ToTClient";
12
15
  import type { ContentProvider } from "@/lib/storyblok/provider";
@@ -29,6 +32,12 @@ interface KVNamespaceLike {
29
32
  interface R2BucketLike {
30
33
  get(key: string): Promise<unknown>;
31
34
  put(key: string, value: unknown): Promise<unknown>;
35
+ list(opts?: { prefix?: string; cursor?: string; limit?: number }): Promise<{
36
+ objects: { key: string }[];
37
+ truncated: boolean;
38
+ cursor?: string;
39
+ }>;
40
+ delete(keys: string | string[]): Promise<void>;
32
41
  }
33
42
 
34
43
  interface CloudflareEnv {
@@ -49,7 +58,7 @@ interface CloudflareEnv {
49
58
  TOT_SECRET_KEY?: string;
50
59
  TOT_ACCESS_TOKEN?: string;
51
60
  PUBLIC_CF_ANALYTICS_TOKEN?: string;
52
- /** HMAC secret for signing/verifying customization preview tokens (D4). */
61
+ /** HMAC secret for signing/verifying customization preview tokens. */
53
62
  CUSTOMIZATION_PREVIEW_SECRET?: string;
54
63
  /**
55
64
  * Managed checkout (Track A). `FOXY_STORE_SUBDOMAIN` overrides the tenant's default
@@ -64,7 +73,7 @@ interface CloudflareEnv {
64
73
  FOXY_STORE_DOMAIN?: string;
65
74
  FOXY_CART_SECRET?: string;
66
75
  /**
67
- * Order READ API bearer (U2) — the tenant's ToT `partnerApi.apiKey`, sent as
76
+ * Order READ API bearer — the tenant's ToT `partnerApi.apiKey`, sent as
68
77
  * `Authorization: Bearer` to the checkout order API. Server-side only (never
69
78
  * shipped to the browser). Absent -> the Orders route reports `not_provisioned`.
70
79
  */
@@ -120,17 +129,34 @@ declare global {
120
129
  */
121
130
  basePath: string;
122
131
  /**
123
- * Which customization environment to serve (D4). "live" on production
132
+ * Which customization environment to serve. "live" on production
124
133
  * hosts; "test" only behind a valid, tenant-bound preview token on a
125
134
  * preview host. Downstream theme/content selection reads this.
126
135
  */
127
136
  customizationEnv: CustomizationEnv;
128
137
  /**
129
- * Per-request CSP nonce (D2). Placed on the platform's own inline
138
+ * Per-request CSP nonce. Placed on the platform's own inline
130
139
  * <style>/<script is:inline> tags so a strict CSP can allow them without
131
140
  * `unsafe-inline`.
132
141
  */
133
142
  cspNonce: string;
143
+ /**
144
+ * The renderer-owned four-stage browser environment
145
+ * (`local|candidate|staged|live`) for this request, computed once by the
146
+ * middleware from authoritative server state. Both document mounts
147
+ * (Layout.astro and `rawHtmlResponse`) serialize THIS object, before any
148
+ * tenant/app code, so it is identical in both. Carries only public values —
149
+ * never a token, binding, or signed URL.
150
+ */
151
+ browserEnvironment: BrowserEnvironment;
152
+ /**
153
+ * The resolved effective plan (ext-kernel-03) for this request. The
154
+ * fixed-phase render engine (ext-kernel-04) consumes THIS in both document
155
+ * mounts (Layout.astro + rawHtmlResponse), so their renderer-owned phase
156
+ * markup is identical. Environment-only until declaration materialization is
157
+ * wired; carries no secret and no nonce.
158
+ */
159
+ integrationPlan: EffectivePlan;
134
160
  /**
135
161
  * Resolved cart/checkout facts for this request (loader src, cart URL,
136
162
  * mode). Present only for commerce tenants with a checkout store;
@@ -161,7 +187,7 @@ declare global {
161
187
  runtime?: { env: CloudflareEnv };
162
188
  /**
163
189
  * Every private-app widget placement actually rendered for this request
164
- * (PrivateApps epic, D5). The middleware seeds this to `[]` before
190
+ * (PrivateApps epic). The middleware seeds this to `[]` before
165
191
  * `next()`; each page/layout that renders a widget slot (`renderSlot.ts`)
166
192
  * pushes its resolved placements onto it as the page renders, so the
167
193
  * middleware can read the full per-request set back out AFTER `next()`
@@ -169,6 +195,29 @@ declare global {
169
195
  * the origins that ended up on the page — never more.
170
196
  */
171
197
  activeWidgetPlacements?: { endpoint: string }[];
198
+ /**
199
+ * Third-party embed opt-in (EMBED_PROVIDERS catalog slugs) for THIS
200
+ * request, when it must come from a tenant the URL router can't resolve —
201
+ * specifically the candidate renderer (`/preview/render/<tenant>/…`, where
202
+ * `<tenant>` isn't the first path segment). `candidateRender` sets it to the
203
+ * resolved candidate tenant's opt-in; the middleware's embed scan prefers it
204
+ * over the router-resolved tenant's embeds when present. Unset on normal
205
+ * renders (the router-resolved tenant's embeds are authoritative there).
206
+ */
207
+ embedOptIn?: string[];
208
+ /**
209
+ * The version-scoped integration CSP contribution for THIS request, resolved
210
+ * from the tenant/environment/version effective plan (curated adapter
211
+ * profiles expanded + advanced exact origins merged, deterministic and bound
212
+ * to the plan's `planRevision`). It is plan-scoped server state — resolved
213
+ * before the edge-cache read so its `planRevision` folds into `pageCacheKey`
214
+ * (making a rollback/uninstall a clean warm miss, not a TTL wait) and its
215
+ * `additions` fold into the strict CSP the middleware builds after `next()`,
216
+ * only ever APPENDING reviewed origins to the six contributable directives.
217
+ * Absent when no integration declares CSP — the header and cache key are then
218
+ * byte-identical to a non-integration tenant's (zero cost when disabled).
219
+ */
220
+ integrationCsp?: CompiledIntegrationCsp;
172
221
  }
173
222
  }
174
223
  }
@@ -0,0 +1,54 @@
1
+ import {
2
+ assertPinnedMaterialized,
3
+ checkPinned,
4
+ } from "../../../scripts/tenant/materialize-tenant-content.mjs";
5
+
6
+ /**
7
+ * Protect the two intentionally different build modes:
8
+ *
9
+ * - Framework Worker (no TOT_BUILD_TENANTS): tenant content is runtime data,
10
+ * so absent Gitea checkouts are expected and must never block deployment.
11
+ * - Per-tenant static publish (TOT_BUILD_TENANTS set): the named checkout is
12
+ * build input and therefore must be materialized at a pinned ref.
13
+ *
14
+ * TOT_TENANT_REF also assert every stamp is EXACTLY this commit (off-ref → refuse)
15
+ * TOT_ALLOW_UNPINNED=1 tolerate a default-branch (unpinned) materialize
16
+ * TOT_FRAMEWORK_ONLY_BUILD=1 retained as a backwards-compatible explicit name
17
+ * for framework mode; it is now the default whenever TOT_BUILD_TENANTS is unset.
18
+ * TOT_BUILD_TENANTS comma-separated tenant ids to scope the guard to. A per-tenant
19
+ * STATIC publish (materialize-tenant.mjs) sets this to the single tenant it renders,
20
+ * so a sibling tenant can never block it. Unset ⇒ framework-only Worker build.
21
+ */
22
+ export function materializeGuard() {
23
+ return {
24
+ name: "materialize-guard",
25
+ hooks: {
26
+ "astro:build:start": (ctx = {}) => {
27
+ const logger = ctx.logger;
28
+ const expectRef = process.env.TOT_TENANT_REF || null;
29
+ const allowUnpinned = process.env.TOT_ALLOW_UNPINNED === "1";
30
+ const scoped = (process.env.TOT_BUILD_TENANTS || "")
31
+ .split(",")
32
+ .map((t) => t.trim())
33
+ .filter(Boolean);
34
+ const onlyTenants = scoped.length > 0 ? scoped : null;
35
+ const frameworkOnly = onlyTenants === null || process.env.TOT_FRAMEWORK_ONLY_BUILD === "1";
36
+ if (frameworkOnly) {
37
+ const { problems } = checkPinned(undefined, { expectRef, allowUnpinned, onlyTenants });
38
+ const absent = problems.filter((p) => p.reason === "absent");
39
+ const real = problems.filter((p) => p.reason !== "absent");
40
+ if (absent.length) {
41
+ const msg = `[materialize-guard] framework-only build: ${absent.length} tenant checkout(s) absent (served from runtime storage): ${absent.map((p) => p.tenant).join(", ")}`;
42
+ if (logger && typeof logger.info === "function") logger.info(msg);
43
+ else console.log(msg);
44
+ }
45
+ if (real.length) {
46
+ assertPinnedMaterialized({ expectRef, allowUnpinned, onlyTenants });
47
+ }
48
+ return;
49
+ }
50
+ assertPinnedMaterialized({ expectRef, allowUnpinned, onlyTenants });
51
+ },
52
+ },
53
+ };
54
+ }
@@ -0,0 +1,26 @@
1
+ CREATE TABLE `newsletter_sends` (
2
+ `tenant_id` text NOT NULL,
3
+ `collection` text NOT NULL,
4
+ `digest_id` text NOT NULL,
5
+ `post_slugs` text DEFAULT '[]' NOT NULL,
6
+ `recipient_count` integer DEFAULT 0 NOT NULL,
7
+ `sent_at` text NOT NULL,
8
+ PRIMARY KEY(`tenant_id`, `collection`, `digest_id`)
9
+ );
10
+ --> statement-breakpoint
11
+ CREATE TABLE `newsletter_subscribers` (
12
+ `tenant_id` text NOT NULL,
13
+ `collection` text NOT NULL,
14
+ `email` text NOT NULL,
15
+ `status` text DEFAULT 'pending' NOT NULL,
16
+ `token` text NOT NULL,
17
+ `consent_source` text,
18
+ `consent_ip_hash` text,
19
+ `subscribed_at` text NOT NULL,
20
+ `confirmed_at` text,
21
+ `unsubscribed_at` text,
22
+ `last_sent_at` text,
23
+ PRIMARY KEY(`tenant_id`, `collection`, `email`)
24
+ );
25
+ --> statement-breakpoint
26
+ CREATE INDEX `idx_newsletter_tenant_coll_status` ON `newsletter_subscribers` (`tenant_id`,`collection`,`status`);
@@ -0,0 +1,12 @@
1
+ CREATE TABLE `social_tokens` (
2
+ `tenant_id` text NOT NULL,
3
+ `network` text NOT NULL,
4
+ `ciphertext` text NOT NULL,
5
+ `iv` text NOT NULL,
6
+ `expires_at` text,
7
+ `created_at` text NOT NULL,
8
+ `updated_at` text NOT NULL,
9
+ PRIMARY KEY(`tenant_id`, `network`)
10
+ );
11
+ --> statement-breakpoint
12
+ CREATE INDEX `idx_social_tokens_tenant` ON `social_tokens` (`tenant_id`);
@@ -0,0 +1,36 @@
1
+ CREATE TABLE `candidate_attempts` (
2
+ `id` text PRIMARY KEY NOT NULL,
3
+ `candidate_id` text NOT NULL,
4
+ `tenant_id` text NOT NULL,
5
+ `attempt_number` integer NOT NULL,
6
+ `kind` text NOT NULL,
7
+ `status` text DEFAULT 'pending' NOT NULL,
8
+ `head_sha` text,
9
+ `detail` text,
10
+ `evidence` text,
11
+ `started_at` text NOT NULL,
12
+ `finished_at` text
13
+ );
14
+ --> statement-breakpoint
15
+ CREATE UNIQUE INDEX `uq_candidate_attempts_candidate_number` ON `candidate_attempts` (`candidate_id`,`attempt_number`);--> statement-breakpoint
16
+ CREATE INDEX `idx_candidate_attempts_candidate` ON `candidate_attempts` (`candidate_id`);--> statement-breakpoint
17
+ CREATE INDEX `idx_candidate_attempts_tenant` ON `candidate_attempts` (`tenant_id`);--> statement-breakpoint
18
+ CREATE TABLE `candidates` (
19
+ `id` text PRIMARY KEY NOT NULL,
20
+ `tenant_id` text NOT NULL,
21
+ `repository` text NOT NULL,
22
+ `pr_number` integer NOT NULL,
23
+ `change_id` text NOT NULL,
24
+ `branch` text,
25
+ `title` text,
26
+ `author` text,
27
+ `status` text DEFAULT 'open' NOT NULL,
28
+ `head_sha` text,
29
+ `base_sha` text,
30
+ `created_at` text NOT NULL,
31
+ `updated_at` text NOT NULL
32
+ );
33
+ --> statement-breakpoint
34
+ CREATE UNIQUE INDEX `uq_candidates_tenant_repo_pr` ON `candidates` (`tenant_id`,`repository`,`pr_number`);--> statement-breakpoint
35
+ CREATE UNIQUE INDEX `uq_candidates_tenant_change` ON `candidates` (`tenant_id`,`change_id`);--> statement-breakpoint
36
+ CREATE INDEX `idx_candidates_tenant_status` ON `candidates` (`tenant_id`,`status`);
@@ -0,0 +1,23 @@
1
+ CREATE TABLE `consent_cmp_demand` (
2
+ `id` text PRIMARY KEY NOT NULL,
3
+ `tenant_id` text NOT NULL,
4
+ `adapter_id` text NOT NULL,
5
+ `source` text,
6
+ `at` text NOT NULL
7
+ );
8
+ --> statement-breakpoint
9
+ CREATE UNIQUE INDEX `uq_consent_cmp_demand_tenant_adapter` ON `consent_cmp_demand` (`tenant_id`,`adapter_id`);--> statement-breakpoint
10
+ CREATE INDEX `idx_consent_cmp_demand_adapter` ON `consent_cmp_demand` (`adapter_id`);--> statement-breakpoint
11
+ CREATE TABLE `consent_config_revisions` (
12
+ `id` text PRIMARY KEY NOT NULL,
13
+ `tenant_id` text NOT NULL,
14
+ `revision` integer NOT NULL,
15
+ `config` text NOT NULL,
16
+ `actor` text NOT NULL,
17
+ `note` text,
18
+ `reverted_from` integer,
19
+ `created_at` text NOT NULL
20
+ );
21
+ --> statement-breakpoint
22
+ CREATE UNIQUE INDEX `uq_consent_config_tenant_revision` ON `consent_config_revisions` (`tenant_id`,`revision`);--> statement-breakpoint
23
+ CREATE INDEX `idx_consent_config_tenant` ON `consent_config_revisions` (`tenant_id`);
@@ -0,0 +1,16 @@
1
+ CREATE TABLE `correlation_replay` (
2
+ `jti` text PRIMARY KEY NOT NULL,
3
+ `expires_at` integer NOT NULL,
4
+ `consumed_at` text NOT NULL
5
+ );
6
+ --> statement-breakpoint
7
+ CREATE TABLE `order_attribution` (
8
+ `tenant_id` text NOT NULL,
9
+ `external_order_id` text NOT NULL,
10
+ `attributed` integer DEFAULT 0 NOT NULL,
11
+ `correlation_id` text,
12
+ `correlation_expires_at` text,
13
+ `reason` text,
14
+ `recorded_at` text NOT NULL,
15
+ PRIMARY KEY(`tenant_id`, `external_order_id`)
16
+ );
@@ -0,0 +1,15 @@
1
+ CREATE TABLE `app_version_snapshots` (
2
+ `id` text PRIMARY KEY NOT NULL,
3
+ `install_id` text NOT NULL,
4
+ `tenant_id` text NOT NULL,
5
+ `seq` integer NOT NULL,
6
+ `app_version` text NOT NULL,
7
+ `facets` text NOT NULL,
8
+ `actor` text NOT NULL,
9
+ `note` text,
10
+ `restored_from_seq` integer,
11
+ `created_at` text NOT NULL
12
+ );
13
+ --> statement-breakpoint
14
+ CREATE UNIQUE INDEX `uq_app_version_snapshots_install_seq` ON `app_version_snapshots` (`install_id`,`seq`);--> statement-breakpoint
15
+ CREATE INDEX `idx_app_version_snapshots_install` ON `app_version_snapshots` (`install_id`);
@@ -0,0 +1,11 @@
1
+ CREATE TABLE `candidate_submit_leases` (
2
+ `tenant_id` text NOT NULL,
3
+ `change_id` text NOT NULL,
4
+ `authorization_id` text NOT NULL,
5
+ `status` text DEFAULT 'active' NOT NULL,
6
+ `acquired_at` text NOT NULL,
7
+ `expires_at` text NOT NULL,
8
+ PRIMARY KEY(`tenant_id`, `change_id`)
9
+ );
10
+ --> statement-breakpoint
11
+ CREATE INDEX `idx_candidate_submit_leases_expires` ON `candidate_submit_leases` (`expires_at`);
@@ -0,0 +1,15 @@
1
+ CREATE TABLE `integration_migration_drafts` (
2
+ `draft_id` text PRIMARY KEY NOT NULL,
3
+ `tenant_id` text NOT NULL,
4
+ `revision` integer NOT NULL,
5
+ `state` text DEFAULT 'open' NOT NULL,
6
+ `record` text NOT NULL,
7
+ `created_at` text NOT NULL,
8
+ `updated_at` text NOT NULL
9
+ );
10
+ --> statement-breakpoint
11
+ CREATE INDEX `idx_integration_migration_drafts_tenant` ON `integration_migration_drafts` (`tenant_id`,`created_at`);--> statement-breakpoint
12
+ ALTER TABLE `app_installs` ADD `managed_kind` text;--> statement-breakpoint
13
+ ALTER TABLE `app_installs` ADD `managed_revision` integer DEFAULT 0 NOT NULL;--> statement-breakpoint
14
+ ALTER TABLE `app_installs` ADD `managed_active_revision_id` text;--> statement-breakpoint
15
+ ALTER TABLE `app_installs` ADD `managed_candidate` text;
@@ -0,0 +1,35 @@
1
+ -- WS4 durable, minimized server ledger/outbox. No raw provider payload,
2
+ -- customer identity, browser correlation, credential, or destination data.
3
+ CREATE TABLE `regulated_commerce_provider_events` (
4
+ `provider` text NOT NULL,
5
+ `provider_event_id` text NOT NULL,
6
+ `fingerprint` text NOT NULL,
7
+ `receipt_id` text NOT NULL,
8
+ `received_at` text NOT NULL,
9
+ PRIMARY KEY(`provider`, `provider_event_id`)
10
+ );
11
+ --> statement-breakpoint
12
+ CREATE TABLE `regulated_commerce_provider_orders` (
13
+ `provider` text NOT NULL,
14
+ `provider_order_id` text NOT NULL,
15
+ `tenant_id` text NOT NULL,
16
+ `state` text NOT NULL,
17
+ `provider_event_id` text NOT NULL,
18
+ `updated_at` text NOT NULL,
19
+ PRIMARY KEY(`provider`, `provider_order_id`, `tenant_id`)
20
+ );
21
+ --> statement-breakpoint
22
+ CREATE TABLE `regulated_commerce_intent_outbox` (
23
+ `intent_id` text PRIMARY KEY NOT NULL,
24
+ `tenant_id` text NOT NULL,
25
+ `provider` text NOT NULL,
26
+ `provider_event_id` text NOT NULL,
27
+ `payload` text NOT NULL,
28
+ `created_at` text NOT NULL
29
+ );
30
+ --> statement-breakpoint
31
+ CREATE UNIQUE INDEX `uq_regulated_commerce_outbox_provider_event`
32
+ ON `regulated_commerce_intent_outbox` (`provider`, `provider_event_id`);
33
+ --> statement-breakpoint
34
+ CREATE INDEX `idx_regulated_commerce_outbox_tenant_created`
35
+ ON `regulated_commerce_intent_outbox` (`tenant_id`, `created_at`);