Edits history of script submission #24130 for ' List tickets (tufin_securechange)'

  • bunnative
    One script reply has been approved by the moderators
    Ap­pro­ved
    //native
    
    /**
     * List tickets
     * List SecureChange tickets, optionally filtered by status. Returns one page; pass next_start as start to get the next one.
     */
    export async function main(
      auth: RT.TufinSecurechange,
      status:
        | (
            | "In Progress"
            | "Ticket Closed"
            | "Ticket Cancelled"
            | "Ticket Rejected"
            | "Ticket Resolved"
          )[]
        | undefined,
      start: number | undefined,
      descending: boolean | undefined
    ) {
      const base = auth.base_url.replace(/\/+$/, "")
      const url = new URL(`${base}/securechangeworkflow/api/securechange/tickets`)
      if (status?.length) url.searchParams.append("status", status.join(","))
      if (start != null) url.searchParams.append("start", String(start))
      if (descending) url.searchParams.append("desc", "true")
    
      const response = await fetch(url, {
        method: "GET",
        headers: {
          Authorization: `Basic ${btoa(`${auth.username}:${auth.password}`)}`,
          Accept: "application/json",
        },
      })
    
      if (!response.ok) {
        throw new Error(`${response.status} ${await response.text()}`)
      }
    
      const data = await response.json()
      // The API links the next page as tickets.next["@href"]; it is absent on the last page.
      const nextUrl: string | null = data?.tickets?.next?.["@href"] ?? null
      const nextStart = nextUrl
        ? new URL(nextUrl, base).searchParams.get("start")
        : null
      return {
        ...data,
        next_url: nextUrl,
        next_start: nextStart != null ? Number(nextStart) : null,
      }
    }
    

    Submitted by hugo989 6 hours ago