mcp-server-framework 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (673) hide show
  1. package/CHANGELOG.md +174 -0
  2. package/LICENSE-GPL.md +219 -0
  3. package/LICENSE.md +187 -0
  4. package/README.md +439 -0
  5. package/build/config/config-cache.d.ts +120 -0
  6. package/build/config/config-cache.d.ts.map +1 -0
  7. package/build/config/config-cache.js +310 -0
  8. package/build/config/config-cache.js.map +1 -0
  9. package/build/config/env.d.ts +476 -0
  10. package/build/config/env.d.ts.map +1 -0
  11. package/build/config/env.js +441 -0
  12. package/build/config/env.js.map +1 -0
  13. package/build/config/extensions.d.ts +107 -0
  14. package/build/config/extensions.d.ts.map +1 -0
  15. package/build/config/extensions.js +152 -0
  16. package/build/config/extensions.js.map +1 -0
  17. package/build/config/file/index.d.ts +8 -0
  18. package/build/config/file/index.d.ts.map +1 -0
  19. package/build/config/file/index.js +10 -0
  20. package/build/config/file/index.js.map +1 -0
  21. package/build/config/file/loader.d.ts +31 -0
  22. package/build/config/file/loader.d.ts.map +1 -0
  23. package/build/config/file/loader.js +313 -0
  24. package/build/config/file/loader.js.map +1 -0
  25. package/build/config/file/schema.d.ts +583 -0
  26. package/build/config/file/schema.d.ts.map +1 -0
  27. package/build/config/file/schema.js +388 -0
  28. package/build/config/file/schema.js.map +1 -0
  29. package/build/config/index.d.ts +15 -0
  30. package/build/config/index.d.ts.map +1 -0
  31. package/build/config/index.js +27 -0
  32. package/build/config/index.js.map +1 -0
  33. package/build/config/startup-warnings.d.ts +46 -0
  34. package/build/config/startup-warnings.d.ts.map +1 -0
  35. package/build/config/startup-warnings.js +61 -0
  36. package/build/config/startup-warnings.js.map +1 -0
  37. package/build/connection/connection-state.d.ts +196 -0
  38. package/build/connection/connection-state.d.ts.map +1 -0
  39. package/build/connection/connection-state.js +426 -0
  40. package/build/connection/connection-state.js.map +1 -0
  41. package/build/connection/core/base.d.ts +43 -0
  42. package/build/connection/core/base.d.ts.map +1 -0
  43. package/build/connection/core/base.js +82 -0
  44. package/build/connection/core/base.js.map +1 -0
  45. package/build/connection/core/constants.d.ts +121 -0
  46. package/build/connection/core/constants.d.ts.map +1 -0
  47. package/build/connection/core/constants.js +151 -0
  48. package/build/connection/core/constants.js.map +1 -0
  49. package/build/connection/core/index.d.ts +13 -0
  50. package/build/connection/core/index.d.ts.map +1 -0
  51. package/build/connection/core/index.js +14 -0
  52. package/build/connection/core/index.js.map +1 -0
  53. package/build/connection/core/types.d.ts +102 -0
  54. package/build/connection/core/types.d.ts.map +1 -0
  55. package/build/connection/core/types.js +31 -0
  56. package/build/connection/core/types.js.map +1 -0
  57. package/build/connection/index.d.ts +19 -0
  58. package/build/connection/index.d.ts.map +1 -0
  59. package/build/connection/index.js +22 -0
  60. package/build/connection/index.js.map +1 -0
  61. package/build/connection/types.d.ts +125 -0
  62. package/build/connection/types.d.ts.map +1 -0
  63. package/build/connection/types.js +39 -0
  64. package/build/connection/types.js.map +1 -0
  65. package/build/errors/categories/auth.d.ts +59 -0
  66. package/build/errors/categories/auth.d.ts.map +1 -0
  67. package/build/errors/categories/auth.js +111 -0
  68. package/build/errors/categories/auth.js.map +1 -0
  69. package/build/errors/categories/connection.d.ts +70 -0
  70. package/build/errors/categories/connection.d.ts.map +1 -0
  71. package/build/errors/categories/connection.js +120 -0
  72. package/build/errors/categories/connection.js.map +1 -0
  73. package/build/errors/categories/index.d.ts +14 -0
  74. package/build/errors/categories/index.d.ts.map +1 -0
  75. package/build/errors/categories/index.js +20 -0
  76. package/build/errors/categories/index.js.map +1 -0
  77. package/build/errors/categories/operation.d.ts +83 -0
  78. package/build/errors/categories/operation.d.ts.map +1 -0
  79. package/build/errors/categories/operation.js +149 -0
  80. package/build/errors/categories/operation.js.map +1 -0
  81. package/build/errors/categories/protocol.d.ts +68 -0
  82. package/build/errors/categories/protocol.d.ts.map +1 -0
  83. package/build/errors/categories/protocol.js +135 -0
  84. package/build/errors/categories/protocol.js.map +1 -0
  85. package/build/errors/categories/session.d.ts +50 -0
  86. package/build/errors/categories/session.d.ts.map +1 -0
  87. package/build/errors/categories/session.js +97 -0
  88. package/build/errors/categories/session.js.map +1 -0
  89. package/build/errors/categories/system.d.ts +95 -0
  90. package/build/errors/categories/system.d.ts.map +1 -0
  91. package/build/errors/categories/system.js +190 -0
  92. package/build/errors/categories/system.js.map +1 -0
  93. package/build/errors/categories/transport.d.ts +70 -0
  94. package/build/errors/categories/transport.d.ts.map +1 -0
  95. package/build/errors/categories/transport.js +148 -0
  96. package/build/errors/categories/transport.js.map +1 -0
  97. package/build/errors/categories/validation.d.ts +140 -0
  98. package/build/errors/categories/validation.d.ts.map +1 -0
  99. package/build/errors/categories/validation.js +311 -0
  100. package/build/errors/categories/validation.js.map +1 -0
  101. package/build/errors/core/base.d.ts +103 -0
  102. package/build/errors/core/base.d.ts.map +1 -0
  103. package/build/errors/core/base.js +219 -0
  104. package/build/errors/core/base.js.map +1 -0
  105. package/build/errors/core/constants.d.ts +40 -0
  106. package/build/errors/core/constants.d.ts.map +1 -0
  107. package/build/errors/core/constants.js +49 -0
  108. package/build/errors/core/constants.js.map +1 -0
  109. package/build/errors/core/error-codes.d.ts +72 -0
  110. package/build/errors/core/error-codes.d.ts.map +1 -0
  111. package/build/errors/core/error-codes.js +88 -0
  112. package/build/errors/core/error-codes.js.map +1 -0
  113. package/build/errors/core/http.d.ts +69 -0
  114. package/build/errors/core/http.d.ts.map +1 -0
  115. package/build/errors/core/http.js +106 -0
  116. package/build/errors/core/http.js.map +1 -0
  117. package/build/errors/core/index.d.ts +23 -0
  118. package/build/errors/core/index.d.ts.map +1 -0
  119. package/build/errors/core/index.js +41 -0
  120. package/build/errors/core/index.js.map +1 -0
  121. package/build/errors/core/json-rpc.d.ts +69 -0
  122. package/build/errors/core/json-rpc.d.ts.map +1 -0
  123. package/build/errors/core/json-rpc.js +79 -0
  124. package/build/errors/core/json-rpc.js.map +1 -0
  125. package/build/errors/core/messages.d.ts +51 -0
  126. package/build/errors/core/messages.d.ts.map +1 -0
  127. package/build/errors/core/messages.js +59 -0
  128. package/build/errors/core/messages.js.map +1 -0
  129. package/build/errors/core/types.d.ts +80 -0
  130. package/build/errors/core/types.d.ts.map +1 -0
  131. package/build/errors/core/types.js +10 -0
  132. package/build/errors/core/types.js.map +1 -0
  133. package/build/errors/factory.d.ts +199 -0
  134. package/build/errors/factory.d.ts.map +1 -0
  135. package/build/errors/factory.js +244 -0
  136. package/build/errors/factory.js.map +1 -0
  137. package/build/errors/index.d.ts +35 -0
  138. package/build/errors/index.d.ts.map +1 -0
  139. package/build/errors/index.js +67 -0
  140. package/build/errors/index.js.map +1 -0
  141. package/build/index.d.ts +93 -0
  142. package/build/index.d.ts.map +1 -0
  143. package/build/index.js +107 -0
  144. package/build/index.js.map +1 -0
  145. package/build/logger/core/constants.d.ts +143 -0
  146. package/build/logger/core/constants.d.ts.map +1 -0
  147. package/build/logger/core/constants.js +206 -0
  148. package/build/logger/core/constants.js.map +1 -0
  149. package/build/logger/core/context.d.ts +170 -0
  150. package/build/logger/core/context.d.ts.map +1 -0
  151. package/build/logger/core/context.js +237 -0
  152. package/build/logger/core/context.js.map +1 -0
  153. package/build/logger/core/errors.d.ts +101 -0
  154. package/build/logger/core/errors.d.ts.map +1 -0
  155. package/build/logger/core/errors.js +128 -0
  156. package/build/logger/core/errors.js.map +1 -0
  157. package/build/logger/core/format.d.ts +40 -0
  158. package/build/logger/core/format.d.ts.map +1 -0
  159. package/build/logger/core/format.js +47 -0
  160. package/build/logger/core/format.js.map +1 -0
  161. package/build/logger/core/index.d.ts +19 -0
  162. package/build/logger/core/index.d.ts.map +1 -0
  163. package/build/logger/core/index.js +47 -0
  164. package/build/logger/core/index.js.map +1 -0
  165. package/build/logger/core/trace-context.d.ts +51 -0
  166. package/build/logger/core/trace-context.d.ts.map +1 -0
  167. package/build/logger/core/trace-context.js +42 -0
  168. package/build/logger/core/trace-context.js.map +1 -0
  169. package/build/logger/core/types.d.ts +233 -0
  170. package/build/logger/core/types.d.ts.map +1 -0
  171. package/build/logger/core/types.js +10 -0
  172. package/build/logger/core/types.js.map +1 -0
  173. package/build/logger/factory.d.ts +150 -0
  174. package/build/logger/factory.d.ts.map +1 -0
  175. package/build/logger/factory.js +236 -0
  176. package/build/logger/factory.js.map +1 -0
  177. package/build/logger/formatters/index.d.ts +12 -0
  178. package/build/logger/formatters/index.d.ts.map +1 -0
  179. package/build/logger/formatters/index.js +15 -0
  180. package/build/logger/formatters/index.js.map +1 -0
  181. package/build/logger/formatters/json-formatter.d.ts +54 -0
  182. package/build/logger/formatters/json-formatter.d.ts.map +1 -0
  183. package/build/logger/formatters/json-formatter.js +80 -0
  184. package/build/logger/formatters/json-formatter.js.map +1 -0
  185. package/build/logger/formatters/schema.d.ts +230 -0
  186. package/build/logger/formatters/schema.d.ts.map +1 -0
  187. package/build/logger/formatters/schema.js +278 -0
  188. package/build/logger/formatters/schema.js.map +1 -0
  189. package/build/logger/formatters/text-formatter.d.ts +50 -0
  190. package/build/logger/formatters/text-formatter.d.ts.map +1 -0
  191. package/build/logger/formatters/text-formatter.js +93 -0
  192. package/build/logger/formatters/text-formatter.js.map +1 -0
  193. package/build/logger/index.d.ts +39 -0
  194. package/build/logger/index.d.ts.map +1 -0
  195. package/build/logger/index.js +43 -0
  196. package/build/logger/index.js.map +1 -0
  197. package/build/logger/logger.d.ts +278 -0
  198. package/build/logger/logger.d.ts.map +1 -0
  199. package/build/logger/logger.js +459 -0
  200. package/build/logger/logger.js.map +1 -0
  201. package/build/logger/mcp-logger.d.ts +177 -0
  202. package/build/logger/mcp-logger.d.ts.map +1 -0
  203. package/build/logger/mcp-logger.js +294 -0
  204. package/build/logger/mcp-logger.js.map +1 -0
  205. package/build/logger/scrubbing/index.d.ts +14 -0
  206. package/build/logger/scrubbing/index.d.ts.map +1 -0
  207. package/build/logger/scrubbing/index.js +16 -0
  208. package/build/logger/scrubbing/index.js.map +1 -0
  209. package/build/logger/scrubbing/injection-guard.d.ts +69 -0
  210. package/build/logger/scrubbing/injection-guard.d.ts.map +1 -0
  211. package/build/logger/scrubbing/injection-guard.js +102 -0
  212. package/build/logger/scrubbing/injection-guard.js.map +1 -0
  213. package/build/logger/scrubbing/secret-scrubber.d.ts +72 -0
  214. package/build/logger/scrubbing/secret-scrubber.d.ts.map +1 -0
  215. package/build/logger/scrubbing/secret-scrubber.js +177 -0
  216. package/build/logger/scrubbing/secret-scrubber.js.map +1 -0
  217. package/build/logger/writers/base-writer.d.ts +45 -0
  218. package/build/logger/writers/base-writer.d.ts.map +1 -0
  219. package/build/logger/writers/base-writer.js +41 -0
  220. package/build/logger/writers/base-writer.js.map +1 -0
  221. package/build/logger/writers/composite-writer.d.ts +83 -0
  222. package/build/logger/writers/composite-writer.d.ts.map +1 -0
  223. package/build/logger/writers/composite-writer.js +121 -0
  224. package/build/logger/writers/composite-writer.js.map +1 -0
  225. package/build/logger/writers/console-writer.d.ts +59 -0
  226. package/build/logger/writers/console-writer.d.ts.map +1 -0
  227. package/build/logger/writers/console-writer.js +73 -0
  228. package/build/logger/writers/console-writer.js.map +1 -0
  229. package/build/logger/writers/file-writer.d.ts +160 -0
  230. package/build/logger/writers/file-writer.d.ts.map +1 -0
  231. package/build/logger/writers/file-writer.js +345 -0
  232. package/build/logger/writers/file-writer.js.map +1 -0
  233. package/build/logger/writers/index.d.ts +15 -0
  234. package/build/logger/writers/index.d.ts.map +1 -0
  235. package/build/logger/writers/index.js +19 -0
  236. package/build/logger/writers/index.js.map +1 -0
  237. package/build/mcp/capabilities/apps/define-app.d.ts +68 -0
  238. package/build/mcp/capabilities/apps/define-app.d.ts.map +1 -0
  239. package/build/mcp/capabilities/apps/define-app.js +127 -0
  240. package/build/mcp/capabilities/apps/define-app.js.map +1 -0
  241. package/build/mcp/capabilities/apps/index.d.ts +10 -0
  242. package/build/mcp/capabilities/apps/index.d.ts.map +1 -0
  243. package/build/mcp/capabilities/apps/index.js +10 -0
  244. package/build/mcp/capabilities/apps/index.js.map +1 -0
  245. package/build/mcp/capabilities/capabilities.d.ts +24 -0
  246. package/build/mcp/capabilities/capabilities.d.ts.map +1 -0
  247. package/build/mcp/capabilities/capabilities.js +50 -0
  248. package/build/mcp/capabilities/capabilities.js.map +1 -0
  249. package/build/mcp/capabilities/index.d.ts +17 -0
  250. package/build/mcp/capabilities/index.d.ts.map +1 -0
  251. package/build/mcp/capabilities/index.js +20 -0
  252. package/build/mcp/capabilities/index.js.map +1 -0
  253. package/build/mcp/capabilities/prompts/define-prompt.d.ts +95 -0
  254. package/build/mcp/capabilities/prompts/define-prompt.d.ts.map +1 -0
  255. package/build/mcp/capabilities/prompts/define-prompt.js +109 -0
  256. package/build/mcp/capabilities/prompts/define-prompt.js.map +1 -0
  257. package/build/mcp/capabilities/prompts/index.d.ts +10 -0
  258. package/build/mcp/capabilities/prompts/index.d.ts.map +1 -0
  259. package/build/mcp/capabilities/prompts/index.js +10 -0
  260. package/build/mcp/capabilities/prompts/index.js.map +1 -0
  261. package/build/mcp/capabilities/registry/base-registry.d.ts +95 -0
  262. package/build/mcp/capabilities/registry/base-registry.d.ts.map +1 -0
  263. package/build/mcp/capabilities/registry/base-registry.js +149 -0
  264. package/build/mcp/capabilities/registry/base-registry.js.map +1 -0
  265. package/build/mcp/capabilities/registry/index.d.ts +16 -0
  266. package/build/mcp/capabilities/registry/index.d.ts.map +1 -0
  267. package/build/mcp/capabilities/registry/index.js +34 -0
  268. package/build/mcp/capabilities/registry/index.js.map +1 -0
  269. package/build/mcp/capabilities/registry/prompt-registry.d.ts +116 -0
  270. package/build/mcp/capabilities/registry/prompt-registry.d.ts.map +1 -0
  271. package/build/mcp/capabilities/registry/prompt-registry.js +232 -0
  272. package/build/mcp/capabilities/registry/prompt-registry.js.map +1 -0
  273. package/build/mcp/capabilities/registry/reset.d.ts +30 -0
  274. package/build/mcp/capabilities/registry/reset.d.ts.map +1 -0
  275. package/build/mcp/capabilities/registry/reset.js +48 -0
  276. package/build/mcp/capabilities/registry/reset.js.map +1 -0
  277. package/build/mcp/capabilities/registry/resource-registry.d.ts +152 -0
  278. package/build/mcp/capabilities/registry/resource-registry.d.ts.map +1 -0
  279. package/build/mcp/capabilities/registry/resource-registry.js +430 -0
  280. package/build/mcp/capabilities/registry/resource-registry.js.map +1 -0
  281. package/build/mcp/capabilities/registry/scope-enforcement.d.ts +48 -0
  282. package/build/mcp/capabilities/registry/scope-enforcement.d.ts.map +1 -0
  283. package/build/mcp/capabilities/registry/scope-enforcement.js +62 -0
  284. package/build/mcp/capabilities/registry/scope-enforcement.js.map +1 -0
  285. package/build/mcp/capabilities/registry/task-tool-registry.d.ts +96 -0
  286. package/build/mcp/capabilities/registry/task-tool-registry.d.ts.map +1 -0
  287. package/build/mcp/capabilities/registry/task-tool-registry.js +190 -0
  288. package/build/mcp/capabilities/registry/task-tool-registry.js.map +1 -0
  289. package/build/mcp/capabilities/registry/tool-registry.d.ts +100 -0
  290. package/build/mcp/capabilities/registry/tool-registry.d.ts.map +1 -0
  291. package/build/mcp/capabilities/registry/tool-registry.js +242 -0
  292. package/build/mcp/capabilities/registry/tool-registry.js.map +1 -0
  293. package/build/mcp/capabilities/resources/define-resource.d.ts +103 -0
  294. package/build/mcp/capabilities/resources/define-resource.d.ts.map +1 -0
  295. package/build/mcp/capabilities/resources/define-resource.js +137 -0
  296. package/build/mcp/capabilities/resources/define-resource.js.map +1 -0
  297. package/build/mcp/capabilities/resources/index.d.ts +10 -0
  298. package/build/mcp/capabilities/resources/index.d.ts.map +1 -0
  299. package/build/mcp/capabilities/resources/index.js +10 -0
  300. package/build/mcp/capabilities/resources/index.js.map +1 -0
  301. package/build/mcp/capabilities/server-capabilities.d.ts +33 -0
  302. package/build/mcp/capabilities/server-capabilities.d.ts.map +1 -0
  303. package/build/mcp/capabilities/server-capabilities.js +16 -0
  304. package/build/mcp/capabilities/server-capabilities.js.map +1 -0
  305. package/build/mcp/capabilities/tasks/define-task.d.ts +75 -0
  306. package/build/mcp/capabilities/tasks/define-task.d.ts.map +1 -0
  307. package/build/mcp/capabilities/tasks/define-task.js +93 -0
  308. package/build/mcp/capabilities/tasks/define-task.js.map +1 -0
  309. package/build/mcp/capabilities/tasks/index.d.ts +11 -0
  310. package/build/mcp/capabilities/tasks/index.d.ts.map +1 -0
  311. package/build/mcp/capabilities/tasks/index.js +11 -0
  312. package/build/mcp/capabilities/tasks/index.js.map +1 -0
  313. package/build/mcp/capabilities/tools/define-tool.d.ts +62 -0
  314. package/build/mcp/capabilities/tools/define-tool.d.ts.map +1 -0
  315. package/build/mcp/capabilities/tools/define-tool.js +73 -0
  316. package/build/mcp/capabilities/tools/define-tool.js.map +1 -0
  317. package/build/mcp/capabilities/tools/index.d.ts +10 -0
  318. package/build/mcp/capabilities/tools/index.d.ts.map +1 -0
  319. package/build/mcp/capabilities/tools/index.js +10 -0
  320. package/build/mcp/capabilities/tools/index.js.map +1 -0
  321. package/build/mcp/handlers/index.d.ts +19 -0
  322. package/build/mcp/handlers/index.d.ts.map +1 -0
  323. package/build/mcp/handlers/index.js +26 -0
  324. package/build/mcp/handlers/index.js.map +1 -0
  325. package/build/mcp/handlers/ping.d.ts +27 -0
  326. package/build/mcp/handlers/ping.d.ts.map +1 -0
  327. package/build/mcp/handlers/ping.js +61 -0
  328. package/build/mcp/handlers/ping.js.map +1 -0
  329. package/build/mcp/handlers/progress.d.ts +41 -0
  330. package/build/mcp/handlers/progress.d.ts.map +1 -0
  331. package/build/mcp/handlers/progress.js +79 -0
  332. package/build/mcp/handlers/progress.js.map +1 -0
  333. package/build/mcp/index.d.ts +28 -0
  334. package/build/mcp/index.d.ts.map +1 -0
  335. package/build/mcp/index.js +34 -0
  336. package/build/mcp/index.js.map +1 -0
  337. package/build/mcp/responses/helpers.d.ts +146 -0
  338. package/build/mcp/responses/helpers.d.ts.map +1 -0
  339. package/build/mcp/responses/helpers.js +197 -0
  340. package/build/mcp/responses/helpers.js.map +1 -0
  341. package/build/mcp/responses/index.d.ts +9 -0
  342. package/build/mcp/responses/index.d.ts.map +1 -0
  343. package/build/mcp/responses/index.js +12 -0
  344. package/build/mcp/responses/index.js.map +1 -0
  345. package/build/mcp/types/context.d.ts +371 -0
  346. package/build/mcp/types/context.d.ts.map +1 -0
  347. package/build/mcp/types/context.js +17 -0
  348. package/build/mcp/types/context.js.map +1 -0
  349. package/build/mcp/types/definition.d.ts +727 -0
  350. package/build/mcp/types/definition.d.ts.map +1 -0
  351. package/build/mcp/types/definition.js +29 -0
  352. package/build/mcp/types/definition.js.map +1 -0
  353. package/build/mcp/types/handler.d.ts +58 -0
  354. package/build/mcp/types/handler.d.ts.map +1 -0
  355. package/build/mcp/types/handler.js +10 -0
  356. package/build/mcp/types/handler.js.map +1 -0
  357. package/build/mcp/types/index.d.ts +21 -0
  358. package/build/mcp/types/index.d.ts.map +1 -0
  359. package/build/mcp/types/index.js +18 -0
  360. package/build/mcp/types/index.js.map +1 -0
  361. package/build/mcp/types/response.d.ts +79 -0
  362. package/build/mcp/types/response.d.ts.map +1 -0
  363. package/build/mcp/types/response.js +10 -0
  364. package/build/mcp/types/response.js.map +1 -0
  365. package/build/server/auth/auth-context.d.ts +52 -0
  366. package/build/server/auth/auth-context.d.ts.map +1 -0
  367. package/build/server/auth/auth-context.js +45 -0
  368. package/build/server/auth/auth-context.js.map +1 -0
  369. package/build/server/auth/guards.d.ts +72 -0
  370. package/build/server/auth/guards.d.ts.map +1 -0
  371. package/build/server/auth/guards.js +103 -0
  372. package/build/server/auth/guards.js.map +1 -0
  373. package/build/server/auth/index.d.ts +21 -0
  374. package/build/server/auth/index.d.ts.map +1 -0
  375. package/build/server/auth/index.js +20 -0
  376. package/build/server/auth/index.js.map +1 -0
  377. package/build/server/auth/oidc-discovery.d.ts +68 -0
  378. package/build/server/auth/oidc-discovery.d.ts.map +1 -0
  379. package/build/server/auth/oidc-discovery.js +234 -0
  380. package/build/server/auth/oidc-discovery.js.map +1 -0
  381. package/build/server/auth/oidc-provider.d.ts +96 -0
  382. package/build/server/auth/oidc-provider.d.ts.map +1 -0
  383. package/build/server/auth/oidc-provider.js +126 -0
  384. package/build/server/auth/oidc-provider.js.map +1 -0
  385. package/build/server/auth/types.d.ts +204 -0
  386. package/build/server/auth/types.d.ts.map +1 -0
  387. package/build/server/auth/types.js +29 -0
  388. package/build/server/auth/types.js.map +1 -0
  389. package/build/server/auth/upstream-provider.d.ts +161 -0
  390. package/build/server/auth/upstream-provider.d.ts.map +1 -0
  391. package/build/server/auth/upstream-provider.js +411 -0
  392. package/build/server/auth/upstream-provider.js.map +1 -0
  393. package/build/server/builder/constants.d.ts +45 -0
  394. package/build/server/builder/constants.d.ts.map +1 -0
  395. package/build/server/builder/constants.js +54 -0
  396. package/build/server/builder/constants.js.map +1 -0
  397. package/build/server/builder/index.d.ts +24 -0
  398. package/build/server/builder/index.d.ts.map +1 -0
  399. package/build/server/builder/index.js +25 -0
  400. package/build/server/builder/index.js.map +1 -0
  401. package/build/server/builder/primitive-collector.d.ts +24 -0
  402. package/build/server/builder/primitive-collector.d.ts.map +1 -0
  403. package/build/server/builder/primitive-collector.js +89 -0
  404. package/build/server/builder/primitive-collector.js.map +1 -0
  405. package/build/server/builder/server-builder.d.ts +53 -0
  406. package/build/server/builder/server-builder.d.ts.map +1 -0
  407. package/build/server/builder/server-builder.js +132 -0
  408. package/build/server/builder/server-builder.js.map +1 -0
  409. package/build/server/builder/types.d.ts +93 -0
  410. package/build/server/builder/types.d.ts.map +1 -0
  411. package/build/server/builder/types.js +25 -0
  412. package/build/server/builder/types.js.map +1 -0
  413. package/build/server/builder/validation.d.ts +36 -0
  414. package/build/server/builder/validation.d.ts.map +1 -0
  415. package/build/server/builder/validation.js +44 -0
  416. package/build/server/builder/validation.js.map +1 -0
  417. package/build/server/create-server.d.ts +57 -0
  418. package/build/server/create-server.d.ts.map +1 -0
  419. package/build/server/create-server.js +104 -0
  420. package/build/server/create-server.js.map +1 -0
  421. package/build/server/http/express-app.d.ts +103 -0
  422. package/build/server/http/express-app.d.ts.map +1 -0
  423. package/build/server/http/express-app.js +391 -0
  424. package/build/server/http/express-app.js.map +1 -0
  425. package/build/server/http/http-server.d.ts +67 -0
  426. package/build/server/http/http-server.d.ts.map +1 -0
  427. package/build/server/http/http-server.js +188 -0
  428. package/build/server/http/http-server.js.map +1 -0
  429. package/build/server/http/http-transport.d.ts +33 -0
  430. package/build/server/http/http-transport.d.ts.map +1 -0
  431. package/build/server/http/http-transport.js +84 -0
  432. package/build/server/http/http-transport.js.map +1 -0
  433. package/build/server/http/index.d.ts +15 -0
  434. package/build/server/http/index.d.ts.map +1 -0
  435. package/build/server/http/index.js +11 -0
  436. package/build/server/http/index.js.map +1 -0
  437. package/build/server/index.d.ts +25 -0
  438. package/build/server/index.d.ts.map +1 -0
  439. package/build/server/index.js +41 -0
  440. package/build/server/index.js.map +1 -0
  441. package/build/server/lifecycle.d.ts +114 -0
  442. package/build/server/lifecycle.d.ts.map +1 -0
  443. package/build/server/lifecycle.js +30 -0
  444. package/build/server/lifecycle.js.map +1 -0
  445. package/build/server/middleware/bearer-auth.d.ts +43 -0
  446. package/build/server/middleware/bearer-auth.d.ts.map +1 -0
  447. package/build/server/middleware/bearer-auth.js +75 -0
  448. package/build/server/middleware/bearer-auth.js.map +1 -0
  449. package/build/server/middleware/custom-header-auth.d.ts +40 -0
  450. package/build/server/middleware/custom-header-auth.d.ts.map +1 -0
  451. package/build/server/middleware/custom-header-auth.js +90 -0
  452. package/build/server/middleware/custom-header-auth.js.map +1 -0
  453. package/build/server/middleware/dns-rebinding.d.ts +25 -0
  454. package/build/server/middleware/dns-rebinding.d.ts.map +1 -0
  455. package/build/server/middleware/dns-rebinding.js +94 -0
  456. package/build/server/middleware/dns-rebinding.js.map +1 -0
  457. package/build/server/middleware/index.d.ts +69 -0
  458. package/build/server/middleware/index.d.ts.map +1 -0
  459. package/build/server/middleware/index.js +68 -0
  460. package/build/server/middleware/index.js.map +1 -0
  461. package/build/server/middleware/logging.d.ts +21 -0
  462. package/build/server/middleware/logging.d.ts.map +1 -0
  463. package/build/server/middleware/logging.js +36 -0
  464. package/build/server/middleware/logging.js.map +1 -0
  465. package/build/server/middleware/oauth-router.d.ts +50 -0
  466. package/build/server/middleware/oauth-router.d.ts.map +1 -0
  467. package/build/server/middleware/oauth-router.js +53 -0
  468. package/build/server/middleware/oauth-router.js.map +1 -0
  469. package/build/server/middleware/protocol-version.d.ts +13 -0
  470. package/build/server/middleware/protocol-version.d.ts.map +1 -0
  471. package/build/server/middleware/protocol-version.js +48 -0
  472. package/build/server/middleware/protocol-version.js.map +1 -0
  473. package/build/server/middleware/rate-limit.d.ts +47 -0
  474. package/build/server/middleware/rate-limit.d.ts.map +1 -0
  475. package/build/server/middleware/rate-limit.js +109 -0
  476. package/build/server/middleware/rate-limit.js.map +1 -0
  477. package/build/server/middleware/trust-proxy.d.ts +37 -0
  478. package/build/server/middleware/trust-proxy.d.ts.map +1 -0
  479. package/build/server/middleware/trust-proxy.js +154 -0
  480. package/build/server/middleware/trust-proxy.js.map +1 -0
  481. package/build/server/option-overrides.d.ts +25 -0
  482. package/build/server/option-overrides.d.ts.map +1 -0
  483. package/build/server/option-overrides.js +85 -0
  484. package/build/server/option-overrides.js.map +1 -0
  485. package/build/server/routes/health.d.ts +87 -0
  486. package/build/server/routes/health.d.ts.map +1 -0
  487. package/build/server/routes/health.js +183 -0
  488. package/build/server/routes/health.js.map +1 -0
  489. package/build/server/routes/index.d.ts +16 -0
  490. package/build/server/routes/index.d.ts.map +1 -0
  491. package/build/server/routes/index.js +18 -0
  492. package/build/server/routes/index.js.map +1 -0
  493. package/build/server/routes/metrics.d.ts +40 -0
  494. package/build/server/routes/metrics.d.ts.map +1 -0
  495. package/build/server/routes/metrics.js +81 -0
  496. package/build/server/routes/metrics.js.map +1 -0
  497. package/build/server/routes/oauth-router.d.ts +50 -0
  498. package/build/server/routes/oauth-router.d.ts.map +1 -0
  499. package/build/server/routes/oauth-router.js +53 -0
  500. package/build/server/routes/oauth-router.js.map +1 -0
  501. package/build/server/routes/readiness-status.d.ts +25 -0
  502. package/build/server/routes/readiness-status.d.ts.map +1 -0
  503. package/build/server/routes/readiness-status.js +27 -0
  504. package/build/server/routes/readiness-status.js.map +1 -0
  505. package/build/server/routes/sse-router.d.ts +43 -0
  506. package/build/server/routes/sse-router.d.ts.map +1 -0
  507. package/build/server/routes/sse-router.js +92 -0
  508. package/build/server/routes/sse-router.js.map +1 -0
  509. package/build/server/routes/streamable-http-router.d.ts +36 -0
  510. package/build/server/routes/streamable-http-router.d.ts.map +1 -0
  511. package/build/server/routes/streamable-http-router.js +59 -0
  512. package/build/server/routes/streamable-http-router.js.map +1 -0
  513. package/build/server/server-instance.d.ts +185 -0
  514. package/build/server/server-instance.d.ts.map +1 -0
  515. package/build/server/server-instance.js +615 -0
  516. package/build/server/server-instance.js.map +1 -0
  517. package/build/server/server-options.d.ts +411 -0
  518. package/build/server/server-options.d.ts.map +1 -0
  519. package/build/server/server-options.js +17 -0
  520. package/build/server/server-options.js.map +1 -0
  521. package/build/server/session/in-memory-store.d.ts +128 -0
  522. package/build/server/session/in-memory-store.d.ts.map +1 -0
  523. package/build/server/session/in-memory-store.js +312 -0
  524. package/build/server/session/in-memory-store.js.map +1 -0
  525. package/build/server/session/index.d.ts +43 -0
  526. package/build/server/session/index.d.ts.map +1 -0
  527. package/build/server/session/index.js +47 -0
  528. package/build/server/session/index.js.map +1 -0
  529. package/build/server/session/mcp-session.d.ts +210 -0
  530. package/build/server/session/mcp-session.d.ts.map +1 -0
  531. package/build/server/session/mcp-session.js +428 -0
  532. package/build/server/session/mcp-session.js.map +1 -0
  533. package/build/server/session/session-factory.d.ts +119 -0
  534. package/build/server/session/session-factory.d.ts.map +1 -0
  535. package/build/server/session/session-factory.js +131 -0
  536. package/build/server/session/session-factory.js.map +1 -0
  537. package/build/server/session/session-housekeeper.d.ts +100 -0
  538. package/build/server/session/session-housekeeper.d.ts.map +1 -0
  539. package/build/server/session/session-housekeeper.js +217 -0
  540. package/build/server/session/session-housekeeper.js.map +1 -0
  541. package/build/server/session/session-manager.d.ts +227 -0
  542. package/build/server/session/session-manager.d.ts.map +1 -0
  543. package/build/server/session/session-manager.js +282 -0
  544. package/build/server/session/session-manager.js.map +1 -0
  545. package/build/server/session/session-store.d.ts +95 -0
  546. package/build/server/session/session-store.d.ts.map +1 -0
  547. package/build/server/session/session-store.js +13 -0
  548. package/build/server/session/session-store.js.map +1 -0
  549. package/build/server/session/session.d.ts +132 -0
  550. package/build/server/session/session.d.ts.map +1 -0
  551. package/build/server/session/session.js +61 -0
  552. package/build/server/session/session.js.map +1 -0
  553. package/build/server/transport/constants.d.ts +85 -0
  554. package/build/server/transport/constants.d.ts.map +1 -0
  555. package/build/server/transport/constants.js +103 -0
  556. package/build/server/transport/constants.js.map +1 -0
  557. package/build/server/transport/index.d.ts +21 -0
  558. package/build/server/transport/index.d.ts.map +1 -0
  559. package/build/server/transport/index.js +28 -0
  560. package/build/server/transport/index.js.map +1 -0
  561. package/build/server/transport/sse/handler.d.ts +46 -0
  562. package/build/server/transport/sse/handler.d.ts.map +1 -0
  563. package/build/server/transport/sse/handler.js +189 -0
  564. package/build/server/transport/sse/handler.js.map +1 -0
  565. package/build/server/transport/sse/index.d.ts +15 -0
  566. package/build/server/transport/sse/index.d.ts.map +1 -0
  567. package/build/server/transport/sse/index.js +14 -0
  568. package/build/server/transport/sse/index.js.map +1 -0
  569. package/build/server/transport/sse/transport.d.ts +94 -0
  570. package/build/server/transport/sse/transport.d.ts.map +1 -0
  571. package/build/server/transport/sse/transport.js +175 -0
  572. package/build/server/transport/sse/transport.js.map +1 -0
  573. package/build/server/transport/stdio-transport.d.ts +23 -0
  574. package/build/server/transport/stdio-transport.d.ts.map +1 -0
  575. package/build/server/transport/stdio-transport.js +59 -0
  576. package/build/server/transport/stdio-transport.js.map +1 -0
  577. package/build/server/transport/streamable-http/index.d.ts +9 -0
  578. package/build/server/transport/streamable-http/index.d.ts.map +1 -0
  579. package/build/server/transport/streamable-http/index.js +9 -0
  580. package/build/server/transport/streamable-http/index.js.map +1 -0
  581. package/build/server/transport/streamable-http/stateful-handler.d.ts +41 -0
  582. package/build/server/transport/streamable-http/stateful-handler.d.ts.map +1 -0
  583. package/build/server/transport/streamable-http/stateful-handler.js +264 -0
  584. package/build/server/transport/streamable-http/stateful-handler.js.map +1 -0
  585. package/build/server/transport/streamable-http/stateless-handler.d.ts +28 -0
  586. package/build/server/transport/streamable-http/stateless-handler.d.ts.map +1 -0
  587. package/build/server/transport/streamable-http/stateless-handler.js +81 -0
  588. package/build/server/transport/streamable-http/stateless-handler.js.map +1 -0
  589. package/build/server/transport/streamable-http/transport.d.ts +110 -0
  590. package/build/server/transport/streamable-http/transport.d.ts.map +1 -0
  591. package/build/server/transport/streamable-http/transport.js +118 -0
  592. package/build/server/transport/streamable-http/transport.js.map +1 -0
  593. package/build/server/transport/transport-context.d.ts +67 -0
  594. package/build/server/transport/transport-context.d.ts.map +1 -0
  595. package/build/server/transport/transport-context.js +38 -0
  596. package/build/server/transport/transport-context.js.map +1 -0
  597. package/build/server/transport/types.d.ts +56 -0
  598. package/build/server/transport/types.d.ts.map +1 -0
  599. package/build/server/transport/types.js +11 -0
  600. package/build/server/transport/types.js.map +1 -0
  601. package/build/server/transport-options.d.ts +248 -0
  602. package/build/server/transport-options.d.ts.map +1 -0
  603. package/build/server/transport-options.js +18 -0
  604. package/build/server/transport-options.js.map +1 -0
  605. package/build/server/types.d.ts +172 -0
  606. package/build/server/types.d.ts.map +1 -0
  607. package/build/server/types.js +9 -0
  608. package/build/server/types.js.map +1 -0
  609. package/build/telemetry/connection-telemetry-bridge.d.ts +30 -0
  610. package/build/telemetry/connection-telemetry-bridge.d.ts.map +1 -0
  611. package/build/telemetry/connection-telemetry-bridge.js +54 -0
  612. package/build/telemetry/connection-telemetry-bridge.js.map +1 -0
  613. package/build/telemetry/core/config.d.ts +38 -0
  614. package/build/telemetry/core/config.d.ts.map +1 -0
  615. package/build/telemetry/core/config.js +54 -0
  616. package/build/telemetry/core/config.js.map +1 -0
  617. package/build/telemetry/core/constants.d.ts +183 -0
  618. package/build/telemetry/core/constants.d.ts.map +1 -0
  619. package/build/telemetry/core/constants.js +207 -0
  620. package/build/telemetry/core/constants.js.map +1 -0
  621. package/build/telemetry/core/diag-logger.d.ts +35 -0
  622. package/build/telemetry/core/diag-logger.d.ts.map +1 -0
  623. package/build/telemetry/core/diag-logger.js +54 -0
  624. package/build/telemetry/core/diag-logger.js.map +1 -0
  625. package/build/telemetry/core/index.d.ts +12 -0
  626. package/build/telemetry/core/index.d.ts.map +1 -0
  627. package/build/telemetry/core/index.js +32 -0
  628. package/build/telemetry/core/index.js.map +1 -0
  629. package/build/telemetry/core/types.d.ts +106 -0
  630. package/build/telemetry/core/types.d.ts.map +1 -0
  631. package/build/telemetry/core/types.js +10 -0
  632. package/build/telemetry/core/types.js.map +1 -0
  633. package/build/telemetry/index.d.ts +59 -0
  634. package/build/telemetry/index.d.ts.map +1 -0
  635. package/build/telemetry/index.js +79 -0
  636. package/build/telemetry/index.js.map +1 -0
  637. package/build/telemetry/metrics.d.ts +127 -0
  638. package/build/telemetry/metrics.d.ts.map +1 -0
  639. package/build/telemetry/metrics.js +337 -0
  640. package/build/telemetry/metrics.js.map +1 -0
  641. package/build/telemetry/sdk.d.ts +110 -0
  642. package/build/telemetry/sdk.d.ts.map +1 -0
  643. package/build/telemetry/sdk.js +547 -0
  644. package/build/telemetry/sdk.js.map +1 -0
  645. package/build/telemetry/tracing.d.ts +78 -0
  646. package/build/telemetry/tracing.d.ts.map +1 -0
  647. package/build/telemetry/tracing.js +257 -0
  648. package/build/telemetry/tracing.js.map +1 -0
  649. package/build/utils/env-helpers.d.ts +46 -0
  650. package/build/utils/env-helpers.d.ts.map +1 -0
  651. package/build/utils/env-helpers.js +54 -0
  652. package/build/utils/env-helpers.js.map +1 -0
  653. package/build/utils/index.d.ts +14 -0
  654. package/build/utils/index.d.ts.map +1 -0
  655. package/build/utils/index.js +19 -0
  656. package/build/utils/index.js.map +1 -0
  657. package/build/utils/sensitive-keys.d.ts +48 -0
  658. package/build/utils/sensitive-keys.d.ts.map +1 -0
  659. package/build/utils/sensitive-keys.js +131 -0
  660. package/build/utils/sensitive-keys.js.map +1 -0
  661. package/build/utils/string-helpers.d.ts +126 -0
  662. package/build/utils/string-helpers.d.ts.map +1 -0
  663. package/build/utils/string-helpers.js +189 -0
  664. package/build/utils/string-helpers.js.map +1 -0
  665. package/build/utils/validation.d.ts +84 -0
  666. package/build/utils/validation.d.ts.map +1 -0
  667. package/build/utils/validation.js +111 -0
  668. package/build/utils/validation.js.map +1 -0
  669. package/build/utils/zod-helpers.d.ts +92 -0
  670. package/build/utils/zod-helpers.d.ts.map +1 -0
  671. package/build/utils/zod-helpers.js +120 -0
  672. package/build/utils/zod-helpers.js.map +1 -0
  673. package/package.json +133 -0
@@ -0,0 +1,50 @@
1
+ /**
2
+ * OAuth Router Middleware
3
+ *
4
+ * Wraps the SDK's `mcpAuthRouter()` to mount OAuth 2.1 endpoints
5
+ * when a full OAuth provider is configured.
6
+ *
7
+ * Routes mounted:
8
+ * - `GET /authorize` — Authorization endpoint
9
+ * - `POST /token` — Token endpoint
10
+ * - `POST /register` — Dynamic client registration
11
+ * - `POST /revoke` — Token revocation
12
+ * - `GET /.well-known/oauth-authorization-server` — Authorization Server Metadata (RFC 8414)
13
+ * - `GET /.well-known/oauth-protected-resource` — Protected Resource Metadata (RFC 9728)
14
+ *
15
+ * Only created when the provider is a full `OAuthServerProvider`
16
+ * (detected via {@link isFullOAuthProvider}).
17
+ *
18
+ * @module server/middleware/oauth-router
19
+ */
20
+ import type { RequestHandler } from "express";
21
+ import type { OAuthServerProvider } from "@modelcontextprotocol/sdk/server/auth/provider.js";
22
+ /**
23
+ * Options for creating the OAuth router.
24
+ */
25
+ export interface OAuthRouterOptions {
26
+ /** Full OAuth server provider (must have `clientsStore`) */
27
+ readonly provider: OAuthServerProvider;
28
+ /**
29
+ * OAuth issuer URL (Authorization Server identifier).
30
+ * Required by the MCP SDK for Authorization Server Metadata (RFC 8414).
31
+ */
32
+ readonly issuerUrl: URL;
33
+ /**
34
+ * Scopes supported by this authorization server.
35
+ * Advertised in the Authorization Server Metadata document.
36
+ */
37
+ readonly scopesSupported?: readonly string[];
38
+ }
39
+ /**
40
+ * Creates an Express router with OAuth 2.1 endpoints.
41
+ *
42
+ * Delegates to the SDK's `mcpAuthRouter()` for the actual endpoint
43
+ * implementation. The router handles authorization, token exchange,
44
+ * client registration, and discovery metadata.
45
+ *
46
+ * @param options - OAuth router configuration
47
+ * @returns Express request handler (router) with OAuth endpoints
48
+ */
49
+ export declare function createOAuthRouter(options: OAuthRouterOptions): RequestHandler;
50
+ //# sourceMappingURL=oauth-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-router.d.ts","sourceRoot":"","sources":["../../../src/server/middleware/oauth-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mDAAmD,CAAC;AAqB7F;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IAEvC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC;IAExB;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAMD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,cAAc,CAY7E"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * OAuth Router Middleware
3
+ *
4
+ * Wraps the SDK's `mcpAuthRouter()` to mount OAuth 2.1 endpoints
5
+ * when a full OAuth provider is configured.
6
+ *
7
+ * Routes mounted:
8
+ * - `GET /authorize` — Authorization endpoint
9
+ * - `POST /token` — Token endpoint
10
+ * - `POST /register` — Dynamic client registration
11
+ * - `POST /revoke` — Token revocation
12
+ * - `GET /.well-known/oauth-authorization-server` — Authorization Server Metadata (RFC 8414)
13
+ * - `GET /.well-known/oauth-protected-resource` — Protected Resource Metadata (RFC 9728)
14
+ *
15
+ * Only created when the provider is a full `OAuthServerProvider`
16
+ * (detected via {@link isFullOAuthProvider}).
17
+ *
18
+ * @module server/middleware/oauth-router
19
+ */
20
+ import { mcpAuthRouter } from "@modelcontextprotocol/sdk/server/auth/router.js";
21
+ import { logger as baseLogger } from "../../logger/index.js";
22
+ // ============================================================================
23
+ // Logger
24
+ // ============================================================================
25
+ const LOG_COMPONENT = "oauth-router";
26
+ const LogMessages = {
27
+ MOUNTED: "OAuth router mounted (issuer: %s)",
28
+ };
29
+ const logger = baseLogger.child({ component: LOG_COMPONENT });
30
+ // ============================================================================
31
+ // Factory
32
+ // ============================================================================
33
+ /**
34
+ * Creates an Express router with OAuth 2.1 endpoints.
35
+ *
36
+ * Delegates to the SDK's `mcpAuthRouter()` for the actual endpoint
37
+ * implementation. The router handles authorization, token exchange,
38
+ * client registration, and discovery metadata.
39
+ *
40
+ * @param options - OAuth router configuration
41
+ * @returns Express request handler (router) with OAuth endpoints
42
+ */
43
+ export function createOAuthRouter(options) {
44
+ const { provider, issuerUrl, scopesSupported } = options;
45
+ const routerOptions = {
46
+ provider,
47
+ issuerUrl,
48
+ ...(scopesSupported && { scopesSupported: [...scopesSupported] }),
49
+ };
50
+ logger.info(LogMessages.MOUNTED, issuerUrl.toString());
51
+ return mcpAuthRouter(routerOptions);
52
+ }
53
+ //# sourceMappingURL=oauth-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-router.js","sourceRoot":"","sources":["../../../src/server/middleware/oauth-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,EAAE,aAAa,EAA0B,MAAM,iDAAiD,CAAC;AAExG,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAE7D,+EAA+E;AAC/E,SAAS;AACT,+EAA+E;AAE/E,MAAM,aAAa,GAAG,cAAc,CAAC;AAErC,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,mCAAmC;CACpC,CAAC;AAEX,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;AA0B9D,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAA2B;IAC3D,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAEzD,MAAM,aAAa,GAAsB;QACvC,QAAQ;QACR,SAAS;QACT,GAAG,CAAC,eAAe,IAAI,EAAE,eAAe,EAAE,CAAC,GAAG,eAAe,CAAC,EAAE,CAAC;KAClE,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEvD,OAAO,aAAa,CAAC,aAAa,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * MCP Protocol Version validation middleware
3
+ * MCP Spec 2025-06-18 MUST requirement
4
+ *
5
+ * @module server/middleware/protocol-version
6
+ */
7
+ import type { Request, Response, NextFunction } from "express";
8
+ /**
9
+ * Validates MCP-Protocol-Version header
10
+ * Server MUST respond with 400 Bad Request if version is invalid/unsupported
11
+ */
12
+ export declare function validateProtocolVersion(req: Request, res: Response, next: NextFunction): void;
13
+ //# sourceMappingURL=protocol-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-version.d.ts","sourceRoot":"","sources":["../../../src/server/middleware/protocol-version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAwB/D;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CA0B7F"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * MCP Protocol Version validation middleware
3
+ * MCP Spec 2025-06-18 MUST requirement
4
+ *
5
+ * @module server/middleware/protocol-version
6
+ */
7
+ import { sanitizeForLog } from "./logging.js";
8
+ import { logger as baseLogger } from "../../logger/index.js";
9
+ import { HttpStatus, createJsonRpcError, JsonRpcErrorCode } from "../../errors/index.js";
10
+ import { MCP_HEADERS } from "../transport/index.js";
11
+ import { SUPPORTED_PROTOCOL_VERSIONS } from "@modelcontextprotocol/sdk/types.js";
12
+ // ============================================================================
13
+ // Protocol Version Configuration
14
+ // ============================================================================
15
+ /**
16
+ * Fallback protocol version for backwards compatibility
17
+ * Used when client doesn't send MCP-Protocol-Version header
18
+ */
19
+ const FALLBACK_PROTOCOL_VERSION = "2024-11-05";
20
+ const logger = baseLogger.child({ component: "ProtocolVersion" });
21
+ /** @internal Log messages for protocol version validation */
22
+ const LogMessages = {
23
+ PROTOCOL_VERSION_UNSUPPORTED: "Unsupported protocol version: %s",
24
+ };
25
+ /**
26
+ * Validates MCP-Protocol-Version header
27
+ * Server MUST respond with 400 Bad Request if version is invalid/unsupported
28
+ */
29
+ export function validateProtocolVersion(req, res, next) {
30
+ const rawVersion = req.headers[MCP_HEADERS.PROTOCOL_VERSION];
31
+ const protocolVersion = typeof rawVersion === "string" ? rawVersion : undefined;
32
+ if (!protocolVersion) {
33
+ // Spec: For backwards compatibility, assume fallback version if no header present
34
+ req.headers[MCP_HEADERS.PROTOCOL_VERSION] = FALLBACK_PROTOCOL_VERSION;
35
+ next();
36
+ return;
37
+ }
38
+ // SUPPORTED_PROTOCOL_VERSIONS is imported from the MCP SDK — always in sync with the SDK version
39
+ if (!SUPPORTED_PROTOCOL_VERSIONS.includes(protocolVersion)) {
40
+ logger.warn(LogMessages.PROTOCOL_VERSION_UNSUPPORTED, sanitizeForLog(protocolVersion));
41
+ res
42
+ .status(HttpStatus.BAD_REQUEST)
43
+ .json(createJsonRpcError(JsonRpcErrorCode.INVALID_REQUEST, `Unsupported MCP-Protocol-Version: ${sanitizeForLog(protocolVersion)}. Supported versions: ${SUPPORTED_PROTOCOL_VERSIONS.join(", ")}`));
44
+ return;
45
+ }
46
+ next();
47
+ }
48
+ //# sourceMappingURL=protocol-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-version.js","sourceRoot":"","sources":["../../../src/server/middleware/protocol-version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAEjF,+EAA+E;AAC/E,iCAAiC;AACjC,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,yBAAyB,GAAG,YAAY,CAAC;AAE/C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAElE,6DAA6D;AAC7D,MAAM,WAAW,GAAG;IAClB,4BAA4B,EAAE,kCAAkC;CACxD,CAAC;AAEX;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IACrF,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAC7D,MAAM,eAAe,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhF,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,kFAAkF;QAClF,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,yBAAyB,CAAC;QACtE,IAAI,EAAE,CAAC;QACP,OAAO;IACT,CAAC;IAED,iGAAiG;IACjG,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,4BAA4B,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC;QACvF,GAAG;aACA,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC;aAC9B,IAAI,CACH,kBAAkB,CAChB,gBAAgB,CAAC,eAAe,EAChC,qCAAqC,cAAc,CAAC,eAAe,CAAC,yBAAyB,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtI,CACF,CAAC;QACJ,OAAO;IACT,CAAC;IAED,IAAI,EAAE,CAAC;AACT,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Rate limiting middleware
3
+ * Prevents abuse and DoS attacks
4
+ *
5
+ * @module server/middleware/rate-limit
6
+ */
7
+ import { type RateLimitRequestHandler } from "express-rate-limit";
8
+ /**
9
+ * Rate limiter configuration options.
10
+ */
11
+ export interface RateLimiterOptions {
12
+ /** Time window in milliseconds (default: 900000 = 15 minutes) */
13
+ windowMs?: number;
14
+ /** Maximum requests per window (default: 1000) */
15
+ max?: number;
16
+ /**
17
+ * Whether Express trust proxy is configured.
18
+ *
19
+ * When `true`, the rate limiter uses `req.ip` (correctly resolved by Express
20
+ * via `X-Forwarded-For`). When `false` and `X-Forwarded-For` is detected,
21
+ * all clients behind the proxy share a single rate-limit bucket
22
+ * (keyed by proxy IP), and a one-time warning is logged.
23
+ */
24
+ trustProxyConfigured?: boolean;
25
+ }
26
+ /**
27
+ * Resets the cached rate limiter.
28
+ * Called by the central config reset to maintain cache coherence.
29
+ *
30
+ * @internal
31
+ */
32
+ export declare function resetRateLimiterCache(): void;
33
+ /**
34
+ * Creates or returns cached rate limiter for MCP endpoint.
35
+ *
36
+ * Uses lazy initialization to avoid circular dependency issues.
37
+ * The config is read when the function is first called, not at module load.
38
+ *
39
+ * Configurable via environment variables:
40
+ * - MCP_RATE_LIMIT_WINDOW_MS: Time window in ms (default: 900000 = 15 minutes)
41
+ * - MCP_RATE_LIMIT_MAX: Max requests per window (default: 1000)
42
+ *
43
+ * @param options - Optional override for rate limit settings
44
+ * @returns Express rate limiter middleware
45
+ */
46
+ export declare function createRateLimiter(options?: RateLimiterOptions): RateLimitRequestHandler;
47
+ //# sourceMappingURL=rate-limit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../../src/server/middleware/rate-limit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAwB7E;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAQD;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,uBAAuB,CAmEvF"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Rate limiting middleware
3
+ * Prevents abuse and DoS attacks
4
+ *
5
+ * @module server/middleware/rate-limit
6
+ */
7
+ import rateLimit, {} from "express-rate-limit";
8
+ import { TransportErrorMessage, createJsonRpcError, HttpStatus, JsonRpcErrorCode } from "../../errors/index.js";
9
+ import { getFrameworkConfig, registerCacheReset } from "../../config/index.js";
10
+ import { logger as baseLogger } from "../../logger/index.js";
11
+ // ============================================================================
12
+ // Logger
13
+ // ============================================================================
14
+ const LOG_COMPONENT = "rate-limit";
15
+ const LogMessages = {
16
+ CONFIGURED: "Rate limiter configured: max %d requests per %ds window",
17
+ EXCEEDED: "Rate limit exceeded from %s",
18
+ TRUST_PROXY_MISSING: "X-Forwarded-For header detected but MCP_TRUST_PROXY is not configured — " +
19
+ "all clients behind the reverse proxy share a single rate-limit bucket. " +
20
+ "Configure MCP_TRUST_PROXY for correct per-client rate limiting.",
21
+ PROXY_REJECTED: "Rejected proxied request from %s — MCP_TRUST_PROXY not configured",
22
+ };
23
+ const logger = baseLogger.child({ component: LOG_COMPONENT });
24
+ /** Cached rate limiter instance (lazy initialization) */
25
+ let cachedRateLimiter;
26
+ // Self-register for central cache reset
27
+ registerCacheReset(resetRateLimiterCache);
28
+ /**
29
+ * Resets the cached rate limiter.
30
+ * Called by the central config reset to maintain cache coherence.
31
+ *
32
+ * @internal
33
+ */
34
+ export function resetRateLimiterCache() {
35
+ cachedRateLimiter = undefined;
36
+ }
37
+ /**
38
+ * Creates or returns cached rate limiter for MCP endpoint.
39
+ *
40
+ * Uses lazy initialization to avoid circular dependency issues.
41
+ * The config is read when the function is first called, not at module load.
42
+ *
43
+ * Configurable via environment variables:
44
+ * - MCP_RATE_LIMIT_WINDOW_MS: Time window in ms (default: 900000 = 15 minutes)
45
+ * - MCP_RATE_LIMIT_MAX: Max requests per window (default: 1000)
46
+ *
47
+ * @param options - Optional override for rate limit settings
48
+ * @returns Express rate limiter middleware
49
+ */
50
+ export function createRateLimiter(options) {
51
+ if (cachedRateLimiter && !options) {
52
+ return cachedRateLimiter;
53
+ }
54
+ // Lazy load config to avoid circular dependency
55
+ const config = getFrameworkConfig();
56
+ const windowMs = options?.windowMs ?? config.MCP_RATE_LIMIT_WINDOW_MS;
57
+ const max = options?.max ?? config.MCP_RATE_LIMIT_MAX;
58
+ // Trust proxy warning: detect reverse proxy without trust proxy config.
59
+ // Without trust proxy, req.ip is the TCP connection IP (proxy IP) — not spoofable,
60
+ // but all clients behind the same proxy share one rate-limit bucket.
61
+ // This is the safest default: a custom keyGenerator using X-Forwarded-For would
62
+ // allow attackers to create unlimited buckets by spoofing the header.
63
+ const trustProxyActive = options?.trustProxyConfigured ?? false;
64
+ let trustProxyWarningLogged = false;
65
+ const limiter = rateLimit({
66
+ windowMs,
67
+ max,
68
+ message: TransportErrorMessage.RATE_LIMIT_EXCEEDED,
69
+ standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers
70
+ legacyHeaders: false, // Disable the `X-RateLimit-*` headers
71
+ handler: (req, res) => {
72
+ // Log one-time warning when X-Forwarded-For detected without trust proxy
73
+ if (!trustProxyActive && !trustProxyWarningLogged && req.headers["x-forwarded-for"]) {
74
+ logger.warn(LogMessages.TRUST_PROXY_MISSING);
75
+ trustProxyWarningLogged = true;
76
+ }
77
+ logger.warn(LogMessages.EXCEEDED, req.ip ?? "unknown");
78
+ res
79
+ .status(HttpStatus.TOO_MANY_REQUESTS)
80
+ .json(createJsonRpcError(JsonRpcErrorCode.SERVER_ERROR, TransportErrorMessage.RATE_LIMIT_EXCEEDED));
81
+ },
82
+ });
83
+ logger.debug(LogMessages.CONFIGURED, max, Math.round(windowMs / 1000));
84
+ // When trust proxy is not configured, reject requests that arrive via a reverse proxy.
85
+ // Without trust proxy, req.ip resolves to the proxy IP — rate limiting and IP-based
86
+ // security would apply to the proxy, not individual clients. Reject with 502 so the
87
+ // operator notices the misconfiguration.
88
+ if (!trustProxyActive) {
89
+ const guardedLimiter = ((req, res, next) => {
90
+ if (req.headers["x-forwarded-for"]) {
91
+ logger.warn(LogMessages.PROXY_REJECTED, req.ip ?? "unknown");
92
+ res
93
+ .status(HttpStatus.BAD_GATEWAY)
94
+ .json(createJsonRpcError(JsonRpcErrorCode.SERVER_ERROR, TransportErrorMessage.PROXY_NOT_CONFIGURED));
95
+ return;
96
+ }
97
+ limiter(req, res, next);
98
+ });
99
+ if (!options) {
100
+ cachedRateLimiter = guardedLimiter;
101
+ }
102
+ return guardedLimiter;
103
+ }
104
+ if (!options) {
105
+ cachedRateLimiter = limiter;
106
+ }
107
+ return limiter;
108
+ }
109
+ //# sourceMappingURL=rate-limit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../../src/server/middleware/rate-limit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Trust Proxy Resolution
3
+ *
4
+ * Validates and resolves the `MCP_TRUST_PROXY` configuration value into
5
+ * a type-safe Express-compatible trust proxy setting.
6
+ *
7
+ * Supported value formats:
8
+ * - **Hop count**: Integer string (`'1'`, `'2'`) → `number` for Express
9
+ * - **Express keywords**: `'loopback'`, `'linklocal'`, `'uniquelocal'`
10
+ * - **IP addresses**: IPv4 or IPv6 (`'10.0.0.1'`, `'::1'`)
11
+ * - **CIDR ranges**: `'10.0.0.0/8'`, `'172.16.0.0/12'`
12
+ * - **DNS hostnames**: Resolved to IP at startup (`'proxy.example.com'`)
13
+ * - **Comma-separated lists**: `'loopback, 10.0.0.1, proxy.internal'`
14
+ *
15
+ * Invalid values or unresolvable hostnames throw `ConfigurationError`.
16
+ * `undefined` or empty string → `undefined` (trust proxy disabled).
17
+ *
18
+ * @module server/middleware/trust-proxy
19
+ */
20
+ /** Express built-in trust proxy keywords. */
21
+ declare const TRUST_PROXY_KEYWORDS: ReadonlySet<string>;
22
+ /**
23
+ * Resolve a raw trust proxy config string into an Express-compatible value.
24
+ *
25
+ * This function validates each segment of the (possibly comma-separated)
26
+ * value. DNS hostnames are resolved to IP addresses at startup time.
27
+ *
28
+ * @param value - Raw config string from `MCP_TRUST_PROXY`
29
+ * @returns Resolved value for `app.set('trust proxy', ...)`:
30
+ * - `number` for hop-count values
31
+ * - `string` for IP/CIDR/keyword (possibly comma-separated)
32
+ * - `undefined` when trust proxy is disabled
33
+ * @throws {ConfigurationError} if a segment is invalid or DNS resolution fails
34
+ */
35
+ export declare function resolveTrustProxy(value: string | undefined): Promise<string | number | undefined>;
36
+ export { TRUST_PROXY_KEYWORDS };
37
+ //# sourceMappingURL=trust-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-proxy.d.ts","sourceRoot":"","sources":["../../../src/server/middleware/trust-proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAcH,6CAA6C;AAC7C,QAAA,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAqD,CAAC;AAgBpG;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAuCvG;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Trust Proxy Resolution
3
+ *
4
+ * Validates and resolves the `MCP_TRUST_PROXY` configuration value into
5
+ * a type-safe Express-compatible trust proxy setting.
6
+ *
7
+ * Supported value formats:
8
+ * - **Hop count**: Integer string (`'1'`, `'2'`) → `number` for Express
9
+ * - **Express keywords**: `'loopback'`, `'linklocal'`, `'uniquelocal'`
10
+ * - **IP addresses**: IPv4 or IPv6 (`'10.0.0.1'`, `'::1'`)
11
+ * - **CIDR ranges**: `'10.0.0.0/8'`, `'172.16.0.0/12'`
12
+ * - **DNS hostnames**: Resolved to IP at startup (`'proxy.example.com'`)
13
+ * - **Comma-separated lists**: `'loopback, 10.0.0.1, proxy.internal'`
14
+ *
15
+ * Invalid values or unresolvable hostnames throw `ConfigurationError`.
16
+ * `undefined` or empty string → `undefined` (trust proxy disabled).
17
+ *
18
+ * @module server/middleware/trust-proxy
19
+ */
20
+ import { isIP } from "node:net";
21
+ import { promises as dns } from "node:dns";
22
+ import { ConfigurationError } from "../../errors/index.js";
23
+ import { logger as baseLogger } from "../../logger/index.js";
24
+ // ============================================================================
25
+ // Constants
26
+ // ============================================================================
27
+ const ENV_VAR = "MCP_TRUST_PROXY";
28
+ /** Express built-in trust proxy keywords. */
29
+ const TRUST_PROXY_KEYWORDS = new Set(["loopback", "linklocal", "uniquelocal"]);
30
+ /** Pattern for CIDR notation: IP address followed by /prefix-length. */
31
+ const CIDR_PATTERN = /^.+\/\d{1,3}$/;
32
+ const logger = baseLogger.child({ component: "trust-proxy" });
33
+ const TrustProxyLogMessages = {
34
+ RESOLVED_HOSTNAME: "Resolved trust proxy hostname %s → %s",
35
+ TRUST_PROXY_ACTIVE: "Trust proxy enabled: %s",
36
+ };
37
+ // ============================================================================
38
+ // Public API
39
+ // ============================================================================
40
+ /**
41
+ * Resolve a raw trust proxy config string into an Express-compatible value.
42
+ *
43
+ * This function validates each segment of the (possibly comma-separated)
44
+ * value. DNS hostnames are resolved to IP addresses at startup time.
45
+ *
46
+ * @param value - Raw config string from `MCP_TRUST_PROXY`
47
+ * @returns Resolved value for `app.set('trust proxy', ...)`:
48
+ * - `number` for hop-count values
49
+ * - `string` for IP/CIDR/keyword (possibly comma-separated)
50
+ * - `undefined` when trust proxy is disabled
51
+ * @throws {ConfigurationError} if a segment is invalid or DNS resolution fails
52
+ */
53
+ export async function resolveTrustProxy(value) {
54
+ if (value === undefined || value.trim() === "") {
55
+ return undefined;
56
+ }
57
+ const trimmed = value.trim();
58
+ // ── Hop count (pure integer) ─────────────────────────────────────────
59
+ const asNumber = Number(trimmed);
60
+ if (Number.isInteger(asNumber) && asNumber >= 1) {
61
+ logger.info(TrustProxyLogMessages.TRUST_PROXY_ACTIVE, String(asNumber));
62
+ return asNumber;
63
+ }
64
+ // Guard: "0" or negative integers are not valid hop counts
65
+ if (Number.isInteger(asNumber) && asNumber <= 0) {
66
+ throw ConfigurationError.invalidEnvVar(ENV_VAR, `Hop count must be ≥ 1, got ${trimmed}`);
67
+ }
68
+ // ── Segment-wise validation (comma-separated) ───────────────────────
69
+ const rawSegments = trimmed.split(",");
70
+ const resolvedSegments = [];
71
+ for (const raw of rawSegments) {
72
+ const segment = raw.trim();
73
+ if (segment === "")
74
+ continue;
75
+ const resolved = await resolveSegment(segment);
76
+ resolvedSegments.push(resolved);
77
+ }
78
+ if (resolvedSegments.length === 0) {
79
+ return undefined;
80
+ }
81
+ const result = resolvedSegments.length === 1 ? resolvedSegments[0] : resolvedSegments.join(", ");
82
+ logger.info(TrustProxyLogMessages.TRUST_PROXY_ACTIVE, result);
83
+ return result;
84
+ }
85
+ export { TRUST_PROXY_KEYWORDS };
86
+ // ============================================================================
87
+ // Internal Helpers
88
+ // ============================================================================
89
+ /**
90
+ * Validate and resolve a single trust proxy segment.
91
+ *
92
+ * Order of checks:
93
+ * 1. Express keyword (`loopback`, `linklocal`, `uniquelocal`)
94
+ * 2. IP address (IPv4 or IPv6)
95
+ * 3. CIDR range (IP/prefix)
96
+ * 4. DNS hostname → resolve to IP
97
+ */
98
+ async function resolveSegment(segment) {
99
+ // 1. Express keyword
100
+ if (TRUST_PROXY_KEYWORDS.has(segment)) {
101
+ return segment;
102
+ }
103
+ // 2. Plain IP address
104
+ if (isIP(segment) !== 0) {
105
+ return segment;
106
+ }
107
+ // 3. CIDR notation — validate the IP part
108
+ if (CIDR_PATTERN.test(segment)) {
109
+ const slashIndex = segment.lastIndexOf("/");
110
+ const ipPart = segment.substring(0, slashIndex);
111
+ const prefixStr = segment.substring(slashIndex + 1);
112
+ const prefix = Number(prefixStr);
113
+ if (isIP(ipPart) === 0) {
114
+ throw ConfigurationError.invalidEnvVar(ENV_VAR, `Invalid IP in CIDR notation: '${segment}'`);
115
+ }
116
+ const maxPrefix = isIP(ipPart) === 4 ? 32 : 128;
117
+ if (prefix < 0 || prefix > maxPrefix) {
118
+ throw ConfigurationError.invalidEnvVar(ENV_VAR, `CIDR prefix out of range (0–${String(maxPrefix)}): '${segment}'`);
119
+ }
120
+ return segment;
121
+ }
122
+ // 4. DNS hostname — resolve at startup
123
+ return resolveHostname(segment);
124
+ }
125
+ /**
126
+ * Resolve a DNS hostname to an IP address.
127
+ *
128
+ * Uses `dns.promises.lookup()` which respects the OS resolver configuration
129
+ * (including `/etc/hosts`). Only the first resolved address is used.
130
+ *
131
+ * @throws {ConfigurationError} if DNS resolution fails or the hostname
132
+ * contains invalid characters
133
+ */
134
+ async function resolveHostname(hostname) {
135
+ // Basic hostname validation (RFC 1123)
136
+ if (!/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)*$/.test(hostname)) {
137
+ throw ConfigurationError.invalidEnvVar(ENV_VAR, `Invalid trust proxy value: '${hostname}' (not a keyword, IP, CIDR, or valid hostname)`);
138
+ }
139
+ const DNS_TIMEOUT_MS = 5_000;
140
+ try {
141
+ const lookup = dns.lookup(hostname);
142
+ const timeout = new Promise((_, reject) => {
143
+ const timer = setTimeout(() => reject(new Error("DNS lookup timed out")), DNS_TIMEOUT_MS);
144
+ timer.unref();
145
+ });
146
+ const { address } = await Promise.race([lookup, timeout]);
147
+ logger.info(TrustProxyLogMessages.RESOLVED_HOSTNAME, hostname, address);
148
+ return address;
149
+ }
150
+ catch (_cause) {
151
+ throw ConfigurationError.invalidEnvVar(ENV_VAR, `Cannot resolve hostname '${hostname}': DNS lookup failed`);
152
+ }
153
+ }
154
+ //# sourceMappingURL=trust-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-proxy.js","sourceRoot":"","sources":["../../../src/server/middleware/trust-proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Programmatic Option → Config Overrides
3
+ *
4
+ * Pure mapping function that bridges programmatic ServerOptions into
5
+ * FrameworkEnvConfig overrides. Extracted from McpServerInstance for
6
+ * testability and to reduce class complexity.
7
+ *
8
+ * @module server/option-overrides
9
+ * @internal
10
+ */
11
+ import type { ServerOptions } from "./server-options.js";
12
+ import type { FrameworkEnvConfig } from "../config/index.js";
13
+ /**
14
+ * Maps programmatic server options to config override entries.
15
+ *
16
+ * This is a pure function — it reads `currentConfig` only to check
17
+ * whether OTEL_SERVICE_NAME is already set (avoiding accidental override).
18
+ *
19
+ * @param options - The server options from createServer() or McpServerBuilder
20
+ * @param currentConfig - The current resolved framework config
21
+ * @returns Partial config overrides to apply (empty object if none)
22
+ * @internal
23
+ */
24
+ export declare function mapServerOptionsToOverrides(options: ServerOptions, currentConfig: FrameworkEnvConfig): Partial<FrameworkEnvConfig>;
25
+ //# sourceMappingURL=option-overrides.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"option-overrides.d.ts","sourceRoot":"","sources":["../../src/server/option-overrides.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,aAAa,EACtB,aAAa,EAAE,kBAAkB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAkE7B"}