UNPKG

kalibri

Version:
96 lines (95 loc) 3.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const http = require("http"); const https = require("https"); const _base_adapter_1 = require("./_base.adapter"); const getHttp = (url) => { return url.includes('https://') ? https : http; }; class ServerAdapter extends _base_adapter_1.AAdapter { parseResponseText(data, headers) { try { if (headers['content-type'] === 'application/json' || data[0] === '{' || data[0] === '[') { return JSON.parse(data); } else { return data; } } catch (err) { return data; } } createSuccessResponse(data, res) { const { statusCode = 0, headers, statusMessage: statusText = '' } = res; return { headers, statusText, ok: true, status: statusCode, data: this.parseResponseText(data.toString(), res.headers), }; } createErrorResponse(res, data, message = '') { const { statusCode: status = 0, statusMessage: statusText = '', headers, } = res; return { ok: false, status, statusText, headers, message, data: this.parseResponseText(data.toString(), res.headers), }; } createFinalConfig(requestConfig) { const { url, method, headers, timeout, body = {}, responseType, } = requestConfig; const finalUrl = new URL(url); const data = typeof body === 'object' && Object.entries(body).length ? new TextEncoder().encode(JSON.stringify(Object.assign({}, body))) : null; return { data, method, timeout, headers, responseType, origin: finalUrl.origin, hostname: finalUrl.hostname, path: finalUrl.pathname + finalUrl.search, port: finalUrl.port ? parseInt(finalUrl.port, 10) : undefined, }; } request({ requestConfig, interceptors: { beforeRequestInterceptor, afterRequestInterceptor }, }) { beforeRequestInterceptor(requestConfig); const options = this.createFinalConfig(requestConfig); if (options.data !== null) { Object.assign(options, { headers: { 'Content-Type': 'application/json', 'Content-Length': options.data.length, }, }); } return new Promise((resolve, reject) => { const req = getHttp(options.origin).request(options, (res) => { res.on('data', (data) => { const { statusCode = 0 } = res; if (statusCode >= 200 && statusCode < 400) { return resolve(this.createSuccessResponse(data, res)); } reject(this.createErrorResponse(res, data)); }); }); req.on('error', (error) => { reject(error); }); if (options.data) { req.write(options.data); } req.end(); }); } } exports.default = ServerAdapter;