Socket
Socket
Sign inDemoInstall

useragent

Package Overview
Dependencies
5
Maintainers
1
Versions
39
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.3 to 1.0.4

.travis.yml

2

lib/agents.js

@@ -1,1 +0,1 @@

exports.browser = [{r:new RegExp("^(Opera)/(\\d+)\\.(\\d+) \\(Nintendo Wii"), family:"Wii"},{r:new RegExp("(SeaMonkey|Fennec|Camino)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)")},{r:new RegExp("(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?)"), family:"Firefox ($1)"},{r:new RegExp("(Firefox)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)"), family:"Firefox Beta"},{r:new RegExp("(Firefox)-(?:\\d+\\.\\d+)?/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)"), family:"Firefox Beta"},{r:new RegExp("(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?"), family:"Firefox ($1)"},{r:new RegExp("(Firefox).*Tablet browser (\\d+)\\.(\\d+)\\.(\\d+)"), family:"MicroB"},{r:new RegExp("(MozillaDeveloperPreview)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?")},{r:new RegExp("(Flock)/(\\d+)\\.(\\d+)(b\\d+?)")},{r:new RegExp("(RockMelt)/(\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(Fennec)/(\\d+)\\.(\\d+)(pre)")},{r:new RegExp("(Navigator)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Netscape"},{r:new RegExp("(Navigator)/(\\d+)\\.(\\d+)([ab]\\d+)"), family:"Netscape"},{r:new RegExp("(Netscape6)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Netscape"},{r:new RegExp("(MyIBrow)/(\\d+)\\.(\\d+)"), family:"My Internet Browser"},{r:new RegExp("(Opera Tablet).*Version\\/(\\d+)\\.(\\d+)(?:\\.(\\d+))?")},{r:new RegExp("(Opera)/.+Opera Mobi.+Version/(\\d+)\\.(\\d+)"), family:"Opera Mobile"},{r:new RegExp("(Opera Mini)/(\\d+)\\.(\\d+)")},{r:new RegExp("(Opera)/9.80.*Version\\/(\\d+)\\.(\\d+)(?:\\.(\\d+))?")},{r:new RegExp("(webOS)/(\\d+)\\.(\\d+)"), family:"Palm webOS"},{r:new RegExp("(luakit)"), family:"LuaKit"},{r:new RegExp("(Lightning)/(\\d+)\\.(\\d+)([ab]?\\d+[a-z]*)")},{r:new RegExp("(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?) \\(Swiftfox\\)"), family:"Swiftfox"},{r:new RegExp("(Firefox)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)? \\(Swiftfox\\)"), family:"Swiftfox"},{r:new RegExp("rekonq"), family:"Rekonq"},{r:new RegExp("(conkeror|Conkeror)/(\\d+)\\.(\\d+)\\.?(\\d+)?"), family:"Conkeror"},{r:new RegExp("(konqueror)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Konqueror"},{r:new RegExp("(PlayBook).+RIM Tablet OS (\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(WeTab)-Browser")},{r:new RegExp("(wOSBrowser).+TouchPad/(\\d+)\\.(\\d+)"), family:"webOS TouchPad"},{r:new RegExp("(Comodo_Dragon)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Comodo Dragon"},{r:new RegExp("(YottaaMonitor)")},{r:new RegExp("(Kindle)/(\\d+)\\.(\\d+)")},{r:new RegExp("(AdobeAIR|Chromium|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Shiira|Sunrise|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Vodafone|NetFront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iron|Iris)/(\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(Bolt|Jasmine|IEMobile|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|Vodafone|NetFront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Iron|Space Bison|Stainless|Orca|Dolfin|BOLT)/(\\d+)\\.(\\d+)")},{r:new RegExp("(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(iCab|Lunascape|Opera|Android) (\\d+)\\.(\\d+)\\.?(\\d+)?")},{r:new RegExp("(IEMobile) (\\d+)\\.(\\d+)"), family:"IE Mobile"},{r:new RegExp("(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(Firefox)/(\\d+)\\.(\\d+)(pre|[ab]\\d+[a-z]*)?")},{r:new RegExp("(Obigo|OBIGO)[^\\d]*(\\d+)(?:.(\\d+))?"), family:"Obigo"},{r:new RegExp("(MAXTHON|Maxthon) (\\d+)\\.(\\d+)"), family:"Maxthon"},{r:new RegExp("(Maxthon|MyIE2|Uzbl|Shiira)"), major: "0"},{r:new RegExp("(PLAYSTATION) (\\d+)"), family:"PlayStation"},{r:new RegExp("(PlayStation Portable)[^\\d]+(\\d+).(\\d+)")},{r:new RegExp("(BrowseX) \\((\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(POLARIS)/(\\d+)\\.(\\d+)"), family:"Polaris"},{r:new RegExp("(BonEcho)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Bon Echo"},{r:new RegExp("(iPod).+Version/(\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(iPhone) OS (\\d+)_(\\d+)(?:_(\\d+))?")},{r:new RegExp("(iPad).+ OS (\\d+)_(\\d+)(?:_(\\d+))?")},{r:new RegExp("(Avant)"), major: "1"},{r:new RegExp("(Nokia)[EN]?(\\d+)")},{r:new RegExp("(Black[bB]erry).+Version\\/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Blackberry"},{r:new RegExp("(Black[bB]erry)\\s?(\\d+)"), family:"Blackberry"},{r:new RegExp("(OmniWeb)/v(\\d+)\\.(\\d+)")},{r:new RegExp("(Blazer)/(\\d+)\\.(\\d+)"), family:"Palm Blazer"},{r:new RegExp("(Pre)/(\\d+)\\.(\\d+)"), family:"Palm Pre"},{r:new RegExp("(Links) \\((\\d+)\\.(\\d+)")},{r:new RegExp("(QtWeb) Internet Browser/(\\d+)\\.(\\d+)")},{r:new RegExp("(Version)/(\\d+)\\.(\\d+)(?:\\.(\\d+))?.*Safari/"), family:"Safari"},{r:new RegExp("(Safari)/\\d+")},{r:new RegExp("(OLPC)/Update(\\d+)\\.(\\d+)")},{r:new RegExp("(OLPC)/Update()\\.(\\d+)"), major: "0"},{r:new RegExp("(SamsungSGHi560)"), family:"Samsung SGHi560"},{r:new RegExp("^(SonyEricssonK800i)"), family:"Sony Ericsson K800i"},{r:new RegExp("(Teleca Q7)")},{r:new RegExp("(MSIE) (\\d+)\\.(\\d+)"), family:"IE"},{r:new RegExp("(Thunderbird)/(\\d+)\\.(\\d+)\\.?(\\d+)?")},{r:new RegExp("(Wget)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)")},{r:new RegExp("(curl)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"cURL"}];exports.os = [{r:new RegExp("(Android)")},{r:new RegExp("(Windows)")},{r:new RegExp("(iPad)")},{r:new RegExp("(iPhone OS) ([\\d_]+)"), os:"iOS"},{r:new RegExp("(Mac OS X)")},{r:new RegExp("(FreeBSD)")},{r:new RegExp("(iPod)")},{r:new RegExp("(iPhone Simulator)")},{r:new RegExp("(Linux)")},{r:new RegExp("(Red Hat)")}];
exports.browser = [{r:new RegExp("^(Opera)/(\\d+)\\.(\\d+) \\(Nintendo Wii"), family:"Wii"},{r:new RegExp("(SeaMonkey|Fennec|Camino)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)")},{r:new RegExp("(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?)"), family:"Firefox ($1)"},{r:new RegExp("(Firefox)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)"), family:"Firefox Beta"},{r:new RegExp("(Firefox)-(?:\\d+\\.\\d+)?/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)"), family:"Firefox Beta"},{r:new RegExp("(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?"), family:"Firefox ($1)"},{r:new RegExp("(Firefox).*Tablet browser (\\d+)\\.(\\d+)\\.(\\d+)"), family:"MicroB"},{r:new RegExp("(MozillaDeveloperPreview)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?")},{r:new RegExp("(Flock)/(\\d+)\\.(\\d+)(b\\d+?)")},{r:new RegExp("(RockMelt)/(\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(Fennec)/(\\d+)\\.(\\d+)(pre)")},{r:new RegExp("(Navigator)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Netscape"},{r:new RegExp("(Navigator)/(\\d+)\\.(\\d+)([ab]\\d+)"), family:"Netscape"},{r:new RegExp("(Netscape6)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Netscape"},{r:new RegExp("(MyIBrow)/(\\d+)\\.(\\d+)"), family:"My Internet Browser"},{r:new RegExp("(Opera Tablet).*Version\\/(\\d+)\\.(\\d+)(?:\\.(\\d+))?")},{r:new RegExp("(Opera)/.+Opera Mobi.+Version/(\\d+)\\.(\\d+)"), family:"Opera Mobile"},{r:new RegExp("(Opera Mini)/(\\d+)\\.(\\d+)")},{r:new RegExp("(Opera)/9.80.*Version\\/(\\d+)\\.(\\d+)(?:\\.(\\d+))?")},{r:new RegExp("(webOS)/(\\d+)\\.(\\d+)"), family:"Palm webOS"},{r:new RegExp("(luakit)"), family:"LuaKit"},{r:new RegExp("(Lightning)/(\\d+)\\.(\\d+)([ab]?\\d+[a-z]*)")},{r:new RegExp("(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?) \\(Swiftfox\\)"), family:"Swiftfox"},{r:new RegExp("(Firefox)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)? \\(Swiftfox\\)"), family:"Swiftfox"},{r:new RegExp("rekonq"), family:"Rekonq"},{r:new RegExp("(conkeror|Conkeror)/(\\d+)\\.(\\d+)\\.?(\\d+)?"), family:"Conkeror"},{r:new RegExp("(konqueror)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Konqueror"},{r:new RegExp("(PlayBook).+RIM Tablet OS (\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(WeTab)-Browser")},{r:new RegExp("(wOSBrowser).+TouchPad/(\\d+)\\.(\\d+)"), family:"webOS TouchPad"},{r:new RegExp("(Comodo_Dragon)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Comodo Dragon"},{r:new RegExp("(YottaaMonitor)")},{r:new RegExp("(Kindle)/(\\d+)\\.(\\d+)")},{r:new RegExp("(AdobeAIR|Chromium|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Shiira|Sunrise|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Vodafone|NetFront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iron|Iris)/(\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(Bolt|Jasmine|IEMobile|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|Vodafone|NetFront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Iron|Space Bison|Stainless|Orca|Dolfin|BOLT)/(\\d+)\\.(\\d+)")},{r:new RegExp("(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(iCab|Lunascape|Opera|Android) (\\d+)\\.(\\d+)\\.?(\\d+)?")},{r:new RegExp("(IEMobile) (\\d+)\\.(\\d+)"), family:"IE Mobile"},{r:new RegExp("(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(Firefox)/(\\d+)\\.(\\d+)(pre|[ab]\\d+[a-z]*)?")},{r:new RegExp("(Obigo|OBIGO)[^\\d]*(\\d+)(?:.(\\d+))?"), family:"Obigo"},{r:new RegExp("(MAXTHON|Maxthon) (\\d+)\\.(\\d+)"), family:"Maxthon"},{r:new RegExp("(Maxthon|MyIE2|Uzbl|Shiira)"), major: "0"},{r:new RegExp("(PLAYSTATION) (\\d+)"), family:"PlayStation"},{r:new RegExp("(PlayStation Portable)[^\\d]+(\\d+).(\\d+)")},{r:new RegExp("(BrowseX) \\((\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(POLARIS)/(\\d+)\\.(\\d+)"), family:"Polaris"},{r:new RegExp("(BonEcho)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Bon Echo"},{r:new RegExp("(iPod).+Version/(\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(iPhone) OS (\\d+)_(\\d+)(?:_(\\d+))?")},{r:new RegExp("(iPad).+ OS (\\d+)_(\\d+)(?:_(\\d+))?")},{r:new RegExp("(Avant)")},{r:new RegExp("(Nokia)[EN]?(\\d+)")},{r:new RegExp("(Black[bB]erry).+Version\\/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Blackberry"},{r:new RegExp("(Black[bB]erry)\\s?(\\d+)"), family:"Blackberry"},{r:new RegExp("(OmniWeb)/v(\\d+)\\.(\\d+)")},{r:new RegExp("(Blazer)/(\\d+)\\.(\\d+)"), family:"Palm Blazer"},{r:new RegExp("(Pre)/(\\d+)\\.(\\d+)"), family:"Palm Pre"},{r:new RegExp("(Links) \\((\\d+)\\.(\\d+)")},{r:new RegExp("(QtWeb) Internet Browser/(\\d+)\\.(\\d+)")},{r:new RegExp("(Silk)/(\\d+)\\.(\\d+)(?:\\.([0-9\\-]+))?")},{r:new RegExp("(Version)/(\\d+)\\.(\\d+)(?:\\.(\\d+))?.*Safari/"), family:"Safari"},{r:new RegExp("(Safari)/\\d+")},{r:new RegExp("(OLPC)/Update(\\d+)\\.(\\d+)")},{r:new RegExp("(OLPC)/Update()\\.(\\d+)")},{r:new RegExp("(SamsungSGHi560)"), family:"Samsung SGHi560"},{r:new RegExp("^(SonyEricssonK800i)"), family:"Sony Ericsson K800i"},{r:new RegExp("(Teleca Q7)")},{r:new RegExp("(MSIE) (\\d+)\\.(\\d+)"), family:"IE"},{r:new RegExp("(Thunderbird)/(\\d+)\\.(\\d+)\\.?(\\d+)?")},{r:new RegExp("(Wget)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)")},{r:new RegExp("(curl)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"cURL"}];exports.os = [{r:new RegExp("(Android)")},{r:new RegExp("(Windows)")},{r:new RegExp("(iPad)")},{r:new RegExp("(iPhone OS) ([\\d_]+)"), os:"iOS"},{r:new RegExp("(Mac OS X)")},{r:new RegExp("(FreeBSD)")},{r:new RegExp("(iPod)")},{r:new RegExp("(iPhone Simulator)")},{r:new RegExp("(Linux)")},{r:new RegExp("(Red Hat)")}];

@@ -141,3 +141,3 @@ /**

// the Chrome/ so we know that it's actually using Chrome under the hood
if (jsagent &&
if (jsagent &&
(jsagent.indexOf('Chrome/') !== -1 && useragent.indexOf('chromeframe') !== -1)

@@ -207,18 +207,37 @@ ) {

function is (useragent) {
var ua = useragent.toLowerCase()
var ua = (useragent || '').toLowerCase()
, details = {
version: (ua.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [0, "0"])[1]
, webkit: ua.indexOf('webkit') !== -1
, opera: ua.indexOf('opera') !== -1
webkit: false
, mozilla: false
, chrome: false
, safari: false
, mobile_safari: false
, opera: false
, ie: false
, firefox: false
, version: (ua.match(is.versionRE) || [0, "0"])[1]
};
// the following checks depend on our findings from above
details.ie = ua.indexOf('msie') && !details.opera;
details.chrome = ua.indexOf('chrome') !== -1 && details.webkit;
details.safari = ua.indexOf('safari') !== -1 && !details.chrome;
details.mobile_safari = ua.indexOf('apple') !== -1
&& ua.indexOf('mobile') !== -1 && details.safari;
details.firefox = ua.indexOf('mozilla') !== -1
&& !(details.webkit || ua.indexOf('compatible') !== -1);
if (~ua.indexOf('webkit')) {
details.webkit = true;
if (~ua.indexOf('chrome')) {
details.chrome = true;
} else if (~ua.indexOf('safari')) {
details.safari = true;
if (~ua.indexOf('mobile') && ~ua.indexOf('apple')) {
details.mobile_safari = true;
}
}
} else if (~ua.indexOf('opera')) {
details.opera = true;
} else if (~ua.indexOf('mozilla') && ua.indexOf('compatible') < 0) {
details.mozilla = true;
if (~ua.indexOf('firefox')) details.firefox = true;
} else if (~ua.indexOf('msie')) {
details.ie = true;
}
return details;

@@ -228,2 +247,11 @@ }

/**
* Parses out the version numbers.
*
* @type {RegExp}
* @api private
*/
is.versionRE = /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/;
/**
* Converts the result of Agent.toString() back to a new Agent.

@@ -291,3 +319,3 @@ *

updater.version = '1.0.3';
updater.version = '1.0.4';

@@ -294,0 +322,0 @@ /**

{
"name": "useragent"
, "version": "1.0.3"
, "version": "1.0.4"
, "description": "User-Agent string parser based on Browserscope.org algorithms for more browser reporting"

@@ -29,8 +29,8 @@ , "author": "Arnout Kazemier"

"yamlparser": "0.0.2"
, "request": "2.1.1"
, "semver": "1.0.11"
, "request": "2.2.9"
, "semver": "1.0.12"
}
, "devDependencies": {
"should": "0.3.1"
, "expresso": "0.8.1"
"should": "*"
, "mocha": "*"
, "long-stack-traces": "0.1.2"

@@ -41,3 +41,4 @@ }

, "update": "./bin/update.js"
, "test": "make test"
}
}

@@ -1,3 +0,5 @@

# useragent
# useragent
Current build status:[![BuildStatus](https://secure.travis-ci.org/3rd-Eden/useragent.png)](http://travis-ci.org/3rd-Eden/useragent)
Useragent is a port of browserscope.org's user agent parser project which

@@ -4,0 +6,0 @@ allows you to parse user agent strings with high accuracy by using hand tuned

var useragent = require('../')
, should = require('should')
, features = require('../features');
, features = require('../features')
, ua = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.24 Safari/535.2"
// use a fixed user agent to ensure proper test results each time
var ua = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.24 Safari/535.2";
describe('useragent/features', function () {
describe('#satisfies', function () {
it('should satisfy that range selector', function () {
var agent = useragent.parse(ua)
// make sure we have proper stack traces for when things fail
require('long-stack-traces');
// the actual tests
module.exports = {
'satisfy that range selector': function () {
var agent = useragent.parse(ua);
agent.satisfies('15.x || >=19.5.0 || 25.0.0 - 17.2.3').should.be_true;
agent.satisfies('>16.12.0').should.be_false;
}
};
agent.satisfies('15.x || >=19.5.0 || 25.0.0 - 17.2.3').should.be_true;
agent.satisfies('>16.12.0').should.be_false;
})
})
})
var useragent = require('../')
, should = require('should');
, ua = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.24 Safari/535.2"
// use a fixed user agent to ensure proper test results each time
var ua = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.24 Safari/535.2";
// the actual tests
describe('useragent', function () {
it('should expose the current version number', function () {
useragent.version.should.match(/^\d+\.\d+\.\d+$/)
})
// make sure we have proper stack traces for when things fail
require('long-stack-traces');
it('should expose the Agent interface', function () {
useragent.Agent.should.be.a('function')
})
// the actual tests
module.exports = {
'semver compatible version number': function () {
useragent.version.should.match(/^\d+\.\d+\.\d+$/);
},
it('should expose the JSON parser', function () {
useragent.fromJSON.should.be.a('function')
})
'parser should not throw errors when no useragent has been given': function () {
var agent = useragent.parse();
it('should expose the Agent string parser', function () {
useragent.fromString.should.be.a('function')
})
agent.family.should.equal('Other');
agent.major.should.equal('0');
agent.minor.should.equal('0');
agent.patch.should.equal('0');
it('should expose the dictionary lookup', function () {
useragent.lookup.should.be.a('function')
})
agent.os.should.equal('Other');
agent.toVersion().should.equal('0.0.0');
agent.toString().should.equal('Other 0.0.0');
agent.toAgent().should.equal('Other 0.0.0');
agent.toJSON().should.equal('{"family":"Other","major":"0","minor":"0","patch":"0","os":"Other"}');
},
it('should expose the parser', function () {
useragent.parse.should.be.a('function')
})
'parser should not throw errors and default to unkown': function () {
var agent = useragent.parse('');
it('should expose the useragent tester', function () {
useragent.is.should.be.a('function')
})
agent.family.should.equal('Other');
agent.major.should.equal('0');
agent.minor.should.equal('0');
agent.patch.should.equal('0');
describe('#parse', function () {
it('should not throw errors when no useragent is given', function () {
var agent = useragent.parse()
agent.os.should.equal('Other');
agent.toVersion().should.equal('0.0.0');
agent.toString().should.equal('Other 0.0.0');
agent.toAgent().should.equal('Other 0.0.0');
agent.toJSON().should.equal('{"family":"Other","major":"0","minor":"0","patch":"0","os":"Other"}');
},
agent.family.should.equal('Other')
agent.major.should.equal('0')
agent.minor.should.equal('0')
agent.patch.should.equal('0')
'correctly parse chromes user agent': function () {
var agent = useragent.parse(ua);
agent.os.should.equal('Other')
agent.toVersion().should.equal('0.0.0')
agent.toString().should.equal('Other 0.0.0')
agent.toAgent().should.equal('Other 0.0.0')
agent.toJSON().should.equal('{"family":"Other","major":"0","minor":"0","patch":"0","os":"Other"}')
})
agent.family.should.equal('Chrome');
agent.major.should.equal('15');
agent.minor.should.equal('0');
agent.patch.should.equal('874');
it('should not throw errors on empty strings and default to unkown', function () {
var agent = useragent.parse('')
agent.os.should.equal('Mac OS X');
agent.toVersion().should.equal('15.0.874');
agent.toString().should.equal('Chrome 15.0.874 / Mac OS X');
agent.toAgent().should.equal('Chrome 15.0.874');
agent.toJSON().should.equal('{"family":"Chrome","major":"15","minor":"0","patch":"874","os":"Mac OS X"}');
},
agent.family.should.equal('Other')
agent.major.should.equal('0')
agent.minor.should.equal('0')
agent.patch.should.equal('0')
'simple detections': function () {
useragent.is(ua).chrome.should.be_true;
useragent.is(ua).webkit.should.be_true;
useragent.is(ua).firefox.should.be_false;
},
agent.os.should.equal('Other')
agent.toVersion().should.equal('0.0.0')
agent.toString().should.equal('Other 0.0.0')
agent.toAgent().should.equal('Other 0.0.0')
agent.toJSON().should.equal('{"family":"Other","major":"0","minor":"0","patch":"0","os":"Other"}')
})
'reparse from agent string': function () {
var agent = useragent.fromString('Chrome 15.0.874 / Mac OS X');
it('should correctly parse chromes user agent', function () {
var agent = useragent.parse(ua)
agent.family.should.equal('Chrome');
agent.major.should.equal('15');
agent.minor.should.equal('0');
agent.patch.should.equal('874');
agent.family.should.equal('Chrome')
agent.major.should.equal('15')
agent.minor.should.equal('0')
agent.patch.should.equal('874')
agent.os.should.equal('Mac OS X');
agent.toVersion().should.equal('15.0.874');
agent.toString().should.equal('Chrome 15.0.874 / Mac OS X');
agent.toAgent().should.equal('Chrome 15.0.874');
agent.toJSON().should.equal('{"family":"Chrome","major":"15","minor":"0","patch":"874","os":"Mac OS X"}');
},
agent.os.should.equal('Mac OS X')
agent.toVersion().should.equal('15.0.874')
agent.toString().should.equal('Chrome 15.0.874 / Mac OS X')
agent.toAgent().should.equal('Chrome 15.0.874')
agent.toJSON().should.equal('{"family":"Chrome","major":"15","minor":"0","patch":"874","os":"Mac OS X"}')
})
})
'reparse from agent string without operating system': function () {
var agent = useragent.fromString('Chrome 15.0.874');
describe('#is', function () {
var chrome = ua
, firefox = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0'
, ie = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; yie8)'
, opera = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; de) Opera 11.51'
, safari = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; da-dk) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1'
, ipod = 'Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5'
agent.family.should.equal('Chrome');
agent.major.should.equal('15');
agent.minor.should.equal('0');
agent.patch.should.equal('874');
it('should not throw errors when called without arguments', function () {
useragent.is()
useragent.is('')
})
agent.os.should.equal('Other');
agent.toVersion().should.equal('15.0.874');
agent.toAgent().should.equal('Chrome 15.0.874');
}
};
it('should correctly detect google chrome', function () {
useragent.is(chrome).chrome.should.be.true
useragent.is(chrome).webkit.should.be.true
useragent.is(chrome).safari.should.be.false
useragent.is(chrome).firefox.should.be.false
useragent.is(chrome).mozilla.should.be.false
useragent.is(chrome).ie.should.be.false
useragent.is(chrome).opera.should.be.false
useragent.is(chrome).mobile_safari.should.be.false
})
it('should correctly detect firefox', function () {
useragent.is(firefox).chrome.should.be.false
useragent.is(firefox).webkit.should.be.false
useragent.is(firefox).safari.should.be.false
useragent.is(firefox).firefox.should.be.true
useragent.is(firefox).mozilla.should.be.true
useragent.is(firefox).ie.should.be.false
useragent.is(firefox).opera.should.be.false
useragent.is(firefox).mobile_safari.should.be.false
})
it('should correctly detect internet explorer', function () {
useragent.is(ie).chrome.should.be.false
useragent.is(ie).webkit.should.be.false
useragent.is(ie).safari.should.be.false
useragent.is(ie).firefox.should.be.false
useragent.is(ie).mozilla.should.be.false
useragent.is(ie).ie.should.be.true
useragent.is(ie).opera.should.be.false
useragent.is(ie).mobile_safari.should.be.false
})
it('should correctly detect opera', function () {
useragent.is(opera).chrome.should.be.false
useragent.is(opera).webkit.should.be.false
useragent.is(opera).safari.should.be.false
useragent.is(opera).firefox.should.be.false
useragent.is(opera).mozilla.should.be.false
useragent.is(opera).ie.should.be.false
useragent.is(opera).opera.should.be.true
useragent.is(opera).mobile_safari.should.be.false
})
it('should correctly detect safari', function () {
useragent.is(safari).chrome.should.be.false
useragent.is(safari).webkit.should.be.true
useragent.is(safari).safari.should.be.true
useragent.is(safari).firefox.should.be.false
useragent.is(safari).mozilla.should.be.false
useragent.is(safari).ie.should.be.false
useragent.is(safari).opera.should.be.false
useragent.is(safari).mobile_safari.should.be.false
})
it('should correctly detect safari-mobile', function () {
useragent.is(ipod).chrome.should.be.false
useragent.is(ipod).webkit.should.be.true
useragent.is(ipod).safari.should.be.true
useragent.is(ipod).firefox.should.be.false
useragent.is(ipod).mozilla.should.be.false
useragent.is(ipod).ie.should.be.false
useragent.is(ipod).opera.should.be.false
useragent.is(ipod).mobile_safari.should.be.true
})
})
describe('#fromString', function () {
it('should reparse an Agent string with operating system', function () {
var agent = useragent.fromString('Chrome 15.0.874 / Mac OS X')
agent.family.should.equal('Chrome')
agent.major.should.equal('15')
agent.minor.should.equal('0')
agent.patch.should.equal('874')
agent.os.should.equal('Mac OS X')
agent.toVersion().should.equal('15.0.874')
agent.toString().should.equal('Chrome 15.0.874 / Mac OS X')
agent.toAgent().should.equal('Chrome 15.0.874')
agent.toJSON().should.equal('{"family":"Chrome","major":"15","minor":"0","patch":"874","os":"Mac OS X"}')
})
it('should reparse an Agent string without operating system', function () {
var agent = useragent.fromString('Chrome 15.0.874');
agent.family.should.equal('Chrome');
agent.major.should.equal('15');
agent.minor.should.equal('0');
agent.patch.should.equal('874');
agent.os.should.equal('Other');
agent.toVersion().should.equal('15.0.874');
agent.toAgent().should.equal('Chrome 15.0.874');
})
})
})

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc