From 9f1721c921ae43203ff07980a6050e0c8e324f3e Mon Sep 17 00:00:00 2001 From: Marcos Fargas Date: Mon, 12 Oct 2026 13:22:38 +0200 Subject: [PATCH] fix(integrations): support parsedBody in authenticateIntegrationRequest --- src/app/api/integrations/fatigue/mark/route.ts | 2 +- src/app/api/integrations/metrics/daily/route.ts | 2 +- src/lib/integrations-auth.ts | 10 +++++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/app/api/integrations/fatigue/mark/route.ts b/src/app/api/integrations/fatigue/mark/route.ts index be01ba6..b274a35 100644 --- a/src/app/api/integrations/fatigue/mark/route.ts +++ b/src/app/api/integrations/fatigue/mark/route.ts @@ -10,7 +10,7 @@ export async function POST(req: NextRequest) { return NextResponse.json({ error: 'Invalid JSON body' }, { status: 400 }); } - const auth = await authenticateIntegrationRequest(req, { requireTenant: true }); + const auth = await authenticateIntegrationRequest(req, { requireTenant: true, parsedBody: body }); if (!auth.ok) { return auth.errorResponse!; } diff --git a/src/app/api/integrations/metrics/daily/route.ts b/src/app/api/integrations/metrics/daily/route.ts index 0002937..d5ace1d 100644 --- a/src/app/api/integrations/metrics/daily/route.ts +++ b/src/app/api/integrations/metrics/daily/route.ts @@ -10,7 +10,7 @@ export async function POST(req: NextRequest) { return NextResponse.json({ error: 'Invalid JSON body' }, { status: 400 }); } - const auth = await authenticateIntegrationRequest(req, { requireTenant: true }); + const auth = await authenticateIntegrationRequest(req, { requireTenant: true, parsedBody: body }); if (!auth.ok) { return auth.errorResponse!; } diff --git a/src/lib/integrations-auth.ts b/src/lib/integrations-auth.ts index e838e73..2292fb3 100644 --- a/src/lib/integrations-auth.ts +++ b/src/lib/integrations-auth.ts @@ -17,7 +17,7 @@ export interface IntegrationAuthResult { */ export async function authenticateIntegrationRequest( req: NextRequest, - options: { requireTenant?: boolean } = { requireTenant: true } + options: { requireTenant?: boolean; parsedBody?: any } = { requireTenant: true } ): Promise { const apiKey = req.headers.get('x-api-key') || req.headers.get('X-Api-Key'); const n8nKey = process.env.N8N_API_KEY?.trim(); @@ -45,18 +45,22 @@ export async function authenticateIntegrationRequest( return { ok: true, caller }; } - // Extraer tenant_id o client_id de query params o body + // Extraer tenant_id o client_id de query params o parsedBody let tenantId = req.nextUrl.searchParams.get('tenant_id') || req.nextUrl.searchParams.get('client_id'); + if (!tenantId && options.parsedBody) { + tenantId = options.parsedBody.tenant_id || options.parsedBody.client_id; + } + if (!tenantId && req.method !== 'GET') { try { const cloned = req.clone(); const body = await cloned.json(); tenantId = body.tenant_id || body.client_id; } catch { - // Ignorar error al parsear body si no viene JSON + // Ignorar } }