import {z} from 'zod' export type GetApiExpenseLinesArgs = {limit?: number | undefined, offset?: number | undefined, order_by?: string | undefined, dir?: ('asc' | 'desc') | undefined, return_object?: ('limited' | 'shallow' | 'none') | undefined, filter?: string | undefined}; export type GetApiExpenseLinesOptions = {baseUrl?: string | undefined, internalApiKey?: string | undefined, fetch?: typeof fetch | undefined}; export const userSimple = z.object({"account-security-type": z.number().int().optional(), active: z.boolean().optional(), "aic-user": z.boolean().optional(), "analytics-user": z.boolean().optional(), "api-user": z.boolean().optional(), "authentication-method": z.string().optional(), "avatar-thumb-url": z.string().optional(), "business-function": z.string().optional(), "business-group-security-type": z.number().int().optional(), "ccw-user": z.boolean().optional(), "contracts-user": z.boolean().optional(), "created-at": z.string().optional(), "default-locale": z.string().optional(), "edit-invoice-on-quick-entry": z.boolean().optional(), email: z.string(), "employee-number": z.string().optional(), "expense-user": z.boolean().optional(), firstname: z.string(), fullname: z.string().optional(), "generate-password-and-notify": z.enum(["Yes", "No"]).optional(), id: z.number().int().optional(), "inventory-user": z.boolean().optional(), lastname: z.string(), login: z.string(), "mention-name": z.string().optional(), password: z.string().optional(), "purchasing-user": z.boolean().optional(), "salesforce-enabled": z.boolean().optional(), "salesforce-id": z.string(), "seniority-level": z.string().optional(), "sourcing-user": z.boolean().optional(), "spend-guard-user": z.boolean().optional(), "sso-identifier": z.string().optional(), "updated-at": z.string().optional()}); export const currency = z.object({code: z.string(), "created-by": userSimple.optional(), decimals: z.number().int().optional(), enabled: z.boolean().optional(), id: z.number().int().optional(), name: z.string(), symbol: z.string().optional(), "updated-by": userSimple.optional()}); export const businessGroup = z.object({"created-at": z.string().optional(), "created-by": userSimple.optional(), description: z.string().optional(), id: z.number().int().optional(), name: z.string(), "updated-at": z.string().optional(), "updated-by": userSimple.optional()}); export const country = z.object({code: z.string().optional(), id: z.number().int().optional(), name: z.string().optional()}); export const purpose = z.object({"created-at": z.string().optional(), id: z.number().int().optional(), name: z.string().optional(), "updated-at": z.string().optional()}); export const address = z.object({active: z.boolean().optional(), attention: z.string().optional(), "business-group-name": z.string().optional(), city: z.string(), "content-groups": businessGroup.optional(), country: country, "created-at": z.string().optional(), "created-by": userSimple.optional(), id: z.number().int().optional(), "local-tax-number": z.string(), "location-code": z.string().optional(), name: z.string().optional(), "postal-code": z.string(), purposes: purpose.optional(), state: z.string().optional(), street1: z.string(), street2: z.string().optional(), street3: z.string().optional(), street4: z.string().optional(), "updated-at": z.string().optional(), "updated-by": userSimple.optional(), "vat-country": country.optional(), "vat-number": z.string().optional()}); export const phoneNumber = z.object({"area-code": z.string().optional(), "country-code": z.string().optional(), "created-at": z.string().optional(), "created-by": userSimple.optional(), extension: z.string().optional(), id: z.number().int().optional(), number: z.string().optional(), "updated-at": z.string().optional(), "updated-by": userSimple.optional()}); export const contact = z.object({"created-at": z.string().optional(), "created-by": userSimple.optional(), email: z.string().optional(), id: z.number().int().optional(), "name-additional": z.string().optional(), "name-family": z.string().optional(), "name-fullname": z.string().optional(), "name-given": z.string().optional(), "name-prefix": z.string().optional(), "name-suffix": z.string().optional(), notes: z.string().optional(), "phone-fax": phoneNumber.optional(), "phone-mobile": phoneNumber.optional(), "phone-work": phoneNumber.optional(), photo: z.string().optional(), purposes: purpose.optional(), "updated-at": z.string().optional(), "updated-by": userSimple.optional()}); export const accountType = z.object({active: z.boolean().optional(), "created-at": z.string().optional(), "created-by": userSimple.optional(), currency: currency, id: z.number().int().optional(), "legal-entity-name": z.string().optional(), name: z.string(), "primary-address": address.optional(), "primary-contact": contact.optional(), "updated-at": z.string().optional(), "updated-by": userSimple.optional()}); export const account = z.object({"account-type": accountType, active: z.boolean().optional(), code: z.string().optional(), "created-at": z.string().optional(), "created-by": userSimple.optional(), id: z.number().int().optional(), name: z.string().optional(), "segment-1": z.string().optional(), "segment-10": z.string().optional(), "segment-11": z.string().optional(), "segment-12": z.string().optional(), "segment-13": z.string().optional(), "segment-14": z.string().optional(), "segment-15": z.string().optional(), "segment-16": z.string().optional(), "segment-17": z.string().optional(), "segment-18": z.string().optional(), "segment-19": z.string().optional(), "segment-2": z.string().optional(), "segment-20": z.string().optional(), "segment-3": z.string().optional(), "segment-4": z.string().optional(), "segment-5": z.string().optional(), "segment-6": z.string().optional(), "segment-7": z.string().optional(), "segment-8": z.string().optional(), "segment-9": z.string().optional(), "updated-at": z.string().optional(), "updated-by": userSimple.optional()}); export const period = z.object({"account-type": accountType.optional(), "created-at": z.string().optional(), "created-by": userSimple.optional(), "end-date": z.string(), id: z.number().int().optional(), "is-open": z.boolean().optional(), name: z.string(), "segment-1": z.boolean().optional(), "segment-10": z.boolean().optional(), "segment-11": z.boolean().optional(), "segment-12": z.boolean().optional(), "segment-13": z.boolean().optional(), "segment-14": z.boolean().optional(), "segment-15": z.boolean().optional(), "segment-16": z.boolean().optional(), "segment-17": z.boolean().optional(), "segment-18": z.boolean().optional(), "segment-19": z.boolean().optional(), "segment-2": z.boolean().optional(), "segment-20": z.boolean().optional(), "segment-3": z.boolean().optional(), "segment-4": z.boolean().optional(), "segment-5": z.boolean().optional(), "segment-6": z.boolean().optional(), "segment-7": z.boolean().optional(), "segment-8": z.boolean().optional(), "segment-9": z.boolean().optional(), "start-date": z.string(), "updated-at": z.string().optional(), "updated-by": userSimple.optional()}); export const expenseLineAllocation = z.object({account: account, amount: z.number().optional(), "created-at": z.string().optional(), "created-by": userSimple.optional(), id: z.number().int().optional(), pct: z.number(), period: period.optional(), "read-only": z.boolean().optional(), "updated-at": z.string().optional(), "updated-by": userSimple.optional()}); export const auditStatus = z.object({}); export const expenseArtifact = z.object({"created-at": z.string().optional(), "created-by": userSimple.optional(), "external-src-ref": z.string().optional(), id: z.number().int().optional(), "image-content-type": z.string().optional(), "image-file-name": z.string().optional(), "image-file-size": z.string().optional(), "ocr-status": z.string().optional(), "source-content-type": z.string().optional(), "source-file-name": z.string().optional(), "source-file-size": z.string().optional(), "updated-at": z.string().optional(), "updated-by": userSimple.optional(), url: z.string().optional()}); export const expenseAttendee = z.object({active: z.boolean().optional(), company: z.string().optional(), "created-at": z.string().optional(), "created-by": userSimple.optional(), "expense-attendee-type-custom-field-1": z.string().optional(), "expense-attendee-type-custom-field-10": z.string().optional(), "expense-attendee-type-custom-field-2": z.string().optional(), "expense-attendee-type-custom-field-3": z.string().optional(), "expense-attendee-type-custom-field-4": z.string().optional(), "expense-attendee-type-custom-field-5": z.string().optional(), "expense-attendee-type-custom-field-6": z.string().optional(), "expense-attendee-type-custom-field-7": z.string().optional(), "expense-attendee-type-custom-field-8": z.string().optional(), "expense-attendee-type-custom-field-9": z.string().optional(), "expense-attendee-type-id": z.number().int().optional(), "expense-attendee-type-name": z.string().optional(), "first-name": z.string(), id: z.number().int().optional(), "last-name": z.string(), title: z.string().optional(), "updated-at": z.string().optional(), "user-id": z.number().int().optional()}); export const expenseAttendeeType = z.object({"active-dependent-fields": z.string().optional(), "attendee-src": z.string().optional(), "created-at": z.string().optional(), id: z.number().int().optional(), name: z.string(), "updated-at": z.string().optional()}); export const expenseMileageRateType = z.object({"created-at": z.string().optional(), id: z.number().int().optional(), name: z.string().optional(), "rate-type": z.string().optional(), "updated-at": z.string().optional()}); export const expenseMileageTierRule = z.object({"created-at": z.string().optional(), "distance-range-start": z.number().int().optional(), "expense-mileage-rate-type": expenseMileageRateType.optional(), id: z.number().int().optional(), "updated-at": z.string().optional()}); export const expenseMileageConfig = z.object({"accumulation-period-start-day-month": z.string(), country: country.optional(), "created-at": z.string().optional(), "distance-unit": z.string().optional(), "expense-mileage-tier-rules": expenseMileageTierRule.optional(), id: z.number().int().optional(), "mileage-accumulation-rule-enabled": z.boolean().optional(), "passenger-count-prompt": z.string(), "passenger-count-rule-enabled": z.boolean().optional(), "region-prompt": z.string(), "region-rule-enabled": z.boolean().optional(), "require-address": z.boolean().optional(), "show-map": z.boolean().optional(), "simple-fixed-rate-amount": z.number(), "simple-fixed-rate-currency-id": z.number().int(), "simple-fixed-rate-enabled": z.boolean().optional(), "updated-at": z.string().optional(), "vehicle-type-prompt": z.string(), "vehicle-type-rule-enabled": z.boolean().optional()}); export const expensePerDiemDeduction = z.object({"created-at": z.string().optional(), "effective-date": z.string().optional(), enabled: z.boolean().optional(), "expense-per-diem-deduction-type-id": z.number().int().optional(), id: z.number().int().optional(), label: z.string(), "updated-at": z.string().optional()}); export const expensePerDiemRuleCondition = z.object({comparator: z.string().optional(), "created-at": z.string().optional(), id: z.number().int().optional(), lhs: z.string().optional(), rhs: z.string().optional(), "updated-at": z.string().optional()}); export const expensePerDiemTimeRangeCondition = z.object({conjunction: z.string().optional(), "created-at": z.string().optional(), "end-after": z.string().optional(), "end-before": z.string().optional(), id: z.number().int().optional(), "start-after": z.string().optional(), "start-before": z.string().optional(), "updated-at": z.string().optional()}); export const expensePerDiemRule = z.object({"created-at": z.string().optional(), "effective-date": z.string().optional(), enabled: z.boolean().optional(), "end-after": z.string(), "end-before": z.string(), "expense-per-diem-rate-type-id": z.number().int().optional(), "expense-per-diem-rule-conditions": expensePerDiemRuleCondition.optional(), "expense-per-diem-time-range-condition": expensePerDiemTimeRangeCondition.optional(), hours: z.number(), id: z.number().int().optional(), label: z.string(), rank: z.number().int().optional(), "rate-frequency": z.string().optional(), "rate-location-type": z.string().optional(), "rate-logic": z.number().int().optional(), "rate-percentage": z.number().optional(), "rule-type": z.string().optional(), "start-after": z.string(), "start-before": z.string(), "updated-at": z.string().optional()}); export const expensePerDiemConfig = z.object({"country-id": z.number().int().optional(), "created-at": z.string().optional(), "deductions-section-label": z.string(), "expense-per-diem-deductions": expensePerDiemDeduction.optional(), "expense-per-diem-rules": expensePerDiemRule.optional(), id: z.number().int().optional(), "policy-description": z.string().optional(), "policy-title": z.string().optional(), "rule-set-type": z.string().optional(), scope: z.string().optional(), "updated-at": z.string().optional()}); export const expensePolicy = z.object({active: z.boolean().optional(), "allow-divisor": z.boolean().optional(), "allow-divisor-end-date": z.boolean().optional(), "allow-itemization": z.boolean().optional(), "created-at": z.string().optional(), "created-by": userSimple.optional(), "divisor-end-name": z.string().optional(), "divisor-start-name": z.string().optional(), "divisor-uom-name": z.string().optional(), "expense-category-ids": z.string().optional(), id: z.number().int().optional(), "limit-amount": z.number().optional(), "limit-type": z.string().optional(), "requires-receipt": z.boolean().optional(), "restrict-itemization-categories": z.boolean().optional(), summary: z.string().optional(), text: z.string().optional(), "updated-at": z.string().optional(), "updated-by": userSimple.optional()}); export const expenseCategory = z.object({active: z.boolean().optional(), "attendee-tracking-enabled": z.boolean().optional(), "created-at": z.string().optional(), "created-by": userSimple.optional(), "expense-attendee-types": expenseAttendeeType.optional(), "expense-mileage-config": expenseMileageConfig, "expense-per-diem-config": expensePerDiemConfig, "expense-policy": expensePolicy, id: z.number().int().optional(), name: z.string(), scope: z.string().optional(), type: z.string().optional(), "updated-at": z.string().optional(), "updated-by": userSimple.optional()}); export const expenseLineImportedData = z.object({amount: z.number().optional(), description: z.string().optional(), id: z.number().int().optional()}); export const expenseLineMileageAllocation = z.object({"applied-distance": z.number().optional(), "applied-rate": z.number().optional(), "created-at": z.string().optional(), "expense-mileage-rate-type-id": z.number().int().optional(), id: z.number().int().optional(), "updated-at": z.string().optional()}); export const expenseMileageRegion = z.object({country: country.optional(), "created-at": z.string().optional(), id: z.number().int().optional(), "location-id": z.string().optional(), name: z.string().optional(), "updated-at": z.string().optional()}); export const expenseMileageVehicleType = z.object({"created-at": z.string().optional(), id: z.number().int().optional(), name: z.string().optional(), "updated-at": z.string().optional()}); export const expenseLineMileage = z.object({"created-at": z.string().optional(), distance: z.number(), "distance-unit": z.string(), "end-address": z.string(), "expense-line-mileage-allocations": expenseLineMileageAllocation.optional(), "expense-mileage-region": expenseMileageRegion.optional(), "expense-mileage-region-id": z.number().int(), "expense-mileage-vehicle-type": expenseMileageVehicleType.optional(), "expense-mileage-vehicle-type-id": z.number().int(), id: z.number().int().optional(), "passenger-count": z.number().int().optional(), "round-trip": z.boolean().optional(), "start-address": z.string(), "updated-at": z.string().optional()}); export const expenseLinePerDiem = z.object({"created-at": z.string().optional(), "daily-per-diems": z.string().optional(), destination: z.string(), "end-at": z.string(), "end-at-timezone": z.string(), id: z.number().int().optional(), "start-at": z.string(), "start-at-timezone": z.string(), "updated-at": z.string().optional()}); export const expensePreapproval = z.object({amount: z.number(), available: z.boolean().optional(), "available-amount": z.number().optional(), "available-amount-currency": currency.optional(), "created-at": z.string().optional(), "created-by": userSimple.optional(), currency: currency.optional(), description: z.string(), "end-date": z.string().optional(), "for-user": userSimple.optional(), id: z.number().int().optional(), "start-date": z.string().optional(), type: z.string().optional(), "updated-at": z.string().optional(), "updated-by": userSimple.optional()}); export const expenseReportPreapproval = z.object({amount: z.number().optional(), "created-at": z.string().optional(), currency: currency.optional(), "expense-preapproval": expensePreapproval.optional(), id: z.number().int().optional(), "updated-at": z.string().optional()}); export const expenseLinePreapproval = z.object({amount: z.number().optional(), "created-at": z.string().optional(), currency: currency.optional(), "expense-report-preapproval": expenseReportPreapproval.optional(), id: z.number().int().optional(), "updated-at": z.string().optional()}); export const taxRateType = z.object({active: z.boolean().optional(), country: country.optional(), "created-at": z.string().optional(), "created-by": userSimple.optional(), description: z.string().optional(), "effective-date": z.string().optional(), "expiration-date": z.string().optional(), id: z.number().int().optional(), "updated-at": z.string().optional(), "updated-by": userSimple.optional()}); export const taxRate = z.object({active: z.boolean().optional(), country: country.optional(), "created-at": z.string().optional(), "created-by": userSimple.optional(), "customer-accounting": z.boolean().optional(), "effective-date": z.string().optional(), exempt: z.boolean().optional(), "expiration-date": z.string().optional(), id: z.number().int().optional(), percentage: z.number(), "reverse-charge": z.boolean().optional(), "tax-description": z.string().optional(), "tax-rate-type": taxRateType.optional(), "updated-at": z.string().optional(), "updated-by": userSimple.optional()}); export const taxCode = z.object({active: z.boolean().optional(), code: z.string(), country: country, "created-at": z.string().optional(), "created-by": userSimple.optional(), description: z.string().optional(), "effective-date": z.string().optional(), id: z.number().int().optional(), percentage: z.number(), "tax-rate": taxRate.optional(), "updated-at": z.string().optional(), "updated-by": userSimple.optional()}); export const expenseLineTax = z.object({amount: z.number().optional(), "country-id": z.number().int().optional(), "created-at": z.string().optional(), "created-by": userSimple.optional(), "currency-id": z.number().int().optional(), id: z.number().int().optional(), "std-amount": z.number().optional(), "tax-code": taxCode.optional(), "updated-at": z.string().optional(), "updated-by": userSimple.optional()}); export const integration = z.object({"business-object": z.string(), code: z.string(), "created-at": z.string().optional(), direction: z.enum(["to_coupa", "from_coupa"]), "end-system": z.string(), "end-system-type": z.enum(["payroll", "erp", "hr", "third_party_partner", "third_party_vendor", "other"]), id: z.number().int().optional(), "integration-type": z.enum(["flat_file", "api", "corporate_credit_card_file"]).optional(), name: z.string(), standard: z.boolean().optional(), "updated-at": z.string().optional()}); export const exchangeRate = z.object({"created-at": z.string().optional(), "created-by": userSimple.optional(), "from-currency": currency, id: z.number().int().optional(), rate: z.number().optional(), "rate-date": z.string().optional(), "to-currency": currency, "updated-at": z.string().optional(), "updated-by": userSimple.optional()}); export const itemizedExpenseLine = z.object({account: account.optional(), "account-allocations": expenseLineAllocation.optional(), "accounting-total": z.number().optional(), "accounting-total-currency": currency.optional(), amount: z.number().optional(), "approved-amount": z.number().optional(), "audit-status": auditStatus.optional(), "created-at": z.string().optional(), "created-by": userSimple.optional(), currency: currency.optional(), "custom-field-1": z.string().optional(), "custom-field-10": z.string().optional(), "custom-field-11": z.string().optional(), "custom-field-12": z.string().optional(), "custom-field-13": z.string().optional(), "custom-field-14": z.string().optional(), "custom-field-15": z.string().optional(), "custom-field-16": z.string().optional(), "custom-field-17": z.string().optional(), "custom-field-18": z.string().optional(), "custom-field-19": z.string().optional(), "custom-field-2": z.string().optional(), "custom-field-20": z.string().optional(), "custom-field-3": z.string().optional(), "custom-field-4": z.string().optional(), "custom-field-5": z.string().optional(), "custom-field-6": z.string().optional(), "custom-field-7": z.string().optional(), "custom-field-8": z.string().optional(), "custom-field-9": z.string().optional(), description: z.string(), divisor: z.number().optional(), "end-date": z.string().optional(), "exchange-rate": z.number().optional(), "expense-artifacts": expenseArtifact.optional(), "expense-category": expenseCategory, "expense-category-custom-field-1": z.string().optional(), "expense-category-custom-field-10": z.string().optional(), "expense-category-custom-field-2": z.string().optional(), "expense-category-custom-field-3": z.string().optional(), "expense-category-custom-field-4": z.string().optional(), "expense-category-custom-field-5": z.string().optional(), "expense-category-custom-field-6": z.string().optional(), "expense-category-custom-field-7": z.string().optional(), "expense-category-custom-field-8": z.string().optional(), "expense-category-custom-field-9": z.string().optional(), "expense-date": z.string(), "expense-line-imported-data": expenseLineImportedData.optional(), "expense-line-taxes": expenseLineTax.optional(), "expense-report-id": z.number().int().optional(), "expensed-by": userSimple.optional(), "external-src-data": z.string().optional(), "external-src-name": z.string().optional(), "external-src-ref": z.string().optional(), "foreign-currency": currency, "foreign-currency-amount": z.number().optional(), "foreign-currency-id": z.number().int().optional(), frugality: z.string().optional(), id: z.number().int().optional(), integration: integration.optional(), "line-number": z.string().optional(), merchant: z.string().optional(), "order-line-id": z.number().int().optional(), "over-limit": z.boolean().optional(), "parent-expense-line-id": z.number().int().optional(), "parent-external-src-data": z.string().optional(), "parent-external-src-name": z.string().optional(), "parent-external-src-ref": z.string().optional(), period: period.optional(), reason: z.string().optional(), "receipt-total-amount": z.number().optional(), "receipt-total-currency-id": z.number().int().optional(), "reporting-total": z.number().optional(), "start-date": z.string(), status: z.string().optional(), "suggested-exchange-rate": exchangeRate.optional(), type: z.string().optional(), "updated-at": z.string().optional(), "updated-by": userSimple.optional()}); export const expenseLine = z.object({account: account.optional(), "account-allocations": expenseLineAllocation.optional(), "accounting-total": z.number().optional(), "accounting-total-currency": currency.optional(), amount: z.number().optional(), "approved-amount": z.number().optional(), "audit-status": auditStatus.optional(), "created-at": z.string().optional(), "created-by": userSimple.optional(), currency: currency.optional(), "custom-field-1": z.string().optional(), "custom-field-10": z.string().optional(), "custom-field-11": z.string().optional(), "custom-field-12": z.string().optional(), "custom-field-13": z.string().optional(), "custom-field-14": z.string().optional(), "custom-field-15": z.string().optional(), "custom-field-16": z.string().optional(), "custom-field-17": z.string().optional(), "custom-field-18": z.string().optional(), "custom-field-19": z.string().optional(), "custom-field-2": z.string().optional(), "custom-field-20": z.string().optional(), "custom-field-3": z.string().optional(), "custom-field-4": z.string().optional(), "custom-field-5": z.string().optional(), "custom-field-6": z.string().optional(), "custom-field-7": z.string().optional(), "custom-field-8": z.string().optional(), "custom-field-9": z.string().optional(), description: z.string(), divisor: z.number().optional(), "end-date": z.string().optional(), "exchange-rate": z.number().optional(), "expense-artifacts": expenseArtifact.optional(), "expense-attendees": expenseAttendee.optional(), "expense-category": expenseCategory, "expense-category-custom-field-1": z.string().optional(), "expense-category-custom-field-10": z.string().optional(), "expense-category-custom-field-2": z.string().optional(), "expense-category-custom-field-3": z.string().optional(), "expense-category-custom-field-4": z.string().optional(), "expense-category-custom-field-5": z.string().optional(), "expense-category-custom-field-6": z.string().optional(), "expense-category-custom-field-7": z.string().optional(), "expense-category-custom-field-8": z.string().optional(), "expense-category-custom-field-9": z.string().optional(), "expense-date": z.string(), "expense-line-daily-per-diems": z.string().optional(), "expense-line-imported-data": expenseLineImportedData.optional(), "expense-line-mileage": expenseLineMileage.optional(), "expense-line-per-diem": expenseLinePerDiem.optional(), "expense-line-preapproval": expenseLinePreapproval.optional(), "expense-line-taxes": expenseLineTax.optional(), "expense-report-id": z.number().int().optional(), "expense-trip": z.string().optional(), "expensed-by": userSimple.optional(), "external-src-data": z.string().optional(), "external-src-name": z.string().optional(), "external-src-ref": z.string().optional(), "foreign-currency": currency, "foreign-currency-amount": z.number().optional(), "foreign-currency-id": z.number().int().optional(), frugality: z.enum(["shame", "praise"]).optional(), id: z.number().int().optional(), integration: integration.optional(), "itemized-expense-lines": itemizedExpenseLine.optional(), "last-send-back-comment": z.string().optional(), "last-send-back-reason": z.string().optional(), "line-number": z.number().int().optional(), merchant: z.string().optional(), "order-line-id": z.number().int().optional(), "over-limit": z.boolean().optional(), "parent-expense-line-id": z.number().int().optional(), "parent-external-src-data": z.string().optional(), "parent-external-src-name": z.string().optional(), "parent-external-src-ref": z.string().optional(), period: period.optional(), reason: z.string().optional(), "receipt-total-amount": z.number().optional(), "receipt-total-currency-id": z.number().int().optional(), "reporting-total": z.number().optional(), "requires-receipt": z.boolean().optional(), "start-date": z.string(), status: z.string().optional(), "suggested-exchange-rate": exchangeRate.optional(), type: z.string().optional(), "updated-at": z.string().optional(), "updated-by": userSimple.optional()}); export const getApiExpenseLinesResponse = z.array(expenseLine); 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 }; /** * Query expense lines * * GET /expense_lines */ export const getApiExpenseLines = async (args: GetApiExpenseLinesArgs, options?: GetApiExpenseLinesOptions) => { const {baseUrl = "https://dashmaster24-4.coupadev.com/api", fetch: fetchFn = fetch, internalApiKey} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.limit != null) query.append("limit", String(args.limit)) if (args.offset != null) query.append("offset", String(args.offset)) if (args.order_by != null) query.append("order_by", String(args.order_by)) if (args.dir != null) query.append("dir", String(args.dir)) if (args.return_object != null) query.append("return_object", String(args.return_object)) if (args.filter != null) query.append("filter", String(args.filter)) if (internalApiKey !== undefined) headers.set("X-COUPA-API-KEY", internalApiKey) const url = `${baseUrl.replace(/\/+$/, '')}/expense_lines${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(getApiExpenseLinesResponse, await res.json()) };