UNPKG

@springrole/springwallet

Version:
39 lines 6.57 kB
"use strict";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;