UNPKG

life

Version:

Life.js is the first fullstack framework to build agentic web applications. It is minimal, extensible, and typesafe. Well, everything you love.

132 lines (129 loc) 4.66 kB
import { TelemetryClient, defineScopes, package_default } from "./chunk-6CBODJTF.mjs"; import { agentClientConfig } from "./chunk-D2T23PCX.mjs"; import { __name } from "./chunk-2D3UJWOA.mjs"; // telemetry/clients/browser.ts import { UAParser } from "ua-parser-js"; import { isAIBot, isBot } from "ua-parser-js/helpers"; import z from "zod"; var baseAgentClientAttributesSchema = z.object({ agentName: z.string(), agentId: z.string(), agentConfig: agentClientConfig.schema.transform((c) => agentClientConfig.toTelemetry(c)), transportProviderName: z.string() }); var telemetryBrowserScopesDefinition = defineScopes({ client: { requiredAttributesSchema: z.object(), displayName: "Client" }, "agent.client": { requiredAttributesSchema: baseAgentClientAttributesSchema, displayName: /* @__PURE__ */ __name((attributes) => `Agent (${attributes?.agentName} - ${attributes?.agentId.replace("agent_", "").slice(0, 6)})`, "displayName") }, "plugin.client": { requiredAttributesSchema: baseAgentClientAttributesSchema.extend({ pluginName: z.string(), pluginClientConfig: z.any() }), displayName: /* @__PURE__ */ __name((attributes) => `Plugin (${attributes?.pluginName})`, "displayName") }, react: { requiredAttributesSchema: z.object(), displayName: "React" } }); var TelemetryBrowserClient = class extends TelemetryClient { static { __name(this, "TelemetryBrowserClient"); } constructor(scope) { super(telemetryBrowserScopesDefinition, scope); this.#attachFlushEventListeners(); } /** * Attaches event listeners for best-effort flushing of telemetry data * before the page unloads, loses visibility, or gets hibernated. */ #attachFlushEventListeners() { const flush = /* @__PURE__ */ __name(() => this.flushConsumers().catch(() => ({})), "flush"); document.addEventListener("visibilitychange", () => { if (document.visibilityState === "hidden") flush(); }); window.addEventListener("pagehide", flush); window.addEventListener("beforeunload", flush); } getResource() { const results = new UAParser().getResult(); const parseEnvironment = /* @__PURE__ */ __name((_value) => { if (!_value) return null; const value = _value.trim().toLowerCase(); if (["development", "production", "staging", "test"].includes(value)) return value; const alias = { dev: "development", prod: "production", stage: "staging", test: "test" }[value]; if (alias) return alias; return null; }, "parseEnvironment"); const environment = parseEnvironment(import.meta.env?.MODE) ?? parseEnvironment(globalThis.process?.env?.NODE_ENV) ?? parseEnvironment(globalThis.process?.env?.NEXT_PUBLIC_ENV) ?? (typeof window !== "undefined" && // biome-ignore lint/performance/useTopLevelRegex: unecessary /^(localhost|127(?:\.\d{1,3}){3}|\[?::1\]?)$/.test(globalThis.location?.hostname ?? "") ? "development" : "production"); const userAgent = navigator.userAgent.toLowerCase(); return { platform: "browser", environment, lifeVersion: package_default.version, deviceType: results?.device?.type ?? "unknown", deviceBrand: results?.device?.vendor || "unknown", deviceModel: results?.device?.model || "unknown", osName: results?.os?.name || "unknown", osVersion: results?.os?.version || "unknown", cpuArchitecture: results?.cpu?.architecture ?? "unknown", browserUserAgent: navigator.userAgent, browserName: results?.browser?.name || "unknown", browserVersion: results?.browser?.version || "unknown", browserEngine: results?.engine?.name || "unknown", isBot: isBot(userAgent), isAiBot: isAIBot(userAgent), schemaVersion: "1" }; } getCurrentSpanData() { return; } runWithSpanData(_spanData, fn) { return fn(); } }; function createTelemetryClient(scope, requiredAttributes) { const client = new TelemetryBrowserClient(scope); for (const [key, value] of Object.entries(requiredAttributes)) client.setAttribute(key, value); return client; } __name(createTelemetryClient, "createTelemetryClient"); // telemetry/helpers/log-level-priority.ts function logLevelPriority(level) { if (level === "fatal") return 4; if (level === "error") return 3; if (level === "warn") return 2; if (level === "info") return 1; else return 0; } __name(logLevelPriority, "logLevelPriority"); export { telemetryBrowserScopesDefinition, TelemetryBrowserClient, createTelemetryClient, logLevelPriority }; //# sourceMappingURL=chunk-5BLN2MK4.mjs.map