{"version":3,"sources":["../../src/track/types.ts"],"sourcesContent":["import type { UserProvidedData as GAUserProvidedData, StandardEvents } from './gtag';\n\nexport type AllowedPropertyValues = string | number | boolean | null;\nexport type EventName = Lowercase<string> | 'CLS' | 'FCP' | 'INP' | 'LCP' | 'TTFB';\n\nexport type TrackName<T extends EventName = EventName> = T extends keyof StandardEvents\n  ? T\n  : EventName;\nexport type TrackProperties<T extends EventName = EventName> = T extends keyof StandardEvents\n  ? StandardEvents[T]\n  : Record<Lowercase<string>, AllowedPropertyValues>;\n\nexport type Platform = 'ios' | 'android' | 'web' | 'macos' | 'windows' | 'linux' | 'unknown';\nexport type Environment = 'development' | 'production';\n\nexport interface UserData {\n  userId: string;\n  email?: string;\n  firstName?: string;\n  lastName?: string;\n  phone?: string;\n  dateOfBirth?: string;\n  gender?: string;\n  city?: string;\n  state?: string;\n  postal?: string;\n  country?: string;\n}\n\nexport interface UserProvidedData extends GAUserProvidedData {\n  user_id?: string;\n  ip_address?: string;\n  user_agent?: string;\n  gender?: 'female' | 'male';\n  birthday?: { year: number; month: number; day: number };\n  // meta specific\n  fb_login_id?: string;\n  fb_page_id?: string;\n}\n\nexport type ThirdPartyTracker = <T extends EventName>(\n  name: TrackName<T>,\n  properties?: TrackProperties<T>,\n  event_id?: string\n) => void;\n\nexport interface PlatformInfo {\n  os?: string;\n  os_name?: string;\n  os_version?: string;\n  browser?: string;\n  browser_name?: string;\n  browser_version?: string;\n  /** @deprecated */\n  platform: Platform;\n}\n\nexport interface DeviceInfo {\n  device?: string;\n  device_id?: string;\n  device_type?: string;\n  device_vendor?: string;\n  device_model_id?: string;\n  device_pixel_ratio?: number;\n  screen_width?: number;\n  screen_height?: number;\n  screen_resolution?: `${number}x${number}`;\n}\n\nexport interface AppInfo {\n  /** iOS: IDFA, Android: Android Advertising ID */\n  advertising_id?: string;\n  install_referrer?: string;\n}\n\nexport interface EnvironmentInfo {\n  release?: string;\n  language?: string;\n  time_zone?: string;\n  /** @deprecated */\n  environment: Environment;\n}\n\nexport interface SourceInfo {\n  source_url?: string;\n  source?: 'app' | 'web' | 'offline';\n}\n\nexport interface AdvertisingInfo {\n  /**\n   * Meta pixel fields\n   * ref: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/customer-information-parameters#fbc\n   * Stored in the _fbc/_fbp browser cookie under your domain\n   * ref: https://www.facebook.com/business/help/2360940870872492?checkpoint_src=any\n   */\n  fbc?: string;\n  fbp?: string;\n  fbclid?: string;\n  ad_id?: string;\n  ad_name?: string;\n  adset_id?: string;\n  adset_name?: string;\n  campaign_id?: string;\n  campaign_name?: string;\n  placement?: string;\n  site_source_name?: string;\n  /** Google Analytics fields */\n  gclid?: string;\n  gclsrc?: string;\n  gad_source?: string;\n  gad_campaignid?: string;\n  /** Reddit Ads fields */\n  rdt_cid?: string;\n  rdt_uuid?: string;\n  /** LinkedIn Ads fields: get click id from url params or first-party cookie */\n  li_fat_id?: string;\n  // click ids\n  dclid?: string; // Google Display Network\n  ko_click_id?: string; // Kakao Ads\n  msclkid?: string; // Microsoft Ads (Bing Ads)\n  sccid?: string; // Snapchat Ads\n  ttclid?: string; // TikTok Ads\n  twclid?: string; // Twitter Ads (X Ads)\n  wbraid?: string; // Google Ads (for iOS privacy)\n  yclid?: string; // Yandex Ads\n}\n\nexport interface UTMParams {\n  utm_source?: string;\n  utm_medium?: string;\n  utm_campaign?: string;\n  utm_term?: string;\n  utm_content?: string;\n  utm_id?: string;\n  utm_source_platform?: string;\n  utm_creative_format?: string;\n  utm_marketing_tactic?: string;\n}\n\nexport interface TrackTags\n  extends\n    PlatformInfo,\n    DeviceInfo,\n    AppInfo,\n    EnvironmentInfo,\n    SourceInfo,\n    AdvertisingInfo,\n    UTMParams {\n  idempotency_key?: string;\n  [key: string]: string | number | boolean | null | undefined;\n}\n\nexport interface TrackEvent<T extends EventName = EventName> {\n  id: string;\n  name: TrackName<T>;\n  tags: TrackTags;\n  visitor_id: string;\n  session_id: string;\n  platform: Platform;\n  environment: Environment;\n  properties?: TrackProperties<T>;\n  created_at: string;\n}\n\nexport type TrackEventResponse = {\n  /** track event id: Meta Pixel will use event_id and event_name for deduplication */\n  id: string;\n}[];\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}