import {z} from 'zod' export type GetApiApiV1UsStatutesDivisionsArgs = {corpusType: 'USC' | 'CFR' | 'STATE' | 'REGULATION' | 'STATE_RULES' | 'CONSTITUTION' | 'STATE_CONSTITUTION' | 'FEDERAL_RULES', state?: ('al' | 'ak' | 'as' | 'az' | 'ar' | 'ca' | 'co' | 'ct' | 'de' | 'dc' | 'fl' | 'ga' | 'gu' | 'hi' | 'id' | 'il' | 'in' | 'ia' | 'ks' | 'ky' | 'la' | 'me' | 'md' | 'ma' | 'mi' | 'mn' | 'ms' | 'mo' | 'mt' | 'ne' | 'nv' | 'nh' | 'nj' | 'nm' | 'ny' | 'nc' | 'nd' | 'mp' | 'oh' | 'ok' | 'or' | 'pa' | 'pr' | 'ri' | 'sc' | 'sd' | 'tn' | 'tx' | 'ut' | 'vt' | 'vi' | 'va' | 'wa' | 'wv' | 'wi' | 'wy' | null) | undefined, titleNumber?: (number | '5a' | '18a' | null) | undefined, code?: (string | null) | undefined, chapter?: (string | null) | undefined, part?: (string | null) | undefined, article?: (string | null) | undefined, excludeRepealed?: boolean | undefined, actStatus?: ('abolished' | 'deleted' | 'expired' | 'in_force' | 'inactive' | 'non_precedential' | 'not_funded' | 'not_yet_effective' | 'omitted' | 'proposed' | 'recodified' | 'recompiled' | 'rejected' | 'relocated' | 'removed' | 'renumbered' | 'repealed' | 'rescinded' | 'reserved' | 'revoked' | 'superseded' | 'terminated' | 'transferred' | 'unconstitutional' | 'vacant' | 'vacated' | 'vetoed' | 'withdrawn' | null) | undefined, subchapter?: (string | null) | undefined, act?: (string | null) | undefined, title?: (string | null) | undefined, subtitle?: (string | null) | undefined, division?: (string | null) | undefined, subdivision?: (string | null) | undefined, subpart?: (string | null) | undefined, umbrella?: (string | null) | undefined, agency?: (string | null) | undefined, program?: (string | null) | undefined, subjectGroup?: (string | null) | undefined, cursor?: (string | null) | undefined, 'Idempotency-Key'?: (string | null) | undefined}; export type GetApiApiV1UsStatutesDivisionsOptions = {baseUrl?: string | undefined, ApiKeyAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const usDivisionNode = z.object({identifier: z.string(), name: z.string().nullable().optional(), label: z.string().nullable().optional(), kind: z.string(), isLeaf: z.boolean(), actId: z.string().nullable().optional(), sectionCount: z.number().int().gte(0).nullable().optional(), status: z.string().nullable().optional(), subjectGroupId: z.string().nullable().optional()}); export const usStatutesDivisionsResponse = z.object({corpusType: z.string(), state: z.string().nullable().optional(), level: z.string(), parentLabel: z.string().nullable().optional(), divisions: z.array(usDivisionNode).optional(), count: z.number().int().optional(), nextCursor: z.string().nullable().optional(), truncated: z.boolean().optional(), note: z.string().nullable().optional(), processingTimeMs: z.number().optional(), creditsConsumed: z.number().optional()}); 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 }; /** * Browse the statutory hierarchy * * GET /api/v1/us/statutes/divisions * * Also accepts auth: ApiKeyHeader */ export const getApiApiV1UsStatutesDivisions = async (args: GetApiApiV1UsStatutesDivisionsArgs, options?: GetApiApiV1UsStatutesDivisionsOptions) => { const {baseUrl = "https://api.vaquill.ai", fetch: fetchFn = fetch, ApiKeyAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.corpusType != null) query.append("corpusType", String(args.corpusType)) if (args.state != null) query.append("state", String(args.state)) if (args.titleNumber != null) query.append("titleNumber", String(args.titleNumber)) if (args.code != null) query.append("code", String(args.code)) if (args.chapter != null) query.append("chapter", String(args.chapter)) if (args.part != null) query.append("part", String(args.part)) if (args.article != null) query.append("article", String(args.article)) if (args.excludeRepealed != null) query.append("excludeRepealed", String(args.excludeRepealed)) if (args.actStatus != null) query.append("actStatus", String(args.actStatus)) if (args.subchapter != null) query.append("subchapter", String(args.subchapter)) if (args.act != null) query.append("act", String(args.act)) if (args.title != null) query.append("title", String(args.title)) if (args.subtitle != null) query.append("subtitle", String(args.subtitle)) if (args.division != null) query.append("division", String(args.division)) if (args.subdivision != null) query.append("subdivision", String(args.subdivision)) if (args.subpart != null) query.append("subpart", String(args.subpart)) if (args.umbrella != null) query.append("umbrella", String(args.umbrella)) if (args.agency != null) query.append("agency", String(args.agency)) if (args.program != null) query.append("program", String(args.program)) if (args.subjectGroup != null) query.append("subjectGroup", String(args.subjectGroup)) if (args.cursor != null) query.append("cursor", String(args.cursor)) if (args['Idempotency-Key'] != null) headers.set("Idempotency-Key", String(args['Idempotency-Key'])) if (ApiKeyAuth !== undefined) headers.set('authorization', `Bearer ${ApiKeyAuth}`) const url = `${baseUrl.replace(/\/+$/, '')}/api/v1/us/statutes/divisions${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(usStatutesDivisionsResponse, await res.json()) };