90dc-core 1.11.3 → 1.11.4
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorMiddleware.d.ts","sourceRoot":"","sources":["../../../src/lib/middlewares/ErrorMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAc,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC;CACxD;AAED,wBAAgB,eAAe,CAAC,MAAM,GAAE,qBAA0B,IAQlD,KAAK,OAAO,EAAE,MAAM,IAAI,mBAqCvC;
|
|
1
|
+
{"version":3,"file":"ErrorMiddleware.d.ts","sourceRoot":"","sources":["../../../src/lib/middlewares/ErrorMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAc,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC;CACxD;AAED,wBAAgB,eAAe,CAAC,MAAM,GAAE,qBAA0B,IAQlD,KAAK,OAAO,EAAE,MAAM,IAAI,mBAqCvC;AA+DD,wBAAgB,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,GAAG;IAClD,gBAAgB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACrE,CAQA"}
|
|
@@ -29,31 +29,36 @@ export function ErrorMiddleware(config = {}) {
|
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
31
|
function defaultErrorLogger(error, ctx) {
|
|
32
|
+
const isDev = process.env.NODE_ENV === "development";
|
|
32
33
|
const safeEmail = typeof ctx.state.user?.email === "string" ? "***@***" : undefined;
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
if (error.statusCode >= 500) {
|
|
35
|
+
if (!isDev) {
|
|
36
|
+
const prodLogData = {
|
|
37
|
+
error: {
|
|
38
|
+
code: error.code,
|
|
39
|
+
message: error.message,
|
|
40
|
+
statusCode: error.statusCode
|
|
41
|
+
},
|
|
42
|
+
request: {
|
|
43
|
+
path: ctx.path
|
|
44
|
+
},
|
|
45
|
+
user: {
|
|
46
|
+
uuid: ctx.state.user?.userUuid,
|
|
47
|
+
email: safeEmail
|
|
48
|
+
},
|
|
49
|
+
traceId: ctx.state.traceId
|
|
50
|
+
};
|
|
51
|
+
console.error("Server Error:", JSON.stringify(prodLogData));
|
|
52
|
+
} else {
|
|
53
|
+
console.error("Server Error:", error.stack || error.message);
|
|
54
|
+
}
|
|
55
|
+
} else {
|
|
56
|
+
console.warn("Client Error:", JSON.stringify({
|
|
35
57
|
code: error.code,
|
|
36
58
|
message: error.message,
|
|
37
59
|
statusCode: error.statusCode,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
},
|
|
41
|
-
request: {
|
|
42
|
-
method: ctx.method,
|
|
43
|
-
path: ctx.path,
|
|
44
|
-
ip: ctx.ip,
|
|
45
|
-
userAgent: ctx.get("user-agent")
|
|
46
|
-
},
|
|
47
|
-
user: {
|
|
48
|
-
uuid: ctx.state.user?.userUuid,
|
|
49
|
-
email: safeEmail
|
|
50
|
-
},
|
|
51
|
-
traceId: ctx.state.traceId
|
|
52
|
-
};
|
|
53
|
-
if (error.statusCode >= 500) {
|
|
54
|
-
console.error("Server Error:", JSON.stringify(logData));
|
|
55
|
-
} else {
|
|
56
|
-
console.warn("Client Error:", JSON.stringify(logData));
|
|
60
|
+
path: ctx.path
|
|
61
|
+
}));
|
|
57
62
|
}
|
|
58
63
|
}
|
|
59
64
|
function formatErrorResponse(error, exposeDetails) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/middlewares/ErrorMiddleware.ts"],"sourcesContent":["import type { Context, Next } from \"koa\";\nimport { z } from \"zod\";\nimport { AppError, toAppError } from \"../Errors/AppError.js\";\n\nexport interface ErrorMiddlewareConfig {\n exposeErrorDetails?: boolean;\n logErrors?: boolean;\n logger?: (error: Error, ctx: Context) => void;\n formatter?: (error: AppError, ctx: Context) => unknown;\n}\n\nexport function ErrorMiddleware(config: ErrorMiddlewareConfig = {}) {\n const {\n exposeErrorDetails = false,\n logErrors = true,\n logger,\n formatter,\n } = config;\n\n return async (ctx: Context, next: Next) => {\n try {\n await next();\n } catch (err) {\n let appError: AppError;\n\n if (err instanceof z.ZodError) {\n appError = new AppError(\n \"VALIDATION_ERROR\",\n \"Request validation failed\",\n 400,\n formatZodErrors(err)\n );\n } else {\n appError = toAppError(err);\n }\n\n if (logErrors) {\n if (logger) {\n logger(appError, ctx);\n } else {\n defaultErrorLogger(appError, ctx);\n }\n }\n\n ctx.status = appError.statusCode;\n ctx.set(\"X-Error-Code\", appError.code);\n ctx.type = \"application/json\";\n\n ctx.body = formatter\n ? formatter(appError, ctx)\n : formatErrorResponse(appError, exposeErrorDetails);\n\n // optional: only emit for 5xx to avoid noisy app-level listeners\n ctx.app.emit(\"error\", appError, ctx);\n }\n };\n}\n\nfunction defaultErrorLogger(error: AppError, ctx: Context): void {\n const safeEmail =\n typeof ctx.state.user?.email === \"string\" ? \"***@***\" : undefined;\n\n const
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/middlewares/ErrorMiddleware.ts"],"sourcesContent":["import type { Context, Next } from \"koa\";\nimport { z } from \"zod\";\nimport { AppError, toAppError } from \"../Errors/AppError.js\";\n\nexport interface ErrorMiddlewareConfig {\n exposeErrorDetails?: boolean;\n logErrors?: boolean;\n logger?: (error: Error, ctx: Context) => void;\n formatter?: (error: AppError, ctx: Context) => unknown;\n}\n\nexport function ErrorMiddleware(config: ErrorMiddlewareConfig = {}) {\n const {\n exposeErrorDetails = false,\n logErrors = true,\n logger,\n formatter,\n } = config;\n\n return async (ctx: Context, next: Next) => {\n try {\n await next();\n } catch (err) {\n let appError: AppError;\n\n if (err instanceof z.ZodError) {\n appError = new AppError(\n \"VALIDATION_ERROR\",\n \"Request validation failed\",\n 400,\n formatZodErrors(err)\n );\n } else {\n appError = toAppError(err);\n }\n\n if (logErrors) {\n if (logger) {\n logger(appError, ctx);\n } else {\n defaultErrorLogger(appError, ctx);\n }\n }\n\n ctx.status = appError.statusCode;\n ctx.set(\"X-Error-Code\", appError.code);\n ctx.type = \"application/json\";\n\n ctx.body = formatter\n ? formatter(appError, ctx)\n : formatErrorResponse(appError, exposeErrorDetails);\n\n // optional: only emit for 5xx to avoid noisy app-level listeners\n ctx.app.emit(\"error\", appError, ctx);\n }\n };\n}\n\nfunction defaultErrorLogger(error: AppError, ctx: Context): void {\n const isDev = process.env.NODE_ENV === \"development\";\n const safeEmail =\n typeof ctx.state.user?.email === \"string\" ? \"***@***\" : undefined;\n\n if (error.statusCode >= 500) {\n if (!isDev) {\n const prodLogData = {\n error: {\n code: error.code,\n message: error.message,\n statusCode: error.statusCode,\n },\n request: {\n path: ctx.path,\n },\n user: {\n uuid: ctx.state.user?.userUuid,\n email: safeEmail,\n },\n traceId: ctx.state.traceId,\n };\n console.error(\"Server Error:\", JSON.stringify(prodLogData));\n } else {\n console.error(\"Server Error:\", error.stack || error.message);\n }\n } else {\n console.warn(\"Client Error:\", JSON.stringify({\n code: error.code,\n message: error.message,\n statusCode: error.statusCode,\n path: ctx.path,\n }));\n }\n}\n\n\nfunction formatErrorResponse(error: AppError, exposeDetails: boolean): unknown {\n const response: {\n code: string;\n message: string;\n details?: unknown;\n stack?: string;\n } = {\n code: error.code,\n message: error.message,\n };\n\n if (exposeDetails || error.statusCode < 500) {\n if (error.details !== undefined) {\n response.details = error.details;\n }\n }\n\n if (exposeDetails && error.stack) {\n response.stack = error.stack;\n }\n\n return response;\n}\n\nexport function formatZodErrors(error: z.ZodError): {\n validationErrors: { path: string; message: string; code: string }[];\n} {\n return {\n validationErrors: error.issues.map((issue) => ({\n path: issue.path.join(\".\"),\n message: issue.message,\n code: issue.code,\n })),\n };\n}"],"names":["z","AppError","toAppError","ErrorMiddleware","config","exposeErrorDetails","logErrors","logger","formatter","ctx","next","err","appError","ZodError","formatZodErrors","defaultErrorLogger","status","statusCode","set","code","type","body","formatErrorResponse","app","emit","error","isDev","process","env","NODE_ENV","safeEmail","state","user","email","undefined","prodLogData","message","request","path","uuid","userUuid","traceId","console","JSON","stringify","stack","warn","exposeDetails","response","details","validationErrors","issues","map","issue","join"],"mappings":"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"}
|