import {z} from 'zod' export type GetApiApiV1ExternalTariffsLookupArgs = {hsCode: string, originCountry: string, destinationCountry: string, customsValue?: number | undefined, currency?: string | undefined, entryDate?: string | undefined, dateOfLoading?: string | undefined, transportMode?: ('ocean' | 'air' | 'land' | 'rail') | undefined, componentValues?: string | undefined, exclusionCodes?: string | undefined, includeFtaOptions?: ('true' | 'false') | undefined, applyFtaProgram?: string | undefined, weightKg?: number | undefined}; export type GetApiApiV1ExternalTariffsLookupOptions = {baseUrl?: string | undefined, bearerAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const importProhibition = z.object({description: z.string(), effectiveFrom: z.string(), authority: z.string().optional(), sourceReference: z.string().optional(), condition: z.string().optional(), supersededDuties: z.array(z.string()).optional()}); export const getApiApiV1ExternalTariffsLookupResponse = z.object({success: z.boolean().optional(), data: z.object({tariffLine: z.object({id: z.string().optional(), code: z.string().optional(), description: z.string().optional(), fullDescription: z.string().optional(), hs6: z.string().optional(), uomPrimary: z.string().optional()}).optional(), applicableRate: z.object({regime: z.string().optional(), programCode: z.string().optional(), rateType: z.string().optional(), adValoremRate: z.number().optional(), formulaDescription: z.string().optional()}).optional(), baseRate: z.object({}).optional(), mfnRate: z.number().optional(), additionalDuties: z.array(z.object({programCode: z.string().optional(), programName: z.string().optional(), rate: z.number().optional(), rateType: z.string().optional()})).optional(), calculation: z.object({dutyAmount: z.number().optional(), baseDutyAmount: z.number().optional(), additionalDutyAmount: z.number().optional(), currency: z.string().optional(), effectiveRate: z.number().optional()}).optional(), ftaOptions: z.array(z.object({program: z.string().optional(), programName: z.string().optional(), rate: z.number().optional()})).optional(), customsFees: z.object({totalFees: z.number().optional(), fees: z.array(z.object({})).optional()}).optional(), landedCost: z.object({customsValue: z.number().optional(), totalDuties: z.number().optional(), totalFees: z.number().optional(), grandTotal: z.number().optional()}).optional(), importProhibitions: z.array(importProhibition).optional(), appliedCh98Provision: z.object({code: z.string().optional(), dutyBasis: z.enum(["full_value", "foreign_value_add", "repair_value", "duty_equivalent", "ordinary_rate", "zero"]).optional(), dutiableValue: z.number().optional(), unresolved: z.boolean().optional(), attestations: z.array(z.string()).optional()}).optional(), warnings: z.array(z.object({code: z.enum(["us_origin_no_chapter_98_claim", "us_goods_returned_claim", "section_232_on_us_goods_returned"]).optional(), severity: z.enum(["warning", "info"]).optional(), message: z.string().optional(), suggestedClaimCode: z.string().optional()})).optional()}).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 }; /** * Look up duty rates by HS code * * GET /api/v1/external/tariffs/lookup */ export const getApiApiV1ExternalTariffsLookup = async (args: GetApiApiV1ExternalTariffsLookupArgs, options?: GetApiApiV1ExternalTariffsLookupOptions) => { const {baseUrl = "https://api.wove.com", fetch: fetchFn = fetch, bearerAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.hsCode != null) query.append("hsCode", String(args.hsCode)) if (args.originCountry != null) query.append("originCountry", String(args.originCountry)) if (args.destinationCountry != null) query.append("destinationCountry", String(args.destinationCountry)) if (args.customsValue != null) query.append("customsValue", String(args.customsValue)) if (args.currency != null) query.append("currency", String(args.currency)) if (args.entryDate != null) query.append("entryDate", String(args.entryDate)) if (args.dateOfLoading != null) query.append("dateOfLoading", String(args.dateOfLoading)) if (args.transportMode != null) query.append("transportMode", String(args.transportMode)) if (args.componentValues != null) query.append("componentValues", String(args.componentValues)) if (args.exclusionCodes != null) query.append("exclusionCodes", String(args.exclusionCodes)) if (args.includeFtaOptions != null) query.append("includeFtaOptions", String(args.includeFtaOptions)) if (args.applyFtaProgram != null) query.append("applyFtaProgram", String(args.applyFtaProgram)) if (args.weightKg != null) query.append("weightKg", String(args.weightKg)) if (bearerAuth !== undefined) headers.set('authorization', `Bearer ${bearerAuth}`) const url = `${baseUrl.replace(/\/+$/, '')}/api/v1/external/tariffs/lookup${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(getApiApiV1ExternalTariffsLookupResponse, await res.json()) };