此腳本不應該直接安裝,它是一個供其他腳本使用的函式庫。欲使用本函式庫,請在腳本 metadata 寫上: // @require https://update.greasyforks.org/scripts/486123/1320389/TMS_Library.js
你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式
你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式
你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式
你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式
你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式
你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式
(我已經安裝了使用者樣式管理器,讓我安裝!)
// ==UserScript==
// @name TMS_Library
// @namespace http://tampermonkey.net/
// @version 2024-01-31#3
// @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(",")}`);
}