@hapic/oauth2
Version:
A oauth2 api client based on axios.
1 lines • 41.5 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","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","constructor","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":";;;;;;AAAA;;;;;IAOO,IAAKA,qBAAAA,iBAAAA,SAAAA,qBAAAA,EAAAA;;;;;AAAAA,IAAAA,OAAAA,qBAAAA;AAKX,CAAA,CAAA,EAAA;AAEM,IAAA,4BAAKC,iBAAAA,SAAAA,4BAAAA,EAAAA;;;AAAAA,IAAAA,OAAAA,4BAAAA;AAGX,CAAA,CAAA,EAAA;AAEM,IAAA,qBAAKC,iBAAAA,SAAAA,qBAAAA,EAAAA;;;;;AAAAA,IAAAA,OAAAA,qBAAAA;AAKX,CAAA,CAAA,EAAA;;ACxBD;;;;;AAKC;AAGM,SAASC,cAAAA,CAAoDC,GAAM,EAAEC,IAAO,EAAA;AAC/E,IAAA,OAAOC,OAAOC,SAAS,CAACJ,cAAc,CAACK,IAAI,CAACJ,GAAKC,EAAAA,IAAAA,CAAAA;AACrD;;ACVA;;;;;IAOO,SAASI,YAAAA,CAAaC,KAAwB,EAAA;AACjD,IAAA,OAAOC,MAAMC,OAAO,CAACF,SACjBA,KACAA,GAAAA,KAAAA,CAAMG,KAAK,CAAC,GAAA,CAAA;AACpB;AAEO,SAASC,cAAcJ,KAAwB,EAAA;IAClD,IAAI,OAAOA,UAAU,QAAU,EAAA;QAC3B,OAAOA,KAAAA;AACX;IAEA,OAAO;AACA,QAAA,GAAA,IAAIK,GAAIL,CAAAA,KAAAA;AACd,KAAA,CAACM,IAAI,CAAC,GAAA,CAAA;AACX;;ACXO,SAASC,iBAAAA,CACZC,GAAW,EACXC,UAA+B,EAAA;IAE/B,MAAMC,MAAAA,GAAS,IAAIC,GAAIH,CAAAA,GAAAA,CAAAA;IAEvB,IAAIC,UAAAA,CAAWG,aAAa,EAAE;AAC1BF,QAAAA,MAAAA,CAAOG,YAAY,CAACC,GAAG,CACnB,eAAA,EACAb,MAAMC,OAAO,CAACO,UAAWG,CAAAA,aAAa,IAClCR,aAAcK,CAAAA,UAAAA,CAAWG,aAAa,CAAA,GACtCH,WAAWG,aAAa,CAAA;KAE7B,MAAA;AACHF,QAAAA,MAAAA,CAAOG,YAAY,CAACC,GAAG,CAAC,eAAiB,EAAA,MAAA,CAAA;AAC7C;IAEA,IAAIL,UAAAA,CAAWM,SAAS,EAAE;AACtBL,QAAAA,MAAAA,CAAOG,YAAY,CAACC,GAAG,CAAC,WAAA,EAAaL,WAAWM,SAAS,CAAA;AAC7D;IAEA,IAAIN,UAAAA,CAAWO,YAAY,EAAE;AACzBN,QAAAA,MAAAA,CAAOG,YAAY,CAACC,GAAG,CAAC,cAAA,EAAgBL,WAAWO,YAAY,CAAA;AACnE;IAEA,IAAIP,UAAAA,CAAWQ,aAAa,EAAE;AAC1BP,QAAAA,MAAAA,CAAOG,YAAY,CAACC,GAAG,CAAC,eAAA,EAAiBL,WAAWQ,aAAa,CAAA;AACrE;IAEA,IAAIR,UAAAA,CAAWT,KAAK,EAAE;AAClB,QAAA,MAAMA,KAAQC,GAAAA,KAAAA,CAAMC,OAAO,CAACO,UAAWT,CAAAA,KAAK,CACxCI,GAAAA,aAAAA,CAAcK,UAAWT,CAAAA,KAAK,CAC9BS,GAAAA,UAAAA,CAAWT,KAAK;AAEpBU,QAAAA,MAAAA,CAAOG,YAAY,CAACC,GAAG,CAAC,OAASd,EAAAA,KAAAA,CAAAA;AACrC;IAEA,IAAIS,UAAAA,CAAWS,KAAK,EAAE;AAClBR,QAAAA,MAAAA,CAAOG,YAAY,CAACC,GAAG,CAAC,OAAA,EAASL,WAAWS,KAAK,CAAA;AACrD;IAEA,IAAIT,UAAAA,CAAWU,cAAc,EAAE;AAC3BT,QAAAA,MAAAA,CAAOG,YAAY,CAACC,GAAG,CAAC,gBAAA,EAAkBL,WAAWU,cAAc,CAAA;AACvE;IAEA,IAAIV,UAAAA,CAAWW,qBAAqB,EAAE;AAClCV,QAAAA,MAAAA,CAAOG,YAAY,CAACC,GAAG,CAAC,uBAAA,EAAyBL,WAAWW,qBAAqB,CAAA;AACrF;AAEA,IAAA,OAAOV,OAAOW,IAAI;AACtB;;AChDO,MAAeC,OAAAA,CAAAA;;AAclBC,IAAAA,SAAAA,CAAUC,KAAmC,EAAE;AAC3C,QAAA,IAAI,CAACC,MAAM,GAAGC,cAASF,CAAAA,KAAAA,CAAAA,GACnBA,QACAG,kBAAaH,CAAAA,KAAAA,CAAAA;AACrB;AAEAI,IAAAA,UAAAA,CAAWC,OAAiB,EAAE;AAC1B,QAAA,IAAI,CAACA,OAAO,GAAGA,OAAAA,IAAW,EAAC;AAC/B;IAEAC,SAAmCC,CAAAA,GAAM,EAAEC,KAAiB,EAAE;AAC1D,QAAA,IAAI,CAACH,OAAO,CAACE,GAAAA,CAAI,GAAGC,KAAAA;AACxB;;IAnBAC,WAAYC,CAAAA,OAAAA,GAA0B,EAAE,CAAE;AACtC,QAAA,IAAI,CAACX,SAAS,CAACW,OAAAA,CAAQT,MAAM,CAAA;AAC7B,QAAA,IAAI,CAACG,UAAU,CAACM,OAAAA,CAAQL,OAAO,CAAA;AACnC;AAiBJ;;AC5BO,MAAMM,YAAqBb,SAAAA,OAAAA,CAAAA;AAC9B;;;;;AAKC,QACDc,QAAS3B,CAAAA,UAAAA,GAA2C,EAAE,EAAW;QAC7D,IAAI4B,OAAAA;AAEJ,QAAA,IAAI,IAAI,CAACR,OAAO,CAACS,qBAAqB,EAAE;AACpCD,YAAAA,OAAAA,GAAU,IAAI,CAACR,OAAO,CAACS,qBAAqB;SACzC,MAAA;AACH,YAAA,MAAMC,YAAY,IAAI,CAACd,MAAM,CAACe,QAAQ,CAACH,OAAO;AAE9CA,YAAAA,OAAAA,GAAU,IAAI1B,GAAAA,CAAI,WAAa4B,EAAAA,SAAAA,CAAAA,CAAWlB,IAAI;AAClD;AAEA,QAAA,OAAOd,kBAAkB8B,OAAS,EAAA;AAC9B,YAAA,GAAG5B,UAAU;AACbO,YAAAA,YAAAA,EAAcP,WAAWO,YAAY,IAAI,IAAI,CAACa,OAAO,CAACY,WAAW;AACjE1B,YAAAA,SAAAA,EAAWN,WAAWM,SAAS,IAAI,IAAI,CAACc,OAAO,CAACa,QAAQ;AACxD1C,YAAAA,KAAAA,EAAOS,WAAWT,KAAK,IAAI,IAAI,CAAC6B,OAAO,CAAC7B,KAAK;YAC7CY,aAAeH,EAAAA,UAAAA,CAAWG,aAAa,IAAI;AAC/C,SAAA,CAAA;AACJ;AACJ;;AC5BA;;;;;AAKC,IACM,SAAS+B,kCACZC,CAAAA,OAAgB,EAChBf,OAA0B,EAAA;AAE1BA,IAAAA,OAAAA,GAAUA,WAAW,EAAC;;IAGtBe,OAAQ9B,CAAAA,GAAG,CAAC,cAAgB,EAAA,mCAAA,CAAA;AAE5B,IAAA,IACIe,QAAQgB,0BAA0B,IAClCD,OAAQE,CAAAA,GAAG,CAAC,eACd,CAAA,EAAA;AACE,QAAA;AACJ;;AAGAF,IAAAA,OAAAA,CAAQG,MAAM,CAAC,eAAA,CAAA;IAEf,IAAIlB,OAAAA,CAAQmB,mBAAmB,EAAE;QAC7B,MAAMC,MAAAA,GAAS,OAAOpB,OAAAA,CAAQmB,mBAAmB,KAAK,QAClDnB,GAAAA,OAAAA,CAAQmB,mBAAmB,GAC3BE,kCAA6BrB,CAAAA,OAAAA,CAAQmB,mBAAmB,CAAA;QAE5DJ,OAAQ9B,CAAAA,GAAG,CAAC,eAAiBmC,EAAAA,MAAAA,CAAAA;AAE7B,QAAA;AACJ;IAEA,IACIpB,OAAAA,CAAQsB,yBAAyB,IACjCtB,OAAAA,CAAQa,QAAQ,IAChBb,OAAAA,CAAQuB,YAAY,EACtB;QACER,OAAQ9B,CAAAA,GAAG,CAAC,eAAA,EAAiBoC,kCAA6B,CAAA;YACtDG,IAAM,EAAA,OAAA;AACNC,YAAAA,QAAAA,EAAUzB,QAAQa,QAAQ;AAC1Ba,YAAAA,QAAAA,EAAU1B,QAAQuB;AACtB,SAAA,CAAA,CAAA;AACJ;AACJ;;AC3CO,SAASI,0CAAAA,CACZ/C,UAA0C,EAC1CoB,OAA0B,EAAA;AAE1B,IAAA,OAAO,CAAC4B,IAAWb,EAAAA,OAAAA,GAAAA;AACff,QAAAA,OAAAA,GAAUA,WAAW,EAAC;QAEtB,IAAI,CAACA,OAAQa,CAAAA,QAAQ,EAAE;YACnBb,OAAQa,CAAAA,QAAQ,GAAGjC,UAAAA,CAAWM,SAAS;YACvCc,OAAQuB,CAAAA,YAAY,GAAG3C,UAAAA,CAAWiD,aAAa;AACnD;AAEAf,QAAAA,kCAAAA,CAAmCC,OAASf,EAAAA,OAAAA,CAAAA;QAE5C,IAAIA,OAAAA,CAAQsB,yBAAyB,EAAE;AACnC,YAAA,IAAIM,gBAAgBE,eAAiB,EAAA;AACjCF,gBAAAA,IAAAA,CAAKV,MAAM,CAAC,WAAA,CAAA;AACZU,gBAAAA,IAAAA,CAAKV,MAAM,CAAC,eAAA,CAAA;gBAEZ,OAAOU,IAAAA;AACX;AAEA,YAAA,IAAIG,eAASH,IAAO,CAAA,EAAA;AAChB,gBAAA,IAAI,OAAOA,IAAAA,CAAK1C,SAAS,KAAK,WAAa,EAAA;AACvC,oBAAA,OAAO0C,KAAK1C,SAAS;AACzB;AAEA,gBAAA,IAAI,OAAO0C,IAAAA,CAAKC,aAAa,KAAK,WAAa,EAAA;AAC3C,oBAAA,OAAOD,KAAKC,aAAa;AAC7B;AACJ;AACJ;QAEA,OAAOD,IAAAA;AACX,KAAA;AACJ;;ACpBO,MAAMI,QAAiBvC,SAAAA,OAAAA,CAAAA;;AAG1B,IAAA,MAAMwC,sBACFrD,CAAAA,UAAgE,EAChEoB,OAA0B,EAC5B;QACE,OAAO,IAAI,CAACkC,MAAM,CAAC;YACfC,UAAY,EAAA,eAAA;AACZ,YAAA,GAAGvD;SACJoB,EAAAA,OAAAA,CAAAA;AACP;AAEA,IAAA,MAAMoC,2BACFxD,CAAAA,UAAsE,EACtEoB,OAA0B,EAC5B;QACE,OAAO,IAAI,CAACkC,MAAM,CAAC;YACfC,UAAY,EAAA,oBAAA;YACZ,GAAIvD,UAAAA,IAAc;SACnBoB,EAAAA,OAAAA,CAAAA;AACP;AAEA,IAAA,MAAMqC,kBACFzD,CAAAA,UAA4D,EAC5DoB,OAA0B,EAC5B;QACE,OAAO,IAAI,CAACkC,MAAM,CAAC;YACfC,UAAY,EAAA,UAAA;AACZ,YAAA,GAAGvD;SACJoB,EAAAA,OAAAA,CAAAA;AACP;AAEA,IAAA,MAAMsC,2BACF1D,CAAAA,UAAqE,EACrEoB,OAA0B,EACC;QAC3B,OAAO,IAAI,CAACkC,MAAM,CAAC;YACfC,UAAY,EAAA,oBAAA;AACZ,YAAA,GAAGvD;SACJoB,EAAAA,OAAAA,CAAAA;AACP;AAEA,IAAA,MAAMuC,0BACF3D,CAAAA,UAAoE,EACpEoB,OAA0B,EAC5B;QACE,OAAO,IAAI,CAACkC,MAAM,CAAC;YACfC,UAAY,EAAA,mBAAA;AACZ,YAAA,GAAGvD;SACJoB,EAAAA,OAAAA,CAAAA;AACP;;AAIA;;;;AAIC,QACD,MAAMkC,MACFtD,CAAAA,UAAgC,EAChCoB,OAA4B,GAAA,EAAE,EACH;QAC3B,IAAI,CAACwC,sBAAsB,CAAC5D,UAAAA,CAAAA;AAE5B,QAAA,MAAM6D,eAAkB,GAAA,IAAI,CAACC,oBAAoB,CAAC9D,UAAAA,CAAAA;AAElD,QAAA,MAAM,EAAEgD,IAAI,EAAE,GAAG,MAAM,IAAI,CAAChC,MAAM,CAAC+C,IAAI,CAClC,IAAI,CAAC3C,OAAO,CAAC4C,aAAa,IAAI,UAC/BH,eACA,EAAA;AACII,YAAAA,SAAAA,EAAW,IAAI,CAACC,wBAAwB,CAAClE,UAAYoB,EAAAA,OAAAA,CAAAA;YACrDe,OAAS,EAAA;gBACL,CAACgC,gBAAAA,CAAWC,MAAM,GAAG;AACzB;AACJ,SAAA,CAAA;AAGJ,QAAA,MAAMC,aAAoC,GAAA;AACtCC,YAAAA,YAAAA,EAActB,KAAKsB,YAAY;AAC/BC,YAAAA,UAAAA,EAAYvB,KAAKuB,UAAU;YAC3BC,UAAYxB,EAAAA,IAAAA,CAAKwB,UAAU,IAAI;AACnC,SAAA;QAEA,IAAIxB,IAAAA,CAAKyB,aAAa,EAAE;YACpBJ,aAAcI,CAAAA,aAAa,GAAGzB,IAAAA,CAAKyB,aAAa;AACpD;AAEA,QAAA,IAAI,OAAOzB,IAAAA,CAAK0B,QAAQ,KAAK,QAAU,EAAA;YACnCL,aAAcK,CAAAA,QAAQ,GAAG1B,IAAAA,CAAK0B,QAAQ;AAC1C;AAEA,QAAA,IAAI,OAAO1B,IAAAA,CAAK2B,OAAO,KAAK,QAAU,EAAA;YAClCN,aAAcM,CAAAA,OAAO,GAAG3B,IAAAA,CAAK2B,OAAO;AACxC;AAEA,QAAA,IAAI,OAAO3B,IAAAA,CAAK4B,aAAa,KAAK,QAAU,EAAA;YACxCP,aAAcO,CAAAA,aAAa,GAAG5B,IAAAA,CAAK4B,aAAa;AACpD;QAEA,OAAOP,aAAAA;AACX;IAEA,MAAMQ,MAAAA,CACF7E,aAAoC,EAAE,EACtCoB,OAA4B,GAAA,EAAE,EAChC;AACE,QAAA,MAAMyC,eAAkB,GAAA,IAAI,CAACC,oBAAoB,CAAC9D,UAAAA,CAAAA;AAElD,QAAA,OAAO,IAAI,CAACgB,MAAM,CAAC+C,IAAI,CAClB,IAAI,CAAC3C,OAAO,CAAC0D,kBAAkB,IAAI,iBACpCjB,eACA,EAAA;AACII,YAAAA,SAAAA,EAAW,IAAI,CAACC,wBAAwB,CAAClE,UAAYoB,EAAAA,OAAAA,CAAAA;YACrDe,OAAS,EAAA;gBACL,CAACgC,gBAAAA,CAAWC,MAAM,GAAG;AACzB;AACJ,SAAA,CAAA;AAER;IAEA,MAAMW,UAAAA,CACF/E,aAAwC,EAAE,EAC1CoB,OAA4B,GAAA,EAAE,EACpB;AACV,QAAA,MAAMyC,eAAkB,GAAA,IAAI,CAACC,oBAAoB,CAAC9D,UAAAA,CAAAA;AAElD,QAAA,MAAM,EAAEgD,IAAI,EAAE,GAAG,MAAM,IAAI,CAAChC,MAAM,CAAC+C,IAAI,CACnC,IAAI,CAAC3C,OAAO,CAAC4D,qBAAqB,IAAI,qBACtCnB,eACA,EAAA;AACII,YAAAA,SAAAA,EAAW,IAAI,CAACC,wBAAwB,CAAClE,UAAYoB,EAAAA,OAAAA,CAAAA;YACrDe,OAAS,EAAA;gBACL,CAACgC,gBAAAA,CAAWC,MAAM,GAAG;AACzB;AACJ,SAAA,CAAA;QAGJ,OAAOpB,IAAAA;AACX;AAEUkB,IAAAA,wBAAAA,CACNlE,UAA0C,EAC1CoB,OAA4B,GAAA,EAAE,EACT;AACrB,QAAA,MAAM6D,eAAsC,EAAE;QAE9C,IAAI,CAAC7D,OAAQa,CAAAA,QAAQ,EAAE;AACnB,YAAA,IAAI,IAAI,CAACb,OAAO,CAACa,QAAQ,EAAE;AACvBb,gBAAAA,OAAAA,CAAQa,QAAQ,GAAG,IAAI,CAACb,OAAO,CAACa,QAAQ;AAC5C;AAEA,YAAA,IAAI,IAAI,CAACb,OAAO,CAACuB,YAAY,EAAE;AAC3BvB,gBAAAA,OAAAA,CAAQuB,YAAY,GAAG,IAAI,CAACvB,OAAO,CAACuB,YAAY;AACpD;AACJ;QAEAsC,YAAaC,CAAAA,IAAI,CAACnC,0CAAAA,CAA2C/C,UAAYoB,EAAAA,OAAAA,CAAAA,CAAAA;AAEzE,QAAA,IAAI,IAAI,CAACJ,MAAM,CAACe,QAAQ,CAACkC,SAAS,EAAE;YAChC,IAAIzE,KAAAA,CAAMC,OAAO,CAAC,IAAI,CAACuB,MAAM,CAACe,QAAQ,CAACkC,SAAS,CAAG,EAAA;gBAC/CgB,YAAaC,CAAAA,IAAI,IAAI,IAAI,CAAClE,MAAM,CAACe,QAAQ,CAACkC,SAAS,CAAA;aAChD,MAAA;gBACHgB,YAAaC,CAAAA,IAAI,CAAC,IAAI,CAAClE,MAAM,CAACe,QAAQ,CAACkC,SAAS,CAAA;AACpD;AACJ;QAEA,OAAOgB,YAAAA;AACX;;AAIArB,IAAAA,sBAAAA,CAAuB5D,UAAgC,EAAwB;AAC3E,QAAA,IACIA,WAAWuD,UAAU,KAAK,wBAC1BvD,UAAWuD,CAAAA,UAAU,KAAK,mBAC5B,EAAA;YACE,IAAI,CAACvD,WAAWT,KAAK,IAAI,IAAI,CAAC6B,OAAO,CAAC7B,KAAK,EAAE;AACzCS,gBAAAA,UAAAA,CAAWT,KAAK,GAAG,IAAI,CAAC6B,OAAO,CAAC7B,KAAK;AACzC;AACJ;QAEA,IAAIS,UAAAA,CAAWuD,UAAU,KAAK,oBAAsB,EAAA;YAChD,IAAI,CAACvD,WAAWO,YAAY,IAAI,IAAI,CAACa,OAAO,CAACY,WAAW,EAAE;AACtDhC,gBAAAA,UAAAA,CAAWO,YAAY,GAAG,IAAI,CAACa,OAAO,CAACY,WAAW;AACtD;AACJ;QAEA,IAAI,CAAChC,UAAWM,CAAAA,SAAS,EAAE;YACvB,IAAIN,UAAAA,CAAWiD,aAAa,EAAE;AAC1B,gBAAA,OAAOjD,WAAWiD,aAAa;AACnC;AAEA,YAAA,IAAI,IAAI,CAAC7B,OAAO,CAACa,QAAQ,EAAE;AACvBjC,gBAAAA,UAAAA,CAAWM,SAAS,GAAG,IAAI,CAACc,OAAO,CAACa,QAAQ;AAChD;AAEA,YAAA,IAAI,IAAI,CAACb,OAAO,CAACuB,YAAY,EAAE;AAC3B3C,gBAAAA,UAAAA,CAAWiD,aAAa,GAAG,IAAI,CAAC7B,OAAO,CAACuB,YAAY;AACxD;AACJ;QAEA,OAAO3C,UAAAA;AACX;;AAIU8D,IAAAA,oBAAAA,CACN/C,KAA0B,EACV;AAChB,QAAA,MAAM8C,kBAAkB,IAAIX,eAAAA,EAAAA;QAC5B,MAAMiC,IAAAA,GAAOhG,MAAOgG,CAAAA,IAAI,CAACpE,KAAAA,CAAAA;AACzB,QAAA,IAAK,IAAIqE,CAAI,GAAA,CAAA,EAAGA,IAAID,IAAKE,CAAAA,MAAM,EAAED,CAAK,EAAA,CAAA;AAClC,YAAA,MAAM7D,QAAQR,KAAK,CAACoE,IAAI,CAACC,EAAE,CAAC;AAE5B,YAAA,IAAI,OAAO7D,KAAAA,KAAU,QAAY,IAAA,CAAC,CAACA,KAAO,EAAA;AACtCsC,gBAAAA,eAAAA,CAAgByB,MAAM,CAACH,IAAI,CAACC,EAAE,EAAE7D,KAAAA,CAAAA;AACpC,aAAA,MAAO,IAAI/B,KAAAA,CAAMC,OAAO,CAAC8B,KAAQ,CAAA,EAAA;gBAC7B,MAAMgE,GAAAA,GAAMhE,MAAMiE,MAAM,CAAC,CAACC,EAAOA,GAAAA,EAAAA,CAAAA,CAAI5F,IAAI,CAAC,GAAA,CAAA;AAC1C,gBAAA,IAAI0F,GAAK,EAAA;AACL1B,oBAAAA,eAAAA,CAAgByB,MAAM,CAACH,IAAI,CAACC,EAAE,EAAEG,GAAAA,CAAAA;AACpC;AACJ;AACJ;QAEA,OAAO1B,eAAAA;AACX;AACJ;;ACnPO,MAAM6B,WAAoB7E,SAAAA,OAAAA,CAAAA;;AAQ7B;;;QAIA,MAAM8E,GACFnD,CAAAA,MAAqC,EAC1B;AACX,QAAA,MAAML,OAAmC,GAAA;YACrC,CAACgC,gBAAAA,CAAWC,MAAM,GAAG;AACzB,SAAA;AAEA,QAAA,IAAI5B,MAAQ,EAAA;YACR,IAAI,OAAOA,WAAW,QAAU,EAAA;AAC5B,gBAAA,IAAIA,MAAOoD,CAAAA,OAAO,CAAC,GAAA,CAAA,KAAS,EAAI,EAAA;AAC5BzD,oBAAAA,OAAAA,CAAQ0D,aAAa,GAAG,CAAC,OAAO,EAAErD,MAAQ,CAAA,CAAA;iBACvC,MAAA;AACHL,oBAAAA,OAAAA,CAAQ0D,aAAa,GAAGrD,MAAAA;AAC5B;aACG,MAAA;gBACHL,OAAQ0D,CAAAA,aAAa,GAAGpD,kCAA6BD,CAAAA,MAAAA,CAAAA;AACzD;AACJ;AAEA,QAAA,MAAM,EAAEQ,IAAI,EAAE,GAAG,MAAM,IAAI,CAAChC,MAAM,CAAC2E,GAAG,CACjC,IAAI,CAACvE,OAAO,CAAC0E,gBAAgB,IAAI,WAClC,EAAA;AACI3D,YAAAA;AACJ,SAAA,CAAA;QAGJ,OAAOa,IAAAA;AACX;;AArCAxB,IAAAA,WAAAA,CAAYC,OAAwB,CAAE;AAClC,QAAA,KAAK,CAACA,OAAAA,CAAAA;AACV;AAoCJ;;ACxCO,MAAMsE,YAAqBC,SAAAA,YAAAA,CAAAA;;AAa9BxE,IAAAA,WAAAA,CAAYT,KAAmB,CAAE;AAC7BA,QAAAA,KAAAA,GAAQA,SAAS,EAAC;AAElB,QAAA,KAAK,CAACA,KAAMkF,CAAAA,OAAO,QAfL,aAAgBC,CAAAA,GAAAA,MAAAA,CAAOC,GAAG,CAAC,cAAA,CAAA;AAiBzC,QAAA,MAAM/E,OAAUL,GAAAA,KAAAA,CAAMK,OAAO,IAAI,EAAC;QAElC,IAAI,CAACA,OAAO,GAAGA,OAAAA;AAEf,QAAA,IAAI,CAACgF,KAAK,GAAG,IAAIhD,QAAS,CAAA;AAAEpC,YAAAA,MAAAA,EAAQ,IAAI;AAAEI,YAAAA;AAAQ,SAAA,CAAA;AAClD,QAAA,IAAI,CAACiF,SAAS,GAAG,IAAI3E,YAAa,CAAA;AAAEV,YAAAA,MAAAA,EAAQ,IAAI;AAAEI,YAAAA;AAAQ,SAAA,CAAA;AAC1D,QAAA,IAAI,CAACkF,QAAQ,GAAG,IAAIZ,WAAY,CAAA;AAAE1E,YAAAA,MAAAA,EAAQ,IAAI;AAAEI,YAAAA;AAAQ,SAAA,CAAA;AAC5D;AACJ;;ACxBA,MAAMmF,cAA4C,EAAC;AAEnD;;;;IAKO,SAASC,SAAAA,CACZlF,GAAY,EAAA;IAEZ,OAAOtC,oBAAAA,CAAeuH,aAAajF,GAAO,IAAA,SAAA,CAAA;AAC9C;AAEA;;;;;AAKC,IACM,SAASR,SACZE,CAAAA,MAAoB,EACpBM,GAAY,EAAA;AAEZA,IAAAA,GAAAA,GAAMA,GAAO,IAAA,SAAA;IAEbiF,WAAW,CAACjF,IAAI,GAAGN,MAAAA;IAEnB,OAAOA,MAAAA;AACX;AAEA;;;;IAKO,SAASyF,SAAAA,CACZnF,GAAY,EAAA;AAEZA,IAAAA,GAAAA,GAAMA,GAAO,IAAA,SAAA;IAEb,IAAInC,MAAAA,CAAOC,SAAS,CAACJ,cAAc,CAACK,IAAI,CAACkH,aAAajF,GAAM,CAAA,EAAA;QACxD,OAAOiF,WAAW,CAACjF,GAAI,CAAA;AAC3B;AAEA,IAAA,MAAMoF,QAAWxF,GAAAA,YAAAA,EAAAA;IAEjBqF,WAAW,CAACjF,IAAI,GAAGoF,QAAAA;IAEnB,OAAOA,QAAAA;AACX;AAEA;;;;IAKO,SAASC,WAAAA,CAAYrF,GAAY,EAAA;AACpCA,IAAAA,GAAAA,GAAMA,GAAO,IAAA,SAAA;IACb,IAAItC,oBAAAA,CAAeuH,aAAajF,GAAM,CAAA,EAAA;QAClC,OAAOiF,WAAW,CAACjF,GAAI,CAAA;AAC3B;AACJ;AAEA;;;;IAKO,SAASJ,YAAAA,CAAaH,KAAmB,EAAA;AAC5C,IAAA,OAAO,IAAIgF,YAAahF,CAAAA,KAAAA,CAAAA;AAC5B;AAEA;;;;IAKO,SAASE,QAAAA,CAASF,KAAc,EAAA;AACnC,IAAA,IAAIA,iBAAiBgF,YAAc,EAAA;QAC/B,OAAO,IAAA;AACX;AAEA,IAAA,OAAOa,6BAAuB7F,KAAO,EAAA,cAAA,CAAA;AACzC;;ACjGA;;;;;IAOO,IAAK8F,YAAAA,iBAAAA,SAAAA,YAAAA,EAAAA;;;;;AAAAA,IAAAA,OAAAA,YAAAA;AAKX,CAAA,CAAA,EAAA;;ACZD;;;;;IASO,SAASC,2BAAAA,CACZ9D,IAA4B,EAAA;AAE5B,IAAA,MAAM5B,UAAmB,EAAC;IAE1B,IAAI4B,IAAAA,CAAK+D,sBAAsB,EAAE;QAC7B3F,OAAQS,CAAAA,qBAAqB,GAAGmB,IAAAA,CAAK+D,sBAAsB;AAC/D;IAEA,IAAI/D,IAAAA,CAAKgE,sBAAsB,EAAE;QAC7B5F,OAAQ4D,CAAAA,qBAAqB,GAAGhC,IAAAA,CAAKgE,sBAAsB;AAC/D;IAEA,IAAIhE,IAAAA,CAAKiE,cAAc,EAAE;QACrB7F,OAAQ4C,CAAAA,aAAa,GAAGhB,IAAAA,CAAKiE,cAAc;AAC/C;IAEA,IAAIjE,IAAAA,CAAKkE,iBAAiB,EAAE;QACxB9F,OAAQ0E,CAAAA,gBAAgB,GAAG9C,IAAAA,CAAKkE,iBAAiB;AACrD;IAEA,IAAIlE,IAAAA,CAAKmE,mBAAmB,EAAE;QAC1B/F,OAAQ0D,CAAAA,kBAAkB,GAAG9B,IAAAA,CAAKmE,mBAAmB;AACzD;IAEA,OAAO/F,OAAAA;AACX;;ACtBA;;;;;;AAMC,IACM,eAAegG,kCAClBrH,CAAAA,GAAW,EACXqB,OAAyC,EAAA;IAEzC,IAAIJ,MAAAA;AAEJ,IAAA,IAAIC,eAASG,OAAU,CAAA,EAAA;QACnBJ,MAASI,GAAAA,OAAAA;KACN,MAAA;AACHJ,QAAAA,MAAAA,GAASE,kBAAaE,CAAAA,OAAAA,CAAAA;AAC1B;AAEA,IAAA,MAAM,EAAE4B,IAAI,EAAE,GAAqC,MAAMhC,MAAAA,CAAO2E,GAAG,CAAC5F,GAAAA,CAAAA;AAEpE,IAAA,OAAO,IAAIgG,YAAa,CAAA;AACpBE,QAAAA,OAAAA,EAASjF,OAAOe,QAAQ;AACxBX,QAAAA,OAAAA,EAAS0F,2BAA4B9D,CAAAA,IAAAA;AACzC,KAAA,CAAA;AACJ;;ACtCA;;;;;IAOO,SAASqE,uBAAAA,CAAwBzF,OAAgB,EAAA;AACpD,IAAA,IAAI7B,GAAM,GAAA,kCAAA;AAEV,IAAA,IAAI6B,OAAS,EAAA;AACT7B,QAAAA,GAAAA,GAAM,IAAIG,GAAAA,CAAIH,GAAK6B,EAAAA,OAAAA,CAAAA,CAAShB,IAAI;KAC7B,MAAA;QACHb,GAAM,GAAA,CAAC,CAAC,EAAEA,GAAK,CAAA,CAAA;AACnB;IAEA,OAAOA,GAAAA;AACX;;ACEA,MAAMiB,MAASE,GAAAA,YAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}