//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