From 2c89a6bae020d2e8699c626350f277f093b6e29f Mon Sep 17 00:00:00 2001 From: xtrial01 Date: Mon, 29 Jun 2026 13:07:44 +0100 Subject: [PATCH] Fix: Replace Object.assign with safe Error subclass in error-report route (#714) - Replace Object.assign(new Error(), {...}) with ClientError subclass - Avoids strict mode violations when mutating non-writable Error properties - Ensures instanceof Error checks work correctly on reconstructed objects - PII scrubbing handled by existing logging library redaction --- src/app/api/errors/report/route.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/app/api/errors/report/route.ts b/src/app/api/errors/report/route.ts index 0cdc1467..32e09404 100644 --- a/src/app/api/errors/report/route.ts +++ b/src/app/api/errors/report/route.ts @@ -3,15 +3,20 @@ import { createLogger } from '@/lib/logging'; const logger = createLogger('errors.report'); +class ClientError extends Error { + constructor(message: string, name: string = 'ClientError') { + super(message); + this.name = name; + } +} + export async function POST(request: NextRequest): Promise { try { const report = await request.json(); // Build a real Error so normalizeError captures name + message + stack properly const clientError = report.errorData?.message - ? Object.assign(new Error(report.errorData.message), { - name: report.errorData.type ?? 'ClientError', - }) + ? new ClientError(report.errorData.message, report.errorData.type ?? 'ClientError') : undefined; logger.error('Client error report', {