{"version":3,"file":"userAgentPlatform-browser.mjs","sourceRoot":"","sources":["../../../src/util/userAgentPlatform-browser.mts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAkClC;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,SAAS,cAAc,CAAC,SAAiB;IACvC,MAAM,cAAc,GAAG;QACrB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,mBAAmB,EAAE;QAC/C,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,2BAA2B,EAAE;KACvD,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAsB;IACnD,MAAM,UAAU,GAAG,CAAC,eAAe,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IACrF,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QACzD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,GAAwB;IACpE,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC;IACjC,IAAI,MAAM,GAAG,SAAS,CAAC;IAEvB,IAAI,GAAG,EAAE,aAAa,EAAE,CAAC;QACvB,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,oBAAoB,CAAC;YACjE,cAAc;YACd,iBAAiB;SAClB,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,IAAI,aAAa,CAAC,eAAe,KAAK,aAAa,CAAC,YAAY,EAAE,CAAC;QAErG,MAAM,KAAK,GAAG,qBAAqB,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9D,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,OAAO,KAAK,MAAM,GAAG,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;SAAM,IAAI,GAAG,EAAE,QAAQ,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC;QACtB,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,OAAO,KAAK,MAAM,GAAG,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC3C,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,WAAW,KAAK,MAAM,GAAG,CAAC,CAAC;IACvD,CAAC;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\ninterface BrowserBrand {\n  brand: string;\n  version: string;\n}\n\ninterface UserAgentData {\n  brands: BrowserBrand[];\n  mobile: boolean;\n  platform?: string;\n  getHighEntropyValues: (hints: string[]) => Promise<{\n    architecture: string;\n    bitness: string;\n    brands: BrowserBrand[];\n    formFactor: string;\n    fullVersionList: BrowserBrand[];\n    mobile: boolean;\n    model: string;\n    platform: string;\n    platformVersion: string;\n    wow64: boolean;\n  }>;\n}\n\ndeclare global {\n  interface Navigator {\n    userAgentData?: UserAgentData;\n  }\n\n  // Vercel Edge Runtime global\n  var EdgeRuntime: string | undefined;\n}\n\n/**\n * @internal\n */\nexport function getHeaderName(): string {\n  return \"x-ms-useragent\";\n}\n\nfunction getBrowserInfo(userAgent: string): BrowserBrand | undefined {\n  const browserRegexes = [\n    { name: \"Firefox\", regex: /Firefox\\/([\\d.]+)/ },\n    { name: \"Safari\", regex: /Version\\/([\\d.]+).*Safari/ },\n  ];\n\n  for (const browser of browserRegexes) {\n    const match = userAgent.match(browser.regex);\n    if (match) {\n      return { brand: browser.name, version: match[1] };\n    }\n  }\n\n  return undefined;\n}\n\nfunction getBrandVersionString(brands: BrowserBrand[]): BrowserBrand | undefined {\n  const brandOrder = [\"Google Chrome\", \"Microsoft Edge\", \"Opera\", \"Brave\", \"Chromium\"];\n  for (const brand of brandOrder) {\n    const foundBrand = brands.find((b) => b.brand === brand);\n    if (foundBrand) {\n      return foundBrand;\n    }\n  }\n  return undefined;\n}\n\n/**\n * @internal\n */\nexport async function setPlatformSpecificData(map: Map<string, string>): Promise<void> {\n  const nav = globalThis.navigator;\n  let osInfo = \"unknown\";\n\n  if (nav?.userAgentData) {\n    const entropyValues = await nav.userAgentData.getHighEntropyValues([\n      \"architecture\",\n      \"platformVersion\",\n    ]);\n    osInfo = `${entropyValues.platform} ${entropyValues.platformVersion}; ${entropyValues.architecture}`;\n\n    const brand = getBrandVersionString(nav.userAgentData.brands);\n    if (brand) {\n      map.set(brand.brand, `${brand.version} (${osInfo})`);\n    }\n  } else if (nav?.platform) {\n    osInfo = nav.platform;\n    const brand = getBrowserInfo(nav.userAgent);\n    if (brand) {\n      map.set(brand.brand, `${brand.version} (${osInfo})`);\n    }\n  } else if (typeof EdgeRuntime === \"string\") {\n    map.set(\"EdgeRuntime\", `${EdgeRuntime} (${osInfo})`);\n  }\n}\n"]}