@authup/server-kit 1.0.0-beta.22 → 1.0.0-beta.23

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/dist/index.cjs CHANGED
@@ -43,7 +43,7 @@ async function hash(str, rounds = 10) {
43
43
  }
44
44
 
45
45
  /*
46
- * Copyright (c) 2022.
46
+ * Copyright (c) 2022-2024.
47
47
  * Author Peter Placzek (tada5hi)
48
48
  * For the full copyright and license information,
49
49
  * view the LICENSE file that was distributed with this source code.
@@ -147,7 +147,7 @@ function decryptRSAPrivateKey(context, key) {
147
147
  }
148
148
 
149
149
  /*
150
- * Copyright (c) 2024.
150
+ * Copyright (c) 2024-2024.
151
151
  * Author Peter Placzek (tada5hi)
152
152
  * For the full copyright and license information,
153
153
  * view the LICENSE file that was distributed with this source code.
@@ -665,7 +665,7 @@ function buildCacheKey(options) {
665
665
  }
666
666
 
667
667
  /*
668
- * Copyright (c) 2024.
668
+ * Copyright (c) 2024-2024.
669
669
  * Author Peter Placzek (tada5hi)
670
670
  * For the full copyright and license information,
671
671
  * view the LICENSE file that was distributed with this source code.
@@ -868,7 +868,7 @@ class DomainEventPublisher {
868
868
  }
869
869
 
870
870
  /*
871
- * Copyright (c) 2022.
871
+ * Copyright (c) 2022-2024.
872
872
  * Author Peter Placzek (tada5hi)
873
873
  * For the full copyright and license information,
874
874
  * view the LICENSE file that was distributed with this source code.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/crypto/hash/compare.ts","../src/crypto/hash/hash.ts","../src/crypto/key-pair/constants.ts","../src/crypto/key-pair/helpers/check.ts","../src/crypto/key-pair/helpers/options.ts","../src/crypto/key-pair/helpers/file-name.ts","../src/crypto/key-pair/helpers/private-key.ts","../src/crypto/key-pair/helpers/wrap.ts","../src/crypto/key-pair/save.ts","../src/crypto/key-pair/create.ts","../src/crypto/key-pair/delete.ts","../src/crypto/key-pair/load.ts","../src/crypto/key-pair/module.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.\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.\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.\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 KeyPairKind {\n PRIVATE = 'private',\n PUBLIC = 'public',\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/kit';\nimport type { KeyPair } from '../type';\n\nexport function isKeyPair(data: unknown) : data is KeyPair {\n return isObject(data) &&\n typeof (data as KeyPair).privateKey !== 'undefined' &&\n typeof (data as KeyPair).publicKey !== 'undefined';\n}\n\nexport function isKeyPairWithPublicKey(data: unknown) : data is Omit<KeyPair, 'privateKey'> {\n return isObject(data) &&\n typeof (data as KeyPair).publicKey !== 'undefined';\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport type { KeyPairOptions } from '../type';\n\nexport function extendKeyPairOptions(\n options?: Partial<KeyPairOptions>,\n) : KeyPairOptions {\n options = options ?? {};\n\n options.directory = options.directory || process.cwd();\n options.directory = path.isAbsolute(options.directory) ?\n options.directory :\n path.resolve(process.cwd(), options.directory);\n\n options.type ??= 'rsa';\n\n if (\n options.type === 'rsa' ||\n options.type === 'rsa-pss' ||\n options.type === 'dsa'\n ) {\n options.modulusLength = 2048;\n }\n\n if (!options.privateKeyEncoding) {\n options.privateKeyEncoding = {\n type: 'pkcs8',\n format: 'pem',\n };\n }\n\n if (!options.publicKeyEncoding) {\n options.publicKeyEncoding = {\n type: 'spki',\n format: 'pem',\n };\n }\n\n if (\n options.privateKeyEncoding.passphrase &&\n !options.privateKeyEncoding.cipher\n ) {\n options.privateKeyEncoding.cipher = 'aes-256-cbc';\n }\n\n return options as KeyPairOptions;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { KeyPairKind } from '../constants';\nimport type { KeyPairOptions } from '../type';\nimport { extendKeyPairOptions } from './options';\n\nexport function buildKeyFileName(\n type: `${KeyPairKind}`,\n context?: Partial<KeyPairOptions>,\n) {\n const options = extendKeyPairOptions(context);\n\n const parts : string[] = [];\n\n switch (type) {\n case KeyPairKind.PRIVATE: {\n if (options.privateName) {\n parts.push(options.privateName);\n } else {\n parts.push(type);\n }\n\n if (options.privateExtension) {\n if (options.privateExtension.startsWith('.')) {\n options.privateExtension = options.privateExtension.slice(1);\n }\n\n parts.push(options.privateExtension);\n } else {\n parts.push('pem');\n }\n break;\n }\n case KeyPairKind.PUBLIC: {\n if (options.publicName) {\n parts.push(options.publicName);\n } else {\n parts.push(type);\n }\n\n if (options.publicExtension) {\n if (options.publicExtension.startsWith('.')) {\n options.publicExtension = options.publicExtension.slice(1);\n }\n\n parts.push(options.publicExtension);\n } else {\n parts.push('pem');\n }\n break;\n }\n }\n\n return parts.join('.');\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createPrivateKey } from 'node:crypto';\nimport type { KeyPairOptions } from '../type';\n\nexport function decryptRSAPrivateKey(\n context: KeyPairOptions,\n key: string | Buffer,\n) : string {\n const privateKey = createPrivateKey({\n type: context.privateKeyEncoding.type,\n format: context.privateKeyEncoding.format,\n key,\n passphrase: context.privateKeyEncoding.passphrase || context.passphrase,\n });\n\n let content = privateKey.export({\n type: context.privateKeyEncoding.type,\n format: context.privateKeyEncoding.format,\n });\n\n if (typeof content !== 'string') {\n content = Buffer.from(content).toString('utf-8');\n }\n\n return content;\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\nfunction wrapPem(\n type: 'PRIVATE KEY' | 'PUBLIC KEY',\n input: string | ArrayBuffer | Buffer,\n) {\n if (typeof input !== 'string') {\n input = Buffer.from(input).toString('base64');\n }\n\n return `-----BEGIN ${type}-----\\n${input}\\n-----END ${type}-----`;\n}\n\nexport function wrapPrivateKeyPem(input: string | ArrayBuffer | Buffer) {\n return wrapPem('PRIVATE KEY', input);\n}\n\nexport function wrapPublicKeyPem(input: string | ArrayBuffer | Buffer) {\n return wrapPem('PUBLIC KEY', input);\n}\n\n// ------------------------------------------------------------\n\nfunction unwrapPem(\n type: 'PRIVATE KEY' | 'PUBLIC KEY',\n input: string,\n) {\n if (typeof input !== 'string') {\n input = Buffer.from(input).toString('base64');\n }\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 unwrapPrivateKeyPem(input: string) {\n return unwrapPem('PRIVATE KEY', input);\n}\n\nexport function unwrapPublicKeyPem(input: string) {\n return unwrapPem('PUBLIC KEY', input);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { buildKeyFileName, extendKeyPairOptions } from './helpers';\nimport { KeyPairKind } from './constants';\n\nexport async function saveKeyPair(keyPair: KeyPair, context?: KeyPairOptions) : Promise<KeyPair> {\n context = extendKeyPairOptions(context);\n\n await fs.promises.mkdir(context.directory, { recursive: true });\n\n await Promise.all(\n [\n {\n path: path.resolve(context.directory, buildKeyFileName(KeyPairKind.PRIVATE, context)),\n content: keyPair.privateKey,\n },\n {\n path: path.resolve(context.directory, buildKeyFileName(KeyPairKind.PUBLIC, context)),\n content: keyPair.publicKey,\n },\n ]\n .map((file) => fs.promises.writeFile(file.path, file.content)),\n );\n\n return keyPair;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { generateKeyPair } from 'node:crypto';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { decryptRSAPrivateKey, extendKeyPairOptions } from './helpers';\nimport { saveKeyPair } from './save';\n\nexport async function createKeyPair(context?: Partial<KeyPairOptions>) : Promise<KeyPair> {\n const options = extendKeyPairOptions(context);\n\n const keyPair : KeyPair = await new Promise((resolve: (value: KeyPair) => void, reject) => {\n const callback = (err: (Error | null), publicKey: string, privateKey: string) => {\n if (err) reject(err);\n\n resolve({\n privateKey,\n publicKey,\n });\n };\n switch (options.type) {\n case 'dsa':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'ec':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'rsa':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'rsa-pss':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n }\n });\n\n if (options.save) {\n await saveKeyPair(keyPair, options);\n }\n\n if (\n options.passphrase ||\n options.privateKeyEncoding.passphrase\n ) {\n keyPair.privateKey = decryptRSAPrivateKey(\n options,\n keyPair.privateKey,\n );\n }\n\n return keyPair;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { KeyPairOptions } from './type';\nimport { buildKeyFileName, extendKeyPairOptions } from './helpers';\nimport { KeyPairKind } from './constants';\n\nexport async function deleteKeyPair(context?: Partial<KeyPairOptions>) : Promise<void> {\n const options = extendKeyPairOptions(context);\n\n const privateKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PRIVATE, options));\n const publicKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PUBLIC, options));\n\n try {\n await Promise.all([privateKeyPath, publicKeyPath]\n .map((filePath) => fs.promises.stat(filePath)));\n } catch (e) {\n return;\n }\n\n await Promise.all([\n privateKeyPath,\n publicKeyPath,\n ].map((filePath) => fs.promises.rm(filePath)));\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createPublicKey } from 'node:crypto';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { buildKeyFileName, decryptRSAPrivateKey, extendKeyPairOptions } from './helpers';\nimport { KeyPairKind } from './constants';\nimport { saveKeyPair } from './save';\n\nexport async function loadKeyPair(context?: Partial<KeyPairOptions>) : Promise<KeyPair | undefined> {\n const options = extendKeyPairOptions(context);\n\n const privateKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PRIVATE, options));\n\n try {\n await fs.promises.stat(privateKeyPath);\n } catch (e) {\n return undefined;\n }\n\n const privateKeyBuffer = await fs.promises.readFile(privateKeyPath);\n let privateKey = privateKeyBuffer.toString();\n if (\n options.passphrase ||\n options.privateKeyEncoding.passphrase\n ) {\n privateKey = decryptRSAPrivateKey(\n options,\n privateKey,\n );\n }\n\n const publicKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PUBLIC, options));\n\n let publicKey : string;\n\n try {\n await fs.promises.stat(publicKeyPath);\n const publicKeyBuffer = await fs.promises.readFile(publicKeyPath);\n publicKey = publicKeyBuffer.toString();\n } catch (e) {\n const publicKeyObject = createPublicKey({\n key: privateKey,\n format: options.privateKeyEncoding.format,\n type: options.publicKeyEncoding.type,\n });\n\n const stringOrBuffer = publicKeyObject.export({\n format: options.publicKeyEncoding.format,\n type: options.publicKeyEncoding.type,\n });\n if (typeof stringOrBuffer !== 'string') {\n publicKey = stringOrBuffer.toString();\n } else {\n publicKey = stringOrBuffer;\n }\n\n if (options.save) {\n await saveKeyPair({\n privateKey,\n publicKey,\n }, options);\n }\n }\n\n return {\n privateKey,\n publicKey,\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { extendKeyPairOptions } from './helpers';\nimport { loadKeyPair } from './load';\nimport { createKeyPair } from './create';\n\nconst keyPairCache : Record<string, KeyPair> = {};\n\nexport async function useKeyPair(value?: Partial<KeyPairOptions> | string) : Promise<KeyPair> {\n let options : KeyPairOptions;\n\n if (typeof value === 'string') {\n options = extendKeyPairOptions({\n privateName: value,\n });\n } else {\n options = extendKeyPairOptions(value || {});\n }\n\n if (Object.prototype.hasOwnProperty.call(keyPairCache, options.privateName)) {\n return keyPairCache[options.privateName];\n }\n\n let keyPair = await loadKeyPair(options);\n if (typeof keyPair === 'undefined') {\n keyPair = await createKeyPair(options);\n }\n\n keyPairCache[options.privateName] = keyPair;\n\n return keyPair;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { JWTClaims, JWTHeader } from '@authup/kit';\nimport { TokenError } from '@authup/kit';\n\n/**\n * Decode a JWT token with no verification.\n *\n * @param token\n *\n * @throws TokenError\n */\nexport function extractTokenHeader(\n token: string,\n) : JWTHeader {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw TokenError.payloadInvalid('The token format is not valid.');\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 TokenError.headerInvalid('The token header could not be extracted.');\n }\n}\n\nexport function extractTokenPayload(\n token: string,\n) : JWTClaims {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw TokenError.payloadInvalid('The token format is not valid.');\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 TokenError.payloadInvalid('The token payload could not be extracted.');\n }\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { JWTAlgorithm, TokenError } from '@authup/kit';\nimport { Algorithm } from '@node-rs/jsonwebtoken';\nimport { isObject } from 'smob';\n\nexport function createErrorForJWTError(e: unknown) : TokenError {\n if (isObject(e)) {\n if (typeof e.name === 'string') {\n switch (e.name) {\n case 'TokenExpiredError': {\n return TokenError.expired();\n }\n case 'NotBeforeError': {\n if (typeof e.date === 'string' || e.date instanceof Date) {\n return TokenError.notActiveBefore(e.date);\n }\n break;\n }\n case 'JsonWebTokenError': {\n if (typeof e.message === 'string') {\n return TokenError.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 TokenError.expired();\n }\n case 'ImmatureSignature': {\n return TokenError.notActiveBefore();\n }\n case 'InvalidToken':\n case 'InvalidSignature': {\n return TokenError.payloadInvalid();\n }\n }\n }\n\n return new TokenError({\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 type { JWTClaims } from '@authup/kit';\nimport { JWKType, TokenError } from '@authup/kit';\nimport { Algorithm, sign } from '@node-rs/jsonwebtoken';\nimport { isKeyPair, useKeyPair } from '../../key-pair';\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 const { privateKey } = isKeyPair(context.keyPair) ?\n context.keyPair :\n await useKeyPair(context.keyPair);\n\n let algorithm : Algorithm;\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, privateKey, {\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 return sign(claims, context.key, {\n algorithm,\n keyId: context.keyId,\n });\n }\n }\n\n throw new TokenError();\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, TokenError } from '@authup/kit';\nimport type { JWTClaims, OAuth2TokenPayload } from '@authup/kit';\nimport { Algorithm, verify } from '@node-rs/jsonwebtoken';\nimport { isKeyPairWithPublicKey, useKeyPair } from '../../key-pair';\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 TokenError\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 const { publicKey } = isKeyPairWithPublicKey(context.keyPair) ?\n context.keyPair :\n await useKeyPair(context.keyPair);\n\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 promise = verify(token, publicKey, {\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 promise = verify(token, context.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 TokenError({ message: 'Invalid type.' });\n }\n\n return output as OAuth2TokenPayload;\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 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 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 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.\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.\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.\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.\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 * as process from 'node:process';\nimport type { LoggerOptions } from 'winston';\nimport { createLogger as create, format, transports } 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, 'access.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 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.\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.\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.\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-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } 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-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildEventFullName } from '@authup/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.\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/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.\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","KeyPairKind","isKeyPair","data","isObject","privateKey","publicKey","isKeyPairWithPublicKey","extendKeyPairOptions","options","directory","process","cwd","path","isAbsolute","resolve","type","modulusLength","privateKeyEncoding","format","publicKeyEncoding","passphrase","cipher","buildKeyFileName","context","parts","PRIVATE","privateName","push","privateExtension","startsWith","slice","PUBLIC","publicName","publicExtension","join","decryptRSAPrivateKey","key","createPrivateKey","content","export","Buffer","from","toString","wrapPem","input","wrapPrivateKeyPem","wrapPublicKeyPem","unwrapPem","replace","unwrapPrivateKeyPem","unwrapPublicKeyPem","saveKeyPair","keyPair","fs","promises","mkdir","recursive","Promise","all","map","file","writeFile","createKeyPair","reject","callback","err","generateKeyPair","save","deleteKeyPair","privateKeyPath","publicKeyPath","filePath","stat","e","rm","loadKeyPair","undefined","privateKeyBuffer","readFile","publicKeyBuffer","publicKeyObject","createPublicKey","stringOrBuffer","keyPairCache","useKeyPair","Object","prototype","hasOwnProperty","call","extractTokenHeader","token","split","length","TokenError","payloadInvalid","headerBase64","payload","atob","JSON","parse","headerInvalid","extractTokenPayload","payloadBase64","createErrorForJWTError","name","expired","date","Date","notActiveBefore","message","cause","logMessage","transformJWTAlgorithmToInternal","algorithm","JWTAlgorithm","HS256","Algorithm","HS384","HS512","RS256","RS384","RS512","ES256","ES384","PS256","PS384","PS512","Error","getUtcTimestamp","Math","floor","getTime","signToken","claims","exp","iat","JWKType","RSA","EC","sign","keyId","OCT","verifyToken","promise","output","algorithms","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","constructor","TTLCache","checkAgeOnGet","Infinity","RedisCacheAdapter","milliseconds","pipeline","client","del","exec","flushdb","JsonAdapter","createCacheAdapter","buildCacheKey","buildRedisKeyPath","Cache","adapter","useCache","createLogger","items","env","transports","Console","level","File","filename","maxsize","maxFiles","create","combine","errors","stack","timestamp","colorize","simple","setLoggerFactory","isLoggerUsable","setLogger","useLogger","setVaultFactory","isVaultClientUsable","useVaultClient","transformDomainEventData","toISOString","buildDomainEventChannelName","id","DomainEventRedisPublisher","publish","ctx","stringify","driver","destinations","namespace","keyPrefix","channel","DomainEventSocketPublisher","emitter","of","roomName","fullEventName","buildEventFullName","event","in","emit","meta","roomId","Emitter","DomainEventPublisher","publishers","values","it","Set","add","obj","prop"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/crypto/hash/compare.ts","../src/crypto/hash/hash.ts","../src/crypto/key-pair/constants.ts","../src/crypto/key-pair/helpers/check.ts","../src/crypto/key-pair/helpers/options.ts","../src/crypto/key-pair/helpers/file-name.ts","../src/crypto/key-pair/helpers/private-key.ts","../src/crypto/key-pair/helpers/wrap.ts","../src/crypto/key-pair/save.ts","../src/crypto/key-pair/create.ts","../src/crypto/key-pair/delete.ts","../src/crypto/key-pair/load.ts","../src/crypto/key-pair/module.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 KeyPairKind {\n PRIVATE = 'private',\n PUBLIC = 'public',\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 { isObject } from '@authup/kit';\nimport type { KeyPair } from '../type';\n\nexport function isKeyPair(data: unknown) : data is KeyPair {\n return isObject(data) &&\n typeof (data as KeyPair).privateKey !== 'undefined' &&\n typeof (data as KeyPair).publicKey !== 'undefined';\n}\n\nexport function isKeyPairWithPublicKey(data: unknown) : data is Omit<KeyPair, 'privateKey'> {\n return isObject(data) &&\n typeof (data as KeyPair).publicKey !== 'undefined';\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 type { KeyPairOptions } from '../type';\n\nexport function extendKeyPairOptions(\n options?: Partial<KeyPairOptions>,\n) : KeyPairOptions {\n options = options ?? {};\n\n options.directory = options.directory || process.cwd();\n options.directory = path.isAbsolute(options.directory) ?\n options.directory :\n path.resolve(process.cwd(), options.directory);\n\n options.type ??= 'rsa';\n\n if (\n options.type === 'rsa' ||\n options.type === 'rsa-pss' ||\n options.type === 'dsa'\n ) {\n options.modulusLength = 2048;\n }\n\n if (!options.privateKeyEncoding) {\n options.privateKeyEncoding = {\n type: 'pkcs8',\n format: 'pem',\n };\n }\n\n if (!options.publicKeyEncoding) {\n options.publicKeyEncoding = {\n type: 'spki',\n format: 'pem',\n };\n }\n\n if (\n options.privateKeyEncoding.passphrase &&\n !options.privateKeyEncoding.cipher\n ) {\n options.privateKeyEncoding.cipher = 'aes-256-cbc';\n }\n\n return options as KeyPairOptions;\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 { KeyPairKind } from '../constants';\nimport type { KeyPairOptions } from '../type';\nimport { extendKeyPairOptions } from './options';\n\nexport function buildKeyFileName(\n type: `${KeyPairKind}`,\n context?: Partial<KeyPairOptions>,\n) {\n const options = extendKeyPairOptions(context);\n\n const parts : string[] = [];\n\n switch (type) {\n case KeyPairKind.PRIVATE: {\n if (options.privateName) {\n parts.push(options.privateName);\n } else {\n parts.push(type);\n }\n\n if (options.privateExtension) {\n if (options.privateExtension.startsWith('.')) {\n options.privateExtension = options.privateExtension.slice(1);\n }\n\n parts.push(options.privateExtension);\n } else {\n parts.push('pem');\n }\n break;\n }\n case KeyPairKind.PUBLIC: {\n if (options.publicName) {\n parts.push(options.publicName);\n } else {\n parts.push(type);\n }\n\n if (options.publicExtension) {\n if (options.publicExtension.startsWith('.')) {\n options.publicExtension = options.publicExtension.slice(1);\n }\n\n parts.push(options.publicExtension);\n } else {\n parts.push('pem');\n }\n break;\n }\n }\n\n return parts.join('.');\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 { createPrivateKey } from 'node:crypto';\nimport type { KeyPairOptions } from '../type';\n\nexport function decryptRSAPrivateKey(\n context: KeyPairOptions,\n key: string | Buffer,\n) : string {\n const privateKey = createPrivateKey({\n type: context.privateKeyEncoding.type,\n format: context.privateKeyEncoding.format,\n key,\n passphrase: context.privateKeyEncoding.passphrase || context.passphrase,\n });\n\n let content = privateKey.export({\n type: context.privateKeyEncoding.type,\n format: context.privateKeyEncoding.format,\n });\n\n if (typeof content !== 'string') {\n content = Buffer.from(content).toString('utf-8');\n }\n\n return content;\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 wrapPem(\n type: 'PRIVATE KEY' | 'PUBLIC KEY',\n input: string | ArrayBuffer | Buffer,\n) {\n if (typeof input !== 'string') {\n input = Buffer.from(input).toString('base64');\n }\n\n return `-----BEGIN ${type}-----\\n${input}\\n-----END ${type}-----`;\n}\n\nexport function wrapPrivateKeyPem(input: string | ArrayBuffer | Buffer) {\n return wrapPem('PRIVATE KEY', input);\n}\n\nexport function wrapPublicKeyPem(input: string | ArrayBuffer | Buffer) {\n return wrapPem('PUBLIC KEY', input);\n}\n\n// ------------------------------------------------------------\n\nfunction unwrapPem(\n type: 'PRIVATE KEY' | 'PUBLIC KEY',\n input: string,\n) {\n if (typeof input !== 'string') {\n input = Buffer.from(input).toString('base64');\n }\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 unwrapPrivateKeyPem(input: string) {\n return unwrapPem('PRIVATE KEY', input);\n}\n\nexport function unwrapPublicKeyPem(input: string) {\n return unwrapPem('PUBLIC KEY', input);\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 fs from 'node:fs';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { buildKeyFileName, extendKeyPairOptions } from './helpers';\nimport { KeyPairKind } from './constants';\n\nexport async function saveKeyPair(keyPair: KeyPair, context?: KeyPairOptions) : Promise<KeyPair> {\n context = extendKeyPairOptions(context);\n\n await fs.promises.mkdir(context.directory, { recursive: true });\n\n await Promise.all(\n [\n {\n path: path.resolve(context.directory, buildKeyFileName(KeyPairKind.PRIVATE, context)),\n content: keyPair.privateKey,\n },\n {\n path: path.resolve(context.directory, buildKeyFileName(KeyPairKind.PUBLIC, context)),\n content: keyPair.publicKey,\n },\n ]\n .map((file) => fs.promises.writeFile(file.path, file.content)),\n );\n\n return keyPair;\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 { generateKeyPair } from 'node:crypto';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { decryptRSAPrivateKey, extendKeyPairOptions } from './helpers';\nimport { saveKeyPair } from './save';\n\nexport async function createKeyPair(context?: Partial<KeyPairOptions>) : Promise<KeyPair> {\n const options = extendKeyPairOptions(context);\n\n const keyPair : KeyPair = await new Promise((resolve: (value: KeyPair) => void, reject) => {\n const callback = (err: (Error | null), publicKey: string, privateKey: string) => {\n if (err) reject(err);\n\n resolve({\n privateKey,\n publicKey,\n });\n };\n switch (options.type) {\n case 'dsa':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'ec':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'rsa':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'rsa-pss':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n }\n });\n\n if (options.save) {\n await saveKeyPair(keyPair, options);\n }\n\n if (\n options.passphrase ||\n options.privateKeyEncoding.passphrase\n ) {\n keyPair.privateKey = decryptRSAPrivateKey(\n options,\n keyPair.privateKey,\n );\n }\n\n return keyPair;\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 fs from 'node:fs';\nimport type { KeyPairOptions } from './type';\nimport { buildKeyFileName, extendKeyPairOptions } from './helpers';\nimport { KeyPairKind } from './constants';\n\nexport async function deleteKeyPair(context?: Partial<KeyPairOptions>) : Promise<void> {\n const options = extendKeyPairOptions(context);\n\n const privateKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PRIVATE, options));\n const publicKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PUBLIC, options));\n\n try {\n await Promise.all([privateKeyPath, publicKeyPath]\n .map((filePath) => fs.promises.stat(filePath)));\n } catch (e) {\n return;\n }\n\n await Promise.all([\n privateKeyPath,\n publicKeyPath,\n ].map((filePath) => fs.promises.rm(filePath)));\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 { createPublicKey } from 'node:crypto';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { buildKeyFileName, decryptRSAPrivateKey, extendKeyPairOptions } from './helpers';\nimport { KeyPairKind } from './constants';\nimport { saveKeyPair } from './save';\n\nexport async function loadKeyPair(context?: Partial<KeyPairOptions>) : Promise<KeyPair | undefined> {\n const options = extendKeyPairOptions(context);\n\n const privateKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PRIVATE, options));\n\n try {\n await fs.promises.stat(privateKeyPath);\n } catch (e) {\n return undefined;\n }\n\n const privateKeyBuffer = await fs.promises.readFile(privateKeyPath);\n let privateKey = privateKeyBuffer.toString();\n if (\n options.passphrase ||\n options.privateKeyEncoding.passphrase\n ) {\n privateKey = decryptRSAPrivateKey(\n options,\n privateKey,\n );\n }\n\n const publicKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PUBLIC, options));\n\n let publicKey : string;\n\n try {\n await fs.promises.stat(publicKeyPath);\n const publicKeyBuffer = await fs.promises.readFile(publicKeyPath);\n publicKey = publicKeyBuffer.toString();\n } catch (e) {\n const publicKeyObject = createPublicKey({\n key: privateKey,\n format: options.privateKeyEncoding.format,\n type: options.publicKeyEncoding.type,\n });\n\n const stringOrBuffer = publicKeyObject.export({\n format: options.publicKeyEncoding.format,\n type: options.publicKeyEncoding.type,\n });\n if (typeof stringOrBuffer !== 'string') {\n publicKey = stringOrBuffer.toString();\n } else {\n publicKey = stringOrBuffer;\n }\n\n if (options.save) {\n await saveKeyPair({\n privateKey,\n publicKey,\n }, options);\n }\n }\n\n return {\n privateKey,\n publicKey,\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 */\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { extendKeyPairOptions } from './helpers';\nimport { loadKeyPair } from './load';\nimport { createKeyPair } from './create';\n\nconst keyPairCache : Record<string, KeyPair> = {};\n\nexport async function useKeyPair(value?: Partial<KeyPairOptions> | string) : Promise<KeyPair> {\n let options : KeyPairOptions;\n\n if (typeof value === 'string') {\n options = extendKeyPairOptions({\n privateName: value,\n });\n } else {\n options = extendKeyPairOptions(value || {});\n }\n\n if (Object.prototype.hasOwnProperty.call(keyPairCache, options.privateName)) {\n return keyPairCache[options.privateName];\n }\n\n let keyPair = await loadKeyPair(options);\n if (typeof keyPair === 'undefined') {\n keyPair = await createKeyPair(options);\n }\n\n keyPairCache[options.privateName] = keyPair;\n\n return keyPair;\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/kit';\nimport { TokenError } from '@authup/kit';\n\n/**\n * Decode a JWT token with no verification.\n *\n * @param token\n *\n * @throws TokenError\n */\nexport function extractTokenHeader(\n token: string,\n) : JWTHeader {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw TokenError.payloadInvalid('The token format is not valid.');\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 TokenError.headerInvalid('The token header could not be extracted.');\n }\n}\n\nexport function extractTokenPayload(\n token: string,\n) : JWTClaims {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw TokenError.payloadInvalid('The token format is not valid.');\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 TokenError.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, TokenError } from '@authup/kit';\nimport { Algorithm } from '@node-rs/jsonwebtoken';\nimport { isObject } from 'smob';\n\nexport function createErrorForJWTError(e: unknown) : TokenError {\n if (isObject(e)) {\n if (typeof e.name === 'string') {\n switch (e.name) {\n case 'TokenExpiredError': {\n return TokenError.expired();\n }\n case 'NotBeforeError': {\n if (typeof e.date === 'string' || e.date instanceof Date) {\n return TokenError.notActiveBefore(e.date);\n }\n break;\n }\n case 'JsonWebTokenError': {\n if (typeof e.message === 'string') {\n return TokenError.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 TokenError.expired();\n }\n case 'ImmatureSignature': {\n return TokenError.notActiveBefore();\n }\n case 'InvalidToken':\n case 'InvalidSignature': {\n return TokenError.payloadInvalid();\n }\n }\n }\n\n return new TokenError({\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 type { JWTClaims } from '@authup/kit';\nimport { JWKType, TokenError } from '@authup/kit';\nimport { Algorithm, sign } from '@node-rs/jsonwebtoken';\nimport { isKeyPair, useKeyPair } from '../../key-pair';\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 const { privateKey } = isKeyPair(context.keyPair) ?\n context.keyPair :\n await useKeyPair(context.keyPair);\n\n let algorithm : Algorithm;\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, privateKey, {\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 return sign(claims, context.key, {\n algorithm,\n keyId: context.keyId,\n });\n }\n }\n\n throw new TokenError();\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, TokenError } from '@authup/kit';\nimport type { JWTClaims, OAuth2TokenPayload } from '@authup/kit';\nimport { Algorithm, verify } from '@node-rs/jsonwebtoken';\nimport { isKeyPairWithPublicKey, useKeyPair } from '../../key-pair';\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 TokenError\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 const { publicKey } = isKeyPairWithPublicKey(context.keyPair) ?\n context.keyPair :\n await useKeyPair(context.keyPair);\n\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 promise = verify(token, publicKey, {\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 promise = verify(token, context.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 TokenError({ 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 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 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 * as process from 'node:process';\nimport type { LoggerOptions } from 'winston';\nimport { createLogger as create, format, transports } 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, 'access.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 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/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/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","KeyPairKind","isKeyPair","data","isObject","privateKey","publicKey","isKeyPairWithPublicKey","extendKeyPairOptions","options","directory","process","cwd","path","isAbsolute","resolve","type","modulusLength","privateKeyEncoding","format","publicKeyEncoding","passphrase","cipher","buildKeyFileName","context","parts","PRIVATE","privateName","push","privateExtension","startsWith","slice","PUBLIC","publicName","publicExtension","join","decryptRSAPrivateKey","key","createPrivateKey","content","export","Buffer","from","toString","wrapPem","input","wrapPrivateKeyPem","wrapPublicKeyPem","unwrapPem","replace","unwrapPrivateKeyPem","unwrapPublicKeyPem","saveKeyPair","keyPair","fs","promises","mkdir","recursive","Promise","all","map","file","writeFile","createKeyPair","reject","callback","err","generateKeyPair","save","deleteKeyPair","privateKeyPath","publicKeyPath","filePath","stat","e","rm","loadKeyPair","undefined","privateKeyBuffer","readFile","publicKeyBuffer","publicKeyObject","createPublicKey","stringOrBuffer","keyPairCache","useKeyPair","Object","prototype","hasOwnProperty","call","extractTokenHeader","token","split","length","TokenError","payloadInvalid","headerBase64","payload","atob","JSON","parse","headerInvalid","extractTokenPayload","payloadBase64","createErrorForJWTError","name","expired","date","Date","notActiveBefore","message","cause","logMessage","transformJWTAlgorithmToInternal","algorithm","JWTAlgorithm","HS256","Algorithm","HS384","HS512","RS256","RS384","RS512","ES256","ES384","PS256","PS384","PS512","Error","getUtcTimestamp","Math","floor","getTime","signToken","claims","exp","iat","JWKType","RSA","EC","sign","keyId","OCT","verifyToken","promise","output","algorithms","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","constructor","TTLCache","checkAgeOnGet","Infinity","RedisCacheAdapter","milliseconds","pipeline","client","del","exec","flushdb","JsonAdapter","createCacheAdapter","buildCacheKey","buildRedisKeyPath","Cache","adapter","useCache","createLogger","items","env","transports","Console","level","File","filename","maxsize","maxFiles","create","combine","errors","stack","timestamp","colorize","simple","setLoggerFactory","isLoggerUsable","setLogger","useLogger","setVaultFactory","isVaultClientUsable","useVaultClient","transformDomainEventData","toISOString","buildDomainEventChannelName","id","DomainEventRedisPublisher","publish","ctx","stringify","driver","destinations","namespace","keyPrefix","channel","DomainEventSocketPublisher","emitter","of","roomName","fullEventName","buildEventFullName","event","in","emit","meta","roomId","Emitter","DomainEventPublisher","publishers","values","it","Set","add","obj","prop"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -24,7 +24,7 @@ async function hash(str, rounds = 10) {
24
24
  }
25
25
 
26
26
  /*
27
- * Copyright (c) 2022.
27
+ * Copyright (c) 2022-2024.
28
28
  * Author Peter Placzek (tada5hi)
29
29
  * For the full copyright and license information,
30
30
  * view the LICENSE file that was distributed with this source code.
@@ -128,7 +128,7 @@ function decryptRSAPrivateKey(context, key) {
128
128
  }
129
129
 
130
130
  /*
131
- * Copyright (c) 2024.
131
+ * Copyright (c) 2024-2024.
132
132
  * Author Peter Placzek (tada5hi)
133
133
  * For the full copyright and license information,
134
134
  * view the LICENSE file that was distributed with this source code.
@@ -646,7 +646,7 @@ function buildCacheKey(options) {
646
646
  }
647
647
 
648
648
  /*
649
- * Copyright (c) 2024.
649
+ * Copyright (c) 2024-2024.
650
650
  * Author Peter Placzek (tada5hi)
651
651
  * For the full copyright and license information,
652
652
  * view the LICENSE file that was distributed with this source code.
@@ -849,7 +849,7 @@ class DomainEventPublisher {
849
849
  }
850
850
 
851
851
  /*
852
- * Copyright (c) 2022.
852
+ * Copyright (c) 2022-2024.
853
853
  * Author Peter Placzek (tada5hi)
854
854
  * For the full copyright and license information,
855
855
  * view the LICENSE file that was distributed with this source code.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/crypto/hash/compare.ts","../src/crypto/hash/hash.ts","../src/crypto/key-pair/constants.ts","../src/crypto/key-pair/helpers/check.ts","../src/crypto/key-pair/helpers/options.ts","../src/crypto/key-pair/helpers/file-name.ts","../src/crypto/key-pair/helpers/private-key.ts","../src/crypto/key-pair/helpers/wrap.ts","../src/crypto/key-pair/save.ts","../src/crypto/key-pair/create.ts","../src/crypto/key-pair/delete.ts","../src/crypto/key-pair/load.ts","../src/crypto/key-pair/module.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.\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.\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.\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 KeyPairKind {\n PRIVATE = 'private',\n PUBLIC = 'public',\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/kit';\nimport type { KeyPair } from '../type';\n\nexport function isKeyPair(data: unknown) : data is KeyPair {\n return isObject(data) &&\n typeof (data as KeyPair).privateKey !== 'undefined' &&\n typeof (data as KeyPair).publicKey !== 'undefined';\n}\n\nexport function isKeyPairWithPublicKey(data: unknown) : data is Omit<KeyPair, 'privateKey'> {\n return isObject(data) &&\n typeof (data as KeyPair).publicKey !== 'undefined';\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport type { KeyPairOptions } from '../type';\n\nexport function extendKeyPairOptions(\n options?: Partial<KeyPairOptions>,\n) : KeyPairOptions {\n options = options ?? {};\n\n options.directory = options.directory || process.cwd();\n options.directory = path.isAbsolute(options.directory) ?\n options.directory :\n path.resolve(process.cwd(), options.directory);\n\n options.type ??= 'rsa';\n\n if (\n options.type === 'rsa' ||\n options.type === 'rsa-pss' ||\n options.type === 'dsa'\n ) {\n options.modulusLength = 2048;\n }\n\n if (!options.privateKeyEncoding) {\n options.privateKeyEncoding = {\n type: 'pkcs8',\n format: 'pem',\n };\n }\n\n if (!options.publicKeyEncoding) {\n options.publicKeyEncoding = {\n type: 'spki',\n format: 'pem',\n };\n }\n\n if (\n options.privateKeyEncoding.passphrase &&\n !options.privateKeyEncoding.cipher\n ) {\n options.privateKeyEncoding.cipher = 'aes-256-cbc';\n }\n\n return options as KeyPairOptions;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { KeyPairKind } from '../constants';\nimport type { KeyPairOptions } from '../type';\nimport { extendKeyPairOptions } from './options';\n\nexport function buildKeyFileName(\n type: `${KeyPairKind}`,\n context?: Partial<KeyPairOptions>,\n) {\n const options = extendKeyPairOptions(context);\n\n const parts : string[] = [];\n\n switch (type) {\n case KeyPairKind.PRIVATE: {\n if (options.privateName) {\n parts.push(options.privateName);\n } else {\n parts.push(type);\n }\n\n if (options.privateExtension) {\n if (options.privateExtension.startsWith('.')) {\n options.privateExtension = options.privateExtension.slice(1);\n }\n\n parts.push(options.privateExtension);\n } else {\n parts.push('pem');\n }\n break;\n }\n case KeyPairKind.PUBLIC: {\n if (options.publicName) {\n parts.push(options.publicName);\n } else {\n parts.push(type);\n }\n\n if (options.publicExtension) {\n if (options.publicExtension.startsWith('.')) {\n options.publicExtension = options.publicExtension.slice(1);\n }\n\n parts.push(options.publicExtension);\n } else {\n parts.push('pem');\n }\n break;\n }\n }\n\n return parts.join('.');\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createPrivateKey } from 'node:crypto';\nimport type { KeyPairOptions } from '../type';\n\nexport function decryptRSAPrivateKey(\n context: KeyPairOptions,\n key: string | Buffer,\n) : string {\n const privateKey = createPrivateKey({\n type: context.privateKeyEncoding.type,\n format: context.privateKeyEncoding.format,\n key,\n passphrase: context.privateKeyEncoding.passphrase || context.passphrase,\n });\n\n let content = privateKey.export({\n type: context.privateKeyEncoding.type,\n format: context.privateKeyEncoding.format,\n });\n\n if (typeof content !== 'string') {\n content = Buffer.from(content).toString('utf-8');\n }\n\n return content;\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\nfunction wrapPem(\n type: 'PRIVATE KEY' | 'PUBLIC KEY',\n input: string | ArrayBuffer | Buffer,\n) {\n if (typeof input !== 'string') {\n input = Buffer.from(input).toString('base64');\n }\n\n return `-----BEGIN ${type}-----\\n${input}\\n-----END ${type}-----`;\n}\n\nexport function wrapPrivateKeyPem(input: string | ArrayBuffer | Buffer) {\n return wrapPem('PRIVATE KEY', input);\n}\n\nexport function wrapPublicKeyPem(input: string | ArrayBuffer | Buffer) {\n return wrapPem('PUBLIC KEY', input);\n}\n\n// ------------------------------------------------------------\n\nfunction unwrapPem(\n type: 'PRIVATE KEY' | 'PUBLIC KEY',\n input: string,\n) {\n if (typeof input !== 'string') {\n input = Buffer.from(input).toString('base64');\n }\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 unwrapPrivateKeyPem(input: string) {\n return unwrapPem('PRIVATE KEY', input);\n}\n\nexport function unwrapPublicKeyPem(input: string) {\n return unwrapPem('PUBLIC KEY', input);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { buildKeyFileName, extendKeyPairOptions } from './helpers';\nimport { KeyPairKind } from './constants';\n\nexport async function saveKeyPair(keyPair: KeyPair, context?: KeyPairOptions) : Promise<KeyPair> {\n context = extendKeyPairOptions(context);\n\n await fs.promises.mkdir(context.directory, { recursive: true });\n\n await Promise.all(\n [\n {\n path: path.resolve(context.directory, buildKeyFileName(KeyPairKind.PRIVATE, context)),\n content: keyPair.privateKey,\n },\n {\n path: path.resolve(context.directory, buildKeyFileName(KeyPairKind.PUBLIC, context)),\n content: keyPair.publicKey,\n },\n ]\n .map((file) => fs.promises.writeFile(file.path, file.content)),\n );\n\n return keyPair;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { generateKeyPair } from 'node:crypto';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { decryptRSAPrivateKey, extendKeyPairOptions } from './helpers';\nimport { saveKeyPair } from './save';\n\nexport async function createKeyPair(context?: Partial<KeyPairOptions>) : Promise<KeyPair> {\n const options = extendKeyPairOptions(context);\n\n const keyPair : KeyPair = await new Promise((resolve: (value: KeyPair) => void, reject) => {\n const callback = (err: (Error | null), publicKey: string, privateKey: string) => {\n if (err) reject(err);\n\n resolve({\n privateKey,\n publicKey,\n });\n };\n switch (options.type) {\n case 'dsa':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'ec':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'rsa':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'rsa-pss':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n }\n });\n\n if (options.save) {\n await saveKeyPair(keyPair, options);\n }\n\n if (\n options.passphrase ||\n options.privateKeyEncoding.passphrase\n ) {\n keyPair.privateKey = decryptRSAPrivateKey(\n options,\n keyPair.privateKey,\n );\n }\n\n return keyPair;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { KeyPairOptions } from './type';\nimport { buildKeyFileName, extendKeyPairOptions } from './helpers';\nimport { KeyPairKind } from './constants';\n\nexport async function deleteKeyPair(context?: Partial<KeyPairOptions>) : Promise<void> {\n const options = extendKeyPairOptions(context);\n\n const privateKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PRIVATE, options));\n const publicKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PUBLIC, options));\n\n try {\n await Promise.all([privateKeyPath, publicKeyPath]\n .map((filePath) => fs.promises.stat(filePath)));\n } catch (e) {\n return;\n }\n\n await Promise.all([\n privateKeyPath,\n publicKeyPath,\n ].map((filePath) => fs.promises.rm(filePath)));\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createPublicKey } from 'node:crypto';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { buildKeyFileName, decryptRSAPrivateKey, extendKeyPairOptions } from './helpers';\nimport { KeyPairKind } from './constants';\nimport { saveKeyPair } from './save';\n\nexport async function loadKeyPair(context?: Partial<KeyPairOptions>) : Promise<KeyPair | undefined> {\n const options = extendKeyPairOptions(context);\n\n const privateKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PRIVATE, options));\n\n try {\n await fs.promises.stat(privateKeyPath);\n } catch (e) {\n return undefined;\n }\n\n const privateKeyBuffer = await fs.promises.readFile(privateKeyPath);\n let privateKey = privateKeyBuffer.toString();\n if (\n options.passphrase ||\n options.privateKeyEncoding.passphrase\n ) {\n privateKey = decryptRSAPrivateKey(\n options,\n privateKey,\n );\n }\n\n const publicKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PUBLIC, options));\n\n let publicKey : string;\n\n try {\n await fs.promises.stat(publicKeyPath);\n const publicKeyBuffer = await fs.promises.readFile(publicKeyPath);\n publicKey = publicKeyBuffer.toString();\n } catch (e) {\n const publicKeyObject = createPublicKey({\n key: privateKey,\n format: options.privateKeyEncoding.format,\n type: options.publicKeyEncoding.type,\n });\n\n const stringOrBuffer = publicKeyObject.export({\n format: options.publicKeyEncoding.format,\n type: options.publicKeyEncoding.type,\n });\n if (typeof stringOrBuffer !== 'string') {\n publicKey = stringOrBuffer.toString();\n } else {\n publicKey = stringOrBuffer;\n }\n\n if (options.save) {\n await saveKeyPair({\n privateKey,\n publicKey,\n }, options);\n }\n }\n\n return {\n privateKey,\n publicKey,\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { extendKeyPairOptions } from './helpers';\nimport { loadKeyPair } from './load';\nimport { createKeyPair } from './create';\n\nconst keyPairCache : Record<string, KeyPair> = {};\n\nexport async function useKeyPair(value?: Partial<KeyPairOptions> | string) : Promise<KeyPair> {\n let options : KeyPairOptions;\n\n if (typeof value === 'string') {\n options = extendKeyPairOptions({\n privateName: value,\n });\n } else {\n options = extendKeyPairOptions(value || {});\n }\n\n if (Object.prototype.hasOwnProperty.call(keyPairCache, options.privateName)) {\n return keyPairCache[options.privateName];\n }\n\n let keyPair = await loadKeyPair(options);\n if (typeof keyPair === 'undefined') {\n keyPair = await createKeyPair(options);\n }\n\n keyPairCache[options.privateName] = keyPair;\n\n return keyPair;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { JWTClaims, JWTHeader } from '@authup/kit';\nimport { TokenError } from '@authup/kit';\n\n/**\n * Decode a JWT token with no verification.\n *\n * @param token\n *\n * @throws TokenError\n */\nexport function extractTokenHeader(\n token: string,\n) : JWTHeader {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw TokenError.payloadInvalid('The token format is not valid.');\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 TokenError.headerInvalid('The token header could not be extracted.');\n }\n}\n\nexport function extractTokenPayload(\n token: string,\n) : JWTClaims {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw TokenError.payloadInvalid('The token format is not valid.');\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 TokenError.payloadInvalid('The token payload could not be extracted.');\n }\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { JWTAlgorithm, TokenError } from '@authup/kit';\nimport { Algorithm } from '@node-rs/jsonwebtoken';\nimport { isObject } from 'smob';\n\nexport function createErrorForJWTError(e: unknown) : TokenError {\n if (isObject(e)) {\n if (typeof e.name === 'string') {\n switch (e.name) {\n case 'TokenExpiredError': {\n return TokenError.expired();\n }\n case 'NotBeforeError': {\n if (typeof e.date === 'string' || e.date instanceof Date) {\n return TokenError.notActiveBefore(e.date);\n }\n break;\n }\n case 'JsonWebTokenError': {\n if (typeof e.message === 'string') {\n return TokenError.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 TokenError.expired();\n }\n case 'ImmatureSignature': {\n return TokenError.notActiveBefore();\n }\n case 'InvalidToken':\n case 'InvalidSignature': {\n return TokenError.payloadInvalid();\n }\n }\n }\n\n return new TokenError({\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 type { JWTClaims } from '@authup/kit';\nimport { JWKType, TokenError } from '@authup/kit';\nimport { Algorithm, sign } from '@node-rs/jsonwebtoken';\nimport { isKeyPair, useKeyPair } from '../../key-pair';\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 const { privateKey } = isKeyPair(context.keyPair) ?\n context.keyPair :\n await useKeyPair(context.keyPair);\n\n let algorithm : Algorithm;\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, privateKey, {\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 return sign(claims, context.key, {\n algorithm,\n keyId: context.keyId,\n });\n }\n }\n\n throw new TokenError();\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, TokenError } from '@authup/kit';\nimport type { JWTClaims, OAuth2TokenPayload } from '@authup/kit';\nimport { Algorithm, verify } from '@node-rs/jsonwebtoken';\nimport { isKeyPairWithPublicKey, useKeyPair } from '../../key-pair';\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 TokenError\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 const { publicKey } = isKeyPairWithPublicKey(context.keyPair) ?\n context.keyPair :\n await useKeyPair(context.keyPair);\n\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 promise = verify(token, publicKey, {\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 promise = verify(token, context.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 TokenError({ message: 'Invalid type.' });\n }\n\n return output as OAuth2TokenPayload;\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 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 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 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.\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.\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.\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.\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 * as process from 'node:process';\nimport type { LoggerOptions } from 'winston';\nimport { createLogger as create, format, transports } 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, 'access.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 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.\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.\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.\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-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } 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-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildEventFullName } from '@authup/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.\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/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.\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","KeyPairKind","isKeyPair","data","isObject","privateKey","publicKey","isKeyPairWithPublicKey","extendKeyPairOptions","options","directory","process","cwd","path","isAbsolute","resolve","type","modulusLength","privateKeyEncoding","format","publicKeyEncoding","passphrase","cipher","buildKeyFileName","context","parts","PRIVATE","privateName","push","privateExtension","startsWith","slice","PUBLIC","publicName","publicExtension","join","decryptRSAPrivateKey","key","createPrivateKey","content","export","Buffer","from","toString","wrapPem","input","wrapPrivateKeyPem","wrapPublicKeyPem","unwrapPem","replace","unwrapPrivateKeyPem","unwrapPublicKeyPem","saveKeyPair","keyPair","fs","promises","mkdir","recursive","Promise","all","map","file","writeFile","createKeyPair","reject","callback","err","generateKeyPair","save","deleteKeyPair","privateKeyPath","publicKeyPath","filePath","stat","e","rm","loadKeyPair","undefined","privateKeyBuffer","readFile","publicKeyBuffer","publicKeyObject","createPublicKey","stringOrBuffer","keyPairCache","useKeyPair","Object","prototype","hasOwnProperty","call","extractTokenHeader","token","split","length","TokenError","payloadInvalid","headerBase64","payload","atob","JSON","parse","headerInvalid","extractTokenPayload","payloadBase64","createErrorForJWTError","name","expired","date","Date","notActiveBefore","message","cause","logMessage","transformJWTAlgorithmToInternal","algorithm","JWTAlgorithm","HS256","Algorithm","HS384","HS512","RS256","RS384","RS512","ES256","ES384","PS256","PS384","PS512","Error","getUtcTimestamp","Math","floor","getTime","signToken","claims","exp","iat","JWKType","RSA","EC","sign","keyId","OCT","verifyToken","promise","output","algorithms","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","constructor","TTLCache","checkAgeOnGet","Infinity","RedisCacheAdapter","milliseconds","pipeline","client","del","exec","flushdb","JsonAdapter","createCacheAdapter","buildCacheKey","buildRedisKeyPath","Cache","adapter","useCache","createLogger","items","env","transports","Console","level","File","filename","maxsize","maxFiles","create","combine","errors","stack","timestamp","colorize","simple","setLoggerFactory","isLoggerUsable","setLogger","useLogger","setVaultFactory","isVaultClientUsable","useVaultClient","transformDomainEventData","toISOString","buildDomainEventChannelName","id","DomainEventRedisPublisher","publish","ctx","stringify","driver","destinations","namespace","keyPrefix","channel","DomainEventSocketPublisher","emitter","of","roomName","fullEventName","buildEventFullName","event","in","emit","meta","roomId","Emitter","DomainEventPublisher","publishers","values","it","Set","add","obj","prop"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/crypto/hash/compare.ts","../src/crypto/hash/hash.ts","../src/crypto/key-pair/constants.ts","../src/crypto/key-pair/helpers/check.ts","../src/crypto/key-pair/helpers/options.ts","../src/crypto/key-pair/helpers/file-name.ts","../src/crypto/key-pair/helpers/private-key.ts","../src/crypto/key-pair/helpers/wrap.ts","../src/crypto/key-pair/save.ts","../src/crypto/key-pair/create.ts","../src/crypto/key-pair/delete.ts","../src/crypto/key-pair/load.ts","../src/crypto/key-pair/module.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 KeyPairKind {\n PRIVATE = 'private',\n PUBLIC = 'public',\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 { isObject } from '@authup/kit';\nimport type { KeyPair } from '../type';\n\nexport function isKeyPair(data: unknown) : data is KeyPair {\n return isObject(data) &&\n typeof (data as KeyPair).privateKey !== 'undefined' &&\n typeof (data as KeyPair).publicKey !== 'undefined';\n}\n\nexport function isKeyPairWithPublicKey(data: unknown) : data is Omit<KeyPair, 'privateKey'> {\n return isObject(data) &&\n typeof (data as KeyPair).publicKey !== 'undefined';\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 type { KeyPairOptions } from '../type';\n\nexport function extendKeyPairOptions(\n options?: Partial<KeyPairOptions>,\n) : KeyPairOptions {\n options = options ?? {};\n\n options.directory = options.directory || process.cwd();\n options.directory = path.isAbsolute(options.directory) ?\n options.directory :\n path.resolve(process.cwd(), options.directory);\n\n options.type ??= 'rsa';\n\n if (\n options.type === 'rsa' ||\n options.type === 'rsa-pss' ||\n options.type === 'dsa'\n ) {\n options.modulusLength = 2048;\n }\n\n if (!options.privateKeyEncoding) {\n options.privateKeyEncoding = {\n type: 'pkcs8',\n format: 'pem',\n };\n }\n\n if (!options.publicKeyEncoding) {\n options.publicKeyEncoding = {\n type: 'spki',\n format: 'pem',\n };\n }\n\n if (\n options.privateKeyEncoding.passphrase &&\n !options.privateKeyEncoding.cipher\n ) {\n options.privateKeyEncoding.cipher = 'aes-256-cbc';\n }\n\n return options as KeyPairOptions;\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 { KeyPairKind } from '../constants';\nimport type { KeyPairOptions } from '../type';\nimport { extendKeyPairOptions } from './options';\n\nexport function buildKeyFileName(\n type: `${KeyPairKind}`,\n context?: Partial<KeyPairOptions>,\n) {\n const options = extendKeyPairOptions(context);\n\n const parts : string[] = [];\n\n switch (type) {\n case KeyPairKind.PRIVATE: {\n if (options.privateName) {\n parts.push(options.privateName);\n } else {\n parts.push(type);\n }\n\n if (options.privateExtension) {\n if (options.privateExtension.startsWith('.')) {\n options.privateExtension = options.privateExtension.slice(1);\n }\n\n parts.push(options.privateExtension);\n } else {\n parts.push('pem');\n }\n break;\n }\n case KeyPairKind.PUBLIC: {\n if (options.publicName) {\n parts.push(options.publicName);\n } else {\n parts.push(type);\n }\n\n if (options.publicExtension) {\n if (options.publicExtension.startsWith('.')) {\n options.publicExtension = options.publicExtension.slice(1);\n }\n\n parts.push(options.publicExtension);\n } else {\n parts.push('pem');\n }\n break;\n }\n }\n\n return parts.join('.');\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 { createPrivateKey } from 'node:crypto';\nimport type { KeyPairOptions } from '../type';\n\nexport function decryptRSAPrivateKey(\n context: KeyPairOptions,\n key: string | Buffer,\n) : string {\n const privateKey = createPrivateKey({\n type: context.privateKeyEncoding.type,\n format: context.privateKeyEncoding.format,\n key,\n passphrase: context.privateKeyEncoding.passphrase || context.passphrase,\n });\n\n let content = privateKey.export({\n type: context.privateKeyEncoding.type,\n format: context.privateKeyEncoding.format,\n });\n\n if (typeof content !== 'string') {\n content = Buffer.from(content).toString('utf-8');\n }\n\n return content;\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 wrapPem(\n type: 'PRIVATE KEY' | 'PUBLIC KEY',\n input: string | ArrayBuffer | Buffer,\n) {\n if (typeof input !== 'string') {\n input = Buffer.from(input).toString('base64');\n }\n\n return `-----BEGIN ${type}-----\\n${input}\\n-----END ${type}-----`;\n}\n\nexport function wrapPrivateKeyPem(input: string | ArrayBuffer | Buffer) {\n return wrapPem('PRIVATE KEY', input);\n}\n\nexport function wrapPublicKeyPem(input: string | ArrayBuffer | Buffer) {\n return wrapPem('PUBLIC KEY', input);\n}\n\n// ------------------------------------------------------------\n\nfunction unwrapPem(\n type: 'PRIVATE KEY' | 'PUBLIC KEY',\n input: string,\n) {\n if (typeof input !== 'string') {\n input = Buffer.from(input).toString('base64');\n }\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 unwrapPrivateKeyPem(input: string) {\n return unwrapPem('PRIVATE KEY', input);\n}\n\nexport function unwrapPublicKeyPem(input: string) {\n return unwrapPem('PUBLIC KEY', input);\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 fs from 'node:fs';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { buildKeyFileName, extendKeyPairOptions } from './helpers';\nimport { KeyPairKind } from './constants';\n\nexport async function saveKeyPair(keyPair: KeyPair, context?: KeyPairOptions) : Promise<KeyPair> {\n context = extendKeyPairOptions(context);\n\n await fs.promises.mkdir(context.directory, { recursive: true });\n\n await Promise.all(\n [\n {\n path: path.resolve(context.directory, buildKeyFileName(KeyPairKind.PRIVATE, context)),\n content: keyPair.privateKey,\n },\n {\n path: path.resolve(context.directory, buildKeyFileName(KeyPairKind.PUBLIC, context)),\n content: keyPair.publicKey,\n },\n ]\n .map((file) => fs.promises.writeFile(file.path, file.content)),\n );\n\n return keyPair;\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 { generateKeyPair } from 'node:crypto';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { decryptRSAPrivateKey, extendKeyPairOptions } from './helpers';\nimport { saveKeyPair } from './save';\n\nexport async function createKeyPair(context?: Partial<KeyPairOptions>) : Promise<KeyPair> {\n const options = extendKeyPairOptions(context);\n\n const keyPair : KeyPair = await new Promise((resolve: (value: KeyPair) => void, reject) => {\n const callback = (err: (Error | null), publicKey: string, privateKey: string) => {\n if (err) reject(err);\n\n resolve({\n privateKey,\n publicKey,\n });\n };\n switch (options.type) {\n case 'dsa':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'ec':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'rsa':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'rsa-pss':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n }\n });\n\n if (options.save) {\n await saveKeyPair(keyPair, options);\n }\n\n if (\n options.passphrase ||\n options.privateKeyEncoding.passphrase\n ) {\n keyPair.privateKey = decryptRSAPrivateKey(\n options,\n keyPair.privateKey,\n );\n }\n\n return keyPair;\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 fs from 'node:fs';\nimport type { KeyPairOptions } from './type';\nimport { buildKeyFileName, extendKeyPairOptions } from './helpers';\nimport { KeyPairKind } from './constants';\n\nexport async function deleteKeyPair(context?: Partial<KeyPairOptions>) : Promise<void> {\n const options = extendKeyPairOptions(context);\n\n const privateKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PRIVATE, options));\n const publicKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PUBLIC, options));\n\n try {\n await Promise.all([privateKeyPath, publicKeyPath]\n .map((filePath) => fs.promises.stat(filePath)));\n } catch (e) {\n return;\n }\n\n await Promise.all([\n privateKeyPath,\n publicKeyPath,\n ].map((filePath) => fs.promises.rm(filePath)));\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 { createPublicKey } from 'node:crypto';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { buildKeyFileName, decryptRSAPrivateKey, extendKeyPairOptions } from './helpers';\nimport { KeyPairKind } from './constants';\nimport { saveKeyPair } from './save';\n\nexport async function loadKeyPair(context?: Partial<KeyPairOptions>) : Promise<KeyPair | undefined> {\n const options = extendKeyPairOptions(context);\n\n const privateKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PRIVATE, options));\n\n try {\n await fs.promises.stat(privateKeyPath);\n } catch (e) {\n return undefined;\n }\n\n const privateKeyBuffer = await fs.promises.readFile(privateKeyPath);\n let privateKey = privateKeyBuffer.toString();\n if (\n options.passphrase ||\n options.privateKeyEncoding.passphrase\n ) {\n privateKey = decryptRSAPrivateKey(\n options,\n privateKey,\n );\n }\n\n const publicKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PUBLIC, options));\n\n let publicKey : string;\n\n try {\n await fs.promises.stat(publicKeyPath);\n const publicKeyBuffer = await fs.promises.readFile(publicKeyPath);\n publicKey = publicKeyBuffer.toString();\n } catch (e) {\n const publicKeyObject = createPublicKey({\n key: privateKey,\n format: options.privateKeyEncoding.format,\n type: options.publicKeyEncoding.type,\n });\n\n const stringOrBuffer = publicKeyObject.export({\n format: options.publicKeyEncoding.format,\n type: options.publicKeyEncoding.type,\n });\n if (typeof stringOrBuffer !== 'string') {\n publicKey = stringOrBuffer.toString();\n } else {\n publicKey = stringOrBuffer;\n }\n\n if (options.save) {\n await saveKeyPair({\n privateKey,\n publicKey,\n }, options);\n }\n }\n\n return {\n privateKey,\n publicKey,\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 */\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { extendKeyPairOptions } from './helpers';\nimport { loadKeyPair } from './load';\nimport { createKeyPair } from './create';\n\nconst keyPairCache : Record<string, KeyPair> = {};\n\nexport async function useKeyPair(value?: Partial<KeyPairOptions> | string) : Promise<KeyPair> {\n let options : KeyPairOptions;\n\n if (typeof value === 'string') {\n options = extendKeyPairOptions({\n privateName: value,\n });\n } else {\n options = extendKeyPairOptions(value || {});\n }\n\n if (Object.prototype.hasOwnProperty.call(keyPairCache, options.privateName)) {\n return keyPairCache[options.privateName];\n }\n\n let keyPair = await loadKeyPair(options);\n if (typeof keyPair === 'undefined') {\n keyPair = await createKeyPair(options);\n }\n\n keyPairCache[options.privateName] = keyPair;\n\n return keyPair;\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/kit';\nimport { TokenError } from '@authup/kit';\n\n/**\n * Decode a JWT token with no verification.\n *\n * @param token\n *\n * @throws TokenError\n */\nexport function extractTokenHeader(\n token: string,\n) : JWTHeader {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw TokenError.payloadInvalid('The token format is not valid.');\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 TokenError.headerInvalid('The token header could not be extracted.');\n }\n}\n\nexport function extractTokenPayload(\n token: string,\n) : JWTClaims {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw TokenError.payloadInvalid('The token format is not valid.');\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 TokenError.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, TokenError } from '@authup/kit';\nimport { Algorithm } from '@node-rs/jsonwebtoken';\nimport { isObject } from 'smob';\n\nexport function createErrorForJWTError(e: unknown) : TokenError {\n if (isObject(e)) {\n if (typeof e.name === 'string') {\n switch (e.name) {\n case 'TokenExpiredError': {\n return TokenError.expired();\n }\n case 'NotBeforeError': {\n if (typeof e.date === 'string' || e.date instanceof Date) {\n return TokenError.notActiveBefore(e.date);\n }\n break;\n }\n case 'JsonWebTokenError': {\n if (typeof e.message === 'string') {\n return TokenError.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 TokenError.expired();\n }\n case 'ImmatureSignature': {\n return TokenError.notActiveBefore();\n }\n case 'InvalidToken':\n case 'InvalidSignature': {\n return TokenError.payloadInvalid();\n }\n }\n }\n\n return new TokenError({\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 type { JWTClaims } from '@authup/kit';\nimport { JWKType, TokenError } from '@authup/kit';\nimport { Algorithm, sign } from '@node-rs/jsonwebtoken';\nimport { isKeyPair, useKeyPair } from '../../key-pair';\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 const { privateKey } = isKeyPair(context.keyPair) ?\n context.keyPair :\n await useKeyPair(context.keyPair);\n\n let algorithm : Algorithm;\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, privateKey, {\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 return sign(claims, context.key, {\n algorithm,\n keyId: context.keyId,\n });\n }\n }\n\n throw new TokenError();\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, TokenError } from '@authup/kit';\nimport type { JWTClaims, OAuth2TokenPayload } from '@authup/kit';\nimport { Algorithm, verify } from '@node-rs/jsonwebtoken';\nimport { isKeyPairWithPublicKey, useKeyPair } from '../../key-pair';\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 TokenError\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 const { publicKey } = isKeyPairWithPublicKey(context.keyPair) ?\n context.keyPair :\n await useKeyPair(context.keyPair);\n\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 promise = verify(token, publicKey, {\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 promise = verify(token, context.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 TokenError({ 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 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 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 * as process from 'node:process';\nimport type { LoggerOptions } from 'winston';\nimport { createLogger as create, format, transports } 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, 'access.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 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/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/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","KeyPairKind","isKeyPair","data","isObject","privateKey","publicKey","isKeyPairWithPublicKey","extendKeyPairOptions","options","directory","process","cwd","path","isAbsolute","resolve","type","modulusLength","privateKeyEncoding","format","publicKeyEncoding","passphrase","cipher","buildKeyFileName","context","parts","PRIVATE","privateName","push","privateExtension","startsWith","slice","PUBLIC","publicName","publicExtension","join","decryptRSAPrivateKey","key","createPrivateKey","content","export","Buffer","from","toString","wrapPem","input","wrapPrivateKeyPem","wrapPublicKeyPem","unwrapPem","replace","unwrapPrivateKeyPem","unwrapPublicKeyPem","saveKeyPair","keyPair","fs","promises","mkdir","recursive","Promise","all","map","file","writeFile","createKeyPair","reject","callback","err","generateKeyPair","save","deleteKeyPair","privateKeyPath","publicKeyPath","filePath","stat","e","rm","loadKeyPair","undefined","privateKeyBuffer","readFile","publicKeyBuffer","publicKeyObject","createPublicKey","stringOrBuffer","keyPairCache","useKeyPair","Object","prototype","hasOwnProperty","call","extractTokenHeader","token","split","length","TokenError","payloadInvalid","headerBase64","payload","atob","JSON","parse","headerInvalid","extractTokenPayload","payloadBase64","createErrorForJWTError","name","expired","date","Date","notActiveBefore","message","cause","logMessage","transformJWTAlgorithmToInternal","algorithm","JWTAlgorithm","HS256","Algorithm","HS384","HS512","RS256","RS384","RS512","ES256","ES384","PS256","PS384","PS512","Error","getUtcTimestamp","Math","floor","getTime","signToken","claims","exp","iat","JWKType","RSA","EC","sign","keyId","OCT","verifyToken","promise","output","algorithms","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","constructor","TTLCache","checkAgeOnGet","Infinity","RedisCacheAdapter","milliseconds","pipeline","client","del","exec","flushdb","JsonAdapter","createCacheAdapter","buildCacheKey","buildRedisKeyPath","Cache","adapter","useCache","createLogger","items","env","transports","Console","level","File","filename","maxsize","maxFiles","create","combine","errors","stack","timestamp","colorize","simple","setLoggerFactory","isLoggerUsable","setLogger","useLogger","setVaultFactory","isVaultClientUsable","useVaultClient","transformDomainEventData","toISOString","buildDomainEventChannelName","id","DomainEventRedisPublisher","publish","ctx","stringify","driver","destinations","namespace","keyPrefix","channel","DomainEventSocketPublisher","emitter","of","roomName","fullEventName","buildEventFullName","event","in","emit","meta","roomId","Emitter","DomainEventPublisher","publishers","values","it","Set","add","obj","prop"],"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,WAAAA,iBAAAA,SAAAA,WAAAA,EAAAA;;;AAAAA,IAAAA,OAAAA,WAAAA;AAGX,CAAA,CAAA,EAAA;;ACAM,SAASC,UAAUC,IAAa,EAAA;AACnC,IAAA,OAAOC,QAASD,CAAAA,IAAAA,CAAAA,IACZ,OAAQA,IAAiBE,CAAAA,UAAU,KAAK,WAAA,IACxC,OAAQF,IAAiBG,CAAAA,SAAS,KAAK,WAAA;AAC/C;AAEO,SAASC,uBAAuBJ,IAAa,EAAA;AAChD,IAAA,OAAOC,SAASD,IACZ,CAAA,IAAA,OAAO,IAACA,CAAiBG,SAAS,KAAK,WAAA;AAC/C;;ACTO,SAASE,qBACZC,OAAiC,EAAA;AASjCA,IAAAA,IAAAA,QAAAA;AAPAA,IAAAA,OAAAA,GAAUA,WAAW,EAAC;AAEtBA,IAAAA,OAAAA,CAAQC,SAAS,GAAGD,OAAAA,CAAQC,SAAS,IAAIC,QAAQC,GAAG,EAAA;AACpDH,IAAAA,OAAAA,CAAQC,SAAS,GAAGG,IAAAA,CAAKC,UAAU,CAACL,OAAAA,CAAQC,SAAS,CACjDD,GAAAA,OAAAA,CAAQC,SAAS,GACjBG,KAAKE,OAAO,CAACJ,QAAQC,GAAG,EAAA,EAAIH,QAAQC,SAAS,CAAA;AAEjDD,IAAAA,CAAAA,QAAAA,GAAAA,OAAAA,EAAQO,IAARP,KAAAA,QAAAA,CAAQO,IAAS,GAAA,KAAA,CAAA;IAEjB,IACIP,OAAAA,CAAQO,IAAI,KAAK,KACjBP,IAAAA,OAAAA,CAAQO,IAAI,KAAK,SACjBP,IAAAA,OAAAA,CAAQO,IAAI,KAAK,KACnB,EAAA;AACEP,QAAAA,OAAAA,CAAQQ,aAAa,GAAG,IAAA;AAC5B;IAEA,IAAI,CAACR,OAAQS,CAAAA,kBAAkB,EAAE;AAC7BT,QAAAA,OAAAA,CAAQS,kBAAkB,GAAG;YACzBF,IAAM,EAAA,OAAA;YACNG,MAAQ,EAAA;AACZ,SAAA;AACJ;IAEA,IAAI,CAACV,OAAQW,CAAAA,iBAAiB,EAAE;AAC5BX,QAAAA,OAAAA,CAAQW,iBAAiB,GAAG;YACxBJ,IAAM,EAAA,MAAA;YACNG,MAAQ,EAAA;AACZ,SAAA;AACJ;IAEA,IACIV,OAAAA,CAAQS,kBAAkB,CAACG,UAAU,IACrC,CAACZ,OAAQS,CAAAA,kBAAkB,CAACI,MAAM,EACpC;QACEb,OAAQS,CAAAA,kBAAkB,CAACI,MAAM,GAAG,aAAA;AACxC;IAEA,OAAOb,OAAAA;AACX;;ACzCO,SAASc,gBAAAA,CACZP,IAAsB,EACtBQ,OAAiC,EAAA;AAEjC,IAAA,MAAMf,UAAUD,oBAAqBgB,CAAAA,OAAAA,CAAAA;AAErC,IAAA,MAAMC,QAAmB,EAAE;IAE3B,OAAQT,IAAAA;AACJ,QAAA,KAAKf,YAAYyB,OAAO;AAAE,YAAA;gBACtB,IAAIjB,OAAAA,CAAQkB,WAAW,EAAE;oBACrBF,KAAMG,CAAAA,IAAI,CAACnB,OAAAA,CAAQkB,WAAW,CAAA;iBAC3B,MAAA;AACHF,oBAAAA,KAAAA,CAAMG,IAAI,CAACZ,IAAAA,CAAAA;AACf;gBAEA,IAAIP,OAAAA,CAAQoB,gBAAgB,EAAE;AAC1B,oBAAA,IAAIpB,OAAQoB,CAAAA,gBAAgB,CAACC,UAAU,CAAC,GAAM,CAAA,EAAA;AAC1CrB,wBAAAA,OAAAA,CAAQoB,gBAAgB,GAAGpB,OAAAA,CAAQoB,gBAAgB,CAACE,KAAK,CAAC,CAAA,CAAA;AAC9D;oBAEAN,KAAMG,CAAAA,IAAI,CAACnB,OAAAA,CAAQoB,gBAAgB,CAAA;iBAChC,MAAA;AACHJ,oBAAAA,KAAAA,CAAMG,IAAI,CAAC,KAAA,CAAA;AACf;AACA,gBAAA;AACJ;AACA,QAAA,KAAK3B,YAAY+B,MAAM;AAAE,YAAA;gBACrB,IAAIvB,OAAAA,CAAQwB,UAAU,EAAE;oBACpBR,KAAMG,CAAAA,IAAI,CAACnB,OAAAA,CAAQwB,UAAU,CAAA;iBAC1B,MAAA;AACHR,oBAAAA,KAAAA,CAAMG,IAAI,CAACZ,IAAAA,CAAAA;AACf;gBAEA,IAAIP,OAAAA,CAAQyB,eAAe,EAAE;AACzB,oBAAA,IAAIzB,OAAQyB,CAAAA,eAAe,CAACJ,UAAU,CAAC,GAAM,CAAA,EAAA;AACzCrB,wBAAAA,OAAAA,CAAQyB,eAAe,GAAGzB,OAAAA,CAAQyB,eAAe,CAACH,KAAK,CAAC,CAAA,CAAA;AAC5D;oBAEAN,KAAMG,CAAAA,IAAI,CAACnB,OAAAA,CAAQyB,eAAe,CAAA;iBAC/B,MAAA;AACHT,oBAAAA,KAAAA,CAAMG,IAAI,CAAC,KAAA,CAAA;AACf;AACA,gBAAA;AACJ;AACJ;IAEA,OAAOH,KAAAA,CAAMU,IAAI,CAAC,GAAA,CAAA;AACtB;;ACjDO,SAASC,oBAAAA,CACZZ,OAAuB,EACvBa,GAAoB,EAAA;AAEpB,IAAA,MAAMhC,aAAaiC,gBAAiB,CAAA;QAChCtB,IAAMQ,EAAAA,OAAAA,CAAQN,kBAAkB,CAACF,IAAI;QACrCG,MAAQK,EAAAA,OAAAA,CAAQN,kBAAkB,CAACC,MAAM;AACzCkB,QAAAA,GAAAA;AACAhB,QAAAA,UAAAA,EAAYG,QAAQN,kBAAkB,CAACG,UAAU,IAAIG,QAAQH;AACjE,KAAA,CAAA;IAEA,IAAIkB,OAAAA,GAAUlC,UAAWmC,CAAAA,MAAM,CAAC;QAC5BxB,IAAMQ,EAAAA,OAAAA,CAAQN,kBAAkB,CAACF,IAAI;QACrCG,MAAQK,EAAAA,OAAAA,CAAQN,kBAAkB,CAACC;AACvC,KAAA,CAAA;IAEA,IAAI,OAAOoB,YAAY,QAAU,EAAA;AAC7BA,QAAAA,OAAAA,GAAUE,MAAOC,CAAAA,IAAI,CAACH,OAAAA,CAAAA,CAASI,QAAQ,CAAC,OAAA,CAAA;AAC5C;IAEA,OAAOJ,OAAAA;AACX;;AC/BA;;;;;AAKC,IAED,SAASK,OAAAA,CACL5B,IAAkC,EAClC6B,KAAoC,EAAA;IAEpC,IAAI,OAAOA,UAAU,QAAU,EAAA;AAC3BA,QAAAA,KAAAA,GAAQJ,MAAOC,CAAAA,IAAI,CAACG,KAAAA,CAAAA,CAAOF,QAAQ,CAAC,QAAA,CAAA;AACxC;IAEA,OAAO,CAAC,WAAW,EAAE3B,IAAK,CAAA,OAAO,EAAE6B,KAAAA,CAAM,WAAW,EAAE7B,IAAK,CAAA,KAAK,CAAC;AACrE;AAEO,SAAS8B,kBAAkBD,KAAoC,EAAA;AAClE,IAAA,OAAOD,QAAQ,aAAeC,EAAAA,KAAAA,CAAAA;AAClC;AAEO,SAASE,iBAAiBF,KAAoC,EAAA;AACjE,IAAA,OAAOD,QAAQ,YAAcC,EAAAA,KAAAA,CAAAA;AACjC;AAEA;AAEA,SAASG,SAAAA,CACLhC,IAAkC,EAClC6B,KAAa,EAAA;IAEb,IAAI,OAAOA,UAAU,QAAU,EAAA;AAC3BA,QAAAA,KAAAA,GAAQJ,MAAOC,CAAAA,IAAI,CAACG,KAAAA,CAAAA,CAAOF,QAAQ,CAAC,QAAA,CAAA;AACxC;IAEAE,KAAQA,GAAAA,KAAAA,CAAMI,OAAO,CAAC,CAAC,WAAW,EAAEjC,IAAAA,CAAK,OAAO,CAAC,EAAE,EAAA,CAAA;IAEnD6B,KAAQA,GAAAA,KAAAA,CAAMI,OAAO,CAAC,CAAC,WAAW,EAAEjC,IAAAA,CAAK,OAAO,CAAC,EAAE,EAAA,CAAA;IACnD6B,KAAQA,GAAAA,KAAAA,CAAMI,OAAO,CAAC,CAAC,SAAS,EAAEjC,IAAAA,CAAK,OAAO,CAAC,EAAE,EAAA,CAAA;IACjD6B,KAAQA,GAAAA,KAAAA,CAAMI,OAAO,CAAC,CAAC,WAAW,EAAEjC,IAAAA,CAAK,KAAK,CAAC,EAAE,EAAA,CAAA;IAEjD,OAAO6B,KAAAA;AACX;AAEO,SAASK,oBAAoBL,KAAa,EAAA;AAC7C,IAAA,OAAOG,UAAU,aAAeH,EAAAA,KAAAA,CAAAA;AACpC;AAEO,SAASM,mBAAmBN,KAAa,EAAA;AAC5C,IAAA,OAAOG,UAAU,YAAcH,EAAAA,KAAAA,CAAAA;AACnC;;ACtCO,eAAeO,WAAAA,CAAYC,OAAgB,EAAE7B,OAAwB,EAAA;AACxEA,IAAAA,OAAAA,GAAUhB,oBAAqBgB,CAAAA,OAAAA,CAAAA;AAE/B,IAAA,MAAM8B,GAAGC,QAAQ,CAACC,KAAK,CAAChC,OAAAA,CAAQd,SAAS,EAAE;QAAE+C,SAAW,EAAA;AAAK,KAAA,CAAA;IAE7D,MAAMC,OAAAA,CAAQC,GAAG,CACb;AACI,QAAA;YACI9C,IAAMA,EAAAA,IAAAA,CAAKE,OAAO,CAACS,OAAAA,CAAQd,SAAS,EAAEa,gBAAAA,CAAiBtB,WAAYyB,CAAAA,OAAO,EAAEF,OAAAA,CAAAA,CAAAA;AAC5Ee,YAAAA,OAAAA,EAASc,QAAQhD;AACrB,SAAA;AACA,QAAA;YACIQ,IAAMA,EAAAA,IAAAA,CAAKE,OAAO,CAACS,OAAAA,CAAQd,SAAS,EAAEa,gBAAAA,CAAiBtB,WAAY+B,CAAAA,MAAM,EAAER,OAAAA,CAAAA,CAAAA;AAC3Ee,YAAAA,OAAAA,EAASc,QAAQ/C;AACrB;AACH,KAAA,CACIsD,GAAG,CAAC,CAACC,IAAAA,GAASP,EAAGC,CAAAA,QAAQ,CAACO,SAAS,CAACD,IAAAA,CAAKhD,IAAI,EAAEgD,KAAKtB,OAAO,CAAA,CAAA,CAAA;IAGpE,OAAOc,OAAAA;AACX;;ACrBO,eAAeU,cAAcvC,OAAiC,EAAA;AACjE,IAAA,MAAMf,UAAUD,oBAAqBgB,CAAAA,OAAAA,CAAAA;AAErC,IAAA,MAAM6B,OAAoB,GAAA,MAAM,IAAIK,OAAAA,CAAQ,CAAC3C,OAAmCiD,EAAAA,MAAAA,GAAAA;QAC5E,MAAMC,QAAAA,GAAW,CAACC,GAAAA,EAAqB5D,SAAmBD,EAAAA,UAAAA,GAAAA;AACtD,YAAA,IAAI6D,KAAKF,MAAOE,CAAAA,GAAAA,CAAAA;YAEhBnD,OAAQ,CAAA;AACJV,gBAAAA,UAAAA;AACAC,gBAAAA;AACJ,aAAA,CAAA;AACJ,SAAA;AACA,QAAA,OAAQG,QAAQO,IAAI;YAChB,KAAK,KAAA;gBACDmD,eACI1D,CAAAA,OAAAA,CAAQO,IAAI,EACZP,OACAwD,EAAAA,QAAAA,CAAAA;AAEJ,gBAAA;YACJ,KAAK,IAAA;gBACDE,eACI1D,CAAAA,OAAAA,CAAQO,IAAI,EACZP,OACAwD,EAAAA,QAAAA,CAAAA;AAEJ,gBAAA;YACJ,KAAK,KAAA;gBACDE,eACI1D,CAAAA,OAAAA,CAAQO,IAAI,EACZP,OACAwD,EAAAA,QAAAA,CAAAA;AAEJ,gBAAA;YACJ,KAAK,SAAA;gBACDE,eACI1D,CAAAA,OAAAA,CAAQO,IAAI,EACZP,OACAwD,EAAAA,QAAAA,CAAAA;AAEJ,gBAAA;AACR;AACJ,KAAA,CAAA;IAEA,IAAIxD,OAAAA,CAAQ2D,IAAI,EAAE;AACd,QAAA,MAAMhB,YAAYC,OAAS5C,EAAAA,OAAAA,CAAAA;AAC/B;AAEA,IAAA,IACIA,QAAQY,UAAU,IAClBZ,QAAQS,kBAAkB,CAACG,UAAU,EACvC;AACEgC,QAAAA,OAAAA,CAAQhD,UAAU,GAAG+B,oBACjB3B,CAAAA,OAAAA,EACA4C,QAAQhD,UAAU,CAAA;AAE1B;IAEA,OAAOgD,OAAAA;AACX;;AC1DO,eAAegB,cAAc7C,OAAiC,EAAA;AACjE,IAAA,MAAMf,UAAUD,oBAAqBgB,CAAAA,OAAAA,CAAAA;IAErC,MAAM8C,cAAAA,GAA0BzD,IAAKE,CAAAA,OAAO,CAACN,OAAAA,CAAQC,SAAS,EAAEa,gBAAAA,CAAiBtB,WAAYyB,CAAAA,OAAO,EAAEjB,OAAAA,CAAAA,CAAAA;IACtG,MAAM8D,aAAAA,GAAyB1D,IAAKE,CAAAA,OAAO,CAACN,OAAAA,CAAQC,SAAS,EAAEa,gBAAAA,CAAiBtB,WAAY+B,CAAAA,MAAM,EAAEvB,OAAAA,CAAAA,CAAAA;IAEpG,IAAI;QACA,MAAMiD,OAAAA,CAAQC,GAAG,CAAC;AAACW,YAAAA,cAAAA;AAAgBC,YAAAA;SAAc,CAC5CX,GAAG,CAAC,CAACY,QAAAA,GAAalB,GAAGC,QAAQ,CAACkB,IAAI,CAACD,QAAAA,CAAAA,CAAAA,CAAAA;AAC5C,KAAA,CAAE,OAAOE,CAAG,EAAA;AACR,QAAA;AACJ;IAEA,MAAMhB,OAAAA,CAAQC,GAAG,CAAC;AACdW,QAAAA,cAAAA;AACAC,QAAAA;KACH,CAACX,GAAG,CAAC,CAACY,QAAAA,GAAalB,GAAGC,QAAQ,CAACoB,EAAE,CAACH,QAAAA,CAAAA,CAAAA,CAAAA;AACvC;;ACfO,eAAeI,YAAYpD,OAAiC,EAAA;AAC/D,IAAA,MAAMf,UAAUD,oBAAqBgB,CAAAA,OAAAA,CAAAA;IAErC,MAAM8C,cAAAA,GAA0BzD,IAAKE,CAAAA,OAAO,CAACN,OAAAA,CAAQC,SAAS,EAAEa,gBAAAA,CAAiBtB,WAAYyB,CAAAA,OAAO,EAAEjB,OAAAA,CAAAA,CAAAA;IAEtG,IAAI;AACA,QAAA,MAAM6C,EAAGC,CAAAA,QAAQ,CAACkB,IAAI,CAACH,cAAAA,CAAAA;AAC3B,KAAA,CAAE,OAAOI,CAAG,EAAA;QACR,OAAOG,SAAAA;AACX;AAEA,IAAA,MAAMC,mBAAmB,MAAMxB,EAAAA,CAAGC,QAAQ,CAACwB,QAAQ,CAACT,cAAAA,CAAAA;IACpD,IAAIjE,UAAAA,GAAayE,iBAAiBnC,QAAQ,EAAA;AAC1C,IAAA,IACIlC,QAAQY,UAAU,IAClBZ,QAAQS,kBAAkB,CAACG,UAAU,EACvC;AACEhB,QAAAA,UAAAA,GAAa+B,qBACT3B,OACAJ,EAAAA,UAAAA,CAAAA;AAER;IAEA,MAAMkE,aAAAA,GAAyB1D,IAAKE,CAAAA,OAAO,CAACN,OAAAA,CAAQC,SAAS,EAAEa,gBAAAA,CAAiBtB,WAAY+B,CAAAA,MAAM,EAAEvB,OAAAA,CAAAA,CAAAA;IAEpG,IAAIH,SAAAA;IAEJ,IAAI;AACA,QAAA,MAAMgD,EAAGC,CAAAA,QAAQ,CAACkB,IAAI,CAACF,aAAAA,CAAAA;AACvB,QAAA,MAAMS,kBAAkB,MAAM1B,EAAAA,CAAGC,QAAQ,CAACwB,QAAQ,CAACR,aAAAA,CAAAA;AACnDjE,QAAAA,SAAAA,GAAY0E,gBAAgBrC,QAAQ,EAAA;AACxC,KAAA,CAAE,OAAO+B,CAAG,EAAA;AACR,QAAA,MAAMO,kBAAkBC,eAAgB,CAAA;YACpC7C,GAAKhC,EAAAA,UAAAA;YACLc,MAAQV,EAAAA,OAAAA,CAAQS,kBAAkB,CAACC,MAAM;YACzCH,IAAMP,EAAAA,OAAAA,CAAQW,iBAAiB,CAACJ;AACpC,SAAA,CAAA;QAEA,MAAMmE,cAAAA,GAAiBF,eAAgBzC,CAAAA,MAAM,CAAC;YAC1CrB,MAAQV,EAAAA,OAAAA,CAAQW,iBAAiB,CAACD,MAAM;YACxCH,IAAMP,EAAAA,OAAAA,CAAQW,iBAAiB,CAACJ;AACpC,SAAA,CAAA;QACA,IAAI,OAAOmE,mBAAmB,QAAU,EAAA;AACpC7E,YAAAA,SAAAA,GAAY6E,eAAexC,QAAQ,EAAA;SAChC,MAAA;YACHrC,SAAY6E,GAAAA,cAAAA;AAChB;QAEA,IAAI1E,OAAAA,CAAQ2D,IAAI,EAAE;AACd,YAAA,MAAMhB,WAAY,CAAA;AACd/C,gBAAAA,UAAAA;AACAC,gBAAAA;aACDG,EAAAA,OAAAA,CAAAA;AACP;AACJ;IAEA,OAAO;AACHJ,QAAAA,UAAAA;AACAC,QAAAA;AACJ,KAAA;AACJ;;AChEA,MAAM8E,eAAyC,EAAC;AAEzC,eAAeC,WAAW3F,KAAwC,EAAA;IACrE,IAAIe,OAAAA;IAEJ,IAAI,OAAOf,UAAU,QAAU,EAAA;AAC3Be,QAAAA,OAAAA,GAAUD,oBAAqB,CAAA;YAC3BmB,WAAajC,EAAAA;AACjB,SAAA,CAAA;KACG,MAAA;QACHe,OAAUD,GAAAA,oBAAAA,CAAqBd,SAAS,EAAC,CAAA;AAC7C;IAEA,IAAI4F,MAAAA,CAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACL,YAAAA,EAAc3E,OAAQkB,CAAAA,WAAW,CAAG,EAAA;AACzE,QAAA,OAAOyD,YAAY,CAAC3E,OAAQkB,CAAAA,WAAW,CAAC;AAC5C;IAEA,IAAI0B,OAAAA,GAAU,MAAMuB,WAAYnE,CAAAA,OAAAA,CAAAA;IAChC,IAAI,OAAO4C,YAAY,WAAa,EAAA;AAChCA,QAAAA,OAAAA,GAAU,MAAMU,aAActD,CAAAA,OAAAA,CAAAA;AAClC;AAEA2E,IAAAA,YAAY,CAAC3E,OAAAA,CAAQkB,WAAW,CAAC,GAAG0B,OAAAA;IAEpC,OAAOA,OAAAA;AACX;;AC1BA;;;;;;IAOO,SAASqC,kBAAAA,CACZC,KAAa,EAAA;IAEb,MAAMlE,KAAAA,GAAQkE,KAAMC,CAAAA,KAAK,CAAC,GAAA,CAAA;IAC1B,IAAInE,KAAAA,CAAMoE,MAAM,KAAK,CAAG,EAAA;QACpB,MAAMC,UAAAA,CAAWC,cAAc,CAAC,gCAAA,CAAA;AACpC;IAEA,MAAM,CAACC,aAAa,GAAGvE,KAAAA;IAEvB,IAAI;AACA,QAAA,MAAMwE,UAAUC,IAAKF,CAAAA,YAAAA,CAAAA;QAErB,OAAOG,IAAAA,CAAKC,KAAK,CAACH,OAAAA,CAAAA;AAElB;;;;;;;;;;;;aAaJ,CAAE,OAAOvB,CAAG,EAAA;QACR,MAAMoB,UAAAA,CAAWO,aAAa,CAAC,0CAAA,CAAA;AACnC;AACJ;AAEO,SAASC,oBACZX,KAAa,EAAA;IAEb,MAAMlE,KAAAA,GAAQkE,KAAMC,CAAAA,KAAK,CAAC,GAAA,CAAA;IAC1B,IAAInE,KAAAA,CAAMoE,MAAM,KAAK,CAAG,EAAA;QACpB,MAAMC,UAAAA,CAAWC,cAAc,CAAC,gCAAA,CAAA;AACpC;IAEA,MAAM,GAAGQ,cAAc,GAAG9E,KAAAA;IAE1B,IAAI;AACA,QAAA,MAAMwE,UAAUC,IAAKK,CAAAA,aAAAA,CAAAA;QAErB,OAAOJ,IAAAA,CAAKC,KAAK,CAACH,OAAAA,CAAAA;AACtB,KAAA,CAAE,OAAOvB,CAAG,EAAA;QACR,MAAMoB,UAAAA,CAAWC,cAAc,CAAC,2CAAA,CAAA;AACpC;AACJ;;ACxDO,SAASS,uBAAuB9B,CAAU,EAAA;AAC7C,IAAA,IAAItE,WAASsE,CAAI,CAAA,EAAA;AACb,QAAA,IAAI,OAAOA,CAAAA,CAAE+B,IAAI,KAAK,QAAU,EAAA;AAC5B,YAAA,OAAQ/B,EAAE+B,IAAI;gBACV,KAAK,mBAAA;AAAqB,oBAAA;AACtB,wBAAA,OAAOX,WAAWY,OAAO,EAAA;AAC7B;gBACA,KAAK,gBAAA;AAAkB,oBAAA;wBACnB,IAAI,OAAOhC,EAAEiC,IAAI,KAAK,YAAYjC,CAAEiC,CAAAA,IAAI,YAAYC,IAAM,EAAA;AACtD,4BAAA,OAAOd,UAAWe,CAAAA,eAAe,CAACnC,CAAAA,CAAEiC,IAAI,CAAA;AAC5C;AACA,wBAAA;AACJ;gBACA,KAAK,mBAAA;AAAqB,oBAAA;AACtB,wBAAA,IAAI,OAAOjC,CAAAA,CAAEoC,OAAO,KAAK,QAAU,EAAA;AAC/B,4BAAA,OAAOhB,UAAWC,CAAAA,cAAc,CAACrB,CAAAA,CAAEoC,OAAO,CAAA;AAC9C;AAEA,wBAAA;AACJ;AACJ;AACJ;;AAGA,QAAA,OAAQpC,EAAEoC,OAAO;YACb,KAAK,kBAAA;AAAoB,gBAAA;AACrB,oBAAA,OAAOhB,WAAWY,OAAO,EAAA;AAC7B;YACA,KAAK,mBAAA;AAAqB,gBAAA;AACtB,oBAAA,OAAOZ,WAAWe,eAAe,EAAA;AACrC;YACA,KAAK,cAAA;YACL,KAAK,kBAAA;AAAoB,gBAAA;AACrB,oBAAA,OAAOf,WAAWC,cAAc,EAAA;AACpC;AACJ;AACJ;AAEA,IAAA,OAAO,IAAID,UAAW,CAAA;QAClBiB,KAAOrC,EAAAA,CAAAA;QACPsC,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,IAAIC,KAAM,CAAA,CAAC,cAAc,EAAEd,SAAAA,CAAU,kBAAkB,CAAC,CAAA;AAClE;;AChFA,MAAMe,eAAAA,GAAkB,IAAMC,IAAKC,CAAAA,KAAK,CAAC,IAAIvB,IAAAA,EAAAA,CAAOwB,OAAO,EAAK,GAAA,IAAA,CAAA;AAEzD,eAAeC,SAAAA,CAAUC,MAAiB,EAAE9G,OAAyB,EAAA;AACxE,IAAA,IAAI,OAAO8G,MAAAA,CAAOC,GAAG,KAAK,QAAU,EAAA;QAChCD,MAAOC,CAAAA,GAAG,GAAGN,eAAoB,EAAA,GAAA,IAAA;AACrC;AACA,IAAA,IAAI,OAAOK,MAAAA,CAAOE,GAAG,KAAK,QAAU,EAAA;AAChCF,QAAAA,MAAAA,CAAOE,GAAG,GAAGP,eAAAA,EAAAA;AACjB;AAEA,IAAA,OAAQzG,QAAQR,IAAI;AAChB,QAAA,KAAKyH,QAAQC,GAAG;AAChB,QAAA,KAAKD,QAAQE,EAAE;AAAE,YAAA;AACb,gBAAA,MAAM,EAAEtI,UAAU,EAAE,GAAGH,UAAUsB,OAAQ6B,CAAAA,OAAO,CAC5C7B,GAAAA,OAAAA,CAAQ6B,OAAO,GACf,MAAMgC,UAAAA,CAAW7D,QAAQ6B,OAAO,CAAA;gBAEpC,IAAI6D,SAAAA;AAEJ,gBAAA,IAAI1F,OAAQR,CAAAA,IAAI,KAAKyH,OAAAA,CAAQC,GAAG,EAAE;oBAC9BxB,SAAY1F,GAAAA,OAAAA,CAAQ0F,SAAS,GACzBD,+BAAAA,CAAgCzF,QAAQ0F,SAAS,CAAA,GACjDG,UAAUG,KAAK;iBAChB,MAAA;oBACHN,SAAY1F,GAAAA,OAAAA,CAAQ0F,SAAS,GACzBD,+BAAAA,CAAgCzF,QAAQ0F,SAAS,CAAA,GACjDG,UAAUM,KAAK;AACvB;gBAEA,OAAOiB,IAAAA,CAAKN,QAAQjI,UAAY,EAAA;AAC5B6G,oBAAAA,SAAAA;AACA2B,oBAAAA,KAAAA,EAAOrH,QAAQqH;AACnB,iBAAA,CAAA;AACJ;AACA,QAAA,KAAKJ,QAAQK,GAAG;AAAE,YAAA;gBACd,MAAM5B,SAAAA,GAAwB1F,QAAQ0F,SAAS,GAC3CD,gCAAgCzF,OAAQ0F,CAAAA,SAAS,CACjDG,GAAAA,SAAAA,CAAUD,KAAK;AAEnB,gBAAA,OAAOwB,IAAKN,CAAAA,MAAAA,EAAQ9G,OAAQa,CAAAA,GAAG,EAAE;AAC7B6E,oBAAAA,SAAAA;AACA2B,oBAAAA,KAAAA,EAAOrH,QAAQqH;AACnB,iBAAA,CAAA;AACJ;AACJ;AAEA,IAAA,MAAM,IAAI/C,UAAAA,EAAAA;AACd;;AC/CA;;;;;;;AAOC,IACM,eAAeiD,WAClBpD,CAAAA,KAAa,EACbnE,OAA2B,EAAA;IAE3B,IAAIwH,OAAAA;IAEJ,IAAIC,MAAAA;IAEJ,IAAI;AACA,QAAA,OAAQzH,QAAQR,IAAI;AAChB,YAAA,KAAKyH,QAAQC,GAAG;AAChB,YAAA,KAAKD,QAAQE,EAAE;AAAE,gBAAA;AACb,oBAAA,MAAM,EAAErI,SAAS,EAAE,GAAGC,uBAAuBiB,OAAQ6B,CAAAA,OAAO,CACxD7B,GAAAA,OAAAA,CAAQ6B,OAAO,GACf,MAAMgC,UAAAA,CAAW7D,QAAQ6B,OAAO,CAAA;oBAEpC,IAAI6F,UAAAA;AAEJ,oBAAA,IAAI1H,OAAQR,CAAAA,IAAI,KAAKyH,OAAAA,CAAQC,GAAG,EAAE;wBAC9BQ,UAAa1H,GAAAA,OAAAA,CAAQ0H,UAAU,GAC3B1H,OAAQ0H,CAAAA,UAAU,CAACtF,GAAG,CAAC,CAACsD,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;wBACHmB,UAAa1H,GAAAA,OAAAA,CAAQ0H,UAAU,GAC3B1H,OAAQ0H,CAAAA,UAAU,CAACtF,GAAG,CAAC,CAACsD,SAAcD,GAAAA,+BAAAA,CAAgCC,SACtE,CAAA,CAAA,GAAA;AACIG,4BAAAA,SAAAA,CAAUM,KAAK;AACfN,4BAAAA,SAAAA,CAAUO;AACb,yBAAA;AACT;oBAEAoB,OAAUG,GAAAA,MAAAA,CAAOxD,OAAOrF,SAAW,EAAA;AAC/B4I,wBAAAA,UAAAA;wBACAE,WAAa,EAAA;AACjB,qBAAA,CAAA;AACA,oBAAA;AACJ;AACA,YAAA,KAAKX,QAAQK,GAAG;AAAE,gBAAA;AACd,oBAAA,MAAMI,UAA2B1H,GAAAA,OAAAA,CAAQ0H,UAAU,GAC/C1H,OAAQ0H,CAAAA,UAAU,CAACtF,GAAG,CAAC,CAACsD,SAAcD,GAAAA,+BAAAA,CAAgCC,SACtE,CAAA,CAAA,GAAA;AACIG,wBAAAA,SAAAA,CAAUD,KAAK;AACfC,wBAAAA,SAAAA,CAAUC,KAAK;AACfD,wBAAAA,SAAAA,CAAUE;AACb,qBAAA;AAELyB,oBAAAA,OAAAA,GAAUG,MAAOxD,CAAAA,KAAAA,EAAOnE,OAAQa,CAAAA,GAAG,EAAE;AACjC6G,wBAAAA,UAAAA;wBACAE,WAAa,EAAA;AACjB,qBAAA,CAAA;AACJ;AACJ;AAEAH,QAAAA,MAAAA,GAAS,MAAMD,OAAAA;AACnB,KAAA,CAAE,OAAOtE,CAAG,EAAA;AACR,QAAA,MAAM8B,sBAAuB9B,CAAAA,CAAAA,CAAAA;AACjC;IAEA,IAAI,OAAOuE,WAAW,WAAa,EAAA;AAC/B,QAAA,MAAM,IAAInD,UAAW,CAAA;YAAEgB,OAAS,EAAA;AAAgB,SAAA,CAAA;AACpD;IAEA,OAAOmC,MAAAA;AACX;;ACjFA,MAAMI,aAAWC,KAAc,CAAA;IAC3B7C,IAAM,EAAA;AACV,CAAA,CAAA;AAEO,SAAS8C,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,eAAehH,KAAa,EAAA;AACxCwG,IAAAA,UAAAA,CAASS,GAAG,CAACjH,KAAAA,CAAAA;AACjB;AAEO,SAASkH,cAAAA,GAAAA;AACZ,IAAA,OAAOV,WAASW,GAAG,EAAA;AACvB;;ACjBO,MAAMC,kBAAAA,CAAAA;IAaT,MAAMC,GAAAA,CAAI7H,GAAW,EAAkB;AACnC,QAAA,OAAO,IAAI,CAACgH,QAAQ,CAACa,GAAG,CAAC7H,GAAAA,CAAAA;AAC7B;AAEA,IAAA,MAAMyH,IAAIzH,GAAW,EAAE3C,KAAY,EAAEe,OAAwB,EAAiB;AAC1E,QAAA,IAAI,CAAC4I,QAAQ,CAACS,GAAG,CAACzH,KAAK3C,KAAO,EAAA;AAC1ByK,YAAAA,GAAAA,EAAK1J,QAAQ0J;AACjB,SAAA,CAAA;AACJ;IAEA,MAAMC,IAAAA,CAAK/H,GAAW,EAAiB;AACnC,QAAA,IAAI,CAACgH,QAAQ,CAACgB,MAAM,CAAChI,GAAAA,CAAAA;AACzB;IAEA,MAAMiI,QAAAA,CAASC,IAAc,EAAkB;AAC3C,QAAA,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,IAAID,IAAK1E,CAAAA,MAAM,EAAE2E,CAAK,EAAA,CAAA;AAClC,YAAA,IAAI,CAACnB,QAAQ,CAACgB,MAAM,CAACE,IAAI,CAACC,CAAE,CAAA,CAAA;AAChC;AACJ;AAEA,IAAA,MAAMC,KAAMhK,CAAAA,OAAAA,GAA6B,EAAE,EAAkB;QACzD,IAAIA,OAAAA,CAAQiK,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,SAASjL,KAAK,CAACoC,UAAU,CAACrB,OAAAA,CAAQiK,MAAM,CAAG,EAAA;AAC3C,oBAAA,IAAI,CAACrB,QAAQ,CAACgB,MAAM,CAACM,SAASjL,KAAK,CAAA;AACvC;AAEAiL,gBAAAA,QAAAA,GAAWJ,KAAKK,IAAI,EAAA;AACxB;AAEA,YAAA;AACJ;QAEA,IAAI,CAACvB,QAAQ,CAACoB,KAAK,EAAA;AACvB;IA5CAK,WAAYrK,CAAAA,OAAAA,GAAkC,EAAE,CAAE;AAC9C,QAAA,IAAI,CAAC4I,QAAQ,GAAG,IAAI0B,QAAwB,CAAA;YACxCC,aAAe,EAAA,IAAA;YACfb,GAAKc,EAAAA,QAAAA;YACL,GAAIxK,OAAAA,IAAW;AACnB,SAAA,CAAA;AACJ;AAuCJ;;ACjDO,MAAMyK,iBAAAA,CAAAA;IAUT,MAAMhB,GAAAA,CAAI7H,GAAW,EAAgB;AACjC,QAAA,OAAO,IAAI,CAACgH,QAAQ,CAACa,GAAG,CAAC7H,GAAAA,CAAAA;AAC7B;AAEA,IAAA,MAAMyH,IAAIzH,GAAW,EAAE3C,KAAU,EAAEe,OAAwB,EAAiB;AACxE,QAAA,MAAM,IAAI,CAAC4I,QAAQ,CAACS,GAAG,CAACzH,KAAK3C,KAAO,EAAA;AAChCyL,YAAAA,YAAAA,EAAc1K,QAAQ0J;AAC1B,SAAA,CAAA;AACJ;IAEA,MAAMC,IAAAA,CAAK/H,GAAW,EAAiB;AACnC,QAAA,MAAM,IAAI,CAACgH,QAAQ,CAACe,IAAI,CAAC/H,GAAAA,CAAAA;AAC7B;IAEA,MAAMiI,QAAAA,CAASC,IAAc,EAAkB;AAC3C,QAAA,MAAMa,QAAW,GAAA,IAAI,CAACC,MAAM,CAACD,QAAQ,EAAA;AAErC,QAAA,IAAK,IAAIZ,CAAI,GAAA,CAAA,EAAGA,IAAID,IAAK1E,CAAAA,MAAM,EAAE2E,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,KAAMhK,CAAAA,OAAAA,GAA6B,EAAE,EAAkB;QACzD,IAAIA,OAAAA,CAAQiK,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,CAAG9J,EAAAA,OAAAA,CAAQiK,MAAM,CAAC,CAAC,CAAC,CAAA;AACxD,YAAA,IAAK,IAAIF,CAAI,GAAA,CAAA,EAAGA,IAAID,IAAK1E,CAAAA,MAAM,EAAE2E,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;IA3CAV,WAAc,EAAA;QACV,IAAI,CAACO,MAAM,GAAGtB,cAAAA,EAAAA;AACd,QAAA,IAAI,CAACV,QAAQ,GAAG,IAAIoC,WAAY,CAAA,IAAI,CAACJ,MAAM,CAAA;AAC/C;AAyCJ;;ACnDO,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,cAAclL,OAA6B,EAAA;AACvD,IAAA,OAAOmL,YAAkBnL,CAAAA,OAAAA,CAAAA;AAC7B;;ACZA;;;;;AAKC,IAKM,MAAMoL,KAAAA,CAAAA;IAOT,MAAM/B,GAAAA,CAAIzH,GAAW,EAAE3C,KAAU,EAAEe,OAA2B,GAAA,EAAE,EAAkB;AAC9E,QAAA,MAAM,IAAI,CAACqL,OAAO,CAAChC,GAAG,CAACzH,KAAK3C,KAAOe,EAAAA,OAAAA,CAAAA;AACvC;IAEA,MAAMyJ,GAAAA,CAAI7H,GAAW,EAA6B;AAC9C,QAAA,OAAO,IAAI,CAACyJ,OAAO,CAAC5B,GAAG,CAAC7H,GAAAA,CAAAA;AAC5B;IAEA,MAAM+H,IAAAA,CAAK/H,GAAW,EAAkB;AACpC,QAAA,OAAO,IAAI,CAACyJ,OAAO,CAAC1B,IAAI,CAAC/H,GAAAA,CAAAA;AAC7B;IAEA,MAAMiI,QAAAA,CAASC,IAAc,EAAkB;AAC3C,QAAA,OAAO,IAAI,CAACuB,OAAO,CAACxB,QAAQ,CAACC,IAAAA,CAAAA;AACjC;AAEA,IAAA,MAAME,KAAMhK,CAAAA,OAAAA,GAA6B,EAAE,EAAkB;AACzD,QAAA,OAAO,IAAI,CAACqL,OAAO,CAACrB,KAAK,CAAChK,OAAAA,CAAAA;AAC9B;AAtBAqK,IAAAA,WAAAA,CAAYgB,OAAqB,CAAE;QAC/B,IAAI,CAACA,OAAO,GAAGA,OAAAA;AACnB;AAqBJ;;ACvBA,MAAMzC,aAAWC,KAAa,CAAA;IAC1B7C,IAAM,EAAA,OAAA;IACN+C,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;;AChBO,SAASgC,aAAaxK,OAA4B,EAAA;IACrD,IAAIyK,KAAAA;AAEJ,IAAA,MAAMrL,GAAMY,GAAAA,OAAAA,CAAQd,SAAS,IAAIC,UAAQC,GAAG,EAAA;IAE5C,IAAIY,OAAAA,CAAQ0K,GAAG,KAAK,YAAc,EAAA;QAC9BD,KAAQ,GAAA;YACJ,IAAIE,UAAAA,CAAWC,OAAO,CAAC;gBACnBC,KAAO,EAAA;AACX,aAAA,CAAA;YACA,IAAIF,UAAAA,CAAWG,IAAI,CAAC;gBAChBC,QAAU1L,EAAAA,IAAAA,CAAKsB,IAAI,CAACvB,GAAK,EAAA,YAAA,CAAA;gBACzByL,KAAO,EAAA,MAAA;AACPG,gBAAAA,OAAAA,EAAS,KAAK,IAAO,GAAA,IAAA;gBACrBC,QAAU,EAAA;AACd,aAAA,CAAA;YACA,IAAIN,UAAAA,CAAWG,IAAI,CAAC;gBAChBC,QAAU1L,EAAAA,IAAAA,CAAKsB,IAAI,CAACvB,GAAK,EAAA,WAAA,CAAA;gBACzByL,KAAO,EAAA,MAAA;AACPG,gBAAAA,OAAAA,EAAS,KAAK,IAAO,GAAA,IAAA;gBACrBC,QAAU,EAAA;AACd,aAAA;AACH,SAAA;KACE,MAAA;QACHR,KAAQ,GAAA;YACJ,IAAIE,UAAAA,CAAWC,OAAO,CAAC;gBACnBC,KAAO,EAAA;AACX,aAAA;AACH,SAAA;AACL;AAEA,IAAA,OAAOK,cAAO,CAAA;AACVvL,QAAAA,MAAAA,EAAQA,MAAOwL,CAAAA,OAAO,CAClBxL,MAAAA,CAAOyL,MAAM,CAAC;YAAEC,KAAO,EAAA;AAAK,SAAA,CAAA,EAC5B1L,OAAO2L,SAAS,EAAA,EAChB3L,OAAO4L,QAAQ,EAAA,EACf5L,OAAO6L,MAAM,EAAA,CAAA;QAEjBb,UAAYF,EAAAA;AAChB,KAAA,CAAA;AACJ;;AC3CA,MAAM5C,aAAWC,KAAc,CAAA;IAC3B7C,IAAM,EAAA;AACV,CAAA,CAAA;AAEO,SAASwG,iBAAiBzD,OAAwB,EAAA;AACrDH,IAAAA,UAAAA,CAASI,UAAU,CAACD,OAAAA,CAAAA;AACxB;AAEO,SAAS0D,cAAAA,GAAAA;AACZ,IAAA,OAAO7D,UAASM,CAAAA,GAAG,EAAMN,IAAAA,UAAAA,CAASO,UAAU,EAAA;AAChD;AAEO,SAASuD,UAAUtK,KAAa,EAAA;AACnCwG,IAAAA,UAAAA,CAASS,GAAG,CAACjH,KAAAA,CAAAA;AACjB;AAEO,SAASuK,SAAAA,GAAAA;AACZ,IAAA,OAAO/D,WAASW,GAAG,EAAA;AACvB;;ACjBA,MAAMX,WAAWC,KAAmB,CAAA;IAChC7C,IAAM,EAAA;AACV,CAAA,CAAA;AAEO,SAAS4G,gBAAgB7D,OAA6B,EAAA;AACzDH,IAAAA,QAAAA,CAASI,UAAU,CAACD,OAAAA,CAAAA;AACxB;AAEO,SAAS8D,mBAAAA,GAAAA;AACZ,IAAA,OAAOjE,QAASM,CAAAA,GAAG,EAAMN,IAAAA,QAAAA,CAASO,UAAU,EAAA;AAChD;AAEO,SAAS2D,cAAAA,GAAAA;AACZ,IAAA,OAAOlE,SAASW,GAAG,EAAA;AACvB;;ACfO,SAASwD,yBAA4B3K,KAAQ,EAAA;AAChD,IAAA,IAAIzC,SAASyC,KAAQ,CAAA,EAAA;QACjB,MAAM0H,IAAAA,GAAOjF,MAAOiF,CAAAA,IAAI,CAAC1H,KAAAA,CAAAA;AACzB,QAAA,IAAK,IAAI2H,CAAI,GAAA,CAAA,EAAGA,IAAID,IAAK1E,CAAAA,MAAM,EAAE2E,CAAK,EAAA,CAAA;AAClC,YAAA,MAAM9K,QAAQmD,KAAK,CAAC0H,IAAI,CAACC,EAAE,CAAC;AAC5B,YAAA,IAAI9K,iBAAiBkH,IAAM,EAAA;AACvB/D,gBAAAA,KAAK,CAAC0H,IAAI,CAACC,EAAE,CAAC,GAAG9K,MAAM+N,WAAW,EAAA;AACtC;AACJ;AACJ;IAEA,OAAO5K,KAAAA;AACX;AAEO,SAAS6K,2BAAAA,CACZ7K,KAA6B,EAC7B8K,EAAoB,EAAA;IAEpB,IAAI,OAAO9K,UAAU,QAAU,EAAA;QAC3B,OAAOA,KAAAA;AACX;AAEA,IAAA,OAAOA,KAAM8K,CAAAA,EAAAA,CAAAA;AACjB;;ACtBO,MAAMC,yBAAAA,CAAAA;IAOT,MAAMC,OAAAA,CAAQC,GAA8B,EAAkB;AAC1D,QAAA,MAAM3N,OAAOgG,IAAK4H,CAAAA,SAAS,CAACP,wBAAAA,CAAyBM,IAAIvL,OAAO,CAAA,CAAA;AAEhE,QAAA,MAAM6I,QAAW,GAAA,IAAI,CAAC4C,MAAM,CAAC5C,QAAQ,EAAA;QACrC,IAAK,IAAIZ,IAAI,CAAGA,EAAAA,CAAAA,GAAIsD,IAAIG,YAAY,CAACpI,MAAM,EAAE2E,CAAK,EAAA,CAAA;AAC9C,YAAA,MAAM,EAAE0D,SAAS,EAAE,GAAGJ,GAAIG,CAAAA,YAAY,CAACzD,CAAE,CAAA;AACzC,YAAA,MAAM2D,YAAaD,SAAY,GAAA,CAAA,EAAGA,SAAU,CAAA,CAAC,CAAC,GAAG,EAAA;YAEjD,IAAI7L,GAAAA,GAAM8L,YAAYT,2BAA4BI,CAAAA,GAAAA,CAAIG,YAAY,CAACzD,CAAAA,CAAE,CAAC4D,OAAO,CAAA;YAC7EhD,QAASyC,CAAAA,OAAO,CAACxL,GAAKlC,EAAAA,IAAAA,CAAAA;YAEtB,IAAI,OAAO2N,IAAIG,YAAY,CAACzD,EAAE,CAAC4D,OAAO,KAAK,UAAY,EAAA;AACnD/L,gBAAAA,GAAAA,GAAM8L,SAAYT,GAAAA,2BAAAA,CAA4BI,GAAIG,CAAAA,YAAY,CAACzD,CAAE,CAAA,CAAC4D,OAAO,EAAEN,GAAIvL,CAAAA,OAAO,CAACpC,IAAI,CAACwN,EAAE,CAAA;gBAC9FvC,QAASyC,CAAAA,OAAO,CAACxL,GAAKlC,EAAAA,IAAAA,CAAAA;AAC1B;AACJ;AAEA,QAAA,MAAMiL,SAASG,IAAI,EAAA;AACvB;AAtBAT,IAAAA,WAAAA,CAAYO,MAAc,CAAE;QACxB,IAAI,CAAC2C,MAAM,GAAG3C,MAAAA;AAClB;AAqBJ;;ACxBO,MAAMgD,0BAAAA,CAAAA;IAOT,MAAMR,OAAAA,CAAQC,GAA8B,EAAkB;AAC1DA,QAAAA,GAAAA,CAAIvL,OAAO,GAAGiL,wBAAyBM,CAAAA,GAAAA,CAAIvL,OAAO,CAAA;QAElD,IAAK,IAAIiI,IAAI,CAAGA,EAAAA,CAAAA,GAAIsD,IAAIG,YAAY,CAACpI,MAAM,EAAE2E,CAAK,EAAA,CAAA;YAC9C,IAAI8D,OAAAA;AACJ,YAAA,IAAIR,IAAIG,YAAY,CAACzD,CAAE,CAAA,CAAC0D,SAAS,EAAE;gBAC/BI,OAAU,GAAA,IAAI,CAACN,MAAM,CAACO,EAAE,CAACT,GAAAA,CAAIG,YAAY,CAACzD,CAAE,CAAA,CAAC0D,SAAS,CAAA;aACnD,MAAA;gBACHI,OAAU,GAAA,IAAI,CAACN,MAAM;AACzB;AAEA,YAAA,IAAIQ,WAAWd,2BAA4BI,CAAAA,GAAAA,CAAIG,YAAY,CAACzD,CAAAA,CAAE,CAAC4D,OAAO,CAAA;YAEtE,MAAMK,aAAAA,GAAgBC,kBAAmBZ,CAAAA,GAAAA,CAAIvL,OAAO,CAACvB,IAAI,EAAE8M,GAAAA,CAAIvL,OAAO,CAACoM,KAAK,CAAA;AAE5EL,YAAAA,OAAAA,CACKM,EAAE,CAACJ,QACHK,CAAAA,CAAAA,IAAI,CAACJ,aAAe,EAAA;AACjB,gBAAA,GAAGX,IAAIvL,OAAO;gBACduM,IAAM,EAAA;AACFN,oBAAAA;AACJ;AACJ,aAAA,CAAA;YAEJ,IAAI,OAAOV,IAAIG,YAAY,CAACzD,EAAE,CAAC4D,OAAO,KAAK,UAAY,EAAA;AACnDI,gBAAAA,QAAAA,GAAWd,2BAA4BI,CAAAA,GAAAA,CAAIG,YAAY,CAACzD,CAAE,CAAA,CAAC4D,OAAO,EAAEN,GAAIvL,CAAAA,OAAO,CAACpC,IAAI,CAACwN,EAAE,CAAA;AAEvFW,gBAAAA,OAAAA,CACKM,EAAE,CAACJ,QACHK,CAAAA,CAAAA,IAAI,CAACJ,aAAe,EAAA;AACjB,oBAAA,GAAGX,IAAIvL,OAAO;oBACduM,IAAM,EAAA;AACFN,wBAAAA,QAAAA;AACAO,wBAAAA,MAAAA,EAAQjB,GAAIvL,CAAAA,OAAO,CAACpC,IAAI,CAACwN;AAC7B;AACJ,iBAAA,CAAA;AACR;AACJ;AACJ;AA1CA7C,IAAAA,WAAAA,CAAYO,MAAc,CAAE;AACxB,QAAA,IAAI,CAAC2C,MAAM,GAAG,IAAIgB,OAAQ3D,CAAAA,MAAAA,CAAAA;AAC9B;AAyCJ;;AC9CO,MAAM4D,oBAAAA,CAAAA;IAcT,MAAMpB,OAAAA,CACFC,GAAiC,EACnB;AACd,QAAA,MAAMoB,UAAa,GAAA,IAAI,CAACA,UAAU,CAACC,MAAM,EAAA;AACzC,QAAA,MAAO,IAAM,CAAA;YACT,MAAMC,EAAAA,GAAKF,WAAWtE,IAAI,EAAA;YAC1B,IAAIwE,EAAAA,CAAGvE,IAAI,EAAE;AACT,gBAAA;AACJ;AAEA,YAAA,MAAMuE,EAAG1P,CAAAA,KAAK,CAACmO,OAAO,CAACC,GAAAA,CAAAA;AAC3B;AACJ;IAvBAhD,WAAc,EAAA;QACV,IAAI,CAACoE,UAAU,GAAG,IAAIG,GAAAA,EAAAA;AAEtB,QAAA,IAAI3F,mBAAuB,EAAA,EAAA;AACvB,YAAA,MAAM2B,MAAStB,GAAAA,cAAAA,EAAAA;AAEf,YAAA,IAAI,CAACmF,UAAU,CAACI,GAAG,CAAC,IAAI1B,yBAA0BvC,CAAAA,MAAAA,CAAAA,CAAAA;AAClD,YAAA,IAAI,CAAC6D,UAAU,CAACI,GAAG,CAAC,IAAIjB,0BAA2BhD,CAAAA,MAAAA,CAAAA,CAAAA;AACvD;AACJ;AAeJ;;ACxCA;;;;;AAKC,IAEM,SAAS7F,cACZ+J,CAAAA,GAAM,EACNC,IAAO,EAAA;AAEP,IAAA,OAAOlK,OAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAAC8J,GAAKC,EAAAA,IAAAA,CAAAA;AACrD;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@authup/server-kit",
3
- "version": "1.0.0-beta.22",
3
+ "version": "1.0.0-beta.23",
4
4
  "description": "A toolkit for server-side services.",
5
5
  "license": "Apache-2.0",
6
6
  "exports": {
@@ -58,16 +58,16 @@
58
58
  "@socket.io/redis-emitter": "^5.1.0",
59
59
  "@types/nodemailer": "^6.4.16",
60
60
  "locter": "^2.1.4",
61
- "redis-extension": "^2.0.0",
61
+ "redis-extension": "^2.0.1",
62
62
  "smob": "^1.5.0",
63
63
  "singa": "^1.0.0",
64
64
  "winston": "^3.15.0"
65
65
  },
66
66
  "devDependencies": {
67
- "@authup/kit": "^1.0.0-beta.22"
67
+ "@authup/kit": "^1.0.0-beta.23"
68
68
  },
69
69
  "peerDependencies": {
70
- "@authup/kit": "^1.0.0-beta.22"
70
+ "@authup/kit": "^1.0.0-beta.23"
71
71
  },
72
72
  "publishConfig": {
73
73
  "access": "public"