102 lines
2.8 KiB
TypeScript
102 lines
2.8 KiB
TypeScript
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);
|
|
}
|
|
|