Files
HiveGrid-Wireframes/03 Quellen und Referenzen/hivegrid-cloud/apps/web/app/utils/safeErrorLog.server.ts
T

41 lines
1.3 KiB
TypeScript

const SAFE_ERROR_NAMES = new Set([
"AbortError",
"AggregateError",
"CatalogError",
"Error",
"PrismaClientInitializationError",
"PrismaClientKnownRequestError",
"PrismaClientUnknownRequestError",
"PrismaClientValidationError",
"RangeError",
"ReferenceError",
"SyntaxError",
"TenantSlugCollisionError",
"TimeoutError",
"TypeError",
"URIError",
]);
const SAFE_NODE_ERROR_CODES = new Set(["ABORT_ERR", "EAI_AGAIN", "ECONNREFUSED", "ECONNRESET", "ENETUNREACH", "ENOTFOUND", "ETIMEDOUT"]);
const PRISMA_ERROR_CODE_PATTERN = /^P\d{4}$/u;
export type SafeErrorLog = {
errorName: string;
errorCode?: string;
};
/**
* Keeps provider, database, URL and PII details out of shared logs while
* retaining a bounded error identity that is useful for aggregation.
*/
export function toSafeErrorLog(error: unknown): SafeErrorLog {
if (!(error instanceof Error)) {
return { errorName: "UnknownError" };
}
const rawCode = "code" in error ? (error as Error & { code?: unknown }).code : undefined;
const errorCode = typeof rawCode === "string" && (PRISMA_ERROR_CODE_PATTERN.test(rawCode) || SAFE_NODE_ERROR_CODES.has(rawCode)) ? rawCode : undefined;
return {
errorName: SAFE_ERROR_NAMES.has(error.name) ? error.name : "Error",
...(errorCode ? { errorCode } : {}),
};
}