{"version":3,"sources":["../src/telemetry/telemetry-client.ts"],"sourcesContent":["import { Analytics } from \"@segment/analytics-node\";\nimport { AnalyticsEvents } from \"./events\";\nimport { flattenObject } from \"./utils\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport scarfClient from \"./scarf-client\";\n\nexport class TelemetryClient {\n  segment: Analytics | undefined;\n  globalProperties: Record<string, any> = {};\n  cloudConfiguration: { publicApiKey: string; baseUrl: string } | null = null;\n  packageName: string;\n  packageVersion: string;\n  private telemetryDisabled: boolean = false;\n  private sampleRate: number = 0.05;\n  private anonymousId = `anon_${uuidv4()}`;\n\n  constructor({\n    packageName,\n    packageVersion,\n    telemetryDisabled,\n    telemetryBaseUrl,\n    sampleRate,\n  }: {\n    packageName: string;\n    packageVersion: string;\n    telemetryDisabled?: boolean;\n    telemetryBaseUrl?: string;\n    sampleRate?: number;\n  }) {\n    this.packageName = packageName;\n    this.packageVersion = packageVersion;\n    this.telemetryDisabled =\n      telemetryDisabled ||\n      (process.env as any).COPILOTKIT_TELEMETRY_DISABLED === \"true\" ||\n      (process.env as any).COPILOTKIT_TELEMETRY_DISABLED === \"1\" ||\n      (process.env as any).DO_NOT_TRACK === \"true\" ||\n      (process.env as any).DO_NOT_TRACK === \"1\";\n\n    if (this.telemetryDisabled) {\n      return;\n    }\n\n    this.setSampleRate(sampleRate);\n\n    // eslint-disable-next-line\n    const writeKey = process.env.COPILOTKIT_SEGMENT_WRITE_KEY || \"n7XAZtQCGS2v1vvBy3LgBCv2h3Y8whja\";\n\n    this.segment = new Analytics({\n      writeKey,\n    });\n\n    this.setGlobalProperties({\n      \"copilotkit.package.name\": packageName,\n      \"copilotkit.package.version\": packageVersion,\n    });\n  }\n\n  private shouldSendEvent() {\n    const randomNumber = Math.random();\n    return randomNumber < this.sampleRate;\n  }\n\n  async capture<K extends keyof AnalyticsEvents>(event: K, properties: AnalyticsEvents[K]) {\n    if (!this.shouldSendEvent() || !this.segment) {\n      return;\n    }\n\n    const flattenedProperties = flattenObject(properties);\n    const propertiesWithGlobal = {\n      ...this.globalProperties,\n      ...flattenedProperties,\n    };\n    const orderedPropertiesWithGlobal = Object.keys(propertiesWithGlobal)\n      .sort()\n      .reduce(\n        (obj, key) => {\n          obj[key] = propertiesWithGlobal[key];\n          return obj;\n        },\n        {} as Record<string, any>,\n      );\n\n    this.segment.track({\n      anonymousId: this.anonymousId,\n      event,\n      properties: { ...orderedPropertiesWithGlobal },\n    });\n\n    await scarfClient.logEvent({\n      event,\n    });\n  }\n\n  setGlobalProperties(properties: Record<string, any>) {\n    const flattenedProperties = flattenObject(properties);\n    this.globalProperties = { ...this.globalProperties, ...flattenedProperties };\n  }\n\n  setCloudConfiguration(properties: { publicApiKey: string; baseUrl: string }) {\n    this.cloudConfiguration = properties;\n\n    this.setGlobalProperties({\n      cloud: {\n        publicApiKey: properties.publicApiKey,\n        baseUrl: properties.baseUrl,\n      },\n    });\n  }\n\n  private setSampleRate(sampleRate: number | undefined) {\n    let _sampleRate: number;\n\n    _sampleRate = sampleRate ?? 0.05;\n\n    // eslint-disable-next-line\n    if (process.env.COPILOTKIT_TELEMETRY_SAMPLE_RATE) {\n      // eslint-disable-next-line\n      _sampleRate = parseFloat(process.env.COPILOTKIT_TELEMETRY_SAMPLE_RATE);\n    }\n\n    if (_sampleRate < 0 || _sampleRate > 1) {\n      throw new Error(\"Sample rate must be between 0 and 1\");\n    }\n\n    this.sampleRate = _sampleRate;\n    this.setGlobalProperties({\n      sampleRate: this.sampleRate,\n      sampleRateAdjustmentFactor: 1 - this.sampleRate,\n      sampleWeight: 1 / this.sampleRate,\n    });\n  }\n}\n"],"mappings":";;;;;;;;AAAA,SAAS,iBAAiB;AAG1B,SAAS,MAAM,cAAc;AAGtB,IAAM,kBAAN,MAAsB;AAAA,EAU3B,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAMG;AApBH,4BAAwC,CAAC;AACzC,8BAAuE;AAGvE,SAAQ,oBAA6B;AACrC,SAAQ,aAAqB;AAC7B,SAAQ,cAAc,QAAQ,OAAO;AAenC,SAAK,cAAc;AACnB,SAAK,iBAAiB;AACtB,SAAK,oBACH,qBACC,QAAQ,IAAY,kCAAkC,UACtD,QAAQ,IAAY,kCAAkC,OACtD,QAAQ,IAAY,iBAAiB,UACrC,QAAQ,IAAY,iBAAiB;AAExC,QAAI,KAAK,mBAAmB;AAC1B;AAAA,IACF;AAEA,SAAK,cAAc,UAAU;AAG7B,UAAM,WAAW,QAAQ,IAAI,gCAAgC;AAE7D,SAAK,UAAU,IAAI,UAAU;AAAA,MAC3B;AAAA,IACF,CAAC;AAED,SAAK,oBAAoB;AAAA,MACvB,2BAA2B;AAAA,MAC3B,8BAA8B;AAAA,IAChC,CAAC;AAAA,EACH;AAAA,EAEQ,kBAAkB;AACxB,UAAM,eAAe,KAAK,OAAO;AACjC,WAAO,eAAe,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,QAAyC,OAAU,YAAgC;AACvF,QAAI,CAAC,KAAK,gBAAgB,KAAK,CAAC,KAAK,SAAS;AAC5C;AAAA,IACF;AAEA,UAAM,sBAAsB,cAAc,UAAU;AACpD,UAAM,uBAAuB;AAAA,MAC3B,GAAG,KAAK;AAAA,MACR,GAAG;AAAA,IACL;AACA,UAAM,8BAA8B,OAAO,KAAK,oBAAoB,EACjE,KAAK,EACL;AAAA,MACC,CAAC,KAAK,QAAQ;AACZ,YAAI,GAAG,IAAI,qBAAqB,GAAG;AACnC,eAAO;AAAA,MACT;AAAA,MACA,CAAC;AAAA,IACH;AAEF,SAAK,QAAQ,MAAM;AAAA,MACjB,aAAa,KAAK;AAAA,MAClB;AAAA,MACA,YAAY,EAAE,GAAG,4BAA4B;AAAA,IAC/C,CAAC;AAED,UAAM,qBAAY,SAAS;AAAA,MACzB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,oBAAoB,YAAiC;AACnD,UAAM,sBAAsB,cAAc,UAAU;AACpD,SAAK,mBAAmB,EAAE,GAAG,KAAK,kBAAkB,GAAG,oBAAoB;AAAA,EAC7E;AAAA,EAEA,sBAAsB,YAAuD;AAC3E,SAAK,qBAAqB;AAE1B,SAAK,oBAAoB;AAAA,MACvB,OAAO;AAAA,QACL,cAAc,WAAW;AAAA,QACzB,SAAS,WAAW;AAAA,MACtB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,cAAc,YAAgC;AACpD,QAAI;AAEJ,kBAAc,cAAc;AAG5B,QAAI,QAAQ,IAAI,kCAAkC;AAEhD,oBAAc,WAAW,QAAQ,IAAI,gCAAgC;AAAA,IACvE;AAEA,QAAI,cAAc,KAAK,cAAc,GAAG;AACtC,YAAM,IAAI,MAAM,qCAAqC;AAAA,IACvD;AAEA,SAAK,aAAa;AAClB,SAAK,oBAAoB;AAAA,MACvB,YAAY,KAAK;AAAA,MACjB,4BAA4B,IAAI,KAAK;AAAA,MACrC,cAAc,IAAI,KAAK;AAAA,IACzB,CAAC;AAAA,EACH;AACF;","names":[]}