mcp-auth-server 0.0.0-stage → 0.1.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 (476) hide show
  1. package/README.md +207 -2
  2. package/bin/keygen.mjs +26 -0
  3. package/lib/adapters/express/express.middleware.d.ts +4 -0
  4. package/lib/adapters/express/express.middleware.js +23 -0
  5. package/lib/adapters/express/express.middleware.js.map +1 -0
  6. package/lib/adapters/fastify/fastify.plugin.d.ts +4 -0
  7. package/lib/adapters/fastify/fastify.plugin.js +32 -0
  8. package/lib/adapters/fastify/fastify.plugin.js.map +1 -0
  9. package/lib/adapters/fetch/create.fetch.handler.d.ts +3 -0
  10. package/lib/adapters/fetch/create.fetch.handler.js +13 -0
  11. package/lib/adapters/fetch/create.fetch.handler.js.map +1 -0
  12. package/lib/adapters/fetch/to.http.request.d.ts +3 -0
  13. package/lib/adapters/fetch/to.http.request.js +22 -0
  14. package/lib/adapters/fetch/to.http.request.js.map +1 -0
  15. package/lib/adapters/fetch/to.response.d.ts +3 -0
  16. package/lib/adapters/fetch/to.response.js +10 -0
  17. package/lib/adapters/fetch/to.response.js.map +1 -0
  18. package/lib/adapters/koa/koa.middleware.d.ts +4 -0
  19. package/lib/adapters/koa/koa.middleware.js +19 -0
  20. package/lib/adapters/koa/koa.middleware.js.map +1 -0
  21. package/lib/adapters/node/create.node.handler.d.ts +4 -0
  22. package/lib/adapters/node/create.node.handler.js +16 -0
  23. package/lib/adapters/node/create.node.handler.js.map +1 -0
  24. package/lib/adapters/node/node.ssrf.guard.d.ts +2 -0
  25. package/lib/adapters/node/node.ssrf.guard.js +16 -0
  26. package/lib/adapters/node/node.ssrf.guard.js.map +1 -0
  27. package/lib/adapters/node/parse.node.body.d.ts +3 -0
  28. package/lib/adapters/node/parse.node.body.js +16 -0
  29. package/lib/adapters/node/parse.node.body.js.map +1 -0
  30. package/lib/adapters/node/read.node.body.d.ts +3 -0
  31. package/lib/adapters/node/read.node.body.js +10 -0
  32. package/lib/adapters/node/read.node.body.js.map +1 -0
  33. package/lib/adapters/node/to.node.http.request.d.ts +4 -0
  34. package/lib/adapters/node/to.node.http.request.js +20 -0
  35. package/lib/adapters/node/to.node.http.request.js.map +1 -0
  36. package/lib/adapters/node/write.node.response.d.ts +4 -0
  37. package/lib/adapters/node/write.node.response.js +10 -0
  38. package/lib/adapters/node/write.node.response.js.map +1 -0
  39. package/lib/cache/lru.metadata.cache.d.ts +10 -0
  40. package/lib/cache/lru.metadata.cache.js +31 -0
  41. package/lib/cache/lru.metadata.cache.js.map +1 -0
  42. package/lib/functions/body/parse.body.d.ts +2 -0
  43. package/lib/functions/body/parse.body.js +20 -0
  44. package/lib/functions/body/parse.body.js.map +1 -0
  45. package/lib/functions/body/parse.query.d.ts +2 -0
  46. package/lib/functions/body/parse.query.js +16 -0
  47. package/lib/functions/body/parse.query.js.map +1 -0
  48. package/lib/functions/cimd/assert.public.host.d.ts +2 -0
  49. package/lib/functions/cimd/assert.public.host.js +15 -0
  50. package/lib/functions/cimd/assert.public.host.js.map +1 -0
  51. package/lib/functions/cimd/cache.seconds.d.ts +2 -0
  52. package/lib/functions/cimd/cache.seconds.js +16 -0
  53. package/lib/functions/cimd/cache.seconds.js.map +1 -0
  54. package/lib/functions/cimd/create.metadata.resolver.d.ts +5 -0
  55. package/lib/functions/cimd/create.metadata.resolver.js +53 -0
  56. package/lib/functions/cimd/create.metadata.resolver.js.map +1 -0
  57. package/lib/functions/cimd/host.matches.d.ts +2 -0
  58. package/lib/functions/cimd/host.matches.js +5 -0
  59. package/lib/functions/cimd/host.matches.js.map +1 -0
  60. package/lib/functions/cimd/is.metadata.client.id.d.ts +2 -0
  61. package/lib/functions/cimd/is.metadata.client.id.js +14 -0
  62. package/lib/functions/cimd/is.metadata.client.id.js.map +1 -0
  63. package/lib/functions/cimd/is.private.ipv4.d.ts +2 -0
  64. package/lib/functions/cimd/is.private.ipv4.js +18 -0
  65. package/lib/functions/cimd/is.private.ipv4.js.map +1 -0
  66. package/lib/functions/cimd/is.private.ipv6.d.ts +2 -0
  67. package/lib/functions/cimd/is.private.ipv6.js +17 -0
  68. package/lib/functions/cimd/is.private.ipv6.js.map +1 -0
  69. package/lib/functions/cimd/read.limited.d.ts +2 -0
  70. package/lib/functions/cimd/read.limited.js +32 -0
  71. package/lib/functions/cimd/read.limited.js.map +1 -0
  72. package/lib/functions/cimd/validate.metadata.document.d.ts +3 -0
  73. package/lib/functions/cimd/validate.metadata.document.js +25 -0
  74. package/lib/functions/cimd/validate.metadata.document.js.map +1 -0
  75. package/lib/functions/consent/consent.styles.d.ts +2 -0
  76. package/lib/functions/consent/consent.styles.js +20 -0
  77. package/lib/functions/consent/consent.styles.js.map +1 -0
  78. package/lib/functions/consent/escape.html.d.ts +2 -0
  79. package/lib/functions/consent/escape.html.js +5 -0
  80. package/lib/functions/consent/escape.html.js.map +1 -0
  81. package/lib/functions/consent/render.default.consent.d.ts +3 -0
  82. package/lib/functions/consent/render.default.consent.js +50 -0
  83. package/lib/functions/consent/render.default.consent.js.map +1 -0
  84. package/lib/functions/crypto/random.id.d.ts +2 -0
  85. package/lib/functions/crypto/random.id.js +5 -0
  86. package/lib/functions/crypto/random.id.js.map +1 -0
  87. package/lib/functions/crypto/random.token.d.ts +2 -0
  88. package/lib/functions/crypto/random.token.js +9 -0
  89. package/lib/functions/crypto/random.token.js.map +1 -0
  90. package/lib/functions/crypto/sha256.base64.url.d.ts +2 -0
  91. package/lib/functions/crypto/sha256.base64.url.js +10 -0
  92. package/lib/functions/crypto/sha256.base64.url.js.map +1 -0
  93. package/lib/functions/crypto/sha256.digest.d.ts +2 -0
  94. package/lib/functions/crypto/sha256.digest.js +5 -0
  95. package/lib/functions/crypto/sha256.digest.js.map +1 -0
  96. package/lib/functions/crypto/sha256.hex.d.ts +2 -0
  97. package/lib/functions/crypto/sha256.hex.js +9 -0
  98. package/lib/functions/crypto/sha256.hex.js.map +1 -0
  99. package/lib/functions/crypto/to.base64.url.d.ts +2 -0
  100. package/lib/functions/crypto/to.base64.url.js +10 -0
  101. package/lib/functions/crypto/to.base64.url.js.map +1 -0
  102. package/lib/functions/http/form.params.d.ts +2 -0
  103. package/lib/functions/http/form.params.js +5 -0
  104. package/lib/functions/http/form.params.js.map +1 -0
  105. package/lib/functions/http/header.value.d.ts +3 -0
  106. package/lib/functions/http/header.value.js +8 -0
  107. package/lib/functions/http/header.value.js.map +1 -0
  108. package/lib/functions/http/json.response.d.ts +3 -0
  109. package/lib/functions/http/json.response.js +9 -0
  110. package/lib/functions/http/json.response.js.map +1 -0
  111. package/lib/functions/http/oauth.error.response.d.ts +3 -0
  112. package/lib/functions/http/oauth.error.response.js +9 -0
  113. package/lib/functions/http/oauth.error.response.js.map +1 -0
  114. package/lib/functions/http/plain.error.response.d.ts +3 -0
  115. package/lib/functions/http/plain.error.response.js +5 -0
  116. package/lib/functions/http/plain.error.response.js.map +1 -0
  117. package/lib/functions/http/query.param.d.ts +3 -0
  118. package/lib/functions/http/query.param.js +8 -0
  119. package/lib/functions/http/query.param.js.map +1 -0
  120. package/lib/functions/http/redirect.response.d.ts +3 -0
  121. package/lib/functions/http/redirect.response.js +5 -0
  122. package/lib/functions/http/redirect.response.js.map +1 -0
  123. package/lib/functions/http/text.value.d.ts +2 -0
  124. package/lib/functions/http/text.value.js +5 -0
  125. package/lib/functions/http/text.value.js.map +1 -0
  126. package/lib/functions/http/trim.trailing.slashes.d.ts +2 -0
  127. package/lib/functions/http/trim.trailing.slashes.js +10 -0
  128. package/lib/functions/http/trim.trailing.slashes.js.map +1 -0
  129. package/lib/functions/jwt/sign.access.token.d.ts +4 -0
  130. package/lib/functions/jwt/sign.access.token.js +21 -0
  131. package/lib/functions/jwt/sign.access.token.js.map +1 -0
  132. package/lib/functions/jwt/verify.access.token.d.ts +4 -0
  133. package/lib/functions/jwt/verify.access.token.js +16 -0
  134. package/lib/functions/jwt/verify.access.token.js.map +1 -0
  135. package/lib/functions/keys/der.length.d.ts +2 -0
  136. package/lib/functions/keys/der.length.js +12 -0
  137. package/lib/functions/keys/der.length.js.map +1 -0
  138. package/lib/functions/keys/is.rsa.key.d.ts +2 -0
  139. package/lib/functions/keys/is.rsa.key.js +8 -0
  140. package/lib/functions/keys/is.rsa.key.js.map +1 -0
  141. package/lib/functions/keys/normalize.pem.d.ts +2 -0
  142. package/lib/functions/keys/normalize.pem.js +16 -0
  143. package/lib/functions/keys/normalize.pem.js.map +1 -0
  144. package/lib/functions/keys/pkcs1.to.pkcs8.d.ts +2 -0
  145. package/lib/functions/keys/pkcs1.to.pkcs8.js +14 -0
  146. package/lib/functions/keys/pkcs1.to.pkcs8.js.map +1 -0
  147. package/lib/functions/keys/resolve.key.pair.d.ts +3 -0
  148. package/lib/functions/keys/resolve.key.pair.js +27 -0
  149. package/lib/functions/keys/resolve.key.pair.js.map +1 -0
  150. package/lib/functions/keys/signing.key.from.env.d.ts +2 -0
  151. package/lib/functions/keys/signing.key.from.env.js +14 -0
  152. package/lib/functions/keys/signing.key.from.env.js.map +1 -0
  153. package/lib/functions/keys/wrap.pem.d.ts +2 -0
  154. package/lib/functions/keys/wrap.pem.js +11 -0
  155. package/lib/functions/keys/wrap.pem.js.map +1 -0
  156. package/lib/functions/redirect/build.error.redirect.d.ts +2 -0
  157. package/lib/functions/redirect/build.error.redirect.js +9 -0
  158. package/lib/functions/redirect/build.error.redirect.js.map +1 -0
  159. package/lib/functions/redirect/build.redirect.d.ts +2 -0
  160. package/lib/functions/redirect/build.redirect.js +12 -0
  161. package/lib/functions/redirect/build.redirect.js.map +1 -0
  162. package/lib/functions/redirect/describe.redirect.target.d.ts +2 -0
  163. package/lib/functions/redirect/describe.redirect.target.js +8 -0
  164. package/lib/functions/redirect/describe.redirect.target.js.map +1 -0
  165. package/lib/functions/redirect/is.allowed.redirect.uri.d.ts +3 -0
  166. package/lib/functions/redirect/is.allowed.redirect.uri.js +19 -0
  167. package/lib/functions/redirect/is.allowed.redirect.uri.js.map +1 -0
  168. package/lib/functions/redirect/is.loopback.redirect.d.ts +2 -0
  169. package/lib/functions/redirect/is.loopback.redirect.js +13 -0
  170. package/lib/functions/redirect/is.loopback.redirect.js.map +1 -0
  171. package/lib/functions/redirect/is.safe.metadata.redirect.uri.d.ts +2 -0
  172. package/lib/functions/redirect/is.safe.metadata.redirect.uri.js +20 -0
  173. package/lib/functions/redirect/is.safe.metadata.redirect.uri.js.map +1 -0
  174. package/lib/functions/redirect/parse.url.d.ts +2 -0
  175. package/lib/functions/redirect/parse.url.js +14 -0
  176. package/lib/functions/redirect/parse.url.js.map +1 -0
  177. package/lib/functions/server/attach.and.continue.d.ts +6 -0
  178. package/lib/functions/server/attach.and.continue.js +15 -0
  179. package/lib/functions/server/attach.and.continue.js.map +1 -0
  180. package/lib/functions/server/authenticate.request.d.ts +5 -0
  181. package/lib/functions/server/authenticate.request.js +24 -0
  182. package/lib/functions/server/authenticate.request.js.map +1 -0
  183. package/lib/functions/server/awaiting.consent.d.ts +5 -0
  184. package/lib/functions/server/awaiting.consent.js +18 -0
  185. package/lib/functions/server/awaiting.consent.js.map +1 -0
  186. package/lib/functions/server/build.routes.d.ts +4 -0
  187. package/lib/functions/server/build.routes.js +40 -0
  188. package/lib/functions/server/build.routes.js.map +1 -0
  189. package/lib/functions/server/build.upstream.context.d.ts +6 -0
  190. package/lib/functions/server/build.upstream.context.js +11 -0
  191. package/lib/functions/server/build.upstream.context.js.map +1 -0
  192. package/lib/functions/server/challenge.response.d.ts +4 -0
  193. package/lib/functions/server/challenge.response.js +14 -0
  194. package/lib/functions/server/challenge.response.js.map +1 -0
  195. package/lib/functions/server/continue.with.user.d.ts +5 -0
  196. package/lib/functions/server/continue.with.user.js +18 -0
  197. package/lib/functions/server/continue.with.user.js.map +1 -0
  198. package/lib/functions/server/create.client.resolver.d.ts +6 -0
  199. package/lib/functions/server/create.client.resolver.js +26 -0
  200. package/lib/functions/server/create.client.resolver.js.map +1 -0
  201. package/lib/functions/server/create.mcp.auth.context.d.ts +4 -0
  202. package/lib/functions/server/create.mcp.auth.context.js +38 -0
  203. package/lib/functions/server/create.mcp.auth.context.js.map +1 -0
  204. package/lib/functions/server/create.mcp.auth.d.ts +4 -0
  205. package/lib/functions/server/create.mcp.auth.js +25 -0
  206. package/lib/functions/server/create.mcp.auth.js.map +1 -0
  207. package/lib/functions/server/deny.authorization.d.ts +5 -0
  208. package/lib/functions/server/deny.authorization.js +13 -0
  209. package/lib/functions/server/deny.authorization.js.map +1 -0
  210. package/lib/functions/server/exchange.authorization.code.d.ts +4 -0
  211. package/lib/functions/server/exchange.authorization.code.js +32 -0
  212. package/lib/functions/server/exchange.authorization.code.js.map +1 -0
  213. package/lib/functions/server/find.route.d.ts +4 -0
  214. package/lib/functions/server/find.route.js +5 -0
  215. package/lib/functions/server/find.route.js.map +1 -0
  216. package/lib/functions/server/handle.request.d.ts +6 -0
  217. package/lib/functions/server/handle.request.js +21 -0
  218. package/lib/functions/server/handle.request.js.map +1 -0
  219. package/lib/functions/server/has.credentials.d.ts +3 -0
  220. package/lib/functions/server/has.credentials.js +9 -0
  221. package/lib/functions/server/has.credentials.js.map +1 -0
  222. package/lib/functions/server/issue.authorization.code.d.ts +5 -0
  223. package/lib/functions/server/issue.authorization.code.js +24 -0
  224. package/lib/functions/server/issue.authorization.code.js.map +1 -0
  225. package/lib/functions/server/issue.tokens.d.ts +4 -0
  226. package/lib/functions/server/issue.tokens.js +30 -0
  227. package/lib/functions/server/issue.tokens.js.map +1 -0
  228. package/lib/functions/server/load.pending.d.ts +5 -0
  229. package/lib/functions/server/load.pending.js +13 -0
  230. package/lib/functions/server/load.pending.js.map +1 -0
  231. package/lib/functions/server/rotate.refresh.token.d.ts +4 -0
  232. package/lib/functions/server/rotate.refresh.token.js +33 -0
  233. package/lib/functions/server/rotate.refresh.token.js.map +1 -0
  234. package/lib/functions/server/token.failure.d.ts +3 -0
  235. package/lib/functions/server/token.failure.js +9 -0
  236. package/lib/functions/server/token.failure.js.map +1 -0
  237. package/lib/functions/sql/from.better.sqlite3.d.ts +10 -0
  238. package/lib/functions/sql/from.better.sqlite3.js +11 -0
  239. package/lib/functions/sql/from.better.sqlite3.js.map +1 -0
  240. package/lib/functions/sql/from.bun.sqlite.d.ts +7 -0
  241. package/lib/functions/sql/from.bun.sqlite.js +5 -0
  242. package/lib/functions/sql/from.bun.sqlite.js.map +1 -0
  243. package/lib/functions/sql/from.d1.d.ts +11 -0
  244. package/lib/functions/sql/from.d1.js +8 -0
  245. package/lib/functions/sql/from.d1.js.map +1 -0
  246. package/lib/functions/sql/from.node.sqlite.d.ts +7 -0
  247. package/lib/functions/sql/from.node.sqlite.js +5 -0
  248. package/lib/functions/sql/from.node.sqlite.js.map +1 -0
  249. package/lib/functions/sql/from.pg.d.ts +7 -0
  250. package/lib/functions/sql/from.pg.js +5 -0
  251. package/lib/functions/sql/from.pg.js.map +1 -0
  252. package/lib/functions/sql/from.postgres.js.d.ts +5 -0
  253. package/lib/functions/sql/from.postgres.js.js +5 -0
  254. package/lib/functions/sql/from.postgres.js.js.map +1 -0
  255. package/lib/functions/sql/optional.date.d.ts +2 -0
  256. package/lib/functions/sql/optional.date.js +5 -0
  257. package/lib/functions/sql/optional.date.js.map +1 -0
  258. package/lib/functions/sql/optional.number.d.ts +2 -0
  259. package/lib/functions/sql/optional.number.js +5 -0
  260. package/lib/functions/sql/optional.number.js.map +1 -0
  261. package/lib/functions/sql/optional.text.d.ts +2 -0
  262. package/lib/functions/sql/optional.text.js +5 -0
  263. package/lib/functions/sql/optional.text.js.map +1 -0
  264. package/lib/functions/sql/row.to.client.d.ts +4 -0
  265. package/lib/functions/sql/row.to.client.js +18 -0
  266. package/lib/functions/sql/row.to.client.js.map +1 -0
  267. package/lib/functions/sql/row.to.code.d.ts +4 -0
  268. package/lib/functions/sql/row.to.code.js +21 -0
  269. package/lib/functions/sql/row.to.code.js.map +1 -0
  270. package/lib/functions/sql/row.to.pending.d.ts +4 -0
  271. package/lib/functions/sql/row.to.pending.js +21 -0
  272. package/lib/functions/sql/row.to.pending.js.map +1 -0
  273. package/lib/functions/sql/row.to.refresh.token.d.ts +4 -0
  274. package/lib/functions/sql/row.to.refresh.token.js +22 -0
  275. package/lib/functions/sql/row.to.refresh.token.js.map +1 -0
  276. package/lib/functions/sql/sql.schema.d.ts +3 -0
  277. package/lib/functions/sql/sql.schema.js +62 -0
  278. package/lib/functions/sql/sql.schema.js.map +1 -0
  279. package/lib/functions/sql/to.dialect.sql.d.ts +3 -0
  280. package/lib/functions/sql/to.dialect.sql.js +13 -0
  281. package/lib/functions/sql/to.dialect.sql.js.map +1 -0
  282. package/lib/functions/upstream/app.session.upstream.d.ts +4 -0
  283. package/lib/functions/upstream/app.session.upstream.js +18 -0
  284. package/lib/functions/upstream/app.session.upstream.js.map +1 -0
  285. package/lib/functions/upstream/entra.upstream.d.ts +11 -0
  286. package/lib/functions/upstream/entra.upstream.js +16 -0
  287. package/lib/functions/upstream/entra.upstream.js.map +1 -0
  288. package/lib/functions/upstream/oidc.upstream.d.ts +4 -0
  289. package/lib/functions/upstream/oidc.upstream.js +82 -0
  290. package/lib/functions/upstream/oidc.upstream.js.map +1 -0
  291. package/lib/functions/upstream/verify.id.token.d.ts +3 -0
  292. package/lib/functions/upstream/verify.id.token.js +16 -0
  293. package/lib/functions/upstream/verify.id.token.js.map +1 -0
  294. package/lib/handlers/authorization.server.metadata.handler.d.ts +4 -0
  295. package/lib/handlers/authorization.server.metadata.handler.js +24 -0
  296. package/lib/handlers/authorization.server.metadata.handler.js.map +1 -0
  297. package/lib/handlers/authorize.handler.d.ts +5 -0
  298. package/lib/handlers/authorize.handler.js +58 -0
  299. package/lib/handlers/authorize.handler.js.map +1 -0
  300. package/lib/handlers/callback.handler.d.ts +5 -0
  301. package/lib/handlers/callback.handler.js +32 -0
  302. package/lib/handlers/callback.handler.js.map +1 -0
  303. package/lib/handlers/consent.decision.handler.d.ts +5 -0
  304. package/lib/handlers/consent.decision.handler.js +30 -0
  305. package/lib/handlers/consent.decision.handler.js.map +1 -0
  306. package/lib/handlers/consent.page.handler.d.ts +5 -0
  307. package/lib/handlers/consent.page.handler.js +43 -0
  308. package/lib/handlers/consent.page.handler.js.map +1 -0
  309. package/lib/handlers/protected.resource.metadata.handler.d.ts +4 -0
  310. package/lib/handlers/protected.resource.metadata.handler.js +9 -0
  311. package/lib/handlers/protected.resource.metadata.handler.js.map +1 -0
  312. package/lib/handlers/register.handler.d.ts +5 -0
  313. package/lib/handlers/register.handler.js +44 -0
  314. package/lib/handlers/register.handler.js.map +1 -0
  315. package/lib/handlers/resume.handler.d.ts +5 -0
  316. package/lib/handlers/resume.handler.js +25 -0
  317. package/lib/handlers/resume.handler.js.map +1 -0
  318. package/lib/handlers/revoke.handler.d.ts +5 -0
  319. package/lib/handlers/revoke.handler.js +27 -0
  320. package/lib/handlers/revoke.handler.js.map +1 -0
  321. package/lib/handlers/token.handler.d.ts +5 -0
  322. package/lib/handlers/token.handler.js +22 -0
  323. package/lib/handlers/token.handler.js.map +1 -0
  324. package/lib/mcp.auth.entra.d.ts +4 -0
  325. package/lib/mcp.auth.entra.js +11 -0
  326. package/lib/mcp.auth.entra.js.map +1 -0
  327. package/lib/mcp.auth.express.d.ts +4 -0
  328. package/lib/mcp.auth.express.js +11 -0
  329. package/lib/mcp.auth.express.js.map +1 -0
  330. package/lib/mcp.auth.fastify.d.ts +4 -0
  331. package/lib/mcp.auth.fastify.js +11 -0
  332. package/lib/mcp.auth.fastify.js.map +1 -0
  333. package/lib/mcp.auth.fetch.d.ts +6 -0
  334. package/lib/mcp.auth.fetch.js +15 -0
  335. package/lib/mcp.auth.fetch.js.map +1 -0
  336. package/lib/mcp.auth.koa.d.ts +4 -0
  337. package/lib/mcp.auth.koa.js +11 -0
  338. package/lib/mcp.auth.koa.js.map +1 -0
  339. package/lib/mcp.auth.memory.d.ts +4 -0
  340. package/lib/mcp.auth.memory.js +11 -0
  341. package/lib/mcp.auth.memory.js.map +1 -0
  342. package/lib/mcp.auth.mongodb.d.ts +6 -0
  343. package/lib/mcp.auth.mongodb.js +11 -0
  344. package/lib/mcp.auth.mongodb.js.map +1 -0
  345. package/lib/mcp.auth.node.d.ts +9 -0
  346. package/lib/mcp.auth.node.js +21 -0
  347. package/lib/mcp.auth.node.js.map +1 -0
  348. package/lib/mcp.auth.postgres.d.ts +11 -0
  349. package/lib/mcp.auth.postgres.js +20 -0
  350. package/lib/mcp.auth.postgres.js.map +1 -0
  351. package/lib/mcp.auth.server.d.ts +42 -0
  352. package/lib/mcp.auth.server.js +35 -0
  353. package/lib/mcp.auth.server.js.map +1 -0
  354. package/lib/mcp.auth.sqlite.d.ts +13 -0
  355. package/lib/mcp.auth.sqlite.js +24 -0
  356. package/lib/mcp.auth.sqlite.js.map +1 -0
  357. package/lib/storage/memory.storage.d.ts +30 -0
  358. package/lib/storage/memory.storage.js +91 -0
  359. package/lib/storage/memory.storage.js.map +1 -0
  360. package/lib/storage/mongodb.storage.d.ts +41 -0
  361. package/lib/storage/mongodb.storage.js +172 -0
  362. package/lib/storage/mongodb.storage.js.map +1 -0
  363. package/lib/storage/sql.storage.d.ts +35 -0
  364. package/lib/storage/sql.storage.js +128 -0
  365. package/lib/storage/sql.storage.js.map +1 -0
  366. package/lib/types/access.token.input.type.d.ts +9 -0
  367. package/lib/types/access.token.input.type.js +3 -0
  368. package/lib/types/access.token.input.type.js.map +1 -0
  369. package/lib/types/app.session.upstream.options.type.d.ts +7 -0
  370. package/lib/types/app.session.upstream.options.type.js +3 -0
  371. package/lib/types/app.session.upstream.options.type.js.map +1 -0
  372. package/lib/types/authenticate.result.type.d.ts +10 -0
  373. package/lib/types/authenticate.result.type.js +3 -0
  374. package/lib/types/authenticate.result.type.js.map +1 -0
  375. package/lib/types/authenticated.user.type.d.ts +5 -0
  376. package/lib/types/authenticated.user.type.js +3 -0
  377. package/lib/types/authenticated.user.type.js.map +1 -0
  378. package/lib/types/authorization.code.record.type.d.ts +11 -0
  379. package/lib/types/authorization.code.record.type.js +3 -0
  380. package/lib/types/authorization.code.record.type.js.map +1 -0
  381. package/lib/types/cimd.options.type.d.ts +16 -0
  382. package/lib/types/cimd.options.type.js +3 -0
  383. package/lib/types/cimd.options.type.js.map +1 -0
  384. package/lib/types/client.metadata.type.d.ts +7 -0
  385. package/lib/types/client.metadata.type.js +3 -0
  386. package/lib/types/client.metadata.type.js.map +1 -0
  387. package/lib/types/client.record.type.d.ts +11 -0
  388. package/lib/types/client.record.type.js +3 -0
  389. package/lib/types/client.record.type.js.map +1 -0
  390. package/lib/types/consent.model.type.d.ts +15 -0
  391. package/lib/types/consent.model.type.js +3 -0
  392. package/lib/types/consent.model.type.js.map +1 -0
  393. package/lib/types/consent.record.type.d.ts +5 -0
  394. package/lib/types/consent.record.type.js +3 -0
  395. package/lib/types/consent.record.type.js.map +1 -0
  396. package/lib/types/http.request.type.d.ts +9 -0
  397. package/lib/types/http.request.type.js +3 -0
  398. package/lib/types/http.request.type.js.map +1 -0
  399. package/lib/types/http.response.type.d.ts +6 -0
  400. package/lib/types/http.response.type.js +3 -0
  401. package/lib/types/http.response.type.js.map +1 -0
  402. package/lib/types/i.metadata.cache.d.ts +6 -0
  403. package/lib/types/i.metadata.cache.js +3 -0
  404. package/lib/types/i.metadata.cache.js.map +1 -0
  405. package/lib/types/i.storage.d.ts +25 -0
  406. package/lib/types/i.storage.js +3 -0
  407. package/lib/types/i.storage.js.map +1 -0
  408. package/lib/types/i.upstream.d.ts +11 -0
  409. package/lib/types/i.upstream.js +3 -0
  410. package/lib/types/i.upstream.js.map +1 -0
  411. package/lib/types/key.pair.type.d.ts +5 -0
  412. package/lib/types/key.pair.type.js +3 -0
  413. package/lib/types/key.pair.type.js.map +1 -0
  414. package/lib/types/logger.type.d.ts +6 -0
  415. package/lib/types/logger.type.js +3 -0
  416. package/lib/types/logger.type.js.map +1 -0
  417. package/lib/types/mcp.auth.context.type.d.ts +29 -0
  418. package/lib/types/mcp.auth.context.type.js +3 -0
  419. package/lib/types/mcp.auth.context.type.js.map +1 -0
  420. package/lib/types/mcp.auth.options.type.d.ts +39 -0
  421. package/lib/types/mcp.auth.options.type.js +3 -0
  422. package/lib/types/mcp.auth.options.type.js.map +1 -0
  423. package/lib/types/mcp.auth.type.d.ts +14 -0
  424. package/lib/types/mcp.auth.type.js +3 -0
  425. package/lib/types/mcp.auth.type.js.map +1 -0
  426. package/lib/types/metadata.resolution.type.d.ts +9 -0
  427. package/lib/types/metadata.resolution.type.js +3 -0
  428. package/lib/types/metadata.resolution.type.js.map +1 -0
  429. package/lib/types/mongo.storage.options.type.d.ts +13 -0
  430. package/lib/types/mongo.storage.options.type.js +3 -0
  431. package/lib/types/mongo.storage.options.type.js.map +1 -0
  432. package/lib/types/oidc.upstream.options.type.d.ts +9 -0
  433. package/lib/types/oidc.upstream.options.type.js +3 -0
  434. package/lib/types/oidc.upstream.options.type.js.map +1 -0
  435. package/lib/types/pending.authorization.type.d.ts +14 -0
  436. package/lib/types/pending.authorization.type.js +3 -0
  437. package/lib/types/pending.authorization.type.js.map +1 -0
  438. package/lib/types/pending.filter.type.d.ts +5 -0
  439. package/lib/types/pending.filter.type.js +3 -0
  440. package/lib/types/pending.filter.type.js.map +1 -0
  441. package/lib/types/redirect.policy.type.d.ts +5 -0
  442. package/lib/types/redirect.policy.type.js +3 -0
  443. package/lib/types/redirect.policy.type.js.map +1 -0
  444. package/lib/types/refresh.token.record.type.d.ts +11 -0
  445. package/lib/types/refresh.token.record.type.js +3 -0
  446. package/lib/types/refresh.token.record.type.js.map +1 -0
  447. package/lib/types/resolved.client.type.d.ts +7 -0
  448. package/lib/types/resolved.client.type.js +3 -0
  449. package/lib/types/resolved.client.type.js.map +1 -0
  450. package/lib/types/route.name.type.d.ts +2 -0
  451. package/lib/types/route.name.type.js +3 -0
  452. package/lib/types/route.name.type.js.map +1 -0
  453. package/lib/types/route.type.d.ts +10 -0
  454. package/lib/types/route.type.js +3 -0
  455. package/lib/types/route.type.js.map +1 -0
  456. package/lib/types/sql.dialect.type.d.ts +2 -0
  457. package/lib/types/sql.dialect.type.js +3 -0
  458. package/lib/types/sql.dialect.type.js.map +1 -0
  459. package/lib/types/sql.executor.type.d.ts +4 -0
  460. package/lib/types/sql.executor.type.js +3 -0
  461. package/lib/types/sql.executor.type.js.map +1 -0
  462. package/lib/types/sql.storage.options.type.d.ts +4 -0
  463. package/lib/types/sql.storage.options.type.js +3 -0
  464. package/lib/types/sql.storage.options.type.js.map +1 -0
  465. package/lib/types/upstream.begin.type.d.ts +9 -0
  466. package/lib/types/upstream.begin.type.js +3 -0
  467. package/lib/types/upstream.begin.type.js.map +1 -0
  468. package/lib/types/upstream.context.type.d.ts +10 -0
  469. package/lib/types/upstream.context.type.js +3 -0
  470. package/lib/types/upstream.context.type.js.map +1 -0
  471. package/lib/types/verify.result.type.d.ts +6 -0
  472. package/lib/types/verify.result.type.js +3 -0
  473. package/lib/types/verify.result.type.js.map +1 -0
  474. package/package.json +107 -5
  475. package/sql/postgres.sql +61 -0
  476. package/sql/sqlite.sql +61 -0
package/README.md CHANGED
@@ -1,3 +1,208 @@
1
- # Temporary Holding Version
1
+ # mcp-auth-server
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ OAuth 2.1 authorization server for MCP servers. It sits next to your app's existing users and SSO: MCP clients (Cursor, Claude Code, Codex, VS Code, MCP Inspector) sign in through your own identity provider, and your `/mcp` endpoint accepts only tokens this package issued.
4
+
5
+ The core is runtime-agnostic. It uses only web-standard APIs (`fetch`, `URL`, `crypto.subtle`, `crypto.getRandomValues`, `TextEncoder`) and `jose`. It has no `node:*` imports, no `Buffer`, and reads nothing from `process.env`. Node-only helpers live in `mcp.auth.node`.
6
+
7
+ ## Supported MCP authorization spec versions
8
+
9
+ | Spec | Status |
10
+ | --- | --- |
11
+ | 2026-07-28 | Supported: Client ID Metadata Documents (SHOULD), `iss` in authorization responses (RFC 9207), per-request authentication without sessions |
12
+ | 2025-06-18 | Supported for existing clients through Dynamic Client Registration (`/register`, on by default) |
13
+
14
+ Standards implemented: RFC 6750, RFC 7009, RFC 7591, RFC 8414, RFC 8707, RFC 9207, RFC 9728, OAuth Client ID Metadata Document draft-00, PKCE (S256 only).
15
+
16
+ ## Install
17
+
18
+ ```bash
19
+ pnpm add mcp-auth-server
20
+ ```
21
+
22
+ Frameworks and database drivers are optional peer dependencies. Install only the ones you use.
23
+
24
+ Entry points (deep imports from `lib`, like the other packages in this family):
25
+
26
+ | Import | Contents |
27
+ | --- | --- |
28
+ | `mcp-auth-server` | core: `createMcpAuth`, `oidcUpstream`, `appSessionUpstream`, types |
29
+ | `mcp-auth-server/lib/mcp.auth.fetch` | Fetch adapter (Bun, Deno, Workers, Hono, Next.js App Router, Remix, SvelteKit, Astro, Elysia, h3 v2) |
30
+ | `mcp-auth-server/lib/mcp.auth.node` | `node:http` adapter, Node SSRF guard |
31
+ | `mcp-auth-server/lib/mcp.auth.express` | Express middleware |
32
+ | `mcp-auth-server/lib/mcp.auth.fastify` | Fastify plugin |
33
+ | `mcp-auth-server/lib/mcp.auth.koa` | Koa middleware |
34
+ | `mcp-auth-server/lib/mcp.auth.memory` | in-memory storage |
35
+ | `mcp-auth-server/lib/mcp.auth.mongodb` | MongoDB storage |
36
+ | `mcp-auth-server/lib/mcp.auth.postgres` | Postgres storage (`pg`, `postgres.js`) |
37
+ | `mcp-auth-server/lib/mcp.auth.sqlite` | SQLite storage (`better-sqlite3`, `node:sqlite`, `bun:sqlite`, Cloudflare D1) |
38
+ | `mcp-auth-server/lib/mcp.auth.entra` | Entra ID preset |
39
+
40
+ ## Quick start (Express)
41
+
42
+ ```ts
43
+ import express from 'express';
44
+ import {createMcpAuth, oidcUpstream, signingKeyFromEnv} from 'mcp-auth-server';
45
+ import {expressMiddleware} from 'mcp-auth-server/lib/mcp.auth.express';
46
+ import {MemoryStorage} from 'mcp-auth-server/lib/mcp.auth.memory';
47
+
48
+ const auth = createMcpAuth({
49
+ issuer: 'https://mcp.example.com',
50
+ resource: 'https://mcp.example.com/mcp',
51
+ signingKey: signingKeyFromEnv(process.env, 'MCP_OAUTH_SIGNING_KEY'),
52
+ storage: new MemoryStorage(),
53
+ upstream: oidcUpstream({discoveryUrl: 'https://idp.example.com/.well-known/openid-configuration', clientId: '...', clientSecret: '...'}),
54
+ resolveUser: async (claims) => ({id: String(claims.sub), displayName: String(claims.name)}),
55
+ loadActiveUser: async (id) => findActiveUser(id)
56
+ });
57
+
58
+ const app = express();
59
+ app.use(expressMiddleware(auth));
60
+ app.post('/mcp', express.json(), async (req, res) => {
61
+ const result = await auth.authenticate(req.headers, req.body);
62
+ if (!('user' in result)) return res.status(result.status).set(result.headers).json(result.body);
63
+ res.json(await handleMcp(result.user, req.body));
64
+ });
65
+ ```
66
+
67
+ Generate a signing key:
68
+
69
+ ```bash
70
+ pnpm keygen
71
+ pnpm keygen --out mcp-signing-key.pem
72
+ ```
73
+
74
+ `signingKey` accepts a `CryptoKey` or a PEM string (PKCS8 or PKCS1). `signingKeyFromEnv(env, name)` reads a PEM from an environment object and accepts literal `\n` newlines. Pass `verificationKey` when the signing `CryptoKey` is not extractable.
75
+
76
+ ## Other frameworks
77
+
78
+ Fetch (Bun, Deno, Workers, Hono, Next.js App Router, Remix, SvelteKit, Astro, Elysia, h3 v2):
79
+
80
+ ```ts
81
+ import {createFetchHandler} from 'mcp-auth-server/lib/mcp.auth.fetch';
82
+
83
+ const handle = createFetchHandler(auth);
84
+ export default {
85
+ fetch: async (request: Request) => (await handle(request)) ?? mcpResponse(request)
86
+ };
87
+ ```
88
+
89
+ `createFetchHandler` returns `null` for paths it does not own, so your own routes keep working.
90
+
91
+ Fastify:
92
+
93
+ ```ts
94
+ import {fastifyPlugin} from 'mcp-auth-server/lib/mcp.auth.fastify';
95
+
96
+ await app.register(fastifyPlugin(auth));
97
+ ```
98
+
99
+ Koa:
100
+
101
+ ```ts
102
+ import {koaMiddleware} from 'mcp-auth-server/lib/mcp.auth.koa';
103
+
104
+ app.use(koaMiddleware(auth));
105
+ ```
106
+
107
+ `node:http`:
108
+
109
+ ```ts
110
+ import {createNodeHandler} from 'mcp-auth-server/lib/mcp.auth.node';
111
+
112
+ const handle = createNodeHandler(auth);
113
+ createServer(async (req, res) => {
114
+ if (await handle(req, res)) return;
115
+ res.writeHead(404).end();
116
+ });
117
+ ```
118
+
119
+ All adapters read both JSON and `application/x-www-form-urlencoded` bodies (`/token`, `/revoke` and the consent POST are form-encoded). Express and Koa reuse a body already parsed by `express.json()`, `express.urlencoded()` or `koa-bodyparser`.
120
+
121
+ Hosts that mount routes themselves can use `auth.routes`, `auth.handle(request)` and the individual handlers with the plain-object contract `{method, path, query, headers, body, ip}` to `{status, headers, body}`.
122
+
123
+ ### Recipes
124
+
125
+ - **NestJS**: Nest runs on Express or Fastify. Call `app.getHttpAdapter().getInstance()` and use `app.use(expressMiddleware(auth))` or `await instance.register(fastifyPlugin(auth))` before `app.listen`. Put your `/mcp` controller behind a guard that calls `auth.authenticate(req.headers, req.body)`.
126
+ - **Hono**: `app.all('*', async (c, next) => (await handle(c.req.raw)) ?? next())` with `handle = createFetchHandler(auth)`.
127
+ - **Next.js**: App Router: export `GET` and `POST` from catch-all route handlers that call `createFetchHandler(auth)`; mount the well-known routes at the root (see below). Pages Router: use `createNodeHandler(auth)` from an API route with `export const config = {api: {bodyParser: false}}`.
128
+
129
+ ## Mounting and well-known paths
130
+
131
+ `issuer` and `resource` come from options only, never from request headers. If the issuer has a path (`https://example.com/auth`), the RFC 8414 metadata lives at `/.well-known/oauth-authorization-server/auth`. Hosts must mount the `/.well-known/*` routes at the origin root. The dispatcher serves the root and path forms.
132
+
133
+ ## Hooks
134
+
135
+ | Hook | Purpose |
136
+ | --- | --- |
137
+ | `resolveUser(claims)` | Called after upstream sign-in with the validated id token claims. Create or update your user and return `{id, displayName?}`. Defaults to `{id: sub, displayName: name}`. |
138
+ | `loadActiveUser(id)` | Called on every `/mcp` request. Return `null` and the request fails with 401 `user_inactive`. |
139
+ | `renderConsent(model)` | Return HTML for the consent page. A default page is provided. |
140
+ | `rateLimit(key, route)` | Optional. Return `false` to answer 429. Called for `register`, `token` and `revoke` with the client IP as key. |
141
+ | `logger` | Optional `{info, warn, error}`. |
142
+
143
+ ## Upstream login
144
+
145
+ OIDC (any provider, PKCE S256, id token validated with JWKS):
146
+
147
+ ```ts
148
+ oidcUpstream({discoveryUrl, clientId, clientSecret, scope: 'openid profile email'});
149
+ ```
150
+
151
+ Entra ID preset:
152
+
153
+ ```ts
154
+ import {entraUpstream} from 'mcp-auth-server/lib/mcp.auth.entra';
155
+
156
+ entraUpstream({tenantId, clientId, clientSecret});
157
+ ```
158
+
159
+ Set `callbackPath` (default `/oauth/callback`) to match the redirect URI registered at the provider, for example `/oauth/azure-callback`.
160
+
161
+ App session, for apps that already have their own login:
162
+
163
+ ```ts
164
+ appSessionUpstream({
165
+ getSignedInUser: async (request) => sessionUser(request.headers.cookie),
166
+ signInUrl: (returnTo) => `/login?returnTo=${encodeURIComponent(returnTo)}`
167
+ });
168
+ ```
169
+
170
+ At `/authorize`, a signed-in user goes straight to consent or the code. Otherwise the browser is sent to `signInUrl(returnTo)` where `returnTo` is always `{issuer}/oauth/resume?state=<stateId>` built by the package. `/oauth/resume` rechecks `getSignedInUser`, stores the user id on the pending authorization and continues exactly like the OIDC callback. The consent page and POST then require the same signed-in session, so the app cookie should be `SameSite=Lax` or stricter. The random `state` bound to the pending authorization protects the consent step against CSRF.
171
+
172
+ ## Client registration
173
+
174
+ - **Client ID Metadata Documents** (recommended, advertised as `client_id_metadata_document_supported`): an `https` client_id URL with a path is fetched and validated (JSON with `client_id` equal to the URL, `client_name`, `redirect_uris`). The authorization request's `redirect_uri` must be listed. Responses are cached respecting `Cache-Control` up to `cimd.maxCacheSeconds`. Fetches use no redirects, a 5 s timeout and a 5 KiB limit by default. Private, loopback and link-local hosts are rejected for IP literals and internal names. On Node add DNS resolution checking: `cimd: {guard: nodeSsrfGuard}`. Inject `cimd.fetch` or `cimd.guard` on other runtimes. Use `cimd.trust: {allowHosts, denyHosts}` for a host policy (`*.example.com` patterns allowed). The consent page shows the client_id host next to the self-declared name. `private_key_jwt` client authentication is not supported; `token_endpoint_auth_method` stays `none`.
175
+ - **Dynamic Client Registration** (deprecated by the spec, kept for 2025-06-18 clients): `POST /register`, public clients only, `application_type` is accepted and stored. Turn off with `registration: {enabled: false}`.
176
+
177
+ Redirect URIs: `http://localhost` and `http://127.0.0.1` on any port, hosts from `redirects.httpsHosts`, schemes from `redirects.customSchemes` (`cursor://`, `vscode://`). Fragments are never allowed. `/authorize` and `/token` require an exact match.
178
+
179
+ ## Storage
180
+
181
+ All five record types (clients, pending authorizations, authorization codes, refresh tokens, consents) go through one interface with atomic operations: `claimAuthorizationCode`, `claimRefreshToken`, `revokeRefreshTokenFamily`, `takePendingAuthorization`, `attachUserToPendingAuthorization`, `upsertConsent`, `deleteExpired`.
182
+
183
+ - **Memory**: `new MemoryStorage()`.
184
+ - **MongoDB**: `const storage = new MongoStorage(db, options); await storage.ensureIndexes();`. Defaults use the collection names `mcp_oauth_clients`, `mcp_oauth_pending_authorizations`, `mcp_oauth_authorization_codes`, `mcp_oauth_refresh_tokens`, `mcp_oauth_consents`, all configurable. `userIdField`, `userIdToDb` and `userIdFromDb` map an existing user key (for example a numeric `employeeId`) without a data migration. TTL indexes remove expired documents.
185
+ - **Postgres and SQLite** share one SQL implementation that takes an executor `(sql, params) => rows` instead of a driver: `postgresStorage(fromPg(pool))`, `postgresStorage(fromPostgresJs(sql))`, `sqliteStorage(fromBetterSqlite3(db))`, `sqliteStorage(fromNodeSqlite(db))`, `sqliteStorage(fromBunSqlite(db))`, `sqliteStorage(fromD1(env.DB))`. Create tables with `await storage.migrate()` or run `sql/postgres.sql` / `sql/sqlite.sql`. SQLite needs 3.35 or newer (`RETURNING`). Call `auth.deleteExpired()` on a schedule (cron, Workers cron trigger).
186
+
187
+ ## Rate limits to apply
188
+
189
+ Apply these in your host or through the `rateLimit` hook:
190
+
191
+ | Route | Limit |
192
+ | --- | --- |
193
+ | `POST /register` | 20 per minute per IP |
194
+ | `POST /token`, `POST /revoke` | 60 per minute per IP |
195
+ | everything else | 200 per minute per IP |
196
+
197
+ ## Security notes
198
+
199
+ - Authorization codes: 32 random bytes, only the SHA-256 hash is stored, 60 s TTL, single use (atomic claim before validation); client, redirect URI, PKCE verifier and resource are checked.
200
+ - Access tokens: RS256 JWT with `iss`, `aud` = resource, `sub`, `client_id`, `jti`, 1 h. Refresh tokens are opaque, stored as hashes, single use, rotate within the same family and absolute expiry (30 d). Replaying a used or revoked refresh token revokes the whole family.
201
+ - Public clients only: `/token` and `/revoke` answer 401 `invalid_client` when a secret or an `Authorization` header is sent.
202
+ - Every redirect to the client carries `iss` (RFC 9207), including errors. Unknown clients and unregistered redirect URIs never redirect.
203
+ - No MCP sessions: `auth.authenticate(headers, body)` validates every request on its own and never caches users. Signing keys are cached. A disabled user fails on the next request.
204
+ - Consent page: `X-Frame-Options: DENY`, strict CSP, `Cache-Control: no-store`, all values escaped.
205
+
206
+ ## Scripts
207
+
208
+ Same as the other packages in this family: `pnpm all`, `build`, `clean`, `format`, `test`, `quick`, `integration`, `docs`, and so on.
package/bin/keygen.mjs ADDED
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ import {generateKeyPairSync} from 'node:crypto';
3
+ import {writeFileSync} from 'node:fs';
4
+
5
+ const args = process.argv.slice(2);
6
+ const option = (name, fallback) => {
7
+ const index = args.indexOf(name);
8
+ return -1 === index ? fallback : args[index + 1];
9
+ };
10
+
11
+ if (args.includes('--help')) {
12
+ console.log('usage: mcp-auth-keygen [--bits 2048] [--env NAME] [--out file.pem]');
13
+ process.exit(0);
14
+ }
15
+
16
+ const {privateKey} = generateKeyPairSync('rsa', {modulusLength: Number(option('--bits', '2048'))});
17
+ const pem = privateKey.export({type: 'pkcs8', format: 'pem'}).trim();
18
+ const outFile = option('--out');
19
+
20
+ if (outFile) {
21
+ writeFileSync(outFile, `${pem}\n`, {mode: 0o600});
22
+ console.log(`private key written to ${outFile}`);
23
+ } else {
24
+ const envName = option('--env', 'MCP_OAUTH_SIGNING_KEY');
25
+ console.log(`${envName}=${pem.split('\n').join('\\n')}`);
26
+ }
@@ -0,0 +1,4 @@
1
+ import type { RequestHandler } from 'express';
2
+ import type McpAuthType from '../../types/mcp.auth.type';
3
+ declare const expressMiddleware: (auth: McpAuthType<any>) => RequestHandler;
4
+ export default expressMiddleware;
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const to_node_http_request_1 = __importDefault(require("../node/to.node.http.request"));
7
+ const write_node_response_1 = __importDefault(require("../node/write.node.response"));
8
+ const expressMiddleware = (auth) => async (req, res, next) => {
9
+ const originalUrl = req.originalUrl ?? req.url;
10
+ const path = new URL(originalUrl, 'http://localhost').pathname;
11
+ if (!auth.hasRoute({ method: req.method, path, query: {}, headers: {} }))
12
+ return next();
13
+ try {
14
+ const preParsed = req.body && 'object' === typeof req.body && Object.keys(req.body).length > 0 ? req.body : undefined;
15
+ const parsed = await (0, to_node_http_request_1.default)(Object.assign(req, { url: originalUrl }), preParsed);
16
+ (0, write_node_response_1.default)(res, await auth.handle(parsed));
17
+ }
18
+ catch (error) {
19
+ next(error);
20
+ }
21
+ };
22
+ exports.default = expressMiddleware;
23
+ //# sourceMappingURL=express.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.middleware.js","sourceRoot":"","sources":["../../../src/adapters/express/express.middleware.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAKb,wFAA6D;AAC7D,sFAA4D;AAE5D,MAAM,iBAAiB,GACtB,CAAC,IAAsB,EAAkB,EAAE,CAC3C,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAiB,EAAE;IACxE,MAAM,WAAW,GAAW,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,GAAG,CAAC;IACvD,MAAM,IAAI,GAAW,IAAI,GAAG,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC;IACvE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAC,CAAC;QAAE,OAAO,IAAI,EAAE,CAAC;IACtF,IAAI,CAAC;QACJ,MAAM,SAAS,GAAY,GAAG,CAAC,IAAI,IAAI,QAAQ,KAAK,OAAO,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/H,MAAM,MAAM,GAAG,MAAM,IAAA,8BAAiB,EAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAC,GAAG,EAAE,WAAW,EAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC1F,IAAA,6BAAiB,EAAC,GAAG,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,KAAK,CAAC,CAAC;IACb,CAAC;AACF,CAAC,CAAC;AACH,kBAAe,iBAAiB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { FastifyInstance } from 'fastify';
2
+ import type McpAuthType from '../../types/mcp.auth.type';
3
+ declare const fastifyPlugin: (auth: McpAuthType<any>) => (fastify: FastifyInstance) => Promise<void>;
4
+ export default fastifyPlugin;
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const parse_body_1 = __importDefault(require("../../functions/body/parse.body"));
7
+ const parse_query_1 = __importDefault(require("../../functions/body/parse.query"));
8
+ const fastifyPlugin = (auth) => async (fastify) => {
9
+ if (!fastify.hasContentTypeParser('application/x-www-form-urlencoded')) {
10
+ fastify.addContentTypeParser('application/x-www-form-urlencoded', { parseAs: 'string' }, (_request, body, done) => done(null, (0, parse_body_1.default)('application/x-www-form-urlencoded', body)));
11
+ }
12
+ auth.routes.forEach((route) => {
13
+ fastify.route({
14
+ method: route.method,
15
+ url: route.path,
16
+ handler: async (request, reply) => {
17
+ const response = await auth.handle({
18
+ method: request.method,
19
+ path: route.path,
20
+ query: (0, parse_query_1.default)(new URL(request.url, 'http://localhost').searchParams),
21
+ headers: request.headers,
22
+ body: request.body,
23
+ ip: request.ip
24
+ });
25
+ reply.headers(response.headers);
26
+ return reply.status(response.status).send(response.body);
27
+ }
28
+ });
29
+ });
30
+ };
31
+ exports.default = fastifyPlugin;
32
+ //# sourceMappingURL=fastify.plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastify.plugin.js","sourceRoot":"","sources":["../../../src/adapters/fastify/fastify.plugin.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAIb,iFAAwD;AACxD,mFAA0D;AAI1D,MAAM,aAAa,GAClB,CAAC,IAAsB,EAAE,EAAE,CAC3B,KAAK,EAAE,OAAwB,EAAiB,EAAE;IACjD,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,mCAAmC,CAAC,EAAE,CAAC;QACxE,OAAO,CAAC,oBAAoB,CAAC,mCAAmC,EAAE,EAAC,OAAO,EAAE,QAAQ,EAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAQ,EAAE,CACrH,IAAI,CAAC,IAAI,EAAE,IAAA,oBAAS,EAAC,mCAAmC,EAAE,IAAc,CAAC,CAAC,CAC1E,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAgB,EAAQ,EAAE;QAC9C,OAAO,CAAC,KAAK,CAAC;YACb,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,GAAG,EAAE,KAAK,CAAC,IAAI;YACf,OAAO,EAAE,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAyB,EAAE;gBACtF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;oBAClC,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,KAAK,EAAE,IAAA,qBAAU,EAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,YAAY,CAAC;oBACxE,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,EAAE,EAAE,OAAO,CAAC,EAAE;iBACd,CAAC,CAAC;gBACH,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAChC,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC1D,CAAC;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AACH,kBAAe,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type McpAuthType from '../../types/mcp.auth.type';
2
+ declare const createFetchHandler: (auth: McpAuthType<any>) => (request: Request) => Promise<Response | null>;
3
+ export default createFetchHandler;
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const to_http_request_1 = __importDefault(require("./to.http.request"));
7
+ const to_response_1 = __importDefault(require("./to.response"));
8
+ const createFetchHandler = (auth) => async (request) => {
9
+ const parsed = await (0, to_http_request_1.default)(request);
10
+ return auth.hasRoute(parsed) ? (0, to_response_1.default)(await auth.handle(parsed)) : null;
11
+ };
12
+ exports.default = createFetchHandler;
13
+ //# sourceMappingURL=create.fetch.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.fetch.handler.js","sourceRoot":"","sources":["../../../src/adapters/fetch/create.fetch.handler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAGb,wEAA8C;AAC9C,gEAAuC;AAEvC,MAAM,kBAAkB,GACvB,CAAC,IAAsB,EAAE,EAAE,CAC3B,KAAK,EAAE,OAAgB,EAA4B,EAAE;IACpD,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAa,EAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAA,qBAAU,EAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7E,CAAC,CAAC;AACH,kBAAe,kBAAkB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type HttpRequestType from '../../types/http.request.type';
2
+ declare const toHttpRequest: (request: Request) => Promise<HttpRequestType>;
3
+ export default toHttpRequest;
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const parse_body_1 = __importDefault(require("../../functions/body/parse.body"));
7
+ const parse_query_1 = __importDefault(require("../../functions/body/parse.query"));
8
+ const toHttpRequest = async (request) => {
9
+ const url = new URL(request.url);
10
+ const headers = Object.fromEntries(request.headers.entries());
11
+ const raw = 'GET' === request.method || 'HEAD' === request.method ? '' : await request.text();
12
+ return {
13
+ method: request.method,
14
+ path: url.pathname,
15
+ query: (0, parse_query_1.default)(url.searchParams),
16
+ headers,
17
+ body: (0, parse_body_1.default)(headers['content-type'], raw),
18
+ ip: headers['cf-connecting-ip'] ?? headers['x-real-ip'] ?? headers['x-forwarded-for']?.split(',')[0]?.trim()
19
+ };
20
+ };
21
+ exports.default = toHttpRequest;
22
+ //# sourceMappingURL=to.http.request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to.http.request.js","sourceRoot":"","sources":["../../../src/adapters/fetch/to.http.request.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAEb,iFAAwD;AACxD,mFAA0D;AAG1D,MAAM,aAAa,GAAG,KAAK,EAAE,OAAgB,EAA4B,EAAE;IAC1E,MAAM,GAAG,GAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,OAAO,GAA2B,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACtF,MAAM,GAAG,GAAW,KAAK,KAAK,OAAO,CAAC,MAAM,IAAI,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IACtG,OAAO;QACN,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,GAAG,CAAC,QAAQ;QAClB,KAAK,EAAE,IAAA,qBAAU,EAAC,GAAG,CAAC,YAAY,CAAC;QACnC,OAAO;QACP,IAAI,EAAE,IAAA,oBAAS,EAAC,OAAO,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC;QAC7C,EAAE,EAAE,OAAO,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;KAC5G,CAAC;AACH,CAAC,CAAC;AACF,kBAAe,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type HttpResponseType from '../../types/http.response.type';
2
+ declare const toResponse: (response: HttpResponseType) => Response;
3
+ export default toResponse;
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const toResponse = (response) => {
4
+ const body = response.body;
5
+ if (undefined === body)
6
+ return new Response(null, { status: response.status, headers: response.headers });
7
+ return new Response('string' === typeof body ? body : JSON.stringify(body), { status: response.status, headers: response.headers });
8
+ };
9
+ exports.default = toResponse;
10
+ //# sourceMappingURL=to.response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to.response.js","sourceRoot":"","sources":["../../../src/adapters/fetch/to.response.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAIb,MAAM,UAAU,GAAG,CAAC,QAA0B,EAAY,EAAE;IAC3D,MAAM,IAAI,GAAY,QAAQ,CAAC,IAAI,CAAC;IACpC,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAC,CAAC,CAAC;IACxG,OAAO,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAC,CAAC,CAAC;AACnI,CAAC,CAAC;AACF,kBAAe,UAAU,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Context, Next } from 'koa';
2
+ import type McpAuthType from '../../types/mcp.auth.type';
3
+ declare const koaMiddleware: (auth: McpAuthType<any>) => (ctx: Context, next: Next) => Promise<void>;
4
+ export default koaMiddleware;
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const to_node_http_request_1 = __importDefault(require("../node/to.node.http.request"));
7
+ const koaMiddleware = (auth) => async (ctx, next) => {
8
+ if (!auth.hasRoute({ method: ctx.method, path: ctx.path, query: {}, headers: {} }))
9
+ return next();
10
+ const body = ctx.request.body;
11
+ const preParsed = body && 'object' === typeof body && Object.keys(body).length > 0 ? body : undefined;
12
+ const parsed = await (0, to_node_http_request_1.default)(ctx.req, preParsed);
13
+ const response = await auth.handle({ ...parsed, path: ctx.path });
14
+ ctx.status = response.status;
15
+ ctx.set(response.headers);
16
+ ctx.body = response.body ?? '';
17
+ };
18
+ exports.default = koaMiddleware;
19
+ //# sourceMappingURL=koa.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"koa.middleware.js","sourceRoot":"","sources":["../../../src/adapters/koa/koa.middleware.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAKb,wFAA6D;AAE7D,MAAM,aAAa,GAClB,CAAC,IAAsB,EAAE,EAAE,CAC3B,KAAK,EAAE,GAAY,EAAE,IAAU,EAAiB,EAAE;IACjD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAC,CAAC;QAAE,OAAO,IAAI,EAAE,CAAC;IAChG,MAAM,IAAI,GAAa,GAAG,CAAC,OAA4B,CAAC,IAAI,CAAC;IAC7D,MAAM,SAAS,GAAY,IAAI,IAAI,QAAQ,KAAK,OAAO,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/G,MAAM,MAAM,GAAG,MAAM,IAAA,8BAAiB,EAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,EAAC,GAAG,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAC,CAAC,CAAC;IAChE,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC7B,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;AAChC,CAAC,CAAC;AACH,kBAAe,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type McpAuthType from '../../types/mcp.auth.type';
3
+ declare const createNodeHandler: (auth: McpAuthType<any>) => (req: IncomingMessage, res: ServerResponse) => Promise<boolean>;
4
+ export default createNodeHandler;
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const to_node_http_request_1 = __importDefault(require("./to.node.http.request"));
7
+ const write_node_response_1 = __importDefault(require("./write.node.response"));
8
+ const createNodeHandler = (auth) => async (req, res) => {
9
+ const url = new URL(req.url ?? '/', 'http://localhost');
10
+ if (!auth.hasRoute({ method: req.method ?? 'GET', path: url.pathname, query: {}, headers: {} }))
11
+ return false;
12
+ (0, write_node_response_1.default)(res, await auth.handle(await (0, to_node_http_request_1.default)(req)));
13
+ return true;
14
+ };
15
+ exports.default = createNodeHandler;
16
+ //# sourceMappingURL=create.node.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.node.handler.js","sourceRoot":"","sources":["../../../src/adapters/node/create.node.handler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAKb,kFAAuD;AACvD,gFAAsD;AAEtD,MAAM,iBAAiB,GACtB,CAAC,IAAsB,EAAE,EAAE,CAC3B,KAAK,EAAE,GAAoB,EAAE,GAAmB,EAAoB,EAAE;IACrE,MAAM,GAAG,GAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAC7D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAC,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5G,IAAA,6BAAiB,EAAC,GAAG,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,IAAA,8BAAiB,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxE,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AACH,kBAAe,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const nodeSsrfGuard: (url: URL) => Promise<void>;
2
+ export default nodeSsrfGuard;
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const promises_1 = require("node:dns/promises");
7
+ const assert_public_host_1 = __importDefault(require("../../functions/cimd/assert.public.host"));
8
+ const nodeSsrfGuard = async (url) => {
9
+ const addresses = await (0, promises_1.lookup)(url.hostname.replace(/^\[|\]$/g, ''), { all: true });
10
+ for (const { address } of addresses) {
11
+ const host = address.includes(':') ? `[${address}]` : address;
12
+ (0, assert_public_host_1.default)(new URL(`https://${host}`));
13
+ }
14
+ };
15
+ exports.default = nodeSsrfGuard;
16
+ //# sourceMappingURL=node.ssrf.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.ssrf.guard.js","sourceRoot":"","sources":["../../../src/adapters/node/node.ssrf.guard.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAEb,gDAAyC;AAEzC,iGAAuE;AAEvE,MAAM,aAAa,GAAG,KAAK,EAAE,GAAQ,EAAiB,EAAE;IACvD,MAAM,SAAS,GAAG,MAAM,IAAA,iBAAM,EAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAC,GAAG,EAAE,IAAI,EAAC,CAAC,CAAC;IAClF,KAAK,MAAM,EAAC,OAAO,EAAC,IAAI,SAAS,EAAE,CAAC;QACnC,MAAM,IAAI,GAAW,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;QACtE,IAAA,4BAAgB,EAAC,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;AACF,CAAC,CAAC;AACF,kBAAe,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { IncomingMessage } from 'node:http';
2
+ declare const parseNodeBody: (req: IncomingMessage, preParsedBody?: unknown) => Promise<unknown>;
3
+ export default parseNodeBody;
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const parse_body_1 = __importDefault(require("../../functions/body/parse.body"));
7
+ const read_node_body_1 = __importDefault(require("./read.node.body"));
8
+ const parseNodeBody = async (req, preParsedBody) => {
9
+ if (undefined !== preParsedBody)
10
+ return preParsedBody;
11
+ if ('GET' === req.method || 'HEAD' === req.method)
12
+ return undefined;
13
+ return (0, parse_body_1.default)(req.headers['content-type'], await (0, read_node_body_1.default)(req));
14
+ };
15
+ exports.default = parseNodeBody;
16
+ //# sourceMappingURL=parse.node.body.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.node.body.js","sourceRoot":"","sources":["../../../src/adapters/node/parse.node.body.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAIb,iFAAwD;AACxD,sEAA4C;AAE5C,MAAM,aAAa,GAAG,KAAK,EAAE,GAAoB,EAAE,aAAuB,EAAoB,EAAE;IAC/F,IAAI,SAAS,KAAK,aAAa;QAAE,OAAO,aAAa,CAAC;IACtD,IAAI,KAAK,KAAK,GAAG,CAAC,MAAM,IAAI,MAAM,KAAK,GAAG,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IACpE,OAAO,IAAA,oBAAS,EAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,MAAM,IAAA,wBAAY,EAAC,GAAG,CAAC,CAAC,CAAC;AACxE,CAAC,CAAC;AACF,kBAAe,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { IncomingMessage } from 'node:http';
2
+ declare const readNodeBody: (req: IncomingMessage) => Promise<string>;
3
+ export default readNodeBody;
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const readNodeBody = async (req) => {
4
+ const chunks = [];
5
+ for await (const chunk of req)
6
+ chunks.push(Buffer.from(chunk));
7
+ return Buffer.concat(chunks).toString('utf8');
8
+ };
9
+ exports.default = readNodeBody;
10
+ //# sourceMappingURL=read.node.body.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.node.body.js","sourceRoot":"","sources":["../../../src/adapters/node/read.node.body.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAIb,MAAM,YAAY,GAAG,KAAK,EAAE,GAAoB,EAAmB,EAAE;IACpE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG;QAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC,CAAC;AACF,kBAAe,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { IncomingMessage } from 'node:http';
2
+ import type HttpRequestType from '../../types/http.request.type';
3
+ declare const toNodeHttpRequest: (req: IncomingMessage, preParsedBody?: unknown) => Promise<HttpRequestType>;
4
+ export default toNodeHttpRequest;
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const parse_query_1 = __importDefault(require("../../functions/body/parse.query"));
7
+ const parse_node_body_1 = __importDefault(require("./parse.node.body"));
8
+ const toNodeHttpRequest = async (req, preParsedBody) => {
9
+ const url = new URL(req.url ?? '/', 'http://localhost');
10
+ return {
11
+ method: req.method ?? 'GET',
12
+ path: url.pathname,
13
+ query: (0, parse_query_1.default)(url.searchParams),
14
+ headers: { ...req.headers },
15
+ body: await (0, parse_node_body_1.default)(req, preParsedBody),
16
+ ip: req.socket?.remoteAddress
17
+ };
18
+ };
19
+ exports.default = toNodeHttpRequest;
20
+ //# sourceMappingURL=to.node.http.request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to.node.http.request.js","sourceRoot":"","sources":["../../../src/adapters/node/to.node.http.request.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAIb,mFAA0D;AAE1D,wEAA8C;AAE9C,MAAM,iBAAiB,GAAG,KAAK,EAAE,GAAoB,EAAE,aAAuB,EAA4B,EAAE;IAC3G,MAAM,GAAG,GAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAC7D,OAAO;QACN,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,KAAK;QAC3B,IAAI,EAAE,GAAG,CAAC,QAAQ;QAClB,KAAK,EAAE,IAAA,qBAAU,EAAC,GAAG,CAAC,YAAY,CAAC;QACnC,OAAO,EAAE,EAAC,GAAG,GAAG,CAAC,OAAO,EAAC;QACzB,IAAI,EAAE,MAAM,IAAA,yBAAa,EAAC,GAAG,EAAE,aAAa,CAAC;QAC7C,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa;KAC7B,CAAC;AACH,CAAC,CAAC;AACF,kBAAe,iBAAiB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ServerResponse } from 'node:http';
2
+ import type HttpResponseType from '../../types/http.response.type';
3
+ declare const writeNodeResponse: (res: ServerResponse, response: HttpResponseType) => void;
4
+ export default writeNodeResponse;
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const writeNodeResponse = (res, response) => {
4
+ const body = response.body;
5
+ const payload = undefined === body || 'string' === typeof body ? body : JSON.stringify(body);
6
+ res.writeHead(response.status, response.headers);
7
+ res.end(payload);
8
+ };
9
+ exports.default = writeNodeResponse;
10
+ //# sourceMappingURL=write.node.response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.node.response.js","sourceRoot":"","sources":["../../../src/adapters/node/write.node.response.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAMb,MAAM,iBAAiB,GAAG,CAAC,GAAmB,EAAE,QAA0B,EAAQ,EAAE;IACnF,MAAM,IAAI,GAAY,QAAQ,CAAC,IAAI,CAAC;IACpC,MAAM,OAAO,GAAuB,SAAS,KAAK,IAAI,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,CAAE,IAA2B,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACzI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAClB,CAAC,CAAC;AACF,kBAAe,iBAAiB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type ClientMetadataType from '../types/client.metadata.type';
2
+ import type IMetadataCache from '../types/i.metadata.cache';
3
+ export default class LruMetadataCache implements IMetadataCache {
4
+ private readonly maxEntries;
5
+ private readonly now;
6
+ private entries;
7
+ constructor(maxEntries?: number, now?: () => number);
8
+ get(url: string): Promise<ClientMetadataType | undefined>;
9
+ set(url: string, value: ClientMetadataType, ttlSeconds: number): Promise<void>;
10
+ }