@authup/server-kit 1.0.0-beta.24 → 1.0.0-beta.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/dist/crypto/json-web-token/extract.d.ts +6 -1
- package/dist/crypto/json-web-token/extract.d.ts.map +1 -1
- package/dist/crypto/json-web-token/utils.d.ts +2 -2
- package/dist/crypto/json-web-token/utils.d.ts.map +1 -1
- package/dist/crypto/json-web-token/verify/module.d.ts +1 -1
- package/dist/crypto/key/container.d.ts.map +1 -1
- package/dist/crypto/key-asymmetric/create.d.ts.map +1 -1
- package/dist/crypto/key-symmetric/create.d.ts.map +1 -1
- package/dist/index.cjs +35 -23
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +36 -24
- package/dist/index.mjs.map +1 -1
- package/dist/services/cache/adapters/memory.d.ts +1 -0
- package/dist/services/cache/adapters/memory.d.ts.map +1 -1
- package/dist/services/cache/adapters/redis.d.ts +1 -0
- package/dist/services/cache/adapters/redis.d.ts.map +1 -1
- package/dist/services/cache/adapters/types.d.ts +1 -0
- package/dist/services/cache/adapters/types.d.ts.map +1 -1
- package/package.json +10 -9
package/dist/index.cjs.map
CHANGED
|
@@ -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 {
|
|
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
|
|
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
|
|
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
|
|
257
|
+
return subtle.exportKey('pkcs8', this.key);
|
|
257
258
|
}
|
|
258
259
|
if (this.key.type === 'public') {
|
|
259
|
-
return
|
|
260
|
+
return subtle.exportKey('spki', this.key);
|
|
260
261
|
}
|
|
261
|
-
return
|
|
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
|
|
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
|
|
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
|
|
327
|
+
* @throws JWTError
|
|
327
328
|
*/ function extractTokenHeader(token) {
|
|
328
329
|
const parts = token.split('.');
|
|
329
330
|
if (parts.length !== 3) {
|
|
330
|
-
throw
|
|
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
|
|
350
|
+
throw JWTError.headerInvalid('The token header could not be extracted.');
|
|
350
351
|
}
|
|
351
352
|
}
|
|
352
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
399
|
+
return JWTError.expired();
|
|
395
400
|
}
|
|
396
401
|
case 'ImmatureSignature':
|
|
397
402
|
{
|
|
398
|
-
return
|
|
403
|
+
return JWTError.notActiveBefore();
|
|
399
404
|
}
|
|
400
405
|
case 'InvalidToken':
|
|
401
406
|
case 'InvalidSignature':
|
|
402
407
|
{
|
|
403
|
-
return
|
|
408
|
+
return JWTError.payloadInvalid();
|
|
404
409
|
}
|
|
405
410
|
}
|
|
406
411
|
}
|
|
407
|
-
return new
|
|
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
|
|
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
|
|
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
|
|
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
|