UNPKG

@hmcts/os-places-client

Version:

Ordnance Survey address lookup client (https://apidocs.os.uk/docs/os-places-postcode)

80 lines 10.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const requestPromise = require("request-promise-native"); const address_1 = require("./address"); const addressInfoResponse_1 = require("./addressInfoResponse"); const header_1 = require("./header"); const point_1 = require("./point"); class OSPlacesClient { constructor(apiToken, request = requestPromise, apiUrl = 'https://api.os.uk', apiPath = '/search/places/v1/postcode') { this.apiToken = apiToken; this.request = request; this.apiUrl = apiUrl; this.apiPath = apiPath; } lookupByPostcode(postcode) { if (!postcode) { return Promise.reject(new Error('Missing required postcode')); } const uri = this.getUri(postcode, 0, ''); return this.getResponse(uri, new addressInfoResponse_1.AddressInfoResponse(999, [], false)); } lookupByPostcodeAndDataSet(postcode, dataset) { if (!postcode) { return Promise.reject(new Error('Missing required postcode')); } const uri = this.getUri(postcode, 0, dataset); return this.getResponse(uri, new addressInfoResponse_1.AddressInfoResponse(999, [], false)); } getUri(postcode, offset, dataset) { if (!dataset) { return `${this.apiUrl}${this.apiPath}?offset=${offset}&key=${this.apiToken}&postcode=${postcode}`; } else { return `${this.apiUrl}${this.apiPath}?offset=${offset}&key=${this.apiToken}&dataset=${dataset}&postcode=${postcode}`; } } getResponse(uri, addressInfoResponse) { return this.request.get({ json: false, resolveWithFullResponse: true, simple: false, uri: `${uri}` }).then((response) => { if (response.statusCode >= 500) { throw new Error('Error with OS Places service'); } else if (response.statusCode === 404) { return new addressInfoResponse_1.AddressInfoResponse(404, [], false); } else if (response.statusCode === 401) { throw new Error('Authentication failed'); } const placesQueryBody = JSON.parse(response.body); const header = new header_1.Header(placesQueryBody.header.uri, placesQueryBody.header.query, placesQueryBody.header.offset, placesQueryBody.header.totalresults, placesQueryBody.header.format, placesQueryBody.header.dataset, placesQueryBody.header.lr, placesQueryBody.header.maxresults, placesQueryBody.header.epoch, placesQueryBody.header.output_srs); if (addressInfoResponse.statusCode === 999) { addressInfoResponse = new addressInfoResponse_1.AddressInfoResponse(response.statusCode, [], response.statusCode === 200); } if (placesQueryBody.results) { addressInfoResponse.addAll(placesQueryBody.results.map((jsonAddress) => { if (!jsonAddress.DPA) { return new address_1.Address(jsonAddress.LPI.UPRN, jsonAddress.LPI.ORGANISATION, jsonAddress.LPI.DEPARTMENT_NAME, jsonAddress.LPI.PO_BOX_NUMBER, jsonAddress.LPI.PAO_TEXT, jsonAddress.LPI.SAO_TEXT, jsonAddress.LPI.BUILDING_NUMBER, jsonAddress.LPI.STREET_DESCRIPTION, jsonAddress.LPI.DEPENDENT_THOROUGHFARE_NAME, jsonAddress.LPI.DEPENDENT_LOCALITY, jsonAddress.LPI.DOUBLE_DEPENDENT_LOCALITY, jsonAddress.LPI.TOWN_NAME, jsonAddress.LPI.POSTCODE_LOCATOR, jsonAddress.LPI.POSTAL_ADDRESS_CODE, jsonAddress.LPI.ADDRESS, new point_1.Point('Point', [jsonAddress.LPI.X_COORDINATE, jsonAddress.LPI.Y_COORDINATE]), jsonAddress.LPI.USRN); } else { return new address_1.Address(jsonAddress.DPA.UPRN, jsonAddress.DPA.ORGANISATION_NAME, jsonAddress.DPA.DEPARTMENT_NAME, jsonAddress.DPA.PO_BOX_NUMBER, jsonAddress.DPA.BUILDING_NAME, jsonAddress.DPA.SUB_BUILDING_NAME, jsonAddress.DPA.BUILDING_NUMBER, jsonAddress.DPA.THOROUGHFARE_NAME, jsonAddress.DPA.DEPENDENT_THOROUGHFARE_NAME, jsonAddress.DPA.DEPENDENT_LOCALITY, jsonAddress.DPA.DOUBLE_DEPENDENT_LOCALITY, jsonAddress.DPA.POST_TOWN, jsonAddress.DPA.POSTCODE, jsonAddress.DPA.POSTAL_ADDRESS_CODE, jsonAddress.DPA.ADDRESS, new point_1.Point('Point', [jsonAddress.DPA.X_COORDINATE, jsonAddress.DPA.Y_COORDINATE]), jsonAddress.DPA.UDPRN); } })); } if (header.hasNextPage()) { const next = this.getUri(addressInfoResponse.addresses[0].postcode, header.getNextOffset(), header.dataset); return this.getResponse(next, addressInfoResponse); } if (addressInfoResponse.addresses.length === 0) { addressInfoResponse.isValid = false; } return addressInfoResponse; }); } } exports.OSPlacesClient = OSPlacesClient; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3NQbGFjZXNDbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvb3NQbGFjZXNDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSx5REFBd0Q7QUFDeEQsdUNBQW1DO0FBQ25DLCtEQUEyRDtBQUMzRCxxQ0FBaUM7QUFDakMsbUNBQStCO0FBRS9CO0lBRUUsWUFBOEIsUUFBZ0IsRUFDM0IsVUFFa0IsY0FBYyxFQUNoQyxTQUFpQixtQkFBbUIsRUFDcEMsVUFBa0IsNEJBQTRCO1FBTG5DLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDM0IsWUFBTyxHQUFQLE9BQU8sQ0FFeUI7UUFDaEMsV0FBTSxHQUFOLE1BQU0sQ0FBOEI7UUFDcEMsWUFBTyxHQUFQLE9BQU8sQ0FBdUM7SUFDakUsQ0FBQztJQUVNLGdCQUFnQixDQUFFLFFBQWdCO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFBO1NBQzlEO1FBRUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSx5Q0FBbUIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDdkUsQ0FBQztJQUVNLDBCQUEwQixDQUFFLFFBQWdCLEVBQUUsT0FBZTtRQUNsRSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQTtTQUM5RDtRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUM3QyxP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