@noodleseed/one 0.8.0 → 0.11.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 (277) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +16 -4
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/archive-ops.d.ts +3 -0
  5. package/dist/commands/archive-ops.d.ts.map +1 -0
  6. package/dist/commands/archive-ops.js +168 -0
  7. package/dist/commands/archive-ops.js.map +1 -0
  8. package/dist/commands/author-loop.d.ts.map +1 -1
  9. package/dist/commands/author-loop.js +78 -3
  10. package/dist/commands/author-loop.js.map +1 -1
  11. package/dist/commands/deploy-ops.d.ts +1 -30
  12. package/dist/commands/deploy-ops.d.ts.map +1 -1
  13. package/dist/commands/deploy-ops.js +55 -87
  14. package/dist/commands/deploy-ops.js.map +1 -1
  15. package/dist/commands/deploy-output.d.ts +31 -0
  16. package/dist/commands/deploy-output.d.ts.map +1 -0
  17. package/dist/commands/deploy-output.js +86 -0
  18. package/dist/commands/deploy-output.js.map +1 -0
  19. package/dist/commands/deploy-version-resolution.d.ts +20 -0
  20. package/dist/commands/deploy-version-resolution.d.ts.map +1 -0
  21. package/dist/commands/deploy-version-resolution.js +77 -0
  22. package/dist/commands/deploy-version-resolution.js.map +1 -0
  23. package/dist/commands/docs-mcp.d.ts +32 -0
  24. package/dist/commands/docs-mcp.d.ts.map +1 -0
  25. package/dist/commands/docs-mcp.js +66 -0
  26. package/dist/commands/docs-mcp.js.map +1 -0
  27. package/dist/commands/mcp-apps.d.ts.map +1 -1
  28. package/dist/commands/mcp-apps.js +38 -37
  29. package/dist/commands/mcp-apps.js.map +1 -1
  30. package/dist/commands/org-admin.d.ts +17 -0
  31. package/dist/commands/org-admin.d.ts.map +1 -0
  32. package/dist/commands/org-admin.js +241 -0
  33. package/dist/commands/org-admin.js.map +1 -0
  34. package/dist/commands/policy-ops.d.ts.map +1 -1
  35. package/dist/commands/policy-ops.js +94 -1
  36. package/dist/commands/policy-ops.js.map +1 -1
  37. package/dist/commands/project-setup.d.ts.map +1 -1
  38. package/dist/commands/project-setup.js +29 -0
  39. package/dist/commands/project-setup.js.map +1 -1
  40. package/dist/commands/session.d.ts +1 -15
  41. package/dist/commands/session.d.ts.map +1 -1
  42. package/dist/commands/session.js +15 -170
  43. package/dist/commands/session.js.map +1 -1
  44. package/dist/commands/shared.d.ts +1 -0
  45. package/dist/commands/shared.d.ts.map +1 -1
  46. package/dist/commands/shared.js +21 -9
  47. package/dist/commands/shared.js.map +1 -1
  48. package/dist/commands/update-ops.d.ts +29 -0
  49. package/dist/commands/update-ops.d.ts.map +1 -0
  50. package/dist/commands/update-ops.js +315 -0
  51. package/dist/commands/update-ops.js.map +1 -0
  52. package/dist/config.d.ts +2 -0
  53. package/dist/config.d.ts.map +1 -1
  54. package/dist/config.js.map +1 -1
  55. package/dist/deploy-version.d.ts +3 -0
  56. package/dist/deploy-version.d.ts.map +1 -0
  57. package/dist/deploy-version.js +28 -0
  58. package/dist/deploy-version.js.map +1 -0
  59. package/dist/deploy.d.ts +5 -1
  60. package/dist/deploy.d.ts.map +1 -1
  61. package/dist/deploy.js +27 -3
  62. package/dist/deploy.js.map +1 -1
  63. package/dist/devtools-chat.d.ts +76 -0
  64. package/dist/devtools-chat.d.ts.map +1 -0
  65. package/dist/devtools-chat.js +114 -0
  66. package/dist/devtools-chat.js.map +1 -0
  67. package/dist/devtools-env.d.ts +16 -0
  68. package/dist/devtools-env.d.ts.map +1 -0
  69. package/dist/devtools-env.js +71 -0
  70. package/dist/devtools-env.js.map +1 -0
  71. package/dist/devtools-harness.d.ts +28 -0
  72. package/dist/devtools-harness.d.ts.map +1 -0
  73. package/dist/devtools-harness.js +387 -0
  74. package/dist/devtools-harness.js.map +1 -0
  75. package/dist/devtools-preview.d.ts +42 -0
  76. package/dist/devtools-preview.d.ts.map +1 -0
  77. package/dist/devtools-preview.js +394 -0
  78. package/dist/devtools-preview.js.map +1 -0
  79. package/dist/preview-session.d.ts +46 -0
  80. package/dist/preview-session.d.ts.map +1 -0
  81. package/dist/preview-session.js +132 -0
  82. package/dist/preview-session.js.map +1 -0
  83. package/dist/project.d.ts +2 -0
  84. package/dist/project.d.ts.map +1 -1
  85. package/dist/project.js +2 -0
  86. package/dist/project.js.map +1 -1
  87. package/dist/react-widget-build.js +3 -1
  88. package/dist/react-widget-build.js.map +1 -1
  89. package/dist/update-binary.d.ts +38 -0
  90. package/dist/update-binary.d.ts.map +1 -0
  91. package/dist/update-binary.js +144 -0
  92. package/dist/update-binary.js.map +1 -0
  93. package/dist/update-check.d.ts +40 -0
  94. package/dist/update-check.d.ts.map +1 -0
  95. package/dist/update-check.js +212 -0
  96. package/dist/update-check.js.map +1 -0
  97. package/dist/update-render.d.ts +17 -0
  98. package/dist/update-render.d.ts.map +1 -0
  99. package/dist/update-render.js +39 -0
  100. package/dist/update-render.js.map +1 -0
  101. package/dist/update.d.ts +10 -9
  102. package/dist/update.d.ts.map +1 -1
  103. package/dist/update.js +21 -89
  104. package/dist/update.js.map +1 -1
  105. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts.map +1 -1
  106. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +13 -1
  107. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js.map +1 -1
  108. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
  109. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +2 -0
  110. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
  111. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  112. package/node_modules/@noodle-borg/connector-defs/dist/compile-expr.d.ts +23 -0
  113. package/node_modules/@noodle-borg/connector-defs/dist/compile-expr.d.ts.map +1 -0
  114. package/node_modules/@noodle-borg/connector-defs/dist/compile-expr.js +41 -0
  115. package/node_modules/@noodle-borg/connector-defs/dist/compile-expr.js.map +1 -0
  116. package/node_modules/@noodle-borg/connector-defs/dist/compile.d.ts +2 -6
  117. package/node_modules/@noodle-borg/connector-defs/dist/compile.d.ts.map +1 -1
  118. package/node_modules/@noodle-borg/connector-defs/dist/compile.js +10 -32
  119. package/node_modules/@noodle-borg/connector-defs/dist/compile.js.map +1 -1
  120. package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts +16 -0
  121. package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts.map +1 -1
  122. package/node_modules/@noodle-borg/connector-defs/dist/schema.js +6 -0
  123. package/node_modules/@noodle-borg/connector-defs/dist/schema.js.map +1 -1
  124. package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts +7 -0
  125. package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts.map +1 -1
  126. package/node_modules/@noodle-borg/connector-http/dist/http-connector.js +14 -5
  127. package/node_modules/@noodle-borg/connector-http/dist/http-connector.js.map +1 -1
  128. package/node_modules/@noodle-borg/module/dist/contract.d.ts +12 -0
  129. package/node_modules/@noodle-borg/module/dist/contract.d.ts.map +1 -1
  130. package/node_modules/@noodle-borg/module/dist/contract.js +41 -0
  131. package/node_modules/@noodle-borg/module/dist/contract.js.map +1 -1
  132. package/node_modules/@noodle-borg/service/dist/archive-sweeper.d.ts +43 -0
  133. package/node_modules/@noodle-borg/service/dist/archive-sweeper.d.ts.map +1 -0
  134. package/node_modules/@noodle-borg/service/dist/archive-sweeper.js +122 -0
  135. package/node_modules/@noodle-borg/service/dist/archive-sweeper.js.map +1 -0
  136. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts +20 -2
  137. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts.map +1 -1
  138. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js +37 -2
  139. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js.map +1 -1
  140. package/node_modules/@noodle-borg/service/dist/commercial-plans.d.ts +11 -0
  141. package/node_modules/@noodle-borg/service/dist/commercial-plans.d.ts.map +1 -0
  142. package/node_modules/@noodle-borg/service/dist/commercial-plans.js +119 -0
  143. package/node_modules/@noodle-borg/service/dist/commercial-plans.js.map +1 -0
  144. package/node_modules/@noodle-borg/service/dist/deployment-versioning.d.ts +20 -0
  145. package/node_modules/@noodle-borg/service/dist/deployment-versioning.d.ts.map +1 -0
  146. package/node_modules/@noodle-borg/service/dist/deployment-versioning.js +29 -0
  147. package/node_modules/@noodle-borg/service/dist/deployment-versioning.js.map +1 -0
  148. package/node_modules/@noodle-borg/service/dist/index.d.ts +3 -1
  149. package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
  150. package/node_modules/@noodle-borg/service/dist/index.js +2 -0
  151. package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
  152. package/node_modules/@noodle-borg/service/dist/main.js +7 -0
  153. package/node_modules/@noodle-borg/service/dist/main.js.map +1 -1
  154. package/node_modules/@noodle-borg/service/dist/oauth/app.d.ts.map +1 -1
  155. package/node_modules/@noodle-borg/service/dist/oauth/app.js +2 -1
  156. package/node_modules/@noodle-borg/service/dist/oauth/app.js.map +1 -1
  157. package/node_modules/@noodle-borg/service/dist/oauth/branding.d.ts +30 -0
  158. package/node_modules/@noodle-borg/service/dist/oauth/branding.d.ts.map +1 -0
  159. package/node_modules/@noodle-borg/service/dist/oauth/branding.js +224 -0
  160. package/node_modules/@noodle-borg/service/dist/oauth/branding.js.map +1 -0
  161. package/node_modules/@noodle-borg/service/dist/oauth/consent.d.ts +0 -6
  162. package/node_modules/@noodle-borg/service/dist/oauth/consent.d.ts.map +1 -1
  163. package/node_modules/@noodle-borg/service/dist/oauth/consent.js +23 -34
  164. package/node_modules/@noodle-borg/service/dist/oauth/consent.js.map +1 -1
  165. package/node_modules/@noodle-borg/service/dist/oauth/customer-bridge.d.ts.map +1 -1
  166. package/node_modules/@noodle-borg/service/dist/oauth/customer-bridge.js +13 -28
  167. package/node_modules/@noodle-borg/service/dist/oauth/customer-bridge.js.map +1 -1
  168. package/node_modules/@noodle-borg/service/dist/options.d.ts +9 -0
  169. package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
  170. package/node_modules/@noodle-borg/service/dist/registry-helpers.d.ts +1 -1
  171. package/node_modules/@noodle-borg/service/dist/registry-helpers.d.ts.map +1 -1
  172. package/node_modules/@noodle-borg/service/dist/registry-helpers.js +5 -3
  173. package/node_modules/@noodle-borg/service/dist/registry-helpers.js.map +1 -1
  174. package/node_modules/@noodle-borg/service/dist/registry-state.d.ts +25 -0
  175. package/node_modules/@noodle-borg/service/dist/registry-state.d.ts.map +1 -0
  176. package/node_modules/@noodle-borg/service/dist/registry-state.js +119 -0
  177. package/node_modules/@noodle-borg/service/dist/registry-state.js.map +1 -0
  178. package/node_modules/@noodle-borg/service/dist/registry-targets.d.ts +1 -0
  179. package/node_modules/@noodle-borg/service/dist/registry-targets.d.ts.map +1 -1
  180. package/node_modules/@noodle-borg/service/dist/registry-targets.js +4 -0
  181. package/node_modules/@noodle-borg/service/dist/registry-targets.js.map +1 -1
  182. package/node_modules/@noodle-borg/service/dist/registry-types.d.ts +59 -0
  183. package/node_modules/@noodle-borg/service/dist/registry-types.d.ts.map +1 -0
  184. package/node_modules/@noodle-borg/service/dist/registry-types.js +2 -0
  185. package/node_modules/@noodle-borg/service/dist/registry-types.js.map +1 -0
  186. package/node_modules/@noodle-borg/service/dist/registry.d.ts +14 -70
  187. package/node_modules/@noodle-borg/service/dist/registry.d.ts.map +1 -1
  188. package/node_modules/@noodle-borg/service/dist/registry.js +137 -119
  189. package/node_modules/@noodle-borg/service/dist/registry.js.map +1 -1
  190. package/node_modules/@noodle-borg/service/dist/routes/access-mode.d.ts +4 -0
  191. package/node_modules/@noodle-borg/service/dist/routes/access-mode.d.ts.map +1 -0
  192. package/node_modules/@noodle-borg/service/dist/routes/access-mode.js +15 -0
  193. package/node_modules/@noodle-borg/service/dist/routes/access-mode.js.map +1 -0
  194. package/node_modules/@noodle-borg/service/dist/routes/archive.d.ts +16 -0
  195. package/node_modules/@noodle-borg/service/dist/routes/archive.d.ts.map +1 -0
  196. package/node_modules/@noodle-borg/service/dist/routes/archive.js +83 -0
  197. package/node_modules/@noodle-borg/service/dist/routes/archive.js.map +1 -0
  198. package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts +2 -19
  199. package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts.map +1 -1
  200. package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +52 -281
  201. package/node_modules/@noodle-borg/service/dist/routes/control-plane.js.map +1 -1
  202. package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts +17 -0
  203. package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts.map +1 -0
  204. package/node_modules/@noodle-borg/service/dist/routes/deployments.js +88 -0
  205. package/node_modules/@noodle-borg/service/dist/routes/deployments.js.map +1 -0
  206. package/node_modules/@noodle-borg/service/dist/routes/org-admin.d.ts +40 -0
  207. package/node_modules/@noodle-borg/service/dist/routes/org-admin.d.ts.map +1 -0
  208. package/node_modules/@noodle-borg/service/dist/routes/org-admin.js +353 -0
  209. package/node_modules/@noodle-borg/service/dist/routes/org-admin.js.map +1 -0
  210. package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts +15 -0
  211. package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts.map +1 -1
  212. package/node_modules/@noodle-borg/service/dist/routes/paths.js +47 -0
  213. package/node_modules/@noodle-borg/service/dist/routes/paths.js.map +1 -1
  214. package/node_modules/@noodle-borg/service/dist/routes/plans.d.ts +20 -0
  215. package/node_modules/@noodle-borg/service/dist/routes/plans.d.ts.map +1 -0
  216. package/node_modules/@noodle-borg/service/dist/routes/plans.js +159 -0
  217. package/node_modules/@noodle-borg/service/dist/routes/plans.js.map +1 -0
  218. package/node_modules/@noodle-borg/service/dist/routes/policies.d.ts.map +1 -1
  219. package/node_modules/@noodle-borg/service/dist/routes/policies.js +7 -0
  220. package/node_modules/@noodle-borg/service/dist/routes/policies.js.map +1 -1
  221. package/node_modules/@noodle-borg/service/dist/routes/rollback.d.ts.map +1 -1
  222. package/node_modules/@noodle-borg/service/dist/routes/rollback.js +23 -7
  223. package/node_modules/@noodle-borg/service/dist/routes/rollback.js.map +1 -1
  224. package/node_modules/@noodle-borg/service/dist/serve.d.ts +6 -0
  225. package/node_modules/@noodle-borg/service/dist/serve.d.ts.map +1 -1
  226. package/node_modules/@noodle-borg/service/dist/serve.js +72 -32
  227. package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
  228. package/node_modules/@noodle-borg/service/dist/server-auth-bindings.d.ts +7 -0
  229. package/node_modules/@noodle-borg/service/dist/server-auth-bindings.d.ts.map +1 -0
  230. package/node_modules/@noodle-borg/service/dist/server-auth-bindings.js +14 -0
  231. package/node_modules/@noodle-borg/service/dist/server-auth-bindings.js.map +1 -0
  232. package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
  233. package/node_modules/@noodle-borg/service/dist/service.js +139 -7
  234. package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
  235. package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts +14 -0
  236. package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts.map +1 -1
  237. package/node_modules/@noodle-borg/service/dist/store/control-plane.js +38 -0
  238. package/node_modules/@noodle-borg/service/dist/store/control-plane.js.map +1 -1
  239. package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts +25 -0
  240. package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts.map +1 -0
  241. package/node_modules/@noodle-borg/service/dist/store/json-file.js +163 -0
  242. package/node_modules/@noodle-borg/service/dist/store/json-file.js.map +1 -0
  243. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts +14 -0
  244. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts.map +1 -1
  245. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js +16 -0
  246. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js.map +1 -1
  247. package/node_modules/@noodle-borg/service/dist/store/postgres-rows.d.ts +60 -0
  248. package/node_modules/@noodle-borg/service/dist/store/postgres-rows.d.ts.map +1 -0
  249. package/node_modules/@noodle-borg/service/dist/store/postgres-rows.js +101 -0
  250. package/node_modules/@noodle-borg/service/dist/store/postgres-rows.js.map +1 -0
  251. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts.map +1 -1
  252. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js +21 -2
  253. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js.map +1 -1
  254. package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts +23 -8
  255. package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts.map +1 -1
  256. package/node_modules/@noodle-borg/service/dist/store/postgres.js +112 -128
  257. package/node_modules/@noodle-borg/service/dist/store/postgres.js.map +1 -1
  258. package/node_modules/@noodle-borg/service/dist/store/records.d.ts +35 -0
  259. package/node_modules/@noodle-borg/service/dist/store/records.d.ts.map +1 -0
  260. package/node_modules/@noodle-borg/service/dist/store/records.js +87 -0
  261. package/node_modules/@noodle-borg/service/dist/store/records.js.map +1 -0
  262. package/node_modules/@noodle-borg/service/dist/store/validate.d.ts +19 -0
  263. package/node_modules/@noodle-borg/service/dist/store/validate.d.ts.map +1 -0
  264. package/node_modules/@noodle-borg/service/dist/store/validate.js +61 -0
  265. package/node_modules/@noodle-borg/service/dist/store/validate.js.map +1 -0
  266. package/node_modules/@noodle-borg/service/dist/store.d.ts +75 -45
  267. package/node_modules/@noodle-borg/service/dist/store.d.ts.map +1 -1
  268. package/node_modules/@noodle-borg/service/dist/store.js +61 -224
  269. package/node_modules/@noodle-borg/service/dist/store.js.map +1 -1
  270. package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts +1 -0
  271. package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts.map +1 -1
  272. package/node_modules/@noodle-borg/transport-http/dist/handler.js +37 -0
  273. package/node_modules/@noodle-borg/transport-http/dist/handler.js.map +1 -1
  274. package/node_modules/@noodle-borg/transport-http/dist/index.d.ts +1 -1
  275. package/node_modules/@noodle-borg/transport-http/dist/index.d.ts.map +1 -1
  276. package/node_modules/@noodle-borg/transport-http/dist/index.js.map +1 -1
  277. package/package.json +3 -2
@@ -0,0 +1,224 @@
1
+ /**
2
+ * Shared branded shell for the authorization server's user-facing HTML pages (consent, customer sign-in,
3
+ * error). It reproduces the public Noodle Seed website's look — the always-dark stone-950 surface, the warm
4
+ * orange→amber→rose "Mars" ramp, a single Geist typeface, the real Noodle Seed wordmark, a frosted glass
5
+ * card, and the site's dark-pill glow CTA — as a self-contained page (all CSS/JS inline, no build step).
6
+ *
7
+ * Background: the marketing hero animates a WebGL grain-gradient via `@paper-design/shaders`, but loading
8
+ * that at runtime proved unreliable on this security page (CDN cold-build / cross-origin module fetch meant
9
+ * it only appeared after a refresh). So these pages ship an original, dependency-free WebGL grain-gradient
10
+ * (our own GLSL) tuned to the same warm palette, inlined as a plain script — no import/fetch, so it renders
11
+ * on first paint every time — with an on-brand CSS radial-gradient fallback for no-WebGL. Callers pass
12
+ * already-escaped `contentHtml`; the shell escapes the trusted static `title`/`kicker`/`heading`.
13
+ */
14
+ function esc(value) {
15
+ return value
16
+ .replace(/&/g, '&')
17
+ .replace(/</g, '&lt;')
18
+ .replace(/>/g, '&gt;')
19
+ .replace(/"/g, '&quot;')
20
+ .replace(/'/g, '&#39;');
21
+ }
22
+ /** The Noodle Seed favicon (white disc + black seed-leaf) as a self-contained data URI. */
23
+ const FAVICON = `data:image/svg+xml,${encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="none"><rect width="16" height="16" rx="8" fill="white"/><path d="M8.58023 12.8485C6.27833 12.8463 4.41315 11.0141 4.42117 8.75681L4.43588 4.61714L8.66254 4.62118C10.9644 4.62339 12.8296 6.45561 12.8216 8.71287C12.8135 10.9975 10.9128 12.8507 8.58023 12.8485Z" fill="black"/><path d="M8.82627 4.76869C11.1282 4.7709 12.9933 6.60312 12.9853 8.86038L12.9706 13L8.74395 12.996C6.44206 12.9938 4.57687 11.1616 4.5849 8.90432C4.59302 6.6197 6.49364 4.76646 8.82627 4.76869Z" fill="black"/><ellipse cx="3.69536" cy="3.68106" rx="0.695363" ry="0.681056" fill="black"/></svg>')}`;
24
+ /** The actual Noodle Seed wordmark, inlined verbatim from the site's `noodle-seed-logo.svg` (white paths). */
25
+ const WORDMARK = `<svg class="ns-logo" role="img" aria-label="Noodle Seed" viewBox="0 0 250 39" fill="none" xmlns="http://www.w3.org/2000/svg">
26
+ <path d="M21.7542 38.4096C12.7805 38.401 5.5093 31.2553 5.54057 22.4521L5.59793 6.30742L22.0751 6.32319C31.0488 6.33178 38.32 13.4774 38.2887 22.2807C38.2571 31.1907 30.8477 38.4183 21.7542 38.4096Z" fill="white"/>
27
+ <path d="M22.7136 6.89786C31.6873 6.90645 38.9585 14.0521 38.9272 22.8553L38.8699 39L22.3927 38.9842C13.419 38.9756 6.14782 31.83 6.17909 23.0267C6.21074 14.1168 13.6201 6.88915 22.7136 6.89786Z" fill="white"/>
28
+ <path d="M5.42159 2.65611C5.42159 4.12303 4.20793 5.31221 2.7108 5.31221C1.21366 5.31221 0 4.12303 0 2.65611C0 1.18918 1.21366 0 2.7108 0C4.20793 0 5.42159 1.18918 5.42159 2.65611Z" fill="white"/>
29
+ <path d="M66.0046 34.7514H61.413L51.0161 19.2083V34.7514H46.4244V12.0695H51.0161L61.413 27.6451V12.0695H66.0046V34.7514Z" fill="white"/>
30
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M78.6105 35.0435C76.8613 35.0435 75.287 34.6649 73.8876 33.9078C72.4882 33.129 71.3841 32.0365 70.575 30.6304C69.7879 29.2243 69.3943 27.6018 69.3943 25.763C69.3943 23.9243 69.7988 22.3018 70.6078 20.8957C71.4387 19.4896 72.5648 18.4079 73.986 17.6508C75.4072 16.872 76.9925 16.4826 78.7417 16.4826C80.4909 16.4826 82.0761 16.872 83.4973 17.6508C84.9186 18.4079 86.0337 19.4896 86.8427 20.8957C87.6736 22.3018 88.089 23.9243 88.089 25.763C88.089 26.0267 88.0802 26.2858 88.0627 26.5405C87.1071 26.6866 86.1759 27.0279 85.3346 27.565C84.9617 27.7947 84.6054 28.0624 84.271 28.3683L79.0297 33.1637L80.6152 34.8685C79.9739 34.9851 79.3057 35.0435 78.6105 35.0435ZM78.6105 31.0847C79.4413 31.0847 80.2176 30.89 80.9391 30.5006C81.6825 30.0896 82.2729 29.4839 82.7102 28.6835C83.1475 27.883 83.3661 26.9096 83.3661 25.763C83.3661 24.0541 82.907 22.7453 81.9886 21.8367C81.0922 20.9065 79.988 20.4414 78.6761 20.4414C77.3642 20.4414 76.26 20.9065 75.3635 21.8367C74.4889 22.7453 74.0516 24.0541 74.0516 25.763C74.0516 27.472 74.478 28.7916 75.3307 29.7218C76.2053 30.6304 77.2986 31.0847 78.6105 31.0847Z" fill="white"/>
31
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M99.1606 33.6043L97.813 34.9139C98.3638 35.0003 98.9346 35.0435 99.5254 35.0435C101.296 35.0435 102.893 34.6649 104.314 33.9078C105.757 33.129 106.894 32.0365 107.725 30.6304C108.578 29.2243 109.004 27.6018 109.004 25.763C109.004 23.9243 108.588 22.3018 107.758 20.8957C106.949 19.4896 105.833 18.4079 104.412 17.6508C102.991 16.872 101.406 16.4826 99.6566 16.4826C97.9074 16.4826 96.3221 16.872 94.9009 17.6508C93.4797 18.4079 92.3536 19.4896 91.5228 20.8957C90.7137 22.3018 90.3092 23.9243 90.3092 25.763C90.3092 26.033 90.3177 26.2982 90.3347 26.5588C91.7444 26.7976 93.094 27.4628 94.1709 28.553L99.1606 33.6043ZM99.5254 31.0847C100.356 31.0847 101.132 30.89 101.854 30.5006C102.597 30.0896 103.188 29.4839 103.625 28.6835C104.062 27.883 104.281 26.9096 104.281 25.763C104.281 24.0541 103.822 22.7453 102.904 21.8367C102.007 20.9065 100.903 20.4414 99.591 20.4414C98.2791 20.4414 97.1749 20.9065 96.2784 21.8367C95.4038 22.7453 94.9665 24.0541 94.9665 25.763C94.9665 27.472 95.3929 28.7916 96.2456 29.7218C97.1202 30.6304 98.2135 31.0847 99.5254 31.0847Z" fill="white"/>
32
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M111.191 25.6981C111.191 23.881 111.552 22.2694 112.274 20.8632C113.017 19.4571 114.023 18.3755 115.291 17.6183C116.559 16.8612 117.97 16.4826 119.522 16.4826C120.703 16.4826 121.829 16.7422 122.9 17.2614C123.972 17.7589 124.824 18.4296 125.458 19.2732V10.7391H130.116V34.7514H125.458V32.0906C124.89 32.9776 124.092 33.6914 123.064 34.2323C122.036 34.7731 120.845 35.0435 119.489 35.0435C117.959 35.0435 116.559 34.6541 115.291 33.8753C114.023 33.0965 113.017 32.0041 112.274 30.598C111.552 29.1702 111.191 27.5369 111.191 25.6981ZM125.491 25.763C125.491 24.6598 125.272 23.7188 124.835 22.94C124.398 22.1396 123.808 21.5339 123.064 21.1228C122.321 20.6902 121.523 20.4738 120.67 20.4738C119.817 20.4738 119.03 20.6794 118.308 21.0904C117.587 21.5014 116.997 22.1071 116.537 22.9075C116.1 23.6863 115.881 24.6165 115.881 25.6981C115.881 26.7798 116.1 27.7316 116.537 28.5537C116.997 29.3541 117.587 29.9706 118.308 30.4033C119.052 30.8359 119.839 31.0522 120.67 31.0522C121.523 31.0522 122.321 30.8467 123.064 30.4357C123.808 30.0031 124.398 29.3973 124.835 28.6186C125.272 27.8182 125.491 26.8663 125.491 25.763Z" fill="white"/>
33
+ <path d="M139.192 10.7391V34.7514H134.6V10.7391H139.192Z" fill="white"/>
34
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M160.619 25.3737C160.619 26.0226 160.575 26.6067 160.488 27.1259H147.205C147.314 28.4239 147.773 29.4406 148.582 30.1761C149.391 30.9116 150.386 31.2794 151.567 31.2794C153.273 31.2794 154.486 30.5547 155.208 29.1053H160.16C159.635 30.8359 158.629 32.2637 157.143 33.3886C155.656 34.4918 153.83 35.0435 151.665 35.0435C149.916 35.0435 148.342 34.6649 146.943 33.9078C145.565 33.129 144.483 32.0365 143.696 30.6304C142.93 29.2243 142.548 27.6018 142.548 25.763C142.548 23.9026 142.93 22.2694 143.696 20.8632C144.461 19.4571 145.532 18.3755 146.91 17.6183C148.287 16.8612 149.873 16.4826 151.665 16.4826C153.393 16.4826 154.934 16.8504 156.29 17.5859C157.667 18.3214 158.728 19.3706 159.471 20.7334C160.237 22.0747 160.619 23.6214 160.619 25.3737ZM155.864 24.0757C155.842 22.9075 155.415 21.9773 154.584 21.2851C153.754 20.5712 152.737 20.2143 151.534 20.2143C150.397 20.2143 149.435 20.5604 148.648 21.2526C147.883 21.9232 147.413 22.8643 147.238 24.0757H155.864Z" fill="white"/>
35
+ <path d="M179.69 34.9786C178.094 34.9786 176.651 34.7082 175.361 34.1674C174.093 33.6265 173.087 32.8478 172.343 31.831C171.6 30.8143 171.217 29.6137 171.195 28.2292H176.115C176.181 29.1594 176.509 29.8949 177.099 30.4357C177.711 30.9765 178.542 31.2469 179.592 31.2469C180.663 31.2469 181.505 30.9982 182.117 30.5006C182.729 29.9814 183.035 29.3108 183.035 28.4888C183.035 27.8182 182.828 27.2665 182.412 26.8339C181.997 26.4012 181.472 26.0659 180.838 25.8279C180.226 25.5684 179.373 25.2871 178.28 24.9843C176.793 24.5516 175.579 24.1298 174.639 23.7188C173.721 23.2861 172.923 22.6479 172.245 21.8043C171.589 20.939 171.261 19.7924 171.261 18.3647C171.261 17.0234 171.6 15.8553 172.278 14.8602C172.956 13.8651 173.907 13.1079 175.131 12.5887C176.356 12.0479 177.755 11.7775 179.329 11.7775C181.691 11.7775 183.604 12.3508 185.069 13.4973C186.556 14.6222 187.376 16.2014 187.529 18.2349H182.478C182.434 17.4561 182.095 16.8179 181.461 16.3204C180.849 15.8012 180.029 15.5416 179.001 15.5416C178.105 15.5416 177.383 15.7687 176.837 16.223C176.312 16.6773 176.049 17.3371 176.049 18.2024C176.049 18.8081 176.246 19.3165 176.64 19.7275C177.055 20.1169 177.558 20.4414 178.149 20.701C178.761 20.939 179.614 21.2202 180.707 21.5447C182.194 21.9773 183.407 22.41 184.347 22.8426C185.287 23.2753 186.097 23.9243 186.774 24.7896C187.452 25.6549 187.791 26.7906 187.791 28.1967C187.791 29.4082 187.474 30.5331 186.84 31.5714C186.206 32.6098 185.277 33.4427 184.052 34.07C182.828 34.6757 181.374 34.9786 179.69 34.9786Z" fill="white"/>
36
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M208.663 25.3737C208.663 26.0226 208.619 26.6067 208.531 27.1259H195.248C195.358 28.4239 195.817 29.4406 196.626 30.1761C197.435 30.9116 198.43 31.2794 199.611 31.2794C201.316 31.2794 202.529 30.5547 203.251 29.1053H208.203C207.679 30.8359 206.673 32.2637 205.186 33.3886C203.699 34.4918 201.874 35.0435 199.709 35.0435C197.96 35.0435 196.385 34.6649 194.986 33.9078C193.609 33.129 192.526 32.0365 191.739 30.6304C190.974 29.2243 190.591 27.6018 190.591 25.763C190.591 23.9026 190.974 22.2694 191.739 20.8632C192.504 19.4571 193.576 18.3755 194.953 17.6183C196.331 16.8612 197.916 16.4826 199.709 16.4826C201.436 16.4826 202.978 16.8504 204.333 17.5859C205.711 18.3214 206.771 19.3706 207.515 20.7334C208.28 22.0747 208.663 23.6214 208.663 25.3737ZM203.907 24.0757C203.885 22.9075 203.459 21.9773 202.628 21.2851C201.797 20.5712 200.78 20.2143 199.578 20.2143C198.441 20.2143 197.479 20.5604 196.692 21.2526C195.926 21.9232 195.456 22.8643 195.281 24.0757H203.907Z" fill="white"/>
37
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M228.905 25.3737C228.905 26.0226 228.861 26.6067 228.774 27.1259H215.491C215.6 28.4239 216.059 29.4406 216.868 30.1761C217.677 30.9116 218.672 31.2794 219.853 31.2794C221.558 31.2794 222.772 30.5547 223.493 29.1053H228.446C227.921 30.8359 226.915 32.2637 225.428 33.3886C223.942 34.4918 222.116 35.0435 219.951 35.0435C218.202 35.0435 216.628 34.6649 215.228 33.9078C213.851 33.129 212.769 32.0365 211.981 30.6304C211.216 29.2243 210.833 27.6018 210.833 25.763C210.833 23.9026 211.216 22.2694 211.981 20.8632C212.747 19.4571 213.818 18.3755 215.196 17.6183C216.573 16.8612 218.158 16.4826 219.951 16.4826C221.679 16.4826 223.22 16.8504 224.576 17.5859C225.953 18.3214 227.014 19.3706 227.757 20.7334C228.522 22.0747 228.905 23.6214 228.905 25.3737ZM224.149 24.0757C224.127 22.9075 223.701 21.9773 222.87 21.2851C222.039 20.5712 221.023 20.2143 219.82 20.2143C218.683 20.2143 217.721 20.5604 216.934 21.2526C216.169 21.9232 215.698 22.8643 215.524 24.0757H224.149Z" fill="white"/>
38
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M231.076 25.6981C231.076 23.881 231.437 22.2694 232.158 20.8632C232.901 19.4571 233.907 18.3755 235.175 17.6183C236.444 16.8612 237.854 16.4826 239.406 16.4826C240.587 16.4826 241.713 16.7422 242.785 17.2614C243.856 17.7589 244.709 18.4296 245.343 19.2732V10.7391H250V34.7514H245.343V32.0906C244.774 32.9776 243.976 33.6914 242.949 34.2323C241.921 34.7731 240.729 35.0435 239.374 35.0435C237.843 35.0435 236.444 34.6541 235.175 33.8753C233.907 33.0965 232.901 32.0041 232.158 30.598C231.437 29.1702 231.076 27.5369 231.076 25.6981ZM245.376 25.763C245.376 24.6598 245.157 23.7188 244.72 22.94C244.282 22.1396 243.692 21.5339 242.949 21.1228C242.205 20.6902 241.407 20.4738 240.554 20.4738C239.702 20.4738 238.914 20.6794 238.193 21.0904C237.471 21.5014 236.881 22.1071 236.422 22.9075C235.984 23.6863 235.766 24.6165 235.766 25.6981C235.766 26.7798 235.984 27.7316 236.422 28.5537C236.881 29.3541 237.471 29.9706 238.193 30.4033C238.936 30.8359 239.723 31.0522 240.554 31.0522C241.407 31.0522 242.205 30.8467 242.949 30.4357C243.692 30.0031 244.282 29.3973 244.72 28.6186C245.157 27.8182 245.376 26.8663 245.376 25.763Z" fill="white"/>
39
+ </svg>`;
40
+ /**
41
+ * Original, dependency-free WebGL grain-gradient (our own GLSL) tuned to the warm hero palette. It runs as a
42
+ * plain inline script with no import/fetch, so it renders on first paint every time (no CDN, no cold build,
43
+ * no cross-origin module load) and sizes the canvas to the viewport each frame. CSS .ns-bg is the no-WebGL
44
+ * fallback; .ns-bottom adds the warm bottom blob over it.
45
+ */
46
+ const SHADER_SCRIPT = `<script>
47
+ (function () {
48
+ var canvas = document.getElementById('ns-canvas');
49
+ if (!canvas) return;
50
+ var gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
51
+ if (!gl) return;
52
+ var vs = 'attribute vec2 p;void main(){gl_Position=vec4(p,0.0,1.0);}';
53
+ var fs = [
54
+ 'precision highp float;',
55
+ 'uniform vec2 u_res; uniform float u_time;',
56
+ 'float hash(vec2 p){ p=fract(p*vec2(123.34,456.21)); p+=dot(p,p+45.32); return fract(p.x*p.y); }',
57
+ 'float noise(vec2 p){ vec2 i=floor(p),f=fract(p); float a=hash(i),b=hash(i+vec2(1.,0.)),c=hash(i+vec2(0.,1.)),d=hash(i+vec2(1.,1.)); vec2 u=f*f*(3.-2.*f); return mix(mix(a,b,u.x),mix(c,d,u.x),u.y); }',
58
+ 'float fbm(vec2 p){ float v=0.,a=0.5; mat2 m=mat2(1.6,1.2,-1.2,1.6); for(int i=0;i<5;i++){ v+=a*noise(p); p=m*p; a*=0.5; } return v; }',
59
+ 'void main(){',
60
+ ' vec2 uv=gl_FragCoord.xy/u_res.xy;',
61
+ ' float aspect=u_res.x/max(u_res.y,1.0);',
62
+ ' vec2 p=vec2(uv.x*aspect,uv.y);',
63
+ ' float t=u_time*0.045;',
64
+ ' vec2 q=vec2(fbm(p*1.6+t),fbm(p*1.6-t+5.2));',
65
+ ' float n=fbm(p*2.1+q*1.4);',
66
+ ' vec3 orange=vec3(0.976,0.451,0.086), amber=vec3(0.961,0.620,0.043), rose=vec3(0.957,0.247,0.369);',
67
+ ' vec3 warm=orange;',
68
+ ' warm=mix(warm,amber,smoothstep(0.34,0.52,n));',
69
+ ' warm=mix(warm,rose,smoothstep(0.60,0.82,n));',
70
+ ' float d=distance(uv,vec2(0.80,0.86));',
71
+ ' float glow=smoothstep(1.20,0.10,d);',
72
+ ' float field=glow*(0.45+0.55*n);',
73
+ ' vec3 col=mix(vec3(0.015,0.012,0.010),warm,clamp(field,0.0,1.0)*0.92);',
74
+ ' col+=(hash(gl_FragCoord.xy+t*60.0)-0.5)*0.045;',
75
+ ' gl_FragColor=vec4(max(col,0.0),1.0);',
76
+ '}'
77
+ ].join('\\n');
78
+ function sh(type, src){ var s=gl.createShader(type); gl.shaderSource(s,src); gl.compileShader(s); return s; }
79
+ var prog=gl.createProgram();
80
+ gl.attachShader(prog,sh(gl.VERTEX_SHADER,vs));
81
+ gl.attachShader(prog,sh(gl.FRAGMENT_SHADER,fs));
82
+ gl.linkProgram(prog);
83
+ if(!gl.getProgramParameter(prog,gl.LINK_STATUS)) return;
84
+ gl.useProgram(prog);
85
+ var buf=gl.createBuffer();
86
+ gl.bindBuffer(gl.ARRAY_BUFFER,buf);
87
+ gl.bufferData(gl.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),gl.STATIC_DRAW);
88
+ var loc=gl.getAttribLocation(prog,'p');
89
+ gl.enableVertexAttribArray(loc);
90
+ gl.vertexAttribPointer(loc,2,gl.FLOAT,false,0,0);
91
+ var uRes=gl.getUniformLocation(prog,'u_res'), uTime=gl.getUniformLocation(prog,'u_time');
92
+ var reduce=window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches;
93
+ var start=null;
94
+ function frame(ts){
95
+ if(start===null)start=ts;
96
+ var dpr=Math.min(window.devicePixelRatio||1,2);
97
+ var w=Math.max(1,Math.round(canvas.clientWidth*dpr)), h=Math.max(1,Math.round(canvas.clientHeight*dpr));
98
+ if(canvas.width!==w||canvas.height!==h){ canvas.width=w; canvas.height=h; }
99
+ gl.viewport(0,0,canvas.width,canvas.height);
100
+ gl.uniform2f(uRes,canvas.width,canvas.height);
101
+ gl.uniform1f(uTime,(ts-start)/1000);
102
+ gl.drawArrays(gl.TRIANGLES,0,3);
103
+ if(!reduce) requestAnimationFrame(frame);
104
+ }
105
+ requestAnimationFrame(frame);
106
+ })();
107
+ </script>`;
108
+ /** The self-contained stylesheet — website tokens, shader canvas + CSS fallback, glass card, glow CTA. */
109
+ const STYLES = `
110
+ *,*::before,*::after{box-sizing:border-box}
111
+ @property --ns-angle{syntax:'<angle>';initial-value:0deg;inherits:false}
112
+ :root{
113
+ --bg:#0c0a09;--fg:#fafaf9;--muted:#a1a1a1;
114
+ --card:rgba(23,23,23,.55);--border:rgba(255,255,255,.10);
115
+ --orange:#F97316;--amber:#F59E0B;--rose:#F43F5E;
116
+ color-scheme:dark;
117
+ }
118
+ html,body{height:100%}
119
+ body{
120
+ margin:0;min-height:100dvh;background:var(--bg);color:var(--fg);
121
+ font-family:"Geist",ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;
122
+ -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
123
+ display:grid;place-items:center;padding:24px;position:relative;overflow:hidden;
124
+ }
125
+ /* WebGL grain-gradient canvas over an on-brand CSS radial-gradient fallback. */
126
+ .ns-canvas{position:fixed;inset:0;width:100%;height:100%;z-index:-4;display:block;pointer-events:none}
127
+ .ns-bg{position:fixed;inset:-25%;z-index:-5;background:
128
+ radial-gradient(46% 46% at 74% 16%,rgba(249,115,22,.55),rgba(244,63,94,.28) 46%,transparent 72%),
129
+ radial-gradient(42% 42% at 18% 84%,rgba(245,158,11,.30),transparent 66%),#000}
130
+ /* Warm blob hugging the full bottom edge, screen-blended over the shader. */
131
+ .ns-bottom{position:fixed;left:0;right:0;bottom:0;height:46vh;z-index:-3;pointer-events:none;mix-blend-mode:screen;
132
+ background:radial-gradient(92% 78% at 50% 128%,rgba(249,115,22,.62),rgba(244,63,94,.30) 44%,transparent 65%)}
133
+ .ns-grain{position:fixed;inset:0;z-index:-2;pointer-events:none;opacity:.045;mix-blend-mode:overlay;
134
+ background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
135
+ .ns-scrim{position:fixed;inset:0;z-index:-1;pointer-events:none;
136
+ background:radial-gradient(120% 80% at 50% 0%,transparent 0%,rgba(12,10,9,.45) 72%,var(--bg) 100%)}
137
+ .ns-card{
138
+ position:relative;width:min(100% - 8px,28rem);
139
+ border:1px solid var(--border);border-radius:1.1rem;background:var(--card);
140
+ -webkit-backdrop-filter:blur(16px) saturate(1.2);backdrop-filter:blur(16px) saturate(1.2);
141
+ padding:1.9rem;
142
+ box-shadow:0 30px 90px -45px rgba(0,0,0,.9),0 0 0 1px rgba(255,255,255,.02),inset 0 1px 0 0 rgba(255,255,255,.06);
143
+ }
144
+ .ns-head{display:flex;align-items:center;margin-bottom:1.6rem}
145
+ .ns-logo{height:20px;width:auto;display:block;filter:drop-shadow(0 2px 12px rgba(0,0,0,.5))}
146
+ .ns-kicker{
147
+ display:flex;align-items:center;gap:.5rem;margin:0 0 .5rem;
148
+ font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.16em;color:var(--muted);
149
+ }
150
+ .ns-kicker::before{content:"";width:1.4rem;height:1px;background:linear-gradient(100deg,var(--orange),var(--amber) 50%,var(--rose))}
151
+ .ns-title{font-weight:600;font-size:clamp(1.05rem,4.2vw,1.35rem);line-height:1.2;letter-spacing:-.02em;margin:.1rem 0 .9rem;color:var(--fg);white-space:nowrap}
152
+ .ns-lede{color:var(--muted);line-height:1.55;margin:0;font-size:.95rem}
153
+ .ns-lede strong{color:var(--fg);font-weight:600}
154
+ .ns-error{color:#fca5a5}
155
+ .ns-dl{display:grid;gap:.9rem;margin:1.35rem 0 0}
156
+ .ns-dt{margin:0 0 .2rem;font-size:.68rem;font-weight:500;text-transform:uppercase;letter-spacing:.1em;color:var(--muted)}
157
+ .ns-dd{margin:0;font-size:.95rem;font-weight:500;color:var(--fg);word-break:break-all}
158
+ .ns-note{color:var(--muted);font-size:.82rem;line-height:1.5;margin:1.35rem 0 0;padding-top:1.15rem;border-top:1px solid var(--border)}
159
+ .ns-row{display:flex;gap:.7rem;margin-top:1.5rem}
160
+ .btn{
161
+ flex:1;display:inline-flex;align-items:center;justify-content:center;gap:.5rem;
162
+ height:2.9rem;padding:0 1.25rem;border-radius:9999px;border:1px solid transparent;
163
+ font:inherit;font-weight:600;font-size:.95rem;cursor:pointer;color:var(--fg);
164
+ transition:transform .2s,border-color .2s,background .2s,box-shadow .2s;
165
+ }
166
+ .btn:focus-visible{outline:2px solid var(--orange);outline-offset:2px}
167
+ .btn-ghost{background:rgba(255,255,255,.02);border-color:var(--border)}
168
+ .btn-ghost:hover{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.2)}
169
+ .btn-glow{position:relative;flex:1;display:flex;border-radius:9999px}
170
+ .btn-glow::before{
171
+ content:"";position:absolute;inset:-2px;z-index:0;border-radius:inherit;
172
+ background:conic-gradient(from var(--ns-angle),var(--orange),var(--amber),var(--rose),var(--orange));
173
+ filter:blur(7px);opacity:.7;animation:ns-rotate 4.5s linear infinite;
174
+ }
175
+ .btn-glow:hover::before{opacity:.95}
176
+ .btn-glow .btn{position:relative;z-index:1;width:100%}
177
+ .btn-primary{background:#0c0a09;color:#fff;outline:1px solid rgba(255,255,255,.14);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.08)}
178
+ .btn-primary:hover{transform:translateY(-1px)}
179
+ .btn:disabled{cursor:not-allowed;opacity:.55;transform:none}
180
+ @keyframes ns-rotate{to{--ns-angle:360deg}}
181
+ @media (prefers-reduced-motion:reduce){.btn-glow::before{animation:none}}`;
182
+ /** Render one branded authorization-server page around caller-supplied, already-escaped content. */
183
+ export function renderOAuthPage(input) {
184
+ return `<!doctype html>
185
+ <html lang="en">
186
+ <head>
187
+ <meta charset="utf-8" />
188
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
189
+ <meta name="theme-color" content="#0c0a09" />
190
+ <meta name="robots" content="noindex" />
191
+ <title>${esc(input.title)}</title>
192
+ <link rel="icon" type="image/svg+xml" href="${FAVICON}" />
193
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
194
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
195
+ <link href="https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&display=swap" rel="stylesheet" />
196
+ <style>${STYLES}</style>
197
+ </head>
198
+ <body>
199
+ <canvas id="ns-canvas" class="ns-canvas" aria-hidden="true"></canvas>
200
+ <div class="ns-bg" aria-hidden="true"></div>
201
+ <div class="ns-bottom" aria-hidden="true"></div>
202
+ <div class="ns-grain" aria-hidden="true"></div>
203
+ <div class="ns-scrim" aria-hidden="true"></div>
204
+ <main class="ns-card">
205
+ <div class="ns-head">${WORDMARK}</div>
206
+ <p class="ns-kicker">${esc(input.kicker)}</p>
207
+ <h1 class="ns-title">${esc(input.heading)}</h1>
208
+ ${input.contentHtml}
209
+ </main>
210
+ ${SHADER_SCRIPT}
211
+ ${input.scriptHtml ?? ''}
212
+ </body>
213
+ </html>`;
214
+ }
215
+ /** A branded 500/error interstitial for the authorization-server catch handler. */
216
+ export function renderOAuthErrorPage() {
217
+ return renderOAuthPage({
218
+ title: 'Sign-in error — Noodle Seed',
219
+ kicker: 'Error',
220
+ heading: 'We hit a snag',
221
+ contentHtml: '<p class="ns-lede">The sign-in request could not be completed. Close this window and start again from your application.</p>',
222
+ });
223
+ }
224
+ //# sourceMappingURL=branding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branding.js","sourceRoot":"","sources":["../../src/oauth/branding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,SAAS,GAAG,CAAC,KAAa;IACxB,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED,2FAA2F;AAC3F,MAAM,OAAO,GAAG,sBAAsB,kBAAkB,CACtD,0nBAA0nB,CAC3nB,EAAE,CAAC;AAEJ,8GAA8G;AAC9G,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;OAcV,CAAC;AAER;;;;;GAKG;AACH,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA6DZ,CAAC;AAEX,0GAA0G;AAC1G,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0EAwE2D,CAAC;AAe3E,oGAAoG;AACpG,MAAM,UAAU,eAAe,CAAC,KAAqB;IACnD,OAAO;;;;;;;SAOA,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;8CACqB,OAAO;;;;SAI5C,MAAM;;;;;;;;;yBASU,QAAQ;yBACR,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;yBACjB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;IACvC,KAAK,CAAC,WAAW;;EAEnB,aAAa;EACb,KAAK,CAAC,UAAU,IAAI,EAAE;;QAEhB,CAAC;AACT,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,oBAAoB;IAClC,OAAO,eAAe,CAAC;QACrB,KAAK,EAAE,6BAA6B;QACpC,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,eAAe;QACxB,WAAW,EACT,6HAA6H;KAChI,CAAC,CAAC;AACL,CAAC"}
@@ -1,9 +1,3 @@
1
- /**
2
- * The consent interstitial (OA-2, [ADR 0042]). **Required**, not optional: because the authorization server
3
- * federates every dynamically-registered client through one static Google client, the MCP 2025-11-25 spec
4
- * mandates explicit per-client user consent before issuing a code (confused-deputy mitigation). The page
5
- * shows the requesting client and where the code will be sent, so the owner can refuse an unfamiliar app.
6
- */
7
1
  export interface ConsentPageInput {
8
2
  readonly clientName: string;
9
3
  readonly resourceHost: string;
@@ -1 +1 @@
1
- {"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../../src/oauth/consent.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wFAAwF;IACxF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAWD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CA6CjE"}
1
+ {"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../../src/oauth/consent.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wFAAwF;IACxF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAWD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CA2BjE"}
@@ -1,3 +1,10 @@
1
+ /**
2
+ * The consent interstitial (OA-2, [ADR 0042]). **Required**, not optional: because the authorization server
3
+ * federates every dynamically-registered client through one static Google client, the MCP 2025-11-25 spec
4
+ * mandates explicit per-client user consent before issuing a code (confused-deputy mitigation). The page
5
+ * shows the requesting client and where the code will be sent, so the owner can refuse an unfamiliar app.
6
+ */
7
+ import { renderOAuthPage } from './branding.js';
1
8
  function esc(value) {
2
9
  return value
3
10
  .replace(/&/g, '&amp;')
@@ -13,43 +20,25 @@ export function renderConsentPage(input) {
13
20
  const email = esc(input.userEmail);
14
21
  const token = esc(input.consentToken);
15
22
  const action = esc(input.consentAction);
16
- return `<!doctype html>
17
- <html lang="en">
18
- <head>
19
- <meta charset="utf-8" />
20
- <meta name="viewport" content="width=device-width, initial-scale=1" />
21
- <title>Authorize access</title>
22
- <style>
23
- :root { color-scheme: light dark; }
24
- body { font: 15px/1.5 system-ui, sans-serif; max-width: 30rem; margin: 4rem auto; padding: 0 1rem; }
25
- .card { border: 1px solid #8884; border-radius: 12px; padding: 1.5rem; }
26
- h1 { font-size: 1.15rem; margin: 0 0 1rem; }
27
- dl { margin: 1rem 0; }
28
- dt { color: #888; font-size: .8rem; }
29
- dd { margin: 0 0 .75rem; font-weight: 600; word-break: break-all; }
30
- .row { display: flex; gap: .75rem; margin-top: 1.5rem; }
31
- button { flex: 1; padding: .6rem 1rem; border-radius: 8px; border: 1px solid #8884; font: inherit; cursor: pointer; }
32
- button.approve { background: #1d9e75; color: #fff; border-color: #1d9e75; }
33
- </style>
34
- </head>
35
- <body>
36
- <div class="card">
37
- <h1>Authorize access to your server</h1>
38
- <p>The application <strong>${client}</strong> is requesting access to your Noodle MCP server, acting as <strong>${email}</strong>.</p>
39
- <dl>
40
- <dt>MCP server</dt><dd>${resource}</dd>
41
- <dt>Sign-in will redirect to</dt><dd>${redirect}</dd>
23
+ const contentHtml = `<p class="ns-lede"><strong>${client}</strong> wants to access your Noodle Seed MCP server.</p>
24
+ <dl class="ns-dl">
25
+ <div><dt class="ns-dt">Signed in as</dt><dd class="ns-dd">${email}</dd></div>
26
+ <div><dt class="ns-dt">MCP server</dt><dd class="ns-dd">${resource}</dd></div>
27
+ <div><dt class="ns-dt">Redirects to</dt><dd class="ns-dd">${redirect}</dd></div>
42
28
  </dl>
43
- <p>Only approve if you recognize this application.</p>
29
+ <p class="ns-note">Only approve if you recognize this application.</p>
44
30
  <form method="post" action="${action}">
45
31
  <input type="hidden" name="consent_token" value="${token}" />
46
- <div class="row">
47
- <button type="submit" name="decision" value="deny">Deny</button>
48
- <button type="submit" name="decision" value="approve" class="approve">Approve</button>
32
+ <div class="ns-row">
33
+ <button type="submit" name="decision" value="deny" class="btn btn-ghost">Deny</button>
34
+ <span class="btn-glow"><button type="submit" name="decision" value="approve" class="btn btn-primary">Approve</button></span>
49
35
  </div>
50
- </form>
51
- </div>
52
- </body>
53
- </html>`;
36
+ </form>`;
37
+ return renderOAuthPage({
38
+ title: 'Authorize access — Noodle Seed',
39
+ kicker: 'Authorize',
40
+ heading: 'Authorize access to your server',
41
+ contentHtml,
42
+ });
54
43
  }
55
44
  //# sourceMappingURL=consent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"consent.js","sourceRoot":"","sources":["../../src/oauth/consent.ts"],"names":[],"mappings":"AAiBA,SAAS,GAAG,CAAC,KAAa;IACxB,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAuB;IACvD,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACxC,OAAO;;;;;;;;;;;;;;;;;;;;;;iCAsBwB,MAAM,+EAA+E,KAAK;;+BAE5F,QAAQ;6CACM,QAAQ;;;kCAGnB,MAAM;yDACiB,KAAK;;;;;;;;QAQtD,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"consent.js","sourceRoot":"","sources":["../../src/oauth/consent.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAahD,SAAS,GAAG,CAAC,KAAa;IACxB,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAuB;IACvD,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,8BAA8B,MAAM;;kEAEQ,KAAK;gEACP,QAAQ;kEACN,QAAQ;;;kCAGxC,MAAM;yDACiB,KAAK;;;;;YAKlD,CAAC;IACX,OAAO,eAAe,CAAC;QACrB,KAAK,EAAE,gCAAgC;QACvC,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,iCAAiC;QAC1C,WAAW;KACZ,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"customer-bridge.d.ts","sourceRoot":"","sources":["../../src/oauth/customer-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAI1D,eAAO,MAAM,uBAAuB,uCAAuC,CAAC;AAG5E,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,sBAAsB,EAC5B,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC3E,MAAM,GAAG,SAAS,CAmBpB;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,OAAO,GAAG;IAC3D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,CAOA;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,GAAG;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,CA6BA;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAyBrD;AAsHD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,GAAG,SAAS,CAIlF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,GAAG,SAAS,CAGhF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,SAAS,MAAM,EAAE,CAE/E"}
1
+ {"version":3,"file":"customer-bridge.d.ts","sourceRoot":"","sources":["../../src/oauth/customer-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAK1D,eAAO,MAAM,uBAAuB,uCAAuC,CAAC;AAG5E,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,sBAAsB,EAC5B,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC3E,MAAM,GAAG,SAAS,CAmBpB;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,OAAO,GAAG;IAC3D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,CAOA;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,GAAG;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,CA6BA;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAyBrD;AAsGD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,GAAG,SAAS,CAIlF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,GAAG,SAAS,CAGhF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,SAAS,MAAM,EAAE,CAE/E"}
@@ -1,3 +1,4 @@
1
+ import { renderOAuthPage } from './branding.js';
1
2
  const FIREBASE_AUTHORIZE_PATH = '/oauth/customer/firebase/authorize';
2
3
  const FIREBASE_CALLBACK_PATH = '/oauth/customer/firebase/callback';
3
4
  export const MICROSOFT_CALLBACK_PATH = '/oauth/customer/microsoft/callback';
@@ -121,35 +122,14 @@ function firebaseWebConfig(auth) {
121
122
  function htmlPage(input) {
122
123
  const configJson = safeScriptJson(input.config ?? {});
123
124
  const tenantJson = safeScriptJson(input.tenantId ?? null);
124
- return `<!doctype html>
125
- <html lang="en">
126
- <head>
127
- <meta charset="utf-8">
128
- <meta name="viewport" content="width=device-width, initial-scale=1">
129
- <title>${escapeHtml(input.title)}</title>
130
- <style>
131
- :root { color-scheme: light dark; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
132
- body { min-height: 100vh; margin: 0; display: grid; place-items: center; background: #101010; color: #f5f1ea; }
133
- main { width: min(100% - 32px, 440px); }
134
- h1 { font-size: 1.5rem; line-height: 1.2; margin: 0 0 12px; }
135
- p { color: #cfc7bc; line-height: 1.55; margin: 0 0 24px; }
136
- button { width: 100%; border: 0; border-radius: 8px; padding: 12px 16px; font: inherit; font-weight: 650; background: #f5c0a8; color: #171412; cursor: pointer; }
137
- button:disabled { cursor: not-allowed; opacity: .55; }
138
- .error { color: #ffb4a8; }
139
- </style>
140
- </head>
141
- <body>
142
- <main>
143
- <h1>${escapeHtml(input.title)}</h1>
144
- <p class="${input.disabled ? 'error' : ''}" id="status">${escapeHtml(input.details)}</p>
125
+ const contentHtml = `<p class="ns-lede ${input.disabled ? 'ns-error' : ''}" id="status">${escapeHtml(input.details)}</p>
145
126
  <form id="firebase-auth-form" method="post" action="${escapeAttribute(input.expectedRedirectUri)}">
146
127
  <input type="hidden" name="state" value="${escapeAttribute(input.state)}">
147
128
  <input type="hidden" name="id_token" id="id-token">
148
129
  <input type="hidden" name="refresh_token" id="refresh-token">
149
- <button type="button" id="firebase-sign-in" ${input.disabled ? 'disabled' : ''}>Continue with Google</button>
150
- </form>
151
- </main>
152
- <script type="module">
130
+ <div class="ns-row"><span class="btn-glow"><button type="button" id="firebase-sign-in" class="btn btn-primary" ${input.disabled ? 'disabled' : ''}><svg width="18" height="18" viewBox="0 0 18 18" style="flex:none" aria-hidden="true"><path fill="#4285F4" d="M17.64 9.205c0-.639-.057-1.252-.164-1.841H9v3.481h4.844a4.14 4.14 0 0 1-1.796 2.716v2.259h2.908c1.702-1.567 2.684-3.875 2.684-6.615z"/><path fill="#34A853" d="M9 18c2.43 0 4.467-.806 5.956-2.18l-2.908-2.259c-.806.54-1.837.86-3.048.86-2.344 0-4.328-1.584-5.036-3.711H.957v2.332A8.997 8.997 0 0 0 9 18z"/><path fill="#FBBC05" d="M3.964 10.71A5.41 5.41 0 0 1 3.682 9c0-.593.102-1.17.282-1.71V4.958H.957A8.997 8.997 0 0 0 0 9c0 1.452.348 2.827.957 4.042l3.007-2.332z"/><path fill="#EA4335" d="M9 3.58c1.321 0 2.508.454 3.44 1.345l2.582-2.58C13.463.891 11.426 0 9 0A8.997 8.997 0 0 0 .957 4.958L3.964 7.29C4.672 5.163 6.656 3.58 9 3.58z"/></svg>Continue with Google</button></span></div>
131
+ </form>`;
132
+ const scriptHtml = `<script type="module">
153
133
  const firebaseConfig = ${configJson};
154
134
  const tenantId = ${tenantJson};
155
135
  const disabled = ${JSON.stringify(input.disabled)};
@@ -180,9 +160,14 @@ function htmlPage(input) {
180
160
  }
181
161
  });
182
162
  }
183
- </script>
184
- </body>
185
- </html>`;
163
+ </script>`;
164
+ return renderOAuthPage({
165
+ title: input.title,
166
+ kicker: 'Sign in',
167
+ heading: input.title,
168
+ contentHtml,
169
+ scriptHtml,
170
+ });
186
171
  }
187
172
  function firebaseCallbackUrl(issuer) {
188
173
  return `${issuer}${FIREBASE_CALLBACK_PATH}`;
@@ -1 +1 @@
1
- {"version":3,"file":"customer-bridge.js","sourceRoot":"","sources":["../../src/oauth/customer-bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"customer-bridge.js","sourceRoot":"","sources":["../../src/oauth/customer-bridge.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import type { JSONWebKeySet } from 'jose';
4
4
  import type { AssetStore } from './assets.js';
5
5
  import type { ControlPlaneSignupMode, DeployAuthGate } from './auth/deploy-gate.js';
6
6
  import type { BuildInfo } from './build-info.js';
7
+ import type { CommercialPlanCatalog } from './commercial-plans.js';
7
8
  import type { LoadedServiceModule } from './modules/host.js';
8
9
  import type { PolicyAssignmentStore, PolicyCounterStore } from './policy.js';
9
10
  import type { AuditSink } from './store/audit.js';
@@ -32,6 +33,12 @@ export interface ServiceOptions {
32
33
  readonly assetPublicBaseUrl?: string;
33
34
  /** Optional service clock for deterministic tests around time-windowed policy and admission behavior. */
34
35
  readonly clock?: () => Date;
36
+ /**
37
+ * Retention window for archived apps (ADR 0117): the opportunistic sweeper hard-deletes an app's
38
+ * deployment records + managed config this many days after it was archived, and restores past the
39
+ * window answer 410 Gone. Default: 30, overridable via `NOODLE_ARCHIVE_RETENTION_DAYS`.
40
+ */
41
+ readonly archiveRetentionDays?: number;
35
42
  /** Structured logger for deploy + request lifecycle events. Default: a no-op logger. */
36
43
  readonly logger?: Logger;
37
44
  /**
@@ -75,6 +82,8 @@ export interface ServiceOptions {
75
82
  readonly policyCacheTtlMs?: number;
76
83
  /** Mutable quota/rate counter plane for managed policy enforcement. */
77
84
  readonly policyCounterStore?: PolicyCounterStore;
85
+ /** Override the commercial plan catalog for deterministic tests or self-hosted policy tuning. */
86
+ readonly commercialPlanCatalog?: CommercialPlanCatalog;
78
87
  /**
79
88
  * Tenant-safe developer-facing app log store (M3, [ADR 0101](../../../docs/decisions/0101-tenant-safe-user-app-logs.md)).
80
89
  * Backs `GET /v1/orgs/{org}/apps/{app}/envs/{env}/logs` and `noodle logs`. Records are tenant-scoped and
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,6 @@ import type { TenantRef } from './store.js';
5
5
  export declare function missingCapabilityErrors(required: readonly CapabilityName[], available: readonly CapabilityName[]): readonly DeployError[];
6
6
  export declare function missingSecretErrors(bindings: readonly SecretBinding[], secrets: Readonly<Record<string, string>>): DeployError[];
7
7
  export declare function missingVariableErrors(bindings: readonly string[], variables: Readonly<Record<string, string>>): DeployError[];
8
- export declare function tenantMcpUrl(base: string, tenant: TenantRef): string;
8
+ export declare function tenantMcpUrl(base: string, tenant: TenantRef, serverVersion?: string): string;
9
9
  export declare function missingSecretNames(errors: readonly DeployError[]): string[];
10
10
  //# sourceMappingURL=registry-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry-helpers.d.ts","sourceRoot":"","sources":["../src/registry-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,SAAS,cAAc,EAAE,EACnC,SAAS,EAAE,SAAS,cAAc,EAAE,GACnC,SAAS,WAAW,EAAE,CASxB;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,SAAS,aAAa,EAAE,EAClC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACxC,WAAW,EAAE,CAef;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC1C,WAAW,EAAE,CAcf;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,CAIpE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,EAAE,CAQ3E"}
1
+ {"version":3,"file":"registry-helpers.d.ts","sourceRoot":"","sources":["../src/registry-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,SAAS,cAAc,EAAE,EACnC,SAAS,EAAE,SAAS,cAAc,EAAE,GACnC,SAAS,WAAW,EAAE,CASxB;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,SAAS,aAAa,EAAE,EAClC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACxC,WAAW,EAAE,CAef;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC1C,WAAW,EAAE,CAcf;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAM5F;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,EAAE,CAQ3E"}
@@ -1,3 +1,4 @@
1
+ import { serverVersionPathSegment } from '@noodle-borg/module';
1
2
  export function missingCapabilityErrors(required, available) {
2
3
  const enabled = new Set(available);
3
4
  return required
@@ -40,10 +41,11 @@ export function missingVariableErrors(bindings, variables) {
40
41
  }
41
42
  return errors;
42
43
  }
43
- export function tenantMcpUrl(base, tenant) {
44
+ export function tenantMcpUrl(base, tenant, serverVersion) {
45
+ const versionPath = serverVersion !== undefined ? `/${serverVersionPathSegment(serverVersion)}` : '';
44
46
  return tenant.env === 'prod'
45
- ? `${base}/o/${tenant.org}/${tenant.app}/mcp`
46
- : `${base}/o/${tenant.org}/${tenant.app}/${tenant.env}/mcp`;
47
+ ? `${base}/o/${tenant.org}/${tenant.app}${versionPath}/mcp`
48
+ : `${base}/o/${tenant.org}/${tenant.app}/${tenant.env}${versionPath}/mcp`;
47
49
  }
48
50
  export function missingSecretNames(errors) {
49
51
  const names = new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"registry-helpers.js","sourceRoot":"","sources":["../src/registry-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry-helpers.js","sourceRoot":"","sources":["../src/registry-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Registry state operations that work over the {@link ServerRegistry}'s private maps: the no-store
3
+ * in-memory activation fallback and the app archive/restore/sweep cache reconciliation (ADR 0117).
4
+ * The registry passes a {@link RegistryStateView} of its private fields; store-backed calls hit the
5
+ * durable store first, then reconcile the in-process caches so no instance keeps serving stale state.
6
+ */
7
+ import type { ServedTarget } from '@noodle-borg/transport-http';
8
+ import type { AppArchiveResult, AppRestoreResult, ArtifactStore, DeployRecord, TenantRef } from './store.js';
9
+ export interface RegistryStateView {
10
+ readonly store: ArtifactStore | undefined;
11
+ readonly records: Map<string, DeployRecord>;
12
+ readonly servers: Map<string, ServedTarget>;
13
+ readonly activeTenants: Map<string, string>;
14
+ }
15
+ /** No-store activation fallback (moved verbatim from `ServerRegistry.#activateInMemory`). */
16
+ export declare function activateInMemory(records: Map<string, DeployRecord>, ref: TenantRef, deploymentId: string): {
17
+ readonly active: DeployRecord;
18
+ readonly previousActive?: DeployRecord;
19
+ readonly alreadyActive: boolean;
20
+ } | undefined;
21
+ export declare function registryAppArchivedAt(state: RegistryStateView, org: string, app: string): Promise<string | undefined>;
22
+ export declare function registryArchiveApp(state: RegistryStateView, org: string, app: string, at: string): Promise<AppArchiveResult | undefined>;
23
+ export declare function registryRestoreApp(state: RegistryStateView, org: string, app: string): Promise<AppRestoreResult | undefined>;
24
+ export declare function registrySweepArchived(state: RegistryStateView, before: string): Promise<readonly DeployRecord[]>;
25
+ //# sourceMappingURL=registry-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-state.d.ts","sourceRoot":"","sources":["../src/registry-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAShE,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,SAAS,EACV,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EAClC,GAAG,EAAE,SAAS,EACd,YAAY,EAAE,MAAM,GAElB;IACE,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC,GACD,SAAS,CAyBZ;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,iBAAiB,EACxB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAK7B;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,iBAAiB,EACxB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAYvC;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,iBAAiB,EACxB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAYvC;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAgBlC"}