{"version":3,"sources":["jsdelivr-header.js","/npm/@mongodb-js/oidc-mock-provider@0.13.6/dist/index.js"],"names":[],"mappings":"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","file":"/npm/@mongodb-js/oidc-mock-provider@0.13.6/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@mongodb-js/oidc-mock-provider@0.13.6/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OIDCMockProvider = exports.parseCLIArgs = void 0;\nconst events_1 = require(\"events\");\nconst http_1 = require(\"http\");\nconst crypto_1 = __importDefault(require(\"crypto\"));\nconst util_1 = require(\"util\");\nconst url_1 = require(\"url\");\nvar cli_parser_1 = require(\"./cli-parser\");\nObject.defineProperty(exports, \"parseCLIArgs\", { enumerable: true, get: function () { return cli_parser_1.parseCLIArgs; } });\nasync function randomString(n, enc) {\n    return (await (0, util_1.promisify)(crypto_1.default.randomBytes)(n)).toString(enc);\n}\nfunction toJSONtoUTF8toBase64Url(obj) {\n    return Buffer.from(JSON.stringify(obj), 'utf8').toString('base64url');\n}\nclass OIDCMockProvider {\n    httpServer;\n    issuer;\n    kid;\n    keys;\n    state = new Map();\n    config;\n    constructor(config) {\n        this.httpServer = (config.createHTTPServer ?? http_1.createServer)((req, res) => void this.handleRequest(req, res));\n        this.config = config;\n        this.issuer = '';\n        this.kid = '';\n        this.keys = {};\n    }\n    async init() {\n        this.httpServer.listen(this.config.port ?? 0, this.config.bindIpAll ? '::' : this.config.hostname);\n        await (0, events_1.once)(this.httpServer, 'listening');\n        const { port } = this.httpServer.address();\n        this.issuer = `${'setSecureContext' in this.httpServer ? 'https' : 'http'}://${this.config.hostname ?? 'localhost'}:${port}`;\n        this.kid = await randomString(8, 'hex');\n        this.keys = await (0, util_1.promisify)(crypto_1.default.generateKeyPair)('rsa', {\n            modulusLength: 2048,\n        });\n        return this;\n    }\n    static async create(config) {\n        return await new this(config).init();\n    }\n    async close() {\n        this.httpServer.close();\n        await (0, events_1.once)(this.httpServer, 'close');\n    }\n    async handleRequest(req, res) {\n        res.setHeader('Content-Type', 'application/json');\n        try {\n            const url = new URL(req.url || '/', this.issuer);\n            if (req.method === 'POST') {\n                if (!/^application\\/x-www-form-urlencoded(;charset=utf-?8)?$/i.test(req.headers['content-type'] ?? '')) {\n                    throw new Error('Only accepting application/x-www-form-urlencoded POST bodies');\n                }\n                let body = '';\n                for await (const chunk of req.setEncoding('utf8')) {\n                    body += chunk;\n                }\n                const parsed = new url_1.URLSearchParams(body);\n                url.search = new url_1.URLSearchParams({\n                    ...Object.fromEntries(url.searchParams),\n                    ...Object.fromEntries(parsed),\n                }).toString();\n            }\n            let result;\n            await this.config.overrideRequestHandler?.(url.toString(), req, res);\n            if (res.writableEnded)\n                return;\n            switch (url.pathname) {\n                case '/.well-known/openid-configuration':\n                    result = {\n                        issuer: this.issuer,\n                        token_endpoint: new URL('/token', this.issuer).toString(),\n                        authorization_endpoint: new URL('/authorize', this.issuer).toString(),\n                        jwks_uri: new URL('/jwks', this.issuer).toString(),\n                        device_authorization_endpoint: new URL('/device', this.issuer).toString(),\n                        ...this.config.additionalIssuerMetadata?.(),\n                    };\n                    break;\n                case '/jwks':\n                    result = {\n                        keys: [\n                            {\n                                alg: 'RS256',\n                                kid: this.kid,\n                                ...this.keys.publicKey.export({ format: 'jwk' }),\n                            },\n                        ],\n                    };\n                    break;\n                case '/authorize': {\n                    const { client_id, scope, response_type, redirect_uri, code_challenge, code_challenge_method, state, nonce, } = Object.fromEntries(url.searchParams);\n                    if (response_type !== 'code') {\n                        throw new Error(`unknown response_type ${response_type}`);\n                    }\n                    const redirectTo = new URL(redirect_uri);\n                    redirectTo.search = new url_1.URLSearchParams({\n                        code: await this.storeForSingleRetrieval({\n                            client_id,\n                            scope,\n                            code_challenge,\n                            code_challenge_method,\n                            nonce,\n                        }),\n                        state,\n                    }).toString();\n                    res.statusCode = 307;\n                    res.setHeader('Location', redirectTo.toString());\n                    res.end(`Moved to ${redirectTo.toString()}`);\n                    break;\n                }\n                case '/token': {\n                    const { code, code_verifier, device_code } = Object.fromEntries(url.searchParams);\n                    const { client_id, scope, code_challenge, code_challenge_method, isDeviceCode, nonce, } = this.retrieveFromStorage(device_code ?? code);\n                    if (!isDeviceCode) {\n                        if (code_challenge_method !== 'S256') {\n                            throw new Error(`Unsupported code challenge method ${String(code_challenge_method)}`);\n                        }\n                        const expectedChallenge = crypto_1.default\n                            .createHash('sha256')\n                            .update(code_verifier)\n                            .digest('hex');\n                        const actualChallenge = Buffer.from(code_challenge, 'base64').toString('hex');\n                        if (expectedChallenge !== actualChallenge) {\n                            throw new Error('Challenge mismatch');\n                        }\n                    }\n                    const { access_token, id_token, expires_in, skipRefreshToken } = await this.issueToken({\n                        client_id,\n                        scope,\n                        nonce,\n                    });\n                    result = {\n                        access_token: access_token,\n                        id_token: id_token,\n                        refresh_token: skipRefreshToken\n                            ? undefined\n                            : await this.storeForSingleRetrieval({\n                                id_token,\n                                access_token,\n                            }),\n                        token_type: 'Bearer',\n                        expires_in,\n                    };\n                    break;\n                }\n                case '/device': {\n                    const { client_id, scope } = Object.fromEntries(url.searchParams);\n                    const device_code = await this.storeForSingleRetrieval({\n                        client_id,\n                        scope,\n                        isDeviceCode: true,\n                    });\n                    result = {\n                        device_code,\n                        user_code: await randomString(8, 'hex'),\n                        verification_uri: new URL('/verify-device', this.issuer).toString(),\n                        expires_in: 3600,\n                        interval: 1,\n                    };\n                    break;\n                }\n                case '/verify-device':\n                    res.statusCode = 200;\n                    result = { status: 'Verified!' };\n                    break;\n                default:\n                    res.statusCode = 404;\n                    result = { error: 'not found:' + url.pathname };\n                    break;\n            }\n            res.end(JSON.stringify(result));\n        }\n        catch (err) {\n            res.statusCode = 500;\n            res.end(JSON.stringify({\n                error: typeof err === 'object' && err && 'message' in err\n                    ? err.message\n                    : String(err),\n            }));\n        }\n    }\n    async issueToken(metadata) {\n        const { expires_in, payload, skipIdToken, skipRefreshToken, customIdTokenPayload, } = await this.config.getTokenPayload(metadata);\n        const currentTimeInSeconds = Math.floor(Date.now() / 1000);\n        const header = {\n            alg: 'RS256',\n            typ: 'JWT',\n            kid: this.kid,\n        };\n        const fullPayload = {\n            jti: await randomString(8, 'hex'),\n            iat: currentTimeInSeconds,\n            exp: currentTimeInSeconds + expires_in,\n            client_id: metadata.client_id,\n            scope: metadata.scope,\n            iss: this.issuer,\n            aud: metadata.client_id,\n            nonce: metadata.nonce,\n            ...payload,\n        };\n        const makeToken = (payload) => {\n            const signedMaterial = toJSONtoUTF8toBase64Url(header) +\n                '.' +\n                toJSONtoUTF8toBase64Url(payload);\n            const signature = crypto_1.default\n                .createSign('RSA-SHA256')\n                .update(signedMaterial)\n                .sign(this.keys.privateKey, 'base64url');\n            return `${signedMaterial}.${signature}`;\n        };\n        return {\n            expires_in,\n            access_token: makeToken(fullPayload),\n            id_token: skipIdToken\n                ? undefined\n                : makeToken({\n                    ...fullPayload,\n                    aud: metadata.client_id,\n                    ...customIdTokenPayload,\n                }),\n            skipRefreshToken: !!skipRefreshToken,\n        };\n    }\n    async storeForSingleRetrieval(payload) {\n        const id = await randomString(12, 'base64');\n        this.state.set(id, payload);\n        return id;\n    }\n    retrieveFromStorage(id) {\n        const entry = this.state.get(id);\n        this.state.delete(id);\n        return entry;\n    }\n}\nexports.OIDCMockProvider = OIDCMockProvider;\n"]}