import {z} from 'zod' export type GetApiV1ShopsShopIdInvoicesInvoiceIdOptions = {baseUrl?: string | undefined, defaultValue?: string | undefined, fetch?: typeof fetch | undefined}; export const getApiV1ShopsShopIdInvoicesInvoiceIdResponse = z.object({id: z.number().int().optional(), coupon_id: z.string().nullable().optional(), shipping_fee: z.string().optional(), paypalff_email: z.string().nullable().optional(), shop_customer_id: z.number().int().optional(), created_at: z.string().optional(), updated_at: z.string().optional(), completed_at: z.string().optional(), processed_email_sent_at: z.string().nullable().optional(), archived_at: z.string().nullable().optional(), salt: z.string().optional(), gateway: z.string().optional(), payment_method_id: z.number().int().optional(), external_url: z.string().nullable().optional(), sumup_checkout_id: z.string().nullable().optional(), email: z.string().optional(), delivered: z.string().nullable().optional(), redirect_url: z.string().nullable().optional(), status: z.string().optional(), fulfillment_status: z.string().nullable().optional(), status_description: z.string().nullable().optional(), price: z.string().optional(), tax_rate: z.string().optional(), currency: z.string().optional(), customer_currency: z.string().nullable().optional(), price_usd: z.string().optional(), balance_applied: z.string().nullable().optional(), balance_applied_usd: z.string().nullable().optional(), paid: z.string().optional(), paid_usd: z.string().optional(), custom_fields: z.string().nullable().optional(), dashboard_note: z.string().nullable().optional(), ip: z.string().optional(), country_code: z.string().nullable().optional(), user_agent: z.string().optional(), asn: z.string().nullable().optional(), utm_source: z.string().optional(), utm_medium: z.string().optional(), utm_campaign: z.string().optional(), utm_term: z.string().nullable().optional(), utm_content: z.string().nullable().optional(), referrer_host: z.string().optional(), crypto_address: z.string().nullable().optional(), crypto_amount: z.string().nullable().optional(), shop_id: z.number().int().optional(), cashapp_cashtag: z.string().nullable().optional(), cashapp_note: z.string().nullable().optional(), venmo_tag: z.string().nullable().optional(), venmo_email: z.string().nullable().optional(), venmo_note: z.string().nullable().optional(), zelle_recipient: z.string().nullable().optional(), zelle_name: z.string().nullable().optional(), zelle_email: z.string().nullable().optional(), zelle_note: z.string().nullable().optional(), skrillp2p_email: z.string().nullable().optional(), skrillp2p_note: z.string().nullable().optional(), wise_tag: z.string().nullable().optional(), wise_email: z.string().nullable().optional(), wise_note: z.string().nullable().optional(), manual: z.boolean().optional(), paypalff_currency: z.string().optional(), paypalff_price: z.string().nullable().optional(), paypalff_note: z.string().nullable().optional(), customer_id: z.string().nullable().optional(), transaction_id: z.string().nullable().optional(), proof_of_payment: z.string().nullable().optional(), proof_of_payment_image: z.string().nullable().optional(), metadata: z.string().nullable().optional(), source: z.string().nullable().optional(), billing_name: z.string().nullable().optional(), billing_address_line1: z.string().nullable().optional(), billing_address_line2: z.string().nullable().optional(), billing_city: z.string().nullable().optional(), billing_state: z.string().nullable().optional(), billing_postcode: z.string().nullable().optional(), billing_country: z.string().nullable().optional(), shipping_name: z.string().nullable().optional(), shipping_address_line1: z.string().nullable().optional(), shipping_address_line2: z.string().nullable().optional(), shipping_city: z.string().nullable().optional(), shipping_state: z.string().nullable().optional(), shipping_postcode: z.string().nullable().optional(), shipping_country: z.string().nullable().optional(), shipping_phone: z.string().nullable().optional(), tracking_code: z.string().nullable().optional(), tracking_link: z.string().nullable().optional(), shipped_at: z.string().nullable().optional(), delivered_at: z.string().nullable().optional(), fulfillment_note: z.string().nullable().optional(), abandoned_dismissed_at: z.string().nullable().optional(), abandoned_recovery_sent_at: z.string().nullable().optional(), abandoned_recovery_due_at: z.string().nullable().optional(), abandoned_recovery_skipped_at: z.string().nullable().optional(), abandoned_recovery_skip_reason: z.string().nullable().optional(), abandoned_recovery_source: z.string().nullable().optional(), shipping_zone_id: z.string().nullable().optional(), withdrawal_disabled: z.boolean().optional(), affiliate_customer_id: z.string().nullable().optional(), affiliate_code: z.string().nullable().optional(), affiliate_commission_usd: z.string().nullable().optional(), affiliate_commission_skip_reason: z.string().nullable().optional(), affiliate_tier_id: z.string().nullable().optional(), product_subscription_id: z.string().nullable().optional(), subscription_cycle: z.string().nullable().optional(), is_reseller_order: z.boolean().optional(), reseller_tier_id: z.string().nullable().optional(), reseller_source: z.string().nullable().optional(), cashback_usd: z.string().nullable().optional(), expires_at: z.string().nullable().optional(), coupon_use: z.string().nullable().optional(), unique_id: z.string().optional(), customer: z.object({id: z.number().int().optional(), shop_id: z.number().int().optional(), email: z.string().optional(), username: z.string().nullable().optional(), anonymous_feedback: z.boolean().optional(), discord_id: z.string().nullable().optional(), discord_username: z.string().nullable().optional()}).optional(), coupon: z.string().nullable().optional(), items: z.array(z.object({id: z.number().int().optional(), invoice_id: z.number().int().optional(), product_id: z.number().int().optional(), variant_id: z.number().int().optional(), parent_variant_id: z.string().nullable().optional(), custom_name: z.string().nullable().optional(), dynamic_url: z.string().nullable().optional(), status: z.string().optional(), price: z.string().optional(), cost: z.string().optional(), quantity: z.number().int().optional(), balance_credit: z.string().nullable().optional(), coupon_discount: z.string().optional(), volume_discount: z.string().optional(), gateway_fee: z.string().optional(), tax_inclusive: z.boolean().optional(), total_tax: z.string().optional(), total_price: z.string().optional(), custom_fields: z.string().nullable().optional(), custom_fields_submitted_at: z.string().nullable().optional(), delivered: z.array(z.string()).optional(), deliverables: z.string().nullable().optional(), completed_at: z.string().optional(), product: z.object({id: z.number().int().optional(), type: z.string().optional(), name: z.string().optional(), deliverables_type: z.string().optional(), requires_fulfillment: z.boolean().optional(), images: z.array(z.object({id: z.number().int().optional(), cloudflare_image_id: z.string().nullable().optional(), url: z.string().optional(), pivot: z.object({product_id: z.number().int().optional(), image_id: z.number().int().optional(), order: z.number().int().optional()}).optional()})).optional()}).optional(), variant: z.object({id: z.number().int().optional(), name: z.string().optional(), stock: z.number().int().optional()}).optional()})).optional(), payments: z.array(z.unknown()).optional(), payment_method: z.object({id: z.number().int().optional(), name: z.string().optional(), icon_image_id: z.string().nullable().optional(), icon_image_url: z.string().nullable().optional(), icon_image: z.string().nullable().optional()}).optional(), feedback: z.object({id: z.number().int().optional(), invoice_id: z.number().int().optional(), status: z.string().optional(), message: z.string().optional(), image: z.string().nullable().optional(), rating: z.number().int().optional(), is_automatic: z.boolean().optional(), reply: z.string().nullable().optional(), dispute_reason: z.string().nullable().optional(), disputed_at: z.string().nullable().optional(), created_at: z.string().optional(), updated_at: z.string().optional(), replied_at: z.string().nullable().optional(), image_url: z.string().nullable().optional()}).optional(), shipping_zone: z.string().nullable().optional(), proof_of_payment_image_url: z.string().nullable().optional(), dispute_summary: z.object({open: z.boolean().optional(), partially_charged_back_usd: z.number().int().optional()}).optional(), disputes: z.array(z.object({id: z.number().int().optional(), gateway: z.string().optional(), stage: z.string().optional(), status: z.string().optional(), reason: z.string().optional(), amount: z.string().optional(), currency: z.string().optional(), evidence_due_at: z.string().optional(), is_partial: z.boolean().optional(), contestable: z.boolean().optional(), opened_at: z.string().optional(), closed_at: z.string().nullable().optional()})).optional(), blacklist_status: z.object({email: z.boolean().optional(), email_domain: z.boolean().optional(), discord_id: z.boolean().optional(), ip: z.boolean().optional(), ip_range: z.boolean().optional(), country_code: z.boolean().optional(), user_agent: z.boolean().optional(), asn: z.boolean().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 }; /** * Get Invoice * * GET /v1/shops/{shopId}/invoices/{invoiceId} */ export const getApiV1ShopsShopIdInvoicesInvoiceId = async (options?: GetApiV1ShopsShopIdInvoicesInvoiceIdOptions) => { const {baseUrl = "https://api.sellauth.com", fetch: fetchFn = fetch, defaultValue} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (defaultValue !== undefined) headers.set('authorization', `Bearer ${defaultValue}`) const url = `${baseUrl.replace(/\/+$/, '')}/v1/shops/${encodeURIComponent(String(args.shopId))}/invoices/${encodeURIComponent(String(args.invoiceId))}${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(getApiV1ShopsShopIdInvoicesInvoiceIdResponse, await res.json()) };