@viyet/magento-client
Version:
Sotheby's Home Custom Magento API Client
123 lines • 4.68 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const axios_1 = __importDefault(require("axios"));
const get_1 = __importDefault(require("lodash/get"));
const path_to_regexp_1 = __importDefault(require("path-to-regexp"));
const qs_1 = __importDefault(require("qs"));
var Transport;
(function (Transport) {
/**
* Transport.API class handles communication with API
*/
class API {
/**
* Transport.API class handles communication with API
*
* @param clientConfig - Client Configuration
*/
constructor(clientConfig) {
this.config = clientConfig;
}
/**
* Triggers a GET request to an API route
*
* @param route - API route
* @param headers - Optional headers to send in request
*
* @returns A Promise that resolves to an axios response
*/
getFromApiRoute(route, headers) {
const requestConfig = {
headers: headers || {},
method: "get",
route: route,
};
return this.requestToApi(requestConfig);
}
/**
* Triggers a POST request to an API route
*
* @param route - API route
* @param data - data object to send in POST request
* @param headers - Optional headers to send in request
*
* @returns A Promise that resolves to an axios response
*/
postToApiRoute(route, data, headers) {
const requestConfig = {
data: data,
headers: headers || {},
method: "post",
route: route,
};
return this.requestToApi(requestConfig);
}
/**
* Triggers a PUT request to an API route
*
* @param route - API route
* @param data - data object to send in POST request
* @param headers - Optional headers to send in request
*
* @returns A Promise that resolves to an axios response
*/
putToApiRoute(route, data, headers) {
const requestConfig = {
data: data,
headers: headers || {},
method: "put",
route: route,
};
return this.requestToApi(requestConfig);
}
/**
* Triggers a request to API
*
* @param request
*
* @returns A promise that resolves to an axios response
*/
requestToApi(request) {
const defaultRequestConfig = {
baseURL: this.config.api.baseUrl,
data: {},
headers: {},
method: "get",
params: {},
responseType: "json",
timeout: 30000,
url: "",
withCredentials: true,
transformRequest: [function (data, headers) {
if (typeof data === "string") {
return data;
}
else if (typeof data === "object") {
if (headers["Content-Type"] && headers["Content-Type"].indexOf("application/x-www-form-urlencoded") !== -1) {
return qs_1.default.stringify(data);
}
else {
return JSON.stringify(data);
}
}
return data;
}],
};
let requestUrl = get_1.default(this.config.api.routes, request.route.key);
if (request.route.transforms) {
const toPath = path_to_regexp_1.default.compile(requestUrl);
requestUrl = toPath(request.route.transforms);
}
const requestConfig = Object.assign({}, defaultRequestConfig, request, { params: request.route.params || {}, url: requestUrl });
if (this.config.api.debug === true) {
console.log("request %o", requestConfig);
}
return axios_1.default(requestConfig);
}
}
Transport.API = API;
})(Transport = exports.Transport || (exports.Transport = {}));
//# sourceMappingURL=Transport.js.map