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,156 @@
1
+
2
+
3
+ // export interface HiSecureConfig {
4
+ // enableHelmet: boolean;
5
+ // enableHPP: boolean;
6
+ // enableCORS: boolean;
7
+ // enableSanitizer: boolean;
8
+ // enableRateLimiter: boolean;
9
+ // enableValidation: boolean;
10
+
11
+ // hashing: {
12
+ // primary: "argon2" | "bcrypt";
13
+ // fallback: "bcrypt" | null;
14
+ // saltRounds: number;
15
+ // };
16
+
17
+ // rateLimiter: {
18
+ // windowMs: number;
19
+ // maxRequests: number;
20
+ // message: string;
21
+ // useAdaptiveMode: boolean;
22
+ // };
23
+
24
+ // validation: {
25
+ // mode: "zod" | "express-validator";
26
+ // fallback: "express-validator" | null;
27
+ // };
28
+
29
+ // sanitizer: {
30
+ // allowedTags: string[];
31
+ // allowedAttributes: Record<string, string[]>;
32
+ // };
33
+
34
+ // logging: {
35
+ // enabled: boolean;
36
+ // level: "info" | "warn" | "error" | "debug";
37
+ // };
38
+
39
+ // /** 🔥 ADD THIS */
40
+ // auth: {
41
+ // enabled: boolean;
42
+ // jwtExpiresIn: string | number | undefined;
43
+ // };
44
+
45
+ // /** 🔥 optional configs for dynamic JSON/CORS */
46
+ // json?: any;
47
+ // urlencoded?: any;
48
+ // cors?: any;
49
+ // }
50
+
51
+
52
+
53
+
54
+ // export const defaultConfig: HiSecureConfig = {
55
+ // enableHelmet: true,
56
+ // enableHPP: true,
57
+ // enableCORS: true,
58
+ // enableSanitizer: true,
59
+ // enableRateLimiter: true,
60
+ // enableValidation: true,
61
+
62
+ // hashing: {
63
+ // primary: "argon2",
64
+ // fallback: "bcrypt",
65
+ // saltRounds: 10,
66
+ // },
67
+
68
+ // rateLimiter: {
69
+ // windowMs: 15 * 60 * 1000,
70
+ // maxRequests: 100,
71
+ // message: "Too many requests, please try again later.",
72
+ // useAdaptiveMode: false,
73
+ // },
74
+
75
+ // validation: {
76
+ // mode: "zod",
77
+ // fallback: "express-validator",
78
+ // },
79
+
80
+ // sanitizer: {
81
+ // allowedTags: ["b", "i", "em", "strong", "a"],
82
+ // allowedAttributes: { a: ["href"] },
83
+ // },
84
+
85
+ // logging: {
86
+ // enabled: true,
87
+ // level: "info",
88
+ // },
89
+
90
+ // /** 🔥 NEW AUTH CONFIG */
91
+ // auth: {
92
+ // enabled: false, // user enables manually
93
+ // jwtExpiresIn: "1d", // default value
94
+ // },
95
+
96
+ // /** Optional parser configs */
97
+ // json: {},
98
+ // urlencoded: { extended: true },
99
+ // cors: {},
100
+ // };
101
+
102
+
103
+
104
+
105
+ // src/core/config.ts
106
+ import { HiSecureConfig } from "./types/HiSecureConfig";
107
+
108
+ export const defaultConfig: HiSecureConfig = {
109
+ enableHelmet: true,
110
+ enableHPP: true,
111
+ enableCORS: true,
112
+ enableSanitizer: true,
113
+ enableRateLimiter: true,
114
+ enableValidation: true,
115
+ enableCompression: true,
116
+
117
+ hashing: {
118
+ primary: "argon2",
119
+ fallback: "bcrypt",
120
+ saltRounds: 10,
121
+ },
122
+
123
+ rateLimiter: {
124
+ windowMs: 15 * 60 * 1000,
125
+ maxRequests: 100,
126
+ message: "Too many requests, please try again later.",
127
+ useAdaptiveMode: false,
128
+ },
129
+
130
+ validation: {
131
+ mode: "zod",
132
+ fallback: "express-validator",
133
+ },
134
+
135
+ sanitizer: {
136
+ allowedTags: ["b", "i", "em", "strong", "a"],
137
+ allowedAttributes: { a: ["href"] },
138
+ fallback: 'escape',
139
+ primary: 'sanitize-html'
140
+ },
141
+
142
+ logging: {
143
+ enabled: true,
144
+ level: "info",
145
+ maxSize: 5 * 1024 * 1024,
146
+ },
147
+
148
+ auth: {
149
+ enabled: false,
150
+ },
151
+
152
+ json: { limit: '1mb' },
153
+ urlencoded: { extended: true },
154
+ cors: {},
155
+ compression: {},
156
+ };
@@ -0,0 +1,73 @@
1
+ // export const LIB_NAME = "HiSecure";
2
+ // export const LIB_VERSION = "1.0.0";
3
+
4
+ // // Adapter Names
5
+ // export const ADAPTERS = {
6
+ // HASHING_PRIMARY: "HASHING_PRIMARY",
7
+ // HASHING_FALLBACK: "HASHING_FALLBACK",
8
+ // RATE_LIMITER: "RATE_LIMITER",
9
+ // VALIDATOR: "VALIDATOR",
10
+ // SANITIZER: "SANITIZER"
11
+ // } as const;
12
+
13
+ // // Manager Names
14
+ // export const MANAGERS = {
15
+ // HASH_MANAGER: "HASH_MANAGER",
16
+ // RATE_LIMIT_MANAGER: "RATE_LIMIT_MANAGER",
17
+ // VALIDATION_MANAGER: "VALIDATION_MANAGER",
18
+ // SANITIZER_MANAGER:"SANITIZER_MANAGER"
19
+ // } as const;
20
+
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
+
31
+
32
+
33
+ // src/core/constants.ts
34
+ export const LIB_NAME = "HiSecure";
35
+ export const LIB_VERSION = "1.0.0";
36
+
37
+ export const ADAPTERS = {
38
+ HASHING_PRIMARY: "HASHING_PRIMARY",
39
+ HASHING_FALLBACK: "HASHING_FALLBACK",
40
+ RATE_LIMITER: "RATE_LIMITER",
41
+ VALIDATOR: "VALIDATOR",
42
+ SANITIZER: "SANITIZER",
43
+ COMPRESSION: "COMPRESSION"
44
+ } as const;
45
+
46
+ export const MANAGERS = {
47
+ HASH_MANAGER: "HASH_MANAGER",
48
+ RATE_LIMIT_MANAGER: "RATE_LIMIT_MANAGER",
49
+ VALIDATION_MANAGER: "VALIDATION_MANAGER",
50
+ SANITIZER_MANAGER: "SANITIZER_MANAGER",
51
+ CORS_MANAGER: "CORS_MANAGER",
52
+ JSON_MANAGER: "JSON_MANAGER",
53
+ AUTH_MANAGER: "AUTH_MANAGER",
54
+ COMPRESSION_MANAGER: "COMPRESSION_MANAGER"
55
+ } as const;
56
+
57
+ export const ERROR_CODES = {
58
+ ADAPTER_FAILURE: "ADAPTER_FAILURE",
59
+ VALIDATION_ERROR: "VALIDATION_ERROR",
60
+ RATE_LIMIT_EXCEEDED: "RATE_LIMIT_EXCEEDED",
61
+ SANITIZER_ERROR: "SANITIZER_ERROR",
62
+ AUTH_ERROR: "AUTH_ERROR",
63
+ CONFIG_ERROR: "CONFIG_ERROR",
64
+ SECURITY_ERROR: "SECURITY_ERROR",
65
+ UNKNOWN: "UNKNOWN"
66
+ } as const;
67
+
68
+ export const PRESETS = {
69
+ API: 'api',
70
+ STRICT: 'strict',
71
+ PUBLIC: 'public',
72
+ DEFAULT: 'default'
73
+ } as const;
@@ -0,0 +1,14 @@
1
+ import { ERROR_CODES } from "../constants.js";
2
+
3
+ export class AdapterError extends Error {
4
+ code: string;
5
+
6
+ constructor(message: string, code: string = ERROR_CODES.ADAPTER_FAILURE) {
7
+ super(message);
8
+ this.code = code;
9
+ this.name = "AdapterError";
10
+
11
+ // Capture stack trace properly
12
+ Error.captureStackTrace?.(this, AdapterError);
13
+ }
14
+ }
@@ -0,0 +1,46 @@
1
+ export class HttpError extends Error {
2
+ status: number;
3
+ code?: string;
4
+ details?: any;
5
+
6
+ constructor(
7
+ status: number,
8
+ message: string,
9
+ options?: { code?:string; details?: any }
10
+ ) {
11
+ super(message);
12
+ this.status = status;
13
+ this.code = options?.code as string;
14
+ this.details = options?.details;
15
+ this.name = "HttpError";
16
+ }
17
+
18
+ // ---------- STATIC HELPERS ----------
19
+ static BadRequest(message = "Bad Request", details?: any) {
20
+ return new HttpError(400, message, { code: "BAD_REQUEST", details });
21
+ }
22
+
23
+ static Unauthorized(message = "Unauthorized", details?: any) {
24
+ return new HttpError(401, message, { code: "UNAUTHORIZED", details });
25
+ }
26
+
27
+ static Forbidden(message = "Forbidden", details?: any) {
28
+ return new HttpError(403, message, { code: "FORBIDDEN", details });
29
+ }
30
+
31
+ static NotFound(message = "Not Found", details?: any) {
32
+ return new HttpError(404, message, { code: "NOT_FOUND", details });
33
+ }
34
+
35
+ static Conflict(message = "Conflict", details?: any) {
36
+ return new HttpError(409, message, { code: "CONFLICT", details });
37
+ }
38
+
39
+ static TooManyRequests(message = "Too Many Requests", details?: any) {
40
+ return new HttpError(429, message, { code: "RATE_LIMIT", details });
41
+ }
42
+
43
+ static Internal(message = "Internal Server Error", details?: any) {
44
+ return new HttpError(500, message, { code: "INTERNAL_ERROR", details });
45
+ }
46
+ }
@@ -0,0 +1,13 @@
1
+ import { ERROR_CODES } from "../constants.js";
2
+
3
+ export class SanitizerError extends Error {
4
+ code: string;
5
+
6
+ constructor(message: string, code: string = ERROR_CODES.SANITIZER_ERROR) {
7
+ super(message);
8
+ this.code = code;
9
+ this.name = "SanitizerError";
10
+
11
+ Error.captureStackTrace?.(this, SanitizerError);
12
+ }
13
+ }
@@ -0,0 +1,13 @@
1
+ import { ERROR_CODES } from "../constants.js";
2
+
3
+ export class SecurityError extends Error {
4
+ code: string;
5
+
6
+ constructor(message: string, code: string = ERROR_CODES.CONFIG_ERROR) {
7
+ super(message);
8
+ this.code = code;
9
+ this.name = "SecurityError";
10
+
11
+ Error.captureStackTrace?.(this, SecurityError);
12
+ }
13
+ }
@@ -0,0 +1,13 @@
1
+ import { ERROR_CODES } from "../constants.js";
2
+
3
+ export class ValidationError extends Error {
4
+ code: string;
5
+
6
+ constructor(message: string, code: string = ERROR_CODES.VALIDATION_ERROR) {
7
+ super(message);
8
+ this.code = code;
9
+ this.name = "ValidationError";
10
+
11
+ Error.captureStackTrace?.(this, ValidationError);
12
+ }
13
+ }
@@ -0,0 +1,62 @@
1
+ // src/core/types/HiSecureConfig.ts
2
+ export interface HiSecureConfig {
3
+ // Core security features
4
+ enableHelmet: boolean;
5
+ enableHPP: boolean;
6
+ enableCORS: boolean;
7
+ enableSanitizer: boolean;
8
+ enableRateLimiter: boolean;
9
+ enableValidation: boolean;
10
+ enableCompression: boolean;
11
+
12
+ // Hashing configuration
13
+ hashing: {
14
+ primary: "argon2" | "bcrypt";
15
+ fallback: "bcrypt" | null;
16
+ saltRounds: number;
17
+ };
18
+
19
+ // Rate limiting
20
+ rateLimiter: {
21
+ windowMs: number;
22
+ maxRequests: number;
23
+ message: string;
24
+ useAdaptiveMode: boolean;
25
+ };
26
+
27
+ // Validation
28
+ validation: {
29
+ mode: "zod" | "express-validator";
30
+ fallback: "express-validator" | null;
31
+ };
32
+
33
+ // Sanitization
34
+ sanitizer: {
35
+ allowedTags: string[];
36
+ allowedAttributes: Record<string, string[]>;
37
+ fallback: 'escape' | 'xss' | 'none';
38
+ primary: 'sanitize-html' | 'xss';
39
+ };
40
+
41
+ // Logging
42
+ logging: {
43
+ enabled: boolean;
44
+ level: "info" | "warn" | "error" | "debug";
45
+ file?: string;
46
+ maxSize?: number;
47
+ };
48
+
49
+ // Authentication
50
+ auth: {
51
+ enabled: boolean;
52
+ jwtSecret?: string;
53
+ jwtExpiresIn?: string | number;
54
+ googleClientId?: string;
55
+ };
56
+
57
+ // Optional parsers
58
+ json?: object;
59
+ urlencoded?: object;
60
+ cors?: object;
61
+ compression?: object;
62
+ }
@@ -0,0 +1,61 @@
1
+ // // src/core/types/SecureOptions.ts
2
+
3
+ // export interface SecureOptions {
4
+ // /** Enable/override CORS for this route */
5
+ // cors?: boolean | object;
6
+
7
+ // /** Per-route rate limit */
8
+ // rateLimit?: boolean | "strict" | "relaxed" | object;
9
+
10
+ // /** Sanitize request body */
11
+ // sanitize?: boolean;
12
+
13
+ // /** Validation schema (Zod or express-validator) */
14
+ // validate?: any;
15
+
16
+ // /** Auto-JSON parsing (express.json) options */
17
+ // json?: boolean | object;
18
+
19
+ // /** NEW: Per-route authentication (JWT protect) */
20
+ // auth?: boolean | { required?: boolean };
21
+ // }
22
+
23
+
24
+
25
+
26
+
27
+ // src/core/types/SecureOptions.ts
28
+ import { z, ZodSchema } from 'zod';
29
+ import { ValidationChain } from 'express-validator';
30
+
31
+ export type ValidationSchema = ZodSchema | ValidationChain[];
32
+
33
+ export interface RateLimitOptions {
34
+ windowMs?: number;
35
+ max?: number;
36
+ message?: string;
37
+ skipFailedRequests?: boolean;
38
+ [key: string]: any;
39
+ }
40
+
41
+ export interface SanitizeOptions {
42
+ allowedTags?: string[];
43
+ allowedAttributes?: Record<string, string[]>;
44
+ [key: string]: any;
45
+ }
46
+
47
+ export interface AuthOptions {
48
+ required?: boolean;
49
+ roles?: string[];
50
+ }
51
+
52
+ export interface SecureOptions {
53
+ cors?: boolean | object;
54
+ rateLimit?: boolean | "strict" | "relaxed" | RateLimitOptions;
55
+ sanitize?: boolean | SanitizeOptions;
56
+ validate?: ValidationSchema;
57
+ json?: boolean | object;
58
+ auth?: boolean | AuthOptions;
59
+ compression?: boolean | object;
60
+ headers?: boolean | object;
61
+ }
@@ -0,0 +1,111 @@
1
+ // import { normalizeOptions } from "../utils/normalizeOptions.js";
2
+ // import { HiSecure } from "./HiSecure.js";
3
+
4
+ // export function useSecure(engine: HiSecure, input?: any) {
5
+ // if (!engine.isInitialized()) {
6
+ // throw new Error("HiSecure must be initialized before using .use()");
7
+ // }
8
+
9
+ // const options = normalizeOptions(input);
10
+ // const chain: any[] = [];
11
+
12
+ // // JSON
13
+ // if (options.json.enabled) {
14
+ // chain.push(engine.jsonManager.middleware(options.json.options));
15
+ // chain.push(engine.jsonManager.urlencoded());
16
+ // }
17
+
18
+ // // CORS
19
+ // if (options.cors.enabled) {
20
+ // chain.push(engine.corsManager.middleware(options.cors.options));
21
+ // }
22
+
23
+ // // Sanitize
24
+ // if (options.sanitize.enabled) {
25
+ // chain.push(engine.sanitizerManager.middleware());
26
+ // }
27
+
28
+ // // Validate
29
+ // if (options.validate.enabled && options.validate.schema) {
30
+ // chain.push(engine.validatorManager.validate(options.validate.schema));
31
+ // }
32
+
33
+ // // Rate Limit
34
+ // if (options.rateLimit.enabled) {
35
+ // chain.push(
36
+ // engine.rateLimitManager.middleware({
37
+ // mode: options.rateLimit.mode ?? undefined,
38
+ // options: options.rateLimit.options ?? undefined
39
+ // })
40
+ // );
41
+ // }
42
+
43
+ // // AUTH
44
+ // if (options.auth.enabled) {
45
+ // if (!engine.authManager) {
46
+ // throw new Error("AuthManager not initialized. Enable auth in config.");
47
+ // }
48
+
49
+ // chain.push(
50
+ // engine.authManager.protect({
51
+ // required: options.auth.required
52
+ // })
53
+ // );
54
+ // }
55
+
56
+ // return chain;
57
+ // }
58
+
59
+
60
+
61
+ // src/core/useSecure.ts - SIMPLER VERSION
62
+ // This is now optional since HiSecure class has fluent API
63
+
64
+ import { HiSecure } from "./HiSecure.js";
65
+ import { SecureOptions } from "./types/SecureOptions.js";
66
+
67
+ /**
68
+ * @deprecated Use HiSecure.middleware() or fluent API instead
69
+ */
70
+ export function useSecure(options?: SecureOptions | "api" | "strict" | "public") {
71
+ console.warn("⚠ useSecure() is deprecated. Use HiSecure.middleware() or fluent API methods.");
72
+ return HiSecure.middleware(options);
73
+ }
74
+
75
+ /**
76
+ * Legacy support - route-level security
77
+ */
78
+ export function secureRoute(options?: SecureOptions) {
79
+ const chain: any[] = [];
80
+
81
+ if (options?.cors) {
82
+ chain.push(HiSecure.cors(
83
+ typeof options.cors === 'object' ? options.cors : undefined
84
+ ));
85
+ }
86
+
87
+ if (options?.rateLimit) {
88
+ chain.push(HiSecure.rateLimit(
89
+ typeof options.rateLimit === 'object' ? options.rateLimit :
90
+ options.rateLimit === "strict" ? "strict" : "relaxed"
91
+ ));
92
+ }
93
+
94
+ if (options?.sanitize) {
95
+ chain.push(HiSecure.sanitize(
96
+ typeof options.sanitize === 'object' ? options.sanitize : undefined
97
+ ));
98
+ }
99
+
100
+ if (options?.validate) {
101
+ chain.push(HiSecure.validate(options.validate));
102
+ }
103
+
104
+ if (options?.auth) {
105
+ chain.push(HiSecure.auth(
106
+ typeof options.auth === 'object' ? options.auth : undefined
107
+ ));
108
+ }
109
+
110
+ return chain;
111
+ }
@@ -0,0 +1 @@
1
+ // baad mein krte hai ise
package/src/index.ts ADDED
@@ -0,0 +1,17 @@
1
+ // src/index.ts - MAIN ENTRY POINT
2
+ import { HiSecure } from "./core/HiSecure.js";
3
+ import { useSecure, secureRoute } from "./core/useSecure.js";
4
+
5
+ // Export the singleton instance for quick usage
6
+ const hiSecure = HiSecure.getInstance();
7
+
8
+ // Export everything
9
+ export {
10
+ HiSecure, // Class for advanced usage
11
+ hiSecure, // Singleton instance
12
+ useSecure, // Legacy function (deprecated)
13
+ secureRoute // Route-level security helper
14
+ };
15
+
16
+ // Default export is the singleton instance
17
+ export default hiSecure;
@@ -0,0 +1,2 @@
1
+ export * from "./winstonSetup.js";
2
+ export * from "./morganSetup.js";
@@ -0,0 +1,3 @@
1
+ import morgan from "morgan";
2
+
3
+ export const requestLogger = morgan("combined");
@@ -0,0 +1,17 @@
1
+ import winston from "winston";
2
+
3
+ export const logger = winston.createLogger({
4
+ level: "info",
5
+ format: winston.format.combine(
6
+ winston.format.timestamp(),
7
+ winston.format.json()
8
+ ),
9
+ transports: [
10
+ new winston.transports.Console()
11
+ ]
12
+ });
13
+
14
+ // Shortcut helpers
15
+ export const logInfo = (msg: string, meta: any = {}) => logger.info(msg, meta);
16
+ export const logWarn = (msg: string, meta: any = {}) => logger.warn(msg, meta);
17
+ export const logError = (msg: string, meta: any = {}) => logger.error(msg, meta);