← back to Norma
app/api/pulse/fetch/route.ts
38 lines
/**
* POST /api/pulse/fetch
* Server-side proxy to the Pulse agent feed refresh endpoint.
* Keeps credentials out of client-side code.
*/
import { NextRequest, NextResponse } from 'next/server';
import { requireRole } from '@/lib/require-role';
const PULSE_INTERNAL = process.env.PULSE_API_URL || 'http://127.0.0.1:9845';
const PULSE_USER = process.env.PULSE_API_USER || 'admin';
const PULSE_PASS = process.env.PULSE_API_PASS || process.env.AUTH_PASSWORD || '';
export async function POST(request: NextRequest) {
const auth = requireRole(request, 'admin', 'staff', 'pulse');
if (auth instanceof NextResponse) return auth;
try {
const res = await fetch(`${PULSE_INTERNAL}/api/pulse/fetch`, {
method: 'POST',
headers: {
Authorization: 'Basic ' + Buffer.from(`${PULSE_USER}:${PULSE_PASS}`).toString('base64'),
},
});
if (!res.ok) {
return NextResponse.json(
{ error: `Pulse agent returned ${res.status}` },
{ status: res.status },
);
}
const data = await res.json();
return NextResponse.json(data);
} catch (err) {
console.error('[api/pulse/fetch] proxy error:', (err as Error).message);
return NextResponse.json({ error: 'Pulse agent unavailable' }, { status: 502 });
}
}