"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Uploader = void 0; const internal_1 = require("./types/internal"); const texts_1 = require("./texts"); class Uploader { constructor(readFile, transport, logger) { this._transport = transport; this._uploads = []; this._logger = logger; this._readFile = readFile; } async _getUploadInfo(uploadEntityId) { const response = await this._transport.fetchFromDashboard('api/getUploadUrl'); if (response.ok) return await response.json(); this._logger.error(texts_1.createGetUploadInfoError(uploadEntityId, response.toString())); return null; } async _upload(uploadInfo, uploadEntity, uploadError) { const { uploadUrl, uploadId } = uploadInfo; const response = await this._transport.fetch(uploadUrl, { method: 'PUT', headers: { 'Content-Length': uploadEntity.length }, body: uploadEntity }); await this._transport.sendResolveCommand({ aggregateId: uploadId, aggregateName: internal_1.AggregateNames.Upload, type: internal_1.AggregateCommandType.createUpload, payload: { status: response.ok ? internal_1.UploadStatus.Completed : internal_1.UploadStatus.Failed } }); if (!response.ok) this._logger.error(`${uploadError}. Response: ${response}`); } async uploadFile(filePath) { const uploadInfo = await this._getUploadInfo(filePath); if (!uploadInfo) return void 0; let file = null; try { file = await this._readFile(filePath); } catch (e) { this._logger.error(e.message); return void 0; } this._uploads.push(this._upload(uploadInfo, file, texts_1.createFileUploadError(uploadInfo.uploadId, filePath))); return uploadInfo.uploadId; } requestUploadEntity(uploadInfo, uploadObject, error) { const buffer = Buffer.from(JSON.stringify(uploadObject, (key, value) => value instanceof RegExp ? value.toString() : value)); this._uploads.push(this._upload(uploadInfo, buffer, error)); } async uploadTest(uploadEntityId, testRunInfo) { const uploadInfo = await this._getUploadInfo(uploadEntityId); if (!uploadInfo) return void 0; this.requestUploadEntity(uploadInfo, testRunInfo, texts_1.createTestUploadError(uploadInfo.uploadId, uploadEntityId)); return uploadInfo.uploadId; } async uploadRunWarning(uploadEntityId, warningInfo) { const uploadInfo = await this._getUploadInfo(uploadEntityId); if (!uploadInfo) return void 0; this.requestUploadEntity(uploadInfo, warningInfo, texts_1.createWarningUploadError(uploadInfo.uploadId, uploadEntityId)); return uploadInfo.uploadId; } async waitUploads() { await Promise.all(this._uploads); } } exports.Uploader = Uploader;