import { NextRequest } from 'next/server'; import { createLocateRequest, getLocateRequest } from '@/lib/db'; import { corsJson, corsPreflight } from '../cors'; /** Python enqueues "find this selector and tell me where it is on screen". */ export async function POST(req: NextRequest) { try { const body = await req.json() as { selector?: unknown; index?: unknown; urlPattern?: unknown; openUrl?: unknown; navigateUrl?: unknown }; if (typeof body.selector !== 'string' || !body.selector.trim()) { return corsJson({ error: '`selector` is required' }, { status: 400 }); } const index = Number.isInteger(body.index) ? Number(body.index) : 0; const urlPattern = typeof body.urlPattern === 'string' ? body.urlPattern : ''; const openUrl = typeof body.openUrl === 'string' ? body.openUrl : ''; const navigateUrl = typeof body.navigateUrl === 'string' ? body.navigateUrl : ''; const row = createLocateRequest(body.selector.trim(), index, urlPattern, openUrl, navigateUrl); return corsJson({ id: row.id, status: row.status }); } catch (err: any) { return corsJson({ error: err?.message ?? 'Failed to queue request' }, { status: 500 }); } } /** Python polls `?id=` until the extension resolves it. */ export async function GET(req: NextRequest) { const id = Number(req.nextUrl.searchParams.get('id')); if (!Number.isInteger(id) || id <= 0) { return corsJson({ error: '`id` is required' }, { status: 400 }); } const row = getLocateRequest(id); if (!row) return corsJson({ error: 'No such request' }, { status: 404 }); return corsJson({ id: row.id, selector: row.selector, status: row.status, result: row.result ? JSON.parse(row.result) : null, error: row.error, }); } export async function OPTIONS() { return corsPreflight(); }