UNPKG

mapnests-node-sdk

Version:

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

88 lines (87 loc) 3 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 = { geocode: "GET", reverseGeocode: "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, }; } }