@forge/cli-shared

9.4.0-next.39.4.0-next.4
out/http-client/node-request.js
+out/http-client/node-request.jsNew file
+57
Index: package/out/http-client/node-request.js
===================================================================
--- package/out/http-client/node-request.js
+++ package/out/http-client/node-request.js
@@ -0,0 +1,57 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.sendWithNodeRequest = exports.toHeaders = void 0;
+const tslib_1 = require("tslib");
+const http_1 = tslib_1.__importDefault(require("http"));
+const https_1 = tslib_1.__importDefault(require("https"));
+const url_1 = require("url");
+const DEFAULT_HTTP_ERROR_STATUS = 500;
+const DEFAULT_NODE_REQUEST_TIMEOUT_MS = 30_000;
+const NO_BODY_STATUS_CODES = new Set([204, 205, 304]);
+const toHeaders = (rawHeaders) => {
+    const headers = new Headers();
+    Object.entries(rawHeaders).forEach(([key, value]) => {
+        if (Array.isArray(value)) {
+            value.forEach((headerValue) => headers.append(key, headerValue));
+            return;
+        }
+        if (typeof value === 'string') {
+            headers.set(key, value);
+        }
+    });
+    return headers;
+};
+exports.toHeaders = toHeaders;
+const sendWithNodeRequest = ({ method, url, headers, body, timeoutMs = DEFAULT_NODE_REQUEST_TIMEOUT_MS }) => {
+    return new Promise((resolve, reject) => {
+        const parsedUrl = new url_1.URL(url);
+        const transport = parsedUrl.protocol === 'https:' ? https_1.default : http_1.default;
+        const request = transport.request(parsedUrl, {
+            method,
+            headers
+        }, (response) => {
+            const chunks = [];
+            response.on('data', (chunk) => chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)));
+            response.on('error', reject);
+            response.on('end', () => {
+                const responseBody = Buffer.concat(chunks).toString('utf8');
+                const status = response.statusCode ?? DEFAULT_HTTP_ERROR_STATUS;
+                const body = NO_BODY_STATUS_CODES.has(status) ? undefined : responseBody;
+                resolve(new Response(body, {
+                    status,
+                    statusText: response.statusMessage,
+                    headers: (0, exports.toHeaders)(response.headers)
+                }));
+            });
+        });
+        request.setTimeout(timeoutMs, () => {
+            request.destroy(new Error(`Request timed out after ${timeoutMs}ms`));
+        });
+        request.on('error', reject);
+        if (body !== undefined) {
+            request.write(body);
+        }
+        request.end();
+    });
+};
+exports.sendWithNodeRequest = sendWithNodeRequest;