import {z} from 'zod' export type GetApiStoresStoreIdOrdersOrderIdArgs = {storeId: string, orderId: string}; export type GetApiStoresStoreIdOrdersOrderIdOptions = {baseUrl?: string | undefined, bearer?: string | undefined, fetch?: typeof fetch | undefined}; export const volumeDiscountType = z.union([z.literal(0), z.literal(1), z.literal(2)]); export const billingInterval = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]); export const lineItem = z.object({id: z.string(), dateCreated: z.string(), productName: z.string().min(3).max(128), productId: z.string(), variantId: z.string(), variantName: z.string().min(3).max(128), amount: z.number(), lineTotal: z.number(), additionalFeePercentage: z.number(), additionalFeeAmount: z.number(), additionalFixedFeeAmount: z.number(), volumeDiscountAmount: z.number(), volumeDiscountType: volumeDiscountType.optional(), volumeDiscountValue: z.number().nullable().optional(), volumeDiscountTierQuantity: z.number().int().nullable().optional(), storeId: z.string(), orderId: z.string(), quantity: z.number().int(), billingInterval: billingInterval.optional(), customIntervalDays: z.number().int().nullable().optional()}); export const gatewayMetadata = z.object({id: z.string(), dateCreated: z.string(), transactionId: z.string().max(128).nullable().optional(), clientSecret: z.string().max(256).nullable().optional(), note: z.string().max(64).nullable().optional(), cryptocurrencyAddress: z.string().max(256).nullable().optional(), cryptocurrencyAmount: z.number().nullable().optional(), cryptocurrencyExpiration: z.string().nullable().optional(), gatewaySubscriptionId: z.string().max(128).nullable().optional()}); export const externalLogin = z.object({id: z.string(), dateCreated: z.string(), application: z.string().min(1).max(32), userId: z.string().max(36), displayName: z.string().max(128), emailAddress: z.string().max(256)}); export const customerDetails = z.object({id: z.string(), dateCreated: z.string(), externalLogins: z.array(externalLogin).nullable().optional(), countryCode: z.string().min(1).max(2), emailAddress: z.string().min(1).max(256), customerId: z.string()}); export const orderCoupon = z.object({id: z.string(), dateCreated: z.string(), percentageDecrease: z.number().nullable().optional(), netDecrease: z.number(), code: z.string().min(3).max(32), couponId: z.string()}); export const orderDiscount = z.object({id: z.string(), dateCreated: z.string(), percentageDecrease: z.number().nullable().optional(), netDecrease: z.number()}); export const orderTax = z.object({id: z.string(), dateCreated: z.string(), taxAmount: z.number(), taxRate: z.number(), taxName: z.string().min(1).max(64), isReverseCharge: z.boolean(), customerVatId: z.string().max(64).nullable().optional(), preTaxAmount: z.number(), taxBehavior: z.string().min(1).max(16)}); export const refundReason = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3)]); export const refund = z.object({id: z.string(), dateCreated: z.string(), userId: z.string().min(1).max(36), ipAddress: z.string().min(1).max(256), reason: refundReason, amount: z.number(), orderId: z.string()}); export const chargeback = z.object({id: z.string(), dateCreated: z.string(), status: z.string().min(1).max(64), reason: z.string().min(1).max(2000), orderId: z.string()}); export const orderDiscordAccount = z.object({id: z.string(), dateCreated: z.string(), orderId: z.string(), discordUserId: z.string().min(1).max(32), username: z.string().min(1).max(64), displayName: z.string().max(64).nullable().optional(), avatarUrl: z.string().max(256).nullable().optional(), accessToken: z.string().min(1).max(512)}); export const storedFile = z.object({id: z.string(), dateCreated: z.string(), friendlyName: z.string().min(1).max(128), ipAddress: z.string().min(1).max(45), userId: z.string().min(1).max(36)}); export const webhookExecutionLog = z.object({id: z.string(), dateCreated: z.string(), url: z.string().max(2048), signature: z.string().max(128), requestBody: z.string().max(8192), responseCode: z.number().int().nullable().optional(), responseBody: z.string().max(8192).nullable().optional(), webhookId: z.string().nullable().optional(), userId: z.string().max(36).nullable().optional(), retryCount: z.number().int(), userAgent: z.string().max(512).nullable().optional(), orderId: z.string().nullable().optional()}); export const stockCalculationMode = z.union([z.literal(0), z.literal(1), z.literal(2)]); export const customFieldOption = z.object({id: z.string(), dateCreated: z.string(), customFieldId: z.string(), label: z.string().max(128), value: z.string().max(64), order: z.number().int().gte(0).lte(2147483647)}); export const customField = z.object({id: z.string(), dateCreated: z.string(), variantId: z.string(), label: z.string().min(1).max(128), identifier: z.string().min(1).max(64), placeholder: z.string().max(256).nullable().optional(), type: z.string().min(1).max(256), isRequired: z.boolean(), hint: z.string().max(512).nullable().optional(), options: z.array(customFieldOption)}); export const volumeDiscount = z.object({id: z.string(), dateCreated: z.string(), variantId: z.string(), quantity: z.number().int().gte(1).lte(2147483647), discountType: volumeDiscountType, discountValue: z.number().gte(0).lte(100000)}); export const variant = z.object({id: z.string(), dateCreated: z.string(), name: z.string().min(3).max(128), productId: z.string(), storeId: z.string(), cost: z.number().gte(0).lte(100000), deliveryTypes: z.array(z.string()), files: z.array(storedFile), dynamicUrl: z.string().max(2048).nullable().optional(), deliveryMessage: z.string().max(4096).nullable().optional(), minimumQuantity: z.number().int(), maximumQuantity: z.number().int(), order: z.number().int(), imageNames: z.array(z.string()), stock: z.number().int(), stockMode: stockCalculationMode, customFields: z.array(customField), volumeDiscounts: z.array(volumeDiscount), disableVolumeDiscountOnCoupon: z.boolean(), metadata: z.string().max(1000).nullable().optional(), billingInterval: billingInterval.optional(), customIntervalDays: z.number().int().nullable().optional()}); export const deliveredItem = z.object({id: z.string(), dateCreated: z.string(), orderId: z.string(), storeId: z.string(), productId: z.string(), variantId: z.string(), customerId: z.string(), type: z.string().max(128), source: z.string().max(128), textContent: z.string().max(10000).nullable().optional(), fileId: z.string().nullable().optional(), webhookExecutionLogId: z.string().nullable().optional(), file: storedFile.optional(), webhookExecutionLog: webhookExecutionLog.optional(), variant: variant.optional()}); export const order = z.object({id: z.string(), dateCreated: z.string(), items: z.array(lineItem), gatewayMetadata: gatewayMetadata, customer: customerDetails, coupon: orderCoupon.optional(), affiliateDiscount: orderDiscount.optional(), tax: orderTax.optional(), refund: refund.optional(), chargeback: chargeback.optional(), discordAccount: orderDiscordAccount.optional(), storeId: z.string(), userId: z.string().min(1).max(36), deliveredItems: z.array(deliveredItem), status: z.string().max(64), gateway: z.string().max(64), amount: z.number(), amountPaid: z.number().nullable().optional(), gatewayFee: z.number().nullable().optional(), platformFee: z.number(), globalGatewayFeePercentage: z.number(), globalGatewayFeeAmount: z.number(), globalGatewayFixedFee: z.number(), globalGatewayFixedFeeAmount: z.number(), affiliateId: z.string().nullable().optional(), realCustomerId: z.string(), currencyCode: z.string().min(1).max(3), userAgent: z.string().min(1).max(512), ipAddress: z.string().min(1).max(45), customFieldAnswers: z.record(z.string(), z.string()).nullable().optional(), isDeliveredManually: z.boolean(), isDeliveryItemsLocked: z.boolean(), deliveredByUserId: z.string().max(36).nullable().optional(), isCustomerAuthenticated: z.boolean(), isMigrated: z.boolean(), returnUrl: z.string().max(2048).nullable().optional(), sendReceipt: z.boolean(), metadata: z.record(z.string(), z.string()).nullable().optional(), source: z.string().max(16), isSubscriptionOrder: z.boolean(), cartRecoverySentAt: z.string().nullable().optional(), renewalForSubscriptionId: z.string().nullable().optional()}); export const customerBillingInformation = z.object({legalEntityType: z.string().min(1).max(1000).nullable().optional(), taxId: z.string().max(50).nullable().optional(), fullName: z.string().max(100).nullable().optional(), addressLine1: z.string().max(200).nullable().optional(), addressLine2: z.string().max(200).nullable().optional(), city: z.string().max(100).nullable().optional(), region: z.string().max(100).nullable().optional(), postalCode: z.string().max(20).nullable().optional(), countryCode: z.string().min(1).max(2)}); export const ipAddressDetails = z.object({status: z.string(), proxy: z.boolean(), hosting: z.boolean(), mobile: z.boolean(), regionName: z.string(), country: z.string(), city: z.string(), isp: z.string()}); export const orderResponse = z.object({order: order, billingInformation: customerBillingInformation.optional(), logs: z.array(webhookExecutionLog), ipInfo: ipAddressDetails, storeId: z.string(), storeName: z.string()}); export const orderResponseResponse = z.object({success: z.boolean(), message: z.string().nullable().optional(), code: z.string().nullable().optional(), data: orderResponse.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 order by ID * * GET /stores/{storeId}/orders/{orderId} */ export const getApiStoresStoreIdOrdersOrderId = async (args: GetApiStoresStoreIdOrdersOrderIdArgs, options?: GetApiStoresStoreIdOrdersOrderIdOptions) => { const {baseUrl = "https://api.komerza.com", fetch: fetchFn = fetch, bearer} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (bearer !== undefined) headers.set('authorization', `Bearer ${bearer}`) const url = `${baseUrl.replace(/\/+$/, '')}/stores/${encodeURIComponent(String(args.storeId))}/orders/${encodeURIComponent(String(args.orderId))}${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(orderResponseResponse, await res.json()) };