cosmic-analytics
Version:
Lightweight analytics for Cosmic projects
89 lines (87 loc) • 3.23 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/server/index.ts
var server_exports = {};
__export(server_exports, {
getGeoInfo: () => getGeoInfo,
trackPageViewEdge: () => trackPageViewEdge
});
module.exports = __toCommonJS(server_exports);
// src/server/edge.ts
async function trackPageViewEdge(request, config) {
const {
projectId,
apiEndpoint = "https://api.cosmic.new/analytics",
sendInDevelopment = false
} = config;
if (!projectId) {
console.warn("Cosmic Analytics Edge: projectId is required");
return;
}
const isDevelopment = process.env.NODE_ENV === "development";
if (isDevelopment && !sendInDevelopment) {
console.log("Cosmic Analytics Edge: Disabled in development mode. Set sendInDevelopment: true to enable.");
return;
}
const url = request.url;
const userAgent = request.headers.get("user-agent") || "";
const referrer = request.headers.get("referer") || "";
const acceptLanguage = request.headers.get("accept-language") || "";
const language = acceptLanguage.split(",")[0]?.split(";")[0] || "en";
const sessionCookie = request.cookies.get("cosmic_session_id");
const sessionId = sessionCookie?.value || `edge-${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
const event = {
event: "pageview",
projectId,
sessionId,
url,
title: "",
// Title not available in edge runtime
referrer: referrer || "direct",
timestamp: Date.now(),
language,
userAgent
};
try {
await fetch(`${apiEndpoint}/track`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Forwarded-For": request.headers.get("x-forwarded-for") || request.headers.get("x-real-ip") || "",
"X-Real-IP": request.headers.get("x-real-ip") || ""
},
body: JSON.stringify({ events: [event] })
});
} catch (error) {
console.error("Cosmic Analytics Edge: Failed to track page view", error);
}
}
function getGeoInfo(request) {
return {
country: request.headers.get("x-vercel-ip-country") || request.headers.get("cf-ipcountry") || void 0,
region: request.headers.get("x-vercel-ip-country-region") || request.headers.get("cf-region") || void 0,
city: request.headers.get("x-vercel-ip-city") || request.headers.get("cf-city") || void 0
};
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
getGeoInfo,
trackPageViewEdge
});
//# sourceMappingURL=index.js.map