@authup/server-core 0.33.0 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,3 @@
1
- export declare function handleJWTError(e: unknown): void;
1
+ import { TokenError } from '@authup/core';
2
+ export declare function createErrorForJWTError(e: unknown): TokenError;
2
3
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/crypto/json-web-token/utils.ts"],"names":[],"mappings":"AASA,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,QAmCxC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/crypto/json-web-token/utils.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,OAAO,GAAI,UAAU,CA+B9D"}
package/dist/index.cjs CHANGED
@@ -411,27 +411,30 @@ async function useKeyPair(value) {
411
411
  return keyPair;
412
412
  }
413
413
 
414
- function handleJWTError(e) {
415
- if (e && typeof e === 'object' && core.hasOwnProperty(e, 'name')) {
414
+ function createErrorForJWTError(e) {
415
+ if (smob.isObject(e) && typeof e.name === 'string') {
416
416
  switch(e.name){
417
417
  case 'TokenExpiredError':
418
- throw core.TokenError.expired();
418
+ {
419
+ return core.TokenError.expired();
420
+ }
419
421
  case 'NotBeforeError':
420
422
  {
421
- if (core.hasOwnProperty(e, 'date') && typeof e.date === 'string') {
422
- throw core.TokenError.notActiveBefore(e.date);
423
+ if (typeof e.date === 'string' || e.date instanceof Date) {
424
+ return core.TokenError.notActiveBefore(e.date);
423
425
  }
424
426
  break;
425
427
  }
426
428
  case 'JsonWebTokenError':
427
429
  {
428
- if (core.hasOwnProperty(e, 'message') && typeof e.message === 'string') {
429
- throw core.TokenError.payloadInvalid(e.message);
430
+ if (typeof e.message === 'string') {
431
+ return core.TokenError.payloadInvalid(e.message);
430
432
  }
433
+ break;
431
434
  }
432
435
  }
433
436
  }
434
- throw new core.TokenError({
437
+ return new core.TokenError({
435
438
  previous: e,
436
439
  decorateMessage: true,
437
440
  logMessage: true,
@@ -446,7 +449,7 @@ function decodeToken(token, options) {
446
449
  ...options
447
450
  });
448
451
  } catch (e) {
449
- handleJWTError(e);
452
+ createErrorForJWTError(e);
450
453
  throw e;
451
454
  }
452
455
  }
@@ -477,6 +480,7 @@ async function signToken(payload, context) {
477
480
  }
478
481
 
479
482
  async function verifyToken(token, context) {
483
+ let output;
480
484
  try {
481
485
  switch(context.type){
482
486
  case core.KeyType.RSA:
@@ -500,9 +504,10 @@ async function verifyToken(token, context) {
500
504
  'ES512'
501
505
  ];
502
506
  }
503
- return jsonwebtoken.verify(token, publicKey, {
507
+ output = await jsonwebtoken.verify(token, publicKey, {
504
508
  ...options
505
509
  });
510
+ break;
506
511
  }
507
512
  case core.KeyType.OCT:
508
513
  {
@@ -512,18 +517,20 @@ async function verifyToken(token, context) {
512
517
  'HS384',
513
518
  'HS512'
514
519
  ];
515
- return jsonwebtoken.verify(token, secret, {
520
+ output = await jsonwebtoken.verify(token, secret, {
516
521
  ...options
517
522
  });
518
523
  }
519
524
  }
520
525
  } catch (e) {
521
- handleJWTError(e);
522
- throw e;
526
+ throw createErrorForJWTError(e);
523
527
  }
524
- throw new core.TokenError({
525
- message: 'Invalid type.'
526
- });
528
+ if (typeof output === 'undefined') {
529
+ throw new core.TokenError({
530
+ message: 'Invalid type.'
531
+ });
532
+ }
533
+ return output;
527
534
  }
528
535
 
529
536
  function transformDomainEventData(input) {
@@ -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, hasOwnProperty } from '@authup/core';\n\nexport function handleJWTError(e: unknown) {\n if (\n e &&\n typeof e === 'object' &&\n hasOwnProperty(e, 'name')\n ) {\n switch (e.name) {\n case 'TokenExpiredError':\n throw TokenError.expired();\n case 'NotBeforeError': {\n if (\n hasOwnProperty(e, 'date') &&\n typeof e.date === 'string'\n ) {\n throw TokenError.notActiveBefore(e.date);\n }\n break;\n }\n case 'JsonWebTokenError': {\n if (\n hasOwnProperty(e, 'message') &&\n typeof e.message === 'string'\n ) {\n throw TokenError.payloadInvalid(e.message);\n }\n }\n }\n }\n\n throw 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 { handleJWTError } 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 handleJWTError(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 { isKeyPair, isKeyPairWithPublicKey, useKeyPair } from '../key-pair';\nimport type { TokenVerifyOptions } from './type';\nimport { handleJWTError } 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 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 return verify(token, publicKey, {\n ...options,\n });\n }\n case KeyType.OCT: {\n const { type, secret, ...options } = context;\n\n options.algorithms = options.algorithms || ['HS256', 'HS384', 'HS512'];\n\n return verify(token, secret, {\n ...options,\n });\n }\n }\n } catch (e) {\n handleJWTError(e);\n\n throw e;\n }\n\n throw new TokenError({ message: 'Invalid type.' });\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","handleJWTError","TokenError","expired","date","notActiveBefore","message","payloadInvalid","previous","decorateMessage","logMessage","decodeToken","token","decode","signToken","payload","expiresIn","KeyType","RSA","EC","algorithm","sign","OCT","secret","verifyToken","algorithms","verify","transformDomainEventData","input","Date","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 { 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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"}
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 } from 'smob';
5
+ import { merge, isObject as isObject$1 } 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';
@@ -409,27 +409,30 @@ async function useKeyPair(value) {
409
409
  return keyPair;
410
410
  }
411
411
 
412
- function handleJWTError(e) {
413
- if (e && typeof e === 'object' && hasOwnProperty$1(e, 'name')) {
412
+ function createErrorForJWTError(e) {
413
+ if (isObject$1(e) && typeof e.name === 'string') {
414
414
  switch(e.name){
415
415
  case 'TokenExpiredError':
416
- throw TokenError.expired();
416
+ {
417
+ return TokenError.expired();
418
+ }
417
419
  case 'NotBeforeError':
418
420
  {
419
- if (hasOwnProperty$1(e, 'date') && typeof e.date === 'string') {
420
- throw TokenError.notActiveBefore(e.date);
421
+ if (typeof e.date === 'string' || e.date instanceof Date) {
422
+ return TokenError.notActiveBefore(e.date);
421
423
  }
422
424
  break;
423
425
  }
424
426
  case 'JsonWebTokenError':
425
427
  {
426
- if (hasOwnProperty$1(e, 'message') && typeof e.message === 'string') {
427
- throw TokenError.payloadInvalid(e.message);
428
+ if (typeof e.message === 'string') {
429
+ return TokenError.payloadInvalid(e.message);
428
430
  }
431
+ break;
429
432
  }
430
433
  }
431
434
  }
432
- throw new TokenError({
435
+ return new TokenError({
433
436
  previous: e,
434
437
  decorateMessage: true,
435
438
  logMessage: true,
@@ -444,7 +447,7 @@ function decodeToken(token, options) {
444
447
  ...options
445
448
  });
446
449
  } catch (e) {
447
- handleJWTError(e);
450
+ createErrorForJWTError(e);
448
451
  throw e;
449
452
  }
450
453
  }
@@ -475,6 +478,7 @@ async function signToken(payload, context) {
475
478
  }
476
479
 
477
480
  async function verifyToken(token, context) {
481
+ let output;
478
482
  try {
479
483
  switch(context.type){
480
484
  case KeyType.RSA:
@@ -498,9 +502,10 @@ async function verifyToken(token, context) {
498
502
  'ES512'
499
503
  ];
500
504
  }
501
- return verify(token, publicKey, {
505
+ output = await verify(token, publicKey, {
502
506
  ...options
503
507
  });
508
+ break;
504
509
  }
505
510
  case KeyType.OCT:
506
511
  {
@@ -510,18 +515,20 @@ async function verifyToken(token, context) {
510
515
  'HS384',
511
516
  'HS512'
512
517
  ];
513
- return verify(token, secret, {
518
+ output = await verify(token, secret, {
514
519
  ...options
515
520
  });
516
521
  }
517
522
  }
518
523
  } catch (e) {
519
- handleJWTError(e);
520
- throw e;
524
+ throw createErrorForJWTError(e);
521
525
  }
522
- throw new TokenError({
523
- message: 'Invalid type.'
524
- });
526
+ if (typeof output === 'undefined') {
527
+ throw new TokenError({
528
+ message: 'Invalid type.'
529
+ });
530
+ }
531
+ return output;
525
532
  }
526
533
 
527
534
  function transformDomainEventData(input) {
@@ -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, hasOwnProperty } from '@authup/core';\n\nexport function handleJWTError(e: unknown) {\n if (\n e &&\n typeof e === 'object' &&\n hasOwnProperty(e, 'name')\n ) {\n switch (e.name) {\n case 'TokenExpiredError':\n throw TokenError.expired();\n case 'NotBeforeError': {\n if (\n hasOwnProperty(e, 'date') &&\n typeof e.date === 'string'\n ) {\n throw TokenError.notActiveBefore(e.date);\n }\n break;\n }\n case 'JsonWebTokenError': {\n if (\n hasOwnProperty(e, 'message') &&\n typeof e.message === 'string'\n ) {\n throw TokenError.payloadInvalid(e.message);\n }\n }\n }\n }\n\n throw 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 { handleJWTError } 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 handleJWTError(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 { isKeyPair, isKeyPairWithPublicKey, useKeyPair } from '../key-pair';\nimport type { TokenVerifyOptions } from './type';\nimport { handleJWTError } 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 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 return verify(token, publicKey, {\n ...options,\n });\n }\n case KeyType.OCT: {\n const { type, secret, ...options } = context;\n\n options.algorithms = options.algorithms || ['HS256', 'HS384', 'HS512'];\n\n return verify(token, secret, {\n ...options,\n });\n }\n }\n } catch (e) {\n handleJWTError(e);\n\n throw e;\n }\n\n throw new TokenError({ message: 'Invalid type.' });\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","handleJWTError","TokenError","expired","date","notActiveBefore","message","payloadInvalid","previous","decorateMessage","logMessage","decodeToken","token","decode","signToken","payload","expiresIn","KeyType","RSA","EC","algorithm","sign","OCT","secret","verifyToken","algorithms","verify","transformDomainEventData","input","Date","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 { 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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@authup/server-core",
3
- "version": "0.33.0",
3
+ "version": "0.34.0",
4
4
  "description": "Common server services and utilities.",
5
5
  "exports": {
6
6
  "./package.json": "./package.json",
@@ -51,17 +51,17 @@
51
51
  "homepage": "https://github.com/authup/authup#readme",
52
52
  "dependencies": {
53
53
  "@socket.io/redis-emitter": "^5.1.0",
54
- "@types/jsonwebtoken": "^9.0.1",
55
- "@types/nodemailer": "^6.4.7",
54
+ "@types/jsonwebtoken": "^9.0.2",
55
+ "@types/nodemailer": "^6.4.8",
56
56
  "bcrypt": "^5.1.0",
57
57
  "jsonwebtoken": "^9.0.0",
58
58
  "locter": "^1.1.0",
59
59
  "nodemailer": "^6.9.1",
60
60
  "proxy-from-env": "^1.1.0",
61
- "smob": "^1.0.0"
61
+ "smob": "^1.1.1"
62
62
  },
63
63
  "devDependencies": {
64
- "@authup/core": "^0.33.0",
64
+ "@authup/core": "^0.34.0",
65
65
  "@types/bcrypt": "^5.0.0",
66
66
  "@types/proxy-from-env": "^1.0.1",
67
67
  "redis-extension": "^1.3.0"
@@ -73,5 +73,5 @@
73
73
  "publishConfig": {
74
74
  "access": "public"
75
75
  },
76
- "gitHead": "b467985e66ecdd3b68dfc64c34d105bd374a158d"
76
+ "gitHead": "93d6bca4f616371d5773dd95e916194e96be629b"
77
77
  }