frontend/pages/api/mapbox/searchbox/suggest.ts (view raw)
1import type {NextApiRequest, NextApiResponse} from 'next';
2
3export type MapboxSuggestion = {name: string; mapbox_id: string, address: string; place_formatted: string};
4
5const {MAPBOX_TOKEN, MAPBOX_URL} = process.env;
6
7export default async function handler(
8 req: NextApiRequest,
9 res: NextApiResponse<Array<MapboxSuggestion>>
10) {
11 const {search, proximity = 'ip', sessionToken, 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}search/searchbox/v1/suggest?q=${search}&proximity=${proximity}&language=${locale}&access_token=${MAPBOX_TOKEN}&session_token=${sessionToken}`;
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?.suggestions) {
29 console.log(url)
30 res.status(200).send(mapBoxResult.suggestions);
31 return;
32 }
33 res.send([]);
34}