UNPKG

golos-lib-js

Version:

Golos-js the JavaScript library with API for GOLOS blockchain

86 lines (85 loc) 2.4 kB
"use strict"; var _ecc = require("../ecc"); class MultiSessionTempData { constructor(_ref) { let { key, accounts } = _ref; this.key = key; this.accounts = accounts; } getVal(account, field) { let defaultVal = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; if (this.accounts[account]) return this.accounts[account][field] || defaultVal; return defaultVal; } setVal(account, field, val) { this.accounts[account] = this.accounts[account] || {}; this.accounts[account][field] = val; this.accounts[account]._created = Date.now(); return this; } addKey(account, authType, val) { if (val && val.toWif) val = val.toWif(); try { _ecc.PrivateKey.fromWif(val); } catch (e) { val = _ecc.PrivateKey.fromSeed(account + authType + val).toString(); } return this.setVal(account, authType, val); } addMultiAuth(account) { return this.setVal(account, 'multiauth', true); } clearExpired() { let expirationMsec = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 3600000; let nowMsec = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; let onClear = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; nowMsec = nowMsec || Date.now(); const cleared = (acc, deltaMsec) => { let defaultLog = true; if (onClear) { const info = { acc, deltaMsec }; const { log } = onClear(info); if (log) { log(info); defaultLog = false; } } if (defaultLog) console.log('MultiSessionTempData cleared', deltaMsec); }; for (let [acc, data] of Object.entries(this.accounts)) { if (data._created) { const deltaMsec = nowMsec - data._created; if (deltaMsec >= expirationMsec) { delete this.accounts[acc]; cleared(acc, deltaMsec); } } } return this; } logout(account) { delete this.accounts[account]; return this; } clear() { this.accounts = {}; return this; } save() { const json = JSON.stringify({ accounts: this.accounts }); const buf = new Buffer(json).toString('hex'); sessionStorage.setItem(this.key, buf); return this; } } module.exports = MultiSessionTempData;