UNPKG

@lakutata/core

Version:

Lakutata Framework Core

171 lines 7.38 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.HttpRequest = void 0; const Plugin_1 = require("../base/Plugin"); const needle_1 = require("needle"); const HttpRequestException_1 = require("../exceptions/HttpRequestException"); const fs_1 = __importDefault(require("fs")); class HttpRequest extends Plugin_1.Plugin { async multipartUpload(setting) { return new Promise((resolve, reject) => { const method = setting.method ? setting.method : 'put'; const url = setting.url.toString(); const filename = setting.filename; const file = setting.file; const contentType = setting.contentType ? setting.contentType : 'application/octet-stream'; const field = setting.field ? setting.field : 'file'; const uploadDataObject = { [field]: { filename: filename, content_type: contentType, file: file } }; if (!fs_1.default.existsSync(file)) return reject(new HttpRequestException_1.HttpRequestException([`File [${file}] does not exist`, method.toUpperCase(), url])); const fileStat = fs_1.default.statSync(file); if (!fileStat.isFile()) return reject(new HttpRequestException_1.HttpRequestException([`[${file}] is not file`, method.toUpperCase(), url])); (0, needle_1.request)(method, url, uploadDataObject, Object.assign(setting.options ? setting.options : {}, { multipart: true }), (error, response) => { if (error) { reject(new HttpRequestException_1.HttpRequestException([error.message, method.toUpperCase(), url.toString()])); } else { resolve(response.body); } }); }); } async download(setting, progressCallback) { return new Promise((resolve, reject) => { const method = setting.method ? setting.method : 'get'; const filename = setting.filename; const url = setting.url.toString(); const params = setting.params ? setting.params : null; const options = Object.assign(setting.options ? setting.options : {}, { output: filename }); const stream = (0, needle_1.request)(method, url, params, options); let dataSize = 0; let receivedDataSize = 0; let progress = 0; const internalProgressCallback = (exception, isDone, progress) => { if (progressCallback) progressCallback(exception, isDone, progress); if (exception) { reject(exception); } if (isDone) { resolve(); } }; stream .on('header', (statusCode, headers) => { dataSize = headers['content-length'] ? parseInt(headers['content-length']) : 0; internalProgressCallback(null, false, progress); }) .on('readable', () => { let chunk; while (chunk = stream.read()) { receivedDataSize += chunk.length; if (dataSize > 0) { progress = (receivedDataSize / dataSize) * 100; } else { progress = 0; } fs_1.default.appendFileSync(filename, chunk); internalProgressCallback(null, false, progress); } }) .on('done', (downloadError => { let downloadException = null; if (downloadError) { downloadException = new HttpRequestException_1.HttpRequestException([downloadError.message, method.toUpperCase(), url.toString()]); } else if (dataSize === 0) { downloadException = new HttpRequestException_1.HttpRequestException(['Received 0 length data from server', method.toUpperCase(), url.toString()]); } internalProgressCallback(downloadException, true, progress); })) .once('error', error => { internalProgressCallback(new HttpRequestException_1.HttpRequestException([error.message, method.toUpperCase(), url.toString()]), false, progress); }); }); } async get(url, options) { return new Promise((resolve, reject) => { (0, needle_1.get)(url.toString(), options, (error, response) => { if (error) { reject(new HttpRequestException_1.HttpRequestException([error.message, 'GET', url.toString()])); } else { resolve(response.body); } }); }); } async post(url, body, options) { return new Promise((resolve, reject) => { (0, needle_1.post)(url.toString(), body, options, (error, response) => { if (error) { reject(new HttpRequestException_1.HttpRequestException([error.message, 'POST', url.toString()])); } else { resolve(response.body); } }); }); } async put(url, body, options) { return new Promise((resolve, reject) => { (0, needle_1.put)(url.toString(), body, options, (error, response) => { if (error) { reject(new HttpRequestException_1.HttpRequestException([error.message, 'PUT', url.toString()])); } else { resolve(response.body); } }); }); } async patch(url, body, options) { return new Promise((resolve, reject) => { (0, needle_1.patch)(url.toString(), body, options, (error, response) => { if (error) { reject(new HttpRequestException_1.HttpRequestException([error.message, 'PATCH', url.toString()])); } else { resolve(response.body); } }); }); } async delete(url, body, options) { return new Promise((resolve, reject) => { (0, needle_1.delete)(url.toString(), body, options, (error, response) => { if (error) { reject(new HttpRequestException_1.HttpRequestException([error.message, 'DELETE', url.toString()])); } else { resolve(response.body); } }); }); } async head(url, options) { return new Promise((resolve) => { (0, needle_1.head)(url.toString(), options, (error) => { if (error) { resolve(false); } else { resolve(true); } }); }); } } exports.HttpRequest = HttpRequest; //# sourceMappingURL=HttpRequest.js.map