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

1 day ago
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
}