UNPKG

sportsbet-mobile

Version:
312 lines (266 loc) 8.06 kB
///<reference path=".#ts/client.d.ts" /> interface Templates { withdraw: Template; } Session.setDefault('success', false); Template.withdraw.helpers({ balance: function(){ var wallet = Banking.WalletClient.db.findOne({currency: 'BTC'}); return wallet ? wallet.balanceInMillis() : 0; }, depositsLoaded: function() { return Session.get('depositsReady'); }, unconfirmedDeposit: function(){ var method = Banking.Methods.BitcoinMethodClient.db.findOne(); var wallet = Banking.WalletClient.db.findOne({currency: 'BTC'}); if (!method || !wallet) { return; } var deps = wallet.unconfirmedDeposits(method); if (deps.count() == 0) { return; } return deps.fetch()[0]; }, withdraws: function(){ var method = Banking.Methods.BitcoinMethodClient.db.findOne(); var wallet = Banking.WalletClient.db.findOne({currency: 'BTC'}); if (!method || !wallet) { return; } return Banking.Transaction.db.find({ wallet: wallet, 'reference.id': method._id, referenceType: Banking.TransactionType.WITHDRAW }, {sort: {createTime: -1}}); }, successMessage: function(){ return Session.get('successMessage'); }, errorMessage: function(){ return Session.get('errorMessage'); }, loading: function(){ return Session.get('loading') ? 'loading' : ''; }, otpEnabled: function() { return Users.Profile.active() && Users.Profile.active().otpEnabled }, canWithdraw: function() { return Session.get('canWithdraw'); }, wdButtonDisabled: function() { return Session.get('wdButtonDisabled'); }, canWithdrawCheck: function() { if (!Users.Profile.active()) { return; } var pwChangeDate = Users.Profile.active().passwordChangeDate; if (!pwChangeDate) { Session.set('canWithdraw', true); return; } var diff = moment().diff(moment(pwChangeDate), 'minutes'); Session.set('canWithdraw', diff < 2880 ? false : true); setInterval(function() { var diff = moment().diff(moment(pwChangeDate), 'minutes'); Session.set('canWithdraw', diff < 2880 ? false: true); }, 60000); }, withdrawCooldownCheck: function() { if (!Users.Profile.active()) { return; } var pwChangeDate = Users.Profile.active().passwordChangeDate; if (!pwChangeDate) { return; } var diff = 2880 - moment().diff(moment(pwChangeDate), 'minutes'); var hours = Math.floor(diff / 60); var minutes = diff % 60; Session.set('cooldown', hours + ' hours and ' + minutes + ' minutes'); setInterval(function() { var diff = 2880 - moment().diff(moment(pwChangeDate), 'minutes'); var hours = Math.floor(diff / 60); var minutes = diff % 60; Session.set('cooldown', hours + ' hours and ' + minutes + ' minutes'); }, 60000); }, withdrawCooldown: function() { return Session.get('cooldown'); } }); Template.withdraw.events({ 'click .mWithdraw a, touchstart .mWithdraw a': function(){ var tx: Banking.Transaction = this; tx.showDetails(); }, 'submit form': function(e: MeteorTemplateEvent){ e.preventDefault(); Session.set('successMessage', ''); Session.set('errorMessage', ''); Session.set('wdButtonDisabled', false); googleSend({ 'eventCategory': 'Cashier', 'eventAction': 'Clicked Withdraw', 'pageEventArea': 'Main' }); var $form = $(e.target); var $addressField = $form.find('input[name=address]'); var $amountField = $form.find('input[name=amount]'); var $otpField = $form.find('input[name=otp]'); var address = $addressField.val(); var otpCode = $otpField.val(); var amount = +(+$amountField.val() / 1000).toFixed(8); var amountValid = amount > 0 && amount <= Banking.WalletClient.db.findOne({currency: 'BTC'}).balance; var formValid = true; if (!amountValid) { if (!amount || amount < 0 || isNaN(amount)) { Session.set('errorMessage', 'Invalid amount'); } else { Session.set('errorMessage', 'Not enough bitcoins in your current balance'); } formValid = false; $amountField.anim('shake'); googleSend({ 'eventCategory': 'Cashier', 'eventAction': 'Amount Error', 'eventLabel': 'Withdraw', 'pageEventArea': 'Main' }); } else { var method = Banking.Methods.BitcoinMethodClient.db.findOne(); if (Users.Profile.active() && Users.Profile.active().otpEnabled && !otpCode) { Session.set('errorMessage', 'Google Authenticator code needed'); formValid = false; $otpField.anim('shake'); } else { function credit() { if (formValid) { method.credit(address, amount, function(err, resp){ Session.set('loading', false); if (err) { if (err.details == 'wrongOtp') { Session.set('errorMessage', 'Wrong Google Authenticator code'); formValid = false; $otpField.anim('shake'); Session.set('wdButtonDisabled', false); } else { Session.set('errorMessage', err.message); Session.set('wdButtonDisabled', false); throw err; } } else { Session.set('wdButtonDisabled', false); Session.set('successMessage', 'Your withdraw request has been sent.'); $addressField.val(''); $amountField.val(''); $otpField.val(''); Meteor.call('Fraud/getDeviceInfo', (err, res) => { if (err) { return; } Meteor.call('Fraud/WithdrawLookup', res); }); googleSend({ 'eventCategory': 'Cashier', 'eventAction': 'Withdrawal Success', 'eventValue': amount, 'pageEventArea': 'Main', 'withdrawals': 1 });`` } }, otpCode); } else { Session.set('loading', false); } } if (method.minWithdraw && method.minWithdraw > amount) { Session.set('errorMessage', 'Minimum withdraw amount is ' + (method.minWithdraw * 1000).toFixed(2) + ' mBTC'); formValid = false; $amountField.anim('shake'); googleSend({ 'eventCategory': 'Cashier', 'eventAction': 'Amount Error', 'eventLabel': 'Withdraw', 'pageEventArea': 'Main' }); } else { Session.set('loading', true); Session.set('wdButtonDisabled', true); Banking.Bitcoin.AddressClient.validate(address, function(err, addressValid){ if (err) { Session.set('loading', false); Session.set('errorMessage', err.message); Session.set('wdButtonDisabled', false); throw err; } if (!addressValid) { Users.User.checkUsernameAvailability(address, null, function (available) { if (available) { formValid = false; Session.set('errorMessage', 'Incorrect Bitcoin wallet address'); $addressField.anim('shake'); Session.set('loading', false); Session.set('wdButtonDisabled', false); googleSend({ 'eventCategory': 'Cashier', 'eventAction': 'Bitcoin Address Error', 'pageEventArea': 'Main' }); } else { credit(); } }); return; } credit(); }); } } } } }); Template.withdraw.onRendered(function() { this.autorun(() => { this.subscribe('Banking.Method'); var method = Banking.Methods.BitcoinMethodClient.db.findOne(); var wallet = Banking.WalletClient.db.findOne({currency: 'BTC'}); Session.set('depositsReady', false); if (!method || !wallet) { return; } this._depSub = Meteor.subscribe('Banking/userTransactions', { wallet: wallet._id, 'reference.id': method._id, status: Banking.TransactionStatus.PENDING, referenceType: Banking.TransactionType.DEPOSIT }, function () { Session.set('depositsReady', true); }); if (this._depSub.ready()) { Session.set('depositsReady', true); } this._txSub = Meteor.subscribe('Banking/userTransactions', { wallet: wallet._id, 'reference.id': method._id, referenceType: Banking.TransactionType.WITHDRAW }, {sort: {createTime: -1}}); }); }); Template.withdraw.destroyed = function() { if (this._txSub) { this._txSub.stop(); this._depSub.stop(); } };