@naman_deep_singh/security 1.5.1 → 1.7.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.
Files changed (107) hide show
  1. package/README.md +3 -3
  2. package/dist/cjs/core/crypto/CryptoManger.js +107 -0
  3. package/dist/cjs/core/crypto/index.js +13 -26
  4. package/dist/cjs/core/index.js +44 -0
  5. package/dist/cjs/core/jwt/{jwtManager.js → JWTManager.js} +22 -22
  6. package/dist/cjs/core/jwt/decode.js +2 -3
  7. package/dist/cjs/core/jwt/generateTokens.js +8 -8
  8. package/dist/cjs/core/jwt/index.js +23 -22
  9. package/dist/cjs/core/jwt/parseDuration.js +3 -3
  10. package/dist/cjs/core/jwt/signToken.js +4 -4
  11. package/dist/cjs/core/jwt/validateToken.js +4 -4
  12. package/dist/cjs/core/jwt/verify.js +13 -13
  13. package/dist/cjs/core/password/{passwordManager.js → PasswordManager.js} +8 -8
  14. package/dist/cjs/core/password/hash.js +6 -6
  15. package/dist/cjs/core/password/index.js +20 -17
  16. package/dist/cjs/core/password/strength.js +7 -7
  17. package/dist/cjs/core/password/utils.js +2 -2
  18. package/dist/cjs/core/password/verify.js +5 -5
  19. package/dist/cjs/index.js +4 -40
  20. package/dist/cjs/interfaces/index.js +2 -0
  21. package/dist/esm/core/crypto/CryptoManger.js +100 -0
  22. package/dist/esm/core/crypto/index.js +5 -5
  23. package/dist/esm/core/index.js +6 -0
  24. package/dist/esm/core/jwt/{jwtManager.js → JWTManager.js} +4 -4
  25. package/dist/esm/core/jwt/decode.js +1 -2
  26. package/dist/esm/core/jwt/generateTokens.js +3 -3
  27. package/dist/esm/core/jwt/index.js +8 -8
  28. package/dist/esm/core/jwt/parseDuration.js +1 -1
  29. package/dist/esm/core/jwt/signToken.js +2 -2
  30. package/dist/esm/core/jwt/validateToken.js +1 -1
  31. package/dist/esm/core/jwt/verify.js +1 -1
  32. package/dist/esm/core/password/{passwordManager.js → PasswordManager.js} +2 -2
  33. package/dist/esm/core/password/hash.js +4 -4
  34. package/dist/esm/core/password/index.js +5 -3
  35. package/dist/esm/core/password/strength.js +1 -1
  36. package/dist/esm/core/password/utils.js +1 -1
  37. package/dist/esm/core/password/verify.js +1 -1
  38. package/dist/esm/index.js +4 -13
  39. package/dist/esm/interfaces/index.js +1 -0
  40. package/dist/types/core/crypto/CryptoManger.d.ts +36 -0
  41. package/dist/types/core/crypto/index.d.ts +5 -5
  42. package/dist/types/core/index.d.ts +3 -0
  43. package/dist/{esm/core/jwt/jwtManager.d.ts → types/core/jwt/JWTManager.d.ts} +1 -1
  44. package/dist/types/core/jwt/generateTokens.d.ts +1 -1
  45. package/dist/types/core/jwt/index.d.ts +9 -8
  46. package/dist/types/core/jwt/verify.d.ts +1 -1
  47. package/dist/types/core/password/{passwordManager.d.ts → PasswordManager.d.ts} +1 -1
  48. package/dist/types/core/password/index.d.ts +6 -3
  49. package/dist/types/core/password/strength.d.ts +1 -1
  50. package/dist/types/index.d.ts +1 -40
  51. package/dist/types/interfaces/index.d.ts +2 -0
  52. package/package.json +33 -4
  53. package/dist/cjs/core/crypto/cryptoManager.d.ts +0 -111
  54. package/dist/cjs/core/crypto/cryptoManager.js +0 -208
  55. package/dist/cjs/core/crypto/decrypt.d.ts +0 -1
  56. package/dist/cjs/core/crypto/encrypt.d.ts +0 -1
  57. package/dist/cjs/core/crypto/hmac.d.ts +0 -8
  58. package/dist/cjs/core/crypto/index.d.ts +0 -5
  59. package/dist/cjs/core/crypto/random.d.ts +0 -8
  60. package/dist/cjs/core/jwt/decode.d.ts +0 -12
  61. package/dist/cjs/core/jwt/extractToken.d.ts +0 -11
  62. package/dist/cjs/core/jwt/generateTokens.d.ts +0 -4
  63. package/dist/cjs/core/jwt/index.d.ts +0 -8
  64. package/dist/cjs/core/jwt/jwtManager.d.ts +0 -43
  65. package/dist/cjs/core/jwt/parseDuration.d.ts +0 -1
  66. package/dist/cjs/core/jwt/signToken.d.ts +0 -2
  67. package/dist/cjs/core/jwt/types.d.ts +0 -22
  68. package/dist/cjs/core/jwt/validateToken.d.ts +0 -16
  69. package/dist/cjs/core/jwt/verify.d.ts +0 -18
  70. package/dist/cjs/core/password/hash.d.ts +0 -10
  71. package/dist/cjs/core/password/index.d.ts +0 -3
  72. package/dist/cjs/core/password/passwordManager.d.ts +0 -29
  73. package/dist/cjs/core/password/strength.d.ts +0 -2
  74. package/dist/cjs/core/password/types.d.ts +0 -7
  75. package/dist/cjs/core/password/utils.d.ts +0 -16
  76. package/dist/cjs/core/password/verify.d.ts +0 -10
  77. package/dist/cjs/index.d.ts +0 -40
  78. package/dist/cjs/interfaces/jwt.interface.d.ts +0 -47
  79. package/dist/cjs/interfaces/password.interface.d.ts +0 -60
  80. package/dist/esm/core/crypto/cryptoManager.d.ts +0 -111
  81. package/dist/esm/core/crypto/cryptoManager.js +0 -203
  82. package/dist/esm/core/crypto/decrypt.d.ts +0 -1
  83. package/dist/esm/core/crypto/encrypt.d.ts +0 -1
  84. package/dist/esm/core/crypto/hmac.d.ts +0 -8
  85. package/dist/esm/core/crypto/index.d.ts +0 -5
  86. package/dist/esm/core/crypto/random.d.ts +0 -8
  87. package/dist/esm/core/jwt/decode.d.ts +0 -12
  88. package/dist/esm/core/jwt/extractToken.d.ts +0 -11
  89. package/dist/esm/core/jwt/generateTokens.d.ts +0 -4
  90. package/dist/esm/core/jwt/index.d.ts +0 -8
  91. package/dist/esm/core/jwt/parseDuration.d.ts +0 -1
  92. package/dist/esm/core/jwt/signToken.d.ts +0 -2
  93. package/dist/esm/core/jwt/types.d.ts +0 -22
  94. package/dist/esm/core/jwt/validateToken.d.ts +0 -16
  95. package/dist/esm/core/jwt/verify.d.ts +0 -18
  96. package/dist/esm/core/password/hash.d.ts +0 -10
  97. package/dist/esm/core/password/index.d.ts +0 -3
  98. package/dist/esm/core/password/passwordManager.d.ts +0 -29
  99. package/dist/esm/core/password/strength.d.ts +0 -2
  100. package/dist/esm/core/password/types.d.ts +0 -7
  101. package/dist/esm/core/password/utils.d.ts +0 -16
  102. package/dist/esm/core/password/verify.d.ts +0 -10
  103. package/dist/esm/index.d.ts +0 -40
  104. package/dist/esm/interfaces/jwt.interface.d.ts +0 -47
  105. package/dist/esm/interfaces/password.interface.d.ts +0 -60
  106. package/dist/types/core/crypto/cryptoManager.d.ts +0 -111
  107. package/dist/types/core/jwt/jwtManager.d.ts +0 -43
@@ -1,5 +1,5 @@
1
1
  import { type JwtPayload, type Secret } from 'jsonwebtoken';
2
- import type { AccessToken, ITokenManager, JWTConfig, RefreshToken, TokenPair } from '../../interfaces/jwt.interface';
2
+ import type { AccessToken, ITokenManager, JWTConfig, RefreshToken, TokenPair } from '../../interfaces/jwt.interface.js';
3
3
  export declare class JWTManager implements ITokenManager {
4
4
  private accessSecret;
5
5
  private refreshSecret;
@@ -1,4 +1,4 @@
1
1
  import type { Secret } from 'jsonwebtoken';
2
- import type { RefreshToken, TokenPair } from './types';
2
+ import type { RefreshToken, TokenPair } from './types.js';
3
3
  export declare const generateTokens: (payload: Record<string, unknown>, accessSecret: Secret, refreshSecret: Secret, accessExpiry?: string | number, refreshExpiry?: string | number) => TokenPair;
4
4
  export declare function rotateRefreshToken(oldToken: string, secret: Secret): RefreshToken;
@@ -1,8 +1,9 @@
1
- export * from './decode';
2
- export * from './extractToken';
3
- export * from './generateTokens';
4
- export * from './parseDuration';
5
- export * from './signToken';
6
- export * from './types';
7
- export * from './validateToken';
8
- export * from './verify';
1
+ export { decodeToken, decodeTokenStrict } from './decode.js';
2
+ export { extractToken, type TokenSources } from './extractToken.js';
3
+ export { generateTokens, rotateRefreshToken } from './generateTokens.js';
4
+ export { parseDuration } from './parseDuration.js';
5
+ export { signToken } from './signToken.js';
6
+ export { type AccessToken, type RefreshToken, type TokenPair, type VerificationResult, type TokenValidationOptions, } from './types.js';
7
+ export { validateTokenPayload, isTokenExpired, type TokenRequirements, } from './validateToken.js';
8
+ export { verifyToken, verifyTokenWithOptions, safeVerifyToken, safeVerifyTokenWithOptions, } from './verify.js';
9
+ export { JWTManager } from './JWTManager.js';
@@ -1,5 +1,5 @@
1
1
  import { type JwtPayload, type Secret, type VerifyOptions } from 'jsonwebtoken';
2
- import type { VerificationResult } from './types';
2
+ import type { VerificationResult } from './types.js';
3
3
  /**
4
4
  * Verify token (throws UnauthorizedError if invalid or expired)
5
5
  */
@@ -1,4 +1,4 @@
1
- import type { HashedPassword, IPasswordManager, PasswordConfig, PasswordStrength, PasswordValidationResult } from '../../interfaces/password.interface';
1
+ import type { HashedPassword, IPasswordManager, PasswordConfig, PasswordStrength, PasswordValidationResult } from '../../interfaces/password.interface.js';
2
2
  export declare class PasswordManager implements IPasswordManager {
3
3
  private defaultConfig;
4
4
  constructor(config?: PasswordConfig);
@@ -1,3 +1,6 @@
1
- export * from './hash';
2
- export * from './strength';
3
- export * from './verify';
1
+ export { hashPassword, hashPasswordWithPepper, hashPasswordSync, hashPasswordWithPepperSync, } from './hash.js';
2
+ export { isPasswordStrong } from './strength.js';
3
+ export { verifyPassword, verifyPasswordWithPepper, verifyPasswordSync, verifyPasswordWithPepperSync, } from './verify.js';
4
+ export { PasswordManager } from './PasswordManager.js';
5
+ export { type PasswordStrengthOptions } from './types.js';
6
+ export { ensureValidPassword, safeCompare, estimatePasswordEntropy, normalizePassword, } from './utils.js';
@@ -1,2 +1,2 @@
1
- import type { PasswordStrengthOptions } from './types';
1
+ import type { PasswordStrengthOptions } from './types.js';
2
2
  export declare const isPasswordStrong: (password: string, options?: PasswordStrengthOptions) => boolean;
@@ -1,40 +1 @@
1
- export * from './core/password';
2
- export * from './core/jwt';
3
- export * from './core/crypto';
4
- export { BadRequestError, UnauthorizedError, ValidationError, InternalServerError, } from '@naman_deep_singh/errors-utils';
5
- import * as CryptoUtils from './core/crypto';
6
- import * as JWTUtils from './core/jwt';
7
- declare const _default: {
8
- decrypt: (data: string, secret: string) => string;
9
- encrypt: (text: string, secret: string) => string;
10
- hmacSign: (message: string, secret: string) => string;
11
- hmacVerify: (message: string, secret: string, signature: string) => boolean;
12
- randomToken: (length?: number) => string;
13
- generateStrongPassword: (length?: number) => string;
14
- CryptoManager: typeof CryptoUtils.CryptoManager;
15
- createCryptoManager: (config?: CryptoUtils.CryptoManagerConfig) => CryptoUtils.CryptoManager;
16
- cryptoManager: CryptoUtils.CryptoManager;
17
- decodeToken(token: string): null | string | import("node_modules/@types/jsonwebtoken").JwtPayload;
18
- decodeTokenStrict(token: string): import("node_modules/@types/jsonwebtoken").JwtPayload;
19
- extractToken(sources: JWTUtils.TokenSources): string | null;
20
- rotateRefreshToken(oldToken: string, secret: import("node_modules/@types/jsonwebtoken").Secret): JWTUtils.RefreshToken;
21
- generateTokens: (payload: Record<string, unknown>, accessSecret: import("node_modules/@types/jsonwebtoken").Secret, refreshSecret: import("node_modules/@types/jsonwebtoken").Secret, accessExpiry?: string | number, refreshExpiry?: string | number) => JWTUtils.TokenPair;
22
- parseDuration(input: string | number): number;
23
- signToken: (payload: Record<string, unknown>, secret: import("node_modules/@types/jsonwebtoken").Secret, expiresIn?: string | number, options?: import("node_modules/@types/jsonwebtoken").SignOptions) => string;
24
- validateTokenPayload(payload: Record<string, unknown>, rules?: JWTUtils.TokenRequirements): void;
25
- isTokenExpired(payload: import("node_modules/@types/jsonwebtoken").JwtPayload): boolean;
26
- verifyToken: (token: string, secret: import("node_modules/@types/jsonwebtoken").Secret) => string | import("node_modules/@types/jsonwebtoken").JwtPayload;
27
- verifyTokenWithOptions: (token: string, secret: import("node_modules/@types/jsonwebtoken").Secret, options?: import("node_modules/@types/jsonwebtoken").VerifyOptions) => string | import("node_modules/@types/jsonwebtoken").JwtPayload;
28
- safeVerifyToken: (token: string, secret: import("node_modules/@types/jsonwebtoken").Secret) => JWTUtils.VerificationResult;
29
- safeVerifyTokenWithOptions: (token: string, secret: import("node_modules/@types/jsonwebtoken").Secret, options?: import("node_modules/@types/jsonwebtoken").VerifyOptions) => JWTUtils.VerificationResult;
30
- hashPasswordWithPepper(password: string, pepper: string): Promise<string>;
31
- hashPasswordWithPepperSync(password: string, pepper: string): string;
32
- hashPassword: (password: string, saltRounds?: number) => Promise<string>;
33
- hashPasswordSync: (password: string, saltRounds?: number) => string;
34
- isPasswordStrong: (password: string, options?: import("./core/password/types").PasswordStrengthOptions) => boolean;
35
- verifyPasswordWithPepper(password: string, pepper: string, hash: string): Promise<boolean>;
36
- verifyPasswordWithPepperSync(password: string, pepper: string, hash: string): Promise<boolean>;
37
- verifyPassword: (password: string, hash: string) => Promise<boolean>;
38
- verifyPasswordSync: (password: string, hash: string) => boolean;
39
- };
40
- export default _default;
1
+ export * from './core/index.js';
@@ -0,0 +1,2 @@
1
+ export type { AccessToken, RefreshToken, TokenPair, JWTConfig, TokenValidationOptions, TokenGenerationOptions, ITokenManager, } from './jwt.interface.js';
2
+ export type { PasswordConfig, PasswordRule, PasswordStrength, PasswordValidationResult, HashedPassword, IPasswordManager, IPasswordStrengthChecker, } from './password.interface.js';
package/package.json CHANGED
@@ -1,15 +1,41 @@
1
1
  {
2
2
  "name": "@naman_deep_singh/security",
3
- "version": "1.5.1",
3
+ "version": "1.7.0",
4
4
  "description": "Security utilities for password hashing and JWT token management with TypeScript",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",
7
7
  "module": "./dist/esm/index.js",
8
+ "types": "./dist/types/index.d.ts",
8
9
  "exports": {
9
10
  ".": {
10
11
  "import": "./dist/esm/index.js",
11
12
  "require": "./dist/cjs/index.js",
12
13
  "types": "./dist/types/index.d.ts"
14
+ },
15
+ "./core": {
16
+ "import": "./dist/esm/core/index.js",
17
+ "require": "./dist/cjs/core/index.js",
18
+ "types": "./dist/types/core/index.d.ts"
19
+ },
20
+ "./core/crypto": {
21
+ "import": "./dist/esm/core/crypto/index.js",
22
+ "require": "./dist/cjs/core/crypto/index.js",
23
+ "types": "./dist/types/core/crypto/index.d.ts"
24
+ },
25
+ "./core/jwt": {
26
+ "import": "./dist/esm/core/jwt/index.js",
27
+ "require": "./dist/cjs/core/jwt/index.js",
28
+ "types": "./dist/types/core/jwt/index.d.ts"
29
+ },
30
+ "./core/password": {
31
+ "import": "./dist/esm/core/password/index.js",
32
+ "require": "./dist/cjs/core/password/index.js",
33
+ "types": "./dist/types/core/password/index.d.ts"
34
+ },
35
+ "./interfaces": {
36
+ "import": "./dist/esm/interfaces/index.js",
37
+ "require": "./dist/cjs/interfaces/index.js",
38
+ "types": "./dist/types/interfaces/index.d.ts"
13
39
  }
14
40
  },
15
41
  "sideEffects": false,
@@ -28,8 +54,8 @@
28
54
  "author": "Naman Deep Singh",
29
55
  "license": "ISC",
30
56
  "dependencies": {
31
- "@naman_deep_singh/errors-utils": "^1.4.2",
32
- "@naman_deep_singh/js-extensions": "^1.4.0",
57
+ "@naman_deep_singh/errors": "^2.3.0",
58
+ "@naman_deep_singh/utils": "^2.4.0",
33
59
  "bcryptjs": "^3.0.3",
34
60
  "jsonwebtoken": "^9.0.2"
35
61
  },
@@ -39,9 +65,12 @@
39
65
  "rimraf": "^5.0.5",
40
66
  "typescript": "^5.9.3"
41
67
  },
68
+ "publishConfig": {
69
+ "access": "public"
70
+ },
42
71
  "scripts": {
43
72
  "build": "pnpm run build:types && tsc -p tsconfig.cjs.json && tsc -p tsconfig.esm.json",
44
- "build:types": "tsc -p tsconfig.base.json --emitDeclarationOnly --outDir dist/types",
73
+ "build:types": "tsc -p tsconfig.types.json",
45
74
  "clean": "rimraf dist"
46
75
  }
47
76
  }
@@ -1,111 +0,0 @@
1
- /**
2
- * Configuration options for CryptoManager
3
- */
4
- export interface CryptoManagerConfig {
5
- defaultAlgorithm?: string;
6
- defaultEncoding?: BufferEncoding;
7
- hmacAlgorithm?: string;
8
- }
9
- /**
10
- * CryptoManager - Class-based wrapper for all cryptographic operations
11
- * Provides a consistent interface for encryption, decryption, HMAC generation, and secure random generation
12
- */
13
- export declare class CryptoManager {
14
- private config;
15
- constructor(config?: CryptoManagerConfig);
16
- /**
17
- * Update configuration
18
- */
19
- updateConfig(config: Partial<CryptoManagerConfig>): void;
20
- /**
21
- * Get current configuration
22
- */
23
- getConfig(): Required<CryptoManagerConfig>;
24
- /**
25
- * Encrypt data using the default or specified algorithm
26
- */
27
- encrypt(plaintext: string, key: string, _options?: {
28
- algorithm?: string;
29
- encoding?: BufferEncoding;
30
- iv?: string;
31
- }): string;
32
- /**
33
- * Decrypt data using the default or specified algorithm
34
- */
35
- decrypt(encryptedData: string, key: string, _options?: {
36
- algorithm?: string;
37
- encoding?: BufferEncoding;
38
- iv?: string;
39
- }): string;
40
- /**
41
- * Generate HMAC signature
42
- */
43
- generateHmac(data: string, secret: string, _options?: {
44
- algorithm?: string;
45
- encoding?: BufferEncoding;
46
- }): string;
47
- /**
48
- * Generate cryptographically secure random bytes
49
- */
50
- generateSecureRandom(length: number, _encoding?: BufferEncoding): string;
51
- /**
52
- * Verify HMAC signature
53
- */
54
- verifyHmac(data: string, secret: string, signature: string, _options?: {
55
- algorithm?: string;
56
- encoding?: BufferEncoding;
57
- }): boolean;
58
- /**
59
- * Create a key derivation function using PBKDF2
60
- */
61
- deriveKey(password: string, salt: string, iterations?: number, keyLength?: number): Promise<string>;
62
- /**
63
- * Hash data using SHA-256
64
- */
65
- sha256(data: string, encoding?: BufferEncoding): string;
66
- /**
67
- * Hash data using SHA-512
68
- */
69
- sha512(data: string, encoding?: BufferEncoding): string;
70
- /**
71
- * Generate a secure key pair for asymmetric encryption
72
- */
73
- generateKeyPair(options?: {
74
- modulusLength?: number;
75
- publicKeyEncoding?: {
76
- type: string;
77
- format: string;
78
- };
79
- privateKeyEncoding?: {
80
- type: string;
81
- format: string;
82
- };
83
- }): Promise<{
84
- publicKey: string;
85
- privateKey: string;
86
- }>;
87
- /**
88
- * Encrypt data using RSA public key
89
- */
90
- rsaEncrypt(data: string, publicKey: string): Promise<string>;
91
- /**
92
- * Decrypt data using RSA private key
93
- */
94
- rsaDecrypt(encryptedData: string, privateKey: string): Promise<string>;
95
- /**
96
- * Create digital signature using RSA private key
97
- */
98
- rsaSign(data: string, privateKey: string, algorithm?: string): Promise<string>;
99
- /**
100
- * Verify digital signature using RSA public key
101
- */
102
- rsaVerify(data: string, signature: string, publicKey: string, algorithm?: string): Promise<boolean>;
103
- }
104
- /**
105
- * Create a CryptoManager instance with default configuration
106
- */
107
- export declare const createCryptoManager: (config?: CryptoManagerConfig) => CryptoManager;
108
- /**
109
- * Default CryptoManager instance
110
- */
111
- export declare const cryptoManager: CryptoManager;
@@ -1,208 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.cryptoManager = exports.createCryptoManager = exports.CryptoManager = void 0;
4
- const errors_utils_1 = require("@naman_deep_singh/errors-utils");
5
- const index_1 = require("./index");
6
- /**
7
- * Default configuration
8
- */
9
- const DEFAULT_CONFIG = {
10
- defaultAlgorithm: 'aes-256-gcm',
11
- defaultEncoding: 'utf8',
12
- hmacAlgorithm: 'sha256',
13
- };
14
- /**
15
- * CryptoManager - Class-based wrapper for all cryptographic operations
16
- * Provides a consistent interface for encryption, decryption, HMAC generation, and secure random generation
17
- */
18
- class CryptoManager {
19
- constructor(config = {}) {
20
- this.config = { ...DEFAULT_CONFIG, ...config };
21
- }
22
- /**
23
- * Update configuration
24
- */
25
- updateConfig(config) {
26
- this.config = { ...this.config, ...config };
27
- }
28
- /**
29
- * Get current configuration
30
- */
31
- getConfig() {
32
- return { ...this.config };
33
- }
34
- /**
35
- * Encrypt data using the default or specified algorithm
36
- */
37
- encrypt(plaintext, key, _options) {
38
- try {
39
- return (0, index_1.encrypt)(plaintext, key);
40
- }
41
- catch (error) {
42
- throw new errors_utils_1.CryptoIntegrityError({
43
- reason: 'Encryption failed',
44
- }, error instanceof Error ? error : undefined);
45
- }
46
- }
47
- /**
48
- * Decrypt data using the default or specified algorithm
49
- */
50
- decrypt(encryptedData, key, _options) {
51
- try {
52
- return (0, index_1.decrypt)(encryptedData, key);
53
- }
54
- catch (error) {
55
- throw new errors_utils_1.CryptoIntegrityError({
56
- reason: 'Decryption failed',
57
- }, error instanceof Error ? error : undefined);
58
- }
59
- }
60
- /**
61
- * Generate HMAC signature
62
- */
63
- generateHmac(data, secret, _options) {
64
- // Use the basic HMAC sign function for now
65
- // TODO: Add support for different algorithms
66
- return (0, index_1.hmacSign)(data, secret);
67
- }
68
- /**
69
- * Generate cryptographically secure random bytes
70
- */
71
- generateSecureRandom(length, _encoding = 'hex') {
72
- // Use the basic random token function
73
- return (0, index_1.randomToken)(length);
74
- }
75
- /**
76
- * Verify HMAC signature
77
- */
78
- verifyHmac(data, secret, signature, _options) {
79
- // Use the basic HMAC verify function
80
- return (0, index_1.hmacVerify)(data, secret, signature);
81
- }
82
- /**
83
- * Create a key derivation function using PBKDF2
84
- */
85
- deriveKey(password, salt, iterations = 100000, keyLength = 32) {
86
- return new Promise((resolve, reject) => {
87
- const crypto = require('crypto');
88
- crypto.pbkdf2(password, salt, iterations, keyLength, 'sha256', (error, derivedKey) => {
89
- if (error) {
90
- reject(new errors_utils_1.CryptoIntegrityError({
91
- reason: 'Key derivation failed',
92
- }, error instanceof Error ? error : undefined));
93
- }
94
- else {
95
- resolve(derivedKey.toString('hex'));
96
- }
97
- });
98
- });
99
- }
100
- /**
101
- * Hash data using SHA-256
102
- */
103
- sha256(data, encoding = 'hex') {
104
- const crypto = require('crypto');
105
- return crypto.createHash('sha256').update(data).digest(encoding);
106
- }
107
- /**
108
- * Hash data using SHA-512
109
- */
110
- sha512(data, encoding = 'hex') {
111
- const crypto = require('crypto');
112
- return crypto.createHash('sha512').update(data).digest(encoding);
113
- }
114
- /**
115
- * Generate a secure key pair for asymmetric encryption
116
- */
117
- generateKeyPair(options) {
118
- return new Promise((resolve, _reject) => {
119
- const crypto = require('crypto');
120
- const keyPair = crypto.generateKeyPairSync('rsa', {
121
- modulusLength: options?.modulusLength || 2048,
122
- publicKeyEncoding: options?.publicKeyEncoding || {
123
- type: 'spki',
124
- format: 'pem',
125
- },
126
- privateKeyEncoding: options?.privateKeyEncoding || {
127
- type: 'pkcs8',
128
- format: 'pem',
129
- },
130
- });
131
- resolve(keyPair);
132
- });
133
- }
134
- /**
135
- * Encrypt data using RSA public key
136
- */
137
- rsaEncrypt(data, publicKey) {
138
- return new Promise((resolve, _reject) => {
139
- const crypto = require('crypto');
140
- const buffer = Buffer.from(data, 'utf8');
141
- const encrypted = crypto.publicEncrypt(publicKey, buffer);
142
- resolve(encrypted.toString('base64'));
143
- });
144
- }
145
- /**
146
- * Decrypt data using RSA private key
147
- */
148
- rsaDecrypt(encryptedData, privateKey) {
149
- return new Promise((resolve, _reject) => {
150
- const crypto = require('crypto');
151
- const buffer = Buffer.from(encryptedData, 'base64');
152
- const decrypted = crypto.privateDecrypt(privateKey, buffer);
153
- resolve(decrypted.toString('utf8'));
154
- });
155
- }
156
- /**
157
- * Create digital signature using RSA private key
158
- */
159
- rsaSign(data, privateKey, algorithm = 'sha256') {
160
- return new Promise((resolve, reject) => {
161
- const crypto = require('crypto');
162
- try {
163
- const sign = crypto.createSign(algorithm);
164
- sign.update(data);
165
- sign.end();
166
- const signature = sign.sign(privateKey, 'base64');
167
- resolve(signature);
168
- }
169
- catch (error) {
170
- reject(new errors_utils_1.CryptoIntegrityError({
171
- reason: 'RSA signing failed',
172
- }, error instanceof Error ? error : undefined));
173
- }
174
- });
175
- }
176
- /**
177
- * Verify digital signature using RSA public key
178
- */
179
- rsaVerify(data, signature, publicKey, algorithm = 'sha256') {
180
- return new Promise((resolve, reject) => {
181
- const crypto = require('crypto');
182
- try {
183
- const verify = crypto.createVerify(algorithm);
184
- verify.update(data);
185
- verify.end();
186
- const isValid = verify.verify(publicKey, signature, 'base64');
187
- resolve(isValid);
188
- }
189
- catch (error) {
190
- reject(new errors_utils_1.CryptoIntegrityError({
191
- reason: 'RSA verification failed',
192
- }, error instanceof Error ? error : undefined));
193
- }
194
- });
195
- }
196
- }
197
- exports.CryptoManager = CryptoManager;
198
- /**
199
- * Create a CryptoManager instance with default configuration
200
- */
201
- const createCryptoManager = (config) => {
202
- return new CryptoManager(config);
203
- };
204
- exports.createCryptoManager = createCryptoManager;
205
- /**
206
- * Default CryptoManager instance
207
- */
208
- exports.cryptoManager = new CryptoManager();
@@ -1 +0,0 @@
1
- export declare const decrypt: (data: string, secret: string) => string;
@@ -1 +0,0 @@
1
- export declare const encrypt: (text: string, secret: string) => string;
@@ -1,8 +0,0 @@
1
- /**
2
- * Sign message using HMAC SHA-256
3
- */
4
- export declare const hmacSign: (message: string, secret: string) => string;
5
- /**
6
- * Verify HMAC signature
7
- */
8
- export declare const hmacVerify: (message: string, secret: string, signature: string) => boolean;
@@ -1,5 +0,0 @@
1
- export { decrypt } from './decrypt';
2
- export { encrypt } from './encrypt';
3
- export { hmacSign, hmacVerify } from './hmac';
4
- export { randomToken, generateStrongPassword } from './random';
5
- export * from './cryptoManager';
@@ -1,8 +0,0 @@
1
- /**
2
- * Generate cryptographically secure random string
3
- */
4
- export declare const randomToken: (length?: number) => string;
5
- /**
6
- * Generate a strong random password
7
- */
8
- export declare const generateStrongPassword: (length?: number) => string;
@@ -1,12 +0,0 @@
1
- import { type JwtPayload } from 'jsonwebtoken';
2
- /**
3
- * Flexible decode
4
- * Returns: null | string | JwtPayload
5
- * Mirrors jsonwebtoken.decode()
6
- */
7
- export declare function decodeToken(token: string): null | string | JwtPayload;
8
- /**
9
- * Strict decode
10
- * Always returns JwtPayload or throws error
11
- */
12
- export declare function decodeTokenStrict(token: string): JwtPayload;
@@ -1,11 +0,0 @@
1
- export interface TokenSources {
2
- header?: string | undefined | null;
3
- cookies?: Record<string, string> | undefined;
4
- query?: Record<string, string | undefined> | undefined;
5
- body?: Record<string, unknown> | undefined;
6
- wsMessage?: string | Record<string, unknown> | undefined;
7
- }
8
- /**
9
- * Universal token extractor
10
- */
11
- export declare function extractToken(sources: TokenSources): string | null;
@@ -1,4 +0,0 @@
1
- import type { Secret } from 'jsonwebtoken';
2
- import type { RefreshToken, TokenPair } from './types';
3
- export declare const generateTokens: (payload: Record<string, unknown>, accessSecret: Secret, refreshSecret: Secret, accessExpiry?: string | number, refreshExpiry?: string | number) => TokenPair;
4
- export declare function rotateRefreshToken(oldToken: string, secret: Secret): RefreshToken;
@@ -1,8 +0,0 @@
1
- export * from './decode';
2
- export * from './extractToken';
3
- export * from './generateTokens';
4
- export * from './parseDuration';
5
- export * from './signToken';
6
- export * from './types';
7
- export * from './validateToken';
8
- export * from './verify';
@@ -1,43 +0,0 @@
1
- import { type JwtPayload, type Secret } from 'jsonwebtoken';
2
- import type { AccessToken, ITokenManager, JWTConfig, RefreshToken, TokenPair } from '../../interfaces/jwt.interface';
3
- export declare class JWTManager implements ITokenManager {
4
- private accessSecret;
5
- private refreshSecret;
6
- private accessExpiry;
7
- private refreshExpiry;
8
- private cache?;
9
- private cacheTTL;
10
- constructor(config: JWTConfig);
11
- /** Generate both access and refresh tokens */
12
- generateTokens(payload: Record<string, unknown>): Promise<TokenPair>;
13
- /** Generate access token */
14
- generateAccessToken(payload: Record<string, unknown>): Promise<AccessToken>;
15
- /** Generate refresh token */
16
- generateRefreshToken(payload: Record<string, unknown>): Promise<RefreshToken>;
17
- /** Verify access token */
18
- verifyAccessToken(token: string): Promise<JwtPayload>;
19
- /** Verify refresh token */
20
- verifyRefreshToken(token: string): Promise<JwtPayload>;
21
- /** Decode token without verification */
22
- decodeToken(token: string, complete?: boolean): JwtPayload | string | null;
23
- /** Extract token from Authorization header */
24
- extractTokenFromHeader(authHeader: string): string | null;
25
- /** Validate token without throwing exceptions */
26
- validateToken(token: string, secret: Secret): boolean;
27
- /** Rotate refresh token */
28
- rotateRefreshToken(oldToken: string): Promise<RefreshToken>;
29
- /** Check if token is expired */
30
- isTokenExpired(token: string): boolean;
31
- /** Get token expiration date */
32
- getTokenExpiration(token: string): Date | null;
33
- /** Clear token cache */
34
- clearCache(): void;
35
- /** Get cache statistics */
36
- getCacheStats(): {
37
- size: number;
38
- maxSize: number;
39
- } | null;
40
- /** Private helper methods */
41
- private validatePayload;
42
- private verifyTokenWithCache;
43
- }
@@ -1 +0,0 @@
1
- export declare function parseDuration(input: string | number): number;
@@ -1,2 +0,0 @@
1
- import { type Secret, type SignOptions } from 'jsonwebtoken';
2
- export declare const signToken: (payload: Record<string, unknown>, secret: Secret, expiresIn?: string | number, options?: SignOptions) => string;
@@ -1,22 +0,0 @@
1
- import type { JwtPayload } from 'jsonwebtoken';
2
- export interface AccessTokenBrand {
3
- readonly access: unique symbol;
4
- }
5
- export interface RefreshTokenBrand {
6
- readonly refresh: unique symbol;
7
- }
8
- export type AccessToken = string & AccessTokenBrand;
9
- export type RefreshToken = string & RefreshTokenBrand;
10
- export interface TokenPair {
11
- accessToken: AccessToken;
12
- refreshToken: RefreshToken;
13
- }
14
- export interface VerificationResult<T = JwtPayload> {
15
- valid: boolean;
16
- payload?: T | string;
17
- error?: Error;
18
- }
19
- export interface TokenValidationOptions {
20
- ignoreExpiration?: boolean;
21
- ignoreIssuedAt?: boolean;
22
- }