Bisher musste jedes Projekt einzeln von Hand synchronisiert werden. Jetzt gibt es einen Zeitgeber im Serverprozess, angestossen von instrumentation.ts. Fuer eine Einzelinstanz ist das die einfachste tragfaehige Loesung: kein zusaetzlicher Container, kein externer Cron, keine zweite Konfiguration. Ruecksicht auf fremde API-Kontingente war der bestimmende Gedanke: - standardmaessig abgeschaltet - der Abgleich verbraucht fremdes Kontingent, das soll eine bewusste Entscheidung sein - je Durchlauf nur eine begrenzte Zahl Projekte, die am laengsten nicht abgeglichenen zuerst; der Rest kommt beim naechsten Mal - nach jedem Fehlschlag verdoppelt sich der Abstand bis zum naechsten Versuch, gedeckelt beim Sechzehnfachen. Ein Repo mit abgelaufenem Token blockiert damit nicht dauerhaft das Kontingent. - kurze Pause zwischen zwei Projekten - zwei Durchlaeufe ueberschneiden sich nie - fertige und archivierte Projekte lassen sich auslassen - einzelne Projekte lassen sich ausnehmen Der Zaehler fuer Fehlschlaege wandert in syncProject: bei Erfolg zurueck auf null, bei Fehlschlag hoch. So stimmt er auch nach einem manuellen Abgleich. sync.ts wird zu sync/index.ts, damit Modul und Ordner nicht nebeneinander stehen. Alle Importpfade bleiben unveraendert. Zur Form der Abfrage in instrumentation.ts: Next uebersetzt die Datei auch fuer den Edge-Runtime. Der Import muss deshalb *in* der positiven Bedingung stehen, sonst bleibt er im Edge-Bundle stehen und der Build scheitert an node:crypto. Mit einem frueh abbrechenden return passiert genau das. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
23 lines
951 B
TypeScript
23 lines
951 B
TypeScript
/**
|
||
* Wird von Next einmal beim Start des Servers ausgefuehrt.
|
||
*
|
||
* Hier haengt der Zeitgeber fuer den automatischen Abgleich.
|
||
*
|
||
* Wichtig ist die Form der Abfrage: Next uebersetzt diese Datei auch fuer den
|
||
* Edge-Runtime (weil es eine Middleware gibt). Dort gibt es weder node:crypto
|
||
* noch node:net, die der Abgleich mitbringt. Der Import muss deshalb *in* der
|
||
* positiven Bedingung stehen – dann ersetzt der Bundler NEXT_RUNTIME beim
|
||
* Bauen und entfernt den ganzen Block aus dem Edge-Bundle. Mit einem frueh
|
||
* abbrechenden "if (… !== 'nodejs') return" bliebe der Import stehen und der
|
||
* Build schluege fehl.
|
||
*/
|
||
export async function register() {
|
||
if (process.env.NEXT_RUNTIME === "nodejs") {
|
||
const { describeConfig } = await import("@/lib/config");
|
||
console.log(`[nebula] Konfiguration: ${describeConfig()}`);
|
||
|
||
const { startAutoSyncScheduler } = await import("@/lib/sync/scheduler");
|
||
startAutoSyncScheduler();
|
||
}
|
||
}
|