//import { ProxyAgent, setGlobalDispatcher } from 'undici'; import { flight_get_data } from './api_flight' import { nominatim_get_data } from './api_nominatim'; //setGlobalDispatcher(new ProxyAgent(process.env.HTTPS_PROXY as string)); export default function (server, opts, done) { server.get("/flight/:id", async (req, reply) => flight_get_data(req.params.id) .then(res => { let wait_for_all: Promise[] = [] res.forEach(r => { wait_for_all.push(nominatim_get_data(r.from).then(geo => (r as any).from_geo = geo[0])); wait_for_all.push(nominatim_get_data(r.to).then(geo => (r as any).to_geo = geo[0])); }); return Promise.all(wait_for_all).then(_ => res) }) .then(res => reply.send(res)) ); server.get("/place/:id", async (req, reply) => nominatim_get_data(req.params.id, JSON.parse(req.query.bb)) .then(res => reply.send(res)) ); server.get("/gpx/:id", async (req, reply) => { if (req.params.id == undefined) return reply.code(400).send({ error: "No ID query parameter" }); server.level.db.get(req.params.id, (err, val) => { if (err) { console.warn(err); reply.code(500).send(); } else { let file = '' const data = JSON.parse(val); const gen_wpt = (name, desc, latlon, icon = "Flag") => `0${name}-${desc}${icon}` const esc_str = (str) => (str || "Undefined").replace('"', """).replace("'", "'").replace("<", "<").replace(">", ">").replace("&", "&").replace("\n", "...") data.main.forEach(a => { file += gen_wpt(esc_str(a.hotel.name), esc_str(a.hotel.notes), a.hotel.latlon, "Hotel"); a.places.restaurants.forEach(b => { file += gen_wpt(esc_str(b.name), esc_str(b.notes), b.latlon, "Restaurant"); }); a.places.activities.forEach(b => { file += gen_wpt(esc_str(b.name), esc_str(b.notes), b.latlon, "Tree"); }); }); file += ""; reply.header('Content-Type', 'application/gpx+xml'); reply.header('Content-Disposition', `attachment; filename=${req.params.id}.gpx`); reply.send(file); } }); return reply; }); server.get("/:id", async (req, reply) => { if (req.params.id == undefined) return reply.code(400).send({ error: "No ID query parameter" }); server.level.db.get(req.params.id, (err, val) => { if (err) { console.warn(err); reply.code(500).send(); } else { reply.send(JSON.parse(val)); } }); return reply; }); server.post("/:id", async (req, reply) => { if (req.params.id == undefined) return reply.code(400).send({ error: "No ID query parameter" }); server.level.db.put(req.params.id, req.body, (err) => { if (err) { console.warn(err); reply.code(500).send({ error: "Error with DB" }); } else { reply.send({ content: "ok" }); } }); return reply; }); done(); };