import {z} from 'zod' export type GetApiAccountsAidShoppingDraftOrdersArgs = {aid: unknown, starting_after?: unknown | undefined, limit?: number | undefined, customer_id?: string | undefined, status?: (Array<'open' | 'completed' | 'deleted'>) | undefined, 'created_at.gte'?: string | undefined, 'created_at.lte'?: string | undefined, 'net_amount.gte'?: number | undefined, 'net_amount.lte'?: number | undefined, currency?: Array | undefined, search?: string | undefined}; export type GetApiAccountsAidShoppingDraftOrdersOptions = {baseUrl?: string | undefined, JWT?: string | undefined, fetch?: typeof fetch | undefined}; export const resourceId = z.string().max(40); export const serverTimestamp = z.string(); export const link = z.object({href: z.string(), rel: z.enum(["draft", "events", "order", "receipt", "self", "session", "session-checkout", "transaction"])}); 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 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 billingPayoutRule = 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 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 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 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 draftOrder = z.object({id: resourceId.optional(), created_at: serverTimestamp.optional(), created_by: resourceId.optional(), updated_at: serverTimestamp.optional(), deleted_by: resourceId.optional(), deleted_at: serverTimestamp.optional(), status: z.enum(["open", "completed", "deleted"]).optional(), _links: z.array(link).optional(), version: z.number().int().optional(), events: z.array(apiEvent).optional(), options: z.object({order_time_to_live: z.number().int().gte(86400).optional(), generate_order_id: z.enum(["UUID", "ALPHANUMERIC_9", "ALPHANUMERIC_9_RESERVE"]).optional(), order_id: z.string().optional(), replace: z.literal("order").optional(), payout: z.object({rules: z.array(billingPayoutRule).optional(), resolve_rule_id: z.literal("order.items.store.id"), resolve_rule_type: z.string()}).optional(), split_draft: z.boolean().optional(), serial_order_number_suffix: z.boolean().optional(), multiple_authorizations: z.boolean().optional()}).optional(), order: z.object({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(), 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(), stores: z.array(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()})}); export const getApiAccountsAidShoppingDraftOrdersResponse = z.object({draft_orders: z.array(draftOrder)}); 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_draft_orders_get * * GET /accounts/{aid}/shopping/draft_orders */ export const getApiAccountsAidShoppingDraftOrders = async (args: GetApiAccountsAidShoppingDraftOrdersArgs, options?: GetApiAccountsAidShoppingDraftOrdersOptions) => { 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)) if (args.customer_id != null) query.append("customer_id", String(args.customer_id)) if (args.status != null) query.append("status", args.status.join(',')) 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'])) 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 (JWT !== undefined) headers.set('authorization', `Bearer ${JWT}`) const url = `${baseUrl.replace(/\/+$/, '')}/accounts/${encodeURIComponent(String(args.aid))}/shopping/draft_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(getApiAccountsAidShoppingDraftOrdersResponse, await res.json()) };