import {z} from 'zod' export type GetApiV1LegalSearchArgs = {q?: string | undefined, from_hit?: number | undefined, hits_returned?: number | undefined, type?: ('' | 'admin_fines' | 'adrs' | 'advisory_opinions' | 'murs' | 'statutes') | undefined, ao_no?: Array | undefined, ao_year?: number | undefined, ao_name?: Array | undefined, ao_min_issue_date?: string | undefined, ao_max_issue_date?: string | undefined, ao_min_request_date?: string | undefined, ao_max_request_date?: string | undefined, ao_min_document_date?: string | undefined, ao_max_document_date?: string | undefined, ao_doc_category_id?: (Array<'' | 'F' | 'V' | 'D' | 'R' | 'W' | 'C' | 'S'>) | undefined, ao_is_pending?: boolean | undefined, ao_status?: string | undefined, ao_requestor?: string | undefined, ao_requestor_type?: (Array<'' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | '13' | '14' | '15' | '16'>) | undefined, ao_regulatory_citation?: Array | undefined, ao_statutory_citation?: Array | undefined, ao_citation_require_all?: boolean | undefined, ao_commenter?: string | undefined, ao_representative?: string | undefined, case_no?: Array | undefined, case_respondents?: string | undefined, case_election_cycles?: number | undefined, case_min_open_date?: string | undefined, primary_subject_id?: (Array<'' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | '13' | '14' | '15' | '16' | '17' | '18' | '19' | '20'>) | undefined, secondary_subject_id?: (Array<'' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | '13' | '14' | '15' | '16' | '17' | '18'>) | undefined, case_max_open_date?: string | undefined, case_min_close_date?: string | undefined, case_max_close_date?: string | undefined, case_min_document_date?: string | undefined, case_max_document_date?: string | undefined, case_regulatory_citation?: Array | undefined, case_statutory_citation?: Array | undefined, case_citation_require_all?: boolean | undefined, q_exclude?: string | undefined, case_doc_category_id?: (Array<'' | '1' | '2' | '3' | '4' | '5' | '6' | '1001' | '1002' | '1003' | '1004' | '1005' | '1006' | '2001'>) | undefined, mur_type?: ('' | 'archived' | 'current') | undefined, mur_disposition_category_id?: (Array<'' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | '13' | '14' | '15' | '16'>) | undefined, af_name?: Array | undefined, af_committee_id?: string | undefined, af_report_year?: string | undefined, af_min_rtb_date?: string | undefined, af_max_rtb_date?: string | undefined, af_rtb_fine_amount?: number | undefined, af_min_fd_date?: string | undefined, af_max_fd_date?: string | undefined, af_fd_fine_amount?: number | undefined, sort?: string | undefined, case_min_penalty_amount?: string | undefined, case_max_penalty_amount?: string | undefined, q_proximity?: Array | undefined, max_gaps?: number | undefined, proximity_preserve_order?: boolean | undefined, proximity_filter?: ('after' | 'before') | undefined, proximity_filter_term?: string | undefined, filename?: string | undefined, api_key?: string | undefined}; export type GetApiV1LegalSearchOptions = {baseUrl: string, ApiKeyHeaderAuth?: string | undefined, ApiKeyQueryAuth?: string | undefined, apiKey?: string | undefined, fetch?: typeof fetch | undefined}; export const getApiV1LegalSearchResponse = z.object({admin_fines: z.array(z.object({challenge_outcome: z.string().optional(), challenge_receipt_date: z.string().optional(), check_amount: z.number().optional(), commission_votes: z.array(z.object({action: z.string().optional(), vote_date: z.string().optional()})).optional(), committee_id: z.string().optional(), doc_id: z.string().optional(), document_highlights: z.object({}).optional(), documents: z.array(z.object({category: z.string().optional(), description: z.string().optional(), document_date: z.string().optional(), document_id: z.number().int().optional(), length: z.number().int().optional(), url: z.string().optional()})).optional(), final_determination_amount: z.number().optional(), final_determination_date: z.string().optional(), highlights: z.array(z.string()).optional(), name: z.string().optional(), no: z.string().optional(), petition_court_decision_date: z.string().optional(), petition_court_filing_date: z.string().optional(), reason_to_believe_action_date: z.string().optional(), reason_to_believe_fine_amount: z.number().optional(), report_type: z.string().optional(), report_year: z.string().optional(), treasury_referral_amount: z.number().optional(), treasury_referral_date: z.string().optional(), url: z.string().optional()})).optional(), adrs: z.array(z.object({close_date: z.string().optional(), commission_votes: z.array(z.object({action: z.string().optional(), vote_date: z.string().optional()})).optional(), dispositions: z.array(z.object({citations: z.array(z.object({text: z.string().optional(), title: z.string().optional(), type: z.string().optional(), url: z.string().optional()})).optional(), disposition: z.string().optional(), penalty: z.number().optional(), respondent: z.string().optional()})).optional(), doc_id: z.string().optional(), document_highlights: z.object({}).optional(), documents: z.array(z.object({category: z.string().optional(), description: z.string().optional(), document_date: z.string().optional(), document_id: z.number().int().optional(), length: z.number().int().optional(), url: z.string().optional()})).optional(), election_cycles: z.number().int().optional(), highlights: z.array(z.string()).optional(), name: z.string().optional(), no: z.string().optional(), open_date: z.string().optional(), participants: z.array(z.object({citations: z.object({}).optional(), name: z.string().optional(), role: z.string().optional()})).optional(), respondents: z.array(z.string()).optional(), subjects: z.array(z.string()).optional(), url: z.string().optional()})).optional(), advisory_opinions: z.array(z.object({ao_citations: z.array(z.object({name: z.string().optional(), no: z.string().optional()})).optional(), aos_cited_by: z.array(z.object({name: z.string().optional(), no: z.string().optional()})).optional(), commenter_names: z.array(z.string()).optional(), document_highlights: z.object({}).optional(), documents: z.array(z.object({category: z.string().optional(), date: z.string().optional(), description: z.string().optional(), document_id: z.number().int().optional(), url: z.string().optional()})).optional(), entities: z.array(z.object({name: z.string().optional(), role: z.string().optional(), type: z.string().optional()})).optional(), highlights: z.array(z.string()).optional(), is_pending: z.boolean().optional(), issue_date: z.string().optional(), name: z.string().optional(), no: z.string().optional(), regulatory_citations: z.array(z.object({part: z.number().int().optional(), section: z.number().int().optional(), title: z.number().int().optional()})).optional(), representative_names: z.array(z.string()).optional(), request_date: z.string().optional(), requestor_names: z.array(z.string()).optional(), requestor_types: z.array(z.string()).optional(), status: z.string().optional(), statutory_citations: z.array(z.object({section: z.string().optional(), title: z.number().int().optional()})).optional(), summary: z.string().optional()})).optional(), murs: z.array(z.object({close_date: z.string().optional(), commission_votes: z.array(z.object({action: z.string().optional(), vote_date: z.string().optional()})).optional(), dispositions: z.array(z.object({citations: z.array(z.object({text: z.string().optional(), title: z.string().optional(), type: z.string().optional(), url: z.string().optional()})).optional(), disposition: z.string().optional(), penalty: z.number().optional(), respondent: z.string().optional()})).optional(), doc_id: z.string().optional(), document_highlights: z.object({}).optional(), documents: z.array(z.object({category: z.string().optional(), description: z.string().optional(), document_date: z.string().optional(), document_id: z.number().int().optional(), length: z.number().int().optional(), url: z.string().optional()})).optional(), election_cycles: z.number().int().optional(), highlights: z.array(z.string()).optional(), mur_type: z.enum(["current", "archived"]).optional(), name: z.string().optional(), no: z.string().optional(), open_date: z.string().optional(), participants: z.array(z.object({citations: z.object({}).optional(), name: z.string().optional(), role: z.string().optional()})).optional(), respondents: z.array(z.string()).optional(), subjects: z.array(z.string()).optional(), url: z.string().optional()})).optional(), statutes: z.array(z.object({chapter: z.string().optional(), doc_id: z.string().optional(), document_highlights: z.object({}).optional(), highlights: z.array(z.string()).optional(), name: z.string().optional(), no: z.string().optional(), title: z.string().optional(), url: z.string().optional()})).optional(), total_admin_fines: z.number().int().optional(), total_adrs: z.number().int().optional(), total_advisory_opinions: z.number().int().optional(), total_all: z.number().int().optional(), total_murs: z.number().int().optional(), total_statutes: z.number().int().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 }; /** * GET /v1/legal/search/ */ export const getApiV1LegalSearch = async (args: GetApiV1LegalSearchArgs, options: GetApiV1LegalSearchOptions) => { const {baseUrl, fetch: fetchFn = fetch, ApiKeyHeaderAuth, ApiKeyQueryAuth, apiKey} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.q != null) query.append("q", String(args.q)) if (args.from_hit != null) query.append("from_hit", String(args.from_hit)) if (args.hits_returned != null) query.append("hits_returned", String(args.hits_returned)) if (args.type != null) query.append("type", String(args.type)) for (const item of args.ao_no ?? []) query.append("ao_no", String(item)) if (args.ao_year != null) query.append("ao_year", String(args.ao_year)) for (const item of args.ao_name ?? []) query.append("ao_name", String(item)) if (args.ao_min_issue_date != null) query.append("ao_min_issue_date", String(args.ao_min_issue_date)) if (args.ao_max_issue_date != null) query.append("ao_max_issue_date", String(args.ao_max_issue_date)) if (args.ao_min_request_date != null) query.append("ao_min_request_date", String(args.ao_min_request_date)) if (args.ao_max_request_date != null) query.append("ao_max_request_date", String(args.ao_max_request_date)) if (args.ao_min_document_date != null) query.append("ao_min_document_date", String(args.ao_min_document_date)) if (args.ao_max_document_date != null) query.append("ao_max_document_date", String(args.ao_max_document_date)) for (const item of args.ao_doc_category_id ?? []) query.append("ao_doc_category_id", String(item)) if (args.ao_is_pending != null) query.append("ao_is_pending", String(args.ao_is_pending)) if (args.ao_status != null) query.append("ao_status", String(args.ao_status)) if (args.ao_requestor != null) query.append("ao_requestor", String(args.ao_requestor)) for (const item of args.ao_requestor_type ?? []) query.append("ao_requestor_type", String(item)) for (const item of args.ao_regulatory_citation ?? []) query.append("ao_regulatory_citation", String(item)) for (const item of args.ao_statutory_citation ?? []) query.append("ao_statutory_citation", String(item)) if (args.ao_citation_require_all != null) query.append("ao_citation_require_all", String(args.ao_citation_require_all)) if (args.ao_commenter != null) query.append("ao_commenter", String(args.ao_commenter)) if (args.ao_representative != null) query.append("ao_representative", String(args.ao_representative)) for (const item of args.case_no ?? []) query.append("case_no", String(item)) if (args.case_respondents != null) query.append("case_respondents", String(args.case_respondents)) if (args.case_election_cycles != null) query.append("case_election_cycles", String(args.case_election_cycles)) if (args.case_min_open_date != null) query.append("case_min_open_date", String(args.case_min_open_date)) for (const item of args.primary_subject_id ?? []) query.append("primary_subject_id", String(item)) for (const item of args.secondary_subject_id ?? []) query.append("secondary_subject_id", String(item)) if (args.case_max_open_date != null) query.append("case_max_open_date", String(args.case_max_open_date)) if (args.case_min_close_date != null) query.append("case_min_close_date", String(args.case_min_close_date)) if (args.case_max_close_date != null) query.append("case_max_close_date", String(args.case_max_close_date)) if (args.case_min_document_date != null) query.append("case_min_document_date", String(args.case_min_document_date)) if (args.case_max_document_date != null) query.append("case_max_document_date", String(args.case_max_document_date)) for (const item of args.case_regulatory_citation ?? []) query.append("case_regulatory_citation", String(item)) for (const item of args.case_statutory_citation ?? []) query.append("case_statutory_citation", String(item)) if (args.case_citation_require_all != null) query.append("case_citation_require_all", String(args.case_citation_require_all)) if (args.q_exclude != null) query.append("q_exclude", String(args.q_exclude)) for (const item of args.case_doc_category_id ?? []) query.append("case_doc_category_id", String(item)) if (args.mur_type != null) query.append("mur_type", String(args.mur_type)) for (const item of args.mur_disposition_category_id ?? []) query.append("mur_disposition_category_id", String(item)) for (const item of args.af_name ?? []) query.append("af_name", String(item)) if (args.af_committee_id != null) query.append("af_committee_id", String(args.af_committee_id)) if (args.af_report_year != null) query.append("af_report_year", String(args.af_report_year)) if (args.af_min_rtb_date != null) query.append("af_min_rtb_date", String(args.af_min_rtb_date)) if (args.af_max_rtb_date != null) query.append("af_max_rtb_date", String(args.af_max_rtb_date)) if (args.af_rtb_fine_amount != null) query.append("af_rtb_fine_amount", String(args.af_rtb_fine_amount)) if (args.af_min_fd_date != null) query.append("af_min_fd_date", String(args.af_min_fd_date)) if (args.af_max_fd_date != null) query.append("af_max_fd_date", String(args.af_max_fd_date)) if (args.af_fd_fine_amount != null) query.append("af_fd_fine_amount", String(args.af_fd_fine_amount)) if (args.sort != null) query.append("sort", String(args.sort)) if (args.case_min_penalty_amount != null) query.append("case_min_penalty_amount", String(args.case_min_penalty_amount)) if (args.case_max_penalty_amount != null) query.append("case_max_penalty_amount", String(args.case_max_penalty_amount)) for (const item of args.q_proximity ?? []) query.append("q_proximity", String(item)) if (args.max_gaps != null) query.append("max_gaps", String(args.max_gaps)) if (args.proximity_preserve_order != null) query.append("proximity_preserve_order", String(args.proximity_preserve_order)) if (args.proximity_filter != null) query.append("proximity_filter", String(args.proximity_filter)) if (args.proximity_filter_term != null) query.append("proximity_filter_term", String(args.proximity_filter_term)) if (args.filename != null) query.append("filename", String(args.filename)) if (args.api_key != null) query.append("api_key", String(args.api_key)) if (ApiKeyHeaderAuth !== undefined) headers.set("X-Api-Key", ApiKeyHeaderAuth) if (ApiKeyQueryAuth !== undefined) query.set("api_key", ApiKeyQueryAuth) if (apiKey !== undefined) query.set("api_key", apiKey) const url = `${baseUrl.replace(/\/+$/, '')}/v1/legal/search/${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(getApiV1LegalSearchResponse, await res.json()) };