64 lines
1.9 KiB
TypeScript
64 lines
1.9 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server';
|
|
import { LangGraphExecutor } from '@/lib/workflow/langgraph';
|
|
import { validateApiKey, createUnauthorizedResponse } from '@/lib/api/auth';
|
|
|
|
export const dynamic = 'force-dynamic';
|
|
|
|
export async function POST(
|
|
request: NextRequest,
|
|
{ params }: { params: Promise<{ workflowId: string }> }
|
|
) {
|
|
// Validate API key
|
|
const authResult = await validateApiKey(request);
|
|
if (!authResult.authenticated) {
|
|
return createUnauthorizedResponse(authResult.error || 'Authentication required');
|
|
}
|
|
|
|
try {
|
|
const { workflowId } = await params;
|
|
const body = await request.json();
|
|
const { input, workflow } = body;
|
|
|
|
console.log('API: Executing workflow', workflowId, 'with input:', input);
|
|
|
|
if (!workflow || !workflow.nodes) {
|
|
return NextResponse.json(
|
|
{ error: 'Workflow data is required in request body' },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
console.log('API: Loaded workflow:', workflow.name);
|
|
|
|
const apiKeys = {
|
|
anthropic: process.env.ANTHROPIC_API_KEY,
|
|
groq: process.env.GROQ_API_KEY,
|
|
openai: process.env.OPENAI_API_KEY,
|
|
firecrawl: process.env.FIRECRAWL_API_KEY,
|
|
arcade: process.env.ARCADE_API_KEY,
|
|
};
|
|
|
|
// Execute workflow using LangGraph
|
|
const executor = new LangGraphExecutor(workflow, undefined, apiKeys);
|
|
const execution = await executor.execute(input || '');
|
|
|
|
console.log('API: Execution complete:', execution.status);
|
|
|
|
return NextResponse.json({
|
|
success: execution.status === 'completed',
|
|
execution,
|
|
input,
|
|
workflowName: workflow.name,
|
|
});
|
|
} catch (error) {
|
|
console.error('Workflow execution error:', error);
|
|
return NextResponse.json(
|
|
{
|
|
error: 'Workflow execution failed',
|
|
message: error instanceof Error ? error.message : 'Unknown error',
|
|
},
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|