@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;