← Public packages
@charlesmatte/granola
Search and read Granola meeting notes, summaries and transcripts from any agent; manage webhooks and legal holds safely.
src/legal-holds/custodians/list.ts
26 lines · 1.6 KB · TypeScriptimport { listEndpoint, pageSpec, parseWithAccount } from '../../lib/api.ts'
import { HOLD_ID_PATTERN } from '../../lib/validate.ts'
/**
* List the people a legal hold names, oldest first, including removed ones (`removed_at` set)
* (`GET /v1/legal-holds/{hold_id}/custodians`). Needs a Legal hold API key (Enterprise).
*
* @param input.account - Account whose secret holds a Legal hold API key. Required. @param input.secretName - Secret override.
* @param input.holdId - `lgh_…` id. Required.
* @param input.limit - Max custodians (1-5000, default 500). @param input.paginate - Follow cursors (default true). @param input.cursor - Resume.
* @returns `{ account, holdId, count, custodians: [{ id, user: { id, email }, added_at, removed_at }], hasMore, cursor }`
*
* @example
* import listCustodians from 'kody:@charlesmatte/granola/legal-holds/custodians/list'
*
* const { custodians } = await listCustodians({ account: 'work-legal', holdId: 'lgh_Abc123XyZ456Dq' })
*/
export default async function listGranolaLegalHoldCustodians(input: unknown) {
const p = parseWithAccount<{ holdId: string; limit?: number; cursor?: string; paginate?: boolean }>(
input,
{ holdId: { type: 'string', required: true, pattern: HOLD_ID_PATTERN }, ...pageSpec(5000) },
'legal-holds/custodians/list',
)
const r = await listEndpoint(p.acct, { path: `/v1/legal-holds/${p.holdId}/custodians`, itemsKey: 'custodians', limit: p.limit ?? 500, maxPageSize: 30, cursor: p.cursor, paginate: p.paginate ?? true })
return { account: p.acct.account, holdId: p.holdId, count: r.count, custodians: r.items, hasMore: r.hasMore, cursor: r.cursor, pages: r.pages }
}