45 lines
1.6 KiB
JavaScript
45 lines
1.6 KiB
JavaScript
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;
|