@authup/server-kit 1.0.0-beta.25 → 1.0.0-beta.27

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/LICENSE CHANGED
@@ -186,7 +186,7 @@
186
186
  same "printed page" as the copyright notice for easier
187
187
  identification within third-party archives.
188
188
 
189
- Copyright 2021-2025 Peter Placzek
189
+ Copyright 2021-2025 Peter Placzek <peter.placzek1996@gmail.com>
190
190
 
191
191
  Licensed under the Apache License, Version 2.0 (the "License");
192
192
  you may not use this file except in compliance with the License.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/crypto/hash/compare.ts","../src/crypto/hash/hash.ts","../src/crypto/key-asymmetric/constants.ts","../src/crypto/key-asymmetric/check.ts","../src/crypto/key-asymmetric/key-usages.ts","../src/crypto/key-asymmetric/normalize.ts","../src/crypto/key-asymmetric/create.ts","../src/crypto/key-asymmetric/helpers/wrap.ts","../src/crypto/key-symmetric/constants.ts","../src/crypto/key-symmetric/normalize.ts","../src/crypto/key-symmetric/check.ts","../src/crypto/key-symmetric/key-usages.ts","../src/crypto/key-symmetric/create.ts","../src/crypto/key/key-usages.ts","../src/crypto/key/container.ts","../src/crypto/json-web-token/extract.ts","../src/crypto/json-web-token/utils.ts","../src/crypto/json-web-token/sign/module.ts","../src/crypto/json-web-token/verify/module.ts","../src/services/redis/singleton.ts","../src/services/cache/adapters/memory.ts","../src/services/cache/adapters/redis.ts","../src/services/cache/adapters/factory.ts","../src/services/cache/helper.ts","../src/services/cache/module.ts","../src/services/cache/singleton.ts","../src/services/logger/module.ts","../src/services/logger/singleton.ts","../src/services/vault/singleton.ts","../src/domain-event/utils.ts","../src/domain-event/redis/module.ts","../src/domain-event/socket/module.ts","../src/domain-event/module.ts","../src/utils/has-property.ts"],"sourcesContent":["/*\n * Copyright (c) 2022-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 { compare as compareMethod } from '@node-rs/bcrypt';\n\nexport async function compare(value: string, hashedValue: string) : Promise<boolean> {\n return compareMethod(value, hashedValue);\n}\n","/*\n * Copyright (c) 2022-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 { hash as hashMethod } from '@node-rs/bcrypt';\n\nexport async function hash(str: string, rounds: number = 10) : Promise<string> {\n return hashMethod(str, rounds);\n}\n","/*\n * Copyright (c) 2022-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\nexport enum CryptoAsymmetricAlgorithm {\n RSA_PSS = 'RSA-PSS',\n RSASSA_PKCS1_V1_5 = 'RSASSA-PKCS1-v1_5',\n RSA_OAEP = 'RSA-OAEP',\n ECDSA = 'ECDSA',\n ECDH = 'ECDH',\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 { CryptoAsymmetricAlgorithm } from './constants';\n\nexport function isAsymmetricAlgorithm(input: string) : input is CryptoAsymmetricAlgorithm {\n return (Object.values(CryptoAsymmetricAlgorithm) as string[]).indexOf(input) !== -1;\n}\n","/*\n * Copyright (c) 2024-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 { CryptoAsymmetricAlgorithm } from './constants';\n\n/**\n * @see https://nodejs.org/api/webcrypto.html#cryptokeyusages\n */\nexport function getKeyUsagesForAsymmetricAlgorithm(\n name: string,\n format?: Exclude<KeyFormat, 'jwk'>,\n) : KeyUsage[] {\n if (\n name === CryptoAsymmetricAlgorithm.RSA_PSS ||\n name === CryptoAsymmetricAlgorithm.ECDSA ||\n name === CryptoAsymmetricAlgorithm.RSASSA_PKCS1_V1_5\n ) {\n if (format === 'spki') {\n return ['verify'];\n } if (format === 'pkcs8') {\n return ['sign'];\n }\n\n return ['sign', 'verify'];\n }\n\n if (name === CryptoAsymmetricAlgorithm.ECDH) {\n if (format === 'spki') {\n return [];\n }\n\n return [\n 'deriveKey',\n 'deriveBits',\n ];\n }\n\n if (name === CryptoAsymmetricAlgorithm.RSA_OAEP) {\n if (format === 'spki') {\n return ['encrypt'];\n } if (format === 'pkcs8') {\n return ['decrypt'];\n }\n\n return ['encrypt', 'decrypt'];\n }\n\n throw new SyntaxError(`Key usages can not be determined for asymmetric algorithm: ${name}`);\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 { CryptoAsymmetricAlgorithm } from './constants';\nimport type {\n AsymmetricKeyImportOptionsInput,\n AsymmetricKeyPairCreateOptions,\n AsymmetricKeyPairCreateOptionsInput,\n AsymmetricKeyPairImportOptions,\n} from './types';\n\nexport function normalizeAsymmetricKeyPairCreateOptions(\n options: AsymmetricKeyPairCreateOptionsInput,\n) : AsymmetricKeyPairCreateOptions {\n let optionsNormalized : AsymmetricKeyPairCreateOptions;\n switch (options.name) {\n case CryptoAsymmetricAlgorithm.RSASSA_PKCS1_V1_5:\n case CryptoAsymmetricAlgorithm.RSA_PSS:\n case CryptoAsymmetricAlgorithm.RSA_OAEP: {\n optionsNormalized = {\n modulusLength: 2048,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n hash: 'SHA-256',\n ...options,\n };\n break;\n }\n case CryptoAsymmetricAlgorithm.ECDSA:\n case CryptoAsymmetricAlgorithm.ECDH: {\n optionsNormalized = {\n namedCurve: 'P-256',\n ...options,\n };\n }\n }\n\n return optionsNormalized;\n}\n\nexport function normalizeAsymmetricKeyImportOptions(\n options: AsymmetricKeyImportOptionsInput,\n) : AsymmetricKeyPairImportOptions {\n let optionsNormalized : AsymmetricKeyPairImportOptions;\n switch (options.name) {\n case CryptoAsymmetricAlgorithm.RSASSA_PKCS1_V1_5:\n case CryptoAsymmetricAlgorithm.RSA_PSS:\n case CryptoAsymmetricAlgorithm.RSA_OAEP: {\n optionsNormalized = {\n hash: 'SHA-256',\n ...options,\n };\n break;\n }\n case CryptoAsymmetricAlgorithm.ECDSA:\n case CryptoAsymmetricAlgorithm.ECDH: {\n optionsNormalized = {\n namedCurve: 'P-256',\n ...options,\n };\n }\n }\n\n return optionsNormalized;\n}\n","/*\n * Copyright (c) 2022-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 { subtle } from 'uncrypto';\nimport { getKeyUsagesForAsymmetricAlgorithm } from './key-usages';\nimport { normalizeAsymmetricKeyPairCreateOptions } from './normalize';\nimport type { AsymmetricKeyPairCreateOptionsInput } from './types';\n\nexport async function createAsymmetricKeyPair(options: AsymmetricKeyPairCreateOptionsInput) : Promise<CryptoKeyPair> {\n const optionsNormalized = normalizeAsymmetricKeyPairCreateOptions(options);\n return subtle.generateKey(\n optionsNormalized,\n true,\n getKeyUsagesForAsymmetricAlgorithm(optionsNormalized.name),\n );\n}\n","/*\n * Copyright (c) 2024-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\nfunction enc(\n type: 'PRIVATE KEY' | 'PUBLIC KEY',\n input: string,\n) {\n return `-----BEGIN ${type}-----\\n${input}\\n-----END ${type}-----`;\n}\n\nexport function encodePKCS8ToPEM(base64: string) {\n return enc('PRIVATE KEY', base64);\n}\n\nexport function encodeSPKIToPem(input: string) {\n return enc('PUBLIC KEY', input);\n}\n\n// ------------------------------------------------------------\n\nfunction dec(\n type: 'PRIVATE KEY' | 'PUBLIC KEY',\n input: string,\n) {\n input = input.replace(`-----BEGIN ${type}-----\\n`, '');\n\n input = input.replace(`\\n-----END ${type}-----\\n`, '');\n input = input.replace(`-----END ${type}-----\\n`, '');\n input = input.replace(`\\n-----END ${type}-----`, '');\n\n return input;\n}\n\nexport function decodePemToPKCS8(input: string) {\n return dec('PRIVATE KEY', input);\n}\n\nexport function decodePemToSpki(input: string) {\n return dec('PUBLIC KEY', input);\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\nexport enum SymmetricAlgorithm {\n HMAC = 'HMAC',\n AES_CTR = 'AES-CTR',\n AES_CBC = 'AES-CBC',\n AES_GCM = 'AES-GCM',\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 { SymmetricAlgorithm } from './constants';\nimport type {\n SymmetricKeyCreateOptions, SymmetricKeyCreateOptionsInput, SymmetricKeyImportOptions, SymmetricKeyImportOptionsInput,\n} from './types';\n\nexport function normalizeSymmetricKeyCreateOptions(\n input: SymmetricKeyCreateOptionsInput,\n) : SymmetricKeyCreateOptions {\n if (input.name === SymmetricAlgorithm.HMAC) {\n return {\n hash: 'SHA-256',\n ...input,\n };\n }\n\n return {\n length: 256,\n name: input.name,\n };\n}\n\nexport function normalizeSymmetricKeyImportOptions(\n input: SymmetricKeyImportOptionsInput,\n) : SymmetricKeyImportOptions {\n if (input.name === SymmetricAlgorithm.HMAC) {\n return {\n hash: 'SHA-256',\n ...input,\n };\n }\n\n return input;\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 { SymmetricAlgorithm } from './constants';\n\nexport function isSymmetricAlgorithm(input: string) : input is SymmetricAlgorithm {\n return (Object.values(SymmetricAlgorithm) as string[]).indexOf(input) !== -1;\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 { SymmetricAlgorithm } from './constants';\n\nexport function getKeyUsagesForSymmetricAlgorithm(name: string) : KeyUsage[] | undefined {\n /**\n * @see https://nodejs.org/api/webcrypto.html#cryptokeyusages\n */\n if (name === SymmetricAlgorithm.HMAC) {\n return [\n 'sign',\n 'verify',\n ];\n }\n\n if (\n name === SymmetricAlgorithm.AES_CBC ||\n name === SymmetricAlgorithm.AES_GCM ||\n name === SymmetricAlgorithm.AES_CTR\n ) {\n return [\n 'encrypt',\n 'decrypt',\n ];\n }\n\n throw new SyntaxError(`Key usages can not be determined for symmetric algorithm: ${name}`);\n}\n","/*\n * Copyright (c) 2022-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 { subtle } from 'uncrypto';\nimport { getKeyUsagesForSymmetricAlgorithm } from './key-usages';\nimport { normalizeSymmetricKeyCreateOptions } from './normalize';\nimport type { SymmetricKeyCreateOptionsInput } from './types';\n\nexport async function createSymmetricKey(input: SymmetricKeyCreateOptionsInput) : Promise<CryptoKey> {\n const optionsNormalized = normalizeSymmetricKeyCreateOptions(input);\n\n return subtle.generateKey(\n optionsNormalized,\n true,\n getKeyUsagesForSymmetricAlgorithm(optionsNormalized.name),\n );\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 { getKeyUsagesForAsymmetricAlgorithm, isAsymmetricAlgorithm } from '../key-asymmetric';\nimport { getKeyUsagesForSymmetricAlgorithm, isSymmetricAlgorithm } from '../key-symmetric';\n\nexport function getKeyUsagesForAlgorithm(name: string, format?: Exclude<KeyFormat, 'jwk'>) : KeyUsage[] {\n if (isAsymmetricAlgorithm(name)) {\n return getKeyUsagesForAsymmetricAlgorithm(name, format);\n }\n\n if (isSymmetricAlgorithm(name)) {\n return getKeyUsagesForSymmetricAlgorithm(name);\n }\n\n throw new SyntaxError(`Key usages can not be determined for algorithm: ${name}`);\n}\n","/*\n * Copyright (c) 2024-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 { subtle } from 'uncrypto';\nimport { arrayBufferToBase64, base64ToArrayBuffer } from '@authup/kit';\nimport type { AsymmetricKeyPairImportOptions } from '../key-asymmetric';\nimport {\n decodePemToPKCS8,\n decodePemToSpki, encodePKCS8ToPEM, encodeSPKIToPem, normalizeAsymmetricKeyImportOptions,\n} from '../key-asymmetric';\nimport type { SymmetricKeyImportOptions } from '../key-symmetric';\nimport { normalizeSymmetricKeyImportOptions } from '../key-symmetric/normalize';\nimport { getKeyUsagesForAlgorithm } from './key-usages';\nimport type { KeyContainerAsymmetricImportOptions, KeyContainerImportOptions } from './types';\n\nexport class CryptoKeyContainer {\n protected key : CryptoKey;\n\n constructor(cryptoKey : CryptoKey) {\n this.key = cryptoKey;\n }\n\n // ----------------------------------------------\n\n async toArrayBuffer(): Promise<ArrayBuffer> {\n if (this.key.type === 'private') {\n return subtle.exportKey('pkcs8', this.key);\n }\n\n if (this.key.type === 'public') {\n return subtle.exportKey('spki', this.key);\n }\n\n return subtle.exportKey('raw', this.key);\n }\n\n async toUint8Array(): Promise<Uint8Array> {\n const arrayBuffer = await this.toArrayBuffer();\n return new Uint8Array(arrayBuffer);\n }\n\n async toBase64() : Promise<string> {\n const arrayBuffer = await this.toArrayBuffer();\n return arrayBufferToBase64(arrayBuffer);\n }\n\n async toPem(): Promise<string> {\n const base64 = await this.toBase64();\n\n if (this.key.type === 'public') {\n return encodeSPKIToPem(base64);\n }\n\n if (this.key.type === 'private') {\n return encodePKCS8ToPEM(base64);\n }\n\n throw new Error('A symmetric key can not be encoded as PEM');\n }\n\n async toJWK() : Promise<JsonWebKey> {\n return subtle.exportKey('jwk', this.key);\n }\n\n // ----------------------------------------------\n\n static async fromPem(ctx: KeyContainerAsymmetricImportOptions<string>): Promise<CryptoKeyContainer> {\n if (ctx.format === 'pkcs8') {\n return CryptoKeyContainer.fromBase64({ ...ctx, key: decodePemToPKCS8(ctx.key) });\n }\n return CryptoKeyContainer.fromBase64({ ...ctx, key: decodePemToSpki(ctx.key) });\n }\n\n static async fromBase64(\n ctx: KeyContainerImportOptions<string>,\n ) : Promise<CryptoKeyContainer> {\n const arrayBuffer = base64ToArrayBuffer(ctx.key);\n\n return CryptoKeyContainer.fromArrayBuffer({\n ...ctx,\n key: arrayBuffer,\n });\n }\n\n static async fromArrayBuffer(\n ctx: KeyContainerImportOptions<ArrayBuffer>,\n ) : Promise<CryptoKeyContainer> {\n let normalizedOptions : AsymmetricKeyPairImportOptions | SymmetricKeyImportOptions;\n if (ctx.format === 'spki' || ctx.format === 'pkcs8') {\n normalizedOptions = normalizeAsymmetricKeyImportOptions(ctx.options);\n } else if (ctx.format === 'raw') {\n normalizedOptions = normalizeSymmetricKeyImportOptions(ctx.options);\n } else {\n throw new SyntaxError(`Format ${ctx.format} is not supported.`);\n }\n\n const cryptoKey = await subtle.importKey(\n ctx.format,\n ctx.key,\n normalizedOptions,\n true,\n getKeyUsagesForAlgorithm(normalizedOptions.name, ctx.format),\n );\n\n return new CryptoKeyContainer(cryptoKey);\n }\n}\n","/*\n * Copyright (c) 2022-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 type { JWTClaims, JWTHeader } from '@authup/specs';\nimport { JWTError } from '@authup/specs';\n\n/**\n * Decode a JWT token with no verification.\n *\n * @param token\n *\n * @throws JWTError\n */\nexport function extractTokenHeader(\n token: string,\n) : JWTHeader {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw JWTError.invalid();\n }\n\n const [headerBase64] = parts;\n\n try {\n const payload = atob(headerBase64);\n\n return JSON.parse(payload);\n\n /*\n return {\n typ: 'JWT',\n alg: transformInternalToJWTAlgorithm(header.algorithm),\n cty: header.contentType,\n jku: header.jsonKeyUrl,\n kid: header.keyId,\n x5u: header.x5Url,\n x5c: header.x5CertChain,\n x5t: header.x5CertThumbprint,\n 'x5t#S256': header.x5TS256CertThumbprint,\n };\n */\n } catch (e) {\n throw JWTError.headerInvalid('The token header could not be extracted.');\n }\n}\n\n/**\n * @param token\n *\n * @throws JWTError\n */\nexport function extractTokenPayload(\n token: string,\n) : JWTClaims {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw JWTError.invalid();\n }\n\n const [, payloadBase64] = parts;\n\n try {\n const payload = atob(payloadBase64);\n\n return JSON.parse(payload);\n } catch (e) {\n throw JWTError.payloadInvalid('The token payload could not be extracted.');\n }\n}\n","/*\n * Copyright (c) 2022-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 { JWTAlgorithm, JWTError } from '@authup/specs';\nimport { Algorithm } from '@node-rs/jsonwebtoken';\nimport { isObject } from 'smob';\n\nexport function createErrorForJWTError(e: unknown) : JWTError {\n if (isObject(e)) {\n if (typeof e.name === 'string') {\n switch (e.name) {\n case 'TokenExpiredError': {\n return JWTError.expired();\n }\n case 'NotBeforeError': {\n if (typeof e.date === 'string' || e.date instanceof Date) {\n return JWTError.notActiveBefore(e.date);\n }\n break;\n }\n case 'JsonWebTokenError': {\n if (typeof e.message === 'string') {\n return JWTError.payloadInvalid(e.message);\n }\n\n break;\n }\n }\n }\n\n // @see https://github.com/Keats/jsonwebtoken/blob/master/src/errors.rs\n switch (e.message) {\n case 'ExpiredSignature': {\n return JWTError.expired();\n }\n case 'ImmatureSignature': {\n return JWTError.notActiveBefore();\n }\n case 'InvalidToken':\n case 'InvalidSignature': {\n return JWTError.payloadInvalid();\n }\n }\n }\n\n return new JWTError({\n cause: e as Error,\n logMessage: true,\n message: 'The JWT error could not be determined.',\n });\n}\n\nexport function transformJWTAlgorithmToInternal(algorithm: `${JWTAlgorithm}`) : Algorithm {\n switch (algorithm) {\n case JWTAlgorithm.HS256: {\n return Algorithm.HS256;\n }\n case JWTAlgorithm.HS384: {\n return Algorithm.HS384;\n }\n case JWTAlgorithm.HS512: {\n return Algorithm.HS512;\n }\n case JWTAlgorithm.RS256: {\n return Algorithm.RS256;\n }\n case JWTAlgorithm.RS384: {\n return Algorithm.RS384;\n }\n case JWTAlgorithm.RS512: {\n return Algorithm.RS512;\n }\n case JWTAlgorithm.ES256: {\n return Algorithm.ES256;\n }\n case JWTAlgorithm.ES384: {\n return Algorithm.ES384;\n }\n case JWTAlgorithm.PS256: {\n return Algorithm.PS256;\n }\n case JWTAlgorithm.PS384: {\n return Algorithm.PS384;\n }\n case JWTAlgorithm.PS512: {\n return Algorithm.PS512;\n }\n }\n\n throw new Error(`The algorithm ${algorithm} is not supported.`);\n}\n\nexport function transformInternalToJWTAlgorithm(input: Algorithm) : JWTAlgorithm {\n switch (input) {\n case Algorithm.HS256:\n return JWTAlgorithm.HS256;\n case Algorithm.HS384:\n return JWTAlgorithm.HS384;\n case Algorithm.HS512:\n return JWTAlgorithm.HS512;\n case Algorithm.RS256:\n return JWTAlgorithm.RS256;\n case Algorithm.RS384:\n return JWTAlgorithm.RS384;\n case Algorithm.RS512:\n return JWTAlgorithm.RS512;\n case Algorithm.ES256:\n return JWTAlgorithm.ES256;\n case Algorithm.ES384:\n return JWTAlgorithm.ES384;\n case Algorithm.PS256:\n return JWTAlgorithm.PS256;\n case Algorithm.PS384:\n return JWTAlgorithm.PS384;\n case Algorithm.PS512:\n return JWTAlgorithm.PS512;\n }\n\n throw new SyntaxError(`The algorithm ${input} is not supported.`);\n}\n","/*\n * Copyright (c) 2022-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 { JWKType, OAuth2Error } from '@authup/specs';\nimport type { JWTClaims } from '@authup/specs';\nimport { Algorithm, sign } from '@node-rs/jsonwebtoken';\nimport { encodePKCS8ToPEM } from '../../key-asymmetric';\nimport { CryptoKeyContainer } from '../../key';\nimport { transformJWTAlgorithmToInternal } from '../utils';\nimport type { TokenSignOptions } from './types';\n\nconst getUtcTimestamp = () => Math.floor(new Date().getTime() / 1000);\n\nexport async function signToken(claims: JWTClaims, context: TokenSignOptions): Promise<string> {\n if (typeof claims.exp !== 'number') {\n claims.exp = getUtcTimestamp() + 3600;\n }\n if (typeof claims.iat !== 'number') {\n claims.iat = getUtcTimestamp();\n }\n\n switch (context.type) {\n case JWKType.RSA:\n case JWKType.EC: {\n let algorithm : Algorithm;\n\n let key : string;\n if (typeof context.key === 'string') {\n key = encodePKCS8ToPEM(context.key);\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toPem();\n }\n\n if (context.type === JWKType.RSA) {\n algorithm = context.algorithm ?\n transformJWTAlgorithmToInternal(context.algorithm) :\n Algorithm.RS256;\n } else {\n algorithm = context.algorithm ?\n transformJWTAlgorithmToInternal(context.algorithm) :\n Algorithm.ES256;\n }\n\n return sign(claims, key, {\n algorithm,\n keyId: context.keyId,\n });\n }\n case JWKType.OCT: {\n const algorithm : Algorithm = context.algorithm ?\n transformJWTAlgorithmToInternal(context.algorithm) :\n Algorithm.HS256;\n\n let key : string | Uint8Array;\n if (typeof context.key === 'string') {\n key = context.key;\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toUint8Array();\n }\n\n return sign(claims, key, {\n algorithm,\n keyId: context.keyId,\n });\n }\n }\n\n throw new OAuth2Error();\n}\n","/*\n * Copyright (c) 2022-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 { JWKType, OAuth2Error } from '@authup/specs';\nimport type { JWTClaims, OAuth2TokenPayload } from '@authup/specs';\nimport { Algorithm, verify } from '@node-rs/jsonwebtoken';\nimport { encodeSPKIToPem } from '../../key-asymmetric';\nimport { CryptoKeyContainer } from '../../key';\nimport { createErrorForJWTError, transformJWTAlgorithmToInternal } from '../utils';\nimport type { TokenVerifyOptions } from './types';\n\n/**\n * Verify JWT.\n *\n * @param token\n * @param context\n *\n * @throws OAuth2Error\n */\nexport async function verifyToken(\n token: string,\n context: TokenVerifyOptions,\n) : Promise<OAuth2TokenPayload> {\n let promise : Promise<JWTClaims>;\n\n let output : JWTClaims;\n\n try {\n switch (context.type) {\n case JWKType.RSA:\n case JWKType.EC: {\n let algorithms : Algorithm[];\n\n if (context.type === JWKType.RSA) {\n algorithms = context.algorithms ?\n context.algorithms.map((algorithm) => transformJWTAlgorithmToInternal(algorithm)) :\n [\n Algorithm.RS256,\n Algorithm.RS384,\n Algorithm.RS512,\n Algorithm.PS256,\n Algorithm.PS384,\n Algorithm.PS512,\n ];\n } else {\n algorithms = context.algorithms ?\n context.algorithms.map((algorithm) => transformJWTAlgorithmToInternal(algorithm)) :\n [\n Algorithm.ES256,\n Algorithm.ES384,\n ];\n }\n\n let key : string;\n if (typeof context.key === 'string') {\n key = encodeSPKIToPem(context.key);\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toPem();\n }\n\n promise = verify(token, key, {\n algorithms,\n validateNbf: true,\n });\n break;\n }\n case JWKType.OCT: {\n const algorithms : Algorithm[] = context.algorithms ?\n context.algorithms.map((algorithm) => transformJWTAlgorithmToInternal(algorithm)) :\n [\n Algorithm.HS256,\n Algorithm.HS384,\n Algorithm.HS512,\n ];\n\n let key : string | Uint8Array;\n if (typeof context.key === 'string') {\n key = context.key;\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toUint8Array();\n }\n\n promise = verify(token, key, {\n algorithms,\n validateNbf: true,\n });\n }\n }\n\n output = await promise;\n } catch (e) {\n throw createErrorForJWTError(e);\n }\n\n if (typeof output === 'undefined') {\n throw new OAuth2Error({ message: 'Invalid type.' });\n }\n\n return output as OAuth2TokenPayload;\n}\n","/*\n * Copyright (c) 2024-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 type { Client } from 'redis-extension';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<Client>({\n name: 'redis',\n});\n\nexport function setRedisFactory(factory: Factory<Client>) {\n instance.setFactory(factory);\n}\n\nexport function isRedisClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setRedisClient(input: Client) {\n instance.set(input);\n}\n\nexport function useRedisClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024-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 type { Options } from '@isaacs/ttlcache';\nimport TTLCache from '@isaacs/ttlcache';\nimport type { CacheClearOptions, CacheSetOptions } from '../types';\nimport type { CacheAdapter } from './types';\n\nexport class MemoryCacheAdapter<\n VALUE = any,\n> implements CacheAdapter {\n protected instance : TTLCache<string, VALUE>;\n\n constructor(options: Options<string, VALUE> = {}) {\n this.instance = new TTLCache<string, VALUE>({\n checkAgeOnGet: true,\n ttl: Infinity,\n ...(options || {}),\n });\n }\n\n async has(key: string) : Promise<boolean> {\n return this.instance.has(key);\n }\n\n async get(key: string): Promise<VALUE> {\n return this.instance.get(key);\n }\n\n async set(key: string, value: VALUE, options: CacheSetOptions): Promise<void> {\n this.instance.set(key, value, {\n ttl: options.ttl,\n });\n }\n\n async drop(key: string): Promise<void> {\n this.instance.delete(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n for (let i = 0; i < keys.length; i++) {\n this.instance.delete(keys[i]);\n }\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n if (options.prefix) {\n const keys = this.instance.keys();\n let iterator = keys.next();\n while (!iterator.done) {\n if (iterator.value.startsWith(options.prefix)) {\n this.instance.delete(iterator.value);\n }\n\n iterator = keys.next();\n }\n\n return;\n }\n\n this.instance.clear();\n }\n}\n","/*\n * Copyright (c) 2024-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 type { Client } from 'redis-extension';\nimport { JsonAdapter } from 'redis-extension';\nimport { useRedisClient } from '../../redis';\nimport type { CacheClearOptions, CacheSetOptions } from '../types';\nimport type { CacheAdapter } from './types';\n\nexport class RedisCacheAdapter implements CacheAdapter {\n protected client : Client;\n\n protected instance : JsonAdapter;\n\n constructor() {\n this.client = useRedisClient();\n this.instance = new JsonAdapter(this.client);\n }\n\n async get(key: string): Promise<any> {\n return this.instance.get(key);\n }\n\n async has(key: string) : Promise<boolean> {\n const output = await this.get(key);\n\n return typeof output !== 'undefined';\n }\n\n async set(key: string, value: any, options: CacheSetOptions): Promise<void> {\n await this.instance.set(key, value, {\n milliseconds: options.ttl,\n });\n }\n\n async drop(key: string): Promise<void> {\n await this.instance.drop(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n const pipeline = this.client.pipeline();\n\n for (let i = 0; i < keys.length; i++) {\n pipeline.del(keys[i]);\n }\n\n await pipeline.exec();\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n if (options.prefix) {\n const pipeline = this.client.pipeline();\n\n const keys = await this.client.keys(`${options.prefix}*`);\n for (let i = 0; i < keys.length; i++) {\n pipeline.del(keys[i]);\n }\n\n await pipeline.exec();\n\n return;\n }\n await this.client.flushdb();\n }\n}\n","/*\n * Copyright (c) 2024-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 { isRedisClientUsable } from '../../redis';\nimport { MemoryCacheAdapter } from './memory';\nimport { RedisCacheAdapter } from './redis';\n\nexport function createCacheAdapter() {\n if (isRedisClientUsable()) {\n return new RedisCacheAdapter();\n }\n\n return new MemoryCacheAdapter();\n}\n","/*\n * Copyright (c) 2024-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 { buildRedisKeyPath } from '../redis';\nimport type { CacheKeyBuildOptions } from './types';\n\nexport function buildCacheKey(options: CacheKeyBuildOptions) {\n return buildRedisKeyPath(options);\n}\n","/*\n * Copyright (c) 2024-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 type { CacheAdapter } from './adapters';\nimport type { CacheClearOptions, CacheSetOptions } from './types';\n\nexport class Cache {\n protected adapter : CacheAdapter;\n\n constructor(adapter: CacheAdapter) {\n this.adapter = adapter;\n }\n\n async set(key: string, value: any, options: CacheSetOptions = {}) : Promise<void> {\n await this.adapter.set(key, value, options);\n }\n\n async get(key: string) : Promise<any | undefined> {\n return this.adapter.get(key);\n }\n\n async drop(key: string) : Promise<void> {\n return this.adapter.drop(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n return this.adapter.dropMany(keys);\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n return this.adapter.clear(options);\n }\n}\n","/*\n * Copyright (c) 2024-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 { singa } from 'singa';\nimport { isRedisClientUsable } from '../redis';\nimport type { CacheAdapter } from './adapters';\nimport { MemoryCacheAdapter, RedisCacheAdapter } from './adapters';\nimport { Cache } from './module';\n\nconst instance = singa<Cache>({\n name: 'cache',\n factory: () => {\n let adapter : CacheAdapter;\n if (isRedisClientUsable()) {\n adapter = new RedisCacheAdapter();\n } else {\n adapter = new MemoryCacheAdapter();\n }\n\n return new Cache(adapter);\n },\n});\n\nexport function useCache() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2022-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 path from 'node:path';\nimport process from 'node:process';\nimport type { LoggerOptions } from 'winston';\nimport {\n createLogger as create, format, transports,\n} from 'winston';\nimport type { Logger, LoggerCreateContext } from './types';\n\nexport function createLogger(context: LoggerCreateContext) : Logger {\n let items : LoggerOptions['transports'];\n\n const cwd = context.directory || process.cwd();\n\n if (context.env === 'production') {\n items = [\n new transports.Console({\n level: 'info',\n }),\n new transports.File({\n filename: path.join(cwd, 'http.log'),\n level: 'http',\n maxsize: 10 * 1024 * 1024, // 10MB\n maxFiles: 5,\n }),\n new transports.File({\n filename: path.join(cwd, 'error.log'),\n level: 'warn',\n maxsize: 10 * 1024 * 1024, // 10MB\n maxFiles: 5,\n }),\n ];\n } else {\n items = [\n new transports.Console({\n level: 'debug',\n }),\n ];\n }\n\n // @see https://github.com/winstonjs/triple-beam/blob/master/config/npm.js\n return create({\n format: format.combine(\n format.errors({ stack: true }),\n format.timestamp(),\n format.colorize(),\n format.simple(),\n ),\n transports: items,\n });\n}\n","/*\n * Copyright (c) 2023-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 { type Factory, singa } from 'singa';\nimport type { Logger } from 'winston';\n\nconst instance = singa<Logger>({\n name: 'logger',\n});\n\nexport function setLoggerFactory(factory: Factory<Logger>) {\n instance.setFactory(factory);\n}\n\nexport function isLoggerUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setLogger(input: Logger) {\n instance.set(input);\n}\n\nexport function useLogger() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024-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 type { Factory } from 'singa';\nimport { singa } from 'singa';\nimport type { VaultClient } from '@hapic/vault';\n\nconst instance = singa<VaultClient>({\n name: 'vault',\n});\n\nexport function setVaultFactory(factory: Factory<VaultClient>) {\n instance.setFactory(factory);\n}\n\nexport function isVaultClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function useVaultClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2023-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 { isObject } from '@authup/kit';\nimport type { DomainEventChannelName } from './type';\n\nexport function transformDomainEventData<T>(input: T) : T {\n if (isObject(input)) {\n const keys = Object.keys(input);\n for (let i = 0; i < keys.length; i++) {\n const value = input[keys[i]];\n if (value instanceof Date) {\n input[keys[i]] = value.toISOString();\n }\n }\n }\n\n return input;\n}\n\nexport function buildDomainEventChannelName(\n input: DomainEventChannelName,\n id?: string | number,\n) : string {\n if (typeof input === 'string') {\n return input;\n }\n\n return input(id);\n}\n","/*\n * Copyright (c) 2023-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 type { Client } from 'redis-extension';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport class DomainEventRedisPublisher implements IDomainEventPublisher {\n protected driver : Client;\n\n constructor(client: Client) {\n this.driver = client;\n }\n\n async publish(ctx: DomainEventPublishContext) : Promise<void> {\n const data = JSON.stringify(transformDomainEventData(ctx.content));\n\n const pipeline = this.driver.pipeline();\n for (let i = 0; i < ctx.destinations.length; i++) {\n const { namespace } = ctx.destinations[i];\n const keyPrefix = (namespace ? `${namespace}:` : '');\n\n let key = keyPrefix + buildDomainEventChannelName(ctx.destinations[i].channel);\n pipeline.publish(key, data);\n\n if (typeof ctx.destinations[i].channel === 'function') {\n key = keyPrefix + buildDomainEventChannelName(ctx.destinations[i].channel, ctx.content.data.id);\n pipeline.publish(key, data);\n }\n }\n\n await pipeline.exec();\n }\n}\n","/*\n * Copyright (c) 2022-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 { buildEventFullName } from '@authup/core-realtime-kit';\nimport { Emitter } from '@socket.io/redis-emitter';\nimport type { Client } from 'redis-extension';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport class DomainEventSocketPublisher implements IDomainEventPublisher {\n protected driver : Emitter;\n\n constructor(client: Client) {\n this.driver = new Emitter(client);\n }\n\n async publish(ctx: DomainEventPublishContext) : Promise<void> {\n ctx.content = transformDomainEventData(ctx.content);\n\n for (let i = 0; i < ctx.destinations.length; i++) {\n let emitter : Emitter;\n if (ctx.destinations[i].namespace) {\n emitter = this.driver.of(ctx.destinations[i].namespace);\n } else {\n emitter = this.driver;\n }\n\n let roomName = buildDomainEventChannelName(ctx.destinations[i].channel);\n\n const fullEventName = buildEventFullName(ctx.content.type, ctx.content.event);\n\n emitter\n .in(roomName)\n .emit(fullEventName, {\n ...ctx.content,\n meta: {\n roomName,\n },\n });\n\n if (typeof ctx.destinations[i].channel === 'function') {\n roomName = buildDomainEventChannelName(ctx.destinations[i].channel, ctx.content.data.id);\n\n emitter\n .in(roomName)\n .emit(fullEventName, {\n ...ctx.content,\n meta: {\n roomName,\n roomId: ctx.content.data.id,\n },\n });\n }\n }\n }\n}\n","/*\n * Copyright (c) 2024-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 type { EventPayload } from '@authup/core-realtime-kit';\nimport { isRedisClientUsable, useRedisClient } from '../services';\nimport { DomainEventRedisPublisher } from './redis';\nimport { DomainEventSocketPublisher } from './socket';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from './type';\n\nexport class DomainEventPublisher implements IDomainEventPublisher {\n protected publishers : Set<IDomainEventPublisher>;\n\n constructor() {\n this.publishers = new Set<IDomainEventPublisher>();\n\n if (isRedisClientUsable()) {\n const client = useRedisClient();\n\n this.publishers.add(new DomainEventRedisPublisher(client));\n this.publishers.add(new DomainEventSocketPublisher(client));\n }\n }\n\n async publish<T extends EventPayload>(\n ctx: DomainEventPublishContext<T>,\n ) : Promise<void> {\n const publishers = this.publishers.values();\n while (true) {\n const it = publishers.next();\n if (it.done) {\n return;\n }\n\n await it.value.publish(ctx);\n }\n }\n}\n","/*\n * Copyright (c) 2022-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\nexport function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(\n obj: X,\n prop: Y,\n): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n"],"names":["compare","value","hashedValue","compareMethod","hash","str","rounds","hashMethod","CryptoAsymmetricAlgorithm","isAsymmetricAlgorithm","input","Object","values","indexOf","getKeyUsagesForAsymmetricAlgorithm","name","format","RSA_PSS","ECDSA","RSASSA_PKCS1_V1_5","ECDH","RSA_OAEP","SyntaxError","normalizeAsymmetricKeyPairCreateOptions","options","optionsNormalized","modulusLength","publicExponent","Uint8Array","namedCurve","normalizeAsymmetricKeyImportOptions","createAsymmetricKeyPair","subtle","generateKey","enc","type","encodePKCS8ToPEM","base64","encodeSPKIToPem","dec","replace","decodePemToPKCS8","decodePemToSpki","SymmetricAlgorithm","normalizeSymmetricKeyCreateOptions","HMAC","length","normalizeSymmetricKeyImportOptions","isSymmetricAlgorithm","getKeyUsagesForSymmetricAlgorithm","AES_CBC","AES_GCM","AES_CTR","createSymmetricKey","getKeyUsagesForAlgorithm","CryptoKeyContainer","toArrayBuffer","key","exportKey","toUint8Array","arrayBuffer","toBase64","arrayBufferToBase64","toPem","Error","toJWK","fromPem","ctx","fromBase64","base64ToArrayBuffer","fromArrayBuffer","normalizedOptions","cryptoKey","importKey","constructor","extractTokenHeader","token","parts","split","JWTError","invalid","headerBase64","payload","atob","JSON","parse","e","headerInvalid","extractTokenPayload","payloadBase64","payloadInvalid","createErrorForJWTError","isObject","expired","date","Date","notActiveBefore","message","cause","logMessage","transformJWTAlgorithmToInternal","algorithm","JWTAlgorithm","HS256","Algorithm","HS384","HS512","RS256","RS384","RS512","ES256","ES384","PS256","PS384","PS512","getUtcTimestamp","Math","floor","getTime","signToken","claims","context","exp","iat","JWKType","RSA","EC","keyContainer","sign","keyId","OCT","OAuth2Error","verifyToken","promise","output","algorithms","map","verify","validateNbf","instance","singa","setRedisFactory","factory","setFactory","isRedisClientUsable","has","hasFactory","setRedisClient","set","useRedisClient","use","MemoryCacheAdapter","get","ttl","drop","delete","dropMany","keys","i","clear","prefix","iterator","next","done","startsWith","TTLCache","checkAgeOnGet","Infinity","RedisCacheAdapter","milliseconds","pipeline","client","del","exec","flushdb","JsonAdapter","createCacheAdapter","buildCacheKey","buildRedisKeyPath","Cache","adapter","useCache","createLogger","items","cwd","directory","process","env","transports","Console","level","File","filename","path","join","maxsize","maxFiles","create","combine","errors","stack","timestamp","colorize","simple","setLoggerFactory","isLoggerUsable","setLogger","useLogger","setVaultFactory","isVaultClientUsable","useVaultClient","transformDomainEventData","toISOString","buildDomainEventChannelName","id","DomainEventRedisPublisher","publish","data","stringify","content","driver","destinations","namespace","keyPrefix","channel","DomainEventSocketPublisher","emitter","of","roomName","fullEventName","buildEventFullName","event","in","emit","meta","roomId","Emitter","DomainEventPublisher","publishers","it","Set","add","hasOwnProperty","obj","prop","prototype","call"],"mappings":";;;;;;;;;;;;;;;;;;AASO,eAAeA,OAAAA,CAAQC,KAAa,EAAEC,WAAmB,EAAA;AAC5D,IAAA,OAAOC,eAAcF,KAAOC,EAAAA,WAAAA,CAAAA;AAChC;;ACFO,eAAeE,IAAAA,CAAKC,GAAW,EAAEC,SAAiB,EAAE,EAAA;AACvD,IAAA,OAAOC,YAAWF,GAAKC,EAAAA,MAAAA,CAAAA;AAC3B;;ACXA;;;;;IAOO,IAAKE,yBAAAA,iBAAAA,SAAAA,yBAAAA,EAAAA;;;;;;AAAAA,IAAAA,OAAAA,yBAAAA;AAMX,CAAA,CAAA,EAAA;;ACJM,SAASC,sBAAsBC,KAAa,EAAA;IAC/C,OAAQC,OAAOC,MAAM,CAACJ,2BAAwCK,OAAO,CAACH,WAAW,EAAC;AACtF;;ACFA;;AAEC,IACM,SAASI,kCACZC,CAAAA,IAAY,EACZC,MAAkC,EAAA;IAElC,IACID,IAAAA,KAASP,yBAA0BS,CAAAA,OAAO,IAC1CF,IAAAA,KAASP,yBAA0BU,CAAAA,KAAK,IACxCH,IAAAA,KAASP,yBAA0BW,CAAAA,iBAAiB,EACtD;AACE,QAAA,IAAIH,WAAW,MAAQ,EAAA;YACnB,OAAO;AAAC,gBAAA;AAAS,aAAA;AACrB;AAAE,QAAA,IAAIA,WAAW,OAAS,EAAA;YACtB,OAAO;AAAC,gBAAA;AAAO,aAAA;AACnB;QAEA,OAAO;AAAC,YAAA,MAAA;AAAQ,YAAA;AAAS,SAAA;AAC7B;IAEA,IAAID,IAAAA,KAASP,yBAA0BY,CAAAA,IAAI,EAAE;AACzC,QAAA,IAAIJ,WAAW,MAAQ,EAAA;AACnB,YAAA,OAAO,EAAE;AACb;QAEA,OAAO;AACH,YAAA,WAAA;AACA,YAAA;AACH,SAAA;AACL;IAEA,IAAID,IAAAA,KAASP,yBAA0Ba,CAAAA,QAAQ,EAAE;AAC7C,QAAA,IAAIL,WAAW,MAAQ,EAAA;YACnB,OAAO;AAAC,gBAAA;AAAU,aAAA;AACtB;AAAE,QAAA,IAAIA,WAAW,OAAS,EAAA;YACtB,OAAO;AAAC,gBAAA;AAAU,aAAA;AACtB;QAEA,OAAO;AAAC,YAAA,SAAA;AAAW,YAAA;AAAU,SAAA;AACjC;AAEA,IAAA,MAAM,IAAIM,WAAAA,CAAY,CAAC,2DAA2D,EAAEP,IAAM,CAAA,CAAA,CAAA;AAC9F;;ACrCO,SAASQ,wCACZC,OAA4C,EAAA;IAE5C,IAAIC,iBAAAA;AACJ,IAAA,OAAQD,QAAQT,IAAI;AAChB,QAAA,KAAKP,0BAA0BW,iBAAiB;AAChD,QAAA,KAAKX,0BAA0BS,OAAO;AACtC,QAAA,KAAKT,0BAA0Ba,QAAQ;AAAE,YAAA;gBACrCI,iBAAoB,GAAA;oBAChBC,aAAe,EAAA,IAAA;AACfC,oBAAAA,cAAAA,EAAgB,IAAIC,UAAW,CAAA;AAAC,wBAAA,IAAA;AAAM,wBAAA,IAAA;AAAM,wBAAA;AAAK,qBAAA,CAAA;oBACjDxB,IAAM,EAAA,SAAA;AACN,oBAAA,GAAGoB;AACP,iBAAA;AACA,gBAAA;AACJ;AACA,QAAA,KAAKhB,0BAA0BU,KAAK;AACpC,QAAA,KAAKV,0BAA0BY,IAAI;AAAE,YAAA;gBACjCK,iBAAoB,GAAA;oBAChBI,UAAY,EAAA,OAAA;AACZ,oBAAA,GAAGL;AACP,iBAAA;AACJ;AACJ;IAEA,OAAOC,iBAAAA;AACX;AAEO,SAASK,oCACZN,OAAwC,EAAA;IAExC,IAAIC,iBAAAA;AACJ,IAAA,OAAQD,QAAQT,IAAI;AAChB,QAAA,KAAKP,0BAA0BW,iBAAiB;AAChD,QAAA,KAAKX,0BAA0BS,OAAO;AACtC,QAAA,KAAKT,0BAA0Ba,QAAQ;AAAE,YAAA;gBACrCI,iBAAoB,GAAA;oBAChBrB,IAAM,EAAA,SAAA;AACN,oBAAA,GAAGoB;AACP,iBAAA;AACA,gBAAA;AACJ;AACA,QAAA,KAAKhB,0BAA0BU,KAAK;AACpC,QAAA,KAAKV,0BAA0BY,IAAI;AAAE,YAAA;gBACjCK,iBAAoB,GAAA;oBAChBI,UAAY,EAAA,OAAA;AACZ,oBAAA,GAAGL;AACP,iBAAA;AACJ;AACJ;IAEA,OAAOC,iBAAAA;AACX;;ACvDO,eAAeM,wBAAwBP,OAA4C,EAAA;AACtF,IAAA,MAAMC,oBAAoBF,uCAAwCC,CAAAA,OAAAA,CAAAA;AAClE,IAAA,OAAOQ,gBAAOC,WAAW,CACrBR,mBACA,IACAX,EAAAA,kCAAAA,CAAmCW,kBAAkBV,IAAI,CAAA,CAAA;AAEjE;;ACnBA;;;;;AAKC,IAED,SAASmB,GAAAA,CACLC,IAAkC,EAClCzB,KAAa,EAAA;IAEb,OAAO,CAAC,WAAW,EAAEyB,IAAK,CAAA,OAAO,EAAEzB,KAAAA,CAAM,WAAW,EAAEyB,IAAK,CAAA,KAAK,CAAC;AACrE;AAEO,SAASC,iBAAiBC,MAAc,EAAA;AAC3C,IAAA,OAAOH,IAAI,aAAeG,EAAAA,MAAAA,CAAAA;AAC9B;AAEO,SAASC,gBAAgB5B,KAAa,EAAA;AACzC,IAAA,OAAOwB,IAAI,YAAcxB,EAAAA,KAAAA,CAAAA;AAC7B;AAEA;AAEA,SAAS6B,GAAAA,CACLJ,IAAkC,EAClCzB,KAAa,EAAA;IAEbA,KAAQA,GAAAA,KAAAA,CAAM8B,OAAO,CAAC,CAAC,WAAW,EAAEL,IAAAA,CAAK,OAAO,CAAC,EAAE,EAAA,CAAA;IAEnDzB,KAAQA,GAAAA,KAAAA,CAAM8B,OAAO,CAAC,CAAC,WAAW,EAAEL,IAAAA,CAAK,OAAO,CAAC,EAAE,EAAA,CAAA;IACnDzB,KAAQA,GAAAA,KAAAA,CAAM8B,OAAO,CAAC,CAAC,SAAS,EAAEL,IAAAA,CAAK,OAAO,CAAC,EAAE,EAAA,CAAA;IACjDzB,KAAQA,GAAAA,KAAAA,CAAM8B,OAAO,CAAC,CAAC,WAAW,EAAEL,IAAAA,CAAK,KAAK,CAAC,EAAE,EAAA,CAAA;IAEjD,OAAOzB,KAAAA;AACX;AAEO,SAAS+B,iBAAiB/B,KAAa,EAAA;AAC1C,IAAA,OAAO6B,IAAI,aAAe7B,EAAAA,KAAAA,CAAAA;AAC9B;AAEO,SAASgC,gBAAgBhC,KAAa,EAAA;AACzC,IAAA,OAAO6B,IAAI,YAAc7B,EAAAA,KAAAA,CAAAA;AAC7B;;AC3CA;;;;;IAOO,IAAKiC,kBAAAA,iBAAAA,SAAAA,kBAAAA,EAAAA;;;;;AAAAA,IAAAA,OAAAA,kBAAAA;AAKX,CAAA,CAAA,EAAA;;ACAM,SAASC,mCACZlC,KAAqC,EAAA;AAErC,IAAA,IAAIA,KAAMK,CAAAA,IAAI,KAAK4B,kBAAAA,CAAmBE,IAAI,EAAE;QACxC,OAAO;YACHzC,IAAM,EAAA,SAAA;AACN,YAAA,GAAGM;AACP,SAAA;AACJ;IAEA,OAAO;QACHoC,MAAQ,EAAA,GAAA;AACR/B,QAAAA,IAAAA,EAAML,MAAMK;AAChB,KAAA;AACJ;AAEO,SAASgC,mCACZrC,KAAqC,EAAA;AAErC,IAAA,IAAIA,KAAMK,CAAAA,IAAI,KAAK4B,kBAAAA,CAAmBE,IAAI,EAAE;QACxC,OAAO;YACHzC,IAAM,EAAA,SAAA;AACN,YAAA,GAAGM;AACP,SAAA;AACJ;IAEA,OAAOA,KAAAA;AACX;;AC9BO,SAASsC,qBAAqBtC,KAAa,EAAA;IAC9C,OAAQC,OAAOC,MAAM,CAAC+B,oBAAiC9B,OAAO,CAACH,WAAW,EAAC;AAC/E;;ACFO,SAASuC,kCAAkClC,IAAY,EAAA;AAC1D;;AAEC,QACD,IAAIA,IAAAA,KAAS4B,kBAAmBE,CAAAA,IAAI,EAAE;QAClC,OAAO;AACH,YAAA,MAAA;AACA,YAAA;AACH,SAAA;AACL;IAEA,IACI9B,IAAAA,KAAS4B,kBAAmBO,CAAAA,OAAO,IACnCnC,IAAAA,KAAS4B,kBAAmBQ,CAAAA,OAAO,IACnCpC,IAAAA,KAAS4B,kBAAmBS,CAAAA,OAAO,EACrC;QACE,OAAO;AACH,YAAA,SAAA;AACA,YAAA;AACH,SAAA;AACL;AAEA,IAAA,MAAM,IAAI9B,WAAAA,CAAY,CAAC,0DAA0D,EAAEP,IAAM,CAAA,CAAA,CAAA;AAC7F;;ACpBO,eAAesC,mBAAmB3C,KAAqC,EAAA;AAC1E,IAAA,MAAMe,oBAAoBmB,kCAAmClC,CAAAA,KAAAA,CAAAA;AAE7D,IAAA,OAAOsB,gBAAOC,WAAW,CACrBR,mBACA,IACAwB,EAAAA,iCAAAA,CAAkCxB,kBAAkBV,IAAI,CAAA,CAAA;AAEhE;;ACVO,SAASuC,wBAAAA,CAAyBvC,IAAY,EAAEC,MAAkC,EAAA;AACrF,IAAA,IAAIP,sBAAsBM,IAAO,CAAA,EAAA;AAC7B,QAAA,OAAOD,mCAAmCC,IAAMC,EAAAA,MAAAA,CAAAA;AACpD;AAEA,IAAA,IAAIgC,qBAAqBjC,IAAO,CAAA,EAAA;AAC5B,QAAA,OAAOkC,iCAAkClC,CAAAA,IAAAA,CAAAA;AAC7C;AAEA,IAAA,MAAM,IAAIO,WAAAA,CAAY,CAAC,gDAAgD,EAAEP,IAAM,CAAA,CAAA,CAAA;AACnF;;ACDO,MAAMwC,kBAAAA,CAAAA;;AAST,IAAA,MAAMC,aAAsC,GAAA;AACxC,QAAA,IAAI,IAAI,CAACC,GAAG,CAACtB,IAAI,KAAK,SAAW,EAAA;AAC7B,YAAA,OAAOH,gBAAO0B,SAAS,CAAC,OAAS,EAAA,IAAI,CAACD,GAAG,CAAA;AAC7C;AAEA,QAAA,IAAI,IAAI,CAACA,GAAG,CAACtB,IAAI,KAAK,QAAU,EAAA;AAC5B,YAAA,OAAOH,gBAAO0B,SAAS,CAAC,MAAQ,EAAA,IAAI,CAACD,GAAG,CAAA;AAC5C;AAEA,QAAA,OAAOzB,gBAAO0B,SAAS,CAAC,KAAO,EAAA,IAAI,CAACD,GAAG,CAAA;AAC3C;AAEA,IAAA,MAAME,YAAoC,GAAA;AACtC,QAAA,MAAMC,WAAc,GAAA,MAAM,IAAI,CAACJ,aAAa,EAAA;AAC5C,QAAA,OAAO,IAAI5B,UAAWgC,CAAAA,WAAAA,CAAAA;AAC1B;AAEA,IAAA,MAAMC,QAA6B,GAAA;AAC/B,QAAA,MAAMD,WAAc,GAAA,MAAM,IAAI,CAACJ,aAAa,EAAA;AAC5C,QAAA,OAAOM,uBAAoBF,CAAAA,WAAAA,CAAAA;AAC/B;AAEA,IAAA,MAAMG,KAAyB,GAAA;AAC3B,QAAA,MAAM1B,MAAS,GAAA,MAAM,IAAI,CAACwB,QAAQ,EAAA;AAElC,QAAA,IAAI,IAAI,CAACJ,GAAG,CAACtB,IAAI,KAAK,QAAU,EAAA;AAC5B,YAAA,OAAOG,eAAgBD,CAAAA,MAAAA,CAAAA;AAC3B;AAEA,QAAA,IAAI,IAAI,CAACoB,GAAG,CAACtB,IAAI,KAAK,SAAW,EAAA;AAC7B,YAAA,OAAOC,gBAAiBC,CAAAA,MAAAA,CAAAA;AAC5B;AAEA,QAAA,MAAM,IAAI2B,KAAM,CAAA,2CAAA,CAAA;AACpB;AAEA,IAAA,MAAMC,KAA8B,GAAA;AAChC,QAAA,OAAOjC,gBAAO0B,SAAS,CAAC,KAAO,EAAA,IAAI,CAACD,GAAG,CAAA;AAC3C;;IAIA,aAAaS,OAAAA,CAAQC,GAAgD,EAA+B;QAChG,IAAIA,GAAAA,CAAInD,MAAM,KAAK,OAAS,EAAA;YACxB,OAAOuC,kBAAAA,CAAmBa,UAAU,CAAC;AAAE,gBAAA,GAAGD,GAAG;gBAAEV,GAAKhB,EAAAA,gBAAAA,CAAiB0B,IAAIV,GAAG;AAAE,aAAA,CAAA;AAClF;QACA,OAAOF,kBAAAA,CAAmBa,UAAU,CAAC;AAAE,YAAA,GAAGD,GAAG;YAAEV,GAAKf,EAAAA,eAAAA,CAAgByB,IAAIV,GAAG;AAAE,SAAA,CAAA;AACjF;IAEA,aAAaW,UAAAA,CACTD,GAAsC,EACV;QAC5B,MAAMP,WAAAA,GAAcS,uBAAoBF,CAAAA,GAAAA,CAAIV,GAAG,CAAA;QAE/C,OAAOF,kBAAAA,CAAmBe,eAAe,CAAC;AACtC,YAAA,GAAGH,GAAG;YACNV,GAAKG,EAAAA;AACT,SAAA,CAAA;AACJ;IAEA,aAAaU,eAAAA,CACTH,GAA2C,EACf;QAC5B,IAAII,iBAAAA;AACJ,QAAA,IAAIJ,IAAInD,MAAM,KAAK,UAAUmD,GAAInD,CAAAA,MAAM,KAAK,OAAS,EAAA;YACjDuD,iBAAoBzC,GAAAA,mCAAAA,CAAoCqC,IAAI3C,OAAO,CAAA;AACvE,SAAA,MAAO,IAAI2C,GAAAA,CAAInD,MAAM,KAAK,KAAO,EAAA;YAC7BuD,iBAAoBxB,GAAAA,kCAAAA,CAAmCoB,IAAI3C,OAAO,CAAA;SAC/D,MAAA;YACH,MAAM,IAAIF,YAAY,CAAC,OAAO,EAAE6C,GAAInD,CAAAA,MAAM,CAAC,kBAAkB,CAAC,CAAA;AAClE;AAEA,QAAA,MAAMwD,YAAY,MAAMxC,eAAAA,CAAOyC,SAAS,CACpCN,GAAAA,CAAInD,MAAM,EACVmD,GAAAA,CAAIV,GAAG,EACPc,mBACA,IACAjB,EAAAA,wBAAAA,CAAyBiB,kBAAkBxD,IAAI,EAAEoD,IAAInD,MAAM,CAAA,CAAA;AAG/D,QAAA,OAAO,IAAIuC,kBAAmBiB,CAAAA,SAAAA,CAAAA;AAClC;AAvFAE,IAAAA,WAAAA,CAAYF,SAAqB,CAAE;QAC/B,IAAI,CAACf,GAAG,GAAGe,SAAAA;AACf;AAsFJ;;ACpGA;;;;;;IAOO,SAASG,kBAAAA,CACZC,KAAa,EAAA;IAEb,MAAMC,KAAAA,GAAQD,KAAME,CAAAA,KAAK,CAAC,GAAA,CAAA;IAC1B,IAAID,KAAAA,CAAM/B,MAAM,KAAK,CAAG,EAAA;AACpB,QAAA,MAAMiC,eAASC,OAAO,EAAA;AAC1B;IAEA,MAAM,CAACC,aAAa,GAAGJ,KAAAA;IAEvB,IAAI;AACA,QAAA,MAAMK,UAAUC,IAAKF,CAAAA,YAAAA,CAAAA;QAErB,OAAOG,IAAAA,CAAKC,KAAK,CAACH,OAAAA,CAAAA;AAElB;;;;;;;;;;;;aAaJ,CAAE,OAAOI,CAAG,EAAA;QACR,MAAMP,cAAAA,CAASQ,aAAa,CAAC,0CAAA,CAAA;AACjC;AACJ;AAEA;;;;IAKO,SAASC,mBAAAA,CACZZ,KAAa,EAAA;IAEb,MAAMC,KAAAA,GAAQD,KAAME,CAAAA,KAAK,CAAC,GAAA,CAAA;IAC1B,IAAID,KAAAA,CAAM/B,MAAM,KAAK,CAAG,EAAA;AACpB,QAAA,MAAMiC,eAASC,OAAO,EAAA;AAC1B;IAEA,MAAM,GAAGS,cAAc,GAAGZ,KAAAA;IAE1B,IAAI;AACA,QAAA,MAAMK,UAAUC,IAAKM,CAAAA,aAAAA,CAAAA;QAErB,OAAOL,IAAAA,CAAKC,KAAK,CAACH,OAAAA,CAAAA;AACtB,KAAA,CAAE,OAAOI,CAAG,EAAA;QACR,MAAMP,cAAAA,CAASW,cAAc,CAAC,2CAAA,CAAA;AAClC;AACJ;;AC7DO,SAASC,uBAAuBL,CAAU,EAAA;AAC7C,IAAA,IAAIM,cAASN,CAAI,CAAA,EAAA;AACb,QAAA,IAAI,OAAOA,CAAAA,CAAEvE,IAAI,KAAK,QAAU,EAAA;AAC5B,YAAA,OAAQuE,EAAEvE,IAAI;gBACV,KAAK,mBAAA;AAAqB,oBAAA;AACtB,wBAAA,OAAOgE,eAASc,OAAO,EAAA;AAC3B;gBACA,KAAK,gBAAA;AAAkB,oBAAA;wBACnB,IAAI,OAAOP,EAAEQ,IAAI,KAAK,YAAYR,CAAEQ,CAAAA,IAAI,YAAYC,IAAM,EAAA;AACtD,4BAAA,OAAOhB,cAASiB,CAAAA,eAAe,CAACV,CAAAA,CAAEQ,IAAI,CAAA;AAC1C;AACA,wBAAA;AACJ;gBACA,KAAK,mBAAA;AAAqB,oBAAA;AACtB,wBAAA,IAAI,OAAOR,CAAAA,CAAEW,OAAO,KAAK,QAAU,EAAA;AAC/B,4BAAA,OAAOlB,cAASW,CAAAA,cAAc,CAACJ,CAAAA,CAAEW,OAAO,CAAA;AAC5C;AAEA,wBAAA;AACJ;AACJ;AACJ;;AAGA,QAAA,OAAQX,EAAEW,OAAO;YACb,KAAK,kBAAA;AAAoB,gBAAA;AACrB,oBAAA,OAAOlB,eAASc,OAAO,EAAA;AAC3B;YACA,KAAK,mBAAA;AAAqB,gBAAA;AACtB,oBAAA,OAAOd,eAASiB,eAAe,EAAA;AACnC;YACA,KAAK,cAAA;YACL,KAAK,kBAAA;AAAoB,gBAAA;AACrB,oBAAA,OAAOjB,eAASW,cAAc,EAAA;AAClC;AACJ;AACJ;AAEA,IAAA,OAAO,IAAIX,cAAS,CAAA;QAChBmB,KAAOZ,EAAAA,CAAAA;QACPa,UAAY,EAAA,IAAA;QACZF,OAAS,EAAA;AACb,KAAA,CAAA;AACJ;AAEO,SAASG,gCAAgCC,SAA4B,EAAA;IACxE,OAAQA,SAAAA;AACJ,QAAA,KAAKC,mBAAaC,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOC,uBAAUD,KAAK;AAC1B;AACA,QAAA,KAAKD,mBAAaG,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOD,uBAAUC,KAAK;AAC1B;AACA,QAAA,KAAKH,mBAAaI,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOF,uBAAUE,KAAK;AAC1B;AACA,QAAA,KAAKJ,mBAAaK,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOH,uBAAUG,KAAK;AAC1B;AACA,QAAA,KAAKL,mBAAaM,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOJ,uBAAUI,KAAK;AAC1B;AACA,QAAA,KAAKN,mBAAaO,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOL,uBAAUK,KAAK;AAC1B;AACA,QAAA,KAAKP,mBAAaQ,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAON,uBAAUM,KAAK;AAC1B;AACA,QAAA,KAAKR,mBAAaS,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOP,uBAAUO,KAAK;AAC1B;AACA,QAAA,KAAKT,mBAAaU,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOR,uBAAUQ,KAAK;AAC1B;AACA,QAAA,KAAKV,mBAAaW,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOT,uBAAUS,KAAK;AAC1B;AACA,QAAA,KAAKX,mBAAaY,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOV,uBAAUU,KAAK;AAC1B;AACJ;AAEA,IAAA,MAAM,IAAIlD,KAAM,CAAA,CAAC,cAAc,EAAEqC,SAAAA,CAAU,kBAAkB,CAAC,CAAA;AAClE;;AC/EA,MAAMc,eAAAA,GAAkB,IAAMC,IAAKC,CAAAA,KAAK,CAAC,IAAItB,IAAAA,EAAAA,CAAOuB,OAAO,EAAK,GAAA,IAAA,CAAA;AAEzD,eAAeC,SAAAA,CAAUC,MAAiB,EAAEC,OAAyB,EAAA;AACxE,IAAA,IAAI,OAAOD,MAAAA,CAAOE,GAAG,KAAK,QAAU,EAAA;QAChCF,MAAOE,CAAAA,GAAG,GAAGP,eAAoB,EAAA,GAAA,IAAA;AACrC;AACA,IAAA,IAAI,OAAOK,MAAAA,CAAOG,GAAG,KAAK,QAAU,EAAA;AAChCH,QAAAA,MAAAA,CAAOG,GAAG,GAAGR,eAAAA,EAAAA;AACjB;AAEA,IAAA,OAAQM,QAAQtF,IAAI;AAChB,QAAA,KAAKyF,cAAQC,GAAG;AAChB,QAAA,KAAKD,cAAQE,EAAE;AAAE,YAAA;gBACb,IAAIzB,SAAAA;gBAEJ,IAAI5C,GAAAA;AACJ,gBAAA,IAAI,OAAOgE,OAAAA,CAAQhE,GAAG,KAAK,QAAU,EAAA;oBACjCA,GAAMrB,GAAAA,gBAAAA,CAAiBqF,QAAQhE,GAAG,CAAA;iBAC/B,MAAA;AACH,oBAAA,MAAMsE,YAAe,GAAA,IAAIxE,kBAAmBkE,CAAAA,OAAAA,CAAQhE,GAAG,CAAA;oBACvDA,GAAM,GAAA,MAAMsE,aAAahE,KAAK,EAAA;AAClC;AAEA,gBAAA,IAAI0D,OAAQtF,CAAAA,IAAI,KAAKyF,aAAAA,CAAQC,GAAG,EAAE;oBAC9BxB,SAAYoB,GAAAA,OAAAA,CAAQpB,SAAS,GACzBD,+BAAAA,CAAgCqB,QAAQpB,SAAS,CAAA,GACjDG,uBAAUG,KAAK;iBAChB,MAAA;oBACHN,SAAYoB,GAAAA,OAAAA,CAAQpB,SAAS,GACzBD,+BAAAA,CAAgCqB,QAAQpB,SAAS,CAAA,GACjDG,uBAAUM,KAAK;AACvB;gBAEA,OAAOkB,iBAAAA,CAAKR,QAAQ/D,GAAK,EAAA;AACrB4C,oBAAAA,SAAAA;AACA4B,oBAAAA,KAAAA,EAAOR,QAAQQ;AACnB,iBAAA,CAAA;AACJ;AACA,QAAA,KAAKL,cAAQM,GAAG;AAAE,YAAA;gBACd,MAAM7B,SAAAA,GAAwBoB,QAAQpB,SAAS,GAC3CD,gCAAgCqB,OAAQpB,CAAAA,SAAS,CACjDG,GAAAA,sBAAAA,CAAUD,KAAK;gBAEnB,IAAI9C,GAAAA;AACJ,gBAAA,IAAI,OAAOgE,OAAAA,CAAQhE,GAAG,KAAK,QAAU,EAAA;AACjCA,oBAAAA,GAAAA,GAAMgE,QAAQhE,GAAG;iBACd,MAAA;AACH,oBAAA,MAAMsE,YAAe,GAAA,IAAIxE,kBAAmBkE,CAAAA,OAAAA,CAAQhE,GAAG,CAAA;oBACvDA,GAAM,GAAA,MAAMsE,aAAapE,YAAY,EAAA;AACzC;gBAEA,OAAOqE,iBAAAA,CAAKR,QAAQ/D,GAAK,EAAA;AACrB4C,oBAAAA,SAAAA;AACA4B,oBAAAA,KAAAA,EAAOR,QAAQQ;AACnB,iBAAA,CAAA;AACJ;AACJ;AAEA,IAAA,MAAM,IAAIE,iBAAAA,EAAAA;AACd;;AC3DA;;;;;;;AAOC,IACM,eAAeC,WAClBxD,CAAAA,KAAa,EACb6C,OAA2B,EAAA;IAE3B,IAAIY,OAAAA;IAEJ,IAAIC,MAAAA;IAEJ,IAAI;AACA,QAAA,OAAQb,QAAQtF,IAAI;AAChB,YAAA,KAAKyF,cAAQC,GAAG;AAChB,YAAA,KAAKD,cAAQE,EAAE;AAAE,gBAAA;oBACb,IAAIS,UAAAA;AAEJ,oBAAA,IAAId,OAAQtF,CAAAA,IAAI,KAAKyF,aAAAA,CAAQC,GAAG,EAAE;wBAC9BU,UAAad,GAAAA,OAAAA,CAAQc,UAAU,GAC3Bd,OAAQc,CAAAA,UAAU,CAACC,GAAG,CAAC,CAACnC,SAAcD,GAAAA,+BAAAA,CAAgCC,SACtE,CAAA,CAAA,GAAA;AACIG,4BAAAA,sBAAAA,CAAUG,KAAK;AACfH,4BAAAA,sBAAAA,CAAUI,KAAK;AACfJ,4BAAAA,sBAAAA,CAAUK,KAAK;AACfL,4BAAAA,sBAAAA,CAAUQ,KAAK;AACfR,4BAAAA,sBAAAA,CAAUS,KAAK;AACfT,4BAAAA,sBAAAA,CAAUU;AACb,yBAAA;qBACF,MAAA;wBACHqB,UAAad,GAAAA,OAAAA,CAAQc,UAAU,GAC3Bd,OAAQc,CAAAA,UAAU,CAACC,GAAG,CAAC,CAACnC,SAAcD,GAAAA,+BAAAA,CAAgCC,SACtE,CAAA,CAAA,GAAA;AACIG,4BAAAA,sBAAAA,CAAUM,KAAK;AACfN,4BAAAA,sBAAAA,CAAUO;AACb,yBAAA;AACT;oBAEA,IAAItD,GAAAA;AACJ,oBAAA,IAAI,OAAOgE,OAAAA,CAAQhE,GAAG,KAAK,QAAU,EAAA;wBACjCA,GAAMnB,GAAAA,eAAAA,CAAgBmF,QAAQhE,GAAG,CAAA;qBAC9B,MAAA;AACH,wBAAA,MAAMsE,YAAe,GAAA,IAAIxE,kBAAmBkE,CAAAA,OAAAA,CAAQhE,GAAG,CAAA;wBACvDA,GAAM,GAAA,MAAMsE,aAAahE,KAAK,EAAA;AAClC;oBAEAsE,OAAUI,GAAAA,mBAAAA,CAAO7D,OAAOnB,GAAK,EAAA;AACzB8E,wBAAAA,UAAAA;wBACAG,WAAa,EAAA;AACjB,qBAAA,CAAA;AACA,oBAAA;AACJ;AACA,YAAA,KAAKd,cAAQM,GAAG;AAAE,gBAAA;AACd,oBAAA,MAAMK,UAA2Bd,GAAAA,OAAAA,CAAQc,UAAU,GAC/Cd,OAAQc,CAAAA,UAAU,CAACC,GAAG,CAAC,CAACnC,SAAcD,GAAAA,+BAAAA,CAAgCC,SACtE,CAAA,CAAA,GAAA;AACIG,wBAAAA,sBAAAA,CAAUD,KAAK;AACfC,wBAAAA,sBAAAA,CAAUC,KAAK;AACfD,wBAAAA,sBAAAA,CAAUE;AACb,qBAAA;oBAEL,IAAIjD,GAAAA;AACJ,oBAAA,IAAI,OAAOgE,OAAAA,CAAQhE,GAAG,KAAK,QAAU,EAAA;AACjCA,wBAAAA,GAAAA,GAAMgE,QAAQhE,GAAG;qBACd,MAAA;AACH,wBAAA,MAAMsE,YAAe,GAAA,IAAIxE,kBAAmBkE,CAAAA,OAAAA,CAAQhE,GAAG,CAAA;wBACvDA,GAAM,GAAA,MAAMsE,aAAapE,YAAY,EAAA;AACzC;oBAEA0E,OAAUI,GAAAA,mBAAAA,CAAO7D,OAAOnB,GAAK,EAAA;AACzB8E,wBAAAA,UAAAA;wBACAG,WAAa,EAAA;AACjB,qBAAA,CAAA;AACJ;AACJ;AAEAJ,QAAAA,MAAAA,GAAS,MAAMD,OAAAA;AACnB,KAAA,CAAE,OAAO/C,CAAG,EAAA;AACR,QAAA,MAAMK,sBAAuBL,CAAAA,CAAAA,CAAAA;AACjC;IAEA,IAAI,OAAOgD,WAAW,WAAa,EAAA;AAC/B,QAAA,MAAM,IAAIH,iBAAY,CAAA;YAAElC,OAAS,EAAA;AAAgB,SAAA,CAAA;AACrD;IAEA,OAAOqC,MAAAA;AACX;;AC9FA,MAAMK,aAAWC,WAAc,CAAA;IAC3B7H,IAAM,EAAA;AACV,CAAA,CAAA;AAEO,SAAS8H,gBAAgBC,OAAwB,EAAA;AACpDH,IAAAA,UAAAA,CAASI,UAAU,CAACD,OAAAA,CAAAA;AACxB;AAEO,SAASE,mBAAAA,GAAAA;AACZ,IAAA,OAAOL,UAASM,CAAAA,GAAG,EAAMN,IAAAA,UAAAA,CAASO,UAAU,EAAA;AAChD;AAEO,SAASC,eAAezI,KAAa,EAAA;AACxCiI,IAAAA,UAAAA,CAASS,GAAG,CAAC1I,KAAAA,CAAAA;AACjB;AAEO,SAAS2I,cAAAA,GAAAA;AACZ,IAAA,OAAOV,WAASW,GAAG,EAAA;AACvB;;ACjBO,MAAMC,kBAAAA,CAAAA;IAaT,MAAMN,GAAAA,CAAIxF,GAAW,EAAqB;AACtC,QAAA,OAAO,IAAI,CAACkF,QAAQ,CAACM,GAAG,CAACxF,GAAAA,CAAAA;AAC7B;IAEA,MAAM+F,GAAAA,CAAI/F,GAAW,EAAkB;AACnC,QAAA,OAAO,IAAI,CAACkF,QAAQ,CAACa,GAAG,CAAC/F,GAAAA,CAAAA;AAC7B;AAEA,IAAA,MAAM2F,IAAI3F,GAAW,EAAExD,KAAY,EAAEuB,OAAwB,EAAiB;AAC1E,QAAA,IAAI,CAACmH,QAAQ,CAACS,GAAG,CAAC3F,KAAKxD,KAAO,EAAA;AAC1BwJ,YAAAA,GAAAA,EAAKjI,QAAQiI;AACjB,SAAA,CAAA;AACJ;IAEA,MAAMC,IAAAA,CAAKjG,GAAW,EAAiB;AACnC,QAAA,IAAI,CAACkF,QAAQ,CAACgB,MAAM,CAAClG,GAAAA,CAAAA;AACzB;IAEA,MAAMmG,QAAAA,CAASC,IAAc,EAAkB;AAC3C,QAAA,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,IAAID,IAAK/G,CAAAA,MAAM,EAAEgH,CAAK,EAAA,CAAA;AAClC,YAAA,IAAI,CAACnB,QAAQ,CAACgB,MAAM,CAACE,IAAI,CAACC,CAAE,CAAA,CAAA;AAChC;AACJ;AAEA,IAAA,MAAMC,KAAMvI,CAAAA,OAAAA,GAA6B,EAAE,EAAkB;QACzD,IAAIA,OAAAA,CAAQwI,MAAM,EAAE;AAChB,YAAA,MAAMH,IAAO,GAAA,IAAI,CAAClB,QAAQ,CAACkB,IAAI,EAAA;YAC/B,IAAII,QAAAA,GAAWJ,KAAKK,IAAI,EAAA;YACxB,MAAO,CAACD,QAASE,CAAAA,IAAI,CAAE;AACnB,gBAAA,IAAIF,SAAShK,KAAK,CAACmK,UAAU,CAAC5I,OAAAA,CAAQwI,MAAM,CAAG,EAAA;AAC3C,oBAAA,IAAI,CAACrB,QAAQ,CAACgB,MAAM,CAACM,SAAShK,KAAK,CAAA;AACvC;AAEAgK,gBAAAA,QAAAA,GAAWJ,KAAKK,IAAI,EAAA;AACxB;AAEA,YAAA;AACJ;QAEA,IAAI,CAACvB,QAAQ,CAACoB,KAAK,EAAA;AACvB;IAhDArF,WAAYlD,CAAAA,OAAAA,GAAkC,EAAE,CAAE;AAC9C,QAAA,IAAI,CAACmH,QAAQ,GAAG,IAAI0B,QAAwB,CAAA;YACxCC,aAAe,EAAA,IAAA;YACfb,GAAKc,EAAAA,QAAAA;YACL,GAAI/I,OAAAA,IAAW;AACnB,SAAA,CAAA;AACJ;AA2CJ;;ACrDO,MAAMgJ,iBAAAA,CAAAA;IAUT,MAAMhB,GAAAA,CAAI/F,GAAW,EAAgB;AACjC,QAAA,OAAO,IAAI,CAACkF,QAAQ,CAACa,GAAG,CAAC/F,GAAAA,CAAAA;AAC7B;IAEA,MAAMwF,GAAAA,CAAIxF,GAAW,EAAqB;AACtC,QAAA,MAAM6E,MAAS,GAAA,MAAM,IAAI,CAACkB,GAAG,CAAC/F,GAAAA,CAAAA;AAE9B,QAAA,OAAO,OAAO6E,MAAW,KAAA,WAAA;AAC7B;AAEA,IAAA,MAAMc,IAAI3F,GAAW,EAAExD,KAAU,EAAEuB,OAAwB,EAAiB;AACxE,QAAA,MAAM,IAAI,CAACmH,QAAQ,CAACS,GAAG,CAAC3F,KAAKxD,KAAO,EAAA;AAChCwK,YAAAA,YAAAA,EAAcjJ,QAAQiI;AAC1B,SAAA,CAAA;AACJ;IAEA,MAAMC,IAAAA,CAAKjG,GAAW,EAAiB;AACnC,QAAA,MAAM,IAAI,CAACkF,QAAQ,CAACe,IAAI,CAACjG,GAAAA,CAAAA;AAC7B;IAEA,MAAMmG,QAAAA,CAASC,IAAc,EAAkB;AAC3C,QAAA,MAAMa,QAAW,GAAA,IAAI,CAACC,MAAM,CAACD,QAAQ,EAAA;AAErC,QAAA,IAAK,IAAIZ,CAAI,GAAA,CAAA,EAAGA,IAAID,IAAK/G,CAAAA,MAAM,EAAEgH,CAAK,EAAA,CAAA;AAClCY,YAAAA,QAAAA,CAASE,GAAG,CAACf,IAAI,CAACC,CAAE,CAAA,CAAA;AACxB;AAEA,QAAA,MAAMY,SAASG,IAAI,EAAA;AACvB;AAEA,IAAA,MAAMd,KAAMvI,CAAAA,OAAAA,GAA6B,EAAE,EAAkB;QACzD,IAAIA,OAAAA,CAAQwI,MAAM,EAAE;AAChB,YAAA,MAAMU,QAAW,GAAA,IAAI,CAACC,MAAM,CAACD,QAAQ,EAAA;AAErC,YAAA,MAAMb,IAAO,GAAA,MAAM,IAAI,CAACc,MAAM,CAACd,IAAI,CAAC,CAAGrI,EAAAA,OAAAA,CAAQwI,MAAM,CAAC,CAAC,CAAC,CAAA;AACxD,YAAA,IAAK,IAAIF,CAAI,GAAA,CAAA,EAAGA,IAAID,IAAK/G,CAAAA,MAAM,EAAEgH,CAAK,EAAA,CAAA;AAClCY,gBAAAA,QAAAA,CAASE,GAAG,CAACf,IAAI,CAACC,CAAE,CAAA,CAAA;AACxB;AAEA,YAAA,MAAMY,SAASG,IAAI,EAAA;AAEnB,YAAA;AACJ;AACA,QAAA,MAAM,IAAI,CAACF,MAAM,CAACG,OAAO,EAAA;AAC7B;IAjDApG,WAAc,EAAA;QACV,IAAI,CAACiG,MAAM,GAAGtB,cAAAA,EAAAA;AACd,QAAA,IAAI,CAACV,QAAQ,GAAG,IAAIoC,0BAAY,CAAA,IAAI,CAACJ,MAAM,CAAA;AAC/C;AA+CJ;;ACzDO,SAASK,kBAAAA,GAAAA;AACZ,IAAA,IAAIhC,mBAAuB,EAAA,EAAA;AACvB,QAAA,OAAO,IAAIwB,iBAAAA,EAAAA;AACf;AAEA,IAAA,OAAO,IAAIjB,kBAAAA,EAAAA;AACf;;ACPO,SAAS0B,cAAczJ,OAA6B,EAAA;AACvD,IAAA,OAAO0J,2BAAkB1J,CAAAA,OAAAA,CAAAA;AAC7B;;ACZA;;;;;AAKC,IAKM,MAAM2J,KAAAA,CAAAA;IAOT,MAAM/B,GAAAA,CAAI3F,GAAW,EAAExD,KAAU,EAAEuB,OAA2B,GAAA,EAAE,EAAkB;AAC9E,QAAA,MAAM,IAAI,CAAC4J,OAAO,CAAChC,GAAG,CAAC3F,KAAKxD,KAAOuB,EAAAA,OAAAA,CAAAA;AACvC;IAEA,MAAMgI,GAAAA,CAAI/F,GAAW,EAA6B;AAC9C,QAAA,OAAO,IAAI,CAAC2H,OAAO,CAAC5B,GAAG,CAAC/F,GAAAA,CAAAA;AAC5B;IAEA,MAAMiG,IAAAA,CAAKjG,GAAW,EAAkB;AACpC,QAAA,OAAO,IAAI,CAAC2H,OAAO,CAAC1B,IAAI,CAACjG,GAAAA,CAAAA;AAC7B;IAEA,MAAMmG,QAAAA,CAASC,IAAc,EAAkB;AAC3C,QAAA,OAAO,IAAI,CAACuB,OAAO,CAACxB,QAAQ,CAACC,IAAAA,CAAAA;AACjC;AAEA,IAAA,MAAME,KAAMvI,CAAAA,OAAAA,GAA6B,EAAE,EAAkB;AACzD,QAAA,OAAO,IAAI,CAAC4J,OAAO,CAACrB,KAAK,CAACvI,OAAAA,CAAAA;AAC9B;AAtBAkD,IAAAA,WAAAA,CAAY0G,OAAqB,CAAE;QAC/B,IAAI,CAACA,OAAO,GAAGA,OAAAA;AACnB;AAqBJ;;ACvBA,MAAMzC,aAAWC,WAAa,CAAA;IAC1B7H,IAAM,EAAA,OAAA;IACN+H,OAAS,EAAA,IAAA;QACL,IAAIsC,OAAAA;AACJ,QAAA,IAAIpC,mBAAuB,EAAA,EAAA;AACvBoC,YAAAA,OAAAA,GAAU,IAAIZ,iBAAAA,EAAAA;SACX,MAAA;AACHY,YAAAA,OAAAA,GAAU,IAAI7B,kBAAAA,EAAAA;AAClB;AAEA,QAAA,OAAO,IAAI4B,KAAMC,CAAAA,OAAAA,CAAAA;AACrB;AACJ,CAAA,CAAA;AAEO,SAASC,QAAAA,GAAAA;AACZ,IAAA,OAAO1C,WAASW,GAAG,EAAA;AACvB;;ACdO,SAASgC,aAAa7D,OAA4B,EAAA;IACrD,IAAI8D,KAAAA;AAEJ,IAAA,MAAMC,GAAM/D,GAAAA,OAAAA,CAAQgE,SAAS,IAAIC,QAAQF,GAAG,EAAA;IAE5C,IAAI/D,OAAAA,CAAQkE,GAAG,KAAK,YAAc,EAAA;QAC9BJ,KAAQ,GAAA;YACJ,IAAIK,kBAAAA,CAAWC,OAAO,CAAC;gBACnBC,KAAO,EAAA;AACX,aAAA,CAAA;YACA,IAAIF,kBAAAA,CAAWG,IAAI,CAAC;gBAChBC,QAAUC,EAAAA,IAAAA,CAAKC,IAAI,CAACV,GAAK,EAAA,UAAA,CAAA;gBACzBM,KAAO,EAAA,MAAA;AACPK,gBAAAA,OAAAA,EAAS,KAAK,IAAO,GAAA,IAAA;gBACrBC,QAAU,EAAA;AACd,aAAA,CAAA;YACA,IAAIR,kBAAAA,CAAWG,IAAI,CAAC;gBAChBC,QAAUC,EAAAA,IAAAA,CAAKC,IAAI,CAACV,GAAK,EAAA,WAAA,CAAA;gBACzBM,KAAO,EAAA,MAAA;AACPK,gBAAAA,OAAAA,EAAS,KAAK,IAAO,GAAA,IAAA;gBACrBC,QAAU,EAAA;AACd,aAAA;AACH,SAAA;KACE,MAAA;QACHb,KAAQ,GAAA;YACJ,IAAIK,kBAAAA,CAAWC,OAAO,CAAC;gBACnBC,KAAO,EAAA;AACX,aAAA;AACH,SAAA;AACL;;AAGA,IAAA,OAAOO,oBAAO,CAAA;AACVrL,QAAAA,MAAAA,EAAQA,cAAOsL,CAAAA,OAAO,CAClBtL,cAAAA,CAAOuL,MAAM,CAAC;YAAEC,KAAO,EAAA;AAAK,SAAA,CAAA,EAC5BxL,eAAOyL,SAAS,EAAA,EAChBzL,eAAO0L,QAAQ,EAAA,EACf1L,eAAO2L,MAAM,EAAA,CAAA;QAEjBf,UAAYL,EAAAA;AAChB,KAAA,CAAA;AACJ;;AC9CA,MAAM5C,aAAWC,WAAc,CAAA;IAC3B7H,IAAM,EAAA;AACV,CAAA,CAAA;AAEO,SAAS6L,iBAAiB9D,OAAwB,EAAA;AACrDH,IAAAA,UAAAA,CAASI,UAAU,CAACD,OAAAA,CAAAA;AACxB;AAEO,SAAS+D,cAAAA,GAAAA;AACZ,IAAA,OAAOlE,UAASM,CAAAA,GAAG,EAAMN,IAAAA,UAAAA,CAASO,UAAU,EAAA;AAChD;AAEO,SAAS4D,UAAUpM,KAAa,EAAA;AACnCiI,IAAAA,UAAAA,CAASS,GAAG,CAAC1I,KAAAA,CAAAA;AACjB;AAEO,SAASqM,SAAAA,GAAAA;AACZ,IAAA,OAAOpE,WAASW,GAAG,EAAA;AACvB;;ACjBA,MAAMX,WAAWC,WAAmB,CAAA;IAChC7H,IAAM,EAAA;AACV,CAAA,CAAA;AAEO,SAASiM,gBAAgBlE,OAA6B,EAAA;AACzDH,IAAAA,QAAAA,CAASI,UAAU,CAACD,OAAAA,CAAAA;AACxB;AAEO,SAASmE,mBAAAA,GAAAA;AACZ,IAAA,OAAOtE,QAASM,CAAAA,GAAG,EAAMN,IAAAA,QAAAA,CAASO,UAAU,EAAA;AAChD;AAEO,SAASgE,cAAAA,GAAAA;AACZ,IAAA,OAAOvE,SAASW,GAAG,EAAA;AACvB;;ACfO,SAAS6D,yBAA4BzM,KAAQ,EAAA;AAChD,IAAA,IAAIkF,aAASlF,KAAQ,CAAA,EAAA;QACjB,MAAMmJ,IAAAA,GAAOlJ,MAAOkJ,CAAAA,IAAI,CAACnJ,KAAAA,CAAAA;AACzB,QAAA,IAAK,IAAIoJ,CAAI,GAAA,CAAA,EAAGA,IAAID,IAAK/G,CAAAA,MAAM,EAAEgH,CAAK,EAAA,CAAA;AAClC,YAAA,MAAM7J,QAAQS,KAAK,CAACmJ,IAAI,CAACC,EAAE,CAAC;AAC5B,YAAA,IAAI7J,iBAAiB8F,IAAM,EAAA;AACvBrF,gBAAAA,KAAK,CAACmJ,IAAI,CAACC,EAAE,CAAC,GAAG7J,MAAMmN,WAAW,EAAA;AACtC;AACJ;AACJ;IAEA,OAAO1M,KAAAA;AACX;AAEO,SAAS2M,2BAAAA,CACZ3M,KAA6B,EAC7B4M,EAAoB,EAAA;IAEpB,IAAI,OAAO5M,UAAU,QAAU,EAAA;QAC3B,OAAOA,KAAAA;AACX;AAEA,IAAA,OAAOA,KAAM4M,CAAAA,EAAAA,CAAAA;AACjB;;ACtBO,MAAMC,yBAAAA,CAAAA;IAOT,MAAMC,OAAAA,CAAQrJ,GAA8B,EAAkB;AAC1D,QAAA,MAAMsJ,OAAOrI,IAAKsI,CAAAA,SAAS,CAACP,wBAAAA,CAAyBhJ,IAAIwJ,OAAO,CAAA,CAAA;AAEhE,QAAA,MAAMjD,QAAW,GAAA,IAAI,CAACkD,MAAM,CAAClD,QAAQ,EAAA;QACrC,IAAK,IAAIZ,IAAI,CAAGA,EAAAA,CAAAA,GAAI3F,IAAI0J,YAAY,CAAC/K,MAAM,EAAEgH,CAAK,EAAA,CAAA;AAC9C,YAAA,MAAM,EAAEgE,SAAS,EAAE,GAAG3J,GAAI0J,CAAAA,YAAY,CAAC/D,CAAE,CAAA;AACzC,YAAA,MAAMiE,YAAaD,SAAY,GAAA,CAAA,EAAGA,SAAU,CAAA,CAAC,CAAC,GAAG,EAAA;YAEjD,IAAIrK,GAAAA,GAAMsK,YAAYV,2BAA4BlJ,CAAAA,GAAAA,CAAI0J,YAAY,CAAC/D,CAAAA,CAAE,CAACkE,OAAO,CAAA;YAC7EtD,QAAS8C,CAAAA,OAAO,CAAC/J,GAAKgK,EAAAA,IAAAA,CAAAA;YAEtB,IAAI,OAAOtJ,IAAI0J,YAAY,CAAC/D,EAAE,CAACkE,OAAO,KAAK,UAAY,EAAA;AACnDvK,gBAAAA,GAAAA,GAAMsK,SAAYV,GAAAA,2BAAAA,CAA4BlJ,GAAI0J,CAAAA,YAAY,CAAC/D,CAAE,CAAA,CAACkE,OAAO,EAAE7J,GAAIwJ,CAAAA,OAAO,CAACF,IAAI,CAACH,EAAE,CAAA;gBAC9F5C,QAAS8C,CAAAA,OAAO,CAAC/J,GAAKgK,EAAAA,IAAAA,CAAAA;AAC1B;AACJ;AAEA,QAAA,MAAM/C,SAASG,IAAI,EAAA;AACvB;AAtBAnG,IAAAA,WAAAA,CAAYiG,MAAc,CAAE;QACxB,IAAI,CAACiD,MAAM,GAAGjD,MAAAA;AAClB;AAqBJ;;ACxBO,MAAMsD,0BAAAA,CAAAA;IAOT,MAAMT,OAAAA,CAAQrJ,GAA8B,EAAkB;AAC1DA,QAAAA,GAAAA,CAAIwJ,OAAO,GAAGR,wBAAyBhJ,CAAAA,GAAAA,CAAIwJ,OAAO,CAAA;QAElD,IAAK,IAAI7D,IAAI,CAAGA,EAAAA,CAAAA,GAAI3F,IAAI0J,YAAY,CAAC/K,MAAM,EAAEgH,CAAK,EAAA,CAAA;YAC9C,IAAIoE,OAAAA;AACJ,YAAA,IAAI/J,IAAI0J,YAAY,CAAC/D,CAAE,CAAA,CAACgE,SAAS,EAAE;gBAC/BI,OAAU,GAAA,IAAI,CAACN,MAAM,CAACO,EAAE,CAAChK,GAAAA,CAAI0J,YAAY,CAAC/D,CAAE,CAAA,CAACgE,SAAS,CAAA;aACnD,MAAA;gBACHI,OAAU,GAAA,IAAI,CAACN,MAAM;AACzB;AAEA,YAAA,IAAIQ,WAAWf,2BAA4BlJ,CAAAA,GAAAA,CAAI0J,YAAY,CAAC/D,CAAAA,CAAE,CAACkE,OAAO,CAAA;YAEtE,MAAMK,aAAAA,GAAgBC,kCAAmBnK,CAAAA,GAAAA,CAAIwJ,OAAO,CAACxL,IAAI,EAAEgC,GAAAA,CAAIwJ,OAAO,CAACY,KAAK,CAAA;AAE5EL,YAAAA,OAAAA,CACKM,EAAE,CAACJ,QACHK,CAAAA,CAAAA,IAAI,CAACJ,aAAe,EAAA;AACjB,gBAAA,GAAGlK,IAAIwJ,OAAO;gBACde,IAAM,EAAA;AACFN,oBAAAA;AACJ;AACJ,aAAA,CAAA;YAEJ,IAAI,OAAOjK,IAAI0J,YAAY,CAAC/D,EAAE,CAACkE,OAAO,KAAK,UAAY,EAAA;AACnDI,gBAAAA,QAAAA,GAAWf,2BAA4BlJ,CAAAA,GAAAA,CAAI0J,YAAY,CAAC/D,CAAE,CAAA,CAACkE,OAAO,EAAE7J,GAAIwJ,CAAAA,OAAO,CAACF,IAAI,CAACH,EAAE,CAAA;AAEvFY,gBAAAA,OAAAA,CACKM,EAAE,CAACJ,QACHK,CAAAA,CAAAA,IAAI,CAACJ,aAAe,EAAA;AACjB,oBAAA,GAAGlK,IAAIwJ,OAAO;oBACde,IAAM,EAAA;AACFN,wBAAAA,QAAAA;AACAO,wBAAAA,MAAAA,EAAQxK,GAAIwJ,CAAAA,OAAO,CAACF,IAAI,CAACH;AAC7B;AACJ,iBAAA,CAAA;AACR;AACJ;AACJ;AA1CA5I,IAAAA,WAAAA,CAAYiG,MAAc,CAAE;AACxB,QAAA,IAAI,CAACiD,MAAM,GAAG,IAAIgB,oBAAQjE,CAAAA,MAAAA,CAAAA;AAC9B;AAyCJ;;AC9CO,MAAMkE,oBAAAA,CAAAA;IAcT,MAAMrB,OAAAA,CACFrJ,GAAiC,EACnB;AACd,QAAA,MAAM2K,UAAa,GAAA,IAAI,CAACA,UAAU,CAAClO,MAAM,EAAA;AACzC,QAAA,MAAO,IAAM,CAAA;YACT,MAAMmO,EAAAA,GAAKD,WAAW5E,IAAI,EAAA;YAC1B,IAAI6E,EAAAA,CAAG5E,IAAI,EAAE;AACT,gBAAA;AACJ;AAEA,YAAA,MAAM4E,EAAG9O,CAAAA,KAAK,CAACuN,OAAO,CAACrJ,GAAAA,CAAAA;AAC3B;AACJ;IAvBAO,WAAc,EAAA;QACV,IAAI,CAACoK,UAAU,GAAG,IAAIE,GAAAA,EAAAA;AAEtB,QAAA,IAAIhG,mBAAuB,EAAA,EAAA;AACvB,YAAA,MAAM2B,MAAStB,GAAAA,cAAAA,EAAAA;AAEf,YAAA,IAAI,CAACyF,UAAU,CAACG,GAAG,CAAC,IAAI1B,yBAA0B5C,CAAAA,MAAAA,CAAAA,CAAAA;AAClD,YAAA,IAAI,CAACmE,UAAU,CAACG,GAAG,CAAC,IAAIhB,0BAA2BtD,CAAAA,MAAAA,CAAAA,CAAAA;AACvD;AACJ;AAeJ;;ACxCA;;;;;AAKC,IAEM,SAASuE,cACZC,CAAAA,GAAM,EACNC,IAAO,EAAA;AAEP,IAAA,OAAOzO,OAAO0O,SAAS,CAACH,cAAc,CAACI,IAAI,CAACH,GAAKC,EAAAA,IAAAA,CAAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/crypto/hash/compare.ts","../src/crypto/hash/hash.ts","../src/crypto/key-asymmetric/constants.ts","../src/crypto/key-asymmetric/check.ts","../src/crypto/key-asymmetric/key-usages.ts","../src/crypto/key-asymmetric/normalize.ts","../src/crypto/key-asymmetric/create.ts","../src/crypto/key-asymmetric/helpers/wrap.ts","../src/crypto/key-symmetric/constants.ts","../src/crypto/key-symmetric/normalize.ts","../src/crypto/key-symmetric/check.ts","../src/crypto/key-symmetric/key-usages.ts","../src/crypto/key-symmetric/create.ts","../src/crypto/key/key-usages.ts","../src/crypto/key/container.ts","../src/crypto/json-web-token/extract.ts","../src/crypto/json-web-token/utils.ts","../src/crypto/json-web-token/sign/module.ts","../src/crypto/json-web-token/verify/module.ts","../src/services/redis/singleton.ts","../src/services/cache/adapters/memory.ts","../src/services/cache/adapters/redis.ts","../src/services/cache/adapters/factory.ts","../src/services/cache/helper.ts","../src/services/cache/module.ts","../src/services/cache/singleton.ts","../src/services/logger/module.ts","../src/services/logger/singleton.ts","../src/services/vault/singleton.ts","../src/domain-event/utils.ts","../src/domain-event/redis/module.ts","../src/domain-event/socket/module.ts","../src/domain-event/module.ts","../src/utils/has-property.ts"],"sourcesContent":["/*\n * Copyright (c) 2022-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 { compare as compareMethod } from '@node-rs/bcrypt';\n\nexport async function compare(value: string, hashedValue: string) : Promise<boolean> {\n return compareMethod(value, hashedValue);\n}\n","/*\n * Copyright (c) 2022-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 { hash as hashMethod } from '@node-rs/bcrypt';\n\nexport async function hash(str: string, rounds: number = 10) : Promise<string> {\n return hashMethod(str, rounds);\n}\n","/*\n * Copyright (c) 2022-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\nexport enum CryptoAsymmetricAlgorithm {\n RSA_PSS = 'RSA-PSS',\n RSASSA_PKCS1_V1_5 = 'RSASSA-PKCS1-v1_5',\n RSA_OAEP = 'RSA-OAEP',\n ECDSA = 'ECDSA',\n ECDH = 'ECDH',\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 { CryptoAsymmetricAlgorithm } from './constants';\n\nexport function isAsymmetricAlgorithm(input: string) : input is CryptoAsymmetricAlgorithm {\n return (Object.values(CryptoAsymmetricAlgorithm) as string[]).indexOf(input) !== -1;\n}\n","/*\n * Copyright (c) 2024-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 { CryptoAsymmetricAlgorithm } from './constants';\n\n/**\n * @see https://nodejs.org/api/webcrypto.html#cryptokeyusages\n */\nexport function getKeyUsagesForAsymmetricAlgorithm(\n name: string,\n format?: Exclude<KeyFormat, 'jwk'>,\n) : KeyUsage[] {\n if (\n name === CryptoAsymmetricAlgorithm.RSA_PSS ||\n name === CryptoAsymmetricAlgorithm.ECDSA ||\n name === CryptoAsymmetricAlgorithm.RSASSA_PKCS1_V1_5\n ) {\n if (format === 'spki') {\n return ['verify'];\n } if (format === 'pkcs8') {\n return ['sign'];\n }\n\n return ['sign', 'verify'];\n }\n\n if (name === CryptoAsymmetricAlgorithm.ECDH) {\n if (format === 'spki') {\n return [];\n }\n\n return [\n 'deriveKey',\n 'deriveBits',\n ];\n }\n\n if (name === CryptoAsymmetricAlgorithm.RSA_OAEP) {\n if (format === 'spki') {\n return ['encrypt'];\n } if (format === 'pkcs8') {\n return ['decrypt'];\n }\n\n return ['encrypt', 'decrypt'];\n }\n\n throw new SyntaxError(`Key usages can not be determined for asymmetric algorithm: ${name}`);\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 { CryptoAsymmetricAlgorithm } from './constants';\nimport type {\n AsymmetricKeyImportOptionsInput,\n AsymmetricKeyPairCreateOptions,\n AsymmetricKeyPairCreateOptionsInput,\n AsymmetricKeyPairImportOptions,\n} from './types';\n\nexport function normalizeAsymmetricKeyPairCreateOptions(\n options: AsymmetricKeyPairCreateOptionsInput,\n) : AsymmetricKeyPairCreateOptions {\n let optionsNormalized : AsymmetricKeyPairCreateOptions;\n switch (options.name) {\n case CryptoAsymmetricAlgorithm.RSASSA_PKCS1_V1_5:\n case CryptoAsymmetricAlgorithm.RSA_PSS:\n case CryptoAsymmetricAlgorithm.RSA_OAEP: {\n optionsNormalized = {\n modulusLength: 2048,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n hash: 'SHA-256',\n ...options,\n };\n break;\n }\n case CryptoAsymmetricAlgorithm.ECDSA:\n case CryptoAsymmetricAlgorithm.ECDH: {\n optionsNormalized = {\n namedCurve: 'P-256',\n ...options,\n };\n }\n }\n\n return optionsNormalized;\n}\n\nexport function normalizeAsymmetricKeyImportOptions(\n options: AsymmetricKeyImportOptionsInput,\n) : AsymmetricKeyPairImportOptions {\n let optionsNormalized : AsymmetricKeyPairImportOptions;\n switch (options.name) {\n case CryptoAsymmetricAlgorithm.RSASSA_PKCS1_V1_5:\n case CryptoAsymmetricAlgorithm.RSA_PSS:\n case CryptoAsymmetricAlgorithm.RSA_OAEP: {\n optionsNormalized = {\n hash: 'SHA-256',\n ...options,\n };\n break;\n }\n case CryptoAsymmetricAlgorithm.ECDSA:\n case CryptoAsymmetricAlgorithm.ECDH: {\n optionsNormalized = {\n namedCurve: 'P-256',\n ...options,\n };\n }\n }\n\n return optionsNormalized;\n}\n","/*\n * Copyright (c) 2022-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 { subtle } from 'uncrypto';\nimport { getKeyUsagesForAsymmetricAlgorithm } from './key-usages';\nimport { normalizeAsymmetricKeyPairCreateOptions } from './normalize';\nimport type { AsymmetricKeyPairCreateOptionsInput } from './types';\n\nexport async function createAsymmetricKeyPair(options: AsymmetricKeyPairCreateOptionsInput) : Promise<CryptoKeyPair> {\n const optionsNormalized = normalizeAsymmetricKeyPairCreateOptions(options);\n return subtle.generateKey(\n optionsNormalized,\n true,\n getKeyUsagesForAsymmetricAlgorithm(optionsNormalized.name),\n );\n}\n","/*\n * Copyright (c) 2024-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\nfunction enc(\n type: 'PRIVATE KEY' | 'PUBLIC KEY',\n input: string,\n) {\n return `-----BEGIN ${type}-----\\n${input}\\n-----END ${type}-----`;\n}\n\nexport function encodePKCS8ToPEM(base64: string) {\n return enc('PRIVATE KEY', base64);\n}\n\nexport function encodeSPKIToPem(input: string) {\n return enc('PUBLIC KEY', input);\n}\n\n// ------------------------------------------------------------\n\nfunction dec(\n type: 'PRIVATE KEY' | 'PUBLIC KEY',\n input: string,\n) {\n input = input.replace(`-----BEGIN ${type}-----\\n`, '');\n\n input = input.replace(`\\n-----END ${type}-----\\n`, '');\n input = input.replace(`-----END ${type}-----\\n`, '');\n input = input.replace(`\\n-----END ${type}-----`, '');\n\n return input;\n}\n\nexport function decodePemToPKCS8(input: string) {\n return dec('PRIVATE KEY', input);\n}\n\nexport function decodePemToSpki(input: string) {\n return dec('PUBLIC KEY', input);\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\nexport enum SymmetricAlgorithm {\n HMAC = 'HMAC',\n AES_CTR = 'AES-CTR',\n AES_CBC = 'AES-CBC',\n AES_GCM = 'AES-GCM',\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 { SymmetricAlgorithm } from './constants';\nimport type {\n SymmetricKeyCreateOptions, SymmetricKeyCreateOptionsInput, SymmetricKeyImportOptions, SymmetricKeyImportOptionsInput,\n} from './types';\n\nexport function normalizeSymmetricKeyCreateOptions(\n input: SymmetricKeyCreateOptionsInput,\n) : SymmetricKeyCreateOptions {\n if (input.name === SymmetricAlgorithm.HMAC) {\n return {\n hash: 'SHA-256',\n ...input,\n };\n }\n\n return {\n length: 256,\n name: input.name,\n };\n}\n\nexport function normalizeSymmetricKeyImportOptions(\n input: SymmetricKeyImportOptionsInput,\n) : SymmetricKeyImportOptions {\n if (input.name === SymmetricAlgorithm.HMAC) {\n return {\n hash: 'SHA-256',\n ...input,\n };\n }\n\n return input;\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 { SymmetricAlgorithm } from './constants';\n\nexport function isSymmetricAlgorithm(input: string) : input is SymmetricAlgorithm {\n return (Object.values(SymmetricAlgorithm) as string[]).indexOf(input) !== -1;\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 { SymmetricAlgorithm } from './constants';\n\nexport function getKeyUsagesForSymmetricAlgorithm(name: string) : KeyUsage[] | undefined {\n /**\n * @see https://nodejs.org/api/webcrypto.html#cryptokeyusages\n */\n if (name === SymmetricAlgorithm.HMAC) {\n return [\n 'sign',\n 'verify',\n ];\n }\n\n if (\n name === SymmetricAlgorithm.AES_CBC ||\n name === SymmetricAlgorithm.AES_GCM ||\n name === SymmetricAlgorithm.AES_CTR\n ) {\n return [\n 'encrypt',\n 'decrypt',\n ];\n }\n\n throw new SyntaxError(`Key usages can not be determined for symmetric algorithm: ${name}`);\n}\n","/*\n * Copyright (c) 2022-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 { subtle } from 'uncrypto';\nimport { getKeyUsagesForSymmetricAlgorithm } from './key-usages';\nimport { normalizeSymmetricKeyCreateOptions } from './normalize';\nimport type { SymmetricKeyCreateOptionsInput } from './types';\n\nexport async function createSymmetricKey(input: SymmetricKeyCreateOptionsInput) : Promise<CryptoKey> {\n const optionsNormalized = normalizeSymmetricKeyCreateOptions(input);\n\n return subtle.generateKey(\n optionsNormalized,\n true,\n getKeyUsagesForSymmetricAlgorithm(optionsNormalized.name),\n );\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 { getKeyUsagesForAsymmetricAlgorithm, isAsymmetricAlgorithm } from '../key-asymmetric';\nimport { getKeyUsagesForSymmetricAlgorithm, isSymmetricAlgorithm } from '../key-symmetric';\n\nexport function getKeyUsagesForAlgorithm(name: string, format?: Exclude<KeyFormat, 'jwk'>) : KeyUsage[] {\n if (isAsymmetricAlgorithm(name)) {\n return getKeyUsagesForAsymmetricAlgorithm(name, format);\n }\n\n if (isSymmetricAlgorithm(name)) {\n return getKeyUsagesForSymmetricAlgorithm(name);\n }\n\n throw new SyntaxError(`Key usages can not be determined for algorithm: ${name}`);\n}\n","/*\n * Copyright (c) 2024-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 { subtle } from 'uncrypto';\nimport { arrayBufferToBase64, base64ToArrayBuffer } from '@authup/kit';\nimport type { AsymmetricKeyPairImportOptions } from '../key-asymmetric';\nimport {\n decodePemToPKCS8,\n decodePemToSpki, encodePKCS8ToPEM, encodeSPKIToPem, normalizeAsymmetricKeyImportOptions,\n} from '../key-asymmetric';\nimport type { SymmetricKeyImportOptions } from '../key-symmetric';\nimport { normalizeSymmetricKeyImportOptions } from '../key-symmetric/normalize';\nimport { getKeyUsagesForAlgorithm } from './key-usages';\nimport type { KeyContainerAsymmetricImportOptions, KeyContainerImportOptions } from './types';\n\nexport class CryptoKeyContainer {\n protected key : CryptoKey;\n\n constructor(cryptoKey : CryptoKey) {\n this.key = cryptoKey;\n }\n\n // ----------------------------------------------\n\n async toArrayBuffer(): Promise<ArrayBuffer> {\n if (this.key.type === 'private') {\n return subtle.exportKey('pkcs8', this.key);\n }\n\n if (this.key.type === 'public') {\n return subtle.exportKey('spki', this.key);\n }\n\n return subtle.exportKey('raw', this.key);\n }\n\n async toUint8Array(): Promise<Uint8Array> {\n const arrayBuffer = await this.toArrayBuffer();\n return new Uint8Array(arrayBuffer);\n }\n\n async toBase64() : Promise<string> {\n const arrayBuffer = await this.toArrayBuffer();\n return arrayBufferToBase64(arrayBuffer);\n }\n\n async toPem(): Promise<string> {\n const base64 = await this.toBase64();\n\n if (this.key.type === 'public') {\n return encodeSPKIToPem(base64);\n }\n\n if (this.key.type === 'private') {\n return encodePKCS8ToPEM(base64);\n }\n\n throw new Error('A symmetric key can not be encoded as PEM');\n }\n\n async toJWK() : Promise<JsonWebKey> {\n return subtle.exportKey('jwk', this.key);\n }\n\n // ----------------------------------------------\n\n static async fromPem(ctx: KeyContainerAsymmetricImportOptions<string>): Promise<CryptoKeyContainer> {\n if (ctx.format === 'pkcs8') {\n return CryptoKeyContainer.fromBase64({ ...ctx, key: decodePemToPKCS8(ctx.key) });\n }\n return CryptoKeyContainer.fromBase64({ ...ctx, key: decodePemToSpki(ctx.key) });\n }\n\n static async fromBase64(\n ctx: KeyContainerImportOptions<string>,\n ) : Promise<CryptoKeyContainer> {\n const arrayBuffer = base64ToArrayBuffer(ctx.key);\n\n return CryptoKeyContainer.fromArrayBuffer({\n ...ctx,\n key: arrayBuffer,\n });\n }\n\n static async fromArrayBuffer(\n ctx: KeyContainerImportOptions<ArrayBuffer>,\n ) : Promise<CryptoKeyContainer> {\n let normalizedOptions : AsymmetricKeyPairImportOptions | SymmetricKeyImportOptions;\n if (ctx.format === 'spki' || ctx.format === 'pkcs8') {\n normalizedOptions = normalizeAsymmetricKeyImportOptions(ctx.options);\n } else if (ctx.format === 'raw') {\n normalizedOptions = normalizeSymmetricKeyImportOptions(ctx.options);\n } else {\n throw new SyntaxError(`Format ${ctx.format} is not supported.`);\n }\n\n const cryptoKey = await subtle.importKey(\n ctx.format,\n ctx.key,\n normalizedOptions,\n true,\n getKeyUsagesForAlgorithm(normalizedOptions.name, ctx.format),\n );\n\n return new CryptoKeyContainer(cryptoKey);\n }\n}\n","/*\n * Copyright (c) 2022-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 type { JWTClaims, JWTHeader } from '@authup/specs';\nimport { JWTError } from '@authup/specs';\n\n/**\n * Decode a JWT token with no verification.\n *\n * @param token\n *\n * @throws JWTError\n */\nexport function extractTokenHeader(\n token: string,\n) : JWTHeader {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw JWTError.invalid();\n }\n\n const [headerBase64] = parts;\n\n try {\n const payload = atob(headerBase64);\n\n return JSON.parse(payload);\n\n /*\n return {\n typ: 'JWT',\n alg: transformInternalToJWTAlgorithm(header.algorithm),\n cty: header.contentType,\n jku: header.jsonKeyUrl,\n kid: header.keyId,\n x5u: header.x5Url,\n x5c: header.x5CertChain,\n x5t: header.x5CertThumbprint,\n 'x5t#S256': header.x5TS256CertThumbprint,\n };\n */\n } catch (e) {\n throw JWTError.headerInvalid('The token header could not be extracted.');\n }\n}\n\n/**\n * @param token\n *\n * @throws JWTError\n */\nexport function extractTokenPayload(\n token: string,\n) : JWTClaims {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw JWTError.invalid();\n }\n\n const [, payloadBase64] = parts;\n\n try {\n const payload = atob(payloadBase64);\n\n return JSON.parse(payload);\n } catch (e) {\n throw JWTError.payloadInvalid('The token payload could not be extracted.');\n }\n}\n","/*\n * Copyright (c) 2022-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 { JWTAlgorithm, JWTError } from '@authup/specs';\nimport { Algorithm } from '@node-rs/jsonwebtoken';\nimport { isObject } from 'smob';\n\nexport function createErrorForJWTError(e: unknown) : JWTError {\n if (isObject(e)) {\n if (typeof e.name === 'string') {\n switch (e.name) {\n case 'TokenExpiredError': {\n return JWTError.expired();\n }\n case 'NotBeforeError': {\n if (typeof e.date === 'string' || e.date instanceof Date) {\n return JWTError.notActiveBefore(e.date);\n }\n break;\n }\n case 'JsonWebTokenError': {\n if (typeof e.message === 'string') {\n return JWTError.payloadInvalid(e.message);\n }\n\n break;\n }\n }\n }\n\n // @see https://github.com/Keats/jsonwebtoken/blob/master/src/errors.rs\n switch (e.message) {\n case 'ExpiredSignature': {\n return JWTError.expired();\n }\n case 'ImmatureSignature': {\n return JWTError.notActiveBefore();\n }\n case 'InvalidToken':\n case 'InvalidSignature': {\n return JWTError.payloadInvalid();\n }\n }\n }\n\n return new JWTError({\n cause: e as Error,\n logMessage: true,\n message: 'The JWT error could not be determined.',\n });\n}\n\nexport function transformJWTAlgorithmToInternal(algorithm: `${JWTAlgorithm}`) : Algorithm {\n switch (algorithm) {\n case JWTAlgorithm.HS256: {\n return Algorithm.HS256;\n }\n case JWTAlgorithm.HS384: {\n return Algorithm.HS384;\n }\n case JWTAlgorithm.HS512: {\n return Algorithm.HS512;\n }\n case JWTAlgorithm.RS256: {\n return Algorithm.RS256;\n }\n case JWTAlgorithm.RS384: {\n return Algorithm.RS384;\n }\n case JWTAlgorithm.RS512: {\n return Algorithm.RS512;\n }\n case JWTAlgorithm.ES256: {\n return Algorithm.ES256;\n }\n case JWTAlgorithm.ES384: {\n return Algorithm.ES384;\n }\n case JWTAlgorithm.PS256: {\n return Algorithm.PS256;\n }\n case JWTAlgorithm.PS384: {\n return Algorithm.PS384;\n }\n case JWTAlgorithm.PS512: {\n return Algorithm.PS512;\n }\n }\n\n throw new Error(`The algorithm ${algorithm} is not supported.`);\n}\n\nexport function transformInternalToJWTAlgorithm(input: Algorithm) : JWTAlgorithm {\n switch (input) {\n case Algorithm.HS256:\n return JWTAlgorithm.HS256;\n case Algorithm.HS384:\n return JWTAlgorithm.HS384;\n case Algorithm.HS512:\n return JWTAlgorithm.HS512;\n case Algorithm.RS256:\n return JWTAlgorithm.RS256;\n case Algorithm.RS384:\n return JWTAlgorithm.RS384;\n case Algorithm.RS512:\n return JWTAlgorithm.RS512;\n case Algorithm.ES256:\n return JWTAlgorithm.ES256;\n case Algorithm.ES384:\n return JWTAlgorithm.ES384;\n case Algorithm.PS256:\n return JWTAlgorithm.PS256;\n case Algorithm.PS384:\n return JWTAlgorithm.PS384;\n case Algorithm.PS512:\n return JWTAlgorithm.PS512;\n }\n\n throw new SyntaxError(`The algorithm ${input} is not supported.`);\n}\n","/*\n * Copyright (c) 2022-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 { JWKType, OAuth2Error } from '@authup/specs';\nimport type { JWTClaims } from '@authup/specs';\nimport { Algorithm, sign } from '@node-rs/jsonwebtoken';\nimport { encodePKCS8ToPEM } from '../../key-asymmetric';\nimport { CryptoKeyContainer } from '../../key';\nimport { transformJWTAlgorithmToInternal } from '../utils';\nimport type { TokenSignOptions } from './types';\n\nconst getUtcTimestamp = () => Math.floor(new Date().getTime() / 1000);\n\nexport async function signToken(claims: JWTClaims, context: TokenSignOptions): Promise<string> {\n if (typeof claims.exp !== 'number') {\n claims.exp = getUtcTimestamp() + 3600;\n }\n if (typeof claims.iat !== 'number') {\n claims.iat = getUtcTimestamp();\n }\n\n switch (context.type) {\n case JWKType.RSA:\n case JWKType.EC: {\n let algorithm : Algorithm;\n\n let key : string;\n if (typeof context.key === 'string') {\n key = encodePKCS8ToPEM(context.key);\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toPem();\n }\n\n if (context.type === JWKType.RSA) {\n algorithm = context.algorithm ?\n transformJWTAlgorithmToInternal(context.algorithm) :\n Algorithm.RS256;\n } else {\n algorithm = context.algorithm ?\n transformJWTAlgorithmToInternal(context.algorithm) :\n Algorithm.ES256;\n }\n\n return sign(claims, key, {\n algorithm,\n keyId: context.keyId,\n });\n }\n case JWKType.OCT: {\n const algorithm : Algorithm = context.algorithm ?\n transformJWTAlgorithmToInternal(context.algorithm) :\n Algorithm.HS256;\n\n let key : string | Uint8Array;\n if (typeof context.key === 'string') {\n key = context.key;\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toUint8Array();\n }\n\n return sign(claims, key, {\n algorithm,\n keyId: context.keyId,\n });\n }\n }\n\n throw new OAuth2Error();\n}\n","/*\n * Copyright (c) 2022-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 { JWKType, OAuth2Error } from '@authup/specs';\nimport type { JWTClaims, OAuth2TokenPayload } from '@authup/specs';\nimport { Algorithm, verify } from '@node-rs/jsonwebtoken';\nimport { encodeSPKIToPem } from '../../key-asymmetric';\nimport { CryptoKeyContainer } from '../../key';\nimport { createErrorForJWTError, transformJWTAlgorithmToInternal } from '../utils';\nimport type { TokenVerifyOptions } from './types';\n\n/**\n * Verify JWT.\n *\n * @param token\n * @param context\n *\n * @throws OAuth2Error\n */\nexport async function verifyToken(\n token: string,\n context: TokenVerifyOptions,\n) : Promise<OAuth2TokenPayload> {\n let promise : Promise<JWTClaims>;\n\n let output : JWTClaims;\n\n try {\n switch (context.type) {\n case JWKType.RSA:\n case JWKType.EC: {\n let algorithms : Algorithm[];\n\n if (context.type === JWKType.RSA) {\n algorithms = context.algorithms ?\n context.algorithms.map((algorithm) => transformJWTAlgorithmToInternal(algorithm)) :\n [\n Algorithm.RS256,\n Algorithm.RS384,\n Algorithm.RS512,\n Algorithm.PS256,\n Algorithm.PS384,\n Algorithm.PS512,\n ];\n } else {\n algorithms = context.algorithms ?\n context.algorithms.map((algorithm) => transformJWTAlgorithmToInternal(algorithm)) :\n [\n Algorithm.ES256,\n Algorithm.ES384,\n ];\n }\n\n let key : string;\n if (typeof context.key === 'string') {\n key = encodeSPKIToPem(context.key);\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toPem();\n }\n\n promise = verify(token, key, {\n algorithms,\n validateNbf: true,\n });\n break;\n }\n case JWKType.OCT: {\n const algorithms : Algorithm[] = context.algorithms ?\n context.algorithms.map((algorithm) => transformJWTAlgorithmToInternal(algorithm)) :\n [\n Algorithm.HS256,\n Algorithm.HS384,\n Algorithm.HS512,\n ];\n\n let key : string | Uint8Array;\n if (typeof context.key === 'string') {\n key = context.key;\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toUint8Array();\n }\n\n promise = verify(token, key, {\n algorithms,\n validateNbf: true,\n });\n }\n }\n\n output = await promise;\n } catch (e) {\n throw createErrorForJWTError(e);\n }\n\n if (typeof output === 'undefined') {\n throw new OAuth2Error({ message: 'Invalid type.' });\n }\n\n return output as OAuth2TokenPayload;\n}\n","/*\n * Copyright (c) 2024-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 type { Client } from 'redis-extension';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<Client>({\n name: 'redis',\n});\n\nexport function setRedisFactory(factory: Factory<Client>) {\n instance.setFactory(factory);\n}\n\nexport function isRedisClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setRedisClient(input: Client) {\n instance.set(input);\n}\n\nexport function useRedisClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024-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 type { Options } from '@isaacs/ttlcache';\nimport TTLCache from '@isaacs/ttlcache';\nimport type { CacheClearOptions, CacheSetOptions } from '../types';\nimport type { CacheAdapter } from './types';\n\nexport class MemoryCacheAdapter<\n VALUE = any,\n> implements CacheAdapter {\n protected instance : TTLCache<string, VALUE>;\n\n constructor(options: Options<string, VALUE> = {}) {\n this.instance = new TTLCache<string, VALUE>({\n checkAgeOnGet: true,\n ttl: Infinity,\n ...(options || {}),\n });\n }\n\n async has(key: string) : Promise<boolean> {\n return this.instance.has(key);\n }\n\n async get(key: string): Promise<VALUE> {\n return this.instance.get(key);\n }\n\n async set(key: string, value: VALUE, options: CacheSetOptions): Promise<void> {\n this.instance.set(key, value, {\n ttl: options.ttl,\n });\n }\n\n async drop(key: string): Promise<void> {\n this.instance.delete(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n for (let i = 0; i < keys.length; i++) {\n this.instance.delete(keys[i]);\n }\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n if (options.prefix) {\n const keys = this.instance.keys();\n let iterator = keys.next();\n while (!iterator.done) {\n if (iterator.value.startsWith(options.prefix)) {\n this.instance.delete(iterator.value);\n }\n\n iterator = keys.next();\n }\n\n return;\n }\n\n this.instance.clear();\n }\n}\n","/*\n * Copyright (c) 2024-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 type { Client } from 'redis-extension';\nimport { JsonAdapter } from 'redis-extension';\nimport { useRedisClient } from '../../redis';\nimport type { CacheClearOptions, CacheSetOptions } from '../types';\nimport type { CacheAdapter } from './types';\n\nexport class RedisCacheAdapter implements CacheAdapter {\n protected client : Client;\n\n protected instance : JsonAdapter;\n\n constructor() {\n this.client = useRedisClient();\n this.instance = new JsonAdapter(this.client);\n }\n\n async get(key: string): Promise<any> {\n return this.instance.get(key);\n }\n\n async has(key: string) : Promise<boolean> {\n const output = await this.get(key);\n\n return typeof output !== 'undefined';\n }\n\n async set(key: string, value: any, options: CacheSetOptions): Promise<void> {\n await this.instance.set(key, value, {\n milliseconds: options.ttl,\n });\n }\n\n async drop(key: string): Promise<void> {\n await this.instance.drop(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n const pipeline = this.client.pipeline();\n\n for (let i = 0; i < keys.length; i++) {\n pipeline.del(keys[i]);\n }\n\n await pipeline.exec();\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n if (options.prefix) {\n const pipeline = this.client.pipeline();\n\n const keys = await this.client.keys(`${options.prefix}*`);\n for (let i = 0; i < keys.length; i++) {\n pipeline.del(keys[i]);\n }\n\n await pipeline.exec();\n\n return;\n }\n await this.client.flushdb();\n }\n}\n","/*\n * Copyright (c) 2024-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 { isRedisClientUsable } from '../../redis';\nimport { MemoryCacheAdapter } from './memory';\nimport { RedisCacheAdapter } from './redis';\n\nexport function createCacheAdapter() {\n if (isRedisClientUsable()) {\n return new RedisCacheAdapter();\n }\n\n return new MemoryCacheAdapter();\n}\n","/*\n * Copyright (c) 2024-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 { buildRedisKeyPath } from '../redis';\nimport type { CacheKeyBuildOptions } from './types';\n\nexport function buildCacheKey(options: CacheKeyBuildOptions) {\n return buildRedisKeyPath(options);\n}\n","/*\n * Copyright (c) 2024-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 type { CacheAdapter } from './adapters';\nimport type { CacheClearOptions, CacheSetOptions } from './types';\n\nexport class Cache {\n protected adapter : CacheAdapter;\n\n constructor(adapter: CacheAdapter) {\n this.adapter = adapter;\n }\n\n async set(key: string, value: any, options: CacheSetOptions = {}) : Promise<void> {\n await this.adapter.set(key, value, options);\n }\n\n async get(key: string) : Promise<any | undefined> {\n return this.adapter.get(key);\n }\n\n async drop(key: string) : Promise<void> {\n return this.adapter.drop(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n return this.adapter.dropMany(keys);\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n return this.adapter.clear(options);\n }\n}\n","/*\n * Copyright (c) 2024-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 { singa } from 'singa';\nimport { isRedisClientUsable } from '../redis';\nimport type { CacheAdapter } from './adapters';\nimport { MemoryCacheAdapter, RedisCacheAdapter } from './adapters';\nimport { Cache } from './module';\n\nconst instance = singa<Cache>({\n name: 'cache',\n factory: () => {\n let adapter : CacheAdapter;\n if (isRedisClientUsable()) {\n adapter = new RedisCacheAdapter();\n } else {\n adapter = new MemoryCacheAdapter();\n }\n\n return new Cache(adapter);\n },\n});\n\nexport function useCache() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2022-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 path from 'node:path';\nimport process from 'node:process';\nimport type { LoggerOptions } from 'winston';\nimport {\n createLogger as create, format, transports,\n} from 'winston';\nimport type { Logger, LoggerCreateContext } from './types';\n\nexport function createLogger(context: LoggerCreateContext) : Logger {\n let items : LoggerOptions['transports'];\n\n const cwd = context.directory || process.cwd();\n\n if (context.env === 'production') {\n items = [\n new transports.Console({\n level: 'info',\n }),\n new transports.File({\n filename: path.join(cwd, 'http.log'),\n level: 'http',\n maxsize: 10 * 1024 * 1024, // 10MB\n maxFiles: 5,\n }),\n new transports.File({\n filename: path.join(cwd, 'error.log'),\n level: 'warn',\n maxsize: 10 * 1024 * 1024, // 10MB\n maxFiles: 5,\n }),\n ];\n } else {\n items = [\n new transports.Console({\n level: 'debug',\n }),\n ];\n }\n\n // @see https://github.com/winstonjs/triple-beam/blob/master/config/npm.js\n return create({\n format: format.combine(\n format.errors({ stack: true }),\n format.timestamp(),\n format.colorize(),\n format.simple(),\n ),\n transports: items,\n });\n}\n","/*\n * Copyright (c) 2023-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 { type Factory, singa } from 'singa';\nimport type { Logger } from 'winston';\n\nconst instance = singa<Logger>({\n name: 'logger',\n});\n\nexport function setLoggerFactory(factory: Factory<Logger>) {\n instance.setFactory(factory);\n}\n\nexport function isLoggerUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setLogger(input: Logger) {\n instance.set(input);\n}\n\nexport function useLogger() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024-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 type { Factory } from 'singa';\nimport { singa } from 'singa';\nimport type { VaultClient } from '@hapic/vault';\n\nconst instance = singa<VaultClient>({\n name: 'vault',\n});\n\nexport function setVaultFactory(factory: Factory<VaultClient>) {\n instance.setFactory(factory);\n}\n\nexport function isVaultClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function useVaultClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2023-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 { isObject } from '@authup/kit';\nimport type { DomainEventChannelName } from './type';\n\nexport function transformDomainEventData<T>(input: T) : T {\n if (isObject(input)) {\n const keys = Object.keys(input);\n for (let i = 0; i < keys.length; i++) {\n const value = input[keys[i]];\n if (value instanceof Date) {\n input[keys[i]] = value.toISOString();\n }\n }\n }\n\n return input;\n}\n\nexport function buildDomainEventChannelName(\n input: DomainEventChannelName,\n id?: string | number,\n) : string {\n if (typeof input === 'string') {\n return input;\n }\n\n return input(id);\n}\n","/*\n * Copyright (c) 2023-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 type { Client } from 'redis-extension';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport class DomainEventRedisPublisher implements IDomainEventPublisher {\n protected driver : Client;\n\n constructor(client: Client) {\n this.driver = client;\n }\n\n async publish(ctx: DomainEventPublishContext) : Promise<void> {\n const data = JSON.stringify(transformDomainEventData(ctx.content));\n\n const pipeline = this.driver.pipeline();\n for (let i = 0; i < ctx.destinations.length; i++) {\n const { namespace } = ctx.destinations[i];\n const keyPrefix = (namespace ? `${namespace}:` : '');\n\n let key = keyPrefix + buildDomainEventChannelName(ctx.destinations[i].channel);\n pipeline.publish(key, data);\n\n if (typeof ctx.destinations[i].channel === 'function') {\n key = keyPrefix + buildDomainEventChannelName(ctx.destinations[i].channel, ctx.content.data.id);\n pipeline.publish(key, data);\n }\n }\n\n await pipeline.exec();\n }\n}\n","/*\n * Copyright (c) 2022-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 { buildEventFullName } from '@authup/core-realtime-kit';\nimport { Emitter } from '@socket.io/redis-emitter';\nimport type { Client } from 'redis-extension';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport class DomainEventSocketPublisher implements IDomainEventPublisher {\n protected driver : Emitter;\n\n constructor(client: Client) {\n this.driver = new Emitter(client);\n }\n\n async publish(ctx: DomainEventPublishContext) : Promise<void> {\n ctx.content = transformDomainEventData(ctx.content);\n\n for (let i = 0; i < ctx.destinations.length; i++) {\n let emitter : Emitter;\n if (ctx.destinations[i].namespace) {\n emitter = this.driver.of(ctx.destinations[i].namespace);\n } else {\n emitter = this.driver;\n }\n\n let roomName = buildDomainEventChannelName(ctx.destinations[i].channel);\n\n const fullEventName = buildEventFullName(ctx.content.type, ctx.content.event);\n\n emitter\n .in(roomName)\n .emit(fullEventName, {\n ...ctx.content,\n meta: {\n roomName,\n },\n });\n\n if (typeof ctx.destinations[i].channel === 'function') {\n roomName = buildDomainEventChannelName(ctx.destinations[i].channel, ctx.content.data.id);\n\n emitter\n .in(roomName)\n .emit(fullEventName, {\n ...ctx.content,\n meta: {\n roomName,\n roomId: ctx.content.data.id,\n },\n });\n }\n }\n }\n}\n","/*\n * Copyright (c) 2024-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 type { EventPayload } from '@authup/core-realtime-kit';\nimport { isRedisClientUsable, useRedisClient } from '../services';\nimport { DomainEventRedisPublisher } from './redis';\nimport { DomainEventSocketPublisher } from './socket';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from './type';\n\nexport class DomainEventPublisher implements IDomainEventPublisher {\n protected publishers : Set<IDomainEventPublisher>;\n\n constructor() {\n this.publishers = new Set<IDomainEventPublisher>();\n\n if (isRedisClientUsable()) {\n const client = useRedisClient();\n\n this.publishers.add(new DomainEventRedisPublisher(client));\n this.publishers.add(new DomainEventSocketPublisher(client));\n }\n }\n\n async publish<T extends EventPayload>(\n ctx: DomainEventPublishContext<T>,\n ) : Promise<void> {\n const publishers = this.publishers.values();\n while (true) {\n const it = publishers.next();\n if (it.done) {\n return;\n }\n\n await it.value.publish(ctx);\n }\n }\n}\n","/*\n * Copyright (c) 2022-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\nexport function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(\n obj: X,\n prop: Y,\n): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n"],"names":["compare","value","hashedValue","compareMethod","hash","str","rounds","hashMethod","CryptoAsymmetricAlgorithm","isAsymmetricAlgorithm","input","Object","values","indexOf","getKeyUsagesForAsymmetricAlgorithm","name","format","RSA_PSS","ECDSA","RSASSA_PKCS1_V1_5","ECDH","RSA_OAEP","SyntaxError","normalizeAsymmetricKeyPairCreateOptions","options","optionsNormalized","modulusLength","publicExponent","Uint8Array","namedCurve","normalizeAsymmetricKeyImportOptions","createAsymmetricKeyPair","subtle","generateKey","enc","type","encodePKCS8ToPEM","base64","encodeSPKIToPem","dec","replace","decodePemToPKCS8","decodePemToSpki","SymmetricAlgorithm","normalizeSymmetricKeyCreateOptions","HMAC","length","normalizeSymmetricKeyImportOptions","isSymmetricAlgorithm","getKeyUsagesForSymmetricAlgorithm","AES_CBC","AES_GCM","AES_CTR","createSymmetricKey","getKeyUsagesForAlgorithm","CryptoKeyContainer","toArrayBuffer","key","exportKey","toUint8Array","arrayBuffer","toBase64","arrayBufferToBase64","toPem","Error","toJWK","fromPem","ctx","fromBase64","base64ToArrayBuffer","fromArrayBuffer","normalizedOptions","cryptoKey","importKey","extractTokenHeader","token","parts","split","JWTError","invalid","headerBase64","payload","atob","JSON","parse","e","headerInvalid","extractTokenPayload","payloadBase64","payloadInvalid","createErrorForJWTError","isObject","expired","date","Date","notActiveBefore","message","cause","logMessage","transformJWTAlgorithmToInternal","algorithm","JWTAlgorithm","HS256","Algorithm","HS384","HS512","RS256","RS384","RS512","ES256","ES384","PS256","PS384","PS512","getUtcTimestamp","Math","floor","getTime","signToken","claims","context","exp","iat","JWKType","RSA","EC","keyContainer","sign","keyId","OCT","OAuth2Error","verifyToken","promise","output","algorithms","map","verify","validateNbf","instance","singa","setRedisFactory","factory","setFactory","isRedisClientUsable","has","hasFactory","setRedisClient","set","useRedisClient","use","MemoryCacheAdapter","get","ttl","drop","delete","dropMany","keys","i","clear","prefix","iterator","next","done","startsWith","TTLCache","checkAgeOnGet","Infinity","RedisCacheAdapter","milliseconds","pipeline","client","del","exec","flushdb","JsonAdapter","createCacheAdapter","buildCacheKey","buildRedisKeyPath","Cache","adapter","useCache","createLogger","items","cwd","directory","process","env","transports","Console","level","File","filename","path","join","maxsize","maxFiles","create","combine","errors","stack","timestamp","colorize","simple","setLoggerFactory","isLoggerUsable","setLogger","useLogger","setVaultFactory","isVaultClientUsable","useVaultClient","transformDomainEventData","toISOString","buildDomainEventChannelName","id","DomainEventRedisPublisher","publish","data","stringify","content","driver","destinations","namespace","keyPrefix","channel","DomainEventSocketPublisher","emitter","of","roomName","fullEventName","buildEventFullName","event","in","emit","meta","roomId","Emitter","DomainEventPublisher","publishers","it","Set","add","hasOwnProperty","obj","prop","prototype","call"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/crypto/hash/compare.ts","../src/crypto/hash/hash.ts","../src/crypto/key-asymmetric/constants.ts","../src/crypto/key-asymmetric/check.ts","../src/crypto/key-asymmetric/key-usages.ts","../src/crypto/key-asymmetric/normalize.ts","../src/crypto/key-asymmetric/create.ts","../src/crypto/key-asymmetric/helpers/wrap.ts","../src/crypto/key-symmetric/constants.ts","../src/crypto/key-symmetric/normalize.ts","../src/crypto/key-symmetric/check.ts","../src/crypto/key-symmetric/key-usages.ts","../src/crypto/key-symmetric/create.ts","../src/crypto/key/key-usages.ts","../src/crypto/key/container.ts","../src/crypto/json-web-token/extract.ts","../src/crypto/json-web-token/utils.ts","../src/crypto/json-web-token/sign/module.ts","../src/crypto/json-web-token/verify/module.ts","../src/services/redis/singleton.ts","../src/services/cache/adapters/memory.ts","../src/services/cache/adapters/redis.ts","../src/services/cache/adapters/factory.ts","../src/services/cache/helper.ts","../src/services/cache/module.ts","../src/services/cache/singleton.ts","../src/services/logger/module.ts","../src/services/logger/singleton.ts","../src/services/vault/singleton.ts","../src/domain-event/utils.ts","../src/domain-event/redis/module.ts","../src/domain-event/socket/module.ts","../src/domain-event/module.ts","../src/utils/has-property.ts"],"sourcesContent":["/*\n * Copyright (c) 2022-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 { compare as compareMethod } from '@node-rs/bcrypt';\n\nexport async function compare(value: string, hashedValue: string) : Promise<boolean> {\n return compareMethod(value, hashedValue);\n}\n","/*\n * Copyright (c) 2022-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 { hash as hashMethod } from '@node-rs/bcrypt';\n\nexport async function hash(str: string, rounds: number = 10) : Promise<string> {\n return hashMethod(str, rounds);\n}\n","/*\n * Copyright (c) 2022-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\nexport enum CryptoAsymmetricAlgorithm {\n RSA_PSS = 'RSA-PSS',\n RSASSA_PKCS1_V1_5 = 'RSASSA-PKCS1-v1_5',\n RSA_OAEP = 'RSA-OAEP',\n ECDSA = 'ECDSA',\n ECDH = 'ECDH',\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 { CryptoAsymmetricAlgorithm } from './constants';\n\nexport function isAsymmetricAlgorithm(input: string) : input is CryptoAsymmetricAlgorithm {\n return (Object.values(CryptoAsymmetricAlgorithm) as string[]).indexOf(input) !== -1;\n}\n","/*\n * Copyright (c) 2024-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 { CryptoAsymmetricAlgorithm } from './constants';\n\n/**\n * @see https://nodejs.org/api/webcrypto.html#cryptokeyusages\n */\nexport function getKeyUsagesForAsymmetricAlgorithm(\n name: string,\n format?: Exclude<KeyFormat, 'jwk'>,\n) : KeyUsage[] {\n if (\n name === CryptoAsymmetricAlgorithm.RSA_PSS ||\n name === CryptoAsymmetricAlgorithm.ECDSA ||\n name === CryptoAsymmetricAlgorithm.RSASSA_PKCS1_V1_5\n ) {\n if (format === 'spki') {\n return ['verify'];\n } if (format === 'pkcs8') {\n return ['sign'];\n }\n\n return ['sign', 'verify'];\n }\n\n if (name === CryptoAsymmetricAlgorithm.ECDH) {\n if (format === 'spki') {\n return [];\n }\n\n return [\n 'deriveKey',\n 'deriveBits',\n ];\n }\n\n if (name === CryptoAsymmetricAlgorithm.RSA_OAEP) {\n if (format === 'spki') {\n return ['encrypt'];\n } if (format === 'pkcs8') {\n return ['decrypt'];\n }\n\n return ['encrypt', 'decrypt'];\n }\n\n throw new SyntaxError(`Key usages can not be determined for asymmetric algorithm: ${name}`);\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 { CryptoAsymmetricAlgorithm } from './constants';\nimport type {\n AsymmetricKeyImportOptionsInput,\n AsymmetricKeyPairCreateOptions,\n AsymmetricKeyPairCreateOptionsInput,\n AsymmetricKeyPairImportOptions,\n} from './types';\n\nexport function normalizeAsymmetricKeyPairCreateOptions(\n options: AsymmetricKeyPairCreateOptionsInput,\n) : AsymmetricKeyPairCreateOptions {\n let optionsNormalized : AsymmetricKeyPairCreateOptions;\n switch (options.name) {\n case CryptoAsymmetricAlgorithm.RSASSA_PKCS1_V1_5:\n case CryptoAsymmetricAlgorithm.RSA_PSS:\n case CryptoAsymmetricAlgorithm.RSA_OAEP: {\n optionsNormalized = {\n modulusLength: 2048,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n hash: 'SHA-256',\n ...options,\n };\n break;\n }\n case CryptoAsymmetricAlgorithm.ECDSA:\n case CryptoAsymmetricAlgorithm.ECDH: {\n optionsNormalized = {\n namedCurve: 'P-256',\n ...options,\n };\n }\n }\n\n return optionsNormalized;\n}\n\nexport function normalizeAsymmetricKeyImportOptions(\n options: AsymmetricKeyImportOptionsInput,\n) : AsymmetricKeyPairImportOptions {\n let optionsNormalized : AsymmetricKeyPairImportOptions;\n switch (options.name) {\n case CryptoAsymmetricAlgorithm.RSASSA_PKCS1_V1_5:\n case CryptoAsymmetricAlgorithm.RSA_PSS:\n case CryptoAsymmetricAlgorithm.RSA_OAEP: {\n optionsNormalized = {\n hash: 'SHA-256',\n ...options,\n };\n break;\n }\n case CryptoAsymmetricAlgorithm.ECDSA:\n case CryptoAsymmetricAlgorithm.ECDH: {\n optionsNormalized = {\n namedCurve: 'P-256',\n ...options,\n };\n }\n }\n\n return optionsNormalized;\n}\n","/*\n * Copyright (c) 2022-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 { subtle } from 'uncrypto';\nimport { getKeyUsagesForAsymmetricAlgorithm } from './key-usages';\nimport { normalizeAsymmetricKeyPairCreateOptions } from './normalize';\nimport type { AsymmetricKeyPairCreateOptionsInput } from './types';\n\nexport async function createAsymmetricKeyPair(options: AsymmetricKeyPairCreateOptionsInput) : Promise<CryptoKeyPair> {\n const optionsNormalized = normalizeAsymmetricKeyPairCreateOptions(options);\n return subtle.generateKey(\n optionsNormalized,\n true,\n getKeyUsagesForAsymmetricAlgorithm(optionsNormalized.name),\n );\n}\n","/*\n * Copyright (c) 2024-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\nfunction enc(\n type: 'PRIVATE KEY' | 'PUBLIC KEY',\n input: string,\n) {\n return `-----BEGIN ${type}-----\\n${input}\\n-----END ${type}-----`;\n}\n\nexport function encodePKCS8ToPEM(base64: string) {\n return enc('PRIVATE KEY', base64);\n}\n\nexport function encodeSPKIToPem(input: string) {\n return enc('PUBLIC KEY', input);\n}\n\n// ------------------------------------------------------------\n\nfunction dec(\n type: 'PRIVATE KEY' | 'PUBLIC KEY',\n input: string,\n) {\n input = input.replace(`-----BEGIN ${type}-----\\n`, '');\n\n input = input.replace(`\\n-----END ${type}-----\\n`, '');\n input = input.replace(`-----END ${type}-----\\n`, '');\n input = input.replace(`\\n-----END ${type}-----`, '');\n\n return input;\n}\n\nexport function decodePemToPKCS8(input: string) {\n return dec('PRIVATE KEY', input);\n}\n\nexport function decodePemToSpki(input: string) {\n return dec('PUBLIC KEY', input);\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\nexport enum SymmetricAlgorithm {\n HMAC = 'HMAC',\n AES_CTR = 'AES-CTR',\n AES_CBC = 'AES-CBC',\n AES_GCM = 'AES-GCM',\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 { SymmetricAlgorithm } from './constants';\nimport type {\n SymmetricKeyCreateOptions, SymmetricKeyCreateOptionsInput, SymmetricKeyImportOptions, SymmetricKeyImportOptionsInput,\n} from './types';\n\nexport function normalizeSymmetricKeyCreateOptions(\n input: SymmetricKeyCreateOptionsInput,\n) : SymmetricKeyCreateOptions {\n if (input.name === SymmetricAlgorithm.HMAC) {\n return {\n hash: 'SHA-256',\n ...input,\n };\n }\n\n return {\n length: 256,\n name: input.name,\n };\n}\n\nexport function normalizeSymmetricKeyImportOptions(\n input: SymmetricKeyImportOptionsInput,\n) : SymmetricKeyImportOptions {\n if (input.name === SymmetricAlgorithm.HMAC) {\n return {\n hash: 'SHA-256',\n ...input,\n };\n }\n\n return input;\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 { SymmetricAlgorithm } from './constants';\n\nexport function isSymmetricAlgorithm(input: string) : input is SymmetricAlgorithm {\n return (Object.values(SymmetricAlgorithm) as string[]).indexOf(input) !== -1;\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 { SymmetricAlgorithm } from './constants';\n\nexport function getKeyUsagesForSymmetricAlgorithm(name: string) : KeyUsage[] | undefined {\n /**\n * @see https://nodejs.org/api/webcrypto.html#cryptokeyusages\n */\n if (name === SymmetricAlgorithm.HMAC) {\n return [\n 'sign',\n 'verify',\n ];\n }\n\n if (\n name === SymmetricAlgorithm.AES_CBC ||\n name === SymmetricAlgorithm.AES_GCM ||\n name === SymmetricAlgorithm.AES_CTR\n ) {\n return [\n 'encrypt',\n 'decrypt',\n ];\n }\n\n throw new SyntaxError(`Key usages can not be determined for symmetric algorithm: ${name}`);\n}\n","/*\n * Copyright (c) 2022-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 { subtle } from 'uncrypto';\nimport { getKeyUsagesForSymmetricAlgorithm } from './key-usages';\nimport { normalizeSymmetricKeyCreateOptions } from './normalize';\nimport type { SymmetricKeyCreateOptionsInput } from './types';\n\nexport async function createSymmetricKey(input: SymmetricKeyCreateOptionsInput) : Promise<CryptoKey> {\n const optionsNormalized = normalizeSymmetricKeyCreateOptions(input);\n\n return subtle.generateKey(\n optionsNormalized,\n true,\n getKeyUsagesForSymmetricAlgorithm(optionsNormalized.name),\n );\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 { getKeyUsagesForAsymmetricAlgorithm, isAsymmetricAlgorithm } from '../key-asymmetric';\nimport { getKeyUsagesForSymmetricAlgorithm, isSymmetricAlgorithm } from '../key-symmetric';\n\nexport function getKeyUsagesForAlgorithm(name: string, format?: Exclude<KeyFormat, 'jwk'>) : KeyUsage[] {\n if (isAsymmetricAlgorithm(name)) {\n return getKeyUsagesForAsymmetricAlgorithm(name, format);\n }\n\n if (isSymmetricAlgorithm(name)) {\n return getKeyUsagesForSymmetricAlgorithm(name);\n }\n\n throw new SyntaxError(`Key usages can not be determined for algorithm: ${name}`);\n}\n","/*\n * Copyright (c) 2024-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 { subtle } from 'uncrypto';\nimport { arrayBufferToBase64, base64ToArrayBuffer } from '@authup/kit';\nimport type { AsymmetricKeyPairImportOptions } from '../key-asymmetric';\nimport {\n decodePemToPKCS8,\n decodePemToSpki, encodePKCS8ToPEM, encodeSPKIToPem, normalizeAsymmetricKeyImportOptions,\n} from '../key-asymmetric';\nimport type { SymmetricKeyImportOptions } from '../key-symmetric';\nimport { normalizeSymmetricKeyImportOptions } from '../key-symmetric/normalize';\nimport { getKeyUsagesForAlgorithm } from './key-usages';\nimport type { KeyContainerAsymmetricImportOptions, KeyContainerImportOptions } from './types';\n\nexport class CryptoKeyContainer {\n protected key : CryptoKey;\n\n constructor(cryptoKey : CryptoKey) {\n this.key = cryptoKey;\n }\n\n // ----------------------------------------------\n\n async toArrayBuffer(): Promise<ArrayBuffer> {\n if (this.key.type === 'private') {\n return subtle.exportKey('pkcs8', this.key);\n }\n\n if (this.key.type === 'public') {\n return subtle.exportKey('spki', this.key);\n }\n\n return subtle.exportKey('raw', this.key);\n }\n\n async toUint8Array(): Promise<Uint8Array> {\n const arrayBuffer = await this.toArrayBuffer();\n return new Uint8Array(arrayBuffer);\n }\n\n async toBase64() : Promise<string> {\n const arrayBuffer = await this.toArrayBuffer();\n return arrayBufferToBase64(arrayBuffer);\n }\n\n async toPem(): Promise<string> {\n const base64 = await this.toBase64();\n\n if (this.key.type === 'public') {\n return encodeSPKIToPem(base64);\n }\n\n if (this.key.type === 'private') {\n return encodePKCS8ToPEM(base64);\n }\n\n throw new Error('A symmetric key can not be encoded as PEM');\n }\n\n async toJWK() : Promise<JsonWebKey> {\n return subtle.exportKey('jwk', this.key);\n }\n\n // ----------------------------------------------\n\n static async fromPem(ctx: KeyContainerAsymmetricImportOptions<string>): Promise<CryptoKeyContainer> {\n if (ctx.format === 'pkcs8') {\n return CryptoKeyContainer.fromBase64({ ...ctx, key: decodePemToPKCS8(ctx.key) });\n }\n return CryptoKeyContainer.fromBase64({ ...ctx, key: decodePemToSpki(ctx.key) });\n }\n\n static async fromBase64(\n ctx: KeyContainerImportOptions<string>,\n ) : Promise<CryptoKeyContainer> {\n const arrayBuffer = base64ToArrayBuffer(ctx.key);\n\n return CryptoKeyContainer.fromArrayBuffer({\n ...ctx,\n key: arrayBuffer,\n });\n }\n\n static async fromArrayBuffer(\n ctx: KeyContainerImportOptions<ArrayBuffer>,\n ) : Promise<CryptoKeyContainer> {\n let normalizedOptions : AsymmetricKeyPairImportOptions | SymmetricKeyImportOptions;\n if (ctx.format === 'spki' || ctx.format === 'pkcs8') {\n normalizedOptions = normalizeAsymmetricKeyImportOptions(ctx.options);\n } else if (ctx.format === 'raw') {\n normalizedOptions = normalizeSymmetricKeyImportOptions(ctx.options);\n } else {\n throw new SyntaxError(`Format ${ctx.format} is not supported.`);\n }\n\n const cryptoKey = await subtle.importKey(\n ctx.format,\n ctx.key,\n normalizedOptions,\n true,\n getKeyUsagesForAlgorithm(normalizedOptions.name, ctx.format),\n );\n\n return new CryptoKeyContainer(cryptoKey);\n }\n}\n","/*\n * Copyright (c) 2022-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 type { JWTClaims, JWTHeader } from '@authup/specs';\nimport { JWTError } from '@authup/specs';\n\n/**\n * Decode a JWT token with no verification.\n *\n * @param token\n *\n * @throws JWTError\n */\nexport function extractTokenHeader(\n token: string,\n) : JWTHeader {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw JWTError.invalid();\n }\n\n const [headerBase64] = parts;\n\n try {\n const payload = atob(headerBase64);\n\n return JSON.parse(payload);\n\n /*\n return {\n typ: 'JWT',\n alg: transformInternalToJWTAlgorithm(header.algorithm),\n cty: header.contentType,\n jku: header.jsonKeyUrl,\n kid: header.keyId,\n x5u: header.x5Url,\n x5c: header.x5CertChain,\n x5t: header.x5CertThumbprint,\n 'x5t#S256': header.x5TS256CertThumbprint,\n };\n */\n } catch (e) {\n throw JWTError.headerInvalid('The token header could not be extracted.');\n }\n}\n\n/**\n * @param token\n *\n * @throws JWTError\n */\nexport function extractTokenPayload(\n token: string,\n) : JWTClaims {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw JWTError.invalid();\n }\n\n const [, payloadBase64] = parts;\n\n try {\n const payload = atob(payloadBase64);\n\n return JSON.parse(payload);\n } catch (e) {\n throw JWTError.payloadInvalid('The token payload could not be extracted.');\n }\n}\n","/*\n * Copyright (c) 2022-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 { JWTAlgorithm, JWTError } from '@authup/specs';\nimport { Algorithm } from '@node-rs/jsonwebtoken';\nimport { isObject } from 'smob';\n\nexport function createErrorForJWTError(e: unknown) : JWTError {\n if (isObject(e)) {\n if (typeof e.name === 'string') {\n switch (e.name) {\n case 'TokenExpiredError': {\n return JWTError.expired();\n }\n case 'NotBeforeError': {\n if (typeof e.date === 'string' || e.date instanceof Date) {\n return JWTError.notActiveBefore(e.date);\n }\n break;\n }\n case 'JsonWebTokenError': {\n if (typeof e.message === 'string') {\n return JWTError.payloadInvalid(e.message);\n }\n\n break;\n }\n }\n }\n\n // @see https://github.com/Keats/jsonwebtoken/blob/master/src/errors.rs\n switch (e.message) {\n case 'ExpiredSignature': {\n return JWTError.expired();\n }\n case 'ImmatureSignature': {\n return JWTError.notActiveBefore();\n }\n case 'InvalidToken':\n case 'InvalidSignature': {\n return JWTError.payloadInvalid();\n }\n }\n }\n\n return new JWTError({\n cause: e as Error,\n logMessage: true,\n message: 'The JWT error could not be determined.',\n });\n}\n\nexport function transformJWTAlgorithmToInternal(algorithm: `${JWTAlgorithm}`) : Algorithm {\n switch (algorithm) {\n case JWTAlgorithm.HS256: {\n return Algorithm.HS256;\n }\n case JWTAlgorithm.HS384: {\n return Algorithm.HS384;\n }\n case JWTAlgorithm.HS512: {\n return Algorithm.HS512;\n }\n case JWTAlgorithm.RS256: {\n return Algorithm.RS256;\n }\n case JWTAlgorithm.RS384: {\n return Algorithm.RS384;\n }\n case JWTAlgorithm.RS512: {\n return Algorithm.RS512;\n }\n case JWTAlgorithm.ES256: {\n return Algorithm.ES256;\n }\n case JWTAlgorithm.ES384: {\n return Algorithm.ES384;\n }\n case JWTAlgorithm.PS256: {\n return Algorithm.PS256;\n }\n case JWTAlgorithm.PS384: {\n return Algorithm.PS384;\n }\n case JWTAlgorithm.PS512: {\n return Algorithm.PS512;\n }\n }\n\n throw new Error(`The algorithm ${algorithm} is not supported.`);\n}\n\nexport function transformInternalToJWTAlgorithm(input: Algorithm) : JWTAlgorithm {\n switch (input) {\n case Algorithm.HS256:\n return JWTAlgorithm.HS256;\n case Algorithm.HS384:\n return JWTAlgorithm.HS384;\n case Algorithm.HS512:\n return JWTAlgorithm.HS512;\n case Algorithm.RS256:\n return JWTAlgorithm.RS256;\n case Algorithm.RS384:\n return JWTAlgorithm.RS384;\n case Algorithm.RS512:\n return JWTAlgorithm.RS512;\n case Algorithm.ES256:\n return JWTAlgorithm.ES256;\n case Algorithm.ES384:\n return JWTAlgorithm.ES384;\n case Algorithm.PS256:\n return JWTAlgorithm.PS256;\n case Algorithm.PS384:\n return JWTAlgorithm.PS384;\n case Algorithm.PS512:\n return JWTAlgorithm.PS512;\n }\n\n throw new SyntaxError(`The algorithm ${input} is not supported.`);\n}\n","/*\n * Copyright (c) 2022-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 { JWKType, OAuth2Error } from '@authup/specs';\nimport type { JWTClaims } from '@authup/specs';\nimport { Algorithm, sign } from '@node-rs/jsonwebtoken';\nimport { encodePKCS8ToPEM } from '../../key-asymmetric';\nimport { CryptoKeyContainer } from '../../key';\nimport { transformJWTAlgorithmToInternal } from '../utils';\nimport type { TokenSignOptions } from './types';\n\nconst getUtcTimestamp = () => Math.floor(new Date().getTime() / 1000);\n\nexport async function signToken(claims: JWTClaims, context: TokenSignOptions): Promise<string> {\n if (typeof claims.exp !== 'number') {\n claims.exp = getUtcTimestamp() + 3600;\n }\n if (typeof claims.iat !== 'number') {\n claims.iat = getUtcTimestamp();\n }\n\n switch (context.type) {\n case JWKType.RSA:\n case JWKType.EC: {\n let algorithm : Algorithm;\n\n let key : string;\n if (typeof context.key === 'string') {\n key = encodePKCS8ToPEM(context.key);\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toPem();\n }\n\n if (context.type === JWKType.RSA) {\n algorithm = context.algorithm ?\n transformJWTAlgorithmToInternal(context.algorithm) :\n Algorithm.RS256;\n } else {\n algorithm = context.algorithm ?\n transformJWTAlgorithmToInternal(context.algorithm) :\n Algorithm.ES256;\n }\n\n return sign(claims, key, {\n algorithm,\n keyId: context.keyId,\n });\n }\n case JWKType.OCT: {\n const algorithm : Algorithm = context.algorithm ?\n transformJWTAlgorithmToInternal(context.algorithm) :\n Algorithm.HS256;\n\n let key : string | Uint8Array;\n if (typeof context.key === 'string') {\n key = context.key;\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toUint8Array();\n }\n\n return sign(claims, key, {\n algorithm,\n keyId: context.keyId,\n });\n }\n }\n\n throw new OAuth2Error();\n}\n","/*\n * Copyright (c) 2022-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 { JWKType, OAuth2Error } from '@authup/specs';\nimport type { JWTClaims, OAuth2TokenPayload } from '@authup/specs';\nimport { Algorithm, verify } from '@node-rs/jsonwebtoken';\nimport { encodeSPKIToPem } from '../../key-asymmetric';\nimport { CryptoKeyContainer } from '../../key';\nimport { createErrorForJWTError, transformJWTAlgorithmToInternal } from '../utils';\nimport type { TokenVerifyOptions } from './types';\n\n/**\n * Verify JWT.\n *\n * @param token\n * @param context\n *\n * @throws OAuth2Error\n */\nexport async function verifyToken(\n token: string,\n context: TokenVerifyOptions,\n) : Promise<OAuth2TokenPayload> {\n let promise : Promise<JWTClaims>;\n\n let output : JWTClaims;\n\n try {\n switch (context.type) {\n case JWKType.RSA:\n case JWKType.EC: {\n let algorithms : Algorithm[];\n\n if (context.type === JWKType.RSA) {\n algorithms = context.algorithms ?\n context.algorithms.map((algorithm) => transformJWTAlgorithmToInternal(algorithm)) :\n [\n Algorithm.RS256,\n Algorithm.RS384,\n Algorithm.RS512,\n Algorithm.PS256,\n Algorithm.PS384,\n Algorithm.PS512,\n ];\n } else {\n algorithms = context.algorithms ?\n context.algorithms.map((algorithm) => transformJWTAlgorithmToInternal(algorithm)) :\n [\n Algorithm.ES256,\n Algorithm.ES384,\n ];\n }\n\n let key : string;\n if (typeof context.key === 'string') {\n key = encodeSPKIToPem(context.key);\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toPem();\n }\n\n promise = verify(token, key, {\n algorithms,\n validateNbf: true,\n });\n break;\n }\n case JWKType.OCT: {\n const algorithms : Algorithm[] = context.algorithms ?\n context.algorithms.map((algorithm) => transformJWTAlgorithmToInternal(algorithm)) :\n [\n Algorithm.HS256,\n Algorithm.HS384,\n Algorithm.HS512,\n ];\n\n let key : string | Uint8Array;\n if (typeof context.key === 'string') {\n key = context.key;\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toUint8Array();\n }\n\n promise = verify(token, key, {\n algorithms,\n validateNbf: true,\n });\n }\n }\n\n output = await promise;\n } catch (e) {\n throw createErrorForJWTError(e);\n }\n\n if (typeof output === 'undefined') {\n throw new OAuth2Error({ message: 'Invalid type.' });\n }\n\n return output as OAuth2TokenPayload;\n}\n","/*\n * Copyright (c) 2024-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 type { Client } from 'redis-extension';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<Client>({\n name: 'redis',\n});\n\nexport function setRedisFactory(factory: Factory<Client>) {\n instance.setFactory(factory);\n}\n\nexport function isRedisClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setRedisClient(input: Client) {\n instance.set(input);\n}\n\nexport function useRedisClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024-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 type { Options } from '@isaacs/ttlcache';\nimport TTLCache from '@isaacs/ttlcache';\nimport type { CacheClearOptions, CacheSetOptions } from '../types';\nimport type { CacheAdapter } from './types';\n\nexport class MemoryCacheAdapter<\n VALUE = any,\n> implements CacheAdapter {\n protected instance : TTLCache<string, VALUE>;\n\n constructor(options: Options<string, VALUE> = {}) {\n this.instance = new TTLCache<string, VALUE>({\n checkAgeOnGet: true,\n ttl: Infinity,\n ...(options || {}),\n });\n }\n\n async has(key: string) : Promise<boolean> {\n return this.instance.has(key);\n }\n\n async get(key: string): Promise<VALUE> {\n return this.instance.get(key);\n }\n\n async set(key: string, value: VALUE, options: CacheSetOptions): Promise<void> {\n this.instance.set(key, value, {\n ttl: options.ttl,\n });\n }\n\n async drop(key: string): Promise<void> {\n this.instance.delete(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n for (let i = 0; i < keys.length; i++) {\n this.instance.delete(keys[i]);\n }\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n if (options.prefix) {\n const keys = this.instance.keys();\n let iterator = keys.next();\n while (!iterator.done) {\n if (iterator.value.startsWith(options.prefix)) {\n this.instance.delete(iterator.value);\n }\n\n iterator = keys.next();\n }\n\n return;\n }\n\n this.instance.clear();\n }\n}\n","/*\n * Copyright (c) 2024-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 type { Client } from 'redis-extension';\nimport { JsonAdapter } from 'redis-extension';\nimport { useRedisClient } from '../../redis';\nimport type { CacheClearOptions, CacheSetOptions } from '../types';\nimport type { CacheAdapter } from './types';\n\nexport class RedisCacheAdapter implements CacheAdapter {\n protected client : Client;\n\n protected instance : JsonAdapter;\n\n constructor() {\n this.client = useRedisClient();\n this.instance = new JsonAdapter(this.client);\n }\n\n async get(key: string): Promise<any> {\n return this.instance.get(key);\n }\n\n async has(key: string) : Promise<boolean> {\n const output = await this.get(key);\n\n return typeof output !== 'undefined';\n }\n\n async set(key: string, value: any, options: CacheSetOptions): Promise<void> {\n await this.instance.set(key, value, {\n milliseconds: options.ttl,\n });\n }\n\n async drop(key: string): Promise<void> {\n await this.instance.drop(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n const pipeline = this.client.pipeline();\n\n for (let i = 0; i < keys.length; i++) {\n pipeline.del(keys[i]);\n }\n\n await pipeline.exec();\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n if (options.prefix) {\n const pipeline = this.client.pipeline();\n\n const keys = await this.client.keys(`${options.prefix}*`);\n for (let i = 0; i < keys.length; i++) {\n pipeline.del(keys[i]);\n }\n\n await pipeline.exec();\n\n return;\n }\n await this.client.flushdb();\n }\n}\n","/*\n * Copyright (c) 2024-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 { isRedisClientUsable } from '../../redis';\nimport { MemoryCacheAdapter } from './memory';\nimport { RedisCacheAdapter } from './redis';\n\nexport function createCacheAdapter() {\n if (isRedisClientUsable()) {\n return new RedisCacheAdapter();\n }\n\n return new MemoryCacheAdapter();\n}\n","/*\n * Copyright (c) 2024-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 { buildRedisKeyPath } from '../redis';\nimport type { CacheKeyBuildOptions } from './types';\n\nexport function buildCacheKey(options: CacheKeyBuildOptions) {\n return buildRedisKeyPath(options);\n}\n","/*\n * Copyright (c) 2024-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 type { CacheAdapter } from './adapters';\nimport type { CacheClearOptions, CacheSetOptions } from './types';\n\nexport class Cache {\n protected adapter : CacheAdapter;\n\n constructor(adapter: CacheAdapter) {\n this.adapter = adapter;\n }\n\n async set(key: string, value: any, options: CacheSetOptions = {}) : Promise<void> {\n await this.adapter.set(key, value, options);\n }\n\n async get(key: string) : Promise<any | undefined> {\n return this.adapter.get(key);\n }\n\n async drop(key: string) : Promise<void> {\n return this.adapter.drop(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n return this.adapter.dropMany(keys);\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n return this.adapter.clear(options);\n }\n}\n","/*\n * Copyright (c) 2024-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 { singa } from 'singa';\nimport { isRedisClientUsable } from '../redis';\nimport type { CacheAdapter } from './adapters';\nimport { MemoryCacheAdapter, RedisCacheAdapter } from './adapters';\nimport { Cache } from './module';\n\nconst instance = singa<Cache>({\n name: 'cache',\n factory: () => {\n let adapter : CacheAdapter;\n if (isRedisClientUsable()) {\n adapter = new RedisCacheAdapter();\n } else {\n adapter = new MemoryCacheAdapter();\n }\n\n return new Cache(adapter);\n },\n});\n\nexport function useCache() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2022-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 path from 'node:path';\nimport process from 'node:process';\nimport type { LoggerOptions } from 'winston';\nimport {\n createLogger as create, format, transports,\n} from 'winston';\nimport type { Logger, LoggerCreateContext } from './types';\n\nexport function createLogger(context: LoggerCreateContext) : Logger {\n let items : LoggerOptions['transports'];\n\n const cwd = context.directory || process.cwd();\n\n if (context.env === 'production') {\n items = [\n new transports.Console({\n level: 'info',\n }),\n new transports.File({\n filename: path.join(cwd, 'http.log'),\n level: 'http',\n maxsize: 10 * 1024 * 1024, // 10MB\n maxFiles: 5,\n }),\n new transports.File({\n filename: path.join(cwd, 'error.log'),\n level: 'warn',\n maxsize: 10 * 1024 * 1024, // 10MB\n maxFiles: 5,\n }),\n ];\n } else {\n items = [\n new transports.Console({\n level: 'debug',\n }),\n ];\n }\n\n // @see https://github.com/winstonjs/triple-beam/blob/master/config/npm.js\n return create({\n format: format.combine(\n format.errors({ stack: true }),\n format.timestamp(),\n format.colorize(),\n format.simple(),\n ),\n transports: items,\n });\n}\n","/*\n * Copyright (c) 2023-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 { type Factory, singa } from 'singa';\nimport type { Logger } from 'winston';\n\nconst instance = singa<Logger>({\n name: 'logger',\n});\n\nexport function setLoggerFactory(factory: Factory<Logger>) {\n instance.setFactory(factory);\n}\n\nexport function isLoggerUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setLogger(input: Logger) {\n instance.set(input);\n}\n\nexport function useLogger() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024-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 type { Factory } from 'singa';\nimport { singa } from 'singa';\nimport type { VaultClient } from '@hapic/vault';\n\nconst instance = singa<VaultClient>({\n name: 'vault',\n});\n\nexport function setVaultFactory(factory: Factory<VaultClient>) {\n instance.setFactory(factory);\n}\n\nexport function isVaultClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function useVaultClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2023-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 { isObject } from '@authup/kit';\nimport type { DomainEventChannelName } from './type';\n\nexport function transformDomainEventData<T>(input: T) : T {\n if (isObject(input)) {\n const keys = Object.keys(input);\n for (let i = 0; i < keys.length; i++) {\n const value = input[keys[i]];\n if (value instanceof Date) {\n input[keys[i]] = value.toISOString();\n }\n }\n }\n\n return input;\n}\n\nexport function buildDomainEventChannelName(\n input: DomainEventChannelName,\n id?: string | number,\n) : string {\n if (typeof input === 'string') {\n return input;\n }\n\n return input(id);\n}\n","/*\n * Copyright (c) 2023-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 type { Client } from 'redis-extension';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport class DomainEventRedisPublisher implements IDomainEventPublisher {\n protected driver : Client;\n\n constructor(client: Client) {\n this.driver = client;\n }\n\n async publish(ctx: DomainEventPublishContext) : Promise<void> {\n const data = JSON.stringify(transformDomainEventData(ctx.content));\n\n const pipeline = this.driver.pipeline();\n for (let i = 0; i < ctx.destinations.length; i++) {\n const { namespace } = ctx.destinations[i];\n const keyPrefix = (namespace ? `${namespace}:` : '');\n\n let key = keyPrefix + buildDomainEventChannelName(ctx.destinations[i].channel);\n pipeline.publish(key, data);\n\n if (typeof ctx.destinations[i].channel === 'function') {\n key = keyPrefix + buildDomainEventChannelName(ctx.destinations[i].channel, ctx.content.data.id);\n pipeline.publish(key, data);\n }\n }\n\n await pipeline.exec();\n }\n}\n","/*\n * Copyright (c) 2022-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 { buildEventFullName } from '@authup/core-realtime-kit';\nimport { Emitter } from '@socket.io/redis-emitter';\nimport type { Client } from 'redis-extension';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport class DomainEventSocketPublisher implements IDomainEventPublisher {\n protected driver : Emitter;\n\n constructor(client: Client) {\n this.driver = new Emitter(client);\n }\n\n async publish(ctx: DomainEventPublishContext) : Promise<void> {\n ctx.content = transformDomainEventData(ctx.content);\n\n for (let i = 0; i < ctx.destinations.length; i++) {\n let emitter : Emitter;\n if (ctx.destinations[i].namespace) {\n emitter = this.driver.of(ctx.destinations[i].namespace);\n } else {\n emitter = this.driver;\n }\n\n let roomName = buildDomainEventChannelName(ctx.destinations[i].channel);\n\n const fullEventName = buildEventFullName(ctx.content.type, ctx.content.event);\n\n emitter\n .in(roomName)\n .emit(fullEventName, {\n ...ctx.content,\n meta: {\n roomName,\n },\n });\n\n if (typeof ctx.destinations[i].channel === 'function') {\n roomName = buildDomainEventChannelName(ctx.destinations[i].channel, ctx.content.data.id);\n\n emitter\n .in(roomName)\n .emit(fullEventName, {\n ...ctx.content,\n meta: {\n roomName,\n roomId: ctx.content.data.id,\n },\n });\n }\n }\n }\n}\n","/*\n * Copyright (c) 2024-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 type { EventPayload } from '@authup/core-realtime-kit';\nimport { isRedisClientUsable, useRedisClient } from '../services';\nimport { DomainEventRedisPublisher } from './redis';\nimport { DomainEventSocketPublisher } from './socket';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from './type';\n\nexport class DomainEventPublisher implements IDomainEventPublisher {\n protected publishers : Set<IDomainEventPublisher>;\n\n constructor() {\n this.publishers = new Set<IDomainEventPublisher>();\n\n if (isRedisClientUsable()) {\n const client = useRedisClient();\n\n this.publishers.add(new DomainEventRedisPublisher(client));\n this.publishers.add(new DomainEventSocketPublisher(client));\n }\n }\n\n async publish<T extends EventPayload>(\n ctx: DomainEventPublishContext<T>,\n ) : Promise<void> {\n const publishers = this.publishers.values();\n while (true) {\n const it = publishers.next();\n if (it.done) {\n return;\n }\n\n await it.value.publish(ctx);\n }\n }\n}\n","/*\n * Copyright (c) 2022-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\nexport function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(\n obj: X,\n prop: Y,\n): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n"],"names":["compare","value","hashedValue","compareMethod","hash","str","rounds","hashMethod","CryptoAsymmetricAlgorithm","isAsymmetricAlgorithm","input","Object","values","indexOf","getKeyUsagesForAsymmetricAlgorithm","name","format","RSA_PSS","ECDSA","RSASSA_PKCS1_V1_5","ECDH","RSA_OAEP","SyntaxError","normalizeAsymmetricKeyPairCreateOptions","options","optionsNormalized","modulusLength","publicExponent","Uint8Array","namedCurve","normalizeAsymmetricKeyImportOptions","createAsymmetricKeyPair","subtle","generateKey","enc","type","encodePKCS8ToPEM","base64","encodeSPKIToPem","dec","replace","decodePemToPKCS8","decodePemToSpki","SymmetricAlgorithm","normalizeSymmetricKeyCreateOptions","HMAC","length","normalizeSymmetricKeyImportOptions","isSymmetricAlgorithm","getKeyUsagesForSymmetricAlgorithm","AES_CBC","AES_GCM","AES_CTR","createSymmetricKey","getKeyUsagesForAlgorithm","CryptoKeyContainer","toArrayBuffer","key","exportKey","toUint8Array","arrayBuffer","toBase64","arrayBufferToBase64","toPem","Error","toJWK","fromPem","ctx","fromBase64","base64ToArrayBuffer","fromArrayBuffer","normalizedOptions","cryptoKey","importKey","constructor","extractTokenHeader","token","parts","split","JWTError","invalid","headerBase64","payload","atob","JSON","parse","e","headerInvalid","extractTokenPayload","payloadBase64","payloadInvalid","createErrorForJWTError","isObject","expired","date","Date","notActiveBefore","message","cause","logMessage","transformJWTAlgorithmToInternal","algorithm","JWTAlgorithm","HS256","Algorithm","HS384","HS512","RS256","RS384","RS512","ES256","ES384","PS256","PS384","PS512","getUtcTimestamp","Math","floor","getTime","signToken","claims","context","exp","iat","JWKType","RSA","EC","keyContainer","sign","keyId","OCT","OAuth2Error","verifyToken","promise","output","algorithms","map","verify","validateNbf","instance","singa","setRedisFactory","factory","setFactory","isRedisClientUsable","has","hasFactory","setRedisClient","set","useRedisClient","use","MemoryCacheAdapter","get","ttl","drop","delete","dropMany","keys","i","clear","prefix","iterator","next","done","startsWith","TTLCache","checkAgeOnGet","Infinity","RedisCacheAdapter","milliseconds","pipeline","client","del","exec","flushdb","JsonAdapter","createCacheAdapter","buildCacheKey","buildRedisKeyPath","Cache","adapter","useCache","createLogger","items","cwd","directory","process","env","transports","Console","level","File","filename","path","join","maxsize","maxFiles","create","combine","errors","stack","timestamp","colorize","simple","setLoggerFactory","isLoggerUsable","setLogger","useLogger","setVaultFactory","isVaultClientUsable","useVaultClient","transformDomainEventData","toISOString","buildDomainEventChannelName","id","DomainEventRedisPublisher","publish","data","stringify","content","driver","destinations","namespace","keyPrefix","channel","DomainEventSocketPublisher","emitter","of","roomName","fullEventName","buildEventFullName","event","in","emit","meta","roomId","Emitter","DomainEventPublisher","publishers","it","Set","add","hasOwnProperty","obj","prop","prototype","call"],"mappings":";;;;;;;;;;;;;;;;;;AASO,eAAeA,OAAAA,CAAQC,KAAa,EAAEC,WAAmB,EAAA;AAC5D,IAAA,OAAOC,UAAcF,KAAOC,EAAAA,WAAAA,CAAAA;AAChC;;ACFO,eAAeE,IAAAA,CAAKC,GAAW,EAAEC,SAAiB,EAAE,EAAA;AACvD,IAAA,OAAOC,OAAWF,GAAKC,EAAAA,MAAAA,CAAAA;AAC3B;;ACXA;;;;;IAOO,IAAKE,yBAAAA,iBAAAA,SAAAA,yBAAAA,EAAAA;;;;;;AAAAA,IAAAA,OAAAA,yBAAAA;AAMX,CAAA,CAAA,EAAA;;ACJM,SAASC,sBAAsBC,KAAa,EAAA;IAC/C,OAAQC,OAAOC,MAAM,CAACJ,2BAAwCK,OAAO,CAACH,WAAW,EAAC;AACtF;;ACFA;;AAEC,IACM,SAASI,kCACZC,CAAAA,IAAY,EACZC,MAAkC,EAAA;IAElC,IACID,IAAAA,KAASP,yBAA0BS,CAAAA,OAAO,IAC1CF,IAAAA,KAASP,yBAA0BU,CAAAA,KAAK,IACxCH,IAAAA,KAASP,yBAA0BW,CAAAA,iBAAiB,EACtD;AACE,QAAA,IAAIH,WAAW,MAAQ,EAAA;YACnB,OAAO;AAAC,gBAAA;AAAS,aAAA;AACrB;AAAE,QAAA,IAAIA,WAAW,OAAS,EAAA;YACtB,OAAO;AAAC,gBAAA;AAAO,aAAA;AACnB;QAEA,OAAO;AAAC,YAAA,MAAA;AAAQ,YAAA;AAAS,SAAA;AAC7B;IAEA,IAAID,IAAAA,KAASP,yBAA0BY,CAAAA,IAAI,EAAE;AACzC,QAAA,IAAIJ,WAAW,MAAQ,EAAA;AACnB,YAAA,OAAO,EAAE;AACb;QAEA,OAAO;AACH,YAAA,WAAA;AACA,YAAA;AACH,SAAA;AACL;IAEA,IAAID,IAAAA,KAASP,yBAA0Ba,CAAAA,QAAQ,EAAE;AAC7C,QAAA,IAAIL,WAAW,MAAQ,EAAA;YACnB,OAAO;AAAC,gBAAA;AAAU,aAAA;AACtB;AAAE,QAAA,IAAIA,WAAW,OAAS,EAAA;YACtB,OAAO;AAAC,gBAAA;AAAU,aAAA;AACtB;QAEA,OAAO;AAAC,YAAA,SAAA;AAAW,YAAA;AAAU,SAAA;AACjC;AAEA,IAAA,MAAM,IAAIM,WAAAA,CAAY,CAAC,2DAA2D,EAAEP,IAAM,CAAA,CAAA,CAAA;AAC9F;;ACrCO,SAASQ,wCACZC,OAA4C,EAAA;IAE5C,IAAIC,iBAAAA;AACJ,IAAA,OAAQD,QAAQT,IAAI;AAChB,QAAA,KAAKP,0BAA0BW,iBAAiB;AAChD,QAAA,KAAKX,0BAA0BS,OAAO;AACtC,QAAA,KAAKT,0BAA0Ba,QAAQ;AAAE,YAAA;gBACrCI,iBAAoB,GAAA;oBAChBC,aAAe,EAAA,IAAA;AACfC,oBAAAA,cAAAA,EAAgB,IAAIC,UAAW,CAAA;AAAC,wBAAA,IAAA;AAAM,wBAAA,IAAA;AAAM,wBAAA;AAAK,qBAAA,CAAA;oBACjDxB,IAAM,EAAA,SAAA;AACN,oBAAA,GAAGoB;AACP,iBAAA;AACA,gBAAA;AACJ;AACA,QAAA,KAAKhB,0BAA0BU,KAAK;AACpC,QAAA,KAAKV,0BAA0BY,IAAI;AAAE,YAAA;gBACjCK,iBAAoB,GAAA;oBAChBI,UAAY,EAAA,OAAA;AACZ,oBAAA,GAAGL;AACP,iBAAA;AACJ;AACJ;IAEA,OAAOC,iBAAAA;AACX;AAEO,SAASK,oCACZN,OAAwC,EAAA;IAExC,IAAIC,iBAAAA;AACJ,IAAA,OAAQD,QAAQT,IAAI;AAChB,QAAA,KAAKP,0BAA0BW,iBAAiB;AAChD,QAAA,KAAKX,0BAA0BS,OAAO;AACtC,QAAA,KAAKT,0BAA0Ba,QAAQ;AAAE,YAAA;gBACrCI,iBAAoB,GAAA;oBAChBrB,IAAM,EAAA,SAAA;AACN,oBAAA,GAAGoB;AACP,iBAAA;AACA,gBAAA;AACJ;AACA,QAAA,KAAKhB,0BAA0BU,KAAK;AACpC,QAAA,KAAKV,0BAA0BY,IAAI;AAAE,YAAA;gBACjCK,iBAAoB,GAAA;oBAChBI,UAAY,EAAA,OAAA;AACZ,oBAAA,GAAGL;AACP,iBAAA;AACJ;AACJ;IAEA,OAAOC,iBAAAA;AACX;;ACvDO,eAAeM,wBAAwBP,OAA4C,EAAA;AACtF,IAAA,MAAMC,oBAAoBF,uCAAwCC,CAAAA,OAAAA,CAAAA;AAClE,IAAA,OAAOQ,OAAOC,WAAW,CACrBR,mBACA,IACAX,EAAAA,kCAAAA,CAAmCW,kBAAkBV,IAAI,CAAA,CAAA;AAEjE;;ACnBA;;;;;AAKC,IAED,SAASmB,GAAAA,CACLC,IAAkC,EAClCzB,KAAa,EAAA;IAEb,OAAO,CAAC,WAAW,EAAEyB,IAAK,CAAA,OAAO,EAAEzB,KAAAA,CAAM,WAAW,EAAEyB,IAAK,CAAA,KAAK,CAAC;AACrE;AAEO,SAASC,iBAAiBC,MAAc,EAAA;AAC3C,IAAA,OAAOH,IAAI,aAAeG,EAAAA,MAAAA,CAAAA;AAC9B;AAEO,SAASC,gBAAgB5B,KAAa,EAAA;AACzC,IAAA,OAAOwB,IAAI,YAAcxB,EAAAA,KAAAA,CAAAA;AAC7B;AAEA;AAEA,SAAS6B,GAAAA,CACLJ,IAAkC,EAClCzB,KAAa,EAAA;IAEbA,KAAQA,GAAAA,KAAAA,CAAM8B,OAAO,CAAC,CAAC,WAAW,EAAEL,IAAAA,CAAK,OAAO,CAAC,EAAE,EAAA,CAAA;IAEnDzB,KAAQA,GAAAA,KAAAA,CAAM8B,OAAO,CAAC,CAAC,WAAW,EAAEL,IAAAA,CAAK,OAAO,CAAC,EAAE,EAAA,CAAA;IACnDzB,KAAQA,GAAAA,KAAAA,CAAM8B,OAAO,CAAC,CAAC,SAAS,EAAEL,IAAAA,CAAK,OAAO,CAAC,EAAE,EAAA,CAAA;IACjDzB,KAAQA,GAAAA,KAAAA,CAAM8B,OAAO,CAAC,CAAC,WAAW,EAAEL,IAAAA,CAAK,KAAK,CAAC,EAAE,EAAA,CAAA;IAEjD,OAAOzB,KAAAA;AACX;AAEO,SAAS+B,iBAAiB/B,KAAa,EAAA;AAC1C,IAAA,OAAO6B,IAAI,aAAe7B,EAAAA,KAAAA,CAAAA;AAC9B;AAEO,SAASgC,gBAAgBhC,KAAa,EAAA;AACzC,IAAA,OAAO6B,IAAI,YAAc7B,EAAAA,KAAAA,CAAAA;AAC7B;;AC3CA;;;;;IAOO,IAAKiC,kBAAAA,iBAAAA,SAAAA,kBAAAA,EAAAA;;;;;AAAAA,IAAAA,OAAAA,kBAAAA;AAKX,CAAA,CAAA,EAAA;;ACAM,SAASC,mCACZlC,KAAqC,EAAA;AAErC,IAAA,IAAIA,KAAMK,CAAAA,IAAI,KAAK4B,kBAAAA,CAAmBE,IAAI,EAAE;QACxC,OAAO;YACHzC,IAAM,EAAA,SAAA;AACN,YAAA,GAAGM;AACP,SAAA;AACJ;IAEA,OAAO;QACHoC,MAAQ,EAAA,GAAA;AACR/B,QAAAA,IAAAA,EAAML,MAAMK;AAChB,KAAA;AACJ;AAEO,SAASgC,mCACZrC,KAAqC,EAAA;AAErC,IAAA,IAAIA,KAAMK,CAAAA,IAAI,KAAK4B,kBAAAA,CAAmBE,IAAI,EAAE;QACxC,OAAO;YACHzC,IAAM,EAAA,SAAA;AACN,YAAA,GAAGM;AACP,SAAA;AACJ;IAEA,OAAOA,KAAAA;AACX;;AC9BO,SAASsC,qBAAqBtC,KAAa,EAAA;IAC9C,OAAQC,OAAOC,MAAM,CAAC+B,oBAAiC9B,OAAO,CAACH,WAAW,EAAC;AAC/E;;ACFO,SAASuC,kCAAkClC,IAAY,EAAA;AAC1D;;AAEC,QACD,IAAIA,IAAAA,KAAS4B,kBAAmBE,CAAAA,IAAI,EAAE;QAClC,OAAO;AACH,YAAA,MAAA;AACA,YAAA;AACH,SAAA;AACL;IAEA,IACI9B,IAAAA,KAAS4B,kBAAmBO,CAAAA,OAAO,IACnCnC,IAAAA,KAAS4B,kBAAmBQ,CAAAA,OAAO,IACnCpC,IAAAA,KAAS4B,kBAAmBS,CAAAA,OAAO,EACrC;QACE,OAAO;AACH,YAAA,SAAA;AACA,YAAA;AACH,SAAA;AACL;AAEA,IAAA,MAAM,IAAI9B,WAAAA,CAAY,CAAC,0DAA0D,EAAEP,IAAM,CAAA,CAAA,CAAA;AAC7F;;ACpBO,eAAesC,mBAAmB3C,KAAqC,EAAA;AAC1E,IAAA,MAAMe,oBAAoBmB,kCAAmClC,CAAAA,KAAAA,CAAAA;AAE7D,IAAA,OAAOsB,OAAOC,WAAW,CACrBR,mBACA,IACAwB,EAAAA,iCAAAA,CAAkCxB,kBAAkBV,IAAI,CAAA,CAAA;AAEhE;;ACVO,SAASuC,wBAAAA,CAAyBvC,IAAY,EAAEC,MAAkC,EAAA;AACrF,IAAA,IAAIP,sBAAsBM,IAAO,CAAA,EAAA;AAC7B,QAAA,OAAOD,mCAAmCC,IAAMC,EAAAA,MAAAA,CAAAA;AACpD;AAEA,IAAA,IAAIgC,qBAAqBjC,IAAO,CAAA,EAAA;AAC5B,QAAA,OAAOkC,iCAAkClC,CAAAA,IAAAA,CAAAA;AAC7C;AAEA,IAAA,MAAM,IAAIO,WAAAA,CAAY,CAAC,gDAAgD,EAAEP,IAAM,CAAA,CAAA,CAAA;AACnF;;ACDO,MAAMwC,kBAAAA,CAAAA;;AAST,IAAA,MAAMC,aAAsC,GAAA;AACxC,QAAA,IAAI,IAAI,CAACC,GAAG,CAACtB,IAAI,KAAK,SAAW,EAAA;AAC7B,YAAA,OAAOH,OAAO0B,SAAS,CAAC,OAAS,EAAA,IAAI,CAACD,GAAG,CAAA;AAC7C;AAEA,QAAA,IAAI,IAAI,CAACA,GAAG,CAACtB,IAAI,KAAK,QAAU,EAAA;AAC5B,YAAA,OAAOH,OAAO0B,SAAS,CAAC,MAAQ,EAAA,IAAI,CAACD,GAAG,CAAA;AAC5C;AAEA,QAAA,OAAOzB,OAAO0B,SAAS,CAAC,KAAO,EAAA,IAAI,CAACD,GAAG,CAAA;AAC3C;AAEA,IAAA,MAAME,YAAoC,GAAA;AACtC,QAAA,MAAMC,WAAc,GAAA,MAAM,IAAI,CAACJ,aAAa,EAAA;AAC5C,QAAA,OAAO,IAAI5B,UAAWgC,CAAAA,WAAAA,CAAAA;AAC1B;AAEA,IAAA,MAAMC,QAA6B,GAAA;AAC/B,QAAA,MAAMD,WAAc,GAAA,MAAM,IAAI,CAACJ,aAAa,EAAA;AAC5C,QAAA,OAAOM,mBAAoBF,CAAAA,WAAAA,CAAAA;AAC/B;AAEA,IAAA,MAAMG,KAAyB,GAAA;AAC3B,QAAA,MAAM1B,MAAS,GAAA,MAAM,IAAI,CAACwB,QAAQ,EAAA;AAElC,QAAA,IAAI,IAAI,CAACJ,GAAG,CAACtB,IAAI,KAAK,QAAU,EAAA;AAC5B,YAAA,OAAOG,eAAgBD,CAAAA,MAAAA,CAAAA;AAC3B;AAEA,QAAA,IAAI,IAAI,CAACoB,GAAG,CAACtB,IAAI,KAAK,SAAW,EAAA;AAC7B,YAAA,OAAOC,gBAAiBC,CAAAA,MAAAA,CAAAA;AAC5B;AAEA,QAAA,MAAM,IAAI2B,KAAM,CAAA,2CAAA,CAAA;AACpB;AAEA,IAAA,MAAMC,KAA8B,GAAA;AAChC,QAAA,OAAOjC,OAAO0B,SAAS,CAAC,KAAO,EAAA,IAAI,CAACD,GAAG,CAAA;AAC3C;;IAIA,aAAaS,OAAAA,CAAQC,GAAgD,EAA+B;QAChG,IAAIA,GAAAA,CAAInD,MAAM,KAAK,OAAS,EAAA;YACxB,OAAOuC,kBAAAA,CAAmBa,UAAU,CAAC;AAAE,gBAAA,GAAGD,GAAG;gBAAEV,GAAKhB,EAAAA,gBAAAA,CAAiB0B,IAAIV,GAAG;AAAE,aAAA,CAAA;AAClF;QACA,OAAOF,kBAAAA,CAAmBa,UAAU,CAAC;AAAE,YAAA,GAAGD,GAAG;YAAEV,GAAKf,EAAAA,eAAAA,CAAgByB,IAAIV,GAAG;AAAE,SAAA,CAAA;AACjF;IAEA,aAAaW,UAAAA,CACTD,GAAsC,EACV;QAC5B,MAAMP,WAAAA,GAAcS,mBAAoBF,CAAAA,GAAAA,CAAIV,GAAG,CAAA;QAE/C,OAAOF,kBAAAA,CAAmBe,eAAe,CAAC;AACtC,YAAA,GAAGH,GAAG;YACNV,GAAKG,EAAAA;AACT,SAAA,CAAA;AACJ;IAEA,aAAaU,eAAAA,CACTH,GAA2C,EACf;QAC5B,IAAII,iBAAAA;AACJ,QAAA,IAAIJ,IAAInD,MAAM,KAAK,UAAUmD,GAAInD,CAAAA,MAAM,KAAK,OAAS,EAAA;YACjDuD,iBAAoBzC,GAAAA,mCAAAA,CAAoCqC,IAAI3C,OAAO,CAAA;AACvE,SAAA,MAAO,IAAI2C,GAAAA,CAAInD,MAAM,KAAK,KAAO,EAAA;YAC7BuD,iBAAoBxB,GAAAA,kCAAAA,CAAmCoB,IAAI3C,OAAO,CAAA;SAC/D,MAAA;YACH,MAAM,IAAIF,YAAY,CAAC,OAAO,EAAE6C,GAAInD,CAAAA,MAAM,CAAC,kBAAkB,CAAC,CAAA;AAClE;AAEA,QAAA,MAAMwD,YAAY,MAAMxC,MAAAA,CAAOyC,SAAS,CACpCN,GAAAA,CAAInD,MAAM,EACVmD,GAAAA,CAAIV,GAAG,EACPc,mBACA,IACAjB,EAAAA,wBAAAA,CAAyBiB,kBAAkBxD,IAAI,EAAEoD,IAAInD,MAAM,CAAA,CAAA;AAG/D,QAAA,OAAO,IAAIuC,kBAAmBiB,CAAAA,SAAAA,CAAAA;AAClC;AAvFAE,IAAAA,WAAAA,CAAYF,SAAqB,CAAE;QAC/B,IAAI,CAACf,GAAG,GAAGe,SAAAA;AACf;AAsFJ;;ACpGA;;;;;;IAOO,SAASG,kBAAAA,CACZC,KAAa,EAAA;IAEb,MAAMC,KAAAA,GAAQD,KAAME,CAAAA,KAAK,CAAC,GAAA,CAAA;IAC1B,IAAID,KAAAA,CAAM/B,MAAM,KAAK,CAAG,EAAA;AACpB,QAAA,MAAMiC,SAASC,OAAO,EAAA;AAC1B;IAEA,MAAM,CAACC,aAAa,GAAGJ,KAAAA;IAEvB,IAAI;AACA,QAAA,MAAMK,UAAUC,IAAKF,CAAAA,YAAAA,CAAAA;QAErB,OAAOG,IAAAA,CAAKC,KAAK,CAACH,OAAAA,CAAAA;AAElB;;;;;;;;;;;;aAaJ,CAAE,OAAOI,CAAG,EAAA;QACR,MAAMP,QAAAA,CAASQ,aAAa,CAAC,0CAAA,CAAA;AACjC;AACJ;AAEA;;;;IAKO,SAASC,mBAAAA,CACZZ,KAAa,EAAA;IAEb,MAAMC,KAAAA,GAAQD,KAAME,CAAAA,KAAK,CAAC,GAAA,CAAA;IAC1B,IAAID,KAAAA,CAAM/B,MAAM,KAAK,CAAG,EAAA;AACpB,QAAA,MAAMiC,SAASC,OAAO,EAAA;AAC1B;IAEA,MAAM,GAAGS,cAAc,GAAGZ,KAAAA;IAE1B,IAAI;AACA,QAAA,MAAMK,UAAUC,IAAKM,CAAAA,aAAAA,CAAAA;QAErB,OAAOL,IAAAA,CAAKC,KAAK,CAACH,OAAAA,CAAAA;AACtB,KAAA,CAAE,OAAOI,CAAG,EAAA;QACR,MAAMP,QAAAA,CAASW,cAAc,CAAC,2CAAA,CAAA;AAClC;AACJ;;AC7DO,SAASC,uBAAuBL,CAAU,EAAA;AAC7C,IAAA,IAAIM,SAASN,CAAI,CAAA,EAAA;AACb,QAAA,IAAI,OAAOA,CAAAA,CAAEvE,IAAI,KAAK,QAAU,EAAA;AAC5B,YAAA,OAAQuE,EAAEvE,IAAI;gBACV,KAAK,mBAAA;AAAqB,oBAAA;AACtB,wBAAA,OAAOgE,SAASc,OAAO,EAAA;AAC3B;gBACA,KAAK,gBAAA;AAAkB,oBAAA;wBACnB,IAAI,OAAOP,EAAEQ,IAAI,KAAK,YAAYR,CAAEQ,CAAAA,IAAI,YAAYC,IAAM,EAAA;AACtD,4BAAA,OAAOhB,QAASiB,CAAAA,eAAe,CAACV,CAAAA,CAAEQ,IAAI,CAAA;AAC1C;AACA,wBAAA;AACJ;gBACA,KAAK,mBAAA;AAAqB,oBAAA;AACtB,wBAAA,IAAI,OAAOR,CAAAA,CAAEW,OAAO,KAAK,QAAU,EAAA;AAC/B,4BAAA,OAAOlB,QAASW,CAAAA,cAAc,CAACJ,CAAAA,CAAEW,OAAO,CAAA;AAC5C;AAEA,wBAAA;AACJ;AACJ;AACJ;;AAGA,QAAA,OAAQX,EAAEW,OAAO;YACb,KAAK,kBAAA;AAAoB,gBAAA;AACrB,oBAAA,OAAOlB,SAASc,OAAO,EAAA;AAC3B;YACA,KAAK,mBAAA;AAAqB,gBAAA;AACtB,oBAAA,OAAOd,SAASiB,eAAe,EAAA;AACnC;YACA,KAAK,cAAA;YACL,KAAK,kBAAA;AAAoB,gBAAA;AACrB,oBAAA,OAAOjB,SAASW,cAAc,EAAA;AAClC;AACJ;AACJ;AAEA,IAAA,OAAO,IAAIX,QAAS,CAAA;QAChBmB,KAAOZ,EAAAA,CAAAA;QACPa,UAAY,EAAA,IAAA;QACZF,OAAS,EAAA;AACb,KAAA,CAAA;AACJ;AAEO,SAASG,gCAAgCC,SAA4B,EAAA;IACxE,OAAQA,SAAAA;AACJ,QAAA,KAAKC,aAAaC,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOC,UAAUD,KAAK;AAC1B;AACA,QAAA,KAAKD,aAAaG,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOD,UAAUC,KAAK;AAC1B;AACA,QAAA,KAAKH,aAAaI,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOF,UAAUE,KAAK;AAC1B;AACA,QAAA,KAAKJ,aAAaK,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOH,UAAUG,KAAK;AAC1B;AACA,QAAA,KAAKL,aAAaM,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOJ,UAAUI,KAAK;AAC1B;AACA,QAAA,KAAKN,aAAaO,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOL,UAAUK,KAAK;AAC1B;AACA,QAAA,KAAKP,aAAaQ,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAON,UAAUM,KAAK;AAC1B;AACA,QAAA,KAAKR,aAAaS,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOP,UAAUO,KAAK;AAC1B;AACA,QAAA,KAAKT,aAAaU,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOR,UAAUQ,KAAK;AAC1B;AACA,QAAA,KAAKV,aAAaW,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOT,UAAUS,KAAK;AAC1B;AACA,QAAA,KAAKX,aAAaY,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOV,UAAUU,KAAK;AAC1B;AACJ;AAEA,IAAA,MAAM,IAAIlD,KAAM,CAAA,CAAC,cAAc,EAAEqC,SAAAA,CAAU,kBAAkB,CAAC,CAAA;AAClE;;AC/EA,MAAMc,eAAAA,GAAkB,IAAMC,IAAKC,CAAAA,KAAK,CAAC,IAAItB,IAAAA,EAAAA,CAAOuB,OAAO,EAAK,GAAA,IAAA,CAAA;AAEzD,eAAeC,SAAAA,CAAUC,MAAiB,EAAEC,OAAyB,EAAA;AACxE,IAAA,IAAI,OAAOD,MAAAA,CAAOE,GAAG,KAAK,QAAU,EAAA;QAChCF,MAAOE,CAAAA,GAAG,GAAGP,eAAoB,EAAA,GAAA,IAAA;AACrC;AACA,IAAA,IAAI,OAAOK,MAAAA,CAAOG,GAAG,KAAK,QAAU,EAAA;AAChCH,QAAAA,MAAAA,CAAOG,GAAG,GAAGR,eAAAA,EAAAA;AACjB;AAEA,IAAA,OAAQM,QAAQtF,IAAI;AAChB,QAAA,KAAKyF,QAAQC,GAAG;AAChB,QAAA,KAAKD,QAAQE,EAAE;AAAE,YAAA;gBACb,IAAIzB,SAAAA;gBAEJ,IAAI5C,GAAAA;AACJ,gBAAA,IAAI,OAAOgE,OAAAA,CAAQhE,GAAG,KAAK,QAAU,EAAA;oBACjCA,GAAMrB,GAAAA,gBAAAA,CAAiBqF,QAAQhE,GAAG,CAAA;iBAC/B,MAAA;AACH,oBAAA,MAAMsE,YAAe,GAAA,IAAIxE,kBAAmBkE,CAAAA,OAAAA,CAAQhE,GAAG,CAAA;oBACvDA,GAAM,GAAA,MAAMsE,aAAahE,KAAK,EAAA;AAClC;AAEA,gBAAA,IAAI0D,OAAQtF,CAAAA,IAAI,KAAKyF,OAAAA,CAAQC,GAAG,EAAE;oBAC9BxB,SAAYoB,GAAAA,OAAAA,CAAQpB,SAAS,GACzBD,+BAAAA,CAAgCqB,QAAQpB,SAAS,CAAA,GACjDG,UAAUG,KAAK;iBAChB,MAAA;oBACHN,SAAYoB,GAAAA,OAAAA,CAAQpB,SAAS,GACzBD,+BAAAA,CAAgCqB,QAAQpB,SAAS,CAAA,GACjDG,UAAUM,KAAK;AACvB;gBAEA,OAAOkB,IAAAA,CAAKR,QAAQ/D,GAAK,EAAA;AACrB4C,oBAAAA,SAAAA;AACA4B,oBAAAA,KAAAA,EAAOR,QAAQQ;AACnB,iBAAA,CAAA;AACJ;AACA,QAAA,KAAKL,QAAQM,GAAG;AAAE,YAAA;gBACd,MAAM7B,SAAAA,GAAwBoB,QAAQpB,SAAS,GAC3CD,gCAAgCqB,OAAQpB,CAAAA,SAAS,CACjDG,GAAAA,SAAAA,CAAUD,KAAK;gBAEnB,IAAI9C,GAAAA;AACJ,gBAAA,IAAI,OAAOgE,OAAAA,CAAQhE,GAAG,KAAK,QAAU,EAAA;AACjCA,oBAAAA,GAAAA,GAAMgE,QAAQhE,GAAG;iBACd,MAAA;AACH,oBAAA,MAAMsE,YAAe,GAAA,IAAIxE,kBAAmBkE,CAAAA,OAAAA,CAAQhE,GAAG,CAAA;oBACvDA,GAAM,GAAA,MAAMsE,aAAapE,YAAY,EAAA;AACzC;gBAEA,OAAOqE,IAAAA,CAAKR,QAAQ/D,GAAK,EAAA;AACrB4C,oBAAAA,SAAAA;AACA4B,oBAAAA,KAAAA,EAAOR,QAAQQ;AACnB,iBAAA,CAAA;AACJ;AACJ;AAEA,IAAA,MAAM,IAAIE,WAAAA,EAAAA;AACd;;AC3DA;;;;;;;AAOC,IACM,eAAeC,WAClBxD,CAAAA,KAAa,EACb6C,OAA2B,EAAA;IAE3B,IAAIY,OAAAA;IAEJ,IAAIC,MAAAA;IAEJ,IAAI;AACA,QAAA,OAAQb,QAAQtF,IAAI;AAChB,YAAA,KAAKyF,QAAQC,GAAG;AAChB,YAAA,KAAKD,QAAQE,EAAE;AAAE,gBAAA;oBACb,IAAIS,UAAAA;AAEJ,oBAAA,IAAId,OAAQtF,CAAAA,IAAI,KAAKyF,OAAAA,CAAQC,GAAG,EAAE;wBAC9BU,UAAad,GAAAA,OAAAA,CAAQc,UAAU,GAC3Bd,OAAQc,CAAAA,UAAU,CAACC,GAAG,CAAC,CAACnC,SAAcD,GAAAA,+BAAAA,CAAgCC,SACtE,CAAA,CAAA,GAAA;AACIG,4BAAAA,SAAAA,CAAUG,KAAK;AACfH,4BAAAA,SAAAA,CAAUI,KAAK;AACfJ,4BAAAA,SAAAA,CAAUK,KAAK;AACfL,4BAAAA,SAAAA,CAAUQ,KAAK;AACfR,4BAAAA,SAAAA,CAAUS,KAAK;AACfT,4BAAAA,SAAAA,CAAUU;AACb,yBAAA;qBACF,MAAA;wBACHqB,UAAad,GAAAA,OAAAA,CAAQc,UAAU,GAC3Bd,OAAQc,CAAAA,UAAU,CAACC,GAAG,CAAC,CAACnC,SAAcD,GAAAA,+BAAAA,CAAgCC,SACtE,CAAA,CAAA,GAAA;AACIG,4BAAAA,SAAAA,CAAUM,KAAK;AACfN,4BAAAA,SAAAA,CAAUO;AACb,yBAAA;AACT;oBAEA,IAAItD,GAAAA;AACJ,oBAAA,IAAI,OAAOgE,OAAAA,CAAQhE,GAAG,KAAK,QAAU,EAAA;wBACjCA,GAAMnB,GAAAA,eAAAA,CAAgBmF,QAAQhE,GAAG,CAAA;qBAC9B,MAAA;AACH,wBAAA,MAAMsE,YAAe,GAAA,IAAIxE,kBAAmBkE,CAAAA,OAAAA,CAAQhE,GAAG,CAAA;wBACvDA,GAAM,GAAA,MAAMsE,aAAahE,KAAK,EAAA;AAClC;oBAEAsE,OAAUI,GAAAA,MAAAA,CAAO7D,OAAOnB,GAAK,EAAA;AACzB8E,wBAAAA,UAAAA;wBACAG,WAAa,EAAA;AACjB,qBAAA,CAAA;AACA,oBAAA;AACJ;AACA,YAAA,KAAKd,QAAQM,GAAG;AAAE,gBAAA;AACd,oBAAA,MAAMK,UAA2Bd,GAAAA,OAAAA,CAAQc,UAAU,GAC/Cd,OAAQc,CAAAA,UAAU,CAACC,GAAG,CAAC,CAACnC,SAAcD,GAAAA,+BAAAA,CAAgCC,SACtE,CAAA,CAAA,GAAA;AACIG,wBAAAA,SAAAA,CAAUD,KAAK;AACfC,wBAAAA,SAAAA,CAAUC,KAAK;AACfD,wBAAAA,SAAAA,CAAUE;AACb,qBAAA;oBAEL,IAAIjD,GAAAA;AACJ,oBAAA,IAAI,OAAOgE,OAAAA,CAAQhE,GAAG,KAAK,QAAU,EAAA;AACjCA,wBAAAA,GAAAA,GAAMgE,QAAQhE,GAAG;qBACd,MAAA;AACH,wBAAA,MAAMsE,YAAe,GAAA,IAAIxE,kBAAmBkE,CAAAA,OAAAA,CAAQhE,GAAG,CAAA;wBACvDA,GAAM,GAAA,MAAMsE,aAAapE,YAAY,EAAA;AACzC;oBAEA0E,OAAUI,GAAAA,MAAAA,CAAO7D,OAAOnB,GAAK,EAAA;AACzB8E,wBAAAA,UAAAA;wBACAG,WAAa,EAAA;AACjB,qBAAA,CAAA;AACJ;AACJ;AAEAJ,QAAAA,MAAAA,GAAS,MAAMD,OAAAA;AACnB,KAAA,CAAE,OAAO/C,CAAG,EAAA;AACR,QAAA,MAAMK,sBAAuBL,CAAAA,CAAAA,CAAAA;AACjC;IAEA,IAAI,OAAOgD,WAAW,WAAa,EAAA;AAC/B,QAAA,MAAM,IAAIH,WAAY,CAAA;YAAElC,OAAS,EAAA;AAAgB,SAAA,CAAA;AACrD;IAEA,OAAOqC,MAAAA;AACX;;AC9FA,MAAMK,aAAWC,KAAc,CAAA;IAC3B7H,IAAM,EAAA;AACV,CAAA,CAAA;AAEO,SAAS8H,gBAAgBC,OAAwB,EAAA;AACpDH,IAAAA,UAAAA,CAASI,UAAU,CAACD,OAAAA,CAAAA;AACxB;AAEO,SAASE,mBAAAA,GAAAA;AACZ,IAAA,OAAOL,UAASM,CAAAA,GAAG,EAAMN,IAAAA,UAAAA,CAASO,UAAU,EAAA;AAChD;AAEO,SAASC,eAAezI,KAAa,EAAA;AACxCiI,IAAAA,UAAAA,CAASS,GAAG,CAAC1I,KAAAA,CAAAA;AACjB;AAEO,SAAS2I,cAAAA,GAAAA;AACZ,IAAA,OAAOV,WAASW,GAAG,EAAA;AACvB;;ACjBO,MAAMC,kBAAAA,CAAAA;IAaT,MAAMN,GAAAA,CAAIxF,GAAW,EAAqB;AACtC,QAAA,OAAO,IAAI,CAACkF,QAAQ,CAACM,GAAG,CAACxF,GAAAA,CAAAA;AAC7B;IAEA,MAAM+F,GAAAA,CAAI/F,GAAW,EAAkB;AACnC,QAAA,OAAO,IAAI,CAACkF,QAAQ,CAACa,GAAG,CAAC/F,GAAAA,CAAAA;AAC7B;AAEA,IAAA,MAAM2F,IAAI3F,GAAW,EAAExD,KAAY,EAAEuB,OAAwB,EAAiB;AAC1E,QAAA,IAAI,CAACmH,QAAQ,CAACS,GAAG,CAAC3F,KAAKxD,KAAO,EAAA;AAC1BwJ,YAAAA,GAAAA,EAAKjI,QAAQiI;AACjB,SAAA,CAAA;AACJ;IAEA,MAAMC,IAAAA,CAAKjG,GAAW,EAAiB;AACnC,QAAA,IAAI,CAACkF,QAAQ,CAACgB,MAAM,CAAClG,GAAAA,CAAAA;AACzB;IAEA,MAAMmG,QAAAA,CAASC,IAAc,EAAkB;AAC3C,QAAA,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,IAAID,IAAK/G,CAAAA,MAAM,EAAEgH,CAAK,EAAA,CAAA;AAClC,YAAA,IAAI,CAACnB,QAAQ,CAACgB,MAAM,CAACE,IAAI,CAACC,CAAE,CAAA,CAAA;AAChC;AACJ;AAEA,IAAA,MAAMC,KAAMvI,CAAAA,OAAAA,GAA6B,EAAE,EAAkB;QACzD,IAAIA,OAAAA,CAAQwI,MAAM,EAAE;AAChB,YAAA,MAAMH,IAAO,GAAA,IAAI,CAAClB,QAAQ,CAACkB,IAAI,EAAA;YAC/B,IAAII,QAAAA,GAAWJ,KAAKK,IAAI,EAAA;YACxB,MAAO,CAACD,QAASE,CAAAA,IAAI,CAAE;AACnB,gBAAA,IAAIF,SAAShK,KAAK,CAACmK,UAAU,CAAC5I,OAAAA,CAAQwI,MAAM,CAAG,EAAA;AAC3C,oBAAA,IAAI,CAACrB,QAAQ,CAACgB,MAAM,CAACM,SAAShK,KAAK,CAAA;AACvC;AAEAgK,gBAAAA,QAAAA,GAAWJ,KAAKK,IAAI,EAAA;AACxB;AAEA,YAAA;AACJ;QAEA,IAAI,CAACvB,QAAQ,CAACoB,KAAK,EAAA;AACvB;IAhDArF,WAAYlD,CAAAA,OAAAA,GAAkC,EAAE,CAAE;AAC9C,QAAA,IAAI,CAACmH,QAAQ,GAAG,IAAI0B,QAAwB,CAAA;YACxCC,aAAe,EAAA,IAAA;YACfb,GAAKc,EAAAA,QAAAA;YACL,GAAI/I,OAAAA,IAAW;AACnB,SAAA,CAAA;AACJ;AA2CJ;;ACrDO,MAAMgJ,iBAAAA,CAAAA;IAUT,MAAMhB,GAAAA,CAAI/F,GAAW,EAAgB;AACjC,QAAA,OAAO,IAAI,CAACkF,QAAQ,CAACa,GAAG,CAAC/F,GAAAA,CAAAA;AAC7B;IAEA,MAAMwF,GAAAA,CAAIxF,GAAW,EAAqB;AACtC,QAAA,MAAM6E,MAAS,GAAA,MAAM,IAAI,CAACkB,GAAG,CAAC/F,GAAAA,CAAAA;AAE9B,QAAA,OAAO,OAAO6E,MAAW,KAAA,WAAA;AAC7B;AAEA,IAAA,MAAMc,IAAI3F,GAAW,EAAExD,KAAU,EAAEuB,OAAwB,EAAiB;AACxE,QAAA,MAAM,IAAI,CAACmH,QAAQ,CAACS,GAAG,CAAC3F,KAAKxD,KAAO,EAAA;AAChCwK,YAAAA,YAAAA,EAAcjJ,QAAQiI;AAC1B,SAAA,CAAA;AACJ;IAEA,MAAMC,IAAAA,CAAKjG,GAAW,EAAiB;AACnC,QAAA,MAAM,IAAI,CAACkF,QAAQ,CAACe,IAAI,CAACjG,GAAAA,CAAAA;AAC7B;IAEA,MAAMmG,QAAAA,CAASC,IAAc,EAAkB;AAC3C,QAAA,MAAMa,QAAW,GAAA,IAAI,CAACC,MAAM,CAACD,QAAQ,EAAA;AAErC,QAAA,IAAK,IAAIZ,CAAI,GAAA,CAAA,EAAGA,IAAID,IAAK/G,CAAAA,MAAM,EAAEgH,CAAK,EAAA,CAAA;AAClCY,YAAAA,QAAAA,CAASE,GAAG,CAACf,IAAI,CAACC,CAAE,CAAA,CAAA;AACxB;AAEA,QAAA,MAAMY,SAASG,IAAI,EAAA;AACvB;AAEA,IAAA,MAAMd,KAAMvI,CAAAA,OAAAA,GAA6B,EAAE,EAAkB;QACzD,IAAIA,OAAAA,CAAQwI,MAAM,EAAE;AAChB,YAAA,MAAMU,QAAW,GAAA,IAAI,CAACC,MAAM,CAACD,QAAQ,EAAA;AAErC,YAAA,MAAMb,IAAO,GAAA,MAAM,IAAI,CAACc,MAAM,CAACd,IAAI,CAAC,CAAGrI,EAAAA,OAAAA,CAAQwI,MAAM,CAAC,CAAC,CAAC,CAAA;AACxD,YAAA,IAAK,IAAIF,CAAI,GAAA,CAAA,EAAGA,IAAID,IAAK/G,CAAAA,MAAM,EAAEgH,CAAK,EAAA,CAAA;AAClCY,gBAAAA,QAAAA,CAASE,GAAG,CAACf,IAAI,CAACC,CAAE,CAAA,CAAA;AACxB;AAEA,YAAA,MAAMY,SAASG,IAAI,EAAA;AAEnB,YAAA;AACJ;AACA,QAAA,MAAM,IAAI,CAACF,MAAM,CAACG,OAAO,EAAA;AAC7B;IAjDApG,WAAc,EAAA;QACV,IAAI,CAACiG,MAAM,GAAGtB,cAAAA,EAAAA;AACd,QAAA,IAAI,CAACV,QAAQ,GAAG,IAAIoC,WAAY,CAAA,IAAI,CAACJ,MAAM,CAAA;AAC/C;AA+CJ;;ACzDO,SAASK,kBAAAA,GAAAA;AACZ,IAAA,IAAIhC,mBAAuB,EAAA,EAAA;AACvB,QAAA,OAAO,IAAIwB,iBAAAA,EAAAA;AACf;AAEA,IAAA,OAAO,IAAIjB,kBAAAA,EAAAA;AACf;;ACPO,SAAS0B,cAAczJ,OAA6B,EAAA;AACvD,IAAA,OAAO0J,YAAkB1J,CAAAA,OAAAA,CAAAA;AAC7B;;ACZA;;;;;AAKC,IAKM,MAAM2J,KAAAA,CAAAA;IAOT,MAAM/B,GAAAA,CAAI3F,GAAW,EAAExD,KAAU,EAAEuB,OAA2B,GAAA,EAAE,EAAkB;AAC9E,QAAA,MAAM,IAAI,CAAC4J,OAAO,CAAChC,GAAG,CAAC3F,KAAKxD,KAAOuB,EAAAA,OAAAA,CAAAA;AACvC;IAEA,MAAMgI,GAAAA,CAAI/F,GAAW,EAA6B;AAC9C,QAAA,OAAO,IAAI,CAAC2H,OAAO,CAAC5B,GAAG,CAAC/F,GAAAA,CAAAA;AAC5B;IAEA,MAAMiG,IAAAA,CAAKjG,GAAW,EAAkB;AACpC,QAAA,OAAO,IAAI,CAAC2H,OAAO,CAAC1B,IAAI,CAACjG,GAAAA,CAAAA;AAC7B;IAEA,MAAMmG,QAAAA,CAASC,IAAc,EAAkB;AAC3C,QAAA,OAAO,IAAI,CAACuB,OAAO,CAACxB,QAAQ,CAACC,IAAAA,CAAAA;AACjC;AAEA,IAAA,MAAME,KAAMvI,CAAAA,OAAAA,GAA6B,EAAE,EAAkB;AACzD,QAAA,OAAO,IAAI,CAAC4J,OAAO,CAACrB,KAAK,CAACvI,OAAAA,CAAAA;AAC9B;AAtBAkD,IAAAA,WAAAA,CAAY0G,OAAqB,CAAE;QAC/B,IAAI,CAACA,OAAO,GAAGA,OAAAA;AACnB;AAqBJ;;ACvBA,MAAMzC,aAAWC,KAAa,CAAA;IAC1B7H,IAAM,EAAA,OAAA;IACN+H,OAAS,EAAA,IAAA;QACL,IAAIsC,OAAAA;AACJ,QAAA,IAAIpC,mBAAuB,EAAA,EAAA;AACvBoC,YAAAA,OAAAA,GAAU,IAAIZ,iBAAAA,EAAAA;SACX,MAAA;AACHY,YAAAA,OAAAA,GAAU,IAAI7B,kBAAAA,EAAAA;AAClB;AAEA,QAAA,OAAO,IAAI4B,KAAMC,CAAAA,OAAAA,CAAAA;AACrB;AACJ,CAAA,CAAA;AAEO,SAASC,QAAAA,GAAAA;AACZ,IAAA,OAAO1C,WAASW,GAAG,EAAA;AACvB;;ACdO,SAASgC,aAAa7D,OAA4B,EAAA;IACrD,IAAI8D,KAAAA;AAEJ,IAAA,MAAMC,GAAM/D,GAAAA,OAAAA,CAAQgE,SAAS,IAAIC,QAAQF,GAAG,EAAA;IAE5C,IAAI/D,OAAAA,CAAQkE,GAAG,KAAK,YAAc,EAAA;QAC9BJ,KAAQ,GAAA;YACJ,IAAIK,UAAAA,CAAWC,OAAO,CAAC;gBACnBC,KAAO,EAAA;AACX,aAAA,CAAA;YACA,IAAIF,UAAAA,CAAWG,IAAI,CAAC;gBAChBC,QAAUC,EAAAA,IAAAA,CAAKC,IAAI,CAACV,GAAK,EAAA,UAAA,CAAA;gBACzBM,KAAO,EAAA,MAAA;AACPK,gBAAAA,OAAAA,EAAS,KAAK,IAAO,GAAA,IAAA;gBACrBC,QAAU,EAAA;AACd,aAAA,CAAA;YACA,IAAIR,UAAAA,CAAWG,IAAI,CAAC;gBAChBC,QAAUC,EAAAA,IAAAA,CAAKC,IAAI,CAACV,GAAK,EAAA,WAAA,CAAA;gBACzBM,KAAO,EAAA,MAAA;AACPK,gBAAAA,OAAAA,EAAS,KAAK,IAAO,GAAA,IAAA;gBACrBC,QAAU,EAAA;AACd,aAAA;AACH,SAAA;KACE,MAAA;QACHb,KAAQ,GAAA;YACJ,IAAIK,UAAAA,CAAWC,OAAO,CAAC;gBACnBC,KAAO,EAAA;AACX,aAAA;AACH,SAAA;AACL;;AAGA,IAAA,OAAOO,cAAO,CAAA;AACVrL,QAAAA,MAAAA,EAAQA,MAAOsL,CAAAA,OAAO,CAClBtL,MAAAA,CAAOuL,MAAM,CAAC;YAAEC,KAAO,EAAA;AAAK,SAAA,CAAA,EAC5BxL,OAAOyL,SAAS,EAAA,EAChBzL,OAAO0L,QAAQ,EAAA,EACf1L,OAAO2L,MAAM,EAAA,CAAA;QAEjBf,UAAYL,EAAAA;AAChB,KAAA,CAAA;AACJ;;AC9CA,MAAM5C,aAAWC,KAAc,CAAA;IAC3B7H,IAAM,EAAA;AACV,CAAA,CAAA;AAEO,SAAS6L,iBAAiB9D,OAAwB,EAAA;AACrDH,IAAAA,UAAAA,CAASI,UAAU,CAACD,OAAAA,CAAAA;AACxB;AAEO,SAAS+D,cAAAA,GAAAA;AACZ,IAAA,OAAOlE,UAASM,CAAAA,GAAG,EAAMN,IAAAA,UAAAA,CAASO,UAAU,EAAA;AAChD;AAEO,SAAS4D,UAAUpM,KAAa,EAAA;AACnCiI,IAAAA,UAAAA,CAASS,GAAG,CAAC1I,KAAAA,CAAAA;AACjB;AAEO,SAASqM,SAAAA,GAAAA;AACZ,IAAA,OAAOpE,WAASW,GAAG,EAAA;AACvB;;ACjBA,MAAMX,WAAWC,KAAmB,CAAA;IAChC7H,IAAM,EAAA;AACV,CAAA,CAAA;AAEO,SAASiM,gBAAgBlE,OAA6B,EAAA;AACzDH,IAAAA,QAAAA,CAASI,UAAU,CAACD,OAAAA,CAAAA;AACxB;AAEO,SAASmE,mBAAAA,GAAAA;AACZ,IAAA,OAAOtE,QAASM,CAAAA,GAAG,EAAMN,IAAAA,QAAAA,CAASO,UAAU,EAAA;AAChD;AAEO,SAASgE,cAAAA,GAAAA;AACZ,IAAA,OAAOvE,SAASW,GAAG,EAAA;AACvB;;ACfO,SAAS6D,yBAA4BzM,KAAQ,EAAA;AAChD,IAAA,IAAIkF,WAASlF,KAAQ,CAAA,EAAA;QACjB,MAAMmJ,IAAAA,GAAOlJ,MAAOkJ,CAAAA,IAAI,CAACnJ,KAAAA,CAAAA;AACzB,QAAA,IAAK,IAAIoJ,CAAI,GAAA,CAAA,EAAGA,IAAID,IAAK/G,CAAAA,MAAM,EAAEgH,CAAK,EAAA,CAAA;AAClC,YAAA,MAAM7J,QAAQS,KAAK,CAACmJ,IAAI,CAACC,EAAE,CAAC;AAC5B,YAAA,IAAI7J,iBAAiB8F,IAAM,EAAA;AACvBrF,gBAAAA,KAAK,CAACmJ,IAAI,CAACC,EAAE,CAAC,GAAG7J,MAAMmN,WAAW,EAAA;AACtC;AACJ;AACJ;IAEA,OAAO1M,KAAAA;AACX;AAEO,SAAS2M,2BAAAA,CACZ3M,KAA6B,EAC7B4M,EAAoB,EAAA;IAEpB,IAAI,OAAO5M,UAAU,QAAU,EAAA;QAC3B,OAAOA,KAAAA;AACX;AAEA,IAAA,OAAOA,KAAM4M,CAAAA,EAAAA,CAAAA;AACjB;;ACtBO,MAAMC,yBAAAA,CAAAA;IAOT,MAAMC,OAAAA,CAAQrJ,GAA8B,EAAkB;AAC1D,QAAA,MAAMsJ,OAAOrI,IAAKsI,CAAAA,SAAS,CAACP,wBAAAA,CAAyBhJ,IAAIwJ,OAAO,CAAA,CAAA;AAEhE,QAAA,MAAMjD,QAAW,GAAA,IAAI,CAACkD,MAAM,CAAClD,QAAQ,EAAA;QACrC,IAAK,IAAIZ,IAAI,CAAGA,EAAAA,CAAAA,GAAI3F,IAAI0J,YAAY,CAAC/K,MAAM,EAAEgH,CAAK,EAAA,CAAA;AAC9C,YAAA,MAAM,EAAEgE,SAAS,EAAE,GAAG3J,GAAI0J,CAAAA,YAAY,CAAC/D,CAAE,CAAA;AACzC,YAAA,MAAMiE,YAAaD,SAAY,GAAA,CAAA,EAAGA,SAAU,CAAA,CAAC,CAAC,GAAG,EAAA;YAEjD,IAAIrK,GAAAA,GAAMsK,YAAYV,2BAA4BlJ,CAAAA,GAAAA,CAAI0J,YAAY,CAAC/D,CAAAA,CAAE,CAACkE,OAAO,CAAA;YAC7EtD,QAAS8C,CAAAA,OAAO,CAAC/J,GAAKgK,EAAAA,IAAAA,CAAAA;YAEtB,IAAI,OAAOtJ,IAAI0J,YAAY,CAAC/D,EAAE,CAACkE,OAAO,KAAK,UAAY,EAAA;AACnDvK,gBAAAA,GAAAA,GAAMsK,SAAYV,GAAAA,2BAAAA,CAA4BlJ,GAAI0J,CAAAA,YAAY,CAAC/D,CAAE,CAAA,CAACkE,OAAO,EAAE7J,GAAIwJ,CAAAA,OAAO,CAACF,IAAI,CAACH,EAAE,CAAA;gBAC9F5C,QAAS8C,CAAAA,OAAO,CAAC/J,GAAKgK,EAAAA,IAAAA,CAAAA;AAC1B;AACJ;AAEA,QAAA,MAAM/C,SAASG,IAAI,EAAA;AACvB;AAtBAnG,IAAAA,WAAAA,CAAYiG,MAAc,CAAE;QACxB,IAAI,CAACiD,MAAM,GAAGjD,MAAAA;AAClB;AAqBJ;;ACxBO,MAAMsD,0BAAAA,CAAAA;IAOT,MAAMT,OAAAA,CAAQrJ,GAA8B,EAAkB;AAC1DA,QAAAA,GAAAA,CAAIwJ,OAAO,GAAGR,wBAAyBhJ,CAAAA,GAAAA,CAAIwJ,OAAO,CAAA;QAElD,IAAK,IAAI7D,IAAI,CAAGA,EAAAA,CAAAA,GAAI3F,IAAI0J,YAAY,CAAC/K,MAAM,EAAEgH,CAAK,EAAA,CAAA;YAC9C,IAAIoE,OAAAA;AACJ,YAAA,IAAI/J,IAAI0J,YAAY,CAAC/D,CAAE,CAAA,CAACgE,SAAS,EAAE;gBAC/BI,OAAU,GAAA,IAAI,CAACN,MAAM,CAACO,EAAE,CAAChK,GAAAA,CAAI0J,YAAY,CAAC/D,CAAE,CAAA,CAACgE,SAAS,CAAA;aACnD,MAAA;gBACHI,OAAU,GAAA,IAAI,CAACN,MAAM;AACzB;AAEA,YAAA,IAAIQ,WAAWf,2BAA4BlJ,CAAAA,GAAAA,CAAI0J,YAAY,CAAC/D,CAAAA,CAAE,CAACkE,OAAO,CAAA;YAEtE,MAAMK,aAAAA,GAAgBC,kBAAmBnK,CAAAA,GAAAA,CAAIwJ,OAAO,CAACxL,IAAI,EAAEgC,GAAAA,CAAIwJ,OAAO,CAACY,KAAK,CAAA;AAE5EL,YAAAA,OAAAA,CACKM,EAAE,CAACJ,QACHK,CAAAA,CAAAA,IAAI,CAACJ,aAAe,EAAA;AACjB,gBAAA,GAAGlK,IAAIwJ,OAAO;gBACde,IAAM,EAAA;AACFN,oBAAAA;AACJ;AACJ,aAAA,CAAA;YAEJ,IAAI,OAAOjK,IAAI0J,YAAY,CAAC/D,EAAE,CAACkE,OAAO,KAAK,UAAY,EAAA;AACnDI,gBAAAA,QAAAA,GAAWf,2BAA4BlJ,CAAAA,GAAAA,CAAI0J,YAAY,CAAC/D,CAAE,CAAA,CAACkE,OAAO,EAAE7J,GAAIwJ,CAAAA,OAAO,CAACF,IAAI,CAACH,EAAE,CAAA;AAEvFY,gBAAAA,OAAAA,CACKM,EAAE,CAACJ,QACHK,CAAAA,CAAAA,IAAI,CAACJ,aAAe,EAAA;AACjB,oBAAA,GAAGlK,IAAIwJ,OAAO;oBACde,IAAM,EAAA;AACFN,wBAAAA,QAAAA;AACAO,wBAAAA,MAAAA,EAAQxK,GAAIwJ,CAAAA,OAAO,CAACF,IAAI,CAACH;AAC7B;AACJ,iBAAA,CAAA;AACR;AACJ;AACJ;AA1CA5I,IAAAA,WAAAA,CAAYiG,MAAc,CAAE;AACxB,QAAA,IAAI,CAACiD,MAAM,GAAG,IAAIgB,OAAQjE,CAAAA,MAAAA,CAAAA;AAC9B;AAyCJ;;AC9CO,MAAMkE,oBAAAA,CAAAA;IAcT,MAAMrB,OAAAA,CACFrJ,GAAiC,EACnB;AACd,QAAA,MAAM2K,UAAa,GAAA,IAAI,CAACA,UAAU,CAAClO,MAAM,EAAA;AACzC,QAAA,MAAO,IAAM,CAAA;YACT,MAAMmO,EAAAA,GAAKD,WAAW5E,IAAI,EAAA;YAC1B,IAAI6E,EAAAA,CAAG5E,IAAI,EAAE;AACT,gBAAA;AACJ;AAEA,YAAA,MAAM4E,EAAG9O,CAAAA,KAAK,CAACuN,OAAO,CAACrJ,GAAAA,CAAAA;AAC3B;AACJ;IAvBAO,WAAc,EAAA;QACV,IAAI,CAACoK,UAAU,GAAG,IAAIE,GAAAA,EAAAA;AAEtB,QAAA,IAAIhG,mBAAuB,EAAA,EAAA;AACvB,YAAA,MAAM2B,MAAStB,GAAAA,cAAAA,EAAAA;AAEf,YAAA,IAAI,CAACyF,UAAU,CAACG,GAAG,CAAC,IAAI1B,yBAA0B5C,CAAAA,MAAAA,CAAAA,CAAAA;AAClD,YAAA,IAAI,CAACmE,UAAU,CAACG,GAAG,CAAC,IAAIhB,0BAA2BtD,CAAAA,MAAAA,CAAAA,CAAAA;AACvD;AACJ;AAeJ;;ACxCA;;;;;AAKC,IAEM,SAASuE,cACZC,CAAAA,GAAM,EACNC,IAAO,EAAA;AAEP,IAAA,OAAOzO,OAAO0O,SAAS,CAACH,cAAc,CAACI,IAAI,CAACH,GAAKC,EAAAA,IAAAA,CAAAA;AACrD;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/crypto/hash/compare.ts","../src/crypto/hash/hash.ts","../src/crypto/key-asymmetric/constants.ts","../src/crypto/key-asymmetric/check.ts","../src/crypto/key-asymmetric/key-usages.ts","../src/crypto/key-asymmetric/normalize.ts","../src/crypto/key-asymmetric/create.ts","../src/crypto/key-asymmetric/helpers/wrap.ts","../src/crypto/key-symmetric/constants.ts","../src/crypto/key-symmetric/normalize.ts","../src/crypto/key-symmetric/check.ts","../src/crypto/key-symmetric/key-usages.ts","../src/crypto/key-symmetric/create.ts","../src/crypto/key/key-usages.ts","../src/crypto/key/container.ts","../src/crypto/json-web-token/extract.ts","../src/crypto/json-web-token/utils.ts","../src/crypto/json-web-token/sign/module.ts","../src/crypto/json-web-token/verify/module.ts","../src/services/redis/singleton.ts","../src/services/cache/adapters/memory.ts","../src/services/cache/adapters/redis.ts","../src/services/cache/adapters/factory.ts","../src/services/cache/helper.ts","../src/services/cache/module.ts","../src/services/cache/singleton.ts","../src/services/logger/module.ts","../src/services/logger/singleton.ts","../src/services/vault/singleton.ts","../src/domain-event/utils.ts","../src/domain-event/redis/module.ts","../src/domain-event/socket/module.ts","../src/domain-event/module.ts","../src/utils/has-property.ts"],"sourcesContent":["/*\n * Copyright (c) 2022-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 { compare as compareMethod } from '@node-rs/bcrypt';\n\nexport async function compare(value: string, hashedValue: string) : Promise<boolean> {\n return compareMethod(value, hashedValue);\n}\n","/*\n * Copyright (c) 2022-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 { hash as hashMethod } from '@node-rs/bcrypt';\n\nexport async function hash(str: string, rounds: number = 10) : Promise<string> {\n return hashMethod(str, rounds);\n}\n","/*\n * Copyright (c) 2022-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\nexport enum CryptoAsymmetricAlgorithm {\n RSA_PSS = 'RSA-PSS',\n RSASSA_PKCS1_V1_5 = 'RSASSA-PKCS1-v1_5',\n RSA_OAEP = 'RSA-OAEP',\n ECDSA = 'ECDSA',\n ECDH = 'ECDH',\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 { CryptoAsymmetricAlgorithm } from './constants';\n\nexport function isAsymmetricAlgorithm(input: string) : input is CryptoAsymmetricAlgorithm {\n return (Object.values(CryptoAsymmetricAlgorithm) as string[]).indexOf(input) !== -1;\n}\n","/*\n * Copyright (c) 2024-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 { CryptoAsymmetricAlgorithm } from './constants';\n\n/**\n * @see https://nodejs.org/api/webcrypto.html#cryptokeyusages\n */\nexport function getKeyUsagesForAsymmetricAlgorithm(\n name: string,\n format?: Exclude<KeyFormat, 'jwk'>,\n) : KeyUsage[] {\n if (\n name === CryptoAsymmetricAlgorithm.RSA_PSS ||\n name === CryptoAsymmetricAlgorithm.ECDSA ||\n name === CryptoAsymmetricAlgorithm.RSASSA_PKCS1_V1_5\n ) {\n if (format === 'spki') {\n return ['verify'];\n } if (format === 'pkcs8') {\n return ['sign'];\n }\n\n return ['sign', 'verify'];\n }\n\n if (name === CryptoAsymmetricAlgorithm.ECDH) {\n if (format === 'spki') {\n return [];\n }\n\n return [\n 'deriveKey',\n 'deriveBits',\n ];\n }\n\n if (name === CryptoAsymmetricAlgorithm.RSA_OAEP) {\n if (format === 'spki') {\n return ['encrypt'];\n } if (format === 'pkcs8') {\n return ['decrypt'];\n }\n\n return ['encrypt', 'decrypt'];\n }\n\n throw new SyntaxError(`Key usages can not be determined for asymmetric algorithm: ${name}`);\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 { CryptoAsymmetricAlgorithm } from './constants';\nimport type {\n AsymmetricKeyImportOptionsInput,\n AsymmetricKeyPairCreateOptions,\n AsymmetricKeyPairCreateOptionsInput,\n AsymmetricKeyPairImportOptions,\n} from './types';\n\nexport function normalizeAsymmetricKeyPairCreateOptions(\n options: AsymmetricKeyPairCreateOptionsInput,\n) : AsymmetricKeyPairCreateOptions {\n let optionsNormalized : AsymmetricKeyPairCreateOptions;\n switch (options.name) {\n case CryptoAsymmetricAlgorithm.RSASSA_PKCS1_V1_5:\n case CryptoAsymmetricAlgorithm.RSA_PSS:\n case CryptoAsymmetricAlgorithm.RSA_OAEP: {\n optionsNormalized = {\n modulusLength: 2048,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n hash: 'SHA-256',\n ...options,\n };\n break;\n }\n case CryptoAsymmetricAlgorithm.ECDSA:\n case CryptoAsymmetricAlgorithm.ECDH: {\n optionsNormalized = {\n namedCurve: 'P-256',\n ...options,\n };\n }\n }\n\n return optionsNormalized;\n}\n\nexport function normalizeAsymmetricKeyImportOptions(\n options: AsymmetricKeyImportOptionsInput,\n) : AsymmetricKeyPairImportOptions {\n let optionsNormalized : AsymmetricKeyPairImportOptions;\n switch (options.name) {\n case CryptoAsymmetricAlgorithm.RSASSA_PKCS1_V1_5:\n case CryptoAsymmetricAlgorithm.RSA_PSS:\n case CryptoAsymmetricAlgorithm.RSA_OAEP: {\n optionsNormalized = {\n hash: 'SHA-256',\n ...options,\n };\n break;\n }\n case CryptoAsymmetricAlgorithm.ECDSA:\n case CryptoAsymmetricAlgorithm.ECDH: {\n optionsNormalized = {\n namedCurve: 'P-256',\n ...options,\n };\n }\n }\n\n return optionsNormalized;\n}\n","/*\n * Copyright (c) 2022-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 { subtle } from 'uncrypto';\nimport { getKeyUsagesForAsymmetricAlgorithm } from './key-usages';\nimport { normalizeAsymmetricKeyPairCreateOptions } from './normalize';\nimport type { AsymmetricKeyPairCreateOptionsInput } from './types';\n\nexport async function createAsymmetricKeyPair(options: AsymmetricKeyPairCreateOptionsInput) : Promise<CryptoKeyPair> {\n const optionsNormalized = normalizeAsymmetricKeyPairCreateOptions(options);\n return subtle.generateKey(\n optionsNormalized,\n true,\n getKeyUsagesForAsymmetricAlgorithm(optionsNormalized.name),\n );\n}\n","/*\n * Copyright (c) 2024-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\nfunction enc(\n type: 'PRIVATE KEY' | 'PUBLIC KEY',\n input: string,\n) {\n return `-----BEGIN ${type}-----\\n${input}\\n-----END ${type}-----`;\n}\n\nexport function encodePKCS8ToPEM(base64: string) {\n return enc('PRIVATE KEY', base64);\n}\n\nexport function encodeSPKIToPem(input: string) {\n return enc('PUBLIC KEY', input);\n}\n\n// ------------------------------------------------------------\n\nfunction dec(\n type: 'PRIVATE KEY' | 'PUBLIC KEY',\n input: string,\n) {\n input = input.replace(`-----BEGIN ${type}-----\\n`, '');\n\n input = input.replace(`\\n-----END ${type}-----\\n`, '');\n input = input.replace(`-----END ${type}-----\\n`, '');\n input = input.replace(`\\n-----END ${type}-----`, '');\n\n return input;\n}\n\nexport function decodePemToPKCS8(input: string) {\n return dec('PRIVATE KEY', input);\n}\n\nexport function decodePemToSpki(input: string) {\n return dec('PUBLIC KEY', input);\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\nexport enum SymmetricAlgorithm {\n HMAC = 'HMAC',\n AES_CTR = 'AES-CTR',\n AES_CBC = 'AES-CBC',\n AES_GCM = 'AES-GCM',\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 { SymmetricAlgorithm } from './constants';\nimport type {\n SymmetricKeyCreateOptions, SymmetricKeyCreateOptionsInput, SymmetricKeyImportOptions, SymmetricKeyImportOptionsInput,\n} from './types';\n\nexport function normalizeSymmetricKeyCreateOptions(\n input: SymmetricKeyCreateOptionsInput,\n) : SymmetricKeyCreateOptions {\n if (input.name === SymmetricAlgorithm.HMAC) {\n return {\n hash: 'SHA-256',\n ...input,\n };\n }\n\n return {\n length: 256,\n name: input.name,\n };\n}\n\nexport function normalizeSymmetricKeyImportOptions(\n input: SymmetricKeyImportOptionsInput,\n) : SymmetricKeyImportOptions {\n if (input.name === SymmetricAlgorithm.HMAC) {\n return {\n hash: 'SHA-256',\n ...input,\n };\n }\n\n return input;\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 { SymmetricAlgorithm } from './constants';\n\nexport function isSymmetricAlgorithm(input: string) : input is SymmetricAlgorithm {\n return (Object.values(SymmetricAlgorithm) as string[]).indexOf(input) !== -1;\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 { SymmetricAlgorithm } from './constants';\n\nexport function getKeyUsagesForSymmetricAlgorithm(name: string) : KeyUsage[] | undefined {\n /**\n * @see https://nodejs.org/api/webcrypto.html#cryptokeyusages\n */\n if (name === SymmetricAlgorithm.HMAC) {\n return [\n 'sign',\n 'verify',\n ];\n }\n\n if (\n name === SymmetricAlgorithm.AES_CBC ||\n name === SymmetricAlgorithm.AES_GCM ||\n name === SymmetricAlgorithm.AES_CTR\n ) {\n return [\n 'encrypt',\n 'decrypt',\n ];\n }\n\n throw new SyntaxError(`Key usages can not be determined for symmetric algorithm: ${name}`);\n}\n","/*\n * Copyright (c) 2022-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 { subtle } from 'uncrypto';\nimport { getKeyUsagesForSymmetricAlgorithm } from './key-usages';\nimport { normalizeSymmetricKeyCreateOptions } from './normalize';\nimport type { SymmetricKeyCreateOptionsInput } from './types';\n\nexport async function createSymmetricKey(input: SymmetricKeyCreateOptionsInput) : Promise<CryptoKey> {\n const optionsNormalized = normalizeSymmetricKeyCreateOptions(input);\n\n return subtle.generateKey(\n optionsNormalized,\n true,\n getKeyUsagesForSymmetricAlgorithm(optionsNormalized.name),\n );\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 { getKeyUsagesForAsymmetricAlgorithm, isAsymmetricAlgorithm } from '../key-asymmetric';\nimport { getKeyUsagesForSymmetricAlgorithm, isSymmetricAlgorithm } from '../key-symmetric';\n\nexport function getKeyUsagesForAlgorithm(name: string, format?: Exclude<KeyFormat, 'jwk'>) : KeyUsage[] {\n if (isAsymmetricAlgorithm(name)) {\n return getKeyUsagesForAsymmetricAlgorithm(name, format);\n }\n\n if (isSymmetricAlgorithm(name)) {\n return getKeyUsagesForSymmetricAlgorithm(name);\n }\n\n throw new SyntaxError(`Key usages can not be determined for algorithm: ${name}`);\n}\n","/*\n * Copyright (c) 2024-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 { subtle } from 'uncrypto';\nimport { arrayBufferToBase64, base64ToArrayBuffer } from '@authup/kit';\nimport type { AsymmetricKeyPairImportOptions } from '../key-asymmetric';\nimport {\n decodePemToPKCS8,\n decodePemToSpki, encodePKCS8ToPEM, encodeSPKIToPem, normalizeAsymmetricKeyImportOptions,\n} from '../key-asymmetric';\nimport type { SymmetricKeyImportOptions } from '../key-symmetric';\nimport { normalizeSymmetricKeyImportOptions } from '../key-symmetric/normalize';\nimport { getKeyUsagesForAlgorithm } from './key-usages';\nimport type { KeyContainerAsymmetricImportOptions, KeyContainerImportOptions } from './types';\n\nexport class CryptoKeyContainer {\n protected key : CryptoKey;\n\n constructor(cryptoKey : CryptoKey) {\n this.key = cryptoKey;\n }\n\n // ----------------------------------------------\n\n async toArrayBuffer(): Promise<ArrayBuffer> {\n if (this.key.type === 'private') {\n return subtle.exportKey('pkcs8', this.key);\n }\n\n if (this.key.type === 'public') {\n return subtle.exportKey('spki', this.key);\n }\n\n return subtle.exportKey('raw', this.key);\n }\n\n async toUint8Array(): Promise<Uint8Array> {\n const arrayBuffer = await this.toArrayBuffer();\n return new Uint8Array(arrayBuffer);\n }\n\n async toBase64() : Promise<string> {\n const arrayBuffer = await this.toArrayBuffer();\n return arrayBufferToBase64(arrayBuffer);\n }\n\n async toPem(): Promise<string> {\n const base64 = await this.toBase64();\n\n if (this.key.type === 'public') {\n return encodeSPKIToPem(base64);\n }\n\n if (this.key.type === 'private') {\n return encodePKCS8ToPEM(base64);\n }\n\n throw new Error('A symmetric key can not be encoded as PEM');\n }\n\n async toJWK() : Promise<JsonWebKey> {\n return subtle.exportKey('jwk', this.key);\n }\n\n // ----------------------------------------------\n\n static async fromPem(ctx: KeyContainerAsymmetricImportOptions<string>): Promise<CryptoKeyContainer> {\n if (ctx.format === 'pkcs8') {\n return CryptoKeyContainer.fromBase64({ ...ctx, key: decodePemToPKCS8(ctx.key) });\n }\n return CryptoKeyContainer.fromBase64({ ...ctx, key: decodePemToSpki(ctx.key) });\n }\n\n static async fromBase64(\n ctx: KeyContainerImportOptions<string>,\n ) : Promise<CryptoKeyContainer> {\n const arrayBuffer = base64ToArrayBuffer(ctx.key);\n\n return CryptoKeyContainer.fromArrayBuffer({\n ...ctx,\n key: arrayBuffer,\n });\n }\n\n static async fromArrayBuffer(\n ctx: KeyContainerImportOptions<ArrayBuffer>,\n ) : Promise<CryptoKeyContainer> {\n let normalizedOptions : AsymmetricKeyPairImportOptions | SymmetricKeyImportOptions;\n if (ctx.format === 'spki' || ctx.format === 'pkcs8') {\n normalizedOptions = normalizeAsymmetricKeyImportOptions(ctx.options);\n } else if (ctx.format === 'raw') {\n normalizedOptions = normalizeSymmetricKeyImportOptions(ctx.options);\n } else {\n throw new SyntaxError(`Format ${ctx.format} is not supported.`);\n }\n\n const cryptoKey = await subtle.importKey(\n ctx.format,\n ctx.key,\n normalizedOptions,\n true,\n getKeyUsagesForAlgorithm(normalizedOptions.name, ctx.format),\n );\n\n return new CryptoKeyContainer(cryptoKey);\n }\n}\n","/*\n * Copyright (c) 2022-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 type { JWTClaims, JWTHeader } from '@authup/specs';\nimport { JWTError } from '@authup/specs';\n\n/**\n * Decode a JWT token with no verification.\n *\n * @param token\n *\n * @throws JWTError\n */\nexport function extractTokenHeader(\n token: string,\n) : JWTHeader {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw JWTError.invalid();\n }\n\n const [headerBase64] = parts;\n\n try {\n const payload = atob(headerBase64);\n\n return JSON.parse(payload);\n\n /*\n return {\n typ: 'JWT',\n alg: transformInternalToJWTAlgorithm(header.algorithm),\n cty: header.contentType,\n jku: header.jsonKeyUrl,\n kid: header.keyId,\n x5u: header.x5Url,\n x5c: header.x5CertChain,\n x5t: header.x5CertThumbprint,\n 'x5t#S256': header.x5TS256CertThumbprint,\n };\n */\n } catch (e) {\n throw JWTError.headerInvalid('The token header could not be extracted.');\n }\n}\n\n/**\n * @param token\n *\n * @throws JWTError\n */\nexport function extractTokenPayload(\n token: string,\n) : JWTClaims {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw JWTError.invalid();\n }\n\n const [, payloadBase64] = parts;\n\n try {\n const payload = atob(payloadBase64);\n\n return JSON.parse(payload);\n } catch (e) {\n throw JWTError.payloadInvalid('The token payload could not be extracted.');\n }\n}\n","/*\n * Copyright (c) 2022-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 { JWTAlgorithm, JWTError } from '@authup/specs';\nimport { Algorithm } from '@node-rs/jsonwebtoken';\nimport { isObject } from 'smob';\n\nexport function createErrorForJWTError(e: unknown) : JWTError {\n if (isObject(e)) {\n if (typeof e.name === 'string') {\n switch (e.name) {\n case 'TokenExpiredError': {\n return JWTError.expired();\n }\n case 'NotBeforeError': {\n if (typeof e.date === 'string' || e.date instanceof Date) {\n return JWTError.notActiveBefore(e.date);\n }\n break;\n }\n case 'JsonWebTokenError': {\n if (typeof e.message === 'string') {\n return JWTError.payloadInvalid(e.message);\n }\n\n break;\n }\n }\n }\n\n // @see https://github.com/Keats/jsonwebtoken/blob/master/src/errors.rs\n switch (e.message) {\n case 'ExpiredSignature': {\n return JWTError.expired();\n }\n case 'ImmatureSignature': {\n return JWTError.notActiveBefore();\n }\n case 'InvalidToken':\n case 'InvalidSignature': {\n return JWTError.payloadInvalid();\n }\n }\n }\n\n return new JWTError({\n cause: e as Error,\n logMessage: true,\n message: 'The JWT error could not be determined.',\n });\n}\n\nexport function transformJWTAlgorithmToInternal(algorithm: `${JWTAlgorithm}`) : Algorithm {\n switch (algorithm) {\n case JWTAlgorithm.HS256: {\n return Algorithm.HS256;\n }\n case JWTAlgorithm.HS384: {\n return Algorithm.HS384;\n }\n case JWTAlgorithm.HS512: {\n return Algorithm.HS512;\n }\n case JWTAlgorithm.RS256: {\n return Algorithm.RS256;\n }\n case JWTAlgorithm.RS384: {\n return Algorithm.RS384;\n }\n case JWTAlgorithm.RS512: {\n return Algorithm.RS512;\n }\n case JWTAlgorithm.ES256: {\n return Algorithm.ES256;\n }\n case JWTAlgorithm.ES384: {\n return Algorithm.ES384;\n }\n case JWTAlgorithm.PS256: {\n return Algorithm.PS256;\n }\n case JWTAlgorithm.PS384: {\n return Algorithm.PS384;\n }\n case JWTAlgorithm.PS512: {\n return Algorithm.PS512;\n }\n }\n\n throw new Error(`The algorithm ${algorithm} is not supported.`);\n}\n\nexport function transformInternalToJWTAlgorithm(input: Algorithm) : JWTAlgorithm {\n switch (input) {\n case Algorithm.HS256:\n return JWTAlgorithm.HS256;\n case Algorithm.HS384:\n return JWTAlgorithm.HS384;\n case Algorithm.HS512:\n return JWTAlgorithm.HS512;\n case Algorithm.RS256:\n return JWTAlgorithm.RS256;\n case Algorithm.RS384:\n return JWTAlgorithm.RS384;\n case Algorithm.RS512:\n return JWTAlgorithm.RS512;\n case Algorithm.ES256:\n return JWTAlgorithm.ES256;\n case Algorithm.ES384:\n return JWTAlgorithm.ES384;\n case Algorithm.PS256:\n return JWTAlgorithm.PS256;\n case Algorithm.PS384:\n return JWTAlgorithm.PS384;\n case Algorithm.PS512:\n return JWTAlgorithm.PS512;\n }\n\n throw new SyntaxError(`The algorithm ${input} is not supported.`);\n}\n","/*\n * Copyright (c) 2022-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 { JWKType, OAuth2Error } from '@authup/specs';\nimport type { JWTClaims } from '@authup/specs';\nimport { Algorithm, sign } from '@node-rs/jsonwebtoken';\nimport { encodePKCS8ToPEM } from '../../key-asymmetric';\nimport { CryptoKeyContainer } from '../../key';\nimport { transformJWTAlgorithmToInternal } from '../utils';\nimport type { TokenSignOptions } from './types';\n\nconst getUtcTimestamp = () => Math.floor(new Date().getTime() / 1000);\n\nexport async function signToken(claims: JWTClaims, context: TokenSignOptions): Promise<string> {\n if (typeof claims.exp !== 'number') {\n claims.exp = getUtcTimestamp() + 3600;\n }\n if (typeof claims.iat !== 'number') {\n claims.iat = getUtcTimestamp();\n }\n\n switch (context.type) {\n case JWKType.RSA:\n case JWKType.EC: {\n let algorithm : Algorithm;\n\n let key : string;\n if (typeof context.key === 'string') {\n key = encodePKCS8ToPEM(context.key);\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toPem();\n }\n\n if (context.type === JWKType.RSA) {\n algorithm = context.algorithm ?\n transformJWTAlgorithmToInternal(context.algorithm) :\n Algorithm.RS256;\n } else {\n algorithm = context.algorithm ?\n transformJWTAlgorithmToInternal(context.algorithm) :\n Algorithm.ES256;\n }\n\n return sign(claims, key, {\n algorithm,\n keyId: context.keyId,\n });\n }\n case JWKType.OCT: {\n const algorithm : Algorithm = context.algorithm ?\n transformJWTAlgorithmToInternal(context.algorithm) :\n Algorithm.HS256;\n\n let key : string | Uint8Array;\n if (typeof context.key === 'string') {\n key = context.key;\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toUint8Array();\n }\n\n return sign(claims, key, {\n algorithm,\n keyId: context.keyId,\n });\n }\n }\n\n throw new OAuth2Error();\n}\n","/*\n * Copyright (c) 2022-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 { JWKType, OAuth2Error } from '@authup/specs';\nimport type { JWTClaims, OAuth2TokenPayload } from '@authup/specs';\nimport { Algorithm, verify } from '@node-rs/jsonwebtoken';\nimport { encodeSPKIToPem } from '../../key-asymmetric';\nimport { CryptoKeyContainer } from '../../key';\nimport { createErrorForJWTError, transformJWTAlgorithmToInternal } from '../utils';\nimport type { TokenVerifyOptions } from './types';\n\n/**\n * Verify JWT.\n *\n * @param token\n * @param context\n *\n * @throws OAuth2Error\n */\nexport async function verifyToken(\n token: string,\n context: TokenVerifyOptions,\n) : Promise<OAuth2TokenPayload> {\n let promise : Promise<JWTClaims>;\n\n let output : JWTClaims;\n\n try {\n switch (context.type) {\n case JWKType.RSA:\n case JWKType.EC: {\n let algorithms : Algorithm[];\n\n if (context.type === JWKType.RSA) {\n algorithms = context.algorithms ?\n context.algorithms.map((algorithm) => transformJWTAlgorithmToInternal(algorithm)) :\n [\n Algorithm.RS256,\n Algorithm.RS384,\n Algorithm.RS512,\n Algorithm.PS256,\n Algorithm.PS384,\n Algorithm.PS512,\n ];\n } else {\n algorithms = context.algorithms ?\n context.algorithms.map((algorithm) => transformJWTAlgorithmToInternal(algorithm)) :\n [\n Algorithm.ES256,\n Algorithm.ES384,\n ];\n }\n\n let key : string;\n if (typeof context.key === 'string') {\n key = encodeSPKIToPem(context.key);\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toPem();\n }\n\n promise = verify(token, key, {\n algorithms,\n validateNbf: true,\n });\n break;\n }\n case JWKType.OCT: {\n const algorithms : Algorithm[] = context.algorithms ?\n context.algorithms.map((algorithm) => transformJWTAlgorithmToInternal(algorithm)) :\n [\n Algorithm.HS256,\n Algorithm.HS384,\n Algorithm.HS512,\n ];\n\n let key : string | Uint8Array;\n if (typeof context.key === 'string') {\n key = context.key;\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toUint8Array();\n }\n\n promise = verify(token, key, {\n algorithms,\n validateNbf: true,\n });\n }\n }\n\n output = await promise;\n } catch (e) {\n throw createErrorForJWTError(e);\n }\n\n if (typeof output === 'undefined') {\n throw new OAuth2Error({ message: 'Invalid type.' });\n }\n\n return output as OAuth2TokenPayload;\n}\n","/*\n * Copyright (c) 2024-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 type { Client } from 'redis-extension';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<Client>({\n name: 'redis',\n});\n\nexport function setRedisFactory(factory: Factory<Client>) {\n instance.setFactory(factory);\n}\n\nexport function isRedisClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setRedisClient(input: Client) {\n instance.set(input);\n}\n\nexport function useRedisClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024-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 type { Options } from '@isaacs/ttlcache';\nimport TTLCache from '@isaacs/ttlcache';\nimport type { CacheClearOptions, CacheSetOptions } from '../types';\nimport type { CacheAdapter } from './types';\n\nexport class MemoryCacheAdapter<\n VALUE = any,\n> implements CacheAdapter {\n protected instance : TTLCache<string, VALUE>;\n\n constructor(options: Options<string, VALUE> = {}) {\n this.instance = new TTLCache<string, VALUE>({\n checkAgeOnGet: true,\n ttl: Infinity,\n ...(options || {}),\n });\n }\n\n async has(key: string) : Promise<boolean> {\n return this.instance.has(key);\n }\n\n async get(key: string): Promise<VALUE> {\n return this.instance.get(key);\n }\n\n async set(key: string, value: VALUE, options: CacheSetOptions): Promise<void> {\n this.instance.set(key, value, {\n ttl: options.ttl,\n });\n }\n\n async drop(key: string): Promise<void> {\n this.instance.delete(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n for (let i = 0; i < keys.length; i++) {\n this.instance.delete(keys[i]);\n }\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n if (options.prefix) {\n const keys = this.instance.keys();\n let iterator = keys.next();\n while (!iterator.done) {\n if (iterator.value.startsWith(options.prefix)) {\n this.instance.delete(iterator.value);\n }\n\n iterator = keys.next();\n }\n\n return;\n }\n\n this.instance.clear();\n }\n}\n","/*\n * Copyright (c) 2024-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 type { Client } from 'redis-extension';\nimport { JsonAdapter } from 'redis-extension';\nimport { useRedisClient } from '../../redis';\nimport type { CacheClearOptions, CacheSetOptions } from '../types';\nimport type { CacheAdapter } from './types';\n\nexport class RedisCacheAdapter implements CacheAdapter {\n protected client : Client;\n\n protected instance : JsonAdapter;\n\n constructor() {\n this.client = useRedisClient();\n this.instance = new JsonAdapter(this.client);\n }\n\n async get(key: string): Promise<any> {\n return this.instance.get(key);\n }\n\n async has(key: string) : Promise<boolean> {\n const output = await this.get(key);\n\n return typeof output !== 'undefined';\n }\n\n async set(key: string, value: any, options: CacheSetOptions): Promise<void> {\n await this.instance.set(key, value, {\n milliseconds: options.ttl,\n });\n }\n\n async drop(key: string): Promise<void> {\n await this.instance.drop(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n const pipeline = this.client.pipeline();\n\n for (let i = 0; i < keys.length; i++) {\n pipeline.del(keys[i]);\n }\n\n await pipeline.exec();\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n if (options.prefix) {\n const pipeline = this.client.pipeline();\n\n const keys = await this.client.keys(`${options.prefix}*`);\n for (let i = 0; i < keys.length; i++) {\n pipeline.del(keys[i]);\n }\n\n await pipeline.exec();\n\n return;\n }\n await this.client.flushdb();\n }\n}\n","/*\n * Copyright (c) 2024-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 { isRedisClientUsable } from '../../redis';\nimport { MemoryCacheAdapter } from './memory';\nimport { RedisCacheAdapter } from './redis';\n\nexport function createCacheAdapter() {\n if (isRedisClientUsable()) {\n return new RedisCacheAdapter();\n }\n\n return new MemoryCacheAdapter();\n}\n","/*\n * Copyright (c) 2024-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 { buildRedisKeyPath } from '../redis';\nimport type { CacheKeyBuildOptions } from './types';\n\nexport function buildCacheKey(options: CacheKeyBuildOptions) {\n return buildRedisKeyPath(options);\n}\n","/*\n * Copyright (c) 2024-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 type { CacheAdapter } from './adapters';\nimport type { CacheClearOptions, CacheSetOptions } from './types';\n\nexport class Cache {\n protected adapter : CacheAdapter;\n\n constructor(adapter: CacheAdapter) {\n this.adapter = adapter;\n }\n\n async set(key: string, value: any, options: CacheSetOptions = {}) : Promise<void> {\n await this.adapter.set(key, value, options);\n }\n\n async get(key: string) : Promise<any | undefined> {\n return this.adapter.get(key);\n }\n\n async drop(key: string) : Promise<void> {\n return this.adapter.drop(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n return this.adapter.dropMany(keys);\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n return this.adapter.clear(options);\n }\n}\n","/*\n * Copyright (c) 2024-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 { singa } from 'singa';\nimport { isRedisClientUsable } from '../redis';\nimport type { CacheAdapter } from './adapters';\nimport { MemoryCacheAdapter, RedisCacheAdapter } from './adapters';\nimport { Cache } from './module';\n\nconst instance = singa<Cache>({\n name: 'cache',\n factory: () => {\n let adapter : CacheAdapter;\n if (isRedisClientUsable()) {\n adapter = new RedisCacheAdapter();\n } else {\n adapter = new MemoryCacheAdapter();\n }\n\n return new Cache(adapter);\n },\n});\n\nexport function useCache() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2022-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 path from 'node:path';\nimport process from 'node:process';\nimport type { LoggerOptions } from 'winston';\nimport {\n createLogger as create, format, transports,\n} from 'winston';\nimport type { Logger, LoggerCreateContext } from './types';\n\nexport function createLogger(context: LoggerCreateContext) : Logger {\n let items : LoggerOptions['transports'];\n\n const cwd = context.directory || process.cwd();\n\n if (context.env === 'production') {\n items = [\n new transports.Console({\n level: 'info',\n }),\n new transports.File({\n filename: path.join(cwd, 'http.log'),\n level: 'http',\n maxsize: 10 * 1024 * 1024, // 10MB\n maxFiles: 5,\n }),\n new transports.File({\n filename: path.join(cwd, 'error.log'),\n level: 'warn',\n maxsize: 10 * 1024 * 1024, // 10MB\n maxFiles: 5,\n }),\n ];\n } else {\n items = [\n new transports.Console({\n level: 'debug',\n }),\n ];\n }\n\n // @see https://github.com/winstonjs/triple-beam/blob/master/config/npm.js\n return create({\n format: format.combine(\n format.errors({ stack: true }),\n format.timestamp(),\n format.colorize(),\n format.simple(),\n ),\n transports: items,\n });\n}\n","/*\n * Copyright (c) 2023-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 { type Factory, singa } from 'singa';\nimport type { Logger } from 'winston';\n\nconst instance = singa<Logger>({\n name: 'logger',\n});\n\nexport function setLoggerFactory(factory: Factory<Logger>) {\n instance.setFactory(factory);\n}\n\nexport function isLoggerUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setLogger(input: Logger) {\n instance.set(input);\n}\n\nexport function useLogger() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024-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 type { Factory } from 'singa';\nimport { singa } from 'singa';\nimport type { VaultClient } from '@hapic/vault';\n\nconst instance = singa<VaultClient>({\n name: 'vault',\n});\n\nexport function setVaultFactory(factory: Factory<VaultClient>) {\n instance.setFactory(factory);\n}\n\nexport function isVaultClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function useVaultClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2023-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 { isObject } from '@authup/kit';\nimport type { DomainEventChannelName } from './type';\n\nexport function transformDomainEventData<T>(input: T) : T {\n if (isObject(input)) {\n const keys = Object.keys(input);\n for (let i = 0; i < keys.length; i++) {\n const value = input[keys[i]];\n if (value instanceof Date) {\n input[keys[i]] = value.toISOString();\n }\n }\n }\n\n return input;\n}\n\nexport function buildDomainEventChannelName(\n input: DomainEventChannelName,\n id?: string | number,\n) : string {\n if (typeof input === 'string') {\n return input;\n }\n\n return input(id);\n}\n","/*\n * Copyright (c) 2023-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 type { Client } from 'redis-extension';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport class DomainEventRedisPublisher implements IDomainEventPublisher {\n protected driver : Client;\n\n constructor(client: Client) {\n this.driver = client;\n }\n\n async publish(ctx: DomainEventPublishContext) : Promise<void> {\n const data = JSON.stringify(transformDomainEventData(ctx.content));\n\n const pipeline = this.driver.pipeline();\n for (let i = 0; i < ctx.destinations.length; i++) {\n const { namespace } = ctx.destinations[i];\n const keyPrefix = (namespace ? `${namespace}:` : '');\n\n let key = keyPrefix + buildDomainEventChannelName(ctx.destinations[i].channel);\n pipeline.publish(key, data);\n\n if (typeof ctx.destinations[i].channel === 'function') {\n key = keyPrefix + buildDomainEventChannelName(ctx.destinations[i].channel, ctx.content.data.id);\n pipeline.publish(key, data);\n }\n }\n\n await pipeline.exec();\n }\n}\n","/*\n * Copyright (c) 2022-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 { buildEventFullName } from '@authup/core-realtime-kit';\nimport { Emitter } from '@socket.io/redis-emitter';\nimport type { Client } from 'redis-extension';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport class DomainEventSocketPublisher implements IDomainEventPublisher {\n protected driver : Emitter;\n\n constructor(client: Client) {\n this.driver = new Emitter(client);\n }\n\n async publish(ctx: DomainEventPublishContext) : Promise<void> {\n ctx.content = transformDomainEventData(ctx.content);\n\n for (let i = 0; i < ctx.destinations.length; i++) {\n let emitter : Emitter;\n if (ctx.destinations[i].namespace) {\n emitter = this.driver.of(ctx.destinations[i].namespace);\n } else {\n emitter = this.driver;\n }\n\n let roomName = buildDomainEventChannelName(ctx.destinations[i].channel);\n\n const fullEventName = buildEventFullName(ctx.content.type, ctx.content.event);\n\n emitter\n .in(roomName)\n .emit(fullEventName, {\n ...ctx.content,\n meta: {\n roomName,\n },\n });\n\n if (typeof ctx.destinations[i].channel === 'function') {\n roomName = buildDomainEventChannelName(ctx.destinations[i].channel, ctx.content.data.id);\n\n emitter\n .in(roomName)\n .emit(fullEventName, {\n ...ctx.content,\n meta: {\n roomName,\n roomId: ctx.content.data.id,\n },\n });\n }\n }\n }\n}\n","/*\n * Copyright (c) 2024-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 type { EventPayload } from '@authup/core-realtime-kit';\nimport { isRedisClientUsable, useRedisClient } from '../services';\nimport { DomainEventRedisPublisher } from './redis';\nimport { DomainEventSocketPublisher } from './socket';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from './type';\n\nexport class DomainEventPublisher implements IDomainEventPublisher {\n protected publishers : Set<IDomainEventPublisher>;\n\n constructor() {\n this.publishers = new Set<IDomainEventPublisher>();\n\n if (isRedisClientUsable()) {\n const client = useRedisClient();\n\n this.publishers.add(new DomainEventRedisPublisher(client));\n this.publishers.add(new DomainEventSocketPublisher(client));\n }\n }\n\n async publish<T extends EventPayload>(\n ctx: DomainEventPublishContext<T>,\n ) : Promise<void> {\n const publishers = this.publishers.values();\n while (true) {\n const it = publishers.next();\n if (it.done) {\n return;\n }\n\n await it.value.publish(ctx);\n }\n }\n}\n","/*\n * Copyright (c) 2022-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\nexport function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(\n obj: X,\n prop: Y,\n): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n"],"names":["compare","value","hashedValue","compareMethod","hash","str","rounds","hashMethod","CryptoAsymmetricAlgorithm","isAsymmetricAlgorithm","input","Object","values","indexOf","getKeyUsagesForAsymmetricAlgorithm","name","format","RSA_PSS","ECDSA","RSASSA_PKCS1_V1_5","ECDH","RSA_OAEP","SyntaxError","normalizeAsymmetricKeyPairCreateOptions","options","optionsNormalized","modulusLength","publicExponent","Uint8Array","namedCurve","normalizeAsymmetricKeyImportOptions","createAsymmetricKeyPair","subtle","generateKey","enc","type","encodePKCS8ToPEM","base64","encodeSPKIToPem","dec","replace","decodePemToPKCS8","decodePemToSpki","SymmetricAlgorithm","normalizeSymmetricKeyCreateOptions","HMAC","length","normalizeSymmetricKeyImportOptions","isSymmetricAlgorithm","getKeyUsagesForSymmetricAlgorithm","AES_CBC","AES_GCM","AES_CTR","createSymmetricKey","getKeyUsagesForAlgorithm","CryptoKeyContainer","toArrayBuffer","key","exportKey","toUint8Array","arrayBuffer","toBase64","arrayBufferToBase64","toPem","Error","toJWK","fromPem","ctx","fromBase64","base64ToArrayBuffer","fromArrayBuffer","normalizedOptions","cryptoKey","importKey","extractTokenHeader","token","parts","split","JWTError","invalid","headerBase64","payload","atob","JSON","parse","e","headerInvalid","extractTokenPayload","payloadBase64","payloadInvalid","createErrorForJWTError","isObject","expired","date","Date","notActiveBefore","message","cause","logMessage","transformJWTAlgorithmToInternal","algorithm","JWTAlgorithm","HS256","Algorithm","HS384","HS512","RS256","RS384","RS512","ES256","ES384","PS256","PS384","PS512","getUtcTimestamp","Math","floor","getTime","signToken","claims","context","exp","iat","JWKType","RSA","EC","keyContainer","sign","keyId","OCT","OAuth2Error","verifyToken","promise","output","algorithms","map","verify","validateNbf","instance","singa","setRedisFactory","factory","setFactory","isRedisClientUsable","has","hasFactory","setRedisClient","set","useRedisClient","use","MemoryCacheAdapter","get","ttl","drop","delete","dropMany","keys","i","clear","prefix","iterator","next","done","startsWith","TTLCache","checkAgeOnGet","Infinity","RedisCacheAdapter","milliseconds","pipeline","client","del","exec","flushdb","JsonAdapter","createCacheAdapter","buildCacheKey","buildRedisKeyPath","Cache","adapter","useCache","createLogger","items","cwd","directory","process","env","transports","Console","level","File","filename","path","join","maxsize","maxFiles","create","combine","errors","stack","timestamp","colorize","simple","setLoggerFactory","isLoggerUsable","setLogger","useLogger","setVaultFactory","isVaultClientUsable","useVaultClient","transformDomainEventData","toISOString","buildDomainEventChannelName","id","DomainEventRedisPublisher","publish","data","stringify","content","driver","destinations","namespace","keyPrefix","channel","DomainEventSocketPublisher","emitter","of","roomName","fullEventName","buildEventFullName","event","in","emit","meta","roomId","Emitter","DomainEventPublisher","publishers","it","Set","add","hasOwnProperty","obj","prop","prototype","call"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@authup/server-kit",
3
- "version": "1.0.0-beta.25",
3
+ "version": "1.0.0-beta.27",
4
4
  "description": "A toolkit for server-side services.",
5
5
  "license": "Apache-2.0",
6
6
  "exports": {
@@ -51,7 +51,7 @@
51
51
  },
52
52
  "homepage": "https://github.com/authup/authup#readme",
53
53
  "dependencies": {
54
- "@hapic/vault": "^2.3.5",
54
+ "@hapic/vault": "^2.3.7",
55
55
  "@isaacs/ttlcache": "^1.4.1",
56
56
  "@node-rs/bcrypt": "^1.10.7",
57
57
  "@node-rs/jsonwebtoken": "^0.5.9",
@@ -65,16 +65,16 @@
65
65
  "winston": "^3.17.0"
66
66
  },
67
67
  "devDependencies": {
68
- "@authup/core-realtime-kit": "^1.0.0-beta.25",
69
- "@authup/kit": "^1.0.0-beta.25",
70
- "@authup/errors": "^1.0.0-beta.25",
71
- "@authup/specs": "^1.0.0-beta.25"
68
+ "@authup/core-realtime-kit": "^1.0.0-beta.27",
69
+ "@authup/kit": "^1.0.0-beta.27",
70
+ "@authup/errors": "^1.0.0-beta.27",
71
+ "@authup/specs": "^1.0.0-beta.27"
72
72
  },
73
73
  "peerDependencies": {
74
- "@authup/core-realtime-kit": "^1.0.0-beta.25",
75
- "@authup/kit": "^1.0.0-beta.25",
76
- "@authup/errors": "^1.0.0-beta.25",
77
- "@authup/specs": "^1.0.0-beta.25"
74
+ "@authup/core-realtime-kit": "^1.0.0-beta.27",
75
+ "@authup/kit": "^1.0.0-beta.27",
76
+ "@authup/errors": "^1.0.0-beta.27",
77
+ "@authup/specs": "^1.0.0-beta.27"
78
78
  },
79
79
  "publishConfig": {
80
80
  "access": "public"