UNPKG

@vanakaru/ekilex-api-client

Version:

A node api client for the Ekilex API

77 lines 2.79 kB
"use strict"; 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