You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.1 KiB
67 lines
2.1 KiB
import axios from 'axios'
|
|
|
|
// When running in development/hot mode we load the renderer js code via webpack dev server, and it is from there that
|
|
// we ultimately initate requests to these remote resources. The end result is that the electron browser window makes a
|
|
// request to localhost (to webpack dev server), which in turn makes a request to the remote resource. If the remote
|
|
// resource in question has a restrictive `Access-Control-Allow-Origin` header, this may cause the electron browser
|
|
// window to not allow loading the remote content.
|
|
//
|
|
// See https://enable-cors.org/
|
|
//
|
|
// In order to mitigate the CORS issue, we instead access these remote resources through a local proxy that we have
|
|
// defined on the webpack dev server.
|
|
const scheme = process.env.HOT ? '/proxy/' : 'https://'
|
|
|
|
export function requestTicker(id) {
|
|
const BASE_URL = `${scheme}api.coinmarketcap.com/v1/ticker/${id}`
|
|
return axios({
|
|
method: 'get',
|
|
url: BASE_URL
|
|
}).then(response => response.data)
|
|
}
|
|
|
|
export function requestTickers(ids) {
|
|
return axios
|
|
.all(ids.map(id => requestTicker(id)))
|
|
.then(
|
|
axios.spread((btcTicker, ltcTicker) => ({ btcTicker: btcTicker[0], ltcTicker: ltcTicker[0] }))
|
|
)
|
|
}
|
|
|
|
export function requestBlockHeight() {
|
|
const sources = [
|
|
{
|
|
baseUrl: `${scheme}testnet-api.smartbit.com.au/v1/blockchain/blocks?limit=1`,
|
|
path: 'blocks[0].height'
|
|
},
|
|
{
|
|
baseUrl: `${scheme}tchain.api.btc.com/v3/block/latest`,
|
|
path: 'data.height'
|
|
},
|
|
{
|
|
baseUrl: `${scheme}api.blockcypher.com/v1/btc/test3`,
|
|
path: 'height'
|
|
}
|
|
]
|
|
const fetchData = (baseUrl, path) => {
|
|
return axios({
|
|
method: 'get',
|
|
timeout: 5000,
|
|
url: baseUrl
|
|
})
|
|
.then(response => path.split('.').reduce((a, b) => a[b], response.data))
|
|
.catch(() => null)
|
|
}
|
|
|
|
const promises = []
|
|
sources.forEach(source => promises.push(fetchData(source.baseUrl, source.path)))
|
|
return Promise.race(promises)
|
|
}
|
|
|
|
export function requestSuggestedNodes() {
|
|
const BASE_URL = `${scheme}zap.jackmallers.com/suggested-peers`
|
|
return axios({
|
|
method: 'get',
|
|
url: BASE_URL
|
|
}).then(response => response.data)
|
|
}
|
|
|