MicProtocol / apps /web /src /lib /audio /clock-sync.ts
Benaah's picture
Upload folder using huggingface_hub
fb12607 verified
Raw History Blame Contribute Delete
1.1 kB
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;
}
}