UNPKG

dnsimple

Version:

A Node.JS client for the DNSimple API.

59 lines (58 loc) 2.02 kB
"use strict"; 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;