clarity-js
Version:
An analytics library that uses web page interactions to generate aggregated insights
37 lines (31 loc) • 859 B
text/typescript
import { Event, PingData, Setting } from "@clarity-types/data";
import { suspend } from "@src/core";
import { time } from "@src/core/time";
import { clearTimeout, setTimeout } from "@src/core/timeout";
import encode from "./encode";
export let data: PingData;
let last = 0;
let interval = 0;
let timeout: number = null;
export function start(): void {
interval = Setting.PingInterval;
last = 0;
}
export function reset(): void {
if (timeout) { clearTimeout(timeout); }
timeout = setTimeout(ping, interval);
last = time();
}
function ping(): void {
let now = time();
data = { gap: now - last };
encode(Event.Ping);
if (data.gap < Setting.PingTimeout) {
timeout = setTimeout(ping, interval);
} else { suspend(); }
}
export function stop(): void {
clearTimeout(timeout);
last = 0;
interval = 0;
}