vasku
Version:
TVM-Solidity contract development framework
80 lines (79 loc) • 3.04 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.namedKeys = exports.generateOrReadKeys = exports.readKeys = void 0;
const fs_extra_1 = __importDefault(require("fs-extra"));
const path_1 = __importDefault(require("path"));
const global_1 = require("../global");
const constants_1 = require("../contract/constants");
const generateRandomKeyPair_1 = require("../utils/generateRandomKeyPair");
/**
* Read key pair from JSON file
* @param file Absolute path to file
* @example
* readKeys('/home/user/keys/GiverV2.keys.json')
* @return
* {
* public: '61d08f0f1aa152095b6b2e19f31bf09d84a5ae6037be9247d0e54a3926d46593',
* secret: '2c7645b1201c0dd84dd38c3fe0e3a70e7de0d4ef77333f33a916280d9994205c'
* }
*/
function readKeys(file) {
try {
return JSON.parse(fs_extra_1.default.readFileSync(file, { encoding: 'utf8' }));
}
catch (e) {
const exceptionMessage = e.toString();
throw new Error(`Can't read key pair from "${file}"\n${exceptionMessage}`);
}
}
exports.readKeys = readKeys;
/**
* Generate random key pair if key file does not exist
* If file exists calls readKeys()
* @param file Absolute path to file
* @param client SDK client
* @example
* createOrReadKeys('/home/user/keys/GiverV2.keys.json')
* @return
* {
* public: '61d08f0f1aa152095b6b2e19f31bf09d84a5ae6037be9247d0e54a3926d46593',
* secret: '2c7645b1201c0dd84dd38c3fe0e3a70e7de0d4ef77333f33a916280d9994205c'
* }
*/
async function generateOrReadKeys(file, client) {
const cl = client ?? global_1.Global.client;
if (cl === undefined)
throw constants_1.error.noClient;
if (fs_extra_1.default.existsSync(file))
return readKeys(file);
const keys = await (0, generateRandomKeyPair_1.generateRandomKeyPair)(cl);
const directory = path_1.default.dirname(file);
fs_extra_1.default.mkdirSync(directory, { recursive: true });
fs_extra_1.default.writeFileSync(file, JSON.stringify(keys, null, 2));
return keys;
}
exports.generateOrReadKeys = generateOrReadKeys;
/**
* Generate JSON file with random key pair in keys directory if key file does not exist
* @param name File name without extension e.g. `wallet`
* @param directory Keys relative path e.g. `./keys`
* @param client SDK client
* @example
* namedKeys('root')
* @return
* {
* public: '61d08f0f1aa152095b6b2e19f31bf09d84a5ae6037be9247d0e54a3926d46593',
* secret: '2c7645b1201c0dd84dd38c3fe0e3a70e7de0d4ef77333f33a916280d9994205c'
* }
*/
async function namedKeys(name, directory, client) {
const dir = directory ?? global_1.Global.config?.paths.keys;
if (dir === undefined)
throw new Error('Keys directory is undefined');
const file = path_1.default.resolve(process.cwd(), dir, `${name}.json`);
return await generateOrReadKeys(file, client);
}
exports.namedKeys = namedKeys;