← back to Norma
app/api/settings/credential-health/route.ts
41 lines
import { NextRequest, NextResponse } from 'next/server';
import { requireRole } from '@/lib/require-role';
import { verifyCronAuth } from '@/lib/cron-auth';
import { checkAllHealth, refreshExpiringTokens } from '@/lib/credentials';
/**
* GET /api/settings/credential-health
* Returns current health status for all connected services.
*/
export async function GET(request: NextRequest) {
const auth = requireRole(request, 'admin');
if (auth instanceof NextResponse) return auth;
const health = await checkAllHealth();
return NextResponse.json({ health });
}
/**
* POST /api/settings/credential-health
* Trigger a manual health check and auto-refresh of expiring tokens.
* Accepts admin session OR cron auth.
*/
export async function POST(request: NextRequest) {
// Allow both admin users and cron jobs
const cronAuth = verifyCronAuth(request);
if (cronAuth instanceof NextResponse) {
const sessionAuth = requireRole(request, 'admin');
if (sessionAuth instanceof NextResponse) return sessionAuth;
}
const refreshResult = await refreshExpiringTokens();
const health = await checkAllHealth();
return NextResponse.json({
success: true,
refreshed: refreshResult.refreshed,
failedRefresh: refreshResult.failed,
health,
});
}