maxminded

Auto updating maxmind GeoIP lookup for free and paid maxmind accounts and optional cloudflare fallback

Usage no npm install needed!

<script type="module">
  import maxminded from 'https://cdn.skypack.dev/maxminded';
</script>

README

maxminded NPM version Build Status Dependency Status License

Auto updating maxmind GeoIP lookup for free and paid maxmind accounts with optional cloudflare fallback. Leveringing the excellent node-maxmind package, maxminded provides a production oriented option that manages regular data updates. Maxminded provides fallback geoip lookup via geos-major which leverages CloudFlare request country code headers to look up geo data when maxmind has a lookup miss.

Install

npm install maxminded

Usage

Drop in replacement of node-maxmind when using free Maxmind GeoLiteCity data.

var maxmind = require('maxminded');              // difference: require maxminded instead of maxmind
maxmind.init('GeoLiteCity');                     // init with local data and Wednesday updates 
var location = maxmind.getLocation('66.6.44.4'); // City/Location lookup

Paid Geo Data Example

var maxminded = require('maxminded');
maxminded.init({ license: 'MAXMIND_LICENSE', memoryCache: true });

Lookup with CloudFlare fallback

This requires CloudFlare to be enabled for your domain so the cf-country header will be populated

var geo = maxminded.getLocation('66.6.44.4', req.headers); 

Optional parameters with defaults

Gives weekly GeoLiteCity data updates and 18,000 lookups / second as the caches are disabled

maxminded.init({
    license:     undefined,        // maxmind license key, for paid data. Ex: 'S0meK3yIdHere'
    indexCache:  false,            // use maxmind-node indexCache  at 80,000 lookups / second or
    memoryCache: false,            // use maxmind-node memoryCache at 130,000 lookups / second
    cronTime:    '00 30 03 * * 3', // run every Wednesday at 3:30am
    timeZone:    undefined,        // timezone based updates, ex: "America/Los_Angeles"
    start:       undefined,        // load immediately and callback when complete
    initLoad:    undefined,        // initialize with local data, same as init(string_filename)
})

For additional parameter details see: node-maxmind, node-cron and maxmind-loader

Note for PaaS users (like nodejitsu)

A bonus of using maxminded is that your geo data doesn't need to be pushed to your PaaS with your code deploy. The geo ip data can be pulled directly from maxmind in compressed form when your application launches.

maxminded.init({start: function() {
    var geo = maxminded.getLocation('66.6.44.4'); // GeoCityLite loaded w/weekly updates 
}});

License: MIT

Dependencies:

cron geos-major maxmind-loader maxmind time