sportsbet-mobile
Version:
Sportsbet mobile
312 lines (266 loc) • 8.06 kB
text/typescript
///<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();
}
};