TMS_Library

util lib for TMS related scripts

目前為 2024-01-31 提交的版本,檢視 最新版本

此腳本不應該直接安裝,它是一個供其他腳本使用的函式庫。欲使用本函式庫,請在腳本 metadata 寫上: // @require https://update.cn-greasyfork.org/scripts/486123/1320389/TMS_Library.js

  1. // ==UserScript==
  2. // @name TMS_Library
  3. // @namespace http://tampermonkey.net/
  4. // @version 2024-01-31#3
  5. // @description util lib for TMS related scripts
  6. // @author bliushtein
  7. // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
  8. // @grant GM_xmlhttpRequest
  9. // ==/UserScript==
  10. class Constants {
  11. static DESIGN_GAP = "DesignGap";
  12. static CROSS_STREAM_GAP = "CrossStreamGap";
  13. static OVERHEAD_TYPES = [Constants.DESIGN_GAP, Constants.CROSS_STREAM_GAP];
  14. static DEV_STORY = "DevStory";
  15. static DESIGN_STORY = "DesignChapter";
  16. static BA_COMMUNICATION = "BACommunication";
  17. static CROSS_STREAM_COMMUNICATION = "CrossStreamCommunication";
  18. static DEV_TEST = "DevTest";
  19. }
  20. function delay(milliseconds){
  21. return new Promise(resolve => {
  22. setTimeout(resolve, milliseconds);
  23. });
  24. }
  25. function sendRequest(url, method = 'GET', body = null) {
  26. console.log(url, method, body);
  27. return new Promise((resolve, reject) => {
  28. GM_xmlhttpRequest({
  29. method: method,
  30. timeout: 5000,
  31. onerror: reject,
  32. ontimeout: reject,
  33. onload: resolve,
  34. headers: {
  35. Accept: 'application/json',
  36. 'Content-Type': 'application/json',
  37. // If a user agent is not passed - a POST request fails with 403 error
  38. 'User-Agent': 'Any',
  39. },
  40. data: body,
  41. url: url,
  42. });
  43. }).then(response => {
  44. if ([200, 201].indexOf(response.status) !== -1) {
  45. if (response.responseText == null) {
  46. return {};
  47. }
  48. return JSON.parse(response.responseText);
  49. }
  50. throw new Error(response.status + ' ' + response.statusText + ' ' + response.responseText);
  51. });
  52. }
  53. async function getIssues(keys, fields = ["timetracking", "components", "issuetype", "labels", "priority", "customfield_10200", "customfield_10201", "customfield_10006", "summary", "status", "issuelinks"]) {
  54. if (keys.length == 0) {
  55. return {issues: []};
  56. }
  57. return await sendRequest(`https://tms.netcracker.com/rest/api/latest/search?jql=issuekey IN (${keys.join(",")})&fields=${fields.join(",")}`);
  58. }
  59. async function getSubtasts(keys, fields = ["timetracking", "components", "issuetype", "labels", "status"]) {
  60. if (keys.length == 0) {
  61. return {issues: []};
  62. }
  63. return await sendRequest(`https://tms.netcracker.com/rest/api/latest/search?jql=parent IN (${keys.join(",")})&fields=${fields.join(",")}`);
  64. }