@authereum/zos
Version:
Command-line interface for the ZeppelinOS smart contract platform
92 lines • 4.03 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const lodash_omitby_1 = __importDefault(require("lodash.omitby"));
const lodash_isempty_1 = __importDefault(require("lodash.isempty"));
const lodash_pick_1 = __importDefault(require("lodash.pick"));
const lodash_compact_1 = __importDefault(require("lodash.compact"));
const path_1 = __importDefault(require("path"));
const zos_lib_1 = require("zos-lib");
const constants_1 = require("../files/constants");
const state = { alreadyPrintedSessionInfo: false };
const SESSION_FILE = '.session';
const SESSION_PATH = process.env.ZOS_SESSION_PATH || path_1.default.join(constants_1.OPEN_ZEPPELIN_FOLDER, SESSION_FILE);
const DEFAULT_TX_TIMEOUT = 10 * 60; // 10 minutes
exports.DEFAULT_TX_TIMEOUT = DEFAULT_TX_TIMEOUT;
const DEFAULT_EXPIRATION_TIMEOUT = 15 * 60; // 15 minutes
const Session = {
getOptions(overrides = {}, silent) {
const session = this._parseSession();
if (!session || this._hasExpired(session))
return this._setDefaults(overrides);
if (!silent && !state.alreadyPrintedSessionInfo) {
state.alreadyPrintedSessionInfo = true;
const fields = lodash_omitby_1.default(session, (v, key) => overrides[key] && overrides[key] !== v);
zos_lib_1.Loggy.noSpin(__filename, 'getOptions', `get-options`, `Using session with ${describe(fields)}`);
}
return Object.assign({}, session, overrides);
},
setDefaultNetworkIfNeeded(network) {
const session = this._parseSession();
if (!session || this._hasExpired(session))
this.open({ network }, 0, false);
},
getNetwork() {
const session = this._parseSession();
const network = session ? session.network : undefined;
return { network, expired: this._hasExpired(session) };
},
open({ network, from, timeout }, expires = DEFAULT_EXPIRATION_TIMEOUT, logInfo = true) {
const expirationTimestamp = new Date(new Date().getTime() + expires * 1000);
zos_lib_1.FileSystem.writeJson(SESSION_PATH, {
network,
from,
timeout,
expires: expirationTimestamp,
});
if (logInfo) {
zos_lib_1.Loggy.noSpin(__filename, 'getOptions', `get-options`, `Using ${describe({ network, from, timeout })} by default.`);
}
},
close() {
if (zos_lib_1.FileSystem.exists(SESSION_PATH))
zos_lib_1.FileSystem.remove(SESSION_PATH);
zos_lib_1.Loggy.noSpin(__filename, 'getOptions', `close-session`, 'Closed zos session');
},
ignoreFile() {
const GIT_IGNORE = '.gitignore';
if (zos_lib_1.FileSystem.exists(GIT_IGNORE) &&
zos_lib_1.FileSystem
.read(GIT_IGNORE)
.toString()
.indexOf(SESSION_PATH) < 0) {
zos_lib_1.FileSystem.append(GIT_IGNORE, `\n${SESSION_PATH}\n`);
}
},
_parseSession() {
const session = zos_lib_1.FileSystem.parseJsonIfExists(SESSION_PATH);
if (lodash_isempty_1.default(session))
return undefined;
const parsedSession = lodash_pick_1.default(session, 'network', 'timeout', 'from', 'expires');
return this._setDefaults(parsedSession);
},
_setDefaults(session) {
if (!session.timeout)
session.timeout = DEFAULT_TX_TIMEOUT;
return session;
},
_hasExpired(session) {
return !!session && new Date(session.expires) <= new Date();
},
};
function describe(session) {
return (lodash_compact_1.default([
session.network && `network ${session.network}`,
session.from && `sender address ${session.from}`,
session.timeout && `timeout ${session.timeout} seconds`,
]).join(', ') || 'no options');
}
exports.default = Session;
//# sourceMappingURL=Session.js.map