@ton-actions/tondev-contest
Version:
TON Dev Environment
155 lines • 5.97 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SignerRegistry = exports.MnemonicDictionary = void 0;
const path_1 = __importDefault(require("path"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const core_1 = require("../../core");
const core_2 = require("@tonclient/core");
function signerHome() {
return path_1.default.resolve(core_1.tondevHome(), "signer");
}
function registryPath() {
return path_1.default.resolve(signerHome(), "registry.json");
}
var MnemonicDictionary;
(function (MnemonicDictionary) {
MnemonicDictionary[MnemonicDictionary["ton"] = 0] = "ton";
MnemonicDictionary[MnemonicDictionary["english"] = 1] = "english";
MnemonicDictionary[MnemonicDictionary["chineseSimplified"] = 2] = "chineseSimplified";
MnemonicDictionary[MnemonicDictionary["chineseTraditional"] = 3] = "chineseTraditional";
MnemonicDictionary[MnemonicDictionary["french"] = 4] = "french";
MnemonicDictionary[MnemonicDictionary["italian"] = 5] = "italian";
MnemonicDictionary[MnemonicDictionary["japanese"] = 6] = "japanese";
MnemonicDictionary[MnemonicDictionary["korean"] = 7] = "korean";
MnemonicDictionary[MnemonicDictionary["spanish"] = 8] = "spanish";
})(MnemonicDictionary = exports.MnemonicDictionary || (exports.MnemonicDictionary = {}));
class SignerRegistry {
constructor() {
var _a;
this.items = [];
if (fs_extra_1.default.pathExistsSync(registryPath())) {
try {
const loaded = JSON.parse(fs_extra_1.default.readFileSync(registryPath(), "utf8"));
this.items = (_a = loaded.items) !== null && _a !== void 0 ? _a : [];
this.default = loaded.default;
}
catch {
}
}
}
save() {
if (!fs_extra_1.default.pathExistsSync(signerHome())) {
fs_extra_1.default.mkdirSync(signerHome(), { recursive: true });
}
fs_extra_1.default.writeFileSync(registryPath(), JSON.stringify({
items: this.items,
default: this.default,
}));
}
add(item, overwrite) {
const existingIndex = this.items.findIndex(x => x.name.toLowerCase() === item.name.toLowerCase());
if (existingIndex >= 0 && !overwrite) {
throw new Error(`Signer with name "${item.name}" already exists.`);
}
if (existingIndex >= 0) {
this.items[existingIndex] = item;
}
else {
this.items.push(item);
}
if (!this.default) {
this.default = item.name;
}
this.save();
}
async addSecretKey(name, description, secret, overwrite) {
const keys = {
public: (await core_2.TonClient.default.crypto.nacl_sign_keypair_from_secret_key({ secret })).public,
secret,
};
this.add({
name,
description,
keys,
}, overwrite);
}
async addMnemonicKey(name, description, phrase, dictionary, overwrite) {
const secret = (await core_2.TonClient.default.crypto.mnemonic_derive_sign_keys({
phrase,
dictionary,
})).secret;
const keys = {
public: (await core_2.TonClient.default.crypto.nacl_sign_keypair_from_secret_key({ secret })).public,
secret,
};
this.add({
name,
description,
keys,
}, overwrite);
}
find(name) {
var _a;
let findName = name.toLowerCase().trim();
if (findName === "") {
findName = (_a = this.default) !== null && _a !== void 0 ? _a : "";
}
return this.items.find(x => x.name.toLowerCase() === findName);
}
get(name) {
var _a;
let findName = name.trim();
if (findName === "") {
findName = (_a = this.default) !== null && _a !== void 0 ? _a : "";
}
if (findName === "") {
if (this.items.length === 0) {
throw new Error("There are no signers defined. " +
"Use \"tondev signer add\" command to register a signer.");
}
else {
throw new Error("There is no default signer. " +
"Use \"tondev signer default\" command to set the default signer. " +
"Or explicitly specify the signer with \"--signer\" option.");
}
}
const signer = this.items.find(x => x.name.toLowerCase() === findName.toLowerCase());
if (signer) {
return signer;
}
throw new Error(`Signer not found: ${name}`);
}
delete(name) {
const signer = this.get(name);
this.items.splice(this.items.findIndex(x => x.name === signer.name), 1);
if (this.default === signer.name) {
this.default = undefined;
}
this.save();
}
setDefault(name) {
this.default = this.get(name).name;
this.save();
}
getSignerSummary(signer, networks) {
const used = [];
networks.items.forEach(network => {
if (network.giver) {
if (network.giver.signer === signer.name) {
used.push(`${network.name} network giver signer`);
}
}
});
return {
name: `${signer.name}${signer.name === this.default ? " (Default)" : ""}`,
public: signer.keys.public,
description: signer.description,
used: used.join("\n"),
};
}
}
exports.SignerRegistry = SignerRegistry;
//# sourceMappingURL=registry.js.map