mcp-auth-server 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,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,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,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,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,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,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,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,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,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,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,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,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,5 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const escapeHtml = (value) => value.replace(/[&<>"']/g, (char) => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' })[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,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 @@
|
|
|
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,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,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,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,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,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"}
|