@tronlink/core
Version:
The library serves as a core module within TronLink Extension, which provides low-level wallet functionality for both Tron and Ethereum networks, primary features includes account generation and transaction signing
109 lines • 3.82 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const defaultOption_1 = __importDefault(require("./defaultOption"));
const utils_1 = require("./utils");
class axiosFaker {
defaultOps;
constructor(options) {
this.defaultOps = {};
Object.assign(this.defaultOps, defaultOption_1.default, options);
}
config(options) {
Object.assign(this.defaultOps, options);
}
/**
* define FaxiosRequest=>FaxiosResponse
* @param req
*/
async request(...req) {
req = req || {};
const customOps = req.config || {};
let res;
const timeout = customOps.timeout || this.defaultOps.timeout || 30000;
req.config = Object.assign({}, this.defaultOps, req.config);
try {
const { url, requestInit } = await this.transformRequest(req);
const response = await (0, utils_1.promiseTimeout)(timeout, fetch(url, requestInit));
res = await this.transformResponse(response, req);
return res;
}
catch (err) {
throw err;
}
}
async transformRequest(req) {
const customOps = req.config || {};
const reqOps = Object.assign({}, this.defaultOps, customOps);
const { mode } = reqOps;
const { method, query, data } = req[0];
let url = req[0].url;
let headers = req.headers;
if (reqOps.baseURL && !(0, utils_1.isAbsoluteURL)(url)) {
url = url
? reqOps.baseURL.replace(/\/+$/, '') + '/' + url.replace(/^\/+/, '')
: reqOps.baseURL;
}
if (!url) {
throw new Error('request: url is undefined.');
}
if (!method) {
throw new Error('request: method is undefined.');
}
if (method.toUpperCase() === 'GET') {
url += '?' + (0, utils_1.serialize)(query);
}
headers = Object.assign({}, this.defaultOps.headers, headers || {});
let body = data;
const contentType = headers['Content-Type'];
if (body) {
body = JSON.stringify(data);
}
// https://developer.mozilla.org/zh-CN/docs/Web/API/Request/Request
const requestInit = {
method,
headers,
body,
mode,
};
return { url, requestInit };
}
async transformResponse(response, req) {
const resp = {
data: null,
status: response.status,
statusText: response.statusText,
headers: (0, utils_1.transformHeader)(response.headers),
config: req.config || {},
request: req,
originalResponse: response,
};
if (response.ok) {
let contentType = response.headers.get('Content-Type') || 'application/json';
contentType = contentType.toLowerCase();
if (/^application\/json/.test(contentType)) {
resp.data = await response.json();
}
else if (/^text\/plain/.test(contentType)) {
resp.data = await response.text();
}
else if (/^application\/octet-stream/.test(contentType)) {
resp.data = await response.blob();
}
else {
try {
resp.data = await response.json();
}
catch (e) {
console.warn('unknow content-type to parse response!');
// ignore...
}
}
}
return resp;
}
}
exports.default = axiosFaker;
//# sourceMappingURL=axiosFaker.js.map