import {z} from 'zod' export type GetApiInternationalSearchesArgs = {q?: (string | null) | undefined, limit?: number | undefined, offset?: (number | null) | undefined, cursor?: (string | null) | undefined, start_date?: (string | null) | undefined, end_date?: (string | null) | undefined, tz?: string | undefined}; export type GetApiInternationalSearchesOptions = {baseUrl?: string | undefined, APIKeyHeader?: string | undefined, fetch?: typeof fetch | undefined}; export const v1UserAttributionResponse = z.object({id: z.string(), first_name: z.string(), last_name: z.string(), email: z.string()}); export const taskState = z.enum(["PENDING", "EXECUTING", "COMPLETED", "FAILED", "CANCELLED"]); export const internationalSearchISO2CountryCode = z.enum(["AR", "AU", "AT", "BE", "BR", "CA", "CZ", "DK", "FI", "FR", "DE", "IN", "IE", "IT", "JP", "KE", "LU", "MY", "MX", "NL", "NZ", "NG", "NO", "PL", "PT", "SA", "SK", "ES", "SE", "CH", "TR", "UA", "GB"]); export const v1InternationalAddressSummaryResponse = z.object({premise: z.string().nullable().optional(), thoroughfare: z.string().nullable().optional(), dependent_thoroughfare: z.string().nullable().optional(), locality: z.string(), dependent_locality: z.string().nullable().optional(), administrative_area: z.string().nullable().optional(), postal_code: z.string().nullable().optional(), country_iso_3: z.string().min(3).max(3), latitude: z.number().nullable().optional(), longitude: z.number().nullable().optional(), type: z.string().nullable().optional(), full_address: z.string()}); export const matchType = z.enum(["NO_MATCH", "SIMILAR", "EXACT"]); export const internationalAddressMatchType = z.enum(["NO_MATCH", "REGION", "CITY", "COUNTRY", "EXACT"]); export const v1ScoreType = z.enum(["fraud", "risk", "kyb"]); export const v1ScoreResponse = z.object({type: v1ScoreType, score: z.number(), rating: z.string()}); export const internationalBusinessSearchOptions = z.literal("Order.Enhanced"); export const v1CorporateRegistrationStatus = z.enum(["active", "inactive", "unknown"]); export const v1InternationalSearchISO2CountryCode = z.enum(["AR", "AU", "AT", "BE", "BR", "CA", "CZ", "DK", "FI", "FR", "DE", "IN", "IE", "IT", "JP", "KE", "LU", "MY", "MX", "NL", "NZ", "NG", "NO", "PL", "PT", "SA", "SK", "ES", "SE", "CH", "TR", "UA", "GB"]); export const v1BusinessOrPersonType = z.enum(["Business", "Person"]); export const v1InternationalOfficerDirectorship = z.object({company_name: z.string().nullable().optional(), company_number: z.string().nullable().optional(), title: z.string().nullable().optional(), is_active: z.boolean().nullable().optional()}); export const v1InternationalOfficer = z.object({name: z.string().nullable().optional(), entity_type: v1BusinessOrPersonType.nullable().optional(), date_of_birth: z.string().nullable().optional(), nationality: z.string().nullable().optional(), place_of_residence: z.string().nullable().optional(), place_of_birth: z.string().nullable().optional(), address: z.string().nullable().optional(), id_number: z.string().nullable().optional(), registration_number: z.string().nullable().optional(), titles: z.array(z.string()).optional(), is_active: z.boolean().nullable().optional(), powers: z.array(z.string()).optional(), start_date: z.string().nullable().optional(), end_date: z.string().nullable().optional(), directorships: z.array(v1InternationalOfficerDirectorship).optional()}); export const v1InternationalBeneficialOwner = z.object({name: z.string().nullable().optional(), entity_type: v1BusinessOrPersonType.nullable().optional(), date_of_birth: z.string().nullable().optional(), nationality: z.string().nullable().optional(), place_of_residence: z.string().nullable().optional(), place_of_birth: z.string().nullable().optional(), address: z.string().nullable().optional(), id_number: z.string().nullable().optional(), registration_number: z.string().nullable().optional(), nature_of_control: z.array(z.string()).optional(), notified_date: z.string().nullable().optional(), kind: z.string().nullable().optional(), start_date: z.string().nullable().optional()}); export const v1InternationalShareholder = z.object({name: z.string().nullable().optional(), entity_type: v1BusinessOrPersonType.nullable().optional(), date_of_birth: z.string().nullable().optional(), nationality: z.string().nullable().optional(), place_of_residence: z.string().nullable().optional(), place_of_birth: z.string().nullable().optional(), address: z.string().nullable().optional(), id_number: z.string().nullable().optional(), registration_number: z.string().nullable().optional(), percentage: z.string().nullable().optional(), share_count: z.number().nullable().optional(), total_nominal_value: z.number().nullable().optional(), share_class: z.string().nullable().optional(), beneficially_held: z.boolean().nullable().optional()}); export const v1InternationalShareCapital = z.object({class_code: z.string().nullable().optional(), class_description: z.string().nullable().optional(), quantity: z.number().nullable().optional(), unit_nominal_value: z.number().nullable().optional(), currency: z.string().nullable().optional(), total_nominal_value: z.number().nullable().optional(), voting_rights: z.string().nullable().optional()}); export const v1InternationalCompanyContact = z.object({email: z.string().nullable().optional(), phone: z.string().nullable().optional(), fax: z.string().nullable().optional(), website: z.string().nullable().optional()}); export const v1InternationalCompanyIdentifiers = z.object({tax_id: z.string().nullable().optional(), secondary_registration_number: z.string().nullable().optional(), other_identifiers: z.array(z.string()).optional()}); export const v1InternationalBusinessActivity = z.object({code: z.string().nullable().optional(), description: z.string().nullable().optional()}); export const v1InternationalRegisteredAgent = z.object({name: z.string().nullable().optional(), address: z.string().nullable().optional()}); export const v1InternationalBusinessResponse = z.object({name: z.string(), file_number: z.string(), status: v1CorporateRegistrationStatus, standing: z.string().nullable().optional(), legal_form: z.string().nullable().optional(), country: v1InternationalSearchISO2CountryCode, issue_date: z.string().nullable().optional(), incorporation_date: z.string().nullable().optional(), last_annual_account_date: z.string().nullable().optional(), dissolution_date: z.string().nullable().optional(), dissolved: z.boolean().nullable().optional(), registration_authority: z.string().nullable().optional(), registration_authority_code: z.string().nullable().optional(), registration_type: z.string().nullable().optional(), registry_type: z.string().nullable().optional(), addresses: z.array(v1InternationalAddressSummaryResponse).optional(), alternative_names: z.array(z.string()).optional(), officers: z.array(v1InternationalOfficer).optional(), beneficial_owners: z.array(v1InternationalBeneficialOwner).optional(), shareholders: z.array(v1InternationalShareholder).optional(), share_capital: z.array(v1InternationalShareCapital).optional(), contact: v1InternationalCompanyContact.nullable().optional(), identifiers: v1InternationalCompanyIdentifiers.nullable().optional(), activities: z.array(v1InternationalBusinessActivity).optional(), registered_agent: v1InternationalRegisteredAgent.nullable().optional()}); export const v1InternationalBusinessSearchResponse = z.object({id: z.string(), user: v1UserAttributionResponse.nullable().optional(), state: taskState, name: z.string().nullable().optional(), address: z.string().nullable().optional(), iso2_country_code: internationalSearchISO2CountryCode.nullable().optional(), search_address: v1InternationalAddressSummaryResponse.nullable().optional(), filing_number: z.string().nullable().optional(), reference_id: z.string().nullable().optional(), business_name_match: matchType.nullable().optional(), business_address_match: internationalAddressMatchType.nullable().optional(), filing_number_match: z.boolean().nullable().optional(), created_at: z.string(), updated_at: z.string().nullable().optional(), verified: z.boolean().nullable().optional(), scores: z.array(v1ScoreResponse).nullable().optional(), error: z.string().nullable().optional(), warnings: z.array(z.string()).optional(), options: z.array(internationalBusinessSearchOptions).optional(), business: v1InternationalBusinessResponse.nullable().optional(), url: z.string().min(1).max(2083)}); export const getApiInternationalSearchesResponse = z.array(v1InternationalBusinessSearchResponse); 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 International Searches * * GET /international/searches */ export const getApiInternationalSearches = async (args: GetApiInternationalSearchesArgs, options?: GetApiInternationalSearchesOptions) => { const {baseUrl = "https://api.baselayer.com", fetch: fetchFn = fetch, APIKeyHeader} = 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.limit != null) query.append("limit", String(args.limit)) if (args.offset != null) query.append("offset", String(args.offset)) if (args.cursor != null) query.append("cursor", String(args.cursor)) if (args.start_date != null) query.append("start_date", String(args.start_date)) if (args.end_date != null) query.append("end_date", String(args.end_date)) if (args.tz != null) query.append("tz", String(args.tz)) if (APIKeyHeader !== undefined) headers.set("X-API-Key", APIKeyHeader) const url = `${baseUrl.replace(/\/+$/, '')}/international/searches${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(getApiInternationalSearchesResponse, await res.json()) };