{"version":3,"sources":["../../src/native/fingerprint.ts"],"sourcesContent":["/**\n * reference: https://docs.swmansion.com/detour/docs/Architecture/matching\n *\n */\nimport { getInstallReferrerAsync } from 'expo-application';\nimport { getStringAsync } from 'expo-clipboard';\nimport {\n  manufacturer,\n  modelId,\n  modelName,\n  osName,\n  osVersion,\n  supportedCpuArchitectures,\n} from 'expo-device';\nimport { getCalendars, getLocales } from 'expo-localization';\nimport { Dimensions, PixelRatio, Platform } from 'react-native';\n\n// used when install referrer on android is available\nexport type DeterministicFingerprint = {\n  click_id: string | null;\n};\n\nexport type ProbabilisticFingerprint = {\n  os: string | null;\n  os_name: string | null;\n  os_version: string | null;\n  cpu_architecture: string | null;\n  platform: 'ios' | 'android' | 'web' | 'macos' | 'windows' | 'linux' | 'unknown';\n  device: string | null;\n  device_vendor: string | null;\n  device_model_id: string | null;\n  device_pixel_ratio: number;\n  screen_width: number;\n  screen_height: number;\n  screen_resolution: string;\n  language: string | null;\n  time_zone: string | null;\n  install_referrer: string | null;\n  pasted_link: string | null;\n  timestamp: number; // 7 days validity\n};\n\nexport async function getDeterministicFingerprint(): Promise<DeterministicFingerprint> {\n  const install_referrer = Platform.OS === 'android' ? await getInstallReferrerAsync() : null;\n  if (!install_referrer) return { click_id: null };\n  const params = new URLSearchParams(install_referrer);\n  return { click_id: params.get('click_id') ?? null };\n}\n\nexport async function getProbabilisticFingerprint(\n  shouldUseClipboard = true\n): Promise<ProbabilisticFingerprint> {\n  const screen = Dimensions.get('screen');\n  const screen_width = Math.floor(screen.width);\n  const screen_height = Math.floor(screen.height);\n  const install_referrer = Platform.OS === 'android' ? await getInstallReferrerAsync() : null;\n\n  return {\n    os: osName && osVersion ? `${osName} ${osVersion}` : null,\n    os_name: osName,\n    os_version: osVersion,\n    cpu_architecture: supportedCpuArchitectures?.at(0) ?? null,\n    platform: Platform.OS,\n    device: modelName,\n    device_vendor: manufacturer,\n    device_model_id: modelId,\n    device_pixel_ratio: PixelRatio.get(),\n    screen_width,\n    screen_height,\n    screen_resolution: `${screen_width}x${screen_height}`,\n    language: getLocales()?.[0]?.languageTag ?? null,\n    time_zone: getCalendars()?.[0]?.timeZone ?? null,\n    install_referrer,\n    pasted_link: shouldUseClipboard ? await getStringAsync() : null,\n    timestamp: Date.now(),\n  };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,8BAAwC;AACxC,4BAA+B;AAC/B,yBAOO;AACP,+BAAyC;AACzC,0BAAiD;AA2BjD,eAAsB,8BAAiE;AACrF,QAAM,mBAAmB,6BAAS,OAAO,YAAY,UAAM,iDAAwB,IAAI;AACvF,MAAI,CAAC,iBAAkB,QAAO,EAAE,UAAU,KAAK;AAC/C,QAAM,SAAS,IAAI,gBAAgB,gBAAgB;AACnD,SAAO,EAAE,UAAU,OAAO,IAAI,UAAU,KAAK,KAAK;AACpD;AAEA,eAAsB,4BACpB,qBAAqB,MACc;AAnDrC;AAoDE,QAAM,SAAS,+BAAW,IAAI,QAAQ;AACtC,QAAM,eAAe,KAAK,MAAM,OAAO,KAAK;AAC5C,QAAM,gBAAgB,KAAK,MAAM,OAAO,MAAM;AAC9C,QAAM,mBAAmB,6BAAS,OAAO,YAAY,UAAM,iDAAwB,IAAI;AAEvF,SAAO;AAAA,IACL,IAAI,6BAAU,+BAAY,GAAG,yBAAM,IAAI,4BAAS,KAAK;AAAA,IACrD,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,oBAAkB,yEAA2B,GAAG,OAAM;AAAA,IACtD,UAAU,6BAAS;AAAA,IACnB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,oBAAoB,+BAAW,IAAI;AAAA,IACnC;AAAA,IACA;AAAA,IACA,mBAAmB,GAAG,YAAY,IAAI,aAAa;AAAA,IACnD,YAAU,oDAAW,MAAX,mBAAe,OAAf,mBAAmB,gBAAe;AAAA,IAC5C,aAAW,sDAAa,MAAb,mBAAiB,OAAjB,mBAAqB,aAAY;AAAA,IAC5C;AAAA,IACA,aAAa,qBAAqB,UAAM,sCAAe,IAAI;AAAA,IAC3D,WAAW,KAAK,IAAI;AAAA,EACtB;AACF;","names":[]}