hi-secure 1.0.6 → 1.0.10
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.
- package/dist/adapters/ArgonAdapter.js +1 -1
- package/dist/adapters/ArgonAdapter.js.map +1 -1
- package/dist/adapters/ExpressRLAdapter.d.ts.map +1 -1
- package/dist/adapters/ExpressRLAdapter.js +1 -2
- package/dist/adapters/ExpressRLAdapter.js.map +1 -1
- package/dist/adapters/ExpressValidatorAdapter.d.ts.map +1 -1
- package/dist/adapters/ExpressValidatorAdapter.js +1 -39
- package/dist/adapters/ExpressValidatorAdapter.js.map +1 -1
- package/dist/adapters/GoogleAdapter.d.ts.map +1 -1
- package/dist/adapters/GoogleAdapter.js +0 -101
- package/dist/adapters/GoogleAdapter.js.map +1 -1
- package/dist/adapters/JWTAdapter.d.ts.map +1 -1
- package/dist/adapters/JWTAdapter.js +3 -210
- package/dist/adapters/JWTAdapter.js.map +1 -1
- package/dist/adapters/RLFlexibleAdapter.d.ts.map +1 -1
- package/dist/adapters/RLFlexibleAdapter.js +0 -52
- package/dist/adapters/RLFlexibleAdapter.js.map +1 -1
- package/dist/adapters/SanitizeHtmlAdapter.d.ts +0 -3
- package/dist/adapters/SanitizeHtmlAdapter.d.ts.map +1 -1
- package/dist/adapters/SanitizeHtmlAdapter.js +2 -71
- package/dist/adapters/SanitizeHtmlAdapter.js.map +1 -1
- package/dist/adapters/XSSAdapter.d.ts +0 -10
- package/dist/adapters/XSSAdapter.d.ts.map +1 -1
- package/dist/adapters/XSSAdapter.js +2 -19
- package/dist/adapters/XSSAdapter.js.map +1 -1
- package/dist/adapters/ZodAdapter.d.ts.map +1 -1
- package/dist/adapters/ZodAdapter.js +2 -6
- package/dist/adapters/ZodAdapter.js.map +1 -1
- package/dist/core/HiSecure.d.ts +15 -2
- package/dist/core/HiSecure.d.ts.map +1 -1
- package/dist/core/HiSecure.js +130 -37
- package/dist/core/HiSecure.js.map +1 -1
- package/dist/core/useSecure.d.ts +4 -0
- package/dist/core/useSecure.d.ts.map +1 -1
- package/dist/core/useSecure.js +19 -114
- package/dist/core/useSecure.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -19
- package/dist/index.js.map +1 -1
- package/dist/managers/AuthManager.d.ts.map +1 -1
- package/dist/managers/AuthManager.js +1 -89
- package/dist/managers/AuthManager.js.map +1 -1
- package/dist/managers/CorsManager.d.ts.map +1 -1
- package/dist/managers/CorsManager.js +1 -19
- package/dist/managers/CorsManager.js.map +1 -1
- package/dist/managers/HashManager.d.ts.map +1 -1
- package/dist/managers/HashManager.js +0 -243
- package/dist/managers/HashManager.js.map +1 -1
- package/dist/managers/JsonManager.d.ts.map +1 -1
- package/dist/managers/JsonManager.js +1 -77
- package/dist/managers/JsonManager.js.map +1 -1
- package/dist/managers/RateLimitManager.d.ts.map +1 -1
- package/dist/managers/RateLimitManager.js +3 -17
- package/dist/managers/RateLimitManager.js.map +1 -1
- package/dist/managers/SanitizerManager.d.ts +0 -6
- package/dist/managers/SanitizerManager.d.ts.map +1 -1
- package/dist/managers/SanitizerManager.js +1 -213
- package/dist/managers/SanitizerManager.js.map +1 -1
- package/dist/managers/ValidatorManager.d.ts.map +1 -1
- package/dist/managers/ValidatorManager.js +1 -109
- package/dist/managers/ValidatorManager.js.map +1 -1
- package/dist/middlewares/errorHandler.d.ts.map +1 -1
- package/dist/middlewares/errorHandler.js +0 -19
- package/dist/middlewares/errorHandler.js.map +1 -1
- package/dist/utils/deepFreeze.d.ts.map +1 -1
- package/dist/utils/deepFreeze.js +0 -25
- package/dist/utils/deepFreeze.js.map +1 -1
- package/dist/utils/deepMerge.d.ts.map +1 -1
- package/dist/utils/deepMerge.js +0 -26
- package/dist/utils/deepMerge.js.map +1 -1
- package/dist/utils/normalizeOptions.d.ts +1 -3
- package/dist/utils/normalizeOptions.d.ts.map +1 -1
- package/dist/utils/normalizeOptions.js +0 -1
- package/dist/utils/normalizeOptions.js.map +1 -1
- package/package.json +1 -1
- package/src/adapters/ArgonAdapter.ts +1 -1
- package/src/adapters/ExpressRLAdapter.ts +1 -2
- package/src/adapters/ExpressValidatorAdapter.ts +1 -54
- package/src/adapters/GoogleAdapter.ts +0 -129
- package/src/adapters/JWTAdapter.ts +5 -259
- package/src/adapters/RLFlexibleAdapter.ts +2 -65
- package/src/adapters/SanitizeHtmlAdapter.ts +3 -87
- package/src/adapters/XSSAdapter.ts +11 -19
- package/src/adapters/ZodAdapter.ts +2 -51
- package/src/core/HiSecure.ts +25 -36
- package/src/core/useSecure.ts +5 -7
- package/src/index.ts +4 -5
- package/src/managers/AuthManager.ts +5 -109
- package/src/managers/CorsManager.ts +1 -25
- package/src/managers/HashManager.ts +0 -286
- package/src/managers/JsonManager.ts +1 -91
- package/src/managers/RateLimitManager.ts +3 -262
- package/src/managers/SanitizerManager.ts +4 -263
- package/src/managers/ValidatorManager.ts +53 -187
- package/src/middlewares/errorHandler.ts +1 -176
- package/src/utils/deepFreeze.ts +0 -32
- package/src/utils/deepMerge.ts +0 -35
- package/src/utils/normalizeOptions.ts +16 -133
- package/src/examples/e1.ts +0 -1
- package/src/test/t1.ts +0 -1
|
@@ -1,166 +1,3 @@
|
|
|
1
|
-
// import { Request, Response, NextFunction } from "express";
|
|
2
|
-
// import { logger } from "../logging";
|
|
3
|
-
// import { AdapterError } from "../core/errors/AdapterError";
|
|
4
|
-
// import { ValidationError } from "../core/errors/ValidationError";
|
|
5
|
-
// import { SanitizerError } from "../core/errors/SanitizerError";
|
|
6
|
-
// import { SecurityError } from "../core/errors/SecurityError";
|
|
7
|
-
|
|
8
|
-
// export function errorHandler(
|
|
9
|
-
// err: any,
|
|
10
|
-
// req: Request,
|
|
11
|
-
// res: Response,
|
|
12
|
-
// _next: NextFunction
|
|
13
|
-
// ) {
|
|
14
|
-
// // Normalize unknown errors
|
|
15
|
-
// const errorMessage =
|
|
16
|
-
// typeof err === "string"
|
|
17
|
-
// ? err
|
|
18
|
-
// : err?.message || "Unknown error occurred";
|
|
19
|
-
|
|
20
|
-
// const errorStack =
|
|
21
|
-
// err instanceof Error && err.stack
|
|
22
|
-
// ? err.stack.split("\n").slice(0, 2).join(" | ")
|
|
23
|
-
// : undefined;
|
|
24
|
-
|
|
25
|
-
// // Log error centrally
|
|
26
|
-
// logger.error("❌ HiSecure Error Captured", {
|
|
27
|
-
// message: errorMessage,
|
|
28
|
-
// path: req.path,
|
|
29
|
-
// method: req.method,
|
|
30
|
-
// stack: errorStack,
|
|
31
|
-
// raw: err
|
|
32
|
-
// });
|
|
33
|
-
|
|
34
|
-
// // ------------------------------
|
|
35
|
-
// // CLASSIFIED ERROR RESPONSES
|
|
36
|
-
// // ------------------------------
|
|
37
|
-
|
|
38
|
-
// if (err instanceof ValidationError) {
|
|
39
|
-
// return res.status(400).json({
|
|
40
|
-
// success: false,
|
|
41
|
-
// error: "VALIDATION_ERROR",
|
|
42
|
-
// message: errorMessage
|
|
43
|
-
// });
|
|
44
|
-
// }
|
|
45
|
-
|
|
46
|
-
// if (err instanceof SanitizerError) {
|
|
47
|
-
// return res.status(400).json({
|
|
48
|
-
// success: false,
|
|
49
|
-
// error: "SANITIZER_ERROR",
|
|
50
|
-
// message: errorMessage
|
|
51
|
-
// });
|
|
52
|
-
// }
|
|
53
|
-
|
|
54
|
-
// if (err instanceof AdapterError) {
|
|
55
|
-
// return res.status(500).json({
|
|
56
|
-
// success: false,
|
|
57
|
-
// error: "ADAPTER_ERROR",
|
|
58
|
-
// message: errorMessage
|
|
59
|
-
// });
|
|
60
|
-
// }
|
|
61
|
-
|
|
62
|
-
// if (err instanceof SecurityError) {
|
|
63
|
-
// return res.status(500).json({
|
|
64
|
-
// success: false,
|
|
65
|
-
// error: "SECURITY_ERROR",
|
|
66
|
-
// message: errorMessage
|
|
67
|
-
// });
|
|
68
|
-
// }
|
|
69
|
-
|
|
70
|
-
// // ------------------------------
|
|
71
|
-
// // UNEXPECTED ERROR
|
|
72
|
-
// // ------------------------------
|
|
73
|
-
// return res.status(500).json({
|
|
74
|
-
// success: false,
|
|
75
|
-
// error: "INTERNAL_SERVER_ERROR",
|
|
76
|
-
// message: "An unexpected error occurred in HiSecure middleware."
|
|
77
|
-
// });
|
|
78
|
-
// }
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
// import { Request, Response, NextFunction } from "express";
|
|
84
|
-
// import { logger } from "../logging";
|
|
85
|
-
// import { AdapterError } from "../core/errors/AdapterError";
|
|
86
|
-
// import { ValidationError } from "../core/errors/ValidationError";
|
|
87
|
-
// import { SanitizerError } from "../core/errors/SanitizerError";
|
|
88
|
-
// import { SecurityError } from "../core/errors/SecurityError";
|
|
89
|
-
|
|
90
|
-
// export function errorHandler(
|
|
91
|
-
// err: any,
|
|
92
|
-
// req: Request,
|
|
93
|
-
// res: Response,
|
|
94
|
-
// _next: NextFunction
|
|
95
|
-
// ) {
|
|
96
|
-
// // Normalize unknown errors
|
|
97
|
-
// const errorMessage =
|
|
98
|
-
// typeof err === "string"
|
|
99
|
-
// ? err
|
|
100
|
-
// : err?.message || "Unknown error occurred";
|
|
101
|
-
|
|
102
|
-
// const errorStack =
|
|
103
|
-
// err instanceof Error && err.stack
|
|
104
|
-
// ? err.stack.split("\n").slice(0, 2).join(" | ")
|
|
105
|
-
// : undefined;
|
|
106
|
-
|
|
107
|
-
// // Log error centrally
|
|
108
|
-
// logger.error("❌ HiSecure Error Captured", {
|
|
109
|
-
// message: errorMessage,
|
|
110
|
-
// path: req.path,
|
|
111
|
-
// method: req.method,
|
|
112
|
-
// stack: errorStack,
|
|
113
|
-
// raw: err
|
|
114
|
-
// });
|
|
115
|
-
|
|
116
|
-
// // ------------------------------
|
|
117
|
-
// // CLASSIFIED ERROR RESPONSES
|
|
118
|
-
// // ------------------------------
|
|
119
|
-
|
|
120
|
-
// if (err instanceof ValidationError) {
|
|
121
|
-
// return res.status(400).json({
|
|
122
|
-
// success: false,
|
|
123
|
-
// error: "VALIDATION_ERROR",
|
|
124
|
-
// message: errorMessage
|
|
125
|
-
// });
|
|
126
|
-
// }
|
|
127
|
-
|
|
128
|
-
// if (err instanceof SanitizerError) {
|
|
129
|
-
// return res.status(400).json({
|
|
130
|
-
// success: false,
|
|
131
|
-
// error: "SANITIZER_ERROR",
|
|
132
|
-
// message: errorMessage
|
|
133
|
-
// });
|
|
134
|
-
// }
|
|
135
|
-
|
|
136
|
-
// if (err instanceof AdapterError) {
|
|
137
|
-
// return res.status(500).json({
|
|
138
|
-
// success: false,
|
|
139
|
-
// error: "ADAPTER_ERROR",
|
|
140
|
-
// message: errorMessage
|
|
141
|
-
// });
|
|
142
|
-
// }
|
|
143
|
-
|
|
144
|
-
// if (err instanceof SecurityError) {
|
|
145
|
-
// return res.status(500).json({
|
|
146
|
-
// success: false,
|
|
147
|
-
// error: "SECURITY_ERROR",
|
|
148
|
-
// message: errorMessage
|
|
149
|
-
// });
|
|
150
|
-
// }
|
|
151
|
-
|
|
152
|
-
// // ------------------------------
|
|
153
|
-
// // UNEXPECTED ERROR
|
|
154
|
-
// // ------------------------------
|
|
155
|
-
// return res.status(500).json({
|
|
156
|
-
// success: false,
|
|
157
|
-
// error: "INTERNAL_SERVER_ERROR",
|
|
158
|
-
// message: "An unexpected error occurred in HiSecure middleware."
|
|
159
|
-
// });
|
|
160
|
-
// }
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
1
|
import { Request, Response, NextFunction } from "express";
|
|
165
2
|
import { logger } from "../logging";
|
|
166
3
|
|
|
@@ -186,7 +23,7 @@ export function errorHandler(
|
|
|
186
23
|
? err.stack.split("\n").slice(0, 2).join(" | ")
|
|
187
24
|
: undefined;
|
|
188
25
|
|
|
189
|
-
|
|
26
|
+
|
|
190
27
|
logger.error("❌ HiSecure Error", {
|
|
191
28
|
type: err?.name || "UnknownError",
|
|
192
29
|
message,
|
|
@@ -198,9 +35,7 @@ export function errorHandler(
|
|
|
198
35
|
raw: err,
|
|
199
36
|
});
|
|
200
37
|
|
|
201
|
-
// ---------------------------------------------------
|
|
202
38
|
// 1. HttpError (developer thrown)
|
|
203
|
-
// ---------------------------------------------------
|
|
204
39
|
if (err instanceof HttpError) {
|
|
205
40
|
return res.status(err.status).json({
|
|
206
41
|
success: false,
|
|
@@ -210,9 +45,7 @@ export function errorHandler(
|
|
|
210
45
|
});
|
|
211
46
|
}
|
|
212
47
|
|
|
213
|
-
// ---------------------------------------------------
|
|
214
48
|
// 2. Validation Errors
|
|
215
|
-
// ---------------------------------------------------
|
|
216
49
|
if (err instanceof ValidationError) {
|
|
217
50
|
return res.status(400).json({
|
|
218
51
|
success: false,
|
|
@@ -221,9 +54,7 @@ export function errorHandler(
|
|
|
221
54
|
});
|
|
222
55
|
}
|
|
223
56
|
|
|
224
|
-
// ---------------------------------------------------
|
|
225
57
|
// 3. Sanitizer Errors
|
|
226
|
-
// ---------------------------------------------------
|
|
227
58
|
if (err instanceof SanitizerError) {
|
|
228
59
|
return res.status(400).json({
|
|
229
60
|
success: false,
|
|
@@ -232,9 +63,7 @@ export function errorHandler(
|
|
|
232
63
|
});
|
|
233
64
|
}
|
|
234
65
|
|
|
235
|
-
// ---------------------------------------------------
|
|
236
66
|
// 4. Adapter Errors (hashing, rate-limit, sanitizer, validator ...)
|
|
237
|
-
// ---------------------------------------------------
|
|
238
67
|
if (err instanceof AdapterError) {
|
|
239
68
|
return res.status(500).json({
|
|
240
69
|
success: false,
|
|
@@ -243,9 +72,7 @@ export function errorHandler(
|
|
|
243
72
|
});
|
|
244
73
|
}
|
|
245
74
|
|
|
246
|
-
// ---------------------------------------------------
|
|
247
75
|
// 5. Security Errors (internal library security logic)
|
|
248
|
-
// ---------------------------------------------------
|
|
249
76
|
if (err instanceof SecurityError) {
|
|
250
77
|
return res.status(500).json({
|
|
251
78
|
success: false,
|
|
@@ -254,9 +81,7 @@ export function errorHandler(
|
|
|
254
81
|
});
|
|
255
82
|
}
|
|
256
83
|
|
|
257
|
-
// ---------------------------------------------------
|
|
258
84
|
// 6. Fallback → Unexpected
|
|
259
|
-
// ---------------------------------------------------
|
|
260
85
|
return res.status(500).json({
|
|
261
86
|
success: false,
|
|
262
87
|
error: "INTERNAL_SERVER_ERROR",
|
package/src/utils/deepFreeze.ts
CHANGED
|
@@ -1,50 +1,20 @@
|
|
|
1
|
-
// export function deepFreeze<T>(obj: T): T {
|
|
2
|
-
// // Freeze the top level object
|
|
3
|
-
// Object.freeze(obj);
|
|
4
|
-
|
|
5
|
-
// // Now recursively freeze nested objects
|
|
6
|
-
// Object.getOwnPropertyNames(obj).forEach((prop) => {
|
|
7
|
-
// // @ts-ignore
|
|
8
|
-
// const value = obj[prop];
|
|
9
|
-
|
|
10
|
-
// if (
|
|
11
|
-
// value &&
|
|
12
|
-
// (typeof value === "object" || typeof value === "function") &&
|
|
13
|
-
// !Object.isFrozen(value)
|
|
14
|
-
// ) {
|
|
15
|
-
// deepFreeze(value); // recursive freeze
|
|
16
|
-
// }
|
|
17
|
-
// });
|
|
18
|
-
|
|
19
|
-
// return obj;
|
|
20
|
-
// }
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
1
|
export function deepFreeze<T>(obj: T, visited = new WeakSet()): T {
|
|
26
|
-
// Handle primitives and null/undefined
|
|
27
2
|
if (obj === null || obj === undefined) return obj;
|
|
28
3
|
if (typeof obj !== 'object' && typeof obj !== 'function') return obj;
|
|
29
4
|
|
|
30
|
-
// Handle circular references
|
|
31
5
|
if (visited.has(obj)) return obj;
|
|
32
6
|
visited.add(obj);
|
|
33
7
|
|
|
34
|
-
// Don't freeze built-in objects that shouldn't be frozen
|
|
35
8
|
const constructor = obj.constructor;
|
|
36
9
|
const builtIns = [Date, RegExp, Map, Set, WeakMap, WeakSet, Promise];
|
|
37
10
|
if (builtIns.some(builtIn => obj instanceof builtIn)) {
|
|
38
11
|
return obj;
|
|
39
12
|
}
|
|
40
13
|
|
|
41
|
-
// Don't freeze functions
|
|
42
14
|
if (typeof obj === 'function') return obj;
|
|
43
15
|
|
|
44
|
-
// Freeze the object itself
|
|
45
16
|
Object.freeze(obj);
|
|
46
17
|
|
|
47
|
-
// Freeze array elements
|
|
48
18
|
if (Array.isArray(obj)) {
|
|
49
19
|
for (const item of obj) {
|
|
50
20
|
if (item && typeof item === 'object') {
|
|
@@ -54,7 +24,6 @@ export function deepFreeze<T>(obj: T, visited = new WeakSet()): T {
|
|
|
54
24
|
return obj;
|
|
55
25
|
}
|
|
56
26
|
|
|
57
|
-
// Freeze object properties
|
|
58
27
|
const props = Object.getOwnPropertyNames(obj);
|
|
59
28
|
for (const prop of props) {
|
|
60
29
|
const value = (obj as any)[prop];
|
|
@@ -63,7 +32,6 @@ export function deepFreeze<T>(obj: T, visited = new WeakSet()): T {
|
|
|
63
32
|
}
|
|
64
33
|
}
|
|
65
34
|
|
|
66
|
-
// Freeze symbol properties
|
|
67
35
|
const symbols = Object.getOwnPropertySymbols(obj);
|
|
68
36
|
for (const sym of symbols) {
|
|
69
37
|
const value = (obj as any)[sym];
|
package/src/utils/deepMerge.ts
CHANGED
|
@@ -1,32 +1,3 @@
|
|
|
1
|
-
// export function deepMerge<T>(target: T, source: Partial<T>): T {
|
|
2
|
-
// if (!source) return target;
|
|
3
|
-
|
|
4
|
-
// const output: any = Array.isArray(target) ? [...(target as any)] : { ...(target as any) };
|
|
5
|
-
|
|
6
|
-
// for (const key of Object.keys(source) as Array<keyof typeof source>) {
|
|
7
|
-
// const sourceValue = (source as any)[key];
|
|
8
|
-
// const targetValue = (target as any)[key];
|
|
9
|
-
|
|
10
|
-
// const shouldRecurse =
|
|
11
|
-
// sourceValue &&
|
|
12
|
-
// typeof sourceValue === "object" &&
|
|
13
|
-
// !Array.isArray(sourceValue) &&
|
|
14
|
-
// targetValue &&
|
|
15
|
-
// typeof targetValue === "object";
|
|
16
|
-
|
|
17
|
-
// if (shouldRecurse) {
|
|
18
|
-
// output[key] = deepMerge(targetValue, sourceValue);
|
|
19
|
-
// } else {
|
|
20
|
-
// output[key] = sourceValue;
|
|
21
|
-
// }
|
|
22
|
-
// }
|
|
23
|
-
|
|
24
|
-
// return output;
|
|
25
|
-
// }
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
1
|
export function deepMerge<T extends object, U extends Partial<T>>(
|
|
31
2
|
target: T,
|
|
32
3
|
source: U,
|
|
@@ -48,22 +19,18 @@ export function deepMerge<T extends object, U extends Partial<T>>(
|
|
|
48
19
|
const sourceValue = (source as any)[key];
|
|
49
20
|
const targetValue = (target as any)[key];
|
|
50
21
|
|
|
51
|
-
// Skip undefined values if configured
|
|
52
22
|
if (skipUndefined && sourceValue === undefined) continue;
|
|
53
23
|
|
|
54
|
-
// Handle null explicitly
|
|
55
24
|
if (sourceValue === null) {
|
|
56
25
|
output[key] = null;
|
|
57
26
|
continue;
|
|
58
27
|
}
|
|
59
28
|
|
|
60
|
-
// Merge arrays if option enabled
|
|
61
29
|
if (mergeArrays && Array.isArray(targetValue) && Array.isArray(sourceValue)) {
|
|
62
30
|
output[key] = [...targetValue, ...sourceValue];
|
|
63
31
|
continue;
|
|
64
32
|
}
|
|
65
33
|
|
|
66
|
-
// Recursive merge for plain objects
|
|
67
34
|
if (sourceValue && typeof sourceValue === 'object' &&
|
|
68
35
|
targetValue && typeof targetValue === 'object' &&
|
|
69
36
|
!Array.isArray(sourceValue) && !Array.isArray(targetValue) &&
|
|
@@ -73,11 +40,9 @@ export function deepMerge<T extends object, U extends Partial<T>>(
|
|
|
73
40
|
continue;
|
|
74
41
|
}
|
|
75
42
|
|
|
76
|
-
// Overwrite for everything else
|
|
77
43
|
output[key] = sourceValue;
|
|
78
44
|
}
|
|
79
45
|
|
|
80
|
-
// Handle symbol properties
|
|
81
46
|
const symbols = Object.getOwnPropertySymbols(source);
|
|
82
47
|
for (const sym of symbols) {
|
|
83
48
|
output[sym] = (source as any)[sym];
|
|
@@ -1,125 +1,8 @@
|
|
|
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
1
|
import {
|
|
119
2
|
SecureOptions,
|
|
120
|
-
AuthOptions,
|
|
121
|
-
RateLimitOptions,
|
|
122
|
-
SanitizeOptions
|
|
3
|
+
AuthOptions,
|
|
4
|
+
RateLimitOptions,
|
|
5
|
+
SanitizeOptions
|
|
123
6
|
} from "../core/types/SecureOptions.js";
|
|
124
7
|
|
|
125
8
|
export interface NormalizedOptions {
|
|
@@ -218,22 +101,22 @@ function normalizeRateLimit(value: SecureOptions["rateLimit"]): NormalizedOption
|
|
|
218
101
|
}
|
|
219
102
|
|
|
220
103
|
function normalizeAuth(value: SecureOptions["auth"]): NormalizedOptions["auth"] {
|
|
104
|
+
|
|
105
|
+
// if (value === false) {
|
|
106
|
+
// return { enabled: false, required: false };
|
|
107
|
+
// }
|
|
221
108
|
|
|
222
|
-
if (value ===
|
|
223
|
-
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
if (value === true || value === undefined) {
|
|
227
|
-
return { enabled: true, required: true };
|
|
228
|
-
}
|
|
109
|
+
// if (value === true || value === undefined) {
|
|
110
|
+
// return { enabled: true, required: true };
|
|
111
|
+
// }
|
|
229
112
|
|
|
230
113
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
114
|
+
if (value === undefined) {
|
|
115
|
+
return { enabled: false, required: false };
|
|
116
|
+
}
|
|
117
|
+
if (value === true) {
|
|
118
|
+
return { enabled: true, required: true };
|
|
119
|
+
}
|
|
237
120
|
|
|
238
121
|
|
|
239
122
|
const authOptions = value as AuthOptions;
|
package/src/examples/e1.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
// baad mein krte hai ise
|
package/src/test/t1.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
// dekhete hai baad mein
|