tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

Device.ts (47514B)


      1 /**
      2 * @license
      3 * Copyright 2017 Google Inc.
      4 * SPDX-License-Identifier: Apache-2.0
      5 */
      6 
      7 import type {Viewport} from './Viewport.js';
      8 
      9 /**
     10 * @public
     11 */
     12 export interface Device {
     13  userAgent: string;
     14  viewport: Viewport;
     15 }
     16 
     17 const knownDevices = [
     18  {
     19    name: 'Blackberry PlayBook',
     20    userAgent:
     21      'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+',
     22    viewport: {
     23      width: 600,
     24      height: 1024,
     25      deviceScaleFactor: 1,
     26      isMobile: true,
     27      hasTouch: true,
     28      isLandscape: false,
     29    },
     30  },
     31  {
     32    name: 'Blackberry PlayBook landscape',
     33    userAgent:
     34      'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+',
     35    viewport: {
     36      width: 1024,
     37      height: 600,
     38      deviceScaleFactor: 1,
     39      isMobile: true,
     40      hasTouch: true,
     41      isLandscape: true,
     42    },
     43  },
     44  {
     45    name: 'BlackBerry Z30',
     46    userAgent:
     47      'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+',
     48    viewport: {
     49      width: 360,
     50      height: 640,
     51      deviceScaleFactor: 2,
     52      isMobile: true,
     53      hasTouch: true,
     54      isLandscape: false,
     55    },
     56  },
     57  {
     58    name: 'BlackBerry Z30 landscape',
     59    userAgent:
     60      'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+',
     61    viewport: {
     62      width: 640,
     63      height: 360,
     64      deviceScaleFactor: 2,
     65      isMobile: true,
     66      hasTouch: true,
     67      isLandscape: true,
     68    },
     69  },
     70  {
     71    name: 'Galaxy Note 3',
     72    userAgent:
     73      'Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
     74    viewport: {
     75      width: 360,
     76      height: 640,
     77      deviceScaleFactor: 3,
     78      isMobile: true,
     79      hasTouch: true,
     80      isLandscape: false,
     81    },
     82  },
     83  {
     84    name: 'Galaxy Note 3 landscape',
     85    userAgent:
     86      'Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
     87    viewport: {
     88      width: 640,
     89      height: 360,
     90      deviceScaleFactor: 3,
     91      isMobile: true,
     92      hasTouch: true,
     93      isLandscape: true,
     94    },
     95  },
     96  {
     97    name: 'Galaxy Note II',
     98    userAgent:
     99      'Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
    100    viewport: {
    101      width: 360,
    102      height: 640,
    103      deviceScaleFactor: 2,
    104      isMobile: true,
    105      hasTouch: true,
    106      isLandscape: false,
    107    },
    108  },
    109  {
    110    name: 'Galaxy Note II landscape',
    111    userAgent:
    112      'Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
    113    viewport: {
    114      width: 640,
    115      height: 360,
    116      deviceScaleFactor: 2,
    117      isMobile: true,
    118      hasTouch: true,
    119      isLandscape: true,
    120    },
    121  },
    122  {
    123    name: 'Galaxy S III',
    124    userAgent:
    125      'Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
    126    viewport: {
    127      width: 360,
    128      height: 640,
    129      deviceScaleFactor: 2,
    130      isMobile: true,
    131      hasTouch: true,
    132      isLandscape: false,
    133    },
    134  },
    135  {
    136    name: 'Galaxy S III landscape',
    137    userAgent:
    138      'Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
    139    viewport: {
    140      width: 640,
    141      height: 360,
    142      deviceScaleFactor: 2,
    143      isMobile: true,
    144      hasTouch: true,
    145      isLandscape: true,
    146    },
    147  },
    148  {
    149    name: 'Galaxy S5',
    150    userAgent:
    151      'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',
    152    viewport: {
    153      width: 360,
    154      height: 640,
    155      deviceScaleFactor: 3,
    156      isMobile: true,
    157      hasTouch: true,
    158      isLandscape: false,
    159    },
    160  },
    161  {
    162    name: 'Galaxy S5 landscape',
    163    userAgent:
    164      'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',
    165    viewport: {
    166      width: 640,
    167      height: 360,
    168      deviceScaleFactor: 3,
    169      isMobile: true,
    170      hasTouch: true,
    171      isLandscape: true,
    172    },
    173  },
    174  {
    175    name: 'Galaxy S8',
    176    userAgent:
    177      'Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36',
    178    viewport: {
    179      width: 360,
    180      height: 740,
    181      deviceScaleFactor: 3,
    182      isMobile: true,
    183      hasTouch: true,
    184      isLandscape: false,
    185    },
    186  },
    187  {
    188    name: 'Galaxy S8 landscape',
    189    userAgent:
    190      'Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36',
    191    viewport: {
    192      width: 740,
    193      height: 360,
    194      deviceScaleFactor: 3,
    195      isMobile: true,
    196      hasTouch: true,
    197      isLandscape: true,
    198    },
    199  },
    200  {
    201    name: 'Galaxy S9+',
    202    userAgent:
    203      'Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36',
    204    viewport: {
    205      width: 320,
    206      height: 658,
    207      deviceScaleFactor: 4.5,
    208      isMobile: true,
    209      hasTouch: true,
    210      isLandscape: false,
    211    },
    212  },
    213  {
    214    name: 'Galaxy S9+ landscape',
    215    userAgent:
    216      'Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36',
    217    viewport: {
    218      width: 658,
    219      height: 320,
    220      deviceScaleFactor: 4.5,
    221      isMobile: true,
    222      hasTouch: true,
    223      isLandscape: true,
    224    },
    225  },
    226  {
    227    name: 'Galaxy Tab S4',
    228    userAgent:
    229      'Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Safari/537.36',
    230    viewport: {
    231      width: 712,
    232      height: 1138,
    233      deviceScaleFactor: 2.25,
    234      isMobile: true,
    235      hasTouch: true,
    236      isLandscape: false,
    237    },
    238  },
    239  {
    240    name: 'Galaxy Tab S4 landscape',
    241    userAgent:
    242      'Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Safari/537.36',
    243    viewport: {
    244      width: 1138,
    245      height: 712,
    246      deviceScaleFactor: 2.25,
    247      isMobile: true,
    248      hasTouch: true,
    249      isLandscape: true,
    250    },
    251  },
    252  {
    253    name: 'iPad',
    254    userAgent:
    255      'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
    256    viewport: {
    257      width: 768,
    258      height: 1024,
    259      deviceScaleFactor: 2,
    260      isMobile: true,
    261      hasTouch: true,
    262      isLandscape: false,
    263    },
    264  },
    265  {
    266    name: 'iPad landscape',
    267    userAgent:
    268      'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
    269    viewport: {
    270      width: 1024,
    271      height: 768,
    272      deviceScaleFactor: 2,
    273      isMobile: true,
    274      hasTouch: true,
    275      isLandscape: true,
    276    },
    277  },
    278  {
    279    name: 'iPad (gen 6)',
    280    userAgent:
    281      'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    282    viewport: {
    283      width: 768,
    284      height: 1024,
    285      deviceScaleFactor: 2,
    286      isMobile: true,
    287      hasTouch: true,
    288      isLandscape: false,
    289    },
    290  },
    291  {
    292    name: 'iPad (gen 6) landscape',
    293    userAgent:
    294      'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    295    viewport: {
    296      width: 1024,
    297      height: 768,
    298      deviceScaleFactor: 2,
    299      isMobile: true,
    300      hasTouch: true,
    301      isLandscape: true,
    302    },
    303  },
    304  {
    305    name: 'iPad (gen 7)',
    306    userAgent:
    307      'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    308    viewport: {
    309      width: 810,
    310      height: 1080,
    311      deviceScaleFactor: 2,
    312      isMobile: true,
    313      hasTouch: true,
    314      isLandscape: false,
    315    },
    316  },
    317  {
    318    name: 'iPad (gen 7) landscape',
    319    userAgent:
    320      'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    321    viewport: {
    322      width: 1080,
    323      height: 810,
    324      deviceScaleFactor: 2,
    325      isMobile: true,
    326      hasTouch: true,
    327      isLandscape: true,
    328    },
    329  },
    330  {
    331    name: 'iPad Mini',
    332    userAgent:
    333      'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
    334    viewport: {
    335      width: 768,
    336      height: 1024,
    337      deviceScaleFactor: 2,
    338      isMobile: true,
    339      hasTouch: true,
    340      isLandscape: false,
    341    },
    342  },
    343  {
    344    name: 'iPad Mini landscape',
    345    userAgent:
    346      'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
    347    viewport: {
    348      width: 1024,
    349      height: 768,
    350      deviceScaleFactor: 2,
    351      isMobile: true,
    352      hasTouch: true,
    353      isLandscape: true,
    354    },
    355  },
    356  {
    357    name: 'iPad Pro',
    358    userAgent:
    359      'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
    360    viewport: {
    361      width: 1024,
    362      height: 1366,
    363      deviceScaleFactor: 2,
    364      isMobile: true,
    365      hasTouch: true,
    366      isLandscape: false,
    367    },
    368  },
    369  {
    370    name: 'iPad Pro landscape',
    371    userAgent:
    372      'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
    373    viewport: {
    374      width: 1366,
    375      height: 1024,
    376      deviceScaleFactor: 2,
    377      isMobile: true,
    378      hasTouch: true,
    379      isLandscape: true,
    380    },
    381  },
    382  {
    383    name: 'iPad Pro 11',
    384    userAgent:
    385      'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    386    viewport: {
    387      width: 834,
    388      height: 1194,
    389      deviceScaleFactor: 2,
    390      isMobile: true,
    391      hasTouch: true,
    392      isLandscape: false,
    393    },
    394  },
    395  {
    396    name: 'iPad Pro 11 landscape',
    397    userAgent:
    398      'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    399    viewport: {
    400      width: 1194,
    401      height: 834,
    402      deviceScaleFactor: 2,
    403      isMobile: true,
    404      hasTouch: true,
    405      isLandscape: true,
    406    },
    407  },
    408  {
    409    name: 'iPhone 4',
    410    userAgent:
    411      'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53',
    412    viewport: {
    413      width: 320,
    414      height: 480,
    415      deviceScaleFactor: 2,
    416      isMobile: true,
    417      hasTouch: true,
    418      isLandscape: false,
    419    },
    420  },
    421  {
    422    name: 'iPhone 4 landscape',
    423    userAgent:
    424      'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53',
    425    viewport: {
    426      width: 480,
    427      height: 320,
    428      deviceScaleFactor: 2,
    429      isMobile: true,
    430      hasTouch: true,
    431      isLandscape: true,
    432    },
    433  },
    434  {
    435    name: 'iPhone 5',
    436    userAgent:
    437      'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
    438    viewport: {
    439      width: 320,
    440      height: 568,
    441      deviceScaleFactor: 2,
    442      isMobile: true,
    443      hasTouch: true,
    444      isLandscape: false,
    445    },
    446  },
    447  {
    448    name: 'iPhone 5 landscape',
    449    userAgent:
    450      'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
    451    viewport: {
    452      width: 568,
    453      height: 320,
    454      deviceScaleFactor: 2,
    455      isMobile: true,
    456      hasTouch: true,
    457      isLandscape: true,
    458    },
    459  },
    460  {
    461    name: 'iPhone 6',
    462    userAgent:
    463      'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
    464    viewport: {
    465      width: 375,
    466      height: 667,
    467      deviceScaleFactor: 2,
    468      isMobile: true,
    469      hasTouch: true,
    470      isLandscape: false,
    471    },
    472  },
    473  {
    474    name: 'iPhone 6 landscape',
    475    userAgent:
    476      'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
    477    viewport: {
    478      width: 667,
    479      height: 375,
    480      deviceScaleFactor: 2,
    481      isMobile: true,
    482      hasTouch: true,
    483      isLandscape: true,
    484    },
    485  },
    486  {
    487    name: 'iPhone 6 Plus',
    488    userAgent:
    489      'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
    490    viewport: {
    491      width: 414,
    492      height: 736,
    493      deviceScaleFactor: 3,
    494      isMobile: true,
    495      hasTouch: true,
    496      isLandscape: false,
    497    },
    498  },
    499  {
    500    name: 'iPhone 6 Plus landscape',
    501    userAgent:
    502      'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
    503    viewport: {
    504      width: 736,
    505      height: 414,
    506      deviceScaleFactor: 3,
    507      isMobile: true,
    508      hasTouch: true,
    509      isLandscape: true,
    510    },
    511  },
    512  {
    513    name: 'iPhone 7',
    514    userAgent:
    515      'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
    516    viewport: {
    517      width: 375,
    518      height: 667,
    519      deviceScaleFactor: 2,
    520      isMobile: true,
    521      hasTouch: true,
    522      isLandscape: false,
    523    },
    524  },
    525  {
    526    name: 'iPhone 7 landscape',
    527    userAgent:
    528      'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
    529    viewport: {
    530      width: 667,
    531      height: 375,
    532      deviceScaleFactor: 2,
    533      isMobile: true,
    534      hasTouch: true,
    535      isLandscape: true,
    536    },
    537  },
    538  {
    539    name: 'iPhone 7 Plus',
    540    userAgent:
    541      'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
    542    viewport: {
    543      width: 414,
    544      height: 736,
    545      deviceScaleFactor: 3,
    546      isMobile: true,
    547      hasTouch: true,
    548      isLandscape: false,
    549    },
    550  },
    551  {
    552    name: 'iPhone 7 Plus landscape',
    553    userAgent:
    554      'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
    555    viewport: {
    556      width: 736,
    557      height: 414,
    558      deviceScaleFactor: 3,
    559      isMobile: true,
    560      hasTouch: true,
    561      isLandscape: true,
    562    },
    563  },
    564  {
    565    name: 'iPhone 8',
    566    userAgent:
    567      'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
    568    viewport: {
    569      width: 375,
    570      height: 667,
    571      deviceScaleFactor: 2,
    572      isMobile: true,
    573      hasTouch: true,
    574      isLandscape: false,
    575    },
    576  },
    577  {
    578    name: 'iPhone 8 landscape',
    579    userAgent:
    580      'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
    581    viewport: {
    582      width: 667,
    583      height: 375,
    584      deviceScaleFactor: 2,
    585      isMobile: true,
    586      hasTouch: true,
    587      isLandscape: true,
    588    },
    589  },
    590  {
    591    name: 'iPhone 8 Plus',
    592    userAgent:
    593      'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
    594    viewport: {
    595      width: 414,
    596      height: 736,
    597      deviceScaleFactor: 3,
    598      isMobile: true,
    599      hasTouch: true,
    600      isLandscape: false,
    601    },
    602  },
    603  {
    604    name: 'iPhone 8 Plus landscape',
    605    userAgent:
    606      'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
    607    viewport: {
    608      width: 736,
    609      height: 414,
    610      deviceScaleFactor: 3,
    611      isMobile: true,
    612      hasTouch: true,
    613      isLandscape: true,
    614    },
    615  },
    616  {
    617    name: 'iPhone SE',
    618    userAgent:
    619      'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
    620    viewport: {
    621      width: 320,
    622      height: 568,
    623      deviceScaleFactor: 2,
    624      isMobile: true,
    625      hasTouch: true,
    626      isLandscape: false,
    627    },
    628  },
    629  {
    630    name: 'iPhone SE landscape',
    631    userAgent:
    632      'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
    633    viewport: {
    634      width: 568,
    635      height: 320,
    636      deviceScaleFactor: 2,
    637      isMobile: true,
    638      hasTouch: true,
    639      isLandscape: true,
    640    },
    641  },
    642  {
    643    name: 'iPhone X',
    644    userAgent:
    645      'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
    646    viewport: {
    647      width: 375,
    648      height: 812,
    649      deviceScaleFactor: 3,
    650      isMobile: true,
    651      hasTouch: true,
    652      isLandscape: false,
    653    },
    654  },
    655  {
    656    name: 'iPhone X landscape',
    657    userAgent:
    658      'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
    659    viewport: {
    660      width: 812,
    661      height: 375,
    662      deviceScaleFactor: 3,
    663      isMobile: true,
    664      hasTouch: true,
    665      isLandscape: true,
    666    },
    667  },
    668  {
    669    name: 'iPhone XR',
    670    userAgent:
    671      'Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1',
    672    viewport: {
    673      width: 414,
    674      height: 896,
    675      deviceScaleFactor: 3,
    676      isMobile: true,
    677      hasTouch: true,
    678      isLandscape: false,
    679    },
    680  },
    681  {
    682    name: 'iPhone XR landscape',
    683    userAgent:
    684      'Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1',
    685    viewport: {
    686      width: 896,
    687      height: 414,
    688      deviceScaleFactor: 3,
    689      isMobile: true,
    690      hasTouch: true,
    691      isLandscape: true,
    692    },
    693  },
    694  {
    695    name: 'iPhone 11',
    696    userAgent:
    697      'Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Mobile/15E148 Safari/604.1',
    698    viewport: {
    699      width: 414,
    700      height: 828,
    701      deviceScaleFactor: 2,
    702      isMobile: true,
    703      hasTouch: true,
    704      isLandscape: false,
    705    },
    706  },
    707  {
    708    name: 'iPhone 11 landscape',
    709    userAgent:
    710      'Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Mobile/15E148 Safari/604.1',
    711    viewport: {
    712      width: 828,
    713      height: 414,
    714      deviceScaleFactor: 2,
    715      isMobile: true,
    716      hasTouch: true,
    717      isLandscape: true,
    718    },
    719  },
    720  {
    721    name: 'iPhone 11 Pro',
    722    userAgent:
    723      'Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Mobile/15E148 Safari/604.1',
    724    viewport: {
    725      width: 375,
    726      height: 812,
    727      deviceScaleFactor: 3,
    728      isMobile: true,
    729      hasTouch: true,
    730      isLandscape: false,
    731    },
    732  },
    733  {
    734    name: 'iPhone 11 Pro landscape',
    735    userAgent:
    736      'Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Mobile/15E148 Safari/604.1',
    737    viewport: {
    738      width: 812,
    739      height: 375,
    740      deviceScaleFactor: 3,
    741      isMobile: true,
    742      hasTouch: true,
    743      isLandscape: true,
    744    },
    745  },
    746  {
    747    name: 'iPhone 11 Pro Max',
    748    userAgent:
    749      'Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Mobile/15E148 Safari/604.1',
    750    viewport: {
    751      width: 414,
    752      height: 896,
    753      deviceScaleFactor: 3,
    754      isMobile: true,
    755      hasTouch: true,
    756      isLandscape: false,
    757    },
    758  },
    759  {
    760    name: 'iPhone 11 Pro Max landscape',
    761    userAgent:
    762      'Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Mobile/15E148 Safari/604.1',
    763    viewport: {
    764      width: 896,
    765      height: 414,
    766      deviceScaleFactor: 3,
    767      isMobile: true,
    768      hasTouch: true,
    769      isLandscape: true,
    770    },
    771  },
    772  {
    773    name: 'iPhone 12',
    774    userAgent:
    775      'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    776    viewport: {
    777      width: 390,
    778      height: 844,
    779      deviceScaleFactor: 3,
    780      isMobile: true,
    781      hasTouch: true,
    782      isLandscape: false,
    783    },
    784  },
    785  {
    786    name: 'iPhone 12 landscape',
    787    userAgent:
    788      'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    789    viewport: {
    790      width: 844,
    791      height: 390,
    792      deviceScaleFactor: 3,
    793      isMobile: true,
    794      hasTouch: true,
    795      isLandscape: true,
    796    },
    797  },
    798  {
    799    name: 'iPhone 12 Pro',
    800    userAgent:
    801      'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    802    viewport: {
    803      width: 390,
    804      height: 844,
    805      deviceScaleFactor: 3,
    806      isMobile: true,
    807      hasTouch: true,
    808      isLandscape: false,
    809    },
    810  },
    811  {
    812    name: 'iPhone 12 Pro landscape',
    813    userAgent:
    814      'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    815    viewport: {
    816      width: 844,
    817      height: 390,
    818      deviceScaleFactor: 3,
    819      isMobile: true,
    820      hasTouch: true,
    821      isLandscape: true,
    822    },
    823  },
    824  {
    825    name: 'iPhone 12 Pro Max',
    826    userAgent:
    827      'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    828    viewport: {
    829      width: 428,
    830      height: 926,
    831      deviceScaleFactor: 3,
    832      isMobile: true,
    833      hasTouch: true,
    834      isLandscape: false,
    835    },
    836  },
    837  {
    838    name: 'iPhone 12 Pro Max landscape',
    839    userAgent:
    840      'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    841    viewport: {
    842      width: 926,
    843      height: 428,
    844      deviceScaleFactor: 3,
    845      isMobile: true,
    846      hasTouch: true,
    847      isLandscape: true,
    848    },
    849  },
    850  {
    851    name: 'iPhone 12 Mini',
    852    userAgent:
    853      'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    854    viewport: {
    855      width: 375,
    856      height: 812,
    857      deviceScaleFactor: 3,
    858      isMobile: true,
    859      hasTouch: true,
    860      isLandscape: false,
    861    },
    862  },
    863  {
    864    name: 'iPhone 12 Mini landscape',
    865    userAgent:
    866      'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    867    viewport: {
    868      width: 812,
    869      height: 375,
    870      deviceScaleFactor: 3,
    871      isMobile: true,
    872      hasTouch: true,
    873      isLandscape: true,
    874    },
    875  },
    876  {
    877    name: 'iPhone 13',
    878    userAgent:
    879      'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    880    viewport: {
    881      width: 390,
    882      height: 844,
    883      deviceScaleFactor: 3,
    884      isMobile: true,
    885      hasTouch: true,
    886      isLandscape: false,
    887    },
    888  },
    889  {
    890    name: 'iPhone 13 landscape',
    891    userAgent:
    892      'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    893    viewport: {
    894      width: 844,
    895      height: 390,
    896      deviceScaleFactor: 3,
    897      isMobile: true,
    898      hasTouch: true,
    899      isLandscape: true,
    900    },
    901  },
    902  {
    903    name: 'iPhone 13 Pro',
    904    userAgent:
    905      'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    906    viewport: {
    907      width: 390,
    908      height: 844,
    909      deviceScaleFactor: 3,
    910      isMobile: true,
    911      hasTouch: true,
    912      isLandscape: false,
    913    },
    914  },
    915  {
    916    name: 'iPhone 13 Pro landscape',
    917    userAgent:
    918      'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    919    viewport: {
    920      width: 844,
    921      height: 390,
    922      deviceScaleFactor: 3,
    923      isMobile: true,
    924      hasTouch: true,
    925      isLandscape: true,
    926    },
    927  },
    928  {
    929    name: 'iPhone 13 Pro Max',
    930    userAgent:
    931      'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    932    viewport: {
    933      width: 428,
    934      height: 926,
    935      deviceScaleFactor: 3,
    936      isMobile: true,
    937      hasTouch: true,
    938      isLandscape: false,
    939    },
    940  },
    941  {
    942    name: 'iPhone 13 Pro Max landscape',
    943    userAgent:
    944      'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    945    viewport: {
    946      width: 926,
    947      height: 428,
    948      deviceScaleFactor: 3,
    949      isMobile: true,
    950      hasTouch: true,
    951      isLandscape: true,
    952    },
    953  },
    954  {
    955    name: 'iPhone 13 Mini',
    956    userAgent:
    957      'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    958    viewport: {
    959      width: 375,
    960      height: 812,
    961      deviceScaleFactor: 3,
    962      isMobile: true,
    963      hasTouch: true,
    964      isLandscape: false,
    965    },
    966  },
    967  {
    968    name: 'iPhone 13 Mini landscape',
    969    userAgent:
    970      'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
    971    viewport: {
    972      width: 812,
    973      height: 375,
    974      deviceScaleFactor: 3,
    975      isMobile: true,
    976      hasTouch: true,
    977      isLandscape: true,
    978    },
    979  },
    980  {
    981    name: 'iPhone 14',
    982    userAgent:
    983      'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1',
    984    viewport: {
    985      width: 390,
    986      height: 663,
    987      deviceScaleFactor: 3,
    988      isMobile: true,
    989      hasTouch: true,
    990      isLandscape: false,
    991    },
    992  },
    993  {
    994    name: 'iPhone 14 landscape',
    995    userAgent:
    996      'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1',
    997    viewport: {
    998      width: 750,
    999      height: 340,
   1000      deviceScaleFactor: 3,
   1001      isMobile: true,
   1002      hasTouch: true,
   1003      isLandscape: true,
   1004    },
   1005  },
   1006  {
   1007    name: 'iPhone 14 Plus',
   1008    userAgent:
   1009      'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1',
   1010    viewport: {
   1011      width: 428,
   1012      height: 745,
   1013      deviceScaleFactor: 3,
   1014      isMobile: true,
   1015      hasTouch: true,
   1016      isLandscape: false,
   1017    },
   1018  },
   1019  {
   1020    name: 'iPhone 14 Plus landscape',
   1021    userAgent:
   1022      'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1',
   1023    viewport: {
   1024      width: 832,
   1025      height: 378,
   1026      deviceScaleFactor: 3,
   1027      isMobile: true,
   1028      hasTouch: true,
   1029      isLandscape: true,
   1030    },
   1031  },
   1032  {
   1033    name: 'iPhone 14 Pro',
   1034    userAgent:
   1035      'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1',
   1036    viewport: {
   1037      width: 393,
   1038      height: 659,
   1039      deviceScaleFactor: 3,
   1040      isMobile: true,
   1041      hasTouch: true,
   1042      isLandscape: false,
   1043    },
   1044  },
   1045  {
   1046    name: 'iPhone 14 Pro landscape',
   1047    userAgent:
   1048      'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1',
   1049    viewport: {
   1050      width: 734,
   1051      height: 343,
   1052      deviceScaleFactor: 3,
   1053      isMobile: true,
   1054      hasTouch: true,
   1055      isLandscape: true,
   1056    },
   1057  },
   1058  {
   1059    name: 'iPhone 14 Pro Max',
   1060    userAgent:
   1061      'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1',
   1062    viewport: {
   1063      width: 430,
   1064      height: 739,
   1065      deviceScaleFactor: 3,
   1066      isMobile: true,
   1067      hasTouch: true,
   1068      isLandscape: false,
   1069    },
   1070  },
   1071  {
   1072    name: 'iPhone 14 Pro Max landscape',
   1073    userAgent:
   1074      'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1',
   1075    viewport: {
   1076      width: 814,
   1077      height: 380,
   1078      deviceScaleFactor: 3,
   1079      isMobile: true,
   1080      hasTouch: true,
   1081      isLandscape: true,
   1082    },
   1083  },
   1084  {
   1085    name: 'iPhone 15',
   1086    userAgent:
   1087      'Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1',
   1088    viewport: {
   1089      width: 393,
   1090      height: 659,
   1091      deviceScaleFactor: 3,
   1092      isMobile: true,
   1093      hasTouch: true,
   1094      isLandscape: false,
   1095    },
   1096  },
   1097  {
   1098    name: 'iPhone 15 landscape',
   1099    userAgent:
   1100      'Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1',
   1101    viewport: {
   1102      width: 734,
   1103      height: 343,
   1104      deviceScaleFactor: 3,
   1105      isMobile: true,
   1106      hasTouch: true,
   1107      isLandscape: true,
   1108    },
   1109  },
   1110  {
   1111    name: 'iPhone 15 Plus',
   1112    userAgent:
   1113      'Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1',
   1114    viewport: {
   1115      width: 430,
   1116      height: 739,
   1117      deviceScaleFactor: 3,
   1118      isMobile: true,
   1119      hasTouch: true,
   1120      isLandscape: false,
   1121    },
   1122  },
   1123  {
   1124    name: 'iPhone 15 Plus landscape',
   1125    userAgent:
   1126      'Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1',
   1127    viewport: {
   1128      width: 814,
   1129      height: 380,
   1130      deviceScaleFactor: 3,
   1131      isMobile: true,
   1132      hasTouch: true,
   1133      isLandscape: true,
   1134    },
   1135  },
   1136  {
   1137    name: 'iPhone 15 Pro',
   1138    userAgent:
   1139      'Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1',
   1140    viewport: {
   1141      width: 393,
   1142      height: 659,
   1143      deviceScaleFactor: 3,
   1144      isMobile: true,
   1145      hasTouch: true,
   1146      isLandscape: false,
   1147    },
   1148  },
   1149  {
   1150    name: 'iPhone 15 Pro landscape',
   1151    userAgent:
   1152      'Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1',
   1153    viewport: {
   1154      width: 734,
   1155      height: 343,
   1156      deviceScaleFactor: 3,
   1157      isMobile: true,
   1158      hasTouch: true,
   1159      isLandscape: true,
   1160    },
   1161  },
   1162  {
   1163    name: 'iPhone 15 Pro Max',
   1164    userAgent:
   1165      'Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1',
   1166    viewport: {
   1167      width: 430,
   1168      height: 739,
   1169      deviceScaleFactor: 3,
   1170      isMobile: true,
   1171      hasTouch: true,
   1172      isLandscape: false,
   1173    },
   1174  },
   1175  {
   1176    name: 'iPhone 15 Pro Max landscape',
   1177    userAgent:
   1178      'Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1',
   1179    viewport: {
   1180      width: 814,
   1181      height: 380,
   1182      deviceScaleFactor: 3,
   1183      isMobile: true,
   1184      hasTouch: true,
   1185      isLandscape: true,
   1186    },
   1187  },
   1188  {
   1189    name: 'JioPhone 2',
   1190    userAgent:
   1191      'Mozilla/5.0 (Mobile; LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.5',
   1192    viewport: {
   1193      width: 240,
   1194      height: 320,
   1195      deviceScaleFactor: 1,
   1196      isMobile: true,
   1197      hasTouch: true,
   1198      isLandscape: false,
   1199    },
   1200  },
   1201  {
   1202    name: 'JioPhone 2 landscape',
   1203    userAgent:
   1204      'Mozilla/5.0 (Mobile; LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.5',
   1205    viewport: {
   1206      width: 320,
   1207      height: 240,
   1208      deviceScaleFactor: 1,
   1209      isMobile: true,
   1210      hasTouch: true,
   1211      isLandscape: true,
   1212    },
   1213  },
   1214  {
   1215    name: 'Kindle Fire HDX',
   1216    userAgent:
   1217      'Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true',
   1218    viewport: {
   1219      width: 800,
   1220      height: 1280,
   1221      deviceScaleFactor: 2,
   1222      isMobile: true,
   1223      hasTouch: true,
   1224      isLandscape: false,
   1225    },
   1226  },
   1227  {
   1228    name: 'Kindle Fire HDX landscape',
   1229    userAgent:
   1230      'Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true',
   1231    viewport: {
   1232      width: 1280,
   1233      height: 800,
   1234      deviceScaleFactor: 2,
   1235      isMobile: true,
   1236      hasTouch: true,
   1237      isLandscape: true,
   1238    },
   1239  },
   1240  {
   1241    name: 'LG Optimus L70',
   1242    userAgent:
   1243      'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/75.0.3765.0 Mobile Safari/537.36',
   1244    viewport: {
   1245      width: 384,
   1246      height: 640,
   1247      deviceScaleFactor: 1.25,
   1248      isMobile: true,
   1249      hasTouch: true,
   1250      isLandscape: false,
   1251    },
   1252  },
   1253  {
   1254    name: 'LG Optimus L70 landscape',
   1255    userAgent:
   1256      'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/75.0.3765.0 Mobile Safari/537.36',
   1257    viewport: {
   1258      width: 640,
   1259      height: 384,
   1260      deviceScaleFactor: 1.25,
   1261      isMobile: true,
   1262      hasTouch: true,
   1263      isLandscape: true,
   1264    },
   1265  },
   1266  {
   1267    name: 'Microsoft Lumia 550',
   1268    userAgent:
   1269      'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263',
   1270    viewport: {
   1271      width: 640,
   1272      height: 360,
   1273      deviceScaleFactor: 2,
   1274      isMobile: true,
   1275      hasTouch: true,
   1276      isLandscape: false,
   1277    },
   1278  },
   1279  {
   1280    name: 'Microsoft Lumia 950',
   1281    userAgent:
   1282      'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263',
   1283    viewport: {
   1284      width: 360,
   1285      height: 640,
   1286      deviceScaleFactor: 4,
   1287      isMobile: true,
   1288      hasTouch: true,
   1289      isLandscape: false,
   1290    },
   1291  },
   1292  {
   1293    name: 'Microsoft Lumia 950 landscape',
   1294    userAgent:
   1295      'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263',
   1296    viewport: {
   1297      width: 640,
   1298      height: 360,
   1299      deviceScaleFactor: 4,
   1300      isMobile: true,
   1301      hasTouch: true,
   1302      isLandscape: true,
   1303    },
   1304  },
   1305  {
   1306    name: 'Nexus 10',
   1307    userAgent:
   1308      'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Safari/537.36',
   1309    viewport: {
   1310      width: 800,
   1311      height: 1280,
   1312      deviceScaleFactor: 2,
   1313      isMobile: true,
   1314      hasTouch: true,
   1315      isLandscape: false,
   1316    },
   1317  },
   1318  {
   1319    name: 'Nexus 10 landscape',
   1320    userAgent:
   1321      'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Safari/537.36',
   1322    viewport: {
   1323      width: 1280,
   1324      height: 800,
   1325      deviceScaleFactor: 2,
   1326      isMobile: true,
   1327      hasTouch: true,
   1328      isLandscape: true,
   1329    },
   1330  },
   1331  {
   1332    name: 'Nexus 4',
   1333    userAgent:
   1334      'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',
   1335    viewport: {
   1336      width: 384,
   1337      height: 640,
   1338      deviceScaleFactor: 2,
   1339      isMobile: true,
   1340      hasTouch: true,
   1341      isLandscape: false,
   1342    },
   1343  },
   1344  {
   1345    name: 'Nexus 4 landscape',
   1346    userAgent:
   1347      'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',
   1348    viewport: {
   1349      width: 640,
   1350      height: 384,
   1351      deviceScaleFactor: 2,
   1352      isMobile: true,
   1353      hasTouch: true,
   1354      isLandscape: true,
   1355    },
   1356  },
   1357  {
   1358    name: 'Nexus 5',
   1359    userAgent:
   1360      'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',
   1361    viewport: {
   1362      width: 360,
   1363      height: 640,
   1364      deviceScaleFactor: 3,
   1365      isMobile: true,
   1366      hasTouch: true,
   1367      isLandscape: false,
   1368    },
   1369  },
   1370  {
   1371    name: 'Nexus 5 landscape',
   1372    userAgent:
   1373      'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',
   1374    viewport: {
   1375      width: 640,
   1376      height: 360,
   1377      deviceScaleFactor: 3,
   1378      isMobile: true,
   1379      hasTouch: true,
   1380      isLandscape: true,
   1381    },
   1382  },
   1383  {
   1384    name: 'Nexus 5X',
   1385    userAgent:
   1386      'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',
   1387    viewport: {
   1388      width: 412,
   1389      height: 732,
   1390      deviceScaleFactor: 2.625,
   1391      isMobile: true,
   1392      hasTouch: true,
   1393      isLandscape: false,
   1394    },
   1395  },
   1396  {
   1397    name: 'Nexus 5X landscape',
   1398    userAgent:
   1399      'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',
   1400    viewport: {
   1401      width: 732,
   1402      height: 412,
   1403      deviceScaleFactor: 2.625,
   1404      isMobile: true,
   1405      hasTouch: true,
   1406      isLandscape: true,
   1407    },
   1408  },
   1409  {
   1410    name: 'Nexus 6',
   1411    userAgent:
   1412      'Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',
   1413    viewport: {
   1414      width: 412,
   1415      height: 732,
   1416      deviceScaleFactor: 3.5,
   1417      isMobile: true,
   1418      hasTouch: true,
   1419      isLandscape: false,
   1420    },
   1421  },
   1422  {
   1423    name: 'Nexus 6 landscape',
   1424    userAgent:
   1425      'Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',
   1426    viewport: {
   1427      width: 732,
   1428      height: 412,
   1429      deviceScaleFactor: 3.5,
   1430      isMobile: true,
   1431      hasTouch: true,
   1432      isLandscape: true,
   1433    },
   1434  },
   1435  {
   1436    name: 'Nexus 6P',
   1437    userAgent:
   1438      'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',
   1439    viewport: {
   1440      width: 412,
   1441      height: 732,
   1442      deviceScaleFactor: 3.5,
   1443      isMobile: true,
   1444      hasTouch: true,
   1445      isLandscape: false,
   1446    },
   1447  },
   1448  {
   1449    name: 'Nexus 6P landscape',
   1450    userAgent:
   1451      'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',
   1452    viewport: {
   1453      width: 732,
   1454      height: 412,
   1455      deviceScaleFactor: 3.5,
   1456      isMobile: true,
   1457      hasTouch: true,
   1458      isLandscape: true,
   1459    },
   1460  },
   1461  {
   1462    name: 'Nexus 7',
   1463    userAgent:
   1464      'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Safari/537.36',
   1465    viewport: {
   1466      width: 600,
   1467      height: 960,
   1468      deviceScaleFactor: 2,
   1469      isMobile: true,
   1470      hasTouch: true,
   1471      isLandscape: false,
   1472    },
   1473  },
   1474  {
   1475    name: 'Nexus 7 landscape',
   1476    userAgent:
   1477      'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Safari/537.36',
   1478    viewport: {
   1479      width: 960,
   1480      height: 600,
   1481      deviceScaleFactor: 2,
   1482      isMobile: true,
   1483      hasTouch: true,
   1484      isLandscape: true,
   1485    },
   1486  },
   1487  {
   1488    name: 'Nokia Lumia 520',
   1489    userAgent:
   1490      'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)',
   1491    viewport: {
   1492      width: 320,
   1493      height: 533,
   1494      deviceScaleFactor: 1.5,
   1495      isMobile: true,
   1496      hasTouch: true,
   1497      isLandscape: false,
   1498    },
   1499  },
   1500  {
   1501    name: 'Nokia Lumia 520 landscape',
   1502    userAgent:
   1503      'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)',
   1504    viewport: {
   1505      width: 533,
   1506      height: 320,
   1507      deviceScaleFactor: 1.5,
   1508      isMobile: true,
   1509      hasTouch: true,
   1510      isLandscape: true,
   1511    },
   1512  },
   1513  {
   1514    name: 'Nokia N9',
   1515    userAgent:
   1516      'Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13',
   1517    viewport: {
   1518      width: 480,
   1519      height: 854,
   1520      deviceScaleFactor: 1,
   1521      isMobile: true,
   1522      hasTouch: true,
   1523      isLandscape: false,
   1524    },
   1525  },
   1526  {
   1527    name: 'Nokia N9 landscape',
   1528    userAgent:
   1529      'Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13',
   1530    viewport: {
   1531      width: 854,
   1532      height: 480,
   1533      deviceScaleFactor: 1,
   1534      isMobile: true,
   1535      hasTouch: true,
   1536      isLandscape: true,
   1537    },
   1538  },
   1539  {
   1540    name: 'Pixel 2',
   1541    userAgent:
   1542      'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',
   1543    viewport: {
   1544      width: 411,
   1545      height: 731,
   1546      deviceScaleFactor: 2.625,
   1547      isMobile: true,
   1548      hasTouch: true,
   1549      isLandscape: false,
   1550    },
   1551  },
   1552  {
   1553    name: 'Pixel 2 landscape',
   1554    userAgent:
   1555      'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',
   1556    viewport: {
   1557      width: 731,
   1558      height: 411,
   1559      deviceScaleFactor: 2.625,
   1560      isMobile: true,
   1561      hasTouch: true,
   1562      isLandscape: true,
   1563    },
   1564  },
   1565  {
   1566    name: 'Pixel 2 XL',
   1567    userAgent:
   1568      'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',
   1569    viewport: {
   1570      width: 411,
   1571      height: 823,
   1572      deviceScaleFactor: 3.5,
   1573      isMobile: true,
   1574      hasTouch: true,
   1575      isLandscape: false,
   1576    },
   1577  },
   1578  {
   1579    name: 'Pixel 2 XL landscape',
   1580    userAgent:
   1581      'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3765.0 Mobile Safari/537.36',
   1582    viewport: {
   1583      width: 823,
   1584      height: 411,
   1585      deviceScaleFactor: 3.5,
   1586      isMobile: true,
   1587      hasTouch: true,
   1588      isLandscape: true,
   1589    },
   1590  },
   1591  {
   1592    name: 'Pixel 3',
   1593    userAgent:
   1594      'Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.158 Mobile Safari/537.36',
   1595    viewport: {
   1596      width: 393,
   1597      height: 786,
   1598      deviceScaleFactor: 2.75,
   1599      isMobile: true,
   1600      hasTouch: true,
   1601      isLandscape: false,
   1602    },
   1603  },
   1604  {
   1605    name: 'Pixel 3 landscape',
   1606    userAgent:
   1607      'Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.158 Mobile Safari/537.36',
   1608    viewport: {
   1609      width: 786,
   1610      height: 393,
   1611      deviceScaleFactor: 2.75,
   1612      isMobile: true,
   1613      hasTouch: true,
   1614      isLandscape: true,
   1615    },
   1616  },
   1617  {
   1618    name: 'Pixel 4',
   1619    userAgent:
   1620      'Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36',
   1621    viewport: {
   1622      width: 353,
   1623      height: 745,
   1624      deviceScaleFactor: 3,
   1625      isMobile: true,
   1626      hasTouch: true,
   1627      isLandscape: false,
   1628    },
   1629  },
   1630  {
   1631    name: 'Pixel 4 landscape',
   1632    userAgent:
   1633      'Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36',
   1634    viewport: {
   1635      width: 745,
   1636      height: 353,
   1637      deviceScaleFactor: 3,
   1638      isMobile: true,
   1639      hasTouch: true,
   1640      isLandscape: true,
   1641    },
   1642  },
   1643  {
   1644    name: 'Pixel 4a (5G)',
   1645    userAgent:
   1646      'Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4812.0 Mobile Safari/537.36',
   1647    viewport: {
   1648      width: 353,
   1649      height: 745,
   1650      deviceScaleFactor: 3,
   1651      isMobile: true,
   1652      hasTouch: true,
   1653      isLandscape: false,
   1654    },
   1655  },
   1656  {
   1657    name: 'Pixel 4a (5G) landscape',
   1658    userAgent:
   1659      'Mozilla/5.0 (Linux; Android 11; Pixel 4a (5G)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4812.0 Mobile Safari/537.36',
   1660    viewport: {
   1661      width: 745,
   1662      height: 353,
   1663      deviceScaleFactor: 3,
   1664      isMobile: true,
   1665      hasTouch: true,
   1666      isLandscape: true,
   1667    },
   1668  },
   1669  {
   1670    name: 'Pixel 5',
   1671    userAgent:
   1672      'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4812.0 Mobile Safari/537.36',
   1673    viewport: {
   1674      width: 393,
   1675      height: 851,
   1676      deviceScaleFactor: 3,
   1677      isMobile: true,
   1678      hasTouch: true,
   1679      isLandscape: false,
   1680    },
   1681  },
   1682  {
   1683    name: 'Pixel 5 landscape',
   1684    userAgent:
   1685      'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4812.0 Mobile Safari/537.36',
   1686    viewport: {
   1687      width: 851,
   1688      height: 393,
   1689      deviceScaleFactor: 3,
   1690      isMobile: true,
   1691      hasTouch: true,
   1692      isLandscape: true,
   1693    },
   1694  },
   1695  {
   1696    name: 'Moto G4',
   1697    userAgent:
   1698      'Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4812.0 Mobile Safari/537.36',
   1699    viewport: {
   1700      width: 360,
   1701      height: 640,
   1702      deviceScaleFactor: 3,
   1703      isMobile: true,
   1704      hasTouch: true,
   1705      isLandscape: false,
   1706    },
   1707  },
   1708  {
   1709    name: 'Moto G4 landscape',
   1710    userAgent:
   1711      'Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4812.0 Mobile Safari/537.36',
   1712    viewport: {
   1713      width: 640,
   1714      height: 360,
   1715      deviceScaleFactor: 3,
   1716      isMobile: true,
   1717      hasTouch: true,
   1718      isLandscape: true,
   1719    },
   1720  },
   1721 ] as const;
   1722 
   1723 const knownDevicesByName = {} as Record<
   1724  (typeof knownDevices)[number]['name'],
   1725  Device
   1726 >;
   1727 
   1728 for (const device of knownDevices) {
   1729  knownDevicesByName[device.name] = device;
   1730 }
   1731 
   1732 /**
   1733 * A list of devices to be used with {@link Page.emulate}.
   1734 *
   1735 * @example
   1736 *
   1737 * ```ts
   1738 * import {KnownDevices} from 'puppeteer';
   1739 * const iPhone = KnownDevices['iPhone 15 Pro'];
   1740 *
   1741 * (async () => {
   1742 *   const browser = await puppeteer.launch();
   1743 *   const page = await browser.newPage();
   1744 *   await page.emulate(iPhone);
   1745 *   await page.goto('https://www.google.com');
   1746 *   // other actions...
   1747 *   await browser.close();
   1748 * })();
   1749 * ```
   1750 *
   1751 * @public
   1752 */
   1753 export const KnownDevices = Object.freeze(knownDevicesByName);