UNPKG

@hapic/oauth2

Version:

A oauth2 api client based on axios.

1 lines 41.5 kB
{"version":3,"file":"index.mjs","sources":["../src/domains/authorize/constants.ts","../src/utils/has-own-property.ts","../src/utils/scope.ts","../src/domains/authorize/helper.ts","../src/domains/base.ts","../src/domains/authorize/module.ts","../src/domains/token/utils/header-transformation.ts","../src/domains/token/utils/request-transformation.ts","../src/domains/token/module.ts","../src/domains/userinfo/index.ts","../src/module.ts","../src/instance.ts","../src/constants.ts","../src/open-id/provider-metadata.ts","../src/open-id/client.ts","../src/open-id/url.ts","../src/index.ts"],"sourcesContent":["/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum AuthorizeResponseMode {\n QUERY = 'query',\n FRAGMENT = 'fragment',\n FORM_POST = 'form_post',\n WEB_MESSAGE = 'web_message',\n}\n\nexport enum AuthorizeCodeChallengeMethod {\n SHA_256 = 'S256',\n PLAIN = 'plain',\n}\n\nexport enum AuthorizeResponseType {\n NONE = 'none',\n CODE = 'code',\n TOKEN = 'token',\n ID_TOKEN = 'id_token',\n}\n","/*\n * Copyright (c) 2021.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function hasOwnProperty<X extends {}, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function scopeToArray(scope: string[] | string) : string[] {\n return Array.isArray(scope) ?\n scope :\n scope.split(' ');\n}\n\nexport function scopeToString(scope: string[] | string) : string {\n if (typeof scope === 'string') {\n return scope;\n }\n\n return [\n ...new Set(scope),\n ].join(' ');\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { scopeToString } from '../../utils';\nimport type { AuthorizeParameters } from './types';\n\nexport function buildAuthorizeURL(\n url: string,\n parameters: AuthorizeParameters,\n) : string {\n const output = new URL(url);\n\n if (parameters.response_type) {\n output.searchParams.set(\n 'response_type',\n Array.isArray(parameters.response_type) ?\n scopeToString(parameters.response_type) :\n parameters.response_type,\n );\n } else {\n output.searchParams.set('response_type', 'code');\n }\n\n if (parameters.client_id) {\n output.searchParams.set('client_id', parameters.client_id);\n }\n\n if (parameters.redirect_uri) {\n output.searchParams.set('redirect_uri', parameters.redirect_uri);\n }\n\n if (parameters.response_mode) {\n output.searchParams.set('response_mode', parameters.response_mode);\n }\n\n if (parameters.scope) {\n const scope = Array.isArray(parameters.scope) ?\n scopeToString(parameters.scope) :\n parameters.scope;\n\n output.searchParams.set('scope', scope);\n }\n\n if (parameters.state) {\n output.searchParams.set('state', parameters.state);\n }\n\n if (parameters.code_challenge) {\n output.searchParams.set('code_challenge', parameters.code_challenge);\n }\n\n if (parameters.code_challenge_method) {\n output.searchParams.set('code_challenge_method', parameters.code_challenge_method);\n }\n\n return output.href;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createClient, isClient } from 'hapic';\nimport type { Client, RequestBaseOptions } from 'hapic';\nimport type { Options } from '../config';\nimport type { BaseAPIContext } from './type';\n\nexport abstract class BaseAPI {\n protected client! : Client;\n\n protected options!: Options;\n\n // -----------------------------------------------------------------------------------\n\n constructor(context: BaseAPIContext = {}) {\n this.setClient(context.client);\n this.setOptions(context.options);\n }\n\n // -----------------------------------------------------------------------------------\n\n setClient(input?: Client | RequestBaseOptions) {\n this.client = isClient(input) ?\n input :\n createClient(input);\n }\n\n setOptions(options?: Options) {\n this.options = options || {};\n }\n\n setOption<K extends keyof Options>(key: K, value: Options[K]) {\n this.options[key] = value;\n }\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildAuthorizeURL } from './helper';\nimport type { AuthorizeParameters } from './types';\nimport { BaseAPI } from '../base';\n\nexport class AuthorizeAPI extends BaseAPI {\n /**\n * Build authorize url based on\n * input parameters.\n *\n * @param parameters\n */\n buildURL(parameters: Partial<AuthorizeParameters> = {}) : string {\n let baseURL : string;\n\n if (this.options.authorizationEndpoint) {\n baseURL = this.options.authorizationEndpoint;\n } else {\n const clientURL = this.client.defaults.baseURL;\n\n baseURL = new URL('authorize', clientURL).href;\n }\n\n return buildAuthorizeURL(baseURL, {\n ...parameters,\n redirect_uri: parameters.redirect_uri || this.options.redirectUri,\n client_id: parameters.client_id || this.options.clientId,\n scope: parameters.scope || this.options.scope,\n response_type: parameters.response_type || 'code',\n });\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport { stringifyAuthorizationHeader } from 'hapic';\nimport type { TokenBaseOptions } from '../type';\n\n/**\n * Set Content-Type and Authorization Header for request.\n *\n * @param headers\n * @param options\n */\nexport function transformHeadersForTokenAPIRequest(\n headers: Headers,\n options?: TokenBaseOptions,\n) : void {\n options = options || {};\n\n // set content type\n headers.set('Content-Type', 'application/x-www-form-urlencoded');\n\n if (\n options.authorizationHeaderInherit &&\n headers.has('Authorization')\n ) {\n return;\n }\n\n // request should be in general unauthorized\n headers.delete('Authorization');\n\n if (options.authorizationHeader) {\n const header = typeof options.authorizationHeader === 'string' ?\n options.authorizationHeader :\n stringifyAuthorizationHeader(options.authorizationHeader);\n\n headers.set('Authorization', header);\n\n return;\n }\n\n if (\n options.clientCredentialsAsHeader &&\n options.clientId &&\n options.clientSecret\n ) {\n headers.set('Authorization', stringifyAuthorizationHeader({\n type: 'Basic',\n username: options.clientId,\n password: options.clientSecret,\n }));\n }\n}\n","/*\n * Copyright (c) 2023-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from 'hapic';\nimport type { RequestTransformer } from 'hapic';\nimport type { ClientAuthenticationParameters, TokenBaseOptions } from '../type';\nimport { transformHeadersForTokenAPIRequest } from './header-transformation';\n\nexport function createRequestTransformerForTokenAPIRequest(\n parameters: ClientAuthenticationParameters,\n options?: TokenBaseOptions,\n) : RequestTransformer {\n return (data: any, headers: Headers) => {\n options = options || {};\n\n if (!options.clientId) {\n options.clientId = parameters.client_id;\n options.clientSecret = parameters.client_secret;\n }\n\n transformHeadersForTokenAPIRequest(headers, options);\n\n if (options.clientCredentialsAsHeader) {\n if (data instanceof URLSearchParams) {\n data.delete('client_id');\n data.delete('client_secret');\n\n return data;\n }\n\n if (isObject(data)) {\n if (typeof data.client_id !== 'undefined') {\n delete data.client_id;\n }\n\n if (typeof data.client_secret !== 'undefined') {\n delete data.client_secret;\n }\n }\n }\n\n return data;\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { RequestTransformer } from 'hapic';\nimport { HeaderName } from 'hapic';\nimport type { JwtPayload } from '../../type';\n\nimport { BaseAPI } from '../base';\nimport type {\n ClientAuthenticationParameters,\n TokenAuthorizationCodeGrantParameters,\n TokenBaseOptions,\n TokenClientCredentialsGrantParameters,\n TokenGrantParameters,\n TokenGrantResponse,\n TokenIntrospectParameters,\n TokenPasswordGrantParameters,\n TokenRefreshTokenGrantParameters,\n TokenRevokeParameters,\n TokenRobotCredentialsGrantParameters,\n} from './type';\nimport { createRequestTransformerForTokenAPIRequest } from './utils';\n\nexport class TokenAPI extends BaseAPI {\n // ------------------------------------------------------------------\n\n async createWithRefreshToken(\n parameters: Omit<TokenRefreshTokenGrantParameters, 'grant_type'>,\n options?: TokenBaseOptions,\n ) {\n return this.create({\n grant_type: 'refresh_token',\n ...parameters,\n }, options);\n }\n\n async createWithClientCredentials(\n parameters?: Omit<TokenClientCredentialsGrantParameters, 'grant_type'>,\n options?: TokenBaseOptions,\n ) {\n return this.create({\n grant_type: 'client_credentials',\n ...(parameters || {}),\n }, options);\n }\n\n async createWithPassword(\n parameters: Omit<TokenPasswordGrantParameters, 'grant_type'>,\n options?: TokenBaseOptions,\n ) {\n return this.create({\n grant_type: 'password',\n ...parameters,\n }, options);\n }\n\n async createWithAuthorizationCode(\n parameters: Omit<TokenAuthorizationCodeGrantParameters, 'grant_type'>,\n options?: TokenBaseOptions,\n ): Promise<TokenGrantResponse> {\n return this.create({\n grant_type: 'authorization_code',\n ...parameters,\n }, options);\n }\n\n async createWithRobotCredentials(\n parameters: Omit<TokenRobotCredentialsGrantParameters, 'grant_type'>,\n options?: TokenBaseOptions,\n ) {\n return this.create({\n grant_type: 'robot_credentials',\n ...parameters,\n }, options);\n }\n\n // ------------------------------------------------------------------\n\n /**\n * @throws Error\n * @param parameters\n * @param options\n */\n async create(\n parameters: TokenGrantParameters,\n options: TokenBaseOptions = {},\n ): Promise<TokenGrantResponse> {\n this.extendCreateParameters(parameters);\n\n const urlSearchParams = this.buildURLSearchParams(parameters);\n\n const { data } = await this.client.post(\n (this.options.tokenEndpoint || '/token'),\n urlSearchParams,\n {\n transform: this.buildRequestTransformers(parameters, options),\n headers: {\n [HeaderName.ACCEPT]: 'application/json',\n },\n },\n );\n\n const tokenResponse: TokenGrantResponse = {\n access_token: data.access_token,\n expires_in: data.expires_in,\n token_type: data.token_type || 'Bearer',\n };\n\n if (data.refresh_token) {\n tokenResponse.refresh_token = data.refresh_token;\n }\n\n if (typeof data.id_token === 'string') {\n tokenResponse.id_token = data.id_token;\n }\n\n if (typeof data.mac_key === 'string') {\n tokenResponse.mac_key = data.mac_key;\n }\n\n if (typeof data.mac_algorithm === 'string') {\n tokenResponse.mac_algorithm = data.mac_algorithm;\n }\n\n return tokenResponse;\n }\n\n async revoke(\n parameters: TokenRevokeParameters = {},\n options: TokenBaseOptions = {},\n ) {\n const urlSearchParams = this.buildURLSearchParams(parameters);\n\n return this.client.post(\n (this.options.revocationEndpoint || '/token/revoke'),\n urlSearchParams,\n {\n transform: this.buildRequestTransformers(parameters, options),\n headers: {\n [HeaderName.ACCEPT]: 'application/json',\n },\n },\n );\n }\n\n async introspect<T extends JwtPayload>(\n parameters: TokenIntrospectParameters = {},\n options: TokenBaseOptions = {},\n ): Promise<T> {\n const urlSearchParams = this.buildURLSearchParams(parameters);\n\n const { data } = await this.client.post(\n this.options.introspectionEndpoint || '/token/introspect',\n urlSearchParams,\n {\n transform: this.buildRequestTransformers(parameters, options),\n headers: {\n [HeaderName.ACCEPT]: 'application/json',\n },\n },\n );\n\n return data;\n }\n\n protected buildRequestTransformers(\n parameters: ClientAuthenticationParameters,\n options: TokenBaseOptions = {},\n ) : RequestTransformer[] {\n const transformers : RequestTransformer[] = [];\n\n if (!options.clientId) {\n if (this.options.clientId) {\n options.clientId = this.options.clientId;\n }\n\n if (this.options.clientSecret) {\n options.clientSecret = this.options.clientSecret;\n }\n }\n\n transformers.push(createRequestTransformerForTokenAPIRequest(parameters, options));\n\n if (this.client.defaults.transform) {\n if (Array.isArray(this.client.defaults.transform)) {\n transformers.push(...this.client.defaults.transform);\n } else {\n transformers.push(this.client.defaults.transform);\n }\n }\n\n return transformers;\n }\n\n // ------------------------------------------------------------------\n\n extendCreateParameters(parameters: TokenGrantParameters): TokenGrantParameters {\n if (\n parameters.grant_type !== 'authorization_code' &&\n parameters.grant_type !== 'robot_credentials'\n ) {\n if (!parameters.scope && this.options.scope) {\n parameters.scope = this.options.scope;\n }\n }\n\n if (parameters.grant_type === 'authorization_code') {\n if (!parameters.redirect_uri && this.options.redirectUri) {\n parameters.redirect_uri = this.options.redirectUri;\n }\n }\n\n if (!parameters.client_id) {\n if (parameters.client_secret) {\n delete parameters.client_secret;\n }\n\n if (this.options.clientId) {\n parameters.client_id = this.options.clientId;\n }\n\n if (this.options.clientSecret) {\n parameters.client_secret = this.options.clientSecret;\n }\n }\n\n return parameters;\n }\n\n // ------------------------------------------------------------------\n\n protected buildURLSearchParams(\n input: Record<string, any>,\n ) : URLSearchParams {\n const urlSearchParams = new URLSearchParams();\n const keys = Object.keys(input);\n for (let i = 0; i < keys.length; i++) {\n const value = input[keys[i]];\n\n if (typeof value === 'string' && !!value) {\n urlSearchParams.append(keys[i], value);\n } else if (Array.isArray(value)) {\n const str = value.filter((el) => el).join(' ');\n if (str) {\n urlSearchParams.append(keys[i], str);\n }\n }\n }\n\n return urlSearchParams;\n }\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { AuthorizationHeader } from 'hapic';\nimport { HeaderName, stringifyAuthorizationHeader } from 'hapic';\nimport { BaseAPI } from '../base';\nimport type { BaseAPIContext } from '../type';\n\nexport class UserInfoAPI extends BaseAPI {\n // eslint-disable-next-line no-useless-constructor,@typescript-eslint/no-useless-constructor\n constructor(context?: BaseAPIContext) {\n super(context);\n }\n\n // -----------------------------------------------------------------------------------\n\n /**\n * @throws Error\n * @param header\n */\n async get<T extends Record<string, any> = Record<string, any>>(\n header?: string | AuthorizationHeader,\n ) : Promise<T> {\n const headers : Record<string, string> = {\n [HeaderName.ACCEPT]: 'application/json',\n };\n\n if (header) {\n if (typeof header === 'string') {\n if (header.indexOf(' ') === -1) {\n headers.Authorization = `Bearer ${header}`;\n } else {\n headers.Authorization = header;\n }\n } else {\n headers.Authorization = stringifyAuthorizationHeader(header);\n }\n }\n\n const { data } = await this.client.get(\n (this.options.userinfoEndpoint || '/userinfo'),\n {\n headers,\n },\n );\n\n return data;\n }\n}\n","/*\n * Copyright (c) 2021-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { Client } from 'hapic';\nimport type { ConfigInput, Options } from './config';\n\nimport { AuthorizeAPI, TokenAPI, UserInfoAPI } from './domains';\n\nexport class OAuth2Client extends Client {\n override readonly '@instanceof' = Symbol.for('OAuth2Client');\n\n public readonly options : Options;\n\n public authorize: AuthorizeAPI;\n\n public token : TokenAPI;\n\n public userInfo : UserInfoAPI;\n\n // -----------------------------------------------------------------------------------\n\n constructor(input?: ConfigInput) {\n input = input || {};\n\n super(input.request);\n\n const options = input.options || {};\n\n this.options = options;\n\n this.token = new TokenAPI({ client: this, options });\n this.authorize = new AuthorizeAPI({ client: this, options });\n this.userInfo = new UserInfoAPI({ client: this, options });\n }\n}\n","/*\n * Copyright (c) 2022-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport {\n hasOwnProperty,\n verifyInstanceBySymbol,\n} from 'hapic';\nimport type { ConfigInput } from './config';\nimport { OAuth2Client } from './module';\n\nconst instanceMap: Record<string, OAuth2Client> = {};\n\n/**\n * Verify if an oauth2 client singleton instance exists.\n *\n * @param key\n */\nexport function hasClient(\n key?: string,\n) : boolean {\n return hasOwnProperty(instanceMap, key || 'default');\n}\n\n/**\n * Set the oauth2 client singleton instance.\n *\n * @param client\n * @param key\n */\nexport function setClient(\n client: OAuth2Client,\n key?: string,\n) : OAuth2Client {\n key = key || 'default';\n\n instanceMap[key] = client;\n\n return client;\n}\n\n/**\n * Receive an oauth2 singleton instance.\n *\n * @param key\n */\nexport function useClient(\n key?: string,\n) : OAuth2Client {\n key = key || 'default';\n\n if (Object.prototype.hasOwnProperty.call(instanceMap, key)) {\n return instanceMap[key];\n }\n\n const instance = createClient();\n\n instanceMap[key] = instance;\n\n return instance;\n}\n\n/**\n * Unset an oauth2 client singleton instance.\n *\n * @param key\n */\nexport function unsetClient(key?: string) {\n key = key || 'default';\n if (hasOwnProperty(instanceMap, key)) {\n delete instanceMap[key];\n }\n}\n\n/**\n * Create an oauth2 client.\n *\n * @param input\n */\nexport function createClient(input?: ConfigInput) {\n return new OAuth2Client(input);\n}\n\n/**\n * Check if the argument is of instance Client.\n *\n * @param input\n */\nexport function isClient(input: unknown): input is OAuth2Client {\n if (input instanceof OAuth2Client) {\n return true;\n }\n\n return verifyInstanceBySymbol(input, 'OAuth2Client');\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum ResponseType {\n NONE = 'none',\n CODE = 'code',\n ID_TOKEN = 'id_token',\n TOKEN = 'token',\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport type { Options } from '../config';\nimport type { OpenIDProviderMetadata } from './type';\n\nexport function parseOpenIDProviderMetadata(\n data: OpenIDProviderMetadata,\n) : Options {\n const options: Options = {};\n\n if (data.authorization_endpoint) {\n options.authorizationEndpoint = data.authorization_endpoint;\n }\n\n if (data.introspection_endpoint) {\n options.introspectionEndpoint = data.introspection_endpoint;\n }\n\n if (data.token_endpoint) {\n options.tokenEndpoint = data.token_endpoint;\n }\n\n if (data.userinfo_endpoint) {\n options.userinfoEndpoint = data.userinfo_endpoint;\n }\n\n if (data.revocation_endpoint) {\n options.revocationEndpoint = data.revocation_endpoint;\n }\n\n return options;\n}\n","/*\n * Copyright (c) 2023-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client as BaseClient, RequestBaseOptions } from 'hapic';\nimport { createClient, isClient } from 'hapic';\nimport { OAuth2Client } from '../module';\nimport { parseOpenIDProviderMetadata } from './provider-metadata';\nimport type { OpenIDProviderMetadata } from './type';\n\n/**\n * Create a client instance by requesting details of\n * the open-id discovery endpoint.\n *\n * @param url (.e.g. .well-known/openid-configuration)\n * @param options\n */\nexport async function createClientWithOpenIDDiscoveryURL(\n url: string,\n options?: BaseClient | RequestBaseOptions,\n) : Promise<OAuth2Client> {\n let client: BaseClient;\n\n if (isClient(options)) {\n client = options;\n } else {\n client = createClient(options);\n }\n\n const { data }: { data: OpenIDProviderMetadata } = await client.get(url);\n\n return new OAuth2Client({\n request: client.defaults,\n options: parseOpenIDProviderMetadata(data),\n });\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function buildOpenIDDiscoveryURL(baseURL?: string) : string {\n let url = '.well-known/openid-configuration';\n\n if (baseURL) {\n url = new URL(url, baseURL).href;\n } else {\n url = `/${url}`;\n }\n\n return url;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createClient } from './instance';\n\nexport * from './config';\nexport * from './client';\nexport * from './constants';\nexport * from './instance';\nexport * from './domains';\nexport * from './open-id';\nexport * from './module';\nexport * from './type';\nexport * from './utils';\n\nconst client = createClient();\nexport default client;\n"],"names":["AuthorizeResponseMode","AuthorizeCodeChallengeMethod","AuthorizeResponseType","hasOwnProperty","obj","prop","Object","prototype","call","scopeToArray","scope","Array","isArray","split","scopeToString","Set","join","buildAuthorizeURL","url","parameters","output","URL","response_type","searchParams","set","client_id","redirect_uri","response_mode","state","code_challenge","code_challenge_method","href","BaseAPI","setClient","input","client","isClient","createClient","setOptions","options","setOption","key","value","context","AuthorizeAPI","buildURL","baseURL","authorizationEndpoint","clientURL","defaults","redirectUri","clientId","transformHeadersForTokenAPIRequest","headers","authorizationHeaderInherit","has","delete","authorizationHeader","header","stringifyAuthorizationHeader","clientCredentialsAsHeader","clientSecret","type","username","password","createRequestTransformerForTokenAPIRequest","data","client_secret","URLSearchParams","isObject","TokenAPI","createWithRefreshToken","create","grant_type","createWithClientCredentials","createWithPassword","createWithAuthorizationCode","createWithRobotCredentials","extendCreateParameters","urlSearchParams","buildURLSearchParams","post","tokenEndpoint","transform","buildRequestTransformers","HeaderName","ACCEPT","tokenResponse","access_token","expires_in","token_type","refresh_token","id_token","mac_key","mac_algorithm","revoke","revocationEndpoint","introspect","introspectionEndpoint","transformers","push","keys","i","length","append","str","filter","el","UserInfoAPI","get","indexOf","Authorization","userinfoEndpoint","OAuth2Client","Client","request","Symbol","for","token","authorize","userInfo","instanceMap","hasClient","useClient","instance","unsetClient","verifyInstanceBySymbol","ResponseType","parseOpenIDProviderMetadata","authorization_endpoint","introspection_endpoint","token_endpoint","userinfo_endpoint","revocation_endpoint","createClientWithOpenIDDiscoveryURL","buildOpenIDDiscoveryURL"],"mappings":"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"}