import {z} from 'zod' export type GetApiApiV1UsStatutesResolveArgs = {cite: string, state?: ('federal' | '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, corpusType?: ('CONSTITUTION' | 'REGULATION' | 'STATE' | 'STATE_CONSTITUTION' | 'STATE_RULES' | null) | undefined, 'Idempotency-Key'?: (string | null) | undefined}; export type GetApiApiV1UsStatutesResolveOptions = {baseUrl?: string | undefined, ApiKeyAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const booleanMatchContext = z.object({text: z.string(), highlights: z.array(z.array(z.number().int()))}); export const cfrReferenceCheck = z.object({reference: z.string(), title: z.number().int().nullable().optional(), section: z.string().nullable().optional(), status: z.enum(["held", "not_held", "malformed"]), actId: z.string().nullable().optional(), titleAssumed: z.boolean().optional()}); export const frRelatedDocument = z.object({actId: z.string(), citation: z.string().nullable().optional(), title: z.string().nullable().optional(), documentType: z.string().nullable().optional(), publicationDate: z.string().nullable().optional()}); export const boundedField = z.object({field: z.string(), unit: z.enum(["items", "characters"]), total: z.number().int(), returned: z.number().int(), nextOffset: z.number().int()}); export const responseBounds = z.object({truncated: z.boolean(), fields: z.array(boundedField).optional(), note: z.string().nullable().optional()}); export const pendingAmendment = z.object({id: z.string(), status: z.string().nullable().optional(), cycle: z.number().int().nullable().optional(), effectiveDate: z.string().nullable().optional(), commentPeriodEnd: z.string().nullable().optional(), sourceUrl: z.string().nullable().optional(), textComplete: z.boolean().nullable().optional(), commentDocketIds: z.array(z.string()).optional()}); export const statuteResult = z.object({actId: z.string(), citation: z.string().nullable(), citationShort: z.string().nullable(), title: z.string().nullable(), corpusType: z.string().nullable(), state: z.string().nullable(), source: z.string().nullable(), year: z.number().int().nullable(), relevanceScore: z.number().nullable(), excerpt: z.string(), body: z.string().nullable(), bodyUnavailable: z.boolean().nullable().optional(), bodyUnavailableReason: z.enum(["image_only_source", "misfiled_source_text", "partial_snapshot_text"]).nullable().optional(), bodyNote: z.enum(["fetch_failed", "no_text", "insufficient_credits", "response_size_cap"]).nullable().optional(), bodyServedNote: z.string().nullable().optional(), matchContexts: z.array(booleanMatchContext).nullable().optional(), titleNumber: z.string().nullable(), titleName: z.string().nullable(), chapter: z.string().nullable(), chapterName: z.string().nullable(), sectionNumber: z.string().nullable(), sectionTitle: z.string().nullable(), displayPath: z.string().nullable(), breadcrumb: z.array(z.record(z.string(), z.string())).nullable(), parent: z.record(z.string(), z.unknown()).nullable(), subchapter: z.string().nullable(), subchapterName: z.string().nullable(), part: z.string().nullable(), partName: z.string().nullable(), subpart: z.string().nullable(), subpartName: z.string().nullable(), popularName: z.string().nullable(), actStatus: z.string().nullable(), goodLawStatus: z.string().nullable(), goodLawBasis: z.string().nullable(), currencyNote: z.string().nullable(), renumberedTo: z.string().nullable().optional(), renumberedToLabel: z.string().nullable().optional(), transferredTo: z.string().nullable().optional(), transferredToLabel: z.string().nullable().optional(), issueDate: z.string().nullable(), issueDateRaw: z.string().nullable().optional(), crossReferencesCfr: z.array(z.string()).nullable().optional(), crossReferencesCfrChecked: z.array(cfrReferenceCheck).nullable().optional(), crossReferencesUsc: z.array(z.string()).nullable().optional(), statutoryAuthority: z.array(z.record(z.string(), z.unknown())).nullable().optional(), implementingRegulations: z.array(z.record(z.string(), z.unknown())).nullable().optional(), frRegulationIdNumbers: z.array(z.string()).nullable().optional(), frDocketIds: z.array(z.string()).nullable().optional(), frEffectiveOn: z.string().nullable().optional(), frCommentsCloseOn: z.string().nullable().optional(), frSignificant: z.boolean().nullable().optional(), frCorrectionOf: z.string().nullable().optional(), frCorrections: z.array(z.string()).nullable().optional(), frRegulationsDotGovUrl: z.string().nullable().optional(), frRelatedDocuments: z.array(frRelatedDocument).nullable().optional(), frRelatedDocumentsNote: z.string().nullable().optional(), subject: z.string().nullable().optional(), rescindedOn: z.string().nullable().optional(), rescindedOnRaw: z.string().nullable().optional(), sourceCredit: z.string().nullable().optional(), amendmentYears: z.array(z.number().int()).nullable(), lastAmendedYear: z.number().int().nullable(), amendmentsCount: z.number().int().nullable(), currentThrough: z.string().nullable(), pendingAdoptions: z.array(z.record(z.string(), z.unknown())).nullable().optional(), adoptedAfterCurrentThrough: z.boolean().nullable().optional(), amendmentHistory: z.array(z.string()).nullable().optional(), amendmentHistoryNote: z.string().nullable().optional(), fieldAbsenceNote: z.string().nullable().optional(), citationNote: z.string().nullable().optional(), responseBounds: responseBounds.nullable().optional(), sourceNote: z.string().nullable().optional(), effectiveDate: z.string().nullable(), effectiveDateRaw: z.string().nullable().optional(), historyEffectiveDate: z.string().nullable(), priorEffectiveDates: z.array(z.string()).nullable().optional(), priorEffectiveDatesRaw: z.array(z.string()).nullable().optional(), history: z.string().nullable(), supersededBy: z.string().nullable().optional(), supersedes: z.string().nullable().optional(), pendingAmendments: z.array(pendingAmendment).nullable().optional(), ruleSet: z.string().nullable().optional(), publicLaws: z.array(z.string()).nullable().optional(), federalRegisterCitations: z.array(z.string()).nullable().optional(), granuleId: z.string().nullable().optional(), packageId: z.string().nullable().optional(), htmlUrl: z.string().nullable(), pdfUrl: z.string().nullable(), xmlUrl: z.string().nullable(), textUrl: z.string().nullable(), docxUrl: z.string().nullable().optional(), stateHtmlUrl: z.string().nullable(), govInfoHtmlUrl: z.string().nullable().optional(), govInfoPdfUrl: z.string().nullable().optional(), abstract: z.string().nullable().optional(), agencies: z.array(z.string()).nullable().optional(), agencySlugs: z.array(z.string()).nullable().optional(), topics: z.array(z.string()).nullable().optional(), documentTypeLabel: z.string().nullable().optional(), documentSubtype: z.string().nullable().optional(), action: z.string().nullable().optional(), president: z.string().nullable().optional(), signingDate: z.string().nullable().optional(), signingDateRaw: z.string().nullable().optional(), executiveOrderNumber: z.string().nullable().optional(), proclamationNumber: z.string().nullable().optional(), instrumentNumberSource: z.string().nullable().optional(), datesText: z.string().nullable().optional(), frVolume: z.number().int().nullable().optional(), frStartPage: z.number().int().nullable().optional(), frEndPage: z.number().int().nullable().optional(), wordCount: z.number().int().nullable().optional(), issuingAgency: z.string().nullable().optional(), adoptingCitations: z.array(z.string()).nullable().optional(), lawImplemented: z.string().nullable().optional(), lastAmendedDate: z.string().nullable().optional(), lastAmendedDateRaw: z.string().nullable().optional(), amendmentNote: z.string().nullable().optional(), currencyYear: z.number().int().nullable().optional(), reviewDate: z.string().nullable().optional(), reviewDateRaw: z.string().nullable().optional(), originalEnactmentDate: z.string().nullable().optional(), originalEnactmentDateRaw: z.string().nullable().optional(), releaseDate: z.string().nullable().optional(), releaseDateRaw: z.string().nullable().optional(), documentNumber: z.string().nullable().optional(), caseName: z.string().nullable().optional(), forum: z.string().nullable().optional(), court: z.string().nullable().optional(), relatedDocuments: z.array(z.string()).nullable().optional(), settlementAmount: z.string().nullable().optional(), requesters: z.array(z.string()).nullable().optional(), program: z.string().nullable().optional(), languageCode: z.string().nullable().optional(), volume: z.number().int().nullable().optional(), articleNumber: z.string().nullable().optional(), articleName: z.string().nullable().optional(), ruleSetCode: z.string().nullable().optional(), edition: z.string().nullable().optional(), relatedCitations: z.array(z.string()).nullable().optional(), supersessionActions: z.record(z.string(), z.unknown()).nullable().optional(), subtitle: z.string().nullable().optional(), subtitleName: z.string().nullable().optional(), publisherKey: z.string().nullable().optional(), versionId: z.string().nullable().optional(), referencedShortTitles: z.array(z.string()).nullable().optional(), subjectNumber: z.string().nullable().optional(), audience: z.string().nullable().optional(), sourceCharStart: z.number().int().nullable().optional(), sourceCharEnd: z.number().int().nullable().optional(), matchSegment: z.enum(["rule_text", "source_credit", "note"]).nullable(), matchNoteYear: z.number().int().nullable(), alternateCitations: z.array(z.string()).nullable().optional(), expirationDate: z.string().nullable().optional(), expirationDateRaw: z.string().nullable().optional(), committeeNote: z.string().nullable().optional(), sourcePageStart: z.number().int().nullable().optional(), sourcePageEnd: z.number().int().nullable().optional(), displayLabel: z.string().nullable().optional(), publicationDate: z.string().nullable().optional(), publicationDateRaw: z.string().nullable().optional(), publicLawCites: z.array(z.record(z.string(), z.unknown())).nullable().optional(), topLevelTitle: z.string().nullable().optional(), externalUrl: z.string().nullable(), sourceUrl: z.string().nullable(), sourceUrlNote: z.string().nullable()}); export const citationOutsideFilters = z.object({actId: z.string(), citation: z.string().nullable().optional(), title: z.string().nullable().optional(), state: z.string().nullable().optional(), corpusType: z.string().nullable().optional(), excludedBy: z.array(z.string()).optional()}); export const sessionLawSession = z.object({code: z.string(), label: z.string().nullable().optional(), type: z.string().nullable().optional(), year: z.number().int().nullable().optional()}); export const sessionLawCitationCandidate = z.object({sessionLawId: z.string(), citation: z.string().nullable().optional(), jurisdiction: z.string(), session: sessionLawSession, textStatus: z.enum(["held", "withheld", "not_held", "pending"]), title: z.string().nullable().optional(), billNumber: z.string().nullable().optional(), approvedDate: z.string().nullable().optional(), effectiveFirst: z.string().nullable().optional(), effectiveLast: z.string().nullable().optional(), enactmentOutcome: z.string().nullable().optional(), sourceUrl: z.string().nullable().optional(), href: z.string(), isDefault: z.boolean().optional()}); export const sessionLawCitationMatch = z.object({status: z.enum(["matched", "ambiguous"]), sessionLawId: z.string().nullable().optional(), citation: z.string().nullable().optional(), jurisdiction: z.string().nullable().optional(), session: sessionLawSession.nullable().optional(), textStatus: z.enum(["held", "withheld", "not_held", "pending"]).nullable().optional(), title: z.string().nullable().optional(), billNumber: z.string().nullable().optional(), approvedDate: z.string().nullable().optional(), effectiveFirst: z.string().nullable().optional(), effectiveLast: z.string().nullable().optional(), enactmentOutcome: z.string().nullable().optional(), sourceUrl: z.string().nullable().optional(), href: z.string().nullable().optional(), candidates: z.array(sessionLawCitationCandidate).optional(), defaultSessionLawId: z.string().nullable().optional()}); export const resolveContainerChild = z.object({actId: z.string(), citation: z.string().nullable().optional(), status: z.string().nullable().optional()}); export const resolveContainerInfo = z.object({kind: z.string(), label: z.string(), childCount: z.number().int(), children: z.array(resolveContainerChild).optional(), truncated: z.boolean().optional()}); export const resolveRepairAlternative = z.object({actId: z.string(), citation: z.string().nullable().optional()}); export const resolveRepairInfo = z.object({kind: z.string(), cited: z.string(), interpretedAs: z.string(), alternatives: z.array(resolveRepairAlternative).optional()}); export const resolveRegisterReference = z.object({citation: z.string(), state: z.string(), kind: z.enum(["page", "range", "issue", "filing"]), ruleCount: z.number().int(), rules: z.array(z.string()).optional(), registerItemHeld: z.boolean().optional()}); export const pinpointLeadIn = z.object({path: z.array(z.string()), label: z.string(), text: z.string()}); export const pinpointChild = z.object({path: z.array(z.string()), label: z.string(), level: z.string(), text: z.string(), inferred: z.boolean().optional()}); export const pinpointSiblings = z.object({previous: z.string().nullable().optional(), next: z.string().nullable().optional()}); export const pinpointStructure = z.object({source: z.enum(["artifact", "request_time"]), quality: z.string().nullable().optional(), builder: z.string().nullable().optional(), textSha256: z.string().nullable().optional()}); export const pinpointResult = z.object({requested: z.string(), path: z.array(z.string()).optional(), label: z.string().nullable().optional(), level: z.string().nullable().optional(), inferred: z.boolean().optional(), matched: z.boolean(), matchLevel: z.enum(["exact", "ancestor", "none"]), text: z.string().nullable().optional(), leadIn: z.array(pinpointLeadIn).optional(), fullText: z.string().nullable().optional(), children: z.array(pinpointChild).optional(), siblings: pinpointSiblings.nullable().optional(), charStart: z.number().int().nullable().optional(), charEnd: z.number().int().nullable().optional(), kind: z.enum(["range", "list"]).nullable().optional(), also: z.array(z.string()).optional(), unmatched: z.array(z.string()).optional(), available: z.array(z.string()).optional(), reason: z.string().nullable().optional(), note: z.string().nullable().optional(), structure: pinpointStructure.nullable().optional()}); export const missReasonCandidate = z.object({state: z.string(), actId: z.string(), citation: z.string().nullable().optional(), subsection: z.string().nullable().optional()}); export const statuteResolveResponse = z.object({resolved: z.boolean(), inputCitation: z.string(), section: statuteResult.nullable().optional(), subsection: z.string().nullable().optional(), citationOutsideFilters: citationOutsideFilters.nullable().optional(), matchedCorpus: z.literal("session_law").nullable().optional(), sessionLaw: sessionLawCitationMatch.nullable().optional(), matchLevel: z.enum(["container", "multiple", "repaired", "register_reference"]).nullable().optional(), container: resolveContainerInfo.nullable().optional(), citedSections: z.array(z.string()).nullable().optional(), repair: resolveRepairInfo.nullable().optional(), registerReference: resolveRegisterReference.nullable().optional(), pinpoint: pinpointResult.nullable().optional(), pinpointNote: z.string().nullable().optional(), missReason: z.enum(["not_held", "former_law", "ambiguous_jurisdiction", "malformed", "out_of_scope_corpus", "container_not_supported", "index_warming", "lookup_failed", "miss_reason_unavailable"]).nullable().optional(), candidates: z.array(missReasonCandidate).nullable().optional(), missReasonHint: 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 }; /** * Resolve a citation to its section * * GET /api/v1/us/statutes/resolve * * Also accepts auth: ApiKeyHeader */ export const getApiApiV1UsStatutesResolve = async (args: GetApiApiV1UsStatutesResolveArgs, options?: GetApiApiV1UsStatutesResolveOptions) => { 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.cite != null) query.append("cite", String(args.cite)) if (args.state != null) query.append("state", String(args.state)) if (args.corpusType != null) query.append("corpusType", String(args.corpusType)) 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/resolve${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(statuteResolveResponse, await res.json()) };