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
JavaScript
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