@noodleseed/one 0.58.0 → 0.60.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 (530) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +72 -7
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/alerts-ops.d.ts +2 -1
  5. package/dist/commands/alerts-ops.d.ts.map +1 -1
  6. package/dist/commands/alerts-ops.js.map +1 -1
  7. package/dist/commands/analytics-ops.d.ts +4 -3
  8. package/dist/commands/analytics-ops.d.ts.map +1 -1
  9. package/dist/commands/analytics-ops.js.map +1 -1
  10. package/dist/commands/apps-ops.d.ts +5 -4
  11. package/dist/commands/apps-ops.d.ts.map +1 -1
  12. package/dist/commands/apps-ops.js.map +1 -1
  13. package/dist/commands/archive-ops.d.ts +3 -2
  14. package/dist/commands/archive-ops.d.ts.map +1 -1
  15. package/dist/commands/archive-ops.js.map +1 -1
  16. package/dist/commands/assistant-embed-ops.d.ts +9 -1
  17. package/dist/commands/assistant-embed-ops.d.ts.map +1 -1
  18. package/dist/commands/assistant-embed-ops.js.map +1 -1
  19. package/dist/commands/assistant-ops.d.ts +2 -1
  20. package/dist/commands/assistant-ops.d.ts.map +1 -1
  21. package/dist/commands/assistant-ops.js +3 -2
  22. package/dist/commands/assistant-ops.js.map +1 -1
  23. package/dist/commands/audit-ops.d.ts +2 -1
  24. package/dist/commands/audit-ops.d.ts.map +1 -1
  25. package/dist/commands/audit-ops.js.map +1 -1
  26. package/dist/commands/auth-ops.d.ts +2 -1
  27. package/dist/commands/auth-ops.d.ts.map +1 -1
  28. package/dist/commands/auth-ops.js.map +1 -1
  29. package/dist/commands/author-loop.d.ts +4 -3
  30. package/dist/commands/author-loop.d.ts.map +1 -1
  31. package/dist/commands/author-loop.js.map +1 -1
  32. package/dist/commands/billing-apply-ops.d.ts +2 -1
  33. package/dist/commands/billing-apply-ops.d.ts.map +1 -1
  34. package/dist/commands/billing-apply-ops.js.map +1 -1
  35. package/dist/commands/billing-enforcement-activation-ops.d.ts +2 -1
  36. package/dist/commands/billing-enforcement-activation-ops.d.ts.map +1 -1
  37. package/dist/commands/billing-enforcement-activation-ops.js.map +1 -1
  38. package/dist/commands/billing-enforcement-ops.d.ts +2 -1
  39. package/dist/commands/billing-enforcement-ops.d.ts.map +1 -1
  40. package/dist/commands/billing-enforcement-ops.js.map +1 -1
  41. package/dist/commands/billing-metering-ops.d.ts +2 -1
  42. package/dist/commands/billing-metering-ops.d.ts.map +1 -1
  43. package/dist/commands/billing-metering-ops.js.map +1 -1
  44. package/dist/commands/billing-metering-validation-ops.d.ts +2 -1
  45. package/dist/commands/billing-metering-validation-ops.d.ts.map +1 -1
  46. package/dist/commands/billing-metering-validation-ops.js.map +1 -1
  47. package/dist/commands/billing-ops.d.ts +2 -1
  48. package/dist/commands/billing-ops.d.ts.map +1 -1
  49. package/dist/commands/billing-ops.js.map +1 -1
  50. package/dist/commands/billing-read-ops.d.ts +3 -2
  51. package/dist/commands/billing-read-ops.d.ts.map +1 -1
  52. package/dist/commands/billing-read-ops.js.map +1 -1
  53. package/dist/commands/billing-stripe-ops.d.ts +2 -1
  54. package/dist/commands/billing-stripe-ops.d.ts.map +1 -1
  55. package/dist/commands/billing-stripe-ops.js +1 -0
  56. package/dist/commands/billing-stripe-ops.js.map +1 -1
  57. package/dist/commands/config-values.d.ts +2 -1
  58. package/dist/commands/config-values.d.ts.map +1 -1
  59. package/dist/commands/config-values.js.map +1 -1
  60. package/dist/commands/deploy-github-hint.d.ts +6 -0
  61. package/dist/commands/deploy-github-hint.d.ts.map +1 -0
  62. package/dist/commands/deploy-github-hint.js +53 -0
  63. package/dist/commands/deploy-github-hint.js.map +1 -0
  64. package/dist/commands/deploy-ops.d.ts +5 -7
  65. package/dist/commands/deploy-ops.d.ts.map +1 -1
  66. package/dist/commands/deploy-ops.js +14 -54
  67. package/dist/commands/deploy-ops.js.map +1 -1
  68. package/dist/commands/deploy-status-ops.d.ts +5 -3
  69. package/dist/commands/deploy-status-ops.d.ts.map +1 -1
  70. package/dist/commands/deploy-status-ops.js +9 -1
  71. package/dist/commands/deploy-status-ops.js.map +1 -1
  72. package/dist/commands/deploy-target.d.ts +2 -1
  73. package/dist/commands/deploy-target.d.ts.map +1 -1
  74. package/dist/commands/deploy-target.js.map +1 -1
  75. package/dist/commands/deployments-ops.d.ts +5 -4
  76. package/dist/commands/deployments-ops.d.ts.map +1 -1
  77. package/dist/commands/deployments-ops.js.map +1 -1
  78. package/dist/commands/devtools.d.ts +2 -1
  79. package/dist/commands/devtools.d.ts.map +1 -1
  80. package/dist/commands/devtools.js.map +1 -1
  81. package/dist/commands/diagnostics-ops.d.ts +3 -2
  82. package/dist/commands/diagnostics-ops.d.ts.map +1 -1
  83. package/dist/commands/diagnostics-ops.js.map +1 -1
  84. package/dist/commands/envs-ops.d.ts +4 -3
  85. package/dist/commands/envs-ops.d.ts.map +1 -1
  86. package/dist/commands/envs-ops.js.map +1 -1
  87. package/dist/commands/feedback-ops.d.ts +2 -1
  88. package/dist/commands/feedback-ops.d.ts.map +1 -1
  89. package/dist/commands/feedback-ops.js.map +1 -1
  90. package/dist/commands/github-ops.d.ts +5 -4
  91. package/dist/commands/github-ops.d.ts.map +1 -1
  92. package/dist/commands/github-ops.js.map +1 -1
  93. package/dist/commands/github-runs-ops.d.ts +2 -1
  94. package/dist/commands/github-runs-ops.d.ts.map +1 -1
  95. package/dist/commands/github-runs-ops.js.map +1 -1
  96. package/dist/commands/github-shared.d.ts +2 -1
  97. package/dist/commands/github-shared.d.ts.map +1 -1
  98. package/dist/commands/github-shared.js.map +1 -1
  99. package/dist/commands/logs-ops.d.ts +2 -1
  100. package/dist/commands/logs-ops.d.ts.map +1 -1
  101. package/dist/commands/logs-ops.js.map +1 -1
  102. package/dist/commands/org-admin.d.ts +3 -2
  103. package/dist/commands/org-admin.d.ts.map +1 -1
  104. package/dist/commands/org-admin.js.map +1 -1
  105. package/dist/commands/org-openai-challenge.d.ts +2 -1
  106. package/dist/commands/org-openai-challenge.d.ts.map +1 -1
  107. package/dist/commands/org-openai-challenge.js.map +1 -1
  108. package/dist/commands/policy-ops.d.ts +2 -1
  109. package/dist/commands/policy-ops.d.ts.map +1 -1
  110. package/dist/commands/policy-ops.js.map +1 -1
  111. package/dist/commands/resource-shared.d.ts +2 -1
  112. package/dist/commands/resource-shared.d.ts.map +1 -1
  113. package/dist/commands/resource-shared.js.map +1 -1
  114. package/dist/commands/service-ops.d.ts +2 -1
  115. package/dist/commands/service-ops.d.ts.map +1 -1
  116. package/dist/commands/service-ops.js.map +1 -1
  117. package/dist/commands/session.d.ts +12 -4
  118. package/dist/commands/session.d.ts.map +1 -1
  119. package/dist/commands/session.js +40 -9
  120. package/dist/commands/session.js.map +1 -1
  121. package/dist/commands/shared.d.ts +2 -1
  122. package/dist/commands/shared.d.ts.map +1 -1
  123. package/dist/commands/shared.js.map +1 -1
  124. package/dist/config.d.ts +17 -8
  125. package/dist/config.d.ts.map +1 -1
  126. package/dist/config.js +2 -2
  127. package/dist/config.js.map +1 -1
  128. package/dist/control-plane.d.ts +10 -3
  129. package/dist/control-plane.d.ts.map +1 -1
  130. package/dist/control-plane.js +38 -2
  131. package/dist/control-plane.js.map +1 -1
  132. package/dist/doctor.d.ts +2 -1
  133. package/dist/doctor.d.ts.map +1 -1
  134. package/dist/doctor.js.map +1 -1
  135. package/dist/first-run-entry.d.ts +2 -1
  136. package/dist/first-run-entry.d.ts.map +1 -1
  137. package/dist/first-run-entry.js.map +1 -1
  138. package/dist/first-run.d.ts +2 -1
  139. package/dist/first-run.d.ts.map +1 -1
  140. package/dist/first-run.js.map +1 -1
  141. package/dist/index.d.ts +4 -1
  142. package/dist/index.d.ts.map +1 -1
  143. package/dist/index.js +3 -0
  144. package/dist/index.js.map +1 -1
  145. package/dist/local-target.d.ts +2 -1
  146. package/dist/local-target.d.ts.map +1 -1
  147. package/dist/local-target.js.map +1 -1
  148. package/dist/plugin-mode/build-readiness-contract.d.ts +36 -0
  149. package/dist/plugin-mode/build-readiness-contract.d.ts.map +1 -0
  150. package/dist/plugin-mode/build-readiness-contract.js +107 -0
  151. package/dist/plugin-mode/build-readiness-contract.js.map +1 -0
  152. package/dist/plugin-mode/build-readiness-fingerprint.d.ts +7 -0
  153. package/dist/plugin-mode/build-readiness-fingerprint.d.ts.map +1 -0
  154. package/dist/plugin-mode/build-readiness-fingerprint.js +83 -0
  155. package/dist/plugin-mode/build-readiness-fingerprint.js.map +1 -0
  156. package/dist/plugin-mode/build-readiness-recorder.d.ts +15 -0
  157. package/dist/plugin-mode/build-readiness-recorder.d.ts.map +1 -0
  158. package/dist/plugin-mode/build-readiness-recorder.js +150 -0
  159. package/dist/plugin-mode/build-readiness-recorder.js.map +1 -0
  160. package/dist/plugin-mode/build-readiness-server.d.ts +22 -0
  161. package/dist/plugin-mode/build-readiness-server.d.ts.map +1 -0
  162. package/dist/plugin-mode/build-readiness-server.js +322 -0
  163. package/dist/plugin-mode/build-readiness-server.js.map +1 -0
  164. package/dist/plugin-mode/build-readiness-store.d.ts +16 -0
  165. package/dist/plugin-mode/build-readiness-store.d.ts.map +1 -0
  166. package/dist/plugin-mode/build-readiness-store.js +198 -0
  167. package/dist/plugin-mode/build-readiness-store.js.map +1 -0
  168. package/dist/plugin-mode/build-readiness-tools.d.ts +47 -0
  169. package/dist/plugin-mode/build-readiness-tools.d.ts.map +1 -0
  170. package/dist/plugin-mode/build-readiness-tools.js +159 -0
  171. package/dist/plugin-mode/build-readiness-tools.js.map +1 -0
  172. package/dist/plugin-mode/build-readiness-widget.css.d.ts +2 -0
  173. package/dist/plugin-mode/build-readiness-widget.css.d.ts.map +1 -0
  174. package/dist/plugin-mode/build-readiness-widget.css.js +217 -0
  175. package/dist/plugin-mode/build-readiness-widget.css.js.map +1 -0
  176. package/dist/plugin-mode/build-readiness-widget.d.ts +28 -0
  177. package/dist/plugin-mode/build-readiness-widget.d.ts.map +1 -0
  178. package/dist/plugin-mode/build-readiness-widget.js +60 -0
  179. package/dist/plugin-mode/build-readiness-widget.js.map +1 -0
  180. package/dist/plugin-mode/compatibility.d.ts +22 -0
  181. package/dist/plugin-mode/compatibility.d.ts.map +1 -0
  182. package/dist/plugin-mode/compatibility.js +59 -0
  183. package/dist/plugin-mode/compatibility.js.map +1 -0
  184. package/dist/plugin-mode/plugin-mcp-bootstrap.d.ts +13 -0
  185. package/dist/plugin-mode/plugin-mcp-bootstrap.d.ts.map +1 -0
  186. package/dist/plugin-mode/plugin-mcp-bootstrap.js +90 -0
  187. package/dist/plugin-mode/plugin-mcp-bootstrap.js.map +1 -0
  188. package/dist/plugin-mode/profile.d.ts +16 -0
  189. package/dist/plugin-mode/profile.d.ts.map +1 -0
  190. package/dist/plugin-mode/profile.js +66 -0
  191. package/dist/plugin-mode/profile.js.map +1 -0
  192. package/dist/plugin-mode/service-compatibility.d.ts +15 -0
  193. package/dist/plugin-mode/service-compatibility.d.ts.map +1 -0
  194. package/dist/plugin-mode/service-compatibility.js +57 -0
  195. package/dist/plugin-mode/service-compatibility.js.map +1 -0
  196. package/dist/update-check.d.ts +2 -16
  197. package/dist/update-check.d.ts.map +1 -1
  198. package/dist/update-check.js.map +1 -1
  199. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +1 -1
  200. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
  201. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts +1 -1
  202. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
  203. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +1 -1
  204. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
  205. package/node_modules/@noodle-borg/agent-kit/dist/index.d.ts +3 -0
  206. package/node_modules/@noodle-borg/agent-kit/dist/index.d.ts.map +1 -1
  207. package/node_modules/@noodle-borg/agent-kit/dist/index.js +3 -0
  208. package/node_modules/@noodle-borg/agent-kit/dist/index.js.map +1 -1
  209. package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.d.ts +5 -0
  210. package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.d.ts.map +1 -1
  211. package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.js +106 -28
  212. package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.js.map +1 -1
  213. package/node_modules/@noodle-borg/agent-kit/dist/plugin-compatibility.d.ts +22 -0
  214. package/node_modules/@noodle-borg/agent-kit/dist/plugin-compatibility.d.ts.map +1 -0
  215. package/node_modules/@noodle-borg/agent-kit/dist/plugin-compatibility.js +100 -0
  216. package/node_modules/@noodle-borg/agent-kit/dist/plugin-compatibility.js.map +1 -0
  217. package/node_modules/@noodle-borg/agent-kit/dist/plugin-launcher.d.ts +8 -0
  218. package/node_modules/@noodle-borg/agent-kit/dist/plugin-launcher.d.ts.map +1 -0
  219. package/node_modules/@noodle-borg/agent-kit/dist/plugin-launcher.js +55 -0
  220. package/node_modules/@noodle-borg/agent-kit/dist/plugin-launcher.js.map +1 -0
  221. package/node_modules/@noodle-borg/agent-kit/dist/plugin-manifests.d.ts +27 -0
  222. package/node_modules/@noodle-borg/agent-kit/dist/plugin-manifests.d.ts.map +1 -0
  223. package/node_modules/@noodle-borg/agent-kit/dist/plugin-manifests.js +108 -0
  224. package/node_modules/@noodle-borg/agent-kit/dist/plugin-manifests.js.map +1 -0
  225. package/node_modules/@noodle-borg/agent-kit/dist/plugin-marketplace-docs.d.ts +9 -0
  226. package/node_modules/@noodle-borg/agent-kit/dist/plugin-marketplace-docs.d.ts.map +1 -0
  227. package/node_modules/@noodle-borg/agent-kit/dist/plugin-marketplace-docs.js +121 -0
  228. package/node_modules/@noodle-borg/agent-kit/dist/plugin-marketplace-docs.js.map +1 -0
  229. package/node_modules/@noodle-borg/agent-kit/dist/plugin-submission.d.ts +130 -0
  230. package/node_modules/@noodle-borg/agent-kit/dist/plugin-submission.d.ts.map +1 -0
  231. package/node_modules/@noodle-borg/agent-kit/dist/plugin-submission.js +220 -0
  232. package/node_modules/@noodle-borg/agent-kit/dist/plugin-submission.js.map +1 -0
  233. package/node_modules/@noodle-borg/agent-kit/dist/skill-content.d.ts.map +1 -1
  234. package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js +2 -0
  235. package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js.map +1 -1
  236. package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.d.ts.map +1 -1
  237. package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.js +5 -0
  238. package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.js.map +1 -1
  239. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  240. package/node_modules/@noodle-borg/auth/dist/jwt-issuer.d.ts +4 -0
  241. package/node_modules/@noodle-borg/auth/dist/jwt-issuer.d.ts.map +1 -1
  242. package/node_modules/@noodle-borg/auth/dist/jwt-issuer.js +2 -0
  243. package/node_modules/@noodle-borg/auth/dist/jwt-issuer.js.map +1 -1
  244. package/node_modules/@noodle-borg/auth/dist/verify.d.ts +4 -0
  245. package/node_modules/@noodle-borg/auth/dist/verify.d.ts.map +1 -1
  246. package/node_modules/@noodle-borg/auth/dist/verify.js +10 -0
  247. package/node_modules/@noodle-borg/auth/dist/verify.js.map +1 -1
  248. package/node_modules/@noodle-borg/developer-mcp/dist/capabilities.d.ts +9 -0
  249. package/node_modules/@noodle-borg/developer-mcp/dist/capabilities.d.ts.map +1 -0
  250. package/node_modules/@noodle-borg/developer-mcp/dist/capabilities.js +41 -0
  251. package/node_modules/@noodle-borg/developer-mcp/dist/capabilities.js.map +1 -0
  252. package/node_modules/@noodle-borg/developer-mcp/dist/contracts.d.ts +637 -0
  253. package/node_modules/@noodle-borg/developer-mcp/dist/contracts.d.ts.map +1 -0
  254. package/node_modules/@noodle-borg/developer-mcp/dist/contracts.js +364 -0
  255. package/node_modules/@noodle-borg/developer-mcp/dist/contracts.js.map +1 -0
  256. package/node_modules/@noodle-borg/developer-mcp/dist/diagnosis.d.ts +79 -0
  257. package/node_modules/@noodle-borg/developer-mcp/dist/diagnosis.d.ts.map +1 -0
  258. package/node_modules/@noodle-borg/developer-mcp/dist/diagnosis.js +138 -0
  259. package/node_modules/@noodle-borg/developer-mcp/dist/diagnosis.js.map +1 -0
  260. package/node_modules/@noodle-borg/developer-mcp/dist/index.d.ts +12 -0
  261. package/node_modules/@noodle-borg/developer-mcp/dist/index.d.ts.map +1 -0
  262. package/node_modules/@noodle-borg/developer-mcp/dist/index.js +12 -0
  263. package/node_modules/@noodle-borg/developer-mcp/dist/index.js.map +1 -0
  264. package/node_modules/@noodle-borg/developer-mcp/dist/port.d.ts +16 -0
  265. package/node_modules/@noodle-borg/developer-mcp/dist/port.d.ts.map +1 -0
  266. package/node_modules/@noodle-borg/developer-mcp/dist/port.js +9 -0
  267. package/node_modules/@noodle-borg/developer-mcp/dist/port.js.map +1 -0
  268. package/node_modules/@noodle-borg/developer-mcp/dist/prompts.d.ts +16 -0
  269. package/node_modules/@noodle-borg/developer-mcp/dist/prompts.d.ts.map +1 -0
  270. package/node_modules/@noodle-borg/developer-mcp/dist/prompts.js +51 -0
  271. package/node_modules/@noodle-borg/developer-mcp/dist/prompts.js.map +1 -0
  272. package/node_modules/@noodle-borg/developer-mcp/dist/resources.d.ts +13 -0
  273. package/node_modules/@noodle-borg/developer-mcp/dist/resources.d.ts.map +1 -0
  274. package/node_modules/@noodle-borg/developer-mcp/dist/resources.js +90 -0
  275. package/node_modules/@noodle-borg/developer-mcp/dist/resources.js.map +1 -0
  276. package/node_modules/@noodle-borg/developer-mcp/dist/results.d.ts +31 -0
  277. package/node_modules/@noodle-borg/developer-mcp/dist/results.d.ts.map +1 -0
  278. package/node_modules/@noodle-borg/developer-mcp/dist/results.js +80 -0
  279. package/node_modules/@noodle-borg/developer-mcp/dist/results.js.map +1 -0
  280. package/node_modules/@noodle-borg/developer-mcp/dist/server.d.ts +19 -0
  281. package/node_modules/@noodle-borg/developer-mcp/dist/server.d.ts.map +1 -0
  282. package/node_modules/@noodle-borg/developer-mcp/dist/server.js +79 -0
  283. package/node_modules/@noodle-borg/developer-mcp/dist/server.js.map +1 -0
  284. package/node_modules/@noodle-borg/developer-mcp/dist/tools/apps.d.ts +43 -0
  285. package/node_modules/@noodle-borg/developer-mcp/dist/tools/apps.d.ts.map +1 -0
  286. package/node_modules/@noodle-borg/developer-mcp/dist/tools/apps.js +77 -0
  287. package/node_modules/@noodle-borg/developer-mcp/dist/tools/apps.js.map +1 -0
  288. package/node_modules/@noodle-borg/developer-mcp/dist/tools/context.d.ts +4 -0
  289. package/node_modules/@noodle-borg/developer-mcp/dist/tools/context.d.ts.map +1 -0
  290. package/node_modules/@noodle-borg/developer-mcp/dist/tools/context.js +21 -0
  291. package/node_modules/@noodle-borg/developer-mcp/dist/tools/context.js.map +1 -0
  292. package/node_modules/@noodle-borg/developer-mcp/dist/tools/deployments.d.ts +61 -0
  293. package/node_modules/@noodle-borg/developer-mcp/dist/tools/deployments.d.ts.map +1 -0
  294. package/node_modules/@noodle-borg/developer-mcp/dist/tools/deployments.js +37 -0
  295. package/node_modules/@noodle-borg/developer-mcp/dist/tools/deployments.js.map +1 -0
  296. package/node_modules/@noodle-borg/developer-mcp/dist/tools/diagnose.d.ts +29 -0
  297. package/node_modules/@noodle-borg/developer-mcp/dist/tools/diagnose.d.ts.map +1 -0
  298. package/node_modules/@noodle-borg/developer-mcp/dist/tools/diagnose.js +83 -0
  299. package/node_modules/@noodle-borg/developer-mcp/dist/tools/diagnose.js.map +1 -0
  300. package/node_modules/@noodle-borg/developer-mcp/dist/tools/index.d.ts +7 -0
  301. package/node_modules/@noodle-borg/developer-mcp/dist/tools/index.d.ts.map +1 -0
  302. package/node_modules/@noodle-borg/developer-mcp/dist/tools/index.js +7 -0
  303. package/node_modules/@noodle-borg/developer-mcp/dist/tools/index.js.map +1 -0
  304. package/node_modules/@noodle-borg/developer-mcp/dist/tools/operations.d.ts +138 -0
  305. package/node_modules/@noodle-borg/developer-mcp/dist/tools/operations.d.ts.map +1 -0
  306. package/node_modules/@noodle-borg/developer-mcp/dist/tools/operations.js +99 -0
  307. package/node_modules/@noodle-borg/developer-mcp/dist/tools/operations.js.map +1 -0
  308. package/node_modules/@noodle-borg/developer-mcp/dist/tools/rollback.d.ts +24 -0
  309. package/node_modules/@noodle-borg/developer-mcp/dist/tools/rollback.d.ts.map +1 -0
  310. package/node_modules/@noodle-borg/developer-mcp/dist/tools/rollback.js +59 -0
  311. package/node_modules/@noodle-borg/developer-mcp/dist/tools/rollback.js.map +1 -0
  312. package/node_modules/@noodle-borg/developer-mcp/dist/widget-links.d.ts +16 -0
  313. package/node_modules/@noodle-borg/developer-mcp/dist/widget-links.d.ts.map +1 -0
  314. package/node_modules/@noodle-borg/developer-mcp/dist/widget-links.js +20 -0
  315. package/node_modules/@noodle-borg/developer-mcp/dist/widget-links.js.map +1 -0
  316. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/analytics.d.ts +2 -0
  317. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/analytics.d.ts.map +1 -0
  318. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/analytics.js +6 -0
  319. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/analytics.js.map +1 -0
  320. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/app-overview.d.ts +2 -0
  321. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/app-overview.d.ts.map +1 -0
  322. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/app-overview.js +6 -0
  323. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/app-overview.js.map +1 -0
  324. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/deployment-detail.d.ts +2 -0
  325. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/deployment-detail.d.ts.map +1 -0
  326. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/deployment-detail.js +7 -0
  327. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/deployment-detail.js.map +1 -0
  328. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/operations.d.ts +2 -0
  329. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/operations.d.ts.map +1 -0
  330. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/operations.js +6 -0
  331. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/operations.js.map +1 -0
  332. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/resources.d.ts +37 -0
  333. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/resources.d.ts.map +1 -0
  334. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/resources.js +76 -0
  335. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/resources.js.map +1 -0
  336. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/shared.d.ts +30 -0
  337. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/shared.d.ts.map +1 -0
  338. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/shared.js +23 -0
  339. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/shared.js.map +1 -0
  340. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/styles.d.ts +2 -0
  341. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/styles.d.ts.map +1 -0
  342. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/styles.js +153 -0
  343. package/node_modules/@noodle-borg/developer-mcp/dist/widgets/styles.js.map +1 -0
  344. package/node_modules/@noodle-borg/developer-mcp/package.json +37 -0
  345. package/node_modules/@noodle-borg/module/dist/contract.d.ts +4 -0
  346. package/node_modules/@noodle-borg/module/dist/contract.d.ts.map +1 -1
  347. package/node_modules/@noodle-borg/module/dist/contract.js.map +1 -1
  348. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts +7 -1
  349. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts.map +1 -1
  350. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js +17 -5
  351. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js.map +1 -1
  352. package/node_modules/@noodle-borg/service/dist/auth/developer-grant-guard.d.ts +16 -0
  353. package/node_modules/@noodle-borg/service/dist/auth/developer-grant-guard.d.ts.map +1 -0
  354. package/node_modules/@noodle-borg/service/dist/auth/developer-grant-guard.js +40 -0
  355. package/node_modules/@noodle-borg/service/dist/auth/developer-grant-guard.js.map +1 -0
  356. package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-checkouts.d.ts +7 -0
  357. package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-checkouts.d.ts.map +1 -0
  358. package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-checkouts.js +247 -0
  359. package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-checkouts.js.map +1 -0
  360. package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-schema.d.ts.map +1 -1
  361. package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-schema.js +14 -0
  362. package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-schema.js.map +1 -1
  363. package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-store.d.ts +4 -4
  364. package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-store.d.ts.map +1 -1
  365. package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-store.js +10 -99
  366. package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-store.js.map +1 -1
  367. package/node_modules/@noodle-borg/service/dist/billing/stripe-contract.d.ts +6 -0
  368. package/node_modules/@noodle-borg/service/dist/billing/stripe-contract.d.ts.map +1 -1
  369. package/node_modules/@noodle-borg/service/dist/billing/stripe-contract.js +1 -0
  370. package/node_modules/@noodle-borg/service/dist/billing/stripe-contract.js.map +1 -1
  371. package/node_modules/@noodle-borg/service/dist/billing/stripe-provider.d.ts +3 -0
  372. package/node_modules/@noodle-borg/service/dist/billing/stripe-provider.d.ts.map +1 -1
  373. package/node_modules/@noodle-borg/service/dist/billing/stripe-provider.js +27 -0
  374. package/node_modules/@noodle-borg/service/dist/billing/stripe-provider.js.map +1 -1
  375. package/node_modules/@noodle-borg/service/dist/billing/stripe-service.d.ts +5 -4
  376. package/node_modules/@noodle-borg/service/dist/billing/stripe-service.d.ts.map +1 -1
  377. package/node_modules/@noodle-borg/service/dist/billing/stripe-service.js +112 -43
  378. package/node_modules/@noodle-borg/service/dist/billing/stripe-service.js.map +1 -1
  379. package/node_modules/@noodle-borg/service/dist/billing/stripe-store.d.ts +35 -5
  380. package/node_modules/@noodle-borg/service/dist/billing/stripe-store.d.ts.map +1 -1
  381. package/node_modules/@noodle-borg/service/dist/billing/stripe-store.js +8 -1
  382. package/node_modules/@noodle-borg/service/dist/billing/stripe-store.js.map +1 -1
  383. package/node_modules/@noodle-borg/service/dist/build-info.d.ts +1 -0
  384. package/node_modules/@noodle-borg/service/dist/build-info.d.ts.map +1 -1
  385. package/node_modules/@noodle-borg/service/dist/build-info.js +11 -0
  386. package/node_modules/@noodle-borg/service/dist/build-info.js.map +1 -1
  387. package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.d.ts +30 -0
  388. package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.d.ts.map +1 -0
  389. package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.js +311 -0
  390. package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.js.map +1 -0
  391. package/node_modules/@noodle-borg/service/dist/developer-mcp/inspection.d.ts +69 -0
  392. package/node_modules/@noodle-borg/service/dist/developer-mcp/inspection.d.ts.map +1 -0
  393. package/node_modules/@noodle-borg/service/dist/developer-mcp/inspection.js +118 -0
  394. package/node_modules/@noodle-borg/service/dist/developer-mcp/inspection.js.map +1 -0
  395. package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.d.ts +29 -0
  396. package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.d.ts.map +1 -0
  397. package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.js +223 -0
  398. package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.js.map +1 -0
  399. package/node_modules/@noodle-borg/service/dist/developer-mcp/service-options.d.ts +18 -0
  400. package/node_modules/@noodle-borg/service/dist/developer-mcp/service-options.d.ts.map +1 -0
  401. package/node_modules/@noodle-borg/service/dist/developer-mcp/service-options.js +26 -0
  402. package/node_modules/@noodle-borg/service/dist/developer-mcp/service-options.js.map +1 -0
  403. package/node_modules/@noodle-borg/service/dist/index.d.ts +5 -0
  404. package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
  405. package/node_modules/@noodle-borg/service/dist/index.js +5 -0
  406. package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
  407. package/node_modules/@noodle-borg/service/dist/main.js +1 -0
  408. package/node_modules/@noodle-borg/service/dist/main.js.map +1 -1
  409. package/node_modules/@noodle-borg/service/dist/oauth/app.d.ts.map +1 -1
  410. package/node_modules/@noodle-borg/service/dist/oauth/app.js +5 -0
  411. package/node_modules/@noodle-borg/service/dist/oauth/app.js.map +1 -1
  412. package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.d.ts +6 -0
  413. package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.d.ts.map +1 -1
  414. package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.js +28 -0
  415. package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.js.map +1 -1
  416. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-authorizer.d.ts +48 -0
  417. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-authorizer.d.ts.map +1 -0
  418. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-authorizer.js +90 -0
  419. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-authorizer.js.map +1 -0
  420. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-bootstrap.d.ts +18 -0
  421. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-bootstrap.d.ts.map +1 -0
  422. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-bootstrap.js +29 -0
  423. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-bootstrap.js.map +1 -0
  424. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.d.ts +22 -0
  425. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.d.ts.map +1 -0
  426. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.js +144 -0
  427. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.js.map +1 -0
  428. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.d.ts +12 -0
  429. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.d.ts.map +1 -0
  430. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.js +61 -0
  431. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.js.map +1 -0
  432. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-store-postgres.d.ts +11 -0
  433. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-store-postgres.d.ts.map +1 -0
  434. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-store-postgres.js +89 -0
  435. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-store-postgres.js.map +1 -0
  436. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.d.ts +48 -0
  437. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.d.ts.map +1 -0
  438. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.js +123 -0
  439. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.js.map +1 -0
  440. package/node_modules/@noodle-borg/service/dist/oauth/paths.d.ts.map +1 -1
  441. package/node_modules/@noodle-borg/service/dist/oauth/paths.js +2 -0
  442. package/node_modules/@noodle-borg/service/dist/oauth/paths.js.map +1 -1
  443. package/node_modules/@noodle-borg/service/dist/oauth/provider.d.ts +6 -1
  444. package/node_modules/@noodle-borg/service/dist/oauth/provider.d.ts.map +1 -1
  445. package/node_modules/@noodle-borg/service/dist/oauth/provider.js +53 -0
  446. package/node_modules/@noodle-borg/service/dist/oauth/provider.js.map +1 -1
  447. package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.d.ts.map +1 -1
  448. package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.js +17 -6
  449. package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.js.map +1 -1
  450. package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts +3 -0
  451. package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts.map +1 -1
  452. package/node_modules/@noodle-borg/service/dist/oauth/store.js +2 -0
  453. package/node_modules/@noodle-borg/service/dist/oauth/store.js.map +1 -1
  454. package/node_modules/@noodle-borg/service/dist/oauth/token-issuer.d.ts +2 -0
  455. package/node_modules/@noodle-borg/service/dist/oauth/token-issuer.d.ts.map +1 -1
  456. package/node_modules/@noodle-borg/service/dist/oauth/token-issuer.js +8 -0
  457. package/node_modules/@noodle-borg/service/dist/oauth/token-issuer.js.map +1 -1
  458. package/node_modules/@noodle-borg/service/dist/operations/rollback-deployment.d.ts +52 -0
  459. package/node_modules/@noodle-borg/service/dist/operations/rollback-deployment.d.ts.map +1 -0
  460. package/node_modules/@noodle-borg/service/dist/operations/rollback-deployment.js +120 -0
  461. package/node_modules/@noodle-borg/service/dist/operations/rollback-deployment.js.map +1 -0
  462. package/node_modules/@noodle-borg/service/dist/options.d.ts +7 -1
  463. package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
  464. package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.d.ts +2 -0
  465. package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.d.ts.map +1 -1
  466. package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.js +4 -4
  467. package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.js.map +1 -1
  468. package/node_modules/@noodle-borg/service/dist/routes/analytics.d.ts +4 -3
  469. package/node_modules/@noodle-borg/service/dist/routes/analytics.d.ts.map +1 -1
  470. package/node_modules/@noodle-borg/service/dist/routes/analytics.js +7 -7
  471. package/node_modules/@noodle-borg/service/dist/routes/analytics.js.map +1 -1
  472. package/node_modules/@noodle-borg/service/dist/routes/apps.d.ts +3 -2
  473. package/node_modules/@noodle-borg/service/dist/routes/apps.d.ts.map +1 -1
  474. package/node_modules/@noodle-borg/service/dist/routes/apps.js +28 -7
  475. package/node_modules/@noodle-borg/service/dist/routes/apps.js.map +1 -1
  476. package/node_modules/@noodle-borg/service/dist/routes/billing-stripe.d.ts.map +1 -1
  477. package/node_modules/@noodle-borg/service/dist/routes/billing-stripe.js +4 -2
  478. package/node_modules/@noodle-borg/service/dist/routes/billing-stripe.js.map +1 -1
  479. package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts +12 -1
  480. package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts.map +1 -1
  481. package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +36 -4
  482. package/node_modules/@noodle-borg/service/dist/routes/control-plane.js.map +1 -1
  483. package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts +4 -3
  484. package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts.map +1 -1
  485. package/node_modules/@noodle-borg/service/dist/routes/deployments.js +26 -18
  486. package/node_modules/@noodle-borg/service/dist/routes/deployments.js.map +1 -1
  487. package/node_modules/@noodle-borg/service/dist/routes/diagnostics.d.ts.map +1 -1
  488. package/node_modules/@noodle-borg/service/dist/routes/diagnostics.js +8 -105
  489. package/node_modules/@noodle-borg/service/dist/routes/diagnostics.js.map +1 -1
  490. package/node_modules/@noodle-borg/service/dist/routes/envs.d.ts +3 -2
  491. package/node_modules/@noodle-borg/service/dist/routes/envs.d.ts.map +1 -1
  492. package/node_modules/@noodle-borg/service/dist/routes/envs.js +9 -5
  493. package/node_modules/@noodle-borg/service/dist/routes/envs.js.map +1 -1
  494. package/node_modules/@noodle-borg/service/dist/routes/logs.d.ts +2 -1
  495. package/node_modules/@noodle-borg/service/dist/routes/logs.d.ts.map +1 -1
  496. package/node_modules/@noodle-borg/service/dist/routes/logs.js +3 -3
  497. package/node_modules/@noodle-borg/service/dist/routes/logs.js.map +1 -1
  498. package/node_modules/@noodle-borg/service/dist/routes/plans.d.ts.map +1 -1
  499. package/node_modules/@noodle-borg/service/dist/routes/plans.js +3 -14
  500. package/node_modules/@noodle-borg/service/dist/routes/plans.js.map +1 -1
  501. package/node_modules/@noodle-borg/service/dist/routes/policies.d.ts.map +1 -1
  502. package/node_modules/@noodle-borg/service/dist/routes/policies.js +3 -14
  503. package/node_modules/@noodle-borg/service/dist/routes/policies.js.map +1 -1
  504. package/node_modules/@noodle-borg/service/dist/routes/protected-resource-metadata.d.ts +8 -0
  505. package/node_modules/@noodle-borg/service/dist/routes/protected-resource-metadata.d.ts.map +1 -0
  506. package/node_modules/@noodle-borg/service/dist/routes/protected-resource-metadata.js +51 -0
  507. package/node_modules/@noodle-borg/service/dist/routes/protected-resource-metadata.js.map +1 -0
  508. package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.d.ts +2 -0
  509. package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.d.ts.map +1 -1
  510. package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.js +6 -6
  511. package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.js.map +1 -1
  512. package/node_modules/@noodle-borg/service/dist/routes/rollback.d.ts.map +1 -1
  513. package/node_modules/@noodle-borg/service/dist/routes/rollback.js +25 -86
  514. package/node_modules/@noodle-borg/service/dist/routes/rollback.js.map +1 -1
  515. package/node_modules/@noodle-borg/service/dist/serve-resource-auth.d.ts +11 -0
  516. package/node_modules/@noodle-borg/service/dist/serve-resource-auth.d.ts.map +1 -0
  517. package/node_modules/@noodle-borg/service/dist/serve-resource-auth.js +62 -0
  518. package/node_modules/@noodle-borg/service/dist/serve-resource-auth.js.map +1 -0
  519. package/node_modules/@noodle-borg/service/dist/serve.d.ts.map +1 -1
  520. package/node_modules/@noodle-borg/service/dist/serve.js +19 -62
  521. package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
  522. package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
  523. package/node_modules/@noodle-borg/service/dist/service.js +25 -45
  524. package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
  525. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts +2 -0
  526. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts.map +1 -1
  527. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js +35 -0
  528. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js.map +1 -1
  529. package/node_modules/@noodle-borg/service/package.json +1 -0
  530. package/package.json +2 -1
@@ -0,0 +1,51 @@
1
+ import { protectedResourceMetadata } from '@noodle-borg/auth';
2
+ import { parseLegacyTenantMcpPath } from '@noodle-borg/module';
3
+ import { applySecurityHeaders, enforceHttps } from '@noodle-borg/transport-http';
4
+ import { DEVELOPER_MCP_PATH, developerMcpScopes } from '../developer-mcp/mount.js';
5
+ import { baseFromRequest, sendJson } from '../http-util.js';
6
+ import { trustedMcpResourceFromRequest } from '../mcp-public-routing.js';
7
+ import { authServerIssuersForTenant } from '../registry-targets.js';
8
+ /** Well-known prefix for OAuth 2.0 Protected Resource Metadata (RFC 9728). */
9
+ export const PROTECTED_RESOURCE_METADATA_PREFIX = '/.well-known/oauth-protected-resource';
10
+ export function dispatchProtectedResourceMetadata(req, res, url, registry, options, tls) {
11
+ if (req.method !== 'GET' || !url.pathname.startsWith(PROTECTED_RESOURCE_METADATA_PREFIX)) {
12
+ return false;
13
+ }
14
+ applySecurityHeaders(res, tls);
15
+ if (enforceHttps(req, res, tls))
16
+ return true;
17
+ void Promise.resolve()
18
+ .then(async () => {
19
+ const trustedResource = trustedMcpResourceFromRequest(req, options);
20
+ if (trustedResource.status !== 'none' && !trustedResource.ok) {
21
+ return sendJson(res, trustedResource.status, {
22
+ error: trustedResource.status === 403 ? 'forbidden' : 'not found',
23
+ });
24
+ }
25
+ const base = options.publicBaseUrl ?? baseFromRequest(req, tls);
26
+ const resourcePath = url.pathname.slice(PROTECTED_RESOURCE_METADATA_PREFIX.length);
27
+ const tenant = trustedResource.status === 'ok'
28
+ ? trustedResource.tenant
29
+ : parseLegacyTenantMcpPath(resourcePath);
30
+ const authServerIssuers = (tenant !== undefined ? await authServerIssuersForTenant(registry, tenant) : undefined) ??
31
+ (options.authServerIssuer ? [options.authServerIssuer] : undefined);
32
+ const doc = {
33
+ ...protectedResourceMetadata({
34
+ resource: trustedResource.status === 'ok'
35
+ ? trustedResource.resourceUrl
36
+ : `${base}${resourcePath}`,
37
+ ...(authServerIssuers ? { authorizationServers: authServerIssuers } : {}),
38
+ }),
39
+ ...(options.developerMcp === true && resourcePath === DEVELOPER_MCP_PATH
40
+ ? { scopes_supported: developerMcpScopes() }
41
+ : {}),
42
+ };
43
+ return sendJson(res, 200, doc);
44
+ })
45
+ .catch(() => {
46
+ if (!res.headersSent)
47
+ sendJson(res, 500, { error: 'internal error' });
48
+ });
49
+ return true;
50
+ }
51
+ //# sourceMappingURL=protected-resource-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protected-resource-metadata.js","sourceRoot":"","sources":["../../src/routes/protected-resource-metadata.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@
12
12
  import type { IncomingMessage, ServerResponse } from 'node:http';
13
13
  import type { TlsPosture } from '@noodle-borg/transport-http';
14
14
  import type { DeployAuthGate } from '../auth/deploy-gate.js';
15
+ import type { DeveloperGrantStore } from '../oauth/developer-grant.js';
15
16
  import type { ServerRegistry } from '../registry.js';
16
17
  import type { ControlPlaneStore } from '../store.js';
17
18
  import type { EndpointUrlOptions, ResolveEndpointBase } from './endpoint-enrichment.js';
@@ -25,6 +26,7 @@ export interface ResourceReadDeps {
25
26
  readonly tls: TlsPosture;
26
27
  readonly resolveEndpointBase: ResolveEndpointBase;
27
28
  readonly endpointOptions?: EndpointUrlOptions;
29
+ readonly developerGrantStore: DeveloperGrantStore | undefined;
28
30
  }
29
31
  /**
30
32
  * Try the resource read routes; returns true when the request was handled (or a guard ended it).
@@ -1 +1 @@
1
- {"version":3,"file":"resource-read-dispatch.d.ts","sourceRoot":"","sources":["../../src/routes/resource-read-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAUxF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9E,QAAQ,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC;IAC/F,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAChF,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAClD,QAAQ,CAAC,eAAe,CAAC,EAAE,kBAAkB,CAAC;CAC/C;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,gBAAgB,GACrB,OAAO,CA2GT"}
1
+ {"version":3,"file":"resource-read-dispatch.d.ts","sourceRoot":"","sources":["../../src/routes/resource-read-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAUxF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9E,QAAQ,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC;IAC/F,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAChF,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAClD,QAAQ,CAAC,eAAe,CAAC,EAAE,kBAAkB,CAAC;IAC9C,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,SAAS,CAAC;CAC/D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAiHT"}
@@ -7,14 +7,14 @@ import { parseAppItemPath, parseAppsPath, parseDeploymentItemPath, parseEnvItemP
7
7
  * `orgRef` GET (org inspect) stays in `service.ts` beside its PATCH sibling, which shares the parse.
8
8
  */
9
9
  export function dispatchResourceReads(req, res, url, deps) {
10
- const { registry, gate, controlPlane, applySecurityHeaders, enforceHttps, sendJson, tls, resolveEndpointBase, endpointOptions = {}, } = deps;
10
+ const { registry, gate, controlPlane, applySecurityHeaders, enforceHttps, sendJson, tls, resolveEndpointBase, endpointOptions = {}, developerGrantStore, } = deps;
11
11
  const endpointBase = resolveEndpointBase(req);
12
12
  const appsRef = parseAppsPath(url.pathname);
13
13
  if (appsRef !== undefined && req.method === 'GET') {
14
14
  applySecurityHeaders(res, tls);
15
15
  if (enforceHttps(req, res, tls))
16
16
  return true;
17
- handleApps(req, res, registry, gate, controlPlane, appsRef, url, endpointBase, endpointOptions).catch(() => {
17
+ handleApps(req, res, registry, gate, controlPlane, appsRef, url, endpointBase, endpointOptions, developerGrantStore).catch(() => {
18
18
  if (!res.headersSent)
19
19
  sendJson(res, 500, { error: 'internal error' });
20
20
  });
@@ -25,7 +25,7 @@ export function dispatchResourceReads(req, res, url, deps) {
25
25
  applySecurityHeaders(res, tls);
26
26
  if (enforceHttps(req, res, tls))
27
27
  return true;
28
- handleApp(req, res, registry, gate, controlPlane, appItemRef, endpointBase, endpointOptions).catch(() => {
28
+ handleApp(req, res, registry, gate, controlPlane, appItemRef, endpointBase, endpointOptions, developerGrantStore).catch(() => {
29
29
  if (!res.headersSent)
30
30
  sendJson(res, 500, { error: 'internal error' });
31
31
  });
@@ -36,7 +36,7 @@ export function dispatchResourceReads(req, res, url, deps) {
36
36
  applySecurityHeaders(res, tls);
37
37
  if (enforceHttps(req, res, tls))
38
38
  return true;
39
- handleEnvs(req, res, registry, gate, controlPlane, envsRef, url, endpointBase, endpointOptions).catch(() => {
39
+ handleEnvs(req, res, registry, gate, controlPlane, envsRef, url, endpointBase, endpointOptions, developerGrantStore).catch(() => {
40
40
  if (!res.headersSent)
41
41
  sendJson(res, 500, { error: 'internal error' });
42
42
  });
@@ -47,7 +47,7 @@ export function dispatchResourceReads(req, res, url, deps) {
47
47
  applySecurityHeaders(res, tls);
48
48
  if (enforceHttps(req, res, tls))
49
49
  return true;
50
- handleEnv(req, res, registry, gate, controlPlane, envItemRef, endpointBase, endpointOptions).catch(() => {
50
+ handleEnv(req, res, registry, gate, controlPlane, envItemRef, endpointBase, endpointOptions, developerGrantStore).catch(() => {
51
51
  if (!res.headersSent)
52
52
  sendJson(res, 500, { error: 'internal error' });
53
53
  });
@@ -58,7 +58,7 @@ export function dispatchResourceReads(req, res, url, deps) {
58
58
  applySecurityHeaders(res, tls);
59
59
  if (enforceHttps(req, res, tls))
60
60
  return true;
61
- handleDeploymentItem(req, res, registry, gate, controlPlane, deploymentItemRef, endpointBase, endpointOptions).catch(() => {
61
+ handleDeploymentItem(req, res, registry, gate, controlPlane, deploymentItemRef, endpointBase, endpointOptions, developerGrantStore).catch(() => {
62
62
  if (!res.headersSent)
63
63
  sendJson(res, 500, { error: 'internal error' });
64
64
  });
@@ -1 +1 @@
1
- {"version":3,"file":"resource-read-dispatch.js","sourceRoot":"","sources":["../../src/routes/resource-read-dispatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource-read-dispatch.js","sourceRoot":"","sources":["../../src/routes/resource-read-dispatch.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,uBAAuB,EACvB,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC;AAepB;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,GAAoB,EACpB,GAAmB,EACnB,GAAQ,EACR,IAAsB;IAEtB,MAAM,EACJ,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,QAAQ,EACR,GAAG,EACH,mBAAmB,EACnB,eAAe,GAAG,EAAE,EACpB,mBAAmB,GACpB,GAAG,IAAI,CAAC;IACT,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAE9C,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,OAAO,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAClD,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7C,UAAU,CACR,GAAG,EACH,GAAG,EACH,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,GAAG,EACH,YAAY,EACZ,eAAe,EACf,mBAAmB,CACpB,CAAC,KAAK,CAAC,GAAG,EAAE;YACX,IAAI,CAAC,GAAG,CAAC,WAAW;gBAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,UAAU,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QACrD,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7C,SAAS,CACP,GAAG,EACH,GAAG,EACH,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,eAAe,EACf,mBAAmB,CACpB,CAAC,KAAK,CAAC,GAAG,EAAE;YACX,IAAI,CAAC,GAAG,CAAC,WAAW;gBAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,OAAO,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAClD,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7C,UAAU,CACR,GAAG,EACH,GAAG,EACH,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,GAAG,EACH,YAAY,EACZ,eAAe,EACf,mBAAmB,CACpB,CAAC,KAAK,CAAC,GAAG,EAAE;YACX,IAAI,CAAC,GAAG,CAAC,WAAW;gBAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,UAAU,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QACrD,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7C,SAAS,CACP,GAAG,EACH,GAAG,EACH,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,eAAe,EACf,mBAAmB,CACpB,CAAC,KAAK,CAAC,GAAG,EAAE;YACX,IAAI,CAAC,GAAG,CAAC,WAAW;gBAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChE,IAAI,iBAAiB,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC5D,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7C,oBAAoB,CAClB,GAAG,EACH,GAAG,EACH,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,mBAAmB,CACpB,CAAC,KAAK,CAAC,GAAG,EAAE;YACX,IAAI,CAAC,GAAG,CAAC,WAAW;gBAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/routes/rollback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAKhE,wBAAsB,cAAc,CAClC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,cAAc,EACpB,YAAY,EAAE,iBAAiB,EAC/B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CAoGf"}
1
+ {"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/routes/rollback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGhE,wBAAsB,cAAc,CAClC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,cAAc,EACpB,YAAY,EAAE,iBAAiB,EAC/B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CAgDf"}
@@ -1,32 +1,10 @@
1
1
  import { baseFromRequest, readJsonBody, sendForbidden, sendJson } from '../http-util.js';
2
- import { tenantMcpUrl } from '../registry-helpers.js';
3
- import { respondProductionAppAdmissionError } from './billing-production-app-response.js';
4
- import { authorizeControlPlane } from './control-plane.js';
5
- import { canManageMembers } from './org-admin.js';
2
+ import { rollbackDeploymentOperation } from '../operations/rollback-deployment.js';
3
+ import { authorizeTenantControl, developerGrantRouteAccess } from './control-plane.js';
6
4
  export async function handleRollback(req, res, registry, gate, controlPlane, audit, maxBody, tenant, options) {
7
- const identity = await authorizeControlPlane(req, res, gate, { requireIdentity: true });
5
+ const identity = await authorizeTenantControl(req, res, gate, controlPlane, tenant.org, developerGrantRouteAccess(options.developerGrantStore, 'deployments:rollback', tenant.env));
8
6
  if (identity === false)
9
7
  return;
10
- if (!(await canManageMembers(controlPlane, tenant.org, identity))) {
11
- return sendForbidden(res, 'forbidden');
12
- }
13
- // Archived apps are soft-deleted (ADR 0117): activation changes are refused until restored.
14
- const archivedAt = await registry.getAppArchivedAt(tenant.org, tenant.app);
15
- if (archivedAt !== undefined) {
16
- await audit.emit({
17
- eventType: 'rollback.rejected',
18
- org: tenant.org,
19
- app: tenant.app,
20
- env: tenant.env,
21
- decision: 'deny',
22
- status: 409,
23
- reasonCode: 'app_archived',
24
- actorSubject: identity.subject,
25
- ...(identity.email !== undefined ? { actorEmail: identity.email } : {}),
26
- details: { archivedAt },
27
- });
28
- return sendJson(res, 409, { error: 'app is archived; restore it before rolling back' });
29
- }
30
8
  const body = await readJsonBody(req, maxBody);
31
9
  if (!body.ok)
32
10
  return sendJson(res, body.status, { error: body.error });
@@ -37,71 +15,32 @@ export async function handleRollback(req, res, registry, gate, controlPlane, aud
37
15
  if (parsed.reason !== undefined && typeof parsed.reason !== 'string') {
38
16
  return sendJson(res, 400, { error: '"reason" must be a string' });
39
17
  }
40
- let result;
41
- try {
42
- result = await registry.rollback(tenant, parsed.deploymentId);
43
- }
44
- catch (error) {
45
- const handled = await respondProductionAppAdmissionError(res, error, {
46
- audit,
47
- eventType: 'rollback.rejected',
48
- org: tenant.org,
49
- app: tenant.app,
50
- env: tenant.env,
51
- actorSubject: identity.subject,
52
- ...(identity.email !== undefined ? { actorEmail: identity.email } : {}),
18
+ const reason = typeof parsed.reason === 'string' ? parsed.reason.trim() : undefined;
19
+ if (reason !== undefined && (reason.length === 0 || reason.length > 500)) {
20
+ return sendJson(res, 400, {
21
+ error: '"reason" must be a non-empty string of at most 500 characters',
53
22
  });
54
- if (handled)
55
- return;
56
- throw error;
57
23
  }
58
- if (!result.ok)
59
- return sendJson(res, result.status, { ok: false, error: result.error });
60
24
  const base = options.publicBaseUrl ?? baseFromRequest(req, options.tls ?? {});
61
- const endpointUrl = tenantMcpUrl(base, tenant, result.serverVersion, options.mcpPublicRouting?.publicBaseDomain !== undefined
62
- ? { publicBaseDomain: options.mcpPublicRouting.publicBaseDomain }
63
- : {});
64
- await audit.emit({
65
- eventType: 'deploy.rollback',
66
- org: tenant.org,
67
- app: tenant.app,
68
- env: tenant.env,
69
- deploymentId: result.deploymentId,
70
- decision: 'allow',
71
- status: 200,
72
- actorSubject: identity.subject,
73
- ...(identity.email !== undefined ? { actorEmail: identity.email } : {}),
74
- details: {
75
- ...(result.serverVersion !== undefined ? { serverVersion: result.serverVersion } : {}),
76
- ...(result.previousDeploymentId !== undefined
77
- ? { previousDeploymentId: result.previousDeploymentId }
78
- : {}),
79
- alreadyActive: result.alreadyActive,
80
- accessMode: result.accessMode,
81
- ...(result.previousAccessMode !== undefined
82
- ? { previousAccessMode: result.previousAccessMode }
83
- : {}),
84
- ...(parsed.reason !== undefined ? { reason: parsed.reason } : {}),
85
- },
86
- });
87
- return sendJson(res, 200, {
88
- ok: true,
25
+ const result = await rollbackDeploymentOperation({ registry, controlPlane, audit }, {
26
+ actor: identity,
89
27
  target: tenant,
90
- rollback: {
91
- deploymentId: result.deploymentId,
92
- ...(result.serverVersion !== undefined ? { serverVersion: result.serverVersion } : {}),
93
- ...(result.previousDeploymentId !== undefined
94
- ? { previousDeploymentId: result.previousDeploymentId }
95
- : {}),
96
- alreadyActive: result.alreadyActive,
97
- endpointUrl,
98
- accessMode: result.accessMode,
99
- ...(result.previousAccessMode !== undefined
100
- ? { previousAccessMode: result.previousAccessMode }
101
- : {}),
102
- serverName: result.serverName,
103
- createdAt: result.createdAt,
104
- },
28
+ deploymentId: parsed.deploymentId,
29
+ ...(reason !== undefined ? { reason } : {}),
30
+ publicBaseUrl: base,
31
+ ...(options.mcpPublicRouting?.publicBaseDomain !== undefined
32
+ ? { publicBaseDomain: options.mcpPublicRouting.publicBaseDomain }
33
+ : {}),
105
34
  });
35
+ if (!result.ok) {
36
+ if (result.status === 403)
37
+ return sendForbidden(res, result.code);
38
+ return sendJson(res, result.status, {
39
+ ok: false,
40
+ code: result.code,
41
+ error: result.message,
42
+ });
43
+ }
44
+ return sendJson(res, 200, { ok: true, ...result.view });
106
45
  }
107
46
  //# sourceMappingURL=rollback.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/routes/rollback.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/routes/rollback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { SecretBox } from '@noodle-borg/runtime';
2
+ import type { ServiceOptions } from './options.js';
3
+ import type { ServerRegistry } from './registry.js';
4
+ import { type SecretEnvelope, type TenantBridgeAuthConfig } from './store.js';
5
+ export declare function isLoopbackHost(host: string): boolean;
6
+ export declare function sealCustomerCredential(secretBox: SecretBox | undefined, credential: string): Promise<SecretEnvelope>;
7
+ export declare function openCustomerCredential(secretBox: SecretBox | undefined, envelope: SecretEnvelope): Promise<string>;
8
+ export declare function bridgeAuthForResource(registry: ServerRegistry, resource: string, allowedBaseDomains: readonly string[]): Promise<TenantBridgeAuthConfig | undefined>;
9
+ export declare function managedSecretForResource(registry: ServerRegistry, resource: string, name: string, allowedBaseDomains: readonly string[]): Promise<string | undefined>;
10
+ export declare function allowedMcpBaseDomains(options: ServiceOptions): readonly string[];
11
+ //# sourceMappingURL=serve-resource-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve-resource-auth.d.ts","sourceRoot":"","sources":["../src/serve-resource-auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAE5B,MAAM,YAAY,CAAC;AAMpB,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,CAAC,CAKzB;AAED,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,SAAS,MAAM,EAAE,GACpC,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAc7C;AAED,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,kBAAkB,EAAE,SAAS,MAAM,EAAE,GACpC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ7B;AAmBD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,MAAM,EAAE,CAOhF"}
@@ -0,0 +1,62 @@
1
+ import { parseLegacyTenantMcpPath, parsePublicTenantMcpUrl } from '@noodle-borg/module';
2
+ import { resolveTenantBridgeAuthVariables } from './managed-config-expressions.js';
3
+ import { resolveConfigScope, } from './store.js';
4
+ export function isLoopbackHost(host) {
5
+ return host === '127.0.0.1' || host === '::1' || host === 'localhost';
6
+ }
7
+ export async function sealCustomerCredential(secretBox, credential) {
8
+ if (secretBox !== undefined) {
9
+ return { enc: 'aes-256-gcm', sealed: await secretBox.seal(credential) };
10
+ }
11
+ return { enc: 'none', values: { token: credential } };
12
+ }
13
+ export async function openCustomerCredential(secretBox, envelope) {
14
+ if (envelope.enc === 'none') {
15
+ const token = envelope.values.token;
16
+ if (token === undefined)
17
+ throw new Error('delegated credential envelope missing token');
18
+ return token;
19
+ }
20
+ if (secretBox === undefined)
21
+ throw new Error('secret box is required for delegated credential');
22
+ return secretBox.open(envelope.sealed);
23
+ }
24
+ export async function bridgeAuthForResource(registry, resource, allowedBaseDomains) {
25
+ const tenant = tenantRefFromResource(resource, allowedBaseDomains);
26
+ if (tenant === undefined)
27
+ return undefined;
28
+ const target = tenant.serverVersion === undefined
29
+ ? await registry.getActiveByTenant(tenant)
30
+ : await registry.getActiveByTenantVersion(tenant, tenant.serverVersion);
31
+ const auth = target?.served.artifact.server.auth;
32
+ if (auth?.kind !== 'bridge')
33
+ return undefined;
34
+ const variables = await registry.configStore.resolveConfigValues('variable', resolveConfigScope(tenant));
35
+ return resolveTenantBridgeAuthVariables(auth, variables);
36
+ }
37
+ export async function managedSecretForResource(registry, resource, name, allowedBaseDomains) {
38
+ const tenant = tenantRefFromResource(resource, allowedBaseDomains);
39
+ if (tenant === undefined)
40
+ return undefined;
41
+ const secrets = await registry.configStore.resolveConfigValues('secret', resolveConfigScope(tenant));
42
+ return secrets[name];
43
+ }
44
+ function tenantRefFromResource(resource, allowedBaseDomains) {
45
+ let url;
46
+ try {
47
+ url = new URL(resource);
48
+ }
49
+ catch {
50
+ return undefined;
51
+ }
52
+ return ((allowedBaseDomains.length > 0
53
+ ? parsePublicTenantMcpUrl(resource, allowedBaseDomains)
54
+ : undefined) ?? parseLegacyTenantMcpPath(url.pathname));
55
+ }
56
+ export function allowedMcpBaseDomains(options) {
57
+ return (options.mcpPublicRouting?.allowedBaseDomains ??
58
+ (options.mcpPublicRouting?.publicBaseDomain !== undefined
59
+ ? [options.mcpPublicRouting.publicBaseDomain]
60
+ : []));
61
+ }
62
+ //# sourceMappingURL=serve-resource-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve-resource-auth.js","sourceRoot":"","sources":["../src/serve-resource-auth.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,MAAM,EAAuB,MAAM,WAAW,CAAC;AAqDjG,OAAO,EAAE,KAAK,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AA0C9D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,4FAA4F;IAC5F,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,iGAAiG;AACjG,wBAAsB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,cAAc,CAAC,CAilB7F"}
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,MAAM,EAAuB,MAAM,WAAW,CAAC;AAqDjG,OAAO,EAAE,KAAK,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AA2C9D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,4FAA4F;IAC5F,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,iGAAiG;AACjG,wBAAsB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,cAAc,CAAC,CAgmB7F"}
@@ -1,6 +1,5 @@
1
1
  import { createServer } from 'node:http';
2
2
  import { createJwtVerifier } from '@noodle-borg/auth';
3
- import { parseLegacyTenantMcpPath, parsePublicTenantMcpUrl, } from '@noodle-borg/module';
4
3
  import { SecretBox, staticMasterKeyProvider } from '@noodle-borg/runtime';
5
4
  import { noopLogger } from '@noodle-borg/transport-http';
6
5
  import { ALERT_EVALUATION_INTERVAL_MS, AlertEvaluator } from './alert-evaluator.js';
@@ -16,12 +15,13 @@ import { createCustomerVerifierFactory, createHostedCustomerVerifierFactory, } f
16
15
  import { geminiEnterpriseDefaultResourceForClient } from './gemini-enterprise-oauth.js';
17
16
  import { GITHUB_RUN_RECONCILE_INTERVAL_MS, GithubDeployRunReconciler, } from './github/deploy-run-reconciler.js';
18
17
  import { normalizeOAuthResource } from './http-util.js';
19
- import { resolveTenantBridgeAuthVariables } from './managed-config-expressions.js';
20
18
  import { ModuleHost } from './modules/host.js';
21
19
  import { loadModules } from './modules/loader.js';
20
+ import { createDeveloperGrantAuthorizer, resolveDeveloperGrantStore, } from './oauth/developer-grant-bootstrap.js';
22
21
  import { assertPostgresStoreOwnership } from './persistence-options.js';
23
22
  import { InMemoryPolicyAssignmentStore } from './policy.js';
24
23
  import { ServerRegistry } from './registry.js';
24
+ import { allowedMcpBaseDomains, bridgeAuthForResource, isLoopbackHost, managedSecretForResource, openCustomerCredential, sealCustomerCredential, } from './serve-resource-auth.js';
25
25
  import { createServiceHandler } from './service.js';
26
26
  import { resolveServiceConfigSource } from './service-config.js';
27
27
  import { closeHttpServer, closeServiceResources, listenHttpServer, } from './service-resource-cleanup.js';
@@ -37,7 +37,7 @@ import { RequestEventBuffer } from './store/request-event-buffer.js';
37
37
  import { InMemoryRequestEventStore } from './store/request-events.js';
38
38
  import { PostgresRequestEventStore } from './store/request-events-postgres.js';
39
39
  import { InMemoryUserAppLogStore } from './store/user-app-logs.js';
40
- import { InMemoryConfigStore, JsonFileArtifactStore, JsonFileGithubConnectionStore, JsonFileGithubDeployRunStore, resolveConfigScope, } from './store.js';
40
+ import { InMemoryConfigStore, JsonFileArtifactStore, JsonFileGithubConnectionStore, JsonFileGithubDeployRunStore, } from './store.js';
41
41
  import { startWelcomeEmailWorker } from './welcome-email.js';
42
42
  /** Start the deploy service on its own `node:http` server (used by the `noodle-service` bin). */
43
43
  export async function serveService(options = {}) {
@@ -296,6 +296,7 @@ export async function serveService(options = {}) {
296
296
  let resolvedAuthServerIssuer = options.authServerIssuer;
297
297
  let registry;
298
298
  let oauthStore;
299
+ let developerGrantStore = options.developerGrantStore;
299
300
  let delegatedExchange;
300
301
  const allowedMcpDomains = allowedMcpBaseDomains(options);
301
302
  const rawCustomerVerifierFactory = createCustomerVerifierFactory({
@@ -318,6 +319,10 @@ export async function serveService(options = {}) {
318
319
  const { InMemoryOAuthStore } = await import('./oauth/store.js');
319
320
  oauthStore = new InMemoryOAuthStore();
320
321
  }
322
+ developerGrantStore = await resolveDeveloperGrantStore({
323
+ ...(pgPool === undefined ? {} : { pool: pgPool.pool }),
324
+ ...(developerGrantStore === undefined ? {} : { store: developerGrantStore }),
325
+ });
321
326
  const [{ NoodleOAuthProvider }, { createOAuthApp }] = await Promise.all([
322
327
  import('./oauth/provider.js'),
323
328
  import('./oauth/app.js'),
@@ -345,6 +350,11 @@ export async function serveService(options = {}) {
345
350
  },
346
351
  sealCustomerCredential: (credential) => sealCustomerCredential(secretBox, credential),
347
352
  signupAuthorizer: controlPlaneStore,
353
+ developerGrantAuthorizer: createDeveloperGrantAuthorizer({
354
+ controlPlane: controlPlaneStore,
355
+ grants: developerGrantStore,
356
+ registry: () => registry,
357
+ }),
348
358
  logger: options.logger ?? noopLogger,
349
359
  defaultResourceForClient: (client) => geminiEnterpriseDefaultResourceForClient(client, oauthIssuer),
350
360
  ...(options.oauth.allowedEmailDomain !== undefined
@@ -381,7 +391,11 @@ export async function serveService(options = {}) {
381
391
  const allowedEmailDomain = options.controlPlaneAllowedEmailDomain ?? options.oauth?.allowedEmailDomain;
382
392
  gates.push(new NoodleOAuthControlPlaneGate({
383
393
  verifier: resolvedVerifyOwnerToken,
384
- audience: normalizeOAuthResource(options.publicBaseUrl ?? resolvedAuthServerIssuer),
394
+ audience: [
395
+ normalizeOAuthResource(options.publicBaseUrl ?? resolvedAuthServerIssuer),
396
+ `${resolvedAuthServerIssuer}/developer/mcp`,
397
+ `${resolvedAuthServerIssuer}/developer/cli`,
398
+ ],
385
399
  admins: options.controlPlaneAdmins ?? [],
386
400
  signupMode: options.controlPlaneSignupMode ?? 'restricted',
387
401
  signupAuthorizer: controlPlaneStore,
@@ -500,6 +514,7 @@ export async function serveService(options = {}) {
500
514
  ...options,
501
515
  readinessProbe,
502
516
  controlPlaneStore,
517
+ ...(developerGrantStore !== undefined ? { developerGrantStore } : {}),
503
518
  ...(billingMigrationStore !== undefined ? { billingMigrationStore } : {}),
504
519
  ...(billingEnforcementProfileStore !== undefined ? { billingEnforcementProfileStore } : {}),
505
520
  ...(billingEnforcementActivationStore !== undefined
@@ -567,62 +582,4 @@ export async function serveService(options = {}) {
567
582
  },
568
583
  };
569
584
  }
570
- function isLoopbackHost(host) {
571
- return host === '127.0.0.1' || host === '::1' || host === 'localhost';
572
- }
573
- async function sealCustomerCredential(secretBox, credential) {
574
- if (secretBox !== undefined) {
575
- return { enc: 'aes-256-gcm', sealed: await secretBox.seal(credential) };
576
- }
577
- return { enc: 'none', values: { token: credential } };
578
- }
579
- async function openCustomerCredential(secretBox, envelope) {
580
- if (envelope.enc === 'none') {
581
- const token = envelope.values.token;
582
- if (token === undefined)
583
- throw new Error('delegated credential envelope missing token');
584
- return token;
585
- }
586
- if (secretBox === undefined)
587
- throw new Error('secret box is required for delegated credential');
588
- return secretBox.open(envelope.sealed);
589
- }
590
- async function bridgeAuthForResource(registry, resource, allowedBaseDomains) {
591
- const tenant = tenantRefFromResource(resource, allowedBaseDomains);
592
- if (tenant === undefined)
593
- return undefined;
594
- const target = tenant.serverVersion === undefined
595
- ? await registry.getActiveByTenant(tenant)
596
- : await registry.getActiveByTenantVersion(tenant, tenant.serverVersion);
597
- const auth = target?.served.artifact.server.auth;
598
- if (auth?.kind !== 'bridge')
599
- return undefined;
600
- const variables = await registry.configStore.resolveConfigValues('variable', resolveConfigScope(tenant));
601
- return resolveTenantBridgeAuthVariables(auth, variables);
602
- }
603
- async function managedSecretForResource(registry, resource, name, allowedBaseDomains) {
604
- const tenant = tenantRefFromResource(resource, allowedBaseDomains);
605
- if (tenant === undefined)
606
- return undefined;
607
- const secrets = await registry.configStore.resolveConfigValues('secret', resolveConfigScope(tenant));
608
- return secrets[name];
609
- }
610
- function tenantRefFromResource(resource, allowedBaseDomains) {
611
- let url;
612
- try {
613
- url = new URL(resource);
614
- }
615
- catch {
616
- return undefined;
617
- }
618
- return ((allowedBaseDomains.length > 0
619
- ? parsePublicTenantMcpUrl(resource, allowedBaseDomains)
620
- : undefined) ?? parseLegacyTenantMcpPath(url.pathname));
621
- }
622
- function allowedMcpBaseDomains(options) {
623
- return (options.mcpPublicRouting?.allowedBaseDomains ??
624
- (options.mcpPublicRouting?.publicBaseDomain !== undefined
625
- ? [options.mcpPublicRouting.publicBaseDomain]
626
- : []));
627
- }
628
585
  //# sourceMappingURL=serve.js.map