@authup/server-kit 1.0.0-beta.24 → 1.0.0-beta.26

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/crypto/hash/compare.ts","../src/crypto/hash/hash.ts","../src/crypto/key-asymmetric/constants.ts","../src/crypto/key-asymmetric/check.ts","../src/crypto/key-asymmetric/key-usages.ts","../src/crypto/key-asymmetric/normalize.ts","../src/crypto/key-asymmetric/create.ts","../src/crypto/key-asymmetric/helpers/wrap.ts","../src/crypto/key-symmetric/constants.ts","../src/crypto/key-symmetric/normalize.ts","../src/crypto/key-symmetric/check.ts","../src/crypto/key-symmetric/key-usages.ts","../src/crypto/key-symmetric/create.ts","../src/crypto/key/key-usages.ts","../src/crypto/key/container.ts","../src/crypto/json-web-token/extract.ts","../src/crypto/json-web-token/utils.ts","../src/crypto/json-web-token/sign/module.ts","../src/crypto/json-web-token/verify/module.ts","../src/services/redis/singleton.ts","../src/services/cache/adapters/memory.ts","../src/services/cache/adapters/redis.ts","../src/services/cache/adapters/factory.ts","../src/services/cache/helper.ts","../src/services/cache/module.ts","../src/services/cache/singleton.ts","../src/services/logger/module.ts","../src/services/logger/singleton.ts","../src/services/vault/singleton.ts","../src/domain-event/utils.ts","../src/domain-event/redis/module.ts","../src/domain-event/socket/module.ts","../src/domain-event/module.ts","../src/utils/has-property.ts"],"sourcesContent":["/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { compare as compareMethod } from '@node-rs/bcrypt';\n\nexport async function compare(value: string, hashedValue: string) : Promise<boolean> {\n return compareMethod(value, hashedValue);\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hash as hashMethod } from '@node-rs/bcrypt';\n\nexport async function hash(str: string, rounds: number = 10) : Promise<string> {\n return hashMethod(str, rounds);\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum CryptoAsymmetricAlgorithm {\n RSA_PSS = 'RSA-PSS',\n RSASSA_PKCS1_V1_5 = 'RSASSA-PKCS1-v1_5',\n RSA_OAEP = 'RSA-OAEP',\n ECDSA = 'ECDSA',\n ECDH = 'ECDH',\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { CryptoAsymmetricAlgorithm } from './constants';\n\nexport function isAsymmetricAlgorithm(input: string) : input is CryptoAsymmetricAlgorithm {\n return (Object.values(CryptoAsymmetricAlgorithm) as string[]).indexOf(input) !== -1;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { CryptoAsymmetricAlgorithm } from './constants';\n\n/**\n * @see https://nodejs.org/api/webcrypto.html#cryptokeyusages\n */\nexport function getKeyUsagesForAsymmetricAlgorithm(\n name: string,\n format?: Exclude<KeyFormat, 'jwk'>,\n) : KeyUsage[] {\n if (\n name === CryptoAsymmetricAlgorithm.RSA_PSS ||\n name === CryptoAsymmetricAlgorithm.ECDSA ||\n name === CryptoAsymmetricAlgorithm.RSASSA_PKCS1_V1_5\n ) {\n if (format === 'spki') {\n return ['verify'];\n } if (format === 'pkcs8') {\n return ['sign'];\n }\n\n return ['sign', 'verify'];\n }\n\n if (name === CryptoAsymmetricAlgorithm.ECDH) {\n if (format === 'spki') {\n return [];\n }\n\n return [\n 'deriveKey',\n 'deriveBits',\n ];\n }\n\n if (name === CryptoAsymmetricAlgorithm.RSA_OAEP) {\n if (format === 'spki') {\n return ['encrypt'];\n } if (format === 'pkcs8') {\n return ['decrypt'];\n }\n\n return ['encrypt', 'decrypt'];\n }\n\n throw new SyntaxError(`Key usages can not be determined for asymmetric algorithm: ${name}`);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { CryptoAsymmetricAlgorithm } from './constants';\nimport type {\n AsymmetricKeyImportOptionsInput,\n AsymmetricKeyPairCreateOptions,\n AsymmetricKeyPairCreateOptionsInput,\n AsymmetricKeyPairImportOptions,\n} from './types';\n\nexport function normalizeAsymmetricKeyPairCreateOptions(\n options: AsymmetricKeyPairCreateOptionsInput,\n) : AsymmetricKeyPairCreateOptions {\n let optionsNormalized : AsymmetricKeyPairCreateOptions;\n switch (options.name) {\n case CryptoAsymmetricAlgorithm.RSASSA_PKCS1_V1_5:\n case CryptoAsymmetricAlgorithm.RSA_PSS:\n case CryptoAsymmetricAlgorithm.RSA_OAEP: {\n optionsNormalized = {\n modulusLength: 2048,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n hash: 'SHA-256',\n ...options,\n };\n break;\n }\n case CryptoAsymmetricAlgorithm.ECDSA:\n case CryptoAsymmetricAlgorithm.ECDH: {\n optionsNormalized = {\n namedCurve: 'P-256',\n ...options,\n };\n }\n }\n\n return optionsNormalized;\n}\n\nexport function normalizeAsymmetricKeyImportOptions(\n options: AsymmetricKeyImportOptionsInput,\n) : AsymmetricKeyPairImportOptions {\n let optionsNormalized : AsymmetricKeyPairImportOptions;\n switch (options.name) {\n case CryptoAsymmetricAlgorithm.RSASSA_PKCS1_V1_5:\n case CryptoAsymmetricAlgorithm.RSA_PSS:\n case CryptoAsymmetricAlgorithm.RSA_OAEP: {\n optionsNormalized = {\n hash: 'SHA-256',\n ...options,\n };\n break;\n }\n case CryptoAsymmetricAlgorithm.ECDSA:\n case CryptoAsymmetricAlgorithm.ECDH: {\n optionsNormalized = {\n namedCurve: 'P-256',\n ...options,\n };\n }\n }\n\n return optionsNormalized;\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { getKeyUsagesForAsymmetricAlgorithm } from './key-usages';\nimport { normalizeAsymmetricKeyPairCreateOptions } from './normalize';\nimport type { AsymmetricKeyPairCreateOptionsInput } from './types';\n\nexport async function createAsymmetricKeyPair(options: AsymmetricKeyPairCreateOptionsInput) : Promise<CryptoKeyPair> {\n const optionsNormalized = normalizeAsymmetricKeyPairCreateOptions(options);\n return crypto.subtle.generateKey(\n optionsNormalized,\n true,\n getKeyUsagesForAsymmetricAlgorithm(optionsNormalized.name),\n );\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nfunction enc(\n type: 'PRIVATE KEY' | 'PUBLIC KEY',\n input: string,\n) {\n return `-----BEGIN ${type}-----\\n${input}\\n-----END ${type}-----`;\n}\n\nexport function encodePKCS8ToPEM(base64: string) {\n return enc('PRIVATE KEY', base64);\n}\n\nexport function encodeSPKIToPem(input: string) {\n return enc('PUBLIC KEY', input);\n}\n\n// ------------------------------------------------------------\n\nfunction dec(\n type: 'PRIVATE KEY' | 'PUBLIC KEY',\n input: string,\n) {\n input = input.replace(`-----BEGIN ${type}-----\\n`, '');\n\n input = input.replace(`\\n-----END ${type}-----\\n`, '');\n input = input.replace(`-----END ${type}-----\\n`, '');\n input = input.replace(`\\n-----END ${type}-----`, '');\n\n return input;\n}\n\nexport function decodePemToPKCS8(input: string) {\n return dec('PRIVATE KEY', input);\n}\n\nexport function decodePemToSpki(input: string) {\n return dec('PUBLIC KEY', input);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum SymmetricAlgorithm {\n HMAC = 'HMAC',\n AES_CTR = 'AES-CTR',\n AES_CBC = 'AES-CBC',\n AES_GCM = 'AES-GCM',\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { SymmetricAlgorithm } from './constants';\nimport type {\n SymmetricKeyCreateOptions, SymmetricKeyCreateOptionsInput, SymmetricKeyImportOptions, SymmetricKeyImportOptionsInput,\n} from './types';\n\nexport function normalizeSymmetricKeyCreateOptions(\n input: SymmetricKeyCreateOptionsInput,\n) : SymmetricKeyCreateOptions {\n if (input.name === SymmetricAlgorithm.HMAC) {\n return {\n hash: 'SHA-256',\n ...input,\n };\n }\n\n return {\n length: 256,\n name: input.name,\n };\n}\n\nexport function normalizeSymmetricKeyImportOptions(\n input: SymmetricKeyImportOptionsInput,\n) : SymmetricKeyImportOptions {\n if (input.name === SymmetricAlgorithm.HMAC) {\n return {\n hash: 'SHA-256',\n ...input,\n };\n }\n\n return input;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { SymmetricAlgorithm } from './constants';\n\nexport function isSymmetricAlgorithm(input: string) : input is SymmetricAlgorithm {\n return (Object.values(SymmetricAlgorithm) as string[]).indexOf(input) !== -1;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { SymmetricAlgorithm } from './constants';\n\nexport function getKeyUsagesForSymmetricAlgorithm(name: string) : KeyUsage[] | undefined {\n /**\n * @see https://nodejs.org/api/webcrypto.html#cryptokeyusages\n */\n if (name === SymmetricAlgorithm.HMAC) {\n return [\n 'sign',\n 'verify',\n ];\n }\n\n if (\n name === SymmetricAlgorithm.AES_CBC ||\n name === SymmetricAlgorithm.AES_GCM ||\n name === SymmetricAlgorithm.AES_CTR\n ) {\n return [\n 'encrypt',\n 'decrypt',\n ];\n }\n\n throw new SyntaxError(`Key usages can not be determined for symmetric algorithm: ${name}`);\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { getKeyUsagesForSymmetricAlgorithm } from './key-usages';\nimport { normalizeSymmetricKeyCreateOptions } from './normalize';\nimport type { SymmetricKeyCreateOptionsInput } from './types';\n\nexport async function createSymmetricKey(input: SymmetricKeyCreateOptionsInput) : Promise<CryptoKey> {\n const optionsNormalized = normalizeSymmetricKeyCreateOptions(input);\n\n return crypto.subtle.generateKey(\n optionsNormalized,\n true,\n getKeyUsagesForSymmetricAlgorithm(optionsNormalized.name),\n );\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { getKeyUsagesForAsymmetricAlgorithm, isAsymmetricAlgorithm } from '../key-asymmetric';\nimport { getKeyUsagesForSymmetricAlgorithm, isSymmetricAlgorithm } from '../key-symmetric';\n\nexport function getKeyUsagesForAlgorithm(name: string, format?: Exclude<KeyFormat, 'jwk'>) : KeyUsage[] {\n if (isAsymmetricAlgorithm(name)) {\n return getKeyUsagesForAsymmetricAlgorithm(name, format);\n }\n\n if (isSymmetricAlgorithm(name)) {\n return getKeyUsagesForSymmetricAlgorithm(name);\n }\n\n throw new SyntaxError(`Key usages can not be determined for algorithm: ${name}`);\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { arrayBufferToBase64, base64ToArrayBuffer } from '@authup/kit';\nimport type { AsymmetricKeyPairImportOptions } from '../key-asymmetric';\nimport {\n decodePemToPKCS8,\n decodePemToSpki, encodePKCS8ToPEM, encodeSPKIToPem, normalizeAsymmetricKeyImportOptions,\n} from '../key-asymmetric';\nimport type { SymmetricKeyImportOptions } from '../key-symmetric';\nimport { normalizeSymmetricKeyImportOptions } from '../key-symmetric/normalize';\nimport { getKeyUsagesForAlgorithm } from './key-usages';\nimport type { KeyContainerAsymmetricImportOptions, KeyContainerImportOptions } from './types';\n\nexport class CryptoKeyContainer {\n protected key : CryptoKey;\n\n constructor(cryptoKey : CryptoKey) {\n this.key = cryptoKey;\n }\n\n // ----------------------------------------------\n\n async toArrayBuffer(): Promise<ArrayBuffer> {\n if (this.key.type === 'private') {\n return crypto.subtle.exportKey('pkcs8', this.key);\n }\n\n if (this.key.type === 'public') {\n return crypto.subtle.exportKey('spki', this.key);\n }\n\n return crypto.subtle.exportKey('raw', this.key);\n }\n\n async toUint8Array(): Promise<Uint8Array> {\n const arrayBuffer = await this.toArrayBuffer();\n return new Uint8Array(arrayBuffer);\n }\n\n async toBase64() : Promise<string> {\n const arrayBuffer = await this.toArrayBuffer();\n return arrayBufferToBase64(arrayBuffer);\n }\n\n async toPem(): Promise<string> {\n const base64 = await this.toBase64();\n\n if (this.key.type === 'public') {\n return encodeSPKIToPem(base64);\n }\n\n if (this.key.type === 'private') {\n return encodePKCS8ToPEM(base64);\n }\n\n throw new Error('A symmetric key can not be encoded as PEM');\n }\n\n async toJWK() : Promise<JsonWebKey> {\n return crypto.subtle.exportKey('jwk', this.key);\n }\n\n // ----------------------------------------------\n\n static async fromPem(ctx: KeyContainerAsymmetricImportOptions<string>): Promise<CryptoKeyContainer> {\n if (ctx.format === 'pkcs8') {\n return CryptoKeyContainer.fromBase64({ ...ctx, key: decodePemToPKCS8(ctx.key) });\n }\n return CryptoKeyContainer.fromBase64({ ...ctx, key: decodePemToSpki(ctx.key) });\n }\n\n static async fromBase64(\n ctx: KeyContainerImportOptions<string>,\n ) : Promise<CryptoKeyContainer> {\n const arrayBuffer = base64ToArrayBuffer(ctx.key);\n\n return CryptoKeyContainer.fromArrayBuffer({\n ...ctx,\n key: arrayBuffer,\n });\n }\n\n static async fromArrayBuffer(\n ctx: KeyContainerImportOptions<ArrayBuffer>,\n ) : Promise<CryptoKeyContainer> {\n let normalizedOptions : AsymmetricKeyPairImportOptions | SymmetricKeyImportOptions;\n if (ctx.format === 'spki' || ctx.format === 'pkcs8') {\n normalizedOptions = normalizeAsymmetricKeyImportOptions(ctx.options);\n } else if (ctx.format === 'raw') {\n normalizedOptions = normalizeSymmetricKeyImportOptions(ctx.options);\n } else {\n throw new SyntaxError(`Format ${ctx.format} is not supported.`);\n }\n\n const cryptoKey = await crypto.subtle.importKey(\n ctx.format,\n ctx.key,\n normalizedOptions,\n true,\n getKeyUsagesForAlgorithm(normalizedOptions.name, ctx.format),\n );\n\n return new CryptoKeyContainer(cryptoKey);\n }\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { JWTClaims, JWTHeader } from '@authup/specs';\nimport { TokenError } from '@authup/specs';\n\n/**\n * Decode a JWT token with no verification.\n *\n * @param token\n *\n * @throws TokenError\n */\nexport function extractTokenHeader(\n token: string,\n) : JWTHeader {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw TokenError.payloadInvalid('The token format is not valid.');\n }\n\n const [headerBase64] = parts;\n\n try {\n const payload = atob(headerBase64);\n\n return JSON.parse(payload);\n\n /*\n return {\n typ: 'JWT',\n alg: transformInternalToJWTAlgorithm(header.algorithm),\n cty: header.contentType,\n jku: header.jsonKeyUrl,\n kid: header.keyId,\n x5u: header.x5Url,\n x5c: header.x5CertChain,\n x5t: header.x5CertThumbprint,\n 'x5t#S256': header.x5TS256CertThumbprint,\n };\n */\n } catch (e) {\n throw TokenError.headerInvalid('The token header could not be extracted.');\n }\n}\n\nexport function extractTokenPayload(\n token: string,\n) : JWTClaims {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw TokenError.payloadInvalid('The token format is not valid.');\n }\n\n const [, payloadBase64] = parts;\n\n try {\n const payload = atob(payloadBase64);\n\n return JSON.parse(payload);\n } catch (e) {\n throw TokenError.payloadInvalid('The token payload could not be extracted.');\n }\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { JWTAlgorithm, TokenError } from '@authup/specs';\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 { JWKType, TokenError } from '@authup/specs';\nimport type { JWTClaims } from '@authup/specs';\nimport { Algorithm, sign } from '@node-rs/jsonwebtoken';\nimport { encodePKCS8ToPEM } from '../../key-asymmetric';\nimport { CryptoKeyContainer } from '../../key';\nimport { transformJWTAlgorithmToInternal } from '../utils';\nimport type { TokenSignOptions } from './types';\n\nconst getUtcTimestamp = () => Math.floor(new Date().getTime() / 1000);\n\nexport async function signToken(claims: JWTClaims, context: TokenSignOptions): Promise<string> {\n if (typeof claims.exp !== 'number') {\n claims.exp = getUtcTimestamp() + 3600;\n }\n if (typeof claims.iat !== 'number') {\n claims.iat = getUtcTimestamp();\n }\n\n switch (context.type) {\n case JWKType.RSA:\n case JWKType.EC: {\n let algorithm : Algorithm;\n\n let key : string;\n if (typeof context.key === 'string') {\n key = encodePKCS8ToPEM(context.key);\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toPem();\n }\n\n if (context.type === JWKType.RSA) {\n algorithm = context.algorithm ?\n transformJWTAlgorithmToInternal(context.algorithm) :\n Algorithm.RS256;\n } else {\n algorithm = context.algorithm ?\n transformJWTAlgorithmToInternal(context.algorithm) :\n Algorithm.ES256;\n }\n\n return sign(claims, key, {\n algorithm,\n keyId: context.keyId,\n });\n }\n case JWKType.OCT: {\n const algorithm : Algorithm = context.algorithm ?\n transformJWTAlgorithmToInternal(context.algorithm) :\n Algorithm.HS256;\n\n let key : string | Uint8Array;\n if (typeof context.key === 'string') {\n key = context.key;\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toUint8Array();\n }\n\n return sign(claims, key, {\n algorithm,\n keyId: context.keyId,\n });\n }\n }\n\n throw new TokenError();\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { JWKType, TokenError } from '@authup/specs';\nimport type { JWTClaims, OAuth2TokenPayload } from '@authup/specs';\nimport { Algorithm, verify } from '@node-rs/jsonwebtoken';\nimport { encodeSPKIToPem } from '../../key-asymmetric';\nimport { CryptoKeyContainer } from '../../key';\nimport { createErrorForJWTError, transformJWTAlgorithmToInternal } from '../utils';\nimport type { TokenVerifyOptions } from './types';\n\n/**\n * Verify JWT.\n *\n * @param token\n * @param context\n *\n * @throws TokenError\n */\nexport async function verifyToken(\n token: string,\n context: TokenVerifyOptions,\n) : Promise<OAuth2TokenPayload> {\n let promise : Promise<JWTClaims>;\n\n let output : JWTClaims;\n\n try {\n switch (context.type) {\n case JWKType.RSA:\n case JWKType.EC: {\n let algorithms : Algorithm[];\n\n if (context.type === JWKType.RSA) {\n algorithms = context.algorithms ?\n context.algorithms.map((algorithm) => transformJWTAlgorithmToInternal(algorithm)) :\n [\n Algorithm.RS256,\n Algorithm.RS384,\n Algorithm.RS512,\n Algorithm.PS256,\n Algorithm.PS384,\n Algorithm.PS512,\n ];\n } else {\n algorithms = context.algorithms ?\n context.algorithms.map((algorithm) => transformJWTAlgorithmToInternal(algorithm)) :\n [\n Algorithm.ES256,\n Algorithm.ES384,\n ];\n }\n\n let key : string;\n if (typeof context.key === 'string') {\n key = encodeSPKIToPem(context.key);\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toPem();\n }\n\n promise = verify(token, key, {\n algorithms,\n validateNbf: true,\n });\n break;\n }\n case JWKType.OCT: {\n const algorithms : Algorithm[] = context.algorithms ?\n context.algorithms.map((algorithm) => transformJWTAlgorithmToInternal(algorithm)) :\n [\n Algorithm.HS256,\n Algorithm.HS384,\n Algorithm.HS512,\n ];\n\n let key : string | Uint8Array;\n if (typeof context.key === 'string') {\n key = context.key;\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toUint8Array();\n }\n\n promise = verify(token, key, {\n algorithms,\n validateNbf: true,\n });\n }\n }\n\n output = await promise;\n } catch (e) {\n throw createErrorForJWTError(e);\n }\n\n if (typeof output === 'undefined') {\n throw new TokenError({ message: 'Invalid type.' });\n }\n\n return output as OAuth2TokenPayload;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<Client>({\n name: 'redis',\n});\n\nexport function setRedisFactory(factory: Factory<Client>) {\n instance.setFactory(factory);\n}\n\nexport function isRedisClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setRedisClient(input: Client) {\n instance.set(input);\n}\n\nexport function useRedisClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Options } from '@isaacs/ttlcache';\nimport TTLCache from '@isaacs/ttlcache';\nimport type { CacheClearOptions, CacheSetOptions } from '../types';\nimport type { CacheAdapter } from './types';\n\nexport class MemoryCacheAdapter<\n VALUE = any,\n> implements CacheAdapter {\n protected instance : TTLCache<string, VALUE>;\n\n constructor(options: Options<string, VALUE> = {}) {\n this.instance = new TTLCache<string, VALUE>({\n checkAgeOnGet: true,\n ttl: Infinity,\n ...(options || {}),\n });\n }\n\n async get(key: string): Promise<VALUE> {\n return this.instance.get(key);\n }\n\n async set(key: string, value: VALUE, options: CacheSetOptions): Promise<void> {\n this.instance.set(key, value, {\n ttl: options.ttl,\n });\n }\n\n async drop(key: string): Promise<void> {\n this.instance.delete(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n for (let i = 0; i < keys.length; i++) {\n this.instance.delete(keys[i]);\n }\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n if (options.prefix) {\n const keys = this.instance.keys();\n let iterator = keys.next();\n while (!iterator.done) {\n if (iterator.value.startsWith(options.prefix)) {\n this.instance.delete(iterator.value);\n }\n\n iterator = keys.next();\n }\n\n return;\n }\n\n this.instance.clear();\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport { JsonAdapter } from 'redis-extension';\nimport { useRedisClient } from '../../redis';\nimport type { CacheClearOptions, CacheSetOptions } from '../types';\nimport type { CacheAdapter } from './types';\n\nexport class RedisCacheAdapter implements CacheAdapter {\n protected client : Client;\n\n protected instance : JsonAdapter;\n\n constructor() {\n this.client = useRedisClient();\n this.instance = new JsonAdapter(this.client);\n }\n\n async get(key: string): Promise<any> {\n return this.instance.get(key);\n }\n\n async set(key: string, value: any, options: CacheSetOptions): Promise<void> {\n await this.instance.set(key, value, {\n milliseconds: options.ttl,\n });\n }\n\n async drop(key: string): Promise<void> {\n await this.instance.drop(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n const pipeline = this.client.pipeline();\n\n for (let i = 0; i < keys.length; i++) {\n pipeline.del(keys[i]);\n }\n\n await pipeline.exec();\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n if (options.prefix) {\n const pipeline = this.client.pipeline();\n\n const keys = await this.client.keys(`${options.prefix}*`);\n for (let i = 0; i < keys.length; i++) {\n pipeline.del(keys[i]);\n }\n\n await pipeline.exec();\n\n return;\n }\n await this.client.flushdb();\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isRedisClientUsable } from '../../redis';\nimport { MemoryCacheAdapter } from './memory';\nimport { RedisCacheAdapter } from './redis';\n\nexport function createCacheAdapter() {\n if (isRedisClientUsable()) {\n return new RedisCacheAdapter();\n }\n\n return new MemoryCacheAdapter();\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildRedisKeyPath } from '../redis';\nimport type { CacheKeyBuildOptions } from './types';\n\nexport function buildCacheKey(options: CacheKeyBuildOptions) {\n return buildRedisKeyPath(options);\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { CacheAdapter } from './adapters';\nimport type { CacheClearOptions, CacheSetOptions } from './types';\n\nexport class Cache {\n protected adapter : CacheAdapter;\n\n constructor(adapter: CacheAdapter) {\n this.adapter = adapter;\n }\n\n async set(key: string, value: any, options: CacheSetOptions = {}) : Promise<void> {\n await this.adapter.set(key, value, options);\n }\n\n async get(key: string) : Promise<any | undefined> {\n return this.adapter.get(key);\n }\n\n async drop(key: string) : Promise<void> {\n return this.adapter.drop(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n return this.adapter.dropMany(keys);\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n return this.adapter.clear(options);\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { singa } from 'singa';\nimport { isRedisClientUsable } from '../redis';\nimport type { CacheAdapter } from './adapters';\nimport { MemoryCacheAdapter, RedisCacheAdapter } from './adapters';\nimport { Cache } from './module';\n\nconst instance = singa<Cache>({\n name: 'cache',\n factory: () => {\n let adapter : CacheAdapter;\n if (isRedisClientUsable()) {\n adapter = new RedisCacheAdapter();\n } else {\n adapter = new MemoryCacheAdapter();\n }\n\n return new Cache(adapter);\n },\n});\n\nexport function useCache() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport process from 'node:process';\nimport type { LoggerOptions } from 'winston';\nimport {\n createLogger as create, format, transports,\n} from 'winston';\nimport type { Logger, LoggerCreateContext } from './types';\n\nexport function createLogger(context: LoggerCreateContext) : Logger {\n let items : LoggerOptions['transports'];\n\n const cwd = context.directory || process.cwd();\n\n if (context.env === 'production') {\n items = [\n new transports.Console({\n level: 'info',\n }),\n new transports.File({\n filename: path.join(cwd, 'http.log'),\n level: 'http',\n maxsize: 10 * 1024 * 1024, // 10MB\n maxFiles: 5,\n }),\n new transports.File({\n filename: path.join(cwd, 'error.log'),\n level: 'warn',\n maxsize: 10 * 1024 * 1024, // 10MB\n maxFiles: 5,\n }),\n ];\n } else {\n items = [\n new transports.Console({\n level: 'debug',\n }),\n ];\n }\n\n // @see https://github.com/winstonjs/triple-beam/blob/master/config/npm.js\n return create({\n format: format.combine(\n format.errors({ stack: true }),\n format.timestamp(),\n format.colorize(),\n format.simple(),\n ),\n transports: items,\n });\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { type Factory, singa } from 'singa';\nimport type { Logger } from 'winston';\n\nconst instance = singa<Logger>({\n name: 'logger',\n});\n\nexport function setLoggerFactory(factory: Factory<Logger>) {\n instance.setFactory(factory);\n}\n\nexport function isLoggerUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setLogger(input: Logger) {\n instance.set(input);\n}\n\nexport function useLogger() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\nimport type { VaultClient } from '@hapic/vault';\n\nconst instance = singa<VaultClient>({\n name: 'vault',\n});\n\nexport function setVaultFactory(factory: Factory<VaultClient>) {\n instance.setFactory(factory);\n}\n\nexport function isVaultClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function useVaultClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/kit';\nimport type { DomainEventChannelName } from './type';\n\nexport function transformDomainEventData<T>(input: T) : T {\n if (isObject(input)) {\n const keys = Object.keys(input);\n for (let i = 0; i < keys.length; i++) {\n const value = input[keys[i]];\n if (value instanceof Date) {\n input[keys[i]] = value.toISOString();\n }\n }\n }\n\n return input;\n}\n\nexport function buildDomainEventChannelName(\n input: DomainEventChannelName,\n id?: string | number,\n) : string {\n if (typeof input === 'string') {\n return input;\n }\n\n return input(id);\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport class DomainEventRedisPublisher implements IDomainEventPublisher {\n protected driver : Client;\n\n constructor(client: Client) {\n this.driver = client;\n }\n\n async publish(ctx: DomainEventPublishContext) : Promise<void> {\n const data = JSON.stringify(transformDomainEventData(ctx.content));\n\n const pipeline = this.driver.pipeline();\n for (let i = 0; i < ctx.destinations.length; i++) {\n const { namespace } = ctx.destinations[i];\n const keyPrefix = (namespace ? `${namespace}:` : '');\n\n let key = keyPrefix + buildDomainEventChannelName(ctx.destinations[i].channel);\n pipeline.publish(key, data);\n\n if (typeof ctx.destinations[i].channel === 'function') {\n key = keyPrefix + buildDomainEventChannelName(ctx.destinations[i].channel, ctx.content.data.id);\n pipeline.publish(key, data);\n }\n }\n\n await pipeline.exec();\n }\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildEventFullName } from '@authup/core-realtime-kit';\nimport { Emitter } from '@socket.io/redis-emitter';\nimport type { Client } from 'redis-extension';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport class DomainEventSocketPublisher implements IDomainEventPublisher {\n protected driver : Emitter;\n\n constructor(client: Client) {\n this.driver = new Emitter(client);\n }\n\n async publish(ctx: DomainEventPublishContext) : Promise<void> {\n ctx.content = transformDomainEventData(ctx.content);\n\n for (let i = 0; i < ctx.destinations.length; i++) {\n let emitter : Emitter;\n if (ctx.destinations[i].namespace) {\n emitter = this.driver.of(ctx.destinations[i].namespace);\n } else {\n emitter = this.driver;\n }\n\n let roomName = buildDomainEventChannelName(ctx.destinations[i].channel);\n\n const fullEventName = buildEventFullName(ctx.content.type, ctx.content.event);\n\n emitter\n .in(roomName)\n .emit(fullEventName, {\n ...ctx.content,\n meta: {\n roomName,\n },\n });\n\n if (typeof ctx.destinations[i].channel === 'function') {\n roomName = buildDomainEventChannelName(ctx.destinations[i].channel, ctx.content.data.id);\n\n emitter\n .in(roomName)\n .emit(fullEventName, {\n ...ctx.content,\n meta: {\n roomName,\n roomId: ctx.content.data.id,\n },\n });\n }\n }\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { EventPayload } from '@authup/core-realtime-kit';\nimport { isRedisClientUsable, useRedisClient } from '../services';\nimport { DomainEventRedisPublisher } from './redis';\nimport { DomainEventSocketPublisher } from './socket';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from './type';\n\nexport class DomainEventPublisher implements IDomainEventPublisher {\n protected publishers : Set<IDomainEventPublisher>;\n\n constructor() {\n this.publishers = new Set<IDomainEventPublisher>();\n\n if (isRedisClientUsable()) {\n const client = useRedisClient();\n\n this.publishers.add(new DomainEventRedisPublisher(client));\n this.publishers.add(new DomainEventSocketPublisher(client));\n }\n }\n\n async publish<T extends EventPayload>(\n ctx: DomainEventPublishContext<T>,\n ) : Promise<void> {\n const publishers = this.publishers.values();\n while (true) {\n const it = publishers.next();\n if (it.done) {\n return;\n }\n\n await it.value.publish(ctx);\n }\n }\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(\n obj: X,\n prop: Y,\n): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n"],"names":["compare","value","hashedValue","compareMethod","hash","str","rounds","hashMethod","CryptoAsymmetricAlgorithm","isAsymmetricAlgorithm","input","Object","values","indexOf","getKeyUsagesForAsymmetricAlgorithm","name","format","RSA_PSS","ECDSA","RSASSA_PKCS1_V1_5","ECDH","RSA_OAEP","SyntaxError","normalizeAsymmetricKeyPairCreateOptions","options","optionsNormalized","modulusLength","publicExponent","Uint8Array","namedCurve","normalizeAsymmetricKeyImportOptions","createAsymmetricKeyPair","crypto","subtle","generateKey","enc","type","encodePKCS8ToPEM","base64","encodeSPKIToPem","dec","replace","decodePemToPKCS8","decodePemToSpki","SymmetricAlgorithm","normalizeSymmetricKeyCreateOptions","HMAC","length","normalizeSymmetricKeyImportOptions","isSymmetricAlgorithm","getKeyUsagesForSymmetricAlgorithm","AES_CBC","AES_GCM","AES_CTR","createSymmetricKey","getKeyUsagesForAlgorithm","CryptoKeyContainer","toArrayBuffer","key","exportKey","toUint8Array","arrayBuffer","toBase64","arrayBufferToBase64","toPem","Error","toJWK","fromPem","ctx","fromBase64","base64ToArrayBuffer","fromArrayBuffer","normalizedOptions","cryptoKey","importKey","constructor","extractTokenHeader","token","parts","split","TokenError","payloadInvalid","headerBase64","payload","atob","JSON","parse","e","headerInvalid","extractTokenPayload","payloadBase64","createErrorForJWTError","isObject","expired","date","Date","notActiveBefore","message","cause","logMessage","transformJWTAlgorithmToInternal","algorithm","JWTAlgorithm","HS256","Algorithm","HS384","HS512","RS256","RS384","RS512","ES256","ES384","PS256","PS384","PS512","getUtcTimestamp","Math","floor","getTime","signToken","claims","context","exp","iat","JWKType","RSA","EC","keyContainer","sign","keyId","OCT","verifyToken","promise","output","algorithms","map","verify","validateNbf","instance","singa","setRedisFactory","factory","setFactory","isRedisClientUsable","has","hasFactory","setRedisClient","set","useRedisClient","use","MemoryCacheAdapter","get","ttl","drop","delete","dropMany","keys","i","clear","prefix","iterator","next","done","startsWith","TTLCache","checkAgeOnGet","Infinity","RedisCacheAdapter","milliseconds","pipeline","client","del","exec","flushdb","JsonAdapter","createCacheAdapter","buildCacheKey","buildRedisKeyPath","Cache","adapter","useCache","createLogger","items","cwd","directory","process","env","transports","Console","level","File","filename","path","join","maxsize","maxFiles","create","combine","errors","stack","timestamp","colorize","simple","setLoggerFactory","isLoggerUsable","setLogger","useLogger","setVaultFactory","isVaultClientUsable","useVaultClient","transformDomainEventData","toISOString","buildDomainEventChannelName","id","DomainEventRedisPublisher","publish","data","stringify","content","driver","destinations","namespace","keyPrefix","channel","DomainEventSocketPublisher","emitter","of","roomName","fullEventName","buildEventFullName","event","in","emit","meta","roomId","Emitter","DomainEventPublisher","publishers","it","Set","add","hasOwnProperty","obj","prop","prototype","call"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/crypto/hash/compare.ts","../src/crypto/hash/hash.ts","../src/crypto/key-asymmetric/constants.ts","../src/crypto/key-asymmetric/check.ts","../src/crypto/key-asymmetric/key-usages.ts","../src/crypto/key-asymmetric/normalize.ts","../src/crypto/key-asymmetric/create.ts","../src/crypto/key-asymmetric/helpers/wrap.ts","../src/crypto/key-symmetric/constants.ts","../src/crypto/key-symmetric/normalize.ts","../src/crypto/key-symmetric/check.ts","../src/crypto/key-symmetric/key-usages.ts","../src/crypto/key-symmetric/create.ts","../src/crypto/key/key-usages.ts","../src/crypto/key/container.ts","../src/crypto/json-web-token/extract.ts","../src/crypto/json-web-token/utils.ts","../src/crypto/json-web-token/sign/module.ts","../src/crypto/json-web-token/verify/module.ts","../src/services/redis/singleton.ts","../src/services/cache/adapters/memory.ts","../src/services/cache/adapters/redis.ts","../src/services/cache/adapters/factory.ts","../src/services/cache/helper.ts","../src/services/cache/module.ts","../src/services/cache/singleton.ts","../src/services/logger/module.ts","../src/services/logger/singleton.ts","../src/services/vault/singleton.ts","../src/domain-event/utils.ts","../src/domain-event/redis/module.ts","../src/domain-event/socket/module.ts","../src/domain-event/module.ts","../src/utils/has-property.ts"],"sourcesContent":["/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { compare as compareMethod } from '@node-rs/bcrypt';\n\nexport async function compare(value: string, hashedValue: string) : Promise<boolean> {\n return compareMethod(value, hashedValue);\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hash as hashMethod } from '@node-rs/bcrypt';\n\nexport async function hash(str: string, rounds: number = 10) : Promise<string> {\n return hashMethod(str, rounds);\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum CryptoAsymmetricAlgorithm {\n RSA_PSS = 'RSA-PSS',\n RSASSA_PKCS1_V1_5 = 'RSASSA-PKCS1-v1_5',\n RSA_OAEP = 'RSA-OAEP',\n ECDSA = 'ECDSA',\n ECDH = 'ECDH',\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { CryptoAsymmetricAlgorithm } from './constants';\n\nexport function isAsymmetricAlgorithm(input: string) : input is CryptoAsymmetricAlgorithm {\n return (Object.values(CryptoAsymmetricAlgorithm) as string[]).indexOf(input) !== -1;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { CryptoAsymmetricAlgorithm } from './constants';\n\n/**\n * @see https://nodejs.org/api/webcrypto.html#cryptokeyusages\n */\nexport function getKeyUsagesForAsymmetricAlgorithm(\n name: string,\n format?: Exclude<KeyFormat, 'jwk'>,\n) : KeyUsage[] {\n if (\n name === CryptoAsymmetricAlgorithm.RSA_PSS ||\n name === CryptoAsymmetricAlgorithm.ECDSA ||\n name === CryptoAsymmetricAlgorithm.RSASSA_PKCS1_V1_5\n ) {\n if (format === 'spki') {\n return ['verify'];\n } if (format === 'pkcs8') {\n return ['sign'];\n }\n\n return ['sign', 'verify'];\n }\n\n if (name === CryptoAsymmetricAlgorithm.ECDH) {\n if (format === 'spki') {\n return [];\n }\n\n return [\n 'deriveKey',\n 'deriveBits',\n ];\n }\n\n if (name === CryptoAsymmetricAlgorithm.RSA_OAEP) {\n if (format === 'spki') {\n return ['encrypt'];\n } if (format === 'pkcs8') {\n return ['decrypt'];\n }\n\n return ['encrypt', 'decrypt'];\n }\n\n throw new SyntaxError(`Key usages can not be determined for asymmetric algorithm: ${name}`);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { CryptoAsymmetricAlgorithm } from './constants';\nimport type {\n AsymmetricKeyImportOptionsInput,\n AsymmetricKeyPairCreateOptions,\n AsymmetricKeyPairCreateOptionsInput,\n AsymmetricKeyPairImportOptions,\n} from './types';\n\nexport function normalizeAsymmetricKeyPairCreateOptions(\n options: AsymmetricKeyPairCreateOptionsInput,\n) : AsymmetricKeyPairCreateOptions {\n let optionsNormalized : AsymmetricKeyPairCreateOptions;\n switch (options.name) {\n case CryptoAsymmetricAlgorithm.RSASSA_PKCS1_V1_5:\n case CryptoAsymmetricAlgorithm.RSA_PSS:\n case CryptoAsymmetricAlgorithm.RSA_OAEP: {\n optionsNormalized = {\n modulusLength: 2048,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n hash: 'SHA-256',\n ...options,\n };\n break;\n }\n case CryptoAsymmetricAlgorithm.ECDSA:\n case CryptoAsymmetricAlgorithm.ECDH: {\n optionsNormalized = {\n namedCurve: 'P-256',\n ...options,\n };\n }\n }\n\n return optionsNormalized;\n}\n\nexport function normalizeAsymmetricKeyImportOptions(\n options: AsymmetricKeyImportOptionsInput,\n) : AsymmetricKeyPairImportOptions {\n let optionsNormalized : AsymmetricKeyPairImportOptions;\n switch (options.name) {\n case CryptoAsymmetricAlgorithm.RSASSA_PKCS1_V1_5:\n case CryptoAsymmetricAlgorithm.RSA_PSS:\n case CryptoAsymmetricAlgorithm.RSA_OAEP: {\n optionsNormalized = {\n hash: 'SHA-256',\n ...options,\n };\n break;\n }\n case CryptoAsymmetricAlgorithm.ECDSA:\n case CryptoAsymmetricAlgorithm.ECDH: {\n optionsNormalized = {\n namedCurve: 'P-256',\n ...options,\n };\n }\n }\n\n return optionsNormalized;\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { subtle } from 'uncrypto';\nimport { getKeyUsagesForAsymmetricAlgorithm } from './key-usages';\nimport { normalizeAsymmetricKeyPairCreateOptions } from './normalize';\nimport type { AsymmetricKeyPairCreateOptionsInput } from './types';\n\nexport async function createAsymmetricKeyPair(options: AsymmetricKeyPairCreateOptionsInput) : Promise<CryptoKeyPair> {\n const optionsNormalized = normalizeAsymmetricKeyPairCreateOptions(options);\n return subtle.generateKey(\n optionsNormalized,\n true,\n getKeyUsagesForAsymmetricAlgorithm(optionsNormalized.name),\n );\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nfunction enc(\n type: 'PRIVATE KEY' | 'PUBLIC KEY',\n input: string,\n) {\n return `-----BEGIN ${type}-----\\n${input}\\n-----END ${type}-----`;\n}\n\nexport function encodePKCS8ToPEM(base64: string) {\n return enc('PRIVATE KEY', base64);\n}\n\nexport function encodeSPKIToPem(input: string) {\n return enc('PUBLIC KEY', input);\n}\n\n// ------------------------------------------------------------\n\nfunction dec(\n type: 'PRIVATE KEY' | 'PUBLIC KEY',\n input: string,\n) {\n input = input.replace(`-----BEGIN ${type}-----\\n`, '');\n\n input = input.replace(`\\n-----END ${type}-----\\n`, '');\n input = input.replace(`-----END ${type}-----\\n`, '');\n input = input.replace(`\\n-----END ${type}-----`, '');\n\n return input;\n}\n\nexport function decodePemToPKCS8(input: string) {\n return dec('PRIVATE KEY', input);\n}\n\nexport function decodePemToSpki(input: string) {\n return dec('PUBLIC KEY', input);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum SymmetricAlgorithm {\n HMAC = 'HMAC',\n AES_CTR = 'AES-CTR',\n AES_CBC = 'AES-CBC',\n AES_GCM = 'AES-GCM',\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { SymmetricAlgorithm } from './constants';\nimport type {\n SymmetricKeyCreateOptions, SymmetricKeyCreateOptionsInput, SymmetricKeyImportOptions, SymmetricKeyImportOptionsInput,\n} from './types';\n\nexport function normalizeSymmetricKeyCreateOptions(\n input: SymmetricKeyCreateOptionsInput,\n) : SymmetricKeyCreateOptions {\n if (input.name === SymmetricAlgorithm.HMAC) {\n return {\n hash: 'SHA-256',\n ...input,\n };\n }\n\n return {\n length: 256,\n name: input.name,\n };\n}\n\nexport function normalizeSymmetricKeyImportOptions(\n input: SymmetricKeyImportOptionsInput,\n) : SymmetricKeyImportOptions {\n if (input.name === SymmetricAlgorithm.HMAC) {\n return {\n hash: 'SHA-256',\n ...input,\n };\n }\n\n return input;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { SymmetricAlgorithm } from './constants';\n\nexport function isSymmetricAlgorithm(input: string) : input is SymmetricAlgorithm {\n return (Object.values(SymmetricAlgorithm) as string[]).indexOf(input) !== -1;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { SymmetricAlgorithm } from './constants';\n\nexport function getKeyUsagesForSymmetricAlgorithm(name: string) : KeyUsage[] | undefined {\n /**\n * @see https://nodejs.org/api/webcrypto.html#cryptokeyusages\n */\n if (name === SymmetricAlgorithm.HMAC) {\n return [\n 'sign',\n 'verify',\n ];\n }\n\n if (\n name === SymmetricAlgorithm.AES_CBC ||\n name === SymmetricAlgorithm.AES_GCM ||\n name === SymmetricAlgorithm.AES_CTR\n ) {\n return [\n 'encrypt',\n 'decrypt',\n ];\n }\n\n throw new SyntaxError(`Key usages can not be determined for symmetric algorithm: ${name}`);\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { subtle } from 'uncrypto';\nimport { getKeyUsagesForSymmetricAlgorithm } from './key-usages';\nimport { normalizeSymmetricKeyCreateOptions } from './normalize';\nimport type { SymmetricKeyCreateOptionsInput } from './types';\n\nexport async function createSymmetricKey(input: SymmetricKeyCreateOptionsInput) : Promise<CryptoKey> {\n const optionsNormalized = normalizeSymmetricKeyCreateOptions(input);\n\n return subtle.generateKey(\n optionsNormalized,\n true,\n getKeyUsagesForSymmetricAlgorithm(optionsNormalized.name),\n );\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { getKeyUsagesForAsymmetricAlgorithm, isAsymmetricAlgorithm } from '../key-asymmetric';\nimport { getKeyUsagesForSymmetricAlgorithm, isSymmetricAlgorithm } from '../key-symmetric';\n\nexport function getKeyUsagesForAlgorithm(name: string, format?: Exclude<KeyFormat, 'jwk'>) : KeyUsage[] {\n if (isAsymmetricAlgorithm(name)) {\n return getKeyUsagesForAsymmetricAlgorithm(name, format);\n }\n\n if (isSymmetricAlgorithm(name)) {\n return getKeyUsagesForSymmetricAlgorithm(name);\n }\n\n throw new SyntaxError(`Key usages can not be determined for algorithm: ${name}`);\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { subtle } from 'uncrypto';\nimport { arrayBufferToBase64, base64ToArrayBuffer } from '@authup/kit';\nimport type { AsymmetricKeyPairImportOptions } from '../key-asymmetric';\nimport {\n decodePemToPKCS8,\n decodePemToSpki, encodePKCS8ToPEM, encodeSPKIToPem, normalizeAsymmetricKeyImportOptions,\n} from '../key-asymmetric';\nimport type { SymmetricKeyImportOptions } from '../key-symmetric';\nimport { normalizeSymmetricKeyImportOptions } from '../key-symmetric/normalize';\nimport { getKeyUsagesForAlgorithm } from './key-usages';\nimport type { KeyContainerAsymmetricImportOptions, KeyContainerImportOptions } from './types';\n\nexport class CryptoKeyContainer {\n protected key : CryptoKey;\n\n constructor(cryptoKey : CryptoKey) {\n this.key = cryptoKey;\n }\n\n // ----------------------------------------------\n\n async toArrayBuffer(): Promise<ArrayBuffer> {\n if (this.key.type === 'private') {\n return subtle.exportKey('pkcs8', this.key);\n }\n\n if (this.key.type === 'public') {\n return subtle.exportKey('spki', this.key);\n }\n\n return subtle.exportKey('raw', this.key);\n }\n\n async toUint8Array(): Promise<Uint8Array> {\n const arrayBuffer = await this.toArrayBuffer();\n return new Uint8Array(arrayBuffer);\n }\n\n async toBase64() : Promise<string> {\n const arrayBuffer = await this.toArrayBuffer();\n return arrayBufferToBase64(arrayBuffer);\n }\n\n async toPem(): Promise<string> {\n const base64 = await this.toBase64();\n\n if (this.key.type === 'public') {\n return encodeSPKIToPem(base64);\n }\n\n if (this.key.type === 'private') {\n return encodePKCS8ToPEM(base64);\n }\n\n throw new Error('A symmetric key can not be encoded as PEM');\n }\n\n async toJWK() : Promise<JsonWebKey> {\n return subtle.exportKey('jwk', this.key);\n }\n\n // ----------------------------------------------\n\n static async fromPem(ctx: KeyContainerAsymmetricImportOptions<string>): Promise<CryptoKeyContainer> {\n if (ctx.format === 'pkcs8') {\n return CryptoKeyContainer.fromBase64({ ...ctx, key: decodePemToPKCS8(ctx.key) });\n }\n return CryptoKeyContainer.fromBase64({ ...ctx, key: decodePemToSpki(ctx.key) });\n }\n\n static async fromBase64(\n ctx: KeyContainerImportOptions<string>,\n ) : Promise<CryptoKeyContainer> {\n const arrayBuffer = base64ToArrayBuffer(ctx.key);\n\n return CryptoKeyContainer.fromArrayBuffer({\n ...ctx,\n key: arrayBuffer,\n });\n }\n\n static async fromArrayBuffer(\n ctx: KeyContainerImportOptions<ArrayBuffer>,\n ) : Promise<CryptoKeyContainer> {\n let normalizedOptions : AsymmetricKeyPairImportOptions | SymmetricKeyImportOptions;\n if (ctx.format === 'spki' || ctx.format === 'pkcs8') {\n normalizedOptions = normalizeAsymmetricKeyImportOptions(ctx.options);\n } else if (ctx.format === 'raw') {\n normalizedOptions = normalizeSymmetricKeyImportOptions(ctx.options);\n } else {\n throw new SyntaxError(`Format ${ctx.format} is not supported.`);\n }\n\n const cryptoKey = await subtle.importKey(\n ctx.format,\n ctx.key,\n normalizedOptions,\n true,\n getKeyUsagesForAlgorithm(normalizedOptions.name, ctx.format),\n );\n\n return new CryptoKeyContainer(cryptoKey);\n }\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { JWTClaims, JWTHeader } from '@authup/specs';\nimport { JWTError } from '@authup/specs';\n\n/**\n * Decode a JWT token with no verification.\n *\n * @param token\n *\n * @throws JWTError\n */\nexport function extractTokenHeader(\n token: string,\n) : JWTHeader {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw JWTError.invalid();\n }\n\n const [headerBase64] = parts;\n\n try {\n const payload = atob(headerBase64);\n\n return JSON.parse(payload);\n\n /*\n return {\n typ: 'JWT',\n alg: transformInternalToJWTAlgorithm(header.algorithm),\n cty: header.contentType,\n jku: header.jsonKeyUrl,\n kid: header.keyId,\n x5u: header.x5Url,\n x5c: header.x5CertChain,\n x5t: header.x5CertThumbprint,\n 'x5t#S256': header.x5TS256CertThumbprint,\n };\n */\n } catch (e) {\n throw JWTError.headerInvalid('The token header could not be extracted.');\n }\n}\n\n/**\n * @param token\n *\n * @throws JWTError\n */\nexport function extractTokenPayload(\n token: string,\n) : JWTClaims {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw JWTError.invalid();\n }\n\n const [, payloadBase64] = parts;\n\n try {\n const payload = atob(payloadBase64);\n\n return JSON.parse(payload);\n } catch (e) {\n throw JWTError.payloadInvalid('The token payload could not be extracted.');\n }\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { JWTAlgorithm, JWTError } from '@authup/specs';\nimport { Algorithm } from '@node-rs/jsonwebtoken';\nimport { isObject } from 'smob';\n\nexport function createErrorForJWTError(e: unknown) : JWTError {\n if (isObject(e)) {\n if (typeof e.name === 'string') {\n switch (e.name) {\n case 'TokenExpiredError': {\n return JWTError.expired();\n }\n case 'NotBeforeError': {\n if (typeof e.date === 'string' || e.date instanceof Date) {\n return JWTError.notActiveBefore(e.date);\n }\n break;\n }\n case 'JsonWebTokenError': {\n if (typeof e.message === 'string') {\n return JWTError.payloadInvalid(e.message);\n }\n\n break;\n }\n }\n }\n\n // @see https://github.com/Keats/jsonwebtoken/blob/master/src/errors.rs\n switch (e.message) {\n case 'ExpiredSignature': {\n return JWTError.expired();\n }\n case 'ImmatureSignature': {\n return JWTError.notActiveBefore();\n }\n case 'InvalidToken':\n case 'InvalidSignature': {\n return JWTError.payloadInvalid();\n }\n }\n }\n\n return new JWTError({\n cause: e as Error,\n logMessage: true,\n message: 'The JWT error could not be determined.',\n });\n}\n\nexport function transformJWTAlgorithmToInternal(algorithm: `${JWTAlgorithm}`) : Algorithm {\n switch (algorithm) {\n case JWTAlgorithm.HS256: {\n return Algorithm.HS256;\n }\n case JWTAlgorithm.HS384: {\n return Algorithm.HS384;\n }\n case JWTAlgorithm.HS512: {\n return Algorithm.HS512;\n }\n case JWTAlgorithm.RS256: {\n return Algorithm.RS256;\n }\n case JWTAlgorithm.RS384: {\n return Algorithm.RS384;\n }\n case JWTAlgorithm.RS512: {\n return Algorithm.RS512;\n }\n case JWTAlgorithm.ES256: {\n return Algorithm.ES256;\n }\n case JWTAlgorithm.ES384: {\n return Algorithm.ES384;\n }\n case JWTAlgorithm.PS256: {\n return Algorithm.PS256;\n }\n case JWTAlgorithm.PS384: {\n return Algorithm.PS384;\n }\n case JWTAlgorithm.PS512: {\n return Algorithm.PS512;\n }\n }\n\n throw new Error(`The algorithm ${algorithm} is not supported.`);\n}\n\nexport function transformInternalToJWTAlgorithm(input: Algorithm) : JWTAlgorithm {\n switch (input) {\n case Algorithm.HS256:\n return JWTAlgorithm.HS256;\n case Algorithm.HS384:\n return JWTAlgorithm.HS384;\n case Algorithm.HS512:\n return JWTAlgorithm.HS512;\n case Algorithm.RS256:\n return JWTAlgorithm.RS256;\n case Algorithm.RS384:\n return JWTAlgorithm.RS384;\n case Algorithm.RS512:\n return JWTAlgorithm.RS512;\n case Algorithm.ES256:\n return JWTAlgorithm.ES256;\n case Algorithm.ES384:\n return JWTAlgorithm.ES384;\n case Algorithm.PS256:\n return JWTAlgorithm.PS256;\n case Algorithm.PS384:\n return JWTAlgorithm.PS384;\n case Algorithm.PS512:\n return JWTAlgorithm.PS512;\n }\n\n throw new SyntaxError(`The algorithm ${input} is not supported.`);\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { JWKType, OAuth2Error } from '@authup/specs';\nimport type { JWTClaims } from '@authup/specs';\nimport { Algorithm, sign } from '@node-rs/jsonwebtoken';\nimport { encodePKCS8ToPEM } from '../../key-asymmetric';\nimport { CryptoKeyContainer } from '../../key';\nimport { transformJWTAlgorithmToInternal } from '../utils';\nimport type { TokenSignOptions } from './types';\n\nconst getUtcTimestamp = () => Math.floor(new Date().getTime() / 1000);\n\nexport async function signToken(claims: JWTClaims, context: TokenSignOptions): Promise<string> {\n if (typeof claims.exp !== 'number') {\n claims.exp = getUtcTimestamp() + 3600;\n }\n if (typeof claims.iat !== 'number') {\n claims.iat = getUtcTimestamp();\n }\n\n switch (context.type) {\n case JWKType.RSA:\n case JWKType.EC: {\n let algorithm : Algorithm;\n\n let key : string;\n if (typeof context.key === 'string') {\n key = encodePKCS8ToPEM(context.key);\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toPem();\n }\n\n if (context.type === JWKType.RSA) {\n algorithm = context.algorithm ?\n transformJWTAlgorithmToInternal(context.algorithm) :\n Algorithm.RS256;\n } else {\n algorithm = context.algorithm ?\n transformJWTAlgorithmToInternal(context.algorithm) :\n Algorithm.ES256;\n }\n\n return sign(claims, key, {\n algorithm,\n keyId: context.keyId,\n });\n }\n case JWKType.OCT: {\n const algorithm : Algorithm = context.algorithm ?\n transformJWTAlgorithmToInternal(context.algorithm) :\n Algorithm.HS256;\n\n let key : string | Uint8Array;\n if (typeof context.key === 'string') {\n key = context.key;\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toUint8Array();\n }\n\n return sign(claims, key, {\n algorithm,\n keyId: context.keyId,\n });\n }\n }\n\n throw new OAuth2Error();\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { JWKType, OAuth2Error } from '@authup/specs';\nimport type { JWTClaims, OAuth2TokenPayload } from '@authup/specs';\nimport { Algorithm, verify } from '@node-rs/jsonwebtoken';\nimport { encodeSPKIToPem } from '../../key-asymmetric';\nimport { CryptoKeyContainer } from '../../key';\nimport { createErrorForJWTError, transformJWTAlgorithmToInternal } from '../utils';\nimport type { TokenVerifyOptions } from './types';\n\n/**\n * Verify JWT.\n *\n * @param token\n * @param context\n *\n * @throws OAuth2Error\n */\nexport async function verifyToken(\n token: string,\n context: TokenVerifyOptions,\n) : Promise<OAuth2TokenPayload> {\n let promise : Promise<JWTClaims>;\n\n let output : JWTClaims;\n\n try {\n switch (context.type) {\n case JWKType.RSA:\n case JWKType.EC: {\n let algorithms : Algorithm[];\n\n if (context.type === JWKType.RSA) {\n algorithms = context.algorithms ?\n context.algorithms.map((algorithm) => transformJWTAlgorithmToInternal(algorithm)) :\n [\n Algorithm.RS256,\n Algorithm.RS384,\n Algorithm.RS512,\n Algorithm.PS256,\n Algorithm.PS384,\n Algorithm.PS512,\n ];\n } else {\n algorithms = context.algorithms ?\n context.algorithms.map((algorithm) => transformJWTAlgorithmToInternal(algorithm)) :\n [\n Algorithm.ES256,\n Algorithm.ES384,\n ];\n }\n\n let key : string;\n if (typeof context.key === 'string') {\n key = encodeSPKIToPem(context.key);\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toPem();\n }\n\n promise = verify(token, key, {\n algorithms,\n validateNbf: true,\n });\n break;\n }\n case JWKType.OCT: {\n const algorithms : Algorithm[] = context.algorithms ?\n context.algorithms.map((algorithm) => transformJWTAlgorithmToInternal(algorithm)) :\n [\n Algorithm.HS256,\n Algorithm.HS384,\n Algorithm.HS512,\n ];\n\n let key : string | Uint8Array;\n if (typeof context.key === 'string') {\n key = context.key;\n } else {\n const keyContainer = new CryptoKeyContainer(context.key);\n key = await keyContainer.toUint8Array();\n }\n\n promise = verify(token, key, {\n algorithms,\n validateNbf: true,\n });\n }\n }\n\n output = await promise;\n } catch (e) {\n throw createErrorForJWTError(e);\n }\n\n if (typeof output === 'undefined') {\n throw new OAuth2Error({ message: 'Invalid type.' });\n }\n\n return output as OAuth2TokenPayload;\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<Client>({\n name: 'redis',\n});\n\nexport function setRedisFactory(factory: Factory<Client>) {\n instance.setFactory(factory);\n}\n\nexport function isRedisClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setRedisClient(input: Client) {\n instance.set(input);\n}\n\nexport function useRedisClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Options } from '@isaacs/ttlcache';\nimport TTLCache from '@isaacs/ttlcache';\nimport type { CacheClearOptions, CacheSetOptions } from '../types';\nimport type { CacheAdapter } from './types';\n\nexport class MemoryCacheAdapter<\n VALUE = any,\n> implements CacheAdapter {\n protected instance : TTLCache<string, VALUE>;\n\n constructor(options: Options<string, VALUE> = {}) {\n this.instance = new TTLCache<string, VALUE>({\n checkAgeOnGet: true,\n ttl: Infinity,\n ...(options || {}),\n });\n }\n\n async has(key: string) : Promise<boolean> {\n return this.instance.has(key);\n }\n\n async get(key: string): Promise<VALUE> {\n return this.instance.get(key);\n }\n\n async set(key: string, value: VALUE, options: CacheSetOptions): Promise<void> {\n this.instance.set(key, value, {\n ttl: options.ttl,\n });\n }\n\n async drop(key: string): Promise<void> {\n this.instance.delete(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n for (let i = 0; i < keys.length; i++) {\n this.instance.delete(keys[i]);\n }\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n if (options.prefix) {\n const keys = this.instance.keys();\n let iterator = keys.next();\n while (!iterator.done) {\n if (iterator.value.startsWith(options.prefix)) {\n this.instance.delete(iterator.value);\n }\n\n iterator = keys.next();\n }\n\n return;\n }\n\n this.instance.clear();\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport { JsonAdapter } from 'redis-extension';\nimport { useRedisClient } from '../../redis';\nimport type { CacheClearOptions, CacheSetOptions } from '../types';\nimport type { CacheAdapter } from './types';\n\nexport class RedisCacheAdapter implements CacheAdapter {\n protected client : Client;\n\n protected instance : JsonAdapter;\n\n constructor() {\n this.client = useRedisClient();\n this.instance = new JsonAdapter(this.client);\n }\n\n async get(key: string): Promise<any> {\n return this.instance.get(key);\n }\n\n async has(key: string) : Promise<boolean> {\n const output = await this.get(key);\n\n return typeof output !== 'undefined';\n }\n\n async set(key: string, value: any, options: CacheSetOptions): Promise<void> {\n await this.instance.set(key, value, {\n milliseconds: options.ttl,\n });\n }\n\n async drop(key: string): Promise<void> {\n await this.instance.drop(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n const pipeline = this.client.pipeline();\n\n for (let i = 0; i < keys.length; i++) {\n pipeline.del(keys[i]);\n }\n\n await pipeline.exec();\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n if (options.prefix) {\n const pipeline = this.client.pipeline();\n\n const keys = await this.client.keys(`${options.prefix}*`);\n for (let i = 0; i < keys.length; i++) {\n pipeline.del(keys[i]);\n }\n\n await pipeline.exec();\n\n return;\n }\n await this.client.flushdb();\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isRedisClientUsable } from '../../redis';\nimport { MemoryCacheAdapter } from './memory';\nimport { RedisCacheAdapter } from './redis';\n\nexport function createCacheAdapter() {\n if (isRedisClientUsable()) {\n return new RedisCacheAdapter();\n }\n\n return new MemoryCacheAdapter();\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildRedisKeyPath } from '../redis';\nimport type { CacheKeyBuildOptions } from './types';\n\nexport function buildCacheKey(options: CacheKeyBuildOptions) {\n return buildRedisKeyPath(options);\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { CacheAdapter } from './adapters';\nimport type { CacheClearOptions, CacheSetOptions } from './types';\n\nexport class Cache {\n protected adapter : CacheAdapter;\n\n constructor(adapter: CacheAdapter) {\n this.adapter = adapter;\n }\n\n async set(key: string, value: any, options: CacheSetOptions = {}) : Promise<void> {\n await this.adapter.set(key, value, options);\n }\n\n async get(key: string) : Promise<any | undefined> {\n return this.adapter.get(key);\n }\n\n async drop(key: string) : Promise<void> {\n return this.adapter.drop(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n return this.adapter.dropMany(keys);\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n return this.adapter.clear(options);\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { singa } from 'singa';\nimport { isRedisClientUsable } from '../redis';\nimport type { CacheAdapter } from './adapters';\nimport { MemoryCacheAdapter, RedisCacheAdapter } from './adapters';\nimport { Cache } from './module';\n\nconst instance = singa<Cache>({\n name: 'cache',\n factory: () => {\n let adapter : CacheAdapter;\n if (isRedisClientUsable()) {\n adapter = new RedisCacheAdapter();\n } else {\n adapter = new MemoryCacheAdapter();\n }\n\n return new Cache(adapter);\n },\n});\n\nexport function useCache() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport process from 'node:process';\nimport type { LoggerOptions } from 'winston';\nimport {\n createLogger as create, format, transports,\n} from 'winston';\nimport type { Logger, LoggerCreateContext } from './types';\n\nexport function createLogger(context: LoggerCreateContext) : Logger {\n let items : LoggerOptions['transports'];\n\n const cwd = context.directory || process.cwd();\n\n if (context.env === 'production') {\n items = [\n new transports.Console({\n level: 'info',\n }),\n new transports.File({\n filename: path.join(cwd, 'http.log'),\n level: 'http',\n maxsize: 10 * 1024 * 1024, // 10MB\n maxFiles: 5,\n }),\n new transports.File({\n filename: path.join(cwd, 'error.log'),\n level: 'warn',\n maxsize: 10 * 1024 * 1024, // 10MB\n maxFiles: 5,\n }),\n ];\n } else {\n items = [\n new transports.Console({\n level: 'debug',\n }),\n ];\n }\n\n // @see https://github.com/winstonjs/triple-beam/blob/master/config/npm.js\n return create({\n format: format.combine(\n format.errors({ stack: true }),\n format.timestamp(),\n format.colorize(),\n format.simple(),\n ),\n transports: items,\n });\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { type Factory, singa } from 'singa';\nimport type { Logger } from 'winston';\n\nconst instance = singa<Logger>({\n name: 'logger',\n});\n\nexport function setLoggerFactory(factory: Factory<Logger>) {\n instance.setFactory(factory);\n}\n\nexport function isLoggerUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setLogger(input: Logger) {\n instance.set(input);\n}\n\nexport function useLogger() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\nimport type { VaultClient } from '@hapic/vault';\n\nconst instance = singa<VaultClient>({\n name: 'vault',\n});\n\nexport function setVaultFactory(factory: Factory<VaultClient>) {\n instance.setFactory(factory);\n}\n\nexport function isVaultClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function useVaultClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/kit';\nimport type { DomainEventChannelName } from './type';\n\nexport function transformDomainEventData<T>(input: T) : T {\n if (isObject(input)) {\n const keys = Object.keys(input);\n for (let i = 0; i < keys.length; i++) {\n const value = input[keys[i]];\n if (value instanceof Date) {\n input[keys[i]] = value.toISOString();\n }\n }\n }\n\n return input;\n}\n\nexport function buildDomainEventChannelName(\n input: DomainEventChannelName,\n id?: string | number,\n) : string {\n if (typeof input === 'string') {\n return input;\n }\n\n return input(id);\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport class DomainEventRedisPublisher implements IDomainEventPublisher {\n protected driver : Client;\n\n constructor(client: Client) {\n this.driver = client;\n }\n\n async publish(ctx: DomainEventPublishContext) : Promise<void> {\n const data = JSON.stringify(transformDomainEventData(ctx.content));\n\n const pipeline = this.driver.pipeline();\n for (let i = 0; i < ctx.destinations.length; i++) {\n const { namespace } = ctx.destinations[i];\n const keyPrefix = (namespace ? `${namespace}:` : '');\n\n let key = keyPrefix + buildDomainEventChannelName(ctx.destinations[i].channel);\n pipeline.publish(key, data);\n\n if (typeof ctx.destinations[i].channel === 'function') {\n key = keyPrefix + buildDomainEventChannelName(ctx.destinations[i].channel, ctx.content.data.id);\n pipeline.publish(key, data);\n }\n }\n\n await pipeline.exec();\n }\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildEventFullName } from '@authup/core-realtime-kit';\nimport { Emitter } from '@socket.io/redis-emitter';\nimport type { Client } from 'redis-extension';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport class DomainEventSocketPublisher implements IDomainEventPublisher {\n protected driver : Emitter;\n\n constructor(client: Client) {\n this.driver = new Emitter(client);\n }\n\n async publish(ctx: DomainEventPublishContext) : Promise<void> {\n ctx.content = transformDomainEventData(ctx.content);\n\n for (let i = 0; i < ctx.destinations.length; i++) {\n let emitter : Emitter;\n if (ctx.destinations[i].namespace) {\n emitter = this.driver.of(ctx.destinations[i].namespace);\n } else {\n emitter = this.driver;\n }\n\n let roomName = buildDomainEventChannelName(ctx.destinations[i].channel);\n\n const fullEventName = buildEventFullName(ctx.content.type, ctx.content.event);\n\n emitter\n .in(roomName)\n .emit(fullEventName, {\n ...ctx.content,\n meta: {\n roomName,\n },\n });\n\n if (typeof ctx.destinations[i].channel === 'function') {\n roomName = buildDomainEventChannelName(ctx.destinations[i].channel, ctx.content.data.id);\n\n emitter\n .in(roomName)\n .emit(fullEventName, {\n ...ctx.content,\n meta: {\n roomName,\n roomId: ctx.content.data.id,\n },\n });\n }\n }\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { EventPayload } from '@authup/core-realtime-kit';\nimport { isRedisClientUsable, useRedisClient } from '../services';\nimport { DomainEventRedisPublisher } from './redis';\nimport { DomainEventSocketPublisher } from './socket';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from './type';\n\nexport class DomainEventPublisher implements IDomainEventPublisher {\n protected publishers : Set<IDomainEventPublisher>;\n\n constructor() {\n this.publishers = new Set<IDomainEventPublisher>();\n\n if (isRedisClientUsable()) {\n const client = useRedisClient();\n\n this.publishers.add(new DomainEventRedisPublisher(client));\n this.publishers.add(new DomainEventSocketPublisher(client));\n }\n }\n\n async publish<T extends EventPayload>(\n ctx: DomainEventPublishContext<T>,\n ) : Promise<void> {\n const publishers = this.publishers.values();\n while (true) {\n const it = publishers.next();\n if (it.done) {\n return;\n }\n\n await it.value.publish(ctx);\n }\n }\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(\n obj: X,\n prop: Y,\n): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n"],"names":["compare","value","hashedValue","compareMethod","hash","str","rounds","hashMethod","CryptoAsymmetricAlgorithm","isAsymmetricAlgorithm","input","Object","values","indexOf","getKeyUsagesForAsymmetricAlgorithm","name","format","RSA_PSS","ECDSA","RSASSA_PKCS1_V1_5","ECDH","RSA_OAEP","SyntaxError","normalizeAsymmetricKeyPairCreateOptions","options","optionsNormalized","modulusLength","publicExponent","Uint8Array","namedCurve","normalizeAsymmetricKeyImportOptions","createAsymmetricKeyPair","subtle","generateKey","enc","type","encodePKCS8ToPEM","base64","encodeSPKIToPem","dec","replace","decodePemToPKCS8","decodePemToSpki","SymmetricAlgorithm","normalizeSymmetricKeyCreateOptions","HMAC","length","normalizeSymmetricKeyImportOptions","isSymmetricAlgorithm","getKeyUsagesForSymmetricAlgorithm","AES_CBC","AES_GCM","AES_CTR","createSymmetricKey","getKeyUsagesForAlgorithm","CryptoKeyContainer","toArrayBuffer","key","exportKey","toUint8Array","arrayBuffer","toBase64","arrayBufferToBase64","toPem","Error","toJWK","fromPem","ctx","fromBase64","base64ToArrayBuffer","fromArrayBuffer","normalizedOptions","cryptoKey","importKey","constructor","extractTokenHeader","token","parts","split","JWTError","invalid","headerBase64","payload","atob","JSON","parse","e","headerInvalid","extractTokenPayload","payloadBase64","payloadInvalid","createErrorForJWTError","isObject","expired","date","Date","notActiveBefore","message","cause","logMessage","transformJWTAlgorithmToInternal","algorithm","JWTAlgorithm","HS256","Algorithm","HS384","HS512","RS256","RS384","RS512","ES256","ES384","PS256","PS384","PS512","getUtcTimestamp","Math","floor","getTime","signToken","claims","context","exp","iat","JWKType","RSA","EC","keyContainer","sign","keyId","OCT","OAuth2Error","verifyToken","promise","output","algorithms","map","verify","validateNbf","instance","singa","setRedisFactory","factory","setFactory","isRedisClientUsable","has","hasFactory","setRedisClient","set","useRedisClient","use","MemoryCacheAdapter","get","ttl","drop","delete","dropMany","keys","i","clear","prefix","iterator","next","done","startsWith","TTLCache","checkAgeOnGet","Infinity","RedisCacheAdapter","milliseconds","pipeline","client","del","exec","flushdb","JsonAdapter","createCacheAdapter","buildCacheKey","buildRedisKeyPath","Cache","adapter","useCache","createLogger","items","cwd","directory","process","env","transports","Console","level","File","filename","path","join","maxsize","maxFiles","create","combine","errors","stack","timestamp","colorize","simple","setLoggerFactory","isLoggerUsable","setLogger","useLogger","setVaultFactory","isVaultClientUsable","useVaultClient","transformDomainEventData","toISOString","buildDomainEventChannelName","id","DomainEventRedisPublisher","publish","data","stringify","content","driver","destinations","namespace","keyPrefix","channel","DomainEventSocketPublisher","emitter","of","roomName","fullEventName","buildEventFullName","event","in","emit","meta","roomId","Emitter","DomainEventPublisher","publishers","it","Set","add","hasOwnProperty","obj","prop","prototype","call"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,6 +1,7 @@
1
1
  import { compare as compare$1, hash as hash$1 } from '@node-rs/bcrypt';
2
+ import { subtle } from 'uncrypto';
2
3
  import { arrayBufferToBase64, base64ToArrayBuffer, isObject as isObject$1 } from '@authup/kit';
3
- import { TokenError, JWTAlgorithm, JWKType } from '@authup/specs';
4
+ import { JWTError, JWTAlgorithm, JWKType, OAuth2Error } from '@authup/specs';
4
5
  import { Algorithm, sign, verify } from '@node-rs/jsonwebtoken';
5
6
  import { isObject } from 'smob';
6
7
  import { JsonAdapter, buildKeyPath } from 'redis-extension';
@@ -145,7 +146,7 @@ function normalizeAsymmetricKeyImportOptions(options) {
145
146
 
146
147
  async function createAsymmetricKeyPair(options) {
147
148
  const optionsNormalized = normalizeAsymmetricKeyPairCreateOptions(options);
148
- return crypto.subtle.generateKey(optionsNormalized, true, getKeyUsagesForAsymmetricAlgorithm(optionsNormalized.name));
149
+ return subtle.generateKey(optionsNormalized, true, getKeyUsagesForAsymmetricAlgorithm(optionsNormalized.name));
149
150
  }
150
151
 
151
152
  /*
@@ -236,7 +237,7 @@ function getKeyUsagesForSymmetricAlgorithm(name) {
236
237
 
237
238
  async function createSymmetricKey(input) {
238
239
  const optionsNormalized = normalizeSymmetricKeyCreateOptions(input);
239
- return crypto.subtle.generateKey(optionsNormalized, true, getKeyUsagesForSymmetricAlgorithm(optionsNormalized.name));
240
+ return subtle.generateKey(optionsNormalized, true, getKeyUsagesForSymmetricAlgorithm(optionsNormalized.name));
240
241
  }
241
242
 
242
243
  function getKeyUsagesForAlgorithm(name, format) {
@@ -253,12 +254,12 @@ class CryptoKeyContainer {
253
254
  // ----------------------------------------------
254
255
  async toArrayBuffer() {
255
256
  if (this.key.type === 'private') {
256
- return crypto.subtle.exportKey('pkcs8', this.key);
257
+ return subtle.exportKey('pkcs8', this.key);
257
258
  }
258
259
  if (this.key.type === 'public') {
259
- return crypto.subtle.exportKey('spki', this.key);
260
+ return subtle.exportKey('spki', this.key);
260
261
  }
261
- return crypto.subtle.exportKey('raw', this.key);
262
+ return subtle.exportKey('raw', this.key);
262
263
  }
263
264
  async toUint8Array() {
264
265
  const arrayBuffer = await this.toArrayBuffer();
@@ -279,7 +280,7 @@ class CryptoKeyContainer {
279
280
  throw new Error('A symmetric key can not be encoded as PEM');
280
281
  }
281
282
  async toJWK() {
282
- return crypto.subtle.exportKey('jwk', this.key);
283
+ return subtle.exportKey('jwk', this.key);
283
284
  }
284
285
  // ----------------------------------------------
285
286
  static async fromPem(ctx) {
@@ -310,7 +311,7 @@ class CryptoKeyContainer {
310
311
  } else {
311
312
  throw new SyntaxError(`Format ${ctx.format} is not supported.`);
312
313
  }
313
- const cryptoKey = await crypto.subtle.importKey(ctx.format, ctx.key, normalizedOptions, true, getKeyUsagesForAlgorithm(normalizedOptions.name, ctx.format));
314
+ const cryptoKey = await subtle.importKey(ctx.format, ctx.key, normalizedOptions, true, getKeyUsagesForAlgorithm(normalizedOptions.name, ctx.format));
314
315
  return new CryptoKeyContainer(cryptoKey);
315
316
  }
316
317
  constructor(cryptoKey){
@@ -323,11 +324,11 @@ class CryptoKeyContainer {
323
324
  *
324
325
  * @param token
325
326
  *
326
- * @throws TokenError
327
+ * @throws JWTError
327
328
  */ function extractTokenHeader(token) {
328
329
  const parts = token.split('.');
329
330
  if (parts.length !== 3) {
330
- throw TokenError.payloadInvalid('The token format is not valid.');
331
+ throw JWTError.invalid();
331
332
  }
332
333
  const [headerBase64] = parts;
333
334
  try {
@@ -346,20 +347,24 @@ class CryptoKeyContainer {
346
347
  'x5t#S256': header.x5TS256CertThumbprint,
347
348
  };
348
349
  */ } catch (e) {
349
- throw TokenError.headerInvalid('The token header could not be extracted.');
350
+ throw JWTError.headerInvalid('The token header could not be extracted.');
350
351
  }
351
352
  }
352
- function extractTokenPayload(token) {
353
+ /**
354
+ * @param token
355
+ *
356
+ * @throws JWTError
357
+ */ function extractTokenPayload(token) {
353
358
  const parts = token.split('.');
354
359
  if (parts.length !== 3) {
355
- throw TokenError.payloadInvalid('The token format is not valid.');
360
+ throw JWTError.invalid();
356
361
  }
357
362
  const [, payloadBase64] = parts;
358
363
  try {
359
364
  const payload = atob(payloadBase64);
360
365
  return JSON.parse(payload);
361
366
  } catch (e) {
362
- throw TokenError.payloadInvalid('The token payload could not be extracted.');
367
+ throw JWTError.payloadInvalid('The token payload could not be extracted.');
363
368
  }
364
369
  }
365
370
 
@@ -369,19 +374,19 @@ function createErrorForJWTError(e) {
369
374
  switch(e.name){
370
375
  case 'TokenExpiredError':
371
376
  {
372
- return TokenError.expired();
377
+ return JWTError.expired();
373
378
  }
374
379
  case 'NotBeforeError':
375
380
  {
376
381
  if (typeof e.date === 'string' || e.date instanceof Date) {
377
- return TokenError.notActiveBefore(e.date);
382
+ return JWTError.notActiveBefore(e.date);
378
383
  }
379
384
  break;
380
385
  }
381
386
  case 'JsonWebTokenError':
382
387
  {
383
388
  if (typeof e.message === 'string') {
384
- return TokenError.payloadInvalid(e.message);
389
+ return JWTError.payloadInvalid(e.message);
385
390
  }
386
391
  break;
387
392
  }
@@ -391,20 +396,20 @@ function createErrorForJWTError(e) {
391
396
  switch(e.message){
392
397
  case 'ExpiredSignature':
393
398
  {
394
- return TokenError.expired();
399
+ return JWTError.expired();
395
400
  }
396
401
  case 'ImmatureSignature':
397
402
  {
398
- return TokenError.notActiveBefore();
403
+ return JWTError.notActiveBefore();
399
404
  }
400
405
  case 'InvalidToken':
401
406
  case 'InvalidSignature':
402
407
  {
403
- return TokenError.payloadInvalid();
408
+ return JWTError.payloadInvalid();
404
409
  }
405
410
  }
406
411
  }
407
- return new TokenError({
412
+ return new JWTError({
408
413
  cause: e,
409
414
  logMessage: true,
410
415
  message: 'The JWT error could not be determined.'
@@ -506,7 +511,7 @@ async function signToken(claims, context) {
506
511
  });
507
512
  }
508
513
  }
509
- throw new TokenError();
514
+ throw new OAuth2Error();
510
515
  }
511
516
 
512
517
  /**
@@ -515,7 +520,7 @@ async function signToken(claims, context) {
515
520
  * @param token
516
521
  * @param context
517
522
  *
518
- * @throws TokenError
523
+ * @throws OAuth2Error
519
524
  */ async function verifyToken(token, context) {
520
525
  let promise;
521
526
  let output;
@@ -578,7 +583,7 @@ async function signToken(claims, context) {
578
583
  throw createErrorForJWTError(e);
579
584
  }
580
585
  if (typeof output === 'undefined') {
581
- throw new TokenError({
586
+ throw new OAuth2Error({
582
587
  message: 'Invalid type.'
583
588
  });
584
589
  }
@@ -602,6 +607,9 @@ function useRedisClient() {
602
607
  }
603
608
 
604
609
  class MemoryCacheAdapter {
610
+ async has(key) {
611
+ return this.instance.has(key);
612
+ }
605
613
  async get(key) {
606
614
  return this.instance.get(key);
607
615
  }
@@ -645,6 +653,10 @@ class RedisCacheAdapter {
645
653
  async get(key) {
646
654
  return this.instance.get(key);
647
655
  }
656
+ async has(key) {
657
+ const output = await this.get(key);
658
+ return typeof output !== 'undefined';
659
+ }
648
660
  async set(key, value, options) {
649
661
  await this.instance.set(key, value, {
650
662
  milliseconds: options.ttl