Resolve audit log user IDs

This script calls the Jira user API, resolves user IDs in the Jira audit log and replaces them with the display names.

  1. // ==UserScript==
  2. // @name Resolve audit log user IDs
  3. // @namespace http://schuppentier.org/
  4. // @version 2024-02-19
  5. // @description This script calls the Jira user API, resolves user IDs in the Jira audit log and replaces them with the display names.
  6. // @author You
  7. // @match https://*.atlassian.net/auditing/*
  8. // @icon https://www.google.com/s2/favicons?sz=64&domain=atlassian.net
  9. // @grant none
  10. // @require https://bowercdn.net/c/arrive-2.4.1/minified/arrive.min.js
  11. // @license MIT
  12. // ==/UserScript==
  13.  
  14. /* jshint esversion: 8 */
  15.  
  16. (function() {
  17. 'use strict';
  18.  
  19. const resolveUserId = async (userId) => {
  20. const userResponse = await fetch(`/rest/api/3/user?accountId=${userId}`);
  21. const userObject = await userResponse.json();
  22. const userDisplayName = userObject.displayName;
  23. return userDisplayName;
  24. };
  25.  
  26. document.arrive("span.delta-from, span.delta-to", async (elem) => {
  27. const detailsRow = elem.closest("tr.record-row-details");
  28. const recordRow = detailsRow.previousElementSibling;
  29. const summary = recordRow.querySelector("td.summary").innerText;
  30. if (summary != "Project roles changed") {
  31. return;
  32. }
  33.  
  34. const fromElem = detailsRow.querySelector("span.delta-from");
  35. const toElem = detailsRow.querySelector("span.delta-to");
  36.  
  37. var fromUserIds = new Set(fromElem.innerText.split(",").map(item => item.trim()));
  38. var toUserIds = new Set(toElem.innerText.split(",").map(item => item.trim()));
  39.  
  40. const duplicateUserIds = fromUserIds.intersection(toUserIds);
  41.  
  42. fromUserIds = fromUserIds.difference(duplicateUserIds);
  43. toUserIds = toUserIds.difference(duplicateUserIds);
  44.  
  45. const fromUserNames = await Promise.all(fromUserIds.map(resolveUserId));
  46. const toUserNames = await Promise.all(toUserIds.map(resolveUserId));
  47.  
  48. fromElem.innerText = fromUserNames.join(", ");
  49. toElem.innerText = toUserNames.join(", ");
  50. });
  51. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址