UNPKG

generator-cap

Version:

CAP (Connected Apps Platform) is an open-source suite of technologies for rapidly creating web and mobile applications that synchronize data with Salesforce and other systems.

257 lines (229 loc) 7.87 kB
const herokuService = require('./heroku-administrator'); const command = require('./exec-functions'); const loadMessages = require('./load-messages'); const { v4: uuidv4 } = require('uuid'); let herokuConfiguration = {}; exports.verifyInstallation = async (email, password) => { try { await herokuService.run(command.herokuVersion, loadMessages.herokuV); await herokuService.run(command.herokuConnectVerification, loadMessages.herokuC); await herokuService.run(command.checkUser, loadMessages.checkUser); } catch (error) { // let credentials = { email: email, password: password }; switch (error.code) { case 2: try { // await herokuService.run(command.login, loadMessages.login, credentials); await herokuService.run(command.loginPop, loadMessages.loginPop); } catch (error) { await herokuService.run(command.loginPop, loadMessages.loginPop); // if (error.code === 2) { // await herokuService.run(command.loginPop, loadMessages.loginPop); // } else { // await herokuService.run(command.loginPop, loadMessages.loginPop); // } } break; case 100: try { // await herokuService.run(command.login, loadMessages.login, credentials); await herokuService.run(command.loginPop, loadMessages.loginPop); } catch (error) { await herokuService.run(command.loginPop, loadMessages.loginPop); } break; case 127: try { await herokuService.run( command.herokuInstallation, loadMessages.herokuCLIInstallation ); await herokuService.run( command.herokuConnectInstallation, loadMessages.herokuConnectIns ); await herokuService.run(command.loginPop, loadMessages.loginPop); // await herokuService.run(command.login, loadMessages.login, credentials); } catch (error) { await herokuService.run(command.loginPop, loadMessages.loginPop); } break; // Code 400 case 400: try { await herokuService.run( command.herokuConnectInstallation, loadMessages.herokuConnectIns ); await herokuService.run(command.loginPop, loadMessages.loginPop); // await herokuService.run(command.login, loadMessages.login, credentials); } catch (error) { await herokuService.run(command.loginPop, loadMessages.loginPop); } break; default: try { await herokuService.run( command.herokuInstallation, loadMessages.herokuCLIInstallation ); await herokuService.run( command.herokuConnectInstallation, loadMessages.herokuConnectIns ); await herokuService.run(command.loginPop, loadMessages.loginPop); // await herokuService.run(command.login, loadMessages.login, credentials); } catch (error) { await herokuService.run(command.loginPop, loadMessages.loginPop); } break; } } }; const appsCreation = async appName => { try { let auxUUID = uuidv4(); let lengthUUID = 29 - appName.length; // Let timestamp = Math.floor(Date.now() / 1000); let newUUID = auxUUID.slice(0, lengthUUID); if (newUUID.charAt(newUUID.length - 1) === '-') newUUID = newUUID.slice(0, newUUID.length - 1); appName = `${appName}-${newUUID}`; appName = appName.trim(); let urls = await herokuService.run( command.herokuCreateApp, loadMessages.herokuCreateApp, appName ); let herokUrls = urls.stdout.split('|'); herokuConfiguration.herokuURL = herokUrls[0]; herokuConfiguration.herokuGit = herokUrls[1]; await herokuService.run( command.hrkCreatePostgreSql, loadMessages.herokuCreatePostgres, appName ); return appName; } catch (error) { let situation = { message: error.messages, code: error.code, desc: error.description }; return situation; } }; const startConfigurationApp = async (name, path) => { try { let credentials = await herokuService.run( command.herokuCredentials, loadMessages.herokuCredentials, name ); let startPosition = credentials.stdout.search('postgres'); // // DBURL it's going to save the url that it's going to be saved in Loopback const DBURL = credentials.stdout.slice(startPosition, credentials.stdout.length - 1); herokuConfiguration.postgresURL = DBURL; let dbstatus = await herokuService.run( command.herokuConnectCreation, loadMessages.herokuConnectCreation, name ); let commandSetupConnect = dbstatus.stdout.split('`')[1]; await herokuService.run( command.setUpConnect, loadMessages.herokuConnectSetup, commandSetupConnect ); // Let infoConnection = await herokuService.run(command.authConnection, loadMessages.authConnection, name) // let startPositionC = infoConnection.stdout.search('ID') + 13 // let endPositionC = infoConnection.stdout.search('Description') - 1 // var connection_id = infoConnection.stdout.slice(startPositionC, endPositionC); let token = await herokuService.run( command.tokenApplication, loadMessages.tokenApplication ); let config = { name: name, token: token.stdout }; await herokuService.run(command.curlPost, loadMessages.curlPost, config); await herokuService.run( command.schemaConnection, loadMessages.schemaConnection, name ); await herokuService.run(command.salesforceAuth, loadMessages.salesforceAuth, name); let map = { path: path, name: name }; // await herokuService.run( // command.schemaConnection, // loadMessages.schemaConnection, // name // ); await herokuService.run(command.mapping, loadMessages.mapping, map); } catch (error) { console.log('error: ', error); try { if (error.code === 1) { if (name) { let token = await herokuService.run( command.tokenApplication, loadMessages.tokenApplication ); let config = { name: name, token: token.stdout }; await herokuService.run(command.curlPost, loadMessages.curlPost, config); await herokuService.run( command.schemaConnection, loadMessages.schemaConnection, name ); await herokuService.run( command.salesforceAuth, loadMessages.salesforceAuth, name ); let map = { path: path, name: name }; await herokuService.run(command.mapping, loadMessages.mapping, map); } } } catch (error) { console.log('error: ', error); } } }; exports.herokuCLI = async (appName, path, email, password) => { try { await this.verifyInstallation(email, password); let newName = await appsCreation(appName); herokuConfiguration.appName = newName; if (newName.code === 1) { throw new Error({ ...newName }); } else { // eslint-disable-next-line no-unused-expressions newName ? await startConfigurationApp(newName, path) : await startConfigurationApp(appName, path); return herokuConfiguration; } // } } catch (error) { if (error.description === 'Heroku Connect is not installed') { await herokuService.run( command.herokuConnectInstallation, loadMessages.herokuConnectIns ); } if (error.code === 100) { await herokuService.run(command.login, loadMessages.login); } } };