@tokenoftrust/storefront-runner 1.4.2-rc.0 → 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 (363) hide show
  1. package/apps/storefront/astro.config.mjs +3 -3
  2. package/apps/storefront/env.d.ts +54 -5
  3. package/apps/storefront/integrations/materialize-guard.mjs +12 -14
  4. package/apps/storefront/migrations-apps/0004_deep_morph.sql +36 -0
  5. package/apps/storefront/migrations-apps/0005_common_mystique.sql +23 -0
  6. package/apps/storefront/migrations-apps/0006_broad_microchip.sql +16 -0
  7. package/apps/storefront/migrations-apps/0007_brave_outlaw_kid.sql +15 -0
  8. package/apps/storefront/migrations-apps/0008_blue_dazzler.sql +11 -0
  9. package/apps/storefront/migrations-apps/0009_bored_shinobi_shaw.sql +15 -0
  10. package/apps/storefront/migrations-apps/0010_ws4_verified_provider_measurement.sql +35 -0
  11. package/apps/storefront/migrations-apps/meta/0004_snapshot.json +1474 -0
  12. package/apps/storefront/migrations-apps/meta/0005_snapshot.json +1617 -0
  13. package/apps/storefront/migrations-apps/meta/0006_snapshot.json +1716 -0
  14. package/apps/storefront/migrations-apps/meta/0007_snapshot.json +1812 -0
  15. package/apps/storefront/migrations-apps/meta/0008_snapshot.json +1881 -0
  16. package/apps/storefront/migrations-apps/meta/0009_snapshot.json +1979 -0
  17. package/apps/storefront/migrations-apps/meta/_journal.json +42 -0
  18. package/apps/storefront/public/apps/tot.demo.analytics/0.1.0/entry.js +42 -0
  19. package/apps/storefront/public/platform/amplitude-http/v1/entry.mjs +19 -0
  20. package/apps/storefront/public/platform/google-measurement/v1/entry.mjs +19 -0
  21. package/apps/storefront/public/shared/commerce-chrome.css +20 -2
  22. package/apps/storefront/scripts/build-v84-clean-clone-standalone.mjs +68 -0
  23. package/apps/storefront/scripts/deny-v84-clean-clone-standalone-capabilities.mjs +111 -0
  24. package/apps/storefront/scripts/deny-v84-dogfood-capabilities.mjs +2 -0
  25. package/apps/storefront/scripts/deny-v84-lifecycle-capabilities.mjs +247 -0
  26. package/apps/storefront/scripts/dogfood-v84-nonportable-routes.ts +73 -0
  27. package/apps/storefront/scripts/fixed-v84-native-install-producer.ts +79 -0
  28. package/apps/storefront/scripts/generated/v84-clean-clone-replay.bundle.mjs +10982 -0
  29. package/apps/storefront/scripts/import-v84-through-ws2.ts +38 -0
  30. package/apps/storefront/scripts/initialize-v84-lifecycle-tooling-dependency.ts +2 -0
  31. package/apps/storefront/scripts/initialize-v84-lifecycle-tooling.ts +4 -0
  32. package/apps/storefront/scripts/install-v84-native-through-ws1.ts +185 -0
  33. package/apps/storefront/scripts/prove-clone-isolation.ts +506 -0
  34. package/apps/storefront/scripts/replay-v84-clean-clone-pass.ts +148 -0
  35. package/apps/storefront/scripts/replay-v84-clean-clone-standalone.ts +35 -0
  36. package/apps/storefront/scripts/replay-v84-clean-clone.ts +214 -0
  37. package/apps/storefront/scripts/run-fixed-v84-native-install-producer.mjs +18 -0
  38. package/apps/storefront/scripts/run-v84-clone-isolation-proof.mjs +18 -0
  39. package/apps/storefront/scripts/run-v84-clone-lifecycle-proof.mjs +18 -0
  40. package/apps/storefront/scripts/run-v84-import-through-ws2-proof.mjs +17 -0
  41. package/apps/storefront/scripts/run-v84-nonportable-route-dogfood.mjs +15 -0
  42. package/apps/storefront/scripts/sanitize-v84-proof-environment.mjs +21 -0
  43. package/apps/storefront/scripts/v84CleanCloneGraphPin.ts +42 -0
  44. package/apps/storefront/scripts/v84CleanCloneSourceGraph.ts +145 -0
  45. package/apps/storefront/scripts/validate-v84-clone-lifecycle.ts +18 -0
  46. package/apps/storefront/src/components/Img.astro +1 -1
  47. package/apps/storefront/src/components/admin/AdminBlogTab.astro +19 -16
  48. package/apps/storefront/src/components/admin/AdminIntegrationsTab.astro +105 -0
  49. package/apps/storefront/src/components/admin/AdminPublishTab.astro +1057 -412
  50. package/apps/storefront/src/components/admin/AdminSettingsTab.astro +2 -2
  51. package/apps/storefront/src/components/admin/orders/OrdersWorkspace.astro +5 -5
  52. package/apps/storefront/src/components/chrome/NavDropdown.astro +12 -0
  53. package/apps/storefront/src/components/chrome/SiteFooter.astro +7 -2
  54. package/apps/storefront/src/components/chrome/SiteHeader.astro +46 -10
  55. package/apps/storefront/src/components/compliance/AdultSignatureNotice.astro +1 -1
  56. package/apps/storefront/src/components/compliance/ComplianceNotice.astro +1 -2
  57. package/apps/storefront/src/components/compliance/ExciseTaxNotice.astro +1 -2
  58. package/apps/storefront/src/components/compliance/PactActNotice.astro +1 -1
  59. package/apps/storefront/src/components/compliance/Prop65Warning.astro +1 -2
  60. package/apps/storefront/src/components/compliance/PurchaseLimitNotice.astro +2 -3
  61. package/apps/storefront/src/components/compliance/ShippingRestrictionNotice.astro +2 -2
  62. package/apps/storefront/src/components/compliance/StateEligibilityNotice.astro +2 -3
  63. package/apps/storefront/src/components/content/TrustStrip.astro +4 -4
  64. package/apps/storefront/src/components/islands/MobileNav.tsx +26 -1
  65. package/apps/storefront/src/components/islands/VariantSelector.tsx +27 -2
  66. package/apps/storefront/src/components/islands/useCheckoutHandoffCorrelation.ts +75 -0
  67. package/apps/storefront/src/components/membership/IllustrativeLabel.astro +1 -2
  68. package/apps/storefront/src/components/membership/TierCards.astro +2 -2
  69. package/apps/storefront/src/components/membership/TierComparisonTable.astro +2 -2
  70. package/apps/storefront/src/components/subscription/SavingsExplainer.astro +2 -2
  71. package/apps/storefront/src/config/adminTenantLookup.ts +35 -0
  72. package/apps/storefront/src/config/devTenantSeed.ts +9 -9
  73. package/apps/storefront/src/config/resolver.ts +4 -4
  74. package/apps/storefront/src/layouts/Layout.astro +100 -20
  75. package/apps/storefront/src/lib/activity/candidateSubmitLease.ts +87 -0
  76. package/apps/storefront/src/lib/activity/changeActorAttribution.ts +86 -6
  77. package/apps/storefront/src/lib/activity/deployVersion.ts +1 -1
  78. package/apps/storefront/src/lib/admin/adminShell.ts +2 -0
  79. package/apps/storefront/src/lib/admin/envelope.ts +1 -2
  80. package/apps/storefront/src/lib/apps/adminService.ts +10 -0
  81. package/apps/storefront/src/lib/apps/adminSession.ts +1 -1
  82. package/apps/storefront/src/lib/apps/appVersionStore.ts +281 -0
  83. package/apps/storefront/src/lib/apps/consentConfigStore.ts +228 -0
  84. package/apps/storefront/src/lib/apps/gtmMigrationInstall.ts +447 -0
  85. package/apps/storefront/src/lib/apps/gtmMigrationReport.ts +367 -0
  86. package/apps/storefront/src/lib/apps/gtmMigrationTab.ts +315 -0
  87. package/apps/storefront/src/lib/apps/integrationLifecycle.ts +614 -0
  88. package/apps/storefront/src/lib/apps/integrationLifecycleController.ts +125 -0
  89. package/apps/storefront/src/lib/apps/integrationReadModel.ts +563 -0
  90. package/apps/storefront/src/lib/apps/integrationsTab.ts +547 -0
  91. package/apps/storefront/src/lib/apps/integrationsView.ts +106 -0
  92. package/apps/storefront/src/lib/apps/managedAnalyticsService.ts +599 -0
  93. package/apps/storefront/src/lib/apps/orders/orderConversionD1.ts +150 -0
  94. package/apps/storefront/src/lib/apps/orders/orderForwardReceiver.ts +8 -0
  95. package/apps/storefront/src/lib/apps/orders/ordersStore.ts +1 -1
  96. package/apps/storefront/src/lib/apps/orders/verifiedProviderMeasurement.ts +117 -0
  97. package/apps/storefront/src/lib/apps/registryService.ts +264 -10
  98. package/apps/storefront/src/lib/apps/tenantIntegrationMaterialization.ts +170 -0
  99. package/apps/storefront/src/lib/apps/v84CleanCloneReplayContext.ts +16 -0
  100. package/apps/storefront/src/lib/apps/v84CloneLifecycleCacheEvidence.ts +105 -0
  101. package/apps/storefront/src/lib/apps/v84CloneLifecycleEvidence.ts +177 -0
  102. package/apps/storefront/src/lib/apps/v84CloneLifecycleMaterialization.ts +251 -0
  103. package/apps/storefront/src/lib/apps/v84CloneLifecycleSemantics.ts +241 -0
  104. package/apps/storefront/src/lib/apps/v84CloneMigrationEvidence.ts +211 -0
  105. package/apps/storefront/src/lib/apps/v84CloneNativeInstallEvidence.ts +409 -0
  106. package/apps/storefront/src/lib/apps/v84NonportableCodeCoaching.ts +368 -0
  107. package/apps/storefront/src/lib/apps/v84NonportableRouteContract.ts +188 -0
  108. package/apps/storefront/src/lib/apps/v84NonportableRouteDogfood.ts +291 -0
  109. package/apps/storefront/src/lib/apps/ws1ManagedAnalyticsClient.ts +95 -0
  110. package/apps/storefront/src/lib/auth/adminApiGuard.ts +66 -0
  111. package/apps/storefront/src/lib/auth/adminEntry.ts +2 -2
  112. package/apps/storefront/src/lib/auth/adminLanding.ts +88 -0
  113. package/apps/storefront/src/lib/blog/collection.ts +97 -10
  114. package/apps/storefront/src/lib/blog/markdown.ts +1 -1
  115. package/apps/storefront/src/lib/blog/provider.ts +57 -3
  116. package/apps/storefront/src/lib/blog/types.ts +9 -9
  117. package/apps/storefront/src/lib/chrome/examples/tokenoftrust.chrome-assignments.example.json +6 -0
  118. package/apps/storefront/src/lib/chrome/examples/tokenoftrust.chrome.example.json +79 -0
  119. package/apps/storefront/src/lib/chrome/model.ts +48 -253
  120. package/apps/storefront/src/lib/chrome/navCurrent.ts +29 -0
  121. package/apps/storefront/src/lib/chrome/parseConfig.ts +18 -32
  122. package/apps/storefront/src/lib/chrome/variant.ts +39 -0
  123. package/apps/storefront/src/lib/commerce/checkoutHandoffCorrelation.ts +105 -0
  124. package/apps/storefront/src/lib/compliance/tamper-sentinel-boot.ts +152 -0
  125. package/apps/storefront/src/lib/compliance/tamper-sentinel.ts +327 -0
  126. package/apps/storefront/src/lib/content/index.ts +5 -5
  127. package/apps/storefront/src/lib/content-edit/applyDiff.ts +1 -1
  128. package/apps/storefront/src/lib/content-edit/route.ts +1 -1
  129. package/apps/storefront/src/lib/d1/catalog.ts +12 -0
  130. package/apps/storefront/src/lib/d1/schema-apps.ts +276 -0
  131. package/apps/storefront/src/lib/dev/cockpit/ask.ts +49 -0
  132. package/apps/storefront/src/lib/dev/cockpit/clickToSource.ts +71 -0
  133. package/apps/storefront/src/lib/dev/cockpit/copyCommand.ts +227 -0
  134. package/apps/storefront/src/lib/dev/cockpit/files.ts +249 -0
  135. package/apps/storefront/src/lib/dev/cockpit/hostedActivity.ts +500 -0
  136. package/apps/storefront/src/lib/dev/cockpit/infoPopover.ts +12 -0
  137. package/apps/storefront/src/lib/dev/cockpit/mcpCopy.ts +34 -0
  138. package/apps/storefront/src/lib/dev/cockpit/monitor.ts +107 -0
  139. package/apps/storefront/src/lib/dev/cockpit/stepper.ts +116 -0
  140. package/apps/storefront/src/lib/dev/cockpit/themeToggle.ts +23 -0
  141. package/apps/storefront/src/lib/dev/runtimeStore.ts +1 -1
  142. package/apps/storefront/src/lib/edgeCache.ts +18 -6
  143. package/apps/storefront/src/lib/email/candidateConflictEmail.ts +80 -0
  144. package/apps/storefront/src/lib/integration/browserEnvironment.ts +137 -0
  145. package/apps/storefront/src/lib/integration/managedInstallDeclarations.ts +72 -0
  146. package/apps/storefront/src/lib/integration/nonceStamp.ts +49 -0
  147. package/apps/storefront/src/lib/integration/tenantDeclarations.ts +116 -0
  148. package/apps/storefront/src/lib/membership/eligibility.ts +1 -1
  149. package/apps/storefront/src/lib/membership/model.ts +1 -2
  150. package/apps/storefront/src/lib/newsletter/confirmationEmail.ts +2 -2
  151. package/apps/storefront/src/lib/newsletter/consent.ts +2 -2
  152. package/apps/storefront/src/lib/newsletter/send.ts +3 -3
  153. package/apps/storefront/src/lib/previewReload.ts +57 -1
  154. package/apps/storefront/src/lib/publish/adminPublishTab.ts +1775 -669
  155. package/apps/storefront/src/lib/publish/buildStream.ts +269 -0
  156. package/apps/storefront/src/lib/publish/collapsePersistence.ts +72 -0
  157. package/apps/storefront/src/lib/publish/lifecycleState.ts +369 -0
  158. package/apps/storefront/src/lib/publish/liveReleaseSummary.ts +29 -0
  159. package/apps/storefront/src/lib/publish/mergeDoctorOnFailure.ts +78 -0
  160. package/apps/storefront/src/lib/publish/mergeHealthBanner.ts +62 -0
  161. package/apps/storefront/src/lib/publish/mergeRowFindings.ts +124 -0
  162. package/apps/storefront/src/lib/publish/mergeSupportEscalation.ts +75 -0
  163. package/apps/storefront/src/lib/publish/publish-guard.ts +88 -0
  164. package/apps/storefront/src/lib/publish/publishFormat.ts +165 -0
  165. package/apps/storefront/src/lib/publish/publishHero.ts +177 -0
  166. package/apps/storefront/src/lib/publish/reviewRelease/changeState.ts +66 -0
  167. package/apps/storefront/src/lib/publish/reviewRelease/copy.ts +141 -0
  168. package/apps/storefront/src/lib/publish/reviewRelease/index.ts +41 -0
  169. package/apps/storefront/src/lib/publish/reviewRelease/permissions.ts +47 -0
  170. package/apps/storefront/src/lib/publish/reviewRelease/releaseState.ts +42 -0
  171. package/apps/storefront/src/lib/publish/reviewRelease/types.ts +59 -0
  172. package/apps/storefront/src/lib/publish/reviewRelease/viewModel.ts +440 -0
  173. package/apps/storefront/src/lib/publish/reviewReleaseWorkspace/actions.ts +161 -0
  174. package/apps/storefront/src/lib/publish/reviewReleaseWorkspace/controller.ts +325 -0
  175. package/apps/storefront/src/lib/publish/reviewReleaseWorkspace/render.ts +241 -0
  176. package/apps/storefront/src/lib/publish/shipWorkspace.ts +22 -3
  177. package/apps/storefront/src/lib/publish/sseRoute.ts +119 -0
  178. package/apps/storefront/src/lib/publish/streamLogConsole.ts +142 -0
  179. package/apps/storefront/src/lib/publish/versionNumber.ts +52 -0
  180. package/apps/storefront/src/lib/rawChrome.ts +125 -47
  181. package/apps/storefront/src/lib/rawMarketingHtml.ts +74 -3
  182. package/apps/storefront/src/lib/seo/alternates.ts +1 -1
  183. package/apps/storefront/src/lib/social/notify.ts +4 -4
  184. package/apps/storefront/src/lib/storyblok/content-model.ts +7 -33
  185. package/apps/storefront/src/lib/storyblok/provider.ts +168 -60
  186. package/apps/storefront/src/lib/subscription/model.ts +4 -4
  187. package/apps/storefront/src/lib/the-build/provider.ts +9 -4
  188. package/apps/storefront/src/middleware/index.ts +273 -51
  189. package/apps/storefront/src/pages/[...slug].astro +9 -4
  190. package/apps/storefront/src/pages/admin/review-release.astro +265 -0
  191. package/apps/storefront/src/pages/admin/select.astro +96 -0
  192. package/apps/storefront/src/pages/admin.astro +16 -2
  193. package/apps/storefront/src/pages/api/activity.ts +8 -8
  194. package/apps/storefront/src/pages/api/admin/activity-alerts.ts +5 -20
  195. package/apps/storefront/src/pages/api/admin/orders/[id].ts +7 -2
  196. package/apps/storefront/src/pages/api/admin/orders.ts +8 -2
  197. package/apps/storefront/src/pages/api/apps/admin/gtm-migration-install.ts +174 -0
  198. package/apps/storefront/src/pages/api/apps/admin/gtm-migration.ts +96 -0
  199. package/apps/storefront/src/pages/api/apps/admin/integration-lifecycle.ts +118 -0
  200. package/apps/storefront/src/pages/api/apps/admin/integrations.ts +89 -0
  201. package/apps/storefront/src/pages/api/apps/admin/platform-adapters.ts +85 -0
  202. package/apps/storefront/src/pages/api/apps/internal/order-forward.ts +74 -2
  203. package/apps/storefront/src/pages/api/commerce/checkout-handoff.ts +77 -0
  204. package/apps/storefront/src/pages/api/compliance/tamper.ts +88 -0
  205. package/apps/storefront/src/pages/api/integrations/v1/[operation].ts +108 -0
  206. package/apps/storefront/src/pages/api/rum/vitals.ts +1 -2
  207. package/apps/storefront/src/pages/blog/[slug].astro +5 -5
  208. package/apps/storefront/src/pages/blog/author/[author].astro +3 -3
  209. package/apps/storefront/src/pages/blog/category/[category].astro +2 -2
  210. package/apps/storefront/src/pages/blog/index.astro +2 -2
  211. package/apps/storefront/src/pages/blog/tag/[tag].astro +2 -2
  212. package/apps/storefront/src/pages/cockpit.astro +61 -1362
  213. package/apps/storefront/src/pages/index.astro +10 -5
  214. package/apps/storefront/src/pages/llms.txt.ts +1 -1
  215. package/apps/storefront/src/pages/products/[handle].astro +7 -6
  216. package/apps/storefront/src/pages/sitemap.xml.ts +2 -2
  217. package/apps/storefront/src/pages/style-guide/[tenant]/[theme].astro +31 -27
  218. package/apps/storefront/src/pages/style-guide/[tenant]/chrome/[theme].astro +1 -1
  219. package/apps/storefront/src/pages/tenants/[id]/[...path].ts +38 -2
  220. package/apps/storefront/src/pages/the-build/[slug].astro +4 -4
  221. package/apps/storefront/src/pages/the-build/index.astro +2 -2
  222. package/apps/storefront/src/pages/the-build/rss.xml.ts +2 -2
  223. package/apps/storefront/src/styles/admin.css +27 -1
  224. package/apps/storefront/tsconfig.json +1 -1
  225. package/package.json +1 -1
  226. package/packages/public-runtime/package.json +2 -1
  227. package/packages/public-runtime/schemas/managed-analytics/v1/adapter-definition.schema.json +427 -0
  228. package/packages/public-runtime/schemas/managed-analytics/v1/create-integration-install-request.schema.json +161 -0
  229. package/packages/public-runtime/schemas/managed-analytics/v1/create-migration-draft-request.schema.json +157 -0
  230. package/packages/public-runtime/schemas/managed-analytics/v1/delete-integration-install-request.schema.json +84 -0
  231. package/packages/public-runtime/schemas/managed-analytics/v1/delete-migration-draft-request.schema.json +84 -0
  232. package/packages/public-runtime/schemas/managed-analytics/v1/error-envelope.schema.json +180 -0
  233. package/packages/public-runtime/schemas/managed-analytics/v1/get-adapter-definition-request.schema.json +52 -0
  234. package/packages/public-runtime/schemas/managed-analytics/v1/get-integration-install-request.schema.json +52 -0
  235. package/packages/public-runtime/schemas/managed-analytics/v1/get-integration-revision-request.schema.json +79 -0
  236. package/packages/public-runtime/schemas/managed-analytics/v1/get-migration-draft-request.schema.json +52 -0
  237. package/packages/public-runtime/schemas/managed-analytics/v1/integration-install.schema.json +167 -0
  238. package/packages/public-runtime/schemas/managed-analytics/v1/integration-revision.schema.json +208 -0
  239. package/packages/public-runtime/schemas/managed-analytics/v1/list-adapter-definitions-request.schema.json +53 -0
  240. package/packages/public-runtime/schemas/managed-analytics/v1/list-integration-installs-request.schema.json +53 -0
  241. package/packages/public-runtime/schemas/managed-analytics/v1/list-integration-revisions-request.schema.json +82 -0
  242. package/packages/public-runtime/schemas/managed-analytics/v1/migration-draft.schema.json +218 -0
  243. package/packages/public-runtime/schemas/managed-analytics/v1/mutation-request.schema.json +52 -0
  244. package/packages/public-runtime/schemas/managed-analytics/v1/mutation-success-envelope.schema.json +49 -0
  245. package/packages/public-runtime/schemas/managed-analytics/v1/read-request.schema.json +20 -0
  246. package/packages/public-runtime/schemas/managed-analytics/v1/read-success-envelope.schema.json +45 -0
  247. package/packages/public-runtime/schemas/managed-analytics/v1/revise-integration-install-request.schema.json +156 -0
  248. package/packages/public-runtime/schemas/managed-analytics/v1/set-integration-install-status-request.schema.json +92 -0
  249. package/packages/public-runtime/schemas/managed-analytics/v1/update-migration-draft-request.schema.json +184 -0
  250. package/packages/public-runtime/scripts/generate-managed-analytics-api-v1-schemas.mjs +13 -0
  251. package/packages/public-runtime/src/activity/catalog.ts +41 -37
  252. package/packages/public-runtime/src/activity/event.ts +6 -6
  253. package/packages/public-runtime/src/activity/index.ts +2 -2
  254. package/packages/public-runtime/src/activity/redaction.ts +4 -4
  255. package/packages/public-runtime/src/candidate-index.ts +42 -8
  256. package/packages/public-runtime/src/checkout-orders.ts +2 -2
  257. package/packages/public-runtime/src/checkout-style-publish.ts +2 -2
  258. package/packages/public-runtime/src/checkout-style.ts +7 -7
  259. package/packages/public-runtime/src/checkout.ts +3 -3
  260. package/packages/public-runtime/src/chrome.ts +777 -0
  261. package/packages/public-runtime/src/compliance-obligations.ts +310 -0
  262. package/packages/public-runtime/src/csp.ts +99 -0
  263. package/packages/public-runtime/src/customization-runtime.ts +32 -1
  264. package/packages/public-runtime/src/destination-webhook/contract.ts +353 -0
  265. package/packages/public-runtime/src/embed-catalog.d.mts +9 -0
  266. package/packages/public-runtime/src/embed-catalog.mjs +40 -0
  267. package/packages/public-runtime/src/evidence.ts +288 -0
  268. package/packages/public-runtime/src/gtm-migration/bounds.ts +138 -0
  269. package/packages/public-runtime/src/gtm-migration/disposition-rules.ts +361 -0
  270. package/packages/public-runtime/src/gtm-migration/dispositions.ts +181 -0
  271. package/packages/public-runtime/src/gtm-migration/draft-generator.ts +400 -0
  272. package/packages/public-runtime/src/gtm-migration/graph.ts +468 -0
  273. package/packages/public-runtime/src/gtm-migration/index.ts +95 -0
  274. package/packages/public-runtime/src/gtm-migration/parse.ts +410 -0
  275. package/packages/public-runtime/src/gtm-migration/references.ts +266 -0
  276. package/packages/public-runtime/src/gtm-migration/types.ts +86 -0
  277. package/packages/public-runtime/src/index.ts +16 -1
  278. package/packages/public-runtime/src/integration/assurance-decision.ts +259 -0
  279. package/packages/public-runtime/src/integration/assurance.ts +228 -0
  280. package/packages/public-runtime/src/integration/candidate-evidence.ts +377 -0
  281. package/packages/public-runtime/src/integration/commerce-broker.ts +497 -0
  282. package/packages/public-runtime/src/integration/consent-broker.ts +337 -0
  283. package/packages/public-runtime/src/integration/consent-cmp-demand.ts +115 -0
  284. package/packages/public-runtime/src/integration/consent-config.ts +260 -0
  285. package/packages/public-runtime/src/integration/consent-preview.ts +125 -0
  286. package/packages/public-runtime/src/integration/correlation-token.ts +444 -0
  287. package/packages/public-runtime/src/integration/csp-compiler.ts +267 -0
  288. package/packages/public-runtime/src/integration/csp.ts +105 -0
  289. package/packages/public-runtime/src/integration/digest.ts +43 -0
  290. package/packages/public-runtime/src/integration/environment.ts +228 -0
  291. package/packages/public-runtime/src/integration/events-catalog.ts +186 -0
  292. package/packages/public-runtime/src/integration/events.ts +701 -0
  293. package/packages/public-runtime/src/integration/g2-action-boundary.ts +106 -0
  294. package/packages/public-runtime/src/integration/index.ts +90 -0
  295. package/packages/public-runtime/src/integration/interim-bridge.ts +138 -0
  296. package/packages/public-runtime/src/integration/lifecycle-boot.ts +317 -0
  297. package/packages/public-runtime/src/integration/lifecycle-runtime.ts +393 -0
  298. package/packages/public-runtime/src/integration/lifecycle.ts +94 -0
  299. package/packages/public-runtime/src/integration/managed-analytics-api-v1-safety.d.mts +2 -0
  300. package/packages/public-runtime/src/integration/managed-analytics-api-v1-safety.mjs +10 -0
  301. package/packages/public-runtime/src/integration/managed-analytics-api-v1.schemas.ts +382 -0
  302. package/packages/public-runtime/src/integration/managed-analytics-api-v1.ts +684 -0
  303. package/packages/public-runtime/src/integration/managed-analytics-bridge.ts +383 -0
  304. package/packages/public-runtime/src/integration/managed-analytics-value-safety.ts +14 -0
  305. package/packages/public-runtime/src/integration/managed-analytics.ts +277 -0
  306. package/packages/public-runtime/src/integration/manifest.ts +470 -0
  307. package/packages/public-runtime/src/integration/native-amplitude.ts +362 -0
  308. package/packages/public-runtime/src/integration/native-ga4.ts +352 -0
  309. package/packages/public-runtime/src/integration/observability.ts +451 -0
  310. package/packages/public-runtime/src/integration/order-conversion.ts +0 -0
  311. package/packages/public-runtime/src/integration/phases.ts +182 -0
  312. package/packages/public-runtime/src/integration/plan.ts +112 -0
  313. package/packages/public-runtime/src/integration/platform-adapter-runtime.ts +146 -0
  314. package/packages/public-runtime/src/integration/platform-adapters.ts +671 -0
  315. package/packages/public-runtime/src/integration/promotion-gate.ts +451 -0
  316. package/packages/public-runtime/src/integration/provider-checkout-extension.ts +425 -0
  317. package/packages/public-runtime/src/integration/receipt-measurement.ts +370 -0
  318. package/packages/public-runtime/src/integration/regulated-parent-cert.ts +311 -0
  319. package/packages/public-runtime/src/integration/render-phases.ts +267 -0
  320. package/packages/public-runtime/src/integration/resolve.ts +465 -0
  321. package/packages/public-runtime/src/integration/result.ts +239 -0
  322. package/packages/public-runtime/src/integration/secrets.ts +92 -0
  323. package/packages/public-runtime/src/integration/tamper-evidence.ts +205 -0
  324. package/packages/public-runtime/src/integration/tamper-recovery.ts +127 -0
  325. package/packages/public-runtime/src/integration/version.ts +92 -0
  326. package/packages/public-runtime/src/integration-capabilities.ts +520 -0
  327. package/packages/public-runtime/src/membership.ts +2 -2
  328. package/packages/public-runtime/src/raw-html-policy.ts +2 -4
  329. package/packages/public-runtime/src/regulated-commerce/broker/consent-dedupe.ts +144 -0
  330. package/packages/public-runtime/src/regulated-commerce/correlation/contract.ts +177 -0
  331. package/packages/public-runtime/src/regulated-commerce/diagnostics/local-dispatch.ts +24 -0
  332. package/packages/public-runtime/src/regulated-commerce/diagnostics/read-model.ts +69 -0
  333. package/packages/public-runtime/src/regulated-commerce/dispatch/core.ts +134 -0
  334. package/packages/public-runtime/src/regulated-commerce/events/contract.ts +113 -0
  335. package/packages/public-runtime/src/regulated-commerce/ledger/core.ts +81 -0
  336. package/packages/public-runtime/src/regulated-commerce/mappings/ga4-ads.ts +87 -0
  337. package/packages/public-runtime/src/regulated-commerce/provider-order/bridge.ts +52 -0
  338. package/packages/public-runtime/src/regulated-commerce/purchase-truth/contract.ts +252 -0
  339. package/packages/public-runtime/src/regulated-commerce/sources/accepted-browser-operation.ts +67 -0
  340. package/packages/public-runtime/src/regulated-commerce/testing/fake-destination.ts +93 -0
  341. package/packages/public-runtime/src/static-bundle.ts +5 -5
  342. package/packages/public-runtime/src/tenant-assets.ts +143 -4
  343. package/packages/public-runtime/src/tenant.ts +45 -9
  344. package/packages/public-runtime/tests/fixtures/integration/browser-environment.example.json +8 -0
  345. package/packages/public-runtime/tests/fixtures/integration/commerce-event.example.json +44 -0
  346. package/packages/public-runtime/tests/fixtures/integration/commerce-order-event.example.json +44 -0
  347. package/packages/public-runtime/tests/fixtures/integration/compliance-assurance-record.example.json +50 -0
  348. package/packages/public-runtime/tests/fixtures/integration/integration-manifest-v2.example.json +120 -0
  349. package/packages/public-runtime/tests/fixtures/integration/managed-analytics-v1/fake-adapter-catalog.json +35 -0
  350. package/packages/public-runtime/tests/fixtures/integration/tenant-action-registry.example.json +11 -0
  351. package/packages/public-runtime/tests/fixtures/integration/tenant-local-example/README.md +22 -0
  352. package/packages/public-runtime/tests/fixtures/integration/tenant-local-example/entry.js +30 -0
  353. package/packages/public-runtime/tests/fixtures/integration/tenant-local-example/manifest.json +75 -0
  354. package/packages/public-runtime/tests/fixtures/integration/tenant-local-example/public-config.json +3 -0
  355. package/packages/public-runtime/tests/fixtures/regulated-commerce/fake-destinations.ts +38 -0
  356. package/packages/public-runtime/tests/gtm-migration/fixtures/gtm-sample-container-v84.provenance.json +29 -0
  357. package/packages/public-runtime/tests/gtm-migration/fixtures/gtm-sample-container-v84.redacted.json +3397 -0
  358. package/scripts/dev/file-browser.mjs +2 -2
  359. package/scripts/dev/file-writer.mjs +2 -2
  360. package/scripts/dev/integration-guardrails.mjs +498 -0
  361. package/scripts/dev/safe-path.mjs +2 -2
  362. package/scripts/dev/tenant-source-root.mjs +1 -1
  363. package/scripts/tot-dev.mjs +2 -2
@@ -0,0 +1,269 @@
1
+ /**
2
+ * Pure logic for the admin Publish tab's real-time build/check streaming (SSE).
3
+ *
4
+ * The build endpoint (`POST /api/preview/build` with `Accept: text/event-stream`)
5
+ * streams coarse lifecycle PHASES as it materializes a candidate — resolve head →
6
+ * read+validate tenant files → publish the immutable version → run evidence checks —
7
+ * then a terminal `result` event carrying the full outcome. This module is the tested
8
+ * source of truth for:
9
+ * - parsing the raw SSE byte-frames into events (partial-chunk safe);
10
+ * - mapping a phase to its human label + rail position;
11
+ * - reducing the event sequence into a render-ready progress state;
12
+ * - assembling the "Copy for your AI agent" prompt from a build FAILURE.
13
+ * The DOM wiring that drives the dialog from these is verified on a live preview, per
14
+ * this codebase's client-island convention (see reviewReleaseWorkspace/controller.ts).
15
+ */
16
+
17
+ /** One decoded SSE event: its `event:` name and the concatenated `data:` payload. */
18
+ export interface SseEvent {
19
+ event: string;
20
+ data: string;
21
+ }
22
+
23
+ /**
24
+ * Parse an accumulated SSE text buffer into complete events, returning any trailing
25
+ * INCOMPLETE frame as `rest` for the next chunk to prepend. Partial-chunk safe: a
26
+ * frame is complete only once its blank-line terminator (`\n\n`) has arrived.
27
+ * Lines with no field (`:` comments, stray blanks) are ignored; multiple `data:`
28
+ * lines in one frame join with `\n` (the SSE spec). A frame with no fields yields
29
+ * nothing.
30
+ */
31
+ export function parseSseChunk(buffer: string): { events: SseEvent[]; rest: string } {
32
+ const normalized = buffer.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
33
+ const events: SseEvent[] = [];
34
+ const lastSep = normalized.lastIndexOf("\n\n");
35
+ if (lastSep === -1) return { events, rest: normalized };
36
+
37
+ const complete = normalized.slice(0, lastSep);
38
+ const rest = normalized.slice(lastSep + 2);
39
+
40
+ for (const frame of complete.split("\n\n")) {
41
+ let eventName = "message";
42
+ const dataLines: string[] = [];
43
+ let sawField = false;
44
+ for (const rawLine of frame.split("\n")) {
45
+ if (!rawLine || rawLine.startsWith(":")) continue;
46
+ const colon = rawLine.indexOf(":");
47
+ const field = colon === -1 ? rawLine : rawLine.slice(0, colon);
48
+ // Per spec a single leading space after the colon is stripped.
49
+ let value = colon === -1 ? "" : rawLine.slice(colon + 1);
50
+ if (value.startsWith(" ")) value = value.slice(1);
51
+ if (field === "event") {
52
+ eventName = value;
53
+ sawField = true;
54
+ } else if (field === "data") {
55
+ dataLines.push(value);
56
+ sawField = true;
57
+ }
58
+ }
59
+ if (sawField) events.push({ event: eventName, data: dataLines.join("\n") });
60
+ }
61
+ return { events, rest };
62
+ }
63
+
64
+ /** The ordered build lifecycle stages the flight rail renders (mirrors the dialog). */
65
+ export const BUILD_STAGES = ["resolve", "read", "publish", "check"] as const;
66
+ export type BuildStage = (typeof BUILD_STAGES)[number];
67
+
68
+ /** The `phase` values the server emits, in lifecycle order. */
69
+ export type BuildPhase = "resolving" | "reading" | "publishing" | "checking";
70
+
71
+ const PHASE_TO_STAGE: Record<BuildPhase, BuildStage> = {
72
+ resolving: "resolve",
73
+ reading: "read",
74
+ publishing: "publish",
75
+ checking: "check",
76
+ };
77
+
78
+ const PHASE_LABEL: Record<BuildPhase, string> = {
79
+ resolving: "Locating the pull request's latest commit…",
80
+ reading: "Reading and validating your store's files…",
81
+ publishing: "Publishing this version's preview…",
82
+ checking: "Running the checks on this version…",
83
+ };
84
+
85
+ const STAGE_LABEL: Record<BuildStage, string> = {
86
+ resolve: "Locate commit",
87
+ read: "Read & validate",
88
+ publish: "Publish version",
89
+ check: "Run checks",
90
+ };
91
+
92
+ export function buildPhaseLabel(phase: BuildPhase): string {
93
+ return PHASE_LABEL[phase];
94
+ }
95
+
96
+ export function buildStageLabel(stage: BuildStage): string {
97
+ return STAGE_LABEL[stage];
98
+ }
99
+
100
+ export function isBuildPhase(value: unknown): value is BuildPhase {
101
+ return value === "resolving" || value === "reading" || value === "publishing" || value === "checking";
102
+ }
103
+
104
+ /** The terminal outcome the server reports on its `result` event. */
105
+ export type BuildOutcome = "ok" | "blocked" | "failed";
106
+
107
+ /** The full terminal payload of a build (mirrors the endpoint's JSON body). */
108
+ export interface BuildResult {
109
+ ok: boolean;
110
+ outcome: BuildOutcome;
111
+ tenantId?: string | null;
112
+ changeId?: string | null;
113
+ headSha?: string | null;
114
+ prNumber?: number | null;
115
+ previewUrl?: string | null;
116
+ errors?: string[];
117
+ error?: string | null;
118
+ findings?: BuildFinding[];
119
+ }
120
+
121
+ export interface BuildFinding {
122
+ id?: string;
123
+ label?: string;
124
+ detail?: string;
125
+ disposition?: string;
126
+ }
127
+
128
+ /** Render-ready progress the dialog reads. `stageState` is a per-stage rail map. */
129
+ export interface BuildProgress {
130
+ phase: BuildPhase | null;
131
+ liveLabel: string;
132
+ stageState: Record<BuildStage, "pending" | "active" | "done" | "fail">;
133
+ terminal: boolean;
134
+ result: BuildResult | null;
135
+ }
136
+
137
+ export function initialBuildProgress(): BuildProgress {
138
+ return {
139
+ phase: null,
140
+ liveLabel: "Starting…",
141
+ stageState: { resolve: "pending", read: "pending", publish: "pending", check: "pending" },
142
+ terminal: false,
143
+ result: null,
144
+ };
145
+ }
146
+
147
+ /**
148
+ * Advance the flight rail to `stage`: everything before it is `done`, it is `active`,
149
+ * everything after stays `pending`. A `fail` mark is never un-done. Pure.
150
+ */
151
+ function railTo(
152
+ prev: Record<BuildStage, "pending" | "active" | "done" | "fail">,
153
+ stage: BuildStage,
154
+ ): Record<BuildStage, "pending" | "active" | "done" | "fail"> {
155
+ const idx = BUILD_STAGES.indexOf(stage);
156
+ const next = { ...prev };
157
+ BUILD_STAGES.forEach((s, i) => {
158
+ if (next[s] === "fail") return;
159
+ next[s] = i < idx ? "done" : i === idx ? "active" : "pending";
160
+ });
161
+ return next;
162
+ }
163
+
164
+ /**
165
+ * Fold one SSE event into the progress state. A `phase` event advances the rail + live
166
+ * label; a `result` event is terminal (all reached stages `done` on success, the active
167
+ * stage `fail` on a blocked/failed outcome). Unknown events are ignored (state
168
+ * unchanged). Pure — the dialog calls this per event and re-renders from the result.
169
+ */
170
+ export function reduceBuildProgress(prev: BuildProgress, ev: SseEvent): BuildProgress {
171
+ if (ev.event === "phase") {
172
+ const parsed = safeParse(ev.data);
173
+ const phase = parsed && (parsed as { phase?: unknown }).phase;
174
+ if (!isBuildPhase(phase)) return prev;
175
+ const stage = PHASE_TO_STAGE[phase];
176
+ const label =
177
+ (parsed && typeof (parsed as { label?: unknown }).label === "string"
178
+ ? (parsed as { label: string }).label
179
+ : "") || buildPhaseLabel(phase);
180
+ return {
181
+ ...prev,
182
+ phase,
183
+ liveLabel: label,
184
+ stageState: railTo(prev.stageState, stage),
185
+ };
186
+ }
187
+
188
+ if (ev.event === "result") {
189
+ const parsed = (safeParse(ev.data) as BuildResult | null) ?? {
190
+ ok: false,
191
+ outcome: "failed",
192
+ errors: ["build ended without a result"],
193
+ };
194
+ const result: BuildResult = {
195
+ ...parsed,
196
+ outcome: parsed.outcome ?? (parsed.ok ? "ok" : "failed"),
197
+ };
198
+ let stageState = prev.stageState;
199
+ if (result.ok) {
200
+ stageState = { resolve: "done", read: "done", publish: "done", check: "done" };
201
+ } else {
202
+ // Fail the stage that was active (the phase we got furthest into); if none was
203
+ // active yet, fail the first stage so the rail shows an honest stop point.
204
+ const active = BUILD_STAGES.find((s) => prev.stageState[s] === "active") ?? BUILD_STAGES[0];
205
+ stageState = { ...prev.stageState, [active]: "fail" };
206
+ }
207
+ return {
208
+ ...prev,
209
+ liveLabel: result.ok ? "Done." : "Stopped.",
210
+ stageState,
211
+ terminal: true,
212
+ result,
213
+ };
214
+ }
215
+
216
+ return prev;
217
+ }
218
+
219
+ /** The human-readable failure detail (the honest reason), joined from errors/findings. */
220
+ export function buildFailureDetail(result: BuildResult): string {
221
+ const parts: string[] = [];
222
+ for (const e of result.errors ?? []) if (e && e.trim()) parts.push(e.trim());
223
+ if (result.error && result.error.trim()) parts.push(result.error.trim());
224
+ for (const f of result.findings ?? []) {
225
+ const line = [f.label || f.id, f.detail].filter(Boolean).join(": ");
226
+ if (line) parts.push((f.disposition === "blocking-safety" ? "[blocking] " : "") + line);
227
+ }
228
+ return parts.join("\n");
229
+ }
230
+
231
+ /**
232
+ * Assemble the "Copy for your AI agent" prompt from a build FAILURE — the honest,
233
+ * paste-ready brief an operator hands to a coding agent to diagnose why the preview
234
+ * build/checks failed. Mirrors the merge-conflict copy pattern (a framed ask + the
235
+ * system's own words), never a bare error dump.
236
+ */
237
+ export function assembleBuildFailureCopy(input: {
238
+ tenant: string;
239
+ prNumber?: number | null;
240
+ changeId?: string | null;
241
+ result: BuildResult;
242
+ }): string {
243
+ const { tenant, prNumber, changeId, result } = input;
244
+ const pr = prNumber != null ? `PR #${prNumber}` : changeId ? `change ${changeId}` : "my open candidate PR";
245
+ const stage = result.outcome === "blocked" ? "was blocked by a check" : "failed to build";
246
+ const detail = buildFailureDetail(result) || "(no detail was reported)";
247
+ return [
248
+ `In my ${tenant} store, the preview build for ${pr} ${stage}. ` +
249
+ `Diagnose why from the detail below, then tell me the exact file(s) to change and the fix.`,
250
+ "",
251
+ "What the build reported:",
252
+ detail,
253
+ "",
254
+ result.headSha ? `Head commit: ${result.headSha}` : "",
255
+ "Context: this is a Token of Trust storefront tenant repo — customization files are " +
256
+ "mapped to artifacts and validated against the tenant-editable manifest before the " +
257
+ "version is published. A blocking finding or a validation error stops the build.",
258
+ ]
259
+ .filter((l) => l !== "")
260
+ .join("\n");
261
+ }
262
+
263
+ function safeParse(text: string): unknown {
264
+ try {
265
+ return JSON.parse(text);
266
+ } catch {
267
+ return null;
268
+ }
269
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * r05 — persist each Publish-tab collapsible section's open/closed state per user,
3
+ * scoped per store so a power user's layout survives reloads without bleeding across
4
+ * stores. Pure key/read/write logic, extracted from the DOM wiring in
5
+ * `adminPublishTab.ts` so it is unit-testable and storage-agnostic.
6
+ *
7
+ * The persisted value is the human-legible "open"/"closed" (not a boolean string).
8
+ * `readPersistedOpen` returns `null` when nothing is stored (or storage is
9
+ * unreadable) — the caller then leaves the section at its SSR default, so the
10
+ * default open/closed state is preserved when a user has never toggled a section.
11
+ */
12
+
13
+ /** The slice of the Web Storage API this helper needs (localStorage satisfies it). */
14
+ export interface CollapseStorage {
15
+ getItem(key: string): string | null;
16
+ setItem(key: string, value: string): void;
17
+ }
18
+
19
+ /** Stable identifiers for the collapsible sections on the Publish tab. */
20
+ export type CollapseSectionId =
21
+ | "review-queue"
22
+ | "closed-changes"
23
+ | "next-release"
24
+ | "live-site"
25
+ | "rollback";
26
+
27
+ const KEY_PREFIX = "tot.publish.collapse";
28
+ const OPEN = "open";
29
+ const CLOSED = "closed";
30
+
31
+ /**
32
+ * Per-store, per-section storage key. The store scope (appDomain) keeps one store's
33
+ * layout from bleeding into another; an empty tenant collapses to a shared "_" scope
34
+ * rather than producing a dangling key.
35
+ */
36
+ export function collapseStorageKey(tenant: string, sectionId: CollapseSectionId): string {
37
+ return `${KEY_PREFIX}.${tenant || "_"}.${sectionId}`;
38
+ }
39
+
40
+ /**
41
+ * The stored open/closed state, or `null` when nothing is stored, the value is
42
+ * unrecognized, or storage throws (private mode / disabled). Never throws.
43
+ */
44
+ export function readPersistedOpen(
45
+ storage: CollapseStorage,
46
+ tenant: string,
47
+ sectionId: CollapseSectionId,
48
+ ): boolean | null {
49
+ let raw: string | null;
50
+ try {
51
+ raw = storage.getItem(collapseStorageKey(tenant, sectionId));
52
+ } catch {
53
+ return null;
54
+ }
55
+ if (raw === OPEN) return true;
56
+ if (raw === CLOSED) return false;
57
+ return null;
58
+ }
59
+
60
+ /** Persist a section's open/closed state. Swallows storage errors (never throws). */
61
+ export function writePersistedOpen(
62
+ storage: CollapseStorage,
63
+ tenant: string,
64
+ sectionId: CollapseSectionId,
65
+ open: boolean,
66
+ ): void {
67
+ try {
68
+ storage.setItem(collapseStorageKey(tenant, sectionId), open ? OPEN : CLOSED);
69
+ } catch {
70
+ /* storage unavailable (private mode / disabled) — persistence is best-effort */
71
+ }
72
+ }