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
JavaScript
;
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,
};
}
}