//native
/**
* List endpoints
* List one page of endpoints. Filters use ERS syntax field.OPERATOR.value on mac, groupId, staticGroupAssignment, profileId, staticProfileAssignment, portalUser or logicalProfileName (e.g. groupId.EQ.<group id>). size is up to 100 (default 20); pages start at 1. Pass next_page from the result to get the following page.
*/
export async function main(
auth: RT.CiscoIse,
page: number | undefined,
size: number | undefined,
filters: string[] | undefined,
filter_type: "and" | "or" | undefined,
sort_asc: "name" | "description" | undefined,
sort_desc: "name" | "description" | undefined
) {
const base = new URL(auth.base_url)
if (auth.ers_port) base.port = String(auth.ers_port)
const url = new URL("/ers/config/endpoint", base)
if (page != null) url.searchParams.append("page", String(page))
if (size != null) url.searchParams.append("size", String(size))
for (const f of filters ?? []) {
if (f) url.searchParams.append("filter", f)
}
if (filter_type) url.searchParams.append("filterType", filter_type)
if (sort_asc) url.searchParams.append("sortasc", sort_asc)
if (sort_desc) url.searchParams.append("sortdsc", sort_desc)
const response = await fetch(url, {
headers: {
Authorization: `Basic ${btoa(`${auth.username}:${auth.password}`)}`,
Accept: "application/json",
},
})
if (!response.ok) {
throw new Error(`${response.status} ${await response.text()}`)
}
const { SearchResult } = await response.json()
const pageOf = (link: { href?: string } | undefined) => {
const p = link?.href ? new URL(link.href).searchParams.get("page") : null
return p ? Number(p) : null
}
return {
total: SearchResult.total,
resources: SearchResult.resources ?? [],
next_page: pageOf(SearchResult.nextPage),
previous_page: pageOf(SearchResult.previousPage),
}
}
Submitted by hugo989 6 hours ago