util lib for TMS related scripts
Version vom
Dieses Skript sollte nicht direkt installiert werden. Es handelt sich hier um eine Bibliothek für andere Skripte, welche über folgenden Befehl in den Metadaten eines Skriptes eingebunden wird // @require https://update.greasyfork.org/scripts/486123/1320390/TMS_Library.js
// ==UserScript==
// @name TMS_Library
// @namespace http://tampermonkey.net/
// @version 2024-01-31#5
// @description util lib for TMS related scripts
// @author bliushtein
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant GM_xmlhttpRequest
// ==/UserScript==
class Constants {
static DESIGN_GAP = "DesignGap";
static CROSS_STREAM_GAP = "CrossStreamGap";
static OVERHEAD_TYPES = [Constants.DESIGN_GAP, Constants.CROSS_STREAM_GAP];
static DEV_STORY = "DevStory";
static DESIGN_STORY = "DesignChapter";
static BA_COMMUNICATION = "BACommunication";
static CROSS_STREAM_COMMUNICATION = "CrossStreamCommunication";
static 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(",")}`);
}