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.
- package/dist/adapters/ArgonAdapter.d.ts +8 -0
- package/dist/adapters/ArgonAdapter.d.ts.map +1 -0
- package/dist/adapters/ArgonAdapter.js +45 -0
- package/dist/adapters/ArgonAdapter.js.map +1 -0
- package/dist/adapters/BcryptAdapter.d.ts +7 -0
- package/dist/adapters/BcryptAdapter.d.ts.map +1 -0
- package/dist/adapters/BcryptAdapter.js +48 -0
- package/dist/adapters/BcryptAdapter.js.map +1 -0
- package/dist/adapters/DomPurifyAdapter.d.ts +13 -0
- package/dist/adapters/DomPurifyAdapter.d.ts.map +1 -0
- package/dist/adapters/DomPurifyAdapter.js +61 -0
- package/dist/adapters/DomPurifyAdapter.js.map +1 -0
- package/dist/adapters/ExpressRLAdapter.d.ts +13 -0
- package/dist/adapters/ExpressRLAdapter.d.ts.map +1 -0
- package/dist/adapters/ExpressRLAdapter.js +68 -0
- package/dist/adapters/ExpressRLAdapter.js.map +1 -0
- package/dist/adapters/ExpressValidatorAdapter.d.ts +6 -0
- package/dist/adapters/ExpressValidatorAdapter.d.ts.map +1 -0
- package/dist/adapters/ExpressValidatorAdapter.js +78 -0
- package/dist/adapters/ExpressValidatorAdapter.js.map +1 -0
- package/dist/adapters/GoggleAdapter.d.ts +15 -0
- package/dist/adapters/GoggleAdapter.d.ts.map +1 -0
- package/dist/adapters/GoggleAdapter.js +91 -0
- package/dist/adapters/GoggleAdapter.js.map +1 -0
- package/dist/adapters/GoogleAdapter.d.ts +15 -0
- package/dist/adapters/GoogleAdapter.d.ts.map +1 -0
- package/dist/adapters/GoogleAdapter.js +159 -0
- package/dist/adapters/GoogleAdapter.js.map +1 -0
- package/dist/adapters/JWTAdapter.d.ts +28 -0
- package/dist/adapters/JWTAdapter.d.ts.map +1 -0
- package/dist/adapters/JWTAdapter.js +276 -0
- package/dist/adapters/JWTAdapter.js.map +1 -0
- package/dist/adapters/RLFlexibleAdapter.d.ts +11 -0
- package/dist/adapters/RLFlexibleAdapter.d.ts.map +1 -0
- package/dist/adapters/RLFlexibleAdapter.js +115 -0
- package/dist/adapters/RLFlexibleAdapter.js.map +1 -0
- package/dist/adapters/SanitizeHtmlAdapter.d.ts +12 -0
- package/dist/adapters/SanitizeHtmlAdapter.d.ts.map +1 -0
- package/dist/adapters/SanitizeHtmlAdapter.js +141 -0
- package/dist/adapters/SanitizeHtmlAdapter.js.map +1 -0
- package/dist/adapters/XSSAdapter.d.ts +33 -0
- package/dist/adapters/XSSAdapter.d.ts.map +1 -0
- package/dist/adapters/XSSAdapter.js +127 -0
- package/dist/adapters/XSSAdapter.js.map +1 -0
- package/dist/adapters/ZodAdapter.d.ts +7 -0
- package/dist/adapters/ZodAdapter.d.ts.map +1 -0
- package/dist/adapters/ZodAdapter.js +39 -0
- package/dist/adapters/ZodAdapter.js.map +1 -0
- package/dist/core/HiSecure.d.ts +62 -0
- package/dist/core/HiSecure.d.ts.map +1 -0
- package/dist/core/HiSecure.js +273 -0
- package/dist/core/HiSecure.js.map +1 -0
- package/dist/core/config.d.ts +3 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +53 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/constants.d.ts +37 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/constants.js +67 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/errors/AdapterError.d.ts +5 -0
- package/dist/core/errors/AdapterError.d.ts.map +1 -0
- package/dist/core/errors/AdapterError.js +15 -0
- package/dist/core/errors/AdapterError.js.map +1 -0
- package/dist/core/errors/HttpErrror.d.ts +17 -0
- package/dist/core/errors/HttpErrror.d.ts.map +1 -0
- package/dist/core/errors/HttpErrror.js +36 -0
- package/dist/core/errors/HttpErrror.js.map +1 -0
- package/dist/core/errors/SanitizerError.d.ts +5 -0
- package/dist/core/errors/SanitizerError.d.ts.map +1 -0
- package/dist/core/errors/SanitizerError.js +14 -0
- package/dist/core/errors/SanitizerError.js.map +1 -0
- package/dist/core/errors/SecurityError.d.ts +5 -0
- package/dist/core/errors/SecurityError.d.ts.map +1 -0
- package/dist/core/errors/SecurityError.js +14 -0
- package/dist/core/errors/SecurityError.js.map +1 -0
- package/dist/core/errors/ValidationError.d.ts +5 -0
- package/dist/core/errors/ValidationError.d.ts.map +1 -0
- package/dist/core/errors/ValidationError.js +14 -0
- package/dist/core/errors/ValidationError.js.map +1 -0
- package/dist/core/types/HiSecureConfig.d.ts +47 -0
- package/dist/core/types/HiSecureConfig.d.ts.map +1 -0
- package/dist/core/types/HiSecureConfig.js +3 -0
- package/dist/core/types/HiSecureConfig.js.map +1 -0
- package/dist/core/types/SecureOptions.d.ts +30 -0
- package/dist/core/types/SecureOptions.d.ts.map +1 -0
- package/dist/core/types/SecureOptions.js +4 -0
- package/dist/core/types/SecureOptions.js.map +1 -0
- package/dist/core/useSecure.d.ts +10 -0
- package/dist/core/useSecure.d.ts.map +1 -0
- package/dist/core/useSecure.js +85 -0
- package/dist/core/useSecure.js.map +1 -0
- package/dist/examples/e1.d.ts +1 -0
- package/dist/examples/e1.d.ts.map +1 -0
- package/dist/examples/e1.js +3 -0
- package/dist/examples/e1.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/index.d.ts +3 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +19 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/morganSetup.d.ts +2 -0
- package/dist/logging/morganSetup.d.ts.map +1 -0
- package/dist/logging/morganSetup.js +9 -0
- package/dist/logging/morganSetup.js.map +1 -0
- package/dist/logging/winstonSetup.d.ts +6 -0
- package/dist/logging/winstonSetup.d.ts.map +1 -0
- package/dist/logging/winstonSetup.js +22 -0
- package/dist/logging/winstonSetup.js.map +1 -0
- package/dist/managers/AuthManager.d.ts +23 -0
- package/dist/managers/AuthManager.d.ts.map +1 -0
- package/dist/managers/AuthManager.js +190 -0
- package/dist/managers/AuthManager.js.map +1 -0
- package/dist/managers/CorsManager.d.ts +9 -0
- package/dist/managers/CorsManager.d.ts.map +1 -0
- package/dist/managers/CorsManager.js +55 -0
- package/dist/managers/CorsManager.js.map +1 -0
- package/dist/managers/HashManager.d.ts +22 -0
- package/dist/managers/HashManager.d.ts.map +1 -0
- package/dist/managers/HashManager.js +319 -0
- package/dist/managers/HashManager.js.map +1 -0
- package/dist/managers/JsonManager.d.ts +6 -0
- package/dist/managers/JsonManager.d.ts.map +1 -0
- package/dist/managers/JsonManager.js +142 -0
- package/dist/managers/JsonManager.js.map +1 -0
- package/dist/managers/RateLimitManager.d.ts +16 -0
- package/dist/managers/RateLimitManager.d.ts.map +1 -0
- package/dist/managers/RateLimitManager.js +108 -0
- package/dist/managers/RateLimitManager.js.map +1 -0
- package/dist/managers/SanitizerManager.d.ts +18 -0
- package/dist/managers/SanitizerManager.d.ts.map +1 -0
- package/dist/managers/SanitizerManager.js +296 -0
- package/dist/managers/SanitizerManager.js.map +1 -0
- package/dist/managers/ValidatorManager.d.ts +13 -0
- package/dist/managers/ValidatorManager.d.ts.map +1 -0
- package/dist/managers/ValidatorManager.js +218 -0
- package/dist/managers/ValidatorManager.js.map +1 -0
- package/dist/middlewares/errorHandler.d.ts +3 -0
- package/dist/middlewares/errorHandler.d.ts.map +1 -0
- package/dist/middlewares/errorHandler.js +94 -0
- package/dist/middlewares/errorHandler.js.map +1 -0
- package/dist/middlewares/index.d.ts +3 -0
- package/dist/middlewares/index.d.ts.map +1 -0
- package/dist/middlewares/index.js +19 -0
- package/dist/middlewares/index.js.map +1 -0
- package/dist/middlewares/requestLogger.d.ts +2 -0
- package/dist/middlewares/requestLogger.d.ts.map +1 -0
- package/dist/middlewares/requestLogger.js +8 -0
- package/dist/middlewares/requestLogger.js.map +1 -0
- package/dist/test/t1.d.ts +1 -0
- package/dist/test/t1.d.ts.map +1 -0
- package/dist/test/t1.js +3 -0
- package/dist/test/t1.js.map +1 -0
- package/dist/utils/deepFreeze.d.ts +2 -0
- package/dist/utils/deepFreeze.d.ts.map +1 -0
- package/dist/utils/deepFreeze.js +69 -0
- package/dist/utils/deepFreeze.js.map +1 -0
- package/dist/utils/deepMerge.d.ts +5 -0
- package/dist/utils/deepMerge.d.ts.map +1 -0
- package/dist/utils/deepMerge.js +68 -0
- package/dist/utils/deepMerge.js.map +1 -0
- package/dist/utils/normalizeOptions.d.ts +38 -0
- package/dist/utils/normalizeOptions.d.ts.map +1 -0
- package/dist/utils/normalizeOptions.js +119 -0
- package/dist/utils/normalizeOptions.js.map +1 -0
- package/package.json +50 -0
- package/src/adapters/ArgonAdapter.ts +41 -0
- package/src/adapters/BcryptAdapter.ts +49 -0
- package/src/adapters/ExpressRLAdapter.ts +84 -0
- package/src/adapters/ExpressValidatorAdapter.ts +99 -0
- package/src/adapters/GoogleAdapter.ts +206 -0
- package/src/adapters/JWTAdapter.ts +346 -0
- package/src/adapters/RLFlexibleAdapter.ts +139 -0
- package/src/adapters/SanitizeHtmlAdapter.ts +162 -0
- package/src/adapters/XSSAdapter.ts +153 -0
- package/src/adapters/ZodAdapter.ts +91 -0
- package/src/core/HiSecure.ts +955 -0
- package/src/core/config.ts +156 -0
- package/src/core/constants.ts +73 -0
- package/src/core/errors/AdapterError.ts +14 -0
- package/src/core/errors/HttpErrror.ts +46 -0
- package/src/core/errors/SanitizerError.ts +13 -0
- package/src/core/errors/SecurityError.ts +13 -0
- package/src/core/errors/ValidationError.ts +13 -0
- package/src/core/types/HiSecureConfig.ts +62 -0
- package/src/core/types/SecureOptions.ts +61 -0
- package/src/core/useSecure.ts +111 -0
- package/src/examples/e1.ts +1 -0
- package/src/index.ts +17 -0
- package/src/logging/index.ts +2 -0
- package/src/logging/morganSetup.ts +3 -0
- package/src/logging/winstonSetup.ts +17 -0
- package/src/managers/AuthManager.ts +237 -0
- package/src/managers/CorsManager.ts +58 -0
- package/src/managers/HashManager.ts +390 -0
- package/src/managers/JsonManager.ts +149 -0
- package/src/managers/RateLimitManager.ts +368 -0
- package/src/managers/SanitizerManager.ts +359 -0
- package/src/managers/ValidatorManager.ts +269 -0
- package/src/middlewares/errorHandler.ts +265 -0
- package/src/middlewares/index.ts +2 -0
- package/src/middlewares/requestLogger.ts +5 -0
- package/src/test/t1.ts +1 -0
- package/src/utils/deepFreeze.ts +76 -0
- package/src/utils/deepMerge.ts +87 -0
- package/src/utils/normalizeOptions.ts +265 -0
- package/tsconfig.json +30 -0
|
@@ -0,0 +1,265 @@
|
|
|
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
|
+
import { Request, Response, NextFunction } from "express";
|
|
165
|
+
import { logger } from "../logging";
|
|
166
|
+
|
|
167
|
+
import { AdapterError } from "../core/errors/AdapterError.js";
|
|
168
|
+
import { ValidationError } from "../core/errors/ValidationError.js";
|
|
169
|
+
import { SanitizerError } from "../core/errors/SanitizerError.js";
|
|
170
|
+
import { SecurityError } from "../core/errors/SecurityError.js";
|
|
171
|
+
import { HttpError } from "../core/errors/HttpErrror.js";
|
|
172
|
+
|
|
173
|
+
export function errorHandler(
|
|
174
|
+
err: any,
|
|
175
|
+
req: Request,
|
|
176
|
+
res: Response,
|
|
177
|
+
_next: NextFunction
|
|
178
|
+
) {
|
|
179
|
+
const message =
|
|
180
|
+
typeof err === "string"
|
|
181
|
+
? err
|
|
182
|
+
: err?.message || "Unknown error";
|
|
183
|
+
|
|
184
|
+
const stack =
|
|
185
|
+
err instanceof Error && err.stack
|
|
186
|
+
? err.stack.split("\n").slice(0, 2).join(" | ")
|
|
187
|
+
: undefined;
|
|
188
|
+
|
|
189
|
+
// Unified logging
|
|
190
|
+
logger.error("❌ HiSecure Error", {
|
|
191
|
+
type: err?.name || "UnknownError",
|
|
192
|
+
message,
|
|
193
|
+
status: err?.status,
|
|
194
|
+
code: err?.code,
|
|
195
|
+
path: req.path,
|
|
196
|
+
method: req.method,
|
|
197
|
+
stack,
|
|
198
|
+
raw: err,
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
// ---------------------------------------------------
|
|
202
|
+
// 1. HttpError (developer thrown)
|
|
203
|
+
// ---------------------------------------------------
|
|
204
|
+
if (err instanceof HttpError) {
|
|
205
|
+
return res.status(err.status).json({
|
|
206
|
+
success: false,
|
|
207
|
+
error: err.code,
|
|
208
|
+
message: err.message,
|
|
209
|
+
details: err.details || undefined,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// ---------------------------------------------------
|
|
214
|
+
// 2. Validation Errors
|
|
215
|
+
// ---------------------------------------------------
|
|
216
|
+
if (err instanceof ValidationError) {
|
|
217
|
+
return res.status(400).json({
|
|
218
|
+
success: false,
|
|
219
|
+
error: "VALIDATION_ERROR",
|
|
220
|
+
message,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// ---------------------------------------------------
|
|
225
|
+
// 3. Sanitizer Errors
|
|
226
|
+
// ---------------------------------------------------
|
|
227
|
+
if (err instanceof SanitizerError) {
|
|
228
|
+
return res.status(400).json({
|
|
229
|
+
success: false,
|
|
230
|
+
error: "SANITIZER_ERROR",
|
|
231
|
+
message,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// ---------------------------------------------------
|
|
236
|
+
// 4. Adapter Errors (hashing, rate-limit, sanitizer, validator ...)
|
|
237
|
+
// ---------------------------------------------------
|
|
238
|
+
if (err instanceof AdapterError) {
|
|
239
|
+
return res.status(500).json({
|
|
240
|
+
success: false,
|
|
241
|
+
error: "ADAPTER_ERROR",
|
|
242
|
+
message,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// ---------------------------------------------------
|
|
247
|
+
// 5. Security Errors (internal library security logic)
|
|
248
|
+
// ---------------------------------------------------
|
|
249
|
+
if (err instanceof SecurityError) {
|
|
250
|
+
return res.status(500).json({
|
|
251
|
+
success: false,
|
|
252
|
+
error: "SECURITY_ERROR",
|
|
253
|
+
message,
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// ---------------------------------------------------
|
|
258
|
+
// 6. Fallback → Unexpected
|
|
259
|
+
// ---------------------------------------------------
|
|
260
|
+
return res.status(500).json({
|
|
261
|
+
success: false,
|
|
262
|
+
error: "INTERNAL_SERVER_ERROR",
|
|
263
|
+
message: "An unexpected error occurred in HiSecure.",
|
|
264
|
+
});
|
|
265
|
+
}
|
package/src/test/t1.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
// dekhete hai baad mein
|
|
@@ -0,0 +1,76 @@
|
|
|
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
|
+
export function deepFreeze<T>(obj: T, visited = new WeakSet()): T {
|
|
26
|
+
// Handle primitives and null/undefined
|
|
27
|
+
if (obj === null || obj === undefined) return obj;
|
|
28
|
+
if (typeof obj !== 'object' && typeof obj !== 'function') return obj;
|
|
29
|
+
|
|
30
|
+
// Handle circular references
|
|
31
|
+
if (visited.has(obj)) return obj;
|
|
32
|
+
visited.add(obj);
|
|
33
|
+
|
|
34
|
+
// Don't freeze built-in objects that shouldn't be frozen
|
|
35
|
+
const constructor = obj.constructor;
|
|
36
|
+
const builtIns = [Date, RegExp, Map, Set, WeakMap, WeakSet, Promise];
|
|
37
|
+
if (builtIns.some(builtIn => obj instanceof builtIn)) {
|
|
38
|
+
return obj;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Don't freeze functions
|
|
42
|
+
if (typeof obj === 'function') return obj;
|
|
43
|
+
|
|
44
|
+
// Freeze the object itself
|
|
45
|
+
Object.freeze(obj);
|
|
46
|
+
|
|
47
|
+
// Freeze array elements
|
|
48
|
+
if (Array.isArray(obj)) {
|
|
49
|
+
for (const item of obj) {
|
|
50
|
+
if (item && typeof item === 'object') {
|
|
51
|
+
deepFreeze(item, visited);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return obj;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Freeze object properties
|
|
58
|
+
const props = Object.getOwnPropertyNames(obj);
|
|
59
|
+
for (const prop of props) {
|
|
60
|
+
const value = (obj as any)[prop];
|
|
61
|
+
if (value && typeof value === 'object') {
|
|
62
|
+
deepFreeze(value, visited);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Freeze symbol properties
|
|
67
|
+
const symbols = Object.getOwnPropertySymbols(obj);
|
|
68
|
+
for (const sym of symbols) {
|
|
69
|
+
const value = (obj as any)[sym];
|
|
70
|
+
if (value && typeof value === 'object') {
|
|
71
|
+
deepFreeze(value, visited);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return obj;
|
|
76
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
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
|
+
export function deepMerge<T extends object, U extends Partial<T>>(
|
|
31
|
+
target: T,
|
|
32
|
+
source: U,
|
|
33
|
+
options: { mergeArrays?: boolean; skipUndefined?: boolean } = {}
|
|
34
|
+
): T & U {
|
|
35
|
+
const { mergeArrays = false, skipUndefined = true } = options;
|
|
36
|
+
|
|
37
|
+
if (!source || typeof source !== 'object') {
|
|
38
|
+
return target as T & U;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const output: any = Array.isArray(target)
|
|
42
|
+
? [...target]
|
|
43
|
+
: { ...target };
|
|
44
|
+
|
|
45
|
+
for (const key in source) {
|
|
46
|
+
if (!source.hasOwnProperty(key)) continue;
|
|
47
|
+
|
|
48
|
+
const sourceValue = (source as any)[key];
|
|
49
|
+
const targetValue = (target as any)[key];
|
|
50
|
+
|
|
51
|
+
// Skip undefined values if configured
|
|
52
|
+
if (skipUndefined && sourceValue === undefined) continue;
|
|
53
|
+
|
|
54
|
+
// Handle null explicitly
|
|
55
|
+
if (sourceValue === null) {
|
|
56
|
+
output[key] = null;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Merge arrays if option enabled
|
|
61
|
+
if (mergeArrays && Array.isArray(targetValue) && Array.isArray(sourceValue)) {
|
|
62
|
+
output[key] = [...targetValue, ...sourceValue];
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Recursive merge for plain objects
|
|
67
|
+
if (sourceValue && typeof sourceValue === 'object' &&
|
|
68
|
+
targetValue && typeof targetValue === 'object' &&
|
|
69
|
+
!Array.isArray(sourceValue) && !Array.isArray(targetValue) &&
|
|
70
|
+
sourceValue.constructor === Object && targetValue.constructor === Object) {
|
|
71
|
+
|
|
72
|
+
output[key] = deepMerge(targetValue, sourceValue, options);
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Overwrite for everything else
|
|
77
|
+
output[key] = sourceValue;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Handle symbol properties
|
|
81
|
+
const symbols = Object.getOwnPropertySymbols(source);
|
|
82
|
+
for (const sym of symbols) {
|
|
83
|
+
output[sym] = (source as any)[sym];
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return output as T & U;
|
|
87
|
+
}
|