From 57ac17fb341a062f42775b59a760a54cbba612fb Mon Sep 17 00:00:00 2001 From: Richard R Date: Mon, 19 Jan 2026 14:33:49 -0700 Subject: [PATCH] refactor(api): force dynamic rendering for API routes Add 'force-dynamic' export to audiobook and documents API routes to ensure dynamic rendering. Remove 'nodejs' runtime export from TTS route for consistency. --- src/app/api/audiobook/chapter/route.ts | 2 ++ src/app/api/audiobook/route.ts | 2 ++ src/app/api/audiobook/status/route.ts | 2 ++ src/app/api/documents/route.ts | 2 ++ src/app/api/tts/route.ts | 2 -- 5 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/app/api/audiobook/chapter/route.ts b/src/app/api/audiobook/chapter/route.ts index 1500efc..2c1e6ce 100644 --- a/src/app/api/audiobook/chapter/route.ts +++ b/src/app/api/audiobook/chapter/route.ts @@ -5,6 +5,8 @@ import { join } from 'path'; import { AUDIOBOOKS_V1_DIR, isAudiobooksV1Ready } from '@/lib/server/docstore'; import { findStoredChapterByIndex } from '@/lib/server/audiobook'; +export const dynamic = 'force-dynamic'; + function getAudiobooksRootDir(request: NextRequest): string { const raw = request.headers.get('x-openreader-test-namespace')?.trim(); if (!raw) return AUDIOBOOKS_V1_DIR; diff --git a/src/app/api/audiobook/route.ts b/src/app/api/audiobook/route.ts index 5e30469..6042fde 100644 --- a/src/app/api/audiobook/route.ts +++ b/src/app/api/audiobook/route.ts @@ -9,6 +9,8 @@ import { encodeChapterFileName, encodeChapterTitleTag, listStoredChapters, ffpro import type { TTSAudioBytes, TTSAudiobookFormat } from '@/types/tts'; import type { AudiobookGenerationSettings } from '@/types/client'; +export const dynamic = 'force-dynamic'; + function getAudiobooksRootDir(request: NextRequest): string { const raw = request.headers.get('x-openreader-test-namespace')?.trim(); if (!raw) return AUDIOBOOKS_V1_DIR; diff --git a/src/app/api/audiobook/status/route.ts b/src/app/api/audiobook/status/route.ts index f279372..e2adff5 100644 --- a/src/app/api/audiobook/status/route.ts +++ b/src/app/api/audiobook/status/route.ts @@ -7,6 +7,8 @@ import type { AudiobookGenerationSettings } from '@/types/client'; import type { TTSAudiobookFormat, TTSAudiobookChapter } from '@/types/tts'; import { readFile } from 'fs/promises'; +export const dynamic = 'force-dynamic'; + function getAudiobooksRootDir(request: NextRequest): string { const raw = request.headers.get('x-openreader-test-namespace')?.trim(); if (!raw) return AUDIOBOOKS_V1_DIR; diff --git a/src/app/api/documents/route.ts b/src/app/api/documents/route.ts index c822058..08ba8e5 100644 --- a/src/app/api/documents/route.ts +++ b/src/app/api/documents/route.ts @@ -5,6 +5,8 @@ import path from 'path'; import { DOCUMENTS_V1_DIR, isDocumentsV1Ready } from '@/lib/server/docstore'; import type { BaseDocument, DocumentType, SyncedDocument } from '@/types/documents'; +export const dynamic = 'force-dynamic'; + const SYNC_DIR = DOCUMENTS_V1_DIR; async function trySetFileMtime(filePath: string, lastModifiedMs: number): Promise { diff --git a/src/app/api/tts/route.ts b/src/app/api/tts/route.ts index ff3680b..6195d32 100644 --- a/src/app/api/tts/route.ts +++ b/src/app/api/tts/route.ts @@ -7,8 +7,6 @@ import { createHash } from 'crypto'; import type { TTSRequestPayload } from '@/types/client'; import type { TTSError, TTSAudioBuffer } from '@/types/tts'; -export const runtime = 'nodejs'; - type CustomVoice = string; type ExtendedSpeechParams = Omit & { voice: SpeechCreateParams['voice'] | CustomVoice;