noodleseed-cli 0.1.4

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 (356) hide show
  1. package/LICENSE +176 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +625 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/config.d.ts +52 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +77 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/control-plane.d.ts +33 -0
  11. package/dist/control-plane.d.ts.map +1 -0
  12. package/dist/control-plane.js +223 -0
  13. package/dist/control-plane.js.map +1 -0
  14. package/dist/deploy.d.ts +62 -0
  15. package/dist/deploy.d.ts.map +1 -0
  16. package/dist/deploy.js +182 -0
  17. package/dist/deploy.js.map +1 -0
  18. package/dist/dev.d.ts +50 -0
  19. package/dist/dev.d.ts.map +1 -0
  20. package/dist/dev.js +223 -0
  21. package/dist/dev.js.map +1 -0
  22. package/dist/index.d.ts +6 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +6 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/validate.d.ts +37 -0
  27. package/dist/validate.d.ts.map +1 -0
  28. package/dist/validate.js +46 -0
  29. package/dist/validate.js.map +1 -0
  30. package/node_modules/@noodle-borg/auth/dist/index.d.ts +14 -0
  31. package/node_modules/@noodle-borg/auth/dist/index.d.ts.map +1 -0
  32. package/node_modules/@noodle-borg/auth/dist/index.js +14 -0
  33. package/node_modules/@noodle-borg/auth/dist/index.js.map +1 -0
  34. package/node_modules/@noodle-borg/auth/dist/jwt-issuer.d.ts +21 -0
  35. package/node_modules/@noodle-borg/auth/dist/jwt-issuer.d.ts.map +1 -0
  36. package/node_modules/@noodle-borg/auth/dist/jwt-issuer.js +24 -0
  37. package/node_modules/@noodle-borg/auth/dist/jwt-issuer.js.map +1 -0
  38. package/node_modules/@noodle-borg/auth/dist/metadata.d.ts +27 -0
  39. package/node_modules/@noodle-borg/auth/dist/metadata.d.ts.map +1 -0
  40. package/node_modules/@noodle-borg/auth/dist/metadata.js +21 -0
  41. package/node_modules/@noodle-borg/auth/dist/metadata.js.map +1 -0
  42. package/node_modules/@noodle-borg/auth/dist/signer.d.ts +45 -0
  43. package/node_modules/@noodle-borg/auth/dist/signer.d.ts.map +1 -0
  44. package/node_modules/@noodle-borg/auth/dist/signer.js +47 -0
  45. package/node_modules/@noodle-borg/auth/dist/signer.js.map +1 -0
  46. package/node_modules/@noodle-borg/auth/dist/verify.d.ts +42 -0
  47. package/node_modules/@noodle-borg/auth/dist/verify.d.ts.map +1 -0
  48. package/node_modules/@noodle-borg/auth/dist/verify.js +48 -0
  49. package/node_modules/@noodle-borg/auth/dist/verify.js.map +1 -0
  50. package/node_modules/@noodle-borg/auth/package.json +27 -0
  51. package/node_modules/@noodle-borg/authoring/dist/index.d.ts +200 -0
  52. package/node_modules/@noodle-borg/authoring/dist/index.d.ts.map +1 -0
  53. package/node_modules/@noodle-borg/authoring/dist/index.js +504 -0
  54. package/node_modules/@noodle-borg/authoring/dist/index.js.map +1 -0
  55. package/node_modules/@noodle-borg/authoring/package.json +29 -0
  56. package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts +203 -0
  57. package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts.map +1 -0
  58. package/node_modules/@noodle-borg/compiler/dist/artifact/types.js +20 -0
  59. package/node_modules/@noodle-borg/compiler/dist/artifact/types.js.map +1 -0
  60. package/node_modules/@noodle-borg/compiler/dist/catalog/in-memory.d.ts +13 -0
  61. package/node_modules/@noodle-borg/compiler/dist/catalog/in-memory.d.ts.map +1 -0
  62. package/node_modules/@noodle-borg/compiler/dist/catalog/in-memory.js +19 -0
  63. package/node_modules/@noodle-borg/compiler/dist/catalog/in-memory.js.map +1 -0
  64. package/node_modules/@noodle-borg/compiler/dist/catalog/signature.d.ts +11 -0
  65. package/node_modules/@noodle-borg/compiler/dist/catalog/signature.d.ts.map +1 -0
  66. package/node_modules/@noodle-borg/compiler/dist/catalog/signature.js +31 -0
  67. package/node_modules/@noodle-borg/compiler/dist/catalog/signature.js.map +1 -0
  68. package/node_modules/@noodle-borg/compiler/dist/catalog/types.d.ts +43 -0
  69. package/node_modules/@noodle-borg/compiler/dist/catalog/types.d.ts.map +1 -0
  70. package/node_modules/@noodle-borg/compiler/dist/catalog/types.js +11 -0
  71. package/node_modules/@noodle-borg/compiler/dist/catalog/types.js.map +1 -0
  72. package/node_modules/@noodle-borg/compiler/dist/cli.d.ts +3 -0
  73. package/node_modules/@noodle-borg/compiler/dist/cli.d.ts.map +1 -0
  74. package/node_modules/@noodle-borg/compiler/dist/cli.js +19 -0
  75. package/node_modules/@noodle-borg/compiler/dist/cli.js.map +1 -0
  76. package/node_modules/@noodle-borg/compiler/dist/compile.d.ts +50 -0
  77. package/node_modules/@noodle-borg/compiler/dist/compile.d.ts.map +1 -0
  78. package/node_modules/@noodle-borg/compiler/dist/compile.js +719 -0
  79. package/node_modules/@noodle-borg/compiler/dist/compile.js.map +1 -0
  80. package/node_modules/@noodle-borg/compiler/dist/errors.d.ts +27 -0
  81. package/node_modules/@noodle-borg/compiler/dist/errors.d.ts.map +1 -0
  82. package/node_modules/@noodle-borg/compiler/dist/errors.js +2 -0
  83. package/node_modules/@noodle-borg/compiler/dist/errors.js.map +1 -0
  84. package/node_modules/@noodle-borg/compiler/dist/index.d.ts +13 -0
  85. package/node_modules/@noodle-borg/compiler/dist/index.d.ts.map +1 -0
  86. package/node_modules/@noodle-borg/compiler/dist/index.js +11 -0
  87. package/node_modules/@noodle-borg/compiler/dist/index.js.map +1 -0
  88. package/node_modules/@noodle-borg/compiler/dist/manifest/expression.d.ts +136 -0
  89. package/node_modules/@noodle-borg/compiler/dist/manifest/expression.d.ts.map +1 -0
  90. package/node_modules/@noodle-borg/compiler/dist/manifest/expression.js +552 -0
  91. package/node_modules/@noodle-borg/compiler/dist/manifest/expression.js.map +1 -0
  92. package/node_modules/@noodle-borg/compiler/dist/manifest/naming.d.ts +14 -0
  93. package/node_modules/@noodle-borg/compiler/dist/manifest/naming.d.ts.map +1 -0
  94. package/node_modules/@noodle-borg/compiler/dist/manifest/naming.js +18 -0
  95. package/node_modules/@noodle-borg/compiler/dist/manifest/naming.js.map +1 -0
  96. package/node_modules/@noodle-borg/compiler/dist/manifest/schema-refs.d.ts +24 -0
  97. package/node_modules/@noodle-borg/compiler/dist/manifest/schema-refs.d.ts.map +1 -0
  98. package/node_modules/@noodle-borg/compiler/dist/manifest/schema-refs.js +149 -0
  99. package/node_modules/@noodle-borg/compiler/dist/manifest/schema-refs.js.map +1 -0
  100. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +97 -0
  101. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts.map +1 -0
  102. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +157 -0
  103. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js.map +1 -0
  104. package/node_modules/@noodle-borg/compiler/dist/schema-export.d.ts +6 -0
  105. package/node_modules/@noodle-borg/compiler/dist/schema-export.d.ts.map +1 -0
  106. package/node_modules/@noodle-borg/compiler/dist/schema-export.js +28 -0
  107. package/node_modules/@noodle-borg/compiler/dist/schema-export.js.map +1 -0
  108. package/node_modules/@noodle-borg/compiler/dist/suggest.d.ts +41 -0
  109. package/node_modules/@noodle-borg/compiler/dist/suggest.d.ts.map +1 -0
  110. package/node_modules/@noodle-borg/compiler/dist/suggest.js +105 -0
  111. package/node_modules/@noodle-borg/compiler/dist/suggest.js.map +1 -0
  112. package/node_modules/@noodle-borg/compiler/dist/uri-template.d.ts +33 -0
  113. package/node_modules/@noodle-borg/compiler/dist/uri-template.d.ts.map +1 -0
  114. package/node_modules/@noodle-borg/compiler/dist/uri-template.js +83 -0
  115. package/node_modules/@noodle-borg/compiler/dist/uri-template.js.map +1 -0
  116. package/node_modules/@noodle-borg/compiler/package.json +32 -0
  117. package/node_modules/@noodle-borg/compute/dist/code-connector.d.ts +45 -0
  118. package/node_modules/@noodle-borg/compute/dist/code-connector.d.ts.map +1 -0
  119. package/node_modules/@noodle-borg/compute/dist/code-connector.js +53 -0
  120. package/node_modules/@noodle-borg/compute/dist/code-connector.js.map +1 -0
  121. package/node_modules/@noodle-borg/compute/dist/engine.d.ts +73 -0
  122. package/node_modules/@noodle-borg/compute/dist/engine.d.ts.map +1 -0
  123. package/node_modules/@noodle-borg/compute/dist/engine.js +31 -0
  124. package/node_modules/@noodle-borg/compute/dist/engine.js.map +1 -0
  125. package/node_modules/@noodle-borg/compute/dist/index.d.ts +4 -0
  126. package/node_modules/@noodle-borg/compute/dist/index.d.ts.map +1 -0
  127. package/node_modules/@noodle-borg/compute/dist/index.js +4 -0
  128. package/node_modules/@noodle-borg/compute/dist/index.js.map +1 -0
  129. package/node_modules/@noodle-borg/compute/dist/quickjs-engine.d.ts +31 -0
  130. package/node_modules/@noodle-borg/compute/dist/quickjs-engine.d.ts.map +1 -0
  131. package/node_modules/@noodle-borg/compute/dist/quickjs-engine.js +271 -0
  132. package/node_modules/@noodle-borg/compute/dist/quickjs-engine.js.map +1 -0
  133. package/node_modules/@noodle-borg/compute/package.json +29 -0
  134. package/node_modules/@noodle-borg/connector-defs/dist/compile.d.ts +46 -0
  135. package/node_modules/@noodle-borg/connector-defs/dist/compile.d.ts.map +1 -0
  136. package/node_modules/@noodle-borg/connector-defs/dist/compile.js +289 -0
  137. package/node_modules/@noodle-borg/connector-defs/dist/compile.js.map +1 -0
  138. package/node_modules/@noodle-borg/connector-defs/dist/index.d.ts +3 -0
  139. package/node_modules/@noodle-borg/connector-defs/dist/index.d.ts.map +1 -0
  140. package/node_modules/@noodle-borg/connector-defs/dist/index.js +3 -0
  141. package/node_modules/@noodle-borg/connector-defs/dist/index.js.map +1 -0
  142. package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts +332 -0
  143. package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts.map +1 -0
  144. package/node_modules/@noodle-borg/connector-defs/dist/schema.js +105 -0
  145. package/node_modules/@noodle-borg/connector-defs/dist/schema.js.map +1 -0
  146. package/node_modules/@noodle-borg/connector-defs/package.json +32 -0
  147. package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts +86 -0
  148. package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts.map +1 -0
  149. package/node_modules/@noodle-borg/connector-http/dist/http-connector.js +138 -0
  150. package/node_modules/@noodle-borg/connector-http/dist/http-connector.js.map +1 -0
  151. package/node_modules/@noodle-borg/connector-http/dist/index.d.ts +3 -0
  152. package/node_modules/@noodle-borg/connector-http/dist/index.d.ts.map +1 -0
  153. package/node_modules/@noodle-borg/connector-http/dist/index.js +3 -0
  154. package/node_modules/@noodle-borg/connector-http/dist/index.js.map +1 -0
  155. package/node_modules/@noodle-borg/connector-http/dist/ssrf.d.ts +45 -0
  156. package/node_modules/@noodle-borg/connector-http/dist/ssrf.d.ts.map +1 -0
  157. package/node_modules/@noodle-borg/connector-http/dist/ssrf.js +57 -0
  158. package/node_modules/@noodle-borg/connector-http/dist/ssrf.js.map +1 -0
  159. package/node_modules/@noodle-borg/connector-http/package.json +30 -0
  160. package/node_modules/@noodle-borg/protocol/dist/adapter.d.ts +73 -0
  161. package/node_modules/@noodle-borg/protocol/dist/adapter.d.ts.map +1 -0
  162. package/node_modules/@noodle-borg/protocol/dist/adapter.js +2 -0
  163. package/node_modules/@noodle-borg/protocol/dist/adapter.js.map +1 -0
  164. package/node_modules/@noodle-borg/protocol/dist/adapters/mcp-2025-11-25.d.ts +19 -0
  165. package/node_modules/@noodle-borg/protocol/dist/adapters/mcp-2025-11-25.d.ts.map +1 -0
  166. package/node_modules/@noodle-borg/protocol/dist/adapters/mcp-2025-11-25.js +34 -0
  167. package/node_modules/@noodle-borg/protocol/dist/adapters/mcp-2025-11-25.js.map +1 -0
  168. package/node_modules/@noodle-borg/protocol/dist/index.d.ts +5 -0
  169. package/node_modules/@noodle-borg/protocol/dist/index.d.ts.map +1 -0
  170. package/node_modules/@noodle-borg/protocol/dist/index.js +5 -0
  171. package/node_modules/@noodle-borg/protocol/dist/index.js.map +1 -0
  172. package/node_modules/@noodle-borg/protocol/dist/jsonrpc.d.ts +19 -0
  173. package/node_modules/@noodle-borg/protocol/dist/jsonrpc.d.ts.map +1 -0
  174. package/node_modules/@noodle-borg/protocol/dist/jsonrpc.js +14 -0
  175. package/node_modules/@noodle-borg/protocol/dist/jsonrpc.js.map +1 -0
  176. package/node_modules/@noodle-borg/protocol/dist/mapping.d.ts +133 -0
  177. package/node_modules/@noodle-borg/protocol/dist/mapping.d.ts.map +1 -0
  178. package/node_modules/@noodle-borg/protocol/dist/mapping.js +181 -0
  179. package/node_modules/@noodle-borg/protocol/dist/mapping.js.map +1 -0
  180. package/node_modules/@noodle-borg/protocol/dist/negotiate.d.ts +13 -0
  181. package/node_modules/@noodle-borg/protocol/dist/negotiate.d.ts.map +1 -0
  182. package/node_modules/@noodle-borg/protocol/dist/negotiate.js +18 -0
  183. package/node_modules/@noodle-borg/protocol/dist/negotiate.js.map +1 -0
  184. package/node_modules/@noodle-borg/protocol/dist/registry.d.ts +17 -0
  185. package/node_modules/@noodle-borg/protocol/dist/registry.d.ts.map +1 -0
  186. package/node_modules/@noodle-borg/protocol/dist/registry.js +33 -0
  187. package/node_modules/@noodle-borg/protocol/dist/registry.js.map +1 -0
  188. package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts +22 -0
  189. package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts.map +1 -0
  190. package/node_modules/@noodle-borg/protocol/dist/sdk-server.js +91 -0
  191. package/node_modules/@noodle-borg/protocol/dist/sdk-server.js.map +1 -0
  192. package/node_modules/@noodle-borg/protocol/dist/server.d.ts +38 -0
  193. package/node_modules/@noodle-borg/protocol/dist/server.d.ts.map +1 -0
  194. package/node_modules/@noodle-borg/protocol/dist/server.js +89 -0
  195. package/node_modules/@noodle-borg/protocol/dist/server.js.map +1 -0
  196. package/node_modules/@noodle-borg/protocol/dist/stateless.d.ts +14 -0
  197. package/node_modules/@noodle-borg/protocol/dist/stateless.d.ts.map +1 -0
  198. package/node_modules/@noodle-borg/protocol/dist/stateless.js +28 -0
  199. package/node_modules/@noodle-borg/protocol/dist/stateless.js.map +1 -0
  200. package/node_modules/@noodle-borg/protocol/dist/widget/bootstrap.d.ts +24 -0
  201. package/node_modules/@noodle-borg/protocol/dist/widget/bootstrap.d.ts.map +1 -0
  202. package/node_modules/@noodle-borg/protocol/dist/widget/bootstrap.js +165 -0
  203. package/node_modules/@noodle-borg/protocol/dist/widget/bootstrap.js.map +1 -0
  204. package/node_modules/@noodle-borg/protocol/dist/widget/ext-apps-bundle.d.ts +4 -0
  205. package/node_modules/@noodle-borg/protocol/dist/widget/ext-apps-bundle.d.ts.map +1 -0
  206. package/node_modules/@noodle-borg/protocol/dist/widget/ext-apps-bundle.js +10 -0
  207. package/node_modules/@noodle-borg/protocol/dist/widget/ext-apps-bundle.js.map +1 -0
  208. package/node_modules/@noodle-borg/protocol/dist/widget/inject.d.ts +8 -0
  209. package/node_modules/@noodle-borg/protocol/dist/widget/inject.d.ts.map +1 -0
  210. package/node_modules/@noodle-borg/protocol/dist/widget/inject.js +36 -0
  211. package/node_modules/@noodle-borg/protocol/dist/widget/inject.js.map +1 -0
  212. package/node_modules/@noodle-borg/protocol/package.json +29 -0
  213. package/node_modules/@noodle-borg/runtime/dist/broker/map.d.ts +29 -0
  214. package/node_modules/@noodle-borg/runtime/dist/broker/map.d.ts.map +1 -0
  215. package/node_modules/@noodle-borg/runtime/dist/broker/map.js +38 -0
  216. package/node_modules/@noodle-borg/runtime/dist/broker/map.js.map +1 -0
  217. package/node_modules/@noodle-borg/runtime/dist/broker/secret-box.d.ts +103 -0
  218. package/node_modules/@noodle-borg/runtime/dist/broker/secret-box.d.ts.map +1 -0
  219. package/node_modules/@noodle-borg/runtime/dist/broker/secret-box.js +118 -0
  220. package/node_modules/@noodle-borg/runtime/dist/broker/secret-box.js.map +1 -0
  221. package/node_modules/@noodle-borg/runtime/dist/broker/static.d.ts +12 -0
  222. package/node_modules/@noodle-borg/runtime/dist/broker/static.d.ts.map +1 -0
  223. package/node_modules/@noodle-borg/runtime/dist/broker/static.js +15 -0
  224. package/node_modules/@noodle-borg/runtime/dist/broker/static.js.map +1 -0
  225. package/node_modules/@noodle-borg/runtime/dist/broker/types.d.ts +28 -0
  226. package/node_modules/@noodle-borg/runtime/dist/broker/types.d.ts.map +1 -0
  227. package/node_modules/@noodle-borg/runtime/dist/broker/types.js +2 -0
  228. package/node_modules/@noodle-borg/runtime/dist/broker/types.js.map +1 -0
  229. package/node_modules/@noodle-borg/runtime/dist/connector/in-memory.d.ts +29 -0
  230. package/node_modules/@noodle-borg/runtime/dist/connector/in-memory.d.ts.map +1 -0
  231. package/node_modules/@noodle-borg/runtime/dist/connector/in-memory.js +37 -0
  232. package/node_modules/@noodle-borg/runtime/dist/connector/in-memory.js.map +1 -0
  233. package/node_modules/@noodle-borg/runtime/dist/connector/types.d.ts +41 -0
  234. package/node_modules/@noodle-borg/runtime/dist/connector/types.d.ts.map +1 -0
  235. package/node_modules/@noodle-borg/runtime/dist/connector/types.js +2 -0
  236. package/node_modules/@noodle-borg/runtime/dist/connector/types.js.map +1 -0
  237. package/node_modules/@noodle-borg/runtime/dist/eval/evaluate.d.ts +39 -0
  238. package/node_modules/@noodle-borg/runtime/dist/eval/evaluate.d.ts.map +1 -0
  239. package/node_modules/@noodle-borg/runtime/dist/eval/evaluate.js +117 -0
  240. package/node_modules/@noodle-borg/runtime/dist/eval/evaluate.js.map +1 -0
  241. package/node_modules/@noodle-borg/runtime/dist/execute.d.ts +47 -0
  242. package/node_modules/@noodle-borg/runtime/dist/execute.d.ts.map +1 -0
  243. package/node_modules/@noodle-borg/runtime/dist/execute.js +297 -0
  244. package/node_modules/@noodle-borg/runtime/dist/execute.js.map +1 -0
  245. package/node_modules/@noodle-borg/runtime/dist/index.d.ts +12 -0
  246. package/node_modules/@noodle-borg/runtime/dist/index.d.ts.map +1 -0
  247. package/node_modules/@noodle-borg/runtime/dist/index.js +8 -0
  248. package/node_modules/@noodle-borg/runtime/dist/index.js.map +1 -0
  249. package/node_modules/@noodle-borg/runtime/dist/policy/allow-all.d.ts +10 -0
  250. package/node_modules/@noodle-borg/runtime/dist/policy/allow-all.d.ts.map +1 -0
  251. package/node_modules/@noodle-borg/runtime/dist/policy/allow-all.js +13 -0
  252. package/node_modules/@noodle-borg/runtime/dist/policy/allow-all.js.map +1 -0
  253. package/node_modules/@noodle-borg/runtime/dist/policy/types.d.ts +25 -0
  254. package/node_modules/@noodle-borg/runtime/dist/policy/types.d.ts.map +1 -0
  255. package/node_modules/@noodle-borg/runtime/dist/policy/types.js +2 -0
  256. package/node_modules/@noodle-borg/runtime/dist/policy/types.js.map +1 -0
  257. package/node_modules/@noodle-borg/runtime/dist/result.d.ts +19 -0
  258. package/node_modules/@noodle-borg/runtime/dist/result.d.ts.map +1 -0
  259. package/node_modules/@noodle-borg/runtime/dist/result.js +2 -0
  260. package/node_modules/@noodle-borg/runtime/dist/result.js.map +1 -0
  261. package/node_modules/@noodle-borg/runtime/package.json +27 -0
  262. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts +48 -0
  263. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts.map +1 -0
  264. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js +79 -0
  265. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js.map +1 -0
  266. package/node_modules/@noodle-borg/service/dist/index.d.ts +7 -0
  267. package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -0
  268. package/node_modules/@noodle-borg/service/dist/index.js +7 -0
  269. package/node_modules/@noodle-borg/service/dist/index.js.map +1 -0
  270. package/node_modules/@noodle-borg/service/dist/main.d.ts +3 -0
  271. package/node_modules/@noodle-borg/service/dist/main.d.ts.map +1 -0
  272. package/node_modules/@noodle-borg/service/dist/main.js +171 -0
  273. package/node_modules/@noodle-borg/service/dist/main.js.map +1 -0
  274. package/node_modules/@noodle-borg/service/dist/oauth/app.d.ts +14 -0
  275. package/node_modules/@noodle-borg/service/dist/oauth/app.d.ts.map +1 -0
  276. package/node_modules/@noodle-borg/service/dist/oauth/app.js +48 -0
  277. package/node_modules/@noodle-borg/service/dist/oauth/app.js.map +1 -0
  278. package/node_modules/@noodle-borg/service/dist/oauth/consent.d.ts +18 -0
  279. package/node_modules/@noodle-borg/service/dist/oauth/consent.d.ts.map +1 -0
  280. package/node_modules/@noodle-borg/service/dist/oauth/consent.js +55 -0
  281. package/node_modules/@noodle-borg/service/dist/oauth/consent.js.map +1 -0
  282. package/node_modules/@noodle-borg/service/dist/oauth/google.d.ts +31 -0
  283. package/node_modules/@noodle-borg/service/dist/oauth/google.d.ts.map +1 -0
  284. package/node_modules/@noodle-borg/service/dist/oauth/google.js +39 -0
  285. package/node_modules/@noodle-borg/service/dist/oauth/google.js.map +1 -0
  286. package/node_modules/@noodle-borg/service/dist/oauth/paths.d.ts +3 -0
  287. package/node_modules/@noodle-borg/service/dist/oauth/paths.d.ts.map +1 -0
  288. package/node_modules/@noodle-borg/service/dist/oauth/paths.js +19 -0
  289. package/node_modules/@noodle-borg/service/dist/oauth/paths.js.map +1 -0
  290. package/node_modules/@noodle-borg/service/dist/oauth/provider.d.ts +61 -0
  291. package/node_modules/@noodle-borg/service/dist/oauth/provider.d.ts.map +1 -0
  292. package/node_modules/@noodle-borg/service/dist/oauth/provider.js +313 -0
  293. package/node_modules/@noodle-borg/service/dist/oauth/provider.js.map +1 -0
  294. package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.d.ts +29 -0
  295. package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.d.ts.map +1 -0
  296. package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.js +176 -0
  297. package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.js.map +1 -0
  298. package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts +85 -0
  299. package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts.map +1 -0
  300. package/node_modules/@noodle-borg/service/dist/oauth/store.js +57 -0
  301. package/node_modules/@noodle-borg/service/dist/oauth/store.js.map +1 -0
  302. package/node_modules/@noodle-borg/service/dist/oauth/tokens.d.ts +8 -0
  303. package/node_modules/@noodle-borg/service/dist/oauth/tokens.d.ts.map +1 -0
  304. package/node_modules/@noodle-borg/service/dist/oauth/tokens.js +13 -0
  305. package/node_modules/@noodle-borg/service/dist/oauth/tokens.js.map +1 -0
  306. package/node_modules/@noodle-borg/service/dist/secret/kms-master-key.d.ts +36 -0
  307. package/node_modules/@noodle-borg/service/dist/secret/kms-master-key.d.ts.map +1 -0
  308. package/node_modules/@noodle-borg/service/dist/secret/kms-master-key.js +51 -0
  309. package/node_modules/@noodle-borg/service/dist/secret/kms-master-key.js.map +1 -0
  310. package/node_modules/@noodle-borg/service/dist/service.d.ts +221 -0
  311. package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -0
  312. package/node_modules/@noodle-borg/service/dist/service.js +1163 -0
  313. package/node_modules/@noodle-borg/service/dist/service.js.map +1 -0
  314. package/node_modules/@noodle-borg/service/dist/store/cloudsql-pool.d.ts +34 -0
  315. package/node_modules/@noodle-borg/service/dist/store/cloudsql-pool.d.ts.map +1 -0
  316. package/node_modules/@noodle-borg/service/dist/store/cloudsql-pool.js +38 -0
  317. package/node_modules/@noodle-borg/service/dist/store/cloudsql-pool.js.map +1 -0
  318. package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts +56 -0
  319. package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts.map +1 -0
  320. package/node_modules/@noodle-borg/service/dist/store/postgres.js +372 -0
  321. package/node_modules/@noodle-borg/service/dist/store/postgres.js.map +1 -0
  322. package/node_modules/@noodle-borg/service/dist/store.d.ts +192 -0
  323. package/node_modules/@noodle-borg/service/dist/store.d.ts.map +1 -0
  324. package/node_modules/@noodle-borg/service/dist/store.js +230 -0
  325. package/node_modules/@noodle-borg/service/dist/store.js.map +1 -0
  326. package/node_modules/@noodle-borg/service/package.json +44 -0
  327. package/node_modules/@noodle-borg/transport-http/dist/caller-auth.d.ts +15 -0
  328. package/node_modules/@noodle-borg/transport-http/dist/caller-auth.d.ts.map +1 -0
  329. package/node_modules/@noodle-borg/transport-http/dist/caller-auth.js +38 -0
  330. package/node_modules/@noodle-borg/transport-http/dist/caller-auth.js.map +1 -0
  331. package/node_modules/@noodle-borg/transport-http/dist/examples/serve-demo.d.ts +2 -0
  332. package/node_modules/@noodle-borg/transport-http/dist/examples/serve-demo.d.ts.map +1 -0
  333. package/node_modules/@noodle-borg/transport-http/dist/examples/serve-demo.js +129 -0
  334. package/node_modules/@noodle-borg/transport-http/dist/examples/serve-demo.js.map +1 -0
  335. package/node_modules/@noodle-borg/transport-http/dist/front-door.d.ts +46 -0
  336. package/node_modules/@noodle-borg/transport-http/dist/front-door.d.ts.map +1 -0
  337. package/node_modules/@noodle-borg/transport-http/dist/front-door.js +75 -0
  338. package/node_modules/@noodle-borg/transport-http/dist/front-door.js.map +1 -0
  339. package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts +142 -0
  340. package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts.map +1 -0
  341. package/node_modules/@noodle-borg/transport-http/dist/handler.js +387 -0
  342. package/node_modules/@noodle-borg/transport-http/dist/handler.js.map +1 -0
  343. package/node_modules/@noodle-borg/transport-http/dist/index.d.ts +6 -0
  344. package/node_modules/@noodle-borg/transport-http/dist/index.d.ts.map +1 -0
  345. package/node_modules/@noodle-borg/transport-http/dist/index.js +6 -0
  346. package/node_modules/@noodle-borg/transport-http/dist/index.js.map +1 -0
  347. package/node_modules/@noodle-borg/transport-http/dist/logging.d.ts +41 -0
  348. package/node_modules/@noodle-borg/transport-http/dist/logging.d.ts.map +1 -0
  349. package/node_modules/@noodle-borg/transport-http/dist/logging.js +71 -0
  350. package/node_modules/@noodle-borg/transport-http/dist/logging.js.map +1 -0
  351. package/node_modules/@noodle-borg/transport-http/dist/serve.d.ts +22 -0
  352. package/node_modules/@noodle-borg/transport-http/dist/serve.d.ts.map +1 -0
  353. package/node_modules/@noodle-borg/transport-http/dist/serve.js +25 -0
  354. package/node_modules/@noodle-borg/transport-http/dist/serve.js.map +1 -0
  355. package/node_modules/@noodle-borg/transport-http/package.json +30 -0
  356. package/package.json +78 -0
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Runnable end-to-end demo: compile a manifest, wire a **real, authenticated** HTTP connector across
3
+ * **two** hosts, and serve it as a remote MCP server over Streamable HTTP. Build the package, then run:
4
+ *
5
+ * node packages/transport-http/dist/examples/serve-demo.js
6
+ *
7
+ * Point an MCP client (e.g. the MCP Inspector) at the printed URL, or use the sample curl below. The
8
+ * `derive_and_enrich` tool runs a **synchronous flow** that chains two authenticated POSTs:
9
+ * 1. POST https://httpbin.org/anything with `Authorization: Bearer …` (host 1)
10
+ * 2. POST https://httpbingo.org/anything with `X-API-Key: …` (host 2), using step 1's result
11
+ * Both endpoints echo the request back, so the response visibly proves the auth headers and bodies were
12
+ * actually sent — a real authenticated, multi-host, multi-step tool call over MCP.
13
+ */
14
+ import { compile, InMemoryCatalog, } from '@noodle-borg/compiler';
15
+ import { HttpConnector } from '@noodle-borg/connector-http';
16
+ import { InMemoryConnectorRegistry, } from '@noodle-borg/runtime';
17
+ import { serveHttp } from '../index.js';
18
+ const MANIFEST = `
19
+ manifestVersion: "0.2"
20
+ server:
21
+ name: demo_chain
22
+ version: 1.0.0
23
+ title: Demo Chain
24
+ connectors:
25
+ echo:
26
+ id: httpecho
27
+ version: 1.0.0
28
+ tools:
29
+ - name: derive_and_enrich
30
+ description: Create a derived token via an authenticated POST, then enrich it via a second authenticated POST on another host.
31
+ inputSchema:
32
+ type: object
33
+ properties:
34
+ label:
35
+ type: string
36
+ required:
37
+ - label
38
+ additionalProperties: false
39
+ fulfilment:
40
+ steps:
41
+ - id: create
42
+ use: echo.create
43
+ args:
44
+ label: \${input.label}
45
+ - id: enrich
46
+ use: echo.enrich
47
+ args:
48
+ derived: \${steps.create.token}
49
+ output:
50
+ created: \${steps.create.token}
51
+ enriched: \${steps.enrich.derived}
52
+ `;
53
+ const createSig = {
54
+ type: 'action',
55
+ input: { label: { type: 'string', required: true } },
56
+ output: { token: { type: 'string' } },
57
+ };
58
+ const enrichSig = {
59
+ type: 'action',
60
+ input: { derived: { type: 'string', required: true } },
61
+ output: { derived: { type: 'string' } },
62
+ };
63
+ const httpecho = {
64
+ id: 'httpecho',
65
+ version: '1.0.0',
66
+ kind: 'catalog',
67
+ operations: { create: createSig, enrich: enrichSig },
68
+ };
69
+ function deps() {
70
+ const connector = new HttpConnector({
71
+ id: 'httpecho',
72
+ version: '1.0.0',
73
+ baseUrl: 'https://httpbin.org',
74
+ // Egress allowlist: the connector may only reach these two declared hosts.
75
+ allowedOrigins: ['https://httpbin.org', 'https://httpbingo.org'],
76
+ operations: {
77
+ create: {
78
+ method: 'POST',
79
+ path: '/anything',
80
+ auth: { kind: 'bearer' },
81
+ body: (args) => ({ label: args.label }),
82
+ signature: createSig,
83
+ mapResponse: (json) => ({ token: json.json.label }),
84
+ },
85
+ enrich: {
86
+ method: 'POST',
87
+ path: '/anything',
88
+ baseUrl: 'https://httpbingo.org', // a second declared host
89
+ auth: { kind: 'apiKey', header: 'X-API-Key' },
90
+ body: (args) => ({ derived: args.derived }),
91
+ signature: enrichSig,
92
+ mapResponse: (json) => ({ derived: json.json.derived }),
93
+ },
94
+ },
95
+ });
96
+ // A broker that mints a different downstream credential per operation. This is the seam where a real
97
+ // broker would fetch a per-host API key from a secret store — secrets never live in the manifest.
98
+ const broker = {
99
+ getCredential(request) {
100
+ const token = request.operation === 'create' ? 'demo-bearer-key-host1' : 'demo-api-key-host2';
101
+ return Promise.resolve({ token });
102
+ },
103
+ };
104
+ return { connectors: new InMemoryConnectorRegistry([connector]), broker };
105
+ }
106
+ async function main() {
107
+ const result = compile(MANIFEST, { catalog: new InMemoryCatalog([httpecho]) });
108
+ if (!result.ok) {
109
+ console.error('manifest failed to compile:', result.errors);
110
+ process.exit(1);
111
+ }
112
+ const target = { artifact: result.artifact, deps: deps() };
113
+ const port = Number(process.env.PORT ?? 8765);
114
+ const running = await serveHttp({ target, port });
115
+ const accept = 'application/json, text/event-stream';
116
+ console.log(`Noodle Borg MCP server (remote, Streamable HTTP) listening at ${running.url}`);
117
+ console.log('Initialize:');
118
+ console.log(` curl -s ${running.url} -H 'content-type: application/json' -H 'accept: ${accept}' ` +
119
+ `-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25"}}'`);
120
+ console.log('Call derive_and_enrich (runs an authenticated two-host flow over MCP):');
121
+ console.log(` curl -s ${running.url} -H 'content-type: application/json' -H 'accept: ${accept}' ` +
122
+ `-H 'mcp-protocol-version: 2025-11-25' ` +
123
+ `-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"derive_and_enrich","arguments":{"label":"hello"}}}'`);
124
+ }
125
+ main().catch((error) => {
126
+ console.error(error);
127
+ process.exit(1);
128
+ });
129
+ //# sourceMappingURL=serve-demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve-demo.js","sourceRoot":"","sources":["../../src/examples/serve-demo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ /**
3
+ * In-app HTTPS posture for a TLS-**proxy-terminated** deployment (Slice 28, ADR 0033). The runtime itself
4
+ * always speaks plain HTTP behind a trusted reverse proxy (it never handles certs); this module enforces
5
+ * the *client*-facing HTTPS expectation and emits baseline security headers. The actual cert / DNS / load
6
+ * balancer is an out-of-repo hosting decision.
7
+ */
8
+ export interface TlsPosture {
9
+ /**
10
+ * Trust `X-Forwarded-Proto` / RFC 7239 `Forwarded` from the fronting proxy. Default `false` (direct /
11
+ * localhost), in which case forwarded headers are **ignored** so a direct client cannot spoof `https`.
12
+ * Enable **only** behind a trusted proxy that strips client-supplied copies of these headers.
13
+ */
14
+ readonly trustProxy?: boolean;
15
+ /** Reject a request the proxy marks as plaintext `http` with `426`. Default: on when `trustProxy`. */
16
+ readonly requireHttps?: boolean;
17
+ /**
18
+ * Emit `Strict-Transport-Security`. Default: on when `trustProxy`. `maxAge` default 2y,
19
+ * `includeSubDomains` default true, `preload` default **false** (preload is hard to reverse — opt in).
20
+ */
21
+ readonly hsts?: boolean | {
22
+ maxAgeSeconds?: number;
23
+ includeSubDomains?: boolean;
24
+ preload?: boolean;
25
+ };
26
+ }
27
+ /**
28
+ * The effective client-facing scheme. With `trustProxy`, read `X-Forwarded-Proto` (first hop) or RFC 7239
29
+ * `Forwarded: proto=`; otherwise the forwarded headers are ignored and the scheme is `http` (the runtime's
30
+ * own socket). A trusted proxy that omits the header is treated as `http` (fail safe → enforcement fires).
31
+ */
32
+ export declare function effectiveProto(req: IncomingMessage, trustProxy: boolean): 'http' | 'https';
33
+ /**
34
+ * Enforce the HTTPS posture. When `requireHttps` (default = `trustProxy`) and the effective scheme is
35
+ * plaintext `http`, write a `426 Upgrade Required` (with an `Upgrade` header + transport-level JSON-RPC
36
+ * error) and return `true` (request handled). Otherwise return `false`.
37
+ */
38
+ export declare function enforceHttps(req: IncomingMessage, res: ServerResponse, posture: TlsPosture): boolean;
39
+ /**
40
+ * Host-agnostic baseline security headers for every response (set via `setHeader`, before the body is
41
+ * written, so they ride along with whatever status follows): `X-Content-Type-Options: nosniff`,
42
+ * `Referrer-Policy: no-referrer`, `Cache-Control: no-store` (responses carry tokens/JSON), and
43
+ * `Strict-Transport-Security` when the posture calls for it.
44
+ */
45
+ export declare function applySecurityHeaders(res: ServerResponse, posture: TlsPosture): void;
46
+ //# sourceMappingURL=front-door.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"front-door.d.ts","sourceRoot":"","sources":["../src/front-door.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGjE;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,sGAAsG;IACtG,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EACV,OAAO,GACP;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAChF;AASD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAc1F;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,UAAU,GAClB,OAAO,CAiBT;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAWnF"}
@@ -0,0 +1,75 @@
1
+ import { JSON_RPC } from '@noodle-borg/protocol';
2
+ const TWO_YEARS_SECONDS = 63_072_000;
3
+ function header(req, name) {
4
+ const value = req.headers[name];
5
+ return Array.isArray(value) ? value[0] : value;
6
+ }
7
+ /**
8
+ * The effective client-facing scheme. With `trustProxy`, read `X-Forwarded-Proto` (first hop) or RFC 7239
9
+ * `Forwarded: proto=`; otherwise the forwarded headers are ignored and the scheme is `http` (the runtime's
10
+ * own socket). A trusted proxy that omits the header is treated as `http` (fail safe → enforcement fires).
11
+ */
12
+ export function effectiveProto(req, trustProxy) {
13
+ if (!trustProxy)
14
+ return 'http';
15
+ const forwardedProto = header(req, 'x-forwarded-proto');
16
+ if (forwardedProto) {
17
+ const first = forwardedProto.split(',')[0]?.trim().toLowerCase();
18
+ if (first === 'https')
19
+ return 'https';
20
+ if (first === 'http')
21
+ return 'http';
22
+ }
23
+ const forwarded = header(req, 'forwarded');
24
+ if (forwarded) {
25
+ const match = /proto=("?)(https?)\1/i.exec(forwarded);
26
+ if (match)
27
+ return match[2]?.toLowerCase() === 'https' ? 'https' : 'http';
28
+ }
29
+ return 'http';
30
+ }
31
+ /**
32
+ * Enforce the HTTPS posture. When `requireHttps` (default = `trustProxy`) and the effective scheme is
33
+ * plaintext `http`, write a `426 Upgrade Required` (with an `Upgrade` header + transport-level JSON-RPC
34
+ * error) and return `true` (request handled). Otherwise return `false`.
35
+ */
36
+ export function enforceHttps(req, res, posture) {
37
+ const trustProxy = posture.trustProxy ?? false;
38
+ const requireHttps = posture.requireHttps ?? trustProxy;
39
+ if (!requireHttps)
40
+ return false;
41
+ if (effectiveProto(req, trustProxy) === 'https')
42
+ return false;
43
+ res.writeHead(426, {
44
+ 'content-type': 'application/json; charset=utf-8',
45
+ upgrade: 'TLS/1.2, HTTP/1.1',
46
+ });
47
+ res.end(JSON.stringify({
48
+ jsonrpc: '2.0',
49
+ id: null,
50
+ error: { code: JSON_RPC.INVALID_REQUEST, message: 'HTTPS required' },
51
+ }));
52
+ return true;
53
+ }
54
+ /**
55
+ * Host-agnostic baseline security headers for every response (set via `setHeader`, before the body is
56
+ * written, so they ride along with whatever status follows): `X-Content-Type-Options: nosniff`,
57
+ * `Referrer-Policy: no-referrer`, `Cache-Control: no-store` (responses carry tokens/JSON), and
58
+ * `Strict-Transport-Security` when the posture calls for it.
59
+ */
60
+ export function applySecurityHeaders(res, posture) {
61
+ res.setHeader('X-Content-Type-Options', 'nosniff');
62
+ res.setHeader('Referrer-Policy', 'no-referrer');
63
+ res.setHeader('Cache-Control', 'no-store');
64
+ const hsts = posture.hsts ?? posture.trustProxy ?? false;
65
+ if (!hsts)
66
+ return;
67
+ const opts = typeof hsts === 'object' ? hsts : {};
68
+ const parts = [`max-age=${opts.maxAgeSeconds ?? TWO_YEARS_SECONDS}`];
69
+ if (opts.includeSubDomains ?? true)
70
+ parts.push('includeSubDomains');
71
+ if (opts.preload ?? false)
72
+ parts.push('preload');
73
+ res.setHeader('Strict-Transport-Security', parts.join('; '));
74
+ }
75
+ //# sourceMappingURL=front-door.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"front-door.js","sourceRoot":"","sources":["../src/front-door.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,142 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import { type ServedArtifact } from '@noodle-borg/protocol';
3
+ import { type TlsPosture } from './front-door.js';
4
+ import { type Logger } from './logging.js';
5
+ /** Origins allowed to call the endpoint: an explicit list, a predicate, or undefined (allow any). */
6
+ export type OriginPolicy = readonly string[] | ((origin: string) => boolean);
7
+ export interface HttpHandlerOptions {
8
+ /** The single MCP endpoint path. Default `/mcp`. */
9
+ readonly endpoint?: string;
10
+ /**
11
+ * Allowed `Origin` values (DNS-rebinding protection). When set, a request whose `Origin` header is
12
+ * present and not allowed gets `403`. When undefined, any origin is allowed (dev only — set this in
13
+ * production). A request with no `Origin` header (a non-browser client) is always allowed.
14
+ */
15
+ readonly allowedOrigins?: OriginPolicy;
16
+ /** Maximum request body size in bytes. Default 1 MiB. */
17
+ readonly maxBodyBytes?: number;
18
+ /**
19
+ * SHA-256 hash of the per-server caller key. When set, every request must present
20
+ * `Authorization: Bearer <key>` whose hash matches, or it gets `401` (see {@link mintCallerKey}).
21
+ * Omit for an open endpoint (dev/single-server use).
22
+ */
23
+ readonly callerKeyHash?: string;
24
+ /** Structured logger for request-lifecycle events (`mcp.request`). Default: a no-op logger. */
25
+ readonly logger?: Logger;
26
+ /**
27
+ * In-app HTTPS posture for a TLS-proxy-terminated deployment (Slice 28, ADR 0033). Default: baseline
28
+ * security headers only, no HTTPS enforcement and no HSTS (dev / direct bind).
29
+ */
30
+ readonly tls?: TlsPosture;
31
+ /**
32
+ * Verify an access token for identity-based deployments (OA-1, end-user OAuth). Returns the verified
33
+ * identity, or `null` when the token is missing/invalid/expired. Injected by the service (backed by
34
+ * `@noodle-borg/auth` + `jose`), so the transport stays free of any token library. When a deployment uses
35
+ * an identity access mode and no verifier is configured, the endpoint fails closed (`401`).
36
+ */
37
+ readonly verifyOwnerToken?: OwnerTokenVerifier;
38
+ /**
39
+ * Authorize a verified identity for a non-owner identity mode. The service injects this callback so
40
+ * transport stays isolated from the control-plane org/member store.
41
+ */
42
+ readonly authorizeDataPlaneIdentity?: DataPlaneIdentityAuthorizer;
43
+ /**
44
+ * Verify caller-key access against the current tenant state. When set for tenant-routed requests, this
45
+ * overrides the static cached `callerKeyHash` so a multi-instance service can rotate or revoke keys
46
+ * without waiting for every instance-local compiled target cache to refresh.
47
+ */
48
+ readonly verifyCallerKeyForTenant?: CallerKeyTenantVerifier;
49
+ /**
50
+ * Request admission hook for MCP JSON-RPC requests after authentication and JSON parsing, before SDK
51
+ * execution. The default is allow; injected policy can log, suspend, quota, or deny per request.
52
+ */
53
+ readonly admissionGate?: AdmissionGate;
54
+ }
55
+ /**
56
+ * Resolve an owner access token to its verified subject (claims only — the raw token never crosses the
57
+ * front-door). `resource` is the canonical tenant MCP URL the token must be audience-bound to (RFC 8707).
58
+ */
59
+ export type OwnerTokenVerifier = (token: string, resource: string) => Promise<{
60
+ readonly subject: string;
61
+ readonly email?: string;
62
+ } | null>;
63
+ export type DataPlaneIdentityAuthorizer = (input: {
64
+ readonly accessMode: AccessMode;
65
+ readonly org: string;
66
+ readonly subject: string;
67
+ readonly email?: string;
68
+ }) => Promise<boolean>;
69
+ export type CallerKeyTenantVerifier = (input: {
70
+ readonly tenant: TenantRouteRef;
71
+ readonly token: string | null;
72
+ readonly cachedCallerKeyHash: string | undefined;
73
+ }) => Promise<boolean>;
74
+ export type AdmissionCategory = 'protocol' | 'discovery' | 'read' | 'execute';
75
+ export interface AdmissionContext {
76
+ readonly routeId: string;
77
+ readonly method: string;
78
+ readonly category: AdmissionCategory;
79
+ readonly name?: string;
80
+ readonly org?: string;
81
+ readonly app?: string;
82
+ readonly env?: string;
83
+ readonly accessMode?: AccessMode;
84
+ readonly deploymentId?: string;
85
+ }
86
+ export type AdmissionDecision = {
87
+ readonly allow: true;
88
+ readonly reason?: string;
89
+ } | {
90
+ readonly allow: false;
91
+ readonly reason: string;
92
+ readonly status?: 403 | 429;
93
+ };
94
+ export type AdmissionGate = (context: AdmissionContext) => Promise<AdmissionDecision>;
95
+ /** How callers authenticate to a deployed endpoint. */
96
+ export type AccessMode = 'caller-key' | 'owner-only' | 'org-members';
97
+ export interface TenantRouteRef {
98
+ readonly org: string;
99
+ readonly app: string;
100
+ readonly env: string;
101
+ }
102
+ /**
103
+ * Build a `node:http` request listener that serves one {@link ServedArtifact} over the MCP **Streamable
104
+ * HTTP** transport (the remote transport). This is the security/HTTP front-door: it validates origin,
105
+ * method, content negotiation, and body size, then hands the parsed JSON-RPC body to the official
106
+ * `@modelcontextprotocol/sdk` stateless transport ([ADR 0021]), which owns framing and version
107
+ * negotiation. It is **stateless** — no `MCP-Session-Id` is issued. Server-initiated streaming (SSE)
108
+ * is not offered, so `GET` returns `405`.
109
+ */
110
+ export declare function createMcpHttpHandler(target: ServedArtifact, options?: HttpHandlerOptions): (req: IncomingMessage, res: ServerResponse) => void;
111
+ /** A resolved tenant: its served artifact plus how callers authenticate to it. */
112
+ export interface ServedTarget {
113
+ readonly served: ServedArtifact;
114
+ /** Per-server caller-key hash (Slice 24, ADR 0030) — used when {@link accessMode} is `caller-key`. */
115
+ readonly callerKeyHash?: string;
116
+ /** How callers authenticate. Default `caller-key` (the shared per-server bearer). */
117
+ readonly accessMode?: AccessMode;
118
+ /**
119
+ * For `owner-only` (OA-1): the deployer's subject — the only identity permitted to call this endpoint.
120
+ * Resolved against a verified owner token by {@link HttpHandlerOptions.verifyOwnerToken}.
121
+ */
122
+ readonly ownerSubject?: string;
123
+ /** Tenant org used by org-scoped identity access modes. */
124
+ readonly org?: string;
125
+ }
126
+ /**
127
+ * Resolve a {@link ServedTarget} for a given server id. **Async** (ADR 0036): on a cache miss the resolver
128
+ * may point-read a durable store and recompile, so any instance can serve any deploy. It resolves to
129
+ * `undefined` when there is no such server (→ `404`); a thrown error (store/compile failure) becomes a
130
+ * `500`. Used by {@link createMcpRouter} to serve many tenants from one process.
131
+ */
132
+ export type ServerLookup = (deploymentId: string) => Promise<ServedTarget | undefined>;
133
+ export type TenantLookup = (ref: TenantRouteRef) => Promise<ServedTarget | undefined>;
134
+ /**
135
+ * Build a `node:http` request listener that serves **many** tenants over MCP Streamable HTTP, routing
136
+ * by tenant paths. Each request reuses the same stateless pipeline as
137
+ * {@link createMcpHttpHandler}; an unknown path or unknown server id returns `404`.
138
+ */
139
+ export declare function createMcpRouter(lookup: ServerLookup, options?: HttpHandlerOptions & {
140
+ readonly tenantLookup?: TenantLookup;
141
+ }): (req: IncomingMessage, res: ServerResponse) => void;
142
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"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"}