You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.6 KiB
96 lines
2.6 KiB
const z = require("zod");
|
|
const axios = require('axios');
|
|
|
|
function jb(e) {
|
|
return Object.keys(e).map((t => ({
|
|
key: t,
|
|
value: (!1 === e[t] ? 'false' : e[t] || '').toString()
|
|
}))).sort(((e, t) => e.key < t.key ? -1 : e.key > t.key ? 1 : 0)).map((e => e.value)).join('');
|
|
}
|
|
|
|
function wb(e) {
|
|
return e.split('?')[0].replace(/^[^/]*\/\/[^/]+\//, '/');
|
|
}
|
|
|
|
const _b = [22, 4147, 1234, 11]
|
|
, Ib = _b[0] + _b[3]
|
|
, Cb = _b[1] + _b[2];
|
|
|
|
function kb(e, t, r, s = '') {
|
|
const a = jb(t);
|
|
return Ob(wb(e) + a + s + r);
|
|
}
|
|
|
|
function Ob(e) {
|
|
const t = e.length;
|
|
let r = Cb;
|
|
for (let s = 0; s < t; s += 1)
|
|
r = r * Ib + e.charCodeAt(s),
|
|
r >>>= 0;
|
|
return r;
|
|
}
|
|
|
|
const getR = (l) => {
|
|
const n = 'https://routing.api.2gis.com/carrouting/6.0.0/global';
|
|
const u = 'rurbbn3446';
|
|
const d = 'baf4c54e9dae';
|
|
return kb(n, u, d, JSON.stringify(l));
|
|
};
|
|
|
|
const pointGuard = z.object({
|
|
x: z.number(),
|
|
y: z.number(),
|
|
});
|
|
|
|
|
|
const typeGuard = z.object({
|
|
points: pointGuard.array().length(2),
|
|
});
|
|
|
|
|
|
const generate = async ({points}) => {
|
|
const data = {
|
|
'locale': 'ru',
|
|
'point_a_name': 'Source',
|
|
'point_b_name': 'Target',
|
|
'points': points.map(item => ({...item, type: "pedo"})),
|
|
'purpose': 'autoSearch',
|
|
'type': 'online5',
|
|
};
|
|
return axios.post(
|
|
'https://routing.api.2gis.com/carrouting/6.0.0/global',
|
|
data,
|
|
{
|
|
params: {
|
|
'key': 'rurbbn3446',
|
|
'r': getR(data)
|
|
},
|
|
headers: {
|
|
'authority': 'routing.api.2gis.com',
|
|
'accept-language': 'ru,en;q=0.9',
|
|
'cache-control': 'no-cache',
|
|
'origin': 'https://2gis.ru',
|
|
'pragma': 'no-cache',
|
|
'referer': 'https://2gis.ru/',
|
|
'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "YaBrowser";v="24.1", "Yowser";v="2.5"',
|
|
'sec-ch-ua-mobile': '?0',
|
|
'sec-ch-ua-platform': '"macOS"',
|
|
'sec-fetch-dest': 'empty',
|
|
'sec-fetch-mode': 'cors',
|
|
'sec-fetch-site': 'cross-site',
|
|
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 YaBrowser/24.1.0.0 Safari/537.36'
|
|
}
|
|
}
|
|
).then((response) => response.data.result.map((item) => {
|
|
return {
|
|
...item,
|
|
path: item.maneuvers[0].outcoming_path.geometry
|
|
}
|
|
}));
|
|
};
|
|
|
|
module.exports = {
|
|
typeGuard,
|
|
generate
|
|
}
|