all repos — caroster @ 69a8f789f50a85eb1d8519dd7d3c54eba39233c3

[Octree] Group carpool to your event https://caroster.io

frontend/pages/api/mapbox/places.ts (view raw)

 1import type {NextApiRequest, NextApiResponse} from 'next';
 2
 3type ResponseData = Array<{place_name: string; center: [number, number]}>;
 4
 5const {MAPBOX_TOKEN, MAPBOX_URL} = process.env;
 6
 7export default async function handler(
 8  req: NextApiRequest,
 9  res: NextApiResponse<ResponseData>
10) {
11  const {search, proximity = 'ip', locale} = req.query;
12  if (!search) return res.status(400).send(null);
13  else if (!MAPBOX_TOKEN) return res.status(500).send(null);
14
15  const url = `${MAPBOX_URL}geocoding/v5/mapbox.places/${search}.json?proximity=${proximity}&access_token=${MAPBOX_TOKEN}&language=${locale}`;
16
17  const mapBoxResult = await fetch(url)
18    .then(response => {
19      if (response.status === 429) {
20        throw 'MAPBOX_RATE_LIMIT_EXCEEDED';
21      }
22      return response.json();
23    })
24    .catch(error => {
25      console.error(error);
26    });
27
28  if (mapBoxResult?.features) {
29    res.status(200).send(mapBoxResult.features);
30    return;
31  }
32  res.status(500).send(null);
33}