Fix: parse Surreal query results safely

This commit is contained in:
2026-03-15 15:06:42 -07:00
parent eda38cb58e
commit e93381c9f1

View File

@@ -3,23 +3,39 @@ import Surreal from 'surrealdb';
export const dynamic = 'force-dynamic'; export const dynamic = 'force-dynamic';
function normalizeRows(result) {
if (!Array.isArray(result) || !result.length) return [];
const first = result[0];
if (Array.isArray(first)) return first;
if (first && typeof first === 'object' && Array.isArray(first.result)) return first.result;
return [];
}
export async function GET() { export async function GET() {
const url = process.env.SURREAL_URL; const url = process.env.SURREAL_URL;
if (!url) { if (!url) {
return NextResponse.json({ trades: [], error: 'No DB configured' }); return NextResponse.json({ trades: [], error: 'No DB configured' });
} }
let client = null;
try { try {
const client = new Surreal(); client = new Surreal();
await client.connect(url); await client.connect(url);
await client.signin({ username: process.env.SURREAL_USER, password: process.env.SURREAL_PASS }); await client.signin({ username: process.env.SURREAL_USER, password: process.env.SURREAL_PASS });
await client.use({ namespace: 'kalbot', database: 'kalbot' }); await client.use({ namespace: 'kalbot', database: 'kalbot' });
const result = await client.query('SELECT * FROM paper_positions ORDER BY entryTime DESC LIMIT 50'); const result = await client.query('SELECT * FROM paper_positions ORDER BY entryTime DESC LIMIT 50');
const trades = result[0] || []; const trades = normalizeRows(result);
return NextResponse.json({ trades }); return NextResponse.json({ trades });
} catch (e) { } catch (e) {
return NextResponse.json({ trades: [], error: e.message }); return NextResponse.json({ trades: [], error: e.message });
} finally {
try {
await client?.close?.();
} catch {
// ignore
}
} }
} }