UNPKG

liveperson-functions-cli

Version:
139 lines 6.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CreateController = void 0; // tslint:disable:no-shadowed-variable const create_view_1 = require("../view/create.view"); const defaultStructure_service_1 = require("../service/defaultStructure.service"); const login_controller_1 = require("./login.controller"); const faasFactory_service_1 = require("../service/faasFactory.service"); class CreateController { constructor( /* istanbul ignore next */ { createView = new create_view_1.CreateView(), defaultStructureService = new defaultStructure_service_1.DefaultStructureService(), loginController = new login_controller_1.LoginController(), } = {}) { this.createView = createView; this.defaultStructureService = defaultStructureService; this.loginController = loginController; } /** * * @param {IFunctionCreateOptions} - Passed function name and flags * @returns {Promise<void>} - create view * @memberof CreateController */ async createFunction(functionParameters = {}) { try { const missingParameters = await this.checkAndAskForMissingFunctionParameters(functionParameters); const functionConfig = { ...functionParameters, ...missingParameters, }; this.defaultStructureService.createFunction(functionConfig); this.createView.showFunctionIsCreated(functionConfig); } catch (error) { const prettyError = { message: error.message || error.errorMsg, suggestions: ['Use "lpf create:function --help" for more information.'], ref: 'https://github.com/LivePersonInc/faas-cli#create', }; this.createView.showErrorMessage(prettyError); throw new Error('exit'); } } async checkAndAskForMissingFunctionParameters(incompleteFunctionParameters = {}) { const { name, description, event } = incompleteFunctionParameters; let selectedFunctionParameters = {}; if (!name) { selectedFunctionParameters = { ...selectedFunctionParameters, ...(await this.createView.askForFunctionName()), }; } if (!description) { selectedFunctionParameters = { ...selectedFunctionParameters, ...(await this.createView.askForFunctionDescription()), }; } if (!event) { let selectedEventId; if (await this.isUserLoggedIn()) { const faasService = await faasFactory_service_1.factory.get(); const events = await faasService.getEvents(); selectedEventId = await this.createView.askForEventID([ 'No Event', ...events.map((e) => e.eventId), ]); } else { selectedEventId = await this.createView.askForEventID(); } selectedFunctionParameters = { ...selectedFunctionParameters, ...selectedEventId, }; } return selectedFunctionParameters; } /** * Creates a schedule. Requires login * @param {any} - Passed function name and flags * @returns {Promise<void>} - create view * @memberof CreateController */ async createSchedule(scheduleParameters = {}) { try { const missingParameters = await this.checkAndAskForMissingScheduleParameters(scheduleParameters); const scheduleConfig = { ...missingParameters, isActive: true, }; const faasService = await faasFactory_service_1.factory.get(); const res = await faasService.createSchedule(scheduleConfig); this.createView.showScheduleIsCreated(res.nextExecution); } catch (error) { const prettyError = { message: error.message || error.errorMsg, suggestions: ['Use "lpf create:schedule --help" for more information.'], ref: 'https://github.com/LivePersonInc/faas-cli#create', }; this.createView.showErrorMessage(prettyError); throw new Error('exit'); } } async checkAndAskForMissingScheduleParameters({ functionName = '', cronExpression = '', }) { var _a, _b; const scheduleConfig = {}; // Make sure user is logged in if (!(await this.isUserLoggedIn())) { this.createView.showMessage('You need to log into an account to create schedules'); await this.loginController.getLoginInformation(); } const faasService = await faasFactory_service_1.factory.get(); const deployedLambdas = (await faasService.getAllLambdas()).filter(({ state }) => ['Productive', 'Modified'].includes(state)); scheduleConfig.lambdaUUID = (_a = deployedLambdas.find(({ name }) => functionName === name)) === null || _a === void 0 ? void 0 : _a.uuid; if (!scheduleConfig.lambdaUUID) { if (functionName) { this.createView.showErrorMessage(`${functionName} was not found as a deployed lambda on the account.`); } const selectedLambda = await this.createView.askForDeployedLambda(deployedLambdas); // reported falsely as missing to codecov /* istanbul ignore next */ const lambdaUUID = (_b = deployedLambdas.find(({ name }) => selectedLambda.name === name)) === null || _b === void 0 ? void 0 : _b.uuid; scheduleConfig.lambdaUUID = lambdaUUID; } if (cronExpression) { scheduleConfig.cronExpression = cronExpression; } else { const answer = await this.createView.askForCronExpression(); scheduleConfig.cronExpression = answer.cronExpression || ''; } return { ...scheduleConfig, isActive: true }; } async isUserLoggedIn() { return this.loginController.isUserLoggedIn(); } } exports.CreateController = CreateController; //# sourceMappingURL=create.controller.js.map