From 09efc8ece9922b3145935d355ed9f1e7b6925263 Mon Sep 17 00:00:00 2001 From: johndoe6345789 Date: Fri, 16 Jan 2026 04:24:48 +0000 Subject: [PATCH] Fix Next.js 15 route handler param signatures Next.js 15 made params a Promise that needs to be awaited. Fixed route handlers: - /api/github/actions/runs/[runId]/logs/route.ts - /api/packages/data/[packageId]/handlers/get-package-data.ts - /api/packages/data/[packageId]/handlers/put-package-data.ts - /api/packages/data/[packageId]/handlers/delete-package-data.ts All handlers now properly await params before access. Co-Authored-By: Claude Haiku 4.5 --- .../github/actions/runs/[runId]/logs/route.ts | 14 ++++++-------- .../[packageId]/handlers/delete-package-data.ts | 16 +++++++--------- .../[packageId]/handlers/get-package-data.ts | 16 +++++++--------- .../[packageId]/handlers/put-package-data.ts | 16 +++++++--------- 4 files changed, 27 insertions(+), 35 deletions(-) diff --git a/frontends/nextjs/src/app/api/github/actions/runs/[runId]/logs/route.ts b/frontends/nextjs/src/app/api/github/actions/runs/[runId]/logs/route.ts index 465734e1b..b2bb2c590 100644 --- a/frontends/nextjs/src/app/api/github/actions/runs/[runId]/logs/route.ts +++ b/frontends/nextjs/src/app/api/github/actions/runs/[runId]/logs/route.ts @@ -8,15 +8,13 @@ import { resolveGitHubRepo } from '@/lib/github/resolve-github-repo' import { getSessionUser, STATUS } from '@/lib/routing' import { getRoleLevel } from '@/lib/constants' -interface RouteParams { - params: { - runId: string - } -} - export const dynamic = 'force-dynamic' -export const GET = async (request: NextRequest, { params }: RouteParams) => { +export const GET = async ( + request: NextRequest, + { params }: { params: Promise<{ runId: string }> } +) => { + const resolvedParams = await params // Require authentication - logs may contain sensitive info const session = await getSessionUser(request) @@ -36,7 +34,7 @@ export const GET = async (request: NextRequest, { params }: RouteParams) => { ) } - const runId = Number(params.runId) + const runId = Number(resolvedParams.runId) if (!Number.isFinite(runId) || runId <= 0) { return NextResponse.json({ error: 'Invalid run id' }, { status: 400 }) } diff --git a/frontends/nextjs/src/app/api/packages/data/[packageId]/handlers/delete-package-data.ts b/frontends/nextjs/src/app/api/packages/data/[packageId]/handlers/delete-package-data.ts index 528541649..f2e9cbbb1 100644 --- a/frontends/nextjs/src/app/api/packages/data/[packageId]/handlers/delete-package-data.ts +++ b/frontends/nextjs/src/app/api/packages/data/[packageId]/handlers/delete-package-data.ts @@ -6,16 +6,14 @@ import { getSessionUser, STATUS } from '@/lib/routing' import { getRoleLevel, ROLE_LEVELS } from '@/lib/constants' import { PackageSchemas } from '@/lib/validation' -interface RouteParams { - params: { - packageId: string - } -} - -export async function DELETE(request: NextRequest, { params }: RouteParams) { +export async function DELETE( + request: NextRequest, + { params }: { params: Promise<{ packageId: string }> } +) { try { + const resolvedParams = await params // Validate packageId format - const packageIdResult = PackageSchemas.packageId.safeParse(params.packageId) + const packageIdResult = PackageSchemas.packageId.safeParse(resolvedParams.packageId) if (!packageIdResult.success) { return NextResponse.json( { error: 'Invalid package ID format' }, @@ -44,7 +42,7 @@ export async function DELETE(request: NextRequest, { params }: RouteParams) { ) } - await deletePackageData(params.packageId) + await deletePackageData(resolvedParams.packageId) return NextResponse.json({ deleted: true }) } catch (error) { console.error('Error deleting package data:', error) diff --git a/frontends/nextjs/src/app/api/packages/data/[packageId]/handlers/get-package-data.ts b/frontends/nextjs/src/app/api/packages/data/[packageId]/handlers/get-package-data.ts index eb4645332..f7cb164f3 100644 --- a/frontends/nextjs/src/app/api/packages/data/[packageId]/handlers/get-package-data.ts +++ b/frontends/nextjs/src/app/api/packages/data/[packageId]/handlers/get-package-data.ts @@ -5,16 +5,14 @@ import { getPackageData } from '@/lib/db/packages/get-package-data' import { getSessionUser, STATUS } from '@/lib/routing' import { PackageSchemas } from '@/lib/validation' -interface RouteParams { - params: { - packageId: string - } -} - -export async function GET(request: NextRequest, { params }: RouteParams) { +export async function GET( + request: NextRequest, + { params }: { params: Promise<{ packageId: string }> } +) { try { + const resolvedParams = await params // Validate packageId format - const packageIdResult = PackageSchemas.packageId.safeParse(params.packageId) + const packageIdResult = PackageSchemas.packageId.safeParse(resolvedParams.packageId) if (!packageIdResult.success) { return NextResponse.json( { error: 'Invalid package ID format' }, @@ -32,7 +30,7 @@ export async function GET(request: NextRequest, { params }: RouteParams) { ) } - const data = await getPackageData(params.packageId) + const data = await getPackageData(resolvedParams.packageId) return NextResponse.json({ data }) } catch (error) { console.error('Error fetching package data:', error) diff --git a/frontends/nextjs/src/app/api/packages/data/[packageId]/handlers/put-package-data.ts b/frontends/nextjs/src/app/api/packages/data/[packageId]/handlers/put-package-data.ts index 0bfb1b222..a4f4b2e4e 100644 --- a/frontends/nextjs/src/app/api/packages/data/[packageId]/handlers/put-package-data.ts +++ b/frontends/nextjs/src/app/api/packages/data/[packageId]/handlers/put-package-data.ts @@ -12,16 +12,14 @@ type PackageDataPayload = { data?: PackageSeedData } -interface RouteParams { - params: { - packageId: string - } -} - -export async function PUT(request: NextRequest, { params }: RouteParams) { +export async function PUT( + request: NextRequest, + { params }: { params: Promise<{ packageId: string }> } +) { try { + const resolvedParams = await params // Validate packageId format - const packageIdResult = PackageSchemas.packageId.safeParse(params.packageId) + const packageIdResult = PackageSchemas.packageId.safeParse(resolvedParams.packageId) if (!packageIdResult.success) { return NextResponse.json( { error: 'Invalid package ID format' }, @@ -55,7 +53,7 @@ export async function PUT(request: NextRequest, { params }: RouteParams) { return NextResponse.json({ error: 'Package data is required' }, { status: 400 }) } - await setPackageData(params.packageId, body.data) + await setPackageData(resolvedParams.packageId, body.data) return NextResponse.json({ saved: true }) } catch (error) { console.error('Error saving package data:', error)