@holographxyz/cli
Version:
Holograph operator CLI
313 lines (312 loc) • 12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.checkTransactionHashFlag = exports.checkTokenUriTypeFlag = exports.checkTokenIdFlag = exports.checkStringFlag = exports.checkOptionFlag = exports.checkNumberFlag = exports.checkNetworkFlag = exports.checkDeploymentTypeFlag = exports.checkContractAddressFlag = exports.checkBytecodeTypeFlag = exports.checkBytecodeFlag = exports.validateTransactionHash = exports.validateTokenIdInput = exports.validateNonEmptyString = exports.validateNonEmptyNumber = exports.validateNetwork = exports.validateContractAddress = exports.validateBytes = exports.portValidator = exports.transactionHashValidator = exports.tokenValidator = exports.numberValidator = exports.nonEmptyStringValidator = exports.bytesValidator = exports.addressValidator = void 0;
const tslib_1 = require("tslib");
const inquirer = tslib_1.__importStar(require("inquirer"));
const bignumber_1 = require("@ethersproject/bignumber");
const networks_1 = require("@holographxyz/networks");
const bytecodes_1 = require("./bytecodes");
const contract_deployment_1 = require("./contract-deployment");
const asset_deployment_1 = require("./asset-deployment");
const utils_1 = require("./utils");
exports.addressValidator = /^0x[\da-f]{40}$/i;
exports.bytesValidator = /^0x[\da-f]+$/i;
exports.nonEmptyStringValidator = /^[\S ]+$/i;
exports.numberValidator = /^\d{1,78}$/;
exports.tokenValidator = /^((0x[\da-f]{1,64})|(\d{1,78}))$/i;
exports.transactionHashValidator = /^0x[\da-f]{64}$/i;
const portValidator = (port) => port >= 3000 && port <= 65535;
exports.portValidator = portValidator;
const validateBytes = async (input) => {
const output = input.trim().toLowerCase();
if (exports.bytesValidator.test(output)) {
return output;
}
throw new Error('Invalid bytes provided ' + output);
};
exports.validateBytes = validateBytes;
const validateContractAddress = async (input) => {
const output = input.trim().toLowerCase();
if (exports.addressValidator.test(output)) {
return output;
}
throw new Error('Invalid contact address provided ' + output);
};
exports.validateContractAddress = validateContractAddress;
const validateNetwork = async (input) => {
const output = input.trim();
if (networks_1.supportedNetworks.includes(output)) {
return output;
}
if (networks_1.supportedShortNetworks.includes(output)) {
return (0, networks_1.getNetworkByShortKey)(output).key;
}
throw new Error('Invalid/unsupported network provided ' + output);
};
exports.validateNetwork = validateNetwork;
const validateNonEmptyNumber = async (input) => {
const output = input.trim();
if (exports.numberValidator.test(output)) {
return output;
}
throw new Error('Invalid number provided ' + output);
};
exports.validateNonEmptyNumber = validateNonEmptyNumber;
const validateNonEmptyString = async (input) => {
const output = input.trim();
if (exports.nonEmptyStringValidator.test(output)) {
return output;
}
throw new Error('Invalid bytes provided ' + output);
};
exports.validateNonEmptyString = validateNonEmptyString;
const validateTokenIdInput = async (input) => {
const output = input.trim().toLowerCase();
if (exports.tokenValidator.test(output)) {
if (exports.numberValidator.test(output)) {
return '0x' + (0, utils_1.remove0x)(bignumber_1.BigNumber.from(output).toHexString()).padStart(64, '0');
}
return output;
}
throw new Error('Invalid tokenId provided ' + output);
};
exports.validateTokenIdInput = validateTokenIdInput;
const validateTransactionHash = async (input) => {
const output = input.trim().toLowerCase();
if (exports.transactionHashValidator.test(output)) {
return output;
}
throw new Error('Invalid transaction hash provided ' + output);
};
exports.validateTransactionHash = validateTransactionHash;
const checkBytecodeFlag = async (input, prompt) => {
if (input === undefined) {
const bytecodePrompt = await inquirer.prompt([
{
name: 'bytecode',
message: prompt,
type: 'string',
validate: async (input) => {
await (0, exports.validateBytes)(input);
return true;
},
},
]);
return (0, exports.validateBytes)(bytecodePrompt.bytecode);
}
return input;
};
exports.checkBytecodeFlag = checkBytecodeFlag;
const checkBytecodeTypeFlag = async (input, prompt, exclude) => {
if (input !== undefined) {
input = input.trim();
}
let bytecodeTypeList = Object.values(bytecodes_1.BytecodeType);
if (exclude !== undefined) {
bytecodeTypeList = bytecodeTypeList.filter((element) => {
return !(element === exclude);
});
}
if (input === undefined || (input !== undefined && !bytecodeTypeList.includes(input))) {
const bytecodeTypePrompt = await inquirer.prompt([
{
name: 'bytecodeType',
message: prompt,
type: 'list',
choices: bytecodeTypeList,
},
]);
return bytecodes_1.BytecodeType[bytecodeTypePrompt.bytecodeType];
}
return bytecodes_1.BytecodeType[input];
};
exports.checkBytecodeTypeFlag = checkBytecodeTypeFlag;
const checkContractAddressFlag = async (input, prompt) => {
if (input === undefined) {
const contractAddressPrompt = await inquirer.prompt([
{
name: 'contractAddress',
message: prompt,
type: 'string',
validate: async (input) => {
await (0, exports.validateContractAddress)(input);
return true;
},
},
]);
return (0, exports.validateContractAddress)(contractAddressPrompt.contractAddress);
}
return input;
};
exports.checkContractAddressFlag = checkContractAddressFlag;
const checkDeploymentTypeFlag = async (input, prompt, exclude) => {
if (input !== undefined) {
input = input.trim();
}
let deploymentTypeList = Object.values(contract_deployment_1.DeploymentType);
if (exclude !== undefined) {
deploymentTypeList = deploymentTypeList.filter((element) => {
return !(element === exclude);
});
}
if (input === undefined || (input !== undefined && !deploymentTypeList.includes(input))) {
const deploymentTypePrompt = await inquirer.prompt([
{
name: 'deploymentType',
message: prompt,
type: 'list',
choices: contract_deployment_1.deploymentProcesses,
},
]);
return contract_deployment_1.DeploymentType[deploymentTypePrompt.deploymentType];
}
return contract_deployment_1.DeploymentType[input];
};
exports.checkDeploymentTypeFlag = checkDeploymentTypeFlag;
const checkNetworkFlag = async (networks, input, prompt, exclude) => {
if (input !== undefined) {
input = input.trim().toLowerCase();
}
let networkList = Object.keys(networks);
if (exclude !== undefined) {
networkList = networkList.filter((element) => {
return !(element === exclude);
});
}
if (input === undefined || (input !== undefined && !networkList.includes(input))) {
const networkPrompt = await inquirer.prompt([
{
name: 'network',
message: prompt,
type: 'list',
choices: networkList,
},
]);
return networkPrompt.network;
}
return input;
};
exports.checkNetworkFlag = checkNetworkFlag;
const checkNumberFlag = async (input, prompt) => {
if (input === undefined) {
const numberPrompt = await inquirer.prompt([
{
name: 'numberString',
message: prompt,
type: 'string',
validate: async (input) => {
await (0, exports.validateNonEmptyNumber)(input);
return true;
},
},
]);
return Number.parseInt(await (0, exports.validateNonEmptyNumber)(numberPrompt.numberString), 10);
}
return Number.parseInt(input, 10);
};
exports.checkNumberFlag = checkNumberFlag;
const checkOptionFlag = async (options, input, prompt, exclude) => {
if (input !== undefined) {
input = input.trim();
}
let list = [...options];
if (exclude !== undefined) {
list = list.filter((element) => {
if (typeof element === 'string') {
return !(element === exclude);
}
return !(element.name === exclude || element.value === exclude);
});
}
if (input === undefined || (input !== undefined && !list.includes(input))) {
const optionPrompt = await inquirer.prompt([
{
name: 'option',
message: prompt,
type: 'list',
choices: list,
},
]);
return optionPrompt.option;
}
return input;
};
exports.checkOptionFlag = checkOptionFlag;
const checkStringFlag = async (input, prompt) => {
if (input === undefined) {
const stringPrompt = await inquirer.prompt([
{
name: 'inputString',
message: prompt,
type: 'string',
validate: async (input) => {
await (0, exports.validateNonEmptyString)(input);
return true;
},
},
]);
return (0, exports.validateNonEmptyString)(stringPrompt.inputString);
}
return input;
};
exports.checkStringFlag = checkStringFlag;
const checkTokenIdFlag = async (input, prompt) => {
if (input === undefined) {
const tokenIdPrompt = await inquirer.prompt([
{
name: 'tokenId',
message: prompt,
type: 'string',
validate: async (input) => {
await (0, exports.validateTokenIdInput)(input);
return true;
},
},
]);
return (0, exports.validateTokenIdInput)(tokenIdPrompt.tokenId);
}
return input;
};
exports.checkTokenIdFlag = checkTokenIdFlag;
const checkTokenUriTypeFlag = async (input, prompt, exclude) => {
if (input !== undefined) {
input = input.trim();
}
let tokenUriTypeList = Object.values(asset_deployment_1.TokenUriType);
if (exclude !== undefined) {
tokenUriTypeList = tokenUriTypeList.filter((element) => {
return !(element === exclude);
});
}
if (input === undefined || (input !== undefined && !tokenUriTypeList.includes(input))) {
const tokenUriTypePrompt = await inquirer.prompt([
{
name: 'tokenUriType',
message: prompt,
type: 'list',
choices: tokenUriTypeList,
},
]);
return asset_deployment_1.TokenUriType[tokenUriTypePrompt.tokenUriType];
}
return asset_deployment_1.TokenUriType[input];
};
exports.checkTokenUriTypeFlag = checkTokenUriTypeFlag;
const checkTransactionHashFlag = async (input, prompt) => {
if (input === undefined) {
const transactionHashPrompt = await inquirer.prompt([
{
name: 'transactionHash',
message: prompt,
type: 'string',
validate: async (input) => {
await (0, exports.validateTransactionHash)(input);
return true;
},
},
]);
return (0, exports.validateTransactionHash)(transactionHashPrompt.transactionHash);
}
return input;
};
exports.checkTransactionHashFlag = checkTransactionHashFlag;