GSI - Employe Self Service Mobile
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

156 lines
6.0 KiB

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.testRuleset = exports.updateOrCreateRelease = exports.updateRelease = exports.createRelease = exports.createRuleset = exports.deleteRuleset = exports.getRulesetId = exports.listAllRulesets = exports.listRulesets = exports.getRulesetContent = exports.listAllReleases = exports.listReleases = exports.getLatestRulesetName = void 0;
const api_1 = require("../api");
const apiv2_1 = require("../apiv2");
const logger_1 = require("../logger");
const utils = require("../utils");
const API_VERSION = "v1";
const apiClient = new apiv2_1.Client({ urlPrefix: api_1.rulesOrigin, apiVersion: API_VERSION });
function _handleErrorResponse(response) {
if (response.body && response.body.error) {
return utils.reject(response.body.error, { code: 2 });
}
logger_1.logger.debug("[rules] error:", response.status, response.body);
return utils.reject("Unexpected error encountered with rules.", {
code: 2,
});
}
async function getLatestRulesetName(projectId, service) {
const releases = await listAllReleases(projectId);
const prefix = `projects/${projectId}/releases/${service}`;
const release = releases.find((r) => r.name.startsWith(prefix));
if (!release) {
return null;
}
return release.rulesetName;
}
exports.getLatestRulesetName = getLatestRulesetName;
const MAX_RELEASES_PAGE_SIZE = 10;
async function listReleases(projectId, pageToken = "") {
const response = await apiClient.get(`/projects/${projectId}/releases`, {
queryParams: {
pageSize: MAX_RELEASES_PAGE_SIZE,
pageToken,
},
});
if (response.status === 200) {
return response.body;
}
return _handleErrorResponse(response);
}
exports.listReleases = listReleases;
async function listAllReleases(projectId) {
let pageToken;
let releases = [];
do {
const response = await listReleases(projectId, pageToken);
if (response.releases && response.releases.length > 0) {
releases = releases.concat(response.releases);
}
pageToken = response.nextPageToken;
} while (pageToken);
return releases.sort((a, b) => b.createTime.localeCompare(a.createTime));
}
exports.listAllReleases = listAllReleases;
async function getRulesetContent(name) {
const response = await apiClient.get(`/${name}`, {
skipLog: { resBody: true },
});
if (response.status === 200) {
const source = response.body.source;
return source.files;
}
return _handleErrorResponse(response);
}
exports.getRulesetContent = getRulesetContent;
const MAX_RULESET_PAGE_SIZE = 100;
async function listRulesets(projectId, pageToken = "") {
const response = await apiClient.get(`/projects/${projectId}/rulesets`, {
queryParams: {
pageSize: MAX_RULESET_PAGE_SIZE,
pageToken,
},
skipLog: { resBody: true },
});
if (response.status === 200) {
return response.body;
}
return _handleErrorResponse(response);
}
exports.listRulesets = listRulesets;
async function listAllRulesets(projectId) {
let pageToken;
let rulesets = [];
do {
const response = await listRulesets(projectId, pageToken);
if (response.rulesets) {
rulesets = rulesets.concat(response.rulesets);
}
pageToken = response.nextPageToken;
} while (pageToken);
return rulesets.sort((a, b) => b.createTime.localeCompare(a.createTime));
}
exports.listAllRulesets = listAllRulesets;
function getRulesetId(ruleset) {
return ruleset.name.split("/").pop();
}
exports.getRulesetId = getRulesetId;
async function deleteRuleset(projectId, id) {
const response = await apiClient.delete(`/projects/${projectId}/rulesets/${id}`);
if (response.status === 200) {
return;
}
return _handleErrorResponse(response);
}
exports.deleteRuleset = deleteRuleset;
async function createRuleset(projectId, files) {
const payload = { source: { files } };
const response = await apiClient.post(`/projects/${projectId}/rulesets`, payload, { skipLog: { body: true } });
if (response.status === 200) {
logger_1.logger.debug("[rules] created ruleset", response.body.name);
return response.body.name;
}
return _handleErrorResponse(response);
}
exports.createRuleset = createRuleset;
async function createRelease(projectId, rulesetName, releaseName) {
const payload = {
name: `projects/${projectId}/releases/${releaseName}`,
rulesetName,
};
const response = await apiClient.post(`/projects/${projectId}/releases`, payload);
if (response.status === 200) {
logger_1.logger.debug("[rules] created release", response.body.name);
return response.body.name;
}
return _handleErrorResponse(response);
}
exports.createRelease = createRelease;
async function updateRelease(projectId, rulesetName, releaseName) {
const payload = {
release: {
name: `projects/${projectId}/releases/${releaseName}`,
rulesetName,
},
};
const response = await apiClient.patch(`/projects/${projectId}/releases/${releaseName}`, payload);
if (response.status === 200) {
logger_1.logger.debug("[rules] updated release", response.body.name);
return response.body.name;
}
return _handleErrorResponse(response);
}
exports.updateRelease = updateRelease;
async function updateOrCreateRelease(projectId, rulesetName, releaseName) {
logger_1.logger.debug("[rules] releasing", releaseName, "with ruleset", rulesetName);
return updateRelease(projectId, rulesetName, releaseName).catch(() => {
logger_1.logger.debug("[rules] ruleset update failed, attempting to create instead");
return createRelease(projectId, rulesetName, releaseName);
});
}
exports.updateOrCreateRelease = updateOrCreateRelease;
function testRuleset(projectId, files) {
return apiClient.post(`/projects/${encodeURIComponent(projectId)}:test`, { source: { files } }, { skipLog: { body: true } });
}
exports.testRuleset = testRuleset;