@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
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  ```bash
2
2
  @naman_deep_singh/security
3
3
 
4
- Version: 1.5.1
4
+ Version: 1.7.0
5
5
 
6
6
  A complete, lightweight security toolkit for Node.js & TypeScript providing:
7
7
 
@@ -13,7 +13,7 @@ A complete, lightweight security toolkit for Node.js & TypeScript providing:
13
13
  🧰 Robust token extraction (Headers, Cookies, Query, Body, WebSocket)
14
14
  🧩 Safe & strict JWT decode utilities
15
15
  🔒 AES-256-GCM encryption/decryption with HMAC and random utilities
16
- 🚨 Standardized error handling with @naman_deep_singh/errors-utils
16
+ 🚨 Standardized error handling with @naman_deep_singh/errors
17
17
 
18
18
  ✔ Fully typed with TypeScript
19
19
  ✔ Branded token types for compile-time safety (AccessToken/RefreshToken)
@@ -220,7 +220,7 @@ const randomHex = cryptoManager.generateRandomHex(32);
220
220
 
221
221
  🚨 Error Handling
222
222
 
223
- This package uses standardized errors from @naman_deep_singh/errors-utils:
223
+ This package uses standardized errors from @naman_deep_singh/errors:
224
224
 
225
225
  import {
226
226
  BadRequestError,
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CryptoManager = void 0;
7
+ const crypto_1 = __importDefault(require("crypto"));
8
+ const errors_1 = require("@naman_deep_singh/errors");
9
+ const decrypt_js_1 = require("./decrypt.js");
10
+ const encrypt_js_1 = require("./encrypt.js");
11
+ const hmac_js_1 = require("./hmac.js");
12
+ /**
13
+ * High-level cryptography manager
14
+ * Wraps encryption, decryption, HMAC, and random utilities
15
+ */
16
+ class CryptoManager {
17
+ constructor(secret) {
18
+ if (!secret || typeof secret !== 'string' || secret.length < 16) {
19
+ throw new errors_1.BadRequestError({
20
+ reason: 'CryptoManager secret must be a non-empty string (min 16 chars)',
21
+ });
22
+ }
23
+ this.secret = secret;
24
+ }
25
+ /**
26
+ * Encrypt data using AES-256-GCM
27
+ */
28
+ encrypt(data) {
29
+ if (!data || typeof data !== 'string') {
30
+ throw new errors_1.BadRequestError({
31
+ reason: 'Data to encrypt must be a non-empty string',
32
+ });
33
+ }
34
+ return (0, encrypt_js_1.encrypt)(data, this.secret);
35
+ }
36
+ /**
37
+ * Decrypt AES-256-GCM encrypted data
38
+ */
39
+ decrypt(encrypted) {
40
+ if (!encrypted || typeof encrypted !== 'string') {
41
+ throw new errors_1.BadRequestError({
42
+ reason: 'Encrypted value must be a non-empty string',
43
+ });
44
+ }
45
+ return (0, decrypt_js_1.decrypt)(encrypted, this.secret);
46
+ }
47
+ /**
48
+ * Create HMAC SHA-256 signature
49
+ */
50
+ createHMAC(message) {
51
+ if (!message || typeof message !== 'string') {
52
+ throw new errors_1.BadRequestError({
53
+ reason: 'Message must be a non-empty string',
54
+ });
55
+ }
56
+ return (0, hmac_js_1.hmacSign)(message, this.secret);
57
+ }
58
+ /**
59
+ * Verify HMAC SHA-256 signature
60
+ */
61
+ verifyHMAC(message, signature) {
62
+ if (!message ||
63
+ typeof message !== 'string' ||
64
+ !signature ||
65
+ typeof signature !== 'string') {
66
+ return false;
67
+ }
68
+ return (0, hmac_js_1.hmacVerify)(message, this.secret, signature);
69
+ }
70
+ /**
71
+ * Generate cryptographically secure random bytes
72
+ */
73
+ generateRandomBytes(length = 32) {
74
+ if (!Number.isInteger(length) || length <= 0) {
75
+ throw new errors_1.BadRequestError({
76
+ reason: 'Random byte length must be a positive integer',
77
+ });
78
+ }
79
+ return crypto_1.default.randomBytes(length);
80
+ }
81
+ /**
82
+ * Generate secure random hex string
83
+ */
84
+ generateRandomHex(length = 32) {
85
+ if (!Number.isInteger(length) || length <= 0) {
86
+ throw new errors_1.BadRequestError({
87
+ reason: 'Random hex length must be a positive integer',
88
+ });
89
+ }
90
+ return crypto_1.default.randomBytes(length).toString('hex');
91
+ }
92
+ /**
93
+ * Generate secure random string (URL-safe base64)
94
+ */
95
+ generateRandomString(length = 32) {
96
+ if (!Number.isInteger(length) || length <= 0) {
97
+ throw new errors_1.BadRequestError({
98
+ reason: 'Random string length must be a positive integer',
99
+ });
100
+ }
101
+ return crypto_1.default
102
+ .randomBytes(Math.ceil((length * 3) / 4))
103
+ .toString('base64url')
104
+ .slice(0, length);
105
+ }
106
+ }
107
+ exports.CryptoManager = CryptoManager;
@@ -1,28 +1,15 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
2
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.generateStrongPassword = exports.randomToken = exports.hmacVerify = exports.hmacSign = exports.encrypt = exports.decrypt = void 0;
18
- var decrypt_1 = require("./decrypt");
19
- Object.defineProperty(exports, "decrypt", { enumerable: true, get: function () { return decrypt_1.decrypt; } });
20
- var encrypt_1 = require("./encrypt");
21
- Object.defineProperty(exports, "encrypt", { enumerable: true, get: function () { return encrypt_1.encrypt; } });
22
- var hmac_1 = require("./hmac");
23
- Object.defineProperty(exports, "hmacSign", { enumerable: true, get: function () { return hmac_1.hmacSign; } });
24
- Object.defineProperty(exports, "hmacVerify", { enumerable: true, get: function () { return hmac_1.hmacVerify; } });
25
- var random_1 = require("./random");
26
- Object.defineProperty(exports, "randomToken", { enumerable: true, get: function () { return random_1.randomToken; } });
27
- Object.defineProperty(exports, "generateStrongPassword", { enumerable: true, get: function () { return random_1.generateStrongPassword; } });
28
- __exportStar(require("./cryptoManager"), exports);
3
+ exports.generateStrongPassword = exports.randomToken = exports.hmacVerify = exports.hmacSign = exports.decrypt = exports.encrypt = exports.CryptoManager = void 0;
4
+ var CryptoManger_js_1 = require("./CryptoManger.js");
5
+ Object.defineProperty(exports, "CryptoManager", { enumerable: true, get: function () { return CryptoManger_js_1.CryptoManager; } });
6
+ var encrypt_js_1 = require("./encrypt.js");
7
+ Object.defineProperty(exports, "encrypt", { enumerable: true, get: function () { return encrypt_js_1.encrypt; } });
8
+ var decrypt_js_1 = require("./decrypt.js");
9
+ Object.defineProperty(exports, "decrypt", { enumerable: true, get: function () { return decrypt_js_1.decrypt; } });
10
+ var hmac_js_1 = require("./hmac.js");
11
+ Object.defineProperty(exports, "hmacSign", { enumerable: true, get: function () { return hmac_js_1.hmacSign; } });
12
+ Object.defineProperty(exports, "hmacVerify", { enumerable: true, get: function () { return hmac_js_1.hmacVerify; } });
13
+ var random_js_1 = require("./random.js");
14
+ Object.defineProperty(exports, "randomToken", { enumerable: true, get: function () { return random_js_1.randomToken; } });
15
+ Object.defineProperty(exports, "generateStrongPassword", { enumerable: true, get: function () { return random_js_1.generateStrongPassword; } });
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizePassword = exports.estimatePasswordEntropy = exports.safeCompare = exports.ensureValidPassword = exports.PasswordManager = exports.verifyPasswordWithPepperSync = exports.verifyPasswordSync = exports.verifyPasswordWithPepper = exports.verifyPassword = exports.isPasswordStrong = exports.hashPasswordWithPepperSync = exports.hashPasswordSync = exports.hashPasswordWithPepper = exports.hashPassword = exports.JWTManager = exports.safeVerifyTokenWithOptions = exports.safeVerifyToken = exports.verifyTokenWithOptions = exports.verifyToken = exports.isTokenExpired = exports.validateTokenPayload = exports.signToken = exports.parseDuration = exports.rotateRefreshToken = exports.generateTokens = exports.extractToken = exports.decodeTokenStrict = exports.decodeToken = exports.generateStrongPassword = exports.randomToken = exports.hmacVerify = exports.hmacSign = exports.decrypt = exports.encrypt = exports.CryptoManager = void 0;
4
+ // Re-export everything from crypto module
5
+ var index_js_1 = require("./crypto/index.js");
6
+ Object.defineProperty(exports, "CryptoManager", { enumerable: true, get: function () { return index_js_1.CryptoManager; } });
7
+ Object.defineProperty(exports, "encrypt", { enumerable: true, get: function () { return index_js_1.encrypt; } });
8
+ Object.defineProperty(exports, "decrypt", { enumerable: true, get: function () { return index_js_1.decrypt; } });
9
+ Object.defineProperty(exports, "hmacSign", { enumerable: true, get: function () { return index_js_1.hmacSign; } });
10
+ Object.defineProperty(exports, "hmacVerify", { enumerable: true, get: function () { return index_js_1.hmacVerify; } });
11
+ Object.defineProperty(exports, "randomToken", { enumerable: true, get: function () { return index_js_1.randomToken; } });
12
+ Object.defineProperty(exports, "generateStrongPassword", { enumerable: true, get: function () { return index_js_1.generateStrongPassword; } });
13
+ // Re-export everything from jwt module
14
+ var index_js_2 = require("./jwt/index.js");
15
+ Object.defineProperty(exports, "decodeToken", { enumerable: true, get: function () { return index_js_2.decodeToken; } });
16
+ Object.defineProperty(exports, "decodeTokenStrict", { enumerable: true, get: function () { return index_js_2.decodeTokenStrict; } });
17
+ Object.defineProperty(exports, "extractToken", { enumerable: true, get: function () { return index_js_2.extractToken; } });
18
+ Object.defineProperty(exports, "generateTokens", { enumerable: true, get: function () { return index_js_2.generateTokens; } });
19
+ Object.defineProperty(exports, "rotateRefreshToken", { enumerable: true, get: function () { return index_js_2.rotateRefreshToken; } });
20
+ Object.defineProperty(exports, "parseDuration", { enumerable: true, get: function () { return index_js_2.parseDuration; } });
21
+ Object.defineProperty(exports, "signToken", { enumerable: true, get: function () { return index_js_2.signToken; } });
22
+ Object.defineProperty(exports, "validateTokenPayload", { enumerable: true, get: function () { return index_js_2.validateTokenPayload; } });
23
+ Object.defineProperty(exports, "isTokenExpired", { enumerable: true, get: function () { return index_js_2.isTokenExpired; } });
24
+ Object.defineProperty(exports, "verifyToken", { enumerable: true, get: function () { return index_js_2.verifyToken; } });
25
+ Object.defineProperty(exports, "verifyTokenWithOptions", { enumerable: true, get: function () { return index_js_2.verifyTokenWithOptions; } });
26
+ Object.defineProperty(exports, "safeVerifyToken", { enumerable: true, get: function () { return index_js_2.safeVerifyToken; } });
27
+ Object.defineProperty(exports, "safeVerifyTokenWithOptions", { enumerable: true, get: function () { return index_js_2.safeVerifyTokenWithOptions; } });
28
+ Object.defineProperty(exports, "JWTManager", { enumerable: true, get: function () { return index_js_2.JWTManager; } });
29
+ // Re-export everything from password module
30
+ var index_js_3 = require("./password/index.js");
31
+ Object.defineProperty(exports, "hashPassword", { enumerable: true, get: function () { return index_js_3.hashPassword; } });
32
+ Object.defineProperty(exports, "hashPasswordWithPepper", { enumerable: true, get: function () { return index_js_3.hashPasswordWithPepper; } });
33
+ Object.defineProperty(exports, "hashPasswordSync", { enumerable: true, get: function () { return index_js_3.hashPasswordSync; } });
34
+ Object.defineProperty(exports, "hashPasswordWithPepperSync", { enumerable: true, get: function () { return index_js_3.hashPasswordWithPepperSync; } });
35
+ Object.defineProperty(exports, "isPasswordStrong", { enumerable: true, get: function () { return index_js_3.isPasswordStrong; } });
36
+ Object.defineProperty(exports, "verifyPassword", { enumerable: true, get: function () { return index_js_3.verifyPassword; } });
37
+ Object.defineProperty(exports, "verifyPasswordWithPepper", { enumerable: true, get: function () { return index_js_3.verifyPasswordWithPepper; } });
38
+ Object.defineProperty(exports, "verifyPasswordSync", { enumerable: true, get: function () { return index_js_3.verifyPasswordSync; } });
39
+ Object.defineProperty(exports, "verifyPasswordWithPepperSync", { enumerable: true, get: function () { return index_js_3.verifyPasswordWithPepperSync; } });
40
+ Object.defineProperty(exports, "PasswordManager", { enumerable: true, get: function () { return index_js_3.PasswordManager; } });
41
+ Object.defineProperty(exports, "ensureValidPassword", { enumerable: true, get: function () { return index_js_3.ensureValidPassword; } });
42
+ Object.defineProperty(exports, "safeCompare", { enumerable: true, get: function () { return index_js_3.safeCompare; } });
43
+ Object.defineProperty(exports, "estimatePasswordEntropy", { enumerable: true, get: function () { return index_js_3.estimatePasswordEntropy; } });
44
+ Object.defineProperty(exports, "normalizePassword", { enumerable: true, get: function () { return index_js_3.normalizePassword; } });
@@ -4,11 +4,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.JWTManager = void 0;
7
+ const errors_1 = require("@naman_deep_singh/errors");
8
+ const utils_1 = require("@naman_deep_singh/utils");
7
9
  const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
8
- const signToken_1 = require("./signToken");
9
- const verify_1 = require("./verify");
10
- const errors_utils_1 = require("@naman_deep_singh/errors-utils");
11
- const js_extensions_1 = require("@naman_deep_singh/js-extensions");
10
+ const signToken_js_1 = require("./signToken.js");
11
+ const verify_js_1 = require("./verify.js");
12
12
  class JWTManager {
13
13
  constructor(config) {
14
14
  this.accessSecret = config.accessSecret;
@@ -17,7 +17,7 @@ class JWTManager {
17
17
  this.refreshExpiry = config.refreshExpiry || '7d';
18
18
  this.cacheTTL = 5 * 60 * 1000; // 5 minutes
19
19
  if (config.enableCaching) {
20
- this.cache = new js_extensions_1.LRUCache(config.maxCacheSize || 100);
20
+ this.cache = new utils_1.LRUCache(config.maxCacheSize || 100);
21
21
  }
22
22
  }
23
23
  /** Generate both access and refresh tokens */
@@ -29,39 +29,39 @@ class JWTManager {
29
29
  return { accessToken, refreshToken };
30
30
  }
31
31
  catch (error) {
32
- if (error instanceof errors_utils_1.BadRequestError || error instanceof errors_utils_1.ValidationError)
32
+ if (error instanceof errors_1.BadRequestError || error instanceof errors_1.ValidationError)
33
33
  throw error;
34
- throw new errors_utils_1.BadRequestError({ reason: 'Failed to generate tokens' }, error instanceof Error ? error : undefined);
34
+ throw new errors_1.BadRequestError({ reason: 'Failed to generate tokens' }, error instanceof Error ? error : undefined);
35
35
  }
36
36
  }
37
37
  /** Generate access token */
38
38
  async generateAccessToken(payload) {
39
39
  try {
40
40
  this.validatePayload(payload);
41
- const token = (0, signToken_1.signToken)(payload, this.accessSecret, this.accessExpiry, {
41
+ const token = (0, signToken_js_1.signToken)(payload, this.accessSecret, this.accessExpiry, {
42
42
  algorithm: 'HS256',
43
43
  });
44
44
  return token;
45
45
  }
46
46
  catch (error) {
47
- if (error instanceof errors_utils_1.BadRequestError || error instanceof errors_utils_1.ValidationError)
47
+ if (error instanceof errors_1.BadRequestError || error instanceof errors_1.ValidationError)
48
48
  throw error;
49
- throw new errors_utils_1.BadRequestError({ reason: 'Failed to generate access token' }, error instanceof Error ? error : undefined);
49
+ throw new errors_1.BadRequestError({ reason: 'Failed to generate access token' }, error instanceof Error ? error : undefined);
50
50
  }
51
51
  }
52
52
  /** Generate refresh token */
53
53
  async generateRefreshToken(payload) {
54
54
  try {
55
55
  this.validatePayload(payload);
56
- const token = (0, signToken_1.signToken)(payload, this.refreshSecret, this.refreshExpiry, {
56
+ const token = (0, signToken_js_1.signToken)(payload, this.refreshSecret, this.refreshExpiry, {
57
57
  algorithm: 'HS256',
58
58
  });
59
59
  return token;
60
60
  }
61
61
  catch (error) {
62
- if (error instanceof errors_utils_1.BadRequestError || error instanceof errors_utils_1.ValidationError)
62
+ if (error instanceof errors_1.BadRequestError || error instanceof errors_1.ValidationError)
63
63
  throw error;
64
- throw new errors_utils_1.BadRequestError({ reason: 'Failed to generate refresh token' }, error instanceof Error ? error : undefined);
64
+ throw new errors_1.BadRequestError({ reason: 'Failed to generate refresh token' }, error instanceof Error ? error : undefined);
65
65
  }
66
66
  }
67
67
  /** Verify access token */
@@ -91,12 +91,12 @@ class JWTManager {
91
91
  validateToken(token, secret) {
92
92
  if (!token || typeof token !== 'string')
93
93
  return false;
94
- return (0, verify_1.safeVerifyToken)(token, secret).valid;
94
+ return (0, verify_js_1.safeVerifyToken)(token, secret).valid;
95
95
  }
96
96
  /** Rotate refresh token */
97
97
  async rotateRefreshToken(oldToken) {
98
98
  if (!oldToken || typeof oldToken !== 'string') {
99
- throw new errors_utils_1.ValidationError({
99
+ throw new errors_1.ValidationError({
100
100
  reason: 'Old refresh token must be a non-empty string',
101
101
  });
102
102
  }
@@ -104,7 +104,7 @@ class JWTManager {
104
104
  const payload = { ...decoded };
105
105
  delete payload.iat;
106
106
  delete payload.exp;
107
- const newToken = (0, signToken_1.signToken)(payload, this.refreshSecret, this.refreshExpiry);
107
+ const newToken = (0, signToken_js_1.signToken)(payload, this.refreshSecret, this.refreshExpiry);
108
108
  return newToken;
109
109
  }
110
110
  /** Check if token is expired */
@@ -144,17 +144,17 @@ class JWTManager {
144
144
  /** Private helper methods */
145
145
  validatePayload(payload) {
146
146
  if (!payload || typeof payload !== 'object') {
147
- throw new errors_utils_1.ValidationError({
147
+ throw new errors_1.ValidationError({
148
148
  reason: 'Payload must be a non-null object',
149
149
  });
150
150
  }
151
151
  if (Object.keys(payload).length === 0) {
152
- throw new errors_utils_1.ValidationError({ reason: 'Payload cannot be empty' });
152
+ throw new errors_1.ValidationError({ reason: 'Payload cannot be empty' });
153
153
  }
154
154
  }
155
155
  async verifyTokenWithCache(token, secret, type) {
156
156
  if (!token || typeof token !== 'string') {
157
- throw new errors_utils_1.ValidationError({
157
+ throw new errors_1.ValidationError({
158
158
  reason: `${type} token must be a non-empty string`,
159
159
  });
160
160
  }
@@ -163,20 +163,20 @@ class JWTManager {
163
163
  const cached = this.cache.get(cacheKey);
164
164
  if (cached && Date.now() - cached.timestamp <= this.cacheTTL) {
165
165
  if (!cached.valid)
166
- throw new errors_utils_1.UnauthorizedError({
166
+ throw new errors_1.UnauthorizedError({
167
167
  reason: `${type} token is invalid or expired`,
168
168
  });
169
169
  return cached.payload;
170
170
  }
171
171
  }
172
- const { valid, payload, error } = (0, verify_1.safeVerifyToken)(token, secret);
172
+ const { valid, payload, error } = (0, verify_js_1.safeVerifyToken)(token, secret);
173
173
  if (!valid || !payload || typeof payload === 'string') {
174
174
  this.cache?.set(cacheKey, {
175
175
  valid: false,
176
176
  payload: {},
177
177
  timestamp: Date.now(),
178
178
  });
179
- throw new errors_utils_1.UnauthorizedError({
179
+ throw new errors_1.UnauthorizedError({
180
180
  reason: `${type} token is invalid or expired`,
181
181
  cause: error,
182
182
  });
@@ -2,8 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.decodeToken = decodeToken;
4
4
  exports.decodeTokenStrict = decodeTokenStrict;
5
- const errors_utils_1 = require("@naman_deep_singh/errors-utils");
6
- // src/jwt/decodeToken.ts
5
+ const errors_1 = require("@naman_deep_singh/errors");
7
6
  const jsonwebtoken_1 = require("jsonwebtoken");
8
7
  /**
9
8
  * Flexible decode
@@ -20,7 +19,7 @@ function decodeToken(token) {
20
19
  function decodeTokenStrict(token) {
21
20
  const decoded = (0, jsonwebtoken_1.decode)(token);
22
21
  if (!decoded || typeof decoded === 'string') {
23
- throw new errors_utils_1.BadRequestError({
22
+ throw new errors_1.BadRequestError({
24
23
  reason: 'Invalid JWT payload structure',
25
24
  });
26
25
  }
@@ -2,18 +2,18 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateTokens = void 0;
4
4
  exports.rotateRefreshToken = rotateRefreshToken;
5
- const errors_utils_1 = require("@naman_deep_singh/errors-utils");
6
- const signToken_1 = require("./signToken");
7
- const verify_1 = require("./verify");
5
+ const errors_1 = require("@naman_deep_singh/errors");
6
+ const signToken_js_1 = require("./signToken.js");
7
+ const verify_js_1 = require("./verify.js");
8
8
  // Helper function to create branded tokens
9
9
  /* const createBrandedToken = <T extends string>(token: string, _brand: T): T => {
10
10
  return token as T
11
11
  } */
12
12
  const generateTokens = (payload, accessSecret, refreshSecret, accessExpiry = '15m', refreshExpiry = '7d') => {
13
- const accessToken = (0, signToken_1.signToken)(payload, accessSecret, accessExpiry, {
13
+ const accessToken = (0, signToken_js_1.signToken)(payload, accessSecret, accessExpiry, {
14
14
  algorithm: 'HS256',
15
15
  });
16
- const refreshToken = (0, signToken_1.signToken)(payload, refreshSecret, refreshExpiry, {
16
+ const refreshToken = (0, signToken_js_1.signToken)(payload, refreshSecret, refreshExpiry, {
17
17
  algorithm: 'HS256',
18
18
  });
19
19
  return {
@@ -23,15 +23,15 @@ const generateTokens = (payload, accessSecret, refreshSecret, accessExpiry = '15
23
23
  };
24
24
  exports.generateTokens = generateTokens;
25
25
  function rotateRefreshToken(oldToken, secret) {
26
- const decoded = (0, verify_1.verifyToken)(oldToken, secret);
26
+ const decoded = (0, verify_js_1.verifyToken)(oldToken, secret);
27
27
  if (typeof decoded === 'string') {
28
- throw new errors_utils_1.TokenMalformedError({
28
+ throw new errors_1.TokenMalformedError({
29
29
  reason: 'Invalid token payload — expected JWT payload object',
30
30
  });
31
31
  }
32
32
  const payload = { ...decoded };
33
33
  delete payload.iat;
34
34
  delete payload.exp;
35
- const newToken = (0, signToken_1.signToken)(payload, secret, '7d');
35
+ const newToken = (0, signToken_js_1.signToken)(payload, secret, '7d');
36
36
  return newToken;
37
37
  }
@@ -1,24 +1,25 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
2
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./decode"), exports);
18
- __exportStar(require("./extractToken"), exports);
19
- __exportStar(require("./generateTokens"), exports);
20
- __exportStar(require("./parseDuration"), exports);
21
- __exportStar(require("./signToken"), exports);
22
- __exportStar(require("./types"), exports);
23
- __exportStar(require("./validateToken"), exports);
24
- __exportStar(require("./verify"), exports);
3
+ exports.JWTManager = exports.safeVerifyTokenWithOptions = exports.safeVerifyToken = exports.verifyTokenWithOptions = exports.verifyToken = exports.isTokenExpired = exports.validateTokenPayload = exports.signToken = exports.parseDuration = exports.rotateRefreshToken = exports.generateTokens = exports.extractToken = exports.decodeTokenStrict = exports.decodeToken = void 0;
4
+ var decode_js_1 = require("./decode.js");
5
+ Object.defineProperty(exports, "decodeToken", { enumerable: true, get: function () { return decode_js_1.decodeToken; } });
6
+ Object.defineProperty(exports, "decodeTokenStrict", { enumerable: true, get: function () { return decode_js_1.decodeTokenStrict; } });
7
+ var extractToken_js_1 = require("./extractToken.js");
8
+ Object.defineProperty(exports, "extractToken", { enumerable: true, get: function () { return extractToken_js_1.extractToken; } });
9
+ var generateTokens_js_1 = require("./generateTokens.js");
10
+ Object.defineProperty(exports, "generateTokens", { enumerable: true, get: function () { return generateTokens_js_1.generateTokens; } });
11
+ Object.defineProperty(exports, "rotateRefreshToken", { enumerable: true, get: function () { return generateTokens_js_1.rotateRefreshToken; } });
12
+ var parseDuration_js_1 = require("./parseDuration.js");
13
+ Object.defineProperty(exports, "parseDuration", { enumerable: true, get: function () { return parseDuration_js_1.parseDuration; } });
14
+ var signToken_js_1 = require("./signToken.js");
15
+ Object.defineProperty(exports, "signToken", { enumerable: true, get: function () { return signToken_js_1.signToken; } });
16
+ var validateToken_js_1 = require("./validateToken.js");
17
+ Object.defineProperty(exports, "validateTokenPayload", { enumerable: true, get: function () { return validateToken_js_1.validateTokenPayload; } });
18
+ Object.defineProperty(exports, "isTokenExpired", { enumerable: true, get: function () { return validateToken_js_1.isTokenExpired; } });
19
+ var verify_js_1 = require("./verify.js");
20
+ Object.defineProperty(exports, "verifyToken", { enumerable: true, get: function () { return verify_js_1.verifyToken; } });
21
+ Object.defineProperty(exports, "verifyTokenWithOptions", { enumerable: true, get: function () { return verify_js_1.verifyTokenWithOptions; } });
22
+ Object.defineProperty(exports, "safeVerifyToken", { enumerable: true, get: function () { return verify_js_1.safeVerifyToken; } });
23
+ Object.defineProperty(exports, "safeVerifyTokenWithOptions", { enumerable: true, get: function () { return verify_js_1.safeVerifyTokenWithOptions; } });
24
+ var JWTManager_js_1 = require("./JWTManager.js");
25
+ Object.defineProperty(exports, "JWTManager", { enumerable: true, get: function () { return JWTManager_js_1.JWTManager; } });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseDuration = parseDuration;
4
- const errors_utils_1 = require("@naman_deep_singh/errors-utils");
4
+ const errors_1 = require("@naman_deep_singh/errors");
5
5
  const TIME_UNITS = {
6
6
  s: 1,
7
7
  m: 60,
@@ -19,12 +19,12 @@ function parseDuration(input) {
19
19
  const value = Number.parseInt(match[1], 10);
20
20
  const unit = match[2].toLowerCase();
21
21
  if (!TIME_UNITS[unit]) {
22
- throw new errors_utils_1.ValidationError({ reason: `Invalid time unit: ${unit}` });
22
+ throw new errors_1.ValidationError({ reason: `Invalid time unit: ${unit}` });
23
23
  }
24
24
  totalSeconds += value * TIME_UNITS[unit];
25
25
  }
26
26
  if (totalSeconds === 0) {
27
- throw new errors_utils_1.ValidationError({ reason: `Invalid expiry format: "${input}"` });
27
+ throw new errors_1.ValidationError({ reason: `Invalid expiry format: "${input}"` });
28
28
  }
29
29
  return totalSeconds;
30
30
  }
@@ -1,16 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.signToken = void 0;
4
- const errors_utils_1 = require("@naman_deep_singh/errors-utils");
4
+ const errors_1 = require("@naman_deep_singh/errors");
5
5
  const jsonwebtoken_1 = require("jsonwebtoken");
6
- const parseDuration_1 = require("./parseDuration");
6
+ const parseDuration_js_1 = require("./parseDuration.js");
7
7
  function getExpiryTimestamp(seconds) {
8
8
  return Math.floor(Date.now() / 1000) + seconds;
9
9
  }
10
10
  const signToken = (payload, secret, expiresIn = '1h', options = {}) => {
11
- const seconds = (0, parseDuration_1.parseDuration)(expiresIn);
11
+ const seconds = (0, parseDuration_js_1.parseDuration)(expiresIn);
12
12
  if (!seconds || seconds < 10) {
13
- throw new errors_utils_1.ValidationError({ reason: 'Token expiry too small' });
13
+ throw new errors_1.ValidationError({ reason: 'Token expiry too small' });
14
14
  }
15
15
  const tokenPayload = {
16
16
  ...payload,
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validateTokenPayload = validateTokenPayload;
4
4
  exports.isTokenExpired = isTokenExpired;
5
- const errors_utils_1 = require("@naman_deep_singh/errors-utils");
5
+ const errors_1 = require("@naman_deep_singh/errors");
6
6
  /**
7
7
  * Validates a JWT payload according to the provided rules.
8
8
  * Throws ValidationError if validation fails.
@@ -12,7 +12,7 @@ function validateTokenPayload(payload, rules = { requiredFields: ['exp', 'iat']
12
12
  // 1. Required fields
13
13
  for (const field of requiredFields) {
14
14
  if (!(field in payload)) {
15
- throw new errors_utils_1.ValidationError({
15
+ throw new errors_1.ValidationError({
16
16
  reason: `Missing required field: ${field}`,
17
17
  });
18
18
  }
@@ -20,7 +20,7 @@ function validateTokenPayload(payload, rules = { requiredFields: ['exp', 'iat']
20
20
  // 2. Forbidden fields
21
21
  for (const field of forbiddenFields) {
22
22
  if (field in payload) {
23
- throw new errors_utils_1.ValidationError({
23
+ throw new errors_1.ValidationError({
24
24
  reason: `Forbidden field in token: ${field}`,
25
25
  });
26
26
  }
@@ -29,7 +29,7 @@ function validateTokenPayload(payload, rules = { requiredFields: ['exp', 'iat']
29
29
  for (const key in validateTypes) {
30
30
  const expectedType = validateTypes[key];
31
31
  if (key in payload && typeof payload[key] !== expectedType) {
32
- throw new errors_utils_1.ValidationError({
32
+ throw new errors_1.ValidationError({
33
33
  reason: `Invalid type for ${key}. Expected ${expectedType}, got ${typeof payload[key]}`,
34
34
  });
35
35
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.safeVerifyTokenWithOptions = exports.safeVerifyToken = exports.verifyTokenWithOptions = exports.verifyToken = void 0;
4
- const errors_utils_1 = require("@naman_deep_singh/errors-utils");
4
+ const errors_1 = require("@naman_deep_singh/errors");
5
5
  const jsonwebtoken_1 = require("jsonwebtoken");
6
6
  /**
7
7
  * Verify token (throws UnauthorizedError if invalid or expired)
@@ -12,12 +12,12 @@ const verifyToken = (token, secret) => {
12
12
  }
13
13
  catch (error) {
14
14
  if (error.name === 'TokenExpiredError') {
15
- throw new errors_utils_1.UnauthorizedError({ reason: 'Token has expired' }, error);
15
+ throw new errors_1.UnauthorizedError({ reason: 'Token has expired' }, error);
16
16
  }
17
17
  if (error.name === 'JsonWebTokenError') {
18
- throw new errors_utils_1.UnauthorizedError({ reason: 'Invalid token' }, error);
18
+ throw new errors_1.UnauthorizedError({ reason: 'Invalid token' }, error);
19
19
  }
20
- throw new errors_utils_1.UnauthorizedError({ reason: 'Failed to verify token' }, error);
20
+ throw new errors_1.UnauthorizedError({ reason: 'Failed to verify token' }, error);
21
21
  }
22
22
  };
23
23
  exports.verifyToken = verifyToken;
@@ -30,12 +30,12 @@ const verifyTokenWithOptions = (token, secret, options = {}) => {
30
30
  }
31
31
  catch (error) {
32
32
  if (error.name === 'TokenExpiredError') {
33
- throw new errors_utils_1.UnauthorizedError({ reason: 'Token has expired' }, error);
33
+ throw new errors_1.UnauthorizedError({ reason: 'Token has expired' }, error);
34
34
  }
35
35
  if (error.name === 'JsonWebTokenError') {
36
- throw new errors_utils_1.UnauthorizedError({ reason: 'Invalid token' }, error);
36
+ throw new errors_1.UnauthorizedError({ reason: 'Invalid token' }, error);
37
37
  }
38
- throw new errors_utils_1.UnauthorizedError({ reason: 'Failed to verify token' }, error);
38
+ throw new errors_1.UnauthorizedError({ reason: 'Failed to verify token' }, error);
39
39
  }
40
40
  };
41
41
  exports.verifyTokenWithOptions = verifyTokenWithOptions;
@@ -50,13 +50,13 @@ const safeVerifyToken = (token, secret) => {
50
50
  catch (error) {
51
51
  let wrappedError;
52
52
  if (error.name === 'TokenExpiredError') {
53
- wrappedError = new errors_utils_1.UnauthorizedError({ reason: 'Token has expired' }, error);
53
+ wrappedError = new errors_1.UnauthorizedError({ reason: 'Token has expired' }, error);
54
54
  }
55
55
  else if (error.name === 'JsonWebTokenError') {
56
- wrappedError = new errors_utils_1.UnauthorizedError({ reason: 'Invalid token' }, error);
56
+ wrappedError = new errors_1.UnauthorizedError({ reason: 'Invalid token' }, error);
57
57
  }
58
58
  else {
59
- wrappedError = new errors_utils_1.UnauthorizedError({ reason: 'Failed to verify token' }, error);
59
+ wrappedError = new errors_1.UnauthorizedError({ reason: 'Failed to verify token' }, error);
60
60
  }
61
61
  return { valid: false, error: wrappedError };
62
62
  }
@@ -73,15 +73,15 @@ const safeVerifyTokenWithOptions = (token, secret, options = {}) => {
73
73
  catch (error) {
74
74
  let wrappedError;
75
75
  if (error.name === 'TokenExpiredError') {
76
- wrappedError = new errors_utils_1.UnauthorizedError({ reason: 'Token has expired' }, error instanceof Error ? error : undefined);
76
+ wrappedError = new errors_1.UnauthorizedError({ reason: 'Token has expired' }, error instanceof Error ? error : undefined);
77
77
  }
78
78
  else if (error.name === 'JsonWebTokenError') {
79
- wrappedError = new errors_utils_1.UnauthorizedError({
79
+ wrappedError = new errors_1.UnauthorizedError({
80
80
  reason: 'Invalid token',
81
81
  }, error instanceof Error ? error : undefined);
82
82
  }
83
83
  else {
84
- wrappedError = new errors_utils_1.UnauthorizedError({ reason: 'Failed to verify token' }, error instanceof Error ? error : undefined);
84
+ wrappedError = new errors_1.UnauthorizedError({ reason: 'Failed to verify token' }, error instanceof Error ? error : undefined);
85
85
  }
86
86
  return { valid: false, error: wrappedError };
87
87
  }