diff options
| author | Adam Soltys <[email protected]> | 2016-11-11 23:20:40 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2016-12-26 14:22:39 -0800 |
| commit | e92783c613fa4266b69f5d56257cf919c86182b7 (patch) | |
| tree | a4454197f19142d2774e7c478c403de16e1a5dbb /bcoin.js | |
| parent | a3cc882cee6afcfa4b278e653b3927b0cf79df9a (diff) | |
| download | coinos-server-e92783c613fa4266b69f5d56257cf919c86182b7.tar.gz coinos-server-e92783c613fa4266b69f5d56257cf919c86182b7.zip | |
Use bcoin to watch all m/0/1 addresses and send email/sms notifications (fixes #49 #59)
Diffstat (limited to 'bcoin.js')
| -rw-r--r-- | bcoin.js | 98 |
1 files changed, 82 insertions, 16 deletions
@@ -1,41 +1,107 @@ (function() { - var bcoin, db; + var bcoin, config, db, twilio; bcoin = require('bcoin'); + config = require('./config'); + db = require('./redis'); + twilio = require('twilio'); + module.exports = { - init: function() { - var addresses, chain, pool; - addresses = {}; + init: function(app) { + var chain, pool, users; + users = {}; chain = new bcoin.chain({ db: 'leveldb', - location: __dirname + 'mainchain/mainchain.db', + name: 'spvchain', + location: __dirname + '/db/spvchain', spv: true }); pool = new bcoin.pool({ chain: chain, - spv: true + spv: true, + size: 1, + maxPeers: 1, + seeds: ['dctrl.ca'] }); - return pool.open(function(err) { - db.keys("user:*", function(err, users) { - return users.map(function(key) { - return db.hgetall(key, function(err, user) { - addresses[user.address] = user.username; - pool.watchAddress(user.address); - return console.log(user.address); + pool.logger.level = 4; + return pool.open().then(function() { + db.keysAsync("user:*").then(function(keys) { + return Promise.all(keys.map(function(key) { + return db.hgetallAsync(key).then(function(user) { + console.log(key); + console.log(user); + if (user.address) { + pool.watchAddress(user.address); + return users[user.address] = { + email: user.email, + currency: user.currency, + symbol: user.symbol, + phone: user.phone + }; + } }); - }); + })); }); pool.connect(); pool.startSync(); pool.on('error', function(err) { - debugger; return console.log(err); }); return pool.on('tx', function(tx) { - return console.log(tx); + var address, client, i, len, output, ref, results, value; + console.log(tx); + ref = tx.outputs; + results = []; + for (i = 0, len = ref.length; i < len; i++) { + output = ref[i]; + value = (output.value / 100000000).toFixed(8); + address = output.getAddress().toBase58(); + if (Object.keys(users).includes(address)) { + app.render('payment', { + value: value, + address: address + }, function(err, html) { + debugger; + var content, from_email, helper, mail, request, sg, subject, to_email; + console.log(users[address]); + helper = require('sendgrid').mail; + from_email = new helper.Email('[email protected]'); + to_email = new helper.Email(users[address].email); + subject = 'Received Payment'; + content = new helper.Content('text/html', html); + mail = new helper.Mail(from_email, subject, to_email, content); + sg = require('sendgrid')(config.sendgrid_token); + request = sg.emptyRequest({ + method: 'POST', + path: '/v3/mail/send', + body: mail.toJSON() + }); + return sg.API(request, function(error, response) { + console.log(response.statusCode); + console.log(response.body); + return console.log(response.headers); + }); + }); + if (users[address].phone) { + client = new twilio.RestClient(config.twilio_sid, config.twilio_token); + results.push(client.messages.create({ + to: user.phone, + from: config.twilio_number, + body: "You received a payment of " + value + " BTC" + }, function(err, message) { + return console.log(message.sid); + })); + } else { + results.push(void 0); + } + } else { + results.push(void 0); + } + } + return results; }); }); } |
