export class NtpClockSync { private offsetMs = 0; async sync() { try { const start = performance.now(); const res = await fetch('https://worldtimeapi.org/api/timezone/Etc/UTC'); const data = await res.json(); const end = performance.now(); const rtt = end - start; const serverTimeMs = new Date(data.utc_datetime).getTime(); // The server time was received at localTimeNow - (rtt/2) approximately // So trueTimeNow = serverTimeMs + (rtt/2) // offset = trueTimeNow - localTimeNow const localTimeNow = Date.now(); const trueTimeNow = serverTimeMs + (rtt / 2); this.offsetMs = trueTimeNow - localTimeNow; console.log(`[Clock Sync] Local clock drift calculated: ${this.offsetMs}ms`); } catch (err) { console.warn('[Clock Sync] Failed. Processing will rely on relative starting stamps.'); this.offsetMs = 0; } } getTrueTimeMs() { return Date.now() + this.offsetMs; } }