@authup/server-kit 1.0.0-beta.5 → 1.0.0-beta.7

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.
Files changed (33) hide show
  1. package/dist/crypto/hash/hash.d.ts +1 -1
  2. package/dist/crypto/hash/hash.d.ts.map +1 -1
  3. package/dist/crypto/json-web-token/extract.d.ts +11 -0
  4. package/dist/crypto/json-web-token/extract.d.ts.map +1 -0
  5. package/dist/crypto/json-web-token/index.d.ts +1 -1
  6. package/dist/crypto/json-web-token/index.d.ts.map +1 -1
  7. package/dist/crypto/json-web-token/sign/index.d.ts +3 -0
  8. package/dist/crypto/json-web-token/sign/index.d.ts.map +1 -0
  9. package/dist/crypto/json-web-token/sign/module.d.ts +4 -0
  10. package/dist/crypto/json-web-token/sign/module.d.ts.map +1 -0
  11. package/dist/crypto/json-web-token/sign/types.d.ts +24 -0
  12. package/dist/crypto/json-web-token/sign/types.d.ts.map +1 -0
  13. package/dist/crypto/json-web-token/type.d.ts +4 -33
  14. package/dist/crypto/json-web-token/type.d.ts.map +1 -1
  15. package/dist/crypto/json-web-token/utils.d.ts +4 -1
  16. package/dist/crypto/json-web-token/utils.d.ts.map +1 -1
  17. package/dist/crypto/json-web-token/verify/index.d.ts +3 -0
  18. package/dist/crypto/json-web-token/verify/index.d.ts.map +1 -0
  19. package/dist/crypto/json-web-token/verify/module.d.ts +12 -0
  20. package/dist/crypto/json-web-token/verify/module.d.ts.map +1 -0
  21. package/dist/crypto/json-web-token/verify/types.d.ts +21 -0
  22. package/dist/crypto/json-web-token/verify/types.d.ts.map +1 -0
  23. package/dist/index.cjs +182 -79
  24. package/dist/index.cjs.map +1 -1
  25. package/dist/index.mjs +182 -80
  26. package/dist/index.mjs.map +1 -1
  27. package/package.json +5 -6
  28. package/dist/crypto/json-web-token/decode.d.ts +0 -15
  29. package/dist/crypto/json-web-token/decode.d.ts.map +0 -1
  30. package/dist/crypto/json-web-token/sign.d.ts +0 -4
  31. package/dist/crypto/json-web-token/sign.d.ts.map +0 -1
  32. package/dist/crypto/json-web-token/verify.d.ts +0 -15
  33. package/dist/crypto/json-web-token/verify.d.ts.map +0 -1
@@ -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/utils/check.ts","../src/crypto/key-pair/utils/options.ts","../src/crypto/key-pair/utils/file-name.ts","../src/crypto/key-pair/utils/private-key.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/utils.ts","../src/crypto/json-web-token/decode.ts","../src/crypto/json-web-token/sign.ts","../src/crypto/json-web-token/verify.ts","../src/domain-event/utils.ts","../src/domain-event/redis/publish.ts","../src/domain-event/socket/singleton.ts","../src/domain-event/socket/publish.ts","../src/domain-event/publish.ts","../src/logger/presets/void.ts","../src/logger/module.ts","../src/smtp/config/singleton.ts","../src/smtp/module.ts","../src/smtp/singleton.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 '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 'bcrypt';\n\nexport async function hash(str: string, saltOrRounds: number | string = 10) : Promise<string> {\n return hashMethod(str, saltOrRounds);\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/core';\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) 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 './utils';\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 './utils';\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 './utils';\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 './utils';\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 './utils';\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 { TokenError } from '@authup/core';\nimport { isObject } from 'smob';\n\nexport function createErrorForJWTError(e: unknown) : TokenError {\n if (\n isObject(e) &&\n typeof e.name === 'string'\n ) {\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 return new TokenError({\n cause: e as Error,\n logMessage: true,\n message: 'The JWT error could not be determined.',\n });\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type {\n Jwt,\n JwtPayload,\n} from 'jsonwebtoken';\nimport {\n decode,\n} from 'jsonwebtoken';\nimport { TokenError } from '@authup/core';\nimport type { TokenDecodeOptions } from './type';\nimport { createErrorForJWTError } from './utils';\n\n/**\n * Decode a JWT token with no verification.\n *\n * @param token\n * @param options\n *\n * @throws TokenError\n */\nexport function decodeToken(token: string, options: TokenDecodeOptions & { complete: true }): Jwt;\nexport function decodeToken(token: string, options?: TokenDecodeOptions): JwtPayload | string;\nexport function decodeToken(\n token: string,\n options?: TokenDecodeOptions,\n): JwtPayload | string {\n options ??= {};\n\n let output : string | JwtPayload | null;\n\n try {\n output = decode(token, {\n ...options,\n });\n } catch (e) {\n throw createErrorForJWTError(e);\n }\n\n if (output === null) {\n throw TokenError.payloadInvalid('The token could not be decoded.');\n }\n\n return output;\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 { sign } from 'jsonwebtoken';\nimport { KeyType, TokenError } from '@authup/core';\nimport { isKeyPair, useKeyPair } from '../key-pair';\nimport type { TokenSignOptions } from './type';\n\nexport async function signToken(\n payload: string | object | Buffer | Record<string, any>,\n context: TokenSignOptions,\n): Promise<string> {\n context.expiresIn = context.expiresIn || 3600;\n\n switch (context.type) {\n case KeyType.RSA:\n case KeyType.EC: {\n const { type, keyPair, ...options } = context;\n const { privateKey } = isKeyPair(keyPair) ?\n keyPair :\n await useKeyPair(keyPair);\n\n if (type === KeyType.RSA) {\n options.algorithm = options.algorithm || 'RS256';\n } else {\n options.algorithm = options.algorithm || 'ES256';\n }\n\n return sign(payload, privateKey, options);\n }\n case KeyType.OCT: {\n const { type, secret, ...options } = context;\n options.algorithm = options.algorithm || 'HS256';\n\n return sign(payload, secret, options);\n }\n }\n\n throw new TokenError();\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 { Jwt, JwtPayload } from 'jsonwebtoken';\nimport { verify } from 'jsonwebtoken';\nimport { KeyType, TokenError } from '@authup/core';\nimport { isKeyPairWithPublicKey, useKeyPair } from '../key-pair';\nimport type { TokenVerifyOptions } from './type';\nimport { createErrorForJWTError } from './utils';\n\n/**\n * Verify JWT.\n *\n * @param token\n * @param context\n *\n * @throws TokenError\n */\nexport async function verifyToken(token: string, context: TokenVerifyOptions & { complete: true }): Promise<string | Jwt>;\nexport async function verifyToken(token: string, context: TokenVerifyOptions): Promise<JwtPayload | string>;\nexport async function verifyToken(\n token: string,\n context: TokenVerifyOptions,\n) : Promise<JwtPayload | Jwt | string> {\n let promise : Promise<JwtPayload | Jwt | string | undefined>;\n\n let output : Jwt | JwtPayload | string | undefined;\n\n try {\n switch (context.type) {\n case KeyType.RSA:\n case KeyType.EC: {\n const { type, keyPair, ...options } = context;\n const { publicKey } = isKeyPairWithPublicKey(keyPair) ?\n keyPair :\n await useKeyPair(keyPair);\n\n if (type === KeyType.RSA) {\n options.algorithms = options.algorithms || ['RS256', 'RS384', 'RS512', 'PS256', 'PS384', 'PS512'];\n } else {\n options.algorithms = options.algorithms || ['ES256', 'ES384', 'ES512'];\n }\n\n promise = new Promise<Jwt | JwtPayload | string>((resolve, reject) => {\n verify(token, publicKey, options, (err, decoded) => {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(decoded);\n });\n });\n break;\n }\n case KeyType.OCT: {\n const { type, secret, ...options } = context;\n\n options.algorithms = options.algorithms || ['HS256', 'HS384', 'HS512'];\n\n promise = new Promise<Jwt | JwtPayload | string>((resolve, reject) => {\n verify(token, secret, options, (err, decoded) => {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(decoded);\n });\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;\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/core';\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 { DomainEventName } from '@authup/core';\nimport type { DomainsEventContext } from '@authup/core';\nimport { hasClient, hasConfig, useClient } from 'redis-extension';\nimport type { DomainEventDestinations } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport async function publishDomainRedisEvent(\n context: DomainsEventContext,\n destinations: DomainEventDestinations,\n) : Promise<any> {\n if (!hasClient() && !hasConfig()) {\n return Promise.resolve();\n }\n\n context = transformDomainEventData(context);\n\n const json = JSON.stringify(context);\n\n const client = useClient();\n const pipeline = client.pipeline();\n for (let i = 0; i < destinations.length; i++) {\n const { namespace } = destinations[i];\n const keyPrefix = (namespace ? `${namespace}:` : '');\n\n let key = keyPrefix + buildDomainEventChannelName(destinations[i].channel);\n pipeline.publish(key, json);\n\n if (\n context.event !== DomainEventName.CREATED &&\n typeof destinations[i].channel === 'function'\n ) {\n key = keyPrefix + buildDomainEventChannelName(destinations[i].channel, context.data.id);\n pipeline.publish(key, json);\n }\n }\n\n return pipeline.exec();\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 { Emitter } from '@socket.io/redis-emitter';\nimport { useClient } from 'redis-extension';\nimport type { SocketServerToClientEvents } from './type';\n\nlet instance : undefined | Emitter<SocketServerToClientEvents>;\n\nexport function useSocketEmitter() : Emitter<SocketServerToClientEvents> {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new Emitter<SocketServerToClientEvents>(useClient());\n\n return instance;\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 type { DomainsEventContext } from '@authup/core';\nimport { DomainEventName, buildDomainEventFullName } from '@authup/core';\nimport { hasClient, hasConfig } from 'redis-extension';\nimport type { DomainEventDestinations } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\nimport { useSocketEmitter } from './singleton';\n\nexport function publishDomainSocketEvent(\n context: DomainsEventContext,\n destinations: DomainEventDestinations,\n) {\n if (!hasClient() && !hasConfig()) {\n return;\n }\n\n context = transformDomainEventData(context);\n\n for (let i = 0; i < destinations.length; i++) {\n let emitter = useSocketEmitter();\n if (destinations[i].namespace) {\n emitter = emitter.of(destinations[i].namespace);\n }\n\n let roomName = buildDomainEventChannelName(destinations[i].channel);\n\n const fullEventName = buildDomainEventFullName(context.type, context.event);\n\n emitter\n .in(roomName)\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n .emit(fullEventName, {\n ...context,\n meta: {\n roomName,\n },\n });\n\n if (\n context.event !== DomainEventName.CREATED &&\n typeof destinations[i].channel === 'function'\n ) {\n roomName = buildDomainEventChannelName(destinations[i].channel, context.data.id);\n emitter\n .in(roomName)\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n .emit(fullEventName, {\n ...context,\n meta: {\n roomName,\n roomId: context.data.id,\n },\n });\n }\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { DomainsEventContext } from '@authup/core';\nimport { publishDomainRedisEvent } from './redis';\nimport { publishDomainSocketEvent } from './socket';\nimport type { DomainEventDestinations } from './type';\n\nexport async function publishDomainEvent(\n context: DomainsEventContext,\n destinations: DomainEventDestinations,\n) {\n await publishDomainRedisEvent(context, destinations);\n publishDomainSocketEvent(context, destinations);\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 { Logger } from '../type';\n\nexport class VoidLogger implements Logger {\n error(message: any) : any;\n\n error(message: string, ...meta: any[]) : any;\n\n error() {\n return this;\n }\n\n // ---------------------------------------------\n\n warn(message: any) : any;\n\n warn(message: string, ...meta: any[]) : any;\n\n warn() {\n return this;\n }\n\n // ---------------------------------------------\n\n info(message: any) : any;\n\n info(message: string, ...meta: any[]) : any;\n\n info() {\n return this;\n }\n\n // ---------------------------------------------\n\n http(message: any) : any;\n\n http(message: string, ...meta: any[]) : any;\n\n http() {\n return this;\n }\n\n // ---------------------------------------------\n\n verbose(message: any) : any;\n\n verbose(message: string, ...meta: any[]) : any;\n\n verbose() {\n return this;\n }\n\n // ---------------------------------------------\n\n debug(message: any) : any;\n\n debug(message: string, ...meta: any[]) : any;\n\n debug() {\n return this;\n }\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\nimport { VoidLogger } from './presets';\nimport type { Logger } from './type';\n\nlet instance: Logger | undefined;\n\nexport function useLogger() : Logger {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new VoidLogger();\n\n return instance;\n}\n\nexport function setLogger(logger: Logger) {\n instance = logger;\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 { SmtpConfig } from '../type';\n\nlet instance : SmtpConfig | string | undefined;\n\nexport function hasSmtpConfig() {\n return !!instance;\n}\n\nexport function setSmtpConfig(value: SmtpConfig | string | undefined) {\n instance = value;\n}\n\nexport function useSmtpConfig() : SmtpConfig | string {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = {};\n\n return instance;\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 { Transporter } from 'nodemailer';\nimport { createTransport } from 'nodemailer';\nimport type { SmtpConfig } from './type';\nimport { useLogger } from '../logger';\n\nexport function createSmtpClient(options?: SmtpConfig | string) : Transporter {\n let transport : Transporter;\n\n options = options || {};\n\n if (typeof options === 'string') {\n transport = createTransport(options);\n } else if (options.connectionString) {\n transport = createTransport(options.connectionString);\n } else {\n let auth: Record<string, any> | undefined;\n if (options.user && options.password) {\n auth = {\n type: 'login',\n user: options.user,\n pass: options.password,\n };\n }\n\n transport = createTransport({\n host: options.host,\n port: options.port,\n auth,\n secure: options.ssl,\n opportunisticTLS: options.starttls,\n tls: {\n rejectUnauthorized: false,\n },\n });\n }\n\n transport.on('error', (e) => {\n useLogger().error(e.message);\n });\n\n return transport;\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 { Transporter } from 'nodemailer';\nimport { createTestAccount } from 'nodemailer';\nimport { createSmtpClient } from './module';\nimport { useSmtpConfig } from './config';\nimport type { SmtpConfig } from './type';\n\nlet instance : Transporter | undefined;\n\nexport async function useSMTPClient() : Promise<Transporter> {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n let options : SmtpConfig | string;\n if (process.env.NODE_ENV === 'test') {\n const testAccount = await createTestAccount();\n\n options = {\n host: 'smtp.ethereal.email',\n port: 587,\n ssl: false,\n user: testAccount.user,\n password: testAccount.pass,\n };\n } else {\n options = useSmtpConfig();\n }\n\n instance = createSmtpClient(options);\n\n return instance;\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","saltOrRounds","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","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","createErrorForJWTError","name","TokenError","expired","date","Date","notActiveBefore","message","payloadInvalid","cause","logMessage","decodeToken","token","output","decode","signToken","payload","expiresIn","KeyType","RSA","EC","algorithm","sign","OCT","secret","verifyToken","promise","algorithms","verify","decoded","transformDomainEventData","input","keys","i","length","toISOString","buildDomainEventChannelName","id","publishDomainRedisEvent","destinations","hasClient","hasConfig","json","JSON","stringify","client","useClient","pipeline","namespace","keyPrefix","channel","publish","event","DomainEventName","CREATED","exec","instance","useSocketEmitter","Emitter","publishDomainSocketEvent","emitter","of","roomName","fullEventName","buildDomainEventFullName","in","emit","meta","roomId","publishDomainEvent","VoidLogger","error","warn","info","http","verbose","debug","useLogger","setLogger","logger","hasSmtpConfig","setSmtpConfig","useSmtpConfig","createSmtpClient","transport","createTransport","connectionString","auth","user","password","pass","host","port","secure","ssl","opportunisticTLS","starttls","tls","rejectUnauthorized","on","useSMTPClient","env","NODE_ENV","testAccount","createTestAccount","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/utils/check.ts","../src/crypto/key-pair/utils/options.ts","../src/crypto/key-pair/utils/file-name.ts","../src/crypto/key-pair/utils/private-key.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/domain-event/utils.ts","../src/domain-event/redis/publish.ts","../src/domain-event/socket/singleton.ts","../src/domain-event/socket/publish.ts","../src/domain-event/publish.ts","../src/logger/presets/void.ts","../src/logger/module.ts","../src/smtp/config/singleton.ts","../src/smtp/module.ts","../src/smtp/singleton.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/core';\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) 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 './utils';\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 './utils';\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 './utils';\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 './utils';\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 './utils';\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/core';\nimport { TokenError } from '@authup/core';\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/core';\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/core';\nimport { KeyType, TokenError } from '@authup/core';\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 KeyType.RSA:\n case KeyType.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 === KeyType.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 KeyType.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 { KeyType, TokenError } from '@authup/core';\nimport type { JWTClaims, OAuth2TokenPayload } from '@authup/core';\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 KeyType.RSA:\n case KeyType.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 === KeyType.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 KeyType.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) 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/core';\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 { DomainEventName } from '@authup/core';\nimport type { DomainsEventContext } from '@authup/core';\nimport { hasClient, hasConfig, useClient } from 'redis-extension';\nimport type { DomainEventDestinations } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport async function publishDomainRedisEvent(\n context: DomainsEventContext,\n destinations: DomainEventDestinations,\n) : Promise<any> {\n if (!hasClient() && !hasConfig()) {\n return Promise.resolve();\n }\n\n context = transformDomainEventData(context);\n\n const json = JSON.stringify(context);\n\n const client = useClient();\n const pipeline = client.pipeline();\n for (let i = 0; i < destinations.length; i++) {\n const { namespace } = destinations[i];\n const keyPrefix = (namespace ? `${namespace}:` : '');\n\n let key = keyPrefix + buildDomainEventChannelName(destinations[i].channel);\n pipeline.publish(key, json);\n\n if (\n context.event !== DomainEventName.CREATED &&\n typeof destinations[i].channel === 'function'\n ) {\n key = keyPrefix + buildDomainEventChannelName(destinations[i].channel, context.data.id);\n pipeline.publish(key, json);\n }\n }\n\n return pipeline.exec();\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 { Emitter } from '@socket.io/redis-emitter';\nimport { useClient } from 'redis-extension';\nimport type { SocketServerToClientEvents } from './type';\n\nlet instance : undefined | Emitter<SocketServerToClientEvents>;\n\nexport function useSocketEmitter() : Emitter<SocketServerToClientEvents> {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new Emitter<SocketServerToClientEvents>(useClient());\n\n return instance;\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 type { DomainsEventContext } from '@authup/core';\nimport { DomainEventName, buildDomainEventFullName } from '@authup/core';\nimport { hasClient, hasConfig } from 'redis-extension';\nimport type { DomainEventDestinations } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\nimport { useSocketEmitter } from './singleton';\n\nexport function publishDomainSocketEvent(\n context: DomainsEventContext,\n destinations: DomainEventDestinations,\n) {\n if (!hasClient() && !hasConfig()) {\n return;\n }\n\n context = transformDomainEventData(context);\n\n for (let i = 0; i < destinations.length; i++) {\n let emitter = useSocketEmitter();\n if (destinations[i].namespace) {\n emitter = emitter.of(destinations[i].namespace);\n }\n\n let roomName = buildDomainEventChannelName(destinations[i].channel);\n\n const fullEventName = buildDomainEventFullName(context.type, context.event);\n\n emitter\n .in(roomName)\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n .emit(fullEventName, {\n ...context,\n meta: {\n roomName,\n },\n });\n\n if (\n context.event !== DomainEventName.CREATED &&\n typeof destinations[i].channel === 'function'\n ) {\n roomName = buildDomainEventChannelName(destinations[i].channel, context.data.id);\n emitter\n .in(roomName)\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n .emit(fullEventName, {\n ...context,\n meta: {\n roomName,\n roomId: context.data.id,\n },\n });\n }\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { DomainsEventContext } from '@authup/core';\nimport { publishDomainRedisEvent } from './redis';\nimport { publishDomainSocketEvent } from './socket';\nimport type { DomainEventDestinations } from './type';\n\nexport async function publishDomainEvent(\n context: DomainsEventContext,\n destinations: DomainEventDestinations,\n) {\n await publishDomainRedisEvent(context, destinations);\n publishDomainSocketEvent(context, destinations);\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 { Logger } from '../type';\n\nexport class VoidLogger implements Logger {\n error(message: any) : any;\n\n error(message: string, ...meta: any[]) : any;\n\n error() {\n return this;\n }\n\n // ---------------------------------------------\n\n warn(message: any) : any;\n\n warn(message: string, ...meta: any[]) : any;\n\n warn() {\n return this;\n }\n\n // ---------------------------------------------\n\n info(message: any) : any;\n\n info(message: string, ...meta: any[]) : any;\n\n info() {\n return this;\n }\n\n // ---------------------------------------------\n\n http(message: any) : any;\n\n http(message: string, ...meta: any[]) : any;\n\n http() {\n return this;\n }\n\n // ---------------------------------------------\n\n verbose(message: any) : any;\n\n verbose(message: string, ...meta: any[]) : any;\n\n verbose() {\n return this;\n }\n\n // ---------------------------------------------\n\n debug(message: any) : any;\n\n debug(message: string, ...meta: any[]) : any;\n\n debug() {\n return this;\n }\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\nimport { VoidLogger } from './presets';\nimport type { Logger } from './type';\n\nlet instance: Logger | undefined;\n\nexport function useLogger() : Logger {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new VoidLogger();\n\n return instance;\n}\n\nexport function setLogger(logger: Logger) {\n instance = logger;\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 { SmtpConfig } from '../type';\n\nlet instance : SmtpConfig | string | undefined;\n\nexport function hasSmtpConfig() {\n return !!instance;\n}\n\nexport function setSmtpConfig(value: SmtpConfig | string | undefined) {\n instance = value;\n}\n\nexport function useSmtpConfig() : SmtpConfig | string {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = {};\n\n return instance;\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 { Transporter } from 'nodemailer';\nimport { createTransport } from 'nodemailer';\nimport type { SmtpConfig } from './type';\nimport { useLogger } from '../logger';\n\nexport function createSmtpClient(options?: SmtpConfig | string) : Transporter {\n let transport : Transporter;\n\n options = options || {};\n\n if (typeof options === 'string') {\n transport = createTransport(options);\n } else if (options.connectionString) {\n transport = createTransport(options.connectionString);\n } else {\n let auth: Record<string, any> | undefined;\n if (options.user && options.password) {\n auth = {\n type: 'login',\n user: options.user,\n pass: options.password,\n };\n }\n\n transport = createTransport({\n host: options.host,\n port: options.port,\n auth,\n secure: options.ssl,\n opportunisticTLS: options.starttls,\n tls: {\n rejectUnauthorized: false,\n },\n });\n }\n\n transport.on('error', (e) => {\n useLogger().error(e.message);\n });\n\n return transport;\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 { Transporter } from 'nodemailer';\nimport { createTestAccount } from 'nodemailer';\nimport { createSmtpClient } from './module';\nimport { useSmtpConfig } from './config';\nimport type { SmtpConfig } from './type';\n\nlet instance : Transporter | undefined;\n\nexport async function useSMTPClient() : Promise<Transporter> {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n let options : SmtpConfig | string;\n if (process.env.NODE_ENV === 'test') {\n const testAccount = await createTestAccount();\n\n options = {\n host: 'smtp.ethereal.email',\n port: 587,\n ssl: false,\n user: testAccount.user,\n password: testAccount.pass,\n };\n } else {\n options = useSmtpConfig();\n }\n\n instance = createSmtpClient(options);\n\n return instance;\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","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","KeyType","RSA","EC","sign","keyId","OCT","verifyToken","promise","output","algorithms","verify","validateNbf","transformDomainEventData","input","keys","i","toISOString","buildDomainEventChannelName","id","publishDomainRedisEvent","destinations","hasClient","hasConfig","json","stringify","client","useClient","pipeline","namespace","keyPrefix","channel","publish","event","DomainEventName","CREATED","exec","instance","useSocketEmitter","Emitter","publishDomainSocketEvent","emitter","of","roomName","fullEventName","buildDomainEventFullName","in","emit","meta","roomId","publishDomainEvent","VoidLogger","error","warn","info","http","verbose","debug","useLogger","setLogger","logger","hasSmtpConfig","setSmtpConfig","useSmtpConfig","createSmtpClient","transport","createTransport","connectionString","auth","user","password","pass","host","port","secure","ssl","opportunisticTLS","starttls","tls","rejectUnauthorized","on","useSMTPClient","env","NODE_ENV","testAccount","createTestAccount","obj","prop"],"mappings":";;;;;;;;;;;;;AASO,eAAeA,OAAAA,CAAQC,KAAa,EAAEC,WAAmB,EAAA;AAC5D,IAAA,OAAOC,eAAcF,KAAOC,EAAAA,WAAAA,CAAAA,CAAAA;AAChC;;ACFO,eAAeE,IAAAA,CAAKC,GAAW,EAAEC,SAAiB,EAAE,EAAA;AACvD,IAAA,OAAOC,YAAWF,GAAKC,EAAAA,MAAAA,CAAAA,CAAAA;AAC3B;;ACXA;;;;;AAKC,IAAAE,6BAAA;AAEWA,CAAAA,SAAAA,WAAAA,EAAAA;;;GAAAA,mBAAAA,KAAAA,mBAAAA,GAAAA,EAAAA,CAAAA,CAAAA;;ACGL,SAASC,UAAUC,IAAa,EAAA;AACnC,IAAA,OAAOC,aAASD,CAAAA,IAAAA,CAAAA,IACZ,OAAQA,IAAiBE,CAAAA,UAAU,KAAK,WAAA,IACxC,OAAQF,IAAiBG,CAAAA,SAAS,KAAK,WAAA,CAAA;AAC/C,CAAA;AAEO,SAASC,uBAAuBJ,IAAa,EAAA;AAChD,IAAA,OAAOC,cAASD,IACZ,CAAA,IAAA,OAAO,IAACA,CAAiBG,SAAS,KAAK,WAAA,CAAA;AAC/C;;ACTO,SAASE,qBACZC,OAAiC,EAAA;AASjCA,IAAAA,IAAAA,QAAAA,CAAAA;AAPAA,IAAAA,OAAAA,GAAUA,WAAW,EAAC,CAAA;AAEtBA,IAAAA,OAAAA,CAAQC,SAAS,GAAGD,OAAAA,CAAQC,SAAS,IAAIC,QAAQC,GAAG,EAAA,CAAA;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,CAAA;AAEjDD,IAAAA,CAAAA,QAAAA,GAAAA,OAAAA,EAAQO,IAARP,KAAAA,QAAAA,CAAQO,IAAS,GAAA,KAAA,CAAA,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,CAAA;AAC5B,KAAA;IAEA,IAAI,CAACR,OAAQS,CAAAA,kBAAkB,EAAE;AAC7BT,QAAAA,OAAAA,CAAQS,kBAAkB,GAAG;YACzBF,IAAM,EAAA,OAAA;YACNG,MAAQ,EAAA,KAAA;AACZ,SAAA,CAAA;AACJ,KAAA;IAEA,IAAI,CAACV,OAAQW,CAAAA,iBAAiB,EAAE;AAC5BX,QAAAA,OAAAA,CAAQW,iBAAiB,GAAG;YACxBJ,IAAM,EAAA,MAAA;YACNG,MAAQ,EAAA,KAAA;AACZ,SAAA,CAAA;AACJ,KAAA;IAEA,IACIV,OAAAA,CAAQS,kBAAkB,CAACG,UAAU,IACrC,CAACZ,OAAQS,CAAAA,kBAAkB,CAACI,MAAM,EACpC;QACEb,OAAQS,CAAAA,kBAAkB,CAACI,MAAM,GAAG,aAAA,CAAA;AACxC,KAAA;IAEA,OAAOb,OAAAA,CAAAA;AACX;;ACzCO,SAASc,gBAAAA,CACZP,IAAsB,EACtBQ,OAAiC,EAAA;AAEjC,IAAA,MAAMf,UAAUD,oBAAqBgB,CAAAA,OAAAA,CAAAA,CAAAA;AAErC,IAAA,MAAMC,QAAmB,EAAE,CAAA;IAE3B,OAAQT,IAAAA;AACJ,QAAA,KAAKf,oBAAYyB,OAAO;AAAE,YAAA;gBACtB,IAAIjB,OAAAA,CAAQkB,WAAW,EAAE;oBACrBF,KAAMG,CAAAA,IAAI,CAACnB,OAAAA,CAAQkB,WAAW,CAAA,CAAA;iBAC3B,MAAA;AACHF,oBAAAA,KAAAA,CAAMG,IAAI,CAACZ,IAAAA,CAAAA,CAAAA;AACf,iBAAA;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,CAAA;AAC9D,qBAAA;oBAEAN,KAAMG,CAAAA,IAAI,CAACnB,OAAAA,CAAQoB,gBAAgB,CAAA,CAAA;iBAChC,MAAA;AACHJ,oBAAAA,KAAAA,CAAMG,IAAI,CAAC,KAAA,CAAA,CAAA;AACf,iBAAA;AACA,gBAAA,MAAA;AACJ,aAAA;AACA,QAAA,KAAK3B,oBAAY+B,MAAM;AAAE,YAAA;gBACrB,IAAIvB,OAAAA,CAAQwB,UAAU,EAAE;oBACpBR,KAAMG,CAAAA,IAAI,CAACnB,OAAAA,CAAQwB,UAAU,CAAA,CAAA;iBAC1B,MAAA;AACHR,oBAAAA,KAAAA,CAAMG,IAAI,CAACZ,IAAAA,CAAAA,CAAAA;AACf,iBAAA;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,CAAA;AAC5D,qBAAA;oBAEAN,KAAMG,CAAAA,IAAI,CAACnB,OAAAA,CAAQyB,eAAe,CAAA,CAAA;iBAC/B,MAAA;AACHT,oBAAAA,KAAAA,CAAMG,IAAI,CAAC,KAAA,CAAA,CAAA;AACf,iBAAA;AACA,gBAAA,MAAA;AACJ,aAAA;AACJ,KAAA;IAEA,OAAOH,KAAAA,CAAMU,IAAI,CAAC,GAAA,CAAA,CAAA;AACtB;;ACjDO,SAASC,oBAAAA,CACZZ,OAAuB,EACvBa,GAAoB,EAAA;AAEpB,IAAA,MAAMhC,aAAaiC,4BAAiB,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,UAAU;AAC3E,KAAA,CAAA,CAAA;IAEA,IAAIkB,OAAAA,GAAUlC,UAAWmC,CAAAA,MAAM,CAAC;QAC5BxB,IAAMQ,EAAAA,OAAAA,CAAQN,kBAAkB,CAACF,IAAI;QACrCG,MAAQK,EAAAA,OAAAA,CAAQN,kBAAkB,CAACC,MAAM;AAC7C,KAAA,CAAA,CAAA;IAEA,IAAI,OAAOoB,YAAY,QAAU,EAAA;AAC7BA,QAAAA,OAAAA,GAAUE,MAAOC,CAAAA,IAAI,CAACH,OAAAA,CAAAA,CAASI,QAAQ,CAAC,OAAA,CAAA,CAAA;AAC5C,KAAA;IAEA,OAAOJ,OAAAA,CAAAA;AACX;;AClBO,eAAeK,WAAAA,CAAYC,OAAgB,EAAErB,OAAwB,EAAA;AACxEA,IAAAA,OAAAA,GAAUhB,oBAAqBgB,CAAAA,OAAAA,CAAAA,CAAAA;AAE/B,IAAA,MAAMsB,GAAGC,QAAQ,CAACC,KAAK,CAACxB,OAAAA,CAAQd,SAAS,EAAE;QAAEuC,SAAW,EAAA,IAAA;AAAK,KAAA,CAAA,CAAA;IAE7D,MAAMC,OAAAA,CAAQC,GAAG,CACb;AACI,QAAA;YACItC,IAAMA,EAAAA,IAAAA,CAAKE,OAAO,CAACS,OAAAA,CAAQd,SAAS,EAAEa,gBAAAA,CAAiBtB,mBAAYyB,CAAAA,OAAO,EAAEF,OAAAA,CAAAA,CAAAA;AAC5Ee,YAAAA,OAAAA,EAASM,QAAQxC,UAAU;AAC/B,SAAA;AACA,QAAA;YACIQ,IAAMA,EAAAA,IAAAA,CAAKE,OAAO,CAACS,OAAAA,CAAQd,SAAS,EAAEa,gBAAAA,CAAiBtB,mBAAY+B,CAAAA,MAAM,EAAER,OAAAA,CAAAA,CAAAA;AAC3Ee,YAAAA,OAAAA,EAASM,QAAQvC,SAAS;AAC9B,SAAA;AACH,KAAA,CACI8C,GAAG,CAAC,CAACC,IAAAA,GAASP,EAAGC,CAAAA,QAAQ,CAACO,SAAS,CAACD,IAAAA,CAAKxC,IAAI,EAAEwC,KAAKd,OAAO,CAAA,CAAA,CAAA,CAAA;IAGpE,OAAOM,OAAAA,CAAAA;AACX;;ACrBO,eAAeU,cAAc/B,OAAiC,EAAA;AACjE,IAAA,MAAMf,UAAUD,oBAAqBgB,CAAAA,OAAAA,CAAAA,CAAAA;AAErC,IAAA,MAAMqB,OAAoB,GAAA,MAAM,IAAIK,OAAAA,CAAQ,CAACnC,OAAmCyC,EAAAA,MAAAA,GAAAA;QAC5E,MAAMC,QAAAA,GAAW,CAACC,GAAAA,EAAqBpD,SAAmBD,EAAAA,UAAAA,GAAAA;AACtD,YAAA,IAAIqD,KAAKF,MAAOE,CAAAA,GAAAA,CAAAA,CAAAA;YAEhB3C,OAAQ,CAAA;AACJV,gBAAAA,UAAAA;AACAC,gBAAAA,SAAAA;AACJ,aAAA,CAAA,CAAA;AACJ,SAAA,CAAA;AACA,QAAA,OAAQG,QAAQO,IAAI;YAChB,KAAK,KAAA;gBACD2C,2BACIlD,CAAAA,OAAAA,CAAQO,IAAI,EACZP,OACAgD,EAAAA,QAAAA,CAAAA,CAAAA;AAEJ,gBAAA,MAAA;YACJ,KAAK,IAAA;gBACDE,2BACIlD,CAAAA,OAAAA,CAAQO,IAAI,EACZP,OACAgD,EAAAA,QAAAA,CAAAA,CAAAA;AAEJ,gBAAA,MAAA;YACJ,KAAK,KAAA;gBACDE,2BACIlD,CAAAA,OAAAA,CAAQO,IAAI,EACZP,OACAgD,EAAAA,QAAAA,CAAAA,CAAAA;AAEJ,gBAAA,MAAA;YACJ,KAAK,SAAA;gBACDE,2BACIlD,CAAAA,OAAAA,CAAQO,IAAI,EACZP,OACAgD,EAAAA,QAAAA,CAAAA,CAAAA;AAEJ,gBAAA,MAAA;AACR,SAAA;AACJ,KAAA,CAAA,CAAA;IAEA,IAAIhD,OAAAA,CAAQmD,IAAI,EAAE;AACd,QAAA,MAAMhB,YAAYC,OAASpC,EAAAA,OAAAA,CAAAA,CAAAA;AAC/B,KAAA;AAEA,IAAA,IACIA,QAAQY,UAAU,IAClBZ,QAAQS,kBAAkB,CAACG,UAAU,EACvC;AACEwB,QAAAA,OAAAA,CAAQxC,UAAU,GAAG+B,oBACjB3B,CAAAA,OAAAA,EACAoC,QAAQxC,UAAU,CAAA,CAAA;AAE1B,KAAA;IAEA,OAAOwC,OAAAA,CAAAA;AACX;;AC1DO,eAAegB,cAAcrC,OAAiC,EAAA;AACjE,IAAA,MAAMf,UAAUD,oBAAqBgB,CAAAA,OAAAA,CAAAA,CAAAA;IAErC,MAAMsC,cAAAA,GAA0BjD,IAAKE,CAAAA,OAAO,CAACN,OAAAA,CAAQC,SAAS,EAAEa,gBAAAA,CAAiBtB,mBAAYyB,CAAAA,OAAO,EAAEjB,OAAAA,CAAAA,CAAAA,CAAAA;IACtG,MAAMsD,aAAAA,GAAyBlD,IAAKE,CAAAA,OAAO,CAACN,OAAAA,CAAQC,SAAS,EAAEa,gBAAAA,CAAiBtB,mBAAY+B,CAAAA,MAAM,EAAEvB,OAAAA,CAAAA,CAAAA,CAAAA;IAEpG,IAAI;QACA,MAAMyC,OAAAA,CAAQC,GAAG,CAAC;AAACW,YAAAA,cAAAA;AAAgBC,YAAAA,aAAAA;SAAc,CAC5CX,GAAG,CAAC,CAACY,QAAAA,GAAalB,GAAGC,QAAQ,CAACkB,IAAI,CAACD,QAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAC5C,KAAA,CAAE,OAAOE,CAAG,EAAA;AACR,QAAA,OAAA;AACJ,KAAA;IAEA,MAAMhB,OAAAA,CAAQC,GAAG,CAAC;AACdW,QAAAA,cAAAA;AACAC,QAAAA,aAAAA;KACH,CAACX,GAAG,CAAC,CAACY,QAAAA,GAAalB,GAAGC,QAAQ,CAACoB,EAAE,CAACH,QAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AACvC;;ACfO,eAAeI,YAAY5C,OAAiC,EAAA;AAC/D,IAAA,MAAMf,UAAUD,oBAAqBgB,CAAAA,OAAAA,CAAAA,CAAAA;IAErC,MAAMsC,cAAAA,GAA0BjD,IAAKE,CAAAA,OAAO,CAACN,OAAAA,CAAQC,SAAS,EAAEa,gBAAAA,CAAiBtB,mBAAYyB,CAAAA,OAAO,EAAEjB,OAAAA,CAAAA,CAAAA,CAAAA;IAEtG,IAAI;AACA,QAAA,MAAMqC,EAAGC,CAAAA,QAAQ,CAACkB,IAAI,CAACH,cAAAA,CAAAA,CAAAA;AAC3B,KAAA,CAAE,OAAOI,CAAG,EAAA;QACR,OAAOG,SAAAA,CAAAA;AACX,KAAA;AAEA,IAAA,MAAMC,mBAAmB,MAAMxB,EAAAA,CAAGC,QAAQ,CAACwB,QAAQ,CAACT,cAAAA,CAAAA,CAAAA;IACpD,IAAIzD,UAAAA,GAAaiE,iBAAiB3B,QAAQ,EAAA,CAAA;AAC1C,IAAA,IACIlC,QAAQY,UAAU,IAClBZ,QAAQS,kBAAkB,CAACG,UAAU,EACvC;AACEhB,QAAAA,UAAAA,GAAa+B,qBACT3B,OACAJ,EAAAA,UAAAA,CAAAA,CAAAA;AAER,KAAA;IAEA,MAAM0D,aAAAA,GAAyBlD,IAAKE,CAAAA,OAAO,CAACN,OAAAA,CAAQC,SAAS,EAAEa,gBAAAA,CAAiBtB,mBAAY+B,CAAAA,MAAM,EAAEvB,OAAAA,CAAAA,CAAAA,CAAAA;IAEpG,IAAIH,SAAAA,CAAAA;IAEJ,IAAI;AACA,QAAA,MAAMwC,EAAGC,CAAAA,QAAQ,CAACkB,IAAI,CAACF,aAAAA,CAAAA,CAAAA;AACvB,QAAA,MAAMS,kBAAkB,MAAM1B,EAAAA,CAAGC,QAAQ,CAACwB,QAAQ,CAACR,aAAAA,CAAAA,CAAAA;AACnDzD,QAAAA,SAAAA,GAAYkE,gBAAgB7B,QAAQ,EAAA,CAAA;AACxC,KAAA,CAAE,OAAOuB,CAAG,EAAA;AACR,QAAA,MAAMO,kBAAkBC,2BAAgB,CAAA;YACpCrC,GAAKhC,EAAAA,UAAAA;YACLc,MAAQV,EAAAA,OAAAA,CAAQS,kBAAkB,CAACC,MAAM;YACzCH,IAAMP,EAAAA,OAAAA,CAAQW,iBAAiB,CAACJ,IAAI;AACxC,SAAA,CAAA,CAAA;QAEA,MAAM2D,cAAAA,GAAiBF,eAAgBjC,CAAAA,MAAM,CAAC;YAC1CrB,MAAQV,EAAAA,OAAAA,CAAQW,iBAAiB,CAACD,MAAM;YACxCH,IAAMP,EAAAA,OAAAA,CAAQW,iBAAiB,CAACJ,IAAI;AACxC,SAAA,CAAA,CAAA;QACA,IAAI,OAAO2D,mBAAmB,QAAU,EAAA;AACpCrE,YAAAA,SAAAA,GAAYqE,eAAehC,QAAQ,EAAA,CAAA;SAChC,MAAA;YACHrC,SAAYqE,GAAAA,cAAAA,CAAAA;AAChB,SAAA;QAEA,IAAIlE,OAAAA,CAAQmD,IAAI,EAAE;AACd,YAAA,MAAMhB,WAAY,CAAA;AACdvC,gBAAAA,UAAAA;AACAC,gBAAAA,SAAAA;aACDG,EAAAA,OAAAA,CAAAA,CAAAA;AACP,SAAA;AACJ,KAAA;IAEA,OAAO;AACHJ,QAAAA,UAAAA;AACAC,QAAAA,SAAAA;AACJ,KAAA,CAAA;AACJ;;AChEA,MAAMsE,eAAyC,EAAC,CAAA;AAEzC,eAAeC,WAAWnF,KAAwC,EAAA;IACrE,IAAIe,OAAAA,CAAAA;IAEJ,IAAI,OAAOf,UAAU,QAAU,EAAA;AAC3Be,QAAAA,OAAAA,GAAUD,oBAAqB,CAAA;YAC3BmB,WAAajC,EAAAA,KAAAA;AACjB,SAAA,CAAA,CAAA;KACG,MAAA;QACHe,OAAUD,GAAAA,oBAAAA,CAAqBd,SAAS,EAAC,CAAA,CAAA;AAC7C,KAAA;IAEA,IAAIoF,MAAAA,CAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACL,YAAAA,EAAcnE,OAAQkB,CAAAA,WAAW,CAAG,EAAA;AACzE,QAAA,OAAOiD,YAAY,CAACnE,OAAQkB,CAAAA,WAAW,CAAC,CAAA;AAC5C,KAAA;IAEA,IAAIkB,OAAAA,GAAU,MAAMuB,WAAY3D,CAAAA,OAAAA,CAAAA,CAAAA;IAChC,IAAI,OAAOoC,YAAY,WAAa,EAAA;AAChCA,QAAAA,OAAAA,GAAU,MAAMU,aAAc9C,CAAAA,OAAAA,CAAAA,CAAAA;AAClC,KAAA;AAEAmE,IAAAA,YAAY,CAACnE,OAAAA,CAAQkB,WAAW,CAAC,GAAGkB,OAAAA,CAAAA;IAEpC,OAAOA,OAAAA,CAAAA;AACX;;AC1BA;;;;;;IAOO,SAASqC,kBAAAA,CACZC,KAAa,EAAA;IAEb,MAAM1D,KAAAA,GAAQ0D,KAAMC,CAAAA,KAAK,CAAC,GAAA,CAAA,CAAA;IAC1B,IAAI3D,KAAAA,CAAM4D,MAAM,KAAK,CAAG,EAAA;QACpB,MAAMC,eAAAA,CAAWC,cAAc,CAAC,gCAAA,CAAA,CAAA;AACpC,KAAA;IAEA,MAAM,CAACC,aAAa,GAAG/D,KAAAA,CAAAA;IAEvB,IAAI;AACA,QAAA,MAAMgE,UAAUC,IAAKF,CAAAA,YAAAA,CAAAA,CAAAA;QAErB,OAAOG,IAAAA,CAAKC,KAAK,CAACH,OAAAA,CAAAA,CAAAA;AAElB;;;;;;;;;;;;aAaJ,CAAE,OAAOvB,CAAG,EAAA;QACR,MAAMoB,eAAAA,CAAWO,aAAa,CAAC,0CAAA,CAAA,CAAA;AACnC,KAAA;AACJ,CAAA;AAEO,SAASC,oBACZX,KAAa,EAAA;IAEb,MAAM1D,KAAAA,GAAQ0D,KAAMC,CAAAA,KAAK,CAAC,GAAA,CAAA,CAAA;IAC1B,IAAI3D,KAAAA,CAAM4D,MAAM,KAAK,CAAG,EAAA;QACpB,MAAMC,eAAAA,CAAWC,cAAc,CAAC,gCAAA,CAAA,CAAA;AACpC,KAAA;IAEA,MAAM,GAAGQ,cAAc,GAAGtE,KAAAA,CAAAA;IAE1B,IAAI;AACA,QAAA,MAAMgE,UAAUC,IAAKK,CAAAA,aAAAA,CAAAA,CAAAA;QAErB,OAAOJ,IAAAA,CAAKC,KAAK,CAACH,OAAAA,CAAAA,CAAAA;AACtB,KAAA,CAAE,OAAOvB,CAAG,EAAA;QACR,MAAMoB,eAAAA,CAAWC,cAAc,CAAC,2CAAA,CAAA,CAAA;AACpC,KAAA;AACJ;;ACxDO,SAASS,uBAAuB9B,CAAU,EAAA;AAC7C,IAAA,IAAI9D,cAAS8D,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,gBAAWY,OAAO,EAAA,CAAA;AAC7B,qBAAA;gBACA,KAAK,gBAAA;AAAkB,oBAAA;wBACnB,IAAI,OAAOhC,EAAEiC,IAAI,KAAK,YAAYjC,CAAEiC,CAAAA,IAAI,YAAYC,IAAM,EAAA;AACtD,4BAAA,OAAOd,eAAWe,CAAAA,eAAe,CAACnC,CAAAA,CAAEiC,IAAI,CAAA,CAAA;AAC5C,yBAAA;AACA,wBAAA,MAAA;AACJ,qBAAA;gBACA,KAAK,mBAAA;AAAqB,oBAAA;AACtB,wBAAA,IAAI,OAAOjC,CAAAA,CAAEoC,OAAO,KAAK,QAAU,EAAA;AAC/B,4BAAA,OAAOhB,eAAWC,CAAAA,cAAc,CAACrB,CAAAA,CAAEoC,OAAO,CAAA,CAAA;AAC9C,yBAAA;AAEA,wBAAA,MAAA;AACJ,qBAAA;AACJ,aAAA;AACJ,SAAA;;AAGA,QAAA,OAAQpC,EAAEoC,OAAO;YACb,KAAK,kBAAA;AAAoB,gBAAA;AACrB,oBAAA,OAAOhB,gBAAWY,OAAO,EAAA,CAAA;AAC7B,iBAAA;YACA,KAAK,mBAAA;AAAqB,gBAAA;AACtB,oBAAA,OAAOZ,gBAAWe,eAAe,EAAA,CAAA;AACrC,iBAAA;YACA,KAAK,cAAA,CAAA;YACL,KAAK,kBAAA;AAAoB,gBAAA;AACrB,oBAAA,OAAOf,gBAAWC,cAAc,EAAA,CAAA;AACpC,iBAAA;AACJ,SAAA;AACJ,KAAA;AAEA,IAAA,OAAO,IAAID,eAAW,CAAA;QAClBiB,KAAOrC,EAAAA,CAAAA;QACPsC,UAAY,EAAA,IAAA;QACZF,OAAS,EAAA,wCAAA;AACb,KAAA,CAAA,CAAA;AACJ,CAAA;AAEO,SAASG,gCAAgCC,SAA4B,EAAA;IACxE,OAAQA,SAAAA;AACJ,QAAA,KAAKC,kBAAaC,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOC,uBAAUD,KAAK,CAAA;AAC1B,aAAA;AACA,QAAA,KAAKD,kBAAaG,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOD,uBAAUC,KAAK,CAAA;AAC1B,aAAA;AACA,QAAA,KAAKH,kBAAaI,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOF,uBAAUE,KAAK,CAAA;AAC1B,aAAA;AACA,QAAA,KAAKJ,kBAAaK,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOH,uBAAUG,KAAK,CAAA;AAC1B,aAAA;AACA,QAAA,KAAKL,kBAAaM,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOJ,uBAAUI,KAAK,CAAA;AAC1B,aAAA;AACA,QAAA,KAAKN,kBAAaO,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOL,uBAAUK,KAAK,CAAA;AAC1B,aAAA;AACA,QAAA,KAAKP,kBAAaQ,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAON,uBAAUM,KAAK,CAAA;AAC1B,aAAA;AACA,QAAA,KAAKR,kBAAaS,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOP,uBAAUO,KAAK,CAAA;AAC1B,aAAA;AACA,QAAA,KAAKT,kBAAaU,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOR,uBAAUQ,KAAK,CAAA;AAC1B,aAAA;AACA,QAAA,KAAKV,kBAAaW,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOT,uBAAUS,KAAK,CAAA;AAC1B,aAAA;AACA,QAAA,KAAKX,kBAAaY,KAAK;AAAE,YAAA;AACrB,gBAAA,OAAOV,uBAAUU,KAAK,CAAA;AAC1B,aAAA;AACJ,KAAA;AAEA,IAAA,MAAM,IAAIC,KAAM,CAAA,CAAC,cAAc,EAAEd,SAAAA,CAAU,kBAAkB,CAAC,CAAA,CAAA;AAClE;;AChFA,MAAMe,eAAAA,GAAkB,IAAMC,IAAKC,CAAAA,KAAK,CAAC,IAAIvB,IAAAA,EAAAA,CAAOwB,OAAO,EAAK,GAAA,IAAA,CAAA,CAAA;AAEzD,eAAeC,SAAAA,CAAUC,MAAiB,EAAEtG,OAAyB,EAAA;AACxE,IAAA,IAAI,OAAOsG,MAAAA,CAAOC,GAAG,KAAK,QAAU,EAAA;QAChCD,MAAOC,CAAAA,GAAG,GAAGN,eAAoB,EAAA,GAAA,IAAA,CAAA;AACrC,KAAA;AACA,IAAA,IAAI,OAAOK,MAAAA,CAAOE,GAAG,KAAK,QAAU,EAAA;AAChCF,QAAAA,MAAAA,CAAOE,GAAG,GAAGP,eAAAA,EAAAA,CAAAA;AACjB,KAAA;AAEA,IAAA,OAAQjG,QAAQR,IAAI;AAChB,QAAA,KAAKiH,aAAQC,GAAG,CAAA;AAChB,QAAA,KAAKD,aAAQE,EAAE;AAAE,YAAA;AACb,gBAAA,MAAM,EAAE9H,UAAU,EAAE,GAAGH,UAAUsB,OAAQqB,CAAAA,OAAO,CAC5CrB,GAAAA,OAAAA,CAAQqB,OAAO,GACf,MAAMgC,UAAAA,CAAWrD,QAAQqB,OAAO,CAAA,CAAA;gBAEpC,IAAI6D,SAAAA,CAAAA;AAEJ,gBAAA,IAAIlF,OAAQR,CAAAA,IAAI,KAAKiH,YAAAA,CAAQC,GAAG,EAAE;oBAC9BxB,SAAYlF,GAAAA,OAAAA,CAAQkF,SAAS,GACzBD,+BAAAA,CAAgCjF,QAAQkF,SAAS,CAAA,GACjDG,uBAAUG,KAAK,CAAA;iBAChB,MAAA;oBACHN,SAAYlF,GAAAA,OAAAA,CAAQkF,SAAS,GACzBD,+BAAAA,CAAgCjF,QAAQkF,SAAS,CAAA,GACjDG,uBAAUM,KAAK,CAAA;AACvB,iBAAA;gBAEA,OAAOiB,iBAAAA,CAAKN,QAAQzH,UAAY,EAAA;AAC5BqG,oBAAAA,SAAAA;AACA2B,oBAAAA,KAAAA,EAAO7G,QAAQ6G,KAAK;AACxB,iBAAA,CAAA,CAAA;AACJ,aAAA;AACA,QAAA,KAAKJ,aAAQK,GAAG;AAAE,YAAA;gBACd,MAAM5B,SAAAA,GAAwBlF,QAAQkF,SAAS,GAC3CD,gCAAgCjF,OAAQkF,CAAAA,SAAS,CACjDG,GAAAA,sBAAAA,CAAUD,KAAK,CAAA;AAEnB,gBAAA,OAAOwB,iBAAKN,CAAAA,MAAAA,EAAQtG,OAAQa,CAAAA,GAAG,EAAE;AAC7BqE,oBAAAA,SAAAA;AACA2B,oBAAAA,KAAAA,EAAO7G,QAAQ6G,KAAK;AACxB,iBAAA,CAAA,CAAA;AACJ,aAAA;AACJ,KAAA;AAEA,IAAA,MAAM,IAAI/C,eAAAA,EAAAA,CAAAA;AACd;;AC/CA;;;;;;;AAOC,IACM,eAAeiD,WAClBpD,CAAAA,KAAa,EACb3D,OAA2B,EAAA;IAE3B,IAAIgH,OAAAA,CAAAA;IAEJ,IAAIC,MAAAA,CAAAA;IAEJ,IAAI;AACA,QAAA,OAAQjH,QAAQR,IAAI;AAChB,YAAA,KAAKiH,aAAQC,GAAG,CAAA;AAChB,YAAA,KAAKD,aAAQE,EAAE;AAAE,gBAAA;AACb,oBAAA,MAAM,EAAE7H,SAAS,EAAE,GAAGC,uBAAuBiB,OAAQqB,CAAAA,OAAO,CACxDrB,GAAAA,OAAAA,CAAQqB,OAAO,GACf,MAAMgC,UAAAA,CAAWrD,QAAQqB,OAAO,CAAA,CAAA;oBAEpC,IAAI6F,UAAAA,CAAAA;AAEJ,oBAAA,IAAIlH,OAAQR,CAAAA,IAAI,KAAKiH,YAAAA,CAAQC,GAAG,EAAE;wBAC9BQ,UAAalH,GAAAA,OAAAA,CAAQkH,UAAU,GAC3BlH,OAAQkH,CAAAA,UAAU,CAACtF,GAAG,CAAC,CAACsD,SAAcD,GAAAA,+BAAAA,CAAgCC,SACtE,CAAA,CAAA,GAAA;AACIG,4BAAAA,sBAAAA,CAAUG,KAAK;AACfH,4BAAAA,sBAAAA,CAAUI,KAAK;AACfJ,4BAAAA,sBAAAA,CAAUK,KAAK;AACfL,4BAAAA,sBAAAA,CAAUQ,KAAK;AACfR,4BAAAA,sBAAAA,CAAUS,KAAK;AACfT,4BAAAA,sBAAAA,CAAUU,KAAK;AAClB,yBAAA,CAAA;qBACF,MAAA;wBACHmB,UAAalH,GAAAA,OAAAA,CAAQkH,UAAU,GAC3BlH,OAAQkH,CAAAA,UAAU,CAACtF,GAAG,CAAC,CAACsD,SAAcD,GAAAA,+BAAAA,CAAgCC,SACtE,CAAA,CAAA,GAAA;AACIG,4BAAAA,sBAAAA,CAAUM,KAAK;AACfN,4BAAAA,sBAAAA,CAAUO,KAAK;AAClB,yBAAA,CAAA;AACT,qBAAA;oBAEAoB,OAAUG,GAAAA,mBAAAA,CAAOxD,OAAO7E,SAAW,EAAA;AAC/BoI,wBAAAA,UAAAA;wBACAE,WAAa,EAAA,IAAA;AACjB,qBAAA,CAAA,CAAA;AACA,oBAAA,MAAA;AACJ,iBAAA;AACA,YAAA,KAAKX,aAAQK,GAAG;AAAE,gBAAA;AACd,oBAAA,MAAMI,UAA2BlH,GAAAA,OAAAA,CAAQkH,UAAU,GAC/ClH,OAAQkH,CAAAA,UAAU,CAACtF,GAAG,CAAC,CAACsD,SAAcD,GAAAA,+BAAAA,CAAgCC,SACtE,CAAA,CAAA,GAAA;AACIG,wBAAAA,sBAAAA,CAAUD,KAAK;AACfC,wBAAAA,sBAAAA,CAAUC,KAAK;AACfD,wBAAAA,sBAAAA,CAAUE,KAAK;AAClB,qBAAA,CAAA;AAELyB,oBAAAA,OAAAA,GAAUG,mBAAOxD,CAAAA,KAAAA,EAAO3D,OAAQa,CAAAA,GAAG,EAAE;AACjCqG,wBAAAA,UAAAA;wBACAE,WAAa,EAAA,IAAA;AACjB,qBAAA,CAAA,CAAA;AACJ,iBAAA;AACJ,SAAA;AAEAH,QAAAA,MAAAA,GAAS,MAAMD,OAAAA,CAAAA;AACnB,KAAA,CAAE,OAAOtE,CAAG,EAAA;AACR,QAAA,MAAM8B,sBAAuB9B,CAAAA,CAAAA,CAAAA,CAAAA;AACjC,KAAA;IAEA,IAAI,OAAOuE,WAAW,WAAa,EAAA;AAC/B,QAAA,MAAM,IAAInD,eAAW,CAAA;YAAEgB,OAAS,EAAA,eAAA;AAAgB,SAAA,CAAA,CAAA;AACpD,KAAA;IAEA,OAAOmC,MAAAA,CAAAA;AACX;;AClFO,SAASI,yBAA4BC,KAAQ,EAAA;AAChD,IAAA,IAAI1I,cAAS0I,KAAQ,CAAA,EAAA;QACjB,MAAMC,IAAAA,GAAOjE,MAAOiE,CAAAA,IAAI,CAACD,KAAAA,CAAAA,CAAAA;AACzB,QAAA,IAAK,IAAIE,CAAI,GAAA,CAAA,EAAGA,IAAID,IAAK1D,CAAAA,MAAM,EAAE2D,CAAK,EAAA,CAAA;AAClC,YAAA,MAAMtJ,QAAQoJ,KAAK,CAACC,IAAI,CAACC,EAAE,CAAC,CAAA;AAC5B,YAAA,IAAItJ,iBAAiB0G,IAAM,EAAA;AACvB0C,gBAAAA,KAAK,CAACC,IAAI,CAACC,EAAE,CAAC,GAAGtJ,MAAMuJ,WAAW,EAAA,CAAA;AACtC,aAAA;AACJ,SAAA;AACJ,KAAA;IAEA,OAAOH,KAAAA,CAAAA;AACX,CAAA;AAEO,SAASI,2BAAAA,CACZJ,KAA6B,EAC7BK,EAAoB,EAAA;IAEpB,IAAI,OAAOL,UAAU,QAAU,EAAA;QAC3B,OAAOA,KAAAA,CAAAA;AACX,KAAA;AAEA,IAAA,OAAOA,KAAMK,CAAAA,EAAAA,CAAAA,CAAAA;AACjB;;ACpBO,eAAeC,uBAAAA,CAClB5H,OAA4B,EAC5B6H,YAAqC,EAAA;IAErC,IAAI,CAACC,wBAAe,EAAA,IAAA,CAACC,wBAAa,EAAA,EAAA;AAC9B,QAAA,OAAOrG,QAAQnC,OAAO,EAAA,CAAA;AAC1B,KAAA;AAEAS,IAAAA,OAAAA,GAAUqH,wBAAyBrH,CAAAA,OAAAA,CAAAA,CAAAA;IAEnC,MAAMgI,IAAAA,GAAO7D,IAAK8D,CAAAA,SAAS,CAACjI,OAAAA,CAAAA,CAAAA;AAE5B,IAAA,MAAMkI,MAASC,GAAAA,wBAAAA,EAAAA,CAAAA;IACf,MAAMC,QAAAA,GAAWF,OAAOE,QAAQ,EAAA,CAAA;AAChC,IAAA,IAAK,IAAIZ,CAAI,GAAA,CAAA,EAAGA,IAAIK,YAAahE,CAAAA,MAAM,EAAE2D,CAAK,EAAA,CAAA;AAC1C,QAAA,MAAM,EAAEa,SAAS,EAAE,GAAGR,YAAY,CAACL,CAAE,CAAA,CAAA;AACrC,QAAA,MAAMc,YAAaD,SAAY,GAAA,CAAC,EAAEA,SAAU,CAAA,CAAC,CAAC,GAAG,EAAA,CAAA;AAEjD,QAAA,IAAIxH,MAAMyH,SAAYZ,GAAAA,2BAAAA,CAA4BG,YAAY,CAACL,CAAAA,CAAE,CAACe,OAAO,CAAA,CAAA;QACzEH,QAASI,CAAAA,OAAO,CAAC3H,GAAKmH,EAAAA,IAAAA,CAAAA,CAAAA;AAEtB,QAAA,IACIhI,OAAQyI,CAAAA,KAAK,KAAKC,oBAAAA,CAAgBC,OAAO,IACzC,OAAOd,YAAY,CAACL,CAAAA,CAAE,CAACe,OAAO,KAAK,UACrC,EAAA;YACE1H,GAAMyH,GAAAA,SAAAA,GAAYZ,2BAA4BG,CAAAA,YAAY,CAACL,CAAAA,CAAE,CAACe,OAAO,EAAEvI,OAAAA,CAAQrB,IAAI,CAACgJ,EAAE,CAAA,CAAA;YACtFS,QAASI,CAAAA,OAAO,CAAC3H,GAAKmH,EAAAA,IAAAA,CAAAA,CAAAA;AAC1B,SAAA;AACJ,KAAA;AAEA,IAAA,OAAOI,SAASQ,IAAI,EAAA,CAAA;AACxB;;ACjCA,IAAIC,UAAAA,CAAAA;AAEG,SAASC,gBAAAA,GAAAA;IACZ,IAAI,OAAOD,eAAa,WAAa,EAAA;QACjC,OAAOA,UAAAA,CAAAA;AACX,KAAA;AAEAA,IAAAA,UAAAA,GAAW,IAAIE,oBAAoCZ,CAAAA,wBAAAA,EAAAA,CAAAA,CAAAA;IAEnD,OAAOU,UAAAA,CAAAA;AACX;;ACPO,SAASG,wBAAAA,CACZhJ,OAA4B,EAC5B6H,YAAqC,EAAA;IAErC,IAAI,CAACC,wBAAe,EAAA,IAAA,CAACC,wBAAa,EAAA,EAAA;AAC9B,QAAA,OAAA;AACJ,KAAA;AAEA/H,IAAAA,OAAAA,GAAUqH,wBAAyBrH,CAAAA,OAAAA,CAAAA,CAAAA;AAEnC,IAAA,IAAK,IAAIwH,CAAI,GAAA,CAAA,EAAGA,IAAIK,YAAahE,CAAAA,MAAM,EAAE2D,CAAK,EAAA,CAAA;AAC1C,QAAA,IAAIyB,OAAUH,GAAAA,gBAAAA,EAAAA,CAAAA;AACd,QAAA,IAAIjB,YAAY,CAACL,CAAE,CAAA,CAACa,SAAS,EAAE;AAC3BY,YAAAA,OAAAA,GAAUA,QAAQC,EAAE,CAACrB,YAAY,CAACL,CAAAA,CAAE,CAACa,SAAS,CAAA,CAAA;AAClD,SAAA;AAEA,QAAA,IAAIc,WAAWzB,2BAA4BG,CAAAA,YAAY,CAACL,CAAAA,CAAE,CAACe,OAAO,CAAA,CAAA;AAElE,QAAA,MAAMa,gBAAgBC,6BAAyBrJ,CAAAA,OAAAA,CAAQR,IAAI,EAAEQ,QAAQyI,KAAK,CAAA,CAAA;QAE1EQ,OACKK,CAAAA,EAAE,CAACH,QAAAA,CACJ;;AAECI,SAAAA,IAAI,CAACH,aAAe,EAAA;AACjB,YAAA,GAAGpJ,OAAO;YACVwJ,IAAM,EAAA;AACFL,gBAAAA,QAAAA;AACJ,aAAA;AACJ,SAAA,CAAA,CAAA;AAEJ,QAAA,IACInJ,OAAQyI,CAAAA,KAAK,KAAKC,oBAAAA,CAAgBC,OAAO,IACzC,OAAOd,YAAY,CAACL,CAAAA,CAAE,CAACe,OAAO,KAAK,UACrC,EAAA;YACEY,QAAWzB,GAAAA,2BAAAA,CAA4BG,YAAY,CAACL,CAAE,CAAA,CAACe,OAAO,EAAEvI,OAAAA,CAAQrB,IAAI,CAACgJ,EAAE,CAAA,CAAA;YAC/EsB,OACKK,CAAAA,EAAE,CAACH,QAAAA,CACJ;;AAECI,aAAAA,IAAI,CAACH,aAAe,EAAA;AACjB,gBAAA,GAAGpJ,OAAO;gBACVwJ,IAAM,EAAA;AACFL,oBAAAA,QAAAA;oBACAM,MAAQzJ,EAAAA,OAAAA,CAAQrB,IAAI,CAACgJ,EAAE;AAC3B,iBAAA;AACJ,aAAA,CAAA,CAAA;AACR,SAAA;AACJ,KAAA;AACJ;;ACnDO,eAAe+B,kBAAAA,CAClB1J,OAA4B,EAC5B6H,YAAqC,EAAA;AAErC,IAAA,MAAMD,wBAAwB5H,OAAS6H,EAAAA,YAAAA,CAAAA,CAAAA;AACvCmB,IAAAA,wBAAAA,CAAyBhJ,OAAS6H,EAAAA,YAAAA,CAAAA,CAAAA;AACtC;;AClBA;;;;;AAKC,IAIM,MAAM8B,UAAAA,CAAAA;IAKTC,KAAQ,GAAA;AACJ,QAAA,OAAO,IAAI,CAAA;AACf,KAAA;IAQAC,IAAO,GAAA;AACH,QAAA,OAAO,IAAI,CAAA;AACf,KAAA;IAQAC,IAAO,GAAA;AACH,QAAA,OAAO,IAAI,CAAA;AACf,KAAA;IAQAC,IAAO,GAAA;AACH,QAAA,OAAO,IAAI,CAAA;AACf,KAAA;IAQAC,OAAU,GAAA;AACN,QAAA,OAAO,IAAI,CAAA;AACf,KAAA;IAQAC,KAAQ,GAAA;AACJ,QAAA,OAAO,IAAI,CAAA;AACf,KAAA;AAGJ;;AC3DA,IAAIpB,UAAAA,CAAAA;AAEG,SAASqB,SAAAA,GAAAA;IACZ,IAAI,OAAOrB,eAAa,WAAa,EAAA;QACjC,OAAOA,UAAAA,CAAAA;AACX,KAAA;AAEAA,IAAAA,UAAAA,GAAW,IAAIc,UAAAA,EAAAA,CAAAA;IAEf,OAAOd,UAAAA,CAAAA;AACX,CAAA;AAEO,SAASsB,UAAUC,MAAc,EAAA;IACpCvB,UAAWuB,GAAAA,MAAAA,CAAAA;AACf;;ACxBA;;;;;AAKC,IAID,IAAIvB,UAAAA,CAAAA;AAEG,SAASwB,aAAAA,GAAAA;AACZ,IAAA,OAAO,CAAC,CAACxB,UAAAA,CAAAA;AACb,CAAA;AAEO,SAASyB,cAAcpM,KAAsC,EAAA;IAChE2K,UAAW3K,GAAAA,KAAAA,CAAAA;AACf,CAAA;AAEO,SAASqM,aAAAA,GAAAA;IACZ,IAAI,OAAO1B,eAAa,WAAa,EAAA;QACjC,OAAOA,UAAAA,CAAAA;AACX,KAAA;AAEAA,IAAAA,UAAAA,GAAW,EAAC,CAAA;IAEZ,OAAOA,UAAAA,CAAAA;AACX;;ACfO,SAAS2B,iBAAiBvL,OAA6B,EAAA;IAC1D,IAAIwL,SAAAA,CAAAA;AAEJxL,IAAAA,OAAAA,GAAUA,WAAW,EAAC,CAAA;IAEtB,IAAI,OAAOA,YAAY,QAAU,EAAA;AAC7BwL,QAAAA,SAAAA,GAAYC,0BAAgBzL,CAAAA,OAAAA,CAAAA,CAAAA;KACzB,MAAA,IAAIA,OAAQ0L,CAAAA,gBAAgB,EAAE;QACjCF,SAAYC,GAAAA,0BAAAA,CAAgBzL,QAAQ0L,gBAAgB,CAAA,CAAA;KACjD,MAAA;QACH,IAAIC,IAAAA,CAAAA;AACJ,QAAA,IAAI3L,OAAQ4L,CAAAA,IAAI,IAAI5L,OAAAA,CAAQ6L,QAAQ,EAAE;YAClCF,IAAO,GAAA;gBACHpL,IAAM,EAAA,OAAA;AACNqL,gBAAAA,IAAAA,EAAM5L,QAAQ4L,IAAI;AAClBE,gBAAAA,IAAAA,EAAM9L,QAAQ6L,QAAQ;AAC1B,aAAA,CAAA;AACJ,SAAA;AAEAL,QAAAA,SAAAA,GAAYC,0BAAgB,CAAA;AACxBM,YAAAA,IAAAA,EAAM/L,QAAQ+L,IAAI;AAClBC,YAAAA,IAAAA,EAAMhM,QAAQgM,IAAI;AAClBL,YAAAA,IAAAA;AACAM,YAAAA,MAAAA,EAAQjM,QAAQkM,GAAG;AACnBC,YAAAA,gBAAAA,EAAkBnM,QAAQoM,QAAQ;YAClCC,GAAK,EAAA;gBACDC,kBAAoB,EAAA,KAAA;AACxB,aAAA;AACJ,SAAA,CAAA,CAAA;AACJ,KAAA;IAEAd,SAAUe,CAAAA,EAAE,CAAC,OAAA,EAAS,CAAC9I,CAAAA,GAAAA;QACnBwH,SAAYN,EAAAA,CAAAA,KAAK,CAAClH,CAAAA,CAAEoC,OAAO,CAAA,CAAA;AAC/B,KAAA,CAAA,CAAA;IAEA,OAAO2F,SAAAA,CAAAA;AACX;;ACnCA,IAAI5B,QAAAA,CAAAA;AAEG,eAAe4C,aAAAA,GAAAA;IAClB,IAAI,OAAO5C,aAAa,WAAa,EAAA;QACjC,OAAOA,QAAAA,CAAAA;AACX,KAAA;IAEA,IAAI5J,OAAAA,CAAAA;AACJ,IAAA,IAAIE,OAAQuM,CAAAA,GAAG,CAACC,QAAQ,KAAK,MAAQ,EAAA;AACjC,QAAA,MAAMC,cAAc,MAAMC,4BAAAA,EAAAA,CAAAA;QAE1B5M,OAAU,GAAA;YACN+L,IAAM,EAAA,qBAAA;YACNC,IAAM,EAAA,GAAA;YACNE,GAAK,EAAA,KAAA;AACLN,YAAAA,IAAAA,EAAMe,YAAYf,IAAI;AACtBC,YAAAA,QAAAA,EAAUc,YAAYb,IAAI;AAC9B,SAAA,CAAA;KACG,MAAA;QACH9L,OAAUsL,GAAAA,aAAAA,EAAAA,CAAAA;AACd,KAAA;AAEA1B,IAAAA,QAAAA,GAAW2B,gBAAiBvL,CAAAA,OAAAA,CAAAA,CAAAA;IAE5B,OAAO4J,QAAAA,CAAAA;AACX;;ACtCA;;;;;AAKC,IAEM,SAASrF,cACZsI,CAAAA,GAAM,EACNC,IAAO,EAAA;AAEP,IAAA,OAAOzI,OAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACqI,GAAKC,EAAAA,IAAAA,CAAAA,CAAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.mjs CHANGED
@@ -1,9 +1,9 @@
1
- import { compare as compare$1, hash as hash$1 } from 'bcrypt';
1
+ import { compare as compare$1, hash as hash$1 } from '@node-rs/bcrypt';
2
2
  import { createPrivateKey, generateKeyPair, createPublicKey } from 'node:crypto';
3
- import { isObject, TokenError, KeyType, DomainEventName, buildDomainEventFullName } from '@authup/core';
3
+ import { isObject, TokenError, JWTAlgorithm, KeyType, DomainEventName, buildDomainEventFullName } from '@authup/core';
4
4
  import path from 'node:path';
5
5
  import fs from 'node:fs';
6
- import { decode, sign, verify } from 'jsonwebtoken';
6
+ import { Algorithm, sign, verify } from '@node-rs/jsonwebtoken';
7
7
  import { isObject as isObject$1 } from 'smob';
8
8
  import { hasClient, hasConfig, useClient } from 'redis-extension';
9
9
  import { Emitter } from '@socket.io/redis-emitter';
@@ -13,8 +13,8 @@ async function compare(value, hashedValue) {
13
13
  return compare$1(value, hashedValue);
14
14
  }
15
15
 
16
- async function hash(str, saltOrRounds = 10) {
17
- return hash$1(str, saltOrRounds);
16
+ async function hash(str, rounds = 10) {
17
+ return hash$1(str, rounds);
18
18
  }
19
19
 
20
20
  /*
@@ -259,26 +259,89 @@ async function useKeyPair(value) {
259
259
  return keyPair;
260
260
  }
261
261
 
262
+ /**
263
+ * Decode a JWT token with no verification.
264
+ *
265
+ * @param token
266
+ *
267
+ * @throws TokenError
268
+ */ function extractTokenHeader(token) {
269
+ const parts = token.split('.');
270
+ if (parts.length !== 3) {
271
+ throw TokenError.payloadInvalid('The token format is not valid.');
272
+ }
273
+ const [headerBase64] = parts;
274
+ try {
275
+ const payload = atob(headerBase64);
276
+ return JSON.parse(payload);
277
+ /*
278
+ return {
279
+ typ: 'JWT',
280
+ alg: transformInternalToJWTAlgorithm(header.algorithm),
281
+ cty: header.contentType,
282
+ jku: header.jsonKeyUrl,
283
+ kid: header.keyId,
284
+ x5u: header.x5Url,
285
+ x5c: header.x5CertChain,
286
+ x5t: header.x5CertThumbprint,
287
+ 'x5t#S256': header.x5TS256CertThumbprint,
288
+ };
289
+ */ } catch (e) {
290
+ throw TokenError.headerInvalid('The token header could not be extracted.');
291
+ }
292
+ }
293
+ function extractTokenPayload(token) {
294
+ const parts = token.split('.');
295
+ if (parts.length !== 3) {
296
+ throw TokenError.payloadInvalid('The token format is not valid.');
297
+ }
298
+ const [, payloadBase64] = parts;
299
+ try {
300
+ const payload = atob(payloadBase64);
301
+ return JSON.parse(payload);
302
+ } catch (e) {
303
+ throw TokenError.payloadInvalid('The token payload could not be extracted.');
304
+ }
305
+ }
306
+
262
307
  function createErrorForJWTError(e) {
263
- if (isObject$1(e) && typeof e.name === 'string') {
264
- switch(e.name){
265
- case 'TokenExpiredError':
308
+ if (isObject$1(e)) {
309
+ if (typeof e.name === 'string') {
310
+ switch(e.name){
311
+ case 'TokenExpiredError':
312
+ {
313
+ return TokenError.expired();
314
+ }
315
+ case 'NotBeforeError':
316
+ {
317
+ if (typeof e.date === 'string' || e.date instanceof Date) {
318
+ return TokenError.notActiveBefore(e.date);
319
+ }
320
+ break;
321
+ }
322
+ case 'JsonWebTokenError':
323
+ {
324
+ if (typeof e.message === 'string') {
325
+ return TokenError.payloadInvalid(e.message);
326
+ }
327
+ break;
328
+ }
329
+ }
330
+ }
331
+ // @see https://github.com/Keats/jsonwebtoken/blob/master/src/errors.rs
332
+ switch(e.message){
333
+ case 'ExpiredSignature':
266
334
  {
267
335
  return TokenError.expired();
268
336
  }
269
- case 'NotBeforeError':
337
+ case 'ImmatureSignature':
270
338
  {
271
- if (typeof e.date === 'string' || e.date instanceof Date) {
272
- return TokenError.notActiveBefore(e.date);
273
- }
274
- break;
339
+ return TokenError.notActiveBefore();
275
340
  }
276
- case 'JsonWebTokenError':
341
+ case 'InvalidToken':
342
+ case 'InvalidSignature':
277
343
  {
278
- if (typeof e.message === 'string') {
279
- return TokenError.payloadInvalid(e.message);
280
- }
281
- break;
344
+ return TokenError.payloadInvalid();
282
345
  }
283
346
  }
284
347
  }
@@ -288,49 +351,100 @@ function createErrorForJWTError(e) {
288
351
  message: 'The JWT error could not be determined.'
289
352
  });
290
353
  }
291
-
292
- function decodeToken(token, options) {
293
- options ?? (options = {});
294
- let output;
295
- try {
296
- output = decode(token, {
297
- ...options
298
- });
299
- } catch (e) {
300
- throw createErrorForJWTError(e);
301
- }
302
- if (output === null) {
303
- throw TokenError.payloadInvalid('The token could not be decoded.');
354
+ function transformJWTAlgorithmToInternal(algorithm) {
355
+ switch(algorithm){
356
+ case JWTAlgorithm.HS256:
357
+ {
358
+ return Algorithm.HS256;
359
+ }
360
+ case JWTAlgorithm.HS384:
361
+ {
362
+ return Algorithm.HS384;
363
+ }
364
+ case JWTAlgorithm.HS512:
365
+ {
366
+ return Algorithm.HS512;
367
+ }
368
+ case JWTAlgorithm.RS256:
369
+ {
370
+ return Algorithm.RS256;
371
+ }
372
+ case JWTAlgorithm.RS384:
373
+ {
374
+ return Algorithm.RS384;
375
+ }
376
+ case JWTAlgorithm.RS512:
377
+ {
378
+ return Algorithm.RS512;
379
+ }
380
+ case JWTAlgorithm.ES256:
381
+ {
382
+ return Algorithm.ES256;
383
+ }
384
+ case JWTAlgorithm.ES384:
385
+ {
386
+ return Algorithm.ES384;
387
+ }
388
+ case JWTAlgorithm.PS256:
389
+ {
390
+ return Algorithm.PS256;
391
+ }
392
+ case JWTAlgorithm.PS384:
393
+ {
394
+ return Algorithm.PS384;
395
+ }
396
+ case JWTAlgorithm.PS512:
397
+ {
398
+ return Algorithm.PS512;
399
+ }
304
400
  }
305
- return output;
401
+ throw new Error(`The algorithm ${algorithm} is not supported.`);
306
402
  }
307
403
 
308
- async function signToken(payload, context) {
309
- context.expiresIn = context.expiresIn || 3600;
404
+ const getUtcTimestamp = ()=>Math.floor(new Date().getTime() / 1000);
405
+ async function signToken(claims, context) {
406
+ if (typeof claims.exp !== 'number') {
407
+ claims.exp = getUtcTimestamp() + 3600;
408
+ }
409
+ if (typeof claims.iat !== 'number') {
410
+ claims.iat = getUtcTimestamp();
411
+ }
310
412
  switch(context.type){
311
413
  case KeyType.RSA:
312
414
  case KeyType.EC:
313
415
  {
314
- const { type, keyPair, ...options } = context;
315
- const { privateKey } = isKeyPair(keyPair) ? keyPair : await useKeyPair(keyPair);
316
- if (type === KeyType.RSA) {
317
- options.algorithm = options.algorithm || 'RS256';
416
+ const { privateKey } = isKeyPair(context.keyPair) ? context.keyPair : await useKeyPair(context.keyPair);
417
+ let algorithm;
418
+ if (context.type === KeyType.RSA) {
419
+ algorithm = context.algorithm ? transformJWTAlgorithmToInternal(context.algorithm) : Algorithm.RS256;
318
420
  } else {
319
- options.algorithm = options.algorithm || 'ES256';
421
+ algorithm = context.algorithm ? transformJWTAlgorithmToInternal(context.algorithm) : Algorithm.ES256;
320
422
  }
321
- return sign(payload, privateKey, options);
423
+ return sign(claims, privateKey, {
424
+ algorithm,
425
+ keyId: context.keyId
426
+ });
322
427
  }
323
428
  case KeyType.OCT:
324
429
  {
325
- const { type, secret, ...options } = context;
326
- options.algorithm = options.algorithm || 'HS256';
327
- return sign(payload, secret, options);
430
+ const algorithm = context.algorithm ? transformJWTAlgorithmToInternal(context.algorithm) : Algorithm.HS256;
431
+ return sign(claims, context.key, {
432
+ algorithm,
433
+ keyId: context.keyId
434
+ });
328
435
  }
329
436
  }
330
437
  throw new TokenError();
331
438
  }
332
439
 
333
- async function verifyToken(token, context) {
440
+ /**
441
+ * Verify JWT.
442
+ *
443
+ * @param token
444
+ * @param context
445
+ *
446
+ * @throws TokenError
447
+ */ async function verifyToken(token, context) {
334
448
  let promise;
335
449
  let output;
336
450
  try {
@@ -338,51 +452,39 @@ async function verifyToken(token, context) {
338
452
  case KeyType.RSA:
339
453
  case KeyType.EC:
340
454
  {
341
- const { type, keyPair, ...options } = context;
342
- const { publicKey } = isKeyPairWithPublicKey(keyPair) ? keyPair : await useKeyPair(keyPair);
343
- if (type === KeyType.RSA) {
344
- options.algorithms = options.algorithms || [
345
- 'RS256',
346
- 'RS384',
347
- 'RS512',
348
- 'PS256',
349
- 'PS384',
350
- 'PS512'
455
+ const { publicKey } = isKeyPairWithPublicKey(context.keyPair) ? context.keyPair : await useKeyPair(context.keyPair);
456
+ let algorithms;
457
+ if (context.type === KeyType.RSA) {
458
+ algorithms = context.algorithms ? context.algorithms.map((algorithm)=>transformJWTAlgorithmToInternal(algorithm)) : [
459
+ Algorithm.RS256,
460
+ Algorithm.RS384,
461
+ Algorithm.RS512,
462
+ Algorithm.PS256,
463
+ Algorithm.PS384,
464
+ Algorithm.PS512
351
465
  ];
352
466
  } else {
353
- options.algorithms = options.algorithms || [
354
- 'ES256',
355
- 'ES384',
356
- 'ES512'
467
+ algorithms = context.algorithms ? context.algorithms.map((algorithm)=>transformJWTAlgorithmToInternal(algorithm)) : [
468
+ Algorithm.ES256,
469
+ Algorithm.ES384
357
470
  ];
358
471
  }
359
- promise = new Promise((resolve, reject)=>{
360
- verify(token, publicKey, options, (err, decoded)=>{
361
- if (err) {
362
- reject(err);
363
- return;
364
- }
365
- resolve(decoded);
366
- });
472
+ promise = verify(token, publicKey, {
473
+ algorithms,
474
+ validateNbf: true
367
475
  });
368
476
  break;
369
477
  }
370
478
  case KeyType.OCT:
371
479
  {
372
- const { type, secret, ...options } = context;
373
- options.algorithms = options.algorithms || [
374
- 'HS256',
375
- 'HS384',
376
- 'HS512'
480
+ const algorithms = context.algorithms ? context.algorithms.map((algorithm)=>transformJWTAlgorithmToInternal(algorithm)) : [
481
+ Algorithm.HS256,
482
+ Algorithm.HS384,
483
+ Algorithm.HS512
377
484
  ];
378
- promise = new Promise((resolve, reject)=>{
379
- verify(token, secret, options, (err, decoded)=>{
380
- if (err) {
381
- reject(err);
382
- return;
383
- }
384
- resolve(decoded);
385
- });
485
+ promise = verify(token, context.key, {
486
+ algorithms,
487
+ validateNbf: true
386
488
  });
387
489
  }
388
490
  }
@@ -609,5 +711,5 @@ async function useSMTPClient() {
609
711
  return Object.prototype.hasOwnProperty.call(obj, prop);
610
712
  }
611
713
 
612
- export { KeyPairKind, VoidLogger, buildKeyFileName, compare, createKeyPair, createSmtpClient, decodeToken, decryptRSAPrivateKey, deleteKeyPair, extendKeyPairOptions, hasOwnProperty, hasSmtpConfig, hash, isKeyPair, isKeyPairWithPublicKey, loadKeyPair, publishDomainEvent, publishDomainRedisEvent, publishDomainSocketEvent, saveKeyPair, setLogger, setSmtpConfig, signToken, useKeyPair, useLogger, useSMTPClient, useSmtpConfig, useSocketEmitter, verifyToken };
714
+ export { KeyPairKind, VoidLogger, buildKeyFileName, compare, createKeyPair, createSmtpClient, decryptRSAPrivateKey, deleteKeyPair, extendKeyPairOptions, extractTokenHeader, extractTokenPayload, hasOwnProperty, hasSmtpConfig, hash, isKeyPair, isKeyPairWithPublicKey, loadKeyPair, publishDomainEvent, publishDomainRedisEvent, publishDomainSocketEvent, saveKeyPair, setLogger, setSmtpConfig, signToken, useKeyPair, useLogger, useSMTPClient, useSmtpConfig, useSocketEmitter, verifyToken };
613
715
  //# sourceMappingURL=index.mjs.map