{"version":3,"file":"telemetry-client.cjs","names":["lambdaClient","packageJson"],"sources":["../../../../src/v2/runtime/telemetry/telemetry-client.ts"],"sourcesContent":["import type { AnalyticsEvents } from \"./events\";\nimport { lambdaClient, parseAndWarnTelemetryId } from \"@copilotkit/shared\";\nimport * as packageJson from \"../../../../package.json\";\n\nexport function isTelemetryDisabled(): boolean {\n  return (\n    (process.env as Record<string, string | undefined>)\n      .COPILOTKIT_TELEMETRY_DISABLED === \"true\" ||\n    (process.env as Record<string, string | undefined>)\n      .COPILOTKIT_TELEMETRY_DISABLED === \"1\" ||\n    (process.env as Record<string, string | undefined>).DO_NOT_TRACK ===\n      \"true\" ||\n    (process.env as Record<string, string | undefined>).DO_NOT_TRACK === \"1\"\n  );\n}\n\nexport class TelemetryClient {\n  private telemetryDisabled: boolean = false;\n  // Client-side sampling rate for anonymous events. Identified callers\n  // (license token with telemetry_id) bypass the gate. Default 0.05\n  // caps anonymous OSS-runtime egress; identified customers send at\n  // full fidelity. Override via COPILOTKIT_TELEMETRY_SAMPLE_RATE.\n  private sampleRate: number = 0.05;\n  // EIP / Intelligence license token (Ed25519-signed JWT). The lambda\n  // client decodes its payload to read telemetry_id for the\n  // X-CopilotKit-Telemetry-Id header. Set once at runtime construction\n  // via setLicenseToken; absent values produce anonymous sends.\n  private licenseToken: string | null = null;\n  // Parsed telemetry_id from the license-token JWT payload. Cached at\n  // setLicenseToken time so `capture()` can branch on identified vs\n  // anonymous without re-parsing per event. Null when the token is\n  // absent or yielded no telemetry_id.\n  private telemetryId: string | null = null;\n\n  constructor({\n    telemetryDisabled,\n    sampleRate,\n  }: {\n    telemetryDisabled?: boolean;\n    sampleRate?: number;\n  } = {}) {\n    this.telemetryDisabled = telemetryDisabled ?? isTelemetryDisabled();\n    this.setSampleRate(sampleRate);\n  }\n\n  private shouldSendEvent() {\n    if (this.sampleRate >= 1) return true;\n    return Math.random() < this.sampleRate;\n  }\n\n  setLicenseToken(licenseToken: string) {\n    this.licenseToken = licenseToken;\n    this.telemetryId = parseAndWarnTelemetryId(licenseToken);\n  }\n\n  async capture<K extends keyof AnalyticsEvents>(\n    event: K,\n    properties: AnalyticsEvents[K],\n  ) {\n    if (this.telemetryDisabled) return;\n    // Anonymous callers are gated by sampleRate; identified callers\n    // (telemetry_id present) bypass the gate and always send.\n    if (!this.telemetryId && !this.shouldSendEvent()) return;\n\n    await lambdaClient.send({\n      event,\n      properties: properties as Record<string, unknown>,\n      packageName: packageJson.name,\n      packageVersion: packageJson.version,\n      licenseToken: this.licenseToken ?? undefined,\n    });\n  }\n\n  private setSampleRate(sampleRate: number | undefined) {\n    let _sampleRate: number;\n\n    _sampleRate = sampleRate ?? 0.05;\n\n    if (process.env.COPILOTKIT_TELEMETRY_SAMPLE_RATE) {\n      _sampleRate = parseFloat(process.env.COPILOTKIT_TELEMETRY_SAMPLE_RATE);\n    }\n\n    // Number.isNaN guards against parseFloat(\"nonsense\") slipping past the\n    // range check (all NaN comparisons are false), which would silently\n    // drop every anonymous event with no signal.\n    if (Number.isNaN(_sampleRate) || _sampleRate < 0 || _sampleRate > 1) {\n      throw new Error(\"Sample rate must be between 0 and 1\");\n    }\n\n    this.sampleRate = _sampleRate;\n  }\n}\n\nconst telemetry = new TelemetryClient();\nexport default telemetry;\n"],"mappings":";;;;;;;AAIA,SAAgB,sBAA+B;AAC7C,QACG,QAAQ,IACN,kCAAkC,UACpC,QAAQ,IACN,kCAAkC,OACpC,QAAQ,IAA2C,iBAClD,UACD,QAAQ,IAA2C,iBAAiB;;AAIzE,IAAa,kBAAb,MAA6B;CAkB3B,YAAY,EACV,mBACA,eAIE,EAAE,EAAE;2BAvB6B;oBAKR;sBAKS;qBAKD;AASnC,OAAK,oBAAoB,qBAAqB,qBAAqB;AACnE,OAAK,cAAc,WAAW;;CAGhC,AAAQ,kBAAkB;AACxB,MAAI,KAAK,cAAc,EAAG,QAAO;AACjC,SAAO,KAAK,QAAQ,GAAG,KAAK;;CAG9B,gBAAgB,cAAsB;AACpC,OAAK,eAAe;AACpB,OAAK,8DAAsC,aAAa;;CAG1D,MAAM,QACJ,OACA,YACA;AACA,MAAI,KAAK,kBAAmB;AAG5B,MAAI,CAAC,KAAK,eAAe,CAAC,KAAK,iBAAiB,CAAE;AAElD,QAAMA,gCAAa,KAAK;GACtB;GACY;GACZ,aAAaC,eAAY;GACzB,gBAAgBA,eAAY;GAC5B,cAAc,KAAK,gBAAgB;GACpC,CAAC;;CAGJ,AAAQ,cAAc,YAAgC;EACpD,IAAI;AAEJ,gBAAc,cAAc;AAE5B,MAAI,QAAQ,IAAI,iCACd,eAAc,WAAW,QAAQ,IAAI,iCAAiC;AAMxE,MAAI,OAAO,MAAM,YAAY,IAAI,cAAc,KAAK,cAAc,EAChE,OAAM,IAAI,MAAM,sCAAsC;AAGxD,OAAK,aAAa;;;AAItB,MAAM,YAAY,IAAI,iBAAiB"}