@forge/cli-shared
9.3.1-next.19.3.1-next.1-experimental-0b00ed8
out/http-client/file-uploader.js~
out/http-client/file-uploader.jsModified+36−9
Index: package/out/http-client/file-uploader.js
===================================================================
--- package/out/http-client/file-uploader.js
+++ package/out/http-client/file-uploader.js
@@ -1,9 +1,11 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.HttpFileUploader = exports.UploadFileEmptyError = exports.UploadFileNotFoundError = exports.CannotUploadFileError = void 0;
const tslib_1 = require("tslib");
-const node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
+const http_1 = tslib_1.__importDefault(require("http"));
+const https_1 = tslib_1.__importDefault(require("https"));
+const url_1 = require("url");
const ui_1 = require("../ui");
class CannotUploadFileError extends Error {
}
exports.CannotUploadFileError = CannotUploadFileError;
@@ -12,8 +14,9 @@
exports.UploadFileNotFoundError = UploadFileNotFoundError;
class UploadFileEmptyError extends Error {
}
exports.UploadFileEmptyError = UploadFileEmptyError;
+const NODE_REQUEST_TIMEOUT_MS = 30_000;
const validateFileContents = (filePath, fileContents) => {
if (!fileContents) {
throw new UploadFileNotFoundError(ui_1.Text.upload.error.notFound(filePath));
}
@@ -26,24 +29,48 @@
if (!response.ok) {
throw new CannotUploadFileError(ui_1.Text.upload.error.status(response.status, await response.text()));
}
};
+const uploadWithNodeRequest = (url, headers, fileContents) => {
+ 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: 'PUT',
+ headers
+ }, (response) => {
+ const chunks = [];
+ response.on('data', (chunk) => chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)));
+ response.on('end', () => {
+ const body = Buffer.concat(chunks).toString('utf-8');
+ resolve(new Response(body, {
+ status: response.statusCode ?? 500,
+ statusText: response.statusMessage,
+ headers: response.headers
+ }));
+ });
+ });
+ request.setTimeout(NODE_REQUEST_TIMEOUT_MS, () => {
+ request.destroy(new Error(`Request timed out after ${NODE_REQUEST_TIMEOUT_MS}ms`));
+ });
+ request.on('error', reject);
+ request.write(fileContents);
+ request.end();
+ });
+};
class HttpFileUploader {
fileSystem;
constructor(fileSystem) {
this.fileSystem = fileSystem;
}
async uploadFromPath(url, filePath) {
const fileContents = this.fileSystem.readBinaryFile(filePath);
const validFileContents = validateFileContents(filePath, fileContents);
- const response = await (0, node_fetch_1.default)(url, {
- method: 'PUT',
- headers: {
- 'Content-Type': 'application/zip',
- 'Content-Length': validFileContents.length.toString()
- },
- body: validFileContents
- });
+ const headers = {
+ 'Content-Type': 'application/zip',
+ 'Content-Length': validFileContents.length.toString()
+ };
+ const response = await uploadWithNodeRequest(url, headers, validFileContents);
await checkResponse(response);
}
}
exports.HttpFileUploader = HttpFileUploader;