@avalanche-sdk/interchain
Version:
Interchain package for handling ICM/ICTT messages
83 lines • 2.71 kB
JavaScript
export class Telemetry {
distinctId;
POSTHOG_PUBLIC_API_KEY = "phc_Hg6a406Z76cNN7gtPNKXjkKIpq9uUxd9HOrf6m9d4ks";
POSTHOG_CAPTURE_URL = "https://us.i.posthog.com/capture/";
enableTelemetry;
constructor(enableTelemetry = true, distinctId) {
this.distinctId = distinctId ?? crypto.randomUUID();
this.enableTelemetry = enableTelemetry;
}
getEnvironment() {
// Browser environment
if (typeof window !== "undefined") {
return "browser";
}
// Node.js environment
if (typeof process !== "undefined" && process.versions?.node) {
return "node";
}
// Other environments
if (typeof globalThis.Deno !== "undefined") {
return "deno";
}
if (typeof globalThis.Bun !== "undefined") {
return "bun";
}
return "unknown";
}
getUserAgent() {
// Browser environment
if (typeof navigator !== "undefined" && navigator.userAgent) {
return navigator.userAgent;
}
// Node.js environment
if (typeof process !== "undefined" && process.version) {
return `Node.js/${process.version}`;
}
// Fallback
return "Unknown";
}
getPlatform() {
// Browser environment
if (typeof navigator !== "undefined" && navigator.platform) {
return navigator.platform;
}
// Node.js environment
if (typeof process !== "undefined" && process.platform) {
return process.platform;
}
// Fallback
return "Unknown";
}
captureEvent(event, properties = {}) {
if (!this.enableTelemetry) {
return;
}
try {
const payload = {
api_key: this.POSTHOG_PUBLIC_API_KEY,
event,
properties: {
distinct_id: this.distinctId,
environment: this.getEnvironment(),
userAgent: this.getUserAgent(),
platform: this.getPlatform(),
...properties,
},
timestamp: new Date().toISOString(),
};
// Use fire-and-forget to avoid blocking SDK operations
fetch(this.POSTHOG_CAPTURE_URL, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
});
}
catch (error) {
// Silently fail telemetry to avoid breaking the main functionality
}
}
}
//# sourceMappingURL=telemetry.js.map