import {z} from 'zod' export type CreateApiApiV1AnnotationsSearchArgs = {ordering?: ('id' | '-id' | 'arrived_at' | '-arrived_at' | 'assigned_at' | '-assigned_at' | 'assignees' | '-assignees' | 'automated' | '-automated' | 'confirmed_at' | '-confirmed_at' | 'confirmed_by__username' | '-confirmed_by__username' | 'confirmed_by' | '-confirmed_by' | 'created_at' | '-created_at' | 'creator__username' | '-creator__username' | 'creator' | '-creator' | 'deleted_at' | '-deleted_at' | 'deleted_by__username' | '-deleted_by__username' | 'deleted_by' | '-deleted_by' | 'document' | '-document' | 'exported_at' | '-exported_at' | 'exported_by__username' | '-exported_by__username' | 'exported_by' | '-exported_by' | 'export_failed_at' | '-export_failed_at' | 'has_email_thread_with_new_replies' | '-has_email_thread_with_new_replies' | 'has_email_thread_with_replies' | '-has_email_thread_with_replies' | 'has_note' | '-has_note' | 'has_suggested_edit' | '-has_suggested_edit' | 'labels' | '-labels' | 'modified_at' | '-modified_at' | 'modifier__username' | '-modifier__username' | 'modifier' | '-modifier' | 'original_file_name' | '-original_file_name' | 'purged_at' | '-purged_at' | 'purged_by__username' | '-purged_by__username' | 'purged_by' | '-purged_by' | 'queue' | '-queue' | 'rejected_at' | '-rejected_at' | 'rejected_by__username' | '-rejected_by__username' | 'rejected_by' | '-rejected_by' | 'relations__key' | '-relations__key' | 'relations__parent' | '-relations__parent' | 'relations__type' | '-relations__type' | 'rir_poll_id' | '-rir_poll_id' | 'status' | '-status' | 'training_enabled' | '-training_enabled' | 'workspace' | '-workspace' | 'email_thread' | '-email_thread' | 'email_sender' | '-email_sender') | undefined, page_size?: number | undefined, search_after?: string | undefined, fields?: string | undefined, 'fields!'?: string | undefined, sideload?: string | undefined, 'content.schema_id'?: string | undefined, body: {query?: ({$and?: Array> | undefined}) | undefined, query_string?: ({string?: string | undefined}) | undefined}}; export type CreateApiApiV1AnnotationsSearchOptions = {baseUrl?: string | undefined, BearerAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const paginationWithTotal = z.object({total: z.number().int().optional(), total_pages: z.number().int().optional(), next: z.string().nullable().optional(), previous: z.string().nullable().optional()}); export const creator = z.string().nullable(); export const createdAt = z.string(); export const modifiedBy = z.string().nullable(); export const modifiedAt = z.string().nullable(); export const metadata = z.object({}); export const assignees = z.array(z.string()); export const annotationSearch = z.object({id: z.number().int(), url: z.string(), status: z.enum(["confirmed", "created", "deleted", "exported", "exporting", "failed_export", "failed_import", "importing", "in_workflow", "postponed", "purged", "rejected", "reviewing", "split", "to_review"]), document: z.string(), queue: z.string(), schema: z.string(), relations: z.array(z.string()), pages: z.array(z.string()), creator: creator, created_at: createdAt, modifier: z.string().nullable(), modified_by: modifiedBy, modified_at: modifiedAt, assigned_at: z.string().nullable(), confirmed_at: z.string().nullable(), deleted_at: z.string().nullable(), exported_at: z.string().nullable(), export_failed_at: z.string().nullable(), purged_at: z.string().nullable(), rejected_at: z.string().nullable(), confirmed_by: z.string().nullable(), deleted_by: z.string().nullable(), exported_by: z.string().nullable(), purged_by: z.string().nullable(), rejected_by: z.string().nullable(), rir_poll_id: z.string().nullable(), messages: z.array(z.object({content: z.string().optional(), id: z.number().int().nullable().optional(), type: z.enum(["error", "warning", "info"]).optional()})).nullable(), content: z.string(), suggested_edit: z.string().nullable(), time_spent: z.number(), metadata: metadata, automated: z.boolean(), related_emails: z.array(z.string()), email: z.string().nullable(), automation_blocker: z.string().nullable(), email_thread: z.string().nullable(), has_email_thread_with_replies: z.boolean().optional(), has_email_thread_with_new_replies: z.boolean().optional(), organization: z.string(), automatically_rejected: z.boolean(), prediction: z.object({}).nullable(), assignees: assignees, labels: z.array(z.string()), restricted_access: z.boolean(), training_enabled: z.boolean(), has_note: z.boolean(), has_suggested_edit: z.boolean()}); export const createApiApiV1AnnotationsSearchResponse = z.object({pagination: paginationWithTotal, results: z.array(annotationSearch)}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Search annotations * * POST /api/v1/annotations/search */ export const createApiApiV1AnnotationsSearch = async (args: CreateApiApiV1AnnotationsSearchArgs, options?: CreateApiApiV1AnnotationsSearchOptions) => { const {baseUrl = "https://example.rossum.app", fetch: fetchFn = fetch, BearerAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (args.ordering != null) query.append("ordering", String(args.ordering)) if (args.page_size != null) query.append("page_size", String(args.page_size)) if (args.search_after != null) query.append("search_after", String(args.search_after)) if (args.fields != null) query.append("fields", String(args.fields)) if (args['fields!'] != null) query.append("fields!", String(args['fields!'])) if (args.sideload != null) query.append("sideload", String(args.sideload)) if (args['content.schema_id'] != null) query.append("content.schema_id", String(args['content.schema_id'])) if (BearerAuth !== undefined) headers.set('authorization', `Bearer ${BearerAuth}`) const url = `${baseUrl.replace(/\/+$/, '')}/api/v1/annotations/search${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(createApiApiV1AnnotationsSearchResponse, await res.json()) };