@flxbl-io/sfp
Version:
sfp is a CLI tool to help you manage your Salesforce projects in an artifact centric model
157 lines • 16.5 kB
JavaScript
;
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;
};
Object.defineProperty(exports, "__esModule", { value: true });
const sfp_logger_1 = __importStar(require("@flxbl-io/sfp-logger"));
const retry = require('async-retry');
const ORDER_BY_FILTER = ' ORDER BY CreatedDate DESC';
class ScratchOrgInfoFetcher {
constructor(hubOrg) {
this.hubOrg = hubOrg;
this.arrayToObject = (array, keyfield) => array.reduce((obj, item) => {
obj[item[keyfield]] = item;
return obj;
}, {});
}
async getScratchOrgRecordId(scratchOrgs) {
if (scratchOrgs == undefined || scratchOrgs.length == 0)
return;
let hubConn = this.hubOrg.getConnection();
let scratchOrgIds = scratchOrgs
.map(function (scratchOrg) {
scratchOrg.orgId = scratchOrg.orgId.slice(0, 15);
return `'${scratchOrg.orgId}'`;
})
.join(',');
let query = `SELECT Id, ScratchOrg FROM ScratchOrgInfo WHERE ScratchOrg IN ( ${scratchOrgIds} )`;
sfp_logger_1.default.log('QUERY:' + query, sfp_logger_1.LoggerLevel.TRACE);
return retry(async (bail) => {
const results = (await hubConn.query(query));
let resultAsObject = this.arrayToObject(results.records, 'ScratchOrg');
sfp_logger_1.default.log(JSON.stringify(resultAsObject), sfp_logger_1.LoggerLevel.TRACE);
scratchOrgs.forEach((scratchOrg) => {
scratchOrg.recordId = resultAsObject[scratchOrg.orgId]['Id'];
});
return scratchOrgs;
}, { retries: 3, minTimeout: 3000 });
}
async getScratchOrgsByTag(tag, isMyPool, unAssigned) {
let hubConn = this.hubOrg.getConnection();
return retry(async (bail) => {
let query;
if (tag)
query = `SELECT Pooltag__c, Id, CreatedDate, ScratchOrg, ExpirationDate, SignupUsername, SignupEmail, Password__c, Allocation_status__c, LoginUrl, SfdxAuthUrl__c FROM ScratchOrgInfo WHERE Pooltag__c = '${tag}' AND Status = 'Active' `;
else
query = `SELECT Pooltag__c, Id, CreatedDate, ScratchOrg, ExpirationDate, SignupUsername, SignupEmail, Password__c, Allocation_status__c, LoginUrl, SfdxAuthUrl__c FROM ScratchOrgInfo WHERE Pooltag__c != null AND Status = 'Active' `;
if (isMyPool) {
query = query + ` AND createdby.username = '${this.hubOrg.getUsername()}' `;
}
if (unAssigned) {
// if new version compatible get Available / In progress
query =
query + `AND ( Allocation_status__c ='Available' OR Allocation_status__c = 'In Progress' ) `;
}
query = query + ORDER_BY_FILTER;
sfp_logger_1.default.log('QUERY:' + query, sfp_logger_1.LoggerLevel.TRACE);
const results = (await hubConn.query(query));
return results;
}, { retries: 3, minTimeout: 3000 });
}
async getOrphanedScratchOrgs() {
let hubConn = this.hubOrg.getConnection();
return retry(async (bail) => {
let query;
query = `SELECT Id, Pooltag__c, SignupUsername, Description, ScratchOrg FROM ScratchOrgInfo WHERE Pooltag__c = null AND Status = 'Active'`;
query = query + ORDER_BY_FILTER;
sfp_logger_1.default.log('QUERY:' + query, sfp_logger_1.LoggerLevel.TRACE);
const results = (await hubConn.query(query));
return results;
}, { retries: 3, minTimeout: 3000 });
}
async getActiveScratchOrgsByInfoId(scrathOrgIds) {
let hubConn = this.hubOrg.getConnection();
return retry(async (bail) => {
let query = `SELECT Id, SignupUsername FROM ActiveScratchOrg WHERE ScratchOrgInfoId IN (${scrathOrgIds}) `;
sfp_logger_1.default.log('QUERY:' + query, sfp_logger_1.LoggerLevel.TRACE);
const results = (await hubConn.query(query));
return results;
}, { retries: 3, minTimeout: 3000 });
}
async getCountOfActiveScratchOrgsByTag(tag) {
let hubConn = this.hubOrg.getConnection();
return retry(async (bail) => {
let query = `SELECT Id, CreatedDate, ScratchOrg, ExpirationDate, SignupUsername, SignupEmail, Password__c, Allocation_status__c, LoginUrl FROM ScratchOrgInfo WHERE Pooltag__c = '${tag}' AND Status = 'Active' `;
sfp_logger_1.default.log('QUERY:' + query, sfp_logger_1.LoggerLevel.TRACE);
const results = (await hubConn.query(query));
sfp_logger_1.default.log('RESULT:' + JSON.stringify(results), sfp_logger_1.LoggerLevel.TRACE);
return results.totalSize;
}, { retries: 3, minTimeout: 3000 });
}
async getCountOfActiveScratchOrgsByTagAndUsername(tag) {
let hubConn = this.hubOrg.getConnection();
return retry(async (bail) => {
let query = `SELECT Id, CreatedDate, ScratchOrg, ExpirationDate, SignupUsername, SignupEmail, Password__c, Allocation_status__c, LoginUrl FROM ScratchOrgInfo WHERE Pooltag__c = '${tag}' AND Status = 'Active' `;
sfp_logger_1.default.log('QUERY:' + query, sfp_logger_1.LoggerLevel.TRACE);
const results = (await hubConn.query(query));
return results.totalSize;
}, { retries: 3, minTimeout: 3000 });
}
async getActiveScratchOrgRecordIdGivenScratchOrg(scratchOrgId) {
let hubConn = this.hubOrg.getConnection();
return retry(async (bail) => {
let query = `SELECT Id FROM ActiveScratchOrg WHERE ScratchOrg = '${scratchOrgId}'`;
let records = (await hubConn.query(query)).records;
sfp_logger_1.default.log('Retrieve Active ScratchOrg Id:' + JSON.stringify(records), sfp_logger_1.LoggerLevel.TRACE);
return records[0].Id;
}, { retries: 3, minTimeout: 3000 });
}
async getActiveScratchOrgRecordsAsMapByUser(hubOrg) {
let conn = this.hubOrg.getConnection();
let query = 'SELECT count(id) In_Use, SignupEmail FROM ActiveScratchOrg GROUP BY SignupEmail ORDER BY count(id) DESC';
const results = (await conn.query(query));
sfp_logger_1.default.log(`Info Fetched: ${JSON.stringify(results)}`, sfp_logger_1.LoggerLevel.DEBUG);
let scratchOrgRecordAsMapByUser = this.arrayToObject(results.records, 'SignupEmail');
return scratchOrgRecordAsMapByUser;
}
async getScratchOrgIdGivenUserName(username) {
let conn = this.hubOrg.getConnection();
let query = `SELECT Id FROM ActiveScratchOrg WHERE SignupUsername = '${username}'`;
return retry(async (bail) => {
sfp_logger_1.default.log('QUERY:' + query, sfp_logger_1.LoggerLevel.TRACE);
const results = (await conn.query(query));
return results.records[0].Id;
}, { retries: 3, minTimeout: 3000 });
}
async getScratchOrgInfoIdGivenUserName(username) {
let conn = this.hubOrg.getConnection();
let query = `SELECT Id FROM ScratchOrgInfo WHERE SignupUsername = '${username}'`;
return retry(async (bail) => {
sfp_logger_1.default.log('QUERY:' + query, sfp_logger_1.LoggerLevel.TRACE);
const results = (await conn.query(query));
return results.records[0].Id;
}, { retries: 3, minTimeout: 3000 });
}
}
exports.default = ScratchOrgInfoFetcher;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NyYXRjaE9yZ0luZm9GZXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvcmUvc2NyYXRjaG9yZy9wb29sL3NlcnZpY2VzL2ZldGNoZXJzL1NjcmF0Y2hPcmdJbmZvRmV0Y2hlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUVBQThEO0FBRzlELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNyQyxNQUFNLGVBQWUsR0FBRyw0QkFBNEIsQ0FBQztBQUVyRCxNQUFxQixxQkFBcUI7SUFDdEMsWUFBb0IsTUFBVztRQUFYLFdBQU0sR0FBTixNQUFNLENBQUs7UUE4S3ZCLGtCQUFhLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FDeEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUN2QixHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzNCLE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBbEx1QixDQUFDO0lBRTVCLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxXQUF5QjtRQUN4RCxJQUFJLFdBQVcsSUFBSSxTQUFTLElBQUksV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQUUsT0FBTztRQUVoRSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRTFDLElBQUksYUFBYSxHQUFHLFdBQVc7YUFDMUIsR0FBRyxDQUFDLFVBQVUsVUFBVTtZQUNyQixVQUFVLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqRCxPQUFPLElBQUksVUFBVSxDQUFD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