code: async function executeApp(investorAddress, investorPrivKey, symbol, currency, amount) {
  
      common.logAsciiBull();
      console.log("********************************************");
      console.log("Welcome to the Command-Line Investor Portal.");
      console.log("********************************************\n");
      console.log("Issuer Account: " + Issuer.address + "\n");
  
      await setup();
      if (typeof investorAddress === 'undefined') {
          investorAddress = readlineSync.question(chalk.yellow(`\nEnter your public address to log in as an investor. Otherwise, press 'Enter' to log in as the token issuer: `));
          if (typeof investorPrivKey === 'undefined' && investorAddress != "") {
              investorPrivKey = readlineSync.question(chalk.yellow(`\nEnter your private key to unlock your account: `));
          }
      }
      if (investorAddress != "") {
          User = { address: investorAddress, privateKey: investorPrivKey };
      } else {
          User = Issuer;
      }
  
      try {
          await inputSymbol(symbol);
          switch (selectedSTO) {
              case 'CappedSTO':
                  let cappedSTOABI = abis.cappedSTO();
                  currentSTO = new web3.eth.Contract(cappedSTOABI, STOAddress);
                  await showUserInfo(User.address);
                  await showCappedSTOInfo();
                  await investCappedSTO(currency, amount);
                  break;
              case 'USDTieredSTO':
                  let usdTieredSTOABI = abis.usdTieredSTO();
                  currentSTO = new web3.eth.Contract(usdTieredSTOABI, STOAddress);
                  await showUserInfo(User.address);
                  await showUserInfoForUSDTieredSTO();
                  await showUSDTieredSTOInfo();
                  await investUsdTieredSTO(currency, amount)
                  break;
          }
      } catch (err) {
          console.error(err);
      }
  }
docs: Start Script