Rendering the list is still having issues, so this isn't done yet.feature/default_network_editable
parent
24ff38e973
commit
13ee92909c
@ -0,0 +1,100 @@ |
|||||||
|
const ObservableStore = require('obs-store') |
||||||
|
const extend = require('xtend') |
||||||
|
|
||||||
|
// every three seconds when an incomplete tx is waiting
|
||||||
|
const POLLING_INTERVAL = 3000 |
||||||
|
|
||||||
|
class ShapeshiftController { |
||||||
|
|
||||||
|
constructor (opts = {}) { |
||||||
|
const initState = extend({ |
||||||
|
shapeShiftTxList: [], |
||||||
|
}, opts) |
||||||
|
this.store = new ObservableStore(initState) |
||||||
|
} |
||||||
|
|
||||||
|
//
|
||||||
|
// PUBLIC METHODS
|
||||||
|
//
|
||||||
|
|
||||||
|
getShapeShiftTxList () { |
||||||
|
const shapeShiftTxList = this.store.getState().shapeShiftTxList |
||||||
|
|
||||||
|
shapeShiftTxList.forEach((tx) => { |
||||||
|
if (tx.response.status === 'no_deposits') { |
||||||
|
this.updateTx(tx) |
||||||
|
} |
||||||
|
}) |
||||||
|
console.dir({shapeShiftTxList}) |
||||||
|
return shapeShiftTxList |
||||||
|
} |
||||||
|
|
||||||
|
getPendingTxs () { |
||||||
|
const txs = this.getShapeShiftTxList() |
||||||
|
const pending = txs.filter(tx => tx.response.status !== 'complete') |
||||||
|
return pending |
||||||
|
} |
||||||
|
|
||||||
|
pollForUpdates () { |
||||||
|
const pendingTxs = this.getPendingTxs() |
||||||
|
|
||||||
|
if (pendingTxs.length === 0) { |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
Promise.all(pendingTxs.map((tx) => { |
||||||
|
return this.updateTx(tx) |
||||||
|
})) |
||||||
|
.then((results) => { |
||||||
|
results.forEach(tx => this.saveTx(tx)) |
||||||
|
setTimeout(this.pollForUpdates.bind(this), POLLING_INTERVAL) |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
updateTx (tx) { |
||||||
|
const url = `https://shapeshift.io/txStat/${tx.depositAddress}` |
||||||
|
return fetch(url) |
||||||
|
.then((response) => { |
||||||
|
tx.response = response.json() |
||||||
|
if (tx.response.status === 'complete') { |
||||||
|
tx.time = new Date().getTime() |
||||||
|
} |
||||||
|
return tx |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
saveTx (tx) { |
||||||
|
const { shapeShiftTxList } = this.store.getState() |
||||||
|
const index = shapeShiftTxList.indexOf(tx) |
||||||
|
if (index !== -1) { |
||||||
|
shapeShiftTxList[index] = tx |
||||||
|
this.store.updateState({ shapeShiftTxList }) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
createShapeShiftTx (depositAddress, depositType) { |
||||||
|
const state = this.store.getState() |
||||||
|
let { shapeShiftTxList } = state |
||||||
|
|
||||||
|
var shapeShiftTx = { |
||||||
|
depositAddress, |
||||||
|
depositType, |
||||||
|
key: 'shapeshift', |
||||||
|
time: new Date().getTime(), |
||||||
|
response: {}, |
||||||
|
} |
||||||
|
|
||||||
|
if (!shapeShiftTxList) { |
||||||
|
shapeShiftTxList = [shapeShiftTx] |
||||||
|
} else { |
||||||
|
shapeShiftTxList.push(shapeShiftTx) |
||||||
|
} |
||||||
|
console.dir({ shapeShiftTxList }) |
||||||
|
|
||||||
|
this.store.updateState({ shapeShiftTxList }) |
||||||
|
this.pollForUpdates() |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
module.exports = ShapeshiftController |
Loading…
Reference in new issue