import {z} from 'zod' export type GetApiAccountsAidShoppingOrdersArgs = {aid: unknown, starting_after?: unknown | undefined, limit?: number | undefined, status?: (Array<'open' | 'closed' | 'cancelled'>) | undefined, payment_status?: (Array<'pending' | 'partially_paid' | 'paid' | 'partially_refunded' | 'refunded'>) | undefined, 'created_at.gte'?: string | undefined, 'created_at.lte'?: string | undefined, include_events?: (Array<'false' | 'true' | 'api-event' | 'service-event'>) | undefined, card_brand?: Array | undefined, card_number?: Array | undefined, psp?: Array | undefined, payment_product?: Array | undefined, payment_product_type?: Array | undefined, 'net_amount.gte'?: number | undefined, 'net_amount.lte'?: number | undefined, currency?: Array | undefined, search?: string | undefined, itinerary_travel_mode?: (Array<'BUS' | 'CAR' | 'FERRY' | 'METRO' | 'TAXI' | 'TRAIN' | 'TRAM' | 'WALK' | 'WAIT' | 'CUSTOM'>) | undefined, itinerary_arrival_address?: string | undefined, itinerary_departure_address?: string | undefined, items_discount_lines_discount_type?: (Array<'customer' | 'periodic' | 'manual' | 'loyalty' | 'total' | 'employee' | 'external'>) | undefined}; export type GetApiAccountsAidShoppingOrdersOptions = {baseUrl?: string | undefined, JWT?: string | undefined, fetch?: typeof fetch | undefined}; export const resourceId = z.string().max(40); export const serverTimestamp = z.string(); export const userConsent = z.object({consent: z.boolean().optional(), updated_at: z.string().optional()}); export const customerAddress = z.object({address_line: z.string(), address_line_2: z.string().optional(), postal_code: z.string().optional(), postal_place: z.string(), country: z.string(), latitude: z.number().optional(), longitude: z.number().optional(), type: z.enum(["custom", "home", "other", "work"]).optional(), custom_type: z.string().optional(), comment: z.string().optional()}); export const customerTerm = z.object({id: z.string().optional(), accepted_at: z.string().optional()}); export const customer = z.object({metadata: z.object({}).optional(), id: z.string().optional(), created_at: z.string().optional(), created_by: z.string().optional(), updated_at: z.string().optional(), deleted_by: z.string().optional(), deleted_at: z.string().optional(), first_name: z.string().nullable().optional(), last_name: z.string().nullable().optional(), email: z.string().nullable().optional(), phone_number: z.string().nullable().optional(), attributes: z.object({}).optional(), status: z.string().nullable().optional(), favorite_store: z.string().nullable().optional(), enrolled_by: z.object({type: z.string().optional(), value: z.string().nullable()}).optional(), marketing_consent: z.object({sms: userConsent.optional(), email: userConsent.optional()}).and(z.record(z.string(), userConsent)).optional(), type: z.enum(["customer", "company", "contact", "employee", "other"]), addresses: z.array(customerAddress).optional(), term: customerTerm.optional(), company: z.object({organization_number: z.string().optional(), bussiness_name: z.string(), department: z.string().optional(), industry: z.string().optional(), website: z.string().optional(), number_of_employees: z.string().optional()}).optional(), gender: z.string().nullable().optional(), date_of_birth: z.string().nullable().optional(), contact_for: z.array(z.object({customer_id: z.string()})).optional()}); export const grossAmount = z.number().int(); export const netAmount = z.number().int(); export const contactObject = z.object({address_line: z.string(), address_line_2: z.string().optional(), postal_code: z.string().optional(), postal_place: z.string(), country: z.string(), first_name: z.string().optional(), last_name: z.string().optional(), comment: z.string().optional()}); export const orderItineraryAddress = z.object({id: z.string().optional(), name: z.string().optional(), address_line: z.string().optional(), address_line_2: z.string().optional(), postal_code: z.string().optional(), postal_place: z.string().optional(), latitude: z.number().optional(), longitude: z.number().optional(), country: z.string().optional(), external_ids: z.array(z.object({id: z.string(), source: z.string(), description: z.string().optional()})).optional()}); export const itineraryTravelMode = z.enum(["BUS", "CAR", "FERRY", "METRO", "TAXI", "TRAIN", "TRAM", "WALK", "WAIT", "CUSTOM"]); export const orderTravelItinerary = z.object({id: z.string().optional(), operator: z.string().optional(), arrival_address: orderItineraryAddress.optional(), arrival_at: z.string().optional(), departure_address: orderItineraryAddress.optional(), departure_at: z.string().optional(), travel_mode: itineraryTravelMode.optional(), route_id: z.string().optional(), vehicle_id: z.string().optional(), summary: z.string().optional(), distance: z.object({value: z.number().int()}).optional(), duration: z.object({value: z.number().int()}).optional(), tickets: z.array(z.object({class: z.string().optional(), line: z.string().optional(), seat: z.string().optional(), zone: z.string().optional(), passenger_id: z.array(z.string()).optional()})).optional(), line_ids: z.array(z.number().int()).optional(), waypoints: z.array(z.object({display_name: z.string().optional(), latitude: z.number(), longitude: z.number(), arrival_schedule_at: z.string().optional(), departure_schedule_at: z.string().optional()})).optional()}); export const orderExternalId = z.object({id: z.string(), source: z.string(), description: z.string().optional()}); export const taxItem = z.object({amount: z.number().int().optional(), amount_dwh: z.string().optional(), exempt: z.boolean().optional(), included_in_price: z.boolean().optional(), percentage: z.number().optional(), tax_basis: z.number().int().optional(), tax_basis_dwh: z.string().optional(), tax_code: z.string().optional(), tax_group: z.string().optional()}); export const dimension = z.object({color: z.string().optional(), size: z.string().optional(), style: z.string().optional(), config: z.string().optional(), variant: z.string().optional()}); export const discountType = z.enum(["customer", "periodic", "manual", "loyalty", "total", "employee", "external"]); export const discountItem = z.object({amount: z.number().int().optional(), percentage: z.number().optional(), discount_type: discountType.optional(), discount_id: z.string().optional(), description: z.string().optional(), line_id: z.number().int().optional()}); export const amount = z.number().int(); export const billingPayoutRuleDestinationNested = z.object({type: z.enum(["percentage", "flat_amount", "remaining_amount"]), value: z.string().optional(), destination: z.string().optional(), destinations: z.array(z.object({})).optional(), amount: z.number().int().optional()}); export const billingPayoutRuleDestination = z.object({type: z.enum(["percentage", "flat_amount", "remaining_amount"]), value: z.string().optional(), destination: z.string().optional(), destinations: z.array(billingPayoutRuleDestinationNested).optional(), amount: z.number().int().optional()}); export const splitPayout = z.object({account_id: z.string().optional(), rule_type: z.string(), rule_id: z.string(), rule_version: z.number().optional(), destinations: z.array(billingPayoutRuleDestination), metadata: z.object({}).optional()}); export const link = z.object({href: z.string(), rel: z.enum(["draft", "events", "order", "receipt", "self", "session", "session-checkout", "transaction"])}); export const orderSession = z.object({id: resourceId.optional(), created_at: serverTimestamp.optional(), created_by: resourceId.optional(), amount: z.number().int().optional(), items: z.array(z.object({amount: z.number().int().optional(), line_id: z.string()})), processed_at: z.string().optional(), metadata: z.object({}).optional(), _links: z.array(link).optional()}); export const orderOperationCard = z.object({masked_pan: z.string().optional(), type: z.string().optional(), brand: z.string().optional(), metadata: z.object({}).optional()}); export const orderAuthorization = z.object({items: z.array(z.object({original_currency: z.string().max(3).optional(), original_gross_amount: z.number().int().optional(), conversion_rate_ppm: z.number().int().optional(), conversion_rate_timestamp: z.string().optional(), conversion_rate_source: z.string().optional(), amount: amount, line_id: z.number().int(), payout: z.object({rule_id: z.string(), rule_type: z.string(), destinations: z.array(z.object({destination: z.string(), amount: z.number().int()}))}).optional()})), processed_at: z.string().optional(), processed_by: z.string().optional(), payment_details: z.object({psp: z.string().optional(), payment_id: z.string().optional(), payment_product: z.string().optional(), payment_product_type: z.string().optional(), card: orderOperationCard.optional()}).optional(), metadata: z.object({}).optional(), id: resourceId.optional(), created_at: serverTimestamp.optional(), created_by: resourceId.optional(), amount: z.number().int().optional(), success: z.boolean().optional(), _links: z.array(link).optional(), authorization_id: resourceId.optional()}); export const orderCapture = z.object({items: z.array(z.object({original_currency: z.string().max(3).optional(), original_gross_amount: z.number().int().optional(), conversion_rate_ppm: z.number().int().optional(), conversion_rate_timestamp: z.string().optional(), conversion_rate_source: z.string().optional(), amount: amount, line_id: z.number().int(), payout: z.object({rule_id: z.string(), rule_type: z.string(), destinations: z.array(z.object({destination: z.string(), amount: z.number().int()}))}).optional()})), processed_at: z.string().optional(), processed_by: z.string().optional(), payment_details: z.object({psp: z.string().optional(), payment_id: z.string().optional(), payment_product: z.string().optional(), payment_product_type: z.string().optional(), card: orderOperationCard.optional()}).optional(), metadata: z.object({}).optional(), id: resourceId.optional(), created_at: serverTimestamp.optional(), created_by: resourceId.optional(), amount: z.number().int().optional(), success: z.boolean().optional(), _links: z.array(link).optional(), authorization_id: resourceId.optional()}); export const orderRefund = z.object({items: z.array(z.object({original_currency: z.string().max(3).optional(), original_gross_amount: z.number().int().optional(), conversion_rate_ppm: z.number().int().optional(), conversion_rate_timestamp: z.string().optional(), conversion_rate_source: z.string().optional(), amount: amount, line_id: z.number().int(), payout: z.object({rule_id: z.string(), rule_type: z.string(), destinations: z.array(z.object({destination: z.string(), amount: z.number().int()}))}).optional()})), processed_at: z.string().optional(), processed_by: z.string().optional(), payment_details: z.object({psp: z.string().optional(), payment_id: z.string().optional(), payment_product: z.string().optional(), payment_product_type: z.string().optional(), card: orderOperationCard.optional()}).optional(), metadata: z.object({}).optional(), id: resourceId.optional(), created_at: serverTimestamp.optional(), created_by: resourceId.optional(), amount: z.number().int().optional(), success: z.boolean().optional(), _links: z.array(link).optional(), authorization_id: resourceId.optional()}); export const orderCancellation = z.object({items: z.array(z.object({original_currency: z.string().max(3).optional(), original_gross_amount: z.number().int().optional(), conversion_rate_ppm: z.number().int().optional(), conversion_rate_timestamp: z.string().optional(), conversion_rate_source: z.string().optional(), amount: amount, line_id: z.number().int(), payout: z.object({rule_id: z.string(), rule_type: z.string(), destinations: z.array(z.object({destination: z.string(), amount: z.number().int()}))}).optional()})), processed_at: z.string().optional(), processed_by: z.string().optional(), payment_details: z.object({psp: z.string().optional(), payment_id: z.string().optional(), payment_product: z.string().optional(), payment_product_type: z.string().optional(), card: orderOperationCard.optional()}).optional(), metadata: z.object({}).optional(), id: resourceId.optional(), created_at: serverTimestamp.optional(), created_by: resourceId.optional(), amount: z.number().int().optional(), success: z.boolean().optional(), _links: z.array(link).optional(), authorization_id: resourceId.optional()}); export const orderExternalLink = z.object({text: z.string(), href: z.string(), public: z.boolean().optional()}); export const address = z.object({address_line: z.string(), address_line_2: z.string().optional(), postal_code: z.string().optional(), postal_place: z.string(), country: z.string()}); export const lineItemIsuranceAttachment = z.object({insurance_company: z.string().optional(), insurance_type: z.string().optional()}); export const lineItemReservationAttachment = z.object({booking_id: z.string().optional(), line_ids: z.array(z.number().int()).optional(), passengers: z.array(z.object({id: z.string().optional(), title: z.string().optional(), first_name: z.string().optional(), last_name: z.string().optional()})).optional(), itinerary: z.array(z.object({departure_address: address.optional(), departure_at: z.string().optional(), arrival_address: address.optional(), arrival_at: z.string().optional(), operator: z.string().optional(), class: z.string().optional(), line: z.string().optional(), seat: z.string().optional(), zone: z.string().optional(), expires_at: z.string().optional(), activates_at: z.string().optional(), passenger_id: z.array(z.string()).optional()})).optional(), insurance: z.array(lineItemIsuranceAttachment).optional()}); export const lineItemReservationCarAttachment = z.object({booking_id: z.string().optional(), line_ids: z.array(z.number().int()).optional(), itinerary: z.array(z.object({rental_company: z.string().optional(), drivers_id: z.array(z.string()).optional(), pick_up_address: address.optional(), pick_up_at: z.string().optional(), drop_off_address: address.optional(), drop_off_at: z.string().optional(), class: z.string().optional()})).optional(), drivers: z.array(z.string()).optional(), insurance: z.array(lineItemIsuranceAttachment).optional()}); export const orderComment = z.object({id: z.string().optional(), created_at: z.string().optional(), created_by: z.string().optional(), deleted_by: z.string().optional(), deleted_at: z.string().optional(), body: z.string(), visibility: z.enum(["private", "public"]).optional()}); export const apiEvent = z.object({event_type: z.literal("api-event"), id: resourceId.optional(), created_at: serverTimestamp.optional(), created_by: resourceId.optional(), version: z.number().optional(), request: z.object({path: z.string().optional(), method: z.string().optional(), body: z.string().optional()}).optional(), draft_id: z.string().optional()}); export const orderStatusEvent = z.object({event_type: z.literal("service-event"), id: resourceId.optional(), created_at: serverTimestamp.optional(), created_by: resourceId.optional(), state: z.enum(["error", "failure", "success", "pending"]), description: z.string().optional(), service: z.string(), service_status: z.string(), metadata: z.object({}).optional(), _links: z.array(link).optional()}); export const orderEvent = z.discriminatedUnion("event_type", [apiEvent, orderStatusEvent]); export const getApiAccountsAidShoppingOrdersResponse = z.object({orders: z.array(z.object({id: z.string().optional(), created_at: z.string().optional(), created_by: z.string().optional(), updated_at: z.string().optional(), deleted_by: z.string().optional(), deleted_at: z.string().optional(), cancelled_reason: z.string().optional(), cancelled_by: resourceId.optional(), cancelled_at: serverTimestamp.optional(), closed_by: resourceId.optional(), closed_at: serverTimestamp.optional(), status: z.enum(["open", "closed", "cancelled"]).optional(), payment_status: z.enum(["pending", "partially_paid", "paid", "partially_refunded", "refunded"]).optional(), customer: customer.optional(), gross_amount: grossAmount.optional(), net_amount: netAmount.optional(), total_discount: z.number().int().gte(0).optional(), total_manual_discount_amount: z.number().int().gte(0).optional(), shipping_address: contactObject.optional(), billing_address: contactObject.optional(), metadata: z.object({}).optional(), comment: z.string().max(255).optional(), salesperson_id: z.string().optional(), salesperson_name: z.string().optional(), delivery_at: z.string().optional(), pickup_at: z.string().optional(), courier_id: z.string().optional(), pre_order: z.boolean().optional(), time_to_live: z.number().int().gte(86400).optional(), itinerary: z.array(orderTravelItinerary).optional(), external_ids: z.array(orderExternalId).optional(), items: z.array(z.object({status: z.string().optional(), id: z.string().optional(), metadata: z.object({}).optional(), groups: z.array(z.object({id: z.string(), name: z.string().optional()})).optional(), line_id: z.number().int().optional(), quantity: z.number().optional(), gross_amount: grossAmount, net_amount: netAmount.optional(), tax_lines: z.array(taxItem), description: z.string().optional(), description_alias: z.string().optional(), is_changed: z.boolean().optional(), eligible_for_discount: z.boolean().optional(), dimension: dimension.optional(), discount_lines: z.array(discountItem).optional(), additions: z.array(z.object({id: z.string().optional(), description: z.string().optional(), quantity: z.number().optional(), gross_amount: amount.optional(), groups: z.array(z.object({id: z.string(), name: z.string().optional()})).optional()})).optional(), store: z.object({id: z.string(), organization_number: z.string().optional(), name: z.string().optional(), business_name: z.string().optional(), comment: z.string().max(255).optional()}).optional(), external_id: z.string().optional(), related_item: z.object({line_id: z.number().int(), type: z.enum(["required", "optional", "reversed"])}).optional(), salesperson_id: z.string().optional(), salesperson_name: z.string().optional(), comment: z.string().max(255).optional(), version: z.number().optional(), reversed_reason: z.string().optional(), dynamic_payout: z.object({rule_type: z.string(), rule_id: z.string()}).optional(), payout: splitPayout.optional(), original_currency: z.string().max(3).optional(), original_gross_amount: z.number().int().optional(), conversion_rate_ppm: z.number().int().optional(), conversion_rate_timestamp: z.string().optional(), conversion_rate_source: z.string().optional()})).optional(), version: z.number().int().optional(), type: z.string().optional(), order_number: z.string().optional(), currency: z.string().max(3), order_id: z.string().min(1).max(255).optional(), time_to_live_expires_at: z.string().optional(), multiple_authorizations: z.boolean().optional(), payment_details: z.object({remaining_capture_amount: amount.optional(), remaining_refund_amount: amount.optional(), remaining_cancellation_amount: amount.optional(), amount_due: z.number().int().optional(), remaining_authorization_amount: amount.optional()}).optional(), sessions: z.array(orderSession).optional(), authorizations: z.array(orderAuthorization).optional(), captures: z.array(orderCapture).optional(), refunds: z.array(orderRefund).optional(), cancellations: z.array(orderCancellation).optional(), discounts: z.array(z.object({id: z.string().optional(), refs: z.array(z.object({id: z.string().optional(), amount: z.number().optional(), statistics: z.object({amount: z.number().optional(), stamp: z.number().optional(), usage: z.number().optional()}).optional(), stamp: z.number().optional(), usages: z.number().optional(), items: z.array(z.object({line_id: z.number().optional(), amount: z.number().optional()})).optional()})).optional()})).optional(), store: z.object({id: z.string(), organization_number: z.string().optional(), name: z.string().optional(), business_name: z.string().optional(), comments: z.array(z.string().max(255)).optional()}).optional(), external_links: z.array(orderExternalLink).optional(), attachments: z.array(z.object({id: z.string().optional(), bus_reservation: lineItemReservationAttachment.optional(), car_reservation: lineItemReservationCarAttachment.optional(), ferry_reservation: lineItemReservationAttachment.optional(), metro_reservation: lineItemReservationAttachment.optional(), taxi_reservation: lineItemReservationAttachment.optional(), train_reservation: lineItemReservationAttachment.optional(), tram_reservation: lineItemReservationAttachment.optional()})).optional(), comments: z.array(orderComment).optional(), delivery_id: z.string().optional(), _links: z.array(link).optional(), state: z.string().optional(), events: z.array(orderEvent)}))}); 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 }; /** * aid_orders_get * * GET /accounts/{aid}/shopping/orders */ export const getApiAccountsAidShoppingOrders = async (args: GetApiAccountsAidShoppingOrdersArgs, options?: GetApiAccountsAidShoppingOrdersOptions) => { const {baseUrl = "https://api.dintero.com/v1", fetch: fetchFn = fetch, JWT} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.starting_after != null) query.append("starting_after", String(args.starting_after)) if (args.limit != null) query.append("limit", String(args.limit)) for (const item of args.status ?? []) query.append("status", String(item)) for (const item of args.payment_status ?? []) query.append("payment_status", String(item)) if (args['created_at.gte'] != null) query.append("created_at.gte", String(args['created_at.gte'])) if (args['created_at.lte'] != null) query.append("created_at.lte", String(args['created_at.lte'])) for (const item of args.include_events ?? []) query.append("include_events", String(item)) for (const item of args.card_brand ?? []) query.append("card_brand", String(item)) for (const item of args.card_number ?? []) query.append("card_number", String(item)) for (const item of args.psp ?? []) query.append("psp", String(item)) for (const item of args.payment_product ?? []) query.append("payment_product", String(item)) for (const item of args.payment_product_type ?? []) query.append("payment_product_type", String(item)) if (args['net_amount.gte'] != null) query.append("net_amount.gte", String(args['net_amount.gte'])) if (args['net_amount.lte'] != null) query.append("net_amount.lte", String(args['net_amount.lte'])) for (const item of args.currency ?? []) query.append("currency", String(item)) if (args.search != null) query.append("search", String(args.search)) if (args.itinerary_travel_mode != null) query.append("itinerary_travel_mode", args.itinerary_travel_mode.join(',')) if (args.itinerary_arrival_address != null) query.append("itinerary_arrival_address", String(args.itinerary_arrival_address)) if (args.itinerary_departure_address != null) query.append("itinerary_departure_address", String(args.itinerary_departure_address)) if (args.items_discount_lines_discount_type != null) query.append("items_discount_lines_discount_type", args.items_discount_lines_discount_type.join(',')) if (JWT !== undefined) headers.set('authorization', `Bearer ${JWT}`) const url = `${baseUrl.replace(/\/+$/, '')}/accounts/${encodeURIComponent(String(args.aid))}/shopping/orders${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(getApiAccountsAidShoppingOrdersResponse, await res.json()) };