{"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":[]}