@rudderhq/server 0.5.2-canary.2 → 0.6.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 (386) hide show
  1. package/dist/bootstrap/register-api-routes.d.ts.map +1 -1
  2. package/dist/bootstrap/register-api-routes.js +15 -0
  3. package/dist/bootstrap/register-api-routes.js.map +1 -1
  4. package/dist/bootstrap/types.d.ts +11 -0
  5. package/dist/bootstrap/types.d.ts.map +1 -1
  6. package/dist/bundled-plugins/plugin-linear/dist/worker.js +741 -7
  7. package/dist/bundled-plugins/plugin-linear/dist/worker.js.map +3 -3
  8. package/dist/config.d.ts +2 -0
  9. package/dist/config.d.ts.map +1 -1
  10. package/dist/config.js +3 -0
  11. package/dist/config.js.map +1 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +28 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/local-runtime.d.ts +7 -0
  16. package/dist/local-runtime.d.ts.map +1 -1
  17. package/dist/local-runtime.js +15 -1
  18. package/dist/local-runtime.js.map +1 -1
  19. package/dist/middleware/auth.js +2 -2
  20. package/dist/middleware/auth.js.map +1 -1
  21. package/dist/middleware/error-handler.d.ts.map +1 -1
  22. package/dist/middleware/error-handler.js +3 -2
  23. package/dist/middleware/error-handler.js.map +1 -1
  24. package/dist/middleware/logger.d.ts +4 -0
  25. package/dist/middleware/logger.d.ts.map +1 -1
  26. package/dist/middleware/logger.js +82 -7
  27. package/dist/middleware/logger.js.map +1 -1
  28. package/dist/middleware/logger.test.js +94 -1
  29. package/dist/middleware/logger.test.js.map +1 -1
  30. package/dist/routes/chats.annotation-routes.d.ts +47 -0
  31. package/dist/routes/chats.annotation-routes.d.ts.map +1 -0
  32. package/dist/routes/chats.annotation-routes.js +164 -0
  33. package/dist/routes/chats.annotation-routes.js.map +1 -0
  34. package/dist/routes/chats.d.ts.map +1 -1
  35. package/dist/routes/chats.js +467 -165
  36. package/dist/routes/chats.js.map +1 -1
  37. package/dist/routes/chats.stream-routes.d.ts +1 -10
  38. package/dist/routes/chats.stream-routes.d.ts.map +1 -1
  39. package/dist/routes/chats.stream-routes.js +168 -110
  40. package/dist/routes/chats.stream-routes.js.map +1 -1
  41. package/dist/routes/chats.stream-support.d.ts +79 -0
  42. package/dist/routes/chats.stream-support.d.ts.map +1 -0
  43. package/dist/routes/chats.stream-support.js +121 -0
  44. package/dist/routes/chats.stream-support.js.map +1 -0
  45. package/dist/routes/issues.comments-attachments.d.ts.map +1 -1
  46. package/dist/routes/issues.comments-attachments.js +16 -2
  47. package/dist/routes/issues.comments-attachments.js.map +1 -1
  48. package/dist/routes/issues.d.ts.map +1 -1
  49. package/dist/routes/issues.js +21 -4
  50. package/dist/routes/issues.js.map +1 -1
  51. package/dist/routes/issues.mutations.d.ts.map +1 -1
  52. package/dist/routes/issues.mutations.js +20 -33
  53. package/dist/routes/issues.mutations.js.map +1 -1
  54. package/dist/routes/managed-mcp-agent-bindings.d.ts +15 -0
  55. package/dist/routes/managed-mcp-agent-bindings.d.ts.map +1 -0
  56. package/dist/routes/managed-mcp-agent-bindings.js +66 -0
  57. package/dist/routes/managed-mcp-agent-bindings.js.map +1 -0
  58. package/dist/routes/managed-mcp-connections.d.ts +8 -0
  59. package/dist/routes/managed-mcp-connections.d.ts.map +1 -0
  60. package/dist/routes/managed-mcp-connections.js +189 -0
  61. package/dist/routes/managed-mcp-connections.js.map +1 -0
  62. package/dist/routes/managed-mcp-runtime.d.ts +5 -0
  63. package/dist/routes/managed-mcp-runtime.d.ts.map +1 -0
  64. package/dist/routes/managed-mcp-runtime.js +148 -0
  65. package/dist/routes/managed-mcp-runtime.js.map +1 -0
  66. package/dist/routes/messenger.d.ts.map +1 -1
  67. package/dist/routes/messenger.js +1 -1
  68. package/dist/routes/messenger.js.map +1 -1
  69. package/dist/services/access.d.ts.map +1 -1
  70. package/dist/services/access.js +91 -12
  71. package/dist/services/access.js.map +1 -1
  72. package/dist/services/agent-run-context.d.ts +1 -0
  73. package/dist/services/agent-run-context.d.ts.map +1 -1
  74. package/dist/services/agent-run-context.js +5 -1
  75. package/dist/services/agent-run-context.js.map +1 -1
  76. package/dist/services/board-auth.d.ts +2 -2
  77. package/dist/services/chat-annotation-copy-lineage.d.ts +32 -0
  78. package/dist/services/chat-annotation-copy-lineage.d.ts.map +1 -0
  79. package/dist/services/chat-annotation-copy-lineage.js +110 -0
  80. package/dist/services/chat-annotation-copy-lineage.js.map +1 -0
  81. package/dist/services/chat-assistant.annotations.d.ts +16 -0
  82. package/dist/services/chat-assistant.annotations.d.ts.map +1 -0
  83. package/dist/services/chat-assistant.annotations.js +108 -0
  84. package/dist/services/chat-assistant.annotations.js.map +1 -0
  85. package/dist/services/chat-assistant.annotations.test.d.ts +2 -0
  86. package/dist/services/chat-assistant.annotations.test.d.ts.map +1 -0
  87. package/dist/services/chat-assistant.annotations.test.js +257 -0
  88. package/dist/services/chat-assistant.annotations.test.js.map +1 -0
  89. package/dist/services/chat-assistant.d.ts.map +1 -1
  90. package/dist/services/chat-assistant.helpers.d.ts +2 -3
  91. package/dist/services/chat-assistant.helpers.d.ts.map +1 -1
  92. package/dist/services/chat-assistant.helpers.js +37 -53
  93. package/dist/services/chat-assistant.helpers.js.map +1 -1
  94. package/dist/services/chat-assistant.js +61 -5
  95. package/dist/services/chat-assistant.js.map +1 -1
  96. package/dist/services/chat-generation-protocol.d.ts +8 -15
  97. package/dist/services/chat-generation-protocol.d.ts.map +1 -1
  98. package/dist/services/chat-generation-protocol.js +19 -59
  99. package/dist/services/chat-generation-protocol.js.map +1 -1
  100. package/dist/services/chat-generation-protocol.test.js +168 -6
  101. package/dist/services/chat-generation-protocol.test.js.map +1 -1
  102. package/dist/services/chat-generation-provenance.d.ts +14 -0
  103. package/dist/services/chat-generation-provenance.d.ts.map +1 -0
  104. package/dist/services/chat-generation-provenance.js +71 -0
  105. package/dist/services/chat-generation-provenance.js.map +1 -0
  106. package/dist/services/chat-inline-annotation-rendering.d.ts +2 -0
  107. package/dist/services/chat-inline-annotation-rendering.d.ts.map +1 -0
  108. package/dist/services/chat-inline-annotation-rendering.js +265 -0
  109. package/dist/services/chat-inline-annotation-rendering.js.map +1 -0
  110. package/dist/services/chat-inline-annotation-resolved-labels.d.ts +11 -0
  111. package/dist/services/chat-inline-annotation-resolved-labels.d.ts.map +1 -0
  112. package/dist/services/chat-inline-annotation-resolved-labels.js +490 -0
  113. package/dist/services/chat-inline-annotation-resolved-labels.js.map +1 -0
  114. package/dist/services/chat-inline-annotation-validation.d.ts +15 -0
  115. package/dist/services/chat-inline-annotation-validation.d.ts.map +1 -0
  116. package/dist/services/chat-inline-annotation-validation.js +430 -0
  117. package/dist/services/chat-inline-annotation-validation.js.map +1 -0
  118. package/dist/services/chat-inline-annotations.d.ts +18 -0
  119. package/dist/services/chat-inline-annotations.d.ts.map +1 -0
  120. package/dist/services/chat-inline-annotations.js +52 -0
  121. package/dist/services/chat-inline-annotations.js.map +1 -0
  122. package/dist/services/chat-inline-annotations.test.d.ts +2 -0
  123. package/dist/services/chat-inline-annotations.test.d.ts.map +1 -0
  124. package/dist/services/chat-inline-annotations.test.js +1306 -0
  125. package/dist/services/chat-inline-annotations.test.js.map +1 -0
  126. package/dist/services/chat-queued-message-materialization.d.ts +126 -0
  127. package/dist/services/chat-queued-message-materialization.d.ts.map +1 -0
  128. package/dist/services/chat-queued-message-materialization.js +327 -0
  129. package/dist/services/chat-queued-message-materialization.js.map +1 -0
  130. package/dist/services/chat-steer-messages.d.ts +3 -3
  131. package/dist/services/chat-steer-messages.d.ts.map +1 -1
  132. package/dist/services/chat-steer-messages.js +50 -80
  133. package/dist/services/chat-steer-messages.js.map +1 -1
  134. package/dist/services/chat-work-manifest.d.ts.map +1 -1
  135. package/dist/services/chat-work-manifest.js +5 -1
  136. package/dist/services/chat-work-manifest.js.map +1 -1
  137. package/dist/services/chats.annotation-persistence.d.ts +20 -0
  138. package/dist/services/chats.annotation-persistence.d.ts.map +1 -0
  139. package/dist/services/chats.annotation-persistence.js +206 -0
  140. package/dist/services/chats.annotation-persistence.js.map +1 -0
  141. package/dist/services/chats.d.ts +129 -96
  142. package/dist/services/chats.d.ts.map +1 -1
  143. package/dist/services/chats.helpers.d.ts +2 -2
  144. package/dist/services/chats.inline-visual-persistence.d.ts +3 -3
  145. package/dist/services/chats.inline-visual-persistence.d.ts.map +1 -1
  146. package/dist/services/chats.inline-visual-persistence.js +114 -54
  147. package/dist/services/chats.inline-visual-persistence.js.map +1 -1
  148. package/dist/services/chats.js +743 -252
  149. package/dist/services/chats.js.map +1 -1
  150. package/dist/services/finance.d.ts +1 -1
  151. package/dist/services/index.d.ts +8 -0
  152. package/dist/services/index.d.ts.map +1 -1
  153. package/dist/services/index.js +8 -0
  154. package/dist/services/index.js.map +1 -1
  155. package/dist/services/integrations/agent-integrations.d.ts +2 -2
  156. package/dist/services/integrations/custom-integrations.d.ts +3 -1
  157. package/dist/services/integrations/custom-integrations.d.ts.map +1 -1
  158. package/dist/services/integrations/custom-integrations.js +13 -2
  159. package/dist/services/integrations/custom-integrations.js.map +1 -1
  160. package/dist/services/issues.comments-attachments.d.ts +7 -1
  161. package/dist/services/issues.comments-attachments.d.ts.map +1 -1
  162. package/dist/services/issues.comments-attachments.js +13 -1
  163. package/dist/services/issues.comments-attachments.js.map +1 -1
  164. package/dist/services/issues.d.ts +6 -0
  165. package/dist/services/issues.d.ts.map +1 -1
  166. package/dist/services/issues.js +22 -3
  167. package/dist/services/issues.js.map +1 -1
  168. package/dist/services/knowledge-portability/organization-portability.core.d.ts +4 -1
  169. package/dist/services/knowledge-portability/organization-portability.core.d.ts.map +1 -1
  170. package/dist/services/knowledge-portability/organization-portability.core.js +17 -3
  171. package/dist/services/knowledge-portability/organization-portability.core.js.map +1 -1
  172. package/dist/services/knowledge-portability/organization-portability.export.d.ts.map +1 -1
  173. package/dist/services/knowledge-portability/organization-portability.export.js +2 -2
  174. package/dist/services/knowledge-portability/organization-portability.export.js.map +1 -1
  175. package/dist/services/knowledge-portability/organization-portability.import.d.ts.map +1 -1
  176. package/dist/services/knowledge-portability/organization-portability.import.js +13 -3
  177. package/dist/services/knowledge-portability/organization-portability.import.js.map +1 -1
  178. package/dist/services/knowledge-portability/organization-skills.catalog.d.ts +3 -0
  179. package/dist/services/knowledge-portability/organization-skills.catalog.d.ts.map +1 -1
  180. package/dist/services/knowledge-portability/organization-skills.catalog.js +54 -23
  181. package/dist/services/knowledge-portability/organization-skills.catalog.js.map +1 -1
  182. package/dist/services/knowledge-portability/organization-skills.d.ts.map +1 -1
  183. package/dist/services/knowledge-portability/organization-skills.js +627 -124
  184. package/dist/services/knowledge-portability/organization-skills.js.map +1 -1
  185. package/dist/services/knowledge-portability/organization-skills.sources.d.ts +1 -0
  186. package/dist/services/knowledge-portability/organization-skills.sources.d.ts.map +1 -1
  187. package/dist/services/knowledge-portability/organization-skills.sources.js +53 -10
  188. package/dist/services/knowledge-portability/organization-skills.sources.js.map +1 -1
  189. package/dist/services/mcp/authorizer-lock.d.ts +9 -0
  190. package/dist/services/mcp/authorizer-lock.d.ts.map +1 -0
  191. package/dist/services/mcp/authorizer-lock.js +15 -0
  192. package/dist/services/mcp/authorizer-lock.js.map +1 -0
  193. package/dist/services/mcp/managed-bindings.d.ts +17 -0
  194. package/dist/services/mcp/managed-bindings.d.ts.map +1 -0
  195. package/dist/services/mcp/managed-bindings.js +332 -0
  196. package/dist/services/mcp/managed-bindings.js.map +1 -0
  197. package/dist/services/mcp/managed-client.d.ts +64 -0
  198. package/dist/services/mcp/managed-client.d.ts.map +1 -0
  199. package/dist/services/mcp/managed-client.js +238 -0
  200. package/dist/services/mcp/managed-client.js.map +1 -0
  201. package/dist/services/mcp/managed-client.test.d.ts +2 -0
  202. package/dist/services/mcp/managed-client.test.d.ts.map +1 -0
  203. package/dist/services/mcp/managed-client.test.js +398 -0
  204. package/dist/services/mcp/managed-client.test.js.map +1 -0
  205. package/dist/services/mcp/managed-connections.d.ts +81 -0
  206. package/dist/services/mcp/managed-connections.d.ts.map +1 -0
  207. package/dist/services/mcp/managed-connections.js +920 -0
  208. package/dist/services/mcp/managed-connections.js.map +1 -0
  209. package/dist/services/mcp/managed-runtime.d.ts +134 -0
  210. package/dist/services/mcp/managed-runtime.d.ts.map +1 -0
  211. package/dist/services/mcp/managed-runtime.js +282 -0
  212. package/dist/services/mcp/managed-runtime.js.map +1 -0
  213. package/dist/services/mcp/oauth-provider.d.ts +48 -0
  214. package/dist/services/mcp/oauth-provider.d.ts.map +1 -0
  215. package/dist/services/mcp/oauth-provider.js +120 -0
  216. package/dist/services/mcp/oauth-provider.js.map +1 -0
  217. package/dist/services/mcp/oauth-scope.test.d.ts +2 -0
  218. package/dist/services/mcp/oauth-scope.test.d.ts.map +1 -0
  219. package/dist/services/mcp/oauth-scope.test.js +69 -0
  220. package/dist/services/mcp/oauth-scope.test.js.map +1 -0
  221. package/dist/services/mcp/oauth-session-gc.d.ts +14 -0
  222. package/dist/services/mcp/oauth-session-gc.d.ts.map +1 -0
  223. package/dist/services/mcp/oauth-session-gc.js +34 -0
  224. package/dist/services/mcp/oauth-session-gc.js.map +1 -0
  225. package/dist/services/mcp/oauth-session-gc.test.d.ts +2 -0
  226. package/dist/services/mcp/oauth-session-gc.test.d.ts.map +1 -0
  227. package/dist/services/mcp/oauth-session-gc.test.js +66 -0
  228. package/dist/services/mcp/oauth-session-gc.test.js.map +1 -0
  229. package/dist/services/mcp/oauth.d.ts +61 -0
  230. package/dist/services/mcp/oauth.d.ts.map +1 -0
  231. package/dist/services/mcp/oauth.js +1690 -0
  232. package/dist/services/mcp/oauth.js.map +1 -0
  233. package/dist/services/mcp/pinned-fetch.d.ts +15 -0
  234. package/dist/services/mcp/pinned-fetch.d.ts.map +1 -0
  235. package/dist/services/mcp/pinned-fetch.js +400 -0
  236. package/dist/services/mcp/pinned-fetch.js.map +1 -0
  237. package/dist/services/mcp/pinned-fetch.test.d.ts +2 -0
  238. package/dist/services/mcp/pinned-fetch.test.d.ts.map +1 -0
  239. package/dist/services/mcp/pinned-fetch.test.js +190 -0
  240. package/dist/services/mcp/pinned-fetch.test.js.map +1 -0
  241. package/dist/services/mcp/provider-registry.d.ts +77 -0
  242. package/dist/services/mcp/provider-registry.d.ts.map +1 -0
  243. package/dist/services/mcp/provider-registry.js +80 -0
  244. package/dist/services/mcp/provider-registry.js.map +1 -0
  245. package/dist/services/mcp/provider-registry.test.d.ts +2 -0
  246. package/dist/services/mcp/provider-registry.test.d.ts.map +1 -0
  247. package/dist/services/mcp/provider-registry.test.js +80 -0
  248. package/dist/services/mcp/provider-registry.test.js.map +1 -0
  249. package/dist/services/mcp/security-policy.d.ts +48 -0
  250. package/dist/services/mcp/security-policy.d.ts.map +1 -0
  251. package/dist/services/mcp/security-policy.js +344 -0
  252. package/dist/services/mcp/security-policy.js.map +1 -0
  253. package/dist/services/mcp/security-policy.test.d.ts +2 -0
  254. package/dist/services/mcp/security-policy.test.d.ts.map +1 -0
  255. package/dist/services/mcp/security-policy.test.js +226 -0
  256. package/dist/services/mcp/security-policy.test.js.map +1 -0
  257. package/dist/services/mcp/tool-discovery.d.ts +49 -0
  258. package/dist/services/mcp/tool-discovery.d.ts.map +1 -0
  259. package/dist/services/mcp/tool-discovery.js +198 -0
  260. package/dist/services/mcp/tool-discovery.js.map +1 -0
  261. package/dist/services/mcp/tool-discovery.test.d.ts +2 -0
  262. package/dist/services/mcp/tool-discovery.test.d.ts.map +1 -0
  263. package/dist/services/mcp/tool-discovery.test.js +168 -0
  264. package/dist/services/mcp/tool-discovery.test.js.map +1 -0
  265. package/dist/services/messenger.d.ts +1 -1
  266. package/dist/services/messenger.d.ts.map +1 -1
  267. package/dist/services/messenger.js +21 -3
  268. package/dist/services/messenger.js.map +1 -1
  269. package/dist/services/plugin-registry.d.ts +3 -3
  270. package/dist/services/runtime-kernel/heartbeat.core.d.ts +1 -1
  271. package/dist/services/runtime-kernel/heartbeat.core.d.ts.map +1 -1
  272. package/dist/services/runtime-kernel/heartbeat.core.js +30 -4
  273. package/dist/services/runtime-kernel/heartbeat.core.js.map +1 -1
  274. package/dist/services/runtime-kernel/heartbeat.wakeup.d.ts.map +1 -1
  275. package/dist/services/runtime-kernel/heartbeat.wakeup.js +38 -23
  276. package/dist/services/runtime-kernel/heartbeat.wakeup.js.map +1 -1
  277. package/dist/services/secrets.d.ts +64 -6
  278. package/dist/services/secrets.d.ts.map +1 -1
  279. package/dist/services/secrets.js +38 -15
  280. package/dist/services/secrets.js.map +1 -1
  281. package/dist/services/side-chats.d.ts +1 -1
  282. package/dist/services/side-chats.d.ts.map +1 -1
  283. package/dist/services/side-chats.js +56 -14
  284. package/dist/services/side-chats.js.map +1 -1
  285. package/dist/services/workspace-runtime.services.d.ts +2 -2
  286. package/dist/services/workspace-web-preview.js +1 -1
  287. package/package.json +16 -13
  288. package/resources/bundled-skills/rudder-docs/references/operating-practices.md +12 -5
  289. package/skills/rudder-docs/references/operating-practices.md +12 -5
  290. package/ui-dist/assets/LibraryLiveSurface-CKOthw54.js +1 -0
  291. package/ui-dist/assets/{abnfDiagram-VRR7QNED-KGtP7zoC.js → abnfDiagram-VRR7QNED-C6a_wMho.js} +1 -1
  292. package/ui-dist/assets/{arc-JjnKyiOb.js → arc-CP0En6KA.js} +1 -1
  293. package/ui-dist/assets/architectureDiagram-ZJ3FMSHR-AHfOdcaZ.js +36 -0
  294. package/ui-dist/assets/{blockDiagram-677ZJIJ3-D7YzMYrz.js → blockDiagram-677ZJIJ3-Bkl9lp63.js} +1 -1
  295. package/ui-dist/assets/{c4Diagram-LMCZKHZV-Dpf7UQxl.js → c4Diagram-LMCZKHZV-BpZareVt.js} +1 -1
  296. package/ui-dist/assets/channel-DqxL_Zcy.js +1 -0
  297. package/ui-dist/assets/{chunk-2Q5K7J3B-UJ3gsGlQ.js → chunk-2Q5K7J3B-BQAwVuXc.js} +1 -1
  298. package/ui-dist/assets/{chunk-32BRIVSS-BeHl2j2l.js → chunk-32BRIVSS-YkmfA08F.js} +1 -1
  299. package/ui-dist/assets/{chunk-5VM5RSS4-STE9fJd0.js → chunk-5VM5RSS4-DvvjwTnG.js} +1 -1
  300. package/ui-dist/assets/{chunk-EX3LRPZG-Bj8g8j4B.js → chunk-EX3LRPZG-TXD_Yhg5.js} +1 -1
  301. package/ui-dist/assets/{chunk-JWPE2WC7-0V4Pwta-.js → chunk-JWPE2WC7-CgMlj6XI.js} +1 -1
  302. package/ui-dist/assets/{chunk-MOJQB5TN-DNPn50gm.js → chunk-MOJQB5TN-BnJjU8Rc.js} +1 -1
  303. package/ui-dist/assets/{chunk-RYQCIY6F-Befmnv8r.js → chunk-RYQCIY6F-D9B64JKM.js} +1 -1
  304. package/ui-dist/assets/{chunk-V7JOEXUC-Boh8TjHj.js → chunk-V7JOEXUC-PS09QVpl.js} +1 -1
  305. package/ui-dist/assets/{chunk-VR4S4FIN-B_yEQSo3.js → chunk-VR4S4FIN-DQXb7pRS.js} +1 -1
  306. package/ui-dist/assets/{chunk-XXDRQBXY-Cf1GnUFx.js → chunk-XXDRQBXY-B1UdLiF2.js} +1 -1
  307. package/ui-dist/assets/classDiagram-OUVF2IWQ-DMwjzuJE.js +1 -0
  308. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-DMwjzuJE.js +1 -0
  309. package/ui-dist/assets/cose-bilkent-JH36ORCC-lqqmMB3m.js +1 -0
  310. package/ui-dist/assets/{cynefin-VYW2F7L2-Dv1yELYC.js → cynefin-VYW2F7L2-C9hu0XqZ.js} +1 -1
  311. package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-CeFwjFoZ.js → cynefinDiagram-TSTJHNR4-Uuhz4c-1.js} +1 -1
  312. package/ui-dist/assets/{dagre-VKFMJZFB-8idd_4sX.js → dagre-VKFMJZFB-ChDrQYse.js} +1 -1
  313. package/ui-dist/assets/{diagram-FQU43EPY-BBVua6hM.js → diagram-FQU43EPY-DLtjkVSN.js} +1 -1
  314. package/ui-dist/assets/{diagram-G47NLZAW-D1zLQZlp.js → diagram-G47NLZAW-DCvEm4D0.js} +1 -1
  315. package/ui-dist/assets/{diagram-NH7WQ7WH-DE_FTSNv.js → diagram-NH7WQ7WH-Dz5jlsPG.js} +1 -1
  316. package/ui-dist/assets/{diagram-OA4YK3LP-61VSKBEn.js → diagram-OA4YK3LP-BXmQLO-Q.js} +1 -1
  317. package/ui-dist/assets/{diagram-WEI45ONY-C-tED6BJ.js → diagram-WEI45ONY-JnMU3xrx.js} +1 -1
  318. package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-BEB8WGt0.js → ebnfDiagram-CCIWWBDH-Kryuqj4r.js} +1 -1
  319. package/ui-dist/assets/{erDiagram-Q63AITRT-AN_jm1TZ.js → erDiagram-Q63AITRT-Bn7g2mSW.js} +1 -1
  320. package/ui-dist/assets/{flowDiagram-23GEKE2U-BwLC6tI7.js → flowDiagram-23GEKE2U-DcjqTK91.js} +4 -4
  321. package/ui-dist/assets/ganttDiagram-NO4QXBWP-BRkw9-GE.js +292 -0
  322. package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-D9HCL9rY.js → gitGraphDiagram-IHSO6WYX-Cexcp6kR.js} +1 -1
  323. package/ui-dist/assets/graph-Cu7OV4Oi.js +1 -0
  324. package/ui-dist/assets/{index-BQXnpwke.js → index-ASZMPBYm.js} +5 -5
  325. package/ui-dist/assets/{index-5OM32_rf.js → index-B17BqCTj.js} +1 -1
  326. package/ui-dist/assets/{index-Cf0gLy6a.js → index-B9MccU1g.js} +1 -1
  327. package/ui-dist/assets/{index-BoSJ4Rx1.js → index-BPqbtW_X.js} +1 -1
  328. package/ui-dist/assets/{index-CpIdZ4-7.js → index-C2HjDa98.js} +1 -1
  329. package/ui-dist/assets/index-CMPtpj0A.js +1 -0
  330. package/ui-dist/assets/{index-p0ZGU1_7.js → index-CZXgOYtk.js} +1 -1
  331. package/ui-dist/assets/{index-74cx3ESJ.js → index-CknAauOP.js} +1 -1
  332. package/ui-dist/assets/index-Cu1GuH0a.js +1 -0
  333. package/ui-dist/assets/index-D8PdEImm.css +1 -0
  334. package/ui-dist/assets/{index-DrVDiJhe.js → index-DB1YX9-p.js} +1 -1
  335. package/ui-dist/assets/{index-vHMnAQSb.js → index-DBxLZXK7.js} +624 -610
  336. package/ui-dist/assets/{index-CpEfk5zb.js → index-DOCVOD97.js} +1 -1
  337. package/ui-dist/assets/{index-DMuWG0YN.js → index-DUbakRAC.js} +1 -1
  338. package/ui-dist/assets/{index-AT8juaIi.js → index-Dbg1ZwO2.js} +1 -1
  339. package/ui-dist/assets/index-DwbLsoLt.js +1 -0
  340. package/ui-dist/assets/index-hCLSotmS.js +1 -0
  341. package/ui-dist/assets/index-jrhEFc-j.js +1 -0
  342. package/ui-dist/assets/index-kz8ueXgo.js +1 -0
  343. package/ui-dist/assets/{infoDiagram-FWYZ7A6U-CyO3CAA1.js → infoDiagram-FWYZ7A6U-DugVGI3K.js} +1 -1
  344. package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-BLLZuF1_.js → ishikawaDiagram-FXEZZL3T-CHy06Oev.js} +1 -1
  345. package/ui-dist/assets/{journeyDiagram-5HDEW3XC-CWzQocvE.js → journeyDiagram-5HDEW3XC-BI0w53rb.js} +1 -1
  346. package/ui-dist/assets/{kanban-definition-HUTT4EX6-Dz4SFU-I.js → kanban-definition-HUTT4EX6-v_bLwx7B.js} +1 -1
  347. package/ui-dist/assets/layout-Dwp1s_bo.js +1 -0
  348. package/ui-dist/assets/{linear-BlzDlAaL.js → linear-DAV4STLZ.js} +1 -1
  349. package/ui-dist/assets/map-Bs6QpaaQ.js +1 -0
  350. package/ui-dist/assets/{mermaid.core-BtCydd-w.js → mermaid.core-fVmaL47V.js} +4 -4
  351. package/ui-dist/assets/{mindmap-definition-LN4V7U3C-BeIkKRBx.js → mindmap-definition-LN4V7U3C-5dWD4dxm.js} +1 -1
  352. package/ui-dist/assets/{pegDiagram-2B236MQR-BZgpT4TN.js → pegDiagram-2B236MQR-DB2XsDPN.js} +1 -1
  353. package/ui-dist/assets/{pieDiagram-ENE6RG2P-BRFggcg2.js → pieDiagram-ENE6RG2P-Bc5teLCS.js} +1 -1
  354. package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-CibUo3gT.js → quadrantDiagram-ABIIQ3AL-BlfNdETt.js} +1 -1
  355. package/ui-dist/assets/{railroadDiagram-RFXS5EU6-DINJqhgn.js → railroadDiagram-RFXS5EU6-BbXywkq3.js} +1 -1
  356. package/ui-dist/assets/{requirementDiagram-TGXJPOKE-NegluQIe.js → requirementDiagram-TGXJPOKE-DU-CapdF.js} +1 -1
  357. package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-Kq41yHAd.js → sankeyDiagram-HTMAVEWB-Ftvh3MqA.js} +1 -1
  358. package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-CngfEI4f.js → sequenceDiagram-DBY2YBRQ-CCtHt9V4.js} +1 -1
  359. package/ui-dist/assets/{sizeCapture-X5ZJPWSS-DUWRNlme.js → sizeCapture-X5ZJPWSS-x0jnIKHx.js} +1 -1
  360. package/ui-dist/assets/{stateDiagram-2N3HPSRC-BwHC_Fz4.js → stateDiagram-2N3HPSRC-2qCrydE7.js} +1 -1
  361. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-CvGRUgRf.js +1 -0
  362. package/ui-dist/assets/{swimlanes-5IMT3BWC-Cqp2rT1K.js → swimlanes-5IMT3BWC-6kqJq5Xf.js} +2 -2
  363. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-EBa7-qSc.js +8 -0
  364. package/ui-dist/assets/{timeline-definition-FHXFAJF6-BG3GYPCu.js → timeline-definition-FHXFAJF6-BuRz8KHZ.js} +1 -1
  365. package/ui-dist/assets/{vennDiagram-L72KCM5P-D1IFU27N.js → vennDiagram-L72KCM5P-BKzMZ_Rv.js} +1 -1
  366. package/ui-dist/assets/{wardleyDiagram-EHGQE667-DboO2kYu.js → wardleyDiagram-EHGQE667-8uXlFtBV.js} +1 -1
  367. package/ui-dist/assets/{xychartDiagram-FW5EYKEG-vI2BGrXP.js → xychartDiagram-FW5EYKEG-CWKGlpF9.js} +1 -1
  368. package/ui-dist/index.html +2 -2
  369. package/ui-dist/assets/architectureDiagram-ZJ3FMSHR-DHyfFgK0.js +0 -36
  370. package/ui-dist/assets/channel-TMGI9Qt9.js +0 -1
  371. package/ui-dist/assets/classDiagram-OUVF2IWQ-r5zIpY6G.js +0 -1
  372. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-r5zIpY6G.js +0 -1
  373. package/ui-dist/assets/cose-bilkent-JH36ORCC-fSNs9447.js +0 -1
  374. package/ui-dist/assets/ganttDiagram-NO4QXBWP-CJYhBF1C.js +0 -292
  375. package/ui-dist/assets/graph-DdBT9W3J.js +0 -1
  376. package/ui-dist/assets/index-6UIO-gg7.js +0 -1
  377. package/ui-dist/assets/index-BVkQVMFn.js +0 -1
  378. package/ui-dist/assets/index-BaAPxkqh.css +0 -1
  379. package/ui-dist/assets/index-CmCERTmS.js +0 -1
  380. package/ui-dist/assets/index-Cr4lUIaJ.js +0 -1
  381. package/ui-dist/assets/index-D0fAqlES.js +0 -1
  382. package/ui-dist/assets/index-DfNcAyZq.js +0 -1
  383. package/ui-dist/assets/layout-D3tY9q4Q.js +0 -1
  384. package/ui-dist/assets/map-Ctg1-a9N.js +0 -1
  385. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-C6P3NY96.js +0 -1
  386. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-BNdDt62J.js +0 -8
@@ -0,0 +1,344 @@
1
+ import { lookup as dnsLookup } from "node:dns/promises";
2
+ import { realpath as fsRealpath } from "node:fs/promises";
3
+ import { BlockList, isIP } from "node:net";
4
+ import path from "node:path";
5
+ const DNS_LOOKUP_TIMEOUT_MS = 5_000;
6
+ function parseCsv(value) {
7
+ if (!value)
8
+ return [];
9
+ return Array.from(new Set(value.split(",").map((item) => item.trim()).filter(Boolean)));
10
+ }
11
+ function parseStdioCommandAllowlist(value) {
12
+ if (!value?.trim())
13
+ return [];
14
+ let parsed;
15
+ try {
16
+ parsed = JSON.parse(value);
17
+ }
18
+ catch {
19
+ throw new Error("RUDDER_MCP_STDIO_COMMAND_ALLOWLIST must be a JSON array of argv arrays");
20
+ }
21
+ if (!Array.isArray(parsed)
22
+ || parsed.some((argv) => (!Array.isArray(argv)
23
+ || argv.length === 0
24
+ || argv.some((part) => typeof part !== "string" || part.length === 0)))) {
25
+ throw new Error("RUDDER_MCP_STDIO_COMMAND_ALLOWLIST must be a JSON array of non-empty argv arrays");
26
+ }
27
+ return Array.from(new Map(parsed.map((argv) => [JSON.stringify(argv), argv])).values());
28
+ }
29
+ function normalizeAllowlistedOrigin(value) {
30
+ let url;
31
+ try {
32
+ url = new URL(value);
33
+ }
34
+ catch {
35
+ throw new Error("RUDDER_MCP_HTTP_ALLOWLIST entries must be valid origins");
36
+ }
37
+ if ((url.protocol !== "http:" && url.protocol !== "https:")
38
+ || url.username
39
+ || url.password
40
+ || url.pathname !== "/"
41
+ || url.search
42
+ || url.hash) {
43
+ throw new Error("RUDDER_MCP_HTTP_ALLOWLIST entries must contain only an HTTP(S) origin");
44
+ }
45
+ return url.origin;
46
+ }
47
+ export function parseMcpDeploymentPolicyEnv(env) {
48
+ return {
49
+ httpOrigins: parseCsv(env.RUDDER_MCP_HTTP_ALLOWLIST).map(normalizeAllowlistedOrigin),
50
+ stdioCommands: parseStdioCommandAllowlist(env.RUDDER_MCP_STDIO_COMMAND_ALLOWLIST),
51
+ stdioWorkingDirectories: parseCsv(env.RUDDER_MCP_STDIO_CWD_ALLOWLIST),
52
+ stdioEnvironmentNames: parseCsv(env.RUDDER_MCP_STDIO_ENV_ALLOWLIST),
53
+ };
54
+ }
55
+ export async function validateMcpStdioPolicy(input, policy, dependencies = {}) {
56
+ if (policy.deploymentMode === "local_trusted") {
57
+ return { command: input.command, cwd: input.cwd };
58
+ }
59
+ if (!path.isAbsolute(input.command)) {
60
+ throw new Error("Authenticated MCP STDIO executable must use an absolute path");
61
+ }
62
+ if (!input.cwd || !path.isAbsolute(input.cwd)) {
63
+ throw new Error("Authenticated MCP STDIO working directory must use an absolute path");
64
+ }
65
+ const resolveRealpath = dependencies.realpath ?? fsRealpath;
66
+ let executableRealpath;
67
+ let cwdRealpath;
68
+ try {
69
+ [executableRealpath, cwdRealpath] = await Promise.all([
70
+ resolveRealpath(input.command),
71
+ resolveRealpath(input.cwd),
72
+ ]);
73
+ }
74
+ catch {
75
+ throw new Error("MCP STDIO executable or working directory could not be resolved");
76
+ }
77
+ const requestedArgs = input.args ?? [];
78
+ let commandAllowed = false;
79
+ for (const allowedArgv of policy.stdioCommands) {
80
+ const [allowedExecutable, ...allowedArgs] = allowedArgv;
81
+ if (!allowedExecutable || !path.isAbsolute(allowedExecutable))
82
+ continue;
83
+ let allowedExecutableRealpath;
84
+ try {
85
+ allowedExecutableRealpath = await resolveRealpath(allowedExecutable);
86
+ }
87
+ catch {
88
+ continue;
89
+ }
90
+ if (allowedExecutableRealpath === executableRealpath
91
+ && allowedArgs.length === requestedArgs.length
92
+ && allowedArgs.every((value, index) => requestedArgs[index] === value)) {
93
+ commandAllowed = true;
94
+ break;
95
+ }
96
+ }
97
+ if (!commandAllowed) {
98
+ throw new Error("MCP STDIO command argv is not allowed by deployment policy");
99
+ }
100
+ const allowedCwdRealpaths = await Promise.all(policy.stdioWorkingDirectories.map(async (allowed) => {
101
+ if (!path.isAbsolute(allowed))
102
+ return null;
103
+ try {
104
+ return await resolveRealpath(allowed);
105
+ }
106
+ catch {
107
+ return null;
108
+ }
109
+ }));
110
+ if (!allowedCwdRealpaths.includes(cwdRealpath)) {
111
+ throw new Error("MCP STDIO working directory is not allowed by deployment policy");
112
+ }
113
+ const allowedEnvironmentNames = new Set(policy.stdioEnvironmentNames);
114
+ if (input.environmentNames.some((name) => !allowedEnvironmentNames.has(name))) {
115
+ throw new Error("MCP STDIO environment name is not allowed by deployment policy");
116
+ }
117
+ return {
118
+ command: executableRealpath,
119
+ cwd: cwdRealpath,
120
+ };
121
+ }
122
+ const blockedAddresses = new BlockList();
123
+ const globallyRoutableIpv6 = new BlockList();
124
+ globallyRoutableIpv6.addSubnet("2000::", 3, "ipv6");
125
+ for (const [network, prefix] of [
126
+ ["0.0.0.0", 8],
127
+ ["10.0.0.0", 8],
128
+ ["100.64.0.0", 10],
129
+ ["127.0.0.0", 8],
130
+ ["169.254.0.0", 16],
131
+ ["172.16.0.0", 12],
132
+ ["192.0.0.0", 24],
133
+ ["192.0.2.0", 24],
134
+ ["192.88.99.0", 24],
135
+ ["192.168.0.0", 16],
136
+ ["198.18.0.0", 15],
137
+ ["198.51.100.0", 24],
138
+ ["203.0.113.0", 24],
139
+ ["224.0.0.0", 4],
140
+ ["240.0.0.0", 4],
141
+ ]) {
142
+ blockedAddresses.addSubnet(network, prefix, "ipv4");
143
+ }
144
+ for (const [network, prefix] of [
145
+ ["::", 128],
146
+ ["::1", 128],
147
+ ["::", 96],
148
+ ["64:ff9b::", 96],
149
+ ["64:ff9b:1::", 48],
150
+ ["100::", 64],
151
+ // Conservative snapshot of the IANA IPv6 Special-Purpose Address Registry
152
+ // (last updated 2025-10-09). Only 2000::/3 is eligible above, and these
153
+ // special-purpose subranges remain denied until a deliberate registry review.
154
+ ["2001::", 23],
155
+ ["2001:2::", 48],
156
+ ["2001:db8::", 32],
157
+ ["2002::", 16],
158
+ ["2620:4f:8000::", 48],
159
+ ["3fff::", 20],
160
+ ["fc00::", 7],
161
+ ["fe80::", 10],
162
+ ["ff00::", 8],
163
+ ]) {
164
+ blockedAddresses.addSubnet(network, prefix, "ipv6");
165
+ }
166
+ function unwrapMappedIpv4(address) {
167
+ const match = address.toLowerCase().match(/^::ffff:(\d{1,3}(?:\.\d{1,3}){3})$/);
168
+ return match?.[1] ?? null;
169
+ }
170
+ function parseIpv6Words(address) {
171
+ let normalized = address.toLowerCase();
172
+ if (normalized.includes(".")) {
173
+ const lastColon = normalized.lastIndexOf(":");
174
+ const octets = normalized.slice(lastColon + 1).split(".").map(Number);
175
+ if (octets.length !== 4
176
+ || octets.some((octet) => !Number.isInteger(octet) || octet < 0 || octet > 255)) {
177
+ return null;
178
+ }
179
+ normalized = `${normalized.slice(0, lastColon)}:${((octets[0] << 8) | octets[1]).toString(16)}:${((octets[2] << 8) | octets[3]).toString(16)}`;
180
+ }
181
+ const halves = normalized.split("::");
182
+ if (halves.length > 2)
183
+ return null;
184
+ const left = halves[0] ? halves[0].split(":") : [];
185
+ const right = halves[1] ? halves[1].split(":") : [];
186
+ const missing = 8 - left.length - right.length;
187
+ if ((halves.length === 1 && missing !== 0) || missing < 0)
188
+ return null;
189
+ const words = [
190
+ ...left,
191
+ ...Array.from({ length: missing }, () => "0"),
192
+ ...right,
193
+ ].map((word) => Number.parseInt(word, 16));
194
+ return words.length === 8 && words.every((word) => Number.isInteger(word))
195
+ ? words
196
+ : null;
197
+ }
198
+ function isIpv4TranslatedAddress(address) {
199
+ const words = parseIpv6Words(address);
200
+ // Node's BlockList normalizes this translated prefix as IPv4-mapped,
201
+ // so match its 96-bit IPv6 prefix explicitly without affecting IPv4.
202
+ return Boolean(words
203
+ && words.slice(0, 4).every((word) => word === 0)
204
+ && words[4] === 0xffff
205
+ && words[5] === 0);
206
+ }
207
+ export function isBlockedMcpNetworkAddress(address) {
208
+ const mappedIpv4 = unwrapMappedIpv4(address);
209
+ if (mappedIpv4)
210
+ return blockedAddresses.check(mappedIpv4, "ipv4");
211
+ const family = isIP(address);
212
+ if (family === 4)
213
+ return blockedAddresses.check(address, "ipv4");
214
+ if (family === 6) {
215
+ return (!globallyRoutableIpv6.check(address, "ipv6")
216
+ || isIpv4TranslatedAddress(address)
217
+ || blockedAddresses.check(address, "ipv6"));
218
+ }
219
+ return true;
220
+ }
221
+ function parseMcpTargetUrl(value) {
222
+ let url;
223
+ try {
224
+ url = new URL(value);
225
+ }
226
+ catch {
227
+ throw new Error("Managed MCP target URL is invalid");
228
+ }
229
+ if (url.username || url.password) {
230
+ throw new Error("Managed MCP target URL cannot include user information");
231
+ }
232
+ if (url.hash) {
233
+ throw new Error("Managed MCP target URL cannot include a fragment");
234
+ }
235
+ if (url.protocol !== "http:" && url.protocol !== "https:") {
236
+ throw new Error("Managed MCP supports only Streamable HTTP over HTTP(S), not legacy SSE");
237
+ }
238
+ return url;
239
+ }
240
+ const defaultLookup = async (hostname) => {
241
+ const results = await dnsLookup(hostname, { all: true, verbatim: true });
242
+ return results.map((result) => {
243
+ if (result.family !== 4 && result.family !== 6) {
244
+ throw new Error("Managed MCP DNS resolution returned an invalid address family");
245
+ }
246
+ return {
247
+ address: result.address,
248
+ family: result.family,
249
+ };
250
+ });
251
+ };
252
+ async function lookupWithTimeout(hostname, lookup, timeoutMs) {
253
+ let timer;
254
+ try {
255
+ return await Promise.race([
256
+ lookup(hostname),
257
+ new Promise((_, reject) => {
258
+ timer = setTimeout(() => reject(new Error("Managed MCP DNS lookup timed out")), timeoutMs);
259
+ }),
260
+ ]);
261
+ }
262
+ catch (error) {
263
+ if (error instanceof Error && error.message === "Managed MCP DNS lookup timed out") {
264
+ throw error;
265
+ }
266
+ throw new Error("Managed MCP DNS resolution failed");
267
+ }
268
+ finally {
269
+ if (timer)
270
+ clearTimeout(timer);
271
+ }
272
+ }
273
+ export async function resolveMcpHttpTarget(value, options) {
274
+ const url = parseMcpTargetUrl(value);
275
+ if (options.curatedOrigin && url.origin !== options.curatedOrigin) {
276
+ throw new Error("Managed MCP curated provider URL does not match its registry origin");
277
+ }
278
+ const allowedOrigins = new Set(options.allowedOrigins.map(normalizeAllowlistedOrigin));
279
+ const explicitlyAllowed = allowedOrigins.has(url.origin);
280
+ if (url.protocol !== "https:" && !explicitlyAllowed) {
281
+ throw new Error("Managed MCP target must use public HTTPS unless its exact origin is allowlisted");
282
+ }
283
+ const hostname = url.hostname.replace(/^\[|\]$/gu, "");
284
+ const addresses = await lookupWithTimeout(hostname, options.lookup ?? defaultLookup, options.dnsTimeoutMs ?? DNS_LOOKUP_TIMEOUT_MS);
285
+ if (addresses.length === 0) {
286
+ throw new Error("Managed MCP DNS resolution returned no addresses");
287
+ }
288
+ if (addresses.some((answer) => isIP(answer.address) !== answer.family)) {
289
+ throw new Error("Managed MCP DNS answer is not a valid address for its family");
290
+ }
291
+ if (!explicitlyAllowed && addresses.some((answer) => isBlockedMcpNetworkAddress(answer.address))) {
292
+ throw new Error("Managed MCP target resolved to a blocked network address");
293
+ }
294
+ const selected = addresses[0];
295
+ return {
296
+ url,
297
+ resolvedAddress: selected.address,
298
+ hostHeader: url.host,
299
+ tlsServername: url.protocol === "https:" && isIP(hostname) === 0
300
+ ? hostname
301
+ : undefined,
302
+ useTls: url.protocol === "https:",
303
+ };
304
+ }
305
+ const forbiddenExactHeaders = new Set([
306
+ "authorization",
307
+ "connection",
308
+ "content-length",
309
+ "cookie",
310
+ "host",
311
+ "keep-alive",
312
+ "proxy-authenticate",
313
+ "proxy-authorization",
314
+ "te",
315
+ "trailer",
316
+ "transfer-encoding",
317
+ "upgrade",
318
+ "x-api-key",
319
+ ]);
320
+ export function assertSafeMcpHeaders(headers) {
321
+ for (const name of Object.keys(headers)) {
322
+ const normalized = name.trim().toLowerCase();
323
+ if (forbiddenExactHeaders.has(normalized)
324
+ || normalized.startsWith("proxy-")
325
+ || normalized === "forwarded"
326
+ || normalized.startsWith("x-forwarded-")) {
327
+ throw new Error(`Managed MCP header "${name}" is controlled by Rudder`);
328
+ }
329
+ }
330
+ }
331
+ export function assertSafeMcpCredentialHeaders(headers) {
332
+ for (const name of Object.keys(headers)) {
333
+ const normalized = name.trim().toLowerCase();
334
+ if ((forbiddenExactHeaders.has(normalized)
335
+ && normalized !== "authorization"
336
+ && normalized !== "x-api-key")
337
+ || normalized.startsWith("proxy-")
338
+ || normalized === "forwarded"
339
+ || normalized.startsWith("x-forwarded-")) {
340
+ throw new Error(`Managed MCP credential header "${name}" is controlled by Rudder`);
341
+ }
342
+ }
343
+ }
344
+ //# sourceMappingURL=security-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-policy.js","sourceRoot":"","sources":["../../../src/services/mcp/security-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=security-policy.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-policy.test.d.ts","sourceRoot":"","sources":["../../../src/services/mcp/security-policy.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,226 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { assertSafeMcpHeaders, parseMcpDeploymentPolicyEnv, resolveMcpHttpTarget, validateMcpStdioPolicy, } from "./security-policy.js";
3
+ describe("managed MCP deployment policy", () => {
4
+ it("parses instance-admin allowlists from dedicated environment fields", () => {
5
+ expect(parseMcpDeploymentPolicyEnv({
6
+ RUDDER_MCP_HTTP_ALLOWLIST: "http://127.0.0.1:7788, https://internal.example",
7
+ RUDDER_MCP_STDIO_COMMAND_ALLOWLIST: ' [["/usr/local/bin/acme-mcp","--stdio"],["/usr/local/bin/node","/opt/mcp/server.mjs"]] ',
8
+ RUDDER_MCP_STDIO_CWD_ALLOWLIST: "/srv/mcp,/opt/mcp",
9
+ RUDDER_MCP_STDIO_ENV_ALLOWLIST: "SAFE_TOKEN,READ_ONLY_FLAG",
10
+ })).toEqual({
11
+ httpOrigins: ["http://127.0.0.1:7788", "https://internal.example"],
12
+ stdioCommands: [
13
+ ["/usr/local/bin/acme-mcp", "--stdio"],
14
+ ["/usr/local/bin/node", "/opt/mcp/server.mjs"],
15
+ ],
16
+ stdioWorkingDirectories: ["/srv/mcp", "/opt/mcp"],
17
+ stdioEnvironmentNames: ["SAFE_TOKEN", "READ_ONLY_FLAG"],
18
+ });
19
+ });
20
+ it("allows arbitrary STDIO only for local trusted deployments", async () => {
21
+ await expect(validateMcpStdioPolicy({
22
+ command: "arbitrary-command",
23
+ args: ["-e", "arbitrary-code"],
24
+ cwd: "/anywhere",
25
+ environmentNames: ["ANY_SECRET"],
26
+ }, {
27
+ deploymentMode: "local_trusted",
28
+ stdioCommands: [],
29
+ stdioWorkingDirectories: [],
30
+ stdioEnvironmentNames: [],
31
+ })).resolves.toEqual({
32
+ command: "arbitrary-command",
33
+ cwd: "/anywhere",
34
+ });
35
+ await expect(validateMcpStdioPolicy({
36
+ command: "/usr/local/bin/acme-mcp",
37
+ args: ["--stdio"],
38
+ cwd: "/srv/mcp",
39
+ environmentNames: ["SAFE_TOKEN"],
40
+ }, {
41
+ deploymentMode: "authenticated",
42
+ stdioCommands: [["/usr/local/bin/acme-mcp", "--stdio"]],
43
+ stdioWorkingDirectories: ["/srv/mcp"],
44
+ stdioEnvironmentNames: ["SAFE_TOKEN"],
45
+ }, {
46
+ realpath: async (value) => value,
47
+ })).resolves.toEqual({
48
+ command: "/usr/local/bin/acme-mcp",
49
+ cwd: "/srv/mcp",
50
+ });
51
+ await expect(validateMcpStdioPolicy({
52
+ command: "/usr/local/bin/acme-mcp",
53
+ args: ["--stdio", "--exec", "arbitrary-code"],
54
+ cwd: "/srv/mcp",
55
+ environmentNames: ["SAFE_TOKEN"],
56
+ }, {
57
+ deploymentMode: "authenticated",
58
+ stdioCommands: [["/usr/local/bin/acme-mcp", "--stdio"]],
59
+ stdioWorkingDirectories: ["/srv/mcp"],
60
+ stdioEnvironmentNames: ["SAFE_TOKEN"],
61
+ }, {
62
+ realpath: async (value) => value,
63
+ })).rejects.toThrow(/command/i);
64
+ });
65
+ it("requires authenticated commands to use absolute real paths for executable and cwd", async () => {
66
+ const aliases = new Map([
67
+ ["/allowed/acme", "/opt/bin/acme"],
68
+ ["/requested/acme", "/opt/bin/acme"],
69
+ ["/allowed/workspace", "/srv/real-workspace"],
70
+ ["/requested/workspace", "/srv/real-workspace"],
71
+ ]);
72
+ const realpath = async (value) => aliases.get(value) ?? value;
73
+ await expect(validateMcpStdioPolicy({
74
+ command: "/requested/acme",
75
+ args: ["--stdio"],
76
+ cwd: "/requested/workspace",
77
+ environmentNames: [],
78
+ }, {
79
+ deploymentMode: "authenticated",
80
+ stdioCommands: [["/allowed/acme", "--stdio"]],
81
+ stdioWorkingDirectories: ["/allowed/workspace"],
82
+ stdioEnvironmentNames: [],
83
+ }, { realpath })).resolves.toEqual({
84
+ command: "/opt/bin/acme",
85
+ cwd: "/srv/real-workspace",
86
+ });
87
+ await expect(validateMcpStdioPolicy({
88
+ command: "node",
89
+ args: ["/opt/mcp/server.mjs"],
90
+ cwd: "/requested/workspace",
91
+ environmentNames: [],
92
+ }, {
93
+ deploymentMode: "authenticated",
94
+ stdioCommands: [["/usr/local/bin/node", "/opt/mcp/server.mjs"]],
95
+ stdioWorkingDirectories: ["/allowed/workspace"],
96
+ stdioEnvironmentNames: [],
97
+ }, { realpath })).rejects.toThrow(/absolute/i);
98
+ });
99
+ });
100
+ describe("managed MCP outbound target policy", () => {
101
+ it("permits public HTTPS and pins the validated address with SNI and Host metadata", async () => {
102
+ const lookup = vi.fn().mockResolvedValue([
103
+ { address: "93.184.216.34", family: 4 },
104
+ ]);
105
+ await expect(resolveMcpHttpTarget("https://mcp.example/tools", {
106
+ lookup,
107
+ allowedOrigins: [],
108
+ })).resolves.toMatchObject({
109
+ url: new URL("https://mcp.example/tools"),
110
+ resolvedAddress: "93.184.216.34",
111
+ hostHeader: "mcp.example",
112
+ tlsServername: "mcp.example",
113
+ });
114
+ });
115
+ it("rejects mixed public/private DNS answers instead of filtering to the public result", async () => {
116
+ const lookup = vi.fn().mockResolvedValue([
117
+ { address: "93.184.216.34", family: 4 },
118
+ { address: "127.0.0.1", family: 4 },
119
+ ]);
120
+ await expect(resolveMcpHttpTarget("https://rebind.example/mcp", {
121
+ lookup,
122
+ allowedOrigins: [],
123
+ })).rejects.toThrow(/blocked network address/i);
124
+ });
125
+ it("allows only globally routable IPv6 outside IANA special-purpose ranges", async () => {
126
+ await expect(resolveMcpHttpTarget("https://public-v6.example/mcp", {
127
+ lookup: async () => [{ address: "2606:4700:4700::1111", family: 6 }],
128
+ allowedOrigins: [],
129
+ })).resolves.toMatchObject({ resolvedAddress: "2606:4700:4700::1111" });
130
+ for (const address of [
131
+ "4000::1",
132
+ "fec0::1",
133
+ "2001:20::1",
134
+ "3fff::1",
135
+ "5f00::1",
136
+ ]) {
137
+ await expect(resolveMcpHttpTarget("https://reserved-v6.example/mcp", {
138
+ lookup: async () => [{ address, family: 6 }],
139
+ allowedOrigins: [],
140
+ })).rejects.toThrow(/blocked network address/i);
141
+ }
142
+ await expect(resolveMcpHttpTarget("https://reserved-v6.example/mcp", {
143
+ lookup: async () => [{ address: "4000::1", family: 6 }],
144
+ allowedOrigins: ["https://reserved-v6.example"],
145
+ })).resolves.toMatchObject({ resolvedAddress: "4000::1" });
146
+ });
147
+ it("rejects non-IP and address-family-mismatched DNS answers even for allowlisted origins", async () => {
148
+ for (const answer of [
149
+ { address: "localhost", family: 4 },
150
+ { address: "127.0.0.1", family: 6 },
151
+ ]) {
152
+ await expect(resolveMcpHttpTarget("http://internal.example/mcp", {
153
+ lookup: async () => [answer],
154
+ allowedOrigins: ["http://internal.example"],
155
+ })).rejects.toThrow(/DNS answer/i);
156
+ }
157
+ });
158
+ it("blocks NAT64 and IPv4-compatible address encodings of private targets", async () => {
159
+ for (const address of [
160
+ "64:ff9b::7f00:1",
161
+ "64:ff9b:1::7f00:1",
162
+ "::7f00:1",
163
+ "::ffff:0:127.0.0.1",
164
+ "2002:7f00:1::",
165
+ ]) {
166
+ await expect(resolveMcpHttpTarget("https://encoded.example/mcp", {
167
+ lookup: async () => [{ address, family: 6 }],
168
+ allowedOrigins: [],
169
+ })).rejects.toThrow(/blocked network address/i);
170
+ }
171
+ });
172
+ it("rejects HTTP, localhost, private targets, userinfo, and fragments without an exact origin allowlist", async () => {
173
+ const lookup = vi.fn().mockResolvedValue([
174
+ { address: "127.0.0.1", family: 4 },
175
+ ]);
176
+ for (const value of [
177
+ "http://127.0.0.1:7788/mcp",
178
+ "https://localhost/mcp",
179
+ "https://user:password@example.com/mcp",
180
+ "https://example.com/mcp#secret",
181
+ ]) {
182
+ await expect(resolveMcpHttpTarget(value, {
183
+ lookup,
184
+ allowedOrigins: [],
185
+ })).rejects.toThrow();
186
+ }
187
+ await expect(resolveMcpHttpTarget("http://127.0.0.1:7788/mcp", {
188
+ lookup,
189
+ allowedOrigins: ["http://127.0.0.1:7788"],
190
+ })).resolves.toMatchObject({ resolvedAddress: "127.0.0.1" });
191
+ });
192
+ it("pins curated provider origins and rejects a mismatched registry URL before DNS", async () => {
193
+ const lookup = vi.fn().mockResolvedValue([
194
+ { address: "93.184.216.34", family: 4 },
195
+ ]);
196
+ await expect(resolveMcpHttpTarget("https://attacker.example/mcp", {
197
+ lookup,
198
+ allowedOrigins: [],
199
+ curatedOrigin: "https://mcp.notion.com",
200
+ })).rejects.toThrow(/curated/i);
201
+ expect(lookup).not.toHaveBeenCalled();
202
+ });
203
+ });
204
+ describe("managed MCP header policy", () => {
205
+ it("rejects hop-by-hop, routing, cookie, forwarding, framing, and authorization headers", () => {
206
+ for (const name of [
207
+ "Host",
208
+ "Connection",
209
+ "Proxy-Authorization",
210
+ "Forwarded",
211
+ "X-Forwarded-For",
212
+ "Cookie",
213
+ "Content-Length",
214
+ "Transfer-Encoding",
215
+ "Authorization",
216
+ ]) {
217
+ expect(() => assertSafeMcpHeaders({ [name]: "secret-value" })).toThrow(/header/i);
218
+ }
219
+ });
220
+ it("never includes a rejected header value in its public error", () => {
221
+ expect(() => assertSafeMcpHeaders({
222
+ Authorization: "Bearer super-secret-value",
223
+ })).toThrowError(expect.not.stringContaining("super-secret-value"));
224
+ });
225
+ });
226
+ //# sourceMappingURL=security-policy.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-policy.test.js","sourceRoot":"","sources":["../../../src/services/mcp/security-policy.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ export declare const MCP_TOOL_DISCOVERY_LIMITS: {
2
+ readonly maxTools: 500;
3
+ readonly maxToolNameCharacters: 128;
4
+ readonly maxDescriptionCharacters: 4000;
5
+ readonly maxSchemaBytes: number;
6
+ readonly maxSchemaDepth: 32;
7
+ };
8
+ export interface RawMcpDiscoveredTool {
9
+ name: string;
10
+ description?: string;
11
+ inputSchema?: Record<string, unknown>;
12
+ outputSchema?: Record<string, unknown>;
13
+ }
14
+ export interface NormalizedMcpDiscoveredTool {
15
+ externalToolName: string;
16
+ rudderToolName: string;
17
+ description: string | null;
18
+ rawInputSchema: Record<string, unknown>;
19
+ inputSchema: Record<string, unknown>;
20
+ rawOutputSchema: Record<string, unknown> | null;
21
+ outputSchema: Record<string, unknown> | null;
22
+ }
23
+ export interface McpToolDiscoveryFilter {
24
+ toolAllowlist?: string[];
25
+ toolDenylist?: string[];
26
+ }
27
+ export declare function managedMcpRuntimeServerName(connectionName: string): string;
28
+ export declare function normalizeMcpDiscoveredTools(connectionName: string, tools: RawMcpDiscoveredTool[], filter?: McpToolDiscoveryFilter): NormalizedMcpDiscoveredTool[];
29
+ export interface ExistingMcpToolCatalogEntry {
30
+ externalToolName: string;
31
+ enabled: boolean;
32
+ status?: string;
33
+ }
34
+ export interface ReconciledMcpToolCatalogEntry {
35
+ externalToolName: string;
36
+ enabled: boolean;
37
+ status: "active" | "removed";
38
+ isNew: boolean;
39
+ }
40
+ export declare function reconcileMcpToolCatalog(existing: ExistingMcpToolCatalogEntry[], current: Array<{
41
+ externalToolName: string;
42
+ }>): ReconciledMcpToolCatalogEntry[];
43
+ export declare function reconcileMcpBindingToolNames(input: {
44
+ initialBinding: boolean;
45
+ previouslyKnownToolNames: string[];
46
+ previouslyEnabledToolNames: string[];
47
+ currentToolNames: string[];
48
+ }): string[];
49
+ //# sourceMappingURL=tool-discovery.d.ts.map