From 3da13c297029abcfa5d65316fb554f243abf2ff0 Mon Sep 17 00:00:00 2001 From: Richard R Date: Wed, 27 May 2026 06:33:14 -0600 Subject: [PATCH] chore(logging): remove redundant errorCode fields from server logs and error contracts Eliminate the errorCode property from server logger calls, error contract types, and API error bodies throughout the codebase. This reduces duplication and streamlines error reporting, relying on structured event names and error classes for identification. All affected API routes, server logic, and logging utilities have been updated for consistency. Documentation directory added for future reference. --- src/app/api/audiobook/chapter/route.ts | 1 - src/app/api/documents/[id]/parsed/events/route.ts | 5 ----- src/app/api/documents/[id]/parsed/route.ts | 3 --- src/app/api/tts/segments/audio/fallback/route.ts | 1 - src/app/api/tts/segments/clear/route.ts | 1 - src/app/api/tts/segments/ensure/route.ts | 12 +++--------- src/app/api/tts/segments/manifest/route.ts | 1 - src/lib/server/admin/email-sync.ts | 1 - src/lib/server/admin/seed.ts | 7 ------- src/lib/server/admin/settings.ts | 3 --- src/lib/server/auth/auth.ts | 7 ------- src/lib/server/compute/worker-op-state.ts | 4 ---- src/lib/server/compute/worker.ts | 8 -------- src/lib/server/documents/previews.ts | 1 - src/lib/server/jobs/user-pdf-layout-job.ts | 3 --- src/lib/server/logger.ts | 5 +---- src/lib/server/tts/segments-cache.ts | 1 - src/lib/server/tts/voice-resolution.ts | 2 -- src/lib/server/user/data-cleanup.ts | 5 ----- 19 files changed, 4 insertions(+), 67 deletions(-) diff --git a/src/app/api/audiobook/chapter/route.ts b/src/app/api/audiobook/chapter/route.ts index dfca613..20b48e5 100644 --- a/src/app/api/audiobook/chapter/route.ts +++ b/src/app/api/audiobook/chapter/route.ts @@ -333,7 +333,6 @@ export async function POST(request: NextRequest) { if (!existingResult.settings) { serverLogger.error({ event: 'audiobook.chapter.meta_settings.invalid', - errorCode: 'AUDIOBOOK_CHAPTER_META_SETTINGS_INVALID', bookId, storageUserId, error: { diff --git a/src/app/api/documents/[id]/parsed/events/route.ts b/src/app/api/documents/[id]/parsed/events/route.ts index 0edb57c..7d2109c 100644 --- a/src/app/api/documents/[id]/parsed/events/route.ts +++ b/src/app/api/documents/[id]/parsed/events/route.ts @@ -269,7 +269,6 @@ export async function GET(req: NextRequest, ctx: { params: Promise<{ id: string if (closed) return; logger.warn({ event: 'documents.parsed.events.db_resync_failed', - errorCode: 'DOCUMENTS_PARSED_EVENTS_DB_RESYNC_FAILED', degraded: true, step: 'db_resync', documentId: id, @@ -347,7 +346,6 @@ export async function GET(req: NextRequest, ctx: { params: Promise<{ id: string const upstreamResponseBody = await response.text().catch(() => ''); logger.warn({ event: 'documents.parsed.events.worker_stream_request_failed', - errorCode: 'DOCUMENTS_PARSED_EVENTS_WORKER_STREAM_REQUEST_FAILED', degraded: true, step: 'worker_stream_request', documentId: id, @@ -365,7 +363,6 @@ export async function GET(req: NextRequest, ctx: { params: Promise<{ id: string if (!response.body) { logger.warn({ event: 'documents.parsed.events.worker_stream_missing_body', - errorCode: 'DOCUMENTS_PARSED_EVENTS_WORKER_STREAM_MISSING_BODY', degraded: true, step: 'worker_stream_body', documentId: id, @@ -474,7 +471,6 @@ export async function GET(req: NextRequest, ctx: { params: Promise<{ id: string logger.error({ event: 'documents.parsed.events.worker_proxy_crashed', documentId: id, - errorCode: 'DOCUMENTS_PARSED_EVENTS_WORKER_PROXY_CRASHED', error: errorToLog(error), }, 'Worker proxy crashed while streaming parse events'); if (!closed) { @@ -505,7 +501,6 @@ export async function GET(req: NextRequest, ctx: { params: Promise<{ id: string } catch (error) { logger.error({ event: 'documents.parsed.events.route_failed', - errorCode: 'DOCUMENTS_PARSED_EVENTS_ROUTE_FAILED', error: errorToLog(error), }, 'Parsed events route failed'); return NextResponse.json({ error: 'Failed to stream parsed PDF progress' }, { status: 500 }); diff --git a/src/app/api/documents/[id]/parsed/route.ts b/src/app/api/documents/[id]/parsed/route.ts index 3398a96..d3e8539 100644 --- a/src/app/api/documents/[id]/parsed/route.ts +++ b/src/app/api/documents/[id]/parsed/route.ts @@ -220,7 +220,6 @@ export async function GET(req: NextRequest, ctx: { params: Promise<{ id: string } logger.warn({ event: 'documents.parsed.requested_op_unavailable', - errorCode: 'DOCUMENTS_PARSED_REQUESTED_OP_UNAVAILABLE', degraded: true, step: 'requested_op_lookup', documentId: id, @@ -314,7 +313,6 @@ export async function GET(req: NextRequest, ctx: { params: Promise<{ id: string } catch (error) { logger.error({ event: 'documents.parsed.get_failed', - errorCode: 'DOCUMENTS_PARSED_GET_FAILED', error: errorToLog(error), }, 'Failed to read parsed PDF'); return NextResponse.json({ error: 'Failed to read parsed PDF' }, { status: 500 }); @@ -395,7 +393,6 @@ export async function POST(req: NextRequest, ctx: { params: Promise<{ id: string } catch (error) { logger.error({ event: 'documents.parsed.force_refresh_failed', - errorCode: 'DOCUMENTS_PARSED_FORCE_REFRESH_FAILED', error: errorToLog(error), }, 'Failed to force PDF refresh'); return NextResponse.json({ error: 'Failed to force PDF refresh' }, { status: 500 }); diff --git a/src/app/api/tts/segments/audio/fallback/route.ts b/src/app/api/tts/segments/audio/fallback/route.ts index 5b92539..159713d 100644 --- a/src/app/api/tts/segments/audio/fallback/route.ts +++ b/src/app/api/tts/segments/audio/fallback/route.ts @@ -52,7 +52,6 @@ export async function GET(request: NextRequest) { } catch (error) { logger.error({ event: 'tts.segments.audio_fallback_failed', - errorCode: 'TTS_SEGMENT_AUDIO_FALLBACK_FAILED', error: errorToLog(error), }, 'Failed to load segment audio from fallback route'); return NextResponse.json({ error: 'Failed to load segment audio' }, { status: 500 }); diff --git a/src/app/api/tts/segments/clear/route.ts b/src/app/api/tts/segments/clear/route.ts index 0245113..c794bbf 100644 --- a/src/app/api/tts/segments/clear/route.ts +++ b/src/app/api/tts/segments/clear/route.ts @@ -41,7 +41,6 @@ export async function POST(request: NextRequest) { } catch (error) { logger.error({ event: 'tts.segments.clear_failed', - errorCode: 'TTS_SEGMENTS_CLEAR_FAILED', error: errorToLog(error), }, 'Failed to clear TTS segment cache'); return NextResponse.json({ error: 'Failed to clear TTS segment cache' }, { status: 500 }); diff --git a/src/app/api/tts/segments/ensure/route.ts b/src/app/api/tts/segments/ensure/route.ts index ec2c475..7e4f48f 100644 --- a/src/app/api/tts/segments/ensure/route.ts +++ b/src/app/api/tts/segments/ensure/route.ts @@ -423,7 +423,6 @@ export async function POST(request: NextRequest) { documentId: parsed.documentId, segmentId: segment.segmentId, aborted, - errorCode: 'TTS_SEGMENT_ALIGNMENT_UNAVAILABLE', ...(aborted ? {} : { degraded: true }), step: 'whisper_align', error: errorToLog(alignError), @@ -668,7 +667,6 @@ export async function POST(request: NextRequest) { documentId: parsed.documentId, segmentId: segment.segmentId, aborted, - errorCode: 'TTS_SEGMENT_ALIGNMENT_UNAVAILABLE', ...(aborted ? {} : { degraded: true }), step: 'whisper_align', error: errorToLog(alignError), @@ -720,7 +718,7 @@ export async function POST(request: NextRequest) { const retryAfterSeconds = upstreamStatus === 429 ? getUpstreamRetryAfterSeconds(error) : undefined; - const errorCode = upstreamStatus === 429 + const failureCode = upstreamStatus === 429 ? 'UPSTREAM_RATE_LIMIT' : upstreamStatus && upstreamStatus >= 500 ? 'UPSTREAM_TTS_ERROR' @@ -735,7 +733,6 @@ export async function POST(request: NextRequest) { elapsedMs: Date.now() - segmentStartedAt, stageTimings, aborted: true, - errorCode, error: errorToLog(error), completedSoFar: manifest.length, totalRequested: normalized.length, @@ -752,7 +749,6 @@ export async function POST(request: NextRequest) { aborted: false, upstreamStatus, retryAfterSeconds, - errorCode, error: errorToLog(error), }, 'TTS segment generation failed'); } @@ -762,7 +758,7 @@ export async function POST(request: NextRequest) { status: aborted ? 'pending' : 'error', error: aborted ? null : ( upstreamStatus - ? `${errorCode}${retryAfterSeconds ? ` (retry after ${retryAfterSeconds}s)` : ''}: ${errorMessage}` + ? `${failureCode}${retryAfterSeconds ? ` (retry after ${retryAfterSeconds}s)` : ''}: ${errorMessage}` : errorMessage ), updatedAt: Date.now(), @@ -785,7 +781,7 @@ export async function POST(request: NextRequest) { error: aborted ? null : { - code: errorCode, + code: failureCode, detail: errorMessage, ...(typeof upstreamStatus === 'number' ? { upstreamStatus } : {}), ...(typeof retryAfterSeconds === 'number' ? { retryAfterSeconds } : {}), @@ -804,7 +800,6 @@ export async function POST(request: NextRequest) { if (errorItems.length > 0) { logger.error({ event: 'tts.segments.ensure.partial_result', - errorCode: 'TTS_SEGMENT_PARTIAL_FAILURE', requestId, documentId: parsed.documentId, total: manifest.length, @@ -835,7 +830,6 @@ export async function POST(request: NextRequest) { } catch (error) { logger.error({ event: 'tts.segments.ensure.route_failed', - errorCode: 'TTS_SEGMENTS_ENSURE_ROUTE_FAILED', error: errorToLog(error), }, 'TTS segments ensure route failed'); const response = NextResponse.json({ error: 'Failed to ensure TTS segments' }, { status: 500 }); diff --git a/src/app/api/tts/segments/manifest/route.ts b/src/app/api/tts/segments/manifest/route.ts index 017334b..b8cad65 100644 --- a/src/app/api/tts/segments/manifest/route.ts +++ b/src/app/api/tts/segments/manifest/route.ts @@ -388,7 +388,6 @@ export async function GET(request: NextRequest) { } catch (error) { logger.error({ event: 'tts.segments.manifest.list_failed', - errorCode: 'TTS_SEGMENTS_MANIFEST_LIST_FAILED', error: errorToLog(error), }, 'Failed to list TTS segments'); return NextResponse.json({ error: 'Failed to list TTS segments' }, { status: 500 }); diff --git a/src/lib/server/admin/email-sync.ts b/src/lib/server/admin/email-sync.ts index 02c602b..3085584 100644 --- a/src/lib/server/admin/email-sync.ts +++ b/src/lib/server/admin/email-sync.ts @@ -63,7 +63,6 @@ export async function syncAdminFlag( } catch (error) { serverLogger.warn({ event: 'admin.email_sync.user_flag_update.failed', - errorCode: 'ADMIN_EMAIL_SYNC_USER_FLAG_UPDATE_FAILED', userIdHash: hashForLog(userId), degraded: true, error: errorToLog(error), diff --git a/src/lib/server/admin/seed.ts b/src/lib/server/admin/seed.ts index 87b9a76..5057201 100644 --- a/src/lib/server/admin/seed.ts +++ b/src/lib/server/admin/seed.ts @@ -33,7 +33,6 @@ export async function ensureAdminSeed(): Promise { seedPromise = runSeed().catch((error) => { serverLogger.warn({ event: 'admin.seed.run.failed', - errorCode: 'ADMIN_SEED_RUN_FAILED', degraded: true, error: errorToLog(error), }, 'Admin seed run failed'); @@ -66,7 +65,6 @@ async function seedDefaultAdminProvider(): Promise { } catch (error) { serverLogger.warn({ event: 'admin.seed.providers.check_failed', - errorCode: 'ADMIN_SEED_PROVIDERS_CHECK_FAILED', degraded: true, error: errorToLog(error), }, 'Could not check admin_providers'); @@ -104,7 +102,6 @@ async function seedDefaultAdminProvider(): Promise { } catch (fallbackError) { serverLogger.warn({ event: 'admin.seed.restrict_user_api_keys.fallback_write_failed', - errorCode: 'ADMIN_SEED_RESTRICT_USER_API_KEYS_FALLBACK_WRITE_FAILED', degraded: true, error: errorToLog(fallbackError), }, 'Failed to write restrictUserApiKeys fallback after encryption failure'); @@ -112,7 +109,6 @@ async function seedDefaultAdminProvider(): Promise { } serverLogger.warn({ event: 'admin.seed.provider_key_encrypt.failed', - errorCode: 'ADMIN_SEED_PROVIDER_KEY_ENCRYPT_FAILED', degraded: true, error: errorToLog(error), }, 'Failed to encrypt default provider API key'); @@ -141,7 +137,6 @@ async function seedDefaultAdminProvider(): Promise { } catch (error) { serverLogger.warn({ event: 'admin.seed.provider_insert.failed', - errorCode: 'ADMIN_SEED_PROVIDER_INSERT_FAILED', degraded: true, providerSlug: 'default-openai', error: errorToLog(error), @@ -171,7 +166,6 @@ async function cleanupLegacyDefaultTtsProviderSeedRow(): Promise { } catch (error) { serverLogger.warn({ event: 'admin.seed.legacy_default_provider_cleanup.failed', - errorCode: 'ADMIN_SEED_LEGACY_DEFAULT_PROVIDER_CLEANUP_FAILED', degraded: true, error: errorToLog(error), }, 'Failed to cleanup legacy defaultTtsProvider seed row'); @@ -186,7 +180,6 @@ async function cleanupLegacyDefaultTtsModelRows(): Promise { } catch (error) { serverLogger.warn({ event: 'admin.seed.legacy_default_model_cleanup.failed', - errorCode: 'ADMIN_SEED_LEGACY_DEFAULT_MODEL_CLEANUP_FAILED', degraded: true, error: errorToLog(error), }, 'Failed to cleanup legacy defaultTtsModel rows'); diff --git a/src/lib/server/admin/settings.ts b/src/lib/server/admin/settings.ts index c30b29c..471f502 100644 --- a/src/lib/server/admin/settings.ts +++ b/src/lib/server/admin/settings.ts @@ -116,7 +116,6 @@ async function resolveImplicitDefaultTtsProvider(): Promise } catch (error) { serverLogger.warn({ event: 'admin.runtime_config.default_provider_lookup.failed', - errorCode: 'ADMIN_RUNTIME_CONFIG_DEFAULT_PROVIDER_LOOKUP_FAILED', degraded: true, error: errorToLog(error), }, 'Implicit defaultTtsProvider lookup failed'); @@ -149,7 +148,6 @@ async function readAllRows(): Promise betterAuth({ } catch (error) { serverLogger.warn({ event: 'auth.user_delete.storage_cleanup_failed', - errorCode: 'AUTH_USER_DELETE_STORAGE_CLEANUP_FAILED', degraded: true, step: 'delete_user_storage', userIdHash: hashForLog(user.id), @@ -180,7 +179,6 @@ const createAuth = () => betterAuth({ } catch (error) { serverLogger.warn({ event: 'auth.link_account.transfer.rate_limit.failed', - errorCode: 'AUTH_LINK_ACCOUNT_TRANSFER_RATE_LIMIT_FAILED', degraded: true, step: 'transfer_rate_limit', anonymousUserIdHash: hashForLog(anonymousUser.user.id), @@ -204,7 +202,6 @@ const createAuth = () => betterAuth({ } catch (error) { serverLogger.warn({ event: 'auth.link_account.transfer.audiobooks.failed', - errorCode: 'AUTH_LINK_ACCOUNT_TRANSFER_AUDIOBOOKS_FAILED', degraded: true, step: 'transfer_audiobooks', anonymousUserIdHash: hashForLog(anonymousUser.user.id), @@ -228,7 +225,6 @@ const createAuth = () => betterAuth({ } catch (error) { serverLogger.warn({ event: 'auth.link_account.transfer.documents.failed', - errorCode: 'AUTH_LINK_ACCOUNT_TRANSFER_DOCUMENTS_FAILED', degraded: true, step: 'transfer_documents', anonymousUserIdHash: hashForLog(anonymousUser.user.id), @@ -252,7 +248,6 @@ const createAuth = () => betterAuth({ } catch (error) { serverLogger.warn({ event: 'auth.link_account.transfer.preferences.failed', - errorCode: 'AUTH_LINK_ACCOUNT_TRANSFER_PREFERENCES_FAILED', degraded: true, step: 'transfer_preferences', anonymousUserIdHash: hashForLog(anonymousUser.user.id), @@ -276,7 +271,6 @@ const createAuth = () => betterAuth({ } catch (error) { serverLogger.warn({ event: 'auth.link_account.transfer.progress.failed', - errorCode: 'AUTH_LINK_ACCOUNT_TRANSFER_PROGRESS_FAILED', degraded: true, step: 'transfer_progress', anonymousUserIdHash: hashForLog(anonymousUser.user.id), @@ -288,7 +282,6 @@ const createAuth = () => betterAuth({ } catch (error) { serverLogger.error({ event: 'auth.link_account.failed', - errorCode: 'AUTH_LINK_ACCOUNT_FAILED', error: errorToLog(error), }, 'onLinkAccount callback failed'); // Don't throw here to prevent blocking the account linking process diff --git a/src/lib/server/compute/worker-op-state.ts b/src/lib/server/compute/worker-op-state.ts index 52f0300..7cfe88b 100644 --- a/src/lib/server/compute/worker-op-state.ts +++ b/src/lib/server/compute/worker-op-state.ts @@ -16,7 +16,6 @@ export async function fetchWorkerOperationState( } catch (error) { serverLogger.warn({ event: 'compute.worker_op_state.config.invalid', - errorCode: 'COMPUTE_WORKER_OP_STATE_CONFIG_INVALID', opId: normalized, degraded: true, step: 'read_worker_config', @@ -43,7 +42,6 @@ export async function fetchWorkerOperationState( const upstreamResponseBody = await res.text().catch(() => ''); serverLogger.warn({ event: 'compute.worker_op_state.fetch.failed', - errorCode: 'COMPUTE_WORKER_OP_STATE_FETCH_FAILED', opId: normalized, status: res.status, upstreamResponseBody, @@ -60,7 +58,6 @@ export async function fetchWorkerOperationState( if (!parsed || typeof parsed !== 'object' || parsed.opId !== normalized) { serverLogger.warn({ event: 'compute.worker_op_state.response.invalid', - errorCode: 'COMPUTE_WORKER_OP_STATE_RESPONSE_INVALID', opId: normalized, degraded: true, step: 'validate_worker_op_response', @@ -71,7 +68,6 @@ export async function fetchWorkerOperationState( } catch (error) { serverLogger.warn({ event: 'compute.worker_op_state.fetch.error', - errorCode: 'COMPUTE_WORKER_OP_STATE_FETCH_ERROR', opId: normalized, degraded: true, step: 'fetch_worker_op', diff --git a/src/lib/server/compute/worker.ts b/src/lib/server/compute/worker.ts index 70298b2..df914db 100644 --- a/src/lib/server/compute/worker.ts +++ b/src/lib/server/compute/worker.ts @@ -300,7 +300,6 @@ export class WorkerComputeBackend implements ComputeBackend { return { alignments: final.result.alignments }; }, ({ attempt, maxAttempts, willRetry, delayMs, error }) => { logWorker(willRetry ? 'warn' : 'error', 'align.request.attempt_error', { - errorCode: 'COMPUTE_WORKER_ALIGN_REQUEST_ATTEMPT_ERROR', traceId, kind: 'whisper_align', opKeyHash, @@ -321,7 +320,6 @@ export class WorkerComputeBackend implements ComputeBackend { return result; } catch (error) { logWorker('error', 'align.request.failed', { - errorCode: 'COMPUTE_WORKER_ALIGN_REQUEST_FAILED', traceId, kind: 'whisper_align', opKeyHash, @@ -400,7 +398,6 @@ export class WorkerComputeBackend implements ComputeBackend { throw new Error('PDF layout worker operation completed without parsed output'); }, ({ attempt, maxAttempts, willRetry, delayMs, error }) => { logWorker(willRetry ? 'warn' : 'error', 'pdf_layout.request.attempt_error', { - errorCode: 'COMPUTE_WORKER_PDF_LAYOUT_REQUEST_ATTEMPT_ERROR', traceId, kind: 'pdf_layout', opKeyHash, @@ -423,7 +420,6 @@ export class WorkerComputeBackend implements ComputeBackend { return result; } catch (error) { logWorker('error', 'pdf_layout.request.failed', { - errorCode: 'COMPUTE_WORKER_PDF_LAYOUT_REQUEST_FAILED', traceId, kind: 'pdf_layout', opKeyHash, @@ -468,7 +464,6 @@ export class WorkerComputeBackend implements ComputeBackend { retryAfterMs, ); logWorker(res.status >= 500 ? 'warn' : 'error', 'http.request.failed', { - errorCode: 'COMPUTE_WORKER_HTTP_REQUEST_FAILED', ...context, traceId, method, @@ -547,7 +542,6 @@ export class WorkerComputeBackend implements ComputeBackend { retryAfterMs, ); logWorker(res.status >= 500 ? 'warn' : 'error', 'sse.wait.http_failed', { - errorCode: 'COMPUTE_WORKER_SSE_WAIT_HTTP_FAILED', ...context, traceId, opId, @@ -669,7 +663,6 @@ export class WorkerComputeBackend implements ComputeBackend { } logWorker('error', 'sse.wait.ended_without_terminal', { - errorCode: 'COMPUTE_WORKER_SSE_WAIT_ENDED_WITHOUT_TERMINAL', ...context, traceId, opId, @@ -684,7 +677,6 @@ export class WorkerComputeBackend implements ComputeBackend { throw new Error(`Operation stream ended before terminal state for op ${opId}`); } catch (error) { logWorker('error', 'sse.wait.failed', { - errorCode: 'COMPUTE_WORKER_SSE_WAIT_FAILED', ...context, traceId, opId, diff --git a/src/lib/server/documents/previews.ts b/src/lib/server/documents/previews.ts index a061ede..3ed21dc 100644 --- a/src/lib/server/documents/previews.ts +++ b/src/lib/server/documents/previews.ts @@ -377,7 +377,6 @@ export async function ensureDocumentPreview(doc: PreviewSourceDocument, namespac } catch (error) { serverLogger.error({ event: 'documents.preview.generate.failed', - errorCode: 'DOCUMENTS_PREVIEW_GENERATE_FAILED', documentId: doc.id, documentType: doc.type, error: errorToLog(error), diff --git a/src/lib/server/jobs/user-pdf-layout-job.ts b/src/lib/server/jobs/user-pdf-layout-job.ts index d3a78c1..303d17d 100644 --- a/src/lib/server/jobs/user-pdf-layout-job.ts +++ b/src/lib/server/jobs/user-pdf-layout-job.ts @@ -390,7 +390,6 @@ export async function parsePdfJob(input: UserPdfLayoutJobRequest): Promise } catch (statusError) { serverLogger.error({ event: 'documents.parse.status_write.failed', - errorCode: 'DOCUMENTS_PARSE_STATUS_WRITE_FAILED', documentId: input.documentId, parseStatus, error: errorToLog(statusError), @@ -398,7 +397,6 @@ export async function parsePdfJob(input: UserPdfLayoutJobRequest): Promise } serverLogger.error({ event: 'documents.parse.job.failed', - errorCode: 'DOCUMENTS_PARSE_JOB_FAILED', documentId: input.documentId, parseStatus, error: errorToLog(error), @@ -415,7 +413,6 @@ export function enqueueParsePdfJob(input: UserPdfLayoutJobRequest): void { serverLogger.error({ event: 'documents.parse.job.uncaught_error', documentId: input.documentId, - errorCode: 'DOCUMENTS_PARSE_JOB_UNCAUGHT_ERROR', error: errorToLog(error), }, 'Parse job uncaught error'); }); diff --git a/src/lib/server/logger.ts b/src/lib/server/logger.ts index 8d67dca..aff248d 100644 --- a/src/lib/server/logger.ts +++ b/src/lib/server/logger.ts @@ -17,7 +17,6 @@ export type ServerErrorClass = | 'unknown'; export type ServerErrorContract = { - errorCode: string; errorClass: ServerErrorClass; retryable: boolean; httpStatus: number; @@ -28,7 +27,6 @@ export type ServerErrorContract = { export type ServerApiErrorBody = { error: string; - errorCode: string; retryable?: boolean; details?: Record; }; @@ -144,11 +142,10 @@ export function errorToLog(error: unknown, depth = 0): LoggedError { } export function apiErrorBody( - input: Omit & { errorCode: string }, + input: ServerApiErrorBody, ): ServerApiErrorBody { return { error: input.error, - errorCode: input.errorCode, ...(typeof input.retryable === 'boolean' ? { retryable: input.retryable } : {}), ...(input.details ? { details: input.details } : {}), }; diff --git a/src/lib/server/tts/segments-cache.ts b/src/lib/server/tts/segments-cache.ts index 31e856b..858bef9 100644 --- a/src/lib/server/tts/segments-cache.ts +++ b/src/lib/server/tts/segments-cache.ts @@ -68,7 +68,6 @@ export async function clearTtsSegmentCache( warning = error instanceof Error ? error.message : 'Failed deleting some audio objects'; serverLogger.warn({ event: 'tts.segments.cache.audio_cleanup_failed', - errorCode: 'TTS_SEGMENTS_CACHE_AUDIO_CLEANUP_FAILED', degraded: true, step: 'delete_tts_audio_objects', documentId: input.documentId, diff --git a/src/lib/server/tts/voice-resolution.ts b/src/lib/server/tts/voice-resolution.ts index f4bc9ee..e0d014d 100644 --- a/src/lib/server/tts/voice-resolution.ts +++ b/src/lib/server/tts/voice-resolution.ts @@ -195,7 +195,6 @@ async function fetchReplicateOpenApiSchema(apiKey: string, model: string): Promi } serverLogger.error({ event: 'tts.voice_resolution.replicate_schema_fetch.failed', - errorCode: 'TTS_VOICE_RESOLUTION_REPLICATE_SCHEMA_FETCH_FAILED', error: errorToLog(error), }, 'Failed fetching Replicate model schema'); return null; @@ -290,7 +289,6 @@ async function fetchDeepinfraVoices(apiKey: string): Promise { } serverLogger.error({ event: 'tts.voice_resolution.deepinfra_voices_fetch.failed', - errorCode: 'TTS_VOICE_RESOLUTION_DEEPINFRA_VOICES_FETCH_FAILED', error: errorToLog(error), }, 'Failed fetching Deepinfra voices'); return []; diff --git a/src/lib/server/user/data-cleanup.ts b/src/lib/server/user/data-cleanup.ts index 2aed3a0..54aa488 100644 --- a/src/lib/server/user/data-cleanup.ts +++ b/src/lib/server/user/data-cleanup.ts @@ -52,7 +52,6 @@ export async function deleteUserStorageData( } catch (error) { serverLogger.warn({ event: 'user.data_cleanup.document_blob_delete.failed', - errorCode: 'USER_DATA_CLEANUP_DOCUMENT_BLOB_DELETE_FAILED', degraded: true, step: 'delete_document_blob', documentId: doc.id, @@ -66,7 +65,6 @@ export async function deleteUserStorageData( } catch (error) { serverLogger.warn({ event: 'user.data_cleanup.document_preview_delete.failed', - errorCode: 'USER_DATA_CLEANUP_DOCUMENT_PREVIEW_DELETE_FAILED', degraded: true, step: 'delete_document_preview_artifacts', documentId: doc.id, @@ -82,7 +80,6 @@ export async function deleteUserStorageData( } catch (error) { serverLogger.warn({ event: 'user.data_cleanup.document_preview_rows_delete.failed', - errorCode: 'USER_DATA_CLEANUP_DOCUMENT_PREVIEW_ROWS_DELETE_FAILED', degraded: true, step: 'delete_document_preview_rows', documentId: doc.id, @@ -109,7 +106,6 @@ export async function deleteUserStorageData( } catch (error) { serverLogger.warn({ event: 'user.data_cleanup.audiobook_blobs_delete.failed', - errorCode: 'USER_DATA_CLEANUP_AUDIOBOOK_BLOBS_DELETE_FAILED', degraded: true, step: 'delete_audiobook_prefix', bookId: book.id, @@ -132,7 +128,6 @@ export async function deleteUserStorageData( } catch (error) { serverLogger.warn({ event: 'user.data_cleanup.tts_segments_delete.failed', - errorCode: 'USER_DATA_CLEANUP_TTS_SEGMENTS_DELETE_FAILED', degraded: true, step: 'delete_tts_segment_prefixes', userIdHash: hashForLog(userId),