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
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 = {
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,
};
}
}