UNPKG

@dioxide-js/web3.js

Version:

dioxide javascript API

62 lines 2.36 kB
import querystring from 'query-string'; import json from 'json-bigint'; import fetch from 'node-fetch'; import { shakeKeyValue } from '../utils/string.js'; import provider from './provider.js'; const AbortController = globalThis.AbortController; function checkStatus(response) { if (response.ok) { return response; } else { return Promise.reject(response); } } export default class Fetcher { constructor() { this.prune = (url) => (url.endsWith('/') ? url.slice(0, -1) : url); } get(service, options) { return new Promise((res) => { const { dioxide } = provider.get(); options = Object.assign({ credentials: 'omit' }, options); let absoluteUrl = service.startsWith('http') ? service : dioxide + service; if (options.data) { const data = shakeKeyValue(options.data) || {}; absoluteUrl += '?' + querystring.stringify(data, { encode: false }); } const controller = new AbortController(); options.signal = controller.signal; const timeout = setTimeout(() => { controller.abort(); }, 30000); fetch(absoluteUrl, options) .then(checkStatus) .then((r) => r.text().then((text) => res(json.parse(text)))) .finally(() => { clearTimeout(timeout); }); }); } post(service, options = {}) { return new Promise((res) => { const { dioxide } = provider.get(); const { body } = options; const absoluteUrl = service.startsWith('http') ? service : dioxide + (service.startsWith('/') ? service.slice(1) : service); const controller = new AbortController(); const concatOption = Object.assign(Object.assign({}, options), { method: 'post', body, signal: controller.signal }); const timeout = setTimeout(() => { controller.abort(); }, 30000); fetch(absoluteUrl, concatOption) .then(checkStatus) .then((r) => r.json().then((json) => res(json))) .finally(() => { clearTimeout(timeout); }); }); } } //# sourceMappingURL=request.js.map