UNPKG

mapnests-browser-sdk

Version:

TypeScript SDK for Mapnests API integration (Distance Matrix, Distance Matrix Details, Geocode, Reverse Geocode)

80 lines (79 loc) 2.89 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.performSecureRequest = performSecureRequest; const axios_1 = __importDefault(require("axios")); const generate_token_1 = require("./generate_token"); const build_url_1 = require("./build_url"); const BASE_URL = 'https://engine.mapnests.com'; const HTTP_METHOD_MAP = { reverse: 'GET', search: 'GET', distanceMatrix: 'GET', distanceMatrixDetails: 'GET', pairwiseRouteSummary: 'POST', multiSourceSummary: 'POST', }; async function performSecureRequest(label, apiKey, origin, jsonRequest) { let urlStr; try { urlStr = (0, build_url_1.buildURLFromJSON)(label, BASE_URL, jsonRequest); } catch (err) { return { success: false, statusCode: 0, response: '', errorMessage: err.message }; } let tokenHeader = await (0, generate_token_1.generateToken)(apiKey); const method = HTTP_METHOD_MAP[label] || 'GET'; const headers = { 'X-API-KEY': apiKey, 'Origin': origin, 'fxsrf': tokenHeader, 'Content-Type': 'application/json', }; const axiosConfig = { headers, timeout: 30000, }; try { const response = method === 'POST' ? await axios_1.default.post(urlStr, JSON.parse(jsonRequest), axiosConfig) : await axios_1.default.get(urlStr, axiosConfig); return { success: response.status >= 200 && response.status < 300, statusCode: response.status, response: response.data, }; } catch (err) { if (err.response?.status === 401 && err.response.headers['cf-ray-status-id-tn']) { tokenHeader = await (0, generate_token_1.generateToken)(apiKey); headers.fxsrf = tokenHeader; try { const retryResponse = method === 'POST' ? await axios_1.default.post(urlStr, JSON.parse(jsonRequest), axiosConfig) : await axios_1.default.get(urlStr, axiosConfig); return { success: retryResponse.status >= 200 && retryResponse.status < 300, statusCode: retryResponse.status, response: retryResponse.data, }; } catch (retryErr) { return { success: false, statusCode: retryErr.response?.status || 0, response: '', errorMessage: retryErr.message, }; } } return { success: false, statusCode: err.response?.status || 0, response: '', errorMessage: err.message, }; } }