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.
- package/README.md +207 -2
- package/bin/keygen.mjs +26 -0
- package/lib/adapters/express/express.middleware.d.ts +4 -0
- package/lib/adapters/express/express.middleware.js +23 -0
- package/lib/adapters/express/express.middleware.js.map +1 -0
- package/lib/adapters/fastify/fastify.plugin.d.ts +4 -0
- package/lib/adapters/fastify/fastify.plugin.js +32 -0
- package/lib/adapters/fastify/fastify.plugin.js.map +1 -0
- package/lib/adapters/fetch/create.fetch.handler.d.ts +3 -0
- package/lib/adapters/fetch/create.fetch.handler.js +13 -0
- package/lib/adapters/fetch/create.fetch.handler.js.map +1 -0
- package/lib/adapters/fetch/to.http.request.d.ts +3 -0
- package/lib/adapters/fetch/to.http.request.js +22 -0
- package/lib/adapters/fetch/to.http.request.js.map +1 -0
- package/lib/adapters/fetch/to.response.d.ts +3 -0
- package/lib/adapters/fetch/to.response.js +10 -0
- package/lib/adapters/fetch/to.response.js.map +1 -0
- package/lib/adapters/koa/koa.middleware.d.ts +4 -0
- package/lib/adapters/koa/koa.middleware.js +19 -0
- package/lib/adapters/koa/koa.middleware.js.map +1 -0
- package/lib/adapters/node/create.node.handler.d.ts +4 -0
- package/lib/adapters/node/create.node.handler.js +16 -0
- package/lib/adapters/node/create.node.handler.js.map +1 -0
- package/lib/adapters/node/node.ssrf.guard.d.ts +2 -0
- package/lib/adapters/node/node.ssrf.guard.js +16 -0
- package/lib/adapters/node/node.ssrf.guard.js.map +1 -0
- package/lib/adapters/node/parse.node.body.d.ts +3 -0
- package/lib/adapters/node/parse.node.body.js +16 -0
- package/lib/adapters/node/parse.node.body.js.map +1 -0
- package/lib/adapters/node/read.node.body.d.ts +3 -0
- package/lib/adapters/node/read.node.body.js +10 -0
- package/lib/adapters/node/read.node.body.js.map +1 -0
- package/lib/adapters/node/to.node.http.request.d.ts +4 -0
- package/lib/adapters/node/to.node.http.request.js +20 -0
- package/lib/adapters/node/to.node.http.request.js.map +1 -0
- package/lib/adapters/node/write.node.response.d.ts +4 -0
- package/lib/adapters/node/write.node.response.js +10 -0
- package/lib/adapters/node/write.node.response.js.map +1 -0
- package/lib/cache/lru.metadata.cache.d.ts +10 -0
- package/lib/cache/lru.metadata.cache.js +31 -0
- package/lib/cache/lru.metadata.cache.js.map +1 -0
- package/lib/functions/body/parse.body.d.ts +2 -0
- package/lib/functions/body/parse.body.js +20 -0
- package/lib/functions/body/parse.body.js.map +1 -0
- package/lib/functions/body/parse.query.d.ts +2 -0
- package/lib/functions/body/parse.query.js +16 -0
- package/lib/functions/body/parse.query.js.map +1 -0
- package/lib/functions/cimd/assert.public.host.d.ts +2 -0
- package/lib/functions/cimd/assert.public.host.js +15 -0
- package/lib/functions/cimd/assert.public.host.js.map +1 -0
- package/lib/functions/cimd/cache.seconds.d.ts +2 -0
- package/lib/functions/cimd/cache.seconds.js +16 -0
- package/lib/functions/cimd/cache.seconds.js.map +1 -0
- package/lib/functions/cimd/create.metadata.resolver.d.ts +5 -0
- package/lib/functions/cimd/create.metadata.resolver.js +53 -0
- package/lib/functions/cimd/create.metadata.resolver.js.map +1 -0
- package/lib/functions/cimd/host.matches.d.ts +2 -0
- package/lib/functions/cimd/host.matches.js +5 -0
- package/lib/functions/cimd/host.matches.js.map +1 -0
- package/lib/functions/cimd/is.metadata.client.id.d.ts +2 -0
- package/lib/functions/cimd/is.metadata.client.id.js +14 -0
- package/lib/functions/cimd/is.metadata.client.id.js.map +1 -0
- package/lib/functions/cimd/is.private.ipv4.d.ts +2 -0
- package/lib/functions/cimd/is.private.ipv4.js +18 -0
- package/lib/functions/cimd/is.private.ipv4.js.map +1 -0
- package/lib/functions/cimd/is.private.ipv6.d.ts +2 -0
- package/lib/functions/cimd/is.private.ipv6.js +17 -0
- package/lib/functions/cimd/is.private.ipv6.js.map +1 -0
- package/lib/functions/cimd/read.limited.d.ts +2 -0
- package/lib/functions/cimd/read.limited.js +32 -0
- package/lib/functions/cimd/read.limited.js.map +1 -0
- package/lib/functions/cimd/validate.metadata.document.d.ts +3 -0
- package/lib/functions/cimd/validate.metadata.document.js +25 -0
- package/lib/functions/cimd/validate.metadata.document.js.map +1 -0
- package/lib/functions/consent/consent.styles.d.ts +2 -0
- package/lib/functions/consent/consent.styles.js +20 -0
- package/lib/functions/consent/consent.styles.js.map +1 -0
- package/lib/functions/consent/escape.html.d.ts +2 -0
- package/lib/functions/consent/escape.html.js +5 -0
- package/lib/functions/consent/escape.html.js.map +1 -0
- package/lib/functions/consent/render.default.consent.d.ts +3 -0
- package/lib/functions/consent/render.default.consent.js +50 -0
- package/lib/functions/consent/render.default.consent.js.map +1 -0
- package/lib/functions/crypto/random.id.d.ts +2 -0
- package/lib/functions/crypto/random.id.js +5 -0
- package/lib/functions/crypto/random.id.js.map +1 -0
- package/lib/functions/crypto/random.token.d.ts +2 -0
- package/lib/functions/crypto/random.token.js +9 -0
- package/lib/functions/crypto/random.token.js.map +1 -0
- package/lib/functions/crypto/sha256.base64.url.d.ts +2 -0
- package/lib/functions/crypto/sha256.base64.url.js +10 -0
- package/lib/functions/crypto/sha256.base64.url.js.map +1 -0
- package/lib/functions/crypto/sha256.digest.d.ts +2 -0
- package/lib/functions/crypto/sha256.digest.js +5 -0
- package/lib/functions/crypto/sha256.digest.js.map +1 -0
- package/lib/functions/crypto/sha256.hex.d.ts +2 -0
- package/lib/functions/crypto/sha256.hex.js +9 -0
- package/lib/functions/crypto/sha256.hex.js.map +1 -0
- package/lib/functions/crypto/to.base64.url.d.ts +2 -0
- package/lib/functions/crypto/to.base64.url.js +10 -0
- package/lib/functions/crypto/to.base64.url.js.map +1 -0
- package/lib/functions/http/form.params.d.ts +2 -0
- package/lib/functions/http/form.params.js +5 -0
- package/lib/functions/http/form.params.js.map +1 -0
- package/lib/functions/http/header.value.d.ts +3 -0
- package/lib/functions/http/header.value.js +8 -0
- package/lib/functions/http/header.value.js.map +1 -0
- package/lib/functions/http/json.response.d.ts +3 -0
- package/lib/functions/http/json.response.js +9 -0
- package/lib/functions/http/json.response.js.map +1 -0
- package/lib/functions/http/oauth.error.response.d.ts +3 -0
- package/lib/functions/http/oauth.error.response.js +9 -0
- package/lib/functions/http/oauth.error.response.js.map +1 -0
- package/lib/functions/http/plain.error.response.d.ts +3 -0
- package/lib/functions/http/plain.error.response.js +5 -0
- package/lib/functions/http/plain.error.response.js.map +1 -0
- package/lib/functions/http/query.param.d.ts +3 -0
- package/lib/functions/http/query.param.js +8 -0
- package/lib/functions/http/query.param.js.map +1 -0
- package/lib/functions/http/redirect.response.d.ts +3 -0
- package/lib/functions/http/redirect.response.js +5 -0
- package/lib/functions/http/redirect.response.js.map +1 -0
- package/lib/functions/http/text.value.d.ts +2 -0
- package/lib/functions/http/text.value.js +5 -0
- package/lib/functions/http/text.value.js.map +1 -0
- package/lib/functions/http/trim.trailing.slashes.d.ts +2 -0
- package/lib/functions/http/trim.trailing.slashes.js +10 -0
- package/lib/functions/http/trim.trailing.slashes.js.map +1 -0
- package/lib/functions/jwt/sign.access.token.d.ts +4 -0
- package/lib/functions/jwt/sign.access.token.js +21 -0
- package/lib/functions/jwt/sign.access.token.js.map +1 -0
- package/lib/functions/jwt/verify.access.token.d.ts +4 -0
- package/lib/functions/jwt/verify.access.token.js +16 -0
- package/lib/functions/jwt/verify.access.token.js.map +1 -0
- package/lib/functions/keys/der.length.d.ts +2 -0
- package/lib/functions/keys/der.length.js +12 -0
- package/lib/functions/keys/der.length.js.map +1 -0
- package/lib/functions/keys/is.rsa.key.d.ts +2 -0
- package/lib/functions/keys/is.rsa.key.js +8 -0
- package/lib/functions/keys/is.rsa.key.js.map +1 -0
- package/lib/functions/keys/normalize.pem.d.ts +2 -0
- package/lib/functions/keys/normalize.pem.js +16 -0
- package/lib/functions/keys/normalize.pem.js.map +1 -0
- package/lib/functions/keys/pkcs1.to.pkcs8.d.ts +2 -0
- package/lib/functions/keys/pkcs1.to.pkcs8.js +14 -0
- package/lib/functions/keys/pkcs1.to.pkcs8.js.map +1 -0
- package/lib/functions/keys/resolve.key.pair.d.ts +3 -0
- package/lib/functions/keys/resolve.key.pair.js +27 -0
- package/lib/functions/keys/resolve.key.pair.js.map +1 -0
- package/lib/functions/keys/signing.key.from.env.d.ts +2 -0
- package/lib/functions/keys/signing.key.from.env.js +14 -0
- package/lib/functions/keys/signing.key.from.env.js.map +1 -0
- package/lib/functions/keys/wrap.pem.d.ts +2 -0
- package/lib/functions/keys/wrap.pem.js +11 -0
- package/lib/functions/keys/wrap.pem.js.map +1 -0
- package/lib/functions/redirect/build.error.redirect.d.ts +2 -0
- package/lib/functions/redirect/build.error.redirect.js +9 -0
- package/lib/functions/redirect/build.error.redirect.js.map +1 -0
- package/lib/functions/redirect/build.redirect.d.ts +2 -0
- package/lib/functions/redirect/build.redirect.js +12 -0
- package/lib/functions/redirect/build.redirect.js.map +1 -0
- package/lib/functions/redirect/describe.redirect.target.d.ts +2 -0
- package/lib/functions/redirect/describe.redirect.target.js +8 -0
- package/lib/functions/redirect/describe.redirect.target.js.map +1 -0
- package/lib/functions/redirect/is.allowed.redirect.uri.d.ts +3 -0
- package/lib/functions/redirect/is.allowed.redirect.uri.js +19 -0
- package/lib/functions/redirect/is.allowed.redirect.uri.js.map +1 -0
- package/lib/functions/redirect/is.loopback.redirect.d.ts +2 -0
- package/lib/functions/redirect/is.loopback.redirect.js +13 -0
- package/lib/functions/redirect/is.loopback.redirect.js.map +1 -0
- package/lib/functions/redirect/is.safe.metadata.redirect.uri.d.ts +2 -0
- package/lib/functions/redirect/is.safe.metadata.redirect.uri.js +20 -0
- package/lib/functions/redirect/is.safe.metadata.redirect.uri.js.map +1 -0
- package/lib/functions/redirect/parse.url.d.ts +2 -0
- package/lib/functions/redirect/parse.url.js +14 -0
- package/lib/functions/redirect/parse.url.js.map +1 -0
- package/lib/functions/server/attach.and.continue.d.ts +6 -0
- package/lib/functions/server/attach.and.continue.js +15 -0
- package/lib/functions/server/attach.and.continue.js.map +1 -0
- package/lib/functions/server/authenticate.request.d.ts +5 -0
- package/lib/functions/server/authenticate.request.js +24 -0
- package/lib/functions/server/authenticate.request.js.map +1 -0
- package/lib/functions/server/awaiting.consent.d.ts +5 -0
- package/lib/functions/server/awaiting.consent.js +18 -0
- package/lib/functions/server/awaiting.consent.js.map +1 -0
- package/lib/functions/server/build.routes.d.ts +4 -0
- package/lib/functions/server/build.routes.js +40 -0
- package/lib/functions/server/build.routes.js.map +1 -0
- package/lib/functions/server/build.upstream.context.d.ts +6 -0
- package/lib/functions/server/build.upstream.context.js +11 -0
- package/lib/functions/server/build.upstream.context.js.map +1 -0
- package/lib/functions/server/challenge.response.d.ts +4 -0
- package/lib/functions/server/challenge.response.js +14 -0
- package/lib/functions/server/challenge.response.js.map +1 -0
- package/lib/functions/server/continue.with.user.d.ts +5 -0
- package/lib/functions/server/continue.with.user.js +18 -0
- package/lib/functions/server/continue.with.user.js.map +1 -0
- package/lib/functions/server/create.client.resolver.d.ts +6 -0
- package/lib/functions/server/create.client.resolver.js +26 -0
- package/lib/functions/server/create.client.resolver.js.map +1 -0
- package/lib/functions/server/create.mcp.auth.context.d.ts +4 -0
- package/lib/functions/server/create.mcp.auth.context.js +38 -0
- package/lib/functions/server/create.mcp.auth.context.js.map +1 -0
- package/lib/functions/server/create.mcp.auth.d.ts +4 -0
- package/lib/functions/server/create.mcp.auth.js +25 -0
- package/lib/functions/server/create.mcp.auth.js.map +1 -0
- package/lib/functions/server/deny.authorization.d.ts +5 -0
- package/lib/functions/server/deny.authorization.js +13 -0
- package/lib/functions/server/deny.authorization.js.map +1 -0
- package/lib/functions/server/exchange.authorization.code.d.ts +4 -0
- package/lib/functions/server/exchange.authorization.code.js +32 -0
- package/lib/functions/server/exchange.authorization.code.js.map +1 -0
- package/lib/functions/server/find.route.d.ts +4 -0
- package/lib/functions/server/find.route.js +5 -0
- package/lib/functions/server/find.route.js.map +1 -0
- package/lib/functions/server/handle.request.d.ts +6 -0
- package/lib/functions/server/handle.request.js +21 -0
- package/lib/functions/server/handle.request.js.map +1 -0
- package/lib/functions/server/has.credentials.d.ts +3 -0
- package/lib/functions/server/has.credentials.js +9 -0
- package/lib/functions/server/has.credentials.js.map +1 -0
- package/lib/functions/server/issue.authorization.code.d.ts +5 -0
- package/lib/functions/server/issue.authorization.code.js +24 -0
- package/lib/functions/server/issue.authorization.code.js.map +1 -0
- package/lib/functions/server/issue.tokens.d.ts +4 -0
- package/lib/functions/server/issue.tokens.js +30 -0
- package/lib/functions/server/issue.tokens.js.map +1 -0
- package/lib/functions/server/load.pending.d.ts +5 -0
- package/lib/functions/server/load.pending.js +13 -0
- package/lib/functions/server/load.pending.js.map +1 -0
- package/lib/functions/server/rotate.refresh.token.d.ts +4 -0
- package/lib/functions/server/rotate.refresh.token.js +33 -0
- package/lib/functions/server/rotate.refresh.token.js.map +1 -0
- package/lib/functions/server/token.failure.d.ts +3 -0
- package/lib/functions/server/token.failure.js +9 -0
- package/lib/functions/server/token.failure.js.map +1 -0
- package/lib/functions/sql/from.better.sqlite3.d.ts +10 -0
- package/lib/functions/sql/from.better.sqlite3.js +11 -0
- package/lib/functions/sql/from.better.sqlite3.js.map +1 -0
- package/lib/functions/sql/from.bun.sqlite.d.ts +7 -0
- package/lib/functions/sql/from.bun.sqlite.js +5 -0
- package/lib/functions/sql/from.bun.sqlite.js.map +1 -0
- package/lib/functions/sql/from.d1.d.ts +11 -0
- package/lib/functions/sql/from.d1.js +8 -0
- package/lib/functions/sql/from.d1.js.map +1 -0
- package/lib/functions/sql/from.node.sqlite.d.ts +7 -0
- package/lib/functions/sql/from.node.sqlite.js +5 -0
- package/lib/functions/sql/from.node.sqlite.js.map +1 -0
- package/lib/functions/sql/from.pg.d.ts +7 -0
- package/lib/functions/sql/from.pg.js +5 -0
- package/lib/functions/sql/from.pg.js.map +1 -0
- package/lib/functions/sql/from.postgres.js.d.ts +5 -0
- package/lib/functions/sql/from.postgres.js.js +5 -0
- package/lib/functions/sql/from.postgres.js.js.map +1 -0
- package/lib/functions/sql/optional.date.d.ts +2 -0
- package/lib/functions/sql/optional.date.js +5 -0
- package/lib/functions/sql/optional.date.js.map +1 -0
- package/lib/functions/sql/optional.number.d.ts +2 -0
- package/lib/functions/sql/optional.number.js +5 -0
- package/lib/functions/sql/optional.number.js.map +1 -0
- package/lib/functions/sql/optional.text.d.ts +2 -0
- package/lib/functions/sql/optional.text.js +5 -0
- package/lib/functions/sql/optional.text.js.map +1 -0
- package/lib/functions/sql/row.to.client.d.ts +4 -0
- package/lib/functions/sql/row.to.client.js +18 -0
- package/lib/functions/sql/row.to.client.js.map +1 -0
- package/lib/functions/sql/row.to.code.d.ts +4 -0
- package/lib/functions/sql/row.to.code.js +21 -0
- package/lib/functions/sql/row.to.code.js.map +1 -0
- package/lib/functions/sql/row.to.pending.d.ts +4 -0
- package/lib/functions/sql/row.to.pending.js +21 -0
- package/lib/functions/sql/row.to.pending.js.map +1 -0
- package/lib/functions/sql/row.to.refresh.token.d.ts +4 -0
- package/lib/functions/sql/row.to.refresh.token.js +22 -0
- package/lib/functions/sql/row.to.refresh.token.js.map +1 -0
- package/lib/functions/sql/sql.schema.d.ts +3 -0
- package/lib/functions/sql/sql.schema.js +62 -0
- package/lib/functions/sql/sql.schema.js.map +1 -0
- package/lib/functions/sql/to.dialect.sql.d.ts +3 -0
- package/lib/functions/sql/to.dialect.sql.js +13 -0
- package/lib/functions/sql/to.dialect.sql.js.map +1 -0
- package/lib/functions/upstream/app.session.upstream.d.ts +4 -0
- package/lib/functions/upstream/app.session.upstream.js +18 -0
- package/lib/functions/upstream/app.session.upstream.js.map +1 -0
- package/lib/functions/upstream/entra.upstream.d.ts +11 -0
- package/lib/functions/upstream/entra.upstream.js +16 -0
- package/lib/functions/upstream/entra.upstream.js.map +1 -0
- package/lib/functions/upstream/oidc.upstream.d.ts +4 -0
- package/lib/functions/upstream/oidc.upstream.js +82 -0
- package/lib/functions/upstream/oidc.upstream.js.map +1 -0
- package/lib/functions/upstream/verify.id.token.d.ts +3 -0
- package/lib/functions/upstream/verify.id.token.js +16 -0
- package/lib/functions/upstream/verify.id.token.js.map +1 -0
- package/lib/handlers/authorization.server.metadata.handler.d.ts +4 -0
- package/lib/handlers/authorization.server.metadata.handler.js +24 -0
- package/lib/handlers/authorization.server.metadata.handler.js.map +1 -0
- package/lib/handlers/authorize.handler.d.ts +5 -0
- package/lib/handlers/authorize.handler.js +58 -0
- package/lib/handlers/authorize.handler.js.map +1 -0
- package/lib/handlers/callback.handler.d.ts +5 -0
- package/lib/handlers/callback.handler.js +32 -0
- package/lib/handlers/callback.handler.js.map +1 -0
- package/lib/handlers/consent.decision.handler.d.ts +5 -0
- package/lib/handlers/consent.decision.handler.js +30 -0
- package/lib/handlers/consent.decision.handler.js.map +1 -0
- package/lib/handlers/consent.page.handler.d.ts +5 -0
- package/lib/handlers/consent.page.handler.js +43 -0
- package/lib/handlers/consent.page.handler.js.map +1 -0
- package/lib/handlers/protected.resource.metadata.handler.d.ts +4 -0
- package/lib/handlers/protected.resource.metadata.handler.js +9 -0
- package/lib/handlers/protected.resource.metadata.handler.js.map +1 -0
- package/lib/handlers/register.handler.d.ts +5 -0
- package/lib/handlers/register.handler.js +44 -0
- package/lib/handlers/register.handler.js.map +1 -0
- package/lib/handlers/resume.handler.d.ts +5 -0
- package/lib/handlers/resume.handler.js +25 -0
- package/lib/handlers/resume.handler.js.map +1 -0
- package/lib/handlers/revoke.handler.d.ts +5 -0
- package/lib/handlers/revoke.handler.js +27 -0
- package/lib/handlers/revoke.handler.js.map +1 -0
- package/lib/handlers/token.handler.d.ts +5 -0
- package/lib/handlers/token.handler.js +22 -0
- package/lib/handlers/token.handler.js.map +1 -0
- package/lib/mcp.auth.entra.d.ts +4 -0
- package/lib/mcp.auth.entra.js +11 -0
- package/lib/mcp.auth.entra.js.map +1 -0
- package/lib/mcp.auth.express.d.ts +4 -0
- package/lib/mcp.auth.express.js +11 -0
- package/lib/mcp.auth.express.js.map +1 -0
- package/lib/mcp.auth.fastify.d.ts +4 -0
- package/lib/mcp.auth.fastify.js +11 -0
- package/lib/mcp.auth.fastify.js.map +1 -0
- package/lib/mcp.auth.fetch.d.ts +6 -0
- package/lib/mcp.auth.fetch.js +15 -0
- package/lib/mcp.auth.fetch.js.map +1 -0
- package/lib/mcp.auth.koa.d.ts +4 -0
- package/lib/mcp.auth.koa.js +11 -0
- package/lib/mcp.auth.koa.js.map +1 -0
- package/lib/mcp.auth.memory.d.ts +4 -0
- package/lib/mcp.auth.memory.js +11 -0
- package/lib/mcp.auth.memory.js.map +1 -0
- package/lib/mcp.auth.mongodb.d.ts +6 -0
- package/lib/mcp.auth.mongodb.js +11 -0
- package/lib/mcp.auth.mongodb.js.map +1 -0
- package/lib/mcp.auth.node.d.ts +9 -0
- package/lib/mcp.auth.node.js +21 -0
- package/lib/mcp.auth.node.js.map +1 -0
- package/lib/mcp.auth.postgres.d.ts +11 -0
- package/lib/mcp.auth.postgres.js +20 -0
- package/lib/mcp.auth.postgres.js.map +1 -0
- package/lib/mcp.auth.server.d.ts +42 -0
- package/lib/mcp.auth.server.js +35 -0
- package/lib/mcp.auth.server.js.map +1 -0
- package/lib/mcp.auth.sqlite.d.ts +13 -0
- package/lib/mcp.auth.sqlite.js +24 -0
- package/lib/mcp.auth.sqlite.js.map +1 -0
- package/lib/storage/memory.storage.d.ts +30 -0
- package/lib/storage/memory.storage.js +91 -0
- package/lib/storage/memory.storage.js.map +1 -0
- package/lib/storage/mongodb.storage.d.ts +41 -0
- package/lib/storage/mongodb.storage.js +172 -0
- package/lib/storage/mongodb.storage.js.map +1 -0
- package/lib/storage/sql.storage.d.ts +35 -0
- package/lib/storage/sql.storage.js +128 -0
- package/lib/storage/sql.storage.js.map +1 -0
- package/lib/types/access.token.input.type.d.ts +9 -0
- package/lib/types/access.token.input.type.js +3 -0
- package/lib/types/access.token.input.type.js.map +1 -0
- package/lib/types/app.session.upstream.options.type.d.ts +7 -0
- package/lib/types/app.session.upstream.options.type.js +3 -0
- package/lib/types/app.session.upstream.options.type.js.map +1 -0
- package/lib/types/authenticate.result.type.d.ts +10 -0
- package/lib/types/authenticate.result.type.js +3 -0
- package/lib/types/authenticate.result.type.js.map +1 -0
- package/lib/types/authenticated.user.type.d.ts +5 -0
- package/lib/types/authenticated.user.type.js +3 -0
- package/lib/types/authenticated.user.type.js.map +1 -0
- package/lib/types/authorization.code.record.type.d.ts +11 -0
- package/lib/types/authorization.code.record.type.js +3 -0
- package/lib/types/authorization.code.record.type.js.map +1 -0
- package/lib/types/cimd.options.type.d.ts +16 -0
- package/lib/types/cimd.options.type.js +3 -0
- package/lib/types/cimd.options.type.js.map +1 -0
- package/lib/types/client.metadata.type.d.ts +7 -0
- package/lib/types/client.metadata.type.js +3 -0
- package/lib/types/client.metadata.type.js.map +1 -0
- package/lib/types/client.record.type.d.ts +11 -0
- package/lib/types/client.record.type.js +3 -0
- package/lib/types/client.record.type.js.map +1 -0
- package/lib/types/consent.model.type.d.ts +15 -0
- package/lib/types/consent.model.type.js +3 -0
- package/lib/types/consent.model.type.js.map +1 -0
- package/lib/types/consent.record.type.d.ts +5 -0
- package/lib/types/consent.record.type.js +3 -0
- package/lib/types/consent.record.type.js.map +1 -0
- package/lib/types/http.request.type.d.ts +9 -0
- package/lib/types/http.request.type.js +3 -0
- package/lib/types/http.request.type.js.map +1 -0
- package/lib/types/http.response.type.d.ts +6 -0
- package/lib/types/http.response.type.js +3 -0
- package/lib/types/http.response.type.js.map +1 -0
- package/lib/types/i.metadata.cache.d.ts +6 -0
- package/lib/types/i.metadata.cache.js +3 -0
- package/lib/types/i.metadata.cache.js.map +1 -0
- package/lib/types/i.storage.d.ts +25 -0
- package/lib/types/i.storage.js +3 -0
- package/lib/types/i.storage.js.map +1 -0
- package/lib/types/i.upstream.d.ts +11 -0
- package/lib/types/i.upstream.js +3 -0
- package/lib/types/i.upstream.js.map +1 -0
- package/lib/types/key.pair.type.d.ts +5 -0
- package/lib/types/key.pair.type.js +3 -0
- package/lib/types/key.pair.type.js.map +1 -0
- package/lib/types/logger.type.d.ts +6 -0
- package/lib/types/logger.type.js +3 -0
- package/lib/types/logger.type.js.map +1 -0
- package/lib/types/mcp.auth.context.type.d.ts +29 -0
- package/lib/types/mcp.auth.context.type.js +3 -0
- package/lib/types/mcp.auth.context.type.js.map +1 -0
- package/lib/types/mcp.auth.options.type.d.ts +39 -0
- package/lib/types/mcp.auth.options.type.js +3 -0
- package/lib/types/mcp.auth.options.type.js.map +1 -0
- package/lib/types/mcp.auth.type.d.ts +14 -0
- package/lib/types/mcp.auth.type.js +3 -0
- package/lib/types/mcp.auth.type.js.map +1 -0
- package/lib/types/metadata.resolution.type.d.ts +9 -0
- package/lib/types/metadata.resolution.type.js +3 -0
- package/lib/types/metadata.resolution.type.js.map +1 -0
- package/lib/types/mongo.storage.options.type.d.ts +13 -0
- package/lib/types/mongo.storage.options.type.js +3 -0
- package/lib/types/mongo.storage.options.type.js.map +1 -0
- package/lib/types/oidc.upstream.options.type.d.ts +9 -0
- package/lib/types/oidc.upstream.options.type.js +3 -0
- package/lib/types/oidc.upstream.options.type.js.map +1 -0
- package/lib/types/pending.authorization.type.d.ts +14 -0
- package/lib/types/pending.authorization.type.js +3 -0
- package/lib/types/pending.authorization.type.js.map +1 -0
- package/lib/types/pending.filter.type.d.ts +5 -0
- package/lib/types/pending.filter.type.js +3 -0
- package/lib/types/pending.filter.type.js.map +1 -0
- package/lib/types/redirect.policy.type.d.ts +5 -0
- package/lib/types/redirect.policy.type.js +3 -0
- package/lib/types/redirect.policy.type.js.map +1 -0
- package/lib/types/refresh.token.record.type.d.ts +11 -0
- package/lib/types/refresh.token.record.type.js +3 -0
- package/lib/types/refresh.token.record.type.js.map +1 -0
- package/lib/types/resolved.client.type.d.ts +7 -0
- package/lib/types/resolved.client.type.js +3 -0
- package/lib/types/resolved.client.type.js.map +1 -0
- package/lib/types/route.name.type.d.ts +2 -0
- package/lib/types/route.name.type.js +3 -0
- package/lib/types/route.name.type.js.map +1 -0
- package/lib/types/route.type.d.ts +10 -0
- package/lib/types/route.type.js +3 -0
- package/lib/types/route.type.js.map +1 -0
- package/lib/types/sql.dialect.type.d.ts +2 -0
- package/lib/types/sql.dialect.type.js +3 -0
- package/lib/types/sql.dialect.type.js.map +1 -0
- package/lib/types/sql.executor.type.d.ts +4 -0
- package/lib/types/sql.executor.type.js +3 -0
- package/lib/types/sql.executor.type.js.map +1 -0
- package/lib/types/sql.storage.options.type.d.ts +4 -0
- package/lib/types/sql.storage.options.type.js +3 -0
- package/lib/types/sql.storage.options.type.js.map +1 -0
- package/lib/types/upstream.begin.type.d.ts +9 -0
- package/lib/types/upstream.begin.type.js +3 -0
- package/lib/types/upstream.begin.type.js.map +1 -0
- package/lib/types/upstream.context.type.d.ts +10 -0
- package/lib/types/upstream.context.type.js +3 -0
- package/lib/types/upstream.context.type.js.map +1 -0
- package/lib/types/verify.result.type.d.ts +6 -0
- package/lib/types/verify.result.type.js +3 -0
- package/lib/types/verify.result.type.js.map +1 -0
- package/package.json +107 -5
- package/sql/postgres.sql +61 -0
- package/sql/sqlite.sql +61 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type AuthenticateResultType from '../../types/authenticate.result.type';
|
|
2
|
+
import type HttpRequestType from '../../types/http.request.type';
|
|
3
|
+
import type McpAuthContextType from '../../types/mcp.auth.context.type';
|
|
4
|
+
declare const authenticateRequest: <TUser>(context: McpAuthContextType<TUser>, headers: HttpRequestType["headers"], rpcBody?: unknown) => Promise<AuthenticateResultType<TUser>>;
|
|
5
|
+
export default authenticateRequest;
|
|
@@ -0,0 +1,24 @@
|
|
|
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 header_value_1 = __importDefault(require("../http/header.value"));
|
|
7
|
+
const text_value_1 = __importDefault(require("../http/text.value"));
|
|
8
|
+
const verify_access_token_1 = __importDefault(require("../jwt/verify.access.token"));
|
|
9
|
+
const challenge_response_1 = __importDefault(require("./challenge.response"));
|
|
10
|
+
const authenticateRequest = async (context, headers, rpcBody) => {
|
|
11
|
+
const bearer = /^Bearer (\S+)$/i.exec((0, header_value_1.default)(headers, 'authorization') ?? '')?.[1];
|
|
12
|
+
if (!bearer)
|
|
13
|
+
return (0, challenge_response_1.default)(context, rpcBody, false, 'missing_token');
|
|
14
|
+
const verified = await (0, verify_access_token_1.default)(await context.getKeys(), bearer, context.issuer, context.options.resource, context.now());
|
|
15
|
+
if ('reason' in verified)
|
|
16
|
+
return (0, challenge_response_1.default)(context, rpcBody, true, verified.reason);
|
|
17
|
+
const subject = (0, text_value_1.default)(verified.claims.sub);
|
|
18
|
+
const user = subject ? await context.options.loadActiveUser(subject) : null;
|
|
19
|
+
if (!user)
|
|
20
|
+
return (0, challenge_response_1.default)(context, rpcBody, true, 'user_inactive');
|
|
21
|
+
return { user, claims: verified.claims };
|
|
22
|
+
};
|
|
23
|
+
exports.default = authenticateRequest;
|
|
24
|
+
//# sourceMappingURL=authenticate.request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authenticate.request.js","sourceRoot":"","sources":["../../../src/functions/server/authenticate.request.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAKb,wEAA+C;AAC/C,oEAA2C;AAC3C,qFAA2D;AAC3D,8EAAqD;AAErD,MAAM,mBAAmB,GAAG,KAAK,EAAS,OAAkC,EAAE,OAAmC,EAAE,OAAiB,EAA0C,EAAE;IAC/K,MAAM,MAAM,GAAuB,iBAAiB,CAAC,IAAI,CAAC,IAAA,sBAAW,EAAC,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5G,IAAI,CAAC,MAAM;QAAE,OAAO,IAAA,4BAAiB,EAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IAEhF,MAAM,QAAQ,GAAG,MAAM,IAAA,6BAAiB,EAAC,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACnI,IAAI,QAAQ,IAAI,QAAQ;QAAE,OAAO,IAAA,4BAAiB,EAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE5F,MAAM,OAAO,GAAuB,IAAA,oBAAS,EAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,IAAI,CAAC,IAAI;QAAE,OAAO,IAAA,4BAAiB,EAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;IAC7E,OAAO,EAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAC,CAAC;AACxC,CAAC,CAAC;AACF,kBAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type HttpRequestType from '../../types/http.request.type';
|
|
2
|
+
import type McpAuthContextType from '../../types/mcp.auth.context.type';
|
|
3
|
+
import type PendingAuthorizationType from '../../types/pending.authorization.type';
|
|
4
|
+
declare const awaitingConsent: (context: McpAuthContextType<any>, request: HttpRequestType, state: unknown) => Promise<PendingAuthorizationType | null>;
|
|
5
|
+
export default awaitingConsent;
|
|
@@ -0,0 +1,18 @@
|
|
|
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 text_value_1 = __importDefault(require("../http/text.value"));
|
|
7
|
+
const awaitingConsent = async (context, request, state) => {
|
|
8
|
+
const stateId = (0, text_value_1.default)(state);
|
|
9
|
+
const pending = stateId ? await context.options.storage.getPendingAuthorization(stateId, context.now()) : null;
|
|
10
|
+
if (!pending?.userId)
|
|
11
|
+
return null;
|
|
12
|
+
const { upstream } = context.options;
|
|
13
|
+
if (upstream.verifyUser && !(await upstream.verifyUser(request, pending.userId)))
|
|
14
|
+
return null;
|
|
15
|
+
return pending;
|
|
16
|
+
};
|
|
17
|
+
exports.default = awaitingConsent;
|
|
18
|
+
//# sourceMappingURL=awaiting.consent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"awaiting.consent.js","sourceRoot":"","sources":["../../../src/functions/server/awaiting.consent.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAKb,oEAA2C;AAE3C,MAAM,eAAe,GAAG,KAAK,EAAE,OAAgC,EAAE,OAAwB,EAAE,KAAc,EAA4C,EAAE;IACtJ,MAAM,OAAO,GAAuB,IAAA,oBAAS,EAAC,KAAK,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/G,IAAI,CAAC,OAAO,EAAE,MAAM;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,EAAC,QAAQ,EAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IACnC,IAAI,QAAQ,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9F,OAAO,OAAO,CAAC;AAChB,CAAC,CAAC;AACF,kBAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
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 trim_trailing_slashes_1 = __importDefault(require("../http/trim.trailing.slashes"));
|
|
7
|
+
const authorization_server_metadata_handler_1 = __importDefault(require("../../handlers/authorization.server.metadata.handler"));
|
|
8
|
+
const authorize_handler_1 = __importDefault(require("../../handlers/authorize.handler"));
|
|
9
|
+
const callback_handler_1 = __importDefault(require("../../handlers/callback.handler"));
|
|
10
|
+
const consent_decision_handler_1 = __importDefault(require("../../handlers/consent.decision.handler"));
|
|
11
|
+
const consent_page_handler_1 = __importDefault(require("../../handlers/consent.page.handler"));
|
|
12
|
+
const protected_resource_metadata_handler_1 = __importDefault(require("../../handlers/protected.resource.metadata.handler"));
|
|
13
|
+
const register_handler_1 = __importDefault(require("../../handlers/register.handler"));
|
|
14
|
+
const resume_handler_1 = __importDefault(require("../../handlers/resume.handler"));
|
|
15
|
+
const revoke_handler_1 = __importDefault(require("../../handlers/revoke.handler"));
|
|
16
|
+
const token_handler_1 = __importDefault(require("../../handlers/token.handler"));
|
|
17
|
+
const buildRoutes = (context) => {
|
|
18
|
+
const { basePath, callbackPath } = context;
|
|
19
|
+
const { upstream, resource } = context.options;
|
|
20
|
+
const resourcePath = (0, trim_trailing_slashes_1.default)(new URL(resource).pathname);
|
|
21
|
+
const withRequest = (handler) => (request) => handler(context, request);
|
|
22
|
+
const metadata = (path, handler) => ({ method: 'GET', path, name: 'metadata', handler });
|
|
23
|
+
const protectedResource = () => (0, protected_resource_metadata_handler_1.default)(context);
|
|
24
|
+
const authorizationServer = () => (0, authorization_server_metadata_handler_1.default)(context);
|
|
25
|
+
return [
|
|
26
|
+
metadata('/.well-known/oauth-protected-resource', protectedResource),
|
|
27
|
+
...(resourcePath ? [metadata(`/.well-known/oauth-protected-resource${resourcePath}`, protectedResource)] : []),
|
|
28
|
+
...['/.well-known/oauth-authorization-server', '/.well-known/openid-configuration'].flatMap((path) => [...new Set([path, `${path}${basePath}`, `${basePath}${path}`])].map((full) => metadata(full, authorizationServer))),
|
|
29
|
+
...(context.registrationEnabled ? [{ method: 'POST', path: `${basePath}/register`, name: 'register', handler: withRequest(register_handler_1.default) }] : []),
|
|
30
|
+
{ method: 'GET', path: `${basePath}/authorize`, name: 'authorize', handler: withRequest(authorize_handler_1.default) },
|
|
31
|
+
...(upstream.callback ? [{ method: 'GET', path: `${basePath}${callbackPath}`, name: 'callback', handler: withRequest(callback_handler_1.default) }] : []),
|
|
32
|
+
...(upstream.resume ? [{ method: 'GET', path: `${basePath}/oauth/resume`, name: 'resume', handler: withRequest(resume_handler_1.default) }] : []),
|
|
33
|
+
{ method: 'GET', path: `${basePath}/oauth/consent`, name: 'consent', handler: withRequest(consent_page_handler_1.default) },
|
|
34
|
+
{ method: 'POST', path: `${basePath}/oauth/consent`, name: 'consent', handler: withRequest(consent_decision_handler_1.default) },
|
|
35
|
+
{ method: 'POST', path: `${basePath}/token`, name: 'token', handler: withRequest(token_handler_1.default) },
|
|
36
|
+
{ method: 'POST', path: `${basePath}/revoke`, name: 'revoke', handler: withRequest(revoke_handler_1.default) }
|
|
37
|
+
];
|
|
38
|
+
};
|
|
39
|
+
exports.default = buildRoutes;
|
|
40
|
+
//# sourceMappingURL=build.routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.routes.js","sourceRoot":"","sources":["../../../src/functions/server/build.routes.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAEb,0FAAgE;AAChE,iIAAsG;AACtG,yFAAgE;AAChE,uFAA8D;AAC9D,uGAA6E;AAC7E,+FAAqE;AACrE,6HAAkG;AAClG,uFAA8D;AAC9D,mFAA0D;AAC1D,mFAA0D;AAC1D,iFAAwD;AAKxD,MAAM,WAAW,GAAG,CAAC,OAAgC,EAAe,EAAE;IACrE,MAAM,EAAC,QAAQ,EAAE,YAAY,EAAC,GAAG,OAAO,CAAC;IACzC,MAAM,EAAC,QAAQ,EAAE,QAAQ,EAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAC7C,MAAM,YAAY,GAAW,IAAA,+BAAmB,EAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7E,MAAM,WAAW,GAChB,CAAC,OAAyG,EAAwB,EAAE,CACpI,CAAC,OAAO,EAAE,EAAE,CACX,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5B,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,OAA6B,EAAa,EAAE,CAAC,CAAC,EAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAC,CAAC,CAAC;IAChI,MAAM,iBAAiB,GAAyB,GAAG,EAAE,CAAC,IAAA,6CAAgC,EAAC,OAAO,CAAC,CAAC;IAChG,MAAM,mBAAmB,GAAyB,GAAG,EAAE,CAAC,IAAA,+CAAkC,EAAC,OAAO,CAAC,CAAC;IAEpG,OAAO;QACN,QAAQ,CAAC,uCAAuC,EAAE,iBAAiB,CAAC;QACpE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wCAAwC,YAAY,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9G,GAAG,CAAC,yCAAyC,EAAE,mCAAmC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAY,EAAe,EAAE,CACzH,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,QAAQ,EAAE,EAAE,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAY,EAAa,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC,CACtI;QACD,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,0BAAe,CAAC,EAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9J,EAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,2BAAgB,CAAC,EAAC;QACzG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,GAAG,YAAY,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,0BAAe,CAAC,EAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzJ,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,wBAAa,CAAC,EAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjJ,EAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,8BAAkB,CAAC,EAAC;QAC7G,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,kCAAsB,CAAC,EAAC;QAClH,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,uBAAY,CAAC,EAAC;QAC9F,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,wBAAa,CAAC,EAAC;KACjG,CAAC;AACH,CAAC,CAAC;AACF,kBAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type HttpRequestType from '../../types/http.request.type';
|
|
2
|
+
import type McpAuthContextType from '../../types/mcp.auth.context.type';
|
|
3
|
+
import type PendingAuthorizationType from '../../types/pending.authorization.type';
|
|
4
|
+
import type UpstreamContextType from '../../types/upstream.context.type';
|
|
5
|
+
declare const buildUpstreamContext: (context: McpAuthContextType<any>, request: HttpRequestType, pending: PendingAuthorizationType) => UpstreamContextType;
|
|
6
|
+
export default buildUpstreamContext;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const buildUpstreamContext = (context, request, pending) => ({
|
|
4
|
+
request,
|
|
5
|
+
pending,
|
|
6
|
+
issuer: context.issuer,
|
|
7
|
+
callbackUrl: `${context.issuer}${context.callbackPath}`,
|
|
8
|
+
resumeUrl: `${context.issuer}/oauth/resume?state=${encodeURIComponent(pending.stateId)}`
|
|
9
|
+
});
|
|
10
|
+
exports.default = buildUpstreamContext;
|
|
11
|
+
//# sourceMappingURL=build.upstream.context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.upstream.context.js","sourceRoot":"","sources":["../../../src/functions/server/build.upstream.context.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAOb,MAAM,oBAAoB,GAAG,CAAC,OAAgC,EAAE,OAAwB,EAAE,OAAiC,EAAuB,EAAE,CAAC,CAAC;IACrJ,OAAO;IACP,OAAO;IACP,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,WAAW,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE;IACvD,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,uBAAuB,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;CACxF,CAAC,CAAC;AACH,kBAAe,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type AuthenticateResultType from '../../types/authenticate.result.type';
|
|
2
|
+
import type McpAuthContextType from '../../types/mcp.auth.context.type';
|
|
3
|
+
declare const challengeResponse: (context: McpAuthContextType<any>, rpcBody: unknown, tokenSent: boolean, reason: string) => AuthenticateResultType<any>;
|
|
4
|
+
export default challengeResponse;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const challengeResponse = (context, rpcBody, tokenSent, reason) => {
|
|
4
|
+
const metadata = `resource_metadata="${context.resourceMetadataUrl}"`;
|
|
5
|
+
const id = rpcBody && 'object' === typeof rpcBody && !Array.isArray(rpcBody) ? (rpcBody.id ?? null) : null;
|
|
6
|
+
return {
|
|
7
|
+
status: 401,
|
|
8
|
+
reason,
|
|
9
|
+
headers: { 'www-authenticate': tokenSent ? `Bearer error="invalid_token", ${metadata}` : `Bearer ${metadata}`, 'content-type': 'application/json' },
|
|
10
|
+
body: { jsonrpc: '2.0', id, error: { code: -32000, message: 'Authentication Required' } }
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
exports.default = challengeResponse;
|
|
14
|
+
//# sourceMappingURL=challenge.response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"challenge.response.js","sourceRoot":"","sources":["../../../src/functions/server/challenge.response.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAKb,MAAM,iBAAiB,GAAG,CAAC,OAAgC,EAAE,OAAgB,EAAE,SAAkB,EAAE,MAAc,EAA+B,EAAE;IACjJ,MAAM,QAAQ,GAAW,sBAAsB,OAAO,CAAC,mBAAmB,GAAG,CAAC;IAC9E,MAAM,EAAE,GAAY,OAAO,IAAI,QAAQ,KAAK,OAAO,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAE,OAA0B,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxI,OAAO;QACN,MAAM,EAAE,GAAG;QACX,MAAM;QACN,OAAO,EAAE,EAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC,CAAC,UAAU,QAAQ,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAC;QACjJ,IAAI,EAAE,EAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAC,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,yBAAyB,EAAC,EAAC;KACrF,CAAC;AACH,CAAC,CAAC;AACF,kBAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type HttpResponseType from '../../types/http.response.type';
|
|
2
|
+
import type McpAuthContextType from '../../types/mcp.auth.context.type';
|
|
3
|
+
import type PendingAuthorizationType from '../../types/pending.authorization.type';
|
|
4
|
+
declare const continueWithUser: (context: McpAuthContextType<any>, pending: PendingAuthorizationType) => Promise<HttpResponseType>;
|
|
5
|
+
export default continueWithUser;
|
|
@@ -0,0 +1,18 @@
|
|
|
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 plain_error_response_1 = __importDefault(require("../http/plain.error.response"));
|
|
7
|
+
const redirect_response_1 = __importDefault(require("../http/redirect.response"));
|
|
8
|
+
const issue_authorization_code_1 = __importDefault(require("./issue.authorization.code"));
|
|
9
|
+
const continueWithUser = async (context, pending) => {
|
|
10
|
+
const { storage } = context.options;
|
|
11
|
+
if (!(await storage.hasConsent(pending.clientId, pending.userId))) {
|
|
12
|
+
return (0, redirect_response_1.default)(`${context.issuer}/oauth/consent?state=${encodeURIComponent(pending.stateId)}`);
|
|
13
|
+
}
|
|
14
|
+
const taken = await storage.takePendingAuthorization(pending.stateId, { now: context.now(), hasUser: true });
|
|
15
|
+
return taken ? (0, issue_authorization_code_1.default)(context, taken) : (0, plain_error_response_1.default)(400, 'Invalid or expired authorization request');
|
|
16
|
+
};
|
|
17
|
+
exports.default = continueWithUser;
|
|
18
|
+
//# sourceMappingURL=continue.with.user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continue.with.user.js","sourceRoot":"","sources":["../../../src/functions/server/continue.with.user.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAKb,wFAA8D;AAC9D,kFAAyD;AACzD,0FAAgE;AAEhE,MAAM,gBAAgB,GAAG,KAAK,EAAE,OAAgC,EAAE,OAAiC,EAA6B,EAAE;IACjI,MAAM,EAAC,OAAO,EAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAClC,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAgB,CAAC,CAAC,EAAE,CAAC;QAC7E,OAAO,IAAA,2BAAgB,EAAC,GAAG,OAAO,CAAC,MAAM,wBAAwB,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzG,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,wBAAwB,CAAC,OAAO,CAAC,OAAO,EAAE,EAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;IAC3G,OAAO,KAAK,CAAC,CAAC,CAAC,IAAA,kCAAsB,EAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAA,8BAAkB,EAAC,GAAG,EAAE,0CAA0C,CAAC,CAAC;AAC7H,CAAC,CAAC;AACF,kBAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type McpAuthOptionsType from '../../types/mcp.auth.options.type';
|
|
2
|
+
import type ResolvedClientType from '../../types/resolved.client.type';
|
|
3
|
+
declare const createClientResolver: (options: McpAuthOptionsType<any>, now: () => Date, cimdEnabled: boolean) => ((clientId: string) => Promise<ResolvedClientType | {
|
|
4
|
+
error: string;
|
|
5
|
+
}>);
|
|
6
|
+
export default createClientResolver;
|
|
@@ -0,0 +1,26 @@
|
|
|
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 lru_metadata_cache_1 = __importDefault(require("../../cache/lru.metadata.cache"));
|
|
7
|
+
const create_metadata_resolver_1 = __importDefault(require("../cimd/create.metadata.resolver"));
|
|
8
|
+
const is_metadata_client_id_1 = __importDefault(require("../cimd/is.metadata.client.id"));
|
|
9
|
+
const createClientResolver = (options, now, cimdEnabled) => {
|
|
10
|
+
const cache = options.cimd?.cache ?? new lru_metadata_cache_1.default(500, () => now().getTime());
|
|
11
|
+
const resolveMetadata = (0, create_metadata_resolver_1.default)(options.cimd ?? {}, cache);
|
|
12
|
+
return async (clientId) => {
|
|
13
|
+
if (cimdEnabled && (0, is_metadata_client_id_1.default)(clientId)) {
|
|
14
|
+
const resolution = await resolveMetadata(clientId);
|
|
15
|
+
if (!resolution.ok) {
|
|
16
|
+
options.logger?.info?.('MCP client metadata rejected', { clientId, reason: resolution.reason });
|
|
17
|
+
return { error: 'client metadata document is invalid or unreachable' };
|
|
18
|
+
}
|
|
19
|
+
return { clientId, clientName: resolution.metadata.client_name.slice(0, 200), redirectUris: resolution.metadata.redirect_uris, metadataDocument: true };
|
|
20
|
+
}
|
|
21
|
+
const client = await options.storage.getClient(clientId);
|
|
22
|
+
return client ? { clientId, clientName: client.clientName, redirectUris: client.redirectUris, metadataDocument: false } : { error: 'unknown client_id' };
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
exports.default = createClientResolver;
|
|
26
|
+
//# sourceMappingURL=create.client.resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.client.resolver.js","sourceRoot":"","sources":["../../../src/functions/server/create.client.resolver.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAEb,wFAA8D;AAG9D,gGAAsE;AACtE,0FAA+D;AAE/D,MAAM,oBAAoB,GAAG,CAAC,OAAgC,EAAE,GAAe,EAAE,WAAoB,EAAyE,EAAE;IAC/K,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI,4BAAgB,CAAC,GAAG,EAAE,GAAW,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9F,MAAM,eAAe,GAAG,IAAA,kCAAsB,EAAC,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;IAE1E,OAAO,KAAK,EAAE,QAAgB,EAAiD,EAAE;QAChF,IAAI,WAAW,IAAI,IAAA,+BAAkB,EAAC,QAAQ,CAAC,EAAE,CAAC;YACjD,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;gBACpB,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,8BAA8B,EAAE,EAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAC,CAAC,CAAC;gBAC9F,OAAO,EAAC,KAAK,EAAE,oDAAoD,EAAC,CAAC;YACtE,CAAC;YACD,OAAO,EAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,QAAQ,CAAC,aAAa,EAAE,gBAAgB,EAAE,IAAI,EAAC,CAAC;QACvJ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzD,OAAO,MAAM,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,gBAAgB,EAAE,KAAK,EAAC,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,mBAAmB,EAAC,CAAC;IACtJ,CAAC,CAAC;AACH,CAAC,CAAC;AACF,kBAAe,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type McpAuthContextType from '../../types/mcp.auth.context.type';
|
|
2
|
+
import type McpAuthOptionsType from '../../types/mcp.auth.options.type';
|
|
3
|
+
declare const createMcpAuthContext: <TUser>(options: McpAuthOptionsType<TUser>) => McpAuthContextType<TUser>;
|
|
4
|
+
export default createMcpAuthContext;
|
|
@@ -0,0 +1,38 @@
|
|
|
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 trim_trailing_slashes_1 = __importDefault(require("../http/trim.trailing.slashes"));
|
|
7
|
+
const render_default_consent_1 = __importDefault(require("../consent/render.default.consent"));
|
|
8
|
+
const resolve_key_pair_1 = __importDefault(require("../keys/resolve.key.pair"));
|
|
9
|
+
const create_client_resolver_1 = __importDefault(require("./create.client.resolver"));
|
|
10
|
+
const createMcpAuthContext = (options) => {
|
|
11
|
+
const issuer = (0, trim_trailing_slashes_1.default)(options.issuer);
|
|
12
|
+
const now = options.now ?? (() => new Date());
|
|
13
|
+
const cimdEnabled = options.cimd?.enabled ?? true;
|
|
14
|
+
let keys;
|
|
15
|
+
return {
|
|
16
|
+
options,
|
|
17
|
+
issuer,
|
|
18
|
+
basePath: (0, trim_trailing_slashes_1.default)(new URL(issuer).pathname),
|
|
19
|
+
callbackPath: options.callbackPath ?? '/oauth/callback',
|
|
20
|
+
productName: options.productName ?? 'MCP server',
|
|
21
|
+
redirectPolicy: { httpsHosts: options.redirects?.httpsHosts ?? [], customSchemes: options.redirects?.customSchemes ?? [] },
|
|
22
|
+
ttl: {
|
|
23
|
+
accessToken: options.ttl?.accessToken ?? 3600,
|
|
24
|
+
refreshToken: options.ttl?.refreshToken ?? 2592000,
|
|
25
|
+
pending: options.ttl?.pending ?? 600,
|
|
26
|
+
code: options.ttl?.code ?? 60
|
|
27
|
+
},
|
|
28
|
+
now,
|
|
29
|
+
registrationEnabled: options.registration?.enabled ?? true,
|
|
30
|
+
cimdEnabled,
|
|
31
|
+
renderConsent: options.renderConsent ?? render_default_consent_1.default,
|
|
32
|
+
resourceMetadataUrl: `${issuer}/.well-known/oauth-protected-resource`,
|
|
33
|
+
getKeys: () => (keys ??= (0, resolve_key_pair_1.default)(options.signingKey, options.verificationKey)),
|
|
34
|
+
resolveClient: (0, create_client_resolver_1.default)(options, now, cimdEnabled)
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
exports.default = createMcpAuthContext;
|
|
38
|
+
//# sourceMappingURL=create.mcp.auth.context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.mcp.auth.context.js","sourceRoot":"","sources":["../../../src/functions/server/create.mcp.auth.context.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAEb,0FAAgE;AAGhE,+FAAqE;AACrE,gFAAsD;AACtD,sFAA4D;AAE5D,MAAM,oBAAoB,GAAG,CAAQ,OAAkC,EAA6B,EAAE;IACrG,MAAM,MAAM,GAAW,IAAA,+BAAmB,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAe,OAAO,CAAC,GAAG,IAAI,CAAC,GAAS,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,WAAW,GAAY,OAAO,CAAC,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC;IAC3D,IAAI,IAAmD,CAAC;IAExD,OAAO;QACN,OAAO;QACP,MAAM;QACN,QAAQ,EAAE,IAAA,+BAAmB,EAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;QACvD,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,iBAAiB;QACvD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,YAAY;QAChD,cAAc,EAAE,EAAC,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,UAAU,IAAI,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,SAAS,EAAE,aAAa,IAAI,EAAE,EAAC;QACxH,GAAG,EAAE;YACJ,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE,WAAW,IAAI,IAAI;YAC7C,YAAY,EAAE,OAAO,CAAC,GAAG,EAAE,YAAY,IAAI,OAAO;YAClD,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,IAAI,GAAG;YACpC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE;SAC7B;QACD,GAAG;QACH,mBAAmB,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,IAAI,IAAI;QAC1D,WAAW;QACX,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,gCAAoB;QAC5D,mBAAmB,EAAE,GAAG,MAAM,uCAAuC;QACrE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,KAAK,IAAA,0BAAc,EAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;QACrF,aAAa,EAAE,IAAA,gCAAoB,EAAC,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC;KAC9D,CAAC;AACH,CAAC,CAAC;AACF,kBAAe,oBAAoB,CAAC"}
|
|
@@ -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 authenticate_request_1 = __importDefault(require("./authenticate.request"));
|
|
7
|
+
const build_routes_1 = __importDefault(require("./build.routes"));
|
|
8
|
+
const create_mcp_auth_context_1 = __importDefault(require("./create.mcp.auth.context"));
|
|
9
|
+
const find_route_1 = __importDefault(require("./find.route"));
|
|
10
|
+
const handle_request_1 = __importDefault(require("./handle.request"));
|
|
11
|
+
const createMcpAuth = (options) => {
|
|
12
|
+
const context = (0, create_mcp_auth_context_1.default)(options);
|
|
13
|
+
const routes = (0, build_routes_1.default)(context);
|
|
14
|
+
return {
|
|
15
|
+
issuer: context.issuer,
|
|
16
|
+
resource: options.resource,
|
|
17
|
+
routes,
|
|
18
|
+
hasRoute: (request) => !!(0, find_route_1.default)(routes, request),
|
|
19
|
+
handle: (request) => (0, handle_request_1.default)(context, routes, request),
|
|
20
|
+
authenticate: (headers, rpcBody) => (0, authenticate_request_1.default)(context, headers, rpcBody),
|
|
21
|
+
deleteExpired: () => options.storage.deleteExpired(context.now())
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
exports.default = createMcpAuth;
|
|
25
|
+
//# sourceMappingURL=create.mcp.auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.mcp.auth.js","sourceRoot":"","sources":["../../../src/functions/server/create.mcp.auth.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAKb,kFAAyD;AACzD,kEAAyC;AACzC,wFAA6D;AAC7D,8DAAqC;AACrC,sEAA6C;AAE7C,MAAM,aAAa,GAAG,CAAkB,OAAkC,EAAsB,EAAE;IACjG,MAAM,OAAO,GAAG,IAAA,iCAAoB,EAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAA,sBAAW,EAAC,OAAO,CAAC,CAAC;IAEpC,OAAO;QACN,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM;QACN,QAAQ,EAAE,CAAC,OAAwB,EAAW,EAAE,CAAC,CAAC,CAAC,IAAA,oBAAS,EAAC,MAAM,EAAE,OAAO,CAAC;QAC7E,MAAM,EAAE,CAAC,OAAwB,EAAE,EAAE,CAAC,IAAA,wBAAa,EAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC;QAC7E,YAAY,EAAE,CAAC,OAAmC,EAAE,OAAiB,EAAE,EAAE,CAAC,IAAA,8BAAmB,EAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;QACxH,aAAa,EAAE,GAAkB,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;KAChF,CAAC;AACH,CAAC,CAAC;AACF,kBAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type HttpResponseType from '../../types/http.response.type';
|
|
2
|
+
import type McpAuthContextType from '../../types/mcp.auth.context.type';
|
|
3
|
+
import type PendingAuthorizationType from '../../types/pending.authorization.type';
|
|
4
|
+
declare const denyAuthorization: (context: McpAuthContextType<any>, pending: PendingAuthorizationType, description?: string) => Promise<HttpResponseType>;
|
|
5
|
+
export default denyAuthorization;
|
|
@@ -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 redirect_response_1 = __importDefault(require("../http/redirect.response"));
|
|
7
|
+
const build_error_redirect_1 = __importDefault(require("../redirect/build.error.redirect"));
|
|
8
|
+
const denyAuthorization = async (context, pending, description = 'sign-in failed') => {
|
|
9
|
+
await context.options.storage.deletePendingAuthorization(pending.stateId);
|
|
10
|
+
return (0, redirect_response_1.default)((0, build_error_redirect_1.default)(pending.redirectUri, context.issuer, 'access_denied', description, pending.clientState));
|
|
11
|
+
};
|
|
12
|
+
exports.default = denyAuthorization;
|
|
13
|
+
//# sourceMappingURL=deny.authorization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deny.authorization.js","sourceRoot":"","sources":["../../../src/functions/server/deny.authorization.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAKb,kFAAyD;AACzD,4FAAkE;AAElE,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAAgC,EAAE,OAAiC,EAAE,cAAsB,gBAAgB,EAA6B,EAAE;IAC1K,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1E,OAAO,IAAA,2BAAgB,EAAC,IAAA,8BAAkB,EAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;AACrI,CAAC,CAAC;AACF,kBAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type HttpResponseType from '../../types/http.response.type';
|
|
2
|
+
import type McpAuthContextType from '../../types/mcp.auth.context.type';
|
|
3
|
+
declare const exchangeAuthorizationCode: (context: McpAuthContextType<any>, params: Record<string, unknown>) => Promise<HttpResponseType>;
|
|
4
|
+
export default exchangeAuthorizationCode;
|
|
@@ -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 random_id_1 = __importDefault(require("../crypto/random.id"));
|
|
7
|
+
const sha256_base64_url_1 = __importDefault(require("../crypto/sha256.base64.url"));
|
|
8
|
+
const sha256_hex_1 = __importDefault(require("../crypto/sha256.hex"));
|
|
9
|
+
const text_value_1 = __importDefault(require("../http/text.value"));
|
|
10
|
+
const issue_tokens_1 = __importDefault(require("./issue.tokens"));
|
|
11
|
+
const token_failure_1 = __importDefault(require("./token.failure"));
|
|
12
|
+
const codeVerifierPattern = /^[A-Za-z0-9\-._~]{43,128}$/;
|
|
13
|
+
const exchangeAuthorizationCode = async (context, params) => {
|
|
14
|
+
const [code, clientId, redirectUri, codeVerifier, resource] = ['code', 'client_id', 'redirect_uri', 'code_verifier', 'resource'].map((name) => (0, text_value_1.default)(params[name]));
|
|
15
|
+
if (!code || !clientId || !redirectUri || !codeVerifier)
|
|
16
|
+
return (0, token_failure_1.default)('invalid_request', 'code, client_id, redirect_uri and code_verifier are required');
|
|
17
|
+
if (!codeVerifierPattern.test(codeVerifier))
|
|
18
|
+
return (0, token_failure_1.default)('invalid_grant', 'code_verifier is malformed');
|
|
19
|
+
const claimedAt = context.now();
|
|
20
|
+
const stored = await context.options.storage.claimAuthorizationCode(await (0, sha256_hex_1.default)(code), claimedAt);
|
|
21
|
+
if (!stored)
|
|
22
|
+
return (0, token_failure_1.default)('invalid_grant', 'authorization code is invalid, expired or already used');
|
|
23
|
+
if (stored.clientId !== clientId ||
|
|
24
|
+
stored.redirectUri !== redirectUri ||
|
|
25
|
+
stored.codeChallenge !== (await (0, sha256_base64_url_1.default)(codeVerifier)) ||
|
|
26
|
+
(resource && stored.resource !== resource)) {
|
|
27
|
+
return (0, token_failure_1.default)('invalid_grant', 'authorization code does not match the request');
|
|
28
|
+
}
|
|
29
|
+
return (0, issue_tokens_1.default)(context, clientId, stored.userId, (0, random_id_1.default)(), new Date(claimedAt.getTime() + context.ttl.refreshToken * 1000));
|
|
30
|
+
};
|
|
31
|
+
exports.default = exchangeAuthorizationCode;
|
|
32
|
+
//# sourceMappingURL=exchange.authorization.code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exchange.authorization.code.js","sourceRoot":"","sources":["../../../src/functions/server/exchange.authorization.code.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAIb,oEAA2C;AAC3C,oFAA0D;AAC1D,sEAA6C;AAC7C,oEAA2C;AAC3C,kEAAyC;AACzC,oEAA2C;AAE3C,MAAM,mBAAmB,GAAW,4BAA4B,CAAC;AAEjE,MAAM,yBAAyB,GAAG,KAAK,EAAE,OAAgC,EAAE,MAA+B,EAA6B,EAAE;IACxI,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAY,EAAsB,EAAE,CACzK,IAAA,oBAAS,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CACvB,CAAC;IACF,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY;QAAE,OAAO,IAAA,uBAAY,EAAC,iBAAiB,EAAE,8DAA8D,CAAC,CAAC;IAChK,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC;QAAE,OAAO,IAAA,uBAAY,EAAC,eAAe,EAAE,4BAA4B,CAAC,CAAC;IAEhH,MAAM,SAAS,GAAS,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,MAAM,IAAA,oBAAS,EAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;IACtG,IAAI,CAAC,MAAM;QAAE,OAAO,IAAA,uBAAY,EAAC,eAAe,EAAE,wDAAwD,CAAC,CAAC;IAE5G,IACC,MAAM,CAAC,QAAQ,KAAK,QAAQ;QAC5B,MAAM,CAAC,WAAW,KAAK,WAAW;QAClC,MAAM,CAAC,aAAa,KAAK,CAAC,MAAM,IAAA,2BAAe,EAAC,YAAY,CAAC,CAAC;QAC9D,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,EACzC,CAAC;QACF,OAAO,IAAA,uBAAY,EAAC,eAAe,EAAE,+CAA+C,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,IAAA,sBAAW,EAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,IAAA,mBAAQ,GAAE,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC;AACnI,CAAC,CAAC;AACF,kBAAe,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const findRoute = (routes, request) => routes.find((route) => route.method === request.method.toUpperCase() && route.path === request.path);
|
|
4
|
+
exports.default = findRoute;
|
|
5
|
+
//# sourceMappingURL=find.route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find.route.js","sourceRoot":"","sources":["../../../src/functions/server/find.route.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAKb,MAAM,SAAS,GAAG,CAAC,MAAmB,EAAE,OAAwB,EAAyB,EAAE,CAC1F,MAAM,CAAC,IAAI,CAAC,CAAC,KAAgB,EAAW,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1H,kBAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type HttpRequestType from '../../types/http.request.type';
|
|
2
|
+
import type HttpResponseType from '../../types/http.response.type';
|
|
3
|
+
import type McpAuthContextType from '../../types/mcp.auth.context.type';
|
|
4
|
+
import type RouteType from '../../types/route.type';
|
|
5
|
+
declare const handleRequest: (context: McpAuthContextType<any>, routes: RouteType[], request: HttpRequestType) => Promise<HttpResponseType>;
|
|
6
|
+
export default handleRequest;
|
|
@@ -0,0 +1,21 @@
|
|
|
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 json_response_1 = __importDefault(require("../http/json.response"));
|
|
7
|
+
const oauth_error_response_1 = __importDefault(require("../http/oauth.error.response"));
|
|
8
|
+
const find_route_1 = __importDefault(require("./find.route"));
|
|
9
|
+
const limited = ['register', 'token', 'revoke'];
|
|
10
|
+
const handleRequest = async (context, routes, request) => {
|
|
11
|
+
const route = (0, find_route_1.default)(routes, request);
|
|
12
|
+
if (!route)
|
|
13
|
+
return (0, json_response_1.default)(404, { error: 'not_found' });
|
|
14
|
+
const { rateLimit } = context.options;
|
|
15
|
+
if (rateLimit && limited.includes(route.name) && !(await rateLimit(request.ip ?? 'unknown', route.name))) {
|
|
16
|
+
return (0, oauth_error_response_1.default)(429, 'rate_limited', 'too many requests', { 'retry-after': '60' });
|
|
17
|
+
}
|
|
18
|
+
return route.handler(request);
|
|
19
|
+
};
|
|
20
|
+
exports.default = handleRequest;
|
|
21
|
+
//# sourceMappingURL=handle.request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handle.request.js","sourceRoot":"","sources":["../../../src/functions/server/handle.request.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAOb,0EAAiD;AACjD,wFAA8D;AAC9D,8DAAqC;AAErC,MAAM,OAAO,GAAoB,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAEjE,MAAM,aAAa,GAAG,KAAK,EAAE,OAAgC,EAAE,MAAmB,EAAE,OAAwB,EAA6B,EAAE;IAC1I,MAAM,KAAK,GAA0B,IAAA,oBAAS,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAA,uBAAY,EAAC,GAAG,EAAE,EAAC,KAAK,EAAE,WAAW,EAAC,CAAC,CAAC;IAC3D,MAAM,EAAC,SAAS,EAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IACpC,IAAI,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC1G,OAAO,IAAA,8BAAkB,EAAC,GAAG,EAAE,cAAc,EAAE,mBAAmB,EAAE,EAAC,aAAa,EAAE,IAAI,EAAC,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC,CAAC;AACF,kBAAe,aAAa,CAAC"}
|
|
@@ -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 header_value_1 = __importDefault(require("../http/header.value"));
|
|
7
|
+
const hasCredentials = (request, params) => undefined !== params.client_secret || !!(0, header_value_1.default)(request.headers, 'authorization');
|
|
8
|
+
exports.default = hasCredentials;
|
|
9
|
+
//# sourceMappingURL=has.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"has.credentials.js","sourceRoot":"","sources":["../../../src/functions/server/has.credentials.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAGb,wEAA+C;AAE/C,MAAM,cAAc,GAAG,CAAC,OAAwB,EAAE,MAA+B,EAAW,EAAE,CAC7F,SAAS,KAAK,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC,IAAA,sBAAW,EAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AACvF,kBAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type HttpResponseType from '../../types/http.response.type';
|
|
2
|
+
import type McpAuthContextType from '../../types/mcp.auth.context.type';
|
|
3
|
+
import type PendingAuthorizationType from '../../types/pending.authorization.type';
|
|
4
|
+
declare const issueAuthorizationCode: (context: McpAuthContextType<any>, pending: PendingAuthorizationType) => Promise<HttpResponseType>;
|
|
5
|
+
export default issueAuthorizationCode;
|
|
@@ -0,0 +1,24 @@
|
|
|
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 random_token_1 = __importDefault(require("../crypto/random.token"));
|
|
7
|
+
const sha256_hex_1 = __importDefault(require("../crypto/sha256.hex"));
|
|
8
|
+
const build_redirect_1 = __importDefault(require("../redirect/build.redirect"));
|
|
9
|
+
const redirect_response_1 = __importDefault(require("../http/redirect.response"));
|
|
10
|
+
const issueAuthorizationCode = async (context, pending) => {
|
|
11
|
+
const code = (0, random_token_1.default)(32);
|
|
12
|
+
await context.options.storage.saveAuthorizationCode({
|
|
13
|
+
codeHash: await (0, sha256_hex_1.default)(code),
|
|
14
|
+
clientId: pending.clientId,
|
|
15
|
+
redirectUri: pending.redirectUri,
|
|
16
|
+
codeChallenge: pending.codeChallenge,
|
|
17
|
+
resource: pending.resource,
|
|
18
|
+
userId: pending.userId,
|
|
19
|
+
expiresAt: new Date(context.now().getTime() + context.ttl.code * 1000)
|
|
20
|
+
});
|
|
21
|
+
return (0, redirect_response_1.default)((0, build_redirect_1.default)(pending.redirectUri, context.issuer, { code, state: pending.clientState }));
|
|
22
|
+
};
|
|
23
|
+
exports.default = issueAuthorizationCode;
|
|
24
|
+
//# sourceMappingURL=issue.authorization.code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue.authorization.code.js","sourceRoot":"","sources":["../../../src/functions/server/issue.authorization.code.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAKb,0EAAiD;AACjD,sEAA6C;AAC7C,gFAAuD;AACvD,kFAAyD;AAEzD,MAAM,sBAAsB,GAAG,KAAK,EAAE,OAAgC,EAAE,OAAiC,EAA6B,EAAE;IACvI,MAAM,IAAI,GAAW,IAAA,sBAAW,EAAC,EAAE,CAAC,CAAC;IACrC,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC;QACnD,QAAQ,EAAE,MAAM,IAAA,oBAAS,EAAC,IAAI,CAAC;QAC/B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAgB;QAChC,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;KACtE,CAAC,CAAC;IACH,OAAO,IAAA,2BAAgB,EAAC,IAAA,wBAAa,EAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,EAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,EAAC,CAAC,CAAC,CAAC;AACjH,CAAC,CAAC;AACF,kBAAe,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type HttpResponseType from '../../types/http.response.type';
|
|
2
|
+
import type McpAuthContextType from '../../types/mcp.auth.context.type';
|
|
3
|
+
declare const issueTokens: (context: McpAuthContextType<any>, clientId: string, userId: string, familyId: string, expiresAt: Date, parentHash?: string) => Promise<HttpResponseType>;
|
|
4
|
+
export default issueTokens;
|
|
@@ -0,0 +1,30 @@
|
|
|
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 random_token_1 = __importDefault(require("../crypto/random.token"));
|
|
7
|
+
const sha256_hex_1 = __importDefault(require("../crypto/sha256.hex"));
|
|
8
|
+
const json_response_1 = __importDefault(require("../http/json.response"));
|
|
9
|
+
const sign_access_token_1 = __importDefault(require("../jwt/sign.access.token"));
|
|
10
|
+
const token_failure_1 = __importDefault(require("./token.failure"));
|
|
11
|
+
const issueTokens = async (context, clientId, userId, familyId, expiresAt, parentHash) => {
|
|
12
|
+
const { storage, resource } = context.options;
|
|
13
|
+
const refreshToken = (0, random_token_1.default)(32);
|
|
14
|
+
await storage.saveRefreshToken({ tokenHash: await (0, sha256_hex_1.default)(refreshToken), familyId, clientId, userId, resource, expiresAt });
|
|
15
|
+
if (parentHash && (await storage.findRefreshToken(parentHash))?.revokedAt) {
|
|
16
|
+
await storage.revokeRefreshTokenFamily(familyId, context.now());
|
|
17
|
+
return (0, token_failure_1.default)('invalid_grant', 'refresh token was revoked during rotation');
|
|
18
|
+
}
|
|
19
|
+
const accessToken = await (0, sign_access_token_1.default)(await context.getKeys(), {
|
|
20
|
+
issuer: context.issuer,
|
|
21
|
+
resource,
|
|
22
|
+
userId,
|
|
23
|
+
clientId,
|
|
24
|
+
ttlSeconds: context.ttl.accessToken,
|
|
25
|
+
now: context.now()
|
|
26
|
+
});
|
|
27
|
+
return (0, json_response_1.default)(200, { access_token: accessToken, token_type: 'Bearer', expires_in: context.ttl.accessToken, refresh_token: refreshToken }, { 'cache-control': 'no-store', pragma: 'no-cache' });
|
|
28
|
+
};
|
|
29
|
+
exports.default = issueTokens;
|
|
30
|
+
//# sourceMappingURL=issue.tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue.tokens.js","sourceRoot":"","sources":["../../../src/functions/server/issue.tokens.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAIb,0EAAiD;AACjD,sEAA6C;AAC7C,0EAAiD;AACjD,iFAAuD;AACvD,oEAA2C;AAE3C,MAAM,WAAW,GAAG,KAAK,EACxB,OAAgC,EAChC,QAAgB,EAChB,MAAc,EACd,QAAgB,EAChB,SAAe,EACf,UAAmB,EACS,EAAE;IAC9B,MAAM,EAAC,OAAO,EAAE,QAAQ,EAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAC5C,MAAM,YAAY,GAAW,IAAA,sBAAW,EAAC,EAAE,CAAC,CAAC;IAC7C,MAAM,OAAO,CAAC,gBAAgB,CAAC,EAAC,SAAS,EAAE,MAAM,IAAA,oBAAS,EAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAC,CAAC,CAAC;IAC5H,IAAI,UAAU,IAAI,CAAC,MAAM,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;QAC3E,MAAM,OAAO,CAAC,wBAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAChE,OAAO,IAAA,uBAAY,EAAC,eAAe,EAAE,2CAA2C,CAAC,CAAC;IACnF,CAAC;IACD,MAAM,WAAW,GAAW,MAAM,IAAA,2BAAe,EAAC,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE;QAC1E,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ;QACR,MAAM;QACN,QAAQ;QACR,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;QACnC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;KAClB,CAAC,CAAC;IACH,OAAO,IAAA,uBAAY,EAClB,GAAG,EACH,EAAC,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,EAAE,YAAY,EAAC,EACnH,EAAC,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAC,CACjD,CAAC;AACH,CAAC,CAAC;AACF,kBAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type HttpRequestType from '../../types/http.request.type';
|
|
2
|
+
import type McpAuthContextType from '../../types/mcp.auth.context.type';
|
|
3
|
+
import type PendingAuthorizationType from '../../types/pending.authorization.type';
|
|
4
|
+
declare const loadPending: (context: McpAuthContextType<any>, request: HttpRequestType) => Promise<PendingAuthorizationType | null>;
|
|
5
|
+
export default loadPending;
|
|
@@ -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 query_param_1 = __importDefault(require("../http/query.param"));
|
|
7
|
+
const loadPending = async (context, request) => {
|
|
8
|
+
const state = (0, query_param_1.default)(request, 'state');
|
|
9
|
+
const pending = state ? await context.options.storage.getPendingAuthorization(state, context.now()) : null;
|
|
10
|
+
return pending && !pending.userId ? pending : null;
|
|
11
|
+
};
|
|
12
|
+
exports.default = loadPending;
|
|
13
|
+
//# sourceMappingURL=load.pending.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load.pending.js","sourceRoot":"","sources":["../../../src/functions/server/load.pending.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AAKb,sEAA6C;AAE7C,MAAM,WAAW,GAAG,KAAK,EAAE,OAAgC,EAAE,OAAwB,EAA4C,EAAE;IAClI,MAAM,KAAK,GAAuB,IAAA,qBAAU,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3G,OAAO,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC,CAAC;AACF,kBAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type HttpResponseType from '../../types/http.response.type';
|
|
2
|
+
import type McpAuthContextType from '../../types/mcp.auth.context.type';
|
|
3
|
+
declare const rotateRefreshToken: (context: McpAuthContextType<any>, params: Record<string, unknown>) => Promise<HttpResponseType>;
|
|
4
|
+
export default rotateRefreshToken;
|