@stellar/stellar-sdk
Version:
A library for working with the Stellar network, including communication with the Horizon and Soroban RPC servers.
229 lines (228 loc) • 9.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.create = createFetchClient;
exports.fetchClient = void 0;
var _feaxios = _interopRequireDefault(require("feaxios"));
var _types = require("./types");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
var InterceptorManager = function () {
function InterceptorManager() {
_classCallCheck(this, InterceptorManager);
_defineProperty(this, "handlers", []);
}
return _createClass(InterceptorManager, [{
key: "use",
value: function use(fulfilled, rejected) {
this.handlers.push({
fulfilled: fulfilled,
rejected: rejected
});
return this.handlers.length - 1;
}
}, {
key: "eject",
value: function eject(id) {
if (this.handlers[id]) {
this.handlers[id] = null;
}
}
}, {
key: "forEach",
value: function forEach(fn) {
this.handlers.forEach(function (h) {
if (h !== null) {
fn(h);
}
});
}
}]);
}();
function getFormConfig(config) {
var formConfig = config || {};
formConfig.headers = new Headers(formConfig.headers || {});
formConfig.headers.set('Content-Type', 'application/x-www-form-urlencoded');
return formConfig;
}
function createFetchClient() {
var fetchConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var defaults = _objectSpread(_objectSpread({}, fetchConfig), {}, {
headers: fetchConfig.headers || {}
});
var instance = _feaxios.default.create(defaults);
var requestInterceptors = new InterceptorManager();
var responseInterceptors = new InterceptorManager();
var httpClient = {
interceptors: {
request: requestInterceptors,
response: responseInterceptors
},
defaults: _objectSpread(_objectSpread({}, defaults), {}, {
adapter: function adapter(config) {
return instance.request(config);
}
}),
create: function create(config) {
return createFetchClient(_objectSpread(_objectSpread({}, this.defaults), config));
},
makeRequest: function makeRequest(config) {
var _this = this;
return new Promise(function (resolve, reject) {
var abortController = new AbortController();
config.signal = abortController.signal;
if (config.cancelToken) {
config.cancelToken.promise.then(function () {
abortController.abort();
reject(new Error('Request canceled'));
});
}
var modifiedConfig = config;
if (requestInterceptors.handlers.length > 0) {
var chain = requestInterceptors.handlers.filter(function (interceptor) {
return interceptor !== null;
}).flatMap(function (interceptor) {
return [interceptor.fulfilled, interceptor.rejected];
});
for (var i = 0, len = chain.length; i < len; i += 2) {
var onFulfilled = chain[i];
var onRejected = chain[i + 1];
try {
if (onFulfilled) modifiedConfig = onFulfilled(modifiedConfig);
} catch (error) {
if (onRejected) onRejected === null || onRejected === void 0 || onRejected(error);
reject(error);
return;
}
}
}
var adapter = modifiedConfig.adapter || _this.defaults.adapter;
if (!adapter) {
throw new Error('No adapter available');
}
var responsePromise = adapter(modifiedConfig).then(function (axiosResponse) {
var httpClientResponse = {
data: axiosResponse.data,
headers: axiosResponse.headers,
config: axiosResponse.config,
status: axiosResponse.status,
statusText: axiosResponse.statusText
};
return httpClientResponse;
});
if (responseInterceptors.handlers.length > 0) {
var _chain = responseInterceptors.handlers.filter(function (interceptor) {
return interceptor !== null;
}).flatMap(function (interceptor) {
return [interceptor.fulfilled, interceptor.rejected];
});
var _loop = function _loop(_i) {
responsePromise = responsePromise.then(function (response) {
var fulfilledInterceptor = _chain[_i];
if (typeof fulfilledInterceptor === 'function') {
return fulfilledInterceptor(response);
}
return response;
}, function (error) {
var rejectedInterceptor = _chain[_i + 1];
if (typeof rejectedInterceptor === 'function') {
return rejectedInterceptor(error);
}
throw error;
}).then(function (interceptedResponse) {
return interceptedResponse;
});
};
for (var _i = 0, _len = _chain.length; _i < _len; _i += 2) {
_loop(_i);
}
}
responsePromise.then(resolve).catch(reject);
});
},
get: function get(url, config) {
return this.makeRequest(_objectSpread(_objectSpread(_objectSpread({}, this.defaults), config), {}, {
url: url,
method: 'get'
}));
},
delete: function _delete(url, config) {
return this.makeRequest(_objectSpread(_objectSpread(_objectSpread({}, this.defaults), config), {}, {
url: url,
method: 'delete'
}));
},
head: function head(url, config) {
return this.makeRequest(_objectSpread(_objectSpread(_objectSpread({}, this.defaults), config), {}, {
url: url,
method: 'head'
}));
},
options: function options(url, config) {
return this.makeRequest(_objectSpread(_objectSpread(_objectSpread({}, this.defaults), config), {}, {
url: url,
method: 'options'
}));
},
post: function post(url, data, config) {
return this.makeRequest(_objectSpread(_objectSpread(_objectSpread({}, this.defaults), config), {}, {
url: url,
method: 'post',
data: data
}));
},
put: function put(url, data, config) {
return this.makeRequest(_objectSpread(_objectSpread(_objectSpread({}, this.defaults), config), {}, {
url: url,
method: 'put',
data: data
}));
},
patch: function patch(url, data, config) {
return this.makeRequest(_objectSpread(_objectSpread(_objectSpread({}, this.defaults), config), {}, {
url: url,
method: 'patch',
data: data
}));
},
postForm: function postForm(url, data, config) {
var formConfig = getFormConfig(config);
return this.makeRequest(_objectSpread(_objectSpread(_objectSpread({}, this.defaults), formConfig), {}, {
url: url,
method: 'post',
data: data
}));
},
putForm: function putForm(url, data, config) {
var formConfig = getFormConfig(config);
return this.makeRequest(_objectSpread(_objectSpread(_objectSpread({}, this.defaults), formConfig), {}, {
url: url,
method: 'put',
data: data
}));
},
patchForm: function patchForm(url, data, config) {
var formConfig = getFormConfig(config);
return this.makeRequest(_objectSpread(_objectSpread(_objectSpread({}, this.defaults), formConfig), {}, {
url: url,
method: 'patch',
data: data
}));
},
CancelToken: _types.CancelToken,
isCancel: function isCancel(value) {
return value instanceof Error && value.message === 'Request canceled';
}
};
return httpClient;
}
var fetchClient = exports.fetchClient = createFetchClient();