clarity-js
Version:
An analytics library that uses web page interactions to generate aggregated insights
41 lines (35 loc) • 890 B
text/typescript
import { Event, type 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 {
const 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;
}