@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,125 +0,0 @@
1
- import { BadRequestException, Injectable, Inject } from '@nestjs/common';
2
- import type {
3
- ClientRegistrationDto,
4
- IOAuthStore,
5
- OAuthClient,
6
- } from '../stores/oauth-store.interface';
7
- import { randomBytes } from 'crypto';
8
- import type { OAuthModuleOptions } from '../providers/oauth-provider.interface';
9
-
10
- @Injectable()
11
- export class ClientService {
12
- constructor(
13
- @Inject('IOAuthStore') private readonly store: IOAuthStore,
14
- @Inject('OAUTH_MODULE_OPTIONS')
15
- private readonly options: OAuthModuleOptions,
16
- ) {}
17
-
18
- /**
19
- * Register a client application.
20
- * Always creates a new client record. client_name is not treated as unique.
21
- *
22
- * Note: Left open for future enhancements (e.g., software statements,
23
- * URL-based Client ID Metadata Documents) via preRegistrationChecks().
24
- */
25
- async registerClient(
26
- registrationDto: ClientRegistrationDto,
27
- ): Promise<OAuthClient> {
28
- // Validate required fields
29
- if (
30
- !registrationDto.redirect_uris ||
31
- !Array.isArray(registrationDto.redirect_uris)
32
- ) {
33
- throw new BadRequestException(
34
- 'redirect_uris is required and must be an array',
35
- );
36
- }
37
-
38
- // Validate token_endpoint_auth_method if provided
39
- const supportedAuthMethods = [
40
- 'client_secret_basic',
41
- 'client_secret_post',
42
- 'none',
43
- ];
44
- if (
45
- registrationDto.token_endpoint_auth_method &&
46
- !supportedAuthMethods.includes(registrationDto.token_endpoint_auth_method)
47
- ) {
48
- throw new BadRequestException(
49
- `Unsupported token_endpoint_auth_method. Supported methods: ${supportedAuthMethods.join(', ')}`,
50
- );
51
- }
52
-
53
- // Default values for new clients
54
- const defaultClientValues = {
55
- grant_types: ['authorization_code', 'refresh_token'],
56
- response_types: ['code'],
57
- token_endpoint_auth_method:
58
- registrationDto.token_endpoint_auth_method || 'none',
59
- };
60
-
61
- // Future-proofing: hook for software statements / metadata URL validations
62
- await this.preRegistrationChecks(registrationDto);
63
-
64
- const now = new Date();
65
-
66
- // Create new client - merge defaults with registration data
67
- const client_id = this.store.generateClientId(
68
- registrationDto as OAuthClient,
69
- );
70
-
71
- // Only generate client_secret for methods that require it
72
- const authMethod = registrationDto.token_endpoint_auth_method || 'none';
73
- const client_secret =
74
- authMethod !== 'none' ? randomBytes(32).toString('hex') : undefined;
75
-
76
- const newClient: OAuthClient = {
77
- ...defaultClientValues,
78
- ...registrationDto,
79
- client_id,
80
- client_secret,
81
- created_at: now,
82
- updated_at: now,
83
- };
84
- const client = await this.store.storeClient(newClient);
85
- const filteredClient = Object.fromEntries(
86
- Object.entries(client).filter(([, value]) => value !== null),
87
- ) as OAuthClient;
88
-
89
- return filteredClient;
90
- }
91
-
92
- /**
93
- * Hook for future registration policies (e.g., software statements per RFC 7591/7592,
94
- * or URL-based Client Registration using Client ID Metadata Documents).
95
- * Currently a no-op to keep behavior: always create a new client.
96
- */
97
-
98
- protected async preRegistrationChecks(
99
- _dto: ClientRegistrationDto,
100
- ): Promise<void> {
101
- // Intentionally left blank. Implement validations/attestations in the future.
102
- }
103
-
104
- async getClient(clientId: string): Promise<OAuthClient | null> {
105
- const client = await this.store.getClient(clientId);
106
- if (!client) {
107
- return null;
108
- }
109
-
110
- // Remove null fields from the client object
111
- const filteredClient = Object.fromEntries(
112
- Object.entries(client).filter(([, value]) => value !== null),
113
- ) as OAuthClient;
114
-
115
- return filteredClient;
116
- }
117
-
118
- async validateRedirectUri(
119
- clientId: string,
120
- redirectUri: string,
121
- ): Promise<boolean> {
122
- const client = await this.getClient(clientId);
123
- return client ? client.redirect_uris.includes(redirectUri) : false;
124
- }
125
- }
@@ -1,67 +0,0 @@
1
- import { Test, TestingModule } from '@nestjs/testing';
2
- import * as jwt from 'jsonwebtoken';
3
- import { JwtTokenService } from './jwt-token.service';
4
-
5
- describe('JwtTokenService', () => {
6
- const baseOptions = {
7
- jwtSecret: 'a'.repeat(32),
8
- jwtIssuer: 'http://localhost',
9
- serverUrl: 'http://localhost',
10
- jwtAccessTokenExpiresIn: '2h',
11
- jwtRefreshTokenExpiresIn: '3d',
12
- enableRefreshTokens: true,
13
- } as any;
14
-
15
- let service: JwtTokenService;
16
-
17
- beforeEach(async () => {
18
- const module: TestingModule = await Test.createTestingModule({
19
- providers: [
20
- JwtTokenService,
21
- {
22
- provide: 'OAUTH_MODULE_OPTIONS',
23
- useValue: baseOptions,
24
- },
25
- ],
26
- }).compile();
27
-
28
- service = module.get(JwtTokenService);
29
- });
30
-
31
- it('generates tokens with configured expirations', () => {
32
- const tokens = service.generateTokenPair(
33
- 'user1',
34
- 'client1',
35
- '',
36
- 'resource1',
37
- );
38
- expect(tokens.refresh_token).toBeDefined();
39
- const decoded = jwt.decode(tokens.access_token) as jwt.JwtPayload;
40
- const decodedRefresh = jwt.decode(tokens.refresh_token!) as jwt.JwtPayload;
41
- expect(decoded.exp! - decoded.iat!).toBe(2 * 60 * 60);
42
- expect(decodedRefresh.exp! - decodedRefresh.iat!).toBe(3 * 24 * 60 * 60);
43
- expect(tokens.expires_in).toBe(2 * 60 * 60);
44
- });
45
-
46
- it('can disable refresh tokens', async () => {
47
- const module: TestingModule = await Test.createTestingModule({
48
- providers: [
49
- JwtTokenService,
50
- {
51
- provide: 'OAUTH_MODULE_OPTIONS',
52
- useValue: { ...baseOptions, enableRefreshTokens: false },
53
- },
54
- ],
55
- }).compile();
56
-
57
- const serviceNoRefresh = module.get(JwtTokenService);
58
- const tokens = serviceNoRefresh.generateTokenPair(
59
- 'user1',
60
- 'client1',
61
- '',
62
- 'resource1',
63
- );
64
- expect(tokens.refresh_token).toBeUndefined();
65
- expect(tokens.expires_in).toBe(2 * 60 * 60);
66
- });
67
- });
@@ -1,188 +0,0 @@
1
- import { Inject, Injectable } from '@nestjs/common';
2
- import { randomBytes } from 'crypto';
3
- import * as jwt from 'jsonwebtoken';
4
- import type { OAuthModuleOptions } from '../providers/oauth-provider.interface';
5
-
6
- export interface JwtPayload {
7
- sub: string; // user_id
8
- azp?: string; // authorized party (client_id for access tokens)
9
- client_id?: string; // only for refresh tokens
10
- scope?: string;
11
- resource?: string; // MCP server resource identifier
12
- type: 'access' | 'refresh' | 'user';
13
- user_data?: any;
14
- user_profile_id?: string;
15
- iat?: number;
16
- exp?: number;
17
- }
18
-
19
- export interface TokenPair {
20
- access_token: string;
21
- token_type: string;
22
- expires_in: number;
23
- refresh_token?: string;
24
- scope?: string;
25
- }
26
-
27
- @Injectable()
28
- export class JwtTokenService {
29
- private jwtSecret: string;
30
- private issuer: string;
31
- private accessTokenExpiresIn: string;
32
- private refreshTokenExpiresIn: string;
33
- private enableRefreshTokens: boolean;
34
-
35
- constructor(@Inject('OAUTH_MODULE_OPTIONS') options: OAuthModuleOptions) {
36
- // Use JWT secret from environment variable
37
- const jwtSecret = options.jwtSecret;
38
-
39
- if (!jwtSecret) {
40
- throw new Error('JWT_SECRET must be set in environment variables.');
41
- }
42
-
43
- this.jwtSecret = jwtSecret;
44
- this.issuer =
45
- options.jwtIssuer || options.serverUrl || 'https://localhost:3000';
46
- this.accessTokenExpiresIn = options.jwtAccessTokenExpiresIn;
47
- this.refreshTokenExpiresIn = options.jwtRefreshTokenExpiresIn;
48
- this.enableRefreshTokens = options.enableRefreshTokens;
49
- }
50
-
51
- generateTokenPair(
52
- userId: string,
53
- clientId: string,
54
- scope = '',
55
- resource?: string,
56
- extras?: { user_profile_id?: string; user_data?: any },
57
- ): TokenPair {
58
- if (!resource) {
59
- throw new Error('Resource is required for token generation');
60
- }
61
-
62
- const jti = randomBytes(16).toString('hex'); // JWT ID for tracking
63
-
64
- const accessTokenPayload: any = {
65
- sub: userId,
66
- azp: clientId, // Use azp instead of client_id
67
- iss: this.issuer,
68
- aud: resource,
69
- resource: resource, // Always include resource
70
- type: 'access' as const,
71
- };
72
- if (extras?.user_profile_id) {
73
- accessTokenPayload.user_profile_id = extras.user_profile_id;
74
- }
75
- if (extras?.user_data) {
76
- accessTokenPayload.user_data = extras.user_data;
77
- }
78
-
79
- // Always include scope to ensure parity with refresh token claims
80
- accessTokenPayload.scope = scope || '';
81
-
82
- const accessToken = jwt.sign(accessTokenPayload, this.jwtSecret, {
83
- algorithm: 'HS256',
84
- expiresIn: this.accessTokenExpiresIn,
85
- });
86
-
87
- let refreshToken: string | undefined = undefined;
88
- if (this.enableRefreshTokens) {
89
- const refreshTokenPayload: any = {
90
- sub: userId,
91
- client_id: clientId,
92
- scope,
93
- resource,
94
- type: 'refresh' as const,
95
- jti: `refresh_${jti}`,
96
- iss: this.issuer,
97
- aud: resource,
98
- };
99
- if (extras?.user_profile_id) {
100
- refreshTokenPayload.user_profile_id = extras.user_profile_id;
101
- }
102
- refreshToken = jwt.sign(refreshTokenPayload, this.jwtSecret, {
103
- algorithm: 'HS256',
104
- expiresIn: this.refreshTokenExpiresIn,
105
- });
106
- }
107
-
108
- return {
109
- access_token: accessToken,
110
- token_type: 'bearer',
111
- expires_in: this.parseDurationToSeconds(this.accessTokenExpiresIn),
112
- ...(refreshToken ? { refresh_token: refreshToken } : {}),
113
- };
114
- }
115
-
116
- validateToken(token: string): JwtPayload | null {
117
- try {
118
- return jwt.verify(token, this.jwtSecret, {
119
- algorithms: ['HS256'],
120
- }) as JwtPayload;
121
- } catch {
122
- return null;
123
- }
124
- }
125
-
126
- refreshAccessToken(refreshToken: string): TokenPair | null {
127
- if (!this.enableRefreshTokens) {
128
- return null;
129
- }
130
-
131
- const payload = this.validateToken(refreshToken);
132
-
133
- if (!payload || payload.type !== 'refresh') {
134
- return null;
135
- }
136
-
137
- return this.generateTokenPair(
138
- payload.sub,
139
- payload.client_id!,
140
- payload.scope,
141
- payload.resource,
142
- {
143
- user_profile_id: payload.user_profile_id,
144
- user_data: payload.user_data,
145
- },
146
- );
147
- }
148
-
149
- generateUserToken(userId: string, userData: any): string {
150
- const jti = randomBytes(16).toString('hex');
151
- const serverUrl = process.env.SERVER_URL || 'https://localhost:3000';
152
-
153
- const payload = {
154
- sub: userId,
155
- type: 'user',
156
- user_data: userData,
157
- jti: `user_${jti}`,
158
- iss: serverUrl,
159
- aud: 'mcp-client',
160
- };
161
-
162
- return jwt.sign(payload, this.jwtSecret, {
163
- algorithm: 'HS256',
164
- expiresIn: '24h',
165
- });
166
- }
167
-
168
- private parseDurationToSeconds(duration: string): number {
169
- const match = duration.match(/^(\d+)([smhd])$/);
170
- if (!match) {
171
- throw new Error(`Invalid duration format: ${duration}`);
172
- }
173
- const value = parseInt(match[1], 10);
174
- const unit = match[2];
175
- switch (unit) {
176
- case 's':
177
- return value;
178
- case 'm':
179
- return value * 60;
180
- case 'h':
181
- return value * 60 * 60;
182
- case 'd':
183
- return value * 60 * 60 * 24;
184
- default:
185
- throw new Error(`Unsupported duration unit: ${unit}`);
186
- }
187
- }
188
- }
@@ -1,64 +0,0 @@
1
- import { Injectable, OnModuleInit, Inject, Optional } from '@nestjs/common';
2
- import passport from 'passport';
3
- import type { OAuthModuleOptions } from '../providers/oauth-provider.interface';
4
-
5
- export const STRATEGY_NAME = 'oauth-provider';
6
-
7
- @Injectable()
8
- export class OAuthStrategyService implements OnModuleInit {
9
- private strategyName: string;
10
-
11
- constructor(
12
- @Inject('OAUTH_MODULE_OPTIONS') private options: OAuthModuleOptions,
13
- @Optional() @Inject('OAUTH_MODULE_ID') private authModuleId?: string,
14
- ) {
15
- // Use instance-specific strategy name if authModuleId is provided
16
- this.strategyName = authModuleId
17
- ? `${STRATEGY_NAME}-${authModuleId}`
18
- : STRATEGY_NAME;
19
- }
20
-
21
- onModuleInit() {
22
- this.registerStrategy();
23
- }
24
-
25
- private registerStrategy() {
26
- const provider = this.options.provider;
27
-
28
- // Use client credentials from resolved options
29
- const clientId = this.options.clientId;
30
- const clientSecret = this.options.clientSecret;
31
-
32
- // Use resolved serverUrl (no fallbacks needed)
33
- const serverUrl = this.options.serverUrl;
34
-
35
- const strategyOptions = provider.strategyOptions({
36
- serverUrl,
37
- clientId,
38
- clientSecret,
39
- callbackPath: this.options.endpoints.callback,
40
- });
41
-
42
- const strategy = new provider.strategy(
43
- strategyOptions,
44
- (accessToken: string, refreshToken: string, profile: any, done: any) => {
45
- try {
46
- const mappedProfile = provider.profileMapper(profile);
47
- return done(null, {
48
- profile: mappedProfile,
49
- accessToken,
50
- provider: provider.name,
51
- });
52
- } catch (error) {
53
- return done(error, null);
54
- }
55
- },
56
- );
57
-
58
- passport.use(this.strategyName, strategy);
59
- }
60
-
61
- getStrategyName(): string {
62
- return this.strategyName;
63
- }
64
- }