Files
MyIP/api/ipapi-com.js
T

35 lines
1.0 KiB
JavaScript

// /api/ipapi — geolocation source handler backed by ip-api.com.
// Forwards the optional ?lang and normalizes the response into the
// canonical geo shape via the shared makeGeoHandler factory.
import { makeGeoHandler } from '../common/geo-handler.js';
function buildUrl(req) {
const ipAddress = req.query.ip;
// Build request URL for ip-api.com
const lang = req.query.lang || 'en';
const url = `http://ip-api.com/json/${ipAddress}?fields=66842623&lang=${lang}`;
return { url, logContext: { lang } };
}
function modifyJsonForIPAPI(json) {
const { query, country, countryCode, regionName, city, lat, lon, isp, as } = json;
const asn = as ? as.split(" ")[0] : '';
return {
ip: query,
city,
region: regionName,
country: countryCode,
country_name: country,
country_code: countryCode,
latitude: lat,
longitude: lon,
asn,
org: isp
};
}
export default makeGeoHandler({ name: 'ipapi-com', buildUrl, normalize: modifyJsonForIPAPI });