// ==UserScript==
// @name TMS_Library
// @namespace http://tampermonkey.net/
// @version 2024-01-31#6
// @description util lib for TMS related scripts
// @author bliushtein
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant GM_xmlhttpRequest
// ==/UserScript==
function getConstants() {
return {
DESIGN_GAP: "DesignGap",
CROSS_STREAM_GAP: "CrossStreamGap",
OVERHEAD_TYPES: ["DesignGap", "CrossStreamGap"],
DEV_STORY: "DevStory",
DESIGN_STORY: "DesignChapter",
BA_COMMUNICATION: "BACommunication",
CROSS_STREAM_COMMUNICATION: "CrossStreamCommunication",
DEV_TEST: "DevTest"
}
}
function delay(milliseconds){
return new Promise(resolve => {
setTimeout(resolve, milliseconds);
});
}
function sendRequest(url, method = 'GET', body = null) {
console.log(url, method, body);
return new Promise((resolve, reject) => {
GM_xmlhttpRequest({
method: method,
timeout: 5000,
onerror: reject,
ontimeout: reject,
onload: resolve,
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
// If a user agent is not passed - a POST request fails with 403 error
'User-Agent': 'Any',
},
data: body,
url: url,
});
}).then(response => {
if ([200, 201].indexOf(response.status) !== -1) {
if (response.responseText == null) {
return {};
}
return JSON.parse(response.responseText);
}
throw new Error(response.status + ' ' + response.statusText + ' ' + response.responseText);
});
}
async function getIssues(keys, fields = ["timetracking", "components", "issuetype", "labels", "priority", "customfield_10200", "customfield_10201", "customfield_10006", "summary", "status", "issuelinks"]) {
if (keys.length == 0) {
return {issues: []};
}
return await sendRequest(`https://tms.netcracker.com/rest/api/latest/search?jql=issuekey IN (${keys.join(",")})&fields=${fields.join(",")}`);
}
async function getSubtasts(keys, fields = ["timetracking", "components", "issuetype", "labels", "status"]) {
if (keys.length == 0) {
return {issues: []};
}
return await sendRequest(`https://tms.netcracker.com/rest/api/latest/search?jql=parent IN (${keys.join(",")})&fields=${fields.join(",")}`);
}