clarity-js
Version:
An analytics library that uses web page interactions to generate aggregated insights
29 lines (25 loc) • 1.09 kB
text/typescript
import { Report } from "@clarity-types/core";
import config from "@src/core/config";
import { data } from "@src/data/envelope";
let history: string[];
export function reset(): void {
history = [];
}
export function report(e: Error): Error {
// Do not report the same message twice for the same page
if (history && !history.includes(e.message)) {
const url = config.report;
if (url && url.length > 0 && data) {
let payload: Report = {v: data.version, p: data.projectId, u: data.userId, s: data.sessionId, n: data.pageNum};
if (e.message) { payload.m = e.message; }
if (e.stack) { payload.e = e.stack; }
// Using POST request instead of a GET request (img-src) to not violate existing CSP rules
// Since, Clarity already uses XHR to upload data, we stick with similar POST mechanism for reporting too
let xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
xhr.send(JSON.stringify(payload));
history.push(e.message);
}
}
return e;
}