UNPKG

chargebee

Version:

A library for integrating with Chargebee.

64 lines (63 loc) 2.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FetchHttpClient = void 0; const ClientInterface_js_1 = require("./ClientInterface.js"); class FetchHttpClient extends ClientInterface_js_1.HttpClient { async makeApiRequest(request, timeout) { try { const response = globalThis.AbortController ? await this.fetchWithAbortTimeout(request, timeout) : await this.fetchWithTimeout(request, timeout); return response; } catch (err) { return Promise.reject(err); } } _createHeaders(httpHeaders) { const headers = new Headers(); Object.entries(httpHeaders).forEach(([key, value]) => { headers.append(key, String(value)); }); return headers; } async fetchWithTimeout(request, timeout) { let pendingTimeoutId; const timeoutPromise = new Promise((_, reject) => { pendingTimeoutId = setTimeout(() => { pendingTimeoutId = null; reject(ClientInterface_js_1.HttpClient.timeOutError()); }, timeout); }); const fetchPromise = fetch(request); return Promise.race([fetchPromise, timeoutPromise]).finally(() => { if (pendingTimeoutId) { clearTimeout(pendingTimeoutId); } }); } async fetchWithAbortTimeout(request, timeout) { const abort = new AbortController(); let timeoutId = setTimeout(() => { timeoutId = null; abort.abort(ClientInterface_js_1.HttpClient.timeOutError()); }, timeout); try { return await fetch(new Request(request, { signal: abort.signal })); } catch (err) { if (err.name === 'AbortError') { return Promise.reject(ClientInterface_js_1.HttpClient.timeOutError()); } else { return Promise.reject(err); } } finally { if (timeoutId) { clearTimeout(timeoutId); } } } } exports.FetchHttpClient = FetchHttpClient;