import fsPromises from 'fs/promises'; import path from 'path'; import { fileURLToPath } from 'url'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const ROBOT_URL = process.env.ROBOT_URL || ''; const ROBOT_JSON = process.env.ROBOT_JSON || path.join(__dirname, '..', 'scripts', 'robot_1781069752019.json'); /** * Lädt robot.json. * Reihenfolge: (1) ROBOT_URL/api/robot/config, (2) lokale Datei als Fallback. * Schreibt das Ergebnis immer in die lokale Cache-Datei (für Python-Skripte). */ export async function fetchRobot() { if (ROBOT_URL) { const res = await fetch(new URL('/api/robot/config', ROBOT_URL)); if (!res.ok) throw new Error(`Driver ${res.status}: ${await res.text()}`); const data = await res.json(); await fsPromises.writeFile(ROBOT_JSON, JSON.stringify(data, null, 2), 'utf8'); return data; } return JSON.parse(await fsPromises.readFile(ROBOT_JSON, 'utf8')); } /** * Speichert robot.json. * Schreibt immer in lokale Cache-Datei; sendet zusätzlich an Driver wenn konfiguriert. */ export async function pushRobot(data) { await fsPromises.writeFile(ROBOT_JSON, JSON.stringify(data, null, 2), 'utf8'); if (ROBOT_URL) { const res = await fetch(new URL('/api/robot/config', ROBOT_URL), { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data), }); if (!res.ok) throw new Error(`Driver ${res.status}: ${await res.text()}`); } } /** Pfad zur lokalen Cache-Datei – wird an Python-Skripte als -robot-Argument übergeben. */ export const robotCachePath = ROBOT_JSON;