@springrole/springwallet
Version:
Wallet for SpringRole users
39 lines • 6.57 kB
JavaScript
;var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"encryptMnemonic",{enumerable:!0,get:function get(){return _encryption.encryptMnemonic}}),Object.defineProperty(exports,"decryptMnemonic",{enumerable:!0,get:function get(){return _encryption.decryptMnemonic}}),exports.SpringWallet=void 0;var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator")),_asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")),_classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")),_createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass")),_bip=require("bip39"),_crypto=require("crypto"),_ethereumjsWallet=require("ethereumjs-wallet"),_web3ProviderEngine=_interopRequireDefault(require("web3-provider-engine")),_fixture=_interopRequireDefault(require("web3-provider-engine/subproviders/fixture.js")),_nonceTracker=_interopRequireDefault(require("web3-provider-engine/subproviders/nonce-tracker.js")),_rpc=_interopRequireDefault(require("web3-provider-engine/subproviders/rpc.js")),_websocket=_interopRequireDefault(require("web3-provider-engine/subproviders/websocket.js")),_hookedWalletEthtx=_interopRequireDefault(require("web3-provider-engine/subproviders/hooked-wallet-ethtx.js")),_networkConfig=_interopRequireDefault(require("./networkConfig")),_encryption=require("./utils/encryption"),STORAGE_SESSION_KEY="wallet-session",MNEMONIC_PATH="m/44'/60'/0'/0/0",SpringWallet=/*#__PURE__*/function(){/**
* @param {Object} network
* @constructor
*/function a(b){if((0,_classCallCheck2["default"])(this,a),!b)throw new Error("'network' not defined");this.network=(0,_networkConfig["default"])(b),this.wallet=void 0,this.walletAddress=this.initWalletAddress(),this.privateKey=this.initPrivateKey(),this.provider=this.initProvider(this.network)}return(0,_createClass2["default"])(a,[{key:"initWalletAddress",value:function initWalletAddress(){var b=a.getWalletSession();return b?b.address:null}},{key:"initPrivateKey",value:function initPrivateKey(){var a=sessionStorage.getItem(STORAGE_SESSION_KEY);return a?a:null}},{key:"initProvider",value:function initProvider(a){var b=this,c=new _web3ProviderEngine["default"];return c.addProvider(new _fixture["default"]({web3_clientVersion:"SpringWallet/v0.2.0/javascript",net_listening:!0,eth_hashrate:"0x00",eth_mining:!1,eth_syncing:!0})),a.getPrivateKey=function(a,c){if(a.toLowerCase()!=b.walletAddress.toLowerCase())c("unknown account");else if(b.privateKey)c(null,Buffer.from(b.privateKey,"hex"));else if(b.wallet){var d=b.wallet.getPrivateKey().toString("hex");c(null,Buffer.from(d,"hex"))}else c("unlock wallet")},a.getAccounts=function(a){var c;b.walletAddress?c=b.walletAddress:b.wallet&&(c=b.wallet.getChecksumAddressString(),b.walletAddress=c),a(!1,[c])},c.addProvider(new _nonceTracker["default"]),c.addProvider(new _hookedWalletEthtx["default"](a)),a&&a.rpcUrl&&a.rpcUrl.indexOf&&0==a.rpcUrl.indexOf("wss://")?c.addProvider(new _websocket["default"](a)):c.addProvider(new _rpc["default"](a)),c.start(),c}/**
* Generate 12-words mnemonic phrase
* @method generateMnemonic
* @returns {String} mnemonic
*/}],[{key:"generateMnemonic",value:function generateMnemonic(){return(0,_bip.generateMnemonic)(128,_crypto.randomBytes)}/**
* Check validity of 12-words mnemonic phrase
* @method isValidMnemonic
* @param {String} phrase
* @returns {Boolean}
*/},{key:"isValidMnemonic",value:function isValidMnemonic(a){return(0,_bip.validateMnemonic)(a)}/**
* Encrypt Plain text mnemonic phrase
* @method encryptMnemonic
* @param {String} mnemonic phrase
* @param {String} password
* @returns {Promise<String>} encryptMnemonic
*/},{key:"encryptMnemonic",value:function encryptMnemonic(a,b){return(0,_encryption.encryptMnemonic)(a,b)}/**
* Decrypt an encrypted mnemonic with a password
* @method decryptMnemonic
* @param {String} encryptedMnemonic - Hex-encoded string of the encrypted mnemonic
* @param {String} password - Password
* @return {Promise<String>} mnemonic - plain text mnemonic phrase
*/},{key:"decryptMnemonic",value:function decryptMnemonic(a,b){return(0,_encryption.decryptMnemonic)(a,b)}/**
* Set wallet session in browser's localStorage
* @method setWalletSession
* @param {String} address - derived wallet address
* @param {String} encryptedMnemonic
*/},{key:"setWalletSession",value:function setWalletSession(a,b){localStorage.setItem(STORAGE_SESSION_KEY,JSON.stringify({address:a,encryptedMnemonic:b}))}/**
* Fetch encrypted mnemonic from browser's local storage
* @method getEncryptedMnemonic
* @returns {Object} encryptedMnemonic
*/},{key:"getWalletSession",value:function getWalletSession(){var a=localStorage.getItem(STORAGE_SESSION_KEY);if(!a)return null;var b=JSON.parse(a),c=b.address,d=b.encryptedMnemonic;return{address:c,encryptedMnemonic:d}}/**
* Initialize wallet from plain text mnemonic
* @param mnemonic Plain text mnemonic phrase
* @param path Mnemonic Path
* @returns wallet instance
*/},{key:"initializeWalletFromMnemonic",value:function(){var a=(0,_asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function a(b){var c,d,e;return _regenerator["default"].wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return a.next=2,(0,_bip.mnemonicToSeed)(b);case 2:return c=a.sent,a.next=5,_ethereumjsWallet.hdkey.fromMasterSeed(c);case 5:return d=a.sent,a.next=8,d.derivePath(MNEMONIC_PATH).deriveChild(0).getWallet();case 8:return e=a.sent,a.abrupt("return",e);case 10:case"end":return a.stop();}},a)}));return function initializeWalletFromMnemonic(){return a.apply(this,arguments)}}()},{key:"unlockWallet",value:function(){var b=(0,_asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function b(c){var d,e;return _regenerator["default"].wrap(function(b){for(;;)switch(b.prev=b.next){case 0:return b.next=2,a.initializeWalletFromMnemonic(c);case 2:return d=b.sent,this.wallet=d,this.walletAddress=d.getChecksumAddressString(),e=d.getPrivateKey().toString("hex"),this.privateKey=Buffer.from(e,"hex"),sessionStorage.setItem(STORAGE_SESSION_KEY,e),b.abrupt("return",this.walletAddress);case 9:case"end":return b.stop();}},b,this)}));return function unlockWallet(){return b.apply(this,arguments)}}()}]),a}();exports.SpringWallet=SpringWallet;