{"version":3,"sources":["../src/api/events.api.ts"],"names":["EventsApi","userId","apiUrl","traits","version_default","event","properties","req","eventsApi","EVENTS"],"mappings":";yCAEO,IAAMA,EAAN,KAAgB,CACJ,MAAqC,CAAC,EAEtC,eAAiB,IAE1B,QAAU,GAEV,WAEA,OACA,OAER,KAAKC,EAAQC,EAAQ,CACnB,KAAK,OAASD,EACd,KAAK,OAASC,EACd,KAAK,WAAa,YAAY,IAAM,EAC9B,KAAK,MAAM,QAAU,CAAC,KAAK,UAC7B,KAAK,MAAM,CAEf,EAAG,KAAK,cAAc,CACxB,CAEA,SAAU,CACR,MAAO,CAAC,CAAC,KAAK,QAAU,CAAC,CAAC,KAAK,QAAU,CAAC,CAAC,KAAK,UAClD,CAEA,SAASC,EAAkC,CAAC,EAAS,CACnD,KAAK,MAAM,KAAK,IACd,MAAM,GAAG,KAAK,MAAM,mBAAoB,CACtC,OAAQ,OACR,QAAS,KAAK,kBAAkB,EAChC,KAAM,KAAK,UAAU,CACnB,OAAQ,KAAK,OACb,OAAQ,CAEN,YAAaC,EACb,OAAQ,WACR,GAAGD,CACL,CACF,CAAC,CACH,CAAC,CACH,EAEA,KAAK,QAAU,EACjB,CAEA,MAAME,EAAeC,EAAsC,CAAC,EAAS,CACnE,KAAK,MAAM,KAAK,IACd,MAAM,GAAG,KAAK,MAAM,gBAAiB,CACnC,OAAQ,OACR,QAAS,KAAK,kBAAkB,EAChC,KAAM,KAAK,UAAU,CACnB,OAAQ,KAAK,OACb,MAAAD,EACA,WAAAC,CACF,CAAC,CACH,CAAC,CACH,EAEA,KAAK,QAAU,EACjB,CAEQ,OAAc,CAEpB,IADA,KAAK,QAAU,GACR,KAAK,MAAM,QAAQ,CACxB,IAAMC,EAAM,KAAK,MAAM,MAAM,EACzBA,GACFA,EAAI,EAAE,MAAM,IAAM,CAElB,CAAC,CAEL,CACF,CAEQ,mBAAoB,CAC1B,MAAO,CACL,OAAQ,mBACR,eAAgB,mBAChB,aAAc,wBAAwBH,CAAO,KAC7C,mBAAoBA,CACtB,CACF,CAEA,SAAgB,CACd,KAAK,MAAM,EACX,cAAc,KAAK,UAAU,CAC/B,CACF,EAEaI,EAAY,IAAIR,EAEhBS,EAAS,CACpB,MAAO,QACP,QAAS,UACT,OAAQ,SACR,kBAAmB,oBACnB,mBAAoB,qBACpB,kBAAmB,oBACnB,qBAAsB,uBACtB,aAAc,eACd,YAAa,cACb,YAAa,cACb,kBAAmB,oBACnB,YAAa,cACb,qBAAsB,uBAGtB,YAAa,cACb,aAAc,eACd,cAAe,gBACf,wBAAyB,0BACzB,yBAA0B,2BAC1B,wBAAyB,0BACzB,2BAA4B,6BAC5B,mBAAoB,qBACpB,kBAAmB,oBACnB,kBAAmB,oBACnB,wBAAyB,0BACzB,kBAAmB,oBACnB,2BAA4B,6BAC5B,mCAAoC,qCACpC,qCAAsC,sCACxC","sourcesContent":["import version from '@/utils/version';\n\nexport class EventsApi {\n  private readonly queue: (() => Promise<Response>)[] = [];\n\n  private readonly FLUSH_INTERVAL = 1000;\n\n  private flushed = false;\n\n  private intervalId: number | NodeJS.Timeout;\n\n  private userId: string;\n  private apiUrl: string;\n\n  init(userId, apiUrl) {\n    this.userId = userId;\n    this.apiUrl = apiUrl;\n    this.intervalId = setInterval(() => {\n      if (this.queue.length || !this.flushed) {\n        this.flush();\n      }\n    }, this.FLUSH_INTERVAL);\n  }\n\n  isReady() {\n    return !!this.userId && !!this.apiUrl && !!this.intervalId;\n  }\n\n  identify(traits: Record<string, unknown> = {}): void {\n    this.queue.push(() =>\n      fetch(`${this.apiUrl}/events/identify`, {\n        method: 'POST',\n        headers: this.getDefaultHeaders(),\n        body: JSON.stringify({\n          userId: this.userId,\n          traits: {\n            // eslint-disable-next-line camelcase\n            sdk_version: version,\n            source: 'chat_sdk',\n            ...traits,\n          },\n        }),\n      })\n    );\n\n    this.flushed = false;\n  }\n\n  track(event: EVENTS, properties: Record<string, unknown> = {}): void {\n    this.queue.push(() =>\n      fetch(`${this.apiUrl}/events/track`, {\n        method: 'POST',\n        headers: this.getDefaultHeaders(),\n        body: JSON.stringify({\n          userId: this.userId,\n          event,\n          properties,\n        }),\n      })\n    );\n\n    this.flushed = false;\n  }\n\n  private flush(): void {\n    this.flushed = true;\n    while (this.queue.length) {\n      const req = this.queue.shift();\n      if (req) {\n        req().catch(() => {\n          return;\n        });\n      }\n    }\n  }\n\n  private getDefaultHeaders() {\n    return {\n      Accept: 'application/json',\n      'Content-Type': 'application/json',\n      'User-Agent': `Naluri Chat SDK /JS (${version}})`,\n      'x-nl-sdk-version': version,\n    };\n  }\n\n  cleanup(): void {\n    this.flush();\n    clearInterval(this.intervalId);\n  }\n}\n\nexport const eventsApi = new EventsApi();\n\nexport const EVENTS = {\n  LOGIN: 'login',\n  REFRESH: 'refresh',\n  LOGOUT: 'logout',\n  SEND_TEXT_MESSAGE: 'send_text_message',\n  SEND_IMAGE_MESSAGE: 'send_image_message',\n  SEND_FILE_MESSAGE: 'send_file_message',\n  GET_CHANNEL_MESSAGES: 'get_channel_messages',\n  GET_CHANNELS: 'get_channels',\n  GET_CHANNEL: 'get_channel',\n  GET_MESSAGE: 'get_message',\n  GET_COACH_PROFILE: 'get_coach_profile',\n  GET_COACHES: 'get_coaches',\n  MARK_MESSAGE_AS_READ: 'mark_message_as_read',\n\n  // errors\n  LOGIN_ERROR: 'login_error',\n  LOGOUT_ERROR: 'logout_error',\n  REFRESH_ERROR: 'refresh_error',\n  SEND_TEXT_MESSAGE_ERROR: 'send_text_message_error',\n  SEND_IMAGE_MESSAGE_ERROR: 'send_image_message_error',\n  SEND_FILE_MESSAGE_ERROR: 'send_file_message_error',\n  GET_CHANNEL_MESSAGES_ERROR: 'get_channel_messages_error',\n  GET_CHANNELS_ERROR: 'get_channels_error',\n  GET_CHANNEL_ERROR: 'get_channel_error',\n  GET_MESSAGE_ERROR: 'get_message_error',\n  GET_COACH_PROFILE_ERROR: 'get_coach_profile_error',\n  GET_COACHES_ERROR: 'get_coaches_error',\n  CHANNEL_SUBSCRIPTION_ERROR: 'channel_subscription_error',\n  CHANNEL_LISTING_SUBSCRIPTION_ERROR: 'channel_listing_subscription_error',\n  CHANNEL_ACTING_COACH_INJECTION_ERROR: 'channel_acting_coach_injection_error',\n} as const;\n\nexport type EVENTS = (typeof EVENTS)[keyof typeof EVENTS];\n"]}