diff --git a/lib/plugins.js b/lib/plugins.js index 6173528c..ba5e5b72 100644 --- a/lib/plugins.js +++ b/lib/plugins.js @@ -69,13 +69,9 @@ function loadPlugin (name, config) { // each used plugin MUST be installed try { plugin = require('lamassu-' + name) - } catch (_) { - try { - require('plugins/' + name) } catch (_) { throw new Error(name + ' module is not installed. ' + 'Try running \'npm install --save lamassu-' + name + '\' first') - } } // each plugin MUST implement those @@ -160,27 +156,27 @@ exports.configure = function configure (config) { cryptoCodes.forEach(function (cryptoCode) { // TICKER [required] configure (or load) - loadOrConfigPlugin( + loadOrConfigPlugin( tickerPlugins[cryptoCode], - 'ticker', + 'ticker', cryptoCode, - deviceCurrency, // device currency + deviceCurrency, // device currency function onTickerChange (newTicker) { tickerPlugins[cryptoCode] = newTicker pollRate(cryptoCode) - } + } ) - // WALLET [required] configure (or load) - loadOrConfigPlugin( + // WALLET [required] configure (or load) + loadOrConfigPlugin( walletPlugins[cryptoCode], - 'transfer', + 'transfer', cryptoCode, - null, + null, function onWalletChange (newWallet) { walletPlugins[cryptoCode] = newWallet pollBalance(cryptoCode) - } + } ) tradesQueues[cryptoCode] = tradesQueues[cryptoCode] || [] @@ -189,12 +185,12 @@ exports.configure = function configure (config) { traderPlugins[cryptoCode], 'trader', cryptoCode, - null, + null, function onTraderChange (newTrader) { traderPlugins[cryptoCode] = newTrader if (newTrader === null) stopTrader(cryptoCode) else startTrader(cryptoCode) - } + } ) }) @@ -267,7 +263,7 @@ function executeTx (session, tx, authority, cb) { if (cryptoAtomsToSend === 0) { logger.debug('No cryptoAtoms to send') return cb(null, {statusCode: 204, txId: tx.txId, txHash: null}) -} + } var cryptoCode = tx.cryptoCode _sendCoins(tx.toAddress, cryptoAtomsToSend, cryptoCode, function (_err, txHash) { @@ -358,32 +354,32 @@ exports.trade = function trade (session, rawTrade, cb) { async.apply(db.addOutgoingPending, session, rawTrade.currency, rawTrade.cryptoCode, rawTrade.toAddress), async.apply(db.recordBill, session, rawTrade) ], cb) -}; +} -exports.stateChange = function stateChange(session, rec, cb) { - var rec = { +exports.stateChange = function stateChange (session, rec, cb) { + var event = { id: rec.uuid, fingerprint: session.fingerprint, eventType: 'stateChange', note: JSON.stringify({state: rec.state, sessionId: session.id}), deviceTime: session.deviceTime } - db.machineEvent(rec, cb) -}; + db.machineEvent(event, cb) +} -exports.recordPing = function recordPing(session, rec, cb) { - var rec = { +exports.recordPing = function recordPing (session, rec, cb) { + var event = { id: uuid.v4(), fingerprint: session.fingerprint, eventType: 'ping', note: JSON.stringify({state: rec.state, sessionId: session.id}), deviceTime: session.deviceTime } - db.machineEvent(rec, cb) -}; + db.machineEvent(event, cb) +} -exports.sendCoins = function sendCoins(session, rawTx, cb) { - executeTx(session, rawTx, 'machine', cb); +exports.sendCoins = function sendCoins (session, rawTx, cb) { + executeTx(session, rawTx, 'machine', cb) } exports.cashOut = function cashOut (session, tx, cb) { @@ -457,9 +453,9 @@ function startTrader (cryptoCode) { tradeIntervals[cryptoCode] = setInterval( function () { executeTrades(cryptoCode) }, - cachedConfig.exchanges.settings.tradeInterval + cachedConfig.exchanges.settings.tradeInterval ) - } +} function stopTrader (cryptoCode) { if (!tradeIntervals[cryptoCode]) return @@ -468,7 +464,7 @@ function stopTrader (cryptoCode) { clearInterval(tradeIntervals[cryptoCode]) tradeIntervals[cryptoCode] = null tradesQueues[cryptoCode] = [] - } +} function pollBalance (cryptoCode, cb) { logger.debug('[%s] collecting balance', cryptoCode) diff --git a/lib/postgresql_interface.js b/lib/postgresql_interface.js index c30ea9a8..59ff5215 100644 --- a/lib/postgresql_interface.js +++ b/lib/postgresql_interface.js @@ -52,7 +52,7 @@ exports.init = function init (_conString) { if (!conString) { throw new Error('Postgres connection string is required') } - } +} function connect (cb) { pg.connect(conString, function (err, client, done) { @@ -109,7 +109,7 @@ exports.recordDeviceEvent = function recordDeviceEvent (session, event) { event.deviceTime] client.query(sql, values, done) }) - } +} function query (client, queryStr, values, cb) { if (!cb) { @@ -185,8 +185,8 @@ function computeSendAmount (tx, totals) { var fiatRemaining = (tx.fiat || totals.billsFiat) - totals.txFiat var satoshisRemaining = tx.satoshis.eq(0) - ? totals.billsSatoshis.minus(totals.txSatoshis) - : tx.satoshis.minus(totals.txSatoshis) + ? totals.billsSatoshis.minus(totals.txSatoshis) + : tx.satoshis.minus(totals.txSatoshis) var result = { fiat: fiatRemaining, @@ -265,18 +265,18 @@ function insertOutgoingCompleteTx (client, session, tx, cb) { } function insertIncoming (client, session, tx, satoshis, fiat, stage, authority, - cb) { + cb) { var realSatoshis = satoshis || new BigNumber(0) insertTx(client, session, true, tx, realSatoshis, fiat, stage, authority, cb) } function insertOutgoing (client, session, tx, satoshis, fiat, stage, authority, - cb) { + cb) { insertTx(client, session, false, tx, satoshis, fiat, stage, authority, cb) } function insertTx (client, session, incoming, tx, satoshis, fiat, stage, - authority, cb) { + authority, cb) { var fields = [ 'session_id', 'stage', @@ -327,7 +327,7 @@ function refreshPendingTx (client, session, cb) { } function addPendingTx (client, session, incoming, currencyCode, cryptoCode, toAddress, - satoshis, cb) { + satoshis, cb) { var fields = ['device_fingerprint', 'session_id', 'incoming', 'currency_code', 'crypto_code', 'to_address', 'satoshis'] var sql = getInsertQuery('pending_transactions', fields, false) @@ -367,7 +367,7 @@ exports.addOutgoingTx = function addOutgoingTx (session, tx, cb) { }) }) }) - } +} exports.sentCoins = function sentCoins (session, tx, authority, toSend, fee, error, txHash) { @@ -431,14 +431,14 @@ exports.addOutgoingPending = function addOutgoingPending (session, currencyCode, logger.error(err) return cb(err) }) - } + } silentQuery(client, 'COMMIT', null, function () { done() cb() }) }) }) - } +} exports.addInitialIncoming = function addInitialIncoming (session, tx, cb) { connect(function (cerr, client, done) { @@ -460,7 +460,7 @@ exports.addInitialIncoming = function addInitialIncoming (session, tx, cb) { }) }) }) - } +} function insertDispense (client, session, tx, cartridges, transactionId, cb) { var fields = [ @@ -511,55 +511,55 @@ exports.cartridgeCounts = function cartridgeCounts (session, cb) { done() if (err) return cb(err) var counts = results.rows.length === 1 - ? [results.rows[0].count1, results.rows[0].count2] - : [0, 0] - cb(null, {id: results.rows[0].id, counts: counts}); - }); - }); -}; + ? [results.rows[0].count1, results.rows[0].count2] + : [0, 0] + cb(null, {id: results.rows[0].id, counts: counts}) + }) + }) +} -exports.machineEvent = function machineEvent(rec, cb) { +exports.machineEvent = function machineEvent (rec, cb) { var TTL = 2 * 60 * 60 * 1000 - connect(function(cerr, client, done) { - if (cerr) return cb(cerr); + connect(function (cerr, client, done) { + if (cerr) return cb(cerr) var fields = ['id', 'device_fingerprint', 'event_type', 'note', 'device_time'] var sql = getInsertQuery('machine_events', fields, false) var values = [rec.id, rec.fingerprint, rec.eventType, rec.note, rec.deviceTime] - var deleteSql = 'DELETE FROM machine_events WHERE (EXTRACT(EPOCH FROM (now() - created))) * 1000 > $1'; - var deleteValues = [TTL]; + var deleteSql = 'DELETE FROM machine_events WHERE (EXTRACT(EPOCH FROM (now() - created))) * 1000 > $1' + var deleteValues = [TTL] - query(client, deleteSql, deleteValues, function(err) { + query(client, deleteSql, deleteValues, function (err) { if (err) console.error(err) }) - query(client, sql, values, function(err, results) { - done(); - return cb(err, results); - }); - }); -}; + query(client, sql, values, function (err, results) { + done() + return cb(err, results) + }) + }) +} -exports.devices = function devices(cb) { - connect(function(cerr, client, done) { - if (cerr) return cb(cerr); +exports.devices = function devices (cb) { + connect(function (cerr, client, done) { + if (cerr) return cb(cerr) var sql = 'SELECT fingerprint, name FROM devices ' + - 'WHERE authorized=$1'; - query(client, sql, [true], function(err, results) { - done(); - if (err) return cb(err); + 'WHERE authorized=$1' + query(client, sql, [true], function (err, results) { + done() + if (err) return cb(err) cb(null, results) }) }) } -exports.machineEvents = function machineEvents(cb) { - connect(function(cerr, client, done) { - if (cerr) return cb(cerr); +exports.machineEvents = function machineEvents (cb) { + connect(function (cerr, client, done) { + if (cerr) return cb(cerr) var sql = 'SELECT *, (EXTRACT(EPOCH FROM (now() - created))) * 1000 AS age FROM machine_events' - query(client, sql, [], function(err, results) { - done(); - if (err) return cb(err); + query(client, sql, [], function (err, results) { + done() + if (err) return cb(err) cb(null, results) }) }) diff --git a/lib/routes.js b/lib/routes.js index 4b2ca919..c4cd0551 100644 --- a/lib/routes.js +++ b/lib/routes.js @@ -39,11 +39,11 @@ function buildRates () { rates[cryptoCode] = { cashIn: rate.ask.times(cashInCommission), cashOut: rate.bid.div(cashOutCommission) - } + } }) return rates - } +} function buildBalances () { var cryptoCodes = plugins.getcryptoCodes() @@ -55,7 +55,7 @@ function buildBalances () { }) return _balances - } +} function poll (req, res) { var fingerprint = getFingerprint(req) @@ -103,9 +103,9 @@ function poll (req, res) { res.json(response) }) - plugins.recordPing(session(req), req.query, function(err) { - if (err) console.error(err); - }); + plugins.recordPing(session(req), req.query, function (err) { + if (err) console.error(err) + }) } function trade (req, res) { @@ -119,8 +119,8 @@ function trade (req, res) { }) } -function stateChange(req, res) { - plugins.stateChange(session(req), req.body, function(err) { +function stateChange (req, res) { + plugins.stateChange(session(req), req.body, function (err) { if (err) console.error(err) res.json(200) }) @@ -276,5 +276,5 @@ function session (req) { function getFingerprint (req) { return (typeof req.connection.getPeerCertificate === 'function' && - req.connection.getPeerCertificate().fingerprint) || 'unknown' + req.connection.getPeerCertificate().fingerprint) || 'unknown' }