UNPKG

ptokens-providers

Version:

repo holding the code related to network providers

51 lines (48 loc) 1.46 kB
import axios from 'axios'; const DEFAULT_TIMEOUT = 10000; const DEFAULT_HEADERS = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS', 'Access-Control-Allow-Headers': 'Origin, Content-Type', 'Content-Type': 'application/json' }; class HttpProvider { constructor(_endpoint, _headers) { this.headers = _headers || DEFAULT_HEADERS; this.endpoint = _endpoint || null; this.api = _endpoint ? axios.create({ baseURL: _endpoint, headers: _headers || DEFAULT_HEADERS }) : null; } async call(_callType, _apiPath, _params = [], _timeout = DEFAULT_TIMEOUT) { try { const CancelToken = axios.CancelToken; const options = { cancelToken: _timeout ? new CancelToken(_cancel => setTimeout(() => _cancel(`timeout of ${_timeout}ms exceeded`), _timeout)) : undefined }; const details = [_apiPath, ...(_callType === 'GET' ? [options] : [_params, options])]; const { data } = await this.api[_callType.toLowerCase()](...details); return data; } catch (err) { throw new Error(err.message); } } setEndpoint(_endpoint) { this.endpoint = _endpoint; this.api = axios.create({ baseURL: _endpoint, headers: this.headers }); } setHeaders(_headers) { this.headers = _headers; this.api = axios.create({ baseURL: this.endpoint, headers: _headers }); } } export { HttpProvider };