hi-secure 1.0.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 (210) hide show
  1. package/dist/adapters/ArgonAdapter.d.ts +8 -0
  2. package/dist/adapters/ArgonAdapter.d.ts.map +1 -0
  3. package/dist/adapters/ArgonAdapter.js +45 -0
  4. package/dist/adapters/ArgonAdapter.js.map +1 -0
  5. package/dist/adapters/BcryptAdapter.d.ts +7 -0
  6. package/dist/adapters/BcryptAdapter.d.ts.map +1 -0
  7. package/dist/adapters/BcryptAdapter.js +48 -0
  8. package/dist/adapters/BcryptAdapter.js.map +1 -0
  9. package/dist/adapters/DomPurifyAdapter.d.ts +13 -0
  10. package/dist/adapters/DomPurifyAdapter.d.ts.map +1 -0
  11. package/dist/adapters/DomPurifyAdapter.js +61 -0
  12. package/dist/adapters/DomPurifyAdapter.js.map +1 -0
  13. package/dist/adapters/ExpressRLAdapter.d.ts +13 -0
  14. package/dist/adapters/ExpressRLAdapter.d.ts.map +1 -0
  15. package/dist/adapters/ExpressRLAdapter.js +68 -0
  16. package/dist/adapters/ExpressRLAdapter.js.map +1 -0
  17. package/dist/adapters/ExpressValidatorAdapter.d.ts +6 -0
  18. package/dist/adapters/ExpressValidatorAdapter.d.ts.map +1 -0
  19. package/dist/adapters/ExpressValidatorAdapter.js +78 -0
  20. package/dist/adapters/ExpressValidatorAdapter.js.map +1 -0
  21. package/dist/adapters/GoggleAdapter.d.ts +15 -0
  22. package/dist/adapters/GoggleAdapter.d.ts.map +1 -0
  23. package/dist/adapters/GoggleAdapter.js +91 -0
  24. package/dist/adapters/GoggleAdapter.js.map +1 -0
  25. package/dist/adapters/GoogleAdapter.d.ts +15 -0
  26. package/dist/adapters/GoogleAdapter.d.ts.map +1 -0
  27. package/dist/adapters/GoogleAdapter.js +159 -0
  28. package/dist/adapters/GoogleAdapter.js.map +1 -0
  29. package/dist/adapters/JWTAdapter.d.ts +28 -0
  30. package/dist/adapters/JWTAdapter.d.ts.map +1 -0
  31. package/dist/adapters/JWTAdapter.js +276 -0
  32. package/dist/adapters/JWTAdapter.js.map +1 -0
  33. package/dist/adapters/RLFlexibleAdapter.d.ts +11 -0
  34. package/dist/adapters/RLFlexibleAdapter.d.ts.map +1 -0
  35. package/dist/adapters/RLFlexibleAdapter.js +115 -0
  36. package/dist/adapters/RLFlexibleAdapter.js.map +1 -0
  37. package/dist/adapters/SanitizeHtmlAdapter.d.ts +12 -0
  38. package/dist/adapters/SanitizeHtmlAdapter.d.ts.map +1 -0
  39. package/dist/adapters/SanitizeHtmlAdapter.js +141 -0
  40. package/dist/adapters/SanitizeHtmlAdapter.js.map +1 -0
  41. package/dist/adapters/XSSAdapter.d.ts +33 -0
  42. package/dist/adapters/XSSAdapter.d.ts.map +1 -0
  43. package/dist/adapters/XSSAdapter.js +127 -0
  44. package/dist/adapters/XSSAdapter.js.map +1 -0
  45. package/dist/adapters/ZodAdapter.d.ts +7 -0
  46. package/dist/adapters/ZodAdapter.d.ts.map +1 -0
  47. package/dist/adapters/ZodAdapter.js +39 -0
  48. package/dist/adapters/ZodAdapter.js.map +1 -0
  49. package/dist/core/HiSecure.d.ts +62 -0
  50. package/dist/core/HiSecure.d.ts.map +1 -0
  51. package/dist/core/HiSecure.js +273 -0
  52. package/dist/core/HiSecure.js.map +1 -0
  53. package/dist/core/config.d.ts +3 -0
  54. package/dist/core/config.d.ts.map +1 -0
  55. package/dist/core/config.js +53 -0
  56. package/dist/core/config.js.map +1 -0
  57. package/dist/core/constants.d.ts +37 -0
  58. package/dist/core/constants.d.ts.map +1 -0
  59. package/dist/core/constants.js +67 -0
  60. package/dist/core/constants.js.map +1 -0
  61. package/dist/core/errors/AdapterError.d.ts +5 -0
  62. package/dist/core/errors/AdapterError.d.ts.map +1 -0
  63. package/dist/core/errors/AdapterError.js +15 -0
  64. package/dist/core/errors/AdapterError.js.map +1 -0
  65. package/dist/core/errors/HttpErrror.d.ts +17 -0
  66. package/dist/core/errors/HttpErrror.d.ts.map +1 -0
  67. package/dist/core/errors/HttpErrror.js +36 -0
  68. package/dist/core/errors/HttpErrror.js.map +1 -0
  69. package/dist/core/errors/SanitizerError.d.ts +5 -0
  70. package/dist/core/errors/SanitizerError.d.ts.map +1 -0
  71. package/dist/core/errors/SanitizerError.js +14 -0
  72. package/dist/core/errors/SanitizerError.js.map +1 -0
  73. package/dist/core/errors/SecurityError.d.ts +5 -0
  74. package/dist/core/errors/SecurityError.d.ts.map +1 -0
  75. package/dist/core/errors/SecurityError.js +14 -0
  76. package/dist/core/errors/SecurityError.js.map +1 -0
  77. package/dist/core/errors/ValidationError.d.ts +5 -0
  78. package/dist/core/errors/ValidationError.d.ts.map +1 -0
  79. package/dist/core/errors/ValidationError.js +14 -0
  80. package/dist/core/errors/ValidationError.js.map +1 -0
  81. package/dist/core/types/HiSecureConfig.d.ts +47 -0
  82. package/dist/core/types/HiSecureConfig.d.ts.map +1 -0
  83. package/dist/core/types/HiSecureConfig.js +3 -0
  84. package/dist/core/types/HiSecureConfig.js.map +1 -0
  85. package/dist/core/types/SecureOptions.d.ts +30 -0
  86. package/dist/core/types/SecureOptions.d.ts.map +1 -0
  87. package/dist/core/types/SecureOptions.js +4 -0
  88. package/dist/core/types/SecureOptions.js.map +1 -0
  89. package/dist/core/useSecure.d.ts +10 -0
  90. package/dist/core/useSecure.d.ts.map +1 -0
  91. package/dist/core/useSecure.js +85 -0
  92. package/dist/core/useSecure.js.map +1 -0
  93. package/dist/examples/e1.d.ts +1 -0
  94. package/dist/examples/e1.d.ts.map +1 -0
  95. package/dist/examples/e1.js +3 -0
  96. package/dist/examples/e1.js.map +1 -0
  97. package/dist/index.d.ts +9 -0
  98. package/dist/index.d.ts.map +1 -0
  99. package/dist/index.js +15 -0
  100. package/dist/index.js.map +1 -0
  101. package/dist/logging/index.d.ts +3 -0
  102. package/dist/logging/index.d.ts.map +1 -0
  103. package/dist/logging/index.js +19 -0
  104. package/dist/logging/index.js.map +1 -0
  105. package/dist/logging/morganSetup.d.ts +2 -0
  106. package/dist/logging/morganSetup.d.ts.map +1 -0
  107. package/dist/logging/morganSetup.js +9 -0
  108. package/dist/logging/morganSetup.js.map +1 -0
  109. package/dist/logging/winstonSetup.d.ts +6 -0
  110. package/dist/logging/winstonSetup.d.ts.map +1 -0
  111. package/dist/logging/winstonSetup.js +22 -0
  112. package/dist/logging/winstonSetup.js.map +1 -0
  113. package/dist/managers/AuthManager.d.ts +23 -0
  114. package/dist/managers/AuthManager.d.ts.map +1 -0
  115. package/dist/managers/AuthManager.js +190 -0
  116. package/dist/managers/AuthManager.js.map +1 -0
  117. package/dist/managers/CorsManager.d.ts +9 -0
  118. package/dist/managers/CorsManager.d.ts.map +1 -0
  119. package/dist/managers/CorsManager.js +55 -0
  120. package/dist/managers/CorsManager.js.map +1 -0
  121. package/dist/managers/HashManager.d.ts +22 -0
  122. package/dist/managers/HashManager.d.ts.map +1 -0
  123. package/dist/managers/HashManager.js +319 -0
  124. package/dist/managers/HashManager.js.map +1 -0
  125. package/dist/managers/JsonManager.d.ts +6 -0
  126. package/dist/managers/JsonManager.d.ts.map +1 -0
  127. package/dist/managers/JsonManager.js +142 -0
  128. package/dist/managers/JsonManager.js.map +1 -0
  129. package/dist/managers/RateLimitManager.d.ts +16 -0
  130. package/dist/managers/RateLimitManager.d.ts.map +1 -0
  131. package/dist/managers/RateLimitManager.js +108 -0
  132. package/dist/managers/RateLimitManager.js.map +1 -0
  133. package/dist/managers/SanitizerManager.d.ts +18 -0
  134. package/dist/managers/SanitizerManager.d.ts.map +1 -0
  135. package/dist/managers/SanitizerManager.js +296 -0
  136. package/dist/managers/SanitizerManager.js.map +1 -0
  137. package/dist/managers/ValidatorManager.d.ts +13 -0
  138. package/dist/managers/ValidatorManager.d.ts.map +1 -0
  139. package/dist/managers/ValidatorManager.js +218 -0
  140. package/dist/managers/ValidatorManager.js.map +1 -0
  141. package/dist/middlewares/errorHandler.d.ts +3 -0
  142. package/dist/middlewares/errorHandler.d.ts.map +1 -0
  143. package/dist/middlewares/errorHandler.js +94 -0
  144. package/dist/middlewares/errorHandler.js.map +1 -0
  145. package/dist/middlewares/index.d.ts +3 -0
  146. package/dist/middlewares/index.d.ts.map +1 -0
  147. package/dist/middlewares/index.js +19 -0
  148. package/dist/middlewares/index.js.map +1 -0
  149. package/dist/middlewares/requestLogger.d.ts +2 -0
  150. package/dist/middlewares/requestLogger.d.ts.map +1 -0
  151. package/dist/middlewares/requestLogger.js +8 -0
  152. package/dist/middlewares/requestLogger.js.map +1 -0
  153. package/dist/test/t1.d.ts +1 -0
  154. package/dist/test/t1.d.ts.map +1 -0
  155. package/dist/test/t1.js +3 -0
  156. package/dist/test/t1.js.map +1 -0
  157. package/dist/utils/deepFreeze.d.ts +2 -0
  158. package/dist/utils/deepFreeze.d.ts.map +1 -0
  159. package/dist/utils/deepFreeze.js +69 -0
  160. package/dist/utils/deepFreeze.js.map +1 -0
  161. package/dist/utils/deepMerge.d.ts +5 -0
  162. package/dist/utils/deepMerge.d.ts.map +1 -0
  163. package/dist/utils/deepMerge.js +68 -0
  164. package/dist/utils/deepMerge.js.map +1 -0
  165. package/dist/utils/normalizeOptions.d.ts +38 -0
  166. package/dist/utils/normalizeOptions.d.ts.map +1 -0
  167. package/dist/utils/normalizeOptions.js +119 -0
  168. package/dist/utils/normalizeOptions.js.map +1 -0
  169. package/package.json +50 -0
  170. package/src/adapters/ArgonAdapter.ts +41 -0
  171. package/src/adapters/BcryptAdapter.ts +49 -0
  172. package/src/adapters/ExpressRLAdapter.ts +84 -0
  173. package/src/adapters/ExpressValidatorAdapter.ts +99 -0
  174. package/src/adapters/GoogleAdapter.ts +206 -0
  175. package/src/adapters/JWTAdapter.ts +346 -0
  176. package/src/adapters/RLFlexibleAdapter.ts +139 -0
  177. package/src/adapters/SanitizeHtmlAdapter.ts +162 -0
  178. package/src/adapters/XSSAdapter.ts +153 -0
  179. package/src/adapters/ZodAdapter.ts +91 -0
  180. package/src/core/HiSecure.ts +955 -0
  181. package/src/core/config.ts +156 -0
  182. package/src/core/constants.ts +73 -0
  183. package/src/core/errors/AdapterError.ts +14 -0
  184. package/src/core/errors/HttpErrror.ts +46 -0
  185. package/src/core/errors/SanitizerError.ts +13 -0
  186. package/src/core/errors/SecurityError.ts +13 -0
  187. package/src/core/errors/ValidationError.ts +13 -0
  188. package/src/core/types/HiSecureConfig.ts +62 -0
  189. package/src/core/types/SecureOptions.ts +61 -0
  190. package/src/core/useSecure.ts +111 -0
  191. package/src/examples/e1.ts +1 -0
  192. package/src/index.ts +17 -0
  193. package/src/logging/index.ts +2 -0
  194. package/src/logging/morganSetup.ts +3 -0
  195. package/src/logging/winstonSetup.ts +17 -0
  196. package/src/managers/AuthManager.ts +237 -0
  197. package/src/managers/CorsManager.ts +58 -0
  198. package/src/managers/HashManager.ts +390 -0
  199. package/src/managers/JsonManager.ts +149 -0
  200. package/src/managers/RateLimitManager.ts +368 -0
  201. package/src/managers/SanitizerManager.ts +359 -0
  202. package/src/managers/ValidatorManager.ts +269 -0
  203. package/src/middlewares/errorHandler.ts +265 -0
  204. package/src/middlewares/index.ts +2 -0
  205. package/src/middlewares/requestLogger.ts +5 -0
  206. package/src/test/t1.ts +1 -0
  207. package/src/utils/deepFreeze.ts +76 -0
  208. package/src/utils/deepMerge.ts +87 -0
  209. package/src/utils/normalizeOptions.ts +265 -0
  210. package/tsconfig.json +30 -0
@@ -0,0 +1,273 @@
1
+ "use strict";
2
+ // // // src/core/HiSecure.ts
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.HiSecure = void 0;
8
+ const config_js_1 = require("./config.js");
9
+ const constants_js_1 = require("./constants.js");
10
+ const deepMerge_js_1 = require("../utils/deepMerge.js");
11
+ const deepFreeze_js_1 = require("../utils/deepFreeze.js");
12
+ const index_js_1 = require("../logging/index.js");
13
+ // Adapters
14
+ const ArgonAdapter_js_1 = require("../adapters/ArgonAdapter.js");
15
+ const BcryptAdapter_js_1 = require("../adapters/BcryptAdapter.js");
16
+ const RLFlexibleAdapter_js_1 = require("../adapters/RLFlexibleAdapter.js");
17
+ const ExpressRLAdapter_js_1 = require("../adapters/ExpressRLAdapter.js");
18
+ const ZodAdapter_js_1 = require("../adapters/ZodAdapter.js");
19
+ const ExpressValidatorAdapter_js_1 = require("../adapters/ExpressValidatorAdapter.js");
20
+ const SanitizeHtmlAdapter_js_1 = require("../adapters/SanitizeHtmlAdapter.js");
21
+ const XSSAdapter_js_1 = require("../adapters/XSSAdapter.js");
22
+ // Managers
23
+ const HashManager_js_1 = require("../managers/HashManager.js");
24
+ const RateLimitManager_js_1 = require("../managers/RateLimitManager.js");
25
+ const ValidatorManager_js_1 = require("../managers/ValidatorManager.js");
26
+ const SanitizerManager_js_1 = require("../managers/SanitizerManager.js");
27
+ const JsonManager_js_1 = require("../managers/JsonManager.js");
28
+ const CorsManager_js_1 = require("../managers/CorsManager.js");
29
+ const AuthManager_js_1 = require("../managers/AuthManager.js");
30
+ // Middlewares
31
+ const helmet_1 = __importDefault(require("helmet"));
32
+ const hpp_1 = __importDefault(require("hpp"));
33
+ const compression_1 = __importDefault(require("compression"));
34
+ const errorHandler_js_1 = require("../middlewares/errorHandler.js");
35
+ class HiSecure {
36
+ // Private constructor for singleton
37
+ constructor(userConfig = {}) {
38
+ this.initialized = false;
39
+ this.config = (0, deepMerge_js_1.deepMerge)(config_js_1.defaultConfig, userConfig);
40
+ }
41
+ // =====================================================
42
+ // SINGLETON & INITIALIZATION
43
+ // =====================================================
44
+ static getInstance(config) {
45
+ if (!HiSecure.instance) {
46
+ HiSecure.instance = new HiSecure(config);
47
+ HiSecure.instance.init();
48
+ }
49
+ return HiSecure.instance;
50
+ }
51
+ static resetInstance() {
52
+ HiSecure.instance = null;
53
+ }
54
+ init() {
55
+ if (this.initialized) {
56
+ index_js_1.logger.warn("⚠ HiSecure already initialized");
57
+ return;
58
+ }
59
+ index_js_1.logger.info(`🔐 ${constants_js_1.LIB_NAME} v${constants_js_1.LIB_VERSION} initializing...`);
60
+ this.setupAdapters();
61
+ this.setupManagers();
62
+ this.setupDynamicManagers();
63
+ // Make everything immutable
64
+ (0, deepFreeze_js_1.deepFreeze)(this.config);
65
+ (0, deepFreeze_js_1.deepFreeze)(this.hashManager);
66
+ (0, deepFreeze_js_1.deepFreeze)(this.rateLimitManager);
67
+ (0, deepFreeze_js_1.deepFreeze)(this.validatorManager);
68
+ (0, deepFreeze_js_1.deepFreeze)(this.sanitizerManager);
69
+ (0, deepFreeze_js_1.deepFreeze)(this.jsonManager);
70
+ (0, deepFreeze_js_1.deepFreeze)(this.corsManager);
71
+ if (this.authManager)
72
+ (0, deepFreeze_js_1.deepFreeze)(this.authManager);
73
+ this.initialized = true;
74
+ index_js_1.logger.info("✅ HiSecure initialized successfully");
75
+ }
76
+ isInitialized() {
77
+ return this.initialized;
78
+ }
79
+ // =====================================================
80
+ // FLUENT API METHODS (Route-level security)
81
+ // =====================================================
82
+ static auth(options) {
83
+ const instance = this.getInstance();
84
+ if (!instance.authManager) {
85
+ throw new Error("Auth not enabled. Set auth.enabled=true in config.");
86
+ }
87
+ return instance.authManager.protect(options);
88
+ }
89
+ static validate(schema) {
90
+ return this.getInstance().validatorManager.validate(schema);
91
+ }
92
+ static sanitize(options) {
93
+ return this.getInstance().sanitizerManager.middleware(options);
94
+ }
95
+ static rateLimit(preset) {
96
+ const instance = this.getInstance();
97
+ if (typeof preset === "string") {
98
+ const presets = {
99
+ strict: { mode: "strict" },
100
+ relaxed: { mode: "relaxed" },
101
+ api: { mode: "api", options: { max: 100, windowMs: 60000 } }
102
+ };
103
+ return instance.rateLimitManager.middleware(presets[preset] || {});
104
+ }
105
+ return instance.rateLimitManager.middleware({ options: preset });
106
+ }
107
+ static cors(options) {
108
+ return this.getInstance().corsManager.middleware(options);
109
+ }
110
+ static json(options) {
111
+ const instance = this.getInstance();
112
+ const chain = [];
113
+ chain.push(instance.jsonManager.middleware(options));
114
+ chain.push(instance.jsonManager.urlencoded());
115
+ return chain;
116
+ }
117
+ // =====================================================
118
+ // UTILITY METHODS (Direct usage)
119
+ // =====================================================
120
+ static async hash(password) {
121
+ const instance = this.getInstance();
122
+ const result = await instance.hashManager.hash(password, { allowFallback: true });
123
+ return result.hash;
124
+ }
125
+ static async verify(password, hash) {
126
+ return this.getInstance().hashManager.verify(password, hash);
127
+ }
128
+ // =====================================================
129
+ // GLOBAL MIDDLEWARE (app.use())
130
+ // =====================================================
131
+ static middleware(options) {
132
+ const instance = this.getInstance();
133
+ // Handle preset strings
134
+ if (typeof options === "string") {
135
+ const presets = {
136
+ api: { cors: true, rateLimit: "relaxed", sanitize: true },
137
+ strict: { cors: true, rateLimit: "strict", sanitize: true, auth: true },
138
+ public: { cors: true, rateLimit: true, sanitize: false }
139
+ };
140
+ const presetOptions = presets[options];
141
+ if (presetOptions) {
142
+ return instance.createMiddlewareChain(presetOptions);
143
+ }
144
+ return instance.createMiddlewareChain({});
145
+ }
146
+ return instance.createMiddlewareChain(options || {});
147
+ }
148
+ // =====================================================
149
+ // INTERNAL METHODS
150
+ // =====================================================
151
+ setupAdapters() {
152
+ index_js_1.logger.info("🧩 Setting up adapters...");
153
+ // Hashing
154
+ this.hashingPrimary = this.config.hashing.primary === "argon2"
155
+ ? new ArgonAdapter_js_1.ArgonAdapter()
156
+ : new BcryptAdapter_js_1.BcryptAdapter(this.config.hashing.saltRounds);
157
+ this.hashingFallback = this.config.hashing.fallback === "bcrypt"
158
+ ? new BcryptAdapter_js_1.BcryptAdapter(this.config.hashing.saltRounds)
159
+ : null;
160
+ // Rate limiting
161
+ this.rateLimiterPrimary = this.config.rateLimiter.useAdaptiveMode
162
+ ? new RLFlexibleAdapter_js_1.RLFlexibleAdapter()
163
+ : new ExpressRLAdapter_js_1.ExpressRLAdapter();
164
+ this.rateLimiterFallback = new ExpressRLAdapter_js_1.ExpressRLAdapter();
165
+ // Validation
166
+ this.validatorPrimary = this.config.validation.mode === "zod"
167
+ ? new ZodAdapter_js_1.ZodAdapter()
168
+ : new ExpressValidatorAdapter_js_1.ExpressValidatorAdapter();
169
+ this.validatorFallback = this.config.validation.fallback === "express-validator"
170
+ ? new ExpressValidatorAdapter_js_1.ExpressValidatorAdapter()
171
+ : null;
172
+ // Sanitization
173
+ this.sanitizerPrimary = new SanitizeHtmlAdapter_js_1.SanitizeHtmlAdapter(this.config.sanitizer);
174
+ this.sanitizerFallback = new XSSAdapter_js_1.XSSAdapter(this.config.sanitizer);
175
+ index_js_1.logger.info("✅ Adapters ready");
176
+ }
177
+ setupManagers() {
178
+ this.hashManager = new HashManager_js_1.HashManager(this.config.hashing, this.hashingPrimary, this.hashingFallback);
179
+ this.rateLimitManager = new RateLimitManager_js_1.RateLimitManager(this.config.rateLimiter, this.rateLimiterPrimary, this.rateLimiterFallback);
180
+ this.validatorManager = new ValidatorManager_js_1.ValidatorManager(this.config.validation, this.validatorPrimary, this.validatorFallback);
181
+ this.sanitizerManager = new SanitizerManager_js_1.SanitizerManager(this.sanitizerPrimary, this.sanitizerFallback);
182
+ }
183
+ setupDynamicManagers() {
184
+ this.jsonManager = new JsonManager_js_1.JsonManager();
185
+ this.corsManager = new CorsManager_js_1.CorsManager();
186
+ // Auth manager (only if enabled)
187
+ if (this.config.auth.enabled) {
188
+ const jwtSecret = process.env.JWT_SECRET || this.config.auth.jwtSecret;
189
+ if (!jwtSecret) {
190
+ throw new Error("JWT_SECRET environment variable or jwtSecret in config is required when auth.enabled=true");
191
+ }
192
+ this.authManager = new AuthManager_js_1.AuthManager({
193
+ jwtSecret,
194
+ jwtExpiresIn: this.config.auth.jwtExpiresIn,
195
+ googleClientId: process.env.GOOGLE_CLIENT_ID || this.config.auth.googleClientId
196
+ // Removed algorithm - handled in AuthManager
197
+ });
198
+ }
199
+ }
200
+ createMiddlewareChain(options) {
201
+ const chain = [];
202
+ // JSON parsing
203
+ chain.push(this.jsonManager.middleware(this.config.json));
204
+ chain.push(this.jsonManager.urlencoded(this.config.urlencoded));
205
+ // Security headers
206
+ if (this.config.enableHelmet)
207
+ chain.push((0, helmet_1.default)());
208
+ if (this.config.enableHPP)
209
+ chain.push((0, hpp_1.default)());
210
+ // Compression (check if compression config exists)
211
+ if (this.config.enableCompression && this.config.compression) {
212
+ chain.push((0, compression_1.default)(this.config.compression));
213
+ }
214
+ else if (this.config.enableCompression) {
215
+ chain.push((0, compression_1.default)()); // Use defaults
216
+ }
217
+ // CORS
218
+ if (this.config.enableCORS || options.cors) {
219
+ const corsOptions = options.cors === true ? this.config.cors :
220
+ (typeof options.cors === 'object' ? options.cors : this.config.cors);
221
+ chain.push(this.corsManager.middleware(corsOptions));
222
+ }
223
+ // Sanitization
224
+ if (this.config.enableSanitizer || options.sanitize) {
225
+ const sanitizeOptions = options.sanitize === true ? undefined :
226
+ (typeof options.sanitize === 'object' ? options.sanitize : undefined);
227
+ chain.push(this.sanitizerManager.middleware(sanitizeOptions));
228
+ }
229
+ // Rate limiting
230
+ if (this.config.enableRateLimiter || options.rateLimit) {
231
+ const rateLimitOpts = typeof options.rateLimit === 'object' ?
232
+ { options: options.rateLimit } : {};
233
+ chain.push(this.rateLimitManager.middleware(rateLimitOpts));
234
+ }
235
+ // Authentication
236
+ if (options.auth && this.authManager) {
237
+ const authOpts = options.auth === true ? undefined :
238
+ (typeof options.auth === 'object' ? options.auth : undefined);
239
+ chain.push(this.authManager.protect(authOpts));
240
+ }
241
+ // Error handler (always last)
242
+ chain.push(errorHandler_js_1.errorHandler);
243
+ return chain;
244
+ }
245
+ }
246
+ exports.HiSecure = HiSecure;
247
+ HiSecure.instance = null;
248
+ HiSecure.jwt = {
249
+ sign: (payload, options) => {
250
+ const instance = HiSecure.getInstance();
251
+ if (!instance.authManager) {
252
+ throw new Error("Auth not enabled");
253
+ }
254
+ return instance.authManager.sign(payload, options);
255
+ },
256
+ verify: (token) => {
257
+ const instance = HiSecure.getInstance();
258
+ if (!instance.authManager) {
259
+ throw new Error("Auth not enabled");
260
+ }
261
+ return instance.authManager.verify(token);
262
+ },
263
+ google: {
264
+ verifyIdToken: (idToken) => {
265
+ const instance = HiSecure.getInstance();
266
+ if (!instance.authManager) {
267
+ throw new Error("Auth not enabled");
268
+ }
269
+ return instance.authManager.verifyGoogleIdToken(idToken);
270
+ }
271
+ }
272
+ };
273
+ //# sourceMappingURL=HiSecure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HiSecure.js","sourceRoot":"","sources":["../../src/core/HiSecure.ts"],"names":[],"mappings":"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","sourcesContent":["// // // src/core/HiSecure.ts\r\n\r\n// // import { HiSecureConfig } from \"./types/HiSecureConfig.js\";\r\n// // import { defaultConfig } from \"./config.js\";\r\n// // import { LIB_NAME, LIB_VERSION } from \"./constants.js\";\r\n// // import { deepMerge } from \"../utils/deepMerge.js\";\r\n// // import { deepFreeze } from \"../utils/deepFreeze.js\";\r\n\r\n// // import { logger } from \"../logging\";\r\n\r\n// // // Adapters\r\n// // import { ArgonAdapter } from \"../adapters/ArgonAdapter.js\";\r\n// // import { BcryptAdapter } from \"../adapters/BcryptAdapter.js\";\r\n// // import { RLFlexibleAdapter } from \"../adapters/RLFlexibleAdapter.js\";\r\n// // import { ExpressRLAdapter } from \"../adapters/ExpressRLAdapter.js\";\r\n// // import { ZodAdapter } from \"../adapters/ZodAdapter.js\";\r\n// // import { ExpressValidatorAdapter } from \"../adapters/ExpressValidatorAdapter.js\";\r\n// // import { SanitizeHtmlAdapter } from \"../adapters/SanitizeHtmlAdapter.js\";\r\n// // import { DomPurifyAdapter } from \"../adapters/DomPurifyAdapter.js\";\r\n\r\n// // // Managers\r\n// // import { HashManager } from \"../managers/HashManager.js\";\r\n// // import { RateLimitManager } from \"../managers/RateLimitManager.js\";\r\n// // import { ValidatorManager } from \"../managers/ValidatorManager.js\";\r\n// // import { SanitizerManager } from \"../managers/SanitizerManager.js\";\r\n// // import { JsonManager } from \"../managers/JsonManager.js\";\r\n// // import { CorsManager } from \"../managers/CorsManager.js\";\r\n// // import { AuthManager } from \"../managers/AuthManager.js\";\r\n\r\n// // // 3rd-party express middlewares\r\n// // import helmet from \"helmet\";\r\n// // import hpp from \"hpp\";\r\n\r\n// // // Shared error handler\r\n// // import { errorHandler } from \"../middlewares/errorHandler.js\";\r\n\r\n// // export class HiSecure {\r\n// // private config: HiSecureConfig;\r\n// // private initialized = false;\r\n\r\n// // // Managers exposed for user\r\n// // public hashManager!: HashManager;\r\n// // public rateLimitManager!: RateLimitManager;\r\n// // public validatorManager!: ValidatorManager;\r\n// // public sanitizerManager!: SanitizerManager;\r\n// // public jsonManager!: JsonManager;\r\n// // public corsManager!: CorsManager;\r\n// // public authManager?: AuthManager;\r\n\r\n// // // Internal adapters\r\n// // private hashingPrimary: any;\r\n// // private hashingFallback: any;\r\n// // private rateLimiterPrimary: any;\r\n// // private rateLimiterFallback: any;\r\n// // private validatorPrimary: any;\r\n// // private validatorFallback: any;\r\n// // private sanitizerPrimary: any;\r\n// // private sanitizerFallback: any;\r\n\r\n// // constructor(userConfig: Partial<HiSecureConfig> = {}) {\r\n// // this.config = deepMerge(defaultConfig, userConfig);\r\n// // }\r\n\r\n// // // ---------------------------------------------------------\r\n// // // INIT\r\n// // // ---------------------------------------------------------\r\n// // init() {\r\n// // if (this.initialized) {\r\n// // logger.warn(\"⚠ HiSecure.init() called twice → ignored.\");\r\n// // return;\r\n// // }\r\n\r\n// // logger.info(`🔐 ${LIB_NAME} v${LIB_VERSION} initialized`);\r\n// // logger.info(\"⚙ Loaded configuration:\", this.config);\r\n\r\n// // this.setupAdapters();\r\n// // this.setupManagers();\r\n// // this.setupDynamicManagers();\r\n\r\n// // // IMMUTABLE — library cannot be modified at runtime\r\n// // deepFreeze(this.config);\r\n// // deepFreeze(this.hashManager);\r\n// // deepFreeze(this.rateLimitManager);\r\n// // deepFreeze(this.validatorManager);\r\n// // deepFreeze(this.sanitizerManager);\r\n// // deepFreeze(this.jsonManager);\r\n// // deepFreeze(this.corsManager);\r\n// // if (this.authManager) deepFreeze(this.authManager);\r\n\r\n// // this.initialized = true;\r\n\r\n// // logger.info(\"🔒 HiSecure locked — production-ready\");\r\n// // }\r\n\r\n// // isInitialized() {\r\n// // return this.initialized;\r\n// // }\r\n\r\n// // // ---------------------------------------------------------\r\n// // // ADAPTER SETUP\r\n// // // ---------------------------------------------------------\r\n// // private setupAdapters() {\r\n// // logger.info(\"🧩 Setting up adapters...\");\r\n\r\n// // // Hashing\r\n// // this.hashingPrimary =\r\n// // this.config.hashing.primary === \"argon2\"\r\n// // ? new ArgonAdapter()\r\n// // : new BcryptAdapter(this.config.hashing.saltRounds);\r\n\r\n// // this.hashingFallback =\r\n// // this.config.hashing.fallback === \"bcrypt\"\r\n// // ? new BcryptAdapter(this.config.hashing.saltRounds)\r\n// // : null;\r\n\r\n// // // Rate limiter\r\n// // this.rateLimiterPrimary =\r\n// // this.config.rateLimiter.useAdaptiveMode\r\n// // ? new RLFlexibleAdapter()\r\n// // : new ExpressRLAdapter();\r\n\r\n// // this.rateLimiterFallback = new ExpressRLAdapter();\r\n\r\n// // // Validator\r\n// // this.validatorPrimary =\r\n// // this.config.validation.mode === \"zod\"\r\n// // ? new ZodAdapter()\r\n// // : new ExpressValidatorAdapter();\r\n\r\n// // this.validatorFallback =\r\n// // this.config.validation.fallback === \"express-validator\"\r\n// // ? new ExpressValidatorAdapter()\r\n// // : null;\r\n\r\n// // // Sanitizer\r\n// // this.sanitizerPrimary = new SanitizeHtmlAdapter(this.config.sanitizer);\r\n// // this.sanitizerFallback = new DomPurifyAdapter();\r\n\r\n// // logger.info(\"✔ Adapters ready\");\r\n// // }\r\n\r\n// // // ---------------------------------------------------------\r\n// // // MANAGER SETUP\r\n// // // ---------------------------------------------------------\r\n// // private setupManagers() {\r\n// // this.hashManager = new HashManager(\r\n// // this.config.hashing,\r\n// // this.hashingPrimary,\r\n// // this.hashingFallback\r\n// // );\r\n\r\n// // this.rateLimitManager = new RateLimitManager(\r\n// // this.config.rateLimiter,\r\n// // this.rateLimiterPrimary,\r\n// // this.rateLimiterFallback\r\n// // );\r\n\r\n// // this.validatorManager = new ValidatorManager(\r\n// // this.config.validation,\r\n// // this.validatorPrimary,\r\n// // this.validatorFallback\r\n// // );\r\n\r\n// // this.sanitizerManager = new SanitizerManager(\r\n// // this.sanitizerPrimary,\r\n// // this.sanitizerFallback\r\n// // );\r\n// // }\r\n\r\n// // // ---------------------------------------------------------\r\n// // // DYNAMIC MANAGERS (JSON, CORS, AUTH)\r\n// // // ---------------------------------------------------------\r\n// // private setupDynamicManagers() {\r\n// // this.jsonManager = new JsonManager();\r\n// // this.corsManager = new CorsManager();\r\n\r\n// // // AUTH SUPPORT\r\n// // if (this.config.auth?.enabled) {\r\n// // this.authManager = new AuthManager({\r\n// // jwtSecret: process.env.JWT_SECRET!,\r\n// // jwtExpiresIn: this.config.auth.jwtExpiresIn,\r\n// // googleClientId: process.env.GOOGLE_CLIENT_ID\r\n// // });\r\n// // }\r\n// // }\r\n\r\n// // // ---------------------------------------------------------\r\n// // // PUBLIC API METHODS\r\n// // // ---------------------------------------------------------\r\n// // hash(value: string) {\r\n// // return this.hashManager.hash(value);\r\n// // }\r\n\r\n// // verify(value: string, hashed: string) {\r\n// // return this.hashManager.verify(value, hashed);\r\n// // }\r\n\r\n// // sanitize(value: string) {\r\n// // return this.sanitizerManager.sanitize(value);\r\n// // }\r\n\r\n// // validate(schema: any) {\r\n// // return this.validatorManager.validate(schema);\r\n// // }\r\n\r\n// // // ---------------------------------------------------------\r\n// // // EXPRESS GLOBAL PIPELINE\r\n// // // ---------------------------------------------------------\r\n// // middleware() {\r\n// // const chain: any[] = [];\r\n\r\n// // // JSON + URL encoded\r\n// // chain.push(this.jsonManager.middleware(this.config.json));\r\n// // chain.push(this.jsonManager.urlencoded(this.config.urlencoded));\r\n\r\n// // // add qs\r\n// // chain.push(this.jsonManager.queryParser());\r\n\r\n// // // Core security\r\n// // if (this.config.enableHelmet) chain.push(helmet());\r\n// // if (this.config.enableHPP) chain.push(hpp());\r\n\r\n// // if (this.config.enableCORS)\r\n// // chain.push(this.corsManager.middleware(this.config.cors));\r\n\r\n// // if (this.config.enableSanitizer)\r\n// // chain.push(this.sanitizerManager.middleware());\r\n\r\n// // if (this.config.enableRateLimiter)\r\n// // chain.push(this.rateLimitManager.middleware());\r\n\r\n// // // Centralized error handling\r\n// // chain.push(errorHandler);\r\n\r\n// // return chain;\r\n// // }\r\n// // }\r\n\r\n\r\n\r\n// // src/core/HiSecure.ts - COMPLETE FIXED\r\n// import { HiSecureConfig } from \"./types/HiSecureConfig.js\";\r\n// import { defaultConfig } from \"./config.js\";\r\n// import { LIB_NAME, LIB_VERSION } from \"./constants.js\";\r\n// import { deepMerge } from \"../utils/deepMerge.js\";\r\n// import { deepFreeze } from \"../utils/deepFreeze.js\";\r\n// import { logger } from \"../logging/index.js\";\r\n\r\n// // Adapters\r\n// import { ArgonAdapter } from \"../adapters/ArgonAdapter.js\";\r\n// import { BcryptAdapter } from \"../adapters/BcryptAdapter.js\";\r\n// import { RLFlexibleAdapter } from \"../adapters/RLFlexibleAdapter.js\";\r\n// import { ExpressRLAdapter } from \"../adapters/ExpressRLAdapter.js\";\r\n// import { ZodAdapter } from \"../adapters/ZodAdapter.js\";\r\n// import { ExpressValidatorAdapter } from \"../adapters/ExpressValidatorAdapter.js\";\r\n// import { SanitizeHtmlAdapter } from \"../adapters/SanitizeHtmlAdapter.js\";\r\n// import { XSSAdapter } from \"../adapters/XSSAdapter.js\"; // ✅ FIXED IMPORT\r\n\r\n// // Managers\r\n// import { HashManager } from \"../managers/HashManager.js\";\r\n// import { RateLimitManager } from \"../managers/RateLimitManager.js\";\r\n// import { ValidatorManager } from \"../managers/ValidatorManager.js\";\r\n// import { SanitizerManager } from \"../managers/SanitizerManager.js\";\r\n// import { JsonManager } from \"../managers/JsonManager.js\";\r\n// import { CorsManager } from \"../managers/CorsManager.js\";\r\n// import { AuthManager } from \"../managers/AuthManager.js\";\r\n\r\n// // Middlewares\r\n// import helmet from \"helmet\";\r\n// import hpp from \"hpp\";\r\n// import compression from \"compression\";\r\n// import { errorHandler } from \"../middlewares/errorHandler.js\";\r\n\r\n// // Types\r\n// import { SecureOptions, ValidationSchema } from \"./types/SecureOptions.js\";\r\n\r\n// export class HiSecure {\r\n// private static instance: HiSecure | null = null;\r\n// private config: HiSecureConfig;\r\n// private initialized = false;\r\n\r\n// // Managers\r\n// public hashManager!: HashManager;\r\n// public rateLimitManager!: RateLimitManager;\r\n// public validatorManager!: ValidatorManager;\r\n// public sanitizerManager!: SanitizerManager;\r\n// public jsonManager!: JsonManager;\r\n// public corsManager!: CorsManager;\r\n// public authManager?: AuthManager;\r\n\r\n// // Internal adapters\r\n// private hashingPrimary: any;\r\n// private hashingFallback: any;\r\n// private rateLimiterPrimary: any;\r\n// private rateLimiterFallback: any;\r\n// private validatorPrimary: any;\r\n// private validatorFallback: any;\r\n// private sanitizerPrimary: any;\r\n// private sanitizerFallback: any;\r\n\r\n// // Private constructor for singleton\r\n// private constructor(userConfig: Partial<HiSecureConfig> = {}) {\r\n// this.config = deepMerge(defaultConfig, userConfig);\r\n// }\r\n\r\n// // =====================================================\r\n// // SINGLETON & INITIALIZATION\r\n// // =====================================================\r\n \r\n// static getInstance(config?: Partial<HiSecureConfig>): HiSecure {\r\n// if (!HiSecure.instance) {\r\n// HiSecure.instance = new HiSecure(config);\r\n// HiSecure.instance.init();\r\n// }\r\n// return HiSecure.instance;\r\n// }\r\n\r\n// static resetInstance(): void {\r\n// HiSecure.instance = null;\r\n// }\r\n\r\n// init(): void {\r\n// if (this.initialized) {\r\n// logger.warn(\"⚠ HiSecure already initialized\");\r\n// return;\r\n// }\r\n\r\n// logger.info(`🔐 ${LIB_NAME} v${LIB_VERSION} initializing...`);\r\n\r\n// this.setupAdapters();\r\n// this.setupManagers();\r\n// this.setupDynamicManagers();\r\n\r\n// // Make everything immutable\r\n// deepFreeze(this.config);\r\n// deepFreeze(this.hashManager);\r\n// deepFreeze(this.rateLimitManager);\r\n// deepFreeze(this.validatorManager);\r\n// deepFreeze(this.sanitizerManager);\r\n// deepFreeze(this.jsonManager);\r\n// deepFreeze(this.corsManager);\r\n// if (this.authManager) deepFreeze(this.authManager);\r\n\r\n// this.initialized = true;\r\n// logger.info(\"✅ HiSecure initialized successfully\");\r\n// }\r\n\r\n// isInitialized(): boolean {\r\n// return this.initialized;\r\n// }\r\n\r\n// // =====================================================\r\n// // FLUENT API METHODS (Route-level security)\r\n// // =====================================================\r\n \r\n// static auth(options?: { required?: boolean; roles?: string[] }) {\r\n// const instance = this.getInstance();\r\n// if (!instance.authManager) {\r\n// throw new Error(\"Auth not enabled. Set auth.enabled=true in config.\");\r\n// }\r\n// return instance.authManager.protect(options);\r\n// }\r\n\r\n// static validate(schema: ValidationSchema) {\r\n// return this.getInstance().validatorManager.validate(schema);\r\n// }\r\n\r\n// static sanitize(options?: any) {\r\n// return this.getInstance().sanitizerManager.middleware(options);\r\n// }\r\n\r\n// static rateLimit(preset: \"strict\" | \"relaxed\" | \"api\" | object) {\r\n// const instance = this.getInstance();\r\n \r\n// if (typeof preset === \"string\") {\r\n// const presets = {\r\n// strict: { mode: \"strict\" as const },\r\n// relaxed: { mode: \"relaxed\" as const },\r\n// api: { max: 100, windowMs: 60000 }\r\n// };\r\n// return instance.rateLimitManager.middleware(presets[preset] || {});\r\n// }\r\n \r\n// return instance.rateLimitManager.middleware({ options: preset });\r\n// }\r\n\r\n// static cors(options?: any) {\r\n// return this.getInstance().corsManager.middleware(options);\r\n// }\r\n\r\n// static json(options?: any) {\r\n// const instance = this.getInstance();\r\n// const chain = [];\r\n// chain.push(instance.jsonManager.middleware(options));\r\n// chain.push(instance.jsonManager.urlencoded());\r\n// return chain;\r\n// }\r\n\r\n// // =====================================================\r\n// // UTILITY METHODS (Direct usage)\r\n// // =====================================================\r\n \r\n// static async hash(password: string): Promise<string> {\r\n// const instance = this.getInstance();\r\n// const result = await instance.hashManager.hash(password, { allowFallback: true });\r\n// return result.hash;\r\n// }\r\n\r\n// static async verify(password: string, hash: string): Promise<boolean> {\r\n// return this.getInstance().hashManager.verify(password, hash);\r\n// }\r\n\r\n// static jwt = {\r\n// sign: (payload: object, options?: any) => {\r\n// const instance = HiSecure.getInstance();\r\n// if (!instance.authManager) {\r\n// throw new Error(\"Auth not enabled\");\r\n// }\r\n// return instance.authManager.sign(payload, options);\r\n// },\r\n \r\n// verify: (token: string) => {\r\n// const instance = HiSecure.getInstance();\r\n// if (!instance.authManager) {\r\n// throw new Error(\"Auth not enabled\");\r\n// }\r\n// return instance.authManager.verify(token);\r\n// },\r\n \r\n// google: {\r\n// verifyIdToken: (idToken: string) => {\r\n// const instance = HiSecure.getInstance();\r\n// if (!instance.authManager) {\r\n// throw new Error(\"Auth not enabled\");\r\n// }\r\n// return instance.authManager.verifyGoogleIdToken(idToken);\r\n// }\r\n// }\r\n// };\r\n\r\n// // =====================================================\r\n// // GLOBAL MIDDLEWARE (app.use())\r\n// // =====================================================\r\n \r\n// static middleware(options?: SecureOptions | \"api\" | \"strict\" | \"public\") {\r\n// const instance = this.getInstance();\r\n \r\n// // Handle preset strings\r\n// if (typeof options === \"string\") {\r\n// const presets = {\r\n// api: { cors: true, rateLimit: \"relaxed\", sanitize: true },\r\n// strict: { cors: true, rateLimit: \"strict\", sanitize: true, auth: true },\r\n// public: { cors: true, rateLimit: true }\r\n// };\r\n// options = presets[options] || {};\r\n// }\r\n \r\n// return instance.createMiddlewareChain(options || {});\r\n// }\r\n\r\n// // =====================================================\r\n// // INTERNAL METHODS\r\n// // =====================================================\r\n \r\n// private setupAdapters(): void {\r\n// logger.info(\"🧩 Setting up adapters...\");\r\n\r\n// // Hashing\r\n// this.hashingPrimary = this.config.hashing.primary === \"argon2\"\r\n// ? new ArgonAdapter()\r\n// : new BcryptAdapter(this.config.hashing.saltRounds);\r\n\r\n// this.hashingFallback = this.config.hashing.fallback === \"bcrypt\"\r\n// ? new BcryptAdapter(this.config.hashing.saltRounds)\r\n// : null;\r\n\r\n// // Rate limiting\r\n// this.rateLimiterPrimary = this.config.rateLimiter.useAdaptiveMode\r\n// ? new RLFlexibleAdapter()\r\n// : new ExpressRLAdapter();\r\n// this.rateLimiterFallback = new ExpressRLAdapter();\r\n\r\n// // Validation\r\n// this.validatorPrimary = this.config.validation.mode === \"zod\"\r\n// ? new ZodAdapter()\r\n// : new ExpressValidatorAdapter();\r\n// this.validatorFallback = this.config.validation.fallback === \"express-validator\"\r\n// ? new ExpressValidatorAdapter()\r\n// : null;\r\n\r\n// // Sanitization\r\n// this.sanitizerPrimary = new SanitizeHtmlAdapter(this.config.sanitizer);\r\n// this.sanitizerFallback = new XSSAdapter(this.config.sanitizer); // ✅ XSSAdapter, NOT DomPurifyAdapter\r\n\r\n// logger.info(\"✅ Adapters ready\");\r\n// }\r\n\r\n// private setupManagers(): void {\r\n// this.hashManager = new HashManager(\r\n// this.config.hashing,\r\n// this.hashingPrimary,\r\n// this.hashingFallback\r\n// );\r\n\r\n// this.rateLimitManager = new RateLimitManager(\r\n// this.config.rateLimiter,\r\n// this.rateLimiterPrimary,\r\n// this.rateLimiterFallback\r\n// );\r\n\r\n// this.validatorManager = new ValidatorManager(\r\n// this.config.validation,\r\n// this.validatorPrimary,\r\n// this.validatorFallback\r\n// );\r\n\r\n// this.sanitizerManager = new SanitizerManager(\r\n// this.sanitizerPrimary,\r\n// this.sanitizerFallback\r\n// );\r\n// }\r\n\r\n// private setupDynamicManagers(): void {\r\n// this.jsonManager = new JsonManager();\r\n// this.corsManager = new CorsManager();\r\n\r\n// // Auth manager (only if enabled)\r\n// if (this.config.auth.enabled) {\r\n// const jwtSecret = process.env.JWT_SECRET || this.config.auth.jwtSecret;\r\n// if (!jwtSecret) {\r\n// throw new Error(\"JWT_SECRET environment variable or jwtSecret in config is required when auth.enabled=true\");\r\n// }\r\n\r\n// this.authManager = new AuthManager({\r\n// jwtSecret,\r\n// jwtExpiresIn: this.config.auth.jwtExpiresIn,\r\n// googleClientId: process.env.GOOGLE_CLIENT_ID || this.config.auth.googleClientId,\r\n// // ✅ Add algorithm option for JWT security\r\n// algorithm: 'HS256'\r\n// });\r\n// }\r\n// }\r\n\r\n// private createMiddlewareChain(options: SecureOptions): any[] {\r\n// const chain: any[] = [];\r\n \r\n// // JSON parsing\r\n// chain.push(this.jsonManager.middleware(this.config.json));\r\n// chain.push(this.jsonManager.urlencoded(this.config.urlencoded));\r\n \r\n// // Security headers\r\n// if (this.config.enableHelmet) chain.push(helmet());\r\n// if (this.config.enableHPP) chain.push(hpp());\r\n \r\n// // Compression (check if compression config exists)\r\n// if (this.config.enableCompression && this.config.compression) {\r\n// chain.push(compression(this.config.compression));\r\n// } else if (this.config.enableCompression) {\r\n// chain.push(compression()); // Use defaults\r\n// }\r\n \r\n// // CORS\r\n// if (this.config.enableCORS || options.cors) {\r\n// const corsOptions = options.cors === true ? this.config.cors : \r\n// (typeof options.cors === 'object' ? options.cors : this.config.cors);\r\n// chain.push(this.corsManager.middleware(corsOptions));\r\n// }\r\n \r\n// // Sanitization\r\n// if (this.config.enableSanitizer || options.sanitize) {\r\n// const sanitizeOptions = options.sanitize === true ? undefined : \r\n// (typeof options.sanitize === 'object' ? options.sanitize : undefined);\r\n// chain.push(this.sanitizerManager.middleware(sanitizeOptions));\r\n// }\r\n \r\n// // Rate limiting\r\n// if (this.config.enableRateLimiter || options.rateLimit) {\r\n// const rateLimitOpts = typeof options.rateLimit === 'object' ? \r\n// { options: options.rateLimit } : {};\r\n// chain.push(this.rateLimitManager.middleware(rateLimitOpts));\r\n// }\r\n \r\n// // Authentication\r\n// if (options.auth && this.authManager) {\r\n// const authOpts = options.auth === true ? undefined : \r\n// (typeof options.auth === 'object' ? options.auth : undefined);\r\n// chain.push(this.authManager.protect(authOpts));\r\n// }\r\n \r\n// // Error handler (always last)\r\n// chain.push(errorHandler);\r\n \r\n// return chain;\r\n// }\r\n// }\r\n\r\n\r\n// src/core/HiSecure.ts - COMPLETELY FIXED\r\nimport { HiSecureConfig } from \"./types/HiSecureConfig.js\";\r\nimport { defaultConfig } from \"./config.js\";\r\nimport { LIB_NAME, LIB_VERSION } from \"./constants.js\";\r\nimport { deepMerge } from \"../utils/deepMerge.js\";\r\nimport { deepFreeze } from \"../utils/deepFreeze.js\";\r\nimport { logger } from \"../logging/index.js\";\r\n\r\n// Adapters\r\nimport { ArgonAdapter } from \"../adapters/ArgonAdapter.js\";\r\nimport { BcryptAdapter } from \"../adapters/BcryptAdapter.js\";\r\nimport { RLFlexibleAdapter } from \"../adapters/RLFlexibleAdapter.js\";\r\nimport { ExpressRLAdapter } from \"../adapters/ExpressRLAdapter.js\";\r\nimport { ZodAdapter } from \"../adapters/ZodAdapter.js\";\r\nimport { ExpressValidatorAdapter } from \"../adapters/ExpressValidatorAdapter.js\";\r\nimport { SanitizeHtmlAdapter } from \"../adapters/SanitizeHtmlAdapter.js\";\r\nimport { XSSAdapter } from \"../adapters/XSSAdapter.js\";\r\n\r\n// Managers\r\nimport { HashManager } from \"../managers/HashManager.js\";\r\nimport { RateLimitManager } from \"../managers/RateLimitManager.js\";\r\nimport { ValidatorManager } from \"../managers/ValidatorManager.js\";\r\nimport { SanitizerManager } from \"../managers/SanitizerManager.js\";\r\nimport { JsonManager } from \"../managers/JsonManager.js\";\r\nimport { CorsManager } from \"../managers/CorsManager.js\";\r\nimport { AuthManager } from \"../managers/AuthManager.js\";\r\n\r\n// Middlewares\r\nimport helmet from \"helmet\";\r\nimport hpp from \"hpp\";\r\nimport compression from \"compression\";\r\nimport { errorHandler } from \"../middlewares/errorHandler.js\";\r\n\r\n// Types\r\nimport { SecureOptions, ValidationSchema, RateLimitOptions } from \"./types/SecureOptions.js\";\r\n\r\nexport class HiSecure {\r\n private static instance: HiSecure | null = null;\r\n private config: HiSecureConfig;\r\n private initialized = false;\r\n\r\n // Managers\r\n public hashManager!: HashManager;\r\n public rateLimitManager!: RateLimitManager;\r\n public validatorManager!: ValidatorManager;\r\n public sanitizerManager!: SanitizerManager;\r\n public jsonManager!: JsonManager;\r\n public corsManager!: CorsManager;\r\n public authManager?: AuthManager;\r\n\r\n // Internal adapters\r\n private hashingPrimary: any;\r\n private hashingFallback: any;\r\n private rateLimiterPrimary: any;\r\n private rateLimiterFallback: any;\r\n private validatorPrimary: any;\r\n private validatorFallback: any;\r\n private sanitizerPrimary: any;\r\n private sanitizerFallback: any;\r\n\r\n // Private constructor for singleton\r\n private constructor(userConfig: Partial<HiSecureConfig> = {}) {\r\n this.config = deepMerge(defaultConfig, userConfig);\r\n }\r\n\r\n // =====================================================\r\n // SINGLETON & INITIALIZATION\r\n // =====================================================\r\n \r\n static getInstance(config?: Partial<HiSecureConfig>): HiSecure {\r\n if (!HiSecure.instance) {\r\n HiSecure.instance = new HiSecure(config);\r\n HiSecure.instance.init();\r\n }\r\n return HiSecure.instance;\r\n }\r\n\r\n static resetInstance(): void {\r\n HiSecure.instance = null;\r\n }\r\n\r\n init(): void {\r\n if (this.initialized) {\r\n logger.warn(\"⚠ HiSecure already initialized\");\r\n return;\r\n }\r\n\r\n logger.info(`🔐 ${LIB_NAME} v${LIB_VERSION} initializing...`);\r\n\r\n this.setupAdapters();\r\n this.setupManagers();\r\n this.setupDynamicManagers();\r\n\r\n // Make everything immutable\r\n deepFreeze(this.config);\r\n deepFreeze(this.hashManager);\r\n deepFreeze(this.rateLimitManager);\r\n deepFreeze(this.validatorManager);\r\n deepFreeze(this.sanitizerManager);\r\n deepFreeze(this.jsonManager);\r\n deepFreeze(this.corsManager);\r\n if (this.authManager) deepFreeze(this.authManager);\r\n\r\n this.initialized = true;\r\n logger.info(\"✅ HiSecure initialized successfully\");\r\n }\r\n\r\n isInitialized(): boolean {\r\n return this.initialized;\r\n }\r\n\r\n // =====================================================\r\n // FLUENT API METHODS (Route-level security)\r\n // =====================================================\r\n \r\n static auth(options?: { required?: boolean; roles?: string[] }) {\r\n const instance = this.getInstance();\r\n if (!instance.authManager) {\r\n throw new Error(\"Auth not enabled. Set auth.enabled=true in config.\");\r\n }\r\n return instance.authManager.protect(options);\r\n }\r\n\r\n static validate(schema: ValidationSchema) {\r\n return this.getInstance().validatorManager.validate(schema);\r\n }\r\n\r\n static sanitize(options?: any) {\r\n return this.getInstance().sanitizerManager.middleware(options);\r\n }\r\n\r\n static rateLimit(preset: \"strict\" | \"relaxed\" | \"api\" | object) {\r\n const instance = this.getInstance();\r\n \r\n if (typeof preset === \"string\") {\r\n const presets: Record<string, { mode?: \"strict\" | \"relaxed\" | \"api\"; options?: any }> = {\r\n strict: { mode: \"strict\" },\r\n relaxed: { mode: \"relaxed\" },\r\n api: { mode: \"api\", options: { max: 100, windowMs: 60000 } }\r\n };\r\n return instance.rateLimitManager.middleware(presets[preset] || {});\r\n }\r\n \r\n return instance.rateLimitManager.middleware({ options: preset });\r\n }\r\n\r\n static cors(options?: any) {\r\n return this.getInstance().corsManager.middleware(options);\r\n }\r\n\r\n static json(options?: any) {\r\n const instance = this.getInstance();\r\n const chain = [];\r\n chain.push(instance.jsonManager.middleware(options));\r\n chain.push(instance.jsonManager.urlencoded());\r\n return chain;\r\n }\r\n\r\n // =====================================================\r\n // UTILITY METHODS (Direct usage)\r\n // =====================================================\r\n \r\n static async hash(password: string): Promise<string> {\r\n const instance = this.getInstance();\r\n const result = await instance.hashManager.hash(password, { allowFallback: true });\r\n return result.hash;\r\n }\r\n\r\n static async verify(password: string, hash: string): Promise<boolean> {\r\n return this.getInstance().hashManager.verify(password, hash);\r\n }\r\n\r\n static jwt = {\r\n sign: (payload: object, options?: any) => {\r\n const instance = HiSecure.getInstance();\r\n if (!instance.authManager) {\r\n throw new Error(\"Auth not enabled\");\r\n }\r\n return instance.authManager.sign(payload, options);\r\n },\r\n \r\n verify: (token: string) => {\r\n const instance = HiSecure.getInstance();\r\n if (!instance.authManager) {\r\n throw new Error(\"Auth not enabled\");\r\n }\r\n return instance.authManager.verify(token);\r\n },\r\n \r\n google: {\r\n verifyIdToken: (idToken: string) => {\r\n const instance = HiSecure.getInstance();\r\n if (!instance.authManager) {\r\n throw new Error(\"Auth not enabled\");\r\n }\r\n return instance.authManager.verifyGoogleIdToken(idToken);\r\n }\r\n }\r\n };\r\n\r\n // =====================================================\r\n // GLOBAL MIDDLEWARE (app.use())\r\n // =====================================================\r\n \r\n static middleware(options?: SecureOptions | \"api\" | \"strict\" | \"public\") {\r\n const instance = this.getInstance();\r\n \r\n // Handle preset strings\r\n if (typeof options === \"string\") {\r\n const presets: Record<string, SecureOptions> = {\r\n api: { cors: true, rateLimit: \"relaxed\" as any, sanitize: true },\r\n strict: { cors: true, rateLimit: \"strict\" as any, sanitize: true, auth: true },\r\n public: { cors: true, rateLimit: true as any, sanitize: false }\r\n };\r\n const presetOptions = presets[options];\r\n if (presetOptions) {\r\n return instance.createMiddlewareChain(presetOptions);\r\n }\r\n return instance.createMiddlewareChain({});\r\n }\r\n \r\n return instance.createMiddlewareChain(options || {});\r\n }\r\n\r\n // =====================================================\r\n // INTERNAL METHODS\r\n // =====================================================\r\n \r\n private setupAdapters(): void {\r\n logger.info(\"🧩 Setting up adapters...\");\r\n\r\n // Hashing\r\n this.hashingPrimary = this.config.hashing.primary === \"argon2\"\r\n ? new ArgonAdapter()\r\n : new BcryptAdapter(this.config.hashing.saltRounds);\r\n\r\n this.hashingFallback = this.config.hashing.fallback === \"bcrypt\"\r\n ? new BcryptAdapter(this.config.hashing.saltRounds)\r\n : null;\r\n\r\n // Rate limiting\r\n this.rateLimiterPrimary = this.config.rateLimiter.useAdaptiveMode\r\n ? new RLFlexibleAdapter()\r\n : new ExpressRLAdapter();\r\n this.rateLimiterFallback = new ExpressRLAdapter();\r\n\r\n // Validation\r\n this.validatorPrimary = this.config.validation.mode === \"zod\"\r\n ? new ZodAdapter()\r\n : new ExpressValidatorAdapter();\r\n this.validatorFallback = this.config.validation.fallback === \"express-validator\"\r\n ? new ExpressValidatorAdapter()\r\n : null;\r\n\r\n // Sanitization\r\n this.sanitizerPrimary = new SanitizeHtmlAdapter(this.config.sanitizer);\r\n this.sanitizerFallback = new XSSAdapter(this.config.sanitizer);\r\n\r\n logger.info(\"✅ Adapters ready\");\r\n }\r\n\r\n private setupManagers(): void {\r\n this.hashManager = new HashManager(\r\n this.config.hashing,\r\n this.hashingPrimary,\r\n this.hashingFallback\r\n );\r\n\r\n this.rateLimitManager = new RateLimitManager(\r\n this.config.rateLimiter,\r\n this.rateLimiterPrimary,\r\n this.rateLimiterFallback\r\n );\r\n\r\n this.validatorManager = new ValidatorManager(\r\n this.config.validation,\r\n this.validatorPrimary,\r\n this.validatorFallback\r\n );\r\n\r\n this.sanitizerManager = new SanitizerManager(\r\n this.sanitizerPrimary,\r\n this.sanitizerFallback\r\n );\r\n }\r\n\r\n private setupDynamicManagers(): void {\r\n this.jsonManager = new JsonManager();\r\n this.corsManager = new CorsManager();\r\n\r\n // Auth manager (only if enabled)\r\n if (this.config.auth.enabled) {\r\n const jwtSecret = process.env.JWT_SECRET || this.config.auth.jwtSecret;\r\n if (!jwtSecret) {\r\n throw new Error(\"JWT_SECRET environment variable or jwtSecret in config is required when auth.enabled=true\");\r\n }\r\n\r\n this.authManager = new AuthManager({\r\n jwtSecret,\r\n jwtExpiresIn: this.config.auth.jwtExpiresIn,\r\n googleClientId: process.env.GOOGLE_CLIENT_ID || this.config.auth.googleClientId\r\n // Removed algorithm - handled in AuthManager\r\n });\r\n }\r\n }\r\n\r\n private createMiddlewareChain(options: SecureOptions): any[] {\r\n const chain: any[] = [];\r\n \r\n // JSON parsing\r\n chain.push(this.jsonManager.middleware(this.config.json));\r\n chain.push(this.jsonManager.urlencoded(this.config.urlencoded));\r\n \r\n // Security headers\r\n if (this.config.enableHelmet) chain.push(helmet());\r\n if (this.config.enableHPP) chain.push(hpp());\r\n \r\n // Compression (check if compression config exists)\r\n if (this.config.enableCompression && this.config.compression) {\r\n chain.push(compression(this.config.compression));\r\n } else if (this.config.enableCompression) {\r\n chain.push(compression()); // Use defaults\r\n }\r\n \r\n // CORS\r\n if (this.config.enableCORS || options.cors) {\r\n const corsOptions = options.cors === true ? this.config.cors : \r\n (typeof options.cors === 'object' ? options.cors : this.config.cors);\r\n chain.push(this.corsManager.middleware(corsOptions));\r\n }\r\n \r\n // Sanitization\r\n if (this.config.enableSanitizer || options.sanitize) {\r\n const sanitizeOptions = options.sanitize === true ? undefined : \r\n (typeof options.sanitize === 'object' ? options.sanitize : undefined);\r\n chain.push(this.sanitizerManager.middleware(sanitizeOptions));\r\n }\r\n \r\n // Rate limiting\r\n if (this.config.enableRateLimiter || options.rateLimit) {\r\n const rateLimitOpts = typeof options.rateLimit === 'object' ? \r\n { options: options.rateLimit } : {};\r\n chain.push(this.rateLimitManager.middleware(rateLimitOpts));\r\n }\r\n \r\n // Authentication\r\n if (options.auth && this.authManager) {\r\n const authOpts = options.auth === true ? undefined : \r\n (typeof options.auth === 'object' ? options.auth : undefined);\r\n chain.push(this.authManager.protect(authOpts));\r\n }\r\n \r\n // Error handler (always last)\r\n chain.push(errorHandler);\r\n \r\n return chain;\r\n }\r\n}"]}
@@ -0,0 +1,3 @@
1
+ import { HiSecureConfig } from "./types/HiSecureConfig";
2
+ export declare const defaultConfig: HiSecureConfig;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAyGA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,eAAO,MAAM,aAAa,EAAE,cAgD3B,CAAC"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ // export interface HiSecureConfig {
3
+ // enableHelmet: boolean;
4
+ // enableHPP: boolean;
5
+ // enableCORS: boolean;
6
+ // enableSanitizer: boolean;
7
+ // enableRateLimiter: boolean;
8
+ // enableValidation: boolean;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.defaultConfig = void 0;
11
+ exports.defaultConfig = {
12
+ enableHelmet: true,
13
+ enableHPP: true,
14
+ enableCORS: true,
15
+ enableSanitizer: true,
16
+ enableRateLimiter: true,
17
+ enableValidation: true,
18
+ enableCompression: true,
19
+ hashing: {
20
+ primary: "argon2",
21
+ fallback: "bcrypt",
22
+ saltRounds: 10,
23
+ },
24
+ rateLimiter: {
25
+ windowMs: 15 * 60 * 1000,
26
+ maxRequests: 100,
27
+ message: "Too many requests, please try again later.",
28
+ useAdaptiveMode: false,
29
+ },
30
+ validation: {
31
+ mode: "zod",
32
+ fallback: "express-validator",
33
+ },
34
+ sanitizer: {
35
+ allowedTags: ["b", "i", "em", "strong", "a"],
36
+ allowedAttributes: { a: ["href"] },
37
+ fallback: 'escape',
38
+ primary: 'sanitize-html'
39
+ },
40
+ logging: {
41
+ enabled: true,
42
+ level: "info",
43
+ maxSize: 5 * 1024 * 1024,
44
+ },
45
+ auth: {
46
+ enabled: false,
47
+ },
48
+ json: { limit: '1mb' },
49
+ urlencoded: { extended: true },
50
+ cors: {},
51
+ compression: {},
52
+ };
53
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":";AAEA,oCAAoC;AACpC,6BAA6B;AAC7B,0BAA0B;AAC1B,2BAA2B;AAC3B,gCAAgC;AAChC,kCAAkC;AAClC,iCAAiC;;;AAmGpB,QAAA,aAAa,GAAmB;IACzC,YAAY,EAAE,IAAI;IAClB,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,IAAI;IAChB,eAAe,EAAE,IAAI;IACrB,iBAAiB,EAAE,IAAI;IACvB,gBAAgB,EAAE,IAAI;IACtB,iBAAiB,EAAE,IAAI;IAEvB,OAAO,EAAE;QACL,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,QAAQ;QAClB,UAAU,EAAE,EAAE;KACjB;IAED,WAAW,EAAE;QACT,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;QACxB,WAAW,EAAE,GAAG;QAChB,OAAO,EAAE,4CAA4C;QACrD,eAAe,EAAE,KAAK;KACzB;IAED,UAAU,EAAE;QACR,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,mBAAmB;KAChC;IAED,SAAS,EAAE;QACP,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC;QAC5C,iBAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;QAClC,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,eAAe;KAC3B;IAED,OAAO,EAAE;QACL,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;KAC3B;IAED,IAAI,EAAE;QACF,OAAO,EAAE,KAAK;KACjB;IAED,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;IACtB,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC9B,IAAI,EAAE,EAAE;IACR,WAAW,EAAE,EAAE;CAClB,CAAC","sourcesContent":["\r\n\r\n// export interface HiSecureConfig {\r\n// enableHelmet: boolean;\r\n// enableHPP: boolean;\r\n// enableCORS: boolean;\r\n// enableSanitizer: boolean;\r\n// enableRateLimiter: boolean;\r\n// enableValidation: boolean;\r\n\r\n// hashing: {\r\n// primary: \"argon2\" | \"bcrypt\";\r\n// fallback: \"bcrypt\" | null;\r\n// saltRounds: number;\r\n// };\r\n\r\n// rateLimiter: {\r\n// windowMs: number;\r\n// maxRequests: number;\r\n// message: string;\r\n// useAdaptiveMode: boolean;\r\n// };\r\n\r\n// validation: {\r\n// mode: \"zod\" | \"express-validator\";\r\n// fallback: \"express-validator\" | null;\r\n// };\r\n\r\n// sanitizer: {\r\n// allowedTags: string[];\r\n// allowedAttributes: Record<string, string[]>;\r\n// };\r\n\r\n// logging: {\r\n// enabled: boolean;\r\n// level: \"info\" | \"warn\" | \"error\" | \"debug\";\r\n// };\r\n\r\n// /** 🔥 ADD THIS */\r\n// auth: {\r\n// enabled: boolean;\r\n// jwtExpiresIn: string | number | undefined;\r\n// };\r\n\r\n// /** 🔥 optional configs for dynamic JSON/CORS */\r\n// json?: any;\r\n// urlencoded?: any;\r\n// cors?: any;\r\n// }\r\n\r\n\r\n\r\n\r\n// export const defaultConfig: HiSecureConfig = {\r\n// enableHelmet: true,\r\n// enableHPP: true,\r\n// enableCORS: true,\r\n// enableSanitizer: true,\r\n// enableRateLimiter: true,\r\n// enableValidation: true,\r\n\r\n// hashing: {\r\n// primary: \"argon2\",\r\n// fallback: \"bcrypt\",\r\n// saltRounds: 10,\r\n// },\r\n\r\n// rateLimiter: {\r\n// windowMs: 15 * 60 * 1000,\r\n// maxRequests: 100,\r\n// message: \"Too many requests, please try again later.\",\r\n// useAdaptiveMode: false,\r\n// },\r\n\r\n// validation: {\r\n// mode: \"zod\",\r\n// fallback: \"express-validator\",\r\n// },\r\n\r\n// sanitizer: {\r\n// allowedTags: [\"b\", \"i\", \"em\", \"strong\", \"a\"],\r\n// allowedAttributes: { a: [\"href\"] },\r\n// },\r\n\r\n// logging: {\r\n// enabled: true,\r\n// level: \"info\",\r\n// },\r\n\r\n// /** 🔥 NEW AUTH CONFIG */\r\n// auth: {\r\n// enabled: false, // user enables manually\r\n// jwtExpiresIn: \"1d\", // default value\r\n// },\r\n\r\n// /** Optional parser configs */\r\n// json: {},\r\n// urlencoded: { extended: true },\r\n// cors: {},\r\n// };\r\n\r\n\r\n\r\n\r\n// src/core/config.ts\r\nimport { HiSecureConfig } from \"./types/HiSecureConfig\";\r\n\r\nexport const defaultConfig: HiSecureConfig = {\r\n enableHelmet: true,\r\n enableHPP: true,\r\n enableCORS: true,\r\n enableSanitizer: true,\r\n enableRateLimiter: true,\r\n enableValidation: true,\r\n enableCompression: true,\r\n \r\n hashing: {\r\n primary: \"argon2\",\r\n fallback: \"bcrypt\",\r\n saltRounds: 10,\r\n },\r\n \r\n rateLimiter: {\r\n windowMs: 15 * 60 * 1000,\r\n maxRequests: 100,\r\n message: \"Too many requests, please try again later.\",\r\n useAdaptiveMode: false,\r\n },\r\n \r\n validation: {\r\n mode: \"zod\",\r\n fallback: \"express-validator\",\r\n },\r\n \r\n sanitizer: {\r\n allowedTags: [\"b\", \"i\", \"em\", \"strong\", \"a\"],\r\n allowedAttributes: { a: [\"href\"] },\r\n fallback: 'escape',\r\n primary: 'sanitize-html'\r\n },\r\n \r\n logging: {\r\n enabled: true,\r\n level: \"info\",\r\n maxSize: 5 * 1024 * 1024,\r\n },\r\n \r\n auth: {\r\n enabled: false,\r\n },\r\n \r\n json: { limit: '1mb' },\r\n urlencoded: { extended: true },\r\n cors: {},\r\n compression: {},\r\n};"]}
@@ -0,0 +1,37 @@
1
+ export declare const LIB_NAME = "HiSecure";
2
+ export declare const LIB_VERSION = "1.0.0";
3
+ export declare const ADAPTERS: {
4
+ readonly HASHING_PRIMARY: "HASHING_PRIMARY";
5
+ readonly HASHING_FALLBACK: "HASHING_FALLBACK";
6
+ readonly RATE_LIMITER: "RATE_LIMITER";
7
+ readonly VALIDATOR: "VALIDATOR";
8
+ readonly SANITIZER: "SANITIZER";
9
+ readonly COMPRESSION: "COMPRESSION";
10
+ };
11
+ export declare const MANAGERS: {
12
+ readonly HASH_MANAGER: "HASH_MANAGER";
13
+ readonly RATE_LIMIT_MANAGER: "RATE_LIMIT_MANAGER";
14
+ readonly VALIDATION_MANAGER: "VALIDATION_MANAGER";
15
+ readonly SANITIZER_MANAGER: "SANITIZER_MANAGER";
16
+ readonly CORS_MANAGER: "CORS_MANAGER";
17
+ readonly JSON_MANAGER: "JSON_MANAGER";
18
+ readonly AUTH_MANAGER: "AUTH_MANAGER";
19
+ readonly COMPRESSION_MANAGER: "COMPRESSION_MANAGER";
20
+ };
21
+ export declare const ERROR_CODES: {
22
+ readonly ADAPTER_FAILURE: "ADAPTER_FAILURE";
23
+ readonly VALIDATION_ERROR: "VALIDATION_ERROR";
24
+ readonly RATE_LIMIT_EXCEEDED: "RATE_LIMIT_EXCEEDED";
25
+ readonly SANITIZER_ERROR: "SANITIZER_ERROR";
26
+ readonly AUTH_ERROR: "AUTH_ERROR";
27
+ readonly CONFIG_ERROR: "CONFIG_ERROR";
28
+ readonly SECURITY_ERROR: "SECURITY_ERROR";
29
+ readonly UNKNOWN: "UNKNOWN";
30
+ };
31
+ export declare const PRESETS: {
32
+ readonly API: "api";
33
+ readonly STRICT: "strict";
34
+ readonly PUBLIC: "public";
35
+ readonly DEFAULT: "default";
36
+ };
37
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AAiCA,eAAO,MAAM,QAAQ,aAAa,CAAC;AACnC,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC,eAAO,MAAM,QAAQ;;;;;;;CAOX,CAAC;AAEX,eAAO,MAAM,QAAQ;;;;;;;;;CASX,CAAC;AAEX,eAAO,MAAM,WAAW;;;;;;;;;CASd,CAAC;AAEX,eAAO,MAAM,OAAO;;;;;CAKV,CAAC"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ // export const LIB_NAME = "HiSecure";
3
+ // export const LIB_VERSION = "1.0.0";
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.PRESETS = exports.ERROR_CODES = exports.MANAGERS = exports.ADAPTERS = exports.LIB_VERSION = exports.LIB_NAME = void 0;
6
+ // // Adapter Names
7
+ // export const ADAPTERS = {
8
+ // HASHING_PRIMARY: "HASHING_PRIMARY",
9
+ // HASHING_FALLBACK: "HASHING_FALLBACK",
10
+ // RATE_LIMITER: "RATE_LIMITER",
11
+ // VALIDATOR: "VALIDATOR",
12
+ // SANITIZER: "SANITIZER"
13
+ // } as const;
14
+ // // Manager Names
15
+ // export const MANAGERS = {
16
+ // HASH_MANAGER: "HASH_MANAGER",
17
+ // RATE_LIMIT_MANAGER: "RATE_LIMIT_MANAGER",
18
+ // VALIDATION_MANAGER: "VALIDATION_MANAGER",
19
+ // SANITIZER_MANAGER:"SANITIZER_MANAGER"
20
+ // } as const;
21
+ // // Error Codes
22
+ // export const ERROR_CODES = {
23
+ // ADAPTER_FAILURE: "ADAPTER_FAILURE",
24
+ // VALIDATION_ERROR: "VALIDATION_ERROR",
25
+ // RATE_LIMIT_EXCEEDED: "RATE_LIMIT_EXCEEDED",
26
+ // SANITIZER_ERROR:"SANITIZER_ERROR",
27
+ // CONFIG_ERROR: "CONFIG_ERROR",
28
+ // UNKNOWN: "UNKNOWN"
29
+ // } as const;
30
+ // src/core/constants.ts
31
+ exports.LIB_NAME = "HiSecure";
32
+ exports.LIB_VERSION = "1.0.0";
33
+ exports.ADAPTERS = {
34
+ HASHING_PRIMARY: "HASHING_PRIMARY",
35
+ HASHING_FALLBACK: "HASHING_FALLBACK",
36
+ RATE_LIMITER: "RATE_LIMITER",
37
+ VALIDATOR: "VALIDATOR",
38
+ SANITIZER: "SANITIZER",
39
+ COMPRESSION: "COMPRESSION"
40
+ };
41
+ exports.MANAGERS = {
42
+ HASH_MANAGER: "HASH_MANAGER",
43
+ RATE_LIMIT_MANAGER: "RATE_LIMIT_MANAGER",
44
+ VALIDATION_MANAGER: "VALIDATION_MANAGER",
45
+ SANITIZER_MANAGER: "SANITIZER_MANAGER",
46
+ CORS_MANAGER: "CORS_MANAGER",
47
+ JSON_MANAGER: "JSON_MANAGER",
48
+ AUTH_MANAGER: "AUTH_MANAGER",
49
+ COMPRESSION_MANAGER: "COMPRESSION_MANAGER"
50
+ };
51
+ exports.ERROR_CODES = {
52
+ ADAPTER_FAILURE: "ADAPTER_FAILURE",
53
+ VALIDATION_ERROR: "VALIDATION_ERROR",
54
+ RATE_LIMIT_EXCEEDED: "RATE_LIMIT_EXCEEDED",
55
+ SANITIZER_ERROR: "SANITIZER_ERROR",
56
+ AUTH_ERROR: "AUTH_ERROR",
57
+ CONFIG_ERROR: "CONFIG_ERROR",
58
+ SECURITY_ERROR: "SECURITY_ERROR",
59
+ UNKNOWN: "UNKNOWN"
60
+ };
61
+ exports.PRESETS = {
62
+ API: 'api',
63
+ STRICT: 'strict',
64
+ PUBLIC: 'public',
65
+ DEFAULT: 'default'
66
+ };
67
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":";AAAA,sCAAsC;AACtC,sCAAsC;;;AAEtC,mBAAmB;AACnB,4BAA4B;AAC5B,0CAA0C;AAC1C,4CAA4C;AAC5C,oCAAoC;AACpC,8BAA8B;AAC9B,6BAA6B;AAC7B,cAAc;AAEd,mBAAmB;AACnB,4BAA4B;AAC5B,oCAAoC;AACpC,gDAAgD;AAChD,gDAAgD;AAChD,4CAA4C;AAC5C,cAAc;AAEd,iBAAiB;AACjB,+BAA+B;AAC/B,0CAA0C;AAC1C,4CAA4C;AAC5C,kDAAkD;AAClD,yCAAyC;AACzC,oCAAoC;AACpC,yBAAyB;AACzB,cAAc;AAId,wBAAwB;AACX,QAAA,QAAQ,GAAG,UAAU,CAAC;AACtB,QAAA,WAAW,GAAG,OAAO,CAAC;AAEtB,QAAA,QAAQ,GAAG;IACpB,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,kBAAkB;IACpC,YAAY,EAAE,cAAc;IAC5B,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,aAAa;CACpB,CAAC;AAEE,QAAA,QAAQ,GAAG;IACpB,YAAY,EAAE,cAAc;IAC5B,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IACxC,iBAAiB,EAAE,mBAAmB;IACtC,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;IAC5B,mBAAmB,EAAE,qBAAqB;CACpC,CAAC;AAEE,QAAA,WAAW,GAAG;IACvB,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,kBAAkB;IACpC,mBAAmB,EAAE,qBAAqB;IAC1C,eAAe,EAAE,iBAAiB;IAClC,UAAU,EAAE,YAAY;IACxB,YAAY,EAAE,cAAc;IAC5B,cAAc,EAAE,gBAAgB;IAChC,OAAO,EAAE,SAAS;CACZ,CAAC;AAEE,QAAA,OAAO,GAAG;IACnB,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;CACZ,CAAC","sourcesContent":["// export const LIB_NAME = \"HiSecure\";\r\n// export const LIB_VERSION = \"1.0.0\";\r\n\r\n// // Adapter Names\r\n// export const ADAPTERS = {\r\n// HASHING_PRIMARY: \"HASHING_PRIMARY\",\r\n// HASHING_FALLBACK: \"HASHING_FALLBACK\",\r\n// RATE_LIMITER: \"RATE_LIMITER\",\r\n// VALIDATOR: \"VALIDATOR\",\r\n// SANITIZER: \"SANITIZER\"\r\n// } as const;\r\n\r\n// // Manager Names\r\n// export const MANAGERS = {\r\n// HASH_MANAGER: \"HASH_MANAGER\",\r\n// RATE_LIMIT_MANAGER: \"RATE_LIMIT_MANAGER\",\r\n// VALIDATION_MANAGER: \"VALIDATION_MANAGER\",\r\n// SANITIZER_MANAGER:\"SANITIZER_MANAGER\"\r\n// } as const;\r\n\r\n// // Error Codes\r\n// export const ERROR_CODES = {\r\n// ADAPTER_FAILURE: \"ADAPTER_FAILURE\",\r\n// VALIDATION_ERROR: \"VALIDATION_ERROR\",\r\n// RATE_LIMIT_EXCEEDED: \"RATE_LIMIT_EXCEEDED\",\r\n// SANITIZER_ERROR:\"SANITIZER_ERROR\",\r\n// CONFIG_ERROR: \"CONFIG_ERROR\",\r\n// UNKNOWN: \"UNKNOWN\"\r\n// } as const;\r\n\r\n\r\n\r\n// src/core/constants.ts\r\nexport const LIB_NAME = \"HiSecure\";\r\nexport const LIB_VERSION = \"1.0.0\";\r\n\r\nexport const ADAPTERS = {\r\n HASHING_PRIMARY: \"HASHING_PRIMARY\",\r\n HASHING_FALLBACK: \"HASHING_FALLBACK\",\r\n RATE_LIMITER: \"RATE_LIMITER\",\r\n VALIDATOR: \"VALIDATOR\",\r\n SANITIZER: \"SANITIZER\",\r\n COMPRESSION: \"COMPRESSION\"\r\n} as const;\r\n\r\nexport const MANAGERS = {\r\n HASH_MANAGER: \"HASH_MANAGER\",\r\n RATE_LIMIT_MANAGER: \"RATE_LIMIT_MANAGER\",\r\n VALIDATION_MANAGER: \"VALIDATION_MANAGER\",\r\n SANITIZER_MANAGER: \"SANITIZER_MANAGER\",\r\n CORS_MANAGER: \"CORS_MANAGER\",\r\n JSON_MANAGER: \"JSON_MANAGER\",\r\n AUTH_MANAGER: \"AUTH_MANAGER\",\r\n COMPRESSION_MANAGER: \"COMPRESSION_MANAGER\"\r\n} as const;\r\n\r\nexport const ERROR_CODES = {\r\n ADAPTER_FAILURE: \"ADAPTER_FAILURE\",\r\n VALIDATION_ERROR: \"VALIDATION_ERROR\",\r\n RATE_LIMIT_EXCEEDED: \"RATE_LIMIT_EXCEEDED\",\r\n SANITIZER_ERROR: \"SANITIZER_ERROR\",\r\n AUTH_ERROR: \"AUTH_ERROR\",\r\n CONFIG_ERROR: \"CONFIG_ERROR\",\r\n SECURITY_ERROR: \"SECURITY_ERROR\",\r\n UNKNOWN: \"UNKNOWN\"\r\n} as const;\r\n\r\nexport const PRESETS = {\r\n API: 'api',\r\n STRICT: 'strict',\r\n PUBLIC: 'public',\r\n DEFAULT: 'default'\r\n} as const;"]}
@@ -0,0 +1,5 @@
1
+ export declare class AdapterError extends Error {
2
+ code: string;
3
+ constructor(message: string, code?: string);
4
+ }
5
+ //# sourceMappingURL=AdapterError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdapterError.d.ts","sourceRoot":"","sources":["../../../src/core/errors/AdapterError.ts"],"names":[],"mappings":"AAEA,qBAAa,YAAa,SAAQ,KAAK;IACnC,IAAI,EAAE,MAAM,CAAC;gBAED,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAoC;CAQ1E"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AdapterError = void 0;
4
+ const constants_js_1 = require("../constants.js");
5
+ class AdapterError extends Error {
6
+ constructor(message, code = constants_js_1.ERROR_CODES.ADAPTER_FAILURE) {
7
+ super(message);
8
+ this.code = code;
9
+ this.name = "AdapterError";
10
+ // Capture stack trace properly
11
+ Error.captureStackTrace?.(this, AdapterError);
12
+ }
13
+ }
14
+ exports.AdapterError = AdapterError;
15
+ //# sourceMappingURL=AdapterError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdapterError.js","sourceRoot":"","sources":["../../../src/core/errors/AdapterError.ts"],"names":[],"mappings":";;;AAAA,kDAA8C;AAE9C,MAAa,YAAa,SAAQ,KAAK;IAGnC,YAAY,OAAe,EAAE,OAAe,0BAAW,CAAC,eAAe;QACnE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAE3B,+BAA+B;QAC/B,KAAK,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAClD,CAAC;CACJ;AAXD,oCAWC","sourcesContent":["import { ERROR_CODES } from \"../constants.js\";\r\n\r\nexport class AdapterError extends Error {\r\n code: string;\r\n\r\n constructor(message: string, code: string = ERROR_CODES.ADAPTER_FAILURE) {\r\n super(message);\r\n this.code = code;\r\n this.name = \"AdapterError\";\r\n\r\n // Capture stack trace properly\r\n Error.captureStackTrace?.(this, AdapterError);\r\n }\r\n}\r\n"]}