@vanakaru/ekilex-api-client
Version:
A node api client for the Ekilex API
77 lines • 2.79 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.HttpClient = exports.Method = exports.DataType = void 0;
const node_fetch_1 = __importDefault(require("node-fetch"));
var DataType;
(function (DataType) {
DataType["JSON"] = "application/json";
DataType["GraphQL"] = "application/graphql";
DataType["URLEncoded"] = "application/x-www-form-urlencoded";
DataType["Binary"] = "application/octet-stream";
})(DataType = exports.DataType || (exports.DataType = {}));
var Method;
(function (Method) {
Method["Get"] = "GET";
Method["Post"] = "POST";
Method["Put"] = "PUT";
Method["Patch"] = "PATCH";
Method["Delete"] = "DELETE";
Method["Head"] = "HEAD";
Method["Options"] = "OPTIONS";
Method["Connect"] = "CONNECT";
})(Method = exports.Method || (exports.Method = {}));
class HttpClient {
constructor(apiKey, basePath) {
this.apiKey = apiKey;
this.basePath = basePath;
}
async doRequest(requestParams) {
const url = this.basePath + requestParams.path;
const response = await (0, node_fetch_1.default)(url, {
method: requestParams.method,
headers: requestParams.headers,
...(Boolean(requestParams.data) && { body: JSON.stringify(requestParams.data) }),
});
if (!response?.ok) {
throw new Error('Unable to reach Ekilex-Api');
}
return response.json();
}
async sleep(waitTimeinMs) {
return new Promise((resolve) => setTimeout(resolve, waitTimeinMs));
}
async request(requestParams) {
const maxRetries = requestParams.retries ?? 1;
const enrichedHeaders = {
...requestParams.headers,
'ekilex-api-key': this.apiKey,
...([Method.Post, Method.Patch, Method.Put].includes(requestParams.method) && {
'Content-Type': DataType.JSON,
}),
};
let retries = 0;
while (retries < maxRetries) {
retries++;
try {
const response = await this.doRequest({
...requestParams,
headers: enrichedHeaders,
});
return response;
}
catch (error) {
if (retries < maxRetries) {
await this.sleep(HttpClient.RETRY_WAIT_TIME);
continue;
}
throw new Error('Cannot make request to Ekilex APi');
}
}
}
}
exports.HttpClient = HttpClient;
HttpClient.RETRY_WAIT_TIME = 1000;
//# sourceMappingURL=http-client.js.map