diff --git a/generate_models.sh b/generate_models.sh index d6e200a..5314f0b 100755 --- a/generate_models.sh +++ b/generate_models.sh @@ -53,10 +53,12 @@ QUICKTYPE_ARGS=( --src "$SPEC_DIR"/discovery/*.json --src "$SPEC_DIR/schemas/shopping/checkout.create_req.json" --src "$SPEC_DIR/schemas/shopping/checkout.update_req.json" + --src "$SPEC_DIR/schemas/shopping/checkout.complete_req.json" --src "$SPEC_DIR/schemas/shopping/checkout_resp.json" --src "$SPEC_DIR/schemas/shopping/order.json" --src "$SPEC_DIR/schemas/shopping/payment.create_req.json" --src "$SPEC_DIR/schemas/shopping/payment.update_req.json" + --src "$SPEC_DIR/schemas/shopping/payment.complete_req.json" --src "$SPEC_DIR/schemas/shopping/payment_data.json" --src "$SPEC_DIR/schemas/shopping/payment_resp.json" --src "$SPEC_DIR/schemas/shopping/ap2_mandate.json#/\$defs/complete_request_with_ap2" @@ -82,10 +84,7 @@ QUICKTYPE_ARGS=( --src "$SPEC_DIR/schemas/shopping/catalog_lookup.json#/\$defs/get_product_response" --src "$SPEC_DIR/schemas/shopping/catalog_search.json#/\$defs/search_request" --src "$SPEC_DIR/schemas/shopping/catalog_search.json#/\$defs/search_response" - --src "$SPEC_DIR/schemas/shopping/split_payments.json#/\$defs/instrument_group" - --src "$SPEC_DIR/schemas/shopping/split_payments.json#/\$defs/payment_instrument" - --src "$SPEC_DIR/schemas/shopping/split_payments.json#/\$defs/dev.ucp.shopping.checkout" - --src "$SPEC_DIR/schemas/shopping/split_payments.json#/\$defs/dev.ucp.shopping.split_payments" + -o "$TMP_OUTPUT" ) diff --git a/scripts/project-current-ucp-schemas.mjs b/scripts/project-current-ucp-schemas.mjs index 2e22b79..62b7107 100644 --- a/scripts/project-current-ucp-schemas.mjs +++ b/scripts/project-current-ucp-schemas.mjs @@ -51,11 +51,13 @@ const topLevelVariantMap = { "shopping/checkout.json": { create: "shopping/checkout.create_req.json", update: "shopping/checkout.update_req.json", + complete: "shopping/checkout.complete_req.json", response: "shopping/checkout_resp.json", }, "shopping/payment.json": { create: "shopping/payment.create_req.json", update: "shopping/payment.update_req.json", + complete: "shopping/payment.complete_req.json", response: "shopping/payment_resp.json", }, "shopping/order.json": { @@ -87,9 +89,6 @@ const topLevelVariantMap = { "shopping/catalog_search.json": { response: "shopping/catalog_search.json", }, - "shopping/split_payments.json": { - response: "shopping/split_payments.json", - }, }; const alwaysUnifiedTypeFiles = new Set([ @@ -102,7 +101,6 @@ const alwaysUnifiedTypeFiles = new Set([ "binding", "buyer", "business_fulfillment_config", - "business_split_payments_config", "card_credential", "card_payment_instrument", "category", @@ -119,8 +117,6 @@ const alwaysUnifiedTypeFiles = new Set([ "fulfillment_option", "fulfillment_option_base", "input_correlation", - "instrument_group", - "line_item", "link", "media", "merchant_fulfillment_config", @@ -380,6 +376,10 @@ function titleSuffixForOutput(outputRel) { return "Update Request"; } + if (outputRel.endsWith(".complete_req.json")) { + return "Complete Request"; + } + if (outputRel.endsWith("_req.json")) { return "Request"; } @@ -596,8 +596,11 @@ function writeCompatibilityDiscoverySchemas() { required: ["capabilities", "version"], properties: { capabilities: { - type: "array", - items: { $ref: "capability_response.json" }, + type: "object", + additionalProperties: { + type: "array", + items: { $ref: "capability_response.json" }, + }, }, version: { type: "string" }, }, diff --git a/src/extensions.ts b/src/extensions.ts index 09d3598..2d6f446 100644 --- a/src/extensions.ts +++ b/src/extensions.ts @@ -16,7 +16,6 @@ import { CheckoutWithFulfillmentUpdateRequestSchema, OrderSchema, PaymentCredentialSchema, - PaymentSplitPaymentsSchema, } from "./spec_generated"; export const ExtendedPaymentCredentialSchema = PaymentCredentialSchema.extend({ @@ -37,9 +36,6 @@ export const ExtendedCheckoutResponseSchema = CheckoutResponseSchema.extend( .extend(CheckoutWithDiscountResponseSchema.pick({ discounts: true }).shape) .extend(CheckoutWithBuyerConsentResponseSchema.pick({ buyer: true }).shape) .extend({ - payment: PaymentSplitPaymentsSchema.optional(), - order_id: z.string().optional(), - order_permalink_url: z.string().optional(), platform: PlatformConfigSchema.optional(), }); export type ExtendedCheckoutResponse = z.infer< @@ -56,10 +52,7 @@ export const ExtendedCheckoutCreateRequestSchema = .extend( CheckoutWithBuyerConsentCreateRequestSchema.pick({ buyer: true }).shape ) - .extend(CheckoutWithCartCreateRequestSchema.pick({ cart_id: true }).shape) - .extend({ - payment: PaymentSplitPaymentsSchema.optional(), - }); + .extend(CheckoutWithCartCreateRequestSchema.pick({ cart_id: true }).shape); export type ExtendedCheckoutCreateRequest = z.infer< typeof ExtendedCheckoutCreateRequestSchema >; @@ -73,10 +66,7 @@ export const ExtendedCheckoutUpdateRequestSchema = ) .extend( CheckoutWithBuyerConsentUpdateRequestSchema.pick({ buyer: true }).shape - ) - .extend({ - payment: PaymentSplitPaymentsSchema.optional(), - }); + ); export type ExtendedCheckoutUpdateRequest = z.infer< typeof ExtendedCheckoutUpdateRequestSchema >; diff --git a/src/spec_generated.ts b/src/spec_generated.ts index 4cc5174..375784f 100644 --- a/src/spec_generated.ts +++ b/src/spec_generated.ts @@ -24,8 +24,8 @@ export const SeveritySchema = z.enum([ ]); export type Severity = z.infer; -export const TypeSchema = z.enum(["error", "info", "warning"]); -export type Type = z.infer; +export const MessageTypeSchema = z.enum(["error", "info", "warning"]); +export type MessageType = z.infer; // Checkout state indicating the current phase and required action. See Checkout Status // lifecycle documentation for state transition details. @@ -51,6 +51,11 @@ export const AdjustmentStatusSchema = z.enum([ ]); export type AdjustmentStatus = z.infer; +// Delivery method type (shipping, pickup, digital). + +export const MethodTypeEnumSchema = z.enum(["digital", "pickup", "shipping"]); +export type MethodTypeEnum = z.infer; + // Derived status: removed if quantity.total == 0, fulfilled if quantity.total > 0 and // quantity.fulfilled == quantity.total, partial if quantity.total > 0 and // quantity.fulfilled > 0, otherwise processing. @@ -63,23 +68,19 @@ export const LineItemStatusSchema = z.enum([ ]); export type LineItemStatus = z.infer; -// Identifies the party that asserted the current `granted` value for this segment. -// `business` means the value reflects the business's default policy; `platform` means the -// value reflects an explicit buyer decision captured by the platform. -// -// Identifies the party that asserted the current `granted` value. `business` means the -// value reflects the business's default policy; `platform` means the value reflects an -// explicit buyer decision captured by the platform. - -export const SourceSchema = z.enum(["business", "platform"]); -export type Source = z.infer; - // Allocation method. 'each' = applied independently per item. 'across' = split // proportionally by value. export const MethodSchema = z.enum(["across", "each"]); export type Method = z.infer; +// Fulfillment method type. +// +// Fulfillment method type this availability applies to. + +export const MethodTypeSchema = z.enum(["pickup", "shipping"]); +export type MethodType = z.infer; + export const PaymentHandlerResponseSchema = z.object({ config: z.record(z.string(), z.any()), config_schema: z.string(), @@ -147,11 +148,11 @@ export type Buyer = z.infer; export const CheckoutCreateRequestContextSchema = z.object({ address_country: z.string().optional(), address_region: z.string().optional(), - postal_code: z.string().optional(), currency: z.string().optional(), eligibility: z.array(z.string()).optional(), intent: z.string().optional(), language: z.string().optional(), + postal_code: z.string().optional(), }); export type CheckoutCreateRequestContext = z.infer< typeof CheckoutCreateRequestContextSchema @@ -159,20 +160,14 @@ export type CheckoutCreateRequestContext = z.infer< export const LookupRequestContextSchema = CheckoutCreateRequestContextSchema; export type LookupRequestContext = CheckoutCreateRequestContext; -export const ItemResponseSchema = z.object({ +export const ItemReferenceSchema = z.object({ id: z.string(), - image_url: z.string().optional(), - price: z.number(), - title: z.string(), }); -export type ItemResponse = z.infer; - -export const TotalResponseSchema = z.object({ - amount: z.number(), - display_text: z.string().optional(), - type: z.string(), -}); -export type TotalResponse = z.infer; +export type ItemReference = z.infer; +export const ItemCreateRequestSchema = ItemReferenceSchema; +export type ItemCreateRequest = ItemReference; +export const ItemUpdateRequestSchema = ItemReferenceSchema; +export type ItemUpdateRequest = ItemReference; export const PostalAddressSchema = z.object({ address_country: z.string().optional(), @@ -202,14 +197,27 @@ export type CheckoutCreateRequestSignals = z.infer< export const LookupRequestSignalsSchema = CheckoutCreateRequestSignalsSchema; export type LookupRequestSignals = CheckoutCreateRequestSignals; -export const CheckoutResponseLinkSchema = z.object({ +export const ItemResponseSchema = z.object({ + id: z.string(), + image_url: z.string().optional(), + price: z.number(), + title: z.string(), +}); +export type ItemResponse = z.infer; + +export const TotalResponseSchema = z.object({ + amount: z.number(), + display_text: z.string().optional(), + type: z.string(), +}); +export type TotalResponse = z.infer; + +export const LinkSchema = z.object({ title: z.string().optional(), type: z.string(), url: z.string(), }); -export type CheckoutResponseLink = z.infer; -export const ConsentLinkSchema = CheckoutResponseLinkSchema; -export type ConsentLink = CheckoutResponseLink; +export type Link = z.infer; export const CheckoutResponseMessageSchema = z.object({ code: z.string().optional(), @@ -217,7 +225,7 @@ export const CheckoutResponseMessageSchema = z.object({ content_type: ContentTypeSchema.optional(), path: z.string().optional(), severity: SeveritySchema.optional(), - type: TypeSchema, + type: MessageTypeSchema, image_url: z.string().optional(), presentation: z.string().optional(), url: z.string().optional(), @@ -295,21 +303,19 @@ export type CheckoutWithAp2MandateAp2 = z.infer< typeof CheckoutWithAp2MandateAp2Schema >; -export const SegmentValueSchema = z.object({ - granted: z.boolean(), - source: SourceSchema, -}); -export type SegmentValue = z.infer; -export const SegmentClassSchema = SegmentValueSchema; -export type SegmentClass = SegmentValue; - -export const ConsentSegmentSchema = z.object({ - description: z.string(), - granted: z.boolean(), - links: z.array(ConsentLinkSchema).optional(), - source: SourceSchema, +export const ConsentSchema = z.object({ + analytics: z.boolean().optional(), + marketing: z.boolean().optional(), + preferences: z.boolean().optional(), + sale_of_data: z.boolean().optional(), }); -export type ConsentSegment = z.infer; +export type Consent = z.infer; +export const FluffyConsentSchema = ConsentSchema; +export type FluffyConsent = Consent; +export const PurpleConsentSchema = ConsentSchema; +export type PurpleConsent = Consent; +export const TentacledConsentSchema = ConsentSchema; +export type TentacledConsent = Consent; export const CheckoutWithDiscountCreateRequestDiscountsSchema = z.object({ codes: z.array(z.string()).optional(), @@ -346,18 +352,22 @@ export type FulfillmentDestinationRequest = z.infer< typeof FulfillmentDestinationRequestSchema >; -export const DescriptionSchema = z.object({ - html: z.string().optional(), - markdown: z.string().optional(), - plain: z.string().optional(), +export const FulfillmentOptionSchema = z.object({ + carrier: z.string().optional(), + description: z.string().optional(), + earliest_fulfillment_time: z.coerce.date().optional(), + id: z.string(), + latest_fulfillment_time: z.coerce.date().optional(), + title: z.string(), + totals: z.array(TotalResponseSchema), }); -export type Description = z.infer; +export type FulfillmentOption = z.infer; export const FulfillmentAvailableMethodSchema = z.object({ description: z.string().optional(), fulfillable_on: z.union([z.null(), z.string()]).optional(), line_item_ids: z.array(z.string()), - type: z.string(), + type: MethodTypeSchema, }); export type FulfillmentAvailableMethod = z.infer< typeof FulfillmentAvailableMethodSchema @@ -393,6 +403,13 @@ export const CategorySchema = z.object({ }); export type Category = z.infer; +export const DescriptionSchema = z.object({ + html: z.string().optional(), + markdown: z.string().optional(), + plain: z.string().optional(), +}); +export type Description = z.infer; + export const PriceSchema = z.object({ amount: z.number(), currency: z.string(), @@ -422,11 +439,13 @@ export const RatingSchema = z.object({ }); export type Rating = z.infer; -export const AvailabilitySchema = z.object({ +export const PurpleAvailabilitySchema = z.object({ available: z.boolean().optional(), status: z.string().optional(), }); -export type Availability = z.infer; +export type PurpleAvailability = z.infer; +export const FluffyAvailabilitySchema = PurpleAvailabilitySchema; +export type FluffyAvailability = PurpleAvailability; export const PurpleBarcodeSchema = z.object({ type: z.string(), @@ -452,7 +471,7 @@ export const SelectedElementSchema = OptionElementSchema; export type SelectedElement = OptionElement; export const PurpleSellerSchema = z.object({ - links: z.array(CheckoutResponseLinkSchema).optional(), + links: z.array(LinkSchema).optional(), name: z.string().optional(), }); export type PurpleSeller = z.infer; @@ -488,26 +507,6 @@ export type SearchResponsePagination = z.infer< typeof SearchResponsePaginationSchema >; -export const InstrumentGroupSchema = z.object({ - max: z.number().optional(), - min: z.number().optional(), - types: z.array(z.string()), -}); -export type InstrumentGroup = z.infer; - -export const PaymentInstrumentSplitPaymentsSchema = z.object({ - billing_address: PostalAddressSchema.optional(), - credential: PaymentCredentialSchema.optional(), - display: z.record(z.string(), z.any()).optional(), - handler_id: z.string(), - id: z.string(), - type: z.string(), - amount: z.number().optional(), -}); -export type PaymentInstrumentSplitPayments = z.infer< - typeof PaymentInstrumentSplitPaymentsSchema ->; - export const PaymentSchema = z.object({ handlers: z.array(PaymentHandlerResponseSchema).optional(), }); @@ -523,14 +522,11 @@ export const UcpServiceSchema = z.object({ }); export type UcpService = z.infer; -export const LineItemSchema = z.object({ - id: z.string(), - item: ItemResponseSchema, - parent_id: z.string().optional(), +export const LineItemCreateRequestSchema = z.object({ + item: ItemCreateRequestSchema, quantity: z.number(), - totals: z.array(TotalResponseSchema), }); -export type LineItem = z.infer; +export type LineItemCreateRequest = z.infer; export const SelectedPaymentInstrumentSchema = z.object({ billing_address: PostalAddressSchema.optional(), @@ -545,10 +541,20 @@ export type SelectedPaymentInstrument = z.infer< typeof SelectedPaymentInstrumentSchema >; +export const LineItemUpdateRequestSchema = z.object({ + id: z.string().optional(), + item: ItemUpdateRequestSchema, + parent_id: z.string().optional(), + quantity: z.number(), +}); +export type LineItemUpdateRequest = z.infer; + export const PaymentSelectionSchema = z.object({ instruments: z.array(SelectedPaymentInstrumentSchema).optional(), }); export type PaymentSelection = z.infer; +export const PaymentCompleteRequestSchema = PaymentSelectionSchema; +export type PaymentCompleteRequest = PaymentSelection; export const PaymentCreateRequestSchema = PaymentSelectionSchema; export type PaymentCreateRequest = PaymentSelection; export const PaymentResponseSchema = PaymentSelectionSchema; @@ -556,6 +562,15 @@ export type PaymentResponse = PaymentSelection; export const PaymentUpdateRequestSchema = PaymentSelectionSchema; export type PaymentUpdateRequest = PaymentSelection; +export const LineItemResponseSchema = z.object({ + id: z.string(), + item: ItemResponseSchema, + parent_id: z.string().optional(), + quantity: z.number(), + totals: z.array(TotalResponseSchema), +}); +export type LineItemResponse = z.infer; + export const TotalsResponseSchema = z.object({ amount: z.number(), display_text: z.string().optional(), @@ -565,7 +580,7 @@ export const TotalsResponseSchema = z.object({ export type TotalsResponse = z.infer; export const UcpResponseSchema = z.object({ - capabilities: z.array(CapabilityResponseSchema), + capabilities: z.record(z.string(), z.array(CapabilityResponseSchema)), version: z.string(), }); export type UcpResponse = z.infer; @@ -599,7 +614,7 @@ export const ExpectationSchema = z.object({ fulfillable_on: z.string().optional(), id: z.string(), line_items: z.array(ExpectationLineItemSchema), - method_type: z.string(), + method_type: MethodTypeEnumSchema, }); export type Expectation = z.infer; @@ -633,8 +648,8 @@ export const CheckoutWithAp2MandateSchema = z.object({ currency: z.string(), expires_at: z.coerce.date().optional(), id: z.string(), - line_items: z.array(LineItemSchema), - links: z.array(CheckoutResponseLinkSchema), + line_items: z.array(LineItemResponseSchema), + links: z.array(LinkSchema), messages: z.array(CheckoutResponseMessageSchema).optional(), order: OrderConfirmationSchema.optional(), payment: PaymentResponseSchema.optional(), @@ -648,29 +663,28 @@ export type CheckoutWithAp2Mandate = z.infer< typeof CheckoutWithAp2MandateSchema >; -export const ConsentValueSchema = z.object({ - granted: z.boolean(), - segments: z.record(z.string(), SegmentValueSchema).optional(), - source: SourceSchema, -}); -export type ConsentValue = z.infer; -export const ConsentClassSchema = ConsentValueSchema; -export type ConsentClass = ConsentValue; - -export const BuyerConsentSchema = z.object({ - description: z.string(), - granted: z.boolean(), - links: z.array(ConsentLinkSchema).optional(), - segments: z.record(z.string(), ConsentSegmentSchema).optional(), - source: SourceSchema, +export const BuyerWithConsentCreateRequestSchema = z.object({ + email: z.string().optional(), + first_name: z.string().optional(), + last_name: z.string().optional(), + phone_number: z.string().optional(), + consent: PurpleConsentSchema.optional(), }); -export type BuyerConsent = z.infer; +export type BuyerWithConsentCreateRequest = z.infer< + typeof BuyerWithConsentCreateRequestSchema +>; +export const BuyerWithConsentResponseSchema = + BuyerWithConsentCreateRequestSchema; +export type BuyerWithConsentResponse = BuyerWithConsentCreateRequest; +export const BuyerWithConsentUpdateRequestSchema = + BuyerWithConsentCreateRequestSchema; +export type BuyerWithConsentUpdateRequest = BuyerWithConsentCreateRequest; export const CheckoutWithDiscountUpdateRequestSchema = z.object({ attribution: z.record(z.string(), z.string()).optional(), buyer: BuyerSchema.optional(), context: CheckoutCreateRequestContextSchema.optional(), - line_items: z.array(LineItemSchema), + line_items: z.array(LineItemUpdateRequestSchema), payment: PaymentUpdateRequestSchema.optional(), signals: CheckoutCreateRequestSignalsSchema.optional(), discounts: CheckoutWithDiscountUpdateRequestDiscountsSchema.optional(), @@ -678,10 +692,6 @@ export const CheckoutWithDiscountUpdateRequestSchema = z.object({ export type CheckoutWithDiscountUpdateRequest = z.infer< typeof CheckoutWithDiscountUpdateRequestSchema >; -export const CheckoutWithDiscountCreateRequestSchema = - CheckoutWithDiscountUpdateRequestSchema; -export type CheckoutWithDiscountCreateRequest = - CheckoutWithDiscountUpdateRequest; export const AppliedElementSchema = z.object({ allocations: z.array(AllocationElementSchema).optional(), @@ -696,22 +706,31 @@ export const AppliedElementSchema = z.object({ }); export type AppliedElement = z.infer; -export const FulfillmentOptionSchema = z.object({ - description: DescriptionSchema.optional(), +export const FulfillmentGroupSchema = z.object({ id: z.string(), - title: z.string(), - carrier: z.string().optional(), - earliest_fulfillment_time: z.coerce.date().optional(), - latest_fulfillment_time: z.coerce.date().optional(), - totals: z.array(TotalResponseSchema), + line_item_ids: z.array(z.string()), + options: z.array(FulfillmentOptionSchema).optional(), + selected_option_id: z.union([z.null(), z.string()]).optional(), }); -export type FulfillmentOption = z.infer; +export type FulfillmentGroup = z.infer; + +export const FulfillmentMethodResponseSchema = z.object({ + destinations: z.array(FulfillmentDestinationResponseSchema).optional(), + groups: z.array(FulfillmentGroupSchema).optional(), + id: z.string(), + line_item_ids: z.array(z.string()), + selected_destination_id: z.union([z.null(), z.string()]).optional(), + type: MethodTypeSchema, +}); +export type FulfillmentMethodResponse = z.infer< + typeof FulfillmentMethodResponseSchema +>; export const CartCreateRequestSchema = z.object({ attribution: z.record(z.string(), z.string()).optional(), buyer: BuyerSchema.optional(), context: CheckoutCreateRequestContextSchema.optional(), - line_items: z.array(LineItemSchema), + line_items: z.array(LineItemCreateRequestSchema), signals: CheckoutCreateRequestSignalsSchema.optional(), }); export type CartCreateRequest = z.infer; @@ -721,7 +740,7 @@ export const CartUpdateRequestSchema = z.object({ buyer: BuyerSchema.optional(), context: CheckoutCreateRequestContextSchema.optional(), id: z.string(), - line_items: z.array(LineItemSchema), + line_items: z.array(LineItemUpdateRequestSchema), signals: CheckoutCreateRequestSignalsSchema.optional(), }); export type CartUpdateRequest = z.infer; @@ -734,8 +753,8 @@ export const CartResponseSchema = z.object({ currency: z.string(), expires_at: z.coerce.date().optional(), id: z.string(), - line_items: z.array(LineItemSchema), - links: z.array(CheckoutResponseLinkSchema).optional(), + line_items: z.array(LineItemResponseSchema), + links: z.array(LinkSchema).optional(), messages: z.array(CheckoutResponseMessageSchema).optional(), signals: CheckoutCreateRequestSignalsSchema.optional(), totals: z.array(TotalsResponseSchema), @@ -747,15 +766,13 @@ export const CheckoutWithCartUpdateRequestSchema = z.object({ attribution: z.record(z.string(), z.string()).optional(), buyer: BuyerSchema.optional(), context: CheckoutCreateRequestContextSchema.optional(), - line_items: z.array(LineItemSchema), + line_items: z.array(LineItemUpdateRequestSchema), payment: PaymentUpdateRequestSchema.optional(), signals: CheckoutCreateRequestSignalsSchema.optional(), }); export type CheckoutWithCartUpdateRequest = z.infer< typeof CheckoutWithCartUpdateRequestSchema >; -export const CheckoutCreateRequestSchema = CheckoutWithCartUpdateRequestSchema; -export type CheckoutCreateRequest = CheckoutWithCartUpdateRequest; export const CheckoutUpdateRequestSchema = CheckoutWithCartUpdateRequestSchema; export type CheckoutUpdateRequest = CheckoutWithCartUpdateRequest; @@ -767,8 +784,8 @@ export const CheckoutWithCartResponseSchema = z.object({ currency: z.string(), expires_at: z.coerce.date().optional(), id: z.string(), - line_items: z.array(LineItemSchema), - links: z.array(CheckoutResponseLinkSchema), + line_items: z.array(LineItemResponseSchema), + links: z.array(LinkSchema), messages: z.array(CheckoutResponseMessageSchema).optional(), order: OrderConfirmationSchema.optional(), payment: PaymentResponseSchema.optional(), @@ -831,11 +848,6 @@ export const SearchRequestSchema = z.object({ }); export type SearchRequest = z.infer; -export const PaymentSplitPaymentsSchema = z.object({ - instruments: z.array(PaymentInstrumentSplitPaymentsSchema).optional(), -}); -export type PaymentSplitPayments = z.infer; - export const UcpSchema = z.object({ capabilities: z.array(CapabilityDiscoverySchema), services: z.record(z.string(), UcpServiceSchema), @@ -843,6 +855,15 @@ export const UcpSchema = z.object({ }); export type Ucp = z.infer; +export const CheckoutCompleteRequestSchema = z.object({ + attribution: z.record(z.string(), z.string()).optional(), + payment: PaymentCompleteRequestSchema, + signals: CheckoutCreateRequestSignalsSchema.optional(), +}); +export type CheckoutCompleteRequest = z.infer< + typeof CheckoutCompleteRequestSchema +>; + export const CheckoutResponseSchema = z.object({ attribution: z.record(z.string(), z.string()).optional(), buyer: BuyerSchema.optional(), @@ -851,8 +872,8 @@ export const CheckoutResponseSchema = z.object({ currency: z.string(), expires_at: z.coerce.date().optional(), id: z.string(), - line_items: z.array(LineItemSchema), - links: z.array(CheckoutResponseLinkSchema), + line_items: z.array(LineItemResponseSchema), + links: z.array(LinkSchema), messages: z.array(CheckoutResponseMessageSchema).optional(), order: OrderConfirmationSchema.optional(), payment: PaymentResponseSchema.optional(), @@ -869,37 +890,63 @@ export const FulfillmentSchema = z.object({ }); export type Fulfillment = z.infer; -export const BuyerWithConsentCreateRequestSchema = z.object({ - email: z.string().optional(), - first_name: z.string().optional(), - last_name: z.string().optional(), - phone_number: z.string().optional(), - consent: z.record(z.string(), ConsentValueSchema).optional(), +export const CheckoutWithBuyerConsentCreateRequestSchema = z.object({ + attribution: z.record(z.string(), z.string()).optional(), + buyer: BuyerWithConsentCreateRequestSchema.optional(), + context: CheckoutCreateRequestContextSchema.optional(), + line_items: z.array(LineItemCreateRequestSchema), + payment: PaymentCreateRequestSchema.optional(), + signals: CheckoutCreateRequestSignalsSchema.optional(), }); -export type BuyerWithConsentCreateRequest = z.infer< - typeof BuyerWithConsentCreateRequestSchema +export type CheckoutWithBuyerConsentCreateRequest = z.infer< + typeof CheckoutWithBuyerConsentCreateRequestSchema >; -export const BuyerWithConsentUpdateRequestSchema = z.object({ - email: z.string().optional(), - first_name: z.string().optional(), - last_name: z.string().optional(), - phone_number: z.string().optional(), - consent: z.record(z.string(), ConsentClassSchema).optional(), +export const CheckoutWithBuyerConsentUpdateRequestSchema = z.object({ + attribution: z.record(z.string(), z.string()).optional(), + buyer: BuyerWithConsentUpdateRequestSchema.optional(), + context: CheckoutCreateRequestContextSchema.optional(), + line_items: z.array(LineItemUpdateRequestSchema), + payment: PaymentUpdateRequestSchema.optional(), + signals: CheckoutCreateRequestSignalsSchema.optional(), }); -export type BuyerWithConsentUpdateRequest = z.infer< - typeof BuyerWithConsentUpdateRequestSchema +export type CheckoutWithBuyerConsentUpdateRequest = z.infer< + typeof CheckoutWithBuyerConsentUpdateRequestSchema >; -export const BuyerWithConsentResponseSchema = z.object({ - email: z.string().optional(), - first_name: z.string().optional(), - last_name: z.string().optional(), - phone_number: z.string().optional(), - consent: z.record(z.string(), BuyerConsentSchema).optional(), +export const CheckoutWithBuyerConsentResponseSchema = z.object({ + attribution: z.record(z.string(), z.string()).optional(), + buyer: BuyerWithConsentResponseSchema.optional(), + context: CheckoutCreateRequestContextSchema.optional(), + continue_url: z.string().optional(), + currency: z.string(), + expires_at: z.coerce.date().optional(), + id: z.string(), + line_items: z.array(LineItemResponseSchema), + links: z.array(LinkSchema), + messages: z.array(CheckoutResponseMessageSchema).optional(), + order: OrderConfirmationSchema.optional(), + payment: PaymentResponseSchema.optional(), + signals: CheckoutCreateRequestSignalsSchema.optional(), + status: CheckoutResponseStatusSchema, + totals: z.array(TotalsResponseSchema), + ucp: UcpResponseSchema, +}); +export type CheckoutWithBuyerConsentResponse = z.infer< + typeof CheckoutWithBuyerConsentResponseSchema +>; + +export const CheckoutWithDiscountCreateRequestSchema = z.object({ + attribution: z.record(z.string(), z.string()).optional(), + buyer: BuyerSchema.optional(), + context: CheckoutCreateRequestContextSchema.optional(), + line_items: z.array(LineItemCreateRequestSchema), + payment: PaymentCreateRequestSchema.optional(), + signals: CheckoutCreateRequestSignalsSchema.optional(), + discounts: CheckoutWithDiscountCreateRequestDiscountsSchema.optional(), }); -export type BuyerWithConsentResponse = z.infer< - typeof BuyerWithConsentResponseSchema +export type CheckoutWithDiscountCreateRequest = z.infer< + typeof CheckoutWithDiscountCreateRequestSchema >; export const CheckoutWithDiscountResponseDiscountsSchema = z.object({ @@ -910,31 +957,28 @@ export type CheckoutWithDiscountResponseDiscounts = z.infer< typeof CheckoutWithDiscountResponseDiscountsSchema >; -export const FulfillmentGroupSchema = z.object({ - id: z.string(), - line_item_ids: z.array(z.string()), - options: z.array(FulfillmentOptionSchema).optional(), - selected_option_id: z.union([z.null(), z.string()]).optional(), -}); -export type FulfillmentGroup = z.infer; - -export const FulfillmentMethodResponseSchema = z.object({ - destinations: z.array(FulfillmentDestinationResponseSchema).optional(), +export const FulfillmentMethodCreateRequestSchema = z.object({ + destinations: z.array(FulfillmentDestinationRequestSchema).optional(), groups: z.array(FulfillmentGroupSchema).optional(), - id: z.string(), - line_item_ids: z.array(z.string()), + line_item_ids: z.array(z.string()).optional(), selected_destination_id: z.union([z.null(), z.string()]).optional(), - type: z.string(), + type: MethodTypeSchema, }); -export type FulfillmentMethodResponse = z.infer< - typeof FulfillmentMethodResponseSchema +export type FulfillmentMethodCreateRequest = z.infer< + typeof FulfillmentMethodCreateRequestSchema >; +export const FulfillmentResponseSchema = z.object({ + available_methods: z.array(FulfillmentAvailableMethodSchema).optional(), + methods: z.array(FulfillmentMethodResponseSchema).optional(), +}); +export type FulfillmentResponse = z.infer; + export const CheckoutWithCartCreateRequestSchema = z.object({ attribution: z.record(z.string(), z.string()).optional(), buyer: BuyerSchema.optional(), context: CheckoutCreateRequestContextSchema.optional(), - line_items: z.array(LineItemSchema), + line_items: z.array(LineItemCreateRequestSchema), payment: PaymentCreateRequestSchema.optional(), signals: CheckoutCreateRequestSignalsSchema.optional(), cart_id: z.string().optional(), @@ -953,7 +997,7 @@ export const LookupRequestSchema = z.object({ export type LookupRequest = z.infer; export const CatalogLookupSchema = z.object({ - availability: AvailabilitySchema.optional(), + availability: PurpleAvailabilitySchema.optional(), barcodes: z.array(PurpleBarcodeSchema).optional(), categories: z.array(CategorySchema).optional(), description: DescriptionSchema, @@ -976,7 +1020,7 @@ export const CatalogLookupSchema = z.object({ export type CatalogLookup = z.infer; export const VariantSchema = z.object({ - availability: AvailabilitySchema.optional(), + availability: FluffyAvailabilitySchema.optional(), barcodes: z.array(FluffyBarcodeSchema).optional(), categories: z.array(CategorySchema).optional(), description: DescriptionSchema, @@ -1015,28 +1059,6 @@ export const SearchResponseProductSchema = z.object({ }); export type SearchResponseProduct = z.infer; -export const CheckoutWithSplitPaymentsSchema = z.object({ - attribution: z.record(z.string(), z.string()).optional(), - buyer: BuyerSchema.optional(), - context: CheckoutCreateRequestContextSchema.optional(), - continue_url: z.string().optional(), - currency: z.string(), - expires_at: z.coerce.date().optional(), - id: z.string(), - line_items: z.array(LineItemSchema), - links: z.array(CheckoutResponseLinkSchema), - messages: z.array(CheckoutResponseMessageSchema).optional(), - order: OrderConfirmationSchema.optional(), - payment: PaymentSplitPaymentsSchema.optional(), - signals: CheckoutCreateRequestSignalsSchema.optional(), - status: CheckoutResponseStatusSchema, - totals: z.array(TotalsResponseSchema), - ucp: UcpResponseSchema, -}); -export type CheckoutWithSplitPayments = z.infer< - typeof CheckoutWithSplitPaymentsSchema ->; - export const UcpDiscoveryProfileSchema = z.object({ payment: PaymentSchema.optional(), signing_keys: z.array(SigningKeySchema).optional(), @@ -1044,6 +1066,16 @@ export const UcpDiscoveryProfileSchema = z.object({ }); export type UcpDiscoveryProfile = z.infer; +export const CheckoutCreateRequestSchema = z.object({ + attribution: z.record(z.string(), z.string()).optional(), + buyer: BuyerSchema.optional(), + context: CheckoutCreateRequestContextSchema.optional(), + line_items: z.array(LineItemCreateRequestSchema), + payment: PaymentCreateRequestSchema.optional(), + signals: CheckoutCreateRequestSignalsSchema.optional(), +}); +export type CheckoutCreateRequest = z.infer; + export const OrderSchema = z.object({ adjustments: z.array(AdjustmentSchema).optional(), attribution: z.record(z.string(), z.string()).optional(), @@ -1060,40 +1092,16 @@ export const OrderSchema = z.object({ }); export type Order = z.infer; -export const CheckoutWithBuyerConsentCreateRequestSchema = z.object({ - attribution: z.record(z.string(), z.string()).optional(), - buyer: BuyerWithConsentCreateRequestSchema.optional(), - context: CheckoutCreateRequestContextSchema.optional(), - line_items: z.array(LineItemSchema), - payment: PaymentCreateRequestSchema.optional(), - signals: CheckoutCreateRequestSignalsSchema.optional(), -}); -export type CheckoutWithBuyerConsentCreateRequest = z.infer< - typeof CheckoutWithBuyerConsentCreateRequestSchema ->; - -export const CheckoutWithBuyerConsentUpdateRequestSchema = z.object({ - attribution: z.record(z.string(), z.string()).optional(), - buyer: BuyerWithConsentUpdateRequestSchema.optional(), - context: CheckoutCreateRequestContextSchema.optional(), - line_items: z.array(LineItemSchema), - payment: PaymentUpdateRequestSchema.optional(), - signals: CheckoutCreateRequestSignalsSchema.optional(), -}); -export type CheckoutWithBuyerConsentUpdateRequest = z.infer< - typeof CheckoutWithBuyerConsentUpdateRequestSchema ->; - -export const CheckoutWithBuyerConsentResponseSchema = z.object({ +export const CheckoutWithDiscountResponseSchema = z.object({ attribution: z.record(z.string(), z.string()).optional(), - buyer: BuyerWithConsentResponseSchema.optional(), + buyer: BuyerSchema.optional(), context: CheckoutCreateRequestContextSchema.optional(), continue_url: z.string().optional(), currency: z.string(), expires_at: z.coerce.date().optional(), id: z.string(), - line_items: z.array(LineItemSchema), - links: z.array(CheckoutResponseLinkSchema), + line_items: z.array(LineItemResponseSchema), + links: z.array(LinkSchema), messages: z.array(CheckoutResponseMessageSchema).optional(), order: OrderConfirmationSchema.optional(), payment: PaymentResponseSchema.optional(), @@ -1101,12 +1109,31 @@ export const CheckoutWithBuyerConsentResponseSchema = z.object({ status: CheckoutResponseStatusSchema, totals: z.array(TotalsResponseSchema), ucp: UcpResponseSchema, + discounts: CheckoutWithDiscountResponseDiscountsSchema.optional(), }); -export type CheckoutWithBuyerConsentResponse = z.infer< - typeof CheckoutWithBuyerConsentResponseSchema +export type CheckoutWithDiscountResponse = z.infer< + typeof CheckoutWithDiscountResponseSchema >; -export const CheckoutWithDiscountResponseSchema = z.object({ +export const FulfillmentRequestSchema = z.object({ + methods: z.array(FulfillmentMethodCreateRequestSchema).optional(), +}); +export type FulfillmentRequest = z.infer; + +export const CheckoutWithFulfillmentUpdateRequestSchema = z.object({ + attribution: z.record(z.string(), z.string()).optional(), + buyer: BuyerSchema.optional(), + context: CheckoutCreateRequestContextSchema.optional(), + line_items: z.array(LineItemUpdateRequestSchema), + payment: PaymentUpdateRequestSchema.optional(), + signals: CheckoutCreateRequestSignalsSchema.optional(), + fulfillment: FulfillmentRequestSchema.optional(), +}); +export type CheckoutWithFulfillmentUpdateRequest = z.infer< + typeof CheckoutWithFulfillmentUpdateRequestSchema +>; + +export const CheckoutWithFulfillmentResponseSchema = z.object({ attribution: z.record(z.string(), z.string()).optional(), buyer: BuyerSchema.optional(), context: CheckoutCreateRequestContextSchema.optional(), @@ -1114,8 +1141,8 @@ export const CheckoutWithDiscountResponseSchema = z.object({ currency: z.string(), expires_at: z.coerce.date().optional(), id: z.string(), - line_items: z.array(LineItemSchema), - links: z.array(CheckoutResponseLinkSchema), + line_items: z.array(LineItemResponseSchema), + links: z.array(LinkSchema), messages: z.array(CheckoutResponseMessageSchema).optional(), order: OrderConfirmationSchema.optional(), payment: PaymentResponseSchema.optional(), @@ -1123,29 +1150,12 @@ export const CheckoutWithDiscountResponseSchema = z.object({ status: CheckoutResponseStatusSchema, totals: z.array(TotalsResponseSchema), ucp: UcpResponseSchema, - discounts: CheckoutWithDiscountResponseDiscountsSchema.optional(), -}); -export type CheckoutWithDiscountResponse = z.infer< - typeof CheckoutWithDiscountResponseSchema ->; - -export const FulfillmentMethodCreateRequestSchema = z.object({ - destinations: z.array(FulfillmentDestinationRequestSchema).optional(), - groups: z.array(FulfillmentGroupSchema).optional(), - line_item_ids: z.array(z.string()).optional(), - selected_destination_id: z.union([z.null(), z.string()]).optional(), - type: z.string(), + fulfillment: FulfillmentResponseSchema.optional(), }); -export type FulfillmentMethodCreateRequest = z.infer< - typeof FulfillmentMethodCreateRequestSchema +export type CheckoutWithFulfillmentResponse = z.infer< + typeof CheckoutWithFulfillmentResponseSchema >; -export const FulfillmentResponseSchema = z.object({ - available_methods: z.array(FulfillmentAvailableMethodSchema).optional(), - methods: z.array(FulfillmentMethodResponseSchema).optional(), -}); -export type FulfillmentResponse = z.infer; - export const LookupResponseProductSchema = z.object({ categories: z.array(CategorySchema).optional(), description: DescriptionSchema, @@ -1191,49 +1201,17 @@ export const SearchResponseSchema = z.object({ }); export type SearchResponse = z.infer; -export const FulfillmentRequestSchema = z.object({ - methods: z.array(FulfillmentMethodCreateRequestSchema).optional(), -}); -export type FulfillmentRequest = z.infer; - -export const CheckoutWithFulfillmentUpdateRequestSchema = z.object({ +export const CheckoutWithFulfillmentCreateRequestSchema = z.object({ attribution: z.record(z.string(), z.string()).optional(), buyer: BuyerSchema.optional(), context: CheckoutCreateRequestContextSchema.optional(), - line_items: z.array(LineItemSchema), - payment: PaymentUpdateRequestSchema.optional(), + line_items: z.array(LineItemCreateRequestSchema), + payment: PaymentCreateRequestSchema.optional(), signals: CheckoutCreateRequestSignalsSchema.optional(), fulfillment: FulfillmentRequestSchema.optional(), }); -export type CheckoutWithFulfillmentUpdateRequest = z.infer< - typeof CheckoutWithFulfillmentUpdateRequestSchema ->; -export const CheckoutWithFulfillmentCreateRequestSchema = - CheckoutWithFulfillmentUpdateRequestSchema; -export type CheckoutWithFulfillmentCreateRequest = - CheckoutWithFulfillmentUpdateRequest; - -export const CheckoutWithFulfillmentResponseSchema = z.object({ - attribution: z.record(z.string(), z.string()).optional(), - buyer: BuyerSchema.optional(), - context: CheckoutCreateRequestContextSchema.optional(), - continue_url: z.string().optional(), - currency: z.string(), - expires_at: z.coerce.date().optional(), - id: z.string(), - line_items: z.array(LineItemSchema), - links: z.array(CheckoutResponseLinkSchema), - messages: z.array(CheckoutResponseMessageSchema).optional(), - order: OrderConfirmationSchema.optional(), - payment: PaymentResponseSchema.optional(), - signals: CheckoutCreateRequestSignalsSchema.optional(), - status: CheckoutResponseStatusSchema, - totals: z.array(TotalsResponseSchema), - ucp: UcpResponseSchema, - fulfillment: FulfillmentResponseSchema.optional(), -}); -export type CheckoutWithFulfillmentResponse = z.infer< - typeof CheckoutWithFulfillmentResponseSchema +export type CheckoutWithFulfillmentCreateRequest = z.infer< + typeof CheckoutWithFulfillmentCreateRequestSchema >; export const LookupResponseSchema = z.object({