{"version":3,"sources":["../src/index.ts","../src/express-useragent.ts"],"sourcesContent":["import type { NextFunction, Request, Response } from 'express';\nimport type { IncomingHttpHeaders } from 'http';\nimport { UserAgent } from './express-useragent';\n\nexport type { AgentDetails, HeadersLike } from './express-useragent';\nexport { UserAgent } from './express-useragent';\n\nexport interface UserAgentAugmentedRequest extends Request {\n  useragent?: ReturnType<UserAgent['parse']>;\n  headers: IncomingHttpHeaders & Record<string, string | string[] | undefined>;\n}\n\nexport const useragent = new UserAgent();\n\nexport type UserAgentMiddleware = (req: Request, res: Response, next: NextFunction) => void;\n\nexport const express = (): UserAgentMiddleware => {\n  return (req: UserAgentAugmentedRequest, res: Response, next: NextFunction) => {\n    const headers = req.headers || {};\n    const resolveHeader = (value: string | string[] | undefined): string => {\n      if (Array.isArray(value)) {\n        return value.join(' ');\n      }\n      return value ?? '';\n    };\n\n    const uaHeader = resolveHeader(headers['user-agent']);\n    const ucHeader = resolveHeader(headers['x-ucbrowser-ua']);\n    const source = (ucHeader || uaHeader || 'unknown').trim() || 'unknown';\n\n    const parser = new UserAgent().hydrate(source);\n    parser.testNginxGeoIP(headers);\n    // middleware duplicates tests to match legacy behaviour\n    parser.testBot();\n    parser.testMobile();\n    parser.testAndroidTablet();\n    parser.testTablet();\n    parser.testCompatibilityMode();\n    parser.testSilk();\n    parser.testKindleFire();\n    parser.testWechat();\n\n    req.useragent = parser.Agent;\n    res.locals.useragent = parser.Agent;\n\n    next();\n  };\n};\nexport const useragentMiddleware = express;\n\nexport default useragent;\n","import type { IncomingHttpHeaders } from 'http';\r\n\r\nconst BOTS = [\r\n  '\\\\+https:\\\\/\\\\/developers.google.com\\\\/\\\\+\\\\/web\\\\/snippet\\\\/',\r\n  'ad\\\\smonitoring',\r\n  'adsbot',\r\n  'apex',\r\n  'applebot',\r\n  'archive.org_bot',\r\n  'baiduspider',\r\n  'bingbot',\r\n  'chromeheadless',\r\n  'cloudflare',\r\n  'cloudinary',\r\n  'crawler',\r\n  'curl',\r\n  'discordbot',\r\n  'duckduckbot',\r\n  'embedly',\r\n  'exabot',\r\n  'facebookexternalhit',\r\n  'facebot',\r\n  'flipboard',\r\n  'google',\r\n  'googlebot',\r\n  'gsa-crawler',\r\n  'gurujibot',\r\n  'guzzlehttp',\r\n  'heritrix',\r\n  'ia_archiver',\r\n  'insights',\r\n  'linkedinbot',\r\n  'ltx71',\r\n  'mediapartners',\r\n  'msnbot',\r\n  'odklbot',\r\n  'phantom\\\\.js',\r\n  'phantomjs',\r\n  'pingdom',\r\n  'pinterest',\r\n  'python',\r\n  'rtlnieuws',\r\n  'skypeuripreview',\r\n  'slackbot',\r\n  'slurp',\r\n  'spbot',\r\n  'telegrambot',\r\n  'test\\\\scertificate',\r\n  'testing',\r\n  'tiabot',\r\n  'tumblr ',\r\n  'twitterbot',\r\n  'vkshare',\r\n  'web\\\\sscraper',\r\n  'wget',\r\n  'yandexbot',\r\n  'whatsapp',\r\n  'orangebot',\r\n  'smtbot',\r\n  'qwantify',\r\n  'mj12bot',\r\n  'ahrefsbot',\r\n  'seznambot',\r\n  'panscient\\\\.com',\r\n  'duckduckgo-favicons-bot',\r\n  'uptimerobot',\r\n  'semrushbot',\r\n  'postman',\r\n  'dotbot',\r\n  'zoominfobot',\r\n  'ifttt',\r\n  'sogou',\r\n  'ru_bot',\r\n  'researchscan',\r\n  'nimbostratus-bot',\r\n  'slack-imgproxy',\r\n  'node-superagent',\r\n  'go-http-client',\r\n  'jersey',\r\n  'dataprovider.com',\r\n  'github-camo',\r\n  'dispatch',\r\n  'checkmarknetwork',\r\n  'screaming frog',\r\n  'whatweb',\r\n  'daum',\r\n  'netcraftsurveyagent',\r\n  'mojeekbot',\r\n  'surdotlybot',\r\n  'springbot',\r\n] as const;\r\n\r\nconst IS_BOT_REGEXP = new RegExp(`^.*(${BOTS.join('|')}).*$`, 'i');\r\nconst SILK_REGEXP = /silk/i;\r\nconst SILK_ACCELERATED_REGEXP = /Silk-Accelerated=true/i;\r\nconst SMART_TV_REGEXP = /smart-tv|smarttv|googletv|appletv|hbbtv|pov_tv|netcast.tv/i;\r\nconst ANDROID_TABLET_REGEXP = /mobile/i;\r\nconst MOBILE_REGEXP = /mobile|^ios-/i;\r\nconst DALVIK_REGEXP = /dalvik/i;\r\nconst IOS_SCALE_REGEXP = /scale/i;\r\nconst WEBKIT_REGEXP = /applewebkit/i;\r\nconst WECHAT_REGEXP = /micromessenger/i;\r\n\r\nexport interface AgentDetails extends Record<string, unknown> {\r\n  isYaBrowser: boolean;\r\n  isAuthoritative: boolean;\r\n  isMobile: boolean;\r\n  isMobileNative: boolean;\r\n  isTablet: boolean;\r\n  isiPad: boolean;\r\n  isiPod: boolean;\r\n  isiPhone: boolean;\r\n  isiPhoneNative: boolean;\r\n  isAndroid: boolean;\r\n  isAndroidNative: boolean;\r\n  isBlackberry: boolean;\r\n  isOpera: boolean;\r\n  isIE: boolean;\r\n  isEdge: boolean;\r\n  isIECompatibilityMode: boolean;\r\n  isSafari: boolean;\r\n  isFirefox: boolean;\r\n  isWebkit: boolean;\r\n  isChrome: boolean;\r\n  isKonqueror: boolean;\r\n  isOmniWeb: boolean;\r\n  isSeaMonkey: boolean;\r\n  isFlock: boolean;\r\n  isAmaya: boolean;\r\n  isPhantomJS: boolean;\r\n  isEpiphany: boolean;\r\n  isDesktop: boolean;\r\n  isWindows: boolean;\r\n  isLinux: boolean;\r\n  isLinux64: boolean;\r\n  isMac: boolean;\r\n  isChromeOS: boolean;\r\n  isBada: boolean;\r\n  isSamsung: boolean;\r\n  isRaspberry: boolean;\r\n  isBot: boolean | string;\r\n  isCurl: boolean;\r\n  isAndroidTablet: boolean;\r\n  isWinJs: boolean;\r\n  isKindleFire: boolean;\r\n  isSilk: boolean;\r\n  isCaptive: boolean;\r\n  isSmartTV: boolean;\r\n  isUC: boolean;\r\n  isFacebook: boolean;\r\n  isAlamoFire: boolean;\r\n  isElectron: boolean;\r\n  silkAccelerated: boolean;\r\n  browser: string;\r\n  version: string | number;\r\n  os: string;\r\n  platform: string;\r\n  geoIp: Record<string, string | string[]>;\r\n  source: string;\r\n  isWechat: boolean;\r\n  isWindowsPhone: boolean;\r\n  electronVersion: string;\r\n  SilkAccelerated?: boolean;\r\n}\r\n\r\nexport type HeadersLike = Partial<Record<string, string | string[] | undefined>>;\r\n\r\nconst DEFAULT_AGENT: AgentDetails = {\r\n  isYaBrowser: false,\r\n  isAuthoritative: true,\r\n  isMobile: false,\r\n  isMobileNative: false,\r\n  isTablet: false,\r\n  isiPad: false,\r\n  isiPod: false,\r\n  isiPhone: false,\r\n  isiPhoneNative: false,\r\n  isAndroid: false,\r\n  isAndroidNative: false,\r\n  isBlackberry: false,\r\n  isOpera: false,\r\n  isIE: false,\r\n  isEdge: false,\r\n  isIECompatibilityMode: false,\r\n  isSafari: false,\r\n  isFirefox: false,\r\n  isWebkit: false,\r\n  isChrome: false,\r\n  isKonqueror: false,\r\n  isOmniWeb: false,\r\n  isSeaMonkey: false,\r\n  isFlock: false,\r\n  isAmaya: false,\r\n  isPhantomJS: false,\r\n  isEpiphany: false,\r\n  isDesktop: false,\r\n  isWindows: false,\r\n  isLinux: false,\r\n  isLinux64: false,\r\n  isMac: false,\r\n  isChromeOS: false,\r\n  isBada: false,\r\n  isSamsung: false,\r\n  isRaspberry: false,\r\n  isBot: false,\r\n  isCurl: false,\r\n  isAndroidTablet: false,\r\n  isWinJs: false,\r\n  isKindleFire: false,\r\n  isSilk: false,\r\n  isCaptive: false,\r\n  isSmartTV: false,\r\n  isUC: false,\r\n  isFacebook: false,\r\n  isAlamoFire: false,\r\n  isElectron: false,\r\n  silkAccelerated: false,\r\n  browser: 'unknown',\r\n  version: 'unknown',\r\n  os: 'unknown',\r\n  platform: 'unknown',\r\n  isWechat: false,\r\n  isWindowsPhone: false,\r\n  SilkAccelerated: false,\r\n  geoIp: {},\r\n  source: '',\r\n  electronVersion: '',\r\n};\r\n\r\nfunction createDefaultAgent(): AgentDetails {\r\n  return {\r\n    ...DEFAULT_AGENT,\r\n    geoIp: {},\r\n    source: '',\r\n    electronVersion: '',\r\n  };\r\n}\r\n\r\nexport class UserAgent {\r\n  private readonly versions: Record<string, RegExp> = {\r\n    Edge: /(?:edge|edga|edgios|edg)\\/([\\d\\w.-]+)/i,\r\n    Firefox: /(?:firefox|fxios)\\/([\\d\\w.-]+)/i,\r\n    IE: /msie\\s([\\d.]+[\\d])|trident\\/\\d+\\.\\d+;.*[rv:]+(\\d+\\.\\d)/i,\r\n    Chrome: /(?:chrome|crios)\\/([\\d\\w.-]+)/i,\r\n    Chromium: /chromium\\/([\\d\\w.-]+)/i,\r\n    Safari: /(version|safari)\\/([\\d\\w.-]+)/i,\r\n    Opera: /version\\/([\\d\\w.-]+)|OPR\\/([\\d\\w.-]+)/i,\r\n    Ps3: /([\\d\\w.-]+)\\)\\s*$/i,\r\n    Psp: /([\\d\\w.-]+)\\)?\\s*$/i,\r\n    Amaya: /amaya\\/([\\d\\w.-]+)/i,\r\n    SeaMonkey: /seamonkey\\/([\\d\\w.-]+)/i,\r\n    OmniWeb: /omniweb\\/v([\\d\\w.-]+)/i,\r\n    Flock: /flock\\/([\\d\\w.-]+)/i,\r\n    Epiphany: /epiphany\\/([\\d\\w.-]+)/i,\r\n    WinJs: /msapphost\\/([\\d\\w.-]+)/i,\r\n    PhantomJS: /phantomjs\\/([\\d\\w.-]+)/i,\r\n    AlamoFire: /alamofire\\/([\\d\\w.-]+)/i,\r\n    UC: /ucbrowser\\/([\\d\\w.]+)/i,\r\n    Facebook: /FBAV\\/([\\d\\w.]+)/i,\r\n    WebKit: /applewebkit\\/([\\d\\w.]+)/i,\r\n    Wechat: /micromessenger\\/([\\d\\w.]+)/i,\r\n    Electron: /Electron\\/([\\d\\w.]+)/i,\r\n  };\r\n\r\n  private readonly browsers: Record<string, RegExp> = {\r\n    YaBrowser: /yabrowser/i,\r\n    Edge: /edge|edga|edgios|edg/i,\r\n    Amaya: /amaya/i,\r\n    Konqueror: /konqueror/i,\r\n    Epiphany: /epiphany/i,\r\n    SeaMonkey: /seamonkey/i,\r\n    Flock: /flock/i,\r\n    OmniWeb: /omniweb/i,\r\n    Chromium: /chromium/i,\r\n    Chrome: /chrome|crios/i,\r\n    Safari: /safari/i,\r\n    IE: /msie|trident/i,\r\n    Opera: /opera|OPR\\//i,\r\n    PS3: /playstation 3/i,\r\n    PSP: /playstation portable/i,\r\n    Firefox: /firefox|fxios/i,\r\n    WinJs: /msapphost/i,\r\n    PhantomJS: /phantomjs/i,\r\n    AlamoFire: /alamofire/i,\r\n    UC: /UCBrowser/i,\r\n    Facebook: /FBA[NV]/,\r\n  };\r\n\r\n  private readonly os: Record<string, RegExp> = {\r\n    Windows11: /\\bwindows(?:\\s|_|)11(?:\\.\\d+)?/i,\r\n    Windows10: /windows nt 10\\.0/i,\r\n    Windows81: /windows nt 6\\.3/i,\r\n    Windows8: /windows nt 6\\.2/i,\r\n    Windows7: /windows nt 6\\.1/i,\r\n    UnknownWindows: /windows nt 6\\.\\d+/i,\r\n    WindowsVista: /windows nt 6\\.0/i,\r\n    Windows2003: /windows nt 5\\.2/i,\r\n    WindowsXP: /windows nt 5\\.1/i,\r\n    Windows2000: /windows nt 5\\.0/i,\r\n    WindowsPhone81: /windows phone 8\\.1/i,\r\n    WindowsPhone80: /windows phone 8\\.0/i,\r\n    OSXCheetah: /os x 10[._]0/i,\r\n    OSXPuma: /os x 10[._]1(\\D|$)/i,\r\n    OSXJaguar: /os x 10[._]2/i,\r\n    OSXPanther: /os x 10[._]3/i,\r\n    OSXTiger: /os x 10[._]4/i,\r\n    OSXLeopard: /os x 10[._]5/i,\r\n    OSXSnowLeopard: /os x 10[._]6/i,\r\n    OSXLion: /os x 10[._]7/i,\r\n    OSXMountainLion: /os x 10[._]8/i,\r\n    OSXMavericks: /os x 10[._]9/i,\r\n    OSXYosemite: /os x 10[._]10/i,\r\n    OSXElCapitan: /os x 10[._]11/i,\r\n    MacOSSierra: /os x 10[._]12/i,\r\n    MacOSHighSierra: /os x 10[._]13/i,\r\n    MacOSMojave: /os x 10[._]14/i,\r\n    MacOSCatalina: /os x 10[._]15/i,\r\n    MacOSBigSur: /(mac os x 10[._]16(?:[._]\\d+)?|mac os (?:x )?11[._]\\d+)/i,\r\n    MacOSMonterey: /mac os (?:x )?12[._]\\d+/i,\r\n    MacOSVentura: /mac os (?:x )?13[._]\\d+/i,\r\n    MacOSSonoma: /mac os (?:x )?14[._]\\d+/i,\r\n    MacOSSequoia: /mac os (?:x )?15[._]\\d+/i,\r\n    MacOSTahoe: /mac os (?:x )?26[._]\\d+/i,\r\n    Mac: /os x/i,\r\n    Linux: /linux/i,\r\n    Linux64: /linux x86_64/i,\r\n    ChromeOS: /cros/i,\r\n    Wii: /wii/i,\r\n    PS3: /playstation 3/i,\r\n    PSP: /playstation portable/i,\r\n    iPad: /\\(iPad.*os (\\d+)[._](\\d+)/i,\r\n    iPhone: /\\(iPhone.*os (\\d+)[._](\\d+)/i,\r\n    iOS: /ios/i,\r\n    Bada: /Bada\\/(\\d+)\\.(\\d+)/i,\r\n    Curl: /curl\\/(\\d+)\\.(\\d+)\\.(\\d+)/i,\r\n    Electron: /Electron\\/(\\d+)\\.(\\d+)\\.(\\d+)/i,\r\n  };\r\n\r\n  private readonly platform: Record<string, RegExp> = {\r\n    Windows: /windows nt/i,\r\n    WindowsPhone: /windows phone/i,\r\n    Mac: /macintosh/i,\r\n    Linux: /linux/i,\r\n    Wii: /wii/i,\r\n    Playstation: /playstation/i,\r\n    iPad: /ipad/i,\r\n    iPod: /ipod/i,\r\n    iPhone: /iphone/i,\r\n    Android: /android/i,\r\n    Blackberry: /blackberry/i,\r\n    Samsung: /samsung/i,\r\n    Curl: /curl/i,\r\n    Electron: /Electron/i,\r\n    iOS: /^ios-/i,\r\n  };\r\n\r\n  public Agent: AgentDetails;\r\n\r\n  constructor() {\r\n    this.Agent = createDefaultAgent();\r\n  }\r\n\r\n  public reset(): this {\r\n    this.Agent = createDefaultAgent();\r\n    return this;\r\n  }\r\n\r\n  public testNginxGeoIP(headers: HeadersLike | IncomingHttpHeaders): this {\r\n    Object.entries(headers ?? {}).forEach(([key, value]) => {\r\n      if (/^GEOIP/i.test(key) && value !== undefined) {\r\n        this.Agent.geoIp[key] = Array.isArray(value) ? value.join(',') : value;\r\n      }\r\n    });\r\n    return this;\r\n  }\r\n\r\n  public testBot(): void {\r\n    const source = this.Agent.source.toLowerCase();\r\n    const match = IS_BOT_REGEXP.exec(source);\r\n\r\n    if (match) {\r\n      const botIdentifier = match[1];\r\n\r\n      // Handle false positives - TikTok WebView contains \"googleplay\" but isn't a bot\r\n      if (\r\n        botIdentifier === 'google' &&\r\n        (source.includes('tiktok') || source.includes('trill') || source.includes('bytedance'))\r\n      ) {\r\n        this.Agent.isBot = false;\r\n        return;\r\n      }\r\n\r\n      // Special case for Google Insights - keep the string return for backward compatibility\r\n      if (botIdentifier === 'insights') {\r\n        this.Agent.isBot = botIdentifier;\r\n      } else {\r\n        // For all other bots, return boolean true (fixes issues #168, #138)\r\n        this.Agent.isBot = true;\r\n      }\r\n    } else if (!this.Agent.isAuthoritative) {\r\n      this.Agent.isBot = /bot/i.test(this.Agent.source);\r\n    } else {\r\n      this.Agent.isBot = false;\r\n    }\r\n  }\r\n\r\n  public testSmartTV(): void {\r\n    this.Agent.isSmartTV = SMART_TV_REGEXP.test(this.Agent.source.toLowerCase());\r\n  }\r\n\r\n  public testMobile(): void {\r\n    if (this.Agent.isWindows || this.Agent.isLinux || this.Agent.isMac || this.Agent.isChromeOS) {\r\n      this.Agent.isDesktop = true;\r\n    } else if (this.Agent.isAndroid || this.Agent.isSamsung) {\r\n      this.Agent.isMobile = true;\r\n    }\r\n\r\n    if (\r\n      this.Agent.isiPad ||\r\n      this.Agent.isiPod ||\r\n      this.Agent.isiPhone ||\r\n      this.Agent.isBada ||\r\n      this.Agent.isBlackberry ||\r\n      this.Agent.isAndroid ||\r\n      this.Agent.isWindowsPhone\r\n    ) {\r\n      this.Agent.isMobile = true;\r\n      this.Agent.isDesktop = false;\r\n    }\r\n\r\n    if (MOBILE_REGEXP.test(this.Agent.source)) {\r\n      this.Agent.isMobile = true;\r\n      this.Agent.isDesktop = false;\r\n    }\r\n\r\n    if (DALVIK_REGEXP.test(this.Agent.source)) {\r\n      this.Agent.isAndroidNative = true;\r\n      this.Agent.isMobileNative = true;\r\n    }\r\n\r\n    if (IOS_SCALE_REGEXP.test(this.Agent.source)) {\r\n      this.Agent.isiPhoneNative = true;\r\n      this.Agent.isMobileNative = true;\r\n    }\r\n  }\r\n\r\n  public testAndroidTablet(): void {\r\n    if (this.Agent.isAndroid && !ANDROID_TABLET_REGEXP.test(this.Agent.source)) {\r\n      this.Agent.isAndroidTablet = true;\r\n    }\r\n  }\r\n\r\n  public testTablet(): void {\r\n    if (this.Agent.isiPad || this.Agent.isAndroidTablet || this.Agent.isKindleFire) {\r\n      this.Agent.isTablet = true;\r\n    }\r\n\r\n    if (/tablet/i.test(this.Agent.source)) {\r\n      this.Agent.isTablet = true;\r\n    }\r\n  }\r\n\r\n  public testCompatibilityMode(): void {\r\n    if (!this.Agent.isIE) {\r\n      return;\r\n    }\r\n\r\n    const tridentMatch = /Trident\\/(\\d)\\.0/i.exec(this.Agent.source);\r\n    if (!tridentMatch) {\r\n      return;\r\n    }\r\n\r\n    const tridentVersion = parseInt(tridentMatch[1], 10);\r\n    const version = parseInt(String(this.Agent.version), 10);\r\n\r\n    if (version === 7 && tridentVersion === 7) {\r\n      this.Agent.isIECompatibilityMode = true;\r\n      this.Agent.version = '11.0';\r\n    }\r\n    if (version === 7 && tridentVersion === 6) {\r\n      this.Agent.isIECompatibilityMode = true;\r\n      this.Agent.version = '10.0';\r\n    }\r\n    if (version === 7 && tridentVersion === 5) {\r\n      this.Agent.isIECompatibilityMode = true;\r\n      this.Agent.version = '9.0';\r\n    }\r\n    if (version === 7 && tridentVersion === 4) {\r\n      this.Agent.isIECompatibilityMode = true;\r\n      this.Agent.version = '8.0';\r\n    }\r\n  }\r\n\r\n  public testSilk(): string | false {\r\n    if (SILK_REGEXP.test(this.Agent.source)) {\r\n      this.Agent.isSilk = true;\r\n    }\r\n\r\n    if (SILK_ACCELERATED_REGEXP.test(this.Agent.source)) {\r\n      this.Agent.silkAccelerated = true;\r\n      this.Agent.SilkAccelerated = true;\r\n    }\r\n\r\n    return this.Agent.isSilk ? 'Silk' : false;\r\n  }\r\n\r\n  public testKindleFire(): string | false {\r\n    const { source } = this.Agent;\r\n    if (/KFOT/gi.test(source)) {\r\n      this.Agent.isKindleFire = true;\r\n      return 'Kindle Fire';\r\n    }\r\n    if (/KFTT/gi.test(source)) {\r\n      this.Agent.isKindleFire = true;\r\n      return 'Kindle Fire HD';\r\n    }\r\n    if (/KFJWI/gi.test(source)) {\r\n      this.Agent.isKindleFire = true;\r\n      return 'Kindle Fire HD 8.9';\r\n    }\r\n    if (/KFJWA/gi.test(source)) {\r\n      this.Agent.isKindleFire = true;\r\n      return 'Kindle Fire HD 8.9 4G';\r\n    }\r\n    if (/KFSOWI/gi.test(source)) {\r\n      this.Agent.isKindleFire = true;\r\n      return 'Kindle Fire HD 7';\r\n    }\r\n    if (/KFTHWI/gi.test(source)) {\r\n      this.Agent.isKindleFire = true;\r\n      return 'Kindle Fire HDX 7';\r\n    }\r\n    if (/KFTHWA/gi.test(source)) {\r\n      this.Agent.isKindleFire = true;\r\n      return 'Kindle Fire HDX 7 4G';\r\n    }\r\n    if (/KFAPWI/gi.test(source)) {\r\n      this.Agent.isKindleFire = true;\r\n      return 'Kindle Fire HDX 8.9';\r\n    }\r\n    if (/KFAPWA/gi.test(source)) {\r\n      this.Agent.isKindleFire = true;\r\n      return 'Kindle Fire HDX 8.9 4G';\r\n    }\r\n    return false;\r\n  }\r\n\r\n  public testCaptiveNetwork(): string | false {\r\n    if (/CaptiveNetwork/gi.test(this.Agent.source)) {\r\n      this.Agent.isCaptive = true;\r\n      this.Agent.isMac = true;\r\n      this.Agent.platform = 'Apple Mac';\r\n      return 'CaptiveNetwork';\r\n    }\r\n    return false;\r\n  }\r\n\r\n  public testWebkit(): void {\r\n    if (this.Agent.browser === 'unknown' && WEBKIT_REGEXP.test(this.Agent.source)) {\r\n      this.Agent.browser = 'Apple WebKit';\r\n      this.Agent.isWebkit = true;\r\n    }\r\n  }\r\n\r\n  public testWechat(): void {\r\n    if (WECHAT_REGEXP.test(this.Agent.source)) {\r\n      this.Agent.isWechat = true;\r\n      this.Agent.version = this.getWechatVersion(this.Agent.source);\r\n    }\r\n  }\r\n\r\n  public parse(source: string): AgentDetails {\r\n    return new UserAgent().hydrate(source).Agent;\r\n  }\r\n\r\n  public hydrate(source: string): this {\r\n    this.Agent = createDefaultAgent();\r\n    this.Agent.source = source.trim();\r\n    this.Agent.os = this.getOS(this.Agent.source);\r\n    this.Agent.platform = this.getPlatform(this.Agent.source);\r\n    this.Agent.browser = this.getBrowser(this.Agent.source);\r\n    this.Agent.version = this.getBrowserVersion(this.Agent.source);\r\n    this.Agent.electronVersion = this.getElectronVersion(this.Agent.source);\r\n    this.testBot();\r\n    this.testSmartTV();\r\n    this.testMobile();\r\n    this.testAndroidTablet();\r\n    this.testTablet();\r\n    this.testCompatibilityMode();\r\n    this.testSilk();\r\n    this.testKindleFire();\r\n    this.testCaptiveNetwork();\r\n    this.testWebkit();\r\n    this.testWechat();\r\n    return this;\r\n  }\r\n\r\n  private getBrowser(string: string): string {\r\n    const agent = this.Agent;\r\n    if (this.browsers.YaBrowser.test(string)) {\r\n      agent.isYaBrowser = true;\r\n      return 'YaBrowser';\r\n    }\r\n    if (this.browsers.AlamoFire.test(string)) {\r\n      agent.isAlamoFire = true;\r\n      return 'AlamoFire';\r\n    }\r\n    if (this.browsers.Edge.test(string)) {\r\n      agent.isEdge = true;\r\n      return 'Edge';\r\n    }\r\n    if (this.browsers.PhantomJS.test(string)) {\r\n      agent.isPhantomJS = true;\r\n      return 'PhantomJS';\r\n    }\r\n    if (this.browsers.Konqueror.test(string)) {\r\n      agent.isKonqueror = true;\r\n      return 'Konqueror';\r\n    }\r\n    if (this.browsers.Amaya.test(string)) {\r\n      agent.isAmaya = true;\r\n      return 'Amaya';\r\n    }\r\n    if (this.browsers.Epiphany.test(string)) {\r\n      agent.isEpiphany = true;\r\n      return 'Epiphany';\r\n    }\r\n    if (this.browsers.SeaMonkey.test(string)) {\r\n      agent.isSeaMonkey = true;\r\n      return 'SeaMonkey';\r\n    }\r\n    if (this.browsers.Flock.test(string)) {\r\n      agent.isFlock = true;\r\n      return 'Flock';\r\n    }\r\n    if (this.browsers.OmniWeb.test(string)) {\r\n      agent.isOmniWeb = true;\r\n      return 'OmniWeb';\r\n    }\r\n    if (this.browsers.Opera.test(string)) {\r\n      agent.isOpera = true;\r\n      return 'Opera';\r\n    }\r\n    if (this.browsers.Chromium.test(string)) {\r\n      agent.isChrome = true;\r\n      return 'Chromium';\r\n    }\r\n    if (this.browsers.Facebook.test(string)) {\r\n      agent.isFacebook = true;\r\n      return 'Facebook';\r\n    }\r\n    if (this.browsers.Chrome.test(string)) {\r\n      agent.isChrome = true;\r\n      return 'Chrome';\r\n    }\r\n    if (this.browsers.WinJs.test(string)) {\r\n      agent.isWinJs = true;\r\n      return 'WinJs';\r\n    }\r\n    if (this.browsers.IE.test(string)) {\r\n      agent.isIE = true;\r\n      return 'IE';\r\n    }\r\n    if (this.browsers.Firefox.test(string)) {\r\n      agent.isFirefox = true;\r\n      return 'Firefox';\r\n    }\r\n    if (this.browsers.Safari.test(string)) {\r\n      agent.isSafari = true;\r\n      return 'Safari';\r\n    }\r\n    if (this.browsers.PS3.test(string)) {\r\n      return 'ps3';\r\n    }\r\n    if (this.browsers.PSP.test(string)) {\r\n      return 'psp';\r\n    }\r\n    if (this.browsers.UC.test(string)) {\r\n      agent.isUC = true;\r\n      return 'UCBrowser';\r\n    }\r\n\r\n    if (string.includes('Dalvik')) {\r\n      return 'unknown';\r\n    }\r\n\r\n    if (!string.startsWith('Mozilla')) {\r\n      const guess = /^([\\d\\w.-]+)\\/[\\d\\w.-]+/i.exec(string);\r\n      if (guess) {\r\n        agent.isAuthoritative = false;\r\n        return guess[1];\r\n      }\r\n    }\r\n\r\n    return 'unknown';\r\n  }\r\n\r\n  private getBrowserVersion(string: string): string {\r\n    const agent = this.Agent;\r\n    const browser = agent.browser;\r\n\r\n    const match = (exp: RegExp, index = 1) => {\r\n      const result = string.match(exp);\r\n      return result ? (result[index] ?? result[1] ?? 'unknown') : null;\r\n    };\r\n\r\n    switch (browser) {\r\n      case 'Edge':\r\n        return match(this.versions.Edge) ?? 'unknown';\r\n      case 'PhantomJS':\r\n        return match(this.versions.PhantomJS) ?? 'unknown';\r\n      case 'Chrome':\r\n        return match(this.versions.Chrome) ?? 'unknown';\r\n      case 'Chromium':\r\n        return match(this.versions.Chromium) ?? 'unknown';\r\n      case 'Safari':\r\n        return match(this.versions.Safari, 2) ?? 'unknown';\r\n      case 'Opera': {\r\n        const operaMatch = string.match(this.versions.Opera);\r\n        if (operaMatch) {\r\n          return operaMatch[1] || operaMatch[2] || 'unknown';\r\n        }\r\n        return 'unknown';\r\n      }\r\n      case 'Firefox':\r\n        return match(this.versions.Firefox) ?? 'unknown';\r\n      case 'WinJs':\r\n        return match(this.versions.WinJs) ?? 'unknown';\r\n      case 'IE': {\r\n        const ieMatch = string.match(this.versions.IE);\r\n        if (ieMatch) {\r\n          return ieMatch[2] ?? ieMatch[1] ?? 'unknown';\r\n        }\r\n        return 'unknown';\r\n      }\r\n      case 'ps3':\r\n        return match(this.versions.Ps3) ?? 'unknown';\r\n      case 'psp':\r\n        return match(this.versions.Psp) ?? 'unknown';\r\n      case 'Amaya':\r\n        return match(this.versions.Amaya) ?? 'unknown';\r\n      case 'Epiphany':\r\n        return match(this.versions.Epiphany) ?? 'unknown';\r\n      case 'SeaMonkey':\r\n        return match(this.versions.SeaMonkey) ?? 'unknown';\r\n      case 'Flock':\r\n        return match(this.versions.Flock) ?? 'unknown';\r\n      case 'OmniWeb':\r\n        return match(this.versions.OmniWeb) ?? 'unknown';\r\n      case 'UCBrowser':\r\n        return match(this.versions.UC) ?? 'unknown';\r\n      case 'Facebook':\r\n        return match(this.versions.Facebook) ?? 'unknown';\r\n      default:\r\n        if (browser !== 'unknown') {\r\n          const regex = new RegExp(`${browser}[\\\\/ ]([\\\\d\\\\w.\\\\-]+)`, 'i');\r\n          const genericMatch = string.match(regex);\r\n          if (genericMatch) {\r\n            return genericMatch[1];\r\n          }\r\n        } else {\r\n          this.testWebkit();\r\n          if (this.Agent.isWebkit) {\r\n            const webkitMatch = string.match(this.versions.WebKit);\r\n            if (webkitMatch) {\r\n              return webkitMatch[1];\r\n            }\r\n          }\r\n        }\r\n    }\r\n\r\n    return 'unknown';\r\n  }\r\n\r\n  private getWechatVersion(string: string): string {\r\n    const match = string.match(this.versions.Wechat);\r\n    return match ? match[1] : 'unknown';\r\n  }\r\n\r\n  private getElectronVersion(string: string): string {\r\n    const match = string.match(this.versions.Electron);\r\n    if (match) {\r\n      this.Agent.isElectron = true;\r\n      return match[1];\r\n    }\r\n    return '';\r\n  }\r\n\r\n  private getOS(string: string): string {\r\n    if (this.os.WindowsVista.test(string)) {\r\n      this.Agent.isWindows = true;\r\n      return 'Windows Vista';\r\n    }\r\n    if (this.os.Windows7.test(string)) {\r\n      this.Agent.isWindows = true;\r\n      return 'Windows 7';\r\n    }\r\n    if (this.os.Windows8.test(string)) {\r\n      this.Agent.isWindows = true;\r\n      return 'Windows 8';\r\n    }\r\n    if (this.os.Windows81.test(string)) {\r\n      this.Agent.isWindows = true;\r\n      return 'Windows 8.1';\r\n    }\r\n    if (this.os.Windows11.test(string)) {\r\n      this.Agent.isWindows = true;\r\n      return 'Windows 11';\r\n    }\r\n    if (this.os.Windows10.test(string)) {\r\n      this.Agent.isWindows = true;\r\n      return 'Windows 10.0';\r\n    }\r\n    if (this.os.Windows2003.test(string)) {\r\n      this.Agent.isWindows = true;\r\n      return 'Windows 2003';\r\n    }\r\n    if (this.os.WindowsXP.test(string)) {\r\n      this.Agent.isWindows = true;\r\n      return 'Windows XP';\r\n    }\r\n    if (this.os.Windows2000.test(string)) {\r\n      this.Agent.isWindows = true;\r\n      return 'Windows 2000';\r\n    }\r\n    if (this.os.WindowsPhone81.test(string)) {\r\n      this.Agent.isWindowsPhone = true;\r\n      return 'Windows Phone 8.1';\r\n    }\r\n    if (this.os.WindowsPhone80.test(string)) {\r\n      this.Agent.isWindowsPhone = true;\r\n      return 'Windows Phone 8.0';\r\n    }\r\n    if (this.os.Linux64.test(string)) {\r\n      this.Agent.isLinux = true;\r\n      this.Agent.isLinux64 = true;\r\n      return 'Linux 64';\r\n    }\r\n    if (this.os.Linux.test(string)) {\r\n      this.Agent.isLinux = true;\r\n      return 'Linux';\r\n    }\r\n    if (this.os.ChromeOS.test(string)) {\r\n      this.Agent.isChromeOS = true;\r\n      return 'Chrome OS';\r\n    }\r\n    if (this.os.Wii.test(string)) {\r\n      return 'Wii';\r\n    }\r\n    if (this.os.PS3.test(string)) {\r\n      return 'Playstation';\r\n    }\r\n    if (this.os.PSP.test(string)) {\r\n      return 'Playstation';\r\n    }\r\n    if (this.os.OSXCheetah.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'OS X Cheetah';\r\n    }\r\n    if (this.os.OSXPuma.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'OS X Puma';\r\n    }\r\n    if (this.os.OSXJaguar.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'OS X Jaguar';\r\n    }\r\n    if (this.os.OSXPanther.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'OS X Panther';\r\n    }\r\n    if (this.os.OSXTiger.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'OS X Tiger';\r\n    }\r\n    if (this.os.OSXLeopard.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'OS X Leopard';\r\n    }\r\n    if (this.os.OSXSnowLeopard.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'OS X Snow Leopard';\r\n    }\r\n    if (this.os.OSXLion.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'OS X Lion';\r\n    }\r\n    if (this.os.OSXMountainLion.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'OS X Mountain Lion';\r\n    }\r\n    if (this.os.OSXMavericks.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'OS X Mavericks';\r\n    }\r\n    if (this.os.OSXYosemite.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'OS X Yosemite';\r\n    }\r\n    if (this.os.OSXElCapitan.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'OS X El Capitan';\r\n    }\r\n    if (this.os.MacOSSierra.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'macOS Sierra';\r\n    }\r\n    if (this.os.MacOSHighSierra.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'macOS High Sierra';\r\n    }\r\n    if (this.os.MacOSMojave.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'macOS Mojave';\r\n    }\r\n    if (this.os.MacOSCatalina.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'macOS Catalina';\r\n    }\r\n    if (this.os.MacOSBigSur.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'macOS Big Sur';\r\n    }\r\n    if (this.os.MacOSMonterey.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'macOS Monterey';\r\n    }\r\n    if (this.os.MacOSVentura.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'macOS Ventura';\r\n    }\r\n    if (this.os.MacOSSonoma.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'macOS Sonoma';\r\n    }\r\n    if (this.os.MacOSSequoia.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'macOS Sequoia';\r\n    }\r\n    if (this.os.MacOSTahoe.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'macOS Tahoe';\r\n    }\r\n    if (this.os.Mac.test(string)) {\r\n      this.Agent.isMac = true;\r\n      return 'OS X';\r\n    }\r\n    const iPadMatch = string.match(this.os.iPad);\r\n    if (iPadMatch) {\r\n      this.Agent.isiPad = true;\r\n      return iPadMatch[0].replace('_', '.');\r\n    }\r\n    const iPhoneMatch = string.match(this.os.iPhone);\r\n    if (iPhoneMatch) {\r\n      this.Agent.isiPhone = true;\r\n      return iPhoneMatch[0].replace('_', '.');\r\n    }\r\n    if (this.os.Bada.test(string)) {\r\n      this.Agent.isBada = true;\r\n      return 'Bada';\r\n    }\r\n    if (this.os.Curl.test(string)) {\r\n      this.Agent.isCurl = true;\r\n      return 'Curl';\r\n    }\r\n    if (this.os.iOS.test(string)) {\r\n      this.Agent.isiPhone = true;\r\n      return 'iOS';\r\n    }\r\n    if (this.os.Electron.test(string)) {\r\n      this.Agent.isElectron = true;\r\n      return 'Electron';\r\n    }\r\n    return 'unknown';\r\n  }\r\n\r\n  private getPlatform(string: string): string {\r\n    if (this.platform.Windows.test(string)) {\r\n      return 'Microsoft Windows';\r\n    }\r\n    if (this.platform.WindowsPhone.test(string)) {\r\n      this.Agent.isWindowsPhone = true;\r\n      return 'Microsoft Windows Phone';\r\n    }\r\n    if (this.platform.Mac.test(string)) {\r\n      return 'Apple Mac';\r\n    }\r\n    if (this.platform.Curl.test(string)) {\r\n      return 'Curl';\r\n    }\r\n    if (this.platform.Electron.test(string)) {\r\n      this.Agent.isElectron = true;\r\n      return 'Electron';\r\n    }\r\n    if (this.platform.Android.test(string)) {\r\n      this.Agent.isAndroid = true;\r\n      return 'Android';\r\n    }\r\n    if (this.platform.Blackberry.test(string)) {\r\n      this.Agent.isBlackberry = true;\r\n      return 'Blackberry';\r\n    }\r\n    if (this.platform.Linux.test(string)) {\r\n      return 'Linux';\r\n    }\r\n    if (this.platform.Wii.test(string)) {\r\n      return 'Wii';\r\n    }\r\n    if (this.platform.Playstation.test(string)) {\r\n      return 'Playstation';\r\n    }\r\n    if (this.platform.iPad.test(string)) {\r\n      this.Agent.isiPad = true;\r\n      return 'iPad';\r\n    }\r\n    if (this.platform.iPod.test(string)) {\r\n      this.Agent.isiPod = true;\r\n      return 'iPod';\r\n    }\r\n    if (this.platform.iPhone.test(string)) {\r\n      this.Agent.isiPhone = true;\r\n      return 'iPhone';\r\n    }\r\n    if (this.platform.Samsung.test(string)) {\r\n      this.Agent.isSamsung = true;\r\n      return 'Samsung';\r\n    }\r\n    if (this.platform.iOS.test(string)) {\r\n      return 'Apple iOS';\r\n    }\r\n    return 'unknown';\r\n  }\r\n}\r\n"],"mappings":"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","names":[]}