{"version":3,"file":"shared-BuVpfVsg.cjs","names":[],"sources":["../src/telemetry/shared.ts"],"sourcesContent":["// Browser-safe primitives shared by runtime and installation telemetry.\nexport const POSTHOG_KEY = \"phc_3OLW53x09ZTVZSV6BEpj5uycj3ooqR6KOemOjx04e3D\";\nexport const POSTHOG_HOST = \"https://dgoeivjus9jfp.cloudfront.net\";\nexport const TELEMETRY_REQUEST_TIMEOUT_MS = 2_000;\nexport const TELEMETRY_SCHEMA_VERSION = 1;\n\nexport type TelemetryEnvironment = Readonly<Record<string, string | undefined>>;\n\nexport function getPostHogConfig(env?: TelemetryEnvironment): {\n  apiKey: string;\n  captureUrl: string;\n} {\n  const host = env?.[\"OPENUI_POSTHOG_HOST\"] ?? POSTHOG_HOST;\n  return {\n    apiKey: env?.[\"OPENUI_POSTHOG_KEY\"] ?? POSTHOG_KEY,\n    captureUrl: new URL(\"/capture/\", host).toString(),\n  };\n}\n\nexport function isTruthyEnv(value?: string): boolean {\n  return value === \"1\" || value?.toLowerCase() === \"true\";\n}\n\nexport function isTelemetryDisabled(env?: TelemetryEnvironment): boolean {\n  return isTruthyEnv(env?.[\"OPENUI_TELEMETRY_DISABLED\"]) || isTruthyEnv(env?.[\"DO_NOT_TRACK\"]);\n}\n\n/** Runtime telemetry is opt-in: it requires explicit consent and honors the disable flags. */\nexport function isRuntimeTelemetryEnabled(env?: TelemetryEnvironment): boolean {\n  return isTruthyEnv(env?.[\"OPENUI_RUNTIME_TELEMETRY_ENABLED\"]) && !isTelemetryDisabled(env);\n}\n\nexport function normalizeProjectIdentity(rawValue: string): string {\n  const value = rawValue.trim();\n  if (!value) return \"\";\n\n  try {\n    const url = new URL(value);\n    const repositoryPath = normalizeRepositoryPath(decodeURIComponent(url.pathname));\n    if (url.protocol === \"file:\") return `file:${repositoryPath}`;\n    if (url.host) return joinHostAndPath(url.host, repositoryPath);\n  } catch {\n    // SCP-style Git origins and local paths are handled below.\n  }\n\n  if (/^[A-Za-z]:[\\\\/]/.test(value)) return normalizeRepositoryPath(value);\n\n  const scpMatch = /^(?:[^@/\\s]+@)?([^:/\\s]+):(.+)$/.exec(value);\n  if (scpMatch) return joinHostAndPath(scpMatch[1]!, scpMatch[2]!);\n\n  return normalizeRepositoryPath(value);\n}\n\nfunction joinHostAndPath(host: string, repositoryPath: string): string {\n  const normalizedHost = host.trim().toLowerCase();\n  const normalizedPath = normalizeRepositoryPath(repositoryPath);\n  return normalizedPath ? `${normalizedHost}/${normalizedPath}` : normalizedHost;\n}\n\nfunction normalizeRepositoryPath(repositoryPath: string): string {\n  return repositoryPath\n    .trim()\n    .replace(/\\\\/g, \"/\")\n    .replace(/^\\/+|\\/+$/g, \"\")\n    .replace(/\\.git$/i, \"\");\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAGA,MAAa,+BAA+B;AAK5C,SAAgB,iBAAiB,KAG/B;CACA,MAAM,OAAO,MAAM,0BAAA;AACnB,QAAO;EACL,QAAQ,MAAM,yBAAA;EACd,YAAY,IAAI,IAAI,aAAa,KAAK,CAAC,UAAU;EAClD;;AAGH,SAAgB,YAAY,OAAyB;AACnD,QAAO,UAAU,OAAO,OAAO,aAAa,KAAK;;AAGnD,SAAgB,oBAAoB,KAAqC;AACvE,QAAO,YAAY,MAAM,6BAA6B,IAAI,YAAY,MAAM,gBAAgB;;;AAI9F,SAAgB,0BAA0B,KAAqC;AAC7E,QAAO,YAAY,MAAM,oCAAoC,IAAI,CAAC,oBAAoB,IAAI;;AAG5F,SAAgB,yBAAyB,UAA0B;CACjE,MAAM,QAAQ,SAAS,MAAM;AAC7B,KAAI,CAAC,MAAO,QAAO;AAEnB,KAAI;EACF,MAAM,MAAM,IAAI,IAAI,MAAM;EAC1B,MAAM,iBAAiB,wBAAwB,mBAAmB,IAAI,SAAS,CAAC;AAChF,MAAI,IAAI,aAAa,QAAS,QAAO,QAAQ;AAC7C,MAAI,IAAI,KAAM,QAAO,gBAAgB,IAAI,MAAM,eAAe;SACxD;AAIR,KAAI,kBAAkB,KAAK,MAAM,CAAE,QAAO,wBAAwB,MAAM;CAExE,MAAM,WAAW,kCAAkC,KAAK,MAAM;AAC9D,KAAI,SAAU,QAAO,gBAAgB,SAAS,IAAK,SAAS,GAAI;AAEhE,QAAO,wBAAwB,MAAM;;AAGvC,SAAS,gBAAgB,MAAc,gBAAgC;CACrE,MAAM,iBAAiB,KAAK,MAAM,CAAC,aAAa;CAChD,MAAM,iBAAiB,wBAAwB,eAAe;AAC9D,QAAO,iBAAiB,GAAG,eAAe,GAAG,mBAAmB;;AAGlE,SAAS,wBAAwB,gBAAgC;AAC/D,QAAO,eACJ,MAAM,CACN,QAAQ,OAAO,IAAI,CACnB,QAAQ,cAAc,GAAG,CACzB,QAAQ,WAAW,GAAG"}