import {z} from 'zod' export type OrderItemIncludedField = 'booked_slots' | 'staff_notes' | 'metadata' | 'onsite' | 'loyalty' | 'channel_category' | 'activity_ids'; export type GetApiReportsOrderItemsSearchSearchIdArgs = {search_id: string, page?: number | undefined, included_fields?: Array | undefined, 'user-id-to-impersonate'?: number | undefined}; export type GetApiReportsOrderItemsSearchSearchIdOptions = {baseUrl: string, OAuth2PasswordBearer?: string | undefined, fetch?: typeof fetch | undefined}; export const partitionInfo = z.object({partition_num: z.number().int().gte(0), endpoint: z.string(), size: z.number().int().gte(0), rows: z.number().int().gte(0)}); export const merchSalesFilter = z.enum(["TRUE", "FALSE", "DEFAULT"]); export const orderItemParams = z.object({order_ids: z.array(z.number().int()).optional(), plan_ids: z.array(z.number().int()).optional(), date_field: z.enum(["CREATED_DATE_UTC", "UPDATED_DATE_UTC", "EVENT_START_DATE_UTC"]).optional(), date_from: z.string().optional(), date_to: z.string().optional(), include_merch_sales: merchSalesFilter.optional()}); export const b2BEndUser = z.object({id: z.number().int(), email: z.string().optional(), first_name: z.string().optional(), last_name: z.string().optional()}); export const buyer = z.object({id: z.number().int(), date_of_birthday: z.string().optional(), email: z.string().optional(), first_name: z.string().optional(), language: z.string().optional(), last_name: z.string().optional(), marketing_preference: z.boolean().optional(), b2b_end_user: b2BEndUser.optional()}); export const channelCategory = z.enum(["WALK_IN", "E_COMM", "E_COMM_FUNCTION", "FUNCTION", "OTHER"]); export const purchaseLocationQuality = z.enum(["HIGH", "MEDIUM", "UNKNOWN"]); export const purchaseLocation = z.object({id_geo_name: z.number().int().optional(), city_name: z.string().optional(), country_code: z.string().optional(), region_code: z.string().optional(), postal_code: z.string().optional(), quality: purchaseLocationQuality.optional()}); export const partner = z.object({id: z.number().int(), name: z.string().optional()}); export const galleryResourceType = z.enum(["image", "video"]); export const galleryResource = z.object({url: z.string().optional(), type: galleryResourceType}); export const taxonomy = z.object({id: z.number().int(), name: z.string().optional(), hierarchy_id: z.number().int().optional(), hierarchy: z.string().optional()}); export const plan = z.object({id: z.number().int(), gallery: z.array(galleryResource).optional(), name: z.string().optional(), taxonomies: z.array(taxonomy).optional()}); export const coupon = z.object({name: z.string().optional(), code: z.string().optional(), discount: z.number().optional(), kind: z.string().optional()}); export const assignedSeat = z.object({id: z.number().int(), name: z.string().optional(), seating_provider: z.string().optional(), seating_provider_seat_reference: z.string().optional()}); export const bookingQuestion = z.object({id: z.string(), question: z.string().optional(), answers: z.array(z.string()).optional(), index: z.number().int().optional()}); export const business = z.object({id: z.string().optional(), name: z.string().optional(), tax_id: z.string().optional()}); export const uTM = z.object({campaign: z.string().optional(), content: z.string().optional(), medium: z.string().optional(), source: z.string().optional(), term: z.string().optional(), referring_domain: z.string().optional()}); export const owner = z.object({id: z.number().int(), date_of_birthday: z.string().optional(), email: z.string().optional(), first_name: z.string().optional(), language: z.string().optional(), last_name: z.string().optional(), marketing_preference: z.boolean().optional()}); export const pack = z.object({id: z.number().int().optional(), session_id: z.number().int().optional(), session_name: z.string().optional()}); export const orderItemPlanCode = z.object({id: z.number().int(), created_date_utc: z.string().optional(), is_cancelled: z.boolean().optional(), is_used: z.boolean().optional(), is_validated: z.boolean().optional(), modified_date_utc: z.string().optional(), redeemed_date_utc: z.string().optional(), cd_barcode: z.string().optional(), applied_order_id_list: z.array(z.number().int()).optional(), is_shared_pack_code: z.boolean().optional()}); export const venue = z.object({city: z.string().optional(), country: z.string().optional(), name: z.string().optional(), timezone: z.string().optional()}); export const session = z.object({id: z.number().int(), name: z.string().optional(), available_tickets: z.number().int().optional(), capacity: z.number().int().optional(), end_date_utc: z.string().optional(), first_purchasable_date_utc: z.string().optional(), is_addon: z.boolean().optional(), is_shop_product: z.boolean().optional(), is_wait_list: z.boolean().optional(), start_date_utc: z.string().optional(), venue: venue.optional()}); export const guestlist = z.object({id: z.string().optional(), name: z.string().optional()}); export const metadata = z.object({external_id: z.string().optional(), external_subproduct_id: z.string().optional()}); export const loyalty = z.object({points: z.number().optional(), is_burned: z.boolean().optional(), price_amount: z.number().optional(), user_payment_inferred: z.number().optional(), currency: z.string().optional()}); export const orderItem = z.object({id: z.number().int().optional(), ticket_id: z.number().int().optional(), booked_slot_id: z.number().int().optional(), activity_ids: z.array(z.number().int()).optional(), cancellation_date_utc: z.string().optional(), cancellation_type: z.string().optional(), created_date_utc: z.string().optional(), discount: z.number().optional(), is_invite: z.boolean().optional(), entitlement_types: z.array(z.string()).optional(), modified_date_utc: z.string().optional(), purchase_date_utc: z.string().optional(), event_start_date_utc: z.string().optional(), validated_date_utc: z.string().optional(), rating_comment: z.string().optional(), rating_value: z.number().optional(), rating_date_utc: z.string().optional(), rating_source: z.string().optional(), surcharge: z.number().optional(), status: z.string().optional(), unitary_price: z.number().optional(), owner: owner.optional(), pack: pack.optional(), plan_code: orderItemPlanCode.optional(), session: session.optional(), showcase_plan: plan.optional(), guestlist: guestlist.optional(), metadata: metadata.optional(), loyalty: loyalty.optional()}); export const bookedSlotActivity = z.object({id: z.number().int().optional(), name: z.string().optional()}); export const bookedSlotAsset = z.object({id: z.number().int().optional(), name: z.string().optional(), description: z.string().optional(), availability_strategy: z.string().optional(), max_party_size: z.number().int().optional(), min_party_size: z.number().int().optional(), max_num_parties: z.number().int().optional(), partner_id: z.number().int().optional(), asset_type_id: z.number().int().optional(), is_manual_assignment_confirmation_required: z.boolean().optional()}); export const bookedSlotHub = z.object({id: z.number().int().optional(), name: z.string().optional()}); export const bookedSlot = z.object({id: z.number().int().optional(), timeslot_utc: z.string().optional(), slot_count: z.number().int().optional(), occupancy_count: z.number().int().optional(), party_size: z.number().int().optional(), is_removed: z.boolean().optional(), activity: bookedSlotActivity.optional(), asset: bookedSlotAsset.optional(), hub: bookedSlotHub.optional()}); export const paymentDetail = z.object({id: z.string().optional(), card_brand: z.string().optional(), payment_method: z.string().optional(), payment_amount: z.number().optional(), payment_date_utc: z.string().optional(), payment_status: z.string().optional(), payment_type: z.string().optional()}); export const onsiteCashier = z.object({id: z.string().optional(), name: z.string().optional()}); export const onsiteCashRegister = z.object({id: z.string().optional()}); export const onsiteSetup = z.object({id: z.string().optional(), name: z.string().optional()}); export const onsiteShift = z.object({id: z.string().optional(), status: z.string().optional(), started_at_utc: z.string().optional(), ended_at_utc: z.string().optional()}); export const onsiteSale = z.object({interface: z.string().optional(), cashier: onsiteCashier.optional(), cash_register: onsiteCashRegister.optional(), onsite_setup: onsiteSetup.optional(), kiosk_serial: z.string().optional(), shift: onsiteShift.optional()}); export const onsiteCancellation = z.object({performed_at_utc: z.string().optional(), interface: z.string().optional(), cashier: onsiteCashier.optional(), cash_register: onsiteCashRegister.optional(), onsite_setup: onsiteSetup.optional(), shift: onsiteShift.optional(), ticket_count: z.number().int().optional(), amount: z.number().optional(), currency: z.string().optional()}); export const onsite = z.object({sale: onsiteSale.optional(), cancellations: z.array(onsiteCancellation).optional()}); export const order = z.object({id: z.number().int(), parent_order_id: z.number().int().optional(), buyer: buyer.optional(), created_date_utc: z.string().optional(), updated_date_utc: z.string().optional(), order_updated_date_utc: z.string().optional(), surcharge: z.number().optional(), currency: z.string().optional(), purchase_channel: z.string().optional(), channel: z.string().optional(), channel_category: channelCategory.optional(), payment_method: z.string().optional(), payment_method_code: z.string().optional(), purchase_location_source: purchaseLocation.optional(), billing_zip_code: z.string().optional(), partner: partner.optional(), plan: plan.optional(), coupon: coupon.optional(), assigned_seats: z.array(assignedSeat).optional(), booking_questions: z.array(bookingQuestion).optional(), business: business.optional(), utm: uTM.optional(), order_items: z.array(orderItem).optional(), staff_notes: z.array(z.string()).optional(), booked_slots: z.array(bookedSlot).optional(), payment_details: z.array(paymentDetail).optional(), order_group_id: z.number().int().optional(), is_main_group_order: z.boolean().optional(), onsite: onsite.optional()}); export const searchOrderOrderItemParams = z.object({partition_info: z.array(partitionInfo).optional(), params: orderItemParams.optional(), data: z.array(order)}); 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 order items report * * GET /reports/order-items/search/{search_id} */ export const getApiReportsOrderItemsSearchSearchId = async (args: GetApiReportsOrderItemsSearchSearchIdArgs, options: GetApiReportsOrderItemsSearchSearchIdOptions) => { const {baseUrl, fetch: fetchFn = fetch, OAuth2PasswordBearer} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.page != null) query.append("page", String(args.page)) for (const item of args.included_fields ?? []) query.append("included_fields", String(item)) if (args['user-id-to-impersonate'] != null) headers.set("user-id-to-impersonate", String(args['user-id-to-impersonate'])) if (OAuth2PasswordBearer !== undefined) headers.set('authorization', `Bearer ${OAuth2PasswordBearer}`) const url = `${baseUrl.replace(/\/+$/, '')}/reports/order-items/search/${encodeURIComponent(String(args.search_id))}${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(searchOrderOrderItemParams, await res.json()) };