diff --git a/facilmap.conf.example b/facilmap.conf.example index 08381b8b..b9541e39 100644 --- a/facilmap.conf.example +++ b/facilmap.conf.example @@ -33,5 +33,5 @@ #FM_DEV= # Set to a comma-separated list of values (or *) to enable debug output by particular components. See https://github.com/visionmedia/debug for the syntax. -# Some possible values: request, sql, express:* +# Some possible values: sql, express:* #DEBUG= \ No newline at end of file diff --git a/server/package.json b/server/package.json index 21ef3198..1806fcb0 100644 --- a/server/package.json +++ b/server/package.json @@ -65,9 +65,6 @@ "node-fetch": "^2.6.1", "p-throttle": "^4.1.1", "promisify-node": "^0.5.0", - "request": "^2.88.2", - "request-debug": "^0.2.0", - "request-promise": "^4.2.6", "sequelize": "^6.3.5", "socket.io": "^4.0.0", "stream-array": "^1.1.2", @@ -91,9 +88,6 @@ "@types/lodash": "^4.14.165", "@types/mapbox__polyline": "^1.0.2", "@types/node-cron": "^2.0.3", - "@types/request": "^2.48.5", - "@types/request-debug": "^0.2.0", - "@types/request-promise": "^4.1.47", "@types/socket.io": "^2.1.12", "@types/string-similarity": "^4.0.0", "debug": "^4.3.1", diff --git a/server/src/routing/ors.ts b/server/src/routing/ors.ts index fdb3ce57..65abbc18 100644 --- a/server/src/routing/ors.ts +++ b/server/src/routing/ors.ts @@ -1,9 +1,9 @@ import config from "../config"; -import request from "../utils/request"; import { calculateDistance, DecodedRouteMode } from "facilmap-utils"; import { ExtraInfo, Point } from "facilmap-types"; import { throttle } from "../utils/utils"; import { RawRouteInfo } from "./routing"; +import fetch from "node-fetch"; if (!config.orsToken) console.error("Warning: No ORS token configured, calculating routes will fail. Please set ORS_TOKEN in the environment or in config.env."); @@ -56,48 +56,38 @@ async function calculateRouteInternal(points: Point[], decodedMode: DecodedRoute currentGroup.push(point); } - let results; + const results = await Promise.all(coordGroups.map((coords) => { + const req: any = { + coordinates: coords.map((point) => [point.lon, point.lat]), + radiuses: coords.map(() => -1), + instructions: false + }; - try { - results = await Promise.all(coordGroups.map((coords) => { - const req: any = { - coordinates: coords.map((point) => [point.lon, point.lat]), - radiuses: coords.map(() => -1), - instructions: false + if(decodedMode.details) { + req.elevation = true; + req.extra_info = [ "surface", "waytype", "steepness" ]; + if(decodedMode.mode == "car") { + req.extra_info.push("tollways"); + } + } + if(decodedMode.avoid) { + req.options = { + avoid_features: decodedMode.avoid }; + } + if(decodedMode.preference) + req.preference = decodedMode.preference; - if(decodedMode.details) { - req.elevation = true; - req.extra_info = [ "surface", "waytype", "steepness" ]; - if(decodedMode.mode == "car") { - req.extra_info.push("tollways"); - } - } - if(decodedMode.avoid) { - req.options = { - avoid_features: decodedMode.avoid - }; - } - if(decodedMode.preference) - req.preference = decodedMode.preference; - - return request.post({ - url: `${ROUTING_URL}/${ROUTING_MODES[`${decodedMode.mode}-${decodedMode.type || ""}`]}/geojson`, - json: true, - headers: { - 'Authorization': config.orsToken, - 'Accept': '*/*' // Server sends application/geo+json - }, - body: req - }); - })); - } catch(err) { - console.log(err); - if(err.response.body && err.response.body.error) - throw new Error(err.response.body.error.message); - else - throw err; - } + return fetch(`${ROUTING_URL}/${ROUTING_MODES[`${decodedMode.mode}-${decodedMode.type || ""}`]}/geojson`, { + method: "POST", + headers: { + ...(config.orsToken ? { "Authorization": config.orsToken } : {}), + "Accept": "*/*", // Server sends application/geo+json + "Content-type": "application/json" + }, + body: JSON.stringify(req) + }).then((res) => res.json()); + })); const ret = { trackPoints: [] as Array, @@ -109,10 +99,13 @@ async function calculateRouteInternal(points: Point[], decodedMode: DecodedRoute }; for(const body of results) { - if(body && body.error) { - throw new Error(body.error.message); + if(body?.error) { + throw new Error(body.error?.message || body.error); } + if (body?.metadata?.system_message) + console.log("OpenRouteService:", body?.metadata?.system_message); + if(!body?.features?.[0]) throw new Error("Invalid response from routing server."); diff --git a/server/src/routing/osrm.ts b/server/src/routing/osrm.ts index 508294ce..3c5cf0de 100644 --- a/server/src/routing/osrm.ts +++ b/server/src/routing/osrm.ts @@ -1,7 +1,7 @@ -import request from "../utils/request"; import config from "../config"; import { Point, RouteMode } from "facilmap-types"; import { RawRouteInfo } from "./routing"; +import fetch from "node-fetch"; if (!config.mapboxToken) console.error("Warning: No Mapbox token configured, calculating routes will fail. Please set MAPBOX_TOKEN in the environment or in config.env."); @@ -36,7 +36,7 @@ export async function calculateOSRMRoute(points: Point[], mode: RouteMode, simpl + "&overview=" + (simple ? "simplified" : "full") + "&access_token=" + encodeURIComponent(config.mapboxToken ?? ""); - return request.get({ url, json: true }); + return fetch(url).then((res) => res.json()); })); const ret: RawRouteInfo = { diff --git a/server/src/utils/request.ts b/server/src/utils/request.ts deleted file mode 100644 index cd38bf0b..00000000 --- a/server/src/utils/request.ts +++ /dev/null @@ -1,17 +0,0 @@ -import requestPromise from "request-promise"; -import debug from "debug"; -import requestDebug from "request-debug"; -import config from "../config"; - -if(debug.enabled("request")) { - requestDebug(requestPromise); -} - -const request: typeof requestPromise = requestPromise.defaults({ - gzip: true, - headers: { - 'User-Agent': config.userAgent - } -}); - -export default request; diff --git a/yarn.lock b/yarn.lock index d2e412e9..40e880fa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -640,11 +640,6 @@ dependencies: "@babel/types" "^7.3.0" -"@types/bluebird@*": - version "3.5.34" - resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.34.tgz#0e9f1f4f5dfab98a421fb973b5f5690d22411893" - integrity sha512-QMc57Pf067Rr78l6f4FftvuIXPYxu0VYFRKrZk1Clv+LWy7gN2fTBiAiv68askFHEHZcTLPFd01kNlpKOiSPgQ== - "@types/body-parser@*": version "1.19.0" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" @@ -653,11 +648,6 @@ "@types/connect" "*" "@types/node" "*" -"@types/caseless@*": - version "0.12.2" - resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8" - integrity sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w== - "@types/cheerio@^0.22.27", "@types/cheerio@^0.22.28": version "0.22.28" resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.28.tgz#90808aabb44fec40fa2950f4c72351e3e4eb065b" @@ -1018,31 +1008,6 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/request-debug@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@types/request-debug/-/request-debug-0.2.0.tgz#d672c3aa4de4a264d9bab35ee5179f90c414683a" - integrity sha512-m2cZMOdVSIS5U5BQjI1MB7aoqYpt8luHiOLXlqid/VOJqRL6VqQJmXoXoykw/ud7goqB9gdF/QVcurq1hXqo+w== - dependencies: - "@types/request" "*" - -"@types/request-promise@^4.1.47": - version "4.1.47" - resolved "https://registry.yarnpkg.com/@types/request-promise/-/request-promise-4.1.47.tgz#62f58a52476ef6cfe4f38d689cb826959a33a268" - integrity sha512-eRSZhAS8SMsrWOM8vbhxFGVZhTbWSJvaRKyufJTdIf4gscUouQvOBlfotPSPHbMR3S7kfkyKbhb1SWPmQdy3KQ== - dependencies: - "@types/bluebird" "*" - "@types/request" "*" - -"@types/request@*", "@types/request@^2.48.5": - version "2.48.5" - resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.5.tgz#019b8536b402069f6d11bee1b2c03e7f232937a0" - integrity sha512-/LO7xRVnL3DxJ1WkPGDQrp4VTV1reX9RkC85mJ+Qzykj2Bdw+mG15aAfDahc76HtknjzE16SX/Yddn6MxVbmGQ== - dependencies: - "@types/caseless" "*" - "@types/node" "*" - "@types/tough-cookie" "*" - form-data "^2.5.0" - "@types/scheduler@*": version "0.16.1" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" @@ -1107,11 +1072,6 @@ resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.7.tgz#545158342f949e8fd3bfd813224971ecddc3fac4" integrity sha512-0VBprVqfgFD7Ehb2vd8Lh9TG3jP98gvr8rgehQqzztZNI7o8zS8Ad4jyZneKELphpuE212D8J70LnSNQSyO6bQ== -"@types/tough-cookie@*": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.0.tgz#fef1904e4668b6e5ecee60c52cc6a078ffa6697d" - integrity sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A== - "@types/trusted-types@*": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.0.tgz#aee6e868fcef74f2b8c71614b6df81a601a42f17" @@ -1911,7 +1871,7 @@ blob@^0.1.0: dependencies: esm "^3.2.25" -bluebird@^3.1.1, bluebird@^3.5.0: +bluebird@^3.1.1: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -3786,15 +3746,6 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -form-data@^2.5.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" - integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - form-data@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" @@ -7076,13 +7027,6 @@ repeat-string@^1.6.1: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= -request-debug@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/request-debug/-/request-debug-0.2.0.tgz#fc054ec817181b04ca41a052c136f61c48abaf78" - integrity sha1-/AVOyBcYGwTKQaBSwTb2HEirr3g= - dependencies: - stringify-clone "^1.0.0" - request-promise-core@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" @@ -7099,16 +7043,6 @@ request-promise-native@^1.0.9: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request-promise@^4.2.6: - version "4.2.6" - resolved "https://registry.yarnpkg.com/request-promise/-/request-promise-4.2.6.tgz#7e7e5b9578630e6f598e3813c0f8eb342a27f0a2" - integrity sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ== - dependencies: - bluebird "^3.5.0" - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" @@ -7897,11 +7831,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringify-clone@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stringify-clone/-/stringify-clone-1.1.1.tgz#309a235fb4ecfccd7d388dbe18ba904facaf433b" - integrity sha1-MJojX7Ts/M19OI2+GLqQT6yvQzs= - strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"