https://github.com/bitfinexcom/bfx-util-net-js
https://github.com/bitfinexcom/bfx-util-net-js
Last synced: 9 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/bitfinexcom/bfx-util-net-js
- Owner: bitfinexcom
- License: apache-2.0
- Created: 2017-10-25T13:49:50.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2025-07-30T13:26:05.000Z (11 months ago)
- Last Synced: 2025-07-30T16:02:22.323Z (11 months ago)
- Language: JavaScript
- Size: 407 KB
- Stars: 5
- Watchers: 9
- Forks: 12
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://travis-ci.org/bitfinexcom/bfx-util-net-js)
# bfx-util-net
## Setup
The project inherits code from a base repository.
The base / root project is: https://github.com/bitfinexcom/bfx-util-js
## Setup
### Set upstream
```
git remote add upstream https://github.com/bitfinexcom/bfx-util-js
```
Changes should go through the base project and merged from upstream, if applicable.
### Configuration
```
bash setup-config.sh
```
### Grapes
Run two Grapes:
```
grape --dp 20001 --aph 30001 --bn '127.0.0.1:20002'
grape --dp 20002 --aph 40001 --bn '127.0.0.1:20001'
```
### Update Geo/ASN data
First, export your license key, for staging/prod we have a comercial
license. For dev, you can get a free key key optained through
https://dev.maxmind.com/geoip/geolite2-free-geolocation-data?lang=en
export MAXMIND_LICENSE='your secret license'
```
npm run update-geo-data
npm run update-asn-data
```
### Periodic Updates for Geo/ASN data
Update geo-data at midnight every three days with cron.
Update geo-data at 23:00 every three days with cron.
Let's assume the path to the deployed service is `/opt/var/bfx-util-net`.
```
0 0 */3 * * cd /opt/var/bfx-util-net && /usr/bin/npm run update-geo-data
0 23 */3 * * cd /opt/var/bfx-util-net && /usr/bin/npm run update-asn-data
```
The IP databases are watching the database files for changes and will load
the updated data into the RAM as soon as the data changes.
### Boot worker
```
node worker.js --env=development --wtype=wrk-util-net-api --apiPort 8721
```
### SSL / ACL
To turn on ACL and SSL set up, copy `sec-test` to `sec`:
```
cp -R sec-test sec
```
Set access rules in [sec/acl.json](https://github.com/bitfinexcom/bfx-util-net-js/blob/8d07c144f3a4135db0d4c7bc51297ffc06e358f9/sec-test/acl.json)
Access is logged to [sec/acl.log](https://github.com/bitfinexcom/bfx-util-net-js/blob/8d07c144f3a4135db0d4c7bc51297ffc06e358f9/sec-test/acl.log).
To use SSL in `example.js`, uncomment everything related to SSL: https://github.com/bitfinexcom/bfx-util-net-js/blob/8d07c144f3a4135db0d4c7bc51297ffc06e358f9/example.js#L16.L24
## Grenache API
### action: 'getIpInfo'
- `args`: <Array>
- `0`: <String> IP to lookup
**Response:**
- <Array>
- 0 <String> Ip that was looked up
- 1 <Object> Result: geo, dns
**Example Response:**
```js
[
"8.8.8.8",
{
"geo": {
"range": [
134744064,
134744319
],
"country": "US",
"region": "CA",
"city": "Mountain View",
"ll": [
37.386,
-122.0838
],
"metro": 807,
"zip": 94035
},
"dns": [
"google-public-dns-a.google.com"
],
"asn": {
"autonomous_system_number": 15169,
"autonomous_system_organization": "Google Inc."
}
}
]
```
### action: 'getIpAsn'
- `args`: <Array>
- `0`: <String> IP to lookup
**Response:**
- <Array>
- 0 <String> Ip that was looked up
- 1 <Object> ASN information
**Example Response:**
```js
[ '8.8.8.8',
{ autonomous_system_number: 15169,
autonomous_system_organization: 'Google Inc.' } ]
```
### action: 'getReverseDns'
- `args`: <Array>
- `0`: <String> IP to lookup
**Response:**
- <Array>
- 0 <String> Ip that was looked up
- 1 <Array> hostnames
**Example Response:**
```js
[ '8.8.8.8', [ 'google-public-dns-a.google.com' ] ]
```
### action: 'getIpGeo'
- `args`: <Array>
- `0`: <String> IP to lookup
**Response:**
- <Array>
- 0 <String> Ip that was looked up
- 1 <Object> Result: range, country, region, city, ll, metro, zip
**Example Response:**
```js
[ '53.1.34.21',
{ range: [ 889192448, 897238054 ],
country: 'DE',
region: '',
city: '',
ll: [ 51.2993, 9.491 ],
metro: 0,
zip: 0 } ]
```
### action: 'getIpGeoBatch'
- `args`: <Array>
- `0`: <Array> IPs to lookup
**Response:**
- <Array>
- 0 <String> Ip that was looked up
- 1 <Array> Result array
**Example Response:**
```js
[ '53.1.34.21',
{ range: [ 889192448, 897238054 ],
country: 'DE',
region: '',
city: '',
ll: [ 51.2993, 9.491 ],
metro: 0,
zip: 0 } ]
```
#### Example
```
const query = {
action: 'geoIp',
'args': [ '53.1.34.21' ]
}
peer.request('rest:net:util', query, { timeout: 10000 }, (err, data) => {
if (err) {
console.error(err)
process.exit(1)
}
console.log(data)
})
```