hi-secure 1.0.14 → 1.0.16

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 (99) hide show
  1. package/dist/adapters/ArgonAdapter.d.ts +1 -1
  2. package/dist/adapters/ArgonAdapter.d.ts.map +1 -1
  3. package/dist/adapters/ArgonAdapter.js +43 -5
  4. package/dist/adapters/ArgonAdapter.js.map +1 -1
  5. package/dist/adapters/BcryptAdapter.d.ts.map +1 -1
  6. package/dist/adapters/BcryptAdapter.js +43 -3
  7. package/dist/adapters/BcryptAdapter.js.map +1 -1
  8. package/dist/adapters/ExpressRLAdapter.d.ts.map +1 -1
  9. package/dist/adapters/ExpressRLAdapter.js +48 -6
  10. package/dist/adapters/ExpressRLAdapter.js.map +1 -1
  11. package/dist/adapters/ExpressValidatorAdapter.d.ts.map +1 -1
  12. package/dist/adapters/ExpressValidatorAdapter.js +50 -10
  13. package/dist/adapters/ExpressValidatorAdapter.js.map +1 -1
  14. package/dist/adapters/GoogleAdapter.d.ts.map +1 -1
  15. package/dist/adapters/GoogleAdapter.js +82 -16
  16. package/dist/adapters/GoogleAdapter.js.map +1 -1
  17. package/dist/adapters/JWTAdapter.d.ts.map +1 -1
  18. package/dist/adapters/JWTAdapter.js +104 -15
  19. package/dist/adapters/JWTAdapter.js.map +1 -1
  20. package/dist/adapters/RLFlexibleAdapter.d.ts.map +1 -1
  21. package/dist/adapters/RLFlexibleAdapter.js +87 -12
  22. package/dist/adapters/RLFlexibleAdapter.js.map +1 -1
  23. package/dist/adapters/SanitizeHtmlAdapter.d.ts.map +1 -1
  24. package/dist/adapters/SanitizeHtmlAdapter.js +81 -13
  25. package/dist/adapters/SanitizeHtmlAdapter.js.map +1 -1
  26. package/dist/adapters/XSSAdapter.d.ts +1 -1
  27. package/dist/adapters/XSSAdapter.d.ts.map +1 -1
  28. package/dist/adapters/XSSAdapter.js +137 -20
  29. package/dist/adapters/XSSAdapter.js.map +1 -1
  30. package/dist/adapters/ZodAdapter.d.ts +1 -1
  31. package/dist/adapters/ZodAdapter.d.ts.map +1 -1
  32. package/dist/adapters/ZodAdapter.js +13 -8
  33. package/dist/adapters/ZodAdapter.js.map +1 -1
  34. package/dist/core/HiSecure.d.ts +3 -4
  35. package/dist/core/HiSecure.d.ts.map +1 -1
  36. package/dist/core/HiSecure.js +108 -121
  37. package/dist/core/HiSecure.js.map +1 -1
  38. package/dist/index.d.ts +2 -0
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +8 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/logging/index.d.ts.map +1 -1
  43. package/dist/logging/index.js +2 -0
  44. package/dist/logging/index.js.map +1 -1
  45. package/dist/logging/morganSetup.d.ts.map +1 -1
  46. package/dist/logging/morganSetup.js +22 -1
  47. package/dist/logging/morganSetup.js.map +1 -1
  48. package/dist/logging/winstonSetup.d.ts.map +1 -1
  49. package/dist/logging/winstonSetup.js +61 -3
  50. package/dist/logging/winstonSetup.js.map +1 -1
  51. package/dist/managers/AuthManager.d.ts +2 -2
  52. package/dist/managers/AuthManager.d.ts.map +1 -1
  53. package/dist/managers/AuthManager.js +167 -31
  54. package/dist/managers/AuthManager.js.map +1 -1
  55. package/dist/managers/CorsManager.d.ts.map +1 -1
  56. package/dist/managers/CorsManager.js +46 -11
  57. package/dist/managers/CorsManager.js.map +1 -1
  58. package/dist/managers/HashManager.d.ts +1 -1
  59. package/dist/managers/HashManager.d.ts.map +1 -1
  60. package/dist/managers/HashManager.js +127 -17
  61. package/dist/managers/HashManager.js.map +1 -1
  62. package/dist/managers/JsonManager.d.ts +1 -1
  63. package/dist/managers/JsonManager.d.ts.map +1 -1
  64. package/dist/managers/JsonManager.js +99 -16
  65. package/dist/managers/JsonManager.js.map +1 -1
  66. package/dist/managers/RateLimitManager.d.ts +1 -1
  67. package/dist/managers/RateLimitManager.d.ts.map +1 -1
  68. package/dist/managers/RateLimitManager.js +46 -22
  69. package/dist/managers/RateLimitManager.js.map +1 -1
  70. package/dist/managers/SanitizerManager.d.ts.map +1 -1
  71. package/dist/managers/SanitizerManager.js +112 -15
  72. package/dist/managers/SanitizerManager.js.map +1 -1
  73. package/dist/managers/ValidatorManager.d.ts.map +1 -1
  74. package/dist/managers/ValidatorManager.js +90 -7
  75. package/dist/managers/ValidatorManager.js.map +1 -1
  76. package/package.json +19 -1
  77. package/readme.md +3 -6
  78. package/src/adapters/ArgonAdapter.ts +55 -6
  79. package/src/adapters/BcryptAdapter.ts +56 -8
  80. package/src/adapters/ExpressRLAdapter.ts +62 -9
  81. package/src/adapters/ExpressValidatorAdapter.ts +67 -11
  82. package/src/adapters/GoogleAdapter.ts +106 -21
  83. package/src/adapters/JWTAdapter.ts +129 -21
  84. package/src/adapters/RLFlexibleAdapter.ts +113 -16
  85. package/src/adapters/SanitizeHtmlAdapter.ts +111 -18
  86. package/src/adapters/XSSAdapter.ts +183 -39
  87. package/src/adapters/ZodAdapter.ts +56 -10
  88. package/src/core/HiSecure.ts +496 -162
  89. package/src/index.ts +4 -0
  90. package/src/logging/index.ts +6 -0
  91. package/src/logging/morganSetup.ts +36 -1
  92. package/src/logging/winstonSetup.ts +97 -8
  93. package/src/managers/AuthManager.ts +205 -34
  94. package/src/managers/CorsManager.ts +63 -16
  95. package/src/managers/HashManager.ts +156 -19
  96. package/src/managers/JsonManager.ts +119 -15
  97. package/src/managers/RateLimitManager.ts +174 -29
  98. package/src/managers/SanitizerManager.ts +150 -25
  99. package/src/managers/ValidatorManager.ts +115 -15
@@ -1,6 +1,6 @@
1
1
  import argon2 from "argon2";
2
2
  export declare class ArgonAdapter {
3
- private options;
3
+ private options?;
4
4
  constructor(options?: argon2.Options);
5
5
  hash(value: string): Promise<string>;
6
6
  verify(value: string, hashed: string): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"ArgonAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ArgonAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAI5B,qBAAa,YAAY;IACrB,OAAO,CAAC,OAAO,CAA6B;gBAEhC,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO;IAM9B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAapC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAchE"}
1
+ {"version":3,"file":"ArgonAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ArgonAdapter.ts"],"names":[],"mappings":"AA6CA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAI5B,qBAAa,YAAY;IACrB,OAAO,CAAC,OAAO,CAAC,CAAiB;gBAErB,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO;IAI9B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBpC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAiBhE"}
@@ -1,17 +1,51 @@
1
1
  "use strict";
2
+ // import argon2 from "argon2";
3
+ // import { AdapterError } from "../core/errors/AdapterError";
4
+ // import { logger } from "../logging";
2
5
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
6
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
7
  };
5
8
  Object.defineProperty(exports, "__esModule", { value: true });
6
9
  exports.ArgonAdapter = void 0;
10
+ // export class ArgonAdapter {
11
+ // private options: argon2.Options | undefined;
12
+ // constructor(options?: argon2.Options) {
13
+ // if (options) {
14
+ // this.options = options;
15
+ // }
16
+ // }
17
+ // async hash(value: string): Promise<string> {
18
+ // try {
19
+ // return this.options
20
+ // ? await argon2.hash(value, this.options)
21
+ // : await argon2.hash(value);
22
+ // } catch (err: any) {
23
+ // logger.error("Argon2 hashing failed", {
24
+ // error: err?.message || err
25
+ // });
26
+ // throw new AdapterError("Argon2 hashing failed.");
27
+ // }
28
+ // }
29
+ // async verify(value: string, hashed: string): Promise<boolean> {
30
+ // try {
31
+ // if (!hashed || typeof hashed !== "string") {
32
+ // throw new AdapterError("Invalid hash provided for verification.");
33
+ // }
34
+ // return await argon2.verify(hashed, value);
35
+ // } catch (err: any) {
36
+ // logger.error("Argon2 verify failed", {
37
+ // error: err?.message || err
38
+ // });
39
+ // throw new AdapterError("Argon2 verify failed.");
40
+ // }
41
+ // }
42
+ // }
7
43
  const argon2_1 = __importDefault(require("argon2"));
8
44
  const AdapterError_1 = require("../core/errors/AdapterError");
9
45
  const logging_1 = require("../logging");
10
46
  class ArgonAdapter {
11
47
  constructor(options) {
12
- if (options) {
13
- this.options = options;
14
- }
48
+ this.options = options;
15
49
  }
16
50
  async hash(value) {
17
51
  try {
@@ -21,7 +55,9 @@ class ArgonAdapter {
21
55
  }
22
56
  catch (err) {
23
57
  logging_1.logger.error("Argon2 hashing failed", {
24
- error: err?.message || err
58
+ adapter: "argon2",
59
+ operation: "hash",
60
+ reason: err?.message
25
61
  });
26
62
  throw new AdapterError_1.AdapterError("Argon2 hashing failed.");
27
63
  }
@@ -35,7 +71,9 @@ class ArgonAdapter {
35
71
  }
36
72
  catch (err) {
37
73
  logging_1.logger.error("Argon2 verify failed", {
38
- error: err?.message || err
74
+ adapter: "argon2",
75
+ operation: "verify",
76
+ reason: err?.message
39
77
  });
40
78
  throw new AdapterError_1.AdapterError("Argon2 verify failed.");
41
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ArgonAdapter.js","sourceRoot":"","sources":["../../src/adapters/ArgonAdapter.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,8DAA2D;AAC3D,wCAAoC;AAEpC,MAAa,YAAY;IAGrB,YAAY,OAAwB;QAChC,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAC3B,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAa;QACpB,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,OAAO;gBACf,CAAC,CAAC,MAAM,gBAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;gBACxC,CAAC,CAAC,MAAM,gBAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,gBAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;gBAClC,KAAK,EAAE,GAAG,EAAE,OAAO,IAAI,GAAG;aAC7B,CAAC,CAAC;YACH,MAAM,IAAI,2BAAY,CAAC,wBAAwB,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,MAAc;QACtC,IAAI,CAAC;YACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxC,MAAM,IAAI,2BAAY,CAAC,yCAAyC,CAAC,CAAC;YACtE,CAAC;YAED,OAAO,MAAM,gBAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,gBAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE;gBACjC,KAAK,EAAE,GAAG,EAAE,OAAO,IAAI,GAAG;aAC7B,CAAC,CAAC;YACH,MAAM,IAAI,2BAAY,CAAC,uBAAuB,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;CACJ;AApCD,oCAoCC","sourcesContent":["import argon2 from \"argon2\";\r\nimport { AdapterError } from \"../core/errors/AdapterError\";\r\nimport { logger } from \"../logging\";\r\n\r\nexport class ArgonAdapter {\r\n private options: argon2.Options | undefined;\r\n\r\n constructor(options?: argon2.Options) {\r\n if (options) {\r\n this.options = options;\r\n }\r\n }\r\n\r\n async hash(value: string): Promise<string> {\r\n try {\r\n return this.options\r\n ? await argon2.hash(value, this.options)\r\n : await argon2.hash(value);\r\n } catch (err: any) {\r\n logger.error(\"Argon2 hashing failed\", {\r\n error: err?.message || err\r\n });\r\n throw new AdapterError(\"Argon2 hashing failed.\");\r\n }\r\n }\r\n\r\n async verify(value: string, hashed: string): Promise<boolean> {\r\n try {\r\n if (!hashed || typeof hashed !== \"string\") {\r\n throw new AdapterError(\"Invalid hash provided for verification.\");\r\n }\r\n\r\n return await argon2.verify(hashed, value);\r\n } catch (err: any) {\r\n logger.error(\"Argon2 verify failed\", {\r\n error: err?.message || err\r\n });\r\n throw new AdapterError(\"Argon2 verify failed.\");\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ArgonAdapter.js","sourceRoot":"","sources":["../../src/adapters/ArgonAdapter.ts"],"names":[],"mappings":";AAAA,+BAA+B;AAC/B,8DAA8D;AAC9D,uCAAuC;;;;;;AAEvC,8BAA8B;AAC9B,mDAAmD;AAEnD,8CAA8C;AAC9C,yBAAyB;AACzB,sCAAsC;AACtC,YAAY;AACZ,QAAQ;AAER,mDAAmD;AACnD,gBAAgB;AAChB,kCAAkC;AAClC,2DAA2D;AAC3D,8CAA8C;AAC9C,+BAA+B;AAC/B,sDAAsD;AACtD,6CAA6C;AAC7C,kBAAkB;AAClB,gEAAgE;AAChE,YAAY;AACZ,QAAQ;AAER,sEAAsE;AACtE,gBAAgB;AAChB,2DAA2D;AAC3D,qFAAqF;AACrF,gBAAgB;AAEhB,yDAAyD;AACzD,+BAA+B;AAC/B,qDAAqD;AACrD,6CAA6C;AAC7C,kBAAkB;AAClB,+DAA+D;AAC/D,YAAY;AACZ,QAAQ;AACR,IAAI;AAKJ,oDAA4B;AAC5B,8DAA2D;AAC3D,wCAAoC;AAEpC,MAAa,YAAY;IAGrB,YAAY,OAAwB;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAa;QACpB,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,OAAO;gBACf,CAAC,CAAC,MAAM,gBAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;gBACxC,CAAC,CAAC,MAAM,gBAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,gBAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;gBAClC,OAAO,EAAE,QAAQ;gBACjB,SAAS,EAAE,MAAM;gBACjB,MAAM,EAAE,GAAG,EAAE,OAAO;aACvB,CAAC,CAAC;YAEH,MAAM,IAAI,2BAAY,CAAC,wBAAwB,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,MAAc;QACtC,IAAI,CAAC;YACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxC,MAAM,IAAI,2BAAY,CAAC,yCAAyC,CAAC,CAAC;YACtE,CAAC;YAED,OAAO,MAAM,gBAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,gBAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE;gBACjC,OAAO,EAAE,QAAQ;gBACjB,SAAS,EAAE,QAAQ;gBACnB,MAAM,EAAE,GAAG,EAAE,OAAO;aACvB,CAAC,CAAC;YAEH,MAAM,IAAI,2BAAY,CAAC,uBAAuB,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;CACJ;AAxCD,oCAwCC","sourcesContent":["// import argon2 from \"argon2\";\r\n// import { AdapterError } from \"../core/errors/AdapterError\";\r\n// import { logger } from \"../logging\";\r\n\r\n// export class ArgonAdapter {\r\n// private options: argon2.Options | undefined;\r\n\r\n// constructor(options?: argon2.Options) {\r\n// if (options) {\r\n// this.options = options;\r\n// }\r\n// }\r\n\r\n// async hash(value: string): Promise<string> {\r\n// try {\r\n// return this.options\r\n// ? await argon2.hash(value, this.options)\r\n// : await argon2.hash(value);\r\n// } catch (err: any) {\r\n// logger.error(\"Argon2 hashing failed\", {\r\n// error: err?.message || err\r\n// });\r\n// throw new AdapterError(\"Argon2 hashing failed.\");\r\n// }\r\n// }\r\n\r\n// async verify(value: string, hashed: string): Promise<boolean> {\r\n// try {\r\n// if (!hashed || typeof hashed !== \"string\") {\r\n// throw new AdapterError(\"Invalid hash provided for verification.\");\r\n// }\r\n\r\n// return await argon2.verify(hashed, value);\r\n// } catch (err: any) {\r\n// logger.error(\"Argon2 verify failed\", {\r\n// error: err?.message || err\r\n// });\r\n// throw new AdapterError(\"Argon2 verify failed.\");\r\n// }\r\n// }\r\n// }\r\n\r\n\r\n\r\n\r\nimport argon2 from \"argon2\";\r\nimport { AdapterError } from \"../core/errors/AdapterError\";\r\nimport { logger } from \"../logging\";\r\n\r\nexport class ArgonAdapter {\r\n private options?: argon2.Options;\r\n\r\n constructor(options?: argon2.Options) {\r\n this.options = options;\r\n }\r\n\r\n async hash(value: string): Promise<string> {\r\n try {\r\n return this.options\r\n ? await argon2.hash(value, this.options)\r\n : await argon2.hash(value);\r\n } catch (err: any) {\r\n logger.error(\"Argon2 hashing failed\", {\r\n adapter: \"argon2\",\r\n operation: \"hash\",\r\n reason: err?.message\r\n });\r\n\r\n throw new AdapterError(\"Argon2 hashing failed.\");\r\n }\r\n }\r\n\r\n async verify(value: string, hashed: string): Promise<boolean> {\r\n try {\r\n if (!hashed || typeof hashed !== \"string\") {\r\n throw new AdapterError(\"Invalid hash provided for verification.\");\r\n }\r\n\r\n return await argon2.verify(hashed, value);\r\n } catch (err: any) {\r\n logger.error(\"Argon2 verify failed\", {\r\n adapter: \"argon2\",\r\n operation: \"verify\",\r\n reason: err?.message\r\n });\r\n\r\n throw new AdapterError(\"Argon2 verify failed.\");\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"BcryptAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/BcryptAdapter.ts"],"names":[],"mappings":"AAIA,qBAAa,aAAa;IACV,OAAO,CAAC,UAAU;gBAAV,UAAU,GAAE,MAAW;IAErC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBpC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAmBhE"}
1
+ {"version":3,"file":"BcryptAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/BcryptAdapter.ts"],"names":[],"mappings":"AAqDA,qBAAa,aAAa;IACV,OAAO,CAAC,UAAU;gBAAV,UAAU,GAAE,MAAW;IAErC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBpC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAqBhE"}
@@ -1,9 +1,45 @@
1
1
  "use strict";
2
+ // import bcrypt from "bcryptjs";
3
+ // import { AdapterError } from "../core/errors/AdapterError";
4
+ // import { logger } from "../logging";
2
5
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
6
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
7
  };
5
8
  Object.defineProperty(exports, "__esModule", { value: true });
6
9
  exports.BcryptAdapter = void 0;
10
+ // export class BcryptAdapter {
11
+ // constructor(private saltRounds: number = 10) {}
12
+ // async hash(value: string): Promise<string> {
13
+ // try {
14
+ // if (typeof value !== "string") {
15
+ // throw new AdapterError("Value to hash must be a string.");
16
+ // }
17
+ // return await bcrypt.hash(value, this.saltRounds);
18
+ // } catch (err: any) {
19
+ // logger.error("Bcrypt hashing failed", {
20
+ // error: err?.message || err,
21
+ // saltRounds: this.saltRounds
22
+ // });
23
+ // throw new AdapterError("Bcrypt hashing failed.");
24
+ // }
25
+ // }
26
+ // async verify(value: string, hashed: string): Promise<boolean> {
27
+ // try {
28
+ // if (typeof value !== "string") {
29
+ // throw new AdapterError("Value to verify must be a string.");
30
+ // }
31
+ // if (!hashed || typeof hashed !== "string") {
32
+ // throw new AdapterError("Invalid hashed string provided.");
33
+ // }
34
+ // return await bcrypt.compare(value, hashed);
35
+ // } catch (err: any) {
36
+ // logger.error("Bcrypt verify failed", {
37
+ // error: err?.message || err
38
+ // });
39
+ // throw new AdapterError("Bcrypt verify failed.");
40
+ // }
41
+ // }
42
+ // }
7
43
  const bcryptjs_1 = __importDefault(require("bcryptjs"));
8
44
  const AdapterError_1 = require("../core/errors/AdapterError");
9
45
  const logging_1 = require("../logging");
@@ -20,8 +56,10 @@ class BcryptAdapter {
20
56
  }
21
57
  catch (err) {
22
58
  logging_1.logger.error("Bcrypt hashing failed", {
23
- error: err?.message || err,
24
- saltRounds: this.saltRounds
59
+ adapter: "bcrypt",
60
+ operation: "hash",
61
+ saltRounds: this.saltRounds,
62
+ reason: err?.message
25
63
  });
26
64
  throw new AdapterError_1.AdapterError("Bcrypt hashing failed.");
27
65
  }
@@ -38,7 +76,9 @@ class BcryptAdapter {
38
76
  }
39
77
  catch (err) {
40
78
  logging_1.logger.error("Bcrypt verify failed", {
41
- error: err?.message || err
79
+ adapter: "bcrypt",
80
+ operation: "verify",
81
+ reason: err?.message
42
82
  });
43
83
  throw new AdapterError_1.AdapterError("Bcrypt verify failed.");
44
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BcryptAdapter.js","sourceRoot":"","sources":["../../src/adapters/BcryptAdapter.ts"],"names":[],"mappings":";;;;;;AAAA,wDAA8B;AAC9B,8DAA2D;AAC3D,wCAAoC;AAEpC,MAAa,aAAa;IACtB,YAAoB,aAAqB,EAAE;QAAvB,eAAU,GAAV,UAAU,CAAa;IAAG,CAAC;IAE/C,KAAK,CAAC,IAAI,CAAC,KAAa;QACpB,IAAI,CAAC;YACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,IAAI,2BAAY,CAAC,iCAAiC,CAAC,CAAC;YAC9D,CAAC;YAED,OAAO,MAAM,kBAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,gBAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;gBAClC,KAAK,EAAE,GAAG,EAAE,OAAO,IAAI,GAAG;gBAC1B,UAAU,EAAE,IAAI,CAAC,UAAU;aAC9B,CAAC,CAAC;YAEH,MAAM,IAAI,2BAAY,CAAC,wBAAwB,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,MAAc;QACtC,IAAI,CAAC;YACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,IAAI,2BAAY,CAAC,mCAAmC,CAAC,CAAC;YAChE,CAAC;YAED,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxC,MAAM,IAAI,2BAAY,CAAC,iCAAiC,CAAC,CAAC;YAC9D,CAAC;YAED,OAAO,MAAM,kBAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,gBAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE;gBACjC,KAAK,EAAE,GAAG,EAAE,OAAO,IAAI,GAAG;aAC7B,CAAC,CAAC;YAEH,MAAM,IAAI,2BAAY,CAAC,uBAAuB,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;CACJ;AAvCD,sCAuCC","sourcesContent":["import bcrypt from \"bcryptjs\";\r\nimport { AdapterError } from \"../core/errors/AdapterError\";\r\nimport { logger } from \"../logging\";\r\n\r\nexport class BcryptAdapter {\r\n constructor(private saltRounds: number = 10) {}\r\n\r\n async hash(value: string): Promise<string> {\r\n try {\r\n if (typeof value !== \"string\") {\r\n throw new AdapterError(\"Value to hash must be a string.\");\r\n }\r\n\r\n return await bcrypt.hash(value, this.saltRounds);\r\n } catch (err: any) {\r\n logger.error(\"Bcrypt hashing failed\", {\r\n error: err?.message || err,\r\n saltRounds: this.saltRounds\r\n });\r\n\r\n throw new AdapterError(\"Bcrypt hashing failed.\");\r\n }\r\n }\r\n\r\n async verify(value: string, hashed: string): Promise<boolean> {\r\n try {\r\n if (typeof value !== \"string\") {\r\n throw new AdapterError(\"Value to verify must be a string.\");\r\n }\r\n\r\n if (!hashed || typeof hashed !== \"string\") {\r\n throw new AdapterError(\"Invalid hashed string provided.\");\r\n }\r\n\r\n return await bcrypt.compare(value, hashed);\r\n } catch (err: any) {\r\n logger.error(\"Bcrypt verify failed\", {\r\n error: err?.message || err\r\n });\r\n\r\n throw new AdapterError(\"Bcrypt verify failed.\");\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n"]}
1
+ {"version":3,"file":"BcryptAdapter.js","sourceRoot":"","sources":["../../src/adapters/BcryptAdapter.ts"],"names":[],"mappings":";AAAA,iCAAiC;AACjC,8DAA8D;AAC9D,uCAAuC;;;;;;AAEvC,+BAA+B;AAC/B,sDAAsD;AAEtD,mDAAmD;AACnD,gBAAgB;AAChB,+CAA+C;AAC/C,6EAA6E;AAC7E,gBAAgB;AAEhB,gEAAgE;AAChE,+BAA+B;AAC/B,sDAAsD;AACtD,8CAA8C;AAC9C,8CAA8C;AAC9C,kBAAkB;AAElB,gEAAgE;AAChE,YAAY;AACZ,QAAQ;AAER,sEAAsE;AACtE,gBAAgB;AAChB,+CAA+C;AAC/C,+EAA+E;AAC/E,gBAAgB;AAEhB,2DAA2D;AAC3D,6EAA6E;AAC7E,gBAAgB;AAEhB,0DAA0D;AAC1D,+BAA+B;AAC/B,qDAAqD;AACrD,6CAA6C;AAC7C,kBAAkB;AAElB,+DAA+D;AAC/D,YAAY;AACZ,QAAQ;AACR,IAAI;AAMJ,wDAA8B;AAC9B,8DAA2D;AAC3D,wCAAoC;AAEpC,MAAa,aAAa;IACtB,YAAoB,aAAqB,EAAE;QAAvB,eAAU,GAAV,UAAU,CAAa;IAAG,CAAC;IAE/C,KAAK,CAAC,IAAI,CAAC,KAAa;QACpB,IAAI,CAAC;YACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,IAAI,2BAAY,CAAC,iCAAiC,CAAC,CAAC;YAC9D,CAAC;YAED,OAAO,MAAM,kBAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,gBAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;gBAClC,OAAO,EAAE,QAAQ;gBACjB,SAAS,EAAE,MAAM;gBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,MAAM,EAAE,GAAG,EAAE,OAAO;aACvB,CAAC,CAAC;YAEH,MAAM,IAAI,2BAAY,CAAC,wBAAwB,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,MAAc;QACtC,IAAI,CAAC;YACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,IAAI,2BAAY,CAAC,mCAAmC,CAAC,CAAC;YAChE,CAAC;YAED,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxC,MAAM,IAAI,2BAAY,CAAC,iCAAiC,CAAC,CAAC;YAC9D,CAAC;YAED,OAAO,MAAM,kBAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,gBAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE;gBACjC,OAAO,EAAE,QAAQ;gBACjB,SAAS,EAAE,QAAQ;gBACnB,MAAM,EAAE,GAAG,EAAE,OAAO;aACvB,CAAC,CAAC;YAEH,MAAM,IAAI,2BAAY,CAAC,uBAAuB,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;CACJ;AA3CD,sCA2CC","sourcesContent":["// import bcrypt from \"bcryptjs\";\r\n// import { AdapterError } from \"../core/errors/AdapterError\";\r\n// import { logger } from \"../logging\";\r\n\r\n// export class BcryptAdapter {\r\n// constructor(private saltRounds: number = 10) {}\r\n\r\n// async hash(value: string): Promise<string> {\r\n// try {\r\n// if (typeof value !== \"string\") {\r\n// throw new AdapterError(\"Value to hash must be a string.\");\r\n// }\r\n\r\n// return await bcrypt.hash(value, this.saltRounds);\r\n// } catch (err: any) {\r\n// logger.error(\"Bcrypt hashing failed\", {\r\n// error: err?.message || err,\r\n// saltRounds: this.saltRounds\r\n// });\r\n\r\n// throw new AdapterError(\"Bcrypt hashing failed.\");\r\n// }\r\n// }\r\n\r\n// async verify(value: string, hashed: string): Promise<boolean> {\r\n// try {\r\n// if (typeof value !== \"string\") {\r\n// throw new AdapterError(\"Value to verify must be a string.\");\r\n// }\r\n\r\n// if (!hashed || typeof hashed !== \"string\") {\r\n// throw new AdapterError(\"Invalid hashed string provided.\");\r\n// }\r\n\r\n// return await bcrypt.compare(value, hashed);\r\n// } catch (err: any) {\r\n// logger.error(\"Bcrypt verify failed\", {\r\n// error: err?.message || err\r\n// });\r\n\r\n// throw new AdapterError(\"Bcrypt verify failed.\");\r\n// }\r\n// }\r\n// }\r\n\r\n\r\n\r\n\r\n\r\nimport bcrypt from \"bcryptjs\";\r\nimport { AdapterError } from \"../core/errors/AdapterError\";\r\nimport { logger } from \"../logging\";\r\n\r\nexport class BcryptAdapter {\r\n constructor(private saltRounds: number = 10) {}\r\n\r\n async hash(value: string): Promise<string> {\r\n try {\r\n if (typeof value !== \"string\") {\r\n throw new AdapterError(\"Value to hash must be a string.\");\r\n }\r\n\r\n return await bcrypt.hash(value, this.saltRounds);\r\n } catch (err: any) {\r\n logger.error(\"Bcrypt hashing failed\", {\r\n adapter: \"bcrypt\",\r\n operation: \"hash\",\r\n saltRounds: this.saltRounds,\r\n reason: err?.message\r\n });\r\n\r\n throw new AdapterError(\"Bcrypt hashing failed.\");\r\n }\r\n }\r\n\r\n async verify(value: string, hashed: string): Promise<boolean> {\r\n try {\r\n if (typeof value !== \"string\") {\r\n throw new AdapterError(\"Value to verify must be a string.\");\r\n }\r\n\r\n if (!hashed || typeof hashed !== \"string\") {\r\n throw new AdapterError(\"Invalid hashed string provided.\");\r\n }\r\n\r\n return await bcrypt.compare(value, hashed);\r\n } catch (err: any) {\r\n logger.error(\"Bcrypt verify failed\", {\r\n adapter: \"bcrypt\",\r\n operation: \"verify\",\r\n reason: err?.message\r\n });\r\n\r\n throw new AdapterError(\"Bcrypt verify failed.\");\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ExpressRLAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ExpressRLAdapter.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,qBAAa,gBAAgB;IACzB,aAAa,CAAC,OAAO,GAAE,gBAAqB;CA6B/C"}
1
+ {"version":3,"file":"ExpressRLAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ExpressRLAdapter.ts"],"names":[],"mappings":"AAoDA,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,qBAAa,gBAAgB;IACzB,aAAa,CAAC,OAAO,GAAE,gBAAqB;CAkC/C"}
@@ -1,12 +1,50 @@
1
1
  "use strict";
2
+ // import rateLimit from "express-rate-limit";
3
+ // import { logger } from "../logging/index.js";
4
+ // import { AdapterError } from "../core/errors/AdapterError.js";
2
5
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
6
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
7
  };
5
8
  Object.defineProperty(exports, "__esModule", { value: true });
6
9
  exports.ExpressRLAdapter = void 0;
10
+ // export interface RateLimitOptions {
11
+ // windowMs?: number;
12
+ // max?: number;
13
+ // message?: any;
14
+ // skipFailedRequests?: boolean;
15
+ // standardHeaders?: boolean;
16
+ // legacyHeaders?: boolean;
17
+ // [key: string]: any;
18
+ // }
19
+ // export class ExpressRLAdapter {
20
+ // getMiddleware(options: RateLimitOptions = {}) {
21
+ // try {
22
+ // const defaultOptions = {
23
+ // windowMs: 15 * 60 * 1000,
24
+ // max: 100,
25
+ // message: { error: "Too many requests" },
26
+ // standardHeaders: true,
27
+ // legacyHeaders: false,
28
+ // skipFailedRequests: false
29
+ // };
30
+ // const finalOptions = { ...defaultOptions, ...options };
31
+ // const limiter = rateLimit(finalOptions);
32
+ // logger.debug("Express rate limiter configured", {
33
+ // windowMs: finalOptions.windowMs,
34
+ // max: finalOptions.max
35
+ // });
36
+ // return limiter;
37
+ // } catch (err: any) {
38
+ // logger.error("ExpressRLAdapter: failed to create limiter", {
39
+ // error: err?.message || err
40
+ // });
41
+ // throw new AdapterError("Express rate limiter creation failed.");
42
+ // }
43
+ // }
44
+ // }
7
45
  const express_rate_limit_1 = __importDefault(require("express-rate-limit"));
8
- const index_js_1 = require("../logging/index.js");
9
- const AdapterError_js_1 = require("../core/errors/AdapterError.js");
46
+ const logging_1 = require("../logging");
47
+ const AdapterError_1 = require("../core/errors/AdapterError");
10
48
  class ExpressRLAdapter {
11
49
  getMiddleware(options = {}) {
12
50
  try {
@@ -20,17 +58,21 @@ class ExpressRLAdapter {
20
58
  };
21
59
  const finalOptions = { ...defaultOptions, ...options };
22
60
  const limiter = (0, express_rate_limit_1.default)(finalOptions);
23
- index_js_1.logger.debug("Express rate limiter configured", {
61
+ logging_1.logger.info("Express rate limiter configured", {
62
+ adapter: "express-rate-limit",
63
+ operation: "configure",
24
64
  windowMs: finalOptions.windowMs,
25
65
  max: finalOptions.max
26
66
  });
27
67
  return limiter;
28
68
  }
29
69
  catch (err) {
30
- index_js_1.logger.error("ExpressRLAdapter: failed to create limiter", {
31
- error: err?.message || err
70
+ logging_1.logger.error("Express rate limiter setup failed", {
71
+ adapter: "express-rate-limit",
72
+ operation: "configure",
73
+ reason: err?.message
32
74
  });
33
- throw new AdapterError_js_1.AdapterError("Express rate limiter creation failed.");
75
+ throw new AdapterError_1.AdapterError("Express rate limiter creation failed.");
34
76
  }
35
77
  }
36
78
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ExpressRLAdapter.js","sourceRoot":"","sources":["../../src/adapters/ExpressRLAdapter.ts"],"names":[],"mappings":";;;;;;AAAA,4EAA2C;AAC3C,kDAA6C;AAC7C,oEAA8D;AAY9D,MAAa,gBAAgB;IACzB,aAAa,CAAC,UAA4B,EAAE;QACxC,IAAI,CAAC;YACD,MAAM,cAAc,GAAG;gBACnB,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;gBACxB,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE;gBACvC,eAAe,EAAE,IAAI;gBACrB,aAAa,EAAE,KAAK;gBACpB,kBAAkB,EAAE,KAAK;aAC5B,CAAC;YAEF,MAAM,YAAY,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,EAAE,CAAC;YAEvD,MAAM,OAAO,GAAG,IAAA,4BAAS,EAAC,YAAY,CAAC,CAAC;YAExC,iBAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE;gBAC5C,QAAQ,EAAE,YAAY,CAAC,QAAQ;gBAC/B,GAAG,EAAE,YAAY,CAAC,GAAG;aACxB,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC;QAEnB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,iBAAM,CAAC,KAAK,CAAC,4CAA4C,EAAE;gBACvD,KAAK,EAAE,GAAG,EAAE,OAAO,IAAI,GAAG;aAC7B,CAAC,CAAC;YACH,MAAM,IAAI,8BAAY,CAAC,uCAAuC,CAAC,CAAC;QACpE,CAAC;IACL,CAAC;CACJ;AA9BD,4CA8BC","sourcesContent":["import rateLimit from \"express-rate-limit\";\r\nimport { logger } from \"../logging/index.js\";\r\nimport { AdapterError } from \"../core/errors/AdapterError.js\";\r\n\r\nexport interface RateLimitOptions {\r\n windowMs?: number;\r\n max?: number;\r\n message?: any;\r\n skipFailedRequests?: boolean;\r\n standardHeaders?: boolean;\r\n legacyHeaders?: boolean;\r\n [key: string]: any;\r\n}\r\n\r\nexport class ExpressRLAdapter {\r\n getMiddleware(options: RateLimitOptions = {}) {\r\n try {\r\n const defaultOptions = {\r\n windowMs: 15 * 60 * 1000, \r\n max: 100,\r\n message: { error: \"Too many requests\" },\r\n standardHeaders: true,\r\n legacyHeaders: false,\r\n skipFailedRequests: false\r\n };\r\n\r\n const finalOptions = { ...defaultOptions, ...options };\r\n \r\n const limiter = rateLimit(finalOptions);\r\n \r\n logger.debug(\"Express rate limiter configured\", {\r\n windowMs: finalOptions.windowMs,\r\n max: finalOptions.max\r\n });\r\n\r\n return limiter;\r\n\r\n } catch (err: any) {\r\n logger.error(\"ExpressRLAdapter: failed to create limiter\", {\r\n error: err?.message || err\r\n });\r\n throw new AdapterError(\"Express rate limiter creation failed.\");\r\n }\r\n }\r\n}"]}
1
+ {"version":3,"file":"ExpressRLAdapter.js","sourceRoot":"","sources":["../../src/adapters/ExpressRLAdapter.ts"],"names":[],"mappings":";AAAA,8CAA8C;AAC9C,gDAAgD;AAChD,iEAAiE;;;;;;AAEjE,sCAAsC;AACtC,yBAAyB;AACzB,oBAAoB;AACpB,qBAAqB;AACrB,oCAAoC;AACpC,iCAAiC;AACjC,+BAA+B;AAC/B,0BAA0B;AAC1B,IAAI;AAEJ,kCAAkC;AAClC,sDAAsD;AACtD,gBAAgB;AAChB,uCAAuC;AACvC,6CAA6C;AAC7C,4BAA4B;AAC5B,2DAA2D;AAC3D,yCAAyC;AACzC,wCAAwC;AACxC,4CAA4C;AAC5C,iBAAiB;AAEjB,sEAAsE;AAEtE,uDAAuD;AAEvD,gEAAgE;AAChE,mDAAmD;AACnD,wCAAwC;AACxC,kBAAkB;AAElB,8BAA8B;AAE9B,+BAA+B;AAC/B,2EAA2E;AAC3E,6CAA6C;AAC7C,kBAAkB;AAClB,+EAA+E;AAC/E,YAAY;AACZ,QAAQ;AACR,IAAI;AAIJ,4EAA2C;AAC3C,wCAAoC;AACpC,8DAA2D;AAY3D,MAAa,gBAAgB;IACzB,aAAa,CAAC,UAA4B,EAAE;QACxC,IAAI,CAAC;YACD,MAAM,cAAc,GAAG;gBACnB,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;gBACxB,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE;gBACvC,eAAe,EAAE,IAAI;gBACrB,aAAa,EAAE,KAAK;gBACpB,kBAAkB,EAAE,KAAK;aAC5B,CAAC;YAEF,MAAM,YAAY,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,EAAE,CAAC;YAEvD,MAAM,OAAO,GAAG,IAAA,4BAAS,EAAC,YAAY,CAAC,CAAC;YAGxC,gBAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE;gBAC3C,OAAO,EAAE,oBAAoB;gBAC7B,SAAS,EAAE,WAAW;gBACtB,QAAQ,EAAE,YAAY,CAAC,QAAQ;gBAC/B,GAAG,EAAE,YAAY,CAAC,GAAG;aACxB,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC;QACnB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,gBAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE;gBAC9C,OAAO,EAAE,oBAAoB;gBAC7B,SAAS,EAAE,WAAW;gBACtB,MAAM,EAAE,GAAG,EAAE,OAAO;aACvB,CAAC,CAAC;YAEH,MAAM,IAAI,2BAAY,CAAC,uCAAuC,CAAC,CAAC;QACpE,CAAC;IACL,CAAC;CACJ;AAnCD,4CAmCC","sourcesContent":["// import rateLimit from \"express-rate-limit\";\r\n// import { logger } from \"../logging/index.js\";\r\n// import { AdapterError } from \"../core/errors/AdapterError.js\";\r\n\r\n// export interface RateLimitOptions {\r\n// windowMs?: number;\r\n// max?: number;\r\n// message?: any;\r\n// skipFailedRequests?: boolean;\r\n// standardHeaders?: boolean;\r\n// legacyHeaders?: boolean;\r\n// [key: string]: any;\r\n// }\r\n\r\n// export class ExpressRLAdapter {\r\n// getMiddleware(options: RateLimitOptions = {}) {\r\n// try {\r\n// const defaultOptions = {\r\n// windowMs: 15 * 60 * 1000, \r\n// max: 100,\r\n// message: { error: \"Too many requests\" },\r\n// standardHeaders: true,\r\n// legacyHeaders: false,\r\n// skipFailedRequests: false\r\n// };\r\n\r\n// const finalOptions = { ...defaultOptions, ...options };\r\n \r\n// const limiter = rateLimit(finalOptions);\r\n \r\n// logger.debug(\"Express rate limiter configured\", {\r\n// windowMs: finalOptions.windowMs,\r\n// max: finalOptions.max\r\n// });\r\n\r\n// return limiter;\r\n\r\n// } catch (err: any) {\r\n// logger.error(\"ExpressRLAdapter: failed to create limiter\", {\r\n// error: err?.message || err\r\n// });\r\n// throw new AdapterError(\"Express rate limiter creation failed.\");\r\n// }\r\n// }\r\n// }\r\n\r\n\r\n\r\nimport rateLimit from \"express-rate-limit\";\r\nimport { logger } from \"../logging\";\r\nimport { AdapterError } from \"../core/errors/AdapterError\";\r\n\r\nexport interface RateLimitOptions {\r\n windowMs?: number;\r\n max?: number;\r\n message?: any;\r\n skipFailedRequests?: boolean;\r\n standardHeaders?: boolean;\r\n legacyHeaders?: boolean;\r\n [key: string]: any;\r\n}\r\n\r\nexport class ExpressRLAdapter {\r\n getMiddleware(options: RateLimitOptions = {}) {\r\n try {\r\n const defaultOptions = {\r\n windowMs: 15 * 60 * 1000,\r\n max: 100,\r\n message: { error: \"Too many requests\" },\r\n standardHeaders: true,\r\n legacyHeaders: false,\r\n skipFailedRequests: false\r\n };\r\n\r\n const finalOptions = { ...defaultOptions, ...options };\r\n\r\n const limiter = rateLimit(finalOptions);\r\n\r\n \r\n logger.info(\"Express rate limiter configured\", {\r\n adapter: \"express-rate-limit\",\r\n operation: \"configure\",\r\n windowMs: finalOptions.windowMs,\r\n max: finalOptions.max\r\n });\r\n\r\n return limiter;\r\n } catch (err: any) {\r\n logger.error(\"Express rate limiter setup failed\", {\r\n adapter: \"express-rate-limit\",\r\n operation: \"configure\",\r\n reason: err?.message\r\n });\r\n\r\n throw new AdapterError(\"Express rate limiter creation failed.\");\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ExpressValidatorAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ExpressValidatorAdapter.ts"],"names":[],"mappings":"AAIA,qBAAa,uBAAuB;IAChC,OAAO,CAAC,YAAY,CAAC,CAAQ;gBAEjB,YAAY,CAAC,EAAE,GAAG,EAAE;IAIhC,QAAQ,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,kBAIT,GAAG,OAAO,GAAG,QAAQ,GAAG;CA8BhD"}
1
+ {"version":3,"file":"ExpressValidatorAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ExpressValidatorAdapter.ts"],"names":[],"mappings":"AAsDA,qBAAa,uBAAuB;IAChC,OAAO,CAAC,YAAY,CAAC,CAAQ;gBAEjB,YAAY,CAAC,EAAE,GAAG,EAAE;IAIhC,QAAQ,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,kBAIT,GAAG,OAAO,GAAG,QAAQ,GAAG;CAoChD"}
@@ -1,9 +1,45 @@
1
1
  "use strict";
2
+ // import { validationResult } from "express-validator";
3
+ // import { ValidationError } from "../core/errors/ValidationError.js";
4
+ // import { logger } from "../logging/index.js";
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.ExpressValidatorAdapter = void 0;
7
+ // export class ExpressValidatorAdapter {
8
+ // private globalSchema?: any[];
9
+ // constructor(globalSchema?: any[]) {
10
+ // this.globalSchema = globalSchema;
11
+ // }
12
+ // validate(dynamicSchema?: any[]) {
13
+ // const schema = dynamicSchema || this.globalSchema;
14
+ // if (!schema || !Array.isArray(schema)) {
15
+ // return (req: any, res: any, next: any) => next();
16
+ // }
17
+ // return [
18
+ // ...schema,
19
+ // (req: any, res: any, next: any) => {
20
+ // const errors = validationResult(req);
21
+ // if (!errors.isEmpty()) {
22
+ // const formatted = errors.array().map(err => ({
23
+ // message: err.msg,
24
+ // // param: err.param ,
25
+ // // location: err.location
26
+ // }));
27
+ // logger.warn("express-validator failed", {
28
+ // path: req.path,
29
+ // method: req.method,
30
+ // errors: formatted,
31
+ // preview: JSON.stringify(req.body).slice(0, 200)
32
+ // });
33
+ // return next(new ValidationError("Validation failed.", formatted as any));
34
+ // }
35
+ // next();
36
+ // }
37
+ // ];
38
+ // }
39
+ // }
4
40
  const express_validator_1 = require("express-validator");
5
- const ValidationError_js_1 = require("../core/errors/ValidationError.js");
6
- const index_js_1 = require("../logging/index.js");
41
+ const ValidationError_1 = require("../core/errors/ValidationError");
42
+ const logging_1 = require("../logging");
7
43
  class ExpressValidatorAdapter {
8
44
  constructor(globalSchema) {
9
45
  this.globalSchema = globalSchema;
@@ -18,18 +54,22 @@ class ExpressValidatorAdapter {
18
54
  (req, res, next) => {
19
55
  const errors = (0, express_validator_1.validationResult)(req);
20
56
  if (!errors.isEmpty()) {
21
- const formatted = errors.array().map(err => ({
57
+ const formattedErrors = errors.array().map(err => ({
22
58
  message: err.msg,
23
- // param: err.param ,
24
- // location: err.location
59
+ field: err.type
25
60
  }));
26
- index_js_1.logger.warn("express-validator failed", {
27
- path: req.path,
61
+ logging_1.logger.warn("Request validation failed", {
62
+ adapter: "express-validator",
63
+ operation: "validate",
28
64
  method: req.method,
29
- errors: formatted,
30
- preview: JSON.stringify(req.body).slice(0, 200)
65
+ path: req.path,
66
+ errorCount: formattedErrors.length,
67
+ errors: formattedErrors,
68
+ bodyPreview: req.body
69
+ ? JSON.stringify(req.body).slice(0, 150)
70
+ : undefined
31
71
  });
32
- return next(new ValidationError_js_1.ValidationError("Validation failed.", formatted));
72
+ return next(new ValidationError_1.ValidationError("Validation failed.", formattedErrors));
33
73
  }
34
74
  next();
35
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ExpressValidatorAdapter.js","sourceRoot":"","sources":["../../src/adapters/ExpressValidatorAdapter.ts"],"names":[],"mappings":";;;AAAA,yDAAqD;AACrD,0EAAoE;AACpE,kDAA6C;AAE7C,MAAa,uBAAuB;IAGhC,YAAY,YAAoB;QAC5B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACrC,CAAC;IAED,QAAQ,CAAC,aAAqB;QAC1B,MAAM,MAAM,GAAG,aAAa,IAAI,IAAI,CAAC,YAAY,CAAC;QAElD,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,GAAQ,EAAE,GAAQ,EAAE,IAAS,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QACrD,CAAC;QAED,OAAO;YACH,GAAG,MAAM;YAET,CAAC,GAAQ,EAAE,GAAQ,EAAE,IAAS,EAAE,EAAE;gBAC9B,MAAM,MAAM,GAAG,IAAA,oCAAgB,EAAC,GAAG,CAAC,CAAC;gBAErC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;oBACpB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBACzC,OAAO,EAAE,GAAG,CAAC,GAAG;wBAChB,qBAAqB;wBACrB,yBAAyB;qBAC5B,CAAC,CAAC,CAAC;oBAEJ,iBAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;wBACpC,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,MAAM,EAAE,SAAS;wBACjB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;qBAClD,CAAC,CAAC;oBAEH,OAAO,IAAI,CAAC,IAAI,oCAAe,CAAC,oBAAoB,EAAE,SAAgB,CAAC,CAAC,CAAC;gBAC7E,CAAC;gBAED,IAAI,EAAE,CAAC;YACX,CAAC;SACJ,CAAC;IACN,CAAC;CACJ;AAzCD,0DAyCC","sourcesContent":["import { validationResult } from \"express-validator\";\r\nimport { ValidationError } from \"../core/errors/ValidationError.js\"; \r\nimport { logger } from \"../logging/index.js\";\r\n\r\nexport class ExpressValidatorAdapter {\r\n private globalSchema?: any[];\r\n\r\n constructor(globalSchema?: any[]) {\r\n this.globalSchema = globalSchema;\r\n }\r\n\r\n validate(dynamicSchema?: any[]) {\r\n const schema = dynamicSchema || this.globalSchema;\r\n\r\n if (!schema || !Array.isArray(schema)) {\r\n return (req: any, res: any, next: any) => next();\r\n }\r\n\r\n return [\r\n ...schema,\r\n\r\n (req: any, res: any, next: any) => {\r\n const errors = validationResult(req);\r\n\r\n if (!errors.isEmpty()) {\r\n const formatted = errors.array().map(err => ({\r\n message: err.msg,\r\n // param: err.param ,\r\n // location: err.location\r\n }));\r\n\r\n logger.warn(\"express-validator failed\", {\r\n path: req.path,\r\n method: req.method,\r\n errors: formatted,\r\n preview: JSON.stringify(req.body).slice(0, 200)\r\n });\r\n\r\n return next(new ValidationError(\"Validation failed.\", formatted as any));\r\n }\r\n\r\n next();\r\n }\r\n ];\r\n }\r\n}"]}
1
+ {"version":3,"file":"ExpressValidatorAdapter.js","sourceRoot":"","sources":["../../src/adapters/ExpressValidatorAdapter.ts"],"names":[],"mappings":";AAAA,wDAAwD;AACxD,wEAAwE;AACxE,gDAAgD;;;AAEhD,yCAAyC;AACzC,oCAAoC;AAEpC,0CAA0C;AAC1C,4CAA4C;AAC5C,QAAQ;AAER,wCAAwC;AACxC,6DAA6D;AAE7D,mDAAmD;AACnD,gEAAgE;AAChE,YAAY;AAEZ,mBAAmB;AACnB,yBAAyB;AAEzB,mDAAmD;AACnD,wDAAwD;AAExD,2CAA2C;AAC3C,qEAAqE;AACrE,4CAA4C;AAC5C,gDAAgD;AAChD,oDAAoD;AACpD,2BAA2B;AAE3B,gEAAgE;AAChE,0CAA0C;AAC1C,8CAA8C;AAC9C,6CAA6C;AAC7C,0EAA0E;AAC1E,0BAA0B;AAE1B,gGAAgG;AAChG,oBAAoB;AAEpB,0BAA0B;AAC1B,gBAAgB;AAChB,aAAa;AACb,QAAQ;AACR,IAAI;AAKJ,yDAAqD;AACrD,oEAAiE;AACjE,wCAAoC;AAEpC,MAAa,uBAAuB;IAGhC,YAAY,YAAoB;QAC5B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACrC,CAAC;IAED,QAAQ,CAAC,aAAqB;QAC1B,MAAM,MAAM,GAAG,aAAa,IAAI,IAAI,CAAC,YAAY,CAAC;QAElD,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,GAAQ,EAAE,GAAQ,EAAE,IAAS,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QACrD,CAAC;QAED,OAAO;YACH,GAAG,MAAM;YAET,CAAC,GAAQ,EAAE,GAAQ,EAAE,IAAS,EAAE,EAAE;gBAC9B,MAAM,MAAM,GAAG,IAAA,oCAAgB,EAAC,GAAG,CAAC,CAAC;gBAErC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;oBACpB,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBAC/C,OAAO,EAAE,GAAG,CAAC,GAAG;wBAChB,KAAK,EAAE,GAAG,CAAC,IAAI;qBAClB,CAAC,CAAC,CAAC;oBAEJ,gBAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE;wBACrC,OAAO,EAAE,mBAAmB;wBAC5B,SAAS,EAAE,UAAU;wBACrB,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,UAAU,EAAE,eAAe,CAAC,MAAM;wBAClC,MAAM,EAAE,eAAe;wBACvB,WAAW,EAAE,GAAG,CAAC,IAAI;4BACjB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;4BACxC,CAAC,CAAC,SAAS;qBAClB,CAAC,CAAC;oBAEH,OAAO,IAAI,CACP,IAAI,iCAAe,CAAC,oBAAoB,EAAE,eAAsB,CAAC,CACpE,CAAC;gBACN,CAAC;gBAED,IAAI,EAAE,CAAC;YACX,CAAC;SACJ,CAAC;IACN,CAAC;CACJ;AA/CD,0DA+CC","sourcesContent":["// import { validationResult } from \"express-validator\";\r\n// import { ValidationError } from \"../core/errors/ValidationError.js\"; \r\n// import { logger } from \"../logging/index.js\";\r\n\r\n// export class ExpressValidatorAdapter {\r\n// private globalSchema?: any[];\r\n\r\n// constructor(globalSchema?: any[]) {\r\n// this.globalSchema = globalSchema;\r\n// }\r\n\r\n// validate(dynamicSchema?: any[]) {\r\n// const schema = dynamicSchema || this.globalSchema;\r\n\r\n// if (!schema || !Array.isArray(schema)) {\r\n// return (req: any, res: any, next: any) => next();\r\n// }\r\n\r\n// return [\r\n// ...schema,\r\n\r\n// (req: any, res: any, next: any) => {\r\n// const errors = validationResult(req);\r\n\r\n// if (!errors.isEmpty()) {\r\n// const formatted = errors.array().map(err => ({\r\n// message: err.msg,\r\n// // param: err.param ,\r\n// // location: err.location\r\n// }));\r\n\r\n// logger.warn(\"express-validator failed\", {\r\n// path: req.path,\r\n// method: req.method,\r\n// errors: formatted,\r\n// preview: JSON.stringify(req.body).slice(0, 200)\r\n// });\r\n\r\n// return next(new ValidationError(\"Validation failed.\", formatted as any));\r\n// }\r\n\r\n// next();\r\n// }\r\n// ];\r\n// }\r\n// }\r\n\r\n\r\n\r\n\r\nimport { validationResult } from \"express-validator\";\r\nimport { ValidationError } from \"../core/errors/ValidationError\";\r\nimport { logger } from \"../logging\";\r\n\r\nexport class ExpressValidatorAdapter {\r\n private globalSchema?: any[];\r\n\r\n constructor(globalSchema?: any[]) {\r\n this.globalSchema = globalSchema;\r\n }\r\n\r\n validate(dynamicSchema?: any[]) {\r\n const schema = dynamicSchema || this.globalSchema;\r\n\r\n if (!schema || !Array.isArray(schema)) {\r\n return (req: any, res: any, next: any) => next();\r\n }\r\n\r\n return [\r\n ...schema,\r\n\r\n (req: any, res: any, next: any) => {\r\n const errors = validationResult(req);\r\n\r\n if (!errors.isEmpty()) {\r\n const formattedErrors = errors.array().map(err => ({\r\n message: err.msg,\r\n field: err.type\r\n }));\r\n\r\n logger.warn(\"Request validation failed\", {\r\n adapter: \"express-validator\",\r\n operation: \"validate\",\r\n method: req.method,\r\n path: req.path,\r\n errorCount: formattedErrors.length,\r\n errors: formattedErrors,\r\n bodyPreview: req.body\r\n ? JSON.stringify(req.body).slice(0, 150)\r\n : undefined\r\n });\r\n\r\n return next(\r\n new ValidationError(\"Validation failed.\", formattedErrors as any)\r\n );\r\n }\r\n\r\n next();\r\n }\r\n ];\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GoogleAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/GoogleAdapter.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEd,QAAQ,CAAC,EAAE,MAAM;IASvB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAmDpE"}
1
+ {"version":3,"file":"GoogleAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/GoogleAdapter.ts"],"names":[],"mappings":"AAsFA,MAAM,WAAW,kBAAkB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEd,QAAQ,CAAC,EAAE,MAAM;IASvB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAuDpE"}
@@ -1,57 +1,123 @@
1
1
  "use strict";
2
+ // import { OAuth2Client, LoginTicket } from "google-auth-library";
3
+ // import { AdapterError } from "../core/errors/AdapterError.js";
2
4
  Object.defineProperty(exports, "__esModule", { value: true });
3
5
  exports.GoogleAdapter = void 0;
6
+ // import {logger} from '../logging';
7
+ // export interface GoogleTokenPayload {
8
+ // sub: string;
9
+ // email: string;
10
+ // email_verified: boolean;
11
+ // name?: string;
12
+ // picture?: string;
13
+ // [key: string]: any;
14
+ // }
15
+ // export class GoogleAdapter {
16
+ // private client: OAuth2Client;
17
+ // private clientId?: string;
18
+ // constructor(clientId?: string) {
19
+ // if (clientId && clientId.trim().length === 0) {
20
+ // throw new AdapterError("Google clientId cannot be empty string");
21
+ // }
22
+ // this.client = new OAuth2Client(clientId);
23
+ // this.clientId = clientId;
24
+ // }
25
+ // async verifyIdToken(idToken: string): Promise<GoogleTokenPayload> {
26
+ // try {
27
+ // if (!idToken || typeof idToken !== 'string') {
28
+ // throw new AdapterError("Invalid ID token provided");
29
+ // }
30
+ // const options: { idToken: string; audience?: string | string[] } = {
31
+ // idToken
32
+ // };
33
+ // // audience only if clientId is provided and not empty
34
+ // if (this.clientId && this.clientId.trim().length > 0) {
35
+ // options.audience = this.clientId;
36
+ // }
37
+ // const ticket: LoginTicket = await this.client.verifyIdToken(options);
38
+ // const payload = ticket.getPayload();
39
+ // if (!payload) {
40
+ // logger.warn("GoogleAdapter: Empty payload");
41
+ // throw new AdapterError("Invalid Google ID token payload.");
42
+ // }
43
+ // // result object
44
+ // const result: GoogleTokenPayload = {
45
+ // sub: payload.sub,
46
+ // email: payload.email || '',
47
+ // email_verified: payload.email_verified || false,
48
+ // name: payload.name,
49
+ // picture: payload.picture
50
+ // };
51
+ // // remaining properties from payload
52
+ // const { sub, email, email_verified, name, picture, ...rest } = payload;
53
+ // Object.assign(result, rest);
54
+ // return result;
55
+ // } catch (err: any) {
56
+ // logger.error("GoogleAdapter.verifyIdToken failed", {
57
+ // error: err?.message,
58
+ // hasClientId: !!this.clientId
59
+ // });
60
+ // if (err.message?.includes('audience')) {
61
+ // throw new AdapterError("Invalid Google client ID configured.");
62
+ // }
63
+ // throw new AdapterError(err?.message || "Google token verification failed");
64
+ // }
65
+ // }
66
+ // }
4
67
  const google_auth_library_1 = require("google-auth-library");
5
- const AdapterError_js_1 = require("../core/errors/AdapterError.js");
68
+ const AdapterError_1 = require("../core/errors/AdapterError");
6
69
  const logging_1 = require("../logging");
7
70
  class GoogleAdapter {
8
71
  constructor(clientId) {
9
72
  if (clientId && clientId.trim().length === 0) {
10
- throw new AdapterError_js_1.AdapterError("Google clientId cannot be empty string");
73
+ throw new AdapterError_1.AdapterError("Google clientId cannot be empty string");
11
74
  }
12
75
  this.client = new google_auth_library_1.OAuth2Client(clientId);
13
76
  this.clientId = clientId;
14
77
  }
15
78
  async verifyIdToken(idToken) {
16
79
  try {
17
- if (!idToken || typeof idToken !== 'string') {
18
- throw new AdapterError_js_1.AdapterError("Invalid ID token provided");
80
+ if (!idToken || typeof idToken !== "string") {
81
+ throw new AdapterError_1.AdapterError("Invalid ID token provided");
19
82
  }
20
83
  const options = {
21
84
  idToken
22
85
  };
23
- // audience only if clientId is provided and not empty
24
86
  if (this.clientId && this.clientId.trim().length > 0) {
25
87
  options.audience = this.clientId;
26
88
  }
27
89
  const ticket = await this.client.verifyIdToken(options);
28
90
  const payload = ticket.getPayload();
29
91
  if (!payload) {
30
- logging_1.logger.warn("GoogleAdapter: Empty payload");
31
- throw new AdapterError_js_1.AdapterError("Invalid Google ID token payload.");
92
+ logging_1.logger.warn("Google ID token payload empty", {
93
+ adapter: "google-auth",
94
+ operation: "verifyIdToken",
95
+ hasClientId: !!this.clientId
96
+ });
97
+ throw new AdapterError_1.AdapterError("Invalid Google ID token payload.");
32
98
  }
33
- // result object
34
99
  const result = {
35
100
  sub: payload.sub,
36
- email: payload.email || '',
101
+ email: payload.email || "",
37
102
  email_verified: payload.email_verified || false,
38
103
  name: payload.name,
39
104
  picture: payload.picture
40
105
  };
41
- // remaining properties from payload
42
106
  const { sub, email, email_verified, name, picture, ...rest } = payload;
43
107
  Object.assign(result, rest);
44
108
  return result;
45
109
  }
46
110
  catch (err) {
47
- logging_1.logger.error("GoogleAdapter.verifyIdToken failed", {
48
- error: err?.message,
49
- hasClientId: !!this.clientId
111
+ logging_1.logger.error("Google ID token verification failed", {
112
+ adapter: "google-auth",
113
+ operation: "verifyIdToken",
114
+ hasClientId: !!this.clientId,
115
+ reason: err?.message
50
116
  });
51
- if (err.message?.includes('audience')) {
52
- throw new AdapterError_js_1.AdapterError("Invalid Google client ID configured.");
117
+ if (err?.message?.includes("audience")) {
118
+ throw new AdapterError_1.AdapterError("Invalid Google client ID configured.");
53
119
  }
54
- throw new AdapterError_js_1.AdapterError(err?.message || "Google token verification failed");
120
+ throw new AdapterError_1.AdapterError("Google token verification failed.");
55
121
  }
56
122
  }
57
123
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GoogleAdapter.js","sourceRoot":"","sources":["../../src/adapters/GoogleAdapter.ts"],"names":[],"mappings":";;;AAAA,6DAAgE;AAChE,oEAA8D;AAE9D,wCAAkC;AAWlC,MAAa,aAAa;IAItB,YAAY,QAAiB;QACzB,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,8BAAY,CAAC,wCAAwC,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,kCAAY,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAe;QAC/B,IAAI,CAAC;YACD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC1C,MAAM,IAAI,8BAAY,CAAC,2BAA2B,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,OAAO,GAAsD;gBAC/D,OAAO;aACV,CAAC;YAEF,sDAAsD;YACtD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnD,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YACrC,CAAC;YAED,MAAM,MAAM,GAAgB,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACrE,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YAEpC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,gBAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;gBAC5C,MAAM,IAAI,8BAAY,CAAC,kCAAkC,CAAC,CAAC;YAC/D,CAAC;YAED,gBAAgB;YAChB,MAAM,MAAM,GAAuB;gBAC/B,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;gBAC1B,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,KAAK;gBAC/C,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;aAC3B,CAAC;YAEF,qCAAqC;YACrC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;YACvE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAE5B,OAAO,MAAM,CAAC;QAElB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,gBAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE;gBAC/C,KAAK,EAAE,GAAG,EAAE,OAAO;gBACnB,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;aAC/B,CAAC,CAAC;YAEH,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,8BAAY,CAAC,sCAAsC,CAAC,CAAC;YACnE,CAAC;YAED,MAAM,IAAI,8BAAY,CAAC,GAAG,EAAE,OAAO,IAAI,kCAAkC,CAAC,CAAC;QAC/E,CAAC;IACL,CAAC;CACJ;AAhED,sCAgEC","sourcesContent":["import { OAuth2Client, LoginTicket } from \"google-auth-library\";\r\nimport { AdapterError } from \"../core/errors/AdapterError.js\";\r\n\r\nimport {logger} from '../logging';\r\n\r\nexport interface GoogleTokenPayload {\r\n sub: string;\r\n email: string;\r\n email_verified: boolean;\r\n name?: string;\r\n picture?: string;\r\n [key: string]: any;\r\n}\r\n\r\nexport class GoogleAdapter {\r\n private client: OAuth2Client;\r\n private clientId?: string;\r\n\r\n constructor(clientId?: string) {\r\n if (clientId && clientId.trim().length === 0) {\r\n throw new AdapterError(\"Google clientId cannot be empty string\");\r\n }\r\n \r\n this.client = new OAuth2Client(clientId);\r\n this.clientId = clientId;\r\n }\r\n\r\n async verifyIdToken(idToken: string): Promise<GoogleTokenPayload> {\r\n try {\r\n if (!idToken || typeof idToken !== 'string') {\r\n throw new AdapterError(\"Invalid ID token provided\");\r\n }\r\n\r\n const options: { idToken: string; audience?: string | string[] } = { \r\n idToken \r\n };\r\n\r\n // audience only if clientId is provided and not empty\r\n if (this.clientId && this.clientId.trim().length > 0) {\r\n options.audience = this.clientId;\r\n }\r\n\r\n const ticket: LoginTicket = await this.client.verifyIdToken(options);\r\n const payload = ticket.getPayload();\r\n \r\n if (!payload) {\r\n logger.warn(\"GoogleAdapter: Empty payload\");\r\n throw new AdapterError(\"Invalid Google ID token payload.\");\r\n }\r\n\r\n // result object\r\n const result: GoogleTokenPayload = {\r\n sub: payload.sub,\r\n email: payload.email || '',\r\n email_verified: payload.email_verified || false,\r\n name: payload.name,\r\n picture: payload.picture\r\n };\r\n\r\n // remaining properties from payload \r\n const { sub, email, email_verified, name, picture, ...rest } = payload;\r\n Object.assign(result, rest);\r\n\r\n return result;\r\n\r\n } catch (err: any) {\r\n logger.error(\"GoogleAdapter.verifyIdToken failed\", { \r\n error: err?.message,\r\n hasClientId: !!this.clientId \r\n });\r\n \r\n if (err.message?.includes('audience')) {\r\n throw new AdapterError(\"Invalid Google client ID configured.\");\r\n }\r\n \r\n throw new AdapterError(err?.message || \"Google token verification failed\");\r\n }\r\n }\r\n}"]}
1
+ {"version":3,"file":"GoogleAdapter.js","sourceRoot":"","sources":["../../src/adapters/GoogleAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["// import { OAuth2Client, LoginTicket } from \"google-auth-library\";\r\n// import { AdapterError } from \"../core/errors/AdapterError.js\";\r\n\r\n// import {logger} from '../logging';\r\n\r\n// export interface GoogleTokenPayload {\r\n// sub: string;\r\n// email: string;\r\n// email_verified: boolean;\r\n// name?: string;\r\n// picture?: string;\r\n// [key: string]: any;\r\n// }\r\n\r\n// export class GoogleAdapter {\r\n// private client: OAuth2Client;\r\n// private clientId?: string;\r\n\r\n// constructor(clientId?: string) {\r\n// if (clientId && clientId.trim().length === 0) {\r\n// throw new AdapterError(\"Google clientId cannot be empty string\");\r\n// }\r\n \r\n// this.client = new OAuth2Client(clientId);\r\n// this.clientId = clientId;\r\n// }\r\n\r\n// async verifyIdToken(idToken: string): Promise<GoogleTokenPayload> {\r\n// try {\r\n// if (!idToken || typeof idToken !== 'string') {\r\n// throw new AdapterError(\"Invalid ID token provided\");\r\n// }\r\n\r\n// const options: { idToken: string; audience?: string | string[] } = { \r\n// idToken \r\n// };\r\n\r\n// // audience only if clientId is provided and not empty\r\n// if (this.clientId && this.clientId.trim().length > 0) {\r\n// options.audience = this.clientId;\r\n// }\r\n\r\n// const ticket: LoginTicket = await this.client.verifyIdToken(options);\r\n// const payload = ticket.getPayload();\r\n \r\n// if (!payload) {\r\n// logger.warn(\"GoogleAdapter: Empty payload\");\r\n// throw new AdapterError(\"Invalid Google ID token payload.\");\r\n// }\r\n\r\n// // result object\r\n// const result: GoogleTokenPayload = {\r\n// sub: payload.sub,\r\n// email: payload.email || '',\r\n// email_verified: payload.email_verified || false,\r\n// name: payload.name,\r\n// picture: payload.picture\r\n// };\r\n\r\n// // remaining properties from payload \r\n// const { sub, email, email_verified, name, picture, ...rest } = payload;\r\n// Object.assign(result, rest);\r\n\r\n// return result;\r\n\r\n// } catch (err: any) {\r\n// logger.error(\"GoogleAdapter.verifyIdToken failed\", { \r\n// error: err?.message,\r\n// hasClientId: !!this.clientId \r\n// });\r\n \r\n// if (err.message?.includes('audience')) {\r\n// throw new AdapterError(\"Invalid Google client ID configured.\");\r\n// }\r\n \r\n// throw new AdapterError(err?.message || \"Google token verification failed\");\r\n// }\r\n// }\r\n// }\r\n\r\n\r\n\r\nimport { OAuth2Client, LoginTicket } from \"google-auth-library\";\r\nimport { AdapterError } from \"../core/errors/AdapterError\";\r\nimport { logger } from \"../logging\";\r\n\r\nexport interface GoogleTokenPayload {\r\n sub: string;\r\n email: string;\r\n email_verified: boolean;\r\n name?: string;\r\n picture?: string;\r\n [key: string]: any;\r\n}\r\n\r\nexport class GoogleAdapter {\r\n private client: OAuth2Client;\r\n private clientId?: string;\r\n\r\n constructor(clientId?: string) {\r\n if (clientId && clientId.trim().length === 0) {\r\n throw new AdapterError(\"Google clientId cannot be empty string\");\r\n }\r\n\r\n this.client = new OAuth2Client(clientId);\r\n this.clientId = clientId;\r\n }\r\n\r\n async verifyIdToken(idToken: string): Promise<GoogleTokenPayload> {\r\n try {\r\n if (!idToken || typeof idToken !== \"string\") {\r\n throw new AdapterError(\"Invalid ID token provided\");\r\n }\r\n\r\n const options: { idToken: string; audience?: string | string[] } = {\r\n idToken\r\n };\r\n\r\n if (this.clientId && this.clientId.trim().length > 0) {\r\n options.audience = this.clientId;\r\n }\r\n\r\n const ticket: LoginTicket = await this.client.verifyIdToken(options);\r\n const payload = ticket.getPayload();\r\n\r\n if (!payload) {\r\n logger.warn(\"Google ID token payload empty\", {\r\n adapter: \"google-auth\",\r\n operation: \"verifyIdToken\",\r\n hasClientId: !!this.clientId\r\n });\r\n\r\n throw new AdapterError(\"Invalid Google ID token payload.\");\r\n }\r\n\r\n const result: GoogleTokenPayload = {\r\n sub: payload.sub,\r\n email: payload.email || \"\",\r\n email_verified: payload.email_verified || false,\r\n name: payload.name,\r\n picture: payload.picture\r\n };\r\n\r\n const { sub, email, email_verified, name, picture, ...rest } = payload;\r\n Object.assign(result, rest);\r\n\r\n return result;\r\n\r\n } catch (err: any) {\r\n logger.error(\"Google ID token verification failed\", {\r\n adapter: \"google-auth\",\r\n operation: \"verifyIdToken\",\r\n hasClientId: !!this.clientId,\r\n reason: err?.message\r\n });\r\n\r\n if (err?.message?.includes(\"audience\")) {\r\n throw new AdapterError(\"Invalid Google client ID configured.\");\r\n }\r\n\r\n throw new AdapterError(\"Google token verification failed.\");\r\n }\r\n }\r\n}\r\n"]}