Socket
Socket
Sign inDemoInstall

51degrees

Package Overview
Dependencies
Maintainers
2
Versions
24
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

51degrees - npm Package Compare versions

Comparing version 1.3.10 to 1.5.0

update.js

44

index.js

@@ -31,2 +31,3 @@ /*

var debug = require('debug')('51degrees');
var update = require('./update');
var TrieParser = require('./build/Release/trie.node').TrieParser;

@@ -54,5 +55,5 @@ var PatternParser = require('./build/Release/pattern.node').PatternParser;

function Parser(filename, properties) {
function Parser(filename, properties, options) {
if (!(this instanceof Parser))
return new Parser(name, options);
return new Parser(filename, properties, options);

@@ -85,12 +86,16 @@ if (typeof filename !== 'string') {

//
var options = options || {};
var extname = path.extname(filename);
var props = properties.join(',');
if (extname === '.trie') {
this.method = 'trie';
this._parser = new TrieParser(filename, properties.join(','));
this._parser = new TrieParser(filename, props);
} else if (extname === '.dat') {
this.method = 'pattern';
this._parser = new PatternParser(filename, properties.join(','));
this._parser = new PatternParser(filename, props);
autoUpdate(filename, props, options);
} else if (extname === '') {
this.method = 'pattern';
this._parser = new PatternParser(filename + '.dat', properties.join(','));
this._parser = new PatternParser(filename + '.dat', props);
autoUpdate(filename + '.dat', props, options);
} else {

@@ -101,2 +106,10 @@ var err = new Error('failed to read file: ' + filename);

}
var self = this;
function autoUpdate(filename, props, options) {
if (!options.autoUpdate) return;
setInterval(function () {
self.update(filename, props, options.key, options.onupdated);
}, options.interval || 30 * 60 * 1000);
}
}

@@ -111,4 +124,23 @@

return res;
}
};
Parser.prototype.update = function(filename, props, key, onupdated) {
var self = this;
if (!key)
throw new Error('key required');
update(key, filename, function onresponse(updated) {
if (updated) {
try {
var org = self._parser;
var newParser = new PatternParser(filename, props);
delete self._parser;
self._parser = newParser;
debug('updated successfully');
} catch (err) {}
}
if (typeof onupdated === 'function') onupdated(updated);
});
};
function capitaliseFirstLetter(str) {

@@ -115,0 +147,0 @@ return str.charAt(0).toLowerCase() + str.slice(1);

18

package.json
{
"name": "51degrees",
"version": "1.3.10",
"version": "1.5.0",
"description": "51degrees c-sdk native bindings for nodejs",
"main": "index.js",
"scripts": {
"test": "node test.js",
"test": "NODE_ENV=test node test.js",
"install": "node-gyp rebuild --msvs_version=2012",

@@ -13,20 +13,22 @@ "build": "node-gyp configure --msvs_version=2012 && node-gyp build"

"type": "git",
"url": "git@github.com:yorkie/51degrees.node.git"
"url": "git@github.com:51Degreesmobi/51degrees.node.git"
},
"author": "Yorkie Neil <yorkiefixer@gmail.com>",
"author": "Yorkie Liu <yorkiefixer@gmail.com>",
"license": "MPL",
"gypfile": true,
"bugs": {
"url": "https://github.com/yorkie/51degrees.node/issues"
"url": "https://github.com/51Degreesmobi/51degrees.node/issues"
},
"homepage": "https://github.com/yorkie/51degrees.node",
"homepage": "https://github.com/51Degreesmobi/51degrees.node",
"dependencies": {
"nan": "^1.3.0",
"debug": "^2.1.0"
"debug": "^2.1.0",
"nan": "^1.3.0"
},
"devDependencies": {
"csv": "^0.4.0",
"httpmocker": "^1.3.4",
"microtime": "^1.0.1",
"sinon": "^1.12.2",
"tape": "^2.14.0"
}
}

@@ -18,8 +18,18 @@

##### `.Parse(filename[, properties])`
##### `.Parse(filename[, properties, options])`
* `filename` {String} your 51degrees data, lite or premium.
* `options` {Array} optional, required properties
* `properties` {Array} optional, required properties
* `options` {Object}
* `options.autoUpdate` {Boolean} enable/disable `autoUpdate` feature
* `options.key` {String} auto-update requires a licesen key from 51Degrees
* `options.interval` {Integer}, default value 30 * 60 * 1000 (half hours)
* `options.onupdated` {Function} if auto updated, you will get call at this function
for more information, you could move to [51degrees documentation](https://51degrees.com/Support/Documentation)

@@ -43,2 +53,13 @@

##### Create an auto-updated pattern parser
```js
var psr = new Parser('51Degrees-Lite.dat', [], {
autoUpdate: true,
key: 'your license key'
});
```
**Note**: this feature only is used at **pattern** data.
After the above program, you will get:

@@ -45,0 +66,0 @@

@@ -31,5 +31,8 @@ /*

var fs = require('fs');
var zlib = require('zlib');
var path = require('path');
var Parser = require('./index').Parser;
var properties = require('./index').ALL_PROPERTIES;
var configmock = require('httpmocker').config;
var userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36';

@@ -108,2 +111,76 @@ var ua_src = fs.readFileSync(path.join(__dirname, './benchmark/ua.txt'));

test('update with 200', function(t) {
var update = require('./update');
zlib.gzip(new Buffer('abcdefg', 'utf8'), function(err, data) {
configmock({
'https://51degrees.com/Products/': {
statusCode: 200,
headers: {
'content-type': 'text/plain',
'content-md5': '519fdca9541cfdfbd905e3a92ec2f8ed'
},
body: data
}
});
update('license key', 'test.update', function(updated) {
t.equal(updated, true);
var d = fs.readFileSync('test.update').toString();
t.equal(d, 'abcdefg');
t.end();
fs.unlinkSync('test.update');
});
});
});
test('update with 403', function(t) {
var update = require('./update');
configmock({
'https://51degrees.com/Products/': {
statusCode: 403
}
});
update('license key', 'test.update', function(updated) {
t.equal(updated, false);
t.end();
});
});
test('auto update', function(t) {
var sinon = require('sinon');
var clock = sinon.useFakeTimers();
var orgSrc = fs.readFileSync('51Degrees-Lite.dat');
zlib.gzip(new Buffer('abcdefg', 'utf8'), function(err, data) {
configmock({
'https://51degrees.com/Products/': {
statusCode: 200,
headers: {
'content-type': 'text/plain',
'content-md5': '519fdca9541cfdfbd905e3a92ec2f8ed'
},
body: data
}
});
psr1 = new Parser('51Degrees-Lite', properties, {
autoUpdate: true,
key: 'license key',
onupdated: onupdated
});
clock.tick(30*60*1000);
});
function onupdated(updated) {
t.equal(fs.readFileSync('51Degrees-Lite.dat').length, 7);
end();
}
function end() {
fs.writeFileSync('51Degrees-Lite.dat', orgSrc);
clock.restore();
t.end();
}
});
test('memory leak at pattern', function(t) {

@@ -110,0 +187,0 @@ var cp1 = process.memoryUsage().rss / 1024 / 1024;

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc