rerunArguments.js 1.5 KB

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