[**@wocart/storefront v3.1.0**](../../README)

***

[@wocart/storefront](../../README) / [astro](../README) / placeOrderInput

# Variable: placeOrderInput

> `const` **placeOrderInput**: `z.ZodObject`\<\{ `address`: `z.ZodOptional`\<`z.ZodString`\>; `checkoutKey`: `z.ZodPreprocess`\<`z.ZodOptional`\<`z.ZodString`\>, `unknown`\>; `communeId`: `z.ZodString`; `couponCode`: `z.ZodPreprocess`\<`z.ZodOptional`\<`z.ZodString`\>, `unknown`\>; `customerName`: `z.ZodString`; `customFieldResponses`: `z.ZodPreprocess`\<`z.ZodOptional`\<`z.ZodUnion`\<readonly \[`z.ZodString`, `z.ZodArray`\<`z.ZodUnknown`\>\]\>\>, `unknown`\>; `deliveryType`: `z.ZodDefault`\<`z.ZodEnum`\<\{ `home`: `"home"`; `stop_desk`: `"stop_desk"`; \}\>\>; `email`: `z.ZodPreprocess`\<`z.ZodOptional`\<`z.ZodString`\>, `unknown`\>; `fbc`: `z.ZodPreprocess`\<`z.ZodOptional`\<`z.ZodString`\>, `unknown`\>; `fbp`: `z.ZodPreprocess`\<`z.ZodOptional`\<`z.ZodString`\>, `unknown`\>; `items`: `z.ZodPreprocess`\<`z.ZodOptional`\<`z.ZodArray`\<`z.ZodObject`\<\{ `offerId`: `z.ZodPreprocess`\<`z.ZodOptional`\<`z.ZodString`\>, `unknown`\>; `pricePerUnit`: `z.ZodOptional`\<`z.ZodCoercedNumber`\<`unknown`\>\>; `productId`: `z.ZodString`; `productName`: `z.ZodString`; `quantity`: `z.ZodCoercedNumber`\<`unknown`\>; `variantId`: `z.ZodPreprocess`\<`z.ZodOptional`\<`z.ZodString`\>, `unknown`\>; `variantLabel`: `z.ZodPreprocess`\<`z.ZodOptional`\<`z.ZodString`\>, `unknown`\>; \}, `z.core.$strip`\>\>\>, `unknown`\>; `landingPageSlug`: `z.ZodPreprocess`\<`z.ZodOptional`\<`z.ZodString`\>, `unknown`\>; `notes`: `z.ZodOptional`\<`z.ZodString`\>; `offerId`: `z.ZodPreprocess`\<`z.ZodOptional`\<`z.ZodString`\>, `unknown`\>; `otpToken`: `z.ZodPreprocess`\<`z.ZodOptional`\<`z.ZodString`\>, `unknown`\>; `phone`: `z.ZodPreprocess`\<`z.ZodString`, `unknown`\>; `pricePerUnit`: `z.ZodPreprocess`\<`z.ZodOptional`\<`z.ZodCoercedNumber`\<`unknown`\>\>, `unknown`\>; `productId`: `z.ZodPreprocess`\<`z.ZodOptional`\<`z.ZodString`\>, `unknown`\>; `productName`: `z.ZodPreprocess`\<`z.ZodOptional`\<`z.ZodString`\>, `unknown`\>; `quantity`: `z.ZodDefault`\<`z.ZodCoercedNumber`\<`unknown`\>\>; `turnstileToken`: `z.ZodPreprocess`\<`z.ZodOptional`\<`z.ZodString`\>, `unknown`\>; `variantId`: `z.ZodPreprocess`\<`z.ZodOptional`\<`z.ZodString`\>, `unknown`\>; `variantLabel`: `z.ZodPreprocess`\<`z.ZodOptional`\<`z.ZodString`\>, `unknown`\>; `variantSelections`: `z.ZodPreprocess`\<`z.ZodOptional`\<`z.ZodArray`\<`z.ZodObject`\<\{ `variantId`: `z.ZodString`; `variantLabel`: `z.ZodOptional`\<`z.ZodString`\>; \}, `z.core.$strip`\>\>\>, `unknown`\>; `wilayaId`: `z.ZodCoercedNumber`\<`unknown`\>; \}, `z.core.$strip`\>

The order form's input whitelist.

zod STRIPS every key this schema does not name, which is why a field the
storefront renders but this schema forgets silently never reaches
the server. Form parsing needs a plain object schema
(no .superRefine), so the basket-or-product rule lives in
executePlaceOrder — failing there turns a bare 400 into a field error the
form can actually render.
