VIBN Frontend for Coolify deployment
This commit is contained in:
101
app/api/v0/import-chat/route.ts
Normal file
101
app/api/v0/import-chat/route.ts
Normal file
@@ -0,0 +1,101 @@
|
||||
import { NextResponse } from 'next/server';
|
||||
import { v0 } from 'v0-sdk';
|
||||
|
||||
export async function POST(request: Request) {
|
||||
try {
|
||||
const { chatId, chatUrl } = await request.json();
|
||||
|
||||
if (!chatId && !chatUrl) {
|
||||
return NextResponse.json(
|
||||
{ error: 'Either chatId or chatUrl is required' },
|
||||
{ status: 400 }
|
||||
);
|
||||
}
|
||||
|
||||
// Check for API key
|
||||
const apiKey = process.env.V0_API_KEY;
|
||||
if (!apiKey) {
|
||||
return NextResponse.json(
|
||||
{ error: 'V0_API_KEY not configured' },
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
|
||||
// Extract chat ID from URL if provided
|
||||
let extractedChatId = chatId;
|
||||
if (chatUrl && !chatId) {
|
||||
// v0.dev URLs look like: https://v0.dev/chat/abc123xyz
|
||||
const match = chatUrl.match(/\/chat\/([^/?]+)/);
|
||||
if (match) {
|
||||
extractedChatId = match[1];
|
||||
} else {
|
||||
return NextResponse.json(
|
||||
{ error: 'Invalid v0 chat URL format' },
|
||||
{ status: 400 }
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`[v0] Attempting to import chat: ${extractedChatId}`);
|
||||
|
||||
// The v0 SDK doesn't support retrieving individual chats by ID
|
||||
// We'll store a reference to the chat URL for the user to access it
|
||||
const fullChatUrl = chatUrl || `https://v0.dev/chat/${extractedChatId}`;
|
||||
|
||||
console.log(`[v0] Importing chat reference: ${extractedChatId}`);
|
||||
|
||||
const chatInfo = {
|
||||
id: extractedChatId,
|
||||
webUrl: fullChatUrl,
|
||||
message: 'Chat link saved. You can access it via the web URL.',
|
||||
note: 'The v0 API does not currently support retrieving chat history via API. Use the web URL to view and continue the conversation.'
|
||||
};
|
||||
|
||||
return NextResponse.json({
|
||||
success: true,
|
||||
chat: chatInfo,
|
||||
message: 'Chat reference saved successfully'
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('[v0] Error importing chat:', error);
|
||||
|
||||
return NextResponse.json(
|
||||
{
|
||||
error: 'Failed to import chat',
|
||||
details: error instanceof Error ? error.message : 'Unknown error'
|
||||
},
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Also support GET for testing
|
||||
export async function GET(request: Request) {
|
||||
const { searchParams } = new URL(request.url);
|
||||
const chatId = searchParams.get('chatId');
|
||||
const chatUrl = searchParams.get('chatUrl');
|
||||
|
||||
if (!chatId && !chatUrl) {
|
||||
return NextResponse.json({
|
||||
message: 'Import a v0 chat',
|
||||
usage: 'POST /api/v0/import-chat with { "chatId": "abc123" } or { "chatUrl": "https://v0.dev/chat/abc123" }',
|
||||
example: {
|
||||
method: 'POST',
|
||||
body: {
|
||||
chatUrl: 'https://v0.dev/chat/your-chat-id'
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Forward to POST handler
|
||||
const body = JSON.stringify({ chatId, chatUrl });
|
||||
const req = new Request(request.url, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body,
|
||||
});
|
||||
|
||||
return POST(req);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user