@rekog/mcp-nest 1.9.10 → 2.0.0-alpha.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 (364) hide show
  1. package/README.md +76 -29
  2. package/dist/index.d.ts +0 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +0 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/mcp/decorators/constants.d.ts +1 -0
  7. package/dist/mcp/decorators/constants.d.ts.map +1 -1
  8. package/dist/mcp/decorators/constants.js +2 -1
  9. package/dist/mcp/decorators/constants.js.map +1 -1
  10. package/dist/mcp/decorators/index.d.ts +3 -1
  11. package/dist/mcp/decorators/index.d.ts.map +1 -1
  12. package/dist/mcp/decorators/index.js +3 -1
  13. package/dist/mcp/decorators/index.js.map +1 -1
  14. package/dist/mcp/decorators/mcp-controller.decorator.d.ts +6 -0
  15. package/dist/mcp/decorators/mcp-controller.decorator.d.ts.map +1 -0
  16. package/dist/mcp/decorators/mcp-controller.decorator.js +43 -0
  17. package/dist/mcp/decorators/mcp-controller.decorator.js.map +1 -0
  18. package/dist/mcp/decorators/mcp-message-pattern.d.ts +3 -0
  19. package/dist/mcp/decorators/mcp-message-pattern.d.ts.map +1 -0
  20. package/dist/mcp/decorators/mcp-message-pattern.js +13 -0
  21. package/dist/mcp/decorators/mcp-message-pattern.js.map +1 -0
  22. package/dist/mcp/decorators/prompt.decorator.d.ts +1 -1
  23. package/dist/mcp/decorators/prompt.decorator.d.ts.map +1 -1
  24. package/dist/mcp/decorators/prompt.decorator.js +2 -1
  25. package/dist/mcp/decorators/prompt.decorator.js.map +1 -1
  26. package/dist/mcp/decorators/public.decorator.js.map +1 -1
  27. package/dist/mcp/decorators/raw-request.decorator.d.ts +2 -0
  28. package/dist/mcp/decorators/raw-request.decorator.d.ts.map +1 -0
  29. package/dist/mcp/decorators/raw-request.decorator.js +6 -0
  30. package/dist/mcp/decorators/raw-request.decorator.js.map +1 -0
  31. package/dist/mcp/decorators/resource-template.decorator.d.ts +1 -1
  32. package/dist/mcp/decorators/resource-template.decorator.d.ts.map +1 -1
  33. package/dist/mcp/decorators/resource-template.decorator.js +2 -1
  34. package/dist/mcp/decorators/resource-template.decorator.js.map +1 -1
  35. package/dist/mcp/decorators/resource.decorator.d.ts +1 -1
  36. package/dist/mcp/decorators/resource.decorator.d.ts.map +1 -1
  37. package/dist/mcp/decorators/resource.decorator.js +2 -1
  38. package/dist/mcp/decorators/resource.decorator.js.map +1 -1
  39. package/dist/mcp/decorators/tool.decorator.d.ts +1 -3
  40. package/dist/mcp/decorators/tool.decorator.d.ts.map +1 -1
  41. package/dist/mcp/decorators/tool.decorator.js +2 -1
  42. package/dist/mcp/decorators/tool.decorator.js.map +1 -1
  43. package/dist/mcp/filters/mcp-exception.filter.d.ts +6 -0
  44. package/dist/mcp/filters/mcp-exception.filter.d.ts.map +1 -0
  45. package/dist/mcp/filters/mcp-exception.filter.js +26 -0
  46. package/dist/mcp/filters/mcp-exception.filter.js.map +1 -0
  47. package/dist/mcp/index.d.ts +11 -7
  48. package/dist/mcp/index.d.ts.map +1 -1
  49. package/dist/mcp/index.js +11 -7
  50. package/dist/mcp/index.js.map +1 -1
  51. package/dist/mcp/interfaces/authenticated-user.interface.d.ts +9 -0
  52. package/dist/mcp/interfaces/authenticated-user.interface.d.ts.map +1 -0
  53. package/dist/{authz/interfaces/request-with-user.js → mcp/interfaces/authenticated-user.interface.js} +1 -1
  54. package/dist/mcp/interfaces/authenticated-user.interface.js.map +1 -0
  55. package/dist/mcp/interfaces/dynamic-prompt.interface.d.ts +1 -1
  56. package/dist/mcp/interfaces/dynamic-prompt.interface.d.ts.map +1 -1
  57. package/dist/mcp/interfaces/dynamic-prompt.interface.js.map +1 -1
  58. package/dist/mcp/interfaces/dynamic-resource.interface.d.ts +1 -1
  59. package/dist/mcp/interfaces/dynamic-resource.interface.d.ts.map +1 -1
  60. package/dist/mcp/interfaces/dynamic-resource.interface.js.map +1 -1
  61. package/dist/mcp/interfaces/dynamic-tool.interface.d.ts +1 -1
  62. package/dist/mcp/interfaces/dynamic-tool.interface.d.ts.map +1 -1
  63. package/dist/mcp/interfaces/dynamic-tool.interface.js.map +1 -1
  64. package/dist/mcp/interfaces/index.d.ts +2 -2
  65. package/dist/mcp/interfaces/index.d.ts.map +1 -1
  66. package/dist/mcp/interfaces/index.js +0 -3
  67. package/dist/mcp/interfaces/index.js.map +1 -1
  68. package/dist/mcp/services/tool-authorization.service.d.ts +7 -5
  69. package/dist/mcp/services/tool-authorization.service.d.ts.map +1 -1
  70. package/dist/mcp/services/tool-authorization.service.js +9 -6
  71. package/dist/mcp/services/tool-authorization.service.js.map +1 -1
  72. package/dist/mcp/transport/mcp-context.d.ts +34 -0
  73. package/dist/mcp/transport/mcp-context.d.ts.map +1 -0
  74. package/dist/mcp/transport/mcp-context.js +74 -0
  75. package/dist/mcp/transport/mcp-context.js.map +1 -0
  76. package/dist/mcp/transport/mcp-http-handler.d.ts +7 -0
  77. package/dist/mcp/transport/mcp-http-handler.d.ts.map +1 -0
  78. package/dist/mcp/transport/mcp-http-handler.js +5 -0
  79. package/dist/mcp/transport/mcp-http-handler.js.map +1 -0
  80. package/dist/mcp/transport/mcp-server-options.interface.d.ts +23 -0
  81. package/dist/mcp/transport/mcp-server-options.interface.d.ts.map +1 -0
  82. package/dist/{authz/providers/oauth-provider.interface.js → mcp/transport/mcp-server-options.interface.js} +1 -1
  83. package/dist/mcp/transport/mcp-server-options.interface.js.map +1 -0
  84. package/dist/mcp/transport/mcp-transport.constants.d.ts +19 -0
  85. package/dist/mcp/transport/mcp-transport.constants.d.ts.map +1 -0
  86. package/dist/mcp/transport/mcp-transport.constants.js +21 -0
  87. package/dist/mcp/transport/mcp-transport.constants.js.map +1 -0
  88. package/dist/mcp/transport/mcp-transport.interface.d.ts +17 -0
  89. package/dist/mcp/transport/mcp-transport.interface.d.ts.map +1 -0
  90. package/dist/{authz/interfaces/oauth-common.interface.js → mcp/transport/mcp-transport.interface.js} +1 -1
  91. package/dist/mcp/transport/mcp-transport.interface.js.map +1 -0
  92. package/dist/mcp/transport/mcp.strategy.d.ts +56 -0
  93. package/dist/mcp/transport/mcp.strategy.d.ts.map +1 -0
  94. package/dist/mcp/transport/mcp.strategy.js +446 -0
  95. package/dist/mcp/transport/mcp.strategy.js.map +1 -0
  96. package/dist/mcp/transport/resource-matcher.d.ts +13 -0
  97. package/dist/mcp/transport/resource-matcher.d.ts.map +1 -0
  98. package/dist/mcp/transport/resource-matcher.js +83 -0
  99. package/dist/mcp/transport/resource-matcher.js.map +1 -0
  100. package/dist/mcp/transport/streamable-http.controller.d.ts +16 -0
  101. package/dist/mcp/transport/streamable-http.controller.d.ts.map +1 -0
  102. package/dist/mcp/transport/streamable-http.controller.js +98 -0
  103. package/dist/mcp/transport/streamable-http.controller.js.map +1 -0
  104. package/dist/mcp/transport/transports/index.d.ts +3 -0
  105. package/dist/mcp/transport/transports/index.d.ts.map +1 -0
  106. package/dist/{authz → mcp/transport/transports}/index.js +2 -10
  107. package/dist/mcp/transport/transports/index.js.map +1 -0
  108. package/dist/mcp/transport/transports/read-body.d.ts +3 -0
  109. package/dist/mcp/transport/transports/read-body.d.ts.map +1 -0
  110. package/dist/mcp/transport/transports/read-body.js +32 -0
  111. package/dist/mcp/transport/transports/read-body.js.map +1 -0
  112. package/dist/mcp/transport/transports/stdio.transport.d.ts +9 -0
  113. package/dist/mcp/transport/transports/stdio.transport.d.ts.map +1 -0
  114. package/dist/mcp/transport/transports/stdio.transport.js +27 -0
  115. package/dist/mcp/transport/transports/stdio.transport.js.map +1 -0
  116. package/dist/mcp/transport/transports/streamable-http.transport.d.ts +33 -0
  117. package/dist/mcp/transport/transports/streamable-http.transport.d.ts.map +1 -0
  118. package/dist/mcp/transport/transports/streamable-http.transport.js +216 -0
  119. package/dist/mcp/transport/transports/streamable-http.transport.js.map +1 -0
  120. package/dist/mcp/utils/mcp-logger.factory.d.ts +6 -2
  121. package/dist/mcp/utils/mcp-logger.factory.d.ts.map +1 -1
  122. package/dist/mcp/utils/mcp-logger.factory.js.map +1 -1
  123. package/package.json +3 -66
  124. package/src/index.ts +0 -1
  125. package/src/mcp/decorators/constants.ts +1 -0
  126. package/src/mcp/decorators/index.ts +3 -1
  127. package/src/mcp/decorators/mcp-controller.decorator.ts +126 -0
  128. package/src/mcp/decorators/mcp-message-pattern.ts +38 -0
  129. package/src/mcp/decorators/prompt.decorator.ts +6 -2
  130. package/src/mcp/decorators/public.decorator.ts +3 -3
  131. package/src/mcp/decorators/raw-request.decorator.ts +32 -0
  132. package/src/mcp/decorators/resource-template.decorator.ts +6 -2
  133. package/src/mcp/decorators/resource.decorator.ts +6 -2
  134. package/src/mcp/decorators/tool.decorator.ts +6 -3
  135. package/src/mcp/filters/mcp-exception.filter.ts +47 -0
  136. package/src/mcp/index.ts +13 -7
  137. package/src/mcp/interfaces/authenticated-user.interface.ts +22 -0
  138. package/src/mcp/interfaces/dynamic-prompt.interface.ts +1 -1
  139. package/src/mcp/interfaces/dynamic-resource.interface.ts +1 -1
  140. package/src/mcp/interfaces/dynamic-tool.interface.ts +2 -2
  141. package/src/mcp/interfaces/index.ts +3 -7
  142. package/src/mcp/services/tool-authorization.service.ts +52 -72
  143. package/src/mcp/transport/mcp-context.ts +138 -0
  144. package/src/mcp/transport/mcp-http-handler.ts +32 -0
  145. package/src/mcp/transport/mcp-server-options.interface.ts +75 -0
  146. package/src/mcp/transport/mcp-transport.constants.ts +99 -0
  147. package/src/mcp/transport/mcp-transport.interface.ts +50 -0
  148. package/src/mcp/transport/mcp.strategy.ts +752 -0
  149. package/src/mcp/transport/resource-matcher.ts +107 -0
  150. package/src/mcp/transport/streamable-http.controller.ts +114 -0
  151. package/src/mcp/transport/transports/index.ts +2 -0
  152. package/src/mcp/transport/transports/read-body.ts +39 -0
  153. package/src/mcp/transport/transports/stdio.transport.ts +35 -0
  154. package/src/mcp/transport/transports/streamable-http.transport.ts +384 -0
  155. package/src/mcp/utils/mcp-logger.factory.spec.ts +8 -22
  156. package/src/mcp/utils/mcp-logger.factory.ts +13 -2
  157. package/dist/authz/guards/jwt-auth.guard.d.ts +0 -19
  158. package/dist/authz/guards/jwt-auth.guard.d.ts.map +0 -1
  159. package/dist/authz/guards/jwt-auth.guard.js +0 -108
  160. package/dist/authz/guards/jwt-auth.guard.js.map +0 -1
  161. package/dist/authz/index.d.ts +0 -11
  162. package/dist/authz/index.d.ts.map +0 -1
  163. package/dist/authz/index.js.map +0 -1
  164. package/dist/authz/interfaces/oauth-common.interface.d.ts +0 -21
  165. package/dist/authz/interfaces/oauth-common.interface.d.ts.map +0 -1
  166. package/dist/authz/interfaces/oauth-common.interface.js.map +0 -1
  167. package/dist/authz/interfaces/request-with-user.d.ts +0 -13
  168. package/dist/authz/interfaces/request-with-user.d.ts.map +0 -1
  169. package/dist/authz/interfaces/request-with-user.js.map +0 -1
  170. package/dist/authz/mcp-oauth.controller.d.ts +0 -81
  171. package/dist/authz/mcp-oauth.controller.d.ts.map +0 -1
  172. package/dist/authz/mcp-oauth.controller.js +0 -540
  173. package/dist/authz/mcp-oauth.controller.js.map +0 -1
  174. package/dist/authz/mcp-oauth.module.d.ts +0 -12
  175. package/dist/authz/mcp-oauth.module.d.ts.map +0 -1
  176. package/dist/authz/mcp-oauth.module.js +0 -271
  177. package/dist/authz/mcp-oauth.module.js.map +0 -1
  178. package/dist/authz/providers/azure-ad.provider.d.ts +0 -3
  179. package/dist/authz/providers/azure-ad.provider.d.ts.map +0 -1
  180. package/dist/authz/providers/azure-ad.provider.js +0 -37
  181. package/dist/authz/providers/azure-ad.provider.js.map +0 -1
  182. package/dist/authz/providers/github.provider.d.ts +0 -3
  183. package/dist/authz/providers/github.provider.d.ts.map +0 -1
  184. package/dist/authz/providers/github.provider.js +0 -24
  185. package/dist/authz/providers/github.provider.js.map +0 -1
  186. package/dist/authz/providers/google.provider.d.ts +0 -3
  187. package/dist/authz/providers/google.provider.d.ts.map +0 -1
  188. package/dist/authz/providers/google.provider.js +0 -25
  189. package/dist/authz/providers/google.provider.js.map +0 -1
  190. package/dist/authz/providers/oauth-provider.interface.d.ts +0 -107
  191. package/dist/authz/providers/oauth-provider.interface.d.ts.map +0 -1
  192. package/dist/authz/providers/oauth-provider.interface.js.map +0 -1
  193. package/dist/authz/services/client.service.d.ts +0 -12
  194. package/dist/authz/services/client.service.d.ts.map +0 -1
  195. package/dist/authz/services/client.service.js +0 -81
  196. package/dist/authz/services/client.service.js.map +0 -1
  197. package/dist/authz/services/jwt-token.service.d.ts +0 -37
  198. package/dist/authz/services/jwt-token.service.d.ts.map +0 -1
  199. package/dist/authz/services/jwt-token.service.js +0 -182
  200. package/dist/authz/services/jwt-token.service.js.map +0 -1
  201. package/dist/authz/services/oauth-strategy.service.d.ts +0 -13
  202. package/dist/authz/services/oauth-strategy.service.d.ts.map +0 -1
  203. package/dist/authz/services/oauth-strategy.service.js +0 -71
  204. package/dist/authz/services/oauth-strategy.service.js.map +0 -1
  205. package/dist/authz/stores/memory-store.service.d.ts +0 -27
  206. package/dist/authz/stores/memory-store.service.d.ts.map +0 -1
  207. package/dist/authz/stores/memory-store.service.js +0 -107
  208. package/dist/authz/stores/memory-store.service.js.map +0 -1
  209. package/dist/authz/stores/oauth-store.interface.d.ts +0 -61
  210. package/dist/authz/stores/oauth-store.interface.d.ts.map +0 -1
  211. package/dist/authz/stores/oauth-store.interface.js +0 -5
  212. package/dist/authz/stores/oauth-store.interface.js.map +0 -1
  213. package/dist/authz/stores/typeorm/constants.d.ts +0 -3
  214. package/dist/authz/stores/typeorm/constants.d.ts.map +0 -1
  215. package/dist/authz/stores/typeorm/constants.js +0 -6
  216. package/dist/authz/stores/typeorm/constants.js.map +0 -1
  217. package/dist/authz/stores/typeorm/entities/authorization-code.entity.d.ts +0 -15
  218. package/dist/authz/stores/typeorm/entities/authorization-code.entity.d.ts.map +0 -1
  219. package/dist/authz/stores/typeorm/entities/authorization-code.entity.js +0 -69
  220. package/dist/authz/stores/typeorm/entities/authorization-code.entity.js.map +0 -1
  221. package/dist/authz/stores/typeorm/entities/index.d.ts +0 -5
  222. package/dist/authz/stores/typeorm/entities/index.d.ts.map +0 -1
  223. package/dist/authz/stores/typeorm/entities/index.js +0 -12
  224. package/dist/authz/stores/typeorm/entities/index.js.map +0 -1
  225. package/dist/authz/stores/typeorm/entities/oauth-client.entity.d.ts +0 -17
  226. package/dist/authz/stores/typeorm/entities/oauth-client.entity.d.ts.map +0 -1
  227. package/dist/authz/stores/typeorm/entities/oauth-client.entity.js +0 -77
  228. package/dist/authz/stores/typeorm/entities/oauth-client.entity.js.map +0 -1
  229. package/dist/authz/stores/typeorm/entities/oauth-session.entity.d.ts +0 -14
  230. package/dist/authz/stores/typeorm/entities/oauth-session.entity.d.ts.map +0 -1
  231. package/dist/authz/stores/typeorm/entities/oauth-session.entity.js +0 -65
  232. package/dist/authz/stores/typeorm/entities/oauth-session.entity.js.map +0 -1
  233. package/dist/authz/stores/typeorm/entities/user-profile.entity.d.ts +0 -13
  234. package/dist/authz/stores/typeorm/entities/user-profile.entity.d.ts.map +0 -1
  235. package/dist/authz/stores/typeorm/entities/user-profile.entity.js +0 -62
  236. package/dist/authz/stores/typeorm/entities/user-profile.entity.js.map +0 -1
  237. package/dist/authz/stores/typeorm/typeorm-store.service.d.ts +0 -28
  238. package/dist/authz/stores/typeorm/typeorm-store.service.d.ts.map +0 -1
  239. package/dist/authz/stores/typeorm/typeorm-store.service.js +0 -138
  240. package/dist/authz/stores/typeorm/typeorm-store.service.js.map +0 -1
  241. package/dist/mcp/constants/feature-registration.constants.d.ts +0 -7
  242. package/dist/mcp/constants/feature-registration.constants.d.ts.map +0 -1
  243. package/dist/mcp/constants/feature-registration.constants.js +0 -5
  244. package/dist/mcp/constants/feature-registration.constants.js.map +0 -1
  245. package/dist/mcp/decorators/tool-guards.decorator.d.ts +0 -12
  246. package/dist/mcp/decorators/tool-guards.decorator.d.ts.map +0 -1
  247. package/dist/mcp/decorators/tool-guards.decorator.js +0 -13
  248. package/dist/mcp/decorators/tool-guards.decorator.js.map +0 -1
  249. package/dist/mcp/interfaces/mcp-options.interface.d.ts +0 -53
  250. package/dist/mcp/interfaces/mcp-options.interface.d.ts.map +0 -1
  251. package/dist/mcp/interfaces/mcp-options.interface.js +0 -10
  252. package/dist/mcp/interfaces/mcp-options.interface.js.map +0 -1
  253. package/dist/mcp/mcp.module.d.ts +0 -15
  254. package/dist/mcp/mcp.module.d.ts.map +0 -1
  255. package/dist/mcp/mcp.module.js +0 -248
  256. package/dist/mcp/mcp.module.js.map +0 -1
  257. package/dist/mcp/services/handlers/mcp-handler.base.d.ts +0 -117
  258. package/dist/mcp/services/handlers/mcp-handler.base.d.ts.map +0 -1
  259. package/dist/mcp/services/handlers/mcp-handler.base.js +0 -125
  260. package/dist/mcp/services/handlers/mcp-handler.base.js.map +0 -1
  261. package/dist/mcp/services/handlers/mcp-prompts.handler.d.ts +0 -12
  262. package/dist/mcp/services/handlers/mcp-prompts.handler.d.ts.map +0 -1
  263. package/dist/mcp/services/handlers/mcp-prompts.handler.js +0 -98
  264. package/dist/mcp/services/handlers/mcp-prompts.handler.js.map +0 -1
  265. package/dist/mcp/services/handlers/mcp-resources.handler.d.ts +0 -13
  266. package/dist/mcp/services/handlers/mcp-resources.handler.d.ts.map +0 -1
  267. package/dist/mcp/services/handlers/mcp-resources.handler.js +0 -117
  268. package/dist/mcp/services/handlers/mcp-resources.handler.js.map +0 -1
  269. package/dist/mcp/services/handlers/mcp-tools.handler.d.ts +0 -22
  270. package/dist/mcp/services/handlers/mcp-tools.handler.d.ts.map +0 -1
  271. package/dist/mcp/services/handlers/mcp-tools.handler.js +0 -258
  272. package/dist/mcp/services/handlers/mcp-tools.handler.js.map +0 -1
  273. package/dist/mcp/services/mcp-dynamic-registry.service.d.ts +0 -26
  274. package/dist/mcp/services/mcp-dynamic-registry.service.d.ts.map +0 -1
  275. package/dist/mcp/services/mcp-dynamic-registry.service.js +0 -133
  276. package/dist/mcp/services/mcp-dynamic-registry.service.js.map +0 -1
  277. package/dist/mcp/services/mcp-executor.service.d.ts +0 -15
  278. package/dist/mcp/services/mcp-executor.service.d.ts.map +0 -1
  279. package/dist/mcp/services/mcp-executor.service.js +0 -47
  280. package/dist/mcp/services/mcp-executor.service.js.map +0 -1
  281. package/dist/mcp/services/mcp-registry-discovery.service.d.ts +0 -63
  282. package/dist/mcp/services/mcp-registry-discovery.service.d.ts.map +0 -1
  283. package/dist/mcp/services/mcp-registry-discovery.service.js +0 -397
  284. package/dist/mcp/services/mcp-registry-discovery.service.js.map +0 -1
  285. package/dist/mcp/services/mcp-sse.service.d.ts +0 -20
  286. package/dist/mcp/services/mcp-sse.service.d.ts.map +0 -1
  287. package/dist/mcp/services/mcp-sse.service.js +0 -91
  288. package/dist/mcp/services/mcp-sse.service.js.map +0 -1
  289. package/dist/mcp/services/mcp-streamable-http.service.d.ts +0 -32
  290. package/dist/mcp/services/mcp-streamable-http.service.d.ts.map +0 -1
  291. package/dist/mcp/services/mcp-streamable-http.service.js +0 -327
  292. package/dist/mcp/services/mcp-streamable-http.service.js.map +0 -1
  293. package/dist/mcp/services/sse-ping.service.d.ts +0 -23
  294. package/dist/mcp/services/sse-ping.service.d.ts.map +0 -1
  295. package/dist/mcp/services/sse-ping.service.js +0 -99
  296. package/dist/mcp/services/sse-ping.service.js.map +0 -1
  297. package/dist/mcp/transport/sse.controller.factory.d.ts +0 -14
  298. package/dist/mcp/transport/sse.controller.factory.d.ts.map +0 -1
  299. package/dist/mcp/transport/sse.controller.factory.js +0 -67
  300. package/dist/mcp/transport/sse.controller.factory.js.map +0 -1
  301. package/dist/mcp/transport/stdio.service.d.ts +0 -14
  302. package/dist/mcp/transport/stdio.service.d.ts.map +0 -1
  303. package/dist/mcp/transport/stdio.service.js +0 -66
  304. package/dist/mcp/transport/stdio.service.js.map +0 -1
  305. package/dist/mcp/transport/streamable-http.controller.factory.d.ts +0 -14
  306. package/dist/mcp/transport/streamable-http.controller.factory.d.ts.map +0 -1
  307. package/dist/mcp/transport/streamable-http.controller.factory.js +0 -74
  308. package/dist/mcp/transport/streamable-http.controller.factory.js.map +0 -1
  309. package/dist/mcp/utils/capabilities-builder.d.ts +0 -5
  310. package/dist/mcp/utils/capabilities-builder.d.ts.map +0 -1
  311. package/dist/mcp/utils/capabilities-builder.js +0 -25
  312. package/dist/mcp/utils/capabilities-builder.js.map +0 -1
  313. package/dist/mcp/utils/mcp-server.factory.d.ts +0 -6
  314. package/dist/mcp/utils/mcp-server.factory.d.ts.map +0 -1
  315. package/dist/mcp/utils/mcp-server.factory.js +0 -22
  316. package/dist/mcp/utils/mcp-server.factory.js.map +0 -1
  317. package/src/authz/guards/jwt-auth.guard.ts +0 -127
  318. package/src/authz/index.ts +0 -10
  319. package/src/authz/interfaces/oauth-common.interface.ts +0 -21
  320. package/src/authz/interfaces/request-with-user.ts +0 -16
  321. package/src/authz/mcp-oauth.controller.ts +0 -860
  322. package/src/authz/mcp-oauth.module.ts +0 -384
  323. package/src/authz/providers/azure-ad.provider.ts +0 -40
  324. package/src/authz/providers/github.provider.ts +0 -22
  325. package/src/authz/providers/google.provider.ts +0 -23
  326. package/src/authz/providers/oauth-provider.interface.ts +0 -147
  327. package/src/authz/services/client.service.ts +0 -125
  328. package/src/authz/services/jwt-token.service.spec.ts +0 -67
  329. package/src/authz/services/jwt-token.service.ts +0 -188
  330. package/src/authz/services/oauth-strategy.service.ts +0 -64
  331. package/src/authz/stores/memory-store.service.spec.ts +0 -475
  332. package/src/authz/stores/memory-store.service.ts +0 -141
  333. package/src/authz/stores/oauth-store.interface.ts +0 -131
  334. package/src/authz/stores/typeorm/README.md +0 -140
  335. package/src/authz/stores/typeorm/constants.ts +0 -6
  336. package/src/authz/stores/typeorm/entities/authorization-code.entity.ts +0 -41
  337. package/src/authz/stores/typeorm/entities/index.ts +0 -4
  338. package/src/authz/stores/typeorm/entities/oauth-client.entity.ts +0 -53
  339. package/src/authz/stores/typeorm/entities/oauth-session.entity.ts +0 -38
  340. package/src/authz/stores/typeorm/entities/user-profile.entity.ts +0 -46
  341. package/src/authz/stores/typeorm/typeorm-store.service.spec.ts +0 -494
  342. package/src/authz/stores/typeorm/typeorm-store.service.ts +0 -165
  343. package/src/mcp/constants/feature-registration.constants.ts +0 -24
  344. package/src/mcp/decorators/tool-guards.decorator.ts +0 -82
  345. package/src/mcp/interfaces/mcp-options.interface.ts +0 -95
  346. package/src/mcp/mcp.module.ts +0 -349
  347. package/src/mcp/services/handlers/mcp-handler.base.ts +0 -203
  348. package/src/mcp/services/handlers/mcp-prompts.handler.ts +0 -143
  349. package/src/mcp/services/handlers/mcp-resources.handler.ts +0 -183
  350. package/src/mcp/services/handlers/mcp-tools.handler.spec.ts +0 -41
  351. package/src/mcp/services/handlers/mcp-tools.handler.ts +0 -436
  352. package/src/mcp/services/mcp-dynamic-registry.service.ts +0 -236
  353. package/src/mcp/services/mcp-executor.service.ts +0 -64
  354. package/src/mcp/services/mcp-registry-discovery.service.spec.ts +0 -306
  355. package/src/mcp/services/mcp-registry-discovery.service.ts +0 -849
  356. package/src/mcp/services/mcp-sse.service.ts +0 -124
  357. package/src/mcp/services/mcp-streamable-http.service.ts +0 -472
  358. package/src/mcp/services/sse-ping.service.ts +0 -144
  359. package/src/mcp/transport/custom-decorator.spec.ts +0 -75
  360. package/src/mcp/transport/sse.controller.factory.ts +0 -84
  361. package/src/mcp/transport/stdio.service.ts +0 -75
  362. package/src/mcp/transport/streamable-http.controller.factory.ts +0 -80
  363. package/src/mcp/utils/capabilities-builder.ts +0 -43
  364. package/src/mcp/utils/mcp-server.factory.ts +0 -33
@@ -1,99 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- var SsePingService_1;
15
- Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.SsePingService = void 0;
17
- const common_1 = require("@nestjs/common");
18
- const mcp_logger_factory_1 = require("../utils/mcp-logger.factory");
19
- let SsePingService = SsePingService_1 = class SsePingService {
20
- constructor(options) {
21
- this.pingInterval = null;
22
- this.activeConnections = new Map();
23
- this.pingIntervalMs = 30000;
24
- this.logger = (0, mcp_logger_factory_1.createMcpLogger)(SsePingService_1.name, options);
25
- }
26
- onModuleInit() {
27
- this.logger.log('Initializing SSE ping service');
28
- }
29
- onModuleDestroy() {
30
- this.stopPingInterval();
31
- this.logger.log('SSE ping service stopped');
32
- }
33
- configure(options) {
34
- if (options.pingIntervalMs !== undefined) {
35
- this.pingIntervalMs = options.pingIntervalMs;
36
- }
37
- if (options.pingEnabled !== false) {
38
- this.startPingInterval();
39
- }
40
- else {
41
- this.stopPingInterval();
42
- }
43
- }
44
- registerConnection(sessionId, transport, res) {
45
- this.activeConnections.set(sessionId, { transport, res });
46
- this.logger.debug(`SSE connection registered: ${sessionId}`);
47
- }
48
- removeConnection(sessionId) {
49
- this.activeConnections.delete(sessionId);
50
- this.logger.debug(`SSE connection removed: ${sessionId}`);
51
- }
52
- startPingInterval() {
53
- if (this.pingInterval) {
54
- this.stopPingInterval();
55
- }
56
- this.logger.log(`Starting SSE ping service (interval: ${this.pingIntervalMs}ms)`);
57
- this.pingInterval = setInterval(() => {
58
- this.sendPingToAllConnections();
59
- }, this.pingIntervalMs);
60
- }
61
- stopPingInterval() {
62
- if (this.pingInterval) {
63
- clearInterval(this.pingInterval);
64
- this.pingInterval = null;
65
- this.logger.log('SSE ping interval stopped');
66
- }
67
- }
68
- sendPingToAllConnections() {
69
- const timestamp = Date.now();
70
- const connectionCount = this.activeConnections.size;
71
- if (connectionCount === 0) {
72
- return;
73
- }
74
- this.logger.debug(`Sending SSE ping to ${connectionCount} connections`);
75
- for (const [sessionId, { res }] of this.activeConnections.entries()) {
76
- try {
77
- if (!res.closed && res.writable) {
78
- res.write(`: ping - ${new Date(timestamp).toISOString()}\n\n`);
79
- }
80
- else {
81
- this.logger.debug(`Connection ${sessionId} is no longer writable, removing`);
82
- this.removeConnection(sessionId);
83
- }
84
- }
85
- catch (error) {
86
- this.logger.error(`Error sending ping to connection ${sessionId}`, error);
87
- this.removeConnection(sessionId);
88
- }
89
- }
90
- }
91
- };
92
- exports.SsePingService = SsePingService;
93
- exports.SsePingService = SsePingService = SsePingService_1 = __decorate([
94
- (0, common_1.Injectable)(),
95
- __param(0, (0, common_1.Optional)()),
96
- __param(0, (0, common_1.Inject)('MCP_OPTIONS')),
97
- __metadata("design:paramtypes", [Object])
98
- ], SsePingService);
99
- //# sourceMappingURL=sse-ping.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sse-ping.service.js","sourceRoot":"","sources":["../../../src/mcp/services/sse-ping.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAOwB;AAIxB,oEAA8D;AAOvD,IAAM,cAAc,sBAApB,MAAM,cAAc;IAczB,YAA+C,OAAoB;QAb3D,iBAAY,GAA0B,IAAI,CAAC;QAElC,sBAAiB,GAAG,IAAI,GAAG,EAMzC,CAAC;QAGI,mBAAc,GAAG,KAAK,CAAC;QAG7B,IAAI,CAAC,MAAM,GAAG,IAAA,oCAAe,EAAC,gBAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,YAAY;QACV,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,eAAe;QACb,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAKD,SAAS,CAAC,OAA2D;QACnE,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACzC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC/C,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YAClC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAKD,kBAAkB,CAChB,SAAiB,EACjB,SAA6B,EAC7B,GAAiB;QAEjB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,SAAS,EAAE,CAAC,CAAC;IAC/D,CAAC;IAKD,gBAAgB,CAAC,SAAiB;QAChC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;IAC5D,CAAC;IAKO,iBAAiB;QACvB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,wCAAwC,IAAI,CAAC,cAAc,KAAK,CACjE,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;YACnC,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAClC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAC1B,CAAC;IAKO,gBAAgB;QACtB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAKO,wBAAwB;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAEpD,IAAI,eAAe,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,eAAe,cAAc,CAAC,CAAC;QAExE,KAAK,MAAM,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC;YACpE,IAAI,CAAC;gBAGH,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;oBAChC,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;gBACjE,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,cAAc,SAAS,kCAAkC,CAC1D,CAAC;oBAGF,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,oCAAoC,SAAS,EAAE,EAC/C,KAAK,CACN,CAAC;gBACF,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAA;AA7HY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAeE,WAAA,IAAA,iBAAQ,GAAE,CAAA;IAAE,WAAA,IAAA,eAAM,EAAC,aAAa,CAAC,CAAA;;GAdnC,cAAc,CA6H1B","sourcesContent":["import {\n Injectable,\n OnModuleInit,\n OnModuleDestroy,\n Logger,\n Inject,\n Optional,\n} from '@nestjs/common';\nimport { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';\nimport { HttpResponse } from '../interfaces/http-adapter.interface';\nimport type { McpOptions } from '../interfaces';\nimport { createMcpLogger } from '../utils/mcp-logger.factory';\n\n/**\n * Service that implements automatic ping for SSE connections\n * This prevents browser/client timeouts for long-lived connections\n */\n@Injectable()\nexport class SsePingService implements OnModuleInit, OnModuleDestroy {\n private pingInterval: NodeJS.Timeout | null = null;\n private readonly logger: Logger;\n private readonly activeConnections = new Map<\n string,\n {\n transport: SSEServerTransport;\n res: HttpResponse;\n }\n >();\n\n // Default to 30 seconds - this is a reasonable interval for most clients\n private pingIntervalMs = 30000;\n\n constructor(@Optional() @Inject('MCP_OPTIONS') options?: McpOptions) {\n this.logger = createMcpLogger(SsePingService.name, options);\n }\n\n onModuleInit() {\n this.logger.log('Initializing SSE ping service');\n }\n\n onModuleDestroy() {\n this.stopPingInterval();\n this.logger.log('SSE ping service stopped');\n }\n\n /**\n * Configure the ping service\n */\n configure(options: { pingEnabled?: boolean; pingIntervalMs?: number }) {\n if (options.pingIntervalMs !== undefined) {\n this.pingIntervalMs = options.pingIntervalMs;\n }\n\n if (options.pingEnabled !== false) {\n this.startPingInterval();\n } else {\n this.stopPingInterval();\n }\n }\n\n /**\n * Register a new SSE connection to receive pings\n */\n registerConnection(\n sessionId: string,\n transport: SSEServerTransport,\n res: HttpResponse,\n ) {\n this.activeConnections.set(sessionId, { transport, res });\n this.logger.debug(`SSE connection registered: ${sessionId}`);\n }\n\n /**\n * Remove an SSE connection\n */\n removeConnection(sessionId: string) {\n this.activeConnections.delete(sessionId);\n this.logger.debug(`SSE connection removed: ${sessionId}`);\n }\n\n /**\n * Start the ping interval timer\n */\n private startPingInterval() {\n if (this.pingInterval) {\n this.stopPingInterval();\n }\n\n this.logger.log(\n `Starting SSE ping service (interval: ${this.pingIntervalMs}ms)`,\n );\n this.pingInterval = setInterval(() => {\n this.sendPingToAllConnections();\n }, this.pingIntervalMs);\n }\n\n /**\n * Stop the ping interval timer\n */\n private stopPingInterval() {\n if (this.pingInterval) {\n clearInterval(this.pingInterval);\n this.pingInterval = null;\n this.logger.log('SSE ping interval stopped');\n }\n }\n\n /**\n * Send a ping to all active connections\n */\n private sendPingToAllConnections() {\n const timestamp = Date.now();\n const connectionCount = this.activeConnections.size;\n\n if (connectionCount === 0) {\n return;\n }\n\n this.logger.debug(`Sending SSE ping to ${connectionCount} connections`);\n\n for (const [sessionId, { res }] of this.activeConnections.entries()) {\n try {\n // Send a comment-type SSE message (line starting with ':')\n // This keeps the connection alive without triggering an event in the client\n if (!res.closed && res.writable) {\n res.write(`: ping - ${new Date(timestamp).toISOString()}\\n\\n`);\n } else {\n this.logger.debug(\n `Connection ${sessionId} is no longer writable, removing`,\n );\n // TODO: After non writable connections are discovered it'd be useful to cleanup transports/mcp servers\n // for that connection in sse.controller.factory.ts\n this.removeConnection(sessionId);\n }\n } catch (error) {\n this.logger.error(\n `Error sending ping to connection ${sessionId}`,\n error,\n );\n this.removeConnection(sessionId);\n }\n }\n }\n}\n"]}
@@ -1,14 +0,0 @@
1
- import { CanActivate, Logger, Type } from '@nestjs/common';
2
- import type { McpOptions } from '../interfaces';
3
- import { McpSseService } from '../services/mcp-sse.service';
4
- export declare function createSseController(sseEndpoint: string, messagesEndpoint: string, apiPrefix: string, guards?: Type<CanActivate>[], decorators?: ClassDecorator[], options?: McpOptions): {
5
- new (mcpOptions: McpOptions, mcpSseService: McpSseService): {
6
- readonly logger: Logger;
7
- readonly mcpOptions: McpOptions;
8
- readonly mcpSseService: McpSseService;
9
- onModuleInit(): void;
10
- sse(rawReq: any, rawRes: any): Promise<void>;
11
- messages(rawReq: any, rawRes: any, body: unknown): Promise<void>;
12
- };
13
- };
14
- //# sourceMappingURL=sse.controller.factory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sse.controller.factory.d.ts","sourceRoot":"","sources":["../../../src/mcp/transport/sse.controller.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EAIX,MAAM,EAKN,IAAI,EAIL,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAO5D,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,IAAI,CAAC,WAAW,CAAC,EAAO,EAChC,UAAU,GAAE,cAAc,EAAO,EACjC,OAAO,CAAC,EAAE,UAAU;qBAUmC,UAAU,iBAC9B,aAAa;yBAJ7B,MAAM;6BAG8B,UAAU;gCAC9B,aAAa;;oBAiBrB,GAAG,UAAiB,GAAG;yBAe/B,GAAG,UACH,GAAG,QACJ,OAAO,GACpB,OAAO,CAAC,IAAI,CAAC;;EAMnB"}
@@ -1,67 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.createSseController = createSseController;
16
- const common_1 = require("@nestjs/common");
17
- const mcp_sse_service_1 = require("../services/mcp-sse.service");
18
- const normalize_endpoint_1 = require("../utils/normalize-endpoint");
19
- const mcp_logger_factory_1 = require("../utils/mcp-logger.factory");
20
- function createSseController(sseEndpoint, messagesEndpoint, apiPrefix, guards = [], decorators = [], options) {
21
- var SseController_1;
22
- let SseController = SseController_1 = class SseController {
23
- constructor(mcpOptions, mcpSseService) {
24
- this.mcpOptions = mcpOptions;
25
- this.mcpSseService = mcpSseService;
26
- this.logger = (0, mcp_logger_factory_1.createMcpLogger)(SseController_1.name, options || mcpOptions);
27
- }
28
- onModuleInit() {
29
- this.mcpSseService.initialize();
30
- }
31
- async sse(rawReq, rawRes) {
32
- return this.mcpSseService.createSseConnection(rawReq, rawRes, messagesEndpoint, apiPrefix);
33
- }
34
- async messages(rawReq, rawRes, body) {
35
- await this.mcpSseService.handleMessage(rawReq, rawRes, body);
36
- }
37
- };
38
- __decorate([
39
- (0, common_1.Get)((0, normalize_endpoint_1.normalizeEndpoint)(`${apiPrefix}/${sseEndpoint}`)),
40
- (0, common_1.UseGuards)(...guards),
41
- __param(0, (0, common_1.Req)()),
42
- __param(1, (0, common_1.Res)()),
43
- __metadata("design:type", Function),
44
- __metadata("design:paramtypes", [Object, Object]),
45
- __metadata("design:returntype", Promise)
46
- ], SseController.prototype, "sse", null);
47
- __decorate([
48
- (0, common_1.Post)((0, normalize_endpoint_1.normalizeEndpoint)(`${apiPrefix}/${messagesEndpoint}`)),
49
- (0, common_1.UseGuards)(...guards),
50
- __param(0, (0, common_1.Req)()),
51
- __param(1, (0, common_1.Res)()),
52
- __param(2, (0, common_1.Body)()),
53
- __metadata("design:type", Function),
54
- __metadata("design:paramtypes", [Object, Object, Object]),
55
- __metadata("design:returntype", Promise)
56
- ], SseController.prototype, "messages", null);
57
- SseController = SseController_1 = __decorate([
58
- (0, common_1.Controller)({
59
- version: common_1.VERSION_NEUTRAL,
60
- }),
61
- (0, common_1.applyDecorators)(...decorators),
62
- __param(0, (0, common_1.Inject)('MCP_OPTIONS')),
63
- __metadata("design:paramtypes", [Object, mcp_sse_service_1.McpSseService])
64
- ], SseController);
65
- return SseController;
66
- }
67
- //# sourceMappingURL=sse.controller.factory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sse.controller.factory.js","sourceRoot":"","sources":["../../../src/mcp/transport/sse.controller.factory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAyBA,kDA0DC;AAnFD,2CAewB;AAGxB,iEAA4D;AAC5D,oEAAgE;AAChE,oEAA8D;AAK9D,SAAgB,mBAAmB,CACjC,WAAmB,EACnB,gBAAwB,EACxB,SAAiB,EACjB,SAA8B,EAAE,EAChC,aAA+B,EAAE,EACjC,OAAoB;;IAEpB,IAIM,aAAa,qBAJnB,MAIM,aAAa;QAGjB,YACyC,UAAsB,EAC7C,aAA4B;YADL,eAAU,GAAV,UAAU,CAAY;YAC7C,kBAAa,GAAb,aAAa,CAAe;YAE5C,IAAI,CAAC,MAAM,GAAG,IAAA,oCAAe,EAAC,eAAa,CAAC,IAAI,EAAE,OAAO,IAAI,UAAU,CAAC,CAAC;QAC3E,CAAC;QAKD,YAAY;YACV,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;QAClC,CAAC;QAOK,AAAN,KAAK,CAAC,GAAG,CAAQ,MAAW,EAAS,MAAW;YAC9C,OAAO,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAC3C,MAAM,EACN,MAAM,EACN,gBAAgB,EAChB,SAAS,CACV,CAAC;QACJ,CAAC;QAOK,AAAN,KAAK,CAAC,QAAQ,CACL,MAAW,EACX,MAAW,EACV,IAAa;YAErB,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/D,CAAC;KACF,CAAA;IArBO;QAFL,IAAA,YAAG,EAAC,IAAA,sCAAiB,EAAC,GAAG,SAAS,IAAI,WAAW,EAAE,CAAC,CAAC;QACrD,IAAA,kBAAS,EAAC,GAAG,MAAM,CAAC;QACV,WAAA,IAAA,YAAG,GAAE,CAAA;QAAe,WAAA,IAAA,YAAG,GAAE,CAAA;;;;4CAOnC;IAOK;QAFL,IAAA,aAAI,EAAC,IAAA,sCAAiB,EAAC,GAAG,SAAS,IAAI,gBAAgB,EAAE,CAAC,CAAC;QAC3D,IAAA,kBAAS,EAAC,GAAG,MAAM,CAAC;QAElB,WAAA,IAAA,YAAG,GAAE,CAAA;QACL,WAAA,IAAA,YAAG,GAAE,CAAA;QACL,WAAA,IAAA,aAAI,GAAE,CAAA;;;;iDAGR;IA1CG,aAAa;QAJlB,IAAA,mBAAU,EAAC;YACV,OAAO,EAAE,wBAAe;SACzB,CAAC;QACD,IAAA,wBAAe,EAAC,GAAG,UAAU,CAAC;QAK1B,WAAA,IAAA,eAAM,EAAC,aAAa,CAAC,CAAA;iDACS,+BAAa;OAL1C,aAAa,CA2ClB;IAED,OAAO,aAAa,CAAC;AACvB,CAAC","sourcesContent":["import {\n Body,\n CanActivate,\n Controller,\n Get,\n Inject,\n Logger,\n OnModuleInit,\n Post,\n Req,\n Res,\n Type,\n UseGuards,\n VERSION_NEUTRAL,\n applyDecorators,\n} from '@nestjs/common';\n\nimport type { McpOptions } from '../interfaces';\nimport { McpSseService } from '../services/mcp-sse.service';\nimport { normalizeEndpoint } from '../utils/normalize-endpoint';\nimport { createMcpLogger } from '../utils/mcp-logger.factory';\n\n/**\n * Creates a controller for handling SSE connections and tool executions\n */\nexport function createSseController(\n sseEndpoint: string,\n messagesEndpoint: string,\n apiPrefix: string,\n guards: Type<CanActivate>[] = [],\n decorators: ClassDecorator[] = [],\n options?: McpOptions,\n) {\n @Controller({\n version: VERSION_NEUTRAL,\n })\n @applyDecorators(...decorators)\n class SseController implements OnModuleInit {\n readonly logger: Logger;\n\n constructor(\n @Inject('MCP_OPTIONS') public readonly mcpOptions: McpOptions,\n public readonly mcpSseService: McpSseService,\n ) {\n this.logger = createMcpLogger(SseController.name, options || mcpOptions);\n }\n\n /**\n * Initialize the controller and configure SSE service\n */\n onModuleInit() {\n this.mcpSseService.initialize();\n }\n\n /**\n * SSE connection endpoint\n */\n @Get(normalizeEndpoint(`${apiPrefix}/${sseEndpoint}`))\n @UseGuards(...guards)\n async sse(@Req() rawReq: any, @Res() rawRes: any) {\n return this.mcpSseService.createSseConnection(\n rawReq,\n rawRes,\n messagesEndpoint,\n apiPrefix,\n );\n }\n\n /**\n * Tool execution endpoint - protected by the provided guards\n */\n @Post(normalizeEndpoint(`${apiPrefix}/${messagesEndpoint}`))\n @UseGuards(...guards)\n async messages(\n @Req() rawReq: any,\n @Res() rawRes: any,\n @Body() body: unknown,\n ): Promise<void> {\n await this.mcpSseService.handleMessage(rawReq, rawRes, body);\n }\n }\n\n return SseController;\n}\n"]}
@@ -1,14 +0,0 @@
1
- import { OnApplicationBootstrap } from '@nestjs/common';
2
- import { ModuleRef } from '@nestjs/core';
3
- import type { McpOptions } from '../interfaces';
4
- import { McpRegistryDiscoveryService } from '../services/mcp-registry-discovery.service';
5
- export declare class StdioService implements OnApplicationBootstrap {
6
- private readonly options;
7
- private readonly mcpModuleId;
8
- private readonly moduleRef;
9
- private readonly toolRegistry;
10
- private readonly logger;
11
- constructor(options: McpOptions, mcpModuleId: string, moduleRef: ModuleRef, toolRegistry: McpRegistryDiscoveryService);
12
- onApplicationBootstrap(): Promise<void>;
13
- }
14
- //# sourceMappingURL=stdio.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stdio.service.d.ts","sourceRoot":"","sources":["../../../src/mcp/transport/stdio.service.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,sBAAsB,EACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AAIzF,qBACa,YAAa,YAAW,sBAAsB;IAIhC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW;IACrD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAN/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAGU,OAAO,EAAE,UAAU,EACjB,WAAW,EAAE,MAAM,EAC5C,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,2BAA2B;IAKtD,sBAAsB;CA8C7B"}
@@ -1,66 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- var StdioService_1;
15
- Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.StdioService = void 0;
17
- const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
18
- const common_1 = require("@nestjs/common");
19
- const core_1 = require("@nestjs/core");
20
- const interfaces_1 = require("../interfaces");
21
- const mcp_executor_service_1 = require("../services/mcp-executor.service");
22
- const mcp_registry_discovery_service_1 = require("../services/mcp-registry-discovery.service");
23
- const mcp_logger_factory_1 = require("../utils/mcp-logger.factory");
24
- const mcp_server_factory_1 = require("../utils/mcp-server.factory");
25
- let StdioService = StdioService_1 = class StdioService {
26
- constructor(options, mcpModuleId, moduleRef, toolRegistry) {
27
- this.options = options;
28
- this.mcpModuleId = mcpModuleId;
29
- this.moduleRef = moduleRef;
30
- this.toolRegistry = toolRegistry;
31
- this.logger = (0, mcp_logger_factory_1.createMcpLogger)(StdioService_1.name, this.options);
32
- }
33
- async onApplicationBootstrap() {
34
- const transports = Array.isArray(this.options.transport)
35
- ? this.options.transport
36
- : [this.options.transport];
37
- if (!transports.includes(interfaces_1.McpTransportType.STDIO))
38
- return;
39
- this.logger.log('Bootstrapping MCP STDIO...');
40
- const toolsWithGuards = this.toolRegistry
41
- .getTools(this.mcpModuleId)
42
- .filter((tool) => tool.metadata.guards && tool.metadata.guards.length > 0);
43
- if (toolsWithGuards.length > 0) {
44
- const toolNames = toolsWithGuards.map((t) => t.metadata.name).join(', ');
45
- this.logger.warn(`@ToolGuards() are not supported with STDIO transport. ` +
46
- `The following tools have guards configured and will be hidden: ${toolNames}. ` +
47
- `Consider using HTTP transport.`);
48
- }
49
- const mcpServer = (0, mcp_server_factory_1.createMcpServer)(this.mcpModuleId, this.toolRegistry, this.options, this.logger);
50
- const contextId = core_1.ContextIdFactory.create();
51
- const executor = await this.moduleRef.resolve(mcp_executor_service_1.McpExecutorService, contextId, { strict: false });
52
- executor.registerRequestHandlers(mcpServer, {});
53
- const transport = new stdio_js_1.StdioServerTransport();
54
- await mcpServer.connect(transport);
55
- this.logger.log('MCP STDIO ready');
56
- }
57
- };
58
- exports.StdioService = StdioService;
59
- exports.StdioService = StdioService = StdioService_1 = __decorate([
60
- (0, common_1.Injectable)(),
61
- __param(0, (0, common_1.Inject)('MCP_OPTIONS')),
62
- __param(1, (0, common_1.Inject)('MCP_MODULE_ID')),
63
- __metadata("design:paramtypes", [Object, String, core_1.ModuleRef,
64
- mcp_registry_discovery_service_1.McpRegistryDiscoveryService])
65
- ], StdioService);
66
- //# sourceMappingURL=stdio.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stdio.service.js","sourceRoot":"","sources":["../../../src/mcp/transport/stdio.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wEAAiF;AACjF,2CAKwB;AACxB,uCAA2D;AAC3D,8CAAiD;AAEjD,2EAAsE;AACtE,+FAAyF;AACzF,oEAA8D;AAC9D,oEAA8D;AAGvD,IAAM,YAAY,oBAAlB,MAAM,YAAY;IAGvB,YAC0C,OAAmB,EACjB,WAAmB,EAC5C,SAAoB,EACpB,YAAyC;QAHlB,YAAO,GAAP,OAAO,CAAY;QACjB,gBAAW,GAAX,WAAW,CAAQ;QAC5C,cAAS,GAAT,SAAS,CAAW;QACpB,iBAAY,GAAZ,YAAY,CAA6B;QAE1D,IAAI,CAAC,MAAM,GAAG,IAAA,oCAAe,EAAC,cAAY,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC1B,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YACtD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS;YACxB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,6BAAgB,CAAC,KAAK,CAAC;YAAE,OAAO;QAEzD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAG9C,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY;aACtC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;aAC1B,MAAM,CACL,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAClE,CAAC;QAEJ,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzE,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,wDAAwD;gBACtD,kEAAkE,SAAS,IAAI;gBAC/E,gCAAgC,CACnC,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,IAAA,oCAAe,EAC/B,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,MAAM,CACZ,CAAC;QAEF,MAAM,SAAS,GAAG,uBAAgB,CAAC,MAAM,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAC3C,yCAAkB,EAClB,SAAS,EACT,EAAE,MAAM,EAAE,KAAK,EAAE,CAClB,CAAC;QAGF,QAAQ,CAAC,uBAAuB,CAAC,SAAS,EAAE,EAAS,CAAC,CAAC;QAEvD,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;QAC7C,MAAM,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;CACF,CAAA;AA1DY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;IAKR,WAAA,IAAA,eAAM,EAAC,aAAa,CAAC,CAAA;IACrB,WAAA,IAAA,eAAM,EAAC,eAAe,CAAC,CAAA;qDACI,gBAAS;QACN,4DAA2B;GAPjD,YAAY,CA0DxB","sourcesContent":["import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n Inject,\n Injectable,\n Logger,\n OnApplicationBootstrap,\n} from '@nestjs/common';\nimport { ContextIdFactory, ModuleRef } from '@nestjs/core';\nimport { McpTransportType } from '../interfaces';\nimport type { McpOptions } from '../interfaces';\nimport { McpExecutorService } from '../services/mcp-executor.service';\nimport { McpRegistryDiscoveryService } from '../services/mcp-registry-discovery.service';\nimport { createMcpLogger } from '../utils/mcp-logger.factory';\nimport { createMcpServer } from '../utils/mcp-server.factory';\n\n@Injectable()\nexport class StdioService implements OnApplicationBootstrap {\n private readonly logger: Logger;\n\n constructor(\n @Inject('MCP_OPTIONS') private readonly options: McpOptions,\n @Inject('MCP_MODULE_ID') private readonly mcpModuleId: string,\n private readonly moduleRef: ModuleRef,\n private readonly toolRegistry: McpRegistryDiscoveryService,\n ) {\n this.logger = createMcpLogger(StdioService.name, this.options);\n }\n\n async onApplicationBootstrap() {\n const transports = Array.isArray(this.options.transport)\n ? this.options.transport\n : [this.options.transport];\n if (!transports.includes(McpTransportType.STDIO)) return;\n\n this.logger.log('Bootstrapping MCP STDIO...');\n\n // Warn about tools with @ToolGuards() - they require HTTP context\n const toolsWithGuards = this.toolRegistry\n .getTools(this.mcpModuleId)\n .filter(\n (tool) => tool.metadata.guards && tool.metadata.guards.length > 0,\n );\n\n if (toolsWithGuards.length > 0) {\n const toolNames = toolsWithGuards.map((t) => t.metadata.name).join(', ');\n this.logger.warn(\n `@ToolGuards() are not supported with STDIO transport. ` +\n `The following tools have guards configured and will be hidden: ${toolNames}. ` +\n `Consider using HTTP transport.`,\n );\n }\n\n const mcpServer = createMcpServer(\n this.mcpModuleId,\n this.toolRegistry,\n this.options,\n this.logger,\n );\n\n const contextId = ContextIdFactory.create();\n const executor = await this.moduleRef.resolve(\n McpExecutorService,\n contextId,\n { strict: false },\n );\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n executor.registerRequestHandlers(mcpServer, {} as any);\n\n const transport = new StdioServerTransport();\n await mcpServer.connect(transport);\n\n this.logger.log('MCP STDIO ready');\n }\n}\n"]}
@@ -1,14 +0,0 @@
1
- import { CanActivate, Logger, Type } from '@nestjs/common';
2
- import type { McpOptions } from '../interfaces';
3
- import { McpStreamableHttpService } from '../services/mcp-streamable-http.service';
4
- export declare function createStreamableHttpController(endpoint: string, apiPrefix: string, guards?: Type<CanActivate>[], decorators?: ClassDecorator[], options?: McpOptions): {
5
- new (mcpOptions: McpOptions, mcpStreamableHttpService: McpStreamableHttpService): {
6
- readonly logger: Logger;
7
- readonly mcpOptions: McpOptions;
8
- readonly mcpStreamableHttpService: McpStreamableHttpService;
9
- handlePostRequest(req: any, res: any, body: unknown): Promise<void>;
10
- handleGetRequest(req: any, res: any): Promise<void>;
11
- handleDeleteRequest(req: any, res: any): Promise<void>;
12
- };
13
- };
14
- //# sourceMappingURL=streamable-http.controller.factory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"streamable-http.controller.factory.d.ts","sourceRoot":"","sources":["../../../src/mcp/transport/streamable-http.controller.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EAKX,MAAM,EAIN,IAAI,EAGL,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AAOnF,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,IAAI,CAAC,WAAW,CAAC,EAAO,EAChC,UAAU,GAAE,cAAc,EAAO,EACjC,OAAO,CAAC,EAAE,UAAU;qBAQmC,UAAU,4BACnB,wBAAwB;yBAJ5C,MAAM;6BAGuB,UAAU;2CACnB,wBAAwB;+BActD,GAAG,OACH,GAAG,QACD,OAAO,GACpB,OAAO,CAAC,IAAI,CAAC;8BASmB,GAAG,OAAc,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;iCASjC,GAAG,OAAc,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;;EAM7E"}
@@ -1,74 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.createStreamableHttpController = createStreamableHttpController;
16
- const common_1 = require("@nestjs/common");
17
- const mcp_streamable_http_service_1 = require("../services/mcp-streamable-http.service");
18
- const normalize_endpoint_1 = require("../utils/normalize-endpoint");
19
- const mcp_logger_factory_1 = require("../utils/mcp-logger.factory");
20
- function createStreamableHttpController(endpoint, apiPrefix, guards = [], decorators = [], options) {
21
- var StreamableHttpController_1;
22
- let StreamableHttpController = StreamableHttpController_1 = class StreamableHttpController {
23
- constructor(mcpOptions, mcpStreamableHttpService) {
24
- this.mcpOptions = mcpOptions;
25
- this.mcpStreamableHttpService = mcpStreamableHttpService;
26
- this.logger = (0, mcp_logger_factory_1.createMcpLogger)(StreamableHttpController_1.name, options || mcpOptions);
27
- }
28
- async handlePostRequest(req, res, body) {
29
- await this.mcpStreamableHttpService.handlePostRequest(req, res, body);
30
- }
31
- async handleGetRequest(req, res) {
32
- await this.mcpStreamableHttpService.handleGetRequest(req, res);
33
- }
34
- async handleDeleteRequest(req, res) {
35
- await this.mcpStreamableHttpService.handleDeleteRequest(req, res);
36
- }
37
- };
38
- __decorate([
39
- (0, common_1.Post)(`${(0, normalize_endpoint_1.normalizeEndpoint)(`${apiPrefix}/${endpoint}`)}`),
40
- (0, common_1.UseGuards)(...guards),
41
- __param(0, (0, common_1.Req)()),
42
- __param(1, (0, common_1.Res)()),
43
- __param(2, (0, common_1.Body)()),
44
- __metadata("design:type", Function),
45
- __metadata("design:paramtypes", [Object, Object, Object]),
46
- __metadata("design:returntype", Promise)
47
- ], StreamableHttpController.prototype, "handlePostRequest", null);
48
- __decorate([
49
- (0, common_1.Get)(`${(0, normalize_endpoint_1.normalizeEndpoint)(`${apiPrefix}/${endpoint}`)}`),
50
- (0, common_1.UseGuards)(...guards),
51
- __param(0, (0, common_1.Req)()),
52
- __param(1, (0, common_1.Res)()),
53
- __metadata("design:type", Function),
54
- __metadata("design:paramtypes", [Object, Object]),
55
- __metadata("design:returntype", Promise)
56
- ], StreamableHttpController.prototype, "handleGetRequest", null);
57
- __decorate([
58
- (0, common_1.Delete)(`${(0, normalize_endpoint_1.normalizeEndpoint)(`${apiPrefix}/${endpoint}`)}`),
59
- (0, common_1.UseGuards)(...guards),
60
- __param(0, (0, common_1.Req)()),
61
- __param(1, (0, common_1.Res)()),
62
- __metadata("design:type", Function),
63
- __metadata("design:paramtypes", [Object, Object]),
64
- __metadata("design:returntype", Promise)
65
- ], StreamableHttpController.prototype, "handleDeleteRequest", null);
66
- StreamableHttpController = StreamableHttpController_1 = __decorate([
67
- (0, common_1.Controller)(),
68
- (0, common_1.applyDecorators)(...decorators),
69
- __param(0, (0, common_1.Inject)('MCP_OPTIONS')),
70
- __metadata("design:paramtypes", [Object, mcp_streamable_http_service_1.McpStreamableHttpService])
71
- ], StreamableHttpController);
72
- return StreamableHttpController;
73
- }
74
- //# sourceMappingURL=streamable-http.controller.factory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"streamable-http.controller.factory.js","sourceRoot":"","sources":["../../../src/mcp/transport/streamable-http.controller.factory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAwBA,wEAuDC;AA/ED,2CAcwB;AAGxB,yFAAmF;AACnF,oEAAgE;AAChE,oEAA8D;AAK9D,SAAgB,8BAA8B,CAC5C,QAAgB,EAChB,SAAiB,EACjB,SAA8B,EAAE,EAChC,aAA+B,EAAE,EACjC,OAAoB;;IAEpB,IAEM,wBAAwB,gCAF9B,MAEM,wBAAwB;QAG5B,YACyC,UAAsB,EAC7C,wBAAkD;YAD3B,eAAU,GAAV,UAAU,CAAY;YAC7C,6BAAwB,GAAxB,wBAAwB,CAA0B;YAElE,IAAI,CAAC,MAAM,GAAG,IAAA,oCAAe,EAC3B,0BAAwB,CAAC,IAAI,EAC7B,OAAO,IAAI,UAAU,CACtB,CAAC;QACJ,CAAC;QAOK,AAAN,KAAK,CAAC,iBAAiB,CACd,GAAQ,EACR,GAAQ,EACP,IAAa;YAErB,MAAM,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACxE,CAAC;QAOK,AAAN,KAAK,CAAC,gBAAgB,CAAQ,GAAQ,EAAS,GAAQ;YACrD,MAAM,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACjE,CAAC;QAOK,AAAN,KAAK,CAAC,mBAAmB,CAAQ,GAAQ,EAAS,GAAQ;YACxD,MAAM,IAAI,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACpE,CAAC;KACF,CAAA;IAzBO;QAFL,IAAA,aAAI,EAAC,GAAG,IAAA,sCAAiB,EAAC,GAAG,SAAS,IAAI,QAAQ,EAAE,CAAC,EAAE,CAAC;QACxD,IAAA,kBAAS,EAAC,GAAG,MAAM,CAAC;QAElB,WAAA,IAAA,YAAG,GAAE,CAAA;QACL,WAAA,IAAA,YAAG,GAAE,CAAA;QACL,WAAA,IAAA,aAAI,GAAE,CAAA;;;;qEAGR;IAOK;QAFL,IAAA,YAAG,EAAC,GAAG,IAAA,sCAAiB,EAAC,GAAG,SAAS,IAAI,QAAQ,EAAE,CAAC,EAAE,CAAC;QACvD,IAAA,kBAAS,EAAC,GAAG,MAAM,CAAC;QACG,WAAA,IAAA,YAAG,GAAE,CAAA;QAAY,WAAA,IAAA,YAAG,GAAE,CAAA;;;;oEAE7C;IAOK;QAFL,IAAA,eAAM,EAAC,GAAG,IAAA,sCAAiB,EAAC,GAAG,SAAS,IAAI,QAAQ,EAAE,CAAC,EAAE,CAAC;QAC1D,IAAA,kBAAS,EAAC,GAAG,MAAM,CAAC;QACM,WAAA,IAAA,YAAG,GAAE,CAAA;QAAY,WAAA,IAAA,YAAG,GAAE,CAAA;;;;uEAEhD;IA1CG,wBAAwB;QAF7B,IAAA,mBAAU,GAAE;QACZ,IAAA,wBAAe,EAAC,GAAG,UAAU,CAAC;QAK1B,WAAA,IAAA,eAAM,EAAC,aAAa,CAAC,CAAA;iDACoB,sDAAwB;OALhE,wBAAwB,CA2C7B;IAED,OAAO,wBAAwB,CAAC;AAClC,CAAC","sourcesContent":["import {\n Body,\n CanActivate,\n Controller,\n Delete,\n Get,\n Inject,\n Logger,\n Post,\n Req,\n Res,\n Type,\n UseGuards,\n applyDecorators,\n} from '@nestjs/common';\n\nimport type { McpOptions } from '../interfaces';\nimport { McpStreamableHttpService } from '../services/mcp-streamable-http.service';\nimport { normalizeEndpoint } from '../utils/normalize-endpoint';\nimport { createMcpLogger } from '../utils/mcp-logger.factory';\n\n/**\n * Creates a controller for handling Streamable HTTP connections and tool executions\n */\nexport function createStreamableHttpController(\n endpoint: string,\n apiPrefix: string,\n guards: Type<CanActivate>[] = [],\n decorators: ClassDecorator[] = [],\n options?: McpOptions,\n) {\n @Controller()\n @applyDecorators(...decorators)\n class StreamableHttpController {\n public readonly logger: Logger;\n\n constructor(\n @Inject('MCP_OPTIONS') public readonly mcpOptions: McpOptions,\n public readonly mcpStreamableHttpService: McpStreamableHttpService,\n ) {\n this.logger = createMcpLogger(\n StreamableHttpController.name,\n options || mcpOptions,\n );\n }\n\n /**\n * Main HTTP endpoint for both initialization and subsequent requests\n */\n @Post(`${normalizeEndpoint(`${apiPrefix}/${endpoint}`)}`)\n @UseGuards(...guards)\n async handlePostRequest(\n @Req() req: any,\n @Res() res: any,\n @Body() body: unknown,\n ): Promise<void> {\n await this.mcpStreamableHttpService.handlePostRequest(req, res, body);\n }\n\n /**\n * GET endpoint for SSE streams - not supported in stateless mode\n */\n @Get(`${normalizeEndpoint(`${apiPrefix}/${endpoint}`)}`)\n @UseGuards(...guards)\n async handleGetRequest(@Req() req: any, @Res() res: any): Promise<void> {\n await this.mcpStreamableHttpService.handleGetRequest(req, res);\n }\n\n /**\n * DELETE endpoint for terminating sessions - not supported in stateless mode\n */\n @Delete(`${normalizeEndpoint(`${apiPrefix}/${endpoint}`)}`)\n @UseGuards(...guards)\n async handleDeleteRequest(@Req() req: any, @Res() res: any): Promise<void> {\n await this.mcpStreamableHttpService.handleDeleteRequest(req, res);\n }\n }\n\n return StreamableHttpController;\n}\n"]}
@@ -1,5 +0,0 @@
1
- import { ServerCapabilities } from '@modelcontextprotocol/sdk/types.js';
2
- import { McpRegistryDiscoveryService } from '../services/mcp-registry-discovery.service';
3
- import type { McpOptions } from '../interfaces';
4
- export declare function buildMcpCapabilities(mcpModuleId: string, registry: McpRegistryDiscoveryService, options: McpOptions): ServerCapabilities;
5
- //# sourceMappingURL=capabilities-builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"capabilities-builder.d.ts","sourceRoot":"","sources":["../../../src/mcp/utils/capabilities-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAMhD,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,2BAA2B,EACrC,OAAO,EAAE,UAAU,GAClB,kBAAkB,CA8BpB"}
@@ -1,25 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildMcpCapabilities = buildMcpCapabilities;
4
- function buildMcpCapabilities(mcpModuleId, registry, options) {
5
- const baseCapabilities = options.capabilities || {};
6
- const capabilities = { ...baseCapabilities };
7
- if (registry.getTools(mcpModuleId).length > 0) {
8
- capabilities.tools = capabilities.tools || {
9
- listChanged: true,
10
- };
11
- }
12
- if (registry.getResources(mcpModuleId).length > 0 ||
13
- registry.getResourceTemplates(mcpModuleId).length > 0) {
14
- capabilities.resources = capabilities.resources || {
15
- listChanged: true,
16
- };
17
- }
18
- if (registry.getPrompts(mcpModuleId).length > 0) {
19
- capabilities.prompts = capabilities.prompts || {
20
- listChanged: true,
21
- };
22
- }
23
- return capabilities;
24
- }
25
- //# sourceMappingURL=capabilities-builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"capabilities-builder.js","sourceRoot":"","sources":["../../../src/mcp/utils/capabilities-builder.ts"],"names":[],"mappings":";;AAQA,oDAkCC;AAlCD,SAAgB,oBAAoB,CAClC,WAAmB,EACnB,QAAqC,EACrC,OAAmB;IAGnB,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;IAEpD,MAAM,YAAY,GAAuB,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAGjE,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,IAAI;YACzC,WAAW,EAAE,IAAI;SAClB,CAAC;IACJ,CAAC;IAED,IACE,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC;QAC7C,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EACrD,CAAC;QACD,YAAY,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,IAAI;YACjD,WAAW,EAAE,IAAI;SAClB,CAAC;IACJ,CAAC;IAGD,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,IAAI;YAC7C,WAAW,EAAE,IAAI;SAClB,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC","sourcesContent":["import { ServerCapabilities } from '@modelcontextprotocol/sdk/types.js';\nimport { McpRegistryDiscoveryService } from '../services/mcp-registry-discovery.service';\nimport type { McpOptions } from '../interfaces';\n\n/**\n * Utility function to build MCP server capabilities dynamically based on\n * discovered tools, resources, and prompts\n */\nexport function buildMcpCapabilities(\n mcpModuleId: string,\n registry: McpRegistryDiscoveryService,\n options: McpOptions,\n): ServerCapabilities {\n // Start with user-provided capabilities or empty object\n const baseCapabilities = options.capabilities || {};\n\n const capabilities: ServerCapabilities = { ...baseCapabilities };\n\n // Add tools capability if tools are discovered\n if (registry.getTools(mcpModuleId).length > 0) {\n capabilities.tools = capabilities.tools || {\n listChanged: true,\n };\n }\n\n if (\n registry.getResources(mcpModuleId).length > 0 ||\n registry.getResourceTemplates(mcpModuleId).length > 0\n ) {\n capabilities.resources = capabilities.resources || {\n listChanged: true,\n };\n }\n\n // Add prompts capability if prompts are discovered\n if (registry.getPrompts(mcpModuleId).length > 0) {\n capabilities.prompts = capabilities.prompts || {\n listChanged: true,\n };\n }\n\n return capabilities;\n}\n"]}
@@ -1,6 +0,0 @@
1
- import { McpOptions } from '../interfaces';
2
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
- import { McpRegistryDiscoveryService } from '../services/mcp-registry-discovery.service';
4
- import { Logger } from '@nestjs/common';
5
- export declare function createMcpServer(mcpModuleId: string, registry: McpRegistryDiscoveryService, options: McpOptions, logger: Logger): McpServer;
6
- //# sourceMappingURL=mcp-server.factory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-server.factory.d.ts","sourceRoot":"","sources":["../../../src/mcp/utils/mcp-server.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,2BAA2B,EACrC,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,MAAM,GACb,SAAS,CAqBX"}
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createMcpServer = createMcpServer;
4
- const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
5
- const capabilities_builder_1 = require("./capabilities-builder");
6
- function createMcpServer(mcpModuleId, registry, options, logger) {
7
- const capabilities = (0, capabilities_builder_1.buildMcpCapabilities)(mcpModuleId, registry, options);
8
- logger.debug(`Built MCP capabilities: ${JSON.stringify(capabilities)}`);
9
- const mcpServer = new mcp_js_1.McpServer({
10
- name: options.name,
11
- version: options.version,
12
- ...(options.title && { title: options.title }),
13
- ...(options.description && { description: options.description }),
14
- ...(options.websiteUrl && { websiteUrl: options.websiteUrl }),
15
- ...(options.icons && { icons: options.icons }),
16
- }, {
17
- capabilities,
18
- instructions: options.instructions || '',
19
- });
20
- return options.serverMutator ? options.serverMutator(mcpServer) : mcpServer;
21
- }
22
- //# sourceMappingURL=mcp-server.factory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-server.factory.js","sourceRoot":"","sources":["../../../src/mcp/utils/mcp-server.factory.ts"],"names":[],"mappings":";;AAMA,0CA0BC;AA/BD,oEAAoE;AACpE,iEAA8D;AAI9D,SAAgB,eAAe,CAC7B,WAAmB,EACnB,QAAqC,EACrC,OAAmB,EACnB,MAAc;IAEd,MAAM,YAAY,GAAG,IAAA,2CAAoB,EAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE1E,MAAM,CAAC,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAExE,MAAM,SAAS,GAAG,IAAI,kBAAS,CAC7B;QACE,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;QAC9C,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;QAChE,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;QAC7D,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;KAC/C,EACD;QACE,YAAY;QACZ,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;KACzC,CACF,CAAC;IAEF,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC","sourcesContent":["import { McpOptions } from '../interfaces';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { buildMcpCapabilities } from './capabilities-builder';\nimport { McpRegistryDiscoveryService } from '../services/mcp-registry-discovery.service';\nimport { Logger } from '@nestjs/common';\n\nexport function createMcpServer(\n mcpModuleId: string,\n registry: McpRegistryDiscoveryService,\n options: McpOptions,\n logger: Logger,\n): McpServer {\n const capabilities = buildMcpCapabilities(mcpModuleId, registry, options);\n\n logger.debug(`Built MCP capabilities: ${JSON.stringify(capabilities)}`);\n\n const mcpServer = new McpServer(\n {\n name: options.name,\n version: options.version,\n ...(options.title && { title: options.title }),\n ...(options.description && { description: options.description }),\n ...(options.websiteUrl && { websiteUrl: options.websiteUrl }),\n ...(options.icons && { icons: options.icons }),\n },\n {\n capabilities,\n instructions: options.instructions || '',\n },\n );\n\n return options.serverMutator ? options.serverMutator(mcpServer) : mcpServer;\n}\n"]}
@@ -1,127 +0,0 @@
1
- import {
2
- Injectable,
3
- CanActivate,
4
- ExecutionContext,
5
- UnauthorizedException,
6
- Inject,
7
- Optional,
8
- } from '@nestjs/common';
9
- import { ModuleRef } from '@nestjs/core';
10
- import { Request } from 'express';
11
- import { JwtPayload, JwtTokenService } from '../services/jwt-token.service';
12
- import type { IOAuthStore } from '../stores/oauth-store.interface';
13
- import type { McpOptions } from '../../mcp';
14
-
15
- export interface AuthenticatedRequest extends Request {
16
- user: JwtPayload;
17
- }
18
-
19
- @Injectable()
20
- export class McpAuthJwtGuard implements CanActivate {
21
- constructor(
22
- @Optional() private readonly jwtTokenService: JwtTokenService | null,
23
- @Optional()
24
- @Inject('IOAuthStore')
25
- private readonly store: IOAuthStore | null,
26
- private readonly moduleRef: ModuleRef,
27
- @Optional()
28
- @Inject('MCP_OPTIONS')
29
- private readonly options?: McpOptions,
30
- ) {}
31
-
32
- async canActivate(context: ExecutionContext): Promise<boolean> {
33
- const request = context.switchToHttp().getRequest<AuthenticatedRequest>();
34
- const token = this.extractTokenFromHeader(request);
35
-
36
- // Check if unauthenticated access is allowed
37
- const allowUnauthenticated =
38
- this.options?.allowUnauthenticatedAccess ?? false;
39
-
40
- if (!token) {
41
- if (allowUnauthenticated) {
42
- // Allow unauthenticated sessions
43
- // Per-tool authorization will decide what's accessible (@PublicTool() tools only)
44
- return true;
45
- } else {
46
- // Standard OAuth flow: Reject and trigger authorization
47
- throw new UnauthorizedException('Access token required');
48
- }
49
- }
50
-
51
- // Resolve services dynamically if not injected directly
52
- const jwtTokenService =
53
- this.jwtTokenService ||
54
- this.moduleRef.get(JwtTokenService, { strict: false });
55
- const store =
56
- this.store ||
57
- this.moduleRef.get<IOAuthStore>('IOAuthStore', { strict: false });
58
-
59
- if (!jwtTokenService || !store) {
60
- throw new UnauthorizedException('Authentication service not available');
61
- }
62
-
63
- // If a token is provided, it must be valid
64
- const payload = jwtTokenService.validateToken(token);
65
-
66
- if (!payload) {
67
- throw new UnauthorizedException('Invalid or expired access token');
68
- }
69
-
70
- // Enrich request.user with friendly fields for tools
71
- const enriched: any = { ...payload };
72
- try {
73
- if (!enriched.user_data && enriched.user_profile_id) {
74
- const profile = await store.getUserProfileById(
75
- enriched.user_profile_id,
76
- );
77
- if (profile) {
78
- enriched.user_data = profile;
79
- }
80
- }
81
- const ud = enriched.user_data || {};
82
- // Provide convenient top-level fields commonly used by tools
83
- enriched.username =
84
- enriched.username || ud.username || ud.id || enriched.sub;
85
- enriched.email = enriched.email || ud.email;
86
- enriched.displayName = enriched.displayName || ud.displayName;
87
- enriched.avatarUrl = enriched.avatarUrl || ud.avatarUrl;
88
- enriched.name =
89
- enriched.name ||
90
- ud.displayName ||
91
- ud.username ||
92
- ud.email ||
93
- enriched.sub;
94
-
95
- // Parse scopes: OAuth 2.0 standard is space-delimited string in 'scope' field
96
- if (enriched.scope && typeof enriched.scope === 'string') {
97
- enriched.scopes = enriched.scope
98
- .split(' ')
99
- .filter((s: string) => s.length > 0);
100
- } else if (!enriched.scopes) {
101
- enriched.scopes = [];
102
- }
103
-
104
- // Extract roles from user_data if present
105
- if (!enriched.roles && ud.roles && Array.isArray(ud.roles)) {
106
- enriched.roles = ud.roles;
107
- } else if (!enriched.roles) {
108
- enriched.roles = [];
109
- }
110
- } catch {
111
- // Non-fatal; proceed with raw payload
112
- }
113
-
114
- request.user = enriched as JwtPayload;
115
- return true;
116
- }
117
-
118
- private extractTokenFromHeader(request: Request): string | undefined {
119
- const authHeader = request.headers.authorization;
120
- if (!authHeader) {
121
- return undefined;
122
- }
123
-
124
- const [type, token] = authHeader.split(' ');
125
- return type === 'Bearer' ? token : undefined;
126
- }
127
- }