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,265 @@
1
+
2
+ // import { SecureOptions } from "../core/types/SecureOptions.js";
3
+
4
+ // export interface NormalizedOptions {
5
+ // cors: { enabled: boolean; options?: any };
6
+ // rateLimit: { enabled: boolean; mode?: "strict" | "relaxed" | undefined; options?: any };
7
+ // sanitize: { enabled: boolean };
8
+ // validate: { enabled: boolean; schema?: any };
9
+ // json: { enabled: boolean; options?: any };
10
+
11
+ // /** NEW */
12
+ // auth: { enabled: boolean; required: boolean };
13
+ // }
14
+
15
+ // export function normalizeOptions(input?: SecureOptions | false): NormalizedOptions {
16
+ // if (input === false) {
17
+ // return {
18
+ // cors: { enabled: false },
19
+ // rateLimit: { enabled: false, mode: undefined, options: undefined },
20
+ // sanitize: { enabled: false },
21
+ // validate: { enabled: false },
22
+ // json: { enabled: false },
23
+ // auth: { enabled: false, required: true }
24
+ // };
25
+ // }
26
+
27
+ // const opts = input || {};
28
+
29
+ // return {
30
+ // cors: {
31
+ // enabled: opts.cors === undefined ? true : opts.cors !== false,
32
+ // options: typeof opts.cors === "object" ? opts.cors : undefined
33
+ // },
34
+
35
+ // rateLimit: normalizeRateLimit(opts.rateLimit),
36
+
37
+ // sanitize: {
38
+ // enabled: opts.sanitize === undefined ? true : opts.sanitize !== false
39
+ // },
40
+
41
+ // validate: {
42
+ // enabled: !!opts.validate,
43
+ // schema: opts.validate || undefined
44
+ // },
45
+
46
+ // json: {
47
+ // enabled: opts.json === undefined ? true : opts.json !== false,
48
+ // options: typeof opts.json === "object" ? opts.json : undefined
49
+ // },
50
+
51
+ // auth: normalizeAuth(opts.auth)
52
+ // };
53
+ // }
54
+
55
+ // // ---------------------------------------------------------------
56
+ // // RATE LIMIT — EXACT TYPES, NO TS ERROR
57
+ // // ---------------------------------------------------------------
58
+ // function normalizeRateLimit(value: SecureOptions["rateLimit"]): {
59
+ // enabled: boolean;
60
+ // mode?: "strict" | "relaxed" | undefined;
61
+ // options?: any;
62
+ // } {
63
+ // if (value === false) {
64
+ // return { enabled: false, mode: undefined, options: undefined };
65
+ // }
66
+
67
+ // if (value === "strict") {
68
+ // return {
69
+ // enabled: true,
70
+ // mode: "strict",
71
+ // options: { max: 5, windowMs: 10000 }
72
+ // };
73
+ // }
74
+
75
+ // if (value === "relaxed") {
76
+ // return {
77
+ // enabled: true,
78
+ // mode: "relaxed",
79
+ // options: { max: 100, windowMs: 60000 }
80
+ // };
81
+ // }
82
+
83
+ // if (typeof value === "object") {
84
+ // return {
85
+ // enabled: true,
86
+ // mode: undefined, // VERY IMPORTANT!
87
+ // options: value
88
+ // };
89
+ // }
90
+
91
+ // // Default → enabled and optional fields omitted
92
+ // return {
93
+ // enabled: true,
94
+ // mode: undefined,
95
+ // options: undefined
96
+ // };
97
+ // }
98
+
99
+ // // ---------------------------------------------------------------
100
+ // // AUTH NORMALIZER — EXACT FOR useSecure
101
+ // // ---------------------------------------------------------------
102
+ // function normalizeAuth(value: SecureOptions["auth"]) {
103
+ // if (value === false) return { enabled: false, required: true };
104
+
105
+ // if (value === true || value === undefined)
106
+ // return { enabled: true, required: true };
107
+
108
+ // return {
109
+ // enabled: true,
110
+ // required: value.required !== false
111
+ // };
112
+ // }
113
+
114
+
115
+
116
+
117
+ // src/utils/normalizeOptions.ts
118
+ import {
119
+ SecureOptions,
120
+ AuthOptions, // ✅ ADD THIS
121
+ RateLimitOptions, // ✅ ADD THIS
122
+ SanitizeOptions // ✅ ADD THIS
123
+ } from "../core/types/SecureOptions.js";
124
+
125
+ export interface NormalizedOptions {
126
+ cors: { enabled: boolean; options?: object };
127
+ rateLimit: { enabled: boolean; mode?: "strict" | "relaxed"; options?: RateLimitOptions };
128
+ sanitize: { enabled: boolean; options?: SanitizeOptions };
129
+ validate: { enabled: boolean; schema?: any };
130
+ json: { enabled: boolean; options?: object };
131
+ auth: { enabled: boolean; required: boolean; roles?: string[] };
132
+ compression: { enabled: boolean; options?: object };
133
+ }
134
+
135
+ export function normalizeOptions(input?: SecureOptions | false): NormalizedOptions {
136
+ if (input === false) {
137
+ return {
138
+ cors: { enabled: false },
139
+ rateLimit: { enabled: false },
140
+ sanitize: { enabled: false },
141
+ validate: { enabled: false },
142
+ json: { enabled: false },
143
+ auth: { enabled: false, required: false },
144
+ compression: { enabled: false }
145
+ };
146
+ }
147
+
148
+ const opts = input || {};
149
+
150
+ return {
151
+ cors: {
152
+ enabled: opts.cors === undefined ? true : opts.cors !== false,
153
+ options: typeof opts.cors === "object" ? opts.cors : undefined
154
+ },
155
+
156
+ rateLimit: normalizeRateLimit(opts.rateLimit),
157
+
158
+ sanitize: {
159
+ enabled: opts.sanitize === undefined ? true : opts.sanitize !== false,
160
+ options: typeof opts.sanitize === "object" ? opts.sanitize : undefined
161
+ },
162
+
163
+ validate: {
164
+ enabled: !!opts.validate,
165
+ schema: opts.validate || undefined
166
+ },
167
+
168
+ json: {
169
+ enabled: opts.json === undefined ? true : opts.json !== false,
170
+ options: typeof opts.json === "object" ? opts.json : undefined
171
+ },
172
+
173
+ auth: normalizeAuth(opts.auth),
174
+
175
+ compression: {
176
+ enabled: opts.compression === undefined ? true : opts.compression !== false,
177
+ options: typeof opts.compression === "object" ? opts.compression : undefined
178
+ }
179
+ };
180
+ }
181
+
182
+ function normalizeRateLimit(value: SecureOptions["rateLimit"]): NormalizedOptions["rateLimit"] {
183
+ if (value === false) return { enabled: false };
184
+
185
+ if (value === "strict") {
186
+ return {
187
+ enabled: true,
188
+ mode: "strict",
189
+ options: { max: 5, windowMs: 10000 }
190
+ };
191
+ }
192
+
193
+ if (value === "relaxed") {
194
+ return {
195
+ enabled: true,
196
+ mode: "relaxed",
197
+ options: { max: 100, windowMs: 60000 }
198
+ };
199
+ }
200
+
201
+ if (typeof value === "object") {
202
+ const val = value as RateLimitOptions;
203
+ const { mode, ...options } = val;
204
+ return {
205
+ enabled: true,
206
+ mode: (mode === "strict" || mode === "relaxed") ? mode : undefined,
207
+ options
208
+ };
209
+ }
210
+
211
+ return { enabled: true };
212
+ }
213
+
214
+ function normalizeAuth(value: SecureOptions["auth"]): NormalizedOptions["auth"] {
215
+ if (value === false) {
216
+ return { enabled: false, required: false };
217
+ }
218
+
219
+ if (value === true || value === undefined) {
220
+ return { enabled: true, required: true };
221
+ }
222
+
223
+ const authOptions = value as AuthOptions;
224
+ const enabled = authOptions.required !== false;
225
+
226
+ return {
227
+ enabled,
228
+ required: enabled,
229
+ roles: authOptions.roles
230
+ };
231
+ }
232
+
233
+ export function getPresetOptions(preset: 'api' | 'strict' | 'public'): NormalizedOptions {
234
+ const presets = {
235
+ api: {
236
+ cors: { enabled: true, options: { origin: '*' } },
237
+ rateLimit: { enabled: true, mode: 'relaxed' as const },
238
+ sanitize: { enabled: true },
239
+ validate: { enabled: false },
240
+ json: { enabled: true },
241
+ auth: { enabled: false, required: false },
242
+ compression: { enabled: true }
243
+ },
244
+ strict: {
245
+ cors: { enabled: true, options: { origin: process.env.ALLOWED_ORIGIN || '*' } },
246
+ rateLimit: { enabled: true, mode: 'strict' as const },
247
+ sanitize: { enabled: true },
248
+ validate: { enabled: true },
249
+ json: { enabled: true },
250
+ auth: { enabled: true, required: true },
251
+ compression: { enabled: true }
252
+ },
253
+ public: {
254
+ cors: { enabled: true, options: { origin: '*' } },
255
+ rateLimit: { enabled: true },
256
+ sanitize: { enabled: false },
257
+ validate: { enabled: false },
258
+ json: { enabled: true },
259
+ auth: { enabled: false, required: false },
260
+ compression: { enabled: true }
261
+ }
262
+ };
263
+
264
+ return presets[preset] || presets.api;
265
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "module": "CommonJS",
5
+ "lib": ["ES2020"],
6
+ "moduleResolution": "node",
7
+
8
+ "rootDir": "./src",
9
+ "outDir": "./dist",
10
+
11
+ "strict": true,
12
+ "esModuleInterop": true,
13
+ "skipLibCheck": true,
14
+ "forceConsistentCasingInFileNames": true,
15
+
16
+ "resolveJsonModule": true,
17
+ "declaration": true,
18
+ "declarationMap": true,
19
+ "sourceMap": true,
20
+ "inlineSources": true,
21
+
22
+ "noUncheckedIndexedAccess": true,
23
+ "exactOptionalPropertyTypes": false,
24
+ "noImplicitOverride": true,
25
+ "noImplicitReturns": true,
26
+ "noFallthroughCasesInSwitch": true
27
+ },
28
+ "include": ["src/**/*"],
29
+ "exclude": ["node_modules", "dist"]
30
+ }