rerunArguments.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { needsArgumentForm } from './needsArgumentForm.js'
  2. import { actionRequiresJustification } from './justificationTemplate.js'
  3. const nonStorableArgumentTypes = new Set([
  4. 'password',
  5. 'very_dangerous_raw_string'
  6. ])
  7. function isNonStorableArgumentType (type) {
  8. return nonStorableArgumentTypes.has(type)
  9. }
  10. export function logEntryArgumentsToStartActionArgs (logEntry) {
  11. return (logEntry?.arguments ?? []).map((arg) => ({
  12. name: arg.name,
  13. value: arg.value
  14. }))
  15. }
  16. export function rerunNeedsArgumentForm (action, logEntry) {
  17. if (actionRequiresJustification(action?.justification) && !logEntry?.justification) {
  18. return true
  19. }
  20. if (!needsArgumentForm(action)) {
  21. return false
  22. }
  23. return hasMissingRerunArguments(action, logEntry?.arguments ?? [])
  24. }
  25. export function hasMissingRerunArguments (action, storedArgs) {
  26. const stored = new Map(storedArgs.map((arg) => [arg.name, arg.value]))
  27. for (const arg of action?.arguments ?? []) {
  28. if (isNonStorableArgumentType(arg.type)) {
  29. return true
  30. }
  31. if (arg.required && !stored.has(arg.name)) {
  32. return true
  33. }
  34. }
  35. return false
  36. }
  37. export function buildArgumentFormQuery (logEntry) {
  38. const query = {}
  39. for (const arg of logEntry?.arguments ?? []) {
  40. query[arg.name] = arg.value
  41. }
  42. return query
  43. }
  44. export function buildRerunStartActionArgs (bindingId, logEntry, action) {
  45. const startActionArgs = {
  46. bindingId,
  47. arguments: logEntryArgumentsToStartActionArgs(logEntry)
  48. }
  49. if (actionRequiresJustification(action?.justification) && logEntry?.justification) {
  50. startActionArgs.justification = logEntry.justification
  51. }
  52. return startActionArgs
  53. }