Sherlock-backend / components / apis.js
apis.js
Raw

const {Client} = require('@googlemaps/google-maps-services-js');
const client = new Client({});

/**
 * Gets coordinates from address using Google Maps API
 * @param {*} address string address/intersection
 * @param {*} flag boolean flag to prevent many requests
 * @returns 
 */
function getCoordsFromAddress(address,flag, passed={}) {
    try{
        if(flag==true)return new Promise((reject)=>{reject("[-] Error in geocode, error flag is true."); return;});
        
        let params = {
            address: address,
            key: process.env.google_api,
            components: "country:US"
        }

        return client.geocode({
            params:params
        }).then(r=>{
            if(r.data.status != "OK"){
                console.error("[-]ERROR GEOCODING: ",r.data.status);
                return new Error("Error geocoding address", r.data.status);
            }else if(r.status != 200){
                console.error("[-]ERROR GEOCODING: ",r.status, r.data.status);
                return new Error("Error geocoding address", r.status, r.data.status);
            }else if(r.data.status == 'ZERO_RESULTS'){
                console.error("[-]ERROR GEOCODING, No results found: ",r.data.status);
                //Will later make it try to geocode the cross street instead, but for now,
                //returning an error
                return new Error("[-]No results found while geocoding:", address);
            }else{
                return {dat:r.data.results[0], passed:passed};
            }
        }).catch(e=>{
            console.error("[-]ERROR GEOCODING: ",e);
            return e.data;
        })
    }catch(e){
        console.error("[-]ERROR GEOCODING: ",e);
        throw new Error("Error geocoding address");
    }
}

module.exports = {getCoordsFromAddress}