dnsimple
Version:
A Node.JS client for the DNSimple API.
59 lines (58 loc) • 2.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const https = require("https");
const url_1 = require("url");
const main_1 = require("../main");
function parseRateLimitHeaders(headers) {
const parseHeader = (name) => {
const value = headers[name];
if (value === undefined)
return null;
const strValue = Array.isArray(value) ? value[0] : value;
const parsed = parseInt(strValue, 10);
return isNaN(parsed) ? null : parsed;
};
return {
limit: parseHeader("x-ratelimit-limit"),
remaining: parseHeader("x-ratelimit-remaining"),
reset: parseHeader("x-ratelimit-reset"),
};
}
const httpsFetcher = (params) => {
return new Promise((resolve, reject) => {
const urlObj = new url_1.URL(params.url);
const options = {
method: params.method,
headers: params.headers,
timeout: params.timeout,
};
const req = https.request(urlObj, options, (res) => {
const chunks = [];
res
.on("data", (chunk) => chunks.push(chunk))
.on("end", () => {
const body = Buffer.concat(chunks).toString("utf-8");
resolve({
status: res.statusCode || 500, // Fallback to 500 if statusCode is undefined
body: body,
rateLimit: parseRateLimitHeaders(res.headers),
});
});
});
req.on("error", (err) => {
if (err.code === "ECONNRESET")
reject(new main_1.TimeoutError());
else
reject(err);
});
const timeoutId = setTimeout(() => {
req.destroy();
reject(new main_1.TimeoutError());
}, params.timeout);
req.on("close", () => clearTimeout(timeoutId));
if (params.body)
req.write(params.body);
req.end();
});
};
exports.default = httpsFetcher;