{"version":3,"sources":["../telemetry/clients/browser.ts","../telemetry/helpers/log-level-priority.ts"],"sourcesContent":["import { UAParser } from \"ua-parser-js\";\nimport { isAIBot, isBot } from \"ua-parser-js/helpers\";\n\nimport z from \"zod\";\nimport { agentClientConfig } from \"@/agent/client/config\";\nimport packageJson from \"../../package.json\" with { type: \"json\" };\nimport type { TelemetryResource, TelemetryScopeAttributes, TelemetrySpan } from \"../types\";\nimport { defineScopes, TelemetryClient } from \"./base\";\n\nconst baseAgentClientAttributesSchema = z.object({\n  agentName: z.string(),\n  agentId: z.string(),\n  agentConfig: agentClientConfig.schema.transform((c) => agentClientConfig.toTelemetry(c)),\n  transportProviderName: z.string(),\n});\n\n/**\n * The list of valid telemetry scopes in the browser part of the Life.js codebase.\n * Ensure consistency and typesafety.\n */\nexport const telemetryBrowserScopesDefinition = defineScopes({\n  client: {\n    requiredAttributesSchema: z.object(),\n    displayName: \"Client\",\n  },\n  \"agent.client\": {\n    requiredAttributesSchema: baseAgentClientAttributesSchema,\n    displayName: (attributes) =>\n      `Agent (${attributes?.agentName} - ${attributes?.agentId.replace(\"agent_\", \"\").slice(0, 6)})`,\n  },\n  \"plugin.client\": {\n    requiredAttributesSchema: baseAgentClientAttributesSchema.extend({\n      pluginName: z.string(),\n      pluginClientConfig: z.any(),\n    }),\n    displayName: (attributes) => `Plugin (${attributes?.pluginName})`,\n  },\n  react: {\n    requiredAttributesSchema: z.object(),\n    displayName: \"React\",\n  },\n});\n\nexport class TelemetryBrowserClient extends TelemetryClient {\n  constructor(scope: string) {\n    super(telemetryBrowserScopesDefinition, scope);\n    this.#attachFlushEventListeners();\n  }\n\n  /**\n   * Attaches event listeners for best-effort flushing of telemetry data\n   * before the page unloads, loses visibility, or gets hibernated.\n   */\n  #attachFlushEventListeners(): void {\n    const flush = () => this.flushConsumers().catch(() => ({}));\n    document.addEventListener(\"visibilitychange\", () => {\n      if (document.visibilityState === \"hidden\") flush();\n    });\n    window.addEventListener(\"pagehide\", flush);\n    window.addEventListener(\"beforeunload\", flush);\n  }\n\n  protected getResource(): TelemetryResource {\n    const results = new UAParser().getResult();\n\n    // Identify environment\n    const parseEnvironment = (_value?: string) => {\n      if (!_value) return null;\n      const value = _value.trim().toLowerCase();\n\n      // Check known environments\n      if ([\"development\", \"production\", \"staging\", \"test\"].includes(value))\n        return value as TelemetryResource[\"environment\"];\n\n      // Support common aliases\n      const alias = {\n        dev: \"development\",\n        prod: \"production\",\n        stage: \"staging\",\n        test: \"test\",\n      }[value];\n      if (alias) return alias as TelemetryResource[\"environment\"];\n\n      // Else return null\n      return null;\n    };\n    const environment: TelemetryResource[\"environment\"] =\n      parseEnvironment(import.meta.env?.MODE) ??\n      parseEnvironment(globalThis.process?.env?.NODE_ENV) ??\n      parseEnvironment(globalThis.process?.env?.NEXT_PUBLIC_ENV) ??\n      (typeof window !== \"undefined\" &&\n      // biome-ignore lint/performance/useTopLevelRegex: unecessary\n      /^(localhost|127(?:\\.\\d{1,3}){3}|\\[?::1\\]?)$/.test(globalThis.location?.hostname ?? \"\")\n        ? \"development\"\n        : \"production\");\n\n    const userAgent = navigator.userAgent.toLowerCase();\n    return {\n      platform: \"browser\" as const,\n      environment,\n      lifeVersion: packageJson.version,\n      deviceType: results?.device?.type ?? \"unknown\",\n      deviceBrand: results?.device?.vendor || \"unknown\",\n      deviceModel: results?.device?.model || \"unknown\",\n      osName: results?.os?.name || \"unknown\",\n      osVersion: results?.os?.version || \"unknown\",\n      cpuArchitecture: results?.cpu?.architecture ?? \"unknown\",\n      browserUserAgent: navigator.userAgent,\n      browserName: results?.browser?.name || \"unknown\",\n      browserVersion: results?.browser?.version || \"unknown\",\n      browserEngine: results?.engine?.name || \"unknown\",\n      isBot: isBot(userAgent),\n      isAiBot: isAIBot(userAgent),\n      schemaVersion: \"1\",\n    };\n  }\n\n  protected getCurrentSpanData(): TelemetrySpan | undefined {\n    // In the browser, there is no AsyncLocalStorage and no truly reliable alternative either\n    // so as many Telemetry providers like Sentry did, the browser client will have a flat span\n    // hierarchy, i.e., when you create a span, its parent is always the root span.\n    // Considering that the Life.js codebase depth is mainly on the server, and that client-side\n    // concerns are properly separated (plugins, agents, client, react), scope and proper naming\n    // of spans should be enough to make the collected data easy to understand.\n    return;\n  }\n\n  protected runWithSpanData(_spanData: TelemetrySpan | undefined, fn: () => unknown): unknown {\n    return fn();\n  }\n}\n\nexport function createTelemetryClient<Scope extends keyof typeof telemetryBrowserScopesDefinition>(\n  scope: Scope,\n  requiredAttributes: TelemetryScopeAttributes<\n    (typeof telemetryBrowserScopesDefinition)[Scope][\"requiredAttributesSchema\"]\n  >,\n) {\n  const client = new TelemetryBrowserClient(scope);\n  for (const [key, value] of Object.entries(requiredAttributes)) client.setAttribute(key, value);\n  return client;\n}\n","import type { TelemetryLogLevel } from \"../types\";\n\nexport function logLevelPriority(level: TelemetryLogLevel) {\n  if (level === \"fatal\") return 4;\n  if (level === \"error\") return 3;\n  if (level === \"warn\") return 2;\n  if (level === \"info\") return 1;\n  else return 0;\n}\n"],"mappings":"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","names":[]}