UNPKG

@flxbl-io/sfp

Version:

sfp is a CLI tool to help you manage your Salesforce projects in an artifact centric model

135 lines 12 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("@salesforce/core"); const PasswordGenerator_1 = __importDefault(require("./PasswordGenerator")); const sfp_logger_1 = __importStar(require("@flxbl-io/sfp-logger")); const kit_1 = require("@salesforce/kit"); const sfp_logger_2 = require("@flxbl-io/sfp-logger"); const GetFormattedTime_1 = __importDefault(require("../utils/GetFormattedTime")); const SFPStatsSender_1 = __importDefault(require("../stats/SFPStatsSender")); const retry = require('async-retry'); class ScratchOrgOperator { constructor(hubOrg) { this.hubOrg = hubOrg; } async create(alias, config_file_path, expiry, waitTime = 6, poolConfig) { sfp_logger_1.default.log('Parameters: ' + alias + ' ' + config_file_path + ' ' + expiry + ' ', sfp_logger_1.LoggerLevel.TRACE); let startTime = Date.now(); sfp_logger_1.default.log(`Requesting Scratch Org ${alias}..`, sfp_logger_1.LoggerLevel.INFO); let scatchOrgResult = await this.requestAScratchOrg(alias, config_file_path, kit_1.Duration.days(expiry), kit_1.Duration.minutes(waitTime), poolConfig); sfp_logger_1.default.log(JSON.stringify(scatchOrgResult), sfp_logger_1.LoggerLevel.TRACE); //create scratchOrg object let scratchOrg = { alias: alias, orgId: scatchOrgResult.orgId, username: scatchOrgResult.username, loginURL: scatchOrgResult.loginURL, elapsedTime: Date.now() - startTime, }; try { //Get Sfdx Auth URL const authInfo = await core_1.AuthInfo.create({ username: scratchOrg.username }); scratchOrg.sfdxAuthUrl = authInfo.getSfdxAuthUrl(); } catch (error) { throw new Error(`Unable to set auth URL, Ignoring this scratch org, as its not suitable for pool due to ${error.message}`); } //Generate Password let passwordData = await new PasswordGenerator_1.default().exec(scratchOrg.username); scratchOrg.password = passwordData.password; if (!passwordData.password) { throw new Error('Unable to setup password to scratch org'); } else { sfp_logger_1.default.log(`Password successfully set for ${scratchOrg.alias}`, sfp_logger_1.LoggerLevel.DEBUG); } sfp_logger_1.default.log(`Creation request for Scratch Org ${scratchOrg.alias} is completed successfully in ${(0, sfp_logger_2.COLOR_KEY_MESSAGE)((0, GetFormattedTime_1.default)(scratchOrg.elapsedTime))}`, sfp_logger_1.LoggerLevel.INFO); SFPStatsSender_1.default.logElapsedTime(`scratchorg.creation.time`, scratchOrg.elapsedTime); return scratchOrg; } async delete(scratchOrgIds) { let hubConn = this.hubOrg.getConnection(); await retry(async (bail) => { let result = await hubConn.del('ActiveScratchOrg', scratchOrgIds); }, { retries: 3, minTimeout: 3000 }); } async requestAScratchOrg(alias, definitionFile, expireIn, waitTime, poolConfig) { const createCommandOptions = { durationDays: expireIn.days, nonamespace: false, noancestors: poolConfig.noAnchestors || false, wait: waitTime, retry: 3, definitionfile: definitionFile, }; const { username, scratchOrgInfo, authFields, warnings } = await this.hubOrg.scratchOrgCreate(createCommandOptions); await this.setAliasForUsername(username, alias); return { username: username, loginURL: scratchOrgInfo.LoginUrl, warnings, orgId: authFields.orgId, }; } async shareScratchOrgThroughEmail(emailId, scratchOrg) { let hubOrgUserName = this.hubOrg.getUsername(); let apiVersion = this.hubOrg.getConnection().retrieveMaxApiVersion(); let body = `${hubOrgUserName} has fetched a new scratch org from the Scratch Org Pool!\n All the post scratch org scripts have been succesfully completed in this org!\n The Login url for this org is : ${scratchOrg.loginURL}\n Username: ${scratchOrg.username}\n Password: ${scratchOrg.password}\n Please use sfdx force:auth:web:login -r ${scratchOrg.loginURL} -a <alias> command to authenticate against this Scratch org</p> Thank you for using SFPLogger!`; const options = { method: 'POST', body: JSON.stringify({ inputs: [ { emailBody: body, emailAddresses: emailId, emailSubject: `${hubOrgUserName} created you a new Salesforce org`, senderType: 'CurrentUser', }, ], }), url: `/services/data/v${apiVersion}actions/standard/emailSimple`, }; await retry(async (bail) => { await this.hubOrg.getConnection().requestPost(options.url, options.body); }, { retries: 3, minTimeout: 30000 }); sfp_logger_1.default.log(`Succesfully send email to ${emailId} for ${scratchOrg.username}`, sfp_logger_1.LoggerLevel.INFO); } async setAliasForUsername(username, aliasToSet) { const stateAggregator = await core_1.StateAggregator.getInstance(); stateAggregator.aliases.setAndSave(aliasToSet, { username: username }); } } exports.default = ScratchOrgOperator; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NyYXRjaE9yZ09wZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvc2NyYXRjaG9yZy9TY3JhdGNoT3JnT3BlcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUFrRTtBQUVsRSw0RUFBb0Q7QUFDcEQsbUVBQThEO0FBQzlELHlDQUEyQztBQUUzQyxxREFBeUQ7QUFDekQsaUZBQXlEO0FBQ3pELDZFQUFxRDtBQUVyRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7QUFFckMsTUFBcUIsa0JBQWtCO0lBQ25DLFlBQW9CLE1BQVc7UUFBWCxXQUFNLEdBQU4sTUFBTSxDQUFLO0lBQUcsQ0FBQztJQUU1QixLQUFLLENBQUMsTUFBTSxDQUNmLEtBQWEsRUFDYixnQkFBd0IsRUFDeEIsTUFBYyxFQUNkLFdBQW1CLENBQUMsRUFDcEIsVUFBK0I7UUFFL0Isb0JBQVMsQ0FBQyxHQUFHLENBQUMsY0FBYyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsZ0JBQWdCLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHLEVBQUUsd0JBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2RyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0Isb0JBQVMsQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEtBQUssSUFBSSxFQUFFLHdCQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckUsSUFBSSxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQy9DLEtBQUssRUFDTCxnQkFBZ0IsRUFDaEIsY0FBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFDckIsY0FBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFDMUIsVUFBVSxDQUNiLENBQUM7UUFDRixvQkFBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxFQUFFLHdCQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEUsMEJBQTBCO1FBQzFCLElBQUksVUFBVSxHQUFlO1lBQ3pCLEtBQUssRUFBRSxLQUFLO1lBQ1osS0FBSyxFQUFFLGVBQWUsQ0FBQyxLQUFLO1lBQzVCLFFBQVEsRUFBRSxlQUFlLENBQUMsUUFBUTtZQUNsQyxRQUFRLEVBQUUsZUFBZSxDQUFDLFFBQVE7WUFDbEMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTO1NBQ3RDLENBQUM7UUFFRixJQUFJLENBQUM7WUFDRCxtQkFBbUI7WUFDbkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxlQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLFVBQVUsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FDWCwwRkFBMEYsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUM1RyxDQUFDO1FBQ04sQ0FBQztRQUVELG1CQUFtQjtRQUNuQixJQUFJLFlBQVksR0FBRyxNQUFNLElBQUksMkJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTNFLFVBQVUsQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUU1QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUMvRCxDQUFDO2FBQU0sQ0FBQztZQUNKLG9CQUFTLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsd0JBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRixDQUFDO1FBRUQsb0JBQVMsQ0FBQyxHQUFHLENBQ1Qsb0NBQW9DLFVBQVUsQ0FBQyxLQUFLLGlDQUFpQyxJQUFBLDhCQUFpQixFQUNsRyxJQUFBLDBCQUFnQixFQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FDM0MsRUFBRSxFQUNILHdCQUFXLENBQUMsSUFBSSxDQUNuQixDQUFDO1FBQ0Ysd0JBQWMsQ0FBQyxjQUFjLENBQUMsMEJBQTBCLEVBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ2hGLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQXVCO1FBQ3ZDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFMUMsTUFBTSxLQUFLLENBQ1AsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ1gsSUFBSSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsRUFDRCxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUNuQyxDQUFDO0lBQ04sQ0FBQztJQUVPLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFhLEVBQUUsY0FBc0IsRUFBRSxRQUFrQixFQUFFLFFBQWtCLEVBQUUsVUFBK0I7UUFDM0ksTUFBTSxvQkFBb0IsR0FBc0I7WUFDNUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxJQUFJO1lBQzNCLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLFdBQVcsRUFBRSxVQUFVLENBQUMsWUFBWSxJQUFJLEtBQUs7WUFDN0MsSUFBSSxFQUFFLFFBQVE7WUFDZCxLQUFLLEVBQUUsQ0FBQztZQUNSLGNBQWMsRUFBRSxjQUFjO1NBQ2pDLENBQUM7UUFFRixNQUFNLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUN6RixvQkFBb0IsQ0FDdkIsQ0FBQztRQUVGLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVoRCxPQUFPO1lBQ0gsUUFBUSxFQUFFLFFBQVE7WUFDbEIsUUFBUSxFQUFFLGNBQWMsQ0FBQyxRQUFRO1lBQ2pDLFFBQVE7WUFDUixLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7U0FDMUIsQ0FBQztJQUNOLENBQUM7SUFFTSxLQUFLLENBQUMsMkJBQTJCLENBQUMsT0FBZSxFQUFFLFVBQXNCO1FBQzVFLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0MsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3JFLElBQUksSUFBSSxHQUFHLEdBQUcsY0FBYzs7cUNBRUMsVUFBVSxDQUFDLFFBQVE7ZUFDekMsVUFBVSxDQUFDLFFBQVE7ZUFDbkIsVUFBVSxDQUFDLFFBQVE7NkNBQ1csVUFBVSxDQUFDLFFBQVE7a0NBQzlCLENBQUM7UUFFM0IsTUFBTSxPQUFPLEdBQUc7WUFDWixNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNqQixNQUFNLEVBQUU7b0JBQ0o7d0JBQ0ksU0FBUyxFQUFFLElBQUk7d0JBQ2YsY0FBYyxFQUFFLE9BQU87d0JBQ3ZCLFlBQVksRUFBRSxHQUFHLGNBQWMsbUNBQW1DO3dCQUNsRSxVQUFVLEVBQUUsYUFBYTtxQkFDNUI7aUJBQ0o7YUFDSixDQUFDO1lBQ0YsR0FBRyxFQUFFLG1CQUFtQixVQUFVLDhCQUE4QjtTQUNuRSxDQUFDO1FBRUYsTUFBTSxLQUFLLENBQ1AsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3RSxDQUFDLEVBQ0QsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FDcEMsQ0FBQztRQUVGLG9CQUFTLENBQUMsR0FBRyxDQUFDLDZCQUE2QixPQUFPLFFBQVEsVUFBVSxDQUFDLFFBQVEsRUFBRSxFQUFFLHdCQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkcsQ0FBQztJQUVPLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxRQUFnQixFQUFFLFVBQWtCO1FBQ2xFLE1BQU0sZUFBZSxHQUFHLE1BQU0sc0JBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1RCxlQUFlLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzRSxDQUFDO0NBQ0o7QUExSUQscUNBMElDIn0=