{"version":3,"sources":["../../src/native/setup.ts"],"sourcesContent":["import 'expo-sqlite/localStorage/install';\nimport { getAndroidId, getInstallReferrerAsync, getIosIdForVendorAsync } from 'expo-application';\nimport { randomUUID } from 'expo-crypto';\nimport {\n  DeviceType,\n  deviceType,\n  manufacturer,\n  modelId,\n  modelName,\n  osName,\n  osVersion,\n} from 'expo-device';\nimport { getCalendars, getLocales } from 'expo-localization';\nimport { getAdvertisingId } from 'expo-tracking-transparency';\nimport { Dimensions, PixelRatio, Platform } from 'react-native';\nimport { URLSearchParams } from 'react-native-url-polyfill';\nimport { type Storage, cache, config } from '../setup/index';\nimport type { TrackTags } from '../track/types';\n\nconst map = new Map<string, string>();\n\nexport const storage: Storage = {\n  getItem: (key) => {\n    try {\n      return localStorage.getItem(key);\n    } catch {\n      console.error('localStorage is not available');\n      return map.get(key) ?? null;\n    }\n  },\n  setItem: (key, value) => {\n    try {\n      localStorage.setItem(key, value);\n    } catch {\n      console.error('localStorage is not available');\n      map.set(key, value);\n    }\n  },\n};\n\nexport async function getDeviceId(): Promise<string> {\n  let deviceId: string | null = null;\n  if (Platform.OS === 'ios') {\n    deviceId = await getIosIdForVendorAsync();\n  } else if (Platform.OS === 'android') {\n    deviceId = getAndroidId();\n  }\n  if (!deviceId) {\n    deviceId = localStorage.getItem('device_id');\n    if (!deviceId) {\n      deviceId = randomUUID();\n      localStorage.setItem('device_id', deviceId);\n    }\n  }\n  return deviceId;\n}\n\nexport function getDeviceType(): string | undefined {\n  switch (deviceType) {\n    case DeviceType.PHONE:\n      return 'mobile';\n    case DeviceType.TABLET:\n      return 'tablet';\n    case DeviceType.DESKTOP:\n      return 'desktop';\n    case DeviceType.TV:\n      return 'smarttv';\n    default:\n      return undefined;\n  }\n}\n\nexport async function getTags(): Promise<TrackTags> {\n  const screen = Dimensions.get('screen');\n  const screen_width = Math.floor(screen.width);\n  const screen_height = Math.floor(screen.height);\n\n  const install_referrer = Platform.OS === 'android' ? await getInstallReferrerAsync() : undefined;\n  const params = new URLSearchParams(install_referrer);\n\n  const tags: TrackTags = {\n    os: `${osName} ${osVersion}`,\n    os_name: osName ?? undefined,\n    os_version: osVersion ?? undefined,\n    platform: Platform.OS,\n    device: modelName ?? undefined,\n    device_id: await getDeviceId(),\n    device_type: getDeviceType(),\n    device_vendor: manufacturer ?? undefined,\n    device_model_id: modelId ?? undefined,\n    device_pixel_ratio: PixelRatio.get(),\n    screen_width,\n    screen_height,\n    screen_resolution: `${screen_width}x${screen_height}`,\n    release: config.release,\n    language: getLocales()?.[0]?.languageTag ?? 'en',\n    time_zone: getCalendars()?.[0]?.timeZone ?? 'UTC',\n    environment: __DEV__ ? 'development' : 'production',\n    source: 'app',\n    // ads\n    advertising_id: getAdvertisingId() ?? undefined,\n    install_referrer,\n    // utm params\n    utm_source: params.get('utm_source') ?? undefined,\n    utm_medium: params.get('utm_medium') ?? undefined,\n    utm_campaign: params.get('utm_campaign') ?? undefined,\n    utm_term: params.get('utm_term') ?? undefined,\n    utm_content: params.get('utm_content') ?? undefined,\n    utm_id: params.get('utm_id') ?? undefined,\n    utm_source_platform: params.get('utm_source_platform') ?? undefined,\n    utm_creative_format: params.get('utm_creative_format') ?? undefined,\n    utm_marketing_tactic: params.get('utm_marketing_tactic') ?? undefined,\n  };\n\n  cache.tags = tags;\n  return tags;\n}\n"],"mappings":"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","names":[]}