UNPKG

stellar-wallet-js-sdk

Version:

> # :warning: Alpha version. Don't use in production.

191 lines (166 loc) 4.34 kB
'use strict'; var _ = require('lodash'); var crypto = require('./util/crypto'); var errors = require('./errors'); var sjcl = require('./util/sjcl'); var nacl = require('tweetnacl'); var Promise = require('bluebird'); var protocol = require('./protocol'); function Wallet(p) { var params = _.cloneDeep(p); var self = this; var properties = [ 'server', 'username', 'rawMasterKey', 'rawWalletId', 'rawWalletKey', 'rawMainData', 'rawKeychainData', 'lockVersion', 'totpEnabled' ]; _.each(properties, function(param) { self[param] = params[param]; }); this.updateEncodedValues = function() { this.masterKey = sjcl.codec.base64.fromBits(this.rawMasterKey); this.walletId = sjcl.codec.base64.fromBits(this.rawWalletId); this.walletKey = sjcl.codec.base64.fromBits(this.rawWalletKey); }; // rtrim / this.server = this.server.replace(/\/+$/g,''); this.updateEncodedValues(); } Wallet.prototype.getServer = function() { return this.server; }; Wallet.prototype.getUsername = function() { return this.username; }; Wallet.prototype.getWalletId = function() { return this.walletId; }; Wallet.prototype.getWalletKey = function() { return this.walletKey; }; Wallet.prototype.getMainData = function() { return this.rawMainData; }; Wallet.prototype.getKeychainData = function() { return this.rawKeychainData; }; Wallet.prototype.updateMainData = function(p) { var params = _.cloneDeep(p); params = _.extend(params, _.pick(this, [ 'server', 'walletId', 'username', 'lockVersion', 'rawWalletKey' ])); var self = this; return protocol.updateMainData(params) .then(function(updateData) { self.lockVersion = updateData.newLockVersion; self.rawMainData = updateData.rawMainData; return Promise.resolve(); }); }; Wallet.prototype.delete = function(p) { var params = _.cloneDeep(p); params = _.extend(params, _.pick(this, [ 'server', 'walletId', 'username', 'lockVersion' ])); return protocol.deleteWallet(params); }; Wallet.prototype.changePassword = function(p) { var params = _.cloneDeep(p); params = _.extend(params, _.pick(this, [ 'server', 'username', 'walletId', 'rawMainData', 'rawKeychainData', 'lockVersion' ])); var self = this; return protocol.changePassword(params) .then(function(updateData) { self.rawWalletId = updateData.rawWalletId; self.rawWalletKey = updateData.rawWalletKey; self.rawMasterKey = updateData.rawMasterKey; self.lockVersion = updateData.newLockVersion; self.updateEncodedValues(); return Promise.resolve(); }); }; Wallet.prototype.isTotpEnabled = function() { return this.totpEnabled; }; Wallet.prototype.enableTotp = function(p) { var params = _.cloneDeep(p); params = _.extend(params, _.pick(this, [ 'server', 'username', 'walletId', 'lockVersion' ])); var self = this; return protocol.enableTotp(params) .then(function(updateData) { self.lockVersion = updateData.newLockVersion; self.totpEnabled = true; return Promise.resolve(); }); }; Wallet.prototype.enableRecovery = function(p) { var params = _.cloneDeep(p); params = _.extend(params, _.pick(this, [ 'server', 'username', 'walletId', 'masterKey', 'lockVersion' ])); var self = this; return protocol.enableRecovery(params) .then(function(data) { self.lockVersion = data.newLockVersion; return Promise.resolve(); }); }; Wallet.prototype.disableTotp = function(p) { var params = _.cloneDeep(p); params = _.extend(params, _.pick(this, [ 'server', 'username', 'walletId', 'lockVersion' ])); var self = this; return protocol.disableTotp(params) .then(function(updateData) { self.lockVersion = updateData.newLockVersion; self.totpEnabled = false; return Promise.resolve(); }); }; Wallet.prototype.updateLockVersion = function(p) { var params = _.cloneDeep(p); params = _.extend(params, _.pick(this, [ 'server', 'username', 'walletId' ])); var self = this; return protocol.getLockVersion(params) .then(function(lockVersion) { self.lockVersion = lockVersion; return Promise.resolve(); }); }; module.exports = Wallet;