UNPKG

pelias-openaddresses

Version:

Pelias import pipeline for OpenAddresses.

53 lines (43 loc) 1.65 kB
const _ = require('lodash'); const axios = require('axios'); const config = require('pelias-config'); const logger = require('pelias-logger').get('openaddresses'); const HOST = 'https://batch.openaddresses.io'; class OpenAddressesAPI { constructor() { this.config = _.get(config.generate(), 'imports.openaddresses', {}); this.token = _.get(this.config, 'token'); } // remove file extensions from 'source' static normalize(source) { if (!_.isString(source)) { return source; } const norm = source.replace(/\.[^/.]+$/, ''); // source definitions previously required a file extension. // please remove file extensions from your ~/pelias.json file // to silence these warning messages. if (source !== norm) { logger.warn(`source definitions no longer require a file extension '${source}'`); } return norm; } // return the http url for a specific job id static url(job) { return `${HOST}/api/job/${job}/output/source.geojson.gz`; } // if the 'validated' mode is enabled (for financial supporters only) isValidatedModeEnabled() { return _.get(this.config, 'validated') === true; } async lookup(source) { // support the 'validated' property for financial supporters const params = { source, layer: 'addresses', validated: this.isValidatedModeEnabled() ? 'true' : 'false' }; // request extended info and return the first result const versions = await axios.get(`${HOST}/api/data`, { params }); return _.isArray(versions.data) && !_.isEmpty(versions.data) ? _.head(versions.data) : {}; } } module.exports = OpenAddressesAPI;