From 88e73250993e9f2f934935ee5799b39efb174702 Mon Sep 17 00:00:00 2001 From: Michilis Date: Sat, 3 Oct 2026 05:11:06 +0000 Subject: [PATCH] Fix backend build against hono 4.13 in finance routes. Newer hono drops path-param typing on routes with a single untyped middleware, so c.req.param('id') widens to string | undefined. Assert the always-present :id param in the affected finance handlers. Co-Authored-By: Claude Opus 5.5 --- backend/src/routes/eventFinance.ts | 10 +++++----- backend/src/routes/finance.ts | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/backend/src/routes/eventFinance.ts b/backend/src/routes/eventFinance.ts index 349dcc8..0565ab8 100644 --- a/backend/src/routes/eventFinance.ts +++ b/backend/src/routes/eventFinance.ts @@ -340,7 +340,7 @@ financeRouter.put('/:id/expenses/:expenseId', requireEventPermission(EXPENSE_EDI }); financeRouter.delete('/:id/expenses/:expenseId', requireEventPermission(EXPENSE_EDITORS), async (c) => { - const eventId = c.req.param('id'); + const eventId = c.req.param('id')!; const closed = await assertOpen(c, eventId); if (closed) return closed; const existing = await dbGet( @@ -468,7 +468,7 @@ financeRouter.put('/:id/other-income/:incomeId', requireEventPermission('edit_ex }); financeRouter.delete('/:id/other-income/:incomeId', requireEventPermission('edit_expenses'), async (c) => { - const eventId = c.req.param('id'); + const eventId = c.req.param('id')!; const closed = await assertOpen(c, eventId); if (closed) return closed; const existing = await dbGet( @@ -594,7 +594,7 @@ financeRouter.put('/:id/partners/:partnerId', requireEventPermission('edit_expen financeRouter.delete('/:id/partners/:partnerId', requireEventPermission('edit_expenses'), async (c) => { if (!canManageSplit(c)) return splitForbidden(c); - const eventId = c.req.param('id'); + const eventId = c.req.param('id')!; const closed = await assertOpen(c, eventId); if (closed) return closed; const existing = await loadPartner(eventId, c.req.param('partnerId')); @@ -732,7 +732,7 @@ financeRouter.post('/:id/finance/unfinalize', requireEventPermission('view_finan if (!canUnfinalize(access)) { return c.json({ error: 'Only admins and co-managers can unfinalize', code: 'EVENT_PERMISSION' }, 403); } - const eventId = c.req.param('id'); + const eventId = c.req.param('id')!; const state = await getFinanceState(eventId); if (state.status === 'open') return c.json({ error: 'Not finalized' }, 409); const user = currentUser(c); @@ -921,7 +921,7 @@ financeRouter.put('/:id/members/:memberId', requireEventPermission('manage_team' }); financeRouter.delete('/:id/members/:memberId', requireEventPermission('manage_team'), async (c) => { - const eventId = c.req.param('id'); + const eventId = c.req.param('id')!; const existing = await loadMember(eventId, c.req.param('memberId')); if (!existing) return c.json({ error: 'Member not found' }, 404); const user = currentUser(c); diff --git a/backend/src/routes/finance.ts b/backend/src/routes/finance.ts index 27e7949..5282152 100644 --- a/backend/src/routes/finance.ts +++ b/backend/src/routes/finance.ts @@ -83,7 +83,7 @@ financeGlobalRouter.put('/settings/expense-categories/:id', ADMIN, zValidator('j }); financeGlobalRouter.delete('/settings/expense-categories/:id', ADMIN, async (c) => { - const id = c.req.param('id'); + const id = c.req.param('id')!; const existing = await dbGet((db as any).select().from(expenseCategories).where(eq((expenseCategories as any).id, id))); if (!existing) return c.json({ error: 'Category not found' }, 404); const [usedByExpense, usedByTemplate] = await Promise.all([ @@ -161,7 +161,7 @@ financeGlobalRouter.put('/settings/expense-templates/:id', ADMIN, zValidator('js }); financeGlobalRouter.delete('/settings/expense-templates/:id', ADMIN, async (c) => { - const id = c.req.param('id'); + const id = c.req.param('id')!; const existing = await dbGet((db as any).select().from(expenseTemplates).where(eq((expenseTemplates as any).id, id))); if (!existing) return c.json({ error: 'Template not found' }, 404); const [usedByExpense, usedByPack] = await Promise.all([ @@ -250,7 +250,7 @@ financeGlobalRouter.put('/settings/expense-template-packs/:id', ADMIN, zValidato }); financeGlobalRouter.delete('/settings/expense-template-packs/:id', ADMIN, async (c) => { - const id = c.req.param('id'); + const id = c.req.param('id')!; const before = (await loadPacks()).find((p) => p.id === id); if (!before) return c.json({ error: 'Pack not found' }, 404); await runOps([ -- 2.54.0