chargebee
Version:
A library for integrating with Chargebee.
64 lines (63 loc) • 2.19 kB
JavaScript
;
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;