From d73494593a9b1f7acff2af855fff1c271eae2185 Mon Sep 17 00:00:00 2001 From: Linus Rath <139418639+rathlinus@users.noreply.github.com> Date: Sun, 1 Nov 2026 00:15:14 +0100 Subject: [PATCH] refactor: let the config write error answer the 503 in the plugin and theme routes --- app/api/admin/extensions/[kind]/[id]/rollback/route.ts | 3 --- app/api/admin/marketplace/route.ts | 3 --- app/api/admin/plugin-approvals/route.ts | 4 ---- app/api/admin/plugins/[id]/config/route.ts | 4 ---- app/api/admin/plugins/route.ts | 7 ------- app/api/admin/themes/route.ts | 7 ------- 6 files changed, 28 deletions(-) diff --git a/app/api/admin/extensions/[kind]/[id]/rollback/route.ts b/app/api/admin/extensions/[kind]/[id]/rollback/route.ts index 743225925..651eefcb5 100644 --- a/app/api/admin/extensions/[kind]/[id]/rollback/route.ts +++ b/app/api/admin/extensions/[kind]/[id]/rollback/route.ts @@ -6,7 +6,6 @@ import { HistoryError, readHistoryEntry } from '@/lib/admin/extension-history'; import { getPlugin, getTheme, savePlugin, saveTheme } from '@/lib/admin/plugin-registry'; import { invalidateFrameOriginsCache } from '@/lib/admin/csp-frame-origins'; import { configReadOnlyResponse } from '@/lib/admin/config-read-only-response'; -import { storeUnavailableResponse } from '@/lib/admin/store-unavailable-response'; import { EXTENSION_ID_RE } from '@/lib/extension-package'; /** @@ -88,8 +87,6 @@ export async function POST( } const readOnly = configReadOnlyResponse(error); if (readOnly) return readOnly; - const unavailable = storeUnavailableResponse(error); - if (unavailable) return unavailable; logger.error('Extension rollback error', { error: error instanceof Error ? error.message : 'Unknown error' }); return NextResponse.json({ error: 'Rollback failed' }, { status: 500 }); } diff --git a/app/api/admin/marketplace/route.ts b/app/api/admin/marketplace/route.ts index 95db4a5f3..bea46fc9d 100644 --- a/app/api/admin/marketplace/route.ts +++ b/app/api/admin/marketplace/route.ts @@ -23,7 +23,6 @@ import { import { configManager } from '@/lib/admin/config-manager'; import { checkBundleSignature } from '@/lib/admin/directory-keys'; import { configReadOnlyResponse } from '@/lib/admin/config-read-only-response'; -import { storeUnavailableResponse } from '@/lib/admin/store-unavailable-response'; import { compareVersions } from '@/lib/version-compare'; import { RELEASE_VERSION } from '@/lib/release-version'; import { @@ -387,8 +386,6 @@ export async function POST(request: NextRequest) { } catch (error) { const readOnly = configReadOnlyResponse(error); if (readOnly) return readOnly; - const unavailable = storeUnavailableResponse(error); - if (unavailable) return unavailable; if (error instanceof DirectoryError) { return NextResponse.json({ error: error.message }, { status: 502 }); } diff --git a/app/api/admin/plugin-approvals/route.ts b/app/api/admin/plugin-approvals/route.ts index 8d9c77187..4a2a8b26e 100644 --- a/app/api/admin/plugin-approvals/route.ts +++ b/app/api/admin/plugin-approvals/route.ts @@ -61,8 +61,6 @@ export async function POST(request: NextRequest) { } catch (err) { const readOnly = configReadOnlyResponse(err); if (readOnly) return readOnly; - const unavailable = storeUnavailableResponse(err); - if (unavailable) return unavailable; logger.error('plugin-approvals POST', { error: err instanceof Error ? err.message : String(err) }); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } @@ -89,8 +87,6 @@ export async function DELETE(request: NextRequest) { } catch (err) { const readOnly = configReadOnlyResponse(err); if (readOnly) return readOnly; - const unavailable = storeUnavailableResponse(err); - if (unavailable) return unavailable; logger.error('plugin-approvals DELETE', { error: err instanceof Error ? err.message : String(err) }); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } diff --git a/app/api/admin/plugins/[id]/config/route.ts b/app/api/admin/plugins/[id]/config/route.ts index 15e2ad4de..7deb35bf1 100644 --- a/app/api/admin/plugins/[id]/config/route.ts +++ b/app/api/admin/plugins/[id]/config/route.ts @@ -135,8 +135,6 @@ export async function PUT( } catch (error) { const readOnly = configReadOnlyResponse(error); if (readOnly) return readOnly; - const unavailable = storeUnavailableResponse(error); - if (unavailable) return unavailable; return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } } @@ -176,8 +174,6 @@ export async function DELETE( } catch (error) { const readOnly = configReadOnlyResponse(error); if (readOnly) return readOnly; - const unavailable = storeUnavailableResponse(error); - if (unavailable) return unavailable; return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } } diff --git a/app/api/admin/plugins/route.ts b/app/api/admin/plugins/route.ts index 4e5958d90..aeaf5c7bf 100644 --- a/app/api/admin/plugins/route.ts +++ b/app/api/admin/plugins/route.ts @@ -16,7 +16,6 @@ import { keptVersions, listHistory } from '@/lib/admin/extension-history'; import { ExtensionPackageError, readPluginPackage, suspiciousCode } from '@/lib/extension-package'; import { MAX_PLUGIN_SIZE } from '@/lib/plugin-types'; import { configReadOnlyResponse } from '@/lib/admin/config-read-only-response'; -import { storeUnavailableResponse } from '@/lib/admin/store-unavailable-response'; /** * GET /api/admin/plugins - List all admin-managed plugins @@ -134,8 +133,6 @@ export async function POST(request: NextRequest) { } catch (error) { const readOnly = configReadOnlyResponse(error); if (readOnly) return readOnly; - const unavailable = storeUnavailableResponse(error); - if (unavailable) return unavailable; logger.error('Plugin install error', { error: error instanceof Error ? error.message : 'Unknown error' }); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } @@ -189,8 +186,6 @@ export async function PATCH(request: NextRequest) { } catch (error) { const readOnly = configReadOnlyResponse(error); if (readOnly) return readOnly; - const unavailable = storeUnavailableResponse(error); - if (unavailable) return unavailable; logger.error('Plugin update error', { error: error instanceof Error ? error.message : 'Unknown error' }); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } @@ -224,8 +219,6 @@ export async function DELETE(request: NextRequest) { } catch (error) { const readOnly = configReadOnlyResponse(error); if (readOnly) return readOnly; - const unavailable = storeUnavailableResponse(error); - if (unavailable) return unavailable; logger.error('Plugin delete error', { error: error instanceof Error ? error.message : 'Unknown error' }); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } diff --git a/app/api/admin/themes/route.ts b/app/api/admin/themes/route.ts index 256f68497..8a2eeca7d 100644 --- a/app/api/admin/themes/route.ts +++ b/app/api/admin/themes/route.ts @@ -15,7 +15,6 @@ import { keptVersions, listHistory } from '@/lib/admin/extension-history'; import { readThemePackage } from '@/lib/extension-package'; import { configReadOnlyResponse } from '@/lib/admin/config-read-only-response'; -import { storeUnavailableResponse } from '@/lib/admin/store-unavailable-response'; /** * GET /api/admin/themes - List all admin-managed themes @@ -86,8 +85,6 @@ export async function POST(request: NextRequest) { } catch (error) { const readOnly = configReadOnlyResponse(error); if (readOnly) return readOnly; - const unavailable = storeUnavailableResponse(error); - if (unavailable) return unavailable; logger.error('Theme install error', { error: error instanceof Error ? error.message : 'Unknown error' }); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } @@ -127,8 +124,6 @@ export async function PATCH(request: NextRequest) { } catch (error) { const readOnly = configReadOnlyResponse(error); if (readOnly) return readOnly; - const unavailable = storeUnavailableResponse(error); - if (unavailable) return unavailable; logger.error('Theme update error', { error: error instanceof Error ? error.message : 'Unknown error' }); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } @@ -161,8 +156,6 @@ export async function DELETE(request: NextRequest) { } catch (error) { const readOnly = configReadOnlyResponse(error); if (readOnly) return readOnly; - const unavailable = storeUnavailableResponse(error); - if (unavailable) return unavailable; logger.error('Theme delete error', { error: error instanceof Error ? error.message : 'Unknown error' }); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); }