2017-11-03 02:09:34 +02:00
|
|
|
const { shim } = require('lib/shim.js');
|
|
|
|
const { netUtils } = require('lib/net-utils.js');
|
2017-07-10 20:09:58 +02:00
|
|
|
|
|
|
|
class GeolocationNode {
|
|
|
|
|
|
|
|
static async currentPosition(options = null) {
|
|
|
|
if (!options) options = {};
|
|
|
|
|
|
|
|
const ip = await netUtils.ip();
|
|
|
|
|
2018-09-23 20:45:13 +02:00
|
|
|
let response = await shim.fetch('http://ip-api.com/json/' + ip);
|
2017-07-10 20:09:58 +02:00
|
|
|
if (!response.ok) throw new Error('Could not get geolocation: ' + await response.text());
|
|
|
|
|
|
|
|
response = await response.json();
|
|
|
|
|
2018-10-07 20:28:19 +02:00
|
|
|
if (!('lat' in response) || !('lon' in response)) throw new Error('Invalid geolocation response: ' + (response ? JSON.stringify(response) : '<null>'));
|
2018-09-23 20:45:13 +02:00
|
|
|
|
2017-07-10 20:09:58 +02:00
|
|
|
return {
|
|
|
|
timestamp: (new Date()).getTime(),
|
|
|
|
coords: {
|
2018-09-23 20:45:13 +02:00
|
|
|
longitude: response.lon,
|
2017-07-10 20:09:58 +02:00
|
|
|
altitude: 0,
|
2018-09-23 20:45:13 +02:00
|
|
|
latitude: response.lat
|
2017-07-10 20:09:58 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2017-11-03 02:13:17 +02:00
|
|
|
module.exports = { GeolocationNode };
|