Skip to content
Merged
24 changes: 22 additions & 2 deletions src/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,28 +9,37 @@ export const BROWSER_ALIASES_MAP = {
BingCrawler: 'bingcrawler',
BlackBerry: 'blackberry',
Chrome: 'chrome',
'ChatGPT-User': 'chatgpt_user',
ClaudeBot: 'claudebot',
Chromium: 'chromium',
Diffbot: 'diffbot',
DuckDuckBot: 'duckduckbot',
Electron: 'electron',
Epiphany: 'epiphany',
FacebookExternalHit: 'facebookexternalhit',
Firefox: 'firefox',
Focus: 'focus',
Generic: 'generic',
'Google Search': 'google_search',
Googlebot: 'googlebot',
GPTBot: 'gptbot',
'Internet Explorer': 'ie',
InternetArchiveCrawler: 'internetarchivecrawler',
'K-Meleon': 'k_meleon',
Maxthon: 'maxthon',
MetaWebCrawler: 'metawebcrawler',
'Meta-WebIndexer': 'meta_webindexer',
'Microsoft Edge': 'edge',
'MZ Browser': 'mz',
'NAVER Whale Browser': 'naver',
'OAI-SearchBot': 'oai_searchbot',
Omgilibot: 'omgilibot',
Opera: 'opera',
'Opera Coast': 'opera_coast',
'Pale Moon': 'pale_moon',
PhantomJS: 'phantomjs',
PingdomBot: 'pingdombot',
PerplexityBot: 'perplexitybot',
'Perplexity-User': 'perplexity_user',
Puffin: 'puffin',
QQ: 'qq',
QQLite: 'qqlite',
Expand All @@ -50,6 +59,7 @@ export const BROWSER_ALIASES_MAP = {
YahooSlurp: 'yahooslurp',
'Yandex Browser': 'yandex',
YandexBot: 'yandexbot',
YouBot: 'youbot',
};

export const BROWSER_MAP = {
Expand All @@ -61,7 +71,10 @@ export const BROWSER_MAP = {
bingcrawler: 'BingCrawler',
blackberry: 'BlackBerry',
chrome: 'Chrome',
chatgpt_user: 'ChatGPT-User',
claudebot: 'ClaudeBot',
chromium: 'Chromium',
diffbot: 'Diffbot',
duckduckbot: 'DuckDuckBot',
edge: 'Microsoft Edge',
electron: 'Electron',
Expand All @@ -71,18 +84,24 @@ export const BROWSER_MAP = {
generic: 'Generic',
google_search: 'Google Search',
googlebot: 'Googlebot',
gptbot: 'GPTBot',
ie: 'Internet Explorer',
internetarchivecrawler: 'InternetArchiveCrawler',
k_meleon: 'K-Meleon',
maxthon: 'Maxthon',
metawebcrawler: 'MetaWebCrawler',
facebookexternalhit: 'FacebookExternalHit',
meta_webindexer: 'Meta-WebIndexer',
mz: 'MZ Browser',
naver: 'NAVER Whale Browser',
opera: 'Opera',
opera_coast: 'Opera Coast',
pale_moon: 'Pale Moon',
phantomjs: 'PhantomJS',
pingdombot: 'PingdomBot',
perplexitybot: 'PerplexityBot',
perplexity_user: 'Perplexity-User',
oai_searchbot: 'OAI-SearchBot',
omgilibot: 'Omgilibot',
puffin: 'Puffin',
qq: 'QQ Browser',
qqlite: 'QQ Browser Lite',
Expand All @@ -102,6 +121,7 @@ export const BROWSER_MAP = {
yahooslurp: 'YahooSlurp',
yandex: 'Yandex Browser',
yandexbot: 'YandexBot',
youbot: 'YouBot',
};

export const PLATFORMS_MAP = {
Expand Down
174 changes: 172 additions & 2 deletions src/parser-browsers.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,176 @@ import Utils from './utils.js';
const commonVersionIdentifier = /version\/(\d+(\.?_?\d+)+)/i;

const browsersList = [
/* GPTBot */
{
test: [/gptbot/i],
describe(ua) {
const browser = {
name: 'GPTBot',
};
const version = Utils.getFirstMatch(/gptbot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);

if (version) {
browser.version = version;
}

return browser;
},
},

/* ChatGPT-User */
{
test: [/chatgpt-user/i],
describe(ua) {
const browser = {
name: 'ChatGPT-User',
};
const version = Utils.getFirstMatch(/chatgpt-user\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);

if (version) {
browser.version = version;
}

return browser;
},
},

/* OAI-SearchBot */
{
test: [/oai-searchbot/i],
describe(ua) {
const browser = {
name: 'OAI-SearchBot',
};
const version = Utils.getFirstMatch(/oai-searchbot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);

if (version) {
browser.version = version;
}

return browser;
},
},

/* ClaudeBot */
{
test: [/claudebot/i, /claude-web/i],
describe(ua) {
const browser = {
name: 'ClaudeBot',
};
const version = Utils.getFirstMatch(/(?:claudebot|claude-web)\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);

if (version) {
browser.version = version;
}

return browser;
},
},

/* Omgilibot */
{
test: [/omgilibot/i],
describe(ua) {
const browser = {
name: 'Omgilibot',
};
const version = Utils.getFirstMatch(/omgilibot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);

if (version) {
browser.version = version;
}

return browser;
},
},

/* Diffbot */
{
test: [/diffbot/i],
describe(ua) {
const browser = {
name: 'Diffbot',
};
const version = Utils.getFirstMatch(/diffbot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);

if (version) {
browser.version = version;
}

return browser;
},
},

/* PerplexityBot */
{
test: [/perplexitybot/i],
describe(ua) {
const browser = {
name: 'PerplexityBot',
};
const version = Utils.getFirstMatch(/perplexitybot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);

if (version) {
browser.version = version;
}

return browser;
},
},

/* Perplexity-User */
{
test: [/perplexity-user/i],
describe(ua) {
const browser = {
name: 'Perplexity-User',
};
const version = Utils.getFirstMatch(/perplexity-user\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);

if (version) {
browser.version = version;
}

return browser;
},
},

/* YouBot */
{
test: [/youbot/i],
describe(ua) {
const browser = {
name: 'YouBot',
};
const version = Utils.getFirstMatch(/youbot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);

if (version) {
browser.version = version;
}

return browser;
},
},

/* Meta-WebIndexer */
{
test: [/meta-webindexer/i],
describe(ua) {
const browser = {
name: 'Meta-WebIndexer',
};
const version = Utils.getFirstMatch(/meta-webindexer\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);

if (version) {
browser.version = version;
}

return browser;
},
},

/* Googlebot */
{
test: [/googlebot/i],
Expand Down Expand Up @@ -130,12 +300,12 @@ const browsersList = [
},
},

/* MetaWebCrawler */
/* FacebookExternalHit */
{
test: [/facebookexternalhit/i, /facebookcatalog/i],
describe() {
return {
name: 'MetaWebCrawler',
name: 'FacebookExternalHit',
};
},
},
Expand Down
Loading
Loading