import config from './../config' import axios from 'axios' import { LatLng } from './common' export interface PostTripRouteRequestOptions { wayPoints: LatLng[] specialObjectTypes: Array mode?: string debug?: boolean context?: string } export interface PostTripRouteResponse { status: string errorMessage: string mode: string route: Array } interface PostTripRouteResponseRoute { distance: number geometry: string special_objects: any } export const requestPostTripRoute = async (opt: PostTripRouteRequestOptions): Promise => { if (!config.API_KEY) { throw new Error('In order to call the NextBillion.ai API, you must provide a valid API Key.') } if (!config.API_HOST) { throw new Error('An API host is required to make request to NextBillion.ai API.') } if (!Array.isArray(opt.wayPoints) || opt.wayPoints.length === 0) { throw new Error('invalid wayPoints array') } const params: any = { key: config.API_KEY, waypoints: opt.wayPoints.map((point) => `${point.lat},${point.lng}`).join('|'), debug: opt.debug || false, } if (opt.mode) { params.mode = opt.mode } if (Array.isArray(opt.specialObjectTypes) && opt.specialObjectTypes.length > 0) { params.special_object_types = `[${opt.specialObjectTypes.join(',')}]` } if (opt.context) { params.context = opt.context } return await axios .post(`https://${config.API_HOST}/postTripRoute`, { ...params, }) .then((resp) => resp.data as PostTripRouteResponse) }