Wallet/src/js/services/addressService.js

84 lines
2.4 KiB
JavaScript
Raw Normal View History

2015-06-27 13:22:56 -03:00
'use strict';
'use strict';
angular.module('copayApp.services')
2015-11-04 16:17:04 -03:00
.factory('addressService', function(storageService, profileService, $log, $timeout, lodash, bwsError, gettextCatalog) {
2015-06-27 13:22:56 -03:00
var root = {};
2016-01-22 18:16:50 -03:00
root.expireAddress = function(walletId, cb) {
$log.debug('Cleaning Address ' + walletId);
2015-06-27 13:22:56 -03:00
storageService.clearLastAddress(walletId, function(err) {
return cb(err);
});
};
root.isUsed = function(walletId, byAddress, cb) {
storageService.getLastAddress(walletId, function(err, addr) {
var used = lodash.find(byAddress, {
address: addr
});
return cb(null, used);
});
};
root._createAddress = function(walletId, cb) {
var client = profileService.getClient(walletId);
$log.debug('Creating address for wallet:', walletId);
2016-01-13 12:08:13 -03:00
client.createAddress({}, function(err, addr) {
2015-06-27 13:22:56 -03:00
if (err) {
2015-11-04 16:17:04 -03:00
var prefix = gettextCatalog.getString('Could not create address');
2015-06-27 13:22:56 -03:00
if (err.error && err.error.match(/locked/gi)) {
$log.debug(err.error);
return $timeout(function() {
root._createAddress(walletId, cb);
}, 5000);
2016-01-22 18:16:50 -03:00
} else if (err.message && err.message == 'MAIN_ADDRESS_GAP_REACHED') {
2015-11-04 16:17:04 -03:00
$log.warn(err.message);
prefix = null;
2016-01-22 18:16:50 -03:00
client.getMainAddresses({
reverse: true,
limit: 1
}, function(err, addr) {
2015-11-04 16:17:04 -03:00
if (err) return cb(err);
return cb(null, addr[0].address);
});
2015-06-27 13:22:56 -03:00
}
2015-11-04 16:17:04 -03:00
return bwsError.cb(err, prefix, cb);
2015-06-27 13:22:56 -03:00
}
return cb(null, addr.address);
});
};
root.getAddress = function(walletId, forceNew, cb) {
var firstStep;
if (forceNew) {
firstStep = storageService.clearLastAddress;
} else {
firstStep = function(walletId, cb) {
return cb();
};
}
firstStep(walletId, function(err) {
if (err) return cb(err);
storageService.getLastAddress(walletId, function(err, addr) {
if (err) return cb(err);
if (addr) return cb(null, addr);
root._createAddress(walletId, function(err, addr) {
if (err) return cb(err);
storageService.storeLastAddress(walletId, addr, function() {
if (err) return cb(err);
return cb(null, addr);
});
});
});
});
};
return root;
});