@authup/server-core 0.36.0 → 0.37.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -142,19 +142,19 @@ async function readConfigFile(context) {
142
142
  const [root, name] = locations[i].name.split('.');
143
143
  if (root && name) {
144
144
  if (context.name === name) {
145
- smob.merge(content, fileExport.value);
145
+ smob.assign(content, fileExport.value);
146
146
  } else if (!context.name) {
147
147
  content[name] = content[name] || {};
148
- smob.merge(content[name], fileExport.value);
148
+ smob.assign(content[name], fileExport.value);
149
149
  }
150
150
  }
151
151
  if (root && !name) {
152
152
  if (context.name) {
153
153
  if (core.isObject(fileExport.value[context.name])) {
154
- smob.merge(content, fileExport.value[context.name]);
154
+ smob.assign(content, fileExport.value[context.name]);
155
155
  }
156
156
  } else {
157
- smob.merge(content, fileExport.value);
157
+ smob.assign(content, fileExport.value);
158
158
  }
159
159
  }
160
160
  }
@@ -460,8 +460,8 @@ async function signToken(payload, context) {
460
460
  case core.KeyType.RSA:
461
461
  case core.KeyType.EC:
462
462
  {
463
- const { type , keyPair , ...options } = context;
464
- const { privateKey } = isKeyPair(keyPair) ? keyPair : await useKeyPair(keyPair);
463
+ const { type, keyPair, ...options } = context;
464
+ const { privateKey } = isKeyPair(keyPair) ? keyPair : await useKeyPair(keyPair);
465
465
  if (type === core.KeyType.RSA) {
466
466
  options.algorithm = options.algorithm || 'RS256';
467
467
  } else {
@@ -471,7 +471,7 @@ async function signToken(payload, context) {
471
471
  }
472
472
  case core.KeyType.OCT:
473
473
  {
474
- const { type , secret , ...options } = context;
474
+ const { type, secret, ...options } = context;
475
475
  options.algorithm = options.algorithm || 'HS256';
476
476
  return jsonwebtoken.sign(payload, secret, options);
477
477
  }
@@ -486,8 +486,8 @@ async function verifyToken(token, context) {
486
486
  case core.KeyType.RSA:
487
487
  case core.KeyType.EC:
488
488
  {
489
- const { type , keyPair , ...options } = context;
490
- const { publicKey } = isKeyPairWithPublicKey(keyPair) ? keyPair : await useKeyPair(keyPair);
489
+ const { type, keyPair, ...options } = context;
490
+ const { publicKey } = isKeyPairWithPublicKey(keyPair) ? keyPair : await useKeyPair(keyPair);
491
491
  if (type === core.KeyType.RSA) {
492
492
  options.algorithms = options.algorithms || [
493
493
  'RS256',
@@ -511,7 +511,7 @@ async function verifyToken(token, context) {
511
511
  }
512
512
  case core.KeyType.OCT:
513
513
  {
514
- const { type , secret , ...options } = context;
514
+ const { type, secret, ...options } = context;
515
515
  options.algorithms = options.algorithms || [
516
516
  'HS256',
517
517
  'HS384',
@@ -561,7 +561,7 @@ async function publishDomainRedisEvent(context, destinations) {
561
561
  const client = redisExtension.useClient();
562
562
  const pipeline = client.pipeline();
563
563
  for(let i = 0; i < destinations.length; i++){
564
- const { namespace } = destinations[i];
564
+ const { namespace } = destinations[i];
565
565
  const keyPrefix = namespace ? `${namespace}:` : '';
566
566
  let key = keyPrefix + buildDomainEventChannelName(destinations[i].channel);
567
567
  pipeline.publish(key, json);
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/utils/env.ts","../src/utils/has-property.ts","../src/config/utils.ts","../src/config/read.ts","../src/crypto/hash/compare.ts","../src/crypto/hash/hash.ts","../src/crypto/key-pair/constants.ts","../src/crypto/key-pair/utils/check.ts","../src/crypto/key-pair/utils/options.ts","../src/crypto/key-pair/utils/file-name.ts","../src/crypto/key-pair/utils/private-key.ts","../src/crypto/key-pair/save.ts","../src/crypto/key-pair/create.ts","../src/crypto/key-pair/delete.ts","../src/crypto/key-pair/load.ts","../src/crypto/key-pair/module.ts","../src/crypto/json-web-token/utils.ts","../src/crypto/json-web-token/decode.ts","../src/crypto/json-web-token/sign.ts","../src/crypto/json-web-token/verify.ts","../src/domain-event/utils.ts","../src/domain-event/redis/publish.ts","../src/domain-event/socket/singleton.ts","../src/domain-event/socket/publish.ts","../src/domain-event/publish.ts","../src/logger/presets/void.ts","../src/logger/module.ts","../src/proxy/module.ts","../src/proxy/utils.ts","../src/smtp/config/singleton.ts","../src/smtp/module.ts","../src/smtp/singleton.ts"],"sourcesContent":["/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hasOwnProperty } from '@authup/core';\nimport process from 'node:process';\n\nexport function hasProcessEnv(key: string | string[]) : boolean {\n const keys = Array.isArray(key) ? key : [key];\n for (let i = 0; i < keys.length; i++) {\n if (hasOwnProperty(process.env, keys[i])) {\n return true;\n }\n }\n return false;\n}\n\nexport function readFromProcessEnv(key: string | string[]) : string | undefined;\nexport function readFromProcessEnv<T>(key: string | string[], alt: T) : T | string;\nexport function readFromProcessEnv<T>(key: string | string[], alt?: T): any {\n const keys = Array.isArray(key) ? key : [key];\n for (let i = 0; i < keys.length; i++) {\n if (hasOwnProperty(process.env, keys[i])) {\n return process.env[keys[i]];\n }\n }\n\n return alt;\n}\n\nexport function readBoolFromProcessEnv(key: string | string[], alt?: boolean): boolean | undefined {\n const keys = Array.isArray(key) ? key : [key];\n for (let i = 0; i < keys.length; i++) {\n const value = readFromProcessEnv(keys[i], alt);\n\n switch (value) {\n case true:\n case 'true':\n case 't':\n case '1':\n return true;\n case false:\n case 'false':\n case 'f':\n case '0':\n return false;\n }\n }\n\n return alt;\n}\n\nexport function readBoolOrStringFromProcessEnv(\n key: string,\n alt?: boolean | string,\n) : boolean | string | undefined {\n if (hasProcessEnv(key)) {\n const value = readBoolFromProcessEnv(key, undefined);\n if (typeof value === 'undefined') {\n return readFromProcessEnv(key, alt);\n }\n\n return value;\n }\n\n return alt;\n}\n\nexport function readIntFromProcessEnv(\n key: string | string[],\n alt?: number,\n): number | undefined {\n const keys = Array.isArray(key) ? key : [key];\n\n for (let i = 0; i < keys.length; i++) {\n const value = readFromProcessEnv(keys[i], alt);\n const intValue = parseInt(`${value}`, 10);\n\n if (!Number.isNaN(intValue)) {\n return intValue;\n }\n }\n\n return alt;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(\n obj: X,\n prop: Y,\n): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport process from 'node:process';\nimport { hasProcessEnv, readFromProcessEnv } from '../utils';\n\nexport function buildWorkingDirectoryPathsForConfigFile() {\n const cwd : string[] = [\n process.cwd(),\n ];\n\n if (hasProcessEnv('WRITABLE_DIRECTORY_PATH')) {\n let writableDirectoryPath = readFromProcessEnv('WRITABLE_DIRECTORY_PATH');\n if (!path.isAbsolute(writableDirectoryPath)) {\n writableDirectoryPath = path.join(process.cwd(), writableDirectoryPath);\n }\n\n cwd.push(writableDirectoryPath);\n } else {\n cwd.push(path.join(process.cwd(), 'writable'));\n }\n\n return cwd;\n}\n","/*\n * Copyright (c) 2023-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/core';\nimport { getModuleExport, load, locateMany } from 'locter';\nimport path from 'node:path';\nimport process from 'node:process';\nimport { merge } from 'smob';\nimport type { ConfigFileReadContext } from './type';\nimport { buildWorkingDirectoryPathsForConfigFile } from './utils';\n\nexport async function readConfigFile(context?: ConfigFileReadContext) : Promise<Record<string, any>> {\n context = context || {};\n\n const cwd : string[] = [];\n if (context.cwd) {\n const arr = Array.isArray(context.cwd) ?\n context.cwd :\n [context.cwd];\n\n for (let i = 0; i < arr.length; i++) {\n if (path.isAbsolute(arr[i])) {\n cwd.push(arr[i]);\n } else {\n cwd.push(path.join(process.cwd(), arr[i]));\n }\n }\n }\n\n if (cwd.length === 0) {\n cwd.push(...buildWorkingDirectoryPathsForConfigFile());\n }\n\n const locations = await locateMany([\n 'authup.*.{conf,js,mjs,cjs,ts,mts,mts}',\n 'authup.{conf,js,mjs,cjs,ts,mts,mts}',\n ], {\n path: cwd,\n });\n\n const content : Record<string, any> = {};\n\n for (let i = 0; i < locations.length; i++) {\n const file = await load(locations[i]);\n const fileExport = getModuleExport(file);\n\n if (!isObject(fileExport.value)) {\n continue;\n }\n\n const [root, name] = locations[i].name.split('.');\n if (root && name) {\n if (context.name === name) {\n merge(content, fileExport.value);\n } else if (!context.name) {\n content[name] = content[name] || {};\n merge(content[name], fileExport.value);\n }\n }\n\n if (root && !name) {\n if (context.name) {\n if (isObject(fileExport.value[context.name])) {\n merge(content, fileExport.value[context.name]);\n }\n } else {\n merge(content, fileExport.value);\n }\n }\n }\n\n return content;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { compare as compareMethod } from 'bcrypt';\n\nexport async function compare(value: string, hashedValue: string) : Promise<boolean> {\n return compareMethod(value, hashedValue);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hash as hashMethod } from 'bcrypt';\n\nexport async function hash(str: string, saltOrRounds: number | string = 10) : Promise<string> {\n return hashMethod(str, saltOrRounds);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum KeyPairKind {\n PRIVATE = 'private',\n PUBLIC = 'public',\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/core';\nimport type { KeyPair } from '../type';\n\nexport function isKeyPair(data: unknown) : data is KeyPair {\n return isObject(data) &&\n typeof (data as KeyPair).privateKey !== 'undefined' &&\n typeof (data as KeyPair).publicKey !== 'undefined';\n}\n\nexport function isKeyPairWithPublicKey(data: unknown) : data is Omit<KeyPair, 'privateKey'> {\n return isObject(data) &&\n typeof (data as KeyPair).publicKey !== 'undefined';\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport type { KeyPairOptions } from '../type';\n\nexport function extendKeyPairOptions(\n options?: Partial<KeyPairOptions>,\n) : KeyPairOptions {\n options = options ?? {};\n\n options.directory = options.directory || process.cwd();\n options.directory = path.isAbsolute(options.directory) ?\n options.directory :\n path.resolve(process.cwd(), options.directory);\n\n options.type ??= 'rsa';\n\n if (\n options.type === 'rsa' ||\n options.type === 'rsa-pss' ||\n options.type === 'dsa'\n ) {\n options.modulusLength = 2048;\n }\n\n if (!options.privateKeyEncoding) {\n options.privateKeyEncoding = {\n type: 'pkcs8',\n format: 'pem',\n };\n }\n\n if (!options.publicKeyEncoding) {\n options.publicKeyEncoding = {\n type: 'spki',\n format: 'pem',\n };\n }\n\n if (\n options.privateKeyEncoding.passphrase &&\n !options.privateKeyEncoding.cipher\n ) {\n options.privateKeyEncoding.cipher = 'aes-256-cbc';\n }\n\n return options as KeyPairOptions;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { KeyPairKind } from '../constants';\nimport type { KeyPairOptions } from '../type';\nimport { extendKeyPairOptions } from './options';\n\nexport function buildKeyFileName(\n type: `${KeyPairKind}`,\n context?: Partial<KeyPairOptions>,\n) {\n const options = extendKeyPairOptions(context);\n\n const parts : string[] = [];\n\n switch (type) {\n case KeyPairKind.PRIVATE: {\n if (options.privateName) {\n parts.push(options.privateName);\n } else {\n parts.push(type);\n }\n\n if (options.privateExtension) {\n if (options.privateExtension.startsWith('.')) {\n options.privateExtension = options.privateExtension.slice(1);\n }\n\n parts.push(options.privateExtension);\n } else {\n parts.push('pem');\n }\n break;\n }\n case KeyPairKind.PUBLIC: {\n if (options.publicName) {\n parts.push(options.publicName);\n } else {\n parts.push(type);\n }\n\n if (options.publicExtension) {\n if (options.publicExtension.startsWith('.')) {\n options.publicExtension = options.publicExtension.slice(1);\n }\n\n parts.push(options.publicExtension);\n } else {\n parts.push('pem');\n }\n break;\n }\n }\n\n return parts.join('.');\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createPrivateKey } from 'node:crypto';\nimport type { KeyPairOptions } from '../type';\n\nexport function decryptRSAPrivateKey(\n context: KeyPairOptions,\n key: string | Buffer,\n) : string {\n const privateKey = createPrivateKey({\n type: context.privateKeyEncoding.type,\n format: context.privateKeyEncoding.format,\n key,\n passphrase: context.privateKeyEncoding.passphrase || context.passphrase,\n });\n\n let content = privateKey.export({\n type: context.privateKeyEncoding.type,\n format: context.privateKeyEncoding.format,\n });\n\n if (typeof content !== 'string') {\n content = Buffer.from(content).toString('utf-8');\n }\n\n return content;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { buildKeyFileName, extendKeyPairOptions } from './utils';\nimport { KeyPairKind } from './constants';\n\nexport async function saveKeyPair(keyPair: KeyPair, context?: KeyPairOptions) : Promise<KeyPair> {\n context = extendKeyPairOptions(context);\n\n await fs.promises.mkdir(context.directory, { recursive: true });\n\n await Promise.all(\n [\n {\n path: path.resolve(context.directory, buildKeyFileName(KeyPairKind.PRIVATE, context)),\n content: keyPair.privateKey,\n },\n {\n path: path.resolve(context.directory, buildKeyFileName(KeyPairKind.PUBLIC, context)),\n content: keyPair.publicKey,\n },\n ]\n .map((file) => fs.promises.writeFile(file.path, file.content)),\n );\n\n return keyPair;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { generateKeyPair } from 'node:crypto';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { decryptRSAPrivateKey, extendKeyPairOptions } from './utils';\nimport { saveKeyPair } from './save';\n\nexport async function createKeyPair(context?: Partial<KeyPairOptions>) : Promise<KeyPair> {\n const options = extendKeyPairOptions(context);\n\n const keyPair : KeyPair = await new Promise((resolve: (value: KeyPair) => void, reject) => {\n const callback = (err: (Error | null), publicKey: string, privateKey: string) => {\n if (err) reject(err);\n\n resolve({\n privateKey,\n publicKey,\n });\n };\n switch (options.type) {\n case 'dsa':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'ec':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'rsa':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'rsa-pss':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n }\n });\n\n if (options.save) {\n await saveKeyPair(keyPair, options);\n }\n\n if (\n options.passphrase ||\n options.privateKeyEncoding.passphrase\n ) {\n keyPair.privateKey = decryptRSAPrivateKey(\n options,\n keyPair.privateKey,\n );\n }\n\n return keyPair;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { KeyPairOptions } from './type';\nimport { buildKeyFileName, extendKeyPairOptions } from './utils';\nimport { KeyPairKind } from './constants';\n\nexport async function deleteKeyPair(context?: Partial<KeyPairOptions>) : Promise<void> {\n const options = extendKeyPairOptions(context);\n\n const privateKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PRIVATE, options));\n const publicKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PUBLIC, options));\n\n try {\n await Promise.all([privateKeyPath, publicKeyPath]\n .map((filePath) => fs.promises.stat(filePath)));\n } catch (e) {\n return;\n }\n\n await Promise.all([\n privateKeyPath,\n publicKeyPath,\n ].map((filePath) => fs.promises.rm(filePath)));\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createPublicKey } from 'node:crypto';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { buildKeyFileName, decryptRSAPrivateKey, extendKeyPairOptions } from './utils';\nimport { KeyPairKind } from './constants';\nimport { saveKeyPair } from './save';\n\nexport async function loadKeyPair(context?: Partial<KeyPairOptions>) : Promise<KeyPair | undefined> {\n const options = extendKeyPairOptions(context);\n\n const privateKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PRIVATE, options));\n\n try {\n await fs.promises.stat(privateKeyPath);\n } catch (e) {\n return undefined;\n }\n\n const privateKeyBuffer = await fs.promises.readFile(privateKeyPath);\n let privateKey = privateKeyBuffer.toString();\n if (\n options.passphrase ||\n options.privateKeyEncoding.passphrase\n ) {\n privateKey = decryptRSAPrivateKey(\n options,\n privateKey,\n );\n }\n\n const publicKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PUBLIC, options));\n\n let publicKey : string;\n\n try {\n await fs.promises.stat(publicKeyPath);\n const publicKeyBuffer = await fs.promises.readFile(publicKeyPath);\n publicKey = publicKeyBuffer.toString();\n } catch (e) {\n const publicKeyObject = createPublicKey({\n key: privateKey,\n format: options.privateKeyEncoding.format,\n type: options.publicKeyEncoding.type,\n });\n\n const stringOrBuffer = publicKeyObject.export({\n format: options.publicKeyEncoding.format,\n type: options.publicKeyEncoding.type,\n });\n if (typeof stringOrBuffer !== 'string') {\n publicKey = stringOrBuffer.toString();\n } else {\n publicKey = stringOrBuffer;\n }\n\n if (options.save) {\n await saveKeyPair({\n privateKey,\n publicKey,\n }, options);\n }\n }\n\n return {\n privateKey,\n publicKey,\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { extendKeyPairOptions } from './utils';\nimport { loadKeyPair } from './load';\nimport { createKeyPair } from './create';\n\nconst keyPairCache : Record<string, KeyPair> = {};\n\nexport async function useKeyPair(value?: Partial<KeyPairOptions> | string) : Promise<KeyPair> {\n let options : KeyPairOptions;\n\n if (typeof value === 'string') {\n options = extendKeyPairOptions({\n privateName: value,\n });\n } else {\n options = extendKeyPairOptions(value || {});\n }\n\n if (Object.prototype.hasOwnProperty.call(keyPairCache, options.privateName)) {\n return keyPairCache[options.privateName];\n }\n\n let keyPair = await loadKeyPair(options);\n if (typeof keyPair === 'undefined') {\n keyPair = await createKeyPair(options);\n }\n\n keyPairCache[options.privateName] = keyPair;\n\n return keyPair;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { TokenError } from '@authup/core';\nimport { isObject } from 'smob';\n\nexport function createErrorForJWTError(e: unknown) : TokenError {\n if (\n isObject(e) &&\n typeof e.name === 'string'\n ) {\n switch (e.name) {\n case 'TokenExpiredError': {\n return TokenError.expired();\n }\n case 'NotBeforeError': {\n if (typeof e.date === 'string' || e.date instanceof Date) {\n return TokenError.notActiveBefore(e.date);\n }\n break;\n }\n case 'JsonWebTokenError': {\n if (typeof e.message === 'string') {\n return TokenError.payloadInvalid(e.message);\n }\n\n break;\n }\n }\n }\n\n return new TokenError({\n previous: e as Error,\n decorateMessage: true,\n logMessage: true,\n message: 'The JWT error could not be determined.',\n });\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type {\n Jwt,\n JwtPayload,\n} from 'jsonwebtoken';\nimport {\n decode,\n} from 'jsonwebtoken';\nimport { TokenError } from '@authup/core';\nimport type { TokenDecodeOptions } from './type';\nimport { createErrorForJWTError } from './utils';\n\n/**\n * Decode a JWT token with no verification.\n *\n * @param token\n * @param options\n *\n * @throws TokenError\n */\nexport function decodeToken(token: string, options: TokenDecodeOptions & { complete: true }): null | Jwt;\nexport function decodeToken(token: string, options?: TokenDecodeOptions): JwtPayload | string | null;\nexport function decodeToken(\n token: string,\n options?: TokenDecodeOptions,\n): JwtPayload | string | null {\n options ??= {};\n\n try {\n return decode(token, {\n ...options,\n });\n } catch (e) {\n createErrorForJWTError(e);\n\n throw e;\n }\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { sign } from 'jsonwebtoken';\nimport { KeyType, TokenError } from '@authup/core';\nimport { isKeyPair, useKeyPair } from '../key-pair';\nimport type { TokenSignOptions } from './type';\n\nexport async function signToken(\n payload: string | object | Buffer | Record<string, any>,\n context: TokenSignOptions,\n): Promise<string> {\n context.expiresIn = context.expiresIn || 3600;\n\n switch (context.type) {\n case KeyType.RSA:\n case KeyType.EC: {\n const { type, keyPair, ...options } = context;\n const { privateKey } = isKeyPair(keyPair) ?\n keyPair :\n await useKeyPair(keyPair);\n\n if (type === KeyType.RSA) {\n options.algorithm = options.algorithm || 'RS256';\n } else {\n options.algorithm = options.algorithm || 'ES256';\n }\n\n return sign(payload, privateKey, options);\n }\n case KeyType.OCT: {\n const { type, secret, ...options } = context;\n options.algorithm = options.algorithm || 'HS256';\n\n return sign(payload, secret, options);\n }\n }\n\n throw new TokenError();\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Jwt, JwtPayload } from 'jsonwebtoken';\nimport { verify } from 'jsonwebtoken';\nimport { KeyType, TokenError } from '@authup/core';\nimport { isKeyPairWithPublicKey, useKeyPair } from '../key-pair';\nimport type { TokenVerifyOptions } from './type';\nimport { createErrorForJWTError } from './utils';\n\n/**\n * Verify JWT.\n *\n * @param token\n * @param context\n *\n * @throws TokenError\n */\nexport async function verifyToken(token: string, context: TokenVerifyOptions & { complete: true }): Promise<string | Jwt>;\nexport async function verifyToken(token: string, context: TokenVerifyOptions): Promise<JwtPayload | string>;\nexport async function verifyToken(\n token: string,\n context: TokenVerifyOptions,\n) : Promise<JwtPayload | Jwt | string> {\n let output : JwtPayload | Jwt | string | undefined;\n\n try {\n switch (context.type) {\n case KeyType.RSA:\n case KeyType.EC: {\n const { type, keyPair, ...options } = context;\n const { publicKey } = isKeyPairWithPublicKey(keyPair) ?\n keyPair :\n await useKeyPair(keyPair);\n\n if (type === KeyType.RSA) {\n options.algorithms = options.algorithms || ['RS256', 'RS384', 'RS512', 'PS256', 'PS384', 'PS512'];\n } else {\n options.algorithms = options.algorithms || ['ES256', 'ES384', 'ES512'];\n }\n\n output = await verify(token, publicKey, {\n ...options,\n });\n break;\n }\n case KeyType.OCT: {\n const { type, secret, ...options } = context;\n\n options.algorithms = options.algorithms || ['HS256', 'HS384', 'HS512'];\n\n output = await verify(token, secret, {\n ...options,\n });\n }\n }\n } catch (e) {\n throw createErrorForJWTError(e);\n }\n\n if (typeof output === 'undefined') {\n throw new TokenError({ message: 'Invalid type.' });\n }\n\n return output;\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/core';\nimport type { DomainEventChannelName } from './type';\n\nexport function transformDomainEventData<T>(input: T) : T {\n if (isObject(input)) {\n const keys = Object.keys(input);\n for (let i = 0; i < keys.length; i++) {\n const value = input[keys[i]];\n if (value instanceof Date) {\n input[keys[i]] = value.toISOString();\n }\n }\n }\n\n return input;\n}\n\nexport function buildDomainEventChannelName(\n input: DomainEventChannelName,\n id?: string | number,\n) : string {\n if (typeof input === 'string') {\n return input;\n }\n\n return input(id);\n}\n","/*\n * Copyright (c) 2023-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { DomainEventName } from '@authup/core';\nimport type { DomainEventContext } from '@authup/core';\nimport { hasClient, hasConfig, useClient } from 'redis-extension';\nimport type { DomainEventDestinations } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport async function publishDomainRedisEvent(\n context: DomainEventContext,\n destinations: DomainEventDestinations,\n) : Promise<any> {\n if (!hasClient() && !hasConfig()) {\n return Promise.resolve();\n }\n\n context = transformDomainEventData(context);\n\n const json = JSON.stringify(context);\n\n const client = useClient();\n const pipeline = client.pipeline();\n for (let i = 0; i < destinations.length; i++) {\n const { namespace } = destinations[i];\n const keyPrefix = (namespace ? `${namespace}:` : '');\n\n let key = keyPrefix + buildDomainEventChannelName(destinations[i].channel);\n pipeline.publish(key, json);\n\n if (\n context.event !== DomainEventName.CREATED &&\n typeof destinations[i].channel === 'function'\n ) {\n key = keyPrefix + buildDomainEventChannelName(destinations[i].channel, context.data.id);\n pipeline.publish(key, json);\n }\n }\n\n return pipeline.exec();\n}\n","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { Emitter } from '@socket.io/redis-emitter';\nimport { useClient } from 'redis-extension';\nimport type { SocketServerToClientEvents } from './type';\n\nlet instance : undefined | Emitter<SocketServerToClientEvents>;\n\nexport function useSocketEmitter() : Emitter<SocketServerToClientEvents> {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new Emitter<SocketServerToClientEvents>(useClient());\n\n return instance;\n}\n","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { DomainEventContext } from '@authup/core';\nimport { DomainEventName, buildDomainEventFullName } from '@authup/core';\nimport { hasClient, hasConfig } from 'redis-extension';\nimport type { DomainEventDestinations } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\nimport { useSocketEmitter } from './singleton';\n\nexport function publishDomainSocketEvent(\n context: DomainEventContext,\n destinations: DomainEventDestinations,\n) {\n if (!hasClient() && !hasConfig()) {\n return;\n }\n\n context = transformDomainEventData(context);\n\n for (let i = 0; i < destinations.length; i++) {\n let emitter = useSocketEmitter();\n if (destinations[i].namespace) {\n emitter = emitter.of(destinations[i].namespace);\n }\n\n let roomName = buildDomainEventChannelName(destinations[i].channel);\n\n const fullEventName = buildDomainEventFullName(context.type, context.event);\n\n emitter\n .in(roomName)\n .emit(fullEventName, {\n data: context,\n meta: {\n roomName,\n },\n });\n\n if (\n context.event !== DomainEventName.CREATED &&\n typeof destinations[i].channel === 'function'\n ) {\n roomName = buildDomainEventChannelName(destinations[i].channel, context.data.id);\n emitter\n .in(roomName)\n .emit(fullEventName, {\n data: context,\n meta: {\n roomName,\n roomId: context.data.id,\n },\n });\n }\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { DomainEventContext } from '@authup/core';\nimport { publishDomainRedisEvent } from './redis';\nimport { publishDomainSocketEvent } from './socket';\nimport type { DomainEventDestinations } from './type';\n\nexport async function publishDomainEvent(\n context: DomainEventContext,\n destinations: DomainEventDestinations,\n) {\n await publishDomainRedisEvent(context, destinations);\n publishDomainSocketEvent(context, destinations);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Logger } from '../type';\n\nexport class VoidLogger implements Logger {\n error(message: any) : any;\n\n error(message: string, ...meta: any[]) : any;\n\n error(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n\n warn(message: any) : any;\n\n warn(message: string, ...meta: any[]) : any;\n\n warn(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n\n info(message: any) : any;\n\n info(message: string, ...meta: any[]) : any;\n\n info(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n\n http(message: any) : any;\n\n http(message: string, ...meta: any[]) : any;\n\n http(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n\n verbose(message: any) : any;\n\n verbose(message: string, ...meta: any[]) : any;\n\n verbose(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n\n debug(message: any) : any;\n\n debug(message: string, ...meta: any[]) : any;\n\n debug(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { VoidLogger } from './presets';\nimport type { Logger } from './type';\n\nlet instance: Logger | undefined;\n\nexport function useLogger() : Logger {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new VoidLogger();\n\n return instance;\n}\n\nexport function setLogger(logger: Logger) {\n instance = logger;\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport http from 'node:http';\nimport type { Agent, AgentOptions } from 'node:https';\nimport https from 'node:https';\nimport { merge } from 'smob';\n\nexport type ProxyClientOptions = {\n user?: string,\n password?: string,\n host: string,\n port: number\n};\n\nexport class ProxyClient {\n protected options: ProxyClientOptions;\n\n /**\n * e.g. { keepAlive: true }\n * @protected\n */\n protected agentOptions : AgentOptions;\n\n constructor(options: ProxyClientOptions, agentOptions?: AgentOptions) {\n this.options = options;\n this.agentOptions = merge(agentOptions || {}, { keepAlive: false });\n }\n\n /**\n * Create a http agent for an url.\n *\n * @param input\n */\n async createAgent(input: string) {\n return new Promise<Agent>((resolve, reject) => {\n const headers : Record<string, any> = { };\n\n if (\n this.options.user &&\n this.options.password\n ) {\n headers['Proxy-Authorization'] = `Basic ${Buffer.from(`${this.options.user}:${this.options.password}`).toString('base64')}`;\n }\n\n const urlParsed = new URL(input);\n const request = http.request({\n host: this.options.host,\n port: this.options.port,\n method: 'CONNECT',\n path: `${urlParsed.hostname}:443`,\n headers,\n });\n\n request.on('connect', (res, socket) => {\n if (\n res.statusCode >= 200 &&\n res.statusCode < 300\n ) {\n resolve(new https.Agent({ socket, ...this.agentOptions }));\n } else {\n reject(new Error('Could not connect to proxy!'));\n }\n });\n\n request.on('error', (err) => {\n reject(err);\n });\n\n request.on('timeout', (err) => {\n reject(err);\n });\n\n request.end();\n });\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Agent } from 'https';\nimport { parseProxyConnectionString } from '@authup/core';\nimport { getProxyForUrl } from 'proxy-from-env';\nimport { ProxyClient } from './module';\n\ntype ClientOptions = {\n agent?: ((url: URL) => Agent) | Agent\n};\n\nexport async function buildHTTPClientConfigForProxy(\n url: string,\n) : Promise<ClientOptions> {\n const connectionString = getProxyForUrl(url);\n if (connectionString) {\n const connectionDetails = parseProxyConnectionString(connectionString);\n const proxyClient = new ProxyClient({\n host: connectionDetails.host,\n port: connectionDetails.port || 3128,\n ...(connectionDetails.auth.username ? { user: connectionDetails.auth.username } : {}),\n ...(connectionDetails.auth.password ? { password: connectionDetails.auth.password } : {}),\n });\n\n const agent = await proxyClient.createAgent(url);\n\n return {\n agent,\n };\n }\n\n return {};\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { SmtpConfig } from '../type';\n\nlet instance : SmtpConfig | string | undefined;\n\nexport function hasSmtpConfig() {\n return !!instance;\n}\n\nexport function setSmtpConfig(value: SmtpConfig | string | undefined) {\n instance = value;\n}\n\nexport function useSmtpConfig() : SmtpConfig | string {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = {};\n\n return instance;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Transporter } from 'nodemailer';\nimport { createTransport } from 'nodemailer';\nimport type { SmtpConfig } from './type';\nimport { useLogger } from '../logger';\n\nexport function createSmtpClient(options?: SmtpConfig | string) : Transporter {\n let transport : Transporter;\n\n options = options || {};\n\n if (typeof options === 'string') {\n transport = createTransport(options);\n } else if (options.connectionString) {\n transport = createTransport(options.connectionString);\n } else {\n let auth: Record<string, any> | undefined;\n if (options.user && options.password) {\n auth = {\n type: 'login',\n user: options.user,\n pass: options.password,\n };\n }\n\n transport = createTransport({\n host: options.host,\n port: options.port,\n auth,\n secure: options.ssl,\n opportunisticTLS: options.starttls,\n tls: {\n rejectUnauthorized: false,\n },\n });\n }\n\n transport.on('error', (e) => {\n useLogger().error(e.message);\n });\n\n return transport;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Transporter } from 'nodemailer';\nimport { createTestAccount } from 'nodemailer';\nimport { createSmtpClient } from './module';\nimport { useSmtpConfig } from './config';\nimport type { SmtpConfig } from './type';\n\nlet instance : Transporter | undefined;\n\nexport async function useSMTPClient() : Promise<Transporter> {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n let options : SmtpConfig | string;\n if (process.env.NODE_ENV === 'test') {\n const testAccount = await createTestAccount();\n\n options = {\n host: 'smtp.ethereal.email',\n port: 587,\n ssl: false,\n user: testAccount.user,\n password: testAccount.pass,\n };\n } else {\n options = useSmtpConfig();\n }\n\n instance = createSmtpClient(options);\n\n return instance;\n}\n"],"names":["hasProcessEnv","key","keys","Array","isArray","i","length","hasOwnProperty","process","env","readFromProcessEnv","alt","readBoolFromProcessEnv","value","readBoolOrStringFromProcessEnv","undefined","readIntFromProcessEnv","intValue","parseInt","Number","isNaN","obj","prop","Object","prototype","call","buildWorkingDirectoryPathsForConfigFile","cwd","writableDirectoryPath","path","isAbsolute","join","push","readConfigFile","context","arr","locations","locateMany","content","file","load","fileExport","getModuleExport","isObject","root","name","split","merge","compare","hashedValue","compareMethod","hash","str","saltOrRounds","hashMethod","KeyPairKind","PRIVATE","PUBLIC","isKeyPair","data","privateKey","publicKey","isKeyPairWithPublicKey","extendKeyPairOptions","options","directory","resolve","type","modulusLength","privateKeyEncoding","format","publicKeyEncoding","passphrase","cipher","buildKeyFileName","parts","privateName","privateExtension","startsWith","slice","publicName","publicExtension","decryptRSAPrivateKey","createPrivateKey","export","Buffer","from","toString","saveKeyPair","keyPair","fs","promises","mkdir","recursive","Promise","all","map","writeFile","createKeyPair","reject","callback","err","generateKeyPair","save","deleteKeyPair","privateKeyPath","publicKeyPath","filePath","stat","e","rm","loadKeyPair","privateKeyBuffer","readFile","publicKeyBuffer","publicKeyObject","createPublicKey","stringOrBuffer","keyPairCache","useKeyPair","createErrorForJWTError","TokenError","expired","date","Date","notActiveBefore","message","payloadInvalid","previous","decorateMessage","logMessage","decodeToken","token","decode","signToken","payload","expiresIn","KeyType","RSA","EC","algorithm","sign","OCT","secret","verifyToken","output","algorithms","verify","transformDomainEventData","input","toISOString","buildDomainEventChannelName","id","publishDomainRedisEvent","destinations","hasClient","hasConfig","json","JSON","stringify","client","useClient","pipeline","namespace","keyPrefix","channel","publish","event","DomainEventName","CREATED","exec","instance","useSocketEmitter","Emitter","publishDomainSocketEvent","emitter","of","roomName","fullEventName","buildDomainEventFullName","in","emit","meta","roomId","publishDomainEvent","VoidLogger","error","warn","info","http","verbose","debug","useLogger","setLogger","logger","ProxyClient","createAgent","headers","user","password","urlParsed","URL","request","host","port","method","hostname","on","res","socket","statusCode","https","Agent","agentOptions","Error","end","constructor","keepAlive","buildHTTPClientConfigForProxy","url","connectionString","getProxyForUrl","connectionDetails","parseProxyConnectionString","proxyClient","auth","username","agent","hasSmtpConfig","setSmtpConfig","useSmtpConfig","createSmtpClient","transport","createTransport","pass","secure","ssl","opportunisticTLS","starttls","tls","rejectUnauthorized","useSMTPClient","NODE_ENV","testAccount","createTestAccount"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/utils/env.ts","../src/utils/has-property.ts","../src/config/utils.ts","../src/config/read.ts","../src/crypto/hash/compare.ts","../src/crypto/hash/hash.ts","../src/crypto/key-pair/constants.ts","../src/crypto/key-pair/utils/check.ts","../src/crypto/key-pair/utils/options.ts","../src/crypto/key-pair/utils/file-name.ts","../src/crypto/key-pair/utils/private-key.ts","../src/crypto/key-pair/save.ts","../src/crypto/key-pair/create.ts","../src/crypto/key-pair/delete.ts","../src/crypto/key-pair/load.ts","../src/crypto/key-pair/module.ts","../src/crypto/json-web-token/utils.ts","../src/crypto/json-web-token/decode.ts","../src/crypto/json-web-token/sign.ts","../src/crypto/json-web-token/verify.ts","../src/domain-event/utils.ts","../src/domain-event/redis/publish.ts","../src/domain-event/socket/singleton.ts","../src/domain-event/socket/publish.ts","../src/domain-event/publish.ts","../src/logger/presets/void.ts","../src/logger/module.ts","../src/proxy/module.ts","../src/proxy/utils.ts","../src/smtp/config/singleton.ts","../src/smtp/module.ts","../src/smtp/singleton.ts"],"sourcesContent":["/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hasOwnProperty } from '@authup/core';\nimport process from 'node:process';\n\nexport function hasProcessEnv(key: string | string[]) : boolean {\n const keys = Array.isArray(key) ? key : [key];\n for (let i = 0; i < keys.length; i++) {\n if (hasOwnProperty(process.env, keys[i])) {\n return true;\n }\n }\n return false;\n}\n\nexport function readFromProcessEnv(key: string | string[]) : string | undefined;\nexport function readFromProcessEnv<T>(key: string | string[], alt: T) : T | string;\nexport function readFromProcessEnv<T>(key: string | string[], alt?: T): any {\n const keys = Array.isArray(key) ? key : [key];\n for (let i = 0; i < keys.length; i++) {\n if (hasOwnProperty(process.env, keys[i])) {\n return process.env[keys[i]];\n }\n }\n\n return alt;\n}\n\nexport function readBoolFromProcessEnv(key: string | string[], alt?: boolean): boolean | undefined {\n const keys = Array.isArray(key) ? key : [key];\n for (let i = 0; i < keys.length; i++) {\n const value = readFromProcessEnv(keys[i], alt);\n\n switch (value) {\n case true:\n case 'true':\n case 't':\n case '1':\n return true;\n case false:\n case 'false':\n case 'f':\n case '0':\n return false;\n }\n }\n\n return alt;\n}\n\nexport function readBoolOrStringFromProcessEnv(\n key: string,\n alt?: boolean | string,\n) : boolean | string | undefined {\n if (hasProcessEnv(key)) {\n const value = readBoolFromProcessEnv(key, undefined);\n if (typeof value === 'undefined') {\n return readFromProcessEnv(key, alt);\n }\n\n return value;\n }\n\n return alt;\n}\n\nexport function readIntFromProcessEnv(\n key: string | string[],\n alt?: number,\n): number | undefined {\n const keys = Array.isArray(key) ? key : [key];\n\n for (let i = 0; i < keys.length; i++) {\n const value = readFromProcessEnv(keys[i], alt);\n const intValue = parseInt(`${value}`, 10);\n\n if (!Number.isNaN(intValue)) {\n return intValue;\n }\n }\n\n return alt;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(\n obj: X,\n prop: Y,\n): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport process from 'node:process';\nimport { hasProcessEnv, readFromProcessEnv } from '../utils';\n\nexport function buildWorkingDirectoryPathsForConfigFile() {\n const cwd : string[] = [\n process.cwd(),\n ];\n\n if (hasProcessEnv('WRITABLE_DIRECTORY_PATH')) {\n let writableDirectoryPath = readFromProcessEnv('WRITABLE_DIRECTORY_PATH');\n if (!path.isAbsolute(writableDirectoryPath)) {\n writableDirectoryPath = path.join(process.cwd(), writableDirectoryPath);\n }\n\n cwd.push(writableDirectoryPath);\n } else {\n cwd.push(path.join(process.cwd(), 'writable'));\n }\n\n return cwd;\n}\n","/*\n * Copyright (c) 2023-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/core';\nimport { getModuleExport, load, locateMany } from 'locter';\nimport path from 'node:path';\nimport process from 'node:process';\nimport { assign } from 'smob';\nimport type { ConfigFileReadContext } from './type';\nimport { buildWorkingDirectoryPathsForConfigFile } from './utils';\n\nexport async function readConfigFile(context?: ConfigFileReadContext) : Promise<Record<string, any>> {\n context = context || {};\n\n const cwd : string[] = [];\n if (context.cwd) {\n const arr = Array.isArray(context.cwd) ?\n context.cwd :\n [context.cwd];\n\n for (let i = 0; i < arr.length; i++) {\n if (path.isAbsolute(arr[i])) {\n cwd.push(arr[i]);\n } else {\n cwd.push(path.join(process.cwd(), arr[i]));\n }\n }\n }\n\n if (cwd.length === 0) {\n cwd.push(...buildWorkingDirectoryPathsForConfigFile());\n }\n\n const locations = await locateMany([\n 'authup.*.{conf,js,mjs,cjs,ts,mts,mts}',\n 'authup.{conf,js,mjs,cjs,ts,mts,mts}',\n ], {\n path: cwd,\n });\n\n const content : Record<string, any> = {};\n\n for (let i = 0; i < locations.length; i++) {\n const file = await load(locations[i]);\n const fileExport = getModuleExport(file);\n\n if (!isObject(fileExport.value)) {\n continue;\n }\n\n const [root, name] = locations[i].name.split('.');\n if (root && name) {\n if (context.name === name) {\n assign(content, fileExport.value);\n } else if (!context.name) {\n content[name] = content[name] || {};\n assign(content[name], fileExport.value);\n }\n }\n\n if (root && !name) {\n if (context.name) {\n if (isObject(fileExport.value[context.name])) {\n assign(content, fileExport.value[context.name]);\n }\n } else {\n assign(content, fileExport.value);\n }\n }\n }\n\n return content;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { compare as compareMethod } from 'bcrypt';\n\nexport async function compare(value: string, hashedValue: string) : Promise<boolean> {\n return compareMethod(value, hashedValue);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hash as hashMethod } from 'bcrypt';\n\nexport async function hash(str: string, saltOrRounds: number | string = 10) : Promise<string> {\n return hashMethod(str, saltOrRounds);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum KeyPairKind {\n PRIVATE = 'private',\n PUBLIC = 'public',\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/core';\nimport type { KeyPair } from '../type';\n\nexport function isKeyPair(data: unknown) : data is KeyPair {\n return isObject(data) &&\n typeof (data as KeyPair).privateKey !== 'undefined' &&\n typeof (data as KeyPair).publicKey !== 'undefined';\n}\n\nexport function isKeyPairWithPublicKey(data: unknown) : data is Omit<KeyPair, 'privateKey'> {\n return isObject(data) &&\n typeof (data as KeyPair).publicKey !== 'undefined';\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport type { KeyPairOptions } from '../type';\n\nexport function extendKeyPairOptions(\n options?: Partial<KeyPairOptions>,\n) : KeyPairOptions {\n options = options ?? {};\n\n options.directory = options.directory || process.cwd();\n options.directory = path.isAbsolute(options.directory) ?\n options.directory :\n path.resolve(process.cwd(), options.directory);\n\n options.type ??= 'rsa';\n\n if (\n options.type === 'rsa' ||\n options.type === 'rsa-pss' ||\n options.type === 'dsa'\n ) {\n options.modulusLength = 2048;\n }\n\n if (!options.privateKeyEncoding) {\n options.privateKeyEncoding = {\n type: 'pkcs8',\n format: 'pem',\n };\n }\n\n if (!options.publicKeyEncoding) {\n options.publicKeyEncoding = {\n type: 'spki',\n format: 'pem',\n };\n }\n\n if (\n options.privateKeyEncoding.passphrase &&\n !options.privateKeyEncoding.cipher\n ) {\n options.privateKeyEncoding.cipher = 'aes-256-cbc';\n }\n\n return options as KeyPairOptions;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { KeyPairKind } from '../constants';\nimport type { KeyPairOptions } from '../type';\nimport { extendKeyPairOptions } from './options';\n\nexport function buildKeyFileName(\n type: `${KeyPairKind}`,\n context?: Partial<KeyPairOptions>,\n) {\n const options = extendKeyPairOptions(context);\n\n const parts : string[] = [];\n\n switch (type) {\n case KeyPairKind.PRIVATE: {\n if (options.privateName) {\n parts.push(options.privateName);\n } else {\n parts.push(type);\n }\n\n if (options.privateExtension) {\n if (options.privateExtension.startsWith('.')) {\n options.privateExtension = options.privateExtension.slice(1);\n }\n\n parts.push(options.privateExtension);\n } else {\n parts.push('pem');\n }\n break;\n }\n case KeyPairKind.PUBLIC: {\n if (options.publicName) {\n parts.push(options.publicName);\n } else {\n parts.push(type);\n }\n\n if (options.publicExtension) {\n if (options.publicExtension.startsWith('.')) {\n options.publicExtension = options.publicExtension.slice(1);\n }\n\n parts.push(options.publicExtension);\n } else {\n parts.push('pem');\n }\n break;\n }\n }\n\n return parts.join('.');\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createPrivateKey } from 'node:crypto';\nimport type { KeyPairOptions } from '../type';\n\nexport function decryptRSAPrivateKey(\n context: KeyPairOptions,\n key: string | Buffer,\n) : string {\n const privateKey = createPrivateKey({\n type: context.privateKeyEncoding.type,\n format: context.privateKeyEncoding.format,\n key,\n passphrase: context.privateKeyEncoding.passphrase || context.passphrase,\n });\n\n let content = privateKey.export({\n type: context.privateKeyEncoding.type,\n format: context.privateKeyEncoding.format,\n });\n\n if (typeof content !== 'string') {\n content = Buffer.from(content).toString('utf-8');\n }\n\n return content;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { buildKeyFileName, extendKeyPairOptions } from './utils';\nimport { KeyPairKind } from './constants';\n\nexport async function saveKeyPair(keyPair: KeyPair, context?: KeyPairOptions) : Promise<KeyPair> {\n context = extendKeyPairOptions(context);\n\n await fs.promises.mkdir(context.directory, { recursive: true });\n\n await Promise.all(\n [\n {\n path: path.resolve(context.directory, buildKeyFileName(KeyPairKind.PRIVATE, context)),\n content: keyPair.privateKey,\n },\n {\n path: path.resolve(context.directory, buildKeyFileName(KeyPairKind.PUBLIC, context)),\n content: keyPair.publicKey,\n },\n ]\n .map((file) => fs.promises.writeFile(file.path, file.content)),\n );\n\n return keyPair;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { generateKeyPair } from 'node:crypto';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { decryptRSAPrivateKey, extendKeyPairOptions } from './utils';\nimport { saveKeyPair } from './save';\n\nexport async function createKeyPair(context?: Partial<KeyPairOptions>) : Promise<KeyPair> {\n const options = extendKeyPairOptions(context);\n\n const keyPair : KeyPair = await new Promise((resolve: (value: KeyPair) => void, reject) => {\n const callback = (err: (Error | null), publicKey: string, privateKey: string) => {\n if (err) reject(err);\n\n resolve({\n privateKey,\n publicKey,\n });\n };\n switch (options.type) {\n case 'dsa':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'ec':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'rsa':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'rsa-pss':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n }\n });\n\n if (options.save) {\n await saveKeyPair(keyPair, options);\n }\n\n if (\n options.passphrase ||\n options.privateKeyEncoding.passphrase\n ) {\n keyPair.privateKey = decryptRSAPrivateKey(\n options,\n keyPair.privateKey,\n );\n }\n\n return keyPair;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { KeyPairOptions } from './type';\nimport { buildKeyFileName, extendKeyPairOptions } from './utils';\nimport { KeyPairKind } from './constants';\n\nexport async function deleteKeyPair(context?: Partial<KeyPairOptions>) : Promise<void> {\n const options = extendKeyPairOptions(context);\n\n const privateKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PRIVATE, options));\n const publicKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PUBLIC, options));\n\n try {\n await Promise.all([privateKeyPath, publicKeyPath]\n .map((filePath) => fs.promises.stat(filePath)));\n } catch (e) {\n return;\n }\n\n await Promise.all([\n privateKeyPath,\n publicKeyPath,\n ].map((filePath) => fs.promises.rm(filePath)));\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createPublicKey } from 'node:crypto';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { buildKeyFileName, decryptRSAPrivateKey, extendKeyPairOptions } from './utils';\nimport { KeyPairKind } from './constants';\nimport { saveKeyPair } from './save';\n\nexport async function loadKeyPair(context?: Partial<KeyPairOptions>) : Promise<KeyPair | undefined> {\n const options = extendKeyPairOptions(context);\n\n const privateKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PRIVATE, options));\n\n try {\n await fs.promises.stat(privateKeyPath);\n } catch (e) {\n return undefined;\n }\n\n const privateKeyBuffer = await fs.promises.readFile(privateKeyPath);\n let privateKey = privateKeyBuffer.toString();\n if (\n options.passphrase ||\n options.privateKeyEncoding.passphrase\n ) {\n privateKey = decryptRSAPrivateKey(\n options,\n privateKey,\n );\n }\n\n const publicKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PUBLIC, options));\n\n let publicKey : string;\n\n try {\n await fs.promises.stat(publicKeyPath);\n const publicKeyBuffer = await fs.promises.readFile(publicKeyPath);\n publicKey = publicKeyBuffer.toString();\n } catch (e) {\n const publicKeyObject = createPublicKey({\n key: privateKey,\n format: options.privateKeyEncoding.format,\n type: options.publicKeyEncoding.type,\n });\n\n const stringOrBuffer = publicKeyObject.export({\n format: options.publicKeyEncoding.format,\n type: options.publicKeyEncoding.type,\n });\n if (typeof stringOrBuffer !== 'string') {\n publicKey = stringOrBuffer.toString();\n } else {\n publicKey = stringOrBuffer;\n }\n\n if (options.save) {\n await saveKeyPair({\n privateKey,\n publicKey,\n }, options);\n }\n }\n\n return {\n privateKey,\n publicKey,\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { extendKeyPairOptions } from './utils';\nimport { loadKeyPair } from './load';\nimport { createKeyPair } from './create';\n\nconst keyPairCache : Record<string, KeyPair> = {};\n\nexport async function useKeyPair(value?: Partial<KeyPairOptions> | string) : Promise<KeyPair> {\n let options : KeyPairOptions;\n\n if (typeof value === 'string') {\n options = extendKeyPairOptions({\n privateName: value,\n });\n } else {\n options = extendKeyPairOptions(value || {});\n }\n\n if (Object.prototype.hasOwnProperty.call(keyPairCache, options.privateName)) {\n return keyPairCache[options.privateName];\n }\n\n let keyPair = await loadKeyPair(options);\n if (typeof keyPair === 'undefined') {\n keyPair = await createKeyPair(options);\n }\n\n keyPairCache[options.privateName] = keyPair;\n\n return keyPair;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { TokenError } from '@authup/core';\nimport { isObject } from 'smob';\n\nexport function createErrorForJWTError(e: unknown) : TokenError {\n if (\n isObject(e) &&\n typeof e.name === 'string'\n ) {\n switch (e.name) {\n case 'TokenExpiredError': {\n return TokenError.expired();\n }\n case 'NotBeforeError': {\n if (typeof e.date === 'string' || e.date instanceof Date) {\n return TokenError.notActiveBefore(e.date);\n }\n break;\n }\n case 'JsonWebTokenError': {\n if (typeof e.message === 'string') {\n return TokenError.payloadInvalid(e.message);\n }\n\n break;\n }\n }\n }\n\n return new TokenError({\n previous: e as Error,\n decorateMessage: true,\n logMessage: true,\n message: 'The JWT error could not be determined.',\n });\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type {\n Jwt,\n JwtPayload,\n} from 'jsonwebtoken';\nimport {\n decode,\n} from 'jsonwebtoken';\nimport { TokenError } from '@authup/core';\nimport type { TokenDecodeOptions } from './type';\nimport { createErrorForJWTError } from './utils';\n\n/**\n * Decode a JWT token with no verification.\n *\n * @param token\n * @param options\n *\n * @throws TokenError\n */\nexport function decodeToken(token: string, options: TokenDecodeOptions & { complete: true }): null | Jwt;\nexport function decodeToken(token: string, options?: TokenDecodeOptions): JwtPayload | string | null;\nexport function decodeToken(\n token: string,\n options?: TokenDecodeOptions,\n): JwtPayload | string | null {\n options ??= {};\n\n try {\n return decode(token, {\n ...options,\n });\n } catch (e) {\n createErrorForJWTError(e);\n\n throw e;\n }\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { sign } from 'jsonwebtoken';\nimport { KeyType, TokenError } from '@authup/core';\nimport { isKeyPair, useKeyPair } from '../key-pair';\nimport type { TokenSignOptions } from './type';\n\nexport async function signToken(\n payload: string | object | Buffer | Record<string, any>,\n context: TokenSignOptions,\n): Promise<string> {\n context.expiresIn = context.expiresIn || 3600;\n\n switch (context.type) {\n case KeyType.RSA:\n case KeyType.EC: {\n const { type, keyPair, ...options } = context;\n const { privateKey } = isKeyPair(keyPair) ?\n keyPair :\n await useKeyPair(keyPair);\n\n if (type === KeyType.RSA) {\n options.algorithm = options.algorithm || 'RS256';\n } else {\n options.algorithm = options.algorithm || 'ES256';\n }\n\n return sign(payload, privateKey, options);\n }\n case KeyType.OCT: {\n const { type, secret, ...options } = context;\n options.algorithm = options.algorithm || 'HS256';\n\n return sign(payload, secret, options);\n }\n }\n\n throw new TokenError();\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Jwt, JwtPayload } from 'jsonwebtoken';\nimport { verify } from 'jsonwebtoken';\nimport { KeyType, TokenError } from '@authup/core';\nimport { isKeyPairWithPublicKey, useKeyPair } from '../key-pair';\nimport type { TokenVerifyOptions } from './type';\nimport { createErrorForJWTError } from './utils';\n\n/**\n * Verify JWT.\n *\n * @param token\n * @param context\n *\n * @throws TokenError\n */\nexport async function verifyToken(token: string, context: TokenVerifyOptions & { complete: true }): Promise<string | Jwt>;\nexport async function verifyToken(token: string, context: TokenVerifyOptions): Promise<JwtPayload | string>;\nexport async function verifyToken(\n token: string,\n context: TokenVerifyOptions,\n) : Promise<JwtPayload | Jwt | string> {\n let output : JwtPayload | Jwt | string | undefined;\n\n try {\n switch (context.type) {\n case KeyType.RSA:\n case KeyType.EC: {\n const { type, keyPair, ...options } = context;\n const { publicKey } = isKeyPairWithPublicKey(keyPair) ?\n keyPair :\n await useKeyPair(keyPair);\n\n if (type === KeyType.RSA) {\n options.algorithms = options.algorithms || ['RS256', 'RS384', 'RS512', 'PS256', 'PS384', 'PS512'];\n } else {\n options.algorithms = options.algorithms || ['ES256', 'ES384', 'ES512'];\n }\n\n output = await verify(token, publicKey, {\n ...options,\n });\n break;\n }\n case KeyType.OCT: {\n const { type, secret, ...options } = context;\n\n options.algorithms = options.algorithms || ['HS256', 'HS384', 'HS512'];\n\n output = await verify(token, secret, {\n ...options,\n });\n }\n }\n } catch (e) {\n throw createErrorForJWTError(e);\n }\n\n if (typeof output === 'undefined') {\n throw new TokenError({ message: 'Invalid type.' });\n }\n\n return output;\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/core';\nimport type { DomainEventChannelName } from './type';\n\nexport function transformDomainEventData<T>(input: T) : T {\n if (isObject(input)) {\n const keys = Object.keys(input);\n for (let i = 0; i < keys.length; i++) {\n const value = input[keys[i]];\n if (value instanceof Date) {\n input[keys[i]] = value.toISOString();\n }\n }\n }\n\n return input;\n}\n\nexport function buildDomainEventChannelName(\n input: DomainEventChannelName,\n id?: string | number,\n) : string {\n if (typeof input === 'string') {\n return input;\n }\n\n return input(id);\n}\n","/*\n * Copyright (c) 2023-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { DomainEventName } from '@authup/core';\nimport type { DomainEventContext } from '@authup/core';\nimport { hasClient, hasConfig, useClient } from 'redis-extension';\nimport type { DomainEventDestinations } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport async function publishDomainRedisEvent(\n context: DomainEventContext,\n destinations: DomainEventDestinations,\n) : Promise<any> {\n if (!hasClient() && !hasConfig()) {\n return Promise.resolve();\n }\n\n context = transformDomainEventData(context);\n\n const json = JSON.stringify(context);\n\n const client = useClient();\n const pipeline = client.pipeline();\n for (let i = 0; i < destinations.length; i++) {\n const { namespace } = destinations[i];\n const keyPrefix = (namespace ? `${namespace}:` : '');\n\n let key = keyPrefix + buildDomainEventChannelName(destinations[i].channel);\n pipeline.publish(key, json);\n\n if (\n context.event !== DomainEventName.CREATED &&\n typeof destinations[i].channel === 'function'\n ) {\n key = keyPrefix + buildDomainEventChannelName(destinations[i].channel, context.data.id);\n pipeline.publish(key, json);\n }\n }\n\n return pipeline.exec();\n}\n","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { Emitter } from '@socket.io/redis-emitter';\nimport { useClient } from 'redis-extension';\nimport type { SocketServerToClientEvents } from './type';\n\nlet instance : undefined | Emitter<SocketServerToClientEvents>;\n\nexport function useSocketEmitter() : Emitter<SocketServerToClientEvents> {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new Emitter<SocketServerToClientEvents>(useClient());\n\n return instance;\n}\n","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { DomainEventContext } from '@authup/core';\nimport { DomainEventName, buildDomainEventFullName } from '@authup/core';\nimport { hasClient, hasConfig } from 'redis-extension';\nimport type { DomainEventDestinations } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\nimport { useSocketEmitter } from './singleton';\n\nexport function publishDomainSocketEvent(\n context: DomainEventContext,\n destinations: DomainEventDestinations,\n) {\n if (!hasClient() && !hasConfig()) {\n return;\n }\n\n context = transformDomainEventData(context);\n\n for (let i = 0; i < destinations.length; i++) {\n let emitter = useSocketEmitter();\n if (destinations[i].namespace) {\n emitter = emitter.of(destinations[i].namespace);\n }\n\n let roomName = buildDomainEventChannelName(destinations[i].channel);\n\n const fullEventName = buildDomainEventFullName(context.type, context.event);\n\n emitter\n .in(roomName)\n .emit(fullEventName, {\n data: context,\n meta: {\n roomName,\n },\n });\n\n if (\n context.event !== DomainEventName.CREATED &&\n typeof destinations[i].channel === 'function'\n ) {\n roomName = buildDomainEventChannelName(destinations[i].channel, context.data.id);\n emitter\n .in(roomName)\n .emit(fullEventName, {\n data: context,\n meta: {\n roomName,\n roomId: context.data.id,\n },\n });\n }\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { DomainEventContext } from '@authup/core';\nimport { publishDomainRedisEvent } from './redis';\nimport { publishDomainSocketEvent } from './socket';\nimport type { DomainEventDestinations } from './type';\n\nexport async function publishDomainEvent(\n context: DomainEventContext,\n destinations: DomainEventDestinations,\n) {\n await publishDomainRedisEvent(context, destinations);\n publishDomainSocketEvent(context, destinations);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Logger } from '../type';\n\nexport class VoidLogger implements Logger {\n error(message: any) : any;\n\n error(message: string, ...meta: any[]) : any;\n\n error(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n\n warn(message: any) : any;\n\n warn(message: string, ...meta: any[]) : any;\n\n warn(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n\n info(message: any) : any;\n\n info(message: string, ...meta: any[]) : any;\n\n info(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n\n http(message: any) : any;\n\n http(message: string, ...meta: any[]) : any;\n\n http(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n\n verbose(message: any) : any;\n\n verbose(message: string, ...meta: any[]) : any;\n\n verbose(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n\n debug(message: any) : any;\n\n debug(message: string, ...meta: any[]) : any;\n\n debug(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { VoidLogger } from './presets';\nimport type { Logger } from './type';\n\nlet instance: Logger | undefined;\n\nexport function useLogger() : Logger {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new VoidLogger();\n\n return instance;\n}\n\nexport function setLogger(logger: Logger) {\n instance = logger;\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport http from 'node:http';\nimport type { Agent, AgentOptions } from 'node:https';\nimport https from 'node:https';\nimport { merge } from 'smob';\n\nexport type ProxyClientOptions = {\n user?: string,\n password?: string,\n host: string,\n port: number\n};\n\nexport class ProxyClient {\n protected options: ProxyClientOptions;\n\n /**\n * e.g. { keepAlive: true }\n * @protected\n */\n protected agentOptions : AgentOptions;\n\n constructor(options: ProxyClientOptions, agentOptions?: AgentOptions) {\n this.options = options;\n this.agentOptions = merge(agentOptions || {}, { keepAlive: false });\n }\n\n /**\n * Create a http agent for an url.\n *\n * @param input\n */\n async createAgent(input: string) {\n return new Promise<Agent>((resolve, reject) => {\n const headers : Record<string, any> = { };\n\n if (\n this.options.user &&\n this.options.password\n ) {\n headers['Proxy-Authorization'] = `Basic ${Buffer.from(`${this.options.user}:${this.options.password}`).toString('base64')}`;\n }\n\n const urlParsed = new URL(input);\n const request = http.request({\n host: this.options.host,\n port: this.options.port,\n method: 'CONNECT',\n path: `${urlParsed.hostname}:443`,\n headers,\n });\n\n request.on('connect', (res, socket) => {\n if (\n res.statusCode >= 200 &&\n res.statusCode < 300\n ) {\n resolve(new https.Agent({ socket, ...this.agentOptions }));\n } else {\n reject(new Error('Could not connect to proxy!'));\n }\n });\n\n request.on('error', (err) => {\n reject(err);\n });\n\n request.on('timeout', (err) => {\n reject(err);\n });\n\n request.end();\n });\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Agent } from 'https';\nimport { parseProxyConnectionString } from '@authup/core';\nimport { getProxyForUrl } from 'proxy-from-env';\nimport { ProxyClient } from './module';\n\ntype ClientOptions = {\n agent?: ((url: URL) => Agent) | Agent\n};\n\nexport async function buildHTTPClientConfigForProxy(\n url: string,\n) : Promise<ClientOptions> {\n const connectionString = getProxyForUrl(url);\n if (connectionString) {\n const connectionDetails = parseProxyConnectionString(connectionString);\n const proxyClient = new ProxyClient({\n host: connectionDetails.host,\n port: connectionDetails.port || 3128,\n ...(connectionDetails.auth.username ? { user: connectionDetails.auth.username } : {}),\n ...(connectionDetails.auth.password ? { password: connectionDetails.auth.password } : {}),\n });\n\n const agent = await proxyClient.createAgent(url);\n\n return {\n agent,\n };\n }\n\n return {};\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { SmtpConfig } from '../type';\n\nlet instance : SmtpConfig | string | undefined;\n\nexport function hasSmtpConfig() {\n return !!instance;\n}\n\nexport function setSmtpConfig(value: SmtpConfig | string | undefined) {\n instance = value;\n}\n\nexport function useSmtpConfig() : SmtpConfig | string {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = {};\n\n return instance;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Transporter } from 'nodemailer';\nimport { createTransport } from 'nodemailer';\nimport type { SmtpConfig } from './type';\nimport { useLogger } from '../logger';\n\nexport function createSmtpClient(options?: SmtpConfig | string) : Transporter {\n let transport : Transporter;\n\n options = options || {};\n\n if (typeof options === 'string') {\n transport = createTransport(options);\n } else if (options.connectionString) {\n transport = createTransport(options.connectionString);\n } else {\n let auth: Record<string, any> | undefined;\n if (options.user && options.password) {\n auth = {\n type: 'login',\n user: options.user,\n pass: options.password,\n };\n }\n\n transport = createTransport({\n host: options.host,\n port: options.port,\n auth,\n secure: options.ssl,\n opportunisticTLS: options.starttls,\n tls: {\n rejectUnauthorized: false,\n },\n });\n }\n\n transport.on('error', (e) => {\n useLogger().error(e.message);\n });\n\n return transport;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Transporter } from 'nodemailer';\nimport { createTestAccount } from 'nodemailer';\nimport { createSmtpClient } from './module';\nimport { useSmtpConfig } from './config';\nimport type { SmtpConfig } from './type';\n\nlet instance : Transporter | undefined;\n\nexport async function useSMTPClient() : Promise<Transporter> {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n let options : SmtpConfig | string;\n if (process.env.NODE_ENV === 'test') {\n const testAccount = await createTestAccount();\n\n options = {\n host: 'smtp.ethereal.email',\n port: 587,\n ssl: false,\n user: testAccount.user,\n password: testAccount.pass,\n };\n } else {\n options = useSmtpConfig();\n }\n\n instance = createSmtpClient(options);\n\n return instance;\n}\n"],"names":["hasProcessEnv","key","keys","Array","isArray","i","length","hasOwnProperty","process","env","readFromProcessEnv","alt","readBoolFromProcessEnv","value","readBoolOrStringFromProcessEnv","undefined","readIntFromProcessEnv","intValue","parseInt","Number","isNaN","obj","prop","Object","prototype","call","buildWorkingDirectoryPathsForConfigFile","cwd","writableDirectoryPath","path","isAbsolute","join","push","readConfigFile","context","arr","locations","locateMany","content","file","load","fileExport","getModuleExport","isObject","root","name","split","assign","compare","hashedValue","compareMethod","hash","str","saltOrRounds","hashMethod","KeyPairKind","PRIVATE","PUBLIC","isKeyPair","data","privateKey","publicKey","isKeyPairWithPublicKey","extendKeyPairOptions","options","directory","resolve","type","modulusLength","privateKeyEncoding","format","publicKeyEncoding","passphrase","cipher","buildKeyFileName","parts","privateName","privateExtension","startsWith","slice","publicName","publicExtension","decryptRSAPrivateKey","createPrivateKey","export","Buffer","from","toString","saveKeyPair","keyPair","fs","promises","mkdir","recursive","Promise","all","map","writeFile","createKeyPair","reject","callback","err","generateKeyPair","save","deleteKeyPair","privateKeyPath","publicKeyPath","filePath","stat","e","rm","loadKeyPair","privateKeyBuffer","readFile","publicKeyBuffer","publicKeyObject","createPublicKey","stringOrBuffer","keyPairCache","useKeyPair","createErrorForJWTError","TokenError","expired","date","Date","notActiveBefore","message","payloadInvalid","previous","decorateMessage","logMessage","decodeToken","token","decode","signToken","payload","expiresIn","KeyType","RSA","EC","algorithm","sign","OCT","secret","verifyToken","output","algorithms","verify","transformDomainEventData","input","toISOString","buildDomainEventChannelName","id","publishDomainRedisEvent","destinations","hasClient","hasConfig","json","JSON","stringify","client","useClient","pipeline","namespace","keyPrefix","channel","publish","event","DomainEventName","CREATED","exec","instance","useSocketEmitter","Emitter","publishDomainSocketEvent","emitter","of","roomName","fullEventName","buildDomainEventFullName","in","emit","meta","roomId","publishDomainEvent","VoidLogger","error","warn","info","http","verbose","debug","useLogger","setLogger","logger","ProxyClient","createAgent","headers","user","password","urlParsed","URL","request","host","port","method","hostname","on","res","socket","statusCode","https","Agent","agentOptions","Error","end","constructor","merge","keepAlive","buildHTTPClientConfigForProxy","url","connectionString","getProxyForUrl","connectionDetails","parseProxyConnectionString","proxyClient","auth","username","agent","hasSmtpConfig","setSmtpConfig","useSmtpConfig","createSmtpClient","transport","createTransport","pass","secure","ssl","opportunisticTLS","starttls","tls","rejectUnauthorized","useSMTPClient","NODE_ENV","testAccount","createTestAccount"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -2,7 +2,7 @@ import { hasOwnProperty as hasOwnProperty$1, isObject, TokenError, KeyType, Doma
2
2
  import { locateMany, load, getModuleExport } from 'locter';
3
3
  import path from 'node:path';
4
4
  import process$1 from 'node:process';
5
- import { merge, isObject as isObject$1 } from 'smob';
5
+ import { assign, isObject as isObject$1, merge } from 'smob';
6
6
  import { compare as compare$1, hash as hash$1 } from 'bcrypt';
7
7
  import { createPrivateKey, generateKeyPair, createPublicKey } from 'node:crypto';
8
8
  import fs from 'node:fs';
@@ -140,19 +140,19 @@ async function readConfigFile(context) {
140
140
  const [root, name] = locations[i].name.split('.');
141
141
  if (root && name) {
142
142
  if (context.name === name) {
143
- merge(content, fileExport.value);
143
+ assign(content, fileExport.value);
144
144
  } else if (!context.name) {
145
145
  content[name] = content[name] || {};
146
- merge(content[name], fileExport.value);
146
+ assign(content[name], fileExport.value);
147
147
  }
148
148
  }
149
149
  if (root && !name) {
150
150
  if (context.name) {
151
151
  if (isObject(fileExport.value[context.name])) {
152
- merge(content, fileExport.value[context.name]);
152
+ assign(content, fileExport.value[context.name]);
153
153
  }
154
154
  } else {
155
- merge(content, fileExport.value);
155
+ assign(content, fileExport.value);
156
156
  }
157
157
  }
158
158
  }
@@ -458,8 +458,8 @@ async function signToken(payload, context) {
458
458
  case KeyType.RSA:
459
459
  case KeyType.EC:
460
460
  {
461
- const { type , keyPair , ...options } = context;
462
- const { privateKey } = isKeyPair(keyPair) ? keyPair : await useKeyPair(keyPair);
461
+ const { type, keyPair, ...options } = context;
462
+ const { privateKey } = isKeyPair(keyPair) ? keyPair : await useKeyPair(keyPair);
463
463
  if (type === KeyType.RSA) {
464
464
  options.algorithm = options.algorithm || 'RS256';
465
465
  } else {
@@ -469,7 +469,7 @@ async function signToken(payload, context) {
469
469
  }
470
470
  case KeyType.OCT:
471
471
  {
472
- const { type , secret , ...options } = context;
472
+ const { type, secret, ...options } = context;
473
473
  options.algorithm = options.algorithm || 'HS256';
474
474
  return sign(payload, secret, options);
475
475
  }
@@ -484,8 +484,8 @@ async function verifyToken(token, context) {
484
484
  case KeyType.RSA:
485
485
  case KeyType.EC:
486
486
  {
487
- const { type , keyPair , ...options } = context;
488
- const { publicKey } = isKeyPairWithPublicKey(keyPair) ? keyPair : await useKeyPair(keyPair);
487
+ const { type, keyPair, ...options } = context;
488
+ const { publicKey } = isKeyPairWithPublicKey(keyPair) ? keyPair : await useKeyPair(keyPair);
489
489
  if (type === KeyType.RSA) {
490
490
  options.algorithms = options.algorithms || [
491
491
  'RS256',
@@ -509,7 +509,7 @@ async function verifyToken(token, context) {
509
509
  }
510
510
  case KeyType.OCT:
511
511
  {
512
- const { type , secret , ...options } = context;
512
+ const { type, secret, ...options } = context;
513
513
  options.algorithms = options.algorithms || [
514
514
  'HS256',
515
515
  'HS384',
@@ -559,7 +559,7 @@ async function publishDomainRedisEvent(context, destinations) {
559
559
  const client = useClient();
560
560
  const pipeline = client.pipeline();
561
561
  for(let i = 0; i < destinations.length; i++){
562
- const { namespace } = destinations[i];
562
+ const { namespace } = destinations[i];
563
563
  const keyPrefix = namespace ? `${namespace}:` : '';
564
564
  let key = keyPrefix + buildDomainEventChannelName(destinations[i].channel);
565
565
  pipeline.publish(key, json);
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/utils/env.ts","../src/utils/has-property.ts","../src/config/utils.ts","../src/config/read.ts","../src/crypto/hash/compare.ts","../src/crypto/hash/hash.ts","../src/crypto/key-pair/constants.ts","../src/crypto/key-pair/utils/check.ts","../src/crypto/key-pair/utils/options.ts","../src/crypto/key-pair/utils/file-name.ts","../src/crypto/key-pair/utils/private-key.ts","../src/crypto/key-pair/save.ts","../src/crypto/key-pair/create.ts","../src/crypto/key-pair/delete.ts","../src/crypto/key-pair/load.ts","../src/crypto/key-pair/module.ts","../src/crypto/json-web-token/utils.ts","../src/crypto/json-web-token/decode.ts","../src/crypto/json-web-token/sign.ts","../src/crypto/json-web-token/verify.ts","../src/domain-event/utils.ts","../src/domain-event/redis/publish.ts","../src/domain-event/socket/singleton.ts","../src/domain-event/socket/publish.ts","../src/domain-event/publish.ts","../src/logger/presets/void.ts","../src/logger/module.ts","../src/proxy/module.ts","../src/proxy/utils.ts","../src/smtp/config/singleton.ts","../src/smtp/module.ts","../src/smtp/singleton.ts"],"sourcesContent":["/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hasOwnProperty } from '@authup/core';\nimport process from 'node:process';\n\nexport function hasProcessEnv(key: string | string[]) : boolean {\n const keys = Array.isArray(key) ? key : [key];\n for (let i = 0; i < keys.length; i++) {\n if (hasOwnProperty(process.env, keys[i])) {\n return true;\n }\n }\n return false;\n}\n\nexport function readFromProcessEnv(key: string | string[]) : string | undefined;\nexport function readFromProcessEnv<T>(key: string | string[], alt: T) : T | string;\nexport function readFromProcessEnv<T>(key: string | string[], alt?: T): any {\n const keys = Array.isArray(key) ? key : [key];\n for (let i = 0; i < keys.length; i++) {\n if (hasOwnProperty(process.env, keys[i])) {\n return process.env[keys[i]];\n }\n }\n\n return alt;\n}\n\nexport function readBoolFromProcessEnv(key: string | string[], alt?: boolean): boolean | undefined {\n const keys = Array.isArray(key) ? key : [key];\n for (let i = 0; i < keys.length; i++) {\n const value = readFromProcessEnv(keys[i], alt);\n\n switch (value) {\n case true:\n case 'true':\n case 't':\n case '1':\n return true;\n case false:\n case 'false':\n case 'f':\n case '0':\n return false;\n }\n }\n\n return alt;\n}\n\nexport function readBoolOrStringFromProcessEnv(\n key: string,\n alt?: boolean | string,\n) : boolean | string | undefined {\n if (hasProcessEnv(key)) {\n const value = readBoolFromProcessEnv(key, undefined);\n if (typeof value === 'undefined') {\n return readFromProcessEnv(key, alt);\n }\n\n return value;\n }\n\n return alt;\n}\n\nexport function readIntFromProcessEnv(\n key: string | string[],\n alt?: number,\n): number | undefined {\n const keys = Array.isArray(key) ? key : [key];\n\n for (let i = 0; i < keys.length; i++) {\n const value = readFromProcessEnv(keys[i], alt);\n const intValue = parseInt(`${value}`, 10);\n\n if (!Number.isNaN(intValue)) {\n return intValue;\n }\n }\n\n return alt;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(\n obj: X,\n prop: Y,\n): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport process from 'node:process';\nimport { hasProcessEnv, readFromProcessEnv } from '../utils';\n\nexport function buildWorkingDirectoryPathsForConfigFile() {\n const cwd : string[] = [\n process.cwd(),\n ];\n\n if (hasProcessEnv('WRITABLE_DIRECTORY_PATH')) {\n let writableDirectoryPath = readFromProcessEnv('WRITABLE_DIRECTORY_PATH');\n if (!path.isAbsolute(writableDirectoryPath)) {\n writableDirectoryPath = path.join(process.cwd(), writableDirectoryPath);\n }\n\n cwd.push(writableDirectoryPath);\n } else {\n cwd.push(path.join(process.cwd(), 'writable'));\n }\n\n return cwd;\n}\n","/*\n * Copyright (c) 2023-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/core';\nimport { getModuleExport, load, locateMany } from 'locter';\nimport path from 'node:path';\nimport process from 'node:process';\nimport { merge } from 'smob';\nimport type { ConfigFileReadContext } from './type';\nimport { buildWorkingDirectoryPathsForConfigFile } from './utils';\n\nexport async function readConfigFile(context?: ConfigFileReadContext) : Promise<Record<string, any>> {\n context = context || {};\n\n const cwd : string[] = [];\n if (context.cwd) {\n const arr = Array.isArray(context.cwd) ?\n context.cwd :\n [context.cwd];\n\n for (let i = 0; i < arr.length; i++) {\n if (path.isAbsolute(arr[i])) {\n cwd.push(arr[i]);\n } else {\n cwd.push(path.join(process.cwd(), arr[i]));\n }\n }\n }\n\n if (cwd.length === 0) {\n cwd.push(...buildWorkingDirectoryPathsForConfigFile());\n }\n\n const locations = await locateMany([\n 'authup.*.{conf,js,mjs,cjs,ts,mts,mts}',\n 'authup.{conf,js,mjs,cjs,ts,mts,mts}',\n ], {\n path: cwd,\n });\n\n const content : Record<string, any> = {};\n\n for (let i = 0; i < locations.length; i++) {\n const file = await load(locations[i]);\n const fileExport = getModuleExport(file);\n\n if (!isObject(fileExport.value)) {\n continue;\n }\n\n const [root, name] = locations[i].name.split('.');\n if (root && name) {\n if (context.name === name) {\n merge(content, fileExport.value);\n } else if (!context.name) {\n content[name] = content[name] || {};\n merge(content[name], fileExport.value);\n }\n }\n\n if (root && !name) {\n if (context.name) {\n if (isObject(fileExport.value[context.name])) {\n merge(content, fileExport.value[context.name]);\n }\n } else {\n merge(content, fileExport.value);\n }\n }\n }\n\n return content;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { compare as compareMethod } from 'bcrypt';\n\nexport async function compare(value: string, hashedValue: string) : Promise<boolean> {\n return compareMethod(value, hashedValue);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hash as hashMethod } from 'bcrypt';\n\nexport async function hash(str: string, saltOrRounds: number | string = 10) : Promise<string> {\n return hashMethod(str, saltOrRounds);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum KeyPairKind {\n PRIVATE = 'private',\n PUBLIC = 'public',\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/core';\nimport type { KeyPair } from '../type';\n\nexport function isKeyPair(data: unknown) : data is KeyPair {\n return isObject(data) &&\n typeof (data as KeyPair).privateKey !== 'undefined' &&\n typeof (data as KeyPair).publicKey !== 'undefined';\n}\n\nexport function isKeyPairWithPublicKey(data: unknown) : data is Omit<KeyPair, 'privateKey'> {\n return isObject(data) &&\n typeof (data as KeyPair).publicKey !== 'undefined';\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport type { KeyPairOptions } from '../type';\n\nexport function extendKeyPairOptions(\n options?: Partial<KeyPairOptions>,\n) : KeyPairOptions {\n options = options ?? {};\n\n options.directory = options.directory || process.cwd();\n options.directory = path.isAbsolute(options.directory) ?\n options.directory :\n path.resolve(process.cwd(), options.directory);\n\n options.type ??= 'rsa';\n\n if (\n options.type === 'rsa' ||\n options.type === 'rsa-pss' ||\n options.type === 'dsa'\n ) {\n options.modulusLength = 2048;\n }\n\n if (!options.privateKeyEncoding) {\n options.privateKeyEncoding = {\n type: 'pkcs8',\n format: 'pem',\n };\n }\n\n if (!options.publicKeyEncoding) {\n options.publicKeyEncoding = {\n type: 'spki',\n format: 'pem',\n };\n }\n\n if (\n options.privateKeyEncoding.passphrase &&\n !options.privateKeyEncoding.cipher\n ) {\n options.privateKeyEncoding.cipher = 'aes-256-cbc';\n }\n\n return options as KeyPairOptions;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { KeyPairKind } from '../constants';\nimport type { KeyPairOptions } from '../type';\nimport { extendKeyPairOptions } from './options';\n\nexport function buildKeyFileName(\n type: `${KeyPairKind}`,\n context?: Partial<KeyPairOptions>,\n) {\n const options = extendKeyPairOptions(context);\n\n const parts : string[] = [];\n\n switch (type) {\n case KeyPairKind.PRIVATE: {\n if (options.privateName) {\n parts.push(options.privateName);\n } else {\n parts.push(type);\n }\n\n if (options.privateExtension) {\n if (options.privateExtension.startsWith('.')) {\n options.privateExtension = options.privateExtension.slice(1);\n }\n\n parts.push(options.privateExtension);\n } else {\n parts.push('pem');\n }\n break;\n }\n case KeyPairKind.PUBLIC: {\n if (options.publicName) {\n parts.push(options.publicName);\n } else {\n parts.push(type);\n }\n\n if (options.publicExtension) {\n if (options.publicExtension.startsWith('.')) {\n options.publicExtension = options.publicExtension.slice(1);\n }\n\n parts.push(options.publicExtension);\n } else {\n parts.push('pem');\n }\n break;\n }\n }\n\n return parts.join('.');\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createPrivateKey } from 'node:crypto';\nimport type { KeyPairOptions } from '../type';\n\nexport function decryptRSAPrivateKey(\n context: KeyPairOptions,\n key: string | Buffer,\n) : string {\n const privateKey = createPrivateKey({\n type: context.privateKeyEncoding.type,\n format: context.privateKeyEncoding.format,\n key,\n passphrase: context.privateKeyEncoding.passphrase || context.passphrase,\n });\n\n let content = privateKey.export({\n type: context.privateKeyEncoding.type,\n format: context.privateKeyEncoding.format,\n });\n\n if (typeof content !== 'string') {\n content = Buffer.from(content).toString('utf-8');\n }\n\n return content;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { buildKeyFileName, extendKeyPairOptions } from './utils';\nimport { KeyPairKind } from './constants';\n\nexport async function saveKeyPair(keyPair: KeyPair, context?: KeyPairOptions) : Promise<KeyPair> {\n context = extendKeyPairOptions(context);\n\n await fs.promises.mkdir(context.directory, { recursive: true });\n\n await Promise.all(\n [\n {\n path: path.resolve(context.directory, buildKeyFileName(KeyPairKind.PRIVATE, context)),\n content: keyPair.privateKey,\n },\n {\n path: path.resolve(context.directory, buildKeyFileName(KeyPairKind.PUBLIC, context)),\n content: keyPair.publicKey,\n },\n ]\n .map((file) => fs.promises.writeFile(file.path, file.content)),\n );\n\n return keyPair;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { generateKeyPair } from 'node:crypto';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { decryptRSAPrivateKey, extendKeyPairOptions } from './utils';\nimport { saveKeyPair } from './save';\n\nexport async function createKeyPair(context?: Partial<KeyPairOptions>) : Promise<KeyPair> {\n const options = extendKeyPairOptions(context);\n\n const keyPair : KeyPair = await new Promise((resolve: (value: KeyPair) => void, reject) => {\n const callback = (err: (Error | null), publicKey: string, privateKey: string) => {\n if (err) reject(err);\n\n resolve({\n privateKey,\n publicKey,\n });\n };\n switch (options.type) {\n case 'dsa':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'ec':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'rsa':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'rsa-pss':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n }\n });\n\n if (options.save) {\n await saveKeyPair(keyPair, options);\n }\n\n if (\n options.passphrase ||\n options.privateKeyEncoding.passphrase\n ) {\n keyPair.privateKey = decryptRSAPrivateKey(\n options,\n keyPair.privateKey,\n );\n }\n\n return keyPair;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { KeyPairOptions } from './type';\nimport { buildKeyFileName, extendKeyPairOptions } from './utils';\nimport { KeyPairKind } from './constants';\n\nexport async function deleteKeyPair(context?: Partial<KeyPairOptions>) : Promise<void> {\n const options = extendKeyPairOptions(context);\n\n const privateKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PRIVATE, options));\n const publicKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PUBLIC, options));\n\n try {\n await Promise.all([privateKeyPath, publicKeyPath]\n .map((filePath) => fs.promises.stat(filePath)));\n } catch (e) {\n return;\n }\n\n await Promise.all([\n privateKeyPath,\n publicKeyPath,\n ].map((filePath) => fs.promises.rm(filePath)));\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createPublicKey } from 'node:crypto';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { buildKeyFileName, decryptRSAPrivateKey, extendKeyPairOptions } from './utils';\nimport { KeyPairKind } from './constants';\nimport { saveKeyPair } from './save';\n\nexport async function loadKeyPair(context?: Partial<KeyPairOptions>) : Promise<KeyPair | undefined> {\n const options = extendKeyPairOptions(context);\n\n const privateKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PRIVATE, options));\n\n try {\n await fs.promises.stat(privateKeyPath);\n } catch (e) {\n return undefined;\n }\n\n const privateKeyBuffer = await fs.promises.readFile(privateKeyPath);\n let privateKey = privateKeyBuffer.toString();\n if (\n options.passphrase ||\n options.privateKeyEncoding.passphrase\n ) {\n privateKey = decryptRSAPrivateKey(\n options,\n privateKey,\n );\n }\n\n const publicKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PUBLIC, options));\n\n let publicKey : string;\n\n try {\n await fs.promises.stat(publicKeyPath);\n const publicKeyBuffer = await fs.promises.readFile(publicKeyPath);\n publicKey = publicKeyBuffer.toString();\n } catch (e) {\n const publicKeyObject = createPublicKey({\n key: privateKey,\n format: options.privateKeyEncoding.format,\n type: options.publicKeyEncoding.type,\n });\n\n const stringOrBuffer = publicKeyObject.export({\n format: options.publicKeyEncoding.format,\n type: options.publicKeyEncoding.type,\n });\n if (typeof stringOrBuffer !== 'string') {\n publicKey = stringOrBuffer.toString();\n } else {\n publicKey = stringOrBuffer;\n }\n\n if (options.save) {\n await saveKeyPair({\n privateKey,\n publicKey,\n }, options);\n }\n }\n\n return {\n privateKey,\n publicKey,\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { extendKeyPairOptions } from './utils';\nimport { loadKeyPair } from './load';\nimport { createKeyPair } from './create';\n\nconst keyPairCache : Record<string, KeyPair> = {};\n\nexport async function useKeyPair(value?: Partial<KeyPairOptions> | string) : Promise<KeyPair> {\n let options : KeyPairOptions;\n\n if (typeof value === 'string') {\n options = extendKeyPairOptions({\n privateName: value,\n });\n } else {\n options = extendKeyPairOptions(value || {});\n }\n\n if (Object.prototype.hasOwnProperty.call(keyPairCache, options.privateName)) {\n return keyPairCache[options.privateName];\n }\n\n let keyPair = await loadKeyPair(options);\n if (typeof keyPair === 'undefined') {\n keyPair = await createKeyPair(options);\n }\n\n keyPairCache[options.privateName] = keyPair;\n\n return keyPair;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { TokenError } from '@authup/core';\nimport { isObject } from 'smob';\n\nexport function createErrorForJWTError(e: unknown) : TokenError {\n if (\n isObject(e) &&\n typeof e.name === 'string'\n ) {\n switch (e.name) {\n case 'TokenExpiredError': {\n return TokenError.expired();\n }\n case 'NotBeforeError': {\n if (typeof e.date === 'string' || e.date instanceof Date) {\n return TokenError.notActiveBefore(e.date);\n }\n break;\n }\n case 'JsonWebTokenError': {\n if (typeof e.message === 'string') {\n return TokenError.payloadInvalid(e.message);\n }\n\n break;\n }\n }\n }\n\n return new TokenError({\n previous: e as Error,\n decorateMessage: true,\n logMessage: true,\n message: 'The JWT error could not be determined.',\n });\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type {\n Jwt,\n JwtPayload,\n} from 'jsonwebtoken';\nimport {\n decode,\n} from 'jsonwebtoken';\nimport { TokenError } from '@authup/core';\nimport type { TokenDecodeOptions } from './type';\nimport { createErrorForJWTError } from './utils';\n\n/**\n * Decode a JWT token with no verification.\n *\n * @param token\n * @param options\n *\n * @throws TokenError\n */\nexport function decodeToken(token: string, options: TokenDecodeOptions & { complete: true }): null | Jwt;\nexport function decodeToken(token: string, options?: TokenDecodeOptions): JwtPayload | string | null;\nexport function decodeToken(\n token: string,\n options?: TokenDecodeOptions,\n): JwtPayload | string | null {\n options ??= {};\n\n try {\n return decode(token, {\n ...options,\n });\n } catch (e) {\n createErrorForJWTError(e);\n\n throw e;\n }\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { sign } from 'jsonwebtoken';\nimport { KeyType, TokenError } from '@authup/core';\nimport { isKeyPair, useKeyPair } from '../key-pair';\nimport type { TokenSignOptions } from './type';\n\nexport async function signToken(\n payload: string | object | Buffer | Record<string, any>,\n context: TokenSignOptions,\n): Promise<string> {\n context.expiresIn = context.expiresIn || 3600;\n\n switch (context.type) {\n case KeyType.RSA:\n case KeyType.EC: {\n const { type, keyPair, ...options } = context;\n const { privateKey } = isKeyPair(keyPair) ?\n keyPair :\n await useKeyPair(keyPair);\n\n if (type === KeyType.RSA) {\n options.algorithm = options.algorithm || 'RS256';\n } else {\n options.algorithm = options.algorithm || 'ES256';\n }\n\n return sign(payload, privateKey, options);\n }\n case KeyType.OCT: {\n const { type, secret, ...options } = context;\n options.algorithm = options.algorithm || 'HS256';\n\n return sign(payload, secret, options);\n }\n }\n\n throw new TokenError();\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Jwt, JwtPayload } from 'jsonwebtoken';\nimport { verify } from 'jsonwebtoken';\nimport { KeyType, TokenError } from '@authup/core';\nimport { isKeyPairWithPublicKey, useKeyPair } from '../key-pair';\nimport type { TokenVerifyOptions } from './type';\nimport { createErrorForJWTError } from './utils';\n\n/**\n * Verify JWT.\n *\n * @param token\n * @param context\n *\n * @throws TokenError\n */\nexport async function verifyToken(token: string, context: TokenVerifyOptions & { complete: true }): Promise<string | Jwt>;\nexport async function verifyToken(token: string, context: TokenVerifyOptions): Promise<JwtPayload | string>;\nexport async function verifyToken(\n token: string,\n context: TokenVerifyOptions,\n) : Promise<JwtPayload | Jwt | string> {\n let output : JwtPayload | Jwt | string | undefined;\n\n try {\n switch (context.type) {\n case KeyType.RSA:\n case KeyType.EC: {\n const { type, keyPair, ...options } = context;\n const { publicKey } = isKeyPairWithPublicKey(keyPair) ?\n keyPair :\n await useKeyPair(keyPair);\n\n if (type === KeyType.RSA) {\n options.algorithms = options.algorithms || ['RS256', 'RS384', 'RS512', 'PS256', 'PS384', 'PS512'];\n } else {\n options.algorithms = options.algorithms || ['ES256', 'ES384', 'ES512'];\n }\n\n output = await verify(token, publicKey, {\n ...options,\n });\n break;\n }\n case KeyType.OCT: {\n const { type, secret, ...options } = context;\n\n options.algorithms = options.algorithms || ['HS256', 'HS384', 'HS512'];\n\n output = await verify(token, secret, {\n ...options,\n });\n }\n }\n } catch (e) {\n throw createErrorForJWTError(e);\n }\n\n if (typeof output === 'undefined') {\n throw new TokenError({ message: 'Invalid type.' });\n }\n\n return output;\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/core';\nimport type { DomainEventChannelName } from './type';\n\nexport function transformDomainEventData<T>(input: T) : T {\n if (isObject(input)) {\n const keys = Object.keys(input);\n for (let i = 0; i < keys.length; i++) {\n const value = input[keys[i]];\n if (value instanceof Date) {\n input[keys[i]] = value.toISOString();\n }\n }\n }\n\n return input;\n}\n\nexport function buildDomainEventChannelName(\n input: DomainEventChannelName,\n id?: string | number,\n) : string {\n if (typeof input === 'string') {\n return input;\n }\n\n return input(id);\n}\n","/*\n * Copyright (c) 2023-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { DomainEventName } from '@authup/core';\nimport type { DomainEventContext } from '@authup/core';\nimport { hasClient, hasConfig, useClient } from 'redis-extension';\nimport type { DomainEventDestinations } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport async function publishDomainRedisEvent(\n context: DomainEventContext,\n destinations: DomainEventDestinations,\n) : Promise<any> {\n if (!hasClient() && !hasConfig()) {\n return Promise.resolve();\n }\n\n context = transformDomainEventData(context);\n\n const json = JSON.stringify(context);\n\n const client = useClient();\n const pipeline = client.pipeline();\n for (let i = 0; i < destinations.length; i++) {\n const { namespace } = destinations[i];\n const keyPrefix = (namespace ? `${namespace}:` : '');\n\n let key = keyPrefix + buildDomainEventChannelName(destinations[i].channel);\n pipeline.publish(key, json);\n\n if (\n context.event !== DomainEventName.CREATED &&\n typeof destinations[i].channel === 'function'\n ) {\n key = keyPrefix + buildDomainEventChannelName(destinations[i].channel, context.data.id);\n pipeline.publish(key, json);\n }\n }\n\n return pipeline.exec();\n}\n","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { Emitter } from '@socket.io/redis-emitter';\nimport { useClient } from 'redis-extension';\nimport type { SocketServerToClientEvents } from './type';\n\nlet instance : undefined | Emitter<SocketServerToClientEvents>;\n\nexport function useSocketEmitter() : Emitter<SocketServerToClientEvents> {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new Emitter<SocketServerToClientEvents>(useClient());\n\n return instance;\n}\n","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { DomainEventContext } from '@authup/core';\nimport { DomainEventName, buildDomainEventFullName } from '@authup/core';\nimport { hasClient, hasConfig } from 'redis-extension';\nimport type { DomainEventDestinations } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\nimport { useSocketEmitter } from './singleton';\n\nexport function publishDomainSocketEvent(\n context: DomainEventContext,\n destinations: DomainEventDestinations,\n) {\n if (!hasClient() && !hasConfig()) {\n return;\n }\n\n context = transformDomainEventData(context);\n\n for (let i = 0; i < destinations.length; i++) {\n let emitter = useSocketEmitter();\n if (destinations[i].namespace) {\n emitter = emitter.of(destinations[i].namespace);\n }\n\n let roomName = buildDomainEventChannelName(destinations[i].channel);\n\n const fullEventName = buildDomainEventFullName(context.type, context.event);\n\n emitter\n .in(roomName)\n .emit(fullEventName, {\n data: context,\n meta: {\n roomName,\n },\n });\n\n if (\n context.event !== DomainEventName.CREATED &&\n typeof destinations[i].channel === 'function'\n ) {\n roomName = buildDomainEventChannelName(destinations[i].channel, context.data.id);\n emitter\n .in(roomName)\n .emit(fullEventName, {\n data: context,\n meta: {\n roomName,\n roomId: context.data.id,\n },\n });\n }\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { DomainEventContext } from '@authup/core';\nimport { publishDomainRedisEvent } from './redis';\nimport { publishDomainSocketEvent } from './socket';\nimport type { DomainEventDestinations } from './type';\n\nexport async function publishDomainEvent(\n context: DomainEventContext,\n destinations: DomainEventDestinations,\n) {\n await publishDomainRedisEvent(context, destinations);\n publishDomainSocketEvent(context, destinations);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Logger } from '../type';\n\nexport class VoidLogger implements Logger {\n error(message: any) : any;\n\n error(message: string, ...meta: any[]) : any;\n\n error(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n\n warn(message: any) : any;\n\n warn(message: string, ...meta: any[]) : any;\n\n warn(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n\n info(message: any) : any;\n\n info(message: string, ...meta: any[]) : any;\n\n info(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n\n http(message: any) : any;\n\n http(message: string, ...meta: any[]) : any;\n\n http(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n\n verbose(message: any) : any;\n\n verbose(message: string, ...meta: any[]) : any;\n\n verbose(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n\n debug(message: any) : any;\n\n debug(message: string, ...meta: any[]) : any;\n\n debug(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { VoidLogger } from './presets';\nimport type { Logger } from './type';\n\nlet instance: Logger | undefined;\n\nexport function useLogger() : Logger {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new VoidLogger();\n\n return instance;\n}\n\nexport function setLogger(logger: Logger) {\n instance = logger;\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport http from 'node:http';\nimport type { Agent, AgentOptions } from 'node:https';\nimport https from 'node:https';\nimport { merge } from 'smob';\n\nexport type ProxyClientOptions = {\n user?: string,\n password?: string,\n host: string,\n port: number\n};\n\nexport class ProxyClient {\n protected options: ProxyClientOptions;\n\n /**\n * e.g. { keepAlive: true }\n * @protected\n */\n protected agentOptions : AgentOptions;\n\n constructor(options: ProxyClientOptions, agentOptions?: AgentOptions) {\n this.options = options;\n this.agentOptions = merge(agentOptions || {}, { keepAlive: false });\n }\n\n /**\n * Create a http agent for an url.\n *\n * @param input\n */\n async createAgent(input: string) {\n return new Promise<Agent>((resolve, reject) => {\n const headers : Record<string, any> = { };\n\n if (\n this.options.user &&\n this.options.password\n ) {\n headers['Proxy-Authorization'] = `Basic ${Buffer.from(`${this.options.user}:${this.options.password}`).toString('base64')}`;\n }\n\n const urlParsed = new URL(input);\n const request = http.request({\n host: this.options.host,\n port: this.options.port,\n method: 'CONNECT',\n path: `${urlParsed.hostname}:443`,\n headers,\n });\n\n request.on('connect', (res, socket) => {\n if (\n res.statusCode >= 200 &&\n res.statusCode < 300\n ) {\n resolve(new https.Agent({ socket, ...this.agentOptions }));\n } else {\n reject(new Error('Could not connect to proxy!'));\n }\n });\n\n request.on('error', (err) => {\n reject(err);\n });\n\n request.on('timeout', (err) => {\n reject(err);\n });\n\n request.end();\n });\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Agent } from 'https';\nimport { parseProxyConnectionString } from '@authup/core';\nimport { getProxyForUrl } from 'proxy-from-env';\nimport { ProxyClient } from './module';\n\ntype ClientOptions = {\n agent?: ((url: URL) => Agent) | Agent\n};\n\nexport async function buildHTTPClientConfigForProxy(\n url: string,\n) : Promise<ClientOptions> {\n const connectionString = getProxyForUrl(url);\n if (connectionString) {\n const connectionDetails = parseProxyConnectionString(connectionString);\n const proxyClient = new ProxyClient({\n host: connectionDetails.host,\n port: connectionDetails.port || 3128,\n ...(connectionDetails.auth.username ? { user: connectionDetails.auth.username } : {}),\n ...(connectionDetails.auth.password ? { password: connectionDetails.auth.password } : {}),\n });\n\n const agent = await proxyClient.createAgent(url);\n\n return {\n agent,\n };\n }\n\n return {};\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { SmtpConfig } from '../type';\n\nlet instance : SmtpConfig | string | undefined;\n\nexport function hasSmtpConfig() {\n return !!instance;\n}\n\nexport function setSmtpConfig(value: SmtpConfig | string | undefined) {\n instance = value;\n}\n\nexport function useSmtpConfig() : SmtpConfig | string {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = {};\n\n return instance;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Transporter } from 'nodemailer';\nimport { createTransport } from 'nodemailer';\nimport type { SmtpConfig } from './type';\nimport { useLogger } from '../logger';\n\nexport function createSmtpClient(options?: SmtpConfig | string) : Transporter {\n let transport : Transporter;\n\n options = options || {};\n\n if (typeof options === 'string') {\n transport = createTransport(options);\n } else if (options.connectionString) {\n transport = createTransport(options.connectionString);\n } else {\n let auth: Record<string, any> | undefined;\n if (options.user && options.password) {\n auth = {\n type: 'login',\n user: options.user,\n pass: options.password,\n };\n }\n\n transport = createTransport({\n host: options.host,\n port: options.port,\n auth,\n secure: options.ssl,\n opportunisticTLS: options.starttls,\n tls: {\n rejectUnauthorized: false,\n },\n });\n }\n\n transport.on('error', (e) => {\n useLogger().error(e.message);\n });\n\n return transport;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Transporter } from 'nodemailer';\nimport { createTestAccount } from 'nodemailer';\nimport { createSmtpClient } from './module';\nimport { useSmtpConfig } from './config';\nimport type { SmtpConfig } from './type';\n\nlet instance : Transporter | undefined;\n\nexport async function useSMTPClient() : Promise<Transporter> {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n let options : SmtpConfig | string;\n if (process.env.NODE_ENV === 'test') {\n const testAccount = await createTestAccount();\n\n options = {\n host: 'smtp.ethereal.email',\n port: 587,\n ssl: false,\n user: testAccount.user,\n password: testAccount.pass,\n };\n } else {\n options = useSmtpConfig();\n }\n\n instance = createSmtpClient(options);\n\n return instance;\n}\n"],"names":["hasProcessEnv","key","keys","Array","isArray","i","length","hasOwnProperty","process","env","readFromProcessEnv","alt","readBoolFromProcessEnv","value","readBoolOrStringFromProcessEnv","undefined","readIntFromProcessEnv","intValue","parseInt","Number","isNaN","obj","prop","Object","prototype","call","buildWorkingDirectoryPathsForConfigFile","cwd","writableDirectoryPath","path","isAbsolute","join","push","readConfigFile","context","arr","locations","locateMany","content","file","load","fileExport","getModuleExport","isObject","root","name","split","merge","compare","hashedValue","compareMethod","hash","str","saltOrRounds","hashMethod","KeyPairKind","PRIVATE","PUBLIC","isKeyPair","data","privateKey","publicKey","isKeyPairWithPublicKey","extendKeyPairOptions","options","directory","resolve","type","modulusLength","privateKeyEncoding","format","publicKeyEncoding","passphrase","cipher","buildKeyFileName","parts","privateName","privateExtension","startsWith","slice","publicName","publicExtension","decryptRSAPrivateKey","createPrivateKey","export","Buffer","from","toString","saveKeyPair","keyPair","fs","promises","mkdir","recursive","Promise","all","map","writeFile","createKeyPair","reject","callback","err","generateKeyPair","save","deleteKeyPair","privateKeyPath","publicKeyPath","filePath","stat","e","rm","loadKeyPair","privateKeyBuffer","readFile","publicKeyBuffer","publicKeyObject","createPublicKey","stringOrBuffer","keyPairCache","useKeyPair","createErrorForJWTError","TokenError","expired","date","Date","notActiveBefore","message","payloadInvalid","previous","decorateMessage","logMessage","decodeToken","token","decode","signToken","payload","expiresIn","KeyType","RSA","EC","algorithm","sign","OCT","secret","verifyToken","output","algorithms","verify","transformDomainEventData","input","toISOString","buildDomainEventChannelName","id","publishDomainRedisEvent","destinations","hasClient","hasConfig","json","JSON","stringify","client","useClient","pipeline","namespace","keyPrefix","channel","publish","event","DomainEventName","CREATED","exec","instance","useSocketEmitter","Emitter","publishDomainSocketEvent","emitter","of","roomName","fullEventName","buildDomainEventFullName","in","emit","meta","roomId","publishDomainEvent","VoidLogger","error","warn","info","http","verbose","debug","useLogger","setLogger","logger","ProxyClient","createAgent","headers","user","password","urlParsed","URL","request","host","port","method","hostname","on","res","socket","statusCode","https","Agent","agentOptions","Error","end","constructor","keepAlive","buildHTTPClientConfigForProxy","url","connectionString","getProxyForUrl","connectionDetails","parseProxyConnectionString","proxyClient","auth","username","agent","hasSmtpConfig","setSmtpConfig","useSmtpConfig","createSmtpClient","transport","createTransport","pass","secure","ssl","opportunisticTLS","starttls","tls","rejectUnauthorized","useSMTPClient","NODE_ENV","testAccount","createTestAccount"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/utils/env.ts","../src/utils/has-property.ts","../src/config/utils.ts","../src/config/read.ts","../src/crypto/hash/compare.ts","../src/crypto/hash/hash.ts","../src/crypto/key-pair/constants.ts","../src/crypto/key-pair/utils/check.ts","../src/crypto/key-pair/utils/options.ts","../src/crypto/key-pair/utils/file-name.ts","../src/crypto/key-pair/utils/private-key.ts","../src/crypto/key-pair/save.ts","../src/crypto/key-pair/create.ts","../src/crypto/key-pair/delete.ts","../src/crypto/key-pair/load.ts","../src/crypto/key-pair/module.ts","../src/crypto/json-web-token/utils.ts","../src/crypto/json-web-token/decode.ts","../src/crypto/json-web-token/sign.ts","../src/crypto/json-web-token/verify.ts","../src/domain-event/utils.ts","../src/domain-event/redis/publish.ts","../src/domain-event/socket/singleton.ts","../src/domain-event/socket/publish.ts","../src/domain-event/publish.ts","../src/logger/presets/void.ts","../src/logger/module.ts","../src/proxy/module.ts","../src/proxy/utils.ts","../src/smtp/config/singleton.ts","../src/smtp/module.ts","../src/smtp/singleton.ts"],"sourcesContent":["/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hasOwnProperty } from '@authup/core';\nimport process from 'node:process';\n\nexport function hasProcessEnv(key: string | string[]) : boolean {\n const keys = Array.isArray(key) ? key : [key];\n for (let i = 0; i < keys.length; i++) {\n if (hasOwnProperty(process.env, keys[i])) {\n return true;\n }\n }\n return false;\n}\n\nexport function readFromProcessEnv(key: string | string[]) : string | undefined;\nexport function readFromProcessEnv<T>(key: string | string[], alt: T) : T | string;\nexport function readFromProcessEnv<T>(key: string | string[], alt?: T): any {\n const keys = Array.isArray(key) ? key : [key];\n for (let i = 0; i < keys.length; i++) {\n if (hasOwnProperty(process.env, keys[i])) {\n return process.env[keys[i]];\n }\n }\n\n return alt;\n}\n\nexport function readBoolFromProcessEnv(key: string | string[], alt?: boolean): boolean | undefined {\n const keys = Array.isArray(key) ? key : [key];\n for (let i = 0; i < keys.length; i++) {\n const value = readFromProcessEnv(keys[i], alt);\n\n switch (value) {\n case true:\n case 'true':\n case 't':\n case '1':\n return true;\n case false:\n case 'false':\n case 'f':\n case '0':\n return false;\n }\n }\n\n return alt;\n}\n\nexport function readBoolOrStringFromProcessEnv(\n key: string,\n alt?: boolean | string,\n) : boolean | string | undefined {\n if (hasProcessEnv(key)) {\n const value = readBoolFromProcessEnv(key, undefined);\n if (typeof value === 'undefined') {\n return readFromProcessEnv(key, alt);\n }\n\n return value;\n }\n\n return alt;\n}\n\nexport function readIntFromProcessEnv(\n key: string | string[],\n alt?: number,\n): number | undefined {\n const keys = Array.isArray(key) ? key : [key];\n\n for (let i = 0; i < keys.length; i++) {\n const value = readFromProcessEnv(keys[i], alt);\n const intValue = parseInt(`${value}`, 10);\n\n if (!Number.isNaN(intValue)) {\n return intValue;\n }\n }\n\n return alt;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(\n obj: X,\n prop: Y,\n): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport process from 'node:process';\nimport { hasProcessEnv, readFromProcessEnv } from '../utils';\n\nexport function buildWorkingDirectoryPathsForConfigFile() {\n const cwd : string[] = [\n process.cwd(),\n ];\n\n if (hasProcessEnv('WRITABLE_DIRECTORY_PATH')) {\n let writableDirectoryPath = readFromProcessEnv('WRITABLE_DIRECTORY_PATH');\n if (!path.isAbsolute(writableDirectoryPath)) {\n writableDirectoryPath = path.join(process.cwd(), writableDirectoryPath);\n }\n\n cwd.push(writableDirectoryPath);\n } else {\n cwd.push(path.join(process.cwd(), 'writable'));\n }\n\n return cwd;\n}\n","/*\n * Copyright (c) 2023-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/core';\nimport { getModuleExport, load, locateMany } from 'locter';\nimport path from 'node:path';\nimport process from 'node:process';\nimport { assign } from 'smob';\nimport type { ConfigFileReadContext } from './type';\nimport { buildWorkingDirectoryPathsForConfigFile } from './utils';\n\nexport async function readConfigFile(context?: ConfigFileReadContext) : Promise<Record<string, any>> {\n context = context || {};\n\n const cwd : string[] = [];\n if (context.cwd) {\n const arr = Array.isArray(context.cwd) ?\n context.cwd :\n [context.cwd];\n\n for (let i = 0; i < arr.length; i++) {\n if (path.isAbsolute(arr[i])) {\n cwd.push(arr[i]);\n } else {\n cwd.push(path.join(process.cwd(), arr[i]));\n }\n }\n }\n\n if (cwd.length === 0) {\n cwd.push(...buildWorkingDirectoryPathsForConfigFile());\n }\n\n const locations = await locateMany([\n 'authup.*.{conf,js,mjs,cjs,ts,mts,mts}',\n 'authup.{conf,js,mjs,cjs,ts,mts,mts}',\n ], {\n path: cwd,\n });\n\n const content : Record<string, any> = {};\n\n for (let i = 0; i < locations.length; i++) {\n const file = await load(locations[i]);\n const fileExport = getModuleExport(file);\n\n if (!isObject(fileExport.value)) {\n continue;\n }\n\n const [root, name] = locations[i].name.split('.');\n if (root && name) {\n if (context.name === name) {\n assign(content, fileExport.value);\n } else if (!context.name) {\n content[name] = content[name] || {};\n assign(content[name], fileExport.value);\n }\n }\n\n if (root && !name) {\n if (context.name) {\n if (isObject(fileExport.value[context.name])) {\n assign(content, fileExport.value[context.name]);\n }\n } else {\n assign(content, fileExport.value);\n }\n }\n }\n\n return content;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { compare as compareMethod } from 'bcrypt';\n\nexport async function compare(value: string, hashedValue: string) : Promise<boolean> {\n return compareMethod(value, hashedValue);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hash as hashMethod } from 'bcrypt';\n\nexport async function hash(str: string, saltOrRounds: number | string = 10) : Promise<string> {\n return hashMethod(str, saltOrRounds);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum KeyPairKind {\n PRIVATE = 'private',\n PUBLIC = 'public',\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/core';\nimport type { KeyPair } from '../type';\n\nexport function isKeyPair(data: unknown) : data is KeyPair {\n return isObject(data) &&\n typeof (data as KeyPair).privateKey !== 'undefined' &&\n typeof (data as KeyPair).publicKey !== 'undefined';\n}\n\nexport function isKeyPairWithPublicKey(data: unknown) : data is Omit<KeyPair, 'privateKey'> {\n return isObject(data) &&\n typeof (data as KeyPair).publicKey !== 'undefined';\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport type { KeyPairOptions } from '../type';\n\nexport function extendKeyPairOptions(\n options?: Partial<KeyPairOptions>,\n) : KeyPairOptions {\n options = options ?? {};\n\n options.directory = options.directory || process.cwd();\n options.directory = path.isAbsolute(options.directory) ?\n options.directory :\n path.resolve(process.cwd(), options.directory);\n\n options.type ??= 'rsa';\n\n if (\n options.type === 'rsa' ||\n options.type === 'rsa-pss' ||\n options.type === 'dsa'\n ) {\n options.modulusLength = 2048;\n }\n\n if (!options.privateKeyEncoding) {\n options.privateKeyEncoding = {\n type: 'pkcs8',\n format: 'pem',\n };\n }\n\n if (!options.publicKeyEncoding) {\n options.publicKeyEncoding = {\n type: 'spki',\n format: 'pem',\n };\n }\n\n if (\n options.privateKeyEncoding.passphrase &&\n !options.privateKeyEncoding.cipher\n ) {\n options.privateKeyEncoding.cipher = 'aes-256-cbc';\n }\n\n return options as KeyPairOptions;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { KeyPairKind } from '../constants';\nimport type { KeyPairOptions } from '../type';\nimport { extendKeyPairOptions } from './options';\n\nexport function buildKeyFileName(\n type: `${KeyPairKind}`,\n context?: Partial<KeyPairOptions>,\n) {\n const options = extendKeyPairOptions(context);\n\n const parts : string[] = [];\n\n switch (type) {\n case KeyPairKind.PRIVATE: {\n if (options.privateName) {\n parts.push(options.privateName);\n } else {\n parts.push(type);\n }\n\n if (options.privateExtension) {\n if (options.privateExtension.startsWith('.')) {\n options.privateExtension = options.privateExtension.slice(1);\n }\n\n parts.push(options.privateExtension);\n } else {\n parts.push('pem');\n }\n break;\n }\n case KeyPairKind.PUBLIC: {\n if (options.publicName) {\n parts.push(options.publicName);\n } else {\n parts.push(type);\n }\n\n if (options.publicExtension) {\n if (options.publicExtension.startsWith('.')) {\n options.publicExtension = options.publicExtension.slice(1);\n }\n\n parts.push(options.publicExtension);\n } else {\n parts.push('pem');\n }\n break;\n }\n }\n\n return parts.join('.');\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createPrivateKey } from 'node:crypto';\nimport type { KeyPairOptions } from '../type';\n\nexport function decryptRSAPrivateKey(\n context: KeyPairOptions,\n key: string | Buffer,\n) : string {\n const privateKey = createPrivateKey({\n type: context.privateKeyEncoding.type,\n format: context.privateKeyEncoding.format,\n key,\n passphrase: context.privateKeyEncoding.passphrase || context.passphrase,\n });\n\n let content = privateKey.export({\n type: context.privateKeyEncoding.type,\n format: context.privateKeyEncoding.format,\n });\n\n if (typeof content !== 'string') {\n content = Buffer.from(content).toString('utf-8');\n }\n\n return content;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { buildKeyFileName, extendKeyPairOptions } from './utils';\nimport { KeyPairKind } from './constants';\n\nexport async function saveKeyPair(keyPair: KeyPair, context?: KeyPairOptions) : Promise<KeyPair> {\n context = extendKeyPairOptions(context);\n\n await fs.promises.mkdir(context.directory, { recursive: true });\n\n await Promise.all(\n [\n {\n path: path.resolve(context.directory, buildKeyFileName(KeyPairKind.PRIVATE, context)),\n content: keyPair.privateKey,\n },\n {\n path: path.resolve(context.directory, buildKeyFileName(KeyPairKind.PUBLIC, context)),\n content: keyPair.publicKey,\n },\n ]\n .map((file) => fs.promises.writeFile(file.path, file.content)),\n );\n\n return keyPair;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { generateKeyPair } from 'node:crypto';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { decryptRSAPrivateKey, extendKeyPairOptions } from './utils';\nimport { saveKeyPair } from './save';\n\nexport async function createKeyPair(context?: Partial<KeyPairOptions>) : Promise<KeyPair> {\n const options = extendKeyPairOptions(context);\n\n const keyPair : KeyPair = await new Promise((resolve: (value: KeyPair) => void, reject) => {\n const callback = (err: (Error | null), publicKey: string, privateKey: string) => {\n if (err) reject(err);\n\n resolve({\n privateKey,\n publicKey,\n });\n };\n switch (options.type) {\n case 'dsa':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'ec':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'rsa':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n case 'rsa-pss':\n generateKeyPair(\n options.type,\n options,\n callback,\n );\n break;\n }\n });\n\n if (options.save) {\n await saveKeyPair(keyPair, options);\n }\n\n if (\n options.passphrase ||\n options.privateKeyEncoding.passphrase\n ) {\n keyPair.privateKey = decryptRSAPrivateKey(\n options,\n keyPair.privateKey,\n );\n }\n\n return keyPair;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { KeyPairOptions } from './type';\nimport { buildKeyFileName, extendKeyPairOptions } from './utils';\nimport { KeyPairKind } from './constants';\n\nexport async function deleteKeyPair(context?: Partial<KeyPairOptions>) : Promise<void> {\n const options = extendKeyPairOptions(context);\n\n const privateKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PRIVATE, options));\n const publicKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PUBLIC, options));\n\n try {\n await Promise.all([privateKeyPath, publicKeyPath]\n .map((filePath) => fs.promises.stat(filePath)));\n } catch (e) {\n return;\n }\n\n await Promise.all([\n privateKeyPath,\n publicKeyPath,\n ].map((filePath) => fs.promises.rm(filePath)));\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createPublicKey } from 'node:crypto';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { buildKeyFileName, decryptRSAPrivateKey, extendKeyPairOptions } from './utils';\nimport { KeyPairKind } from './constants';\nimport { saveKeyPair } from './save';\n\nexport async function loadKeyPair(context?: Partial<KeyPairOptions>) : Promise<KeyPair | undefined> {\n const options = extendKeyPairOptions(context);\n\n const privateKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PRIVATE, options));\n\n try {\n await fs.promises.stat(privateKeyPath);\n } catch (e) {\n return undefined;\n }\n\n const privateKeyBuffer = await fs.promises.readFile(privateKeyPath);\n let privateKey = privateKeyBuffer.toString();\n if (\n options.passphrase ||\n options.privateKeyEncoding.passphrase\n ) {\n privateKey = decryptRSAPrivateKey(\n options,\n privateKey,\n );\n }\n\n const publicKeyPath : string = path.resolve(options.directory, buildKeyFileName(KeyPairKind.PUBLIC, options));\n\n let publicKey : string;\n\n try {\n await fs.promises.stat(publicKeyPath);\n const publicKeyBuffer = await fs.promises.readFile(publicKeyPath);\n publicKey = publicKeyBuffer.toString();\n } catch (e) {\n const publicKeyObject = createPublicKey({\n key: privateKey,\n format: options.privateKeyEncoding.format,\n type: options.publicKeyEncoding.type,\n });\n\n const stringOrBuffer = publicKeyObject.export({\n format: options.publicKeyEncoding.format,\n type: options.publicKeyEncoding.type,\n });\n if (typeof stringOrBuffer !== 'string') {\n publicKey = stringOrBuffer.toString();\n } else {\n publicKey = stringOrBuffer;\n }\n\n if (options.save) {\n await saveKeyPair({\n privateKey,\n publicKey,\n }, options);\n }\n }\n\n return {\n privateKey,\n publicKey,\n };\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\nimport type { KeyPair, KeyPairOptions } from './type';\nimport { extendKeyPairOptions } from './utils';\nimport { loadKeyPair } from './load';\nimport { createKeyPair } from './create';\n\nconst keyPairCache : Record<string, KeyPair> = {};\n\nexport async function useKeyPair(value?: Partial<KeyPairOptions> | string) : Promise<KeyPair> {\n let options : KeyPairOptions;\n\n if (typeof value === 'string') {\n options = extendKeyPairOptions({\n privateName: value,\n });\n } else {\n options = extendKeyPairOptions(value || {});\n }\n\n if (Object.prototype.hasOwnProperty.call(keyPairCache, options.privateName)) {\n return keyPairCache[options.privateName];\n }\n\n let keyPair = await loadKeyPair(options);\n if (typeof keyPair === 'undefined') {\n keyPair = await createKeyPair(options);\n }\n\n keyPairCache[options.privateName] = keyPair;\n\n return keyPair;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { TokenError } from '@authup/core';\nimport { isObject } from 'smob';\n\nexport function createErrorForJWTError(e: unknown) : TokenError {\n if (\n isObject(e) &&\n typeof e.name === 'string'\n ) {\n switch (e.name) {\n case 'TokenExpiredError': {\n return TokenError.expired();\n }\n case 'NotBeforeError': {\n if (typeof e.date === 'string' || e.date instanceof Date) {\n return TokenError.notActiveBefore(e.date);\n }\n break;\n }\n case 'JsonWebTokenError': {\n if (typeof e.message === 'string') {\n return TokenError.payloadInvalid(e.message);\n }\n\n break;\n }\n }\n }\n\n return new TokenError({\n previous: e as Error,\n decorateMessage: true,\n logMessage: true,\n message: 'The JWT error could not be determined.',\n });\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type {\n Jwt,\n JwtPayload,\n} from 'jsonwebtoken';\nimport {\n decode,\n} from 'jsonwebtoken';\nimport { TokenError } from '@authup/core';\nimport type { TokenDecodeOptions } from './type';\nimport { createErrorForJWTError } from './utils';\n\n/**\n * Decode a JWT token with no verification.\n *\n * @param token\n * @param options\n *\n * @throws TokenError\n */\nexport function decodeToken(token: string, options: TokenDecodeOptions & { complete: true }): null | Jwt;\nexport function decodeToken(token: string, options?: TokenDecodeOptions): JwtPayload | string | null;\nexport function decodeToken(\n token: string,\n options?: TokenDecodeOptions,\n): JwtPayload | string | null {\n options ??= {};\n\n try {\n return decode(token, {\n ...options,\n });\n } catch (e) {\n createErrorForJWTError(e);\n\n throw e;\n }\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { sign } from 'jsonwebtoken';\nimport { KeyType, TokenError } from '@authup/core';\nimport { isKeyPair, useKeyPair } from '../key-pair';\nimport type { TokenSignOptions } from './type';\n\nexport async function signToken(\n payload: string | object | Buffer | Record<string, any>,\n context: TokenSignOptions,\n): Promise<string> {\n context.expiresIn = context.expiresIn || 3600;\n\n switch (context.type) {\n case KeyType.RSA:\n case KeyType.EC: {\n const { type, keyPair, ...options } = context;\n const { privateKey } = isKeyPair(keyPair) ?\n keyPair :\n await useKeyPair(keyPair);\n\n if (type === KeyType.RSA) {\n options.algorithm = options.algorithm || 'RS256';\n } else {\n options.algorithm = options.algorithm || 'ES256';\n }\n\n return sign(payload, privateKey, options);\n }\n case KeyType.OCT: {\n const { type, secret, ...options } = context;\n options.algorithm = options.algorithm || 'HS256';\n\n return sign(payload, secret, options);\n }\n }\n\n throw new TokenError();\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Jwt, JwtPayload } from 'jsonwebtoken';\nimport { verify } from 'jsonwebtoken';\nimport { KeyType, TokenError } from '@authup/core';\nimport { isKeyPairWithPublicKey, useKeyPair } from '../key-pair';\nimport type { TokenVerifyOptions } from './type';\nimport { createErrorForJWTError } from './utils';\n\n/**\n * Verify JWT.\n *\n * @param token\n * @param context\n *\n * @throws TokenError\n */\nexport async function verifyToken(token: string, context: TokenVerifyOptions & { complete: true }): Promise<string | Jwt>;\nexport async function verifyToken(token: string, context: TokenVerifyOptions): Promise<JwtPayload | string>;\nexport async function verifyToken(\n token: string,\n context: TokenVerifyOptions,\n) : Promise<JwtPayload | Jwt | string> {\n let output : JwtPayload | Jwt | string | undefined;\n\n try {\n switch (context.type) {\n case KeyType.RSA:\n case KeyType.EC: {\n const { type, keyPair, ...options } = context;\n const { publicKey } = isKeyPairWithPublicKey(keyPair) ?\n keyPair :\n await useKeyPair(keyPair);\n\n if (type === KeyType.RSA) {\n options.algorithms = options.algorithms || ['RS256', 'RS384', 'RS512', 'PS256', 'PS384', 'PS512'];\n } else {\n options.algorithms = options.algorithms || ['ES256', 'ES384', 'ES512'];\n }\n\n output = await verify(token, publicKey, {\n ...options,\n });\n break;\n }\n case KeyType.OCT: {\n const { type, secret, ...options } = context;\n\n options.algorithms = options.algorithms || ['HS256', 'HS384', 'HS512'];\n\n output = await verify(token, secret, {\n ...options,\n });\n }\n }\n } catch (e) {\n throw createErrorForJWTError(e);\n }\n\n if (typeof output === 'undefined') {\n throw new TokenError({ message: 'Invalid type.' });\n }\n\n return output;\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@authup/core';\nimport type { DomainEventChannelName } from './type';\n\nexport function transformDomainEventData<T>(input: T) : T {\n if (isObject(input)) {\n const keys = Object.keys(input);\n for (let i = 0; i < keys.length; i++) {\n const value = input[keys[i]];\n if (value instanceof Date) {\n input[keys[i]] = value.toISOString();\n }\n }\n }\n\n return input;\n}\n\nexport function buildDomainEventChannelName(\n input: DomainEventChannelName,\n id?: string | number,\n) : string {\n if (typeof input === 'string') {\n return input;\n }\n\n return input(id);\n}\n","/*\n * Copyright (c) 2023-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { DomainEventName } from '@authup/core';\nimport type { DomainEventContext } from '@authup/core';\nimport { hasClient, hasConfig, useClient } from 'redis-extension';\nimport type { DomainEventDestinations } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport async function publishDomainRedisEvent(\n context: DomainEventContext,\n destinations: DomainEventDestinations,\n) : Promise<any> {\n if (!hasClient() && !hasConfig()) {\n return Promise.resolve();\n }\n\n context = transformDomainEventData(context);\n\n const json = JSON.stringify(context);\n\n const client = useClient();\n const pipeline = client.pipeline();\n for (let i = 0; i < destinations.length; i++) {\n const { namespace } = destinations[i];\n const keyPrefix = (namespace ? `${namespace}:` : '');\n\n let key = keyPrefix + buildDomainEventChannelName(destinations[i].channel);\n pipeline.publish(key, json);\n\n if (\n context.event !== DomainEventName.CREATED &&\n typeof destinations[i].channel === 'function'\n ) {\n key = keyPrefix + buildDomainEventChannelName(destinations[i].channel, context.data.id);\n pipeline.publish(key, json);\n }\n }\n\n return pipeline.exec();\n}\n","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { Emitter } from '@socket.io/redis-emitter';\nimport { useClient } from 'redis-extension';\nimport type { SocketServerToClientEvents } from './type';\n\nlet instance : undefined | Emitter<SocketServerToClientEvents>;\n\nexport function useSocketEmitter() : Emitter<SocketServerToClientEvents> {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new Emitter<SocketServerToClientEvents>(useClient());\n\n return instance;\n}\n","/*\n * Copyright (c) 2022-2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { DomainEventContext } from '@authup/core';\nimport { DomainEventName, buildDomainEventFullName } from '@authup/core';\nimport { hasClient, hasConfig } from 'redis-extension';\nimport type { DomainEventDestinations } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\nimport { useSocketEmitter } from './singleton';\n\nexport function publishDomainSocketEvent(\n context: DomainEventContext,\n destinations: DomainEventDestinations,\n) {\n if (!hasClient() && !hasConfig()) {\n return;\n }\n\n context = transformDomainEventData(context);\n\n for (let i = 0; i < destinations.length; i++) {\n let emitter = useSocketEmitter();\n if (destinations[i].namespace) {\n emitter = emitter.of(destinations[i].namespace);\n }\n\n let roomName = buildDomainEventChannelName(destinations[i].channel);\n\n const fullEventName = buildDomainEventFullName(context.type, context.event);\n\n emitter\n .in(roomName)\n .emit(fullEventName, {\n data: context,\n meta: {\n roomName,\n },\n });\n\n if (\n context.event !== DomainEventName.CREATED &&\n typeof destinations[i].channel === 'function'\n ) {\n roomName = buildDomainEventChannelName(destinations[i].channel, context.data.id);\n emitter\n .in(roomName)\n .emit(fullEventName, {\n data: context,\n meta: {\n roomName,\n roomId: context.data.id,\n },\n });\n }\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { DomainEventContext } from '@authup/core';\nimport { publishDomainRedisEvent } from './redis';\nimport { publishDomainSocketEvent } from './socket';\nimport type { DomainEventDestinations } from './type';\n\nexport async function publishDomainEvent(\n context: DomainEventContext,\n destinations: DomainEventDestinations,\n) {\n await publishDomainRedisEvent(context, destinations);\n publishDomainSocketEvent(context, destinations);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Logger } from '../type';\n\nexport class VoidLogger implements Logger {\n error(message: any) : any;\n\n error(message: string, ...meta: any[]) : any;\n\n error(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n\n warn(message: any) : any;\n\n warn(message: string, ...meta: any[]) : any;\n\n warn(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n\n info(message: any) : any;\n\n info(message: string, ...meta: any[]) : any;\n\n info(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n\n http(message: any) : any;\n\n http(message: string, ...meta: any[]) : any;\n\n http(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n\n verbose(message: any) : any;\n\n verbose(message: string, ...meta: any[]) : any;\n\n verbose(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n\n debug(message: any) : any;\n\n debug(message: string, ...meta: any[]) : any;\n\n debug(message: any, ...meta: any[]) {\n return this;\n }\n\n // ---------------------------------------------\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { VoidLogger } from './presets';\nimport type { Logger } from './type';\n\nlet instance: Logger | undefined;\n\nexport function useLogger() : Logger {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new VoidLogger();\n\n return instance;\n}\n\nexport function setLogger(logger: Logger) {\n instance = logger;\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport http from 'node:http';\nimport type { Agent, AgentOptions } from 'node:https';\nimport https from 'node:https';\nimport { merge } from 'smob';\n\nexport type ProxyClientOptions = {\n user?: string,\n password?: string,\n host: string,\n port: number\n};\n\nexport class ProxyClient {\n protected options: ProxyClientOptions;\n\n /**\n * e.g. { keepAlive: true }\n * @protected\n */\n protected agentOptions : AgentOptions;\n\n constructor(options: ProxyClientOptions, agentOptions?: AgentOptions) {\n this.options = options;\n this.agentOptions = merge(agentOptions || {}, { keepAlive: false });\n }\n\n /**\n * Create a http agent for an url.\n *\n * @param input\n */\n async createAgent(input: string) {\n return new Promise<Agent>((resolve, reject) => {\n const headers : Record<string, any> = { };\n\n if (\n this.options.user &&\n this.options.password\n ) {\n headers['Proxy-Authorization'] = `Basic ${Buffer.from(`${this.options.user}:${this.options.password}`).toString('base64')}`;\n }\n\n const urlParsed = new URL(input);\n const request = http.request({\n host: this.options.host,\n port: this.options.port,\n method: 'CONNECT',\n path: `${urlParsed.hostname}:443`,\n headers,\n });\n\n request.on('connect', (res, socket) => {\n if (\n res.statusCode >= 200 &&\n res.statusCode < 300\n ) {\n resolve(new https.Agent({ socket, ...this.agentOptions }));\n } else {\n reject(new Error('Could not connect to proxy!'));\n }\n });\n\n request.on('error', (err) => {\n reject(err);\n });\n\n request.on('timeout', (err) => {\n reject(err);\n });\n\n request.end();\n });\n }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Agent } from 'https';\nimport { parseProxyConnectionString } from '@authup/core';\nimport { getProxyForUrl } from 'proxy-from-env';\nimport { ProxyClient } from './module';\n\ntype ClientOptions = {\n agent?: ((url: URL) => Agent) | Agent\n};\n\nexport async function buildHTTPClientConfigForProxy(\n url: string,\n) : Promise<ClientOptions> {\n const connectionString = getProxyForUrl(url);\n if (connectionString) {\n const connectionDetails = parseProxyConnectionString(connectionString);\n const proxyClient = new ProxyClient({\n host: connectionDetails.host,\n port: connectionDetails.port || 3128,\n ...(connectionDetails.auth.username ? { user: connectionDetails.auth.username } : {}),\n ...(connectionDetails.auth.password ? { password: connectionDetails.auth.password } : {}),\n });\n\n const agent = await proxyClient.createAgent(url);\n\n return {\n agent,\n };\n }\n\n return {};\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { SmtpConfig } from '../type';\n\nlet instance : SmtpConfig | string | undefined;\n\nexport function hasSmtpConfig() {\n return !!instance;\n}\n\nexport function setSmtpConfig(value: SmtpConfig | string | undefined) {\n instance = value;\n}\n\nexport function useSmtpConfig() : SmtpConfig | string {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = {};\n\n return instance;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Transporter } from 'nodemailer';\nimport { createTransport } from 'nodemailer';\nimport type { SmtpConfig } from './type';\nimport { useLogger } from '../logger';\n\nexport function createSmtpClient(options?: SmtpConfig | string) : Transporter {\n let transport : Transporter;\n\n options = options || {};\n\n if (typeof options === 'string') {\n transport = createTransport(options);\n } else if (options.connectionString) {\n transport = createTransport(options.connectionString);\n } else {\n let auth: Record<string, any> | undefined;\n if (options.user && options.password) {\n auth = {\n type: 'login',\n user: options.user,\n pass: options.password,\n };\n }\n\n transport = createTransport({\n host: options.host,\n port: options.port,\n auth,\n secure: options.ssl,\n opportunisticTLS: options.starttls,\n tls: {\n rejectUnauthorized: false,\n },\n });\n }\n\n transport.on('error', (e) => {\n useLogger().error(e.message);\n });\n\n return transport;\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Transporter } from 'nodemailer';\nimport { createTestAccount } from 'nodemailer';\nimport { createSmtpClient } from './module';\nimport { useSmtpConfig } from './config';\nimport type { SmtpConfig } from './type';\n\nlet instance : Transporter | undefined;\n\nexport async function useSMTPClient() : Promise<Transporter> {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n let options : SmtpConfig | string;\n if (process.env.NODE_ENV === 'test') {\n const testAccount = await createTestAccount();\n\n options = {\n host: 'smtp.ethereal.email',\n port: 587,\n ssl: false,\n user: testAccount.user,\n password: testAccount.pass,\n };\n } else {\n options = useSmtpConfig();\n }\n\n instance = createSmtpClient(options);\n\n return instance;\n}\n"],"names":["hasProcessEnv","key","keys","Array","isArray","i","length","hasOwnProperty","process","env","readFromProcessEnv","alt","readBoolFromProcessEnv","value","readBoolOrStringFromProcessEnv","undefined","readIntFromProcessEnv","intValue","parseInt","Number","isNaN","obj","prop","Object","prototype","call","buildWorkingDirectoryPathsForConfigFile","cwd","writableDirectoryPath","path","isAbsolute","join","push","readConfigFile","context","arr","locations","locateMany","content","file","load","fileExport","getModuleExport","isObject","root","name","split","assign","compare","hashedValue","compareMethod","hash","str","saltOrRounds","hashMethod","KeyPairKind","PRIVATE","PUBLIC","isKeyPair","data","privateKey","publicKey","isKeyPairWithPublicKey","extendKeyPairOptions","options","directory","resolve","type","modulusLength","privateKeyEncoding","format","publicKeyEncoding","passphrase","cipher","buildKeyFileName","parts","privateName","privateExtension","startsWith","slice","publicName","publicExtension","decryptRSAPrivateKey","createPrivateKey","export","Buffer","from","toString","saveKeyPair","keyPair","fs","promises","mkdir","recursive","Promise","all","map","writeFile","createKeyPair","reject","callback","err","generateKeyPair","save","deleteKeyPair","privateKeyPath","publicKeyPath","filePath","stat","e","rm","loadKeyPair","privateKeyBuffer","readFile","publicKeyBuffer","publicKeyObject","createPublicKey","stringOrBuffer","keyPairCache","useKeyPair","createErrorForJWTError","TokenError","expired","date","Date","notActiveBefore","message","payloadInvalid","previous","decorateMessage","logMessage","decodeToken","token","decode","signToken","payload","expiresIn","KeyType","RSA","EC","algorithm","sign","OCT","secret","verifyToken","output","algorithms","verify","transformDomainEventData","input","toISOString","buildDomainEventChannelName","id","publishDomainRedisEvent","destinations","hasClient","hasConfig","json","JSON","stringify","client","useClient","pipeline","namespace","keyPrefix","channel","publish","event","DomainEventName","CREATED","exec","instance","useSocketEmitter","Emitter","publishDomainSocketEvent","emitter","of","roomName","fullEventName","buildDomainEventFullName","in","emit","meta","roomId","publishDomainEvent","VoidLogger","error","warn","info","http","verbose","debug","useLogger","setLogger","logger","ProxyClient","createAgent","headers","user","password","urlParsed","URL","request","host","port","method","hostname","on","res","socket","statusCode","https","Agent","agentOptions","Error","end","constructor","merge","keepAlive","buildHTTPClientConfigForProxy","url","connectionString","getProxyForUrl","connectionDetails","parseProxyConnectionString","proxyClient","auth","username","agent","hasSmtpConfig","setSmtpConfig","useSmtpConfig","createSmtpClient","transport","createTransport","pass","secure","ssl","opportunisticTLS","starttls","tls","rejectUnauthorized","useSMTPClient","NODE_ENV","testAccount","createTestAccount"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@authup/server-core",
3
- "version": "0.36.0",
3
+ "version": "0.37.1",
4
4
  "description": "Common server services and utilities.",
5
5
  "exports": {
6
6
  "./package.json": "./package.json",
@@ -55,23 +55,23 @@
55
55
  "@types/nodemailer": "^6.4.8",
56
56
  "bcrypt": "^5.1.0",
57
57
  "jsonwebtoken": "^9.0.0",
58
- "locter": "^1.1.0",
59
- "nodemailer": "^6.9.1",
58
+ "locter": "^1.1.2",
59
+ "nodemailer": "^6.9.3",
60
60
  "proxy-from-env": "^1.1.0",
61
- "smob": "^1.1.1"
61
+ "smob": "^1.4.0"
62
62
  },
63
63
  "devDependencies": {
64
- "@authup/core": "^0.36.0",
64
+ "@authup/core": "^0.37.1",
65
65
  "@types/bcrypt": "^5.0.0",
66
66
  "@types/proxy-from-env": "^1.0.1",
67
67
  "redis-extension": "^1.3.0"
68
68
  },
69
69
  "peerDependencies": {
70
- "@authup/core": ">=0.33.0 <1.0.0",
70
+ "@authup/core": ">=0.37.0 <1.0.0",
71
71
  "redis-extension": "^1.2.x"
72
72
  },
73
73
  "publishConfig": {
74
74
  "access": "public"
75
75
  },
76
- "gitHead": "c4e3ad3838e8b26014278dd8c07b0bbd7a458ec8"
76
+ "gitHead": "74fc566a5a9adfd34c454db7188e4df1ed5263ad"
77
77
  }