golos-lib-js
Version:
Golos-js the JavaScript library with API for GOLOS blockchain
86 lines (85 loc) • 2.4 kB
JavaScript
;
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;