view-analytics-js
Version:
A lightweight JavaScript/TypeScript library to track viewing analytics for web pages, with Supabase backend integration.
49 lines (48 loc) • 1.51 kB
JavaScript
// src/index.ts
import { UAParser } from "ua-parser-js";
var DEFAULT_BASE_URL = "https://hynflywzhfcaomlvvnwg.supabase.co/functions/v1";
var config = null;
function initializeAnalytics(websiteId, baseUrl = DEFAULT_BASE_URL) {
if (!websiteId) {
throw new Error("Website ID is required.");
}
config = { baseUrl, websiteId };
}
function trackPageView() {
if (!config) {
throw new Error("Library is not initialized. Call initializeAnalytics() first.");
}
const parser = new UAParser();
const deviceInfo = parser.getResult();
console.log("Device", deviceInfo);
const payload = {
website_id: config.websiteId,
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
browser: deviceInfo.browser.name || "unknown",
deviceType: deviceInfo.device.type || "desktop",
os: `${deviceInfo.os.name}`,
referrer: document.referrer || "direct",
url: window.location.href
};
console.log("Sending analytics payload:", payload);
fetch(`${config.baseUrl}/insert_page_view`, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(payload)
}).then((response) => {
if (!response.ok) {
throw new Error(`API call failed with status ${response.status}`);
}
return response.json();
}).then((data) => {
console.log("Analytics recorded successfully:", data);
}).catch((error) => {
console.error("Error recording analytics:", error);
});
}
export {
initializeAnalytics,
trackPageView
};