mcp-auth-server 0.0.0-stage → 0.1.1

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
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class LruMetadataCache {
4
+ maxEntries;
5
+ now;
6
+ entries = new Map();
7
+ constructor(maxEntries = 500, now = Date.now) {
8
+ this.maxEntries = maxEntries;
9
+ this.now = now;
10
+ }
11
+ async get(url) {
12
+ const entry = this.entries.get(url);
13
+ if (!entry)
14
+ return undefined;
15
+ if (entry.expiresAt <= this.now()) {
16
+ this.entries.delete(url);
17
+ return undefined;
18
+ }
19
+ this.entries.delete(url);
20
+ this.entries.set(url, entry);
21
+ return entry.value;
22
+ }
23
+ async set(url, value, ttlSeconds) {
24
+ this.entries.delete(url);
25
+ this.entries.set(url, { value, expiresAt: this.now() + ttlSeconds * 1000 });
26
+ while (this.entries.size > this.maxEntries)
27
+ this.entries.delete(this.entries.keys().next().value);
28
+ }
29
+ }
30
+ exports.default = LruMetadataCache;
31
+ //# sourceMappingURL=lru.metadata.cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lru.metadata.cache.js","sourceRoot":"","sources":["../../src/cache/lru.metadata.cache.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAKb,MAAqB,gBAAgB;IAIlB;IACA;IAJV,OAAO,GAAgE,IAAI,GAAG,EAAE,CAAC;IAEzF,YACkB,aAAqB,GAAG,EACxB,MAAoB,IAAI,CAAC,GAAG;QAD5B,eAAU,GAAV,UAAU,CAAc;QACxB,QAAG,GAAH,GAAG,CAAyB;IAC3C,CAAC;IAEJ,KAAK,CAAC,GAAG,CAAC,GAAW;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7B,OAAO,KAAK,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAyB,EAAE,UAAkB;QACnE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,GAAG,IAAI,EAAC,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAe,CAAC,CAAC;IAC7G,CAAC;CACD;AAzBD,mCAyBC"}
@@ -0,0 +1,2 @@
1
+ declare const parseBody: (contentType: string | undefined, raw: string) => unknown;
2
+ export default parseBody;
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const parseBody = (contentType, raw) => {
4
+ if (!raw)
5
+ return undefined;
6
+ const type = (contentType ?? '').toLowerCase();
7
+ if (type.includes('application/x-www-form-urlencoded'))
8
+ return Object.fromEntries(new URLSearchParams(raw));
9
+ if (type.includes('json') || !type) {
10
+ try {
11
+ return JSON.parse(raw);
12
+ }
13
+ catch {
14
+ return undefined;
15
+ }
16
+ }
17
+ return undefined;
18
+ };
19
+ exports.default = parseBody;
20
+ //# sourceMappingURL=parse.body.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.body.js","sourceRoot":"","sources":["../../../src/functions/body/parse.body.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,MAAM,SAAS,GAAG,CAAC,WAA+B,EAAE,GAAW,EAAW,EAAE;IAC3E,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,IAAI,GAAW,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,IAAI,IAAI,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAAE,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5G,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,SAAS,CAAC;QAClB,CAAC;IACF,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC,CAAC;AACF,kBAAe,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const parseQuery: (search: string | URLSearchParams) => Record<string, string | string[]>;
2
+ export default parseQuery;
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const parseQuery = (search) => {
4
+ const params = 'string' === typeof search ? new URLSearchParams(search) : search;
5
+ const query = {};
6
+ for (const [key, value] of params) {
7
+ const existing = query[key];
8
+ if (undefined === existing)
9
+ query[key] = value;
10
+ else
11
+ query[key] = [].concat(existing, value);
12
+ }
13
+ return query;
14
+ };
15
+ exports.default = parseQuery;
16
+ //# sourceMappingURL=parse.query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.query.js","sourceRoot":"","sources":["../../../src/functions/body/parse.query.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,MAAM,UAAU,GAAG,CAAC,MAAgC,EAAqC,EAAE;IAC1F,MAAM,MAAM,GAAoB,QAAQ,KAAK,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAClG,MAAM,KAAK,GAAsC,EAAE,CAAC;IACpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAkC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,SAAS,KAAK,QAAQ;YAAE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;;YAC1C,KAAK,CAAC,GAAG,CAAC,GAAI,EAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AACF,kBAAe,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const assertPublicHost: (url: URL) => void;
2
+ export default assertPublicHost;
@@ -0,0 +1,15 @@
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 is_private_ipv4_1 = __importDefault(require("./is.private.ipv4"));
7
+ const is_private_ipv6_1 = __importDefault(require("./is.private.ipv6"));
8
+ const internalName = /(^|\.)(localhost|local|internal|localdomain|home\.arpa)$/;
9
+ const assertPublicHost = (url) => {
10
+ const host = url.hostname.toLowerCase();
11
+ if (internalName.test(host) || (0, is_private_ipv4_1.default)(host) || (0, is_private_ipv6_1.default)(host))
12
+ throw new Error('client metadata host is not a public address');
13
+ };
14
+ exports.default = assertPublicHost;
15
+ //# sourceMappingURL=assert.public.host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert.public.host.js","sourceRoot":"","sources":["../../../src/functions/cimd/assert.public.host.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAEb,wEAA8C;AAC9C,wEAA8C;AAE9C,MAAM,YAAY,GAAW,0DAA0D,CAAC;AAExF,MAAM,gBAAgB,GAAG,CAAC,GAAQ,EAAQ,EAAE;IAC3C,MAAM,IAAI,GAAW,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAChD,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAA,yBAAa,EAAC,IAAI,CAAC,IAAI,IAAA,yBAAa,EAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;AAC5I,CAAC,CAAC;AACF,kBAAe,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const cacheSeconds: (header: string | null, maxCacheSeconds: number, defaultCacheSeconds: number) => number;
2
+ export default cacheSeconds;
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const cacheSeconds = (header, maxCacheSeconds, defaultCacheSeconds) => {
4
+ if (!header)
5
+ return defaultCacheSeconds;
6
+ const directives = header
7
+ .toLowerCase()
8
+ .split(',')
9
+ .map((part) => part.trim());
10
+ if (directives.some((directive) => 'no-store' === directive || 'no-cache' === directive))
11
+ return 0;
12
+ const maxAge = directives.map((directive) => /^max-age=(\d+)$/.exec(directive)).find(Boolean);
13
+ return maxAge ? Math.min(Number(maxAge[1]), maxCacheSeconds) : defaultCacheSeconds;
14
+ };
15
+ exports.default = cacheSeconds;
16
+ //# sourceMappingURL=cache.seconds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.seconds.js","sourceRoot":"","sources":["../../../src/functions/cimd/cache.seconds.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,MAAM,YAAY,GAAG,CAAC,MAAqB,EAAE,eAAuB,EAAE,mBAA2B,EAAU,EAAE;IAC5G,IAAI,CAAC,MAAM;QAAE,OAAO,mBAAmB,CAAC;IACxC,MAAM,UAAU,GAAa,MAAM;SACjC,WAAW,EAAE;SACb,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,SAAiB,EAAW,EAAE,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,CAAC;QAAE,OAAO,CAAC,CAAC;IACpH,MAAM,MAAM,GAAgC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAiB,EAA0B,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAC7H,CAAC;IAC7B,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC;AACpF,CAAC,CAAC;AACF,kBAAe,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type CimdOptionsType from '../../types/cimd.options.type';
2
+ import type IMetadataCache from '../../types/i.metadata.cache';
3
+ import type MetadataResolutionType from '../../types/metadata.resolution.type';
4
+ declare const createMetadataResolver: (options: CimdOptionsType, cache: IMetadataCache) => ((clientId: string) => Promise<MetadataResolutionType>);
5
+ export default createMetadataResolver;
@@ -0,0 +1,53 @@
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 assert_public_host_1 = __importDefault(require("./assert.public.host"));
7
+ const cache_seconds_1 = __importDefault(require("./cache.seconds"));
8
+ const host_matches_1 = __importDefault(require("./host.matches"));
9
+ const read_limited_1 = __importDefault(require("./read.limited"));
10
+ const validate_metadata_document_1 = __importDefault(require("./validate.metadata.document"));
11
+ const createMetadataResolver = (options, cache) => {
12
+ const fetchImpl = options.fetch ?? ((input, init) => fetch(input, init));
13
+ const timeoutMs = options.timeoutMs ?? 5000;
14
+ const maxBytes = options.maxBytes ?? 5120;
15
+ const maxCacheSeconds = options.maxCacheSeconds ?? 3600;
16
+ const defaultCacheSeconds = options.defaultCacheSeconds ?? 300;
17
+ return async (clientId) => {
18
+ try {
19
+ const url = new URL(clientId);
20
+ const host = url.hostname.toLowerCase();
21
+ if (options.trust?.denyHosts && (0, host_matches_1.default)(host, options.trust.denyHosts))
22
+ throw new Error('client host is denied');
23
+ if (options.trust?.allowHosts && !(0, host_matches_1.default)(host, options.trust.allowHosts))
24
+ throw new Error('client host is not allowed');
25
+ const cached = await cache.get(clientId);
26
+ if (cached)
27
+ return { ok: true, metadata: cached };
28
+ (0, assert_public_host_1.default)(url);
29
+ await options.guard?.(url);
30
+ const response = await fetchImpl(clientId, { redirect: 'manual', headers: { accept: 'application/json' }, signal: AbortSignal.timeout(timeoutMs) });
31
+ if (200 !== response.status)
32
+ throw new Error(`client metadata fetch returned status ${response.status}`);
33
+ const text = await (0, read_limited_1.default)(response, maxBytes);
34
+ let parsed;
35
+ try {
36
+ parsed = JSON.parse(text);
37
+ }
38
+ catch {
39
+ throw new Error('client metadata document is not valid JSON');
40
+ }
41
+ const metadata = (0, validate_metadata_document_1.default)(parsed, clientId);
42
+ const seconds = (0, cache_seconds_1.default)(response.headers.get('cache-control'), maxCacheSeconds, defaultCacheSeconds);
43
+ if (seconds > 0)
44
+ await cache.set(clientId, metadata, seconds);
45
+ return { ok: true, metadata };
46
+ }
47
+ catch (error) {
48
+ return { ok: false, reason: error instanceof Error ? error.message : 'client metadata fetch failed' };
49
+ }
50
+ };
51
+ };
52
+ exports.default = createMetadataResolver;
53
+ //# sourceMappingURL=create.metadata.resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.metadata.resolver.js","sourceRoot":"","sources":["../../../src/functions/cimd/create.metadata.resolver.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAKb,8EAAoD;AACpD,oEAA2C;AAC3C,kEAAyC;AACzC,kEAAyC;AACzC,8FAAoE;AAEpE,MAAM,sBAAsB,GAAG,CAAC,OAAwB,EAAE,KAAqB,EAA2D,EAAE;IAC3I,MAAM,SAAS,GAAiB,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,KAAU,EAAE,IAAkB,EAAqB,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7H,MAAM,SAAS,GAAW,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;IACpD,MAAM,QAAQ,GAAW,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;IAClD,MAAM,eAAe,GAAW,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC;IAChE,MAAM,mBAAmB,GAAW,OAAO,CAAC,mBAAmB,IAAI,GAAG,CAAC;IAEvE,OAAO,KAAK,EAAE,QAAgB,EAAmC,EAAE;QAClE,IAAI,CAAC;YACJ,MAAM,GAAG,GAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,IAAI,GAAW,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAChD,IAAI,OAAO,CAAC,KAAK,EAAE,SAAS,IAAI,IAAA,sBAAW,EAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACrH,IAAI,OAAO,CAAC,KAAK,EAAE,UAAU,IAAI,CAAC,IAAA,sBAAW,EAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAE7H,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,MAAM;gBAAE,OAAO,EAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAC,CAAC;YAEhD,IAAA,4BAAgB,EAAC,GAAG,CAAC,CAAC;YACtB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;YAE3B,MAAM,QAAQ,GAAa,MAAM,SAAS,CAAC,QAAQ,EAAE,EAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAC,MAAM,EAAE,kBAAkB,EAAC,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,EAAC,CAAC,CAAC;YAC1J,IAAI,GAAG,KAAK,QAAQ,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACzG,MAAM,IAAI,GAAW,MAAM,IAAA,sBAAW,EAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC3D,IAAI,MAAe,CAAC;YACpB,IAAI,CAAC;gBACJ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACR,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAC/D,CAAC;YACD,MAAM,QAAQ,GAAG,IAAA,oCAAwB,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAE5D,MAAM,OAAO,GAAW,IAAA,uBAAY,EAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,eAAe,EAAE,mBAAmB,CAAC,CAAC;YAClH,IAAI,OAAO,GAAG,CAAC;gBAAE,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC9D,OAAO,EAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,EAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B,EAAC,CAAC;QACrG,CAAC;IACF,CAAC,CAAC;AACH,CAAC,CAAC;AACF,kBAAe,sBAAsB,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const hostMatches: (host: string, patterns: string[]) => boolean;
2
+ export default hostMatches;
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const hostMatches = (host, patterns) => patterns.some((pattern) => (pattern.startsWith('*.') ? host.endsWith(pattern.slice(1)) : host === pattern));
4
+ exports.default = hostMatches;
5
+ //# sourceMappingURL=host.matches.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.matches.js","sourceRoot":"","sources":["../../../src/functions/cimd/host.matches.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,QAAkB,EAAW,EAAE,CACjE,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAe,EAAW,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC;AAC9H,kBAAe,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const isMetadataClientId: (clientId: string) => boolean;
2
+ export default isMetadataClientId;
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const isMetadataClientId = (clientId) => {
4
+ let url;
5
+ try {
6
+ url = new URL(clientId);
7
+ }
8
+ catch {
9
+ return false;
10
+ }
11
+ return 'https:' === url.protocol && '/' !== url.pathname && !url.hash && !url.username && !url.password && url.href === clientId;
12
+ };
13
+ exports.default = isMetadataClientId;
14
+ //# sourceMappingURL=is.metadata.client.id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is.metadata.client.id.js","sourceRoot":"","sources":["../../../src/functions/cimd/is.metadata.client.id.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,MAAM,kBAAkB,GAAG,CAAC,QAAgB,EAAW,EAAE;IACxD,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACJ,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,QAAQ,KAAK,GAAG,CAAC,QAAQ,IAAI,GAAG,KAAK,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC;AAClI,CAAC,CAAC;AACF,kBAAe,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const isPrivateIpv4: (host: string) => boolean;
2
+ export default isPrivateIpv4;
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const isPrivateIpv4 = (host) => {
4
+ const match = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(host);
5
+ if (!match)
6
+ return false;
7
+ const [a, b] = [Number(match[1]), Number(match[2])];
8
+ return (0 === a ||
9
+ 10 === a ||
10
+ 127 === a ||
11
+ (169 === a && 254 === b) ||
12
+ (172 === a && b >= 16 && b <= 31) ||
13
+ (192 === a && 168 === b) ||
14
+ (100 === a && b >= 64 && b <= 127) ||
15
+ a >= 224);
16
+ };
17
+ exports.default = isPrivateIpv4;
18
+ //# sourceMappingURL=is.private.ipv4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is.private.ipv4.js","sourceRoot":"","sources":["../../../src/functions/cimd/is.private.ipv4.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,MAAM,aAAa,GAAG,CAAC,IAAY,EAAW,EAAE;IAC/C,MAAM,KAAK,GAA2B,8CAA8C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChG,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,OAAO,CACN,CAAC,KAAK,CAAC;QACP,EAAE,KAAK,CAAC;QACR,GAAG,KAAK,CAAC;QACT,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;QACxB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACjC,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;QACxB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC;QAClC,CAAC,IAAI,GAAG,CACR,CAAC;AACH,CAAC,CAAC;AACF,kBAAe,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const isPrivateIpv6: (host: string) => boolean;
2
+ export default isPrivateIpv6;
@@ -0,0 +1,17 @@
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 is_private_ipv4_1 = __importDefault(require("./is.private.ipv4"));
7
+ const isPrivateIpv6 = (host) => {
8
+ const address = host.replace(/^\[|\]$/g, '').toLowerCase();
9
+ if (!address.includes(':'))
10
+ return false;
11
+ const mapped = /^::ffff:(\d+\.\d+\.\d+\.\d+)$/.exec(address);
12
+ if (mapped)
13
+ return (0, is_private_ipv4_1.default)(mapped[1]);
14
+ return '::' === address || '::1' === address || /^f[cd]/.test(address) || /^fe[89ab]/.test(address) || address.startsWith('::ffff:');
15
+ };
16
+ exports.default = isPrivateIpv6;
17
+ //# sourceMappingURL=is.private.ipv6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is.private.ipv6.js","sourceRoot":"","sources":["../../../src/functions/cimd/is.private.ipv6.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAEb,wEAA8C;AAE9C,MAAM,aAAa,GAAG,CAAC,IAAY,EAAW,EAAE;IAC/C,MAAM,OAAO,GAAW,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACnE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,MAAM,MAAM,GAA2B,+BAA+B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrF,IAAI,MAAM;QAAE,OAAO,IAAA,yBAAa,EAAC,MAAM,CAAC,CAAC,CAAW,CAAC,CAAC;IACtD,OAAO,IAAI,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACtI,CAAC,CAAC;AACF,kBAAe,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const readLimited: (response: Response, maxBytes: number) => Promise<string>;
2
+ export default readLimited;
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const readLimited = async (response, maxBytes) => {
4
+ const declared = Number(response.headers.get('content-length'));
5
+ if (declared > maxBytes)
6
+ throw new Error('client metadata document is too large');
7
+ if (!response.body)
8
+ return '';
9
+ const reader = response.body.getReader();
10
+ const chunks = [];
11
+ let total = 0;
12
+ for (;;) {
13
+ const { done, value } = await reader.read();
14
+ if (done)
15
+ break;
16
+ total += value.byteLength;
17
+ if (total > maxBytes) {
18
+ await reader.cancel();
19
+ throw new Error('client metadata document is too large');
20
+ }
21
+ chunks.push(value);
22
+ }
23
+ const bytes = new Uint8Array(total);
24
+ let offset = 0;
25
+ for (const chunk of chunks) {
26
+ bytes.set(chunk, offset);
27
+ offset += chunk.byteLength;
28
+ }
29
+ return new TextDecoder().decode(bytes);
30
+ };
31
+ exports.default = readLimited;
32
+ //# sourceMappingURL=read.limited.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.limited.js","sourceRoot":"","sources":["../../../src/functions/cimd/read.limited.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,MAAM,WAAW,GAAG,KAAK,EAAE,QAAkB,EAAE,QAAgB,EAAmB,EAAE;IACnF,MAAM,QAAQ,GAAW,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACxE,IAAI,QAAQ,GAAG,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAClF,IAAI,CAAC,QAAQ,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACzC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAI,KAAK,GAAW,CAAC,CAAC;IACtB,SAAS,CAAC;QACT,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,IAAI;YAAE,MAAM;QAChB,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC;QAC1B,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;YACtB,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IACD,MAAM,KAAK,GAAe,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,MAAM,GAAW,CAAC,CAAC;IACvB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC;IAC5B,CAAC;IACD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC,CAAC;AACF,kBAAe,WAAW,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type ClientMetadataType from '../../types/client.metadata.type';
2
+ declare const validateMetadataDocument: (document: unknown, url: string) => ClientMetadataType;
3
+ export default validateMetadataDocument;
@@ -0,0 +1,25 @@
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 is_safe_metadata_redirect_uri_1 = __importDefault(require("../redirect/is.safe.metadata.redirect.uri"));
7
+ const validateMetadataDocument = (document, url) => {
8
+ if (!document || 'object' !== typeof document || Array.isArray(document))
9
+ throw new Error('client metadata document must be a JSON object');
10
+ const metadata = document;
11
+ if (metadata.client_id !== url)
12
+ throw new Error('client_id in the metadata document does not match its URL');
13
+ if ('string' !== typeof metadata.client_name || !metadata.client_name.trim())
14
+ throw new Error('client metadata document requires client_name');
15
+ const uris = metadata.redirect_uris;
16
+ if (!Array.isArray(uris) || 0 === uris.length || !uris.every(is_safe_metadata_redirect_uri_1.default))
17
+ throw new Error('client metadata document requires valid redirect_uris');
18
+ if (undefined !== metadata.client_secret || undefined !== metadata.client_secret_expires_at)
19
+ throw new Error('client metadata document must not contain client secrets');
20
+ if (undefined !== metadata.token_endpoint_auth_method && 'none' !== metadata.token_endpoint_auth_method)
21
+ throw new Error('only token_endpoint_auth_method none is supported');
22
+ return metadata;
23
+ };
24
+ exports.default = validateMetadataDocument;
25
+ //# sourceMappingURL=validate.metadata.document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.metadata.document.js","sourceRoot":"","sources":["../../../src/functions/cimd/validate.metadata.document.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAGb,8GAAkF;AAElF,MAAM,wBAAwB,GAAG,CAAC,QAAiB,EAAE,GAAW,EAAsB,EAAE;IACvF,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,OAAO,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAC5I,MAAM,QAAQ,GAA4B,QAAmC,CAAC;IAC9E,IAAI,QAAQ,CAAC,SAAS,KAAK,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC7G,IAAI,QAAQ,KAAK,OAAO,QAAQ,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAC/I,MAAM,IAAI,GAAY,QAAQ,CAAC,aAAa,CAAC;IAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,uCAAyB,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAClK,IAAI,SAAS,KAAK,QAAQ,CAAC,aAAa,IAAI,SAAS,KAAK,QAAQ,CAAC,wBAAwB;QAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IACzK,IAAI,SAAS,KAAK,QAAQ,CAAC,0BAA0B,IAAI,MAAM,KAAK,QAAQ,CAAC,0BAA0B;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAC9K,OAAO,QAA8B,CAAC;AACvC,CAAC,CAAC;AACF,kBAAe,wBAAwB,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const consentStyles: string;
2
+ export default consentStyles;
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const consentStyles = `
4
+ :root{color-scheme:light dark}
5
+ *{box-sizing:border-box}
6
+ body{margin:0;min-height:100vh;display:flex;flex-direction:column;align-items:center;background:Canvas;color:CanvasText;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;line-height:1.5}
7
+ header{width:100%;padding:1rem 1.5rem;border-bottom:1px solid GrayText;font-weight:700;display:flex;gap:.75rem}
8
+ .env{margin-left:auto;padding:.1rem .6rem;border:1px solid currentColor;font-size:.8rem;text-transform:uppercase}
9
+ main{width:100%;max-width:34rem;margin:3rem 1rem;padding:2rem;border:1px solid GrayText;border-radius:6px}
10
+ h1{margin:0 0 1rem;font-size:1.5rem;line-height:1.25}
11
+ .host{font-weight:400;font-size:.95rem;color:GrayText}
12
+ .user,.warn{margin:0 0 1rem;padding:.6rem .9rem;border-left:3px solid currentColor}
13
+ .muted{color:GrayText;font-size:.9rem}
14
+ .actions{display:flex;gap:.75rem;flex-wrap:wrap;margin-top:1.5rem}
15
+ button{font:inherit;font-weight:700;padding:.7rem 1.6rem;border-radius:4px;cursor:pointer;border:2px solid currentColor;background:transparent;color:inherit}
16
+ button.approve{background:CanvasText;color:Canvas}
17
+ button:focus-visible{outline:3px solid Highlight;outline-offset:2px}
18
+ `;
19
+ exports.default = consentStyles;
20
+ //# sourceMappingURL=consent.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consent.styles.js","sourceRoot":"","sources":["../../../src/functions/consent/consent.styles.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,MAAM,aAAa,GAAW;;;;;;;;;;;;;;;CAe7B,CAAC;AACF,kBAAe,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const escapeHtml: (value: string) => string;
2
+ export default escapeHtml;
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const escapeHtml = (value) => value.replace(/[&<>"']/g, (char) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' })[char]);
4
+ exports.default = escapeHtml;
5
+ //# sourceMappingURL=escape.html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escape.html.js","sourceRoot":"","sources":["../../../src/functions/consent/escape.html.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE,CAC5C,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,CAAC,EAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAC,CAAC,CAAC,IAAI,CAAW,CAAC,CAAC;AAC9I,kBAAe,UAAU,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type ConsentModelType from '../../types/consent.model.type';
2
+ declare const renderDefaultConsent: (model: ConsentModelType) => string;
3
+ export default renderDefaultConsent;
@@ -0,0 +1,50 @@
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 consent_styles_1 = __importDefault(require("./consent.styles"));
7
+ const escape_html_1 = __importDefault(require("./escape.html"));
8
+ const renderDefaultConsent = (model) => {
9
+ const name = (0, escape_html_1.default)(model.clientName || 'An MCP client');
10
+ const product = (0, escape_html_1.default)(model.environmentLabel ? `${model.productName} (${model.environmentLabel})` : model.productName);
11
+ const target = (0, escape_html_1.default)(model.redirectTarget);
12
+ const host = model.clientHost ? `<span class="host">${(0, escape_html_1.default)(model.clientHost)}</span>` : '';
13
+ const identity = model.metadataDocument
14
+ ? `<p class="muted">The name <strong>${name}</strong> is declared by the client itself and is not verified. It is identified by <strong>${(0, escape_html_1.default)(model.clientHost ?? model.clientId)}</strong>.</p>`
15
+ : '';
16
+ const localhost = model.redirectIsLocalhost
17
+ ? '<p class="warn">This client receives the result on your own computer (localhost). Any program on this machine could claim to be this client.</p>'
18
+ : '';
19
+ const signedInAs = model.userDisplayName ? `<p class="user">Signing in as <strong>${(0, escape_html_1.default)(model.userDisplayName)}</strong></p>` : '';
20
+ const env = model.environmentLabel ? `<span class="env">${(0, escape_html_1.default)(model.environmentLabel)}</span>` : '';
21
+ return `<!doctype html>
22
+ <html lang="en">
23
+ <head>
24
+ <meta charset="utf-8">
25
+ <meta name="viewport" content="width=device-width, initial-scale=1">
26
+ <title>Authorize ${name} - ${product}</title>
27
+ <style>${consent_styles_1.default}</style>
28
+ </head>
29
+ <body>
30
+ <header><span>${(0, escape_html_1.default)(model.productName)}</span>${env}</header>
31
+ <main>
32
+ <h1>${name} ${host}<br>wants to connect to ${product}</h1>
33
+ ${signedInAs}
34
+ ${identity}
35
+ ${localhost}
36
+ <p class="muted">After you decide, you are sent back to <strong>${target}</strong>. Only approve clients you started yourself.</p>
37
+ <form method="post" action="${(0, escape_html_1.default)(model.action)}">
38
+ <input type="hidden" name="state" value="${(0, escape_html_1.default)(model.state)}">
39
+ <div class="actions">
40
+ <button class="approve" type="submit" name="decision" value="approve">Approve</button>
41
+ <button type="submit" name="decision" value="deny">Deny</button>
42
+ </div>
43
+ </form>
44
+ </main>
45
+ </body>
46
+ </html>
47
+ `;
48
+ };
49
+ exports.default = renderDefaultConsent;
50
+ //# sourceMappingURL=render.default.consent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.default.consent.js","sourceRoot":"","sources":["../../../src/functions/consent/render.default.consent.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAGb,sEAA6C;AAC7C,gEAAuC;AAEvC,MAAM,oBAAoB,GAAG,CAAC,KAAuB,EAAU,EAAE;IAChE,MAAM,IAAI,GAAW,IAAA,qBAAU,EAAC,KAAK,CAAC,UAAU,IAAI,eAAe,CAAC,CAAC;IACrE,MAAM,OAAO,GAAW,IAAA,qBAAU,EAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACpI,MAAM,MAAM,GAAW,IAAA,qBAAU,EAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACxD,MAAM,IAAI,GAAW,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,sBAAsB,IAAA,qBAAU,EAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACzG,MAAM,QAAQ,GAAW,KAAK,CAAC,gBAAgB;QAC9C,CAAC,CAAC,qCAAqC,IAAI,+FAA+F,IAAA,qBAAU,EAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,CAAC,gBAAgB;QACxM,CAAC,CAAC,EAAE,CAAC;IACN,MAAM,SAAS,GAAW,KAAK,CAAC,mBAAmB;QAClD,CAAC,CAAC,kJAAkJ;QACpJ,CAAC,CAAC,EAAE,CAAC;IACN,MAAM,UAAU,GAAW,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,yCAAyC,IAAA,qBAAU,EAAC,KAAK,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAClJ,MAAM,GAAG,GAAW,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,qBAAqB,IAAA,qBAAU,EAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAEnH,OAAO;;;;;mBAKW,IAAI,MAAM,OAAO;SAC3B,wBAAa;;;gBAGN,IAAA,qBAAU,EAAC,KAAK,CAAC,WAAW,CAAC,UAAU,GAAG;;MAEpD,IAAI,IAAI,IAAI,2BAA2B,OAAO;EAClD,UAAU;EACV,QAAQ;EACR,SAAS;kEACuD,MAAM;8BAC1C,IAAA,qBAAU,EAAC,KAAK,CAAC,MAAM,CAAC;2CACX,IAAA,qBAAU,EAAC,KAAK,CAAC,KAAK,CAAC;;;;;;;;;CASjE,CAAC;AACF,CAAC,CAAC;AACF,kBAAe,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const randomId: () => string;
2
+ export default randomId;
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const randomId = () => crypto.randomUUID();
4
+ exports.default = randomId;
5
+ //# sourceMappingURL=random.id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"random.id.js","sourceRoot":"","sources":["../../../src/functions/crypto/random.id.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,MAAM,QAAQ,GAAG,GAAW,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;AACnD,kBAAe,QAAQ,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const randomToken: (byteLength?: number) => string;
2
+ export default randomToken;
@@ -0,0 +1,9 @@
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_base64_url_1 = __importDefault(require("./to.base64.url"));
7
+ const randomToken = (byteLength = 32) => (0, to_base64_url_1.default)(crypto.getRandomValues(new Uint8Array(byteLength)));
8
+ exports.default = randomToken;
9
+ //# sourceMappingURL=random.token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"random.token.js","sourceRoot":"","sources":["../../../src/functions/crypto/random.token.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAEb,oEAA0C;AAE1C,MAAM,WAAW,GAAG,CAAC,aAAqB,EAAE,EAAU,EAAE,CAAC,IAAA,uBAAW,EAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACzH,kBAAe,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const sha256Base64Url: (value: string) => Promise<string>;
2
+ export default sha256Base64Url;
@@ -0,0 +1,10 @@
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 sha256_digest_1 = __importDefault(require("./sha256.digest"));
7
+ const to_base64_url_1 = __importDefault(require("./to.base64.url"));
8
+ const sha256Base64Url = async (value) => (0, to_base64_url_1.default)(await (0, sha256_digest_1.default)(value));
9
+ exports.default = sha256Base64Url;
10
+ //# sourceMappingURL=sha256.base64.url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sha256.base64.url.js","sourceRoot":"","sources":["../../../src/functions/crypto/sha256.base64.url.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAEb,oEAA2C;AAC3C,oEAA0C;AAE1C,MAAM,eAAe,GAAG,KAAK,EAAE,KAAa,EAAmB,EAAE,CAAC,IAAA,uBAAW,EAAC,MAAM,IAAA,uBAAY,EAAC,KAAK,CAAC,CAAC,CAAC;AACzG,kBAAe,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const sha256Digest: (value: string) => Promise<Uint8Array>;
2
+ export default sha256Digest;
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const sha256Digest = async (value) => new Uint8Array(await crypto.subtle.digest('SHA-256', new TextEncoder().encode(value)));
4
+ exports.default = sha256Digest;
5
+ //# sourceMappingURL=sha256.digest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sha256.digest.js","sourceRoot":"","sources":["../../../src/functions/crypto/sha256.digest.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,MAAM,YAAY,GAAG,KAAK,EAAE,KAAa,EAAuB,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1J,kBAAe,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const sha256Hex: (value: string) => Promise<string>;
2
+ export default sha256Hex;
@@ -0,0 +1,9 @@
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 sha256_digest_1 = __importDefault(require("./sha256.digest"));
7
+ const sha256Hex = async (value) => Array.from(await (0, sha256_digest_1.default)(value), (byte) => byte.toString(16).padStart(2, '0')).join('');
8
+ exports.default = sha256Hex;
9
+ //# sourceMappingURL=sha256.hex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sha256.hex.js","sourceRoot":"","sources":["../../../src/functions/crypto/sha256.hex.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAEb,oEAA2C;AAE3C,MAAM,SAAS,GAAG,KAAK,EAAE,KAAa,EAAmB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAA,uBAAY,EAAC,KAAK,CAAC,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzK,kBAAe,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const toBase64Url: (bytes: Uint8Array) => string;
2
+ export default toBase64Url;
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const toBase64Url = (bytes) => {
4
+ let binary = '';
5
+ for (const byte of bytes)
6
+ binary += String.fromCharCode(byte);
7
+ return btoa(binary).split('=')[0].replaceAll('+', '-').replaceAll('/', '_');
8
+ };
9
+ exports.default = toBase64Url;
10
+ //# sourceMappingURL=to.base64.url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to.base64.url.js","sourceRoot":"","sources":["../../../src/functions/crypto/to.base64.url.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,MAAM,WAAW,GAAG,CAAC,KAAiB,EAAU,EAAE;IACjD,IAAI,MAAM,GAAW,EAAE,CAAC;IACxB,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9D,OAAQ,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAY,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACzF,CAAC,CAAC;AACF,kBAAe,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const formParams: (body: unknown) => Record<string, unknown>;
2
+ export default formParams;