# krowdy-geoip

> Less memory usage version of geoip-lite, by supporting only country lookup.

Latest version **1.0.2** (published 2021-07-07) · MaxMind GeoLite2 License license · 0 weekly downloads

## Install

```sh
npm install krowdy-geoip
pnpm add krowdy-geoip
yarn add krowdy-geoip
bun add krowdy-geoip
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.2 |
| Published | 2021-07-07 |
| First published | 2021-07-06 |
| Weekly downloads | 0 |
| License | MaxMind GeoLite2 License |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=0.6.3 |
| Dependencies | 8 |
| Unpacked size | 5.5 MB |
| Known vulnerabilities | 0 (+5 in 1 direct dependencies) |
| Install scripts | no |
| Author | Jesús Torres |
| Maintainers | jtorresdp |
| Keywords | geo, geoip, ip, ipv4, ipv6, geolookup, maxmind, geolite |

## Links

- npm: https://www.npmjs.com/package/krowdy-geoip
- Repository: https://github.com/jtorresdev/krowdy-geoip
- Issues: https://github.com/jtorresdev/krowdy-geoip/issues
- npm.io page: https://npm.io/package/krowdy-geoip

## Dependencies (8)

- [glob](https://npm.io/package/glob.md) ^7.1.6
- [lazy](https://npm.io/package/lazy.md) ^1.0.11
- [async](https://npm.io/package/async.md) ^2.6.1
- [yauzl](https://npm.io/package/yauzl.md) ^2.10.0
- [colors](https://npm.io/package/colors.md) ^1.4.0
- [rimraf](https://npm.io/package/rimraf.md) ^2.7.1
- [iconv-lite](https://npm.io/package/iconv-lite.md) ^0.5.2
- [ip-address](https://npm.io/package/ip-address.md) ^6.3.0

## Alternatives

- [lodash.startswith](https://npm.io/package/lodash.startswith.md) — 769.7K weekly downloads
- [@tarojs/service](https://npm.io/package/@tarojs/service.md) — 33.9K weekly downloads
- [io.extendreality.tilia.indicators.spatialtargets.unity](https://npm.io/package/io.extendreality.tilia.indicators.spatialtargets.unity.md) — 131 weekly downloads
- [@rtarojs/taro](https://npm.io/package/@rtarojs/taro.md) — 90 weekly downloads
- [node-branch-io](https://npm.io/package/node-branch-io.md) — 50 weekly downloads

## Recent versions

- 1.0.2 (latest) — 2021-07-07
- 1.0.1 — 2021-07-07
- 1.0.0 — 2021-07-06

## README

# krowdy-geoip [![NPM version](https://badge.fury.io/js/krowdy-geoip.svg)](https://badge.fury.io/js/krowdy-geoip)

Less memory usage version of [geoip-lite](https://github.com/bluesmoon/node-geoip) by limiting to country information.
This product includes GeoLite2 ipv4 and ipv6 country data which created by MaxMind, available from https://www.maxmind.com.
The database of this product **updates weekly**.

**You should read this README and the LICENSE and EULA files carefully before deciding to use this product.**<br>
**After v4, LICENSE for the database was changed. If you need to use this product with previous LICENSE, please use v3.**


## Synopsis

```javascript
var geoip = require('krowdy-geoip');

var ip = "207.97.227.239";
var geo = geoip.lookup(ip);

console.log(geo);
{ range: [ 3479299040, 3479299071 ],
  country: 'US'}
```


## Installation

### 1. Install the library

    $ npm install krowdy-geoip

### 2. Update MaxMind's geoip data

    $ npm run-script updatedb --license_key=YOUR_GEOLITE2_LICENSE_KEY
		or
    $ GEOLITE2_LICENSE_KEY=YOUR_GEOLITE2_LICENSE_KEY node scripts/updatedb.js

_YOUR_GEOLITE2_LICENSE_KEY should be replaced by a valid GeoLite2 license key. Please [follow instructions](https://dev.maxmind.com/geoip/geoip2/geolite2/) provided by MaxMind to obtain a license key._


## API

krowdy-geoip is completely synchronous.  There are no callbacks involved.  All blocking file IO is done at startup time, so all runtime
calls are executed in-memory and are fast.  Startup may take up to 20ms while it reads into memory and indexes data files.

### Looking up an IP address ###

If you have an IP address in dotted quad notation, IPv6 colon notation, or a 32 bit unsigned integer (treated
as an IPv4 address), pass it to the `lookup` method.  Note that you should remove any `[` and `]` around an
IPv6 address before passing it to this method.

```javascript
var geo = geoip.lookup(ip);
```

If the IP address was found, the `lookup` method returns an object with the following structure:

```javascript
{
   range: [ <low bound of IP block>, <high bound of IP block> ],
   country: 'XX' // 2 letter ISO-3166-1 country code
}
```

The actual values for the `range` array depend on whether the IP is IPv4 or IPv6 and should be
considered internal to `krowdy-geoip`.  To get a human readable format, pass them to `geoip.pretty()`

If the IP address was not found, the `lookup` returns `null`

### Pretty printing an IP address ###

If you have a 32 bit unsigned integer, or a number returned as part of the `range` array from the `lookup` method,
the `pretty` method can be used to turn it into a human readable string.

```javascript
    console.log("The IP is %s", geoip.pretty(ip));
```

This method returns a string if the input was in a format that `krowdy-geoip` can recognize, else it returns the
input itself.


## Built-in Updater

This package contains an update script that can pull the files from MaxMind and handle the conversion from CSV.
A npm script alias has been setup to make this process easy. Please keep in mind this requires internet and MaxMind
rate limits that amount of downloads on their servers.

```shell
npm run-script updatedb --license_key=YOUR_GEOLITE2_LICENSE_KEY
	or
GEOLITE2_LICENSE_KEY=YOUR_GEOLITE2_LICENSE_KEY node scripts/updatedb.js
```

_YOUR_GEOLITE2_LICENSE_KEY should be replaced by a valid GeoLite2 license key. Please [follow instructions](https://dev.maxmind.com/geoip/geoip2/geolite2/) provided by MaxMind to obtain a license key._


## License and EULA

Please carefully read the LICENSE and EULA files. This package comes with certain restrictions and obligations, most notably:
 - You cannot prevent the library from updating the databases.
 - You cannot use the GeoLite2 data:
   - for FCRA purposes,
   - to identify specific households or individuals.

You can read [the latest version of GeoLite2 EULA](https://www.maxmind.com/en/geolite2/eula).


## References
  - <a href="https://www.maxmind.com/en/geolite2/eula">GeoLite2 EULA</a>
  - <a href="https://www.maxmind.com/app/iso3166">Documentation from MaxMind</a>
  - <a href="https://en.wikipedia.org/wiki/ISO_3166">ISO 3166 (1 & 2) codes</a>
  - <a href="https://en.wikipedia.org/wiki/List_of_FIPS_region_codes">FIPS region codes</a>

---
_Source: https://npm.io/package/krowdy-geoip · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
